<?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>150994</bug_id>
          
          <creation_ts>2015-11-06 20:11:13 -0800</creation_ts>
          <short_desc>B3-&gt;Air lowering should do pattern matching the old fashioned way</short_desc>
          <delta_ts>2015-11-07 18:11:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140148</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-06 20:11:13 -0800</bug_when>
    <thetext>C++ and switch statements for the win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140149</commentid>
    <comment_count>1</comment_count>
      <attachid>264993</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-06 20:12:27 -0800</bug_when>
    <thetext>Created attachment 264993
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140167</commentid>
    <comment_count>2</comment_count>
      <attachid>264996</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-06 22:15:18 -0800</bug_when>
    <thetext>Created attachment 264996
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140168</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-06 22:18:19 -0800</bug_when>
    <thetext>Attachment 264996 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:448:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3LowerToAir.cpp:1155:  Missing space before {  [whitespace/braces] [5]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140197</commentid>
    <comment_count>4</comment_count>
      <attachid>264996</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-07 13:01:02 -0800</bug_when>
    <thetext>Comment on attachment 264996
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140224</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-07 18:11:40 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192135</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264993</attachid>
            <date>2015-11-06 20:12:27 -0800</date>
            <delta_ts>2015-11-06 22:15:18 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33018</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MjEyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTIzMSwxNCArMTIzMSw2IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICkKIAogYWRkX2N1c3Rv
bV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L0IzTG93ZXJpbmdNYXRjaGVyLmgKLSAgICBNQUlOX0RFUEVOREVOQ1kgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCi0gICAgREVQRU5EUyAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCi0gICAgQ09N
TUFORCAke1JVQllfRVhFQ1VUQUJMRX0gJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2IzL2dlbmVyYXRl
X3BhdHRlcm5fbWF0Y2hlci5yYiAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYjMvQjNMb3dlcmluZ01h
dGNoZXIucGF0dGVybnMgVkVSQkFUSU0KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0RFUklWRURf
U09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9Ci0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKICAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9BaXJPcGNvZGUu
aCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0Fpck9wY29kZUdlbmVyYXRl
ZC5oCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7SkFWQVNDUklQVENPUkVfRElSfS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKICAgICBERVBFTkRTICR7SkFWQVNDUklQVENPUkVfRElSfS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgpAQCAtMTI1MCw3ICsxMjQyLDYgQEAgbGlzdChBUFBFTkQgSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vQWlyT3Bjb2RlLmgKICAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L0Fpck9wY29kZUdlbmVyYXRlZC5oCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQ
VENPUkVfRElSfS9CM0FkZHJlc3NNYXRjaGVyLmgKLSAgICAke0RFUklWRURfU09VUkNFU19KQVZB
U0NSSVBUQ09SRV9ESVJ9L0IzTG93ZXJpbmdNYXRjaGVyLmgKICkKIAogYWRkX2N1c3RvbV9jb21t
YW5kKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJl
dmlzaW9uIDE5MjEyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIGFsbCA6IFwKICAgICBMZXhlci5s
dXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAgICBSZWdFeHBKaXRUYWJsZXMuaCBcCi0g
ICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCiAgICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwKICAgICBB
aXJPcGNvZGUuaCBcCiAjCkBAIC0yNjUsOCArMjY0LDYgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0t
b3V0cHV0RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1Jf
U1BFQ0lGSUNBVElPTlMpCiAKLUIzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xv
d2VyaW5nTWF0Y2hlci5wYXR0ZXJucwotCSQoUlVCWSkgJF4gCiBCM0FkZHJlc3NNYXRjaGVyLmg6
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCiAJJChSVUJZKSAkXgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24g
MTkyMTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxMiBAQAogI2luY2x1ZGUgIkFpckluc2VydGlvblNl
dC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90
LmgiCi0jaW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRS
ZWdWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJC
M0NoZWNrU3BlY2lhbC5oIgogI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgogI2luY2x1ZGUg
IkIzSW5kZXhNYXAuaCIKICNpbmNsdWRlICJCM0luZGV4U2V0LmgiCi0jaW5jbHVkZSAiQjNMb3dl
cmluZ01hdGNoZXIuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQ
YXRjaHBvaW50U3BlY2lhbC5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCkBAIC02
NSw3ICs2Myw2IEBAIHB1YmxpYzoKICAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52YWx1
ZXMoKS5zaXplKCkpCiAgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkpCiAg
ICAgICAgICwgdXNlQ291bnRzKHByb2NlZHVyZSkKLSAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3Io
KnRoaXMpCiAgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKICAgICAgICAgLCBjb2RlKGNv
ZGUpCiAgICAgewpAQCAtMTAyLDExICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBp
bnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOwogICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBkZWVwRHVtcChjdXJy
ZW50VmFsdWUpLCAiOlxuIik7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dl
cmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCAqdGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBs
b3dlciAiLCBkZWVwRHVtcChjdXJyZW50VmFsdWUpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbG93ZXIoKTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0cy5sYXN0KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgaW5zdCwgIlxuIik7CkBAIC0zNjMsNiAr
MzU2LDExIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGlu
dG8gYW4gYWRkcmVzcy4KICAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcykKICAg
ICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBB
ZGQ6IHsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBhZGRyZXNzU2Vs
ZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzID0gQXJnKCk7CiAgICAgICAgIGlmIChydW5BZGRyZXNzTWF0
Y2hlcihhZGRyZXNzLCBhZGRyZXNzU2VsZWN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3M7CkBAIC0zNzAsMTggKzM2OCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIEFyZzo6YWRkcih0bXAoYWRkcmVzcykpOwogICAgIH0KIAotICAgIEFy
ZyBlZmZlY3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBWYWx1ZSogbWVtb3J5VmFsdWUpCi0gICAg
ewotICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcihhZGRyZXNzKTsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdCk7Ci0KLSAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnlWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCktPm9mZnNldCgpOwotICAgICAgICBBcmcgb2Zmc2V0UmVzdWx0ID0g
cmVzdWx0LndpdGhPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvZmZzZXRSZXN1bHQpCi0g
ICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKLSAgICAg
ICAgcmV0dXJuIG9mZnNldFJlc3VsdDsKLSAgICB9Ci0KICAgICAvLyBUaGlzIGdpdmVzIHlvdSB0
aGUgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2Fk
IG9yIFN0b3JlLCB0aGVuCiAgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KICAgICBBcmcgYWRkcihW
YWx1ZSogbWVtb3J5VmFsdWUpCkBAIC0zOTAsNyArMzc2LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKIAotICAgICAgICByZXR1cm4g
ZWZmZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCksIHZhbHVlKTsKKyAgICAgICAgQXJnIHJl
c3VsdCA9IGVmZmVjdGl2ZUFkZHIodmFsdWUtPmxhc3RDaGlsZCgpKTsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCk7CisgICAgICAgIAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeVZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKS0+b2Zmc2V0KCk7CisgICAgICAgIEFyZyBvZmZzZXRSZXN1bHQg
PSByZXN1bHQud2l0aE9mZnNldChvZmZzZXQpOworICAgICAgICBpZiAoIW9mZnNldFJlc3VsdCkK
KyAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIodG1wKHZhbHVlLT5sYXN0Q2hpbGQoKSksIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRSZXN1bHQ7CiAgICAgfQogCiAgICAgQXJnUHJv
bWlzZSBsb2FkUHJvbWlzZShWYWx1ZSogbG9hZFZhbHVlLCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUp
CkBAIC00MTYsMTYgKzQwOSw1NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcmcoKTsKICAg
ICB9CiAKLSAgICBBcmcgaW1tT3JUbXAoVmFsdWUqIHZhbHVlKQotICAgIHsKKyAgICBBcmcgaW1t
Rm9yTW92ZShWYWx1ZSogdmFsdWUpIHsKICAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBpbW0odmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJ
bnQ2NCgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tNjQodmFsdWUtPmFzSW50NjQoKSk7
CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tT3JUbXBGb3JNb3Zl
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tRm9yTW92
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gdG1w
KHZhbHVlKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGU+CisgICAg
Ly8gQnkgY29udmVudGlvbiwgd2UgdXNlIE9vcHMgdG8gbWVhbiAiSSBkb24ndCBrbm93Ii4KKyAg
ICBBaXI6Ok9wY29kZSB0cnlPcGNvZGVGb3JUeXBlKAorICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIEFpcjo6T3Bjb2RlIG9wY29kZURvdWJsZSwgVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlOworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIG9wY29kZSA9IG9w
Y29kZTMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAg
ICAgICBvcGNvZGUgPSBvcGNvZGU2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERvdWJsZToKKyAgICAgICAgICAgIG9wY29kZSA9IG9wY29kZURvdWJsZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgb3Bjb2RlID0gQWlyOjpPb3Bz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb3Bjb2Rl
OworICAgIH0KKworICAgIEFpcjo6T3Bjb2RlIG9wY29kZUZvclR5cGUoCisgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2NCwgQWlyOjpPcGNvZGUgb3Bjb2Rl
RG91YmxlLCBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0
cnlPcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgb3Bjb2RlRG91YmxlLCB0eXBlKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlICE9IEFpcjo6T29wcyk7CisgICAgICAgIHJl
dHVybiBvcGNvZGU7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlMzIs
IEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBBaXI6Ok9wY29kZSBvcGNvZGVEb3VibGU+CiAgICAgdm9p
ZCBhcHBlbmRVbk9wKFZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIG9w
Y29kZSA9IG9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBvcGNvZGVEb3VibGUsIHZh
bHVlLT50eXBlKCkpOworICAgICAgICAKICAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50
VmFsdWUpOwogCiAgICAgICAgIC8vIFR3byBvcGVyYW5kIGZvcm1zIGxpa2U6CkBAIC00NDIsOSAr
NDc2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzdWx0KTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0
YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHRlbXBsYXRlPAorICAgICAgICBBaXI6Ok9w
Y29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIEFpcjo6T3Bjb2RlIG9wY29kZURv
dWJsZSwKKyAgICAgICAgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRp
dmU+CiAgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAg
IHsKKyAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwg
b3Bjb2RlNjQsIG9wY29kZURvdWJsZSwgbGVmdC0+dHlwZSgpKTsKKyAgICAgICAgCiAgICAgICAg
IFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
cmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKQEAgLTUxNSw5ICs1NTMsMjkgQEAgcHVibGljOgogICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOwogICAgIH0KIAotICAgIHRl
bXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZT4KKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNv
ZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQ+CisgICAgdm9pZCBhcHBlbmRTaGlmdChWYWx1ZSog
dmFsdWUsIFZhbHVlKiBhbW91bnQpCisgICAgeworICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSBvcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgQWlyOjpPb3BzLCB2YWx1ZS0+dHlw
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpbW0oYW1vdW50KSkgeworICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAg
IGFwcGVuZChvcGNvZGUsIGltbShhbW91bnQpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVl
KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCks
IFRtcChYODZSZWdpc3RlcnM6OmVjeCkpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2
UmVnaXN0ZXJzOjplY3gpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8QWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0PgogICAgIGJvb2wg
dHJ5QXBwZW5kU3RvcmVVbk9wKFZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBBaXI6Ok9v
cHMsIHZhbHVlLT50eXBlKCkpOworICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFyZyBzdG9yZUFkZHIg
PSBhZGRyKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCkBAIC01
MjUsMTQgKzU4MywyMiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChsb2FkUHJvbWlzZS5wZWVrKCkg
IT0gc3RvcmVBZGRyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGlmICgh
aXNWYWxpZEZvcm0ob3Bjb2RlLCBzdG9yZUFkZHIua2luZCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIGxvYWRQcm9taXNlLmNvbnN1bWUoKnRoaXMpOwog
ICAgICAgICBhcHBlbmQob3Bjb2RlLCBzdG9yZUFkZHIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkg
Y29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHRlbXBsYXRlPAorICAgICAgICBB
aXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNvZGUgb3Bjb2RlNjQsIENvbW11dGF0aXZpdHkg
Y29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgogICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVC
aW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgIHsKKyAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2RlNjQsIEFpcjo6T29w
cywgbGVmdC0+dHlwZSgpKTsKKyAgICAgICAgaWYgKG9wY29kZSA9PSBBaXI6Ok9vcHMpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBcmcgc3RvcmVBZGRyID0g
YWRkcihjdXJyZW50VmFsdWUpOwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIApAQCAtNjI5
LDE0ICs2OTUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgQXJnIGFyZzsKICAgICAgICAgICAg
IHN3aXRjaCAodmFsdWUucmVwKCkua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6Ci0gICAgICAgICAgICAgICAgYXJnID0gaW1tT3JUbXAodmFsdWUudmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgYXJnID0gaW1tT3JUbXBGb3JNb3ZlKHZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAg
ICAgICAgICAgICAgIGFyZyA9IFRtcCh2YWx1ZS5yZXAoKS5yZWcoKSk7Ci0gICAgICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBhcmcpOworICAgICAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcEZvck1vdmUodmFsdWUudmFsdWUoKSksIGFyZyk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFj
a0FyZ3VtZW50OgogICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6Y2FsbEFyZyh2YWx1ZS5yZXAo
KS5vZmZzZXRGcm9tU1AoKSk7CkBAIC02NjQsNiArNzMwLDkgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGN1cnJlbnRJbmRleDsKICAgICBWYWx1ZSogY3VycmVudFZhbHVlOwogCisgICAgUGF0Y2hw
b2ludFNwZWNpYWwqIHBhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIEhhc2hNYXA8
Q2hlY2tTcGVjaWFsOjpLZXksIENoZWNrU3BlY2lhbCo+IGNoZWNrU3BlY2lhbHM7CisKICAgICAv
LyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdoZXJlIHRoZSBp
bnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCiAgICAgLy8gSXQgZG9lc24ndCBj
YXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBzYW1lIGFkZHJlc3Mg
ZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCiAgICAgLy8gYWdhaW4gcmVnYXJkbGVzcyBvZiB0aGUg
ZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNpbmNlIGF0IHRo
ZSBtYWNoaW5lCkBAIC0xMTY3LDQyOSArMTIzNiwyNTEgQEAgcHVibGljOgogICAgICAgICAgICAg
aW52ZXJ0ZWQpOwogICAgIH0KIAotICAgIC8vIEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2Vy
aW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0
Y2hlci4KLSAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNz
aW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCi0gICAg
Ly8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNv
ZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCi0gICAgLy8gY29kZSBqdXN0IGRp
ZCBvbmUuCi0gICAgCi0gICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChyb290LCAhbG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFs
dWUqKSB7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAg
Ym9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQotICAgIHsKLSAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMo
YXJndW1lbnRzLi4uKTsKLSAgICB9Ci0gICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAg
IHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCi0gICAgewotICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7Ci0gICAgICAgIGFj
Y2VwdEludGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKLSAgICB9Ci0gICAgdm9pZCBhY2NlcHRJ
bnRlcm5hbHNMYXRlKCkgeyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgotICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhh
cmd1bWVudHMuLi4pOwotICAgIH0KLSAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICB2
b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQotICAgIAotICAgIGJvb2wg
dHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIGFwcGVuZCgKLSAgICAgICAg
ICAgIG1vdmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwKLSAgICAgICAgICAgIGVmZmVj
dGl2ZUFkZHIoYWRkcmVzcywgY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRyeUxvYWQ4UyhWYWx1ZSogYWRk
cmVzcykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGVmZmVj
dGl2ZUFkZHIoYWRkcmVzcywgY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlMb2FkOFooVmFsdWUq
IGFkZHJlc3MpCi0gICAgewotICAgICAgICBhcHBlbmQoTG9hZDgsIGVmZmVjdGl2ZUFkZHIoYWRk
cmVzcywgY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlMb2FkMTZTKFZhbHVlKiBhZGRyZXNzKQot
ICAgIHsKLSAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGVmZmVjdGl2ZUFk
ZHIoYWRkcmVzcywgY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlMb2FkMTZaKFZhbHVlKiBhZGRy
ZXNzKQotICAgIHsKLSAgICAgICAgYXBwZW5kKExvYWQxNiwgZWZmZWN0aXZlQWRkcihhZGRyZXNz
LCBjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJ
bnQzMjoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwg
cmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0g
ICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQ2NCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCB0cnlTdWIoVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCkKKyAgICB2b2lkIGxvd2VyKCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobGVmdC0+
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBpZiAobGVmdC0+aXNJ
bnQzMigwKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5lZzMyPihyaWdodCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8U3ViMzI+KGxlZnQsIHJp
Z2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIEludDY0OgotICAg
ICAgICAgICAgaWYgKGxlZnQtPmlzSW50NjQoMCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kVW5P
cDxOZWc2ND4ocmlnaHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFwcGVu
ZEJpbk9wPFN1YjY0PihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBl
cyEKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChjdXJyZW50VmFs
dWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDp7CisgICAgICAgICAgICBhcHBlbmQo
CisgICAgICAgICAgICAgICAgbW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLAorICAg
ICAgICAgICAgICAgIGFkZHIoY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgdHJ5QW5k
KFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGxlZnQt
PnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgYXBwZW5kQmluT3A8
QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDY0LCBD
b21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMh
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBM
b2FkOFM6IHsKKyAgICAgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGFkZHIo
Y3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgfQogCi0gICAgYm9vbCB0cnlPcihWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBJbnQzMjoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPE9yMzIsIENvbW11dGF0aXZlPihsZWZ0
LCByaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBJbnQ2NDoK
LSAgICAgICAgICAgIGFwcGVuZEJpbk9wPE9yNjQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBMb2FkOFo6IHsKKyAgICAgICAgICAgIGFwcGVuZChMb2FkOCwgYWRk
cihjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBib29sIHRyeVhvcihWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMjoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBDb21tdXRhdGl2ZT4o
bGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgSW50
NjQ6Ci0gICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3I2NCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJp
Z2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIExvYWQxNlM6IHsKKyAgICAgICAgICAgIGFwcGVuZChMb2Fk
MTZTaWduZWRFeHRlbmRUbzMyLCBhZGRyKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0KIAotICAgIHZvaWQgYXBw
ZW5kU2hpZnQoQWlyOjpPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBhbW91bnQp
Ci0gICAgewotICAgICAgICBpZiAoaW1tKGFtb3VudCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgICAgICBhcHBlbmQo
b3Bjb2RlLCBpbW0oYW1vdW50KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBjYXNlIExv
YWQxNlo6IHsKKyAgICAgICAgICAgIGFwcGVuZChMb2FkMTYsIGFkZHIoY3VycmVudFZhbHVlKSwg
dG1wKGN1cnJlbnRWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAg
ICAgYXBwZW5kKE1vdmUsIHRtcChhbW91bnQpLCBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpKTsKLSAg
ICAgICAgYXBwZW5kKG9wY29kZSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSwgdG1wKGN1cnJlbnRW
YWx1ZSkpOwotICAgIH0KLQotICAgIGJvb2wgdHJ5U2hsKFZhbHVlKiB2YWx1ZSwgVmFsdWUqIGFt
b3VudCkKLSAgICB7Ci0gICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHZhbHVlLT50eXBlKCkg
PT0gSW50MzIgPyBMc2hpZnQzMiA6IExzaGlmdDY0OwotICAgICAgICBhcHBlbmRTaGlmdChvcGNv
ZGUsIHZhbHVlLCBhbW91bnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBi
b29sIHRyeVNTaHIoVmFsdWUqIHZhbHVlLCBWYWx1ZSogYW1vdW50KQotICAgIHsKLSAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlID0gdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IFJzaGlmdDMyIDog
UnNoaWZ0NjQ7Ci0gICAgICAgIGFwcGVuZFNoaWZ0KG9wY29kZSwgdmFsdWUsIGFtb3VudCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgdHJ5WlNocihWYWx1ZSogdmFs
dWUsIFZhbHVlKiBhbW91bnQpCi0gICAgewotICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB2
YWx1ZS0+dHlwZSgpID09IEludDMyID8gVXJzaGlmdDMyIDogVXJzaGlmdDY0OwotICAgICAgICBh
cHBlbmRTaGlmdChvcGNvZGUsIHZhbHVlLCBhbW91bnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCwgVmFsdWUqKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsK
LSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJp
bk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZDogeworICAgICAgICAgICAgLy8gRklYTUU6
IE5lZWQgYSBzdG9yeSBmb3IgZG91Ymxlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5OTEKKyAgICAgICAgICAgIGFwcGVuZEJpbk9w
PEFkZDMyLCBBZGQ2NCwgQWlyOjpPb3BzLCBDb21tdXRhdGl2ZT4oCisgICAgICAgICAgICAgICAg
Y3VycmVudFZhbHVlLT5jaGlsZCgwKSwgY3VycmVudFZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBib29sIHRyeVN0b3JlU3ViTG9h
ZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGxlZnQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgaWYg
KGxlZnQtPmlzSW50MzIoMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3Jl
VW5PcDxOZWczMj4ocmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3JlQmlu
T3A8U3ViMzIsIE5vdENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgU3ViOiB7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICAgICAgYXBwZW5kVW5P
cDxOZWczMiwgTmVnNjQsIEFpcjo6T29wcz4oY3VycmVudFZhbHVlLT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8U3ViMzIsIFN1YjY0LCBB
aXI6Ok9vcHM+KGN1cnJlbnRWYWx1ZS0+Y2hpbGQoMCksIGN1cnJlbnRWYWx1ZS0+Y2hpbGQoMSkp
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgYm9vbCB0cnlT
dG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IEJpdEFuZDogeworICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBaXI6Ok9v
cHMsIENvbW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUtPmNoaWxkKDAp
LCBjdXJyZW50VmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUqIGFk
ZHJlc3MpCi0gICAgewotICAgICAgICBhcHBlbmRTdG9yZSh2YWx1ZSwgZWZmZWN0aXZlQWRkcihh
ZGRyZXNzLCBjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgYm9vbCB0cnlUcnVuYyhWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5V
U0VEKHZhbHVlLCB0bXAodmFsdWUpID09IHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQogCi0gICAgYm9vbCB0cnlaRXh0MzIoVmFsdWUqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKGhpZ2hCaXRzQXJlWmVybyh2YWx1ZSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0bXAodmFsdWUpID09IHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIEJpdE9yOiB7CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxP
cjMyLCBPcjY0LCBBaXI6Ok9vcHMsIENvbW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBjdXJy
ZW50VmFsdWUtPmNoaWxkKDApLCBjdXJyZW50VmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1w
KHZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CiAKLSAgICBib29sIHRyeUFyZ3VtZW50UmVnKCkKLSAgICB7Ci0gICAgICAgIHByb2xvZ3VlLmFw
cGVuZChJbnN0KAotICAgICAgICAgICAgbW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkp
LCBjdXJyZW50VmFsdWUsCi0gICAgICAgICAgICBUbXAoY3VycmVudFZhbHVlLT5hczxBcmd1bWVu
dFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygpKSwKLSAgICAgICAgICAgIHRtcChjdXJyZW50VmFs
dWUpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIHRyeUNv
bnN0MzIoKQotICAgIHsKLSAgICAgICAgYXBwZW5kKE1vdmUsIGltbShjdXJyZW50VmFsdWUpLCB0
bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBib29sIHRyeUNvbnN0NjQoKQotICAgIHsKLSAgICAgICAgaWYgKGltbShjdXJyZW50VmFsdWUp
KSB7Ci0gICAgICAgICAgICBhcHBlbmQoTW92ZSwgaW1tKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJy
ZW50VmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEJpdFhv
cjogeworICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBBaXI6Ok9vcHMsIENv
bW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUtPmNoaWxkKDApLCBjdXJy
ZW50VmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW02NChjdXJyZW50VmFsdWUtPmFzSW50NjQoKSksIHRt
cChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9v
bCB0cnlGcmFtZVBvaW50ZXIoKQotICAgIHsKLSAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCB0cnlTdGFja1Nsb3QoKQotICAgIHsKLSAgICAg
ICAgYXBwZW5kKAotICAgICAgICAgICAgTGVhLAotICAgICAgICAgICAgQXJnOjpzdGFjayhzdGFj
a1RvU3RhY2suZ2V0KGN1cnJlbnRWYWx1ZS0+YXM8U3RhY2tTbG90VmFsdWU+KCkpKSwKLSAgICAg
ICAgICAgIHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQog
Ci0gICAgYm9vbCB0cnlFcXVhbCgpCi0gICAgewotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5k
KGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGJvb2wgdHJ5Tm90RXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMubGFzdCgp
LmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBib29sIHRyeUxlc3NUaGFuKCkKLSAgICB7Ci0gICAgICAgIGluc3Rz
Lmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCB0cnlHcmVhdGVyVGhhbigpCi0gICAgewotICAg
ICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2FzZSBTaGw6IHsKKyAgICAgICAg
ICAgIGFwcGVuZFNoaWZ0PExzaGlmdDMyLCBMc2hpZnQ2ND4oY3VycmVudFZhbHVlLT5jaGlsZCgw
KSwgY3VycmVudFZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGJvb2wgdHJ5TGVzc0VxdWFsKCkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3Qo
KS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQorICAgICAgICBjYXNlIFNTaHI6IHsKKyAgICAgICAgICAgIGFwcGVuZFNoaWZ0
PFJzaGlmdDMyLCBSc2hpZnQ2ND4oY3VycmVudFZhbHVlLT5jaGlsZCgwKSwgY3VycmVudFZhbHVl
LT5jaGlsZCgxKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGJvb2wg
dHJ5R3JlYXRlckVxdWFsKCkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3Jl
YXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQor
ICAgICAgICBjYXNlIFpTaHI6IHsKKyAgICAgICAgICAgIGFwcGVuZFNoaWZ0PFVyc2hpZnQzMiwg
VXJzaGlmdDY0PihjdXJyZW50VmFsdWUtPmNoaWxkKDApLCBjdXJyZW50VmFsdWUtPmNoaWxkKDEp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYm9vbCB0cnlBYm92ZSgp
Ci0gICAgewotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVu
dFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2FzZSBTdG9y
ZTogeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlVG9TdG9yZSA9IGN1cnJlbnRWYWx1ZS0+Y2hp
bGQoMCk7CisgICAgICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCh2YWx1ZVRvU3RvcmUpKSB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc3dp
dGNoICh2YWx1ZVRvU3RvcmUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBZGQ6
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMy
LCBBZGQ2NCwgQ29tbXV0YXRpdmU+KAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0
b3JlLT5jaGlsZCgwKSwgdmFsdWVUb1N0b3JlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU3ViOgorICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsdWVUb1N0b3JlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWQgPSB0cnlBcHBlbmRTdG9yZVVuT3A8TmVnMzIsIE5lZzY0Pih2YWx1
ZVRvU3RvcmUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnlBcHBl
bmRTdG9yZUJpbk9wPFN1YjMyLCBTdWI2ND4oCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZVRvU3RvcmUtPmNoaWxkKDApLCB2YWx1ZVRvU3RvcmUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWQgPSB0cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBBbmQ2NCwgQ29t
bXV0YXRpdmU+KAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0b3JlLT5jaGlsZCgw
KSwgdmFsdWVUb1N0b3JlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZVRvU3RvcmUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgYm9v
bCB0cnlCZWxvdygpCi0gICAgewotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNv
bXBhcmUoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAg
ICAgICAgIGFwcGVuZFN0b3JlKHZhbHVlVG9TdG9yZSwgYWRkcihjdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYm9vbCB0cnlBYm92ZUVxdWFsKCkK
LSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50
VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICBjYXNlIFRydW5j
OiB7CisgICAgICAgICAgICBBU1NFUlQodG1wKGN1cnJlbnRWYWx1ZS0+Y2hpbGQoMCkpID09IHRt
cChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAg
Ym9vbCB0cnlCZWxvd0VxdWFsKCkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQo
Y3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQorICAgICAgICBjYXNlIFpFeHQzMjogeworICAgICAgICAgICAgaWYgKGhpZ2hCaXRzQXJlWmVy
byhjdXJyZW50VmFsdWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCh0bXAo
Y3VycmVudFZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgIFBhdGNocG9pbnRTcGVjaWFsKiBw
YXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKLSAgICBib29sIHRyeVBhdGNocG9pbnQoKQot
ICAgIHsKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50VmFsdWUgPSBjdXJyZW50
VmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKLSAgICAgICAgZW5zdXJlU3BlY2lhbChwYXRj
aHBvaW50U3BlY2lhbCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCB0bXAoY3VycmVudFZh
bHVlLT5jaGlsZCgwKSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogCi0gICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2hwb2ludFZhbHVlLCBB
cmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAgICAgICAgY2FzZSBBcmd1bWVudFJl
ZzogeworICAgICAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCisgICAgICAgICAgICAgICAg
bW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCBjdXJyZW50VmFsdWUsCisgICAgICAg
ICAgICAgICAgVG1wKGN1cnJlbnRWYWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1l
bnRSZWcoKSksCisgICAgICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIGlmIChwYXRjaHBvaW50VmFsdWUtPnR5
cGUoKSAhPSBWb2lkKQotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAocGF0Y2hwb2lu
dFZhbHVlKSk7CisgICAgICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgY2FzZSBDb25zdDY0OiB7
CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgaW1tRm9yTW92ZShjdXJyZW50VmFsdWUpLCB0bXAo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAg
ICBmaWxsU3RhY2ttYXAoaW5zdCwgcGF0Y2hwb2ludFZhbHVlLCAwKTsKLSAgICAgICAgCi0gICAg
ICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoV1RGOjptb3ZlKGluc3QpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorICAgICAgICBjYXNlIEZyYW1lUG9pbnRlcjogeworICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIHRtcChjdXJyZW50
VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgSGFzaE1hcDxD
aGVja1NwZWNpYWw6OktleSwgQ2hlY2tTcGVjaWFsKj4gY2hlY2tTcGVjaWFsczsKLSAgICBib29s
IHRyeUNoZWNrKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3QgYnJhbmNoID0gY3Jl
YXRlQnJhbmNoKHZhbHVlKTsKKyAgICAgICAgY2FzZSBCMzo6U3RhY2tTbG90OiB7CisgICAgICAg
ICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgTGVhLAorICAgICAgICAgICAgICAgIEFyZzo6
c3RhY2soc3RhY2tUb1N0YWNrLmdldChjdXJyZW50VmFsdWUtPmFzPFN0YWNrU2xvdFZhbHVlPigp
KSksCisgICAgICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAKLSAgICAgICAgQ2hlY2tTcGVjaWFsOjpLZXkga2V5KGJyYW5jaCk7
Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gY2hlY2tTcGVjaWFscy5hZGQoa2V5LCBudWxscHRyKTsK
LSAgICAgICAgU3BlY2lhbCogc3BlY2lhbCA9IGVuc3VyZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSwga2V5KTsKKyAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgY2FzZSBOb3RFcXVh
bDoKKyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAg
ICAgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAg
ICBjYXNlIEFib3ZlOgorICAgICAgICBjYXNlIEJlbG93OgorICAgICAgICBjYXNlIEFib3ZlRXF1
YWw6CisgICAgICAgIGNhc2UgQmVsb3dFcXVhbDogeworICAgICAgICAgICAgaW5zdHMubGFzdCgp
LmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAKLSAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IGN1cnJlbnRW
YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKKyAgICAgICAgY2FzZSBQYXRjaHBvaW50OiB7CisgICAg
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS0+
YXM8UGF0Y2hwb2ludFZhbHVlPigpOworICAgICAgICAgICAgZW5zdXJlU3BlY2lhbChwYXRjaHBv
aW50U3BlY2lhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwg
cGF0Y2hwb2ludFZhbHVlLCBBcmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHBhdGNocG9pbnRWYWx1ZS0+dHlwZSgpICE9IFZvaWQp
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAocGF0Y2hwb2ludFZhbHVlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBvaW50
VmFsdWUsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5k
KFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
ICAgICBJbnN0IGluc3QoUGF0Y2gsIGNoZWNrVmFsdWUsIEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7
Ci0gICAgICAgIGluc3QuYXJncy5hcHBlbmRWZWN0b3IoYnJhbmNoLmFyZ3MpOworICAgICAgICBj
YXNlIENoZWNrOiB7CisgICAgICAgICAgICBJbnN0IGJyYW5jaCA9IGNyZWF0ZUJyYW5jaChjdXJy
ZW50VmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ2hlY2tTcGVj
aWFsOjpLZXkga2V5KGJyYW5jaCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNoZWNrU3Bl
Y2lhbHMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgICAgICAgICBTcGVjaWFsKiBzcGVjaWFsID0g
ZW5zdXJlU3BlY2lhbChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLCBrZXkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVja1ZhbHVlID0gY3VycmVudFZhbHVlLT5hczxD
aGVja1ZhbHVlPigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gs
IGNoZWNrVmFsdWUsIEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7CisgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kVmVjdG9yKGJyYW5jaC5hcmdzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZmlsbFN0YWNrbWFwKGluc3QsIGNoZWNrVmFsdWUsIDEpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1
ZSwgMSk7CisgICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gY3VycmVudFZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGFwcGVuZCgKKyAgICAgICAg
ICAgICAgICByZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wRm9yTW92
ZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZS0+YXM8VXBzaWxvblZh
bHVlPigpLT5waGkoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAg
ICAgaW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAvLyBPdXIgc2Vt
YW50aWNzIGFyZSBkZXRlcm1pbmVkIGJ5IFVwc2lsb25zLCBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8gaGVyZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYm9vbCB0cnlV
cHNpbG9uKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZCgKLSAgICAgICAgICAg
IHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwKLSAgICAgICAgICAgIGltbU9yVG1w
KHZhbHVlKSwKLSAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4o
KS0+cGhpKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICBjYXNlIEJy
YW5jaDogeworICAgICAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2goY3Vy
cmVudFZhbHVlLT5jaGlsZCgwKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICBib29sIHRyeVBoaSgpCi0gICAgewotICAgICAgICAvLyBPdXIgc2VtYW50aWNzIGFyZSBk
ZXRlcm1pbmVkIGJ5IFVwc2lsb25zLCBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8gaGVyZS4KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICBjYXNlIEIzOjpKdW1wOiB7CisgICAg
ICAgICAgICBhcHBlbmQoQWlyOjpKdW1wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSWRlbnRpdHk6IHsKKyAgICAgICAgICAgIEFT
U0VSVCh0bXAoY3VycmVudFZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKGN1cnJlbnRWYWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHRyeUJyYW5jaChWYWx1
ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJyYW5j
aCh2YWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgIGNhc2UgUmV0
dXJuOiB7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBjdXJyZW50VmFsdWUtPmNoaWxkKDAp
OworICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAgICAgIHJlbGF4ZWRNb3ZlRm9yVHlw
ZSh2YWx1ZS0+dHlwZSgpKSwgaW1tT3JUbXBGb3JNb3ZlKHZhbHVlKSwKKyAgICAgICAgICAgICAg
ICBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHRyeUp1bXAoKQot
ICAgIHsKLSAgICAgICAgYXBwZW5kKEFpcjo6SnVtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAK
LSAgICBib29sIHRyeUlkZW50aXR5KFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQodmFsdWUsIHRtcCh2YWx1ZSkgPT0gdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlSZXR1cm4oVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlw
ZSgpKSwgaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAg
ICAgICAgYXBwZW5kKFJldCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkYXRhTG9n
KCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKGN1cnJlbnRWYWx1ZSksICJcbiIp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAg
ICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDE5MjEyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29y
a2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMg
YXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1tYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgotCi0jIFRoZXNlIHJ1bGVzIGFyZSBj
b25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5l
bnRlZCB1c2luZyBzd2l0Y2gKLSMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KLQotIyBO
b3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdh
eSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCi0KLUxvYWQgPSBMb2FkKGFkZHJlc3MpCi0KLUxv
YWQ4UyA9IExvYWQ4UyhhZGRyZXNzKQotTG9hZDhaID0gTG9hZDhaKGFkZHJlc3MpCi1Mb2FkMTZT
ID0gTG9hZDE2UyhhZGRyZXNzKQotTG9hZDE2WiA9IExvYWQxNlooYWRkcmVzcykKLQotQWRkID0g
QWRkKGxlZnQsIHJpZ2h0KQotU3ViID0gU3ViKGxlZnQsIHJpZ2h0KQotQW5kID0gQml0QW5kKGxl
ZnQsIHJpZ2h0KQotT3IgPSBCaXRPcihsZWZ0LCByaWdodCkKLVhvciA9IEJpdFhvcihsZWZ0LCBy
aWdodCkKLQotU2hsID0gU2hsKHZhbHVlLCBhbW91bnQpCi1TU2hyID0gU1Nocih2YWx1ZSwgYW1v
dW50KQotWlNociA9IFpTaHIodmFsdWUsIGFtb3VudCkKLQotU3RvcmVBZGRMb2FkID0gU3RvcmUo
QWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKLVN0b3JlU3ViTG9hZCA9IFN0b3JlKFN1YihsZWZ0
LCByaWdodCksIGFkZHJlc3MpCi1TdG9yZUFuZExvYWQgPSBTdG9yZShCaXRBbmQobGVmdCwgcmln
aHQpLCBhZGRyZXNzKQotU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKLQotVHJ1bmMgPSBU
cnVuYyh2YWx1ZSkKLQotWkV4dDMyID0gWkV4dDMyKHZhbHVlKQotCi1Bcmd1bWVudFJlZyA9IEFy
Z3VtZW50UmVnKCkKLQotQ29uc3QzMiA9IENvbnN0MzIoKQotQ29uc3Q2NCA9IENvbnN0NjQoKQot
Ci1TdGFja1Nsb3QgPSBTdGFja1Nsb3QoKQotRnJhbWVQb2ludGVyID0gRnJhbWVQb2ludGVyKCkK
LQotIyBUaGVzZSBwYXR0ZXJucyBkZWxlZ2F0ZSB0byB0aGUgY29tcGFyaXNvbiBtYXRjaGVyLgot
RXF1YWwgPSBFcXVhbCgpCi1Ob3RFcXVhbCA9IE5vdEVxdWFsKCkKLUxlc3NUaGFuID0gTGVzc1Ro
YW4oKQotR3JlYXRlclRoYW4gPSBHcmVhdGVyVGhhbigpCi1MZXNzRXF1YWwgPSBMZXNzRXF1YWwo
KQotR3JlYXRlckVxdWFsID0gR3JlYXRlckVxdWFsKCkKLUFib3ZlID0gQWJvdmUoKQotQmVsb3cg
PSBCZWxvdygpCi1BYm92ZUVxdWFsID0gQWJvdmVFcXVhbCgpCi1CZWxvd0VxdWFsID0gQmVsb3dF
cXVhbCgpCi0KLVBhdGNocG9pbnQgPSBQYXRjaHBvaW50KCkKLUNoZWNrID0gQ2hlY2sodmFsdWUp
Ci0KLVVwc2lsb24gPSBVcHNpbG9uKHZhbHVlKQotUGhpID0gUGhpKCkKLQotQnJhbmNoID0gQnJh
bmNoKHZhbHVlKQotSnVtcCA9IEp1bXAoKQotCi0jIEl0IHdvdWxkIGJlIGZhbnRhc3RpYyB0byBu
b3QgaGF2ZSB0byBoYXZlIHRoaXMgaGVyZSwgYnV0IHRoZSBwaGlsb3NvcGh5IG9mIG91ciBsb3dl
cmluZyBpcyB0aGF0Ci0jIGl0IHNob3VsZCBiZSBzb3VuZCBldmVuIGlmIHdlIGhhdmVuJ3QgcnVu
IG9wdGltaXphdGlvbnMuCi1JZGVudGl0eSA9IElkZW50aXR5KHZhbHVlKQotCi1SZXR1cm4gPSBS
ZXR1cm4odmFsdWUpCi0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264996</attachid>
            <date>2015-11-06 22:15:18 -0800</date>
            <delta_ts>2015-11-07 13:01:02 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85662</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxNS0xMS0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzLT5BaXIgbG93ZXJpbmcgc2hvdWxkIGRvIHBhdHRlcm4gbWF0Y2hpbmcgdGhlIG9sZCBmYXNo
aW9uZWQgd2F5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA5OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXaGVuIEkgZmlyc3Qgd3JvdGUgdGhlIEIzLT5BaXIgbG93ZXJpbmcgcHJvdG90eXBlLCBJIHdh
cyBjb252aW5jZWQgdGhhdCB0aGUgcGF0dGVybnMgd291bGQgZ2V0CisgICAgICAgIHNvIGduYXJs
eSB0aGF0IHdlJ2Qgd2FudCBhIHBhdHRlcm4gbGFuZ3VhZ2UgdG8gd3JpdGUgdGhlbSBpbi4gU28g
SSBtYWRlIG9uZSwgYW5kIHRoYXQncyB3aGF0CisgICAgICAgIHRoZSBsb3dlcmluZyBoYXMgdXNl
ZC4gQnV0IGFzIHdlJ3ZlIHdvcmtlZCB3aXRoIHRoZSBJUiwgd2UndmUgZm91bmQgdGhhdCBpdCdz
IHZlcnkgZWFzeSB0bworICAgICAgICBwYXR0ZXJuIG1hdGNoIGluIEMrKyB1c2luZyB0aGUgQjMg
QVBJLCBhbmQgd2UndmUgYWxzbyBmb3VuZCB0aGF0IG1vc3Qgb2YgdGhlIHBhdHRlcm5zIHdlIHdy
b3RlCisgICAgICAgIHVzaW5nIHRoZSBwYXR0ZXJuIGxhbmd1YWdlIHdlcmUgbW9zdGx5IHRyaXZp
YWwuIFNvIHRoaXMgY2hhbmdlIHJlbW92ZXMgdGhlIHBhdHRlcm4gbWF0Y2ggY29kZQorICAgICAg
ICBnZW5lcmF0b3IgYW5kIHRoZSBwYXR0ZXJucyBmaWxlcywgYW5kIHJlZG9lcyB0aGUgbG93ZXJp
bmcgdXNpbmcgZ29vZCBvbGQgZmFzaGlvbmVkIHN3aXRjaAorICAgICAgICBzdGF0ZW1lbnRzLiBU
aGlzIGFjdHVhbGx5IHJlZHVjZXMgdGhlIHRvdGFsIGNvZGUgb2YgdGhlIGxvd2VyaW5nLgorCisg
ICAgICAgIEkgYWxzbyB0b29rIHRoZSBvcHBvcnR1bml0eSB0byByZWZhY3RvcmluZyBVbk9wIGFu
ZCBCaW5PcCBsb3dlcmluZy4gV2UgaGFkIGEgbG90IG9mIHJlcGV0ZXRpdmUKKyAgICAgICAgY29k
ZSBmb3IgMzItdnMtNjQtYml0IG9wY29kZSBzZWxlY3Rpb24sIHNvIEkgZmFjdG9yZWQgdGhhdCBv
dXQgaW50byBhIGhlbHBlci4gVGhpcyBhbHNvIHNhdmVzIGEKKyAgICAgICAgbG90IG9mIGNvZGUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIGIzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnM6IFJlbW92ZWQuCisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6TG93ZXJUb0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmhpZ2hCaXRzQXJlWmVy
byk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNhbkJlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpjb21taXRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OmNyb3NzZXNJbnRlcmZlcmVuY2UpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjplZmZlY3RpdmVBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6YWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxv
YWRQcm9taXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tRm9yTW92ZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wRm9yTW92ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeU9wY29kZUZvclR5cGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpvcGNvZGVGb3JUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFwcGVuZEJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
YXBwZW5kU2hpZnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBcHBl
bmRTdG9yZVVuT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBcHBl
bmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6ZW5zdXJlU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmZpbGxTdGFja21hcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUdlbmVyaWNDb21wYXJlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJU
b0Fpcjo6aW1tT3JUbXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBZGRyZXNzU2VsZWN0b3I6OkFkZHJlc3NTZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0Um9vdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxl
Y3Rvcjo6YWNjZXB0Um9vdExhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0
SW50ZXJuYWxzTGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0T3BlcmFuZHMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRz
TGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJl
c3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGRTaGlmdDIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeUFk
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NT
ZWxlY3Rvcjo6dHJ5RnJhbWVQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlTdGFja1Nsb3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURp
cmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2Vw
dFJvb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphY2Nl
cHRSb290TGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OmFjY2VwdEludGVybmFscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjphY2NlcHRPcGVyYW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUxvYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMb2FkOFMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMb2FkOFopOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMb2FkMTZTKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TG9hZDE2Wik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeVN1Yik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeU9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5WG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6dHJ5U2hsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6dHJ5U1Nocik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OnRyeVpTaHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlTdG9yZVN1YkxvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeVRydW5jKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5WkV4dDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QXJndW1lbnRSZWcpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlDb25zdDMyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5Q29uc3Q2NCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUZyYW1lUG9pbnRlcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeVN0YWNrU2xvdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUVxdWFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5Tm90RXF1YWwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlMZXNzVGhhbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUdyZWF0ZXJUaGFu
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5TGVzc0Vx
dWFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5R3Jl
YXRlckVxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dHJ5QWJvdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0
cnlCZWxvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRy
eUFib3ZlRXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
Ojp0cnlCZWxvd0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJU
b0Fpcjo6dHJ5UGF0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OnRyeUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6dHJ5VXBzaWxvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OnRyeVBoaSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OnRyeUJyYW5jaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OnRyeUp1bXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjp0cnlJZGVudGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OnRyeVJldHVybik6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNMb3dlcmluZ01hdGNo
ZXIucGF0dGVybnM6IFJlbW92ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRj
aGVyLnJiOiBSZW1vdmVkLgorCiAyMDE1LTExLTA2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgogCiAgICAgICAgIENvbnRyb2wgRmxvdyBQcm9maWxlciBzaG91bGQga2VlcCBleGVj
dXRpb24gY291bnRzIG9mIGJhc2ljIGJsb2NrcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTkyMTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIzLDIyICsxMjIzLDYgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMKICkKIAogYWRkX2N1c3RvbV9jb21tYW5kKAot
ICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0IzQWRkcmVz
c01hdGNoZXIuaAotICAgIE1BSU5fREVQRU5ERU5DWSAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYjMv
QjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwotICAgIERFUEVORFMgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgotICAgIENPTU1BTkQgJHtSVUJZX0VY
RUNVVEFCTEV9ICR7SkFWQVNDUklQVENPUkVfRElSfS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNo
ZXIucmIgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMg
VkVSQkFUSU0KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBUQ09SRV9ESVJ9Ci0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9CM0xvd2VyaW5nTWF0Y2hlci5oCi0gICAg
TUFJTl9ERVBFTkRFTkNZICR7SkFWQVNDUklQVENPUkVfRElSfS9iMy9CM0xvd2VyaW5nTWF0Y2hl
ci5wYXR0ZXJucwotICAgIERFUEVORFMgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2IzL2dlbmVyYXRl
X3BhdHRlcm5fbWF0Y2hlci5yYgotICAgIENPTU1BTkQgJHtSVUJZX0VYRUNVVEFCTEV9ICR7SkFW
QVNDUklQVENPUkVfRElSfS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zIFZFUkJBVElNCi0gICAg
V09SS0lOR19ESVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfQot
KQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vQWlyT3Bjb2RlLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQ
VENPUkVfRElSfS9BaXJPcGNvZGVHZW5lcmF0ZWQuaAogICAgIE1BSU5fREVQRU5ERU5DWSAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCiAgICAgREVQRU5EUyAk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKQEAgLTEyNDks
OCArMTIzMyw2IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0Fp
ck9wY29kZS5oCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9BaXJP
cGNvZGVHZW5lcmF0ZWQuaAotICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vQjNBZGRyZXNzTWF0Y2hlci5oCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENP
UkVfRElSfS9CM0xvd2VyaW5nTWF0Y2hlci5oCiApCiAKIGFkZF9jdXN0b21fY29tbWFuZCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAx
OTIxMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29y
a2luZyBjb3B5KQpAQCAtNjAsOCArNjAsNiBAQCBhbGwgOiBcCiAgICAgTGV4ZXIubHV0LmggXAog
ICAgIEtleXdvcmRMb29rdXAuaCBcCiAgICAgUmVnRXhwSml0VGFibGVzLmggXAotICAgIEIzTG93
ZXJpbmdNYXRjaGVyLmggXAotICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCiAgICAgQWlyT3Bjb2Rl
LmggXAogIwogCkBAIC0yNjUsMTEgKzI2Myw2IEBAIElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FU
SU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FU
SU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0
Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSAtLW91dHB1
dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TKQogCi1CM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9n
ZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNMb3dlcmlu
Z01hdGNoZXIucGF0dGVybnMKLQkkKFJVQlkpICReIAotQjNBZGRyZXNzTWF0Y2hlci5oOiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0
Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwotCSQoUlVCWSkgJF4KLQogQWlyT3Bj
b2RlLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwogCSQoUlVCWSkgJF4KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0
dGVybnMJKHJldmlzaW9uIDE5MjEyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fk
ZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLSMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1hdGNoZXIgQWRkcmVzc01hdGNo
ZXIKLQotIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFz
c29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgotIyBXZSdsbCBu
ZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KLSMgQWRkKHgsIGNvbnN0MSArIGNvbnN0
MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291
bGQgaGF2ZSBjYW5vbmljYWxpemVkCi0jIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwg
aW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6
YXRpb25zCi0jIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3Rv
cmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCi0jIGRvbid0
IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVk
IGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCi0jIGFscmVhZHkuIFNvLCB0aGUgb25s
eSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgotCi1B
ZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQotQWRkU2hpZnQyID0g
QWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKLQotQWRkID0gQWRkKGxlZnQsIHJpZ2h0
KQotCi1GcmFtZVBvaW50ZXIgPSBGcmFtZVBvaW50ZXIoKQotU3RhY2tTbG90ID0gU3RhY2tTbG90
KCkKLQotRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAkocmV2aXNpb24gMTkyMTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxMiBAQAogI2luY2x1ZGUg
IkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCi0jaW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgogI2luY2x1
ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgogI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0
eS5oIgogI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKICNpbmNsdWRlICJCM0luZGV4U2V0LmgiCi0j
aW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2lu
dFZhbHVlLmgiCkBAIC02MiwzMiArNjAsMzEgQEAgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CiBjbGFzcyBMb3dlclRvQWlyIHsKIHB1YmxpYzoKICAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBDb2RlJiBjb2RlKQotICAgICAgICA6IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZh
bHVlcygpLnNpemUoKSkKLSAgICAgICAgLCBibG9ja1RvQmxvY2socHJvY2VkdXJlLnNpemUoKSkK
LSAgICAgICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQotICAgICAgICAsIGFkZHJlc3NTZWxlY3Rv
cigqdGhpcykKLSAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQotICAgICAgICAsIGNvZGUo
Y29kZSkKKyAgICAgICAgOiBtX3ZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkK
KyAgICAgICAgLCBtX2Jsb2NrVG9CbG9jayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAsIG1f
dXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisg
ICAgICAgICwgbV9jb2RlKGNvZGUpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgcnVuKCkKICAg
ICB7Ci0gICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQotICAg
ICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1
ZW5jeSgpKTsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkp
IHsKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVyZSkKKyAg
ICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Jsb2NrXSA9IG1fY29kZS5hZGRCbG9jayhibG9jay0+
ZnJlcXVlbmN5KCkpOworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZh
bHVlcygpKSB7CiAgICAgICAgICAgICBpZiAoU3RhY2tTbG90VmFsdWUqIHN0YWNrU2xvdFZhbHVl
ID0gdmFsdWUtPmFzPFN0YWNrU2xvdFZhbHVlPigpKQotICAgICAgICAgICAgICAgIHN0YWNrVG9T
dGFjay5hZGQoc3RhY2tTbG90VmFsdWUsIGNvZGUuYWRkU3RhY2tTbG90KHN0YWNrU2xvdFZhbHVl
KSk7CisgICAgICAgICAgICAgICAgbV9zdGFja1RvU3RhY2suYWRkKHN0YWNrU2xvdFZhbHVlLCBt
X2NvZGUuYWRkU3RhY2tTbG90KHN0YWNrU2xvdFZhbHVlKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBwcm9jZWR1cmUucmVzZXRWYWx1ZU93bmVycygpOyAvLyBVc2VkIGJ5IGNyb3NzZXNJbnRlcmZl
cmVuY2UoKS4KKyAgICAgICAgbV9wcm9jZWR1cmUucmVzZXRWYWx1ZU93bmVycygpOyAvLyBVc2Vk
IGJ5IGNyb3NzZXNJbnRlcmZlcmVuY2UoKS4KIAogICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9y
ZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9j
ayBkb3duIGEKICAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdl
IGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCi0gICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgewotICAgICAgICAg
ICAgY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJs
b2NrIDogbV9wcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICBtX2Js
b2NrID0gYmxvY2s7CiAgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgotICAgICAgICAg
ICAgaW5zdHMucmVzaXplKDApOworICAgICAgICAgICAgbV9pbnN0cy5yZXNpemUoMCk7CiAKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5n
IEJsb2NrICIsICpibG9jaywgIjpcbiIpOwpAQCAtOTUsNDMgKzkyLDQwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVz
ZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFsbG93cyB1cwogICAgICAgICAgICAgLy8gdG8g
bWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBibG9jay0+c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0g
aTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAg
ICAgIG1faW5kZXggPSBpOworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBibG9jay0+YXQoaSk7
CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVj
dG9yPEluc3Q+KCkpOworICAgICAgICAgICAgICAgIG1faW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0
PigpKTsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiTG93ZXJpbmcgIiwgZGVlcER1bXAoY3VycmVudFZhbHVlKSwgIjpcbiIpOwotICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1
ZSwgKnRoaXMpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAoY3VycmVu
dFZhbHVlKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJMb3dlcmluZyAiLCBkZWVwRHVtcChtX3ZhbHVlKSwgIjpcbiIpOworICAgICAgICAgICAgICAg
IGxvd2VyKCk7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHMubGFzdCgpKQorICAgICAgICAgICAgICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiBtX2luc3RzLmxhc3QoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCBpbnN0LCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4g
aW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAg
ICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIG1faW5zdHMgY29udGFpbnMg
dGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCiAgICAgICAgICAgICAvLyBpdCBp
biByZXZlcnNlLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCi0gICAg
ICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3Zl
KGluc3QpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5zdHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogbV9pbnN0c1tpXSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9ibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6
bW92ZShpbnN0KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgogICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5zdWNjZXNzb3JzKCkuc2l6ZSgpIDw9IDIpOwogICAgICAgICAgICAgZm9yIChC
Mzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQotICAg
ICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoYmxv
Y2tUb0Jsb2NrW3N1Y2Nlc3Nvcl0pOworICAgICAgICAgICAgICAgIG1fYmxvY2tUb0Jsb2NrW2Js
b2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChtX2Jsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsK
LSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogcHJvbG9ndWUpCisgICAgICAgIEFpcjo6SW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChtX2NvZGUpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBt
X3Byb2xvZ3VlKQogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoMCwgV1RGOjpt
b3ZlKGluc3QpKTsKLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKG1fY29kZVswXSk7CiAgICAgfQogCitwcml2YXRlOgog
ICAgIGJvb2wgaGlnaEJpdHNBcmVaZXJvKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CkBAIC0yNjUsMTQgKzI1OSwxNCBAQCBwdWJsaWM6CiAg
ICAgLy8KICAgICAvLyAgICAgYXV0byB0cnlUaGluZ3MgPSBbdGhpc10gKGNvbnN0IEFyZyYgbGVm
dCwgY29uc3QgQXJnJiByaWdodCkgewogICAgIC8vICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEZv
bywgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpCi0gICAgLy8gICAgICAgICAgICAgcmV0dXJu
IEluc3QoRm9vLCBjdXJyZW50VmFsdWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAvLyAgICAgICAgICAg
ICByZXR1cm4gSW5zdChGb28sIG1fdmFsdWUsIGxlZnQsIHJpZ2h0KTsKICAgICAvLyAgICAgICAg
IHJldHVybiBJbnN0KCk7CiAgICAgLy8gICAgIH07CiAgICAgLy8gICAgIGlmIChJbnN0IHJlc3Vs
dCA9IHRyeVRoaW5ncyhsb2FkQWRkcihsZWZ0KSwgdG1wKHJpZ2h0KSkpCiAgICAgLy8gICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIC8vICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3Mo
dG1wKGxlZnQpLCBsb2FkQWRkcihyaWdodCkpKSAvLyB0aGlzIG5ldmVyIHN1Y2NlZWRzLgogICAg
IC8vICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAvLyAgICAgcmV0dXJuIEluc3QoRm9vLCBj
dXJyZW50VmFsdWUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7CisgICAgLy8gICAgIHJldHVybiBJ
bnN0KEZvbywgbV92YWx1ZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQpKTsKICAgICAvLwogICAgIC8v
IElmIHlvdSBpbWFnaW5lIHRoYXQgbG9hZEFkZHIodmFsdWUpIGlzIGp1c3QgbG9hZFByb21pc2Uo
dmFsdWUpLmNvbnN1bWUoKnRoaXMpLCB0aGVuIHRoaXMgY29kZQogICAgIC8vIHdpbGwgcnVuIGNv
cnJlY3RseSAtIGl0IHdpbGwgZ2VuZXJhdGUgT0sgY29kZSAtIGJ1dCB0aGUgc2Vjb25kIGZvcm0g
aXMgbmV2ZXIgbWF0Y2hlZC4KQEAgLTI4MywyNyArMjc3LDI3IEBAIHB1YmxpYzoKICAgICAvLwog
ICAgIC8vICAgICBhdXRvIHRyeVRoaW5ncyA9IFt0aGlzXSAoY29uc3QgQXJnUHJvbWlzZSYgbGVm
dCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIHsKICAgICAvLyAgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShGb28sIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQotICAgIC8vICAgICAgICAgICAg
IHJldHVybiBJbnN0KEZvbywgY3VycmVudFZhbHVlLCBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSk7CisgICAgLy8gICAgICAgICAgICAgcmV0dXJuIEluc3QoRm9vLCBt
X3ZhbHVlLCBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CiAgICAg
Ly8gICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgIC8vICAgICB9OwogICAgIC8vICAgICBpZiAo
SW5zdCByZXN1bHQgPSB0cnlUaGluZ3MobG9hZFByb21pc2UobGVmdCksIHRtcFByb21pc2Uocmln
aHQpKSkKICAgICAvLyAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgLy8gICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRyeVRoaW5ncyh0bXBQcm9taXNlKGxlZnQpLCBsb2FkUHJvbWlzZShyaWdodCkp
KQogICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAvLyAgICAgcmV0dXJuIEluc3Qo
Rm9vLCBjdXJyZW50VmFsdWUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSk7CisgICAgLy8gICAgIHJl
dHVybiBJbnN0KEZvbywgbV92YWx1ZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQpKTsKICAgICAvLwog
ICAgIC8vIE5vdGljZSB0aGF0IHdlIGRpZCB1c2UgdG1wIGluIHRoZSBmYWxsLWJhY2sgY2FzZSBh
dCB0aGUgZW5kLCBiZWNhdXNlIGJ5IHRoZW4sIHdlIGtub3cgZm9yIHN1cmUKICAgICAvLyB0aGF0
IHdlIHdhbnQgYSB0bXAuIEJ1dCB1c2luZyB0bXBQcm9taXNlIGluIHRoZSB0cnlUaGluZ3MoKSBj
YWxscyBlbnN1cmVzIHRoYXQgZG9pbmcgc28KICAgICAvLyBkb2Vzbid0IHByZXZlbnQgdXMgZnJv
bSB0cnlpbmcgbG9hZFByb21pc2Ugb24gdGhlIHNhbWUgdmFsdWUuCiAgICAgVG1wIHRtcChWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBUbXAmIHRtcCA9IHZhbHVlVG9UbXBbdmFsdWVdOwor
ICAgICAgICBUbXAmIHRtcCA9IG1fdmFsdWVUb1RtcFt2YWx1ZV07CiAgICAgICAgIGlmICghdG1w
KSB7CiAgICAgICAgICAgICB3aGlsZSAoc2hvdWxkQ29weVByb3BhZ2F0ZSh2YWx1ZSkpCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICBUbXAmIHJl
YWxUbXAgPSB2YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgICAgIFRtcCYgcmVhbFRtcCA9IG1f
dmFsdWVUb1RtcFt2YWx1ZV07CiAgICAgICAgICAgICBpZiAoIXJlYWxUbXApCi0gICAgICAgICAg
ICAgICAgcmVhbFRtcCA9IGNvZGUubmV3VG1wKEFyZzo6dHlwZUZvckIzVHlwZSh2YWx1ZS0+dHlw
ZSgpKSk7CisgICAgICAgICAgICAgICAgcmVhbFRtcCA9IG1fY29kZS5uZXdUbXAoQXJnOjp0eXBl
Rm9yQjNUeXBlKHZhbHVlLT50eXBlKCkpKTsKICAgICAgICAgICAgIHRtcCA9IHJlYWxUbXA7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRtcDsKQEAgLTMxOCwxMSArMzEyLDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBh
bHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQogICAgICAg
ICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFnYWluLgotICAgICAgICBpZiAodmFsdWVUb1RtcFt2
YWx1ZV0pCisgICAgICAgIGlmIChtX3ZhbHVlVG9UbXBbdmFsdWVdKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgLy8gV2UgcmVxdWlyZSBpbnRlcm5hbHMgdG8g
aGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KLSAgICAgICAgaWYgKHVzZUNvdW50c1t2YWx1ZV0gIT0g
MSkKKyAgICAgICAgaWYgKG1fdXNlQ291bnRzW3ZhbHVlXSAhPSAxKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM0LDcgKzMyOCw3IEBAIHB1
YmxpYzoKICAgICAvLyBzaG9ydCwgeW91IHNob3VsZCBhdm9pZCB0aGlzIGJ5IHVzaW5nIHRoZSBw
YXR0ZXJuIG1hdGNoZXIgdG8gbWF0Y2ggcGF0dGVybnMuCiAgICAgdm9pZCBjb21taXRJbnRlcm5h
bChWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBsb2NrZWQuYWRkKHZhbHVlKTsKKyAgICAg
ICAgbV9sb2NrZWQuYWRkKHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIGNyb3NzZXNJbnRlcmZl
cmVuY2UoVmFsdWUqIHZhbHVlKQpAQCAtMzQzLDEzICszMzcsMTMgQEAgcHVibGljOgogICAgICAg
ICAvLyB3aWxsaW5nIHRvIGRvIGhlYXZpZXIgYW5hbHlzaXMuIEZvciBleGFtcGxlLCBpZiB3ZSBo
YWQgbGl2ZW5lc3MsIHRoZW4gd2UgY291bGQgbGFiZWwKICAgICAgICAgLy8gdmFsdWVzIGFzICJj
cm9zc2luZyBpbnRlcmZlcmVuY2UiIGlmIHRoZXkgaW50ZXJmZXJlIHdpdGggYW55dGhpbmcgdGhh
dCB0aGV5IGFyZSBsaXZlCiAgICAgICAgIC8vIGFjcm9zcy4gQnV0LCBpdCdzIG5vdCBjbGVhciBo
b3cgdXNlZnVsIHRoaXMgd291bGQgYmUuCi0gICAgICAgIGlmICh2YWx1ZS0+b3duZXIgIT0gY3Vy
cmVudFZhbHVlLT5vd25lcikKKyAgICAgICAgaWYgKHZhbHVlLT5vd25lciAhPSBtX3ZhbHVlLT5v
d25lcikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIEVmZmVjdHMgZWZmZWN0
cyA9IHZhbHVlLT5lZmZlY3RzKCk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVu
dEluZGV4OyBpLS07KSB7Ci0gICAgICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IGN1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7IGktLTspIHsK
KyAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV9ibG9jay0+YXQoaSk7CiAgICAgICAg
ICAgICBpZiAob3RoZXJWYWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBpZiAoZWZmZWN0cy5pbnRlcmZlcmVzKG90aGVyVmFsdWUtPmVmZmVj
dHMoKSkpCkBAIC0zNjMsMjMgKzM1Nyw1MSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyB0dXJucyB0
aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFuIGFkZHJlc3MuCiAgICAgQXJnIGVmZmVjdGl2ZUFkZHIo
VmFsdWUqIGFkZHJlc3MpCiAgICAgewotICAgICAgICBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRB
ZGRyZXNzID0gQXJnKCk7Ci0gICAgICAgIGlmIChydW5BZGRyZXNzTWF0Y2hlcihhZGRyZXNzLCBh
ZGRyZXNzU2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxl
Y3RlZEFkZHJlc3M7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYXRjaGluZyBhbiBhZGRy
ZXNzIGV4cHJlc3Npb24gZXZlbiBpZiB3ZSd2ZSBhbHJlYWR5IGFzc2lnbmVkIGEKKyAgICAgICAg
Ly8gVG1wIHRvIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
Nzc3CisgICAgICAgIGlmIChtX3ZhbHVlVG9UbXBbYWRkcmVzc10pCisgICAgICAgICAgICByZXR1
cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFk
ZHJlc3MtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgQWRkOiB7CisgICAgICAgICAgICBWYWx1
ZSogbGVmdCA9IGFkZHJlc3MtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0g
YWRkcmVzcy0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIGF1dG8gdHJ5SW5kZXggPSBbJl0gKFZh
bHVlKiBpbmRleCwgVmFsdWUqIG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXgtPm9wY29kZSgpICE9IFNobCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZygp
OworICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhpbmRleC0+Y2hpbGQoMCkp
IHx8IG1fbG9ja2VkLmNvbnRhaW5zKG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBcmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4LT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNjYWxlID0gMSA8PCAoaW5kZXgtPmNoaWxkKDEpLT5h
c0ludDMyKCkgJiAzMSk7CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRTY2FsZShz
Y2FsZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmcoKTsKIAotICAgICAgICByZXR1
cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7Ci0gICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBBcmc6OmluZGV4KHRtcChvZmZzZXQpLCB0bXAoaW5kZXgtPmNoaWxkKDApKSwgc2NhbGUpOwor
ICAgICAgICAgICAgfTsKIAotICAgIEFyZyBlZmZlY3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBW
YWx1ZSogbWVtb3J5VmFsdWUpCi0gICAgewotICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZl
QWRkcihhZGRyZXNzKTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAo
QXJnIHJlc3VsdCA9IHRyeUluZGV4KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgaWYgKEFyZyByZXN1bHQgPSB0cnlJbmRleChyaWdodCwg
bGVmdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICBpbnQzMl90
IG9mZnNldCA9IG1lbW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+b2Zmc2V0KCk7Ci0gICAg
ICAgIEFyZyBvZmZzZXRSZXN1bHQgPSByZXN1bHQud2l0aE9mZnNldChvZmZzZXQpOwotICAgICAg
ICBpZiAoIW9mZnNldFJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIodG1wKGFk
ZHJlc3MpLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gb2Zmc2V0UmVzdWx0OworICAgICAgICAg
ICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKGxlZnQpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKHJpZ2h0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KHRtcChsZWZ0KSwgdG1wKHJp
Z2h0KSk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAg
ICAgIHJldHVybiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7CisK
KyAgICAgICAgY2FzZSBCMzo6U3RhY2tTbG90OgorICAgICAgICAgICAgcmV0dXJuIEFyZzo6c3Rh
Y2sobV9zdGFja1RvU3RhY2suZ2V0KGFkZHJlc3MtPmFzPFN0YWNrU2xvdFZhbHVlPigpKSk7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIodG1wKGFkZHJl
c3MpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRy
ZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3Rv
cmUsIHRoZW4KQEAgLTM5MCw3ICs0MTIsMTQgQEAgcHVibGljOgogICAgICAgICBpZiAoIXZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogCi0gICAgICAgIHJldHVybiBlZmZlY3RpdmVB
ZGRyKHZhbHVlLT5sYXN0Q2hpbGQoKSwgdmFsdWUpOworICAgICAgICBBcmcgcmVzdWx0ID0gZWZm
ZWN0aXZlQWRkcih2YWx1ZS0+bGFzdENoaWxkKCkpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpLT5vZmZzZXQoKTsKKyAgICAgICAgQXJnIG9mZnNldFJlc3VsdCA9IHJlc3VsdC53
aXRoT2Zmc2V0KG9mZnNldCk7CisgICAgICAgIGlmICghb2Zmc2V0UmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIEFyZzo6YWRkcih0bXAodmFsdWUtPmxhc3RDaGlsZCgpKSwgb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIG9mZnNldFJlc3VsdDsKICAgICB9CiAKICAgICBBcmdQcm9taXNlIGxvYWRQ
cm9taXNlKFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKQEAgLTQxNiwx
NyArNDQ1LDU4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgIH0KIAotICAg
IEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCi0gICAgeworICAgIEFyZyBpbW1Gb3JNb3ZlKFZh
bHVlKiB2YWx1ZSkgewogICAgICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAodmFsdWUtPmhhc0ludDY0KCkpCisg
ICAgICAgICAgICByZXR1cm4gQXJnOjppbW02NCh2YWx1ZS0+YXNJbnQ2NCgpKTsKKyAgICAgICAg
cmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW1PclRtcEZvck1vdmUoVmFsdWUqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBpbW1Gb3JNb3ZlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiB0bXAodmFsdWUpOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZT4KKyAgICAvLyBCeSBjb252
ZW50aW9uLCB3ZSB1c2UgT29wcyB0byBtZWFuICJJIGRvbid0IGtub3ciLgorICAgIEFpcjo6T3Bj
b2RlIHRyeU9wY29kZUZvclR5cGUoCisgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6
Ok9wY29kZSBvcGNvZGU2NCwgQWlyOjpPcGNvZGUgb3Bjb2RlRG91YmxlLCBUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGU7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgb3Bjb2RlID0gb3Bjb2RlMzI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIG9wY29k
ZSA9IG9wY29kZTY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgb3Bjb2RlID0gb3Bjb2RlRG91YmxlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvcGNvZGU7CisgICAgfQor
CisgICAgQWlyOjpPcGNvZGUgb3Bjb2RlRm9yVHlwZSgKKyAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBBaXI6Ok9wY29kZSBvcGNvZGVEb3VibGUsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZUZv
clR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBvcGNvZGVEb3VibGUsIHR5cGUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgIT0gQWlyOjpPb3BzKTsKKyAgICAgICAgcmV0dXJuIG9wY29k
ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUzMiwgQWlyOjpPcGNv
ZGUgb3Bjb2RlNjQsIEFpcjo6T3Bjb2RlIG9wY29kZURvdWJsZT4KICAgICB2b2lkIGFwcGVuZFVu
T3AoVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50
VmFsdWUpOworICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKG9wY29k
ZTMyLCBvcGNvZGU2NCwgb3Bjb2RlRG91YmxlLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAKICAgICAgICAgLy8gVHdvIG9wZXJh
bmQgZm9ybXMgbGlrZToKICAgICAgICAgLy8gICAgIE9wIGEsIGIKQEAgLTQzOCwxNCArNTA4LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCB0bXAodmFsdWUp
LCByZXN1bHQpOworICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5
cGUoKSksIHRtcCh2YWx1ZSksIHJlc3VsdCk7CiAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJlc3Vs
dCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2
aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB0ZW1wbGF0ZTwKKyAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBBaXI6Ok9wY29k
ZSBvcGNvZGVEb3VibGUsCisgICAgICAgIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5v
dENvbW11dGF0aXZlPgogICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKICAgICB7Ci0gICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShvcGNvZGUzMiwgb3Bjb2Rl
NjQsIG9wY29kZURvdWJsZSwgbGVmdC0+dHlwZSgpKTsKKyAgICAgICAgCisgICAgICAgIFRtcCBy
ZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaHJlZS1vcGVyYW5k
IGZvcm1zIGxpa2U6CiAgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCkBAIC00ODcsNyArNTYxLDcg
QEAgcHVibGljOgogICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewog
ICAgICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0QWRkciA9IGxvYWRQcm9taXNlKGxlZnQpOwogICAg
ICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRt
cCkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGN1cnJlbnRW
YWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBhcHBl
bmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCksIHJlc3Vs
dCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhp
cyksIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAt
NDk1LDEzICs1NjksMTMgQEAgcHVibGljOgogCiAgICAgICAgIEFyZ1Byb21pc2UgcmlnaHRBZGRy
ID0gbG9hZFByb21pc2UocmlnaHQpOwogICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBy
aWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVk
TW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCB0bXAobGVmdCksIHJlc3VsdCk7Cisg
ICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRt
cChsZWZ0KSwgcmVzdWx0KTsKICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkci5j
b25zdW1lKCp0aGlzKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgewotICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJy
ZW50VmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVu
ZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQp
OwogICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTExLDI5ICs1ODUsNTcgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobGVm
dCksIHJlc3VsdCk7CiAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7
CiAgICAgfQogCi0gICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlPgorICAgIHRlbXBsYXRl
PEFpcjo6T3Bjb2RlIG9wY29kZTMyLCBBaXI6Ok9wY29kZSBvcGNvZGU2ND4KKyAgICB2b2lkIGFw
cGVuZFNoaWZ0KFZhbHVlKiB2YWx1ZSwgVmFsdWUqIGFtb3VudCkKKyAgICB7CisgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBBaXI6
Ok9vcHMsIHZhbHVlLT50eXBlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGltbShhbW91bnQp
KSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1wKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShhbW91bnQpLCB0bXAobV92YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRt
cCh2YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAoYW1vdW50
KSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KSk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIFRtcChY
ODZSZWdpc3RlcnM6OmVjeCksIHRtcChtX3ZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
QWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0PgogICAgIGJvb2wgdHJ5
QXBwZW5kU3RvcmVVbk9wKFZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFyZyBzdG9yZUFk
ZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IHRy
eU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBBaXI6Ok9vcHMsIHZhbHVlLT50eXBl
KCkpOworICAgICAgICBpZiAob3Bjb2RlID09IEFpcjo6T29wcykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKG1fdmFsdWUp
OwogICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKIAogICAgICAgICBBcmdQcm9taXNlIGxvYWRQ
cm9taXNlID0gdGhpcy0+bG9hZFByb21pc2UodmFsdWUpOwogICAgICAgICBpZiAobG9hZFByb21p
c2UucGVlaygpICE9IHN0b3JlQWRkcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
ICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBsb2FkUHJvbWlzZS5jb25zdW1l
KCp0aGlzKTsKICAgICAgICAgYXBwZW5kKG9wY29kZSwgc3RvcmVBZGRyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21t
dXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB0ZW1wbGF0ZTwK
KyAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0LCBDb21t
dXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KICAgICBib29sIHRyeUFw
cGVuZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKICAgICB7Ci0gICAgICAg
IEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFpcjo6T3Bjb2Rl
IG9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUob3Bjb2RlMzIsIG9wY29kZTY0LCBBaXI6Ok9vcHMs
IGxlZnQtPnR5cGUoKSk7CisgICAgICAgIGlmIChvcGNvZGUgPT0gQWlyOjpPb3BzKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFk
ZHIobV92YWx1ZSk7CiAgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwogCiAgICAgICAgIEFyZ1By
b21pc2UgbG9hZFByb21pc2U7CkBAIC02MDgsNyArNzEwLDcgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lkIGFwcGVuZChBaXI6Ok9wY29kZSBv
cGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIGluc3RzLmxh
c3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoSW5z
dChvcGNvZGUsIG1fdmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CkBAIC02MTYsNyArNzE4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFmaWVs
ZCkgewogICAgICAgICAgICAgZmllbGQgPSBzdGF0aWNfY2FzdDxUKj4oCi0gICAgICAgICAgICAg
ICAgY29kZS5hZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8VD4oc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50cz4oYXJndW1lbnRzKS4uLikpKTsKKyAgICAgICAgICAgICAgICBtX2NvZGUuYWRkU3BlY2lh
bChzdGQ6Om1ha2VfdW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cyku
Li4pKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZpZWxkOwogICAgIH0KQEAgLTYyOSwx
NCArNzMxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFyZyBhcmc7CiAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLnJlcCgpLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgotICAgICAgICAgICAgICAgIGFyZyA9IGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIGFyZyA9IGltbU9yVG1wRm9yTW92ZSh2YWx1ZS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKICAgICAgICAgICAgICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAg
ICAgICAgICAgICBhcmcgPSBUbXAodmFsdWUucmVwKCkucmVnKCkpOwotICAgICAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwgYXJnKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgaW1tT3JUbXBGb3JNb3ZlKHZhbHVlLnZhbHVlKCkpLCBhcmcpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tB
cmd1bWVudDoKICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmNhbGxBcmcodmFsdWUucmVwKCku
b2Zmc2V0RnJvbVNQKCkpOwpAQCAtNjUwLDEyNiArNzUyLDYgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2
YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KLSAgICBJbmRleE1hcDxWYWx1ZSwg
VG1wPiB2YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1w
IGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlu
bmVkIi4KLSAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxv
Y2tUb0Jsb2NrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90VmFsdWUqLCBBaXI6OlN0YWNrU2xvdCo+
IHN0YWNrVG9TdGFjazsKLQotICAgIFVzZUNvdW50cyB1c2VDb3VudHM7Ci0KLSAgICBWZWN0b3I8
VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKLSAgICBWZWN0b3I8SW5zdD4gcHJvbG9ndWU7Ci0KLSAg
ICBCMzo6QmFzaWNCbG9jayogY3VycmVudEJsb2NrOwotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRl
eDsKLSAgICBWYWx1ZSogY3VycmVudFZhbHVlOwotCi0gICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0
b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2
YWlsYWJsZSBhcyBUbXBzLgotICAgIC8vIEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJ
dCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQg
b3ZlcgotICAgIC8vIGFnYWluIHJlZ2FyZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4
aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBzaW5jZSBhdCB0aGUgbWFjaGluZQotICAgIC8vIGxl
dmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBk
b2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCi0gICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhw
cmVzc2lvbnMuCi0gICAgY2xhc3MgQWRkcmVzc1NlbGVjdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKLSAgICAgICAgICAgIDogbG93
ZXIobG93ZXIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYWNjZXB0Um9v
dChWYWx1ZSogcm9vdCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy0+cm9vdCA9IHJvb3Q7
Ci0gICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3MgZXhwcmVz
c2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQKLSAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkuIFRoaXMgbW9zdGx5IG1ha2VzIHNlbnNlLiBOb3RlIHRoYXQgd2UgbmV2ZXIgaG9pc3Qg
YmFzaWMgYWRkcmVzcwotICAgICAgICAgICAgLy8gZXhwcmVzc2lvbnMgbGlrZSBvZmZzZXQoYmFz
ZSksIGJlY2F1c2UgdGhvc2UgYXJlIHN1bmsgaW50byB0aGUgTWVtb3J5VmFsdWUuIFNvLAotICAg
ICAgICAgICAgLy8gdGhpcyBpcyBtYWlubHkganVzdCByZWxldmFudCB0byBJbmRleCBleHByZXNz
aW9ucyBhbmQgb3RoZXIgbW9yZSBjb21wbGljYXRlZAotICAgICAgICAgICAgLy8gdGhpbmdzLiBJ
dCBzdGFuZHMgdG8gcmVhc29uIHRoYXQgbW9zdCBvZiB0aGUgdGltZSwgd2Ugd29uJ3QgaG9pc3Qg
YW4gSW5kZXgKLSAgICAgICAgICAgIC8vIGV4cHJlc3Npb24uIEFuZCBpZiB3ZSBkbywgdGhlbiBw
cm9iYWJseSBpdCdzIGEgZ29vZCB0aGluZyB0byBjb21wdXRlIGl0IG91dHNpZGUKLSAgICAgICAg
ICAgIC8vIGEgbG9vcC4gVGhhdCBiZWluZyBzYWlkLCB0aGlzIG1pZ2h0IHR1cm4gaW50byBhIHBy
b2JsZW0uIEZvciBleGFtcGxlLCBpdCB3aWxsCi0gICAgICAgICAgICAvLyByZXF1aXJlIGFuIGV4
dHJhIHJlZ2lzdGVyIHRvIGJlIGxpdmUuIFRoYXQncyB1bmxpa2VseSB0byBiZSBwcm9maXRhYmxl
LgotICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1hdGNoaW5nIGFuIGFkZHJlc3MgZXhw
cmVzc2lvbiBldmVuIGlmIHdlJ3ZlIGFscmVhZHkgYXNzaWduZWQgYQotICAgICAgICAgICAgLy8g
VG1wIHRvIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzc3
Ci0gICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZhbHVlVG9UbXBbcm9vdF07Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9Ci0KLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgICAgICBib29sIGFjY2VwdEludGVybmFs
cyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4u
Lik7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgICAg
ICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KLQotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgICAgIGJvb2wgYWNjZXB0T3BlcmFu
ZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1l
bnRzLi4uKTsKLSAgICAgICAgfQotICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAg
ICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KLQotICAgICAg
ICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSwgVmFsdWUq
IGJhc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsb2dTY2FsZS0+YXNJbnQoKSA8IDAg
fHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgoCi0gICAgICAgICAgICAg
ICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAoaW5kZXgpLCAxIDw8IGxvZ1NjYWxlLT5hc0lu
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ5QWRkU2hpZnQxKGluZGV4LCBsb2dT
Y2FsZSwgYmFzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmlnaHQtPmhhc0lu
dDMyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHByb2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0
bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAotICAgICAgICAgICAgICAgIC8vIExvYWQoQWRk
KEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0byBoYXZlIGFscmVhZHkgYmVlbiBzdHJl
bmd0aC1yZWR1Y2VkCi0gICAgICAgICAgICAgICAgLy8gdG8gTG9hZChAeCwgb2Zmc2V0ID0gY29u
c3QxICsgY29uc3QyKS4KLSAgICAgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFk
ZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNz
ID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxvd2VyLnRtcChyaWdodCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHRyeUZyYW1lUG9p
bnRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRk
cihUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCB0cnlTdGFja1Nsb3QoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OnN0YWNrKGxvd2VyLnN0YWNrVG9T
dGFjay5nZXQocm9vdC0+YXM8U3RhY2tTbG90VmFsdWU+KCkpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCB0cnlEaXJlY3QoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKHJvb3Qp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBMb3dlclRvQWlyJiBsb3dlcjsKLSAgICAgICAgVmFsdWUqIHJvb3Q7Ci0gICAgICAgIEFyZyBz
ZWxlY3RlZEFkZHJlc3M7Ci0gICAgfTsKLSAgICBBZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVj
dG9yOwotCiAgICAgLy8gQ3JlYXRlIGFuIEluc3QgdG8gZG8gdGhlIGNvbXBhcmlzb24gc3BlY2lm
aWVkIGJ5IHRoZSBnaXZlbiB2YWx1ZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJlRnVu
Y3RvciwgdHlwZW5hbWUgVGVzdEZ1bmN0b3IsIHR5cGVuYW1lIENvbXBhcmVEb3VibGVGdW5jdG9y
PgogICAgIEluc3QgY3JlYXRlR2VuZXJpY0NvbXBhcmUoCkBAIC03ODMsNyArNzY1LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyB0byBmb2xsb3cgdGhlIHJ1bGUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IgcmVkdWNlcyBzdHJlbmd0aCB3aGVuZXZlciBpdCBkb2Vzbid0CiAgICAgICAgIC8v
IHJlcXVpcmUgbWFraW5nIHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkLgogICAgICAgICBmb3IgKDs7
KSB7Ci0gICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwodmFsdWUpICYmIHZhbHVlICE9IGN1
cnJlbnRWYWx1ZSkKKyAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbCh2YWx1ZSkgJiYgdmFs
dWUgIT0gbV92YWx1ZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGJvb2wg
c2hvdWxkSW52ZXJ0ID0KICAgICAgICAgICAgICAgICAodmFsdWUtPm9wY29kZSgpID09IEJpdFhv
ciAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDEpICYmIHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJu
c0Jvb2woKSkKQEAgLTEwMjEsNyArMTAwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgfTsKIAotICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCh2YWx1ZSkgfHwgdmFsdWUgPT0g
Y3VycmVudFZhbHVlKSB7CisgICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlKSB8fCB2YWx1
ZSA9PSBtX3ZhbHVlKSB7CiAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSBhdHRlbXB0RnVz
ZWQoKSkgewogICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTA0Nyw3ICsxMDI5LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShCcmFuY2g4LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5k
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCcmFuY2g4LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnJhbmNoOCwgbV92YWx1ZSwgcmVsQ29uZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoKTsKQEAgLTEwNTYsMTQgKzEwMzgsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDMyOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
QnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJyYW5jaDMyLCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQnJhbmNoMzIsIG1fdmFsdWUsIHJlbENvbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShCcmFuY2g2NCwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmln
aHQua2luZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoNjQsIGN1cnJlbnRWYWx1ZSwgcmVsQ29uZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2g2NCwgbV92YWx1ZSwgcmVsQ29uZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoKTsKQEAgLTEwNzYsNyArMTA1OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0oQnJhbmNoVGVzdDgsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJyYW5jaFRlc3Q4LCBjdXJyZW50VmFsdWUsIHJlc0NvbmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDgsIG1fdmFsdWUsIHJlc0NvbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29u
c3VtZSgqdGhpcykpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJbnN0KCk7CkBAIC0xMDg1LDE0ICsxMDY3LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKEJyYW5jaFRlc3QzMiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2lu
ZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDMyLCBjdXJyZW50VmFsdWUsIHJlc0NvbmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDMyLCBtX3ZhbHVlLCByZXNDb25k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0
LmNvbnN1bWUoKnRoaXMpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0Ogog
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVzdDY0LCBBcmc6OlJl
c0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0
NjQsIGN1cnJlbnRWYWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
cmFuY2hUZXN0NjQsIG1fdmFsdWUsIHJlc0NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CkBAIC0xMTAx
LDcgKzEwODMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBbdGhpc10gKEFyZyBkb3VibGVDb25k
LCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5z
dCB7CiAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaERvdWJsZSwgQXJnOjpE
b3VibGVDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaERvdWJsZSwg
Y3VycmVudFZhbHVlLCBkb3VibGVDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNo
RG91YmxlLCBtX3ZhbHVlLCBkb3VibGVDb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwpAQCAtMTEyMywxNSArMTEwNSwxNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5r
aW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlMzIsIGN1
cnJlbnRWYWx1ZSwgcmVsQ29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNv
bnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmUzMiwgbV92YWx1ZSwgcmVsQ29uZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSwgdG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpXaWR0aDY0OgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQ29tcGFyZTY0
LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcGFyZTY0LCBjdXJyZW50VmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyks
IHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJl
NjQsIG1fdmFsdWUsIHJlbENvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5j
b25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMTQ2LDE1ICsxMTI4LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6V2lkdGgzMjoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKFRlc3QzMiwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpLCBB
cmc6OlRtcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRlc3QzMiwgY3VycmVudFZhbHVlLCByZXNDb25kLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1
bWUoKnRoaXMpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGVzdDMyLCBtX3ZhbHVlLCByZXNDb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJp
Z2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0NjQsIGN1cnJlbnRWYWx1ZSwg
cmVzQ29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMp
LCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRlc3Q2NCwgbV92YWx1ZSwgcmVzQ29uZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwg
dG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNjcsNDMzICsxMTQ5LDI3
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnZlcnRlZCk7CiAgICAgfQogCi0gICAgLy8gQmVs
b3cgaXMgdGhlIGNvZGUgZm9yIGEgbG93ZXJpbmcgc2VsZWN0b3IsIHNvIHRoYXQgd2UgY2FuIHBh
c3MgKnRoaXMgdG8gcnVuTG93ZXJpbmdNYXRjaGVyLgotICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBj
b21wbGV4IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBz
aGFyaW5nLiBGb3IgZXhhbXBsZSwKLSAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2Ug
YW5kIGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3Jp
Z2luYWwKLSAgICAvLyBjb2RlIGp1c3QgZGlkIG9uZS4KLSAgICAKLSAgICBib29sIGFjY2VwdFJv
b3QoVmFsdWUqIHJvb3QpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHJvb3QsICFsb2Nr
ZWQuY29udGFpbnMocm9vdCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFs
dWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgewotICAgICAgICBpZiAoIWNhbkJlSW50
ZXJuYWwodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4pOwotICAgIH0KLSAgICBib29s
IGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVl
KiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIGNvbW1pdElu
dGVybmFsKHZhbHVlKTsKLSAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4p
OwotICAgIH0KLSAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7IH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhW
YWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgewotICAgICAgICBpZiAo
bG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7Ci0gICAgfQotICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50
cy4uLikgeyB9Ci0gICAgCi0gICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQotICAgIHsK
LSAgICAgICAgYXBwZW5kKAotICAgICAgICAgICAgbW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50
eXBlKCkpLAotICAgICAgICAgICAgZWZmZWN0aXZlQWRkcihhZGRyZXNzLCBjdXJyZW50VmFsdWUp
LCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGJvb2wgdHJ5TG9hZDhTKFZhbHVlKiBhZGRyZXNzKQotICAgIHsKLSAgICAgICAgYXBwZW5kKExv
YWQ4U2lnbmVkRXh0ZW5kVG8zMiwgZWZmZWN0aXZlQWRkcihhZGRyZXNzLCBjdXJyZW50VmFsdWUp
LCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBib29sIHRyeUxvYWQ4WihWYWx1ZSogYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIGFwcGVu
ZChMb2FkOCwgZWZmZWN0aXZlQWRkcihhZGRyZXNzLCBjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVu
dFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIHRy
eUxvYWQxNlMoVmFsdWUqIGFkZHJlc3MpCi0gICAgewotICAgICAgICBhcHBlbmQoTG9hZDE2U2ln
bmVkRXh0ZW5kVG8zMiwgZWZmZWN0aXZlQWRkcihhZGRyZXNzLCBjdXJyZW50VmFsdWUpLCB0bXAo
Y3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBi
b29sIHRyeUxvYWQxNlooVmFsdWUqIGFkZHJlc3MpCi0gICAgewotICAgICAgICBhcHBlbmQoTG9h
ZDE2LCBlZmZlY3RpdmVBZGRyKGFkZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFs
dWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgdHJ5QWRk
KFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGxlZnQt
PnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgYXBwZW5kQmluT3A8
QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBD
b21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMh
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29s
IHRyeVN1YihWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHZvaWQgbG93ZXIoKQogICAg
IHsKLSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoK
LSAgICAgICAgICAgIGlmIChsZWZ0LT5pc0ludDMyKDApKQotICAgICAgICAgICAgICAgIGFwcGVu
ZFVuT3A8TmVnMzI+KHJpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBh
cHBlbmRCaW5PcDxTdWIzMj4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBpZiAobGVmdC0+aXNJbnQ2NCgwKSkK
LSAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5lZzY0PihyaWdodCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8U3ViNjQ+KGxlZnQsIHJpZ2h0KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2UgTG9hZDp7
CisgICAgICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgbW92ZUZvclR5cGUobV92YWx1
ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkp
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wg
dHJ5QW5kKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGxlZnQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgYXBwZW5k
QmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFu
ZDY0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUg
dHlwZXMhCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBMb2FkOFM6IHsKKyAgICAgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIs
IGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICBib29sIHRyeU9yKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIElu
dDMyOgotICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJp
Z2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIEludDY0OgotICAg
ICAgICAgICAgYXBwZW5kQmluT3A8T3I2NCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBjYXNlIExvYWQ4WjogeworICAgICAgICAgICAgYXBwZW5kKExvYWQ4LCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgfQogCi0gICAgYm9vbCB0cnlYb3IoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0g
ICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAg
ICAgYXBwZW5kQmluT3A8WG9yNjQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBMb2FkMTZTOiB7CisgICAgICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0ZW5k
VG8zMiwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgIH0KIAotICAgIHZvaWQgYXBwZW5kU2hpZnQoQWlyOjpPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBhbW91bnQpCi0gICAgewotICAgICAgICBpZiAoaW1t
KGFtb3VudCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAoY3Vy
cmVudFZhbHVlKSk7Ci0gICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0oYW1vdW50KSwgdG1w
KGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBjYXNlIExvYWQxNlo6IHsKKyAgICAgICAgICAgIGFw
cGVuZChMb2FkMTYsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1w
KGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChY
ODZSZWdpc3RlcnM6OmVjeCkpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0
ZXJzOjplY3gpLCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgfQotCi0gICAgYm9vbCB0cnlTaGwo
VmFsdWUqIHZhbHVlLCBWYWx1ZSogYW1vdW50KQotICAgIHsKLSAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlID0gdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IExzaGlmdDMyIDogTHNoaWZ0NjQ7Ci0g
ICAgICAgIGFwcGVuZFNoaWZ0KG9wY29kZSwgdmFsdWUsIGFtb3VudCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgdHJ5U1NocihWYWx1ZSogdmFsdWUsIFZhbHVlKiBh
bW91bnQpCi0gICAgewotICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB2YWx1ZS0+dHlwZSgp
ID09IEludDMyID8gUnNoaWZ0MzIgOiBSc2hpZnQ2NDsKLSAgICAgICAgYXBwZW5kU2hpZnQob3Bj
b2RlLCB2YWx1ZSwgYW1vdW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ym9vbCB0cnlaU2hyKFZhbHVlKiB2YWx1ZSwgVmFsdWUqIGFtb3VudCkKLSAgICB7Ci0gICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9IHZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyBVcnNoaWZ0MzIg
OiBVcnNoaWZ0NjQ7Ci0gICAgICAgIGFwcGVuZFNoaWZ0KG9wY29kZSwgdmFsdWUsIGFtb3VudCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIHRyeVN0b3JlQWRk
TG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGxlZnQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
cmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdo
dCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1v
cmUgdHlwZXMhCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRkOiB7
CisgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCBhIHN0b3J5IGZvciBkb3VibGVzLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MQor
ICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBaXI6Ok9vcHMsIENvbW11dGF0
aXZlPigKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgYm9vbCB0
cnlTdG9yZVN1YkxvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAg
ICAgICAgICAgIGlmIChsZWZ0LT5pc0ludDMyKDApKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnlBcHBlbmRTdG9yZVVuT3A8TmVnMzI+KHJpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnlB
cHBlbmRTdG9yZUJpbk9wPFN1YjMyLCBOb3RDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVz
IQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFN1YjogeworICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAgICAgICAgICBh
cHBlbmRVbk9wPE5lZzMyLCBOZWc2NCwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgxKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8U3ViMzIsIFN1YjY0
LCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBib29sIHRyeVN0b3JlQW5k
TG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGxlZnQtPnR5cGUoKSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
cmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdo
dCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1v
cmUgdHlwZXMhCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQml0QW5k
OiB7CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFpcjo6T29wcywgQ29t
bXV0YXRpdmU+KAorICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5j
aGlsZCgxKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCB0cnlTdG9yZShWYWx1ZSogdmFsdWUsIFZhbHVlKiBhZGRyZXNzKQotICAgIHsKLSAg
ICAgICAgYXBwZW5kU3RvcmUodmFsdWUsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywgY3VycmVudFZh
bHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAotICAgIGJvb2wgdHJ5VHJ1bmMo
VmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdG1wKHZh
bHVlKSA9PSB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgdHJ5WkV4dDMyKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICho
aWdoQml0c0FyZVplcm8odmFsdWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQodG1wKHZhbHVlKSA9
PSB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Y2FzZSBCaXRPcjogeworICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwgQWlyOjpP
b3BzLCBDb21tdXRhdGl2ZT4oCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1f
dmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1wKHZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKLSAgICBib29sIHRyeUFyZ3VtZW50UmVn
KCkKLSAgICB7Ci0gICAgICAgIHByb2xvZ3VlLmFwcGVuZChJbnN0KAotICAgICAgICAgICAgbW92
ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCBjdXJyZW50VmFsdWUsCi0gICAgICAgICAg
ICBUbXAoY3VycmVudFZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygp
KSwKLSAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUpKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBib29sIHRyeUNvbnN0MzIoKQotICAgIHsKLSAgICAgICAgYXBw
ZW5kKE1vdmUsIGltbShjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIHRyeUNvbnN0NjQoKQotICAgIHsK
LSAgICAgICAgaWYgKGltbShjdXJyZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICBhcHBlbmQoTW92
ZSwgaW1tKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIEJpdFhvcjogeworICAgICAgICAgICAgYXBwZW5kQmlu
T3A8WG9yMzIsIFhvcjY0LCBBaXI6Ok9vcHMsIENvbW11dGF0aXZlPigKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbTY0KGN1cnJlbnRW
YWx1ZS0+YXNJbnQ2NCgpKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CiAKLSAgICBib29sIHRyeUZyYW1lUG9pbnRlcigpCi0gICAgewotICAgICAgICBh
cHBlbmQoTW92ZSwgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgdG1wKGN1cnJlbnRW
YWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgIGNhc2UgU2hsOiB7
CisgICAgICAgICAgICBhcHBlbmRTaGlmdDxMc2hpZnQzMiwgTHNoaWZ0NjQ+KG1fdmFsdWUtPmNo
aWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGJvb2wgdHJ5U3RhY2tTbG90KCkKLSAgICB7Ci0gICAgICAgIGFwcGVuZCgKLSAg
ICAgICAgICAgIExlYSwKLSAgICAgICAgICAgIEFyZzo6c3RhY2soc3RhY2tUb1N0YWNrLmdldChj
dXJyZW50VmFsdWUtPmFzPFN0YWNrU2xvdFZhbHVlPigpKSksCi0gICAgICAgICAgICB0bXAoY3Vy
cmVudFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2FzZSBT
U2hyOiB7CisgICAgICAgICAgICBhcHBlbmRTaGlmdDxSc2hpZnQzMiwgUnNoaWZ0NjQ+KG1fdmFs
dWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KIAotICAgIGJvb2wgdHJ5RXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMubGFz
dCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgICAgIGNhc2UgWlNocjogeworICAgICAgICAgICAgYXBwZW5kU2hp
ZnQ8VXJzaGlmdDMyLCBVcnNoaWZ0NjQ+KG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGls
ZCgxKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGJvb2wgdHJ5Tm90
RXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJl
KGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgIGNh
c2UgU3RvcmU6IHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZVRvU3RvcmUgPSBtX3ZhbHVlLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKHZhbHVlVG9TdG9yZSkpIHsK
KyAgICAgICAgICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlVG9TdG9yZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFk
ZDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRyeUFwcGVuZFN0b3JlQmluT3A8QWRk
MzIsIEFkZDY0LCBDb21tdXRhdGl2ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRv
U3RvcmUtPmNoaWxkKDApLCB2YWx1ZVRvU3RvcmUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZVRvU3RvcmUtPmNoaWxkKDApLT5pc0ludCgwKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZCA9IHRyeUFwcGVuZFN0b3JlVW5PcDxOZWczMiwgTmVnNjQ+KHZh
bHVlVG9TdG9yZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRyeUFw
cGVuZFN0b3JlQmluT3A8U3ViMzIsIFN1YjY0PigKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlVG9TdG9yZS0+Y2hpbGQoMCksIHZhbHVlVG9TdG9yZS0+Y2hpbGQoMSkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZCA9IHRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIEFuZDY0LCBD
b21tdXRhdGl2ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RvcmUtPmNoaWxk
KDApLCB2YWx1ZVRvU3RvcmUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHZhbHVlVG9TdG9yZSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICBi
b29sIHRyeUxlc3NUaGFuKCkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3Jl
YXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQor
ICAgICAgICAgICAgYXBwZW5kU3RvcmUodmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYm9vbCB0cnlHcmVhdGVyVGhhbigp
Ci0gICAgewotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVu
dFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2FzZSBUcnVu
YzogeworICAgICAgICAgICAgQVNTRVJUKHRtcChtX3ZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYm9vbCB0cnlM
ZXNzRXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21w
YXJlKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAg
IGNhc2UgWkV4dDMyOiB7CisgICAgICAgICAgICBpZiAoaGlnaEJpdHNBcmVaZXJvKG1fdmFsdWUt
PmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCh0bXAobV92YWx1ZS0+Y2hpbGQo
MCkpID09IHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQogCi0gICAgYm9vbCB0cnlHcmVhdGVyRXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMu
bGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCB0bXAobV92YWx1ZS0+
Y2hpbGQoMCkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAKLSAgICBib29sIHRyeUFib3ZlKCkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBl
bmQoY3JlYXRlQ29tcGFyZShjdXJyZW50VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgICAgICBjYXNlIEFyZ3VtZW50UmVnOiB7CisgICAgICAgICAgICBtX3Byb2xvZ3Vl
LmFwcGVuZChJbnN0KAorICAgICAgICAgICAgICAgIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUo
KSksIG1fdmFsdWUsCisgICAgICAgICAgICAgICAgVG1wKG1fdmFsdWUtPmFzPEFyZ3VtZW50UmVn
VmFsdWU+KCktPmFyZ3VtZW50UmVnKCkpLAorICAgICAgICAgICAgICAgIHRtcChtX3ZhbHVlKSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHRyeUJlbG93KCkK
LSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQ29tcGFyZShjdXJyZW50
VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgICAgICBjYXNlIENvbnN0
MzI6CisgICAgICAgIGNhc2UgQ29uc3Q2NDogeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGlt
bUZvck1vdmUobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KIAotICAgIGJvb2wgdHJ5QWJvdmVFcXVhbCgpCi0gICAgewotICAgICAgICBpbnN0
cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUNvbXBhcmUoY3VycmVudFZhbHVlKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2FzZSBGcmFtZVBvaW50ZXI6IHsKKyAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCB0bXAobV92
YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHRyeUJl
bG93RXF1YWwoKQotICAgIHsKLSAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21w
YXJlKGN1cnJlbnRWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAg
IGNhc2UgQjM6OlN0YWNrU2xvdDogeworICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAg
ICAgIExlYSwKKyAgICAgICAgICAgICAgICBBcmc6OnN0YWNrKG1fc3RhY2tUb1N0YWNrLmdldCht
X3ZhbHVlLT5hczxTdGFja1Nsb3RWYWx1ZT4oKSkpLAorICAgICAgICAgICAgICAgIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIFBhdGNocG9pbnRT
cGVjaWFsKiBwYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKLSAgICBib29sIHRyeVBhdGNo
cG9pbnQoKQotICAgIHsKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50VmFsdWUg
PSBjdXJyZW50VmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKLSAgICAgICAgZW5zdXJlU3Bl
Y2lhbChwYXRjaHBvaW50U3BlY2lhbCk7CisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgIGNh
c2UgTm90RXF1YWw6CisgICAgICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIGNhc2UgR3JlYXRl
clRoYW46CisgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBjYXNlIEdyZWF0ZXJFcXVh
bDoKKyAgICAgICAgY2FzZSBBYm92ZToKKyAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgY2Fz
ZSBBYm92ZUVxdWFsOgorICAgICAgICBjYXNlIEJlbG93RXF1YWw6IHsKKyAgICAgICAgICAgIG1f
aW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVDb21wYXJlKG1fdmFsdWUpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2hwb2lu
dFZhbHVlLCBBcmc6OnNwZWNpYWwocGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAgICAgICAgY2FzZSBQ
YXRjaHBvaW50OiB7CisgICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnRWYWx1
ZSA9IG1fdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKKyAgICAgICAgICAgIGVuc3VyZVNw
ZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIElu
c3QgaW5zdChQYXRjaCwgcGF0Y2hwb2ludFZhbHVlLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50
U3BlY2lhbCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocGF0Y2hwb2ludFZhbHVl
LT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChw
YXRjaHBvaW50VmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmlsbFN0YWNrbWFw
KGluc3QsIHBhdGNocG9pbnRWYWx1ZSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
aW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBhdGNocG9pbnRWYWx1ZS0+dHlwZSgpICE9IFZv
aWQpCi0gICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChwYXRjaHBvaW50VmFsdWUpKTsK
KyAgICAgICAgY2FzZSBDaGVjazogeworICAgICAgICAgICAgSW5zdCBicmFuY2ggPSBjcmVhdGVC
cmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBDaGVj
a1NwZWNpYWw6OktleSBrZXkoYnJhbmNoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9j
aGVja1NwZWNpYWxzLmFkZChrZXksIG51bGxwdHIpOworICAgICAgICAgICAgU3BlY2lhbCogc3Bl
Y2lhbCA9IGVuc3VyZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFz
PENoZWNrVmFsdWU+KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluc3QgaW5zdChQYXRj
aCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKKyAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmRWZWN0b3IoYnJhbmNoLmFyZ3MpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAgZmlsbFN0YWNrbWFwKGluc3QsIHBhdGNo
cG9pbnRWYWx1ZSwgMCk7Ci0gICAgICAgIAotICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKFdU
Rjo6bW92ZShpbnN0KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAgICAgY2Fz
ZSBVcHNpbG9uOiB7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIGFwcGVuZCgKKyAgICAgICAgICAgICAgICByZWxheGVkTW92ZUZvclR5
cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wRm9yTW92ZSh2YWx1ZSksCisgICAgICAgICAgICAg
ICAgdG1wKG1fdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+cGhpKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgSGFzaE1hcDxDaGVja1NwZWNpYWw6OktleSwgQ2hl
Y2tTcGVjaWFsKj4gY2hlY2tTcGVjaWFsczsKLSAgICBib29sIHRyeUNoZWNrKFZhbHVlKiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIEluc3QgYnJhbmNoID0gY3JlYXRlQnJhbmNoKHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgIC8vIE91ciBzZW1hbnRpY3MgYXJlIGRldGVy
bWluZWQgYnkgVXBzaWxvbnMsIHNvIHdlIGhhdmUgbm90aGluZyB0byBkbyBoZXJlLgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAgQ2hlY2tTcGVjaWFsOjpLZXkga2V5
KGJyYW5jaCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gY2hlY2tTcGVjaWFscy5hZGQoa2V5LCBu
dWxscHRyKTsKLSAgICAgICAgU3BlY2lhbCogc3BlY2lhbCA9IGVuc3VyZVNwZWNpYWwocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsKKyAgICAgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAg
ICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIENoZWNrVmFsdWUq
IGNoZWNrVmFsdWUgPSBjdXJyZW50VmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CisgICAgICAgIGNh
c2UgQjM6Okp1bXA6IHsKKyAgICAgICAgICAgIGFwcGVuZChBaXI6Okp1bXApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJZGVudGl0
eTogeworICAgICAgICAgICAgQVNTRVJUKHRtcChtX3ZhbHVlLT5jaGlsZCgwKSkgPT0gdG1wKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIEluc3Qg
aW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKLSAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZFZlY3RvcihicmFuY2guYXJncyk7CisgICAgICAgIGNhc2UgUmV0dXJu
OiB7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIGFwcGVuZCgKKyAgICAgICAgICAgICAgICByZWxheGVkTW92ZUZvclR5cGUodmFsdWUt
PnR5cGUoKSksIGltbU9yVG1wRm9yTW92ZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgICAgICBhcHBlbmQoUmV0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBj
aGVja1ZhbHVlLCAxKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAKLSAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBs
b3dlciAiLCBkZWVwRHVtcChtX3ZhbHVlKSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBtX2xvY2tl
ZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAg
IEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0
aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBu
b24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFp
cjo6QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOworICAgIEhhc2hNYXA8U3RhY2tTbG90VmFs
dWUqLCBBaXI6OlN0YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOwogCi0gICAgYm9vbCB0cnlVcHNp
bG9uKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZCgKLSAgICAgICAgICAgIHJl
bGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwKLSAgICAgICAgICAgIGltbU9yVG1wKHZh
bHVlKSwKLSAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+
cGhpKCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIFVzZUNvdW50cyBtX3Vz
ZUNvdW50czsKIAotICAgIGJvb2wgdHJ5UGhpKCkKLSAgICB7Ci0gICAgICAgIC8vIE91ciBzZW1h
bnRpY3MgYXJlIGRldGVybWluZWQgYnkgVXBzaWxvbnMsIHNvIHdlIGhhdmUgbm90aGluZyB0byBk
byBoZXJlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgVmVjdG9yPFZlY3RvcjxJ
bnN0LCA0Pj4gbV9pbnN0czsKKyAgICBWZWN0b3I8SW5zdD4gbV9wcm9sb2d1ZTsKIAotICAgIGJv
b2wgdHJ5QnJhbmNoKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGluc3RzLmxhc3QoKS5h
cHBlbmQoY3JlYXRlQnJhbmNoKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IFZhbHVlKiBtX3ZhbHVlOwogCi0gICAgYm9vbCB0cnlKdW1wKCkKLSAgICB7Ci0gICAgICAgIGFw
cGVuZChBaXI6Okp1bXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgUGF0Y2hw
b2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgSGFzaE1h
cDxDaGVja1NwZWNpYWw6OktleSwgQ2hlY2tTcGVjaWFsKj4gbV9jaGVja1NwZWNpYWxzOwogCi0g
ICAgYm9vbCB0cnlJZGVudGl0eShWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlRf
VU5VU0VEKHZhbHVlLCB0bXAodmFsdWUpID09IHRtcChjdXJyZW50VmFsdWUpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUo
KSksIGltbU9yVG1wKHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAg
ICAgIGFwcGVuZChSZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
UHJvY2VkdXJlJiBwcm9jZWR1cmU7Ci0gICAgQ29kZSYgY29kZTsKKyAgICBQcm9jZWR1cmUmIG1f
cHJvY2VkdXJlOworICAgIENvZGUmIG1fY29kZTsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5n
TWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMTkyMTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkx
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1hdGNoZXIg
TG93ZXJpbmdNYXRjaGVyCi0KLSMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNj
YWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAot
IyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgotCi0jIE5vdGU6IGFkZGluZyBtb3JlIHJ1
bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJm
b3JtYW5jZSEKLQotTG9hZCA9IExvYWQoYWRkcmVzcykKLQotTG9hZDhTID0gTG9hZDhTKGFkZHJl
c3MpCi1Mb2FkOFogPSBMb2FkOFooYWRkcmVzcykKLUxvYWQxNlMgPSBMb2FkMTZTKGFkZHJlc3Mp
Ci1Mb2FkMTZaID0gTG9hZDE2WihhZGRyZXNzKQotCi1BZGQgPSBBZGQobGVmdCwgcmlnaHQpCi1T
dWIgPSBTdWIobGVmdCwgcmlnaHQpCi1BbmQgPSBCaXRBbmQobGVmdCwgcmlnaHQpCi1PciA9IEJp
dE9yKGxlZnQsIHJpZ2h0KQotWG9yID0gQml0WG9yKGxlZnQsIHJpZ2h0KQotCi1TaGwgPSBTaGwo
dmFsdWUsIGFtb3VudCkKLVNTaHIgPSBTU2hyKHZhbHVlLCBhbW91bnQpCi1aU2hyID0gWlNocih2
YWx1ZSwgYW1vdW50KQotCi1TdG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBh
ZGRyZXNzKQotU3RvcmVTdWJMb2FkID0gU3RvcmUoU3ViKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykK
LVN0b3JlQW5kTG9hZCA9IFN0b3JlKEJpdEFuZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCi1TdG9y
ZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQotCi1UcnVuYyA9IFRydW5jKHZhbHVlKQotCi1aRXh0
MzIgPSBaRXh0MzIodmFsdWUpCi0KLUFyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKQotCi1Db25z
dDMyID0gQ29uc3QzMigpCi1Db25zdDY0ID0gQ29uc3Q2NCgpCi0KLVN0YWNrU2xvdCA9IFN0YWNr
U2xvdCgpCi1GcmFtZVBvaW50ZXIgPSBGcmFtZVBvaW50ZXIoKQotCi0jIFRoZXNlIHBhdHRlcm5z
IGRlbGVnYXRlIHRvIHRoZSBjb21wYXJpc29uIG1hdGNoZXIuCi1FcXVhbCA9IEVxdWFsKCkKLU5v
dEVxdWFsID0gTm90RXF1YWwoKQotTGVzc1RoYW4gPSBMZXNzVGhhbigpCi1HcmVhdGVyVGhhbiA9
IEdyZWF0ZXJUaGFuKCkKLUxlc3NFcXVhbCA9IExlc3NFcXVhbCgpCi1HcmVhdGVyRXF1YWwgPSBH
cmVhdGVyRXF1YWwoKQotQWJvdmUgPSBBYm92ZSgpCi1CZWxvdyA9IEJlbG93KCkKLUFib3ZlRXF1
YWwgPSBBYm92ZUVxdWFsKCkKLUJlbG93RXF1YWwgPSBCZWxvd0VxdWFsKCkKLQotUGF0Y2hwb2lu
dCA9IFBhdGNocG9pbnQoKQotQ2hlY2sgPSBDaGVjayh2YWx1ZSkKLQotVXBzaWxvbiA9IFVwc2ls
b24odmFsdWUpCi1QaGkgPSBQaGkoKQotCi1CcmFuY2ggPSBCcmFuY2godmFsdWUpCi1KdW1wID0g
SnVtcCgpCi0KLSMgSXQgd291bGQgYmUgZmFudGFzdGljIHRvIG5vdCBoYXZlIHRvIGhhdmUgdGhp
cyBoZXJlLCBidXQgdGhlIHBoaWxvc29waHkgb2Ygb3VyIGxvd2VyaW5nIGlzIHRoYXQKLSMgaXQg
c2hvdWxkIGJlIHNvdW5kIGV2ZW4gaWYgd2UgaGF2ZW4ndCBydW4gb3B0aW1pemF0aW9ucy4KLUlk
ZW50aXR5ID0gSWRlbnRpdHkodmFsdWUpCi0KLVJldHVybiA9IFJldHVybih2YWx1ZSkKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9t
YXRjaGVyLnJiCShyZXZpc2lvbiAxOTIxMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1MCArMCww
IEBACi0jIS91c3IvYmluL2VudiBydWJ5Ci0KLSMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBh
cmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLXJlcXVpcmUgInBhdGhuYW1lIgotCi0kdmFySW5kZXggPSAwCi1kZWYgbmV3VmFy
Ci0gICAgJHZhckluZGV4ICs9IDEKLSAgICAiX3RtcCN7JHZhckluZGV4fSIKLWVuZAotCi1jbGFz
cyBQcm9kdWN0aW9uCi0gICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6
YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KLQotICAgIGRlZiBpbml0aWFsaXplKG9yaWdp
biwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKLSAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgotICAg
ICAgICBAbmFtZSA9IG5hbWUKLSAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBu
YW1lID1+IC9cQVwkKFswLTldKylcWi8pCi0gICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/
IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCi0gICAgICAgIEBvcGNvZGUgPSBv
cGNvZGUKLSAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCi0gICAg
ZW5kCi0KLSAgICBkZWYgaGFzT3Bjb2RlCi0gICAgICAgIG9wY29kZSAhPSBuaWwKLSAgICBlbmQK
LQotICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCi0gICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0
aF9pbmRleCB7Ci0gICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8Ci0gICAgICAgICAgICB5aWVs
ZCB2YXJOYW1lLAotICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKLSAgICAgICAgICAgICAg
ICAgIGNoaWxkLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAo
Y2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bj
b2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAotICAgICAgICAgICAgICAgICAgaW5kZXgKLSAg
ICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKLSAgICAgICAgfQotICAgIGVuZAot
ZW5kCi0KLWNsYXNzIE1hdGNoZXIKLSAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25z
Ci0KLSAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKLSAgICAgICAgQG5hbWUg
PSBuYW1lCi0gICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCi0gICAgZW5kCi1lbmQK
LQotY2xhc3MgT3JpZ2luCi0gICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgot
ICAgIAotICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQotICAgICAgICBA
ZmlsZU5hbWUgPSBmaWxlTmFtZQotICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKLSAg
ICBlbmQKLSAgICAKLSAgICBkZWYgdG9fcwotICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVt
YmVyfSIKLSAgICBlbmQKLWVuZAotCi1jbGFzcyBUb2tlbgotICAgIGF0dHJfcmVhZGVyIDpvcmln
aW4sIDpzdHJpbmcKLSAgICAKLSAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKLSAg
ICAgICAgQG9yaWdpbiA9IG9yaWdpbgotICAgICAgICBAc3RyaW5nID0gc3RyaW5nCi0gICAgZW5k
Ci0gICAgCi0gICAgZGVmID09KG90aGVyKQotICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgot
ICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgQHN0cmluZyA9PSBvdGhlcgotICAgICAgICBlbmQKLSAgICBlbmQKLSAgICAKLSAgICBk
ZWYgPX4ob3RoZXIpCi0gICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKLSAgICBlbmQKLSAgICAKLSAg
ICBkZWYgdG9fcwotICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKLSAg
ICBlbmQKLSAgICAKLSAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKLSAgICAgICAgaWYgY29t
bWVudC5lbXB0eT8KLSAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2Nv
bW1lbnRbMF19IgotICAgICAgICBlbmQKLSAgICBlbmQKLWVuZAotCi1kZWYgbGV4KHN0ciwgZmls
ZU5hbWUpCi0gICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCi0gICAgcmVzdWx0
ID0gW10KLSAgICBsaW5lTnVtYmVyID0gMQotICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/Ci0gICAg
ICAgIGNhc2Ugc3RyCi0gICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KLSAgICAgICAgICAgICMg
Y29tbWVudCwgaWdub3JlCi0gICAgICAgIHdoZW4gL1xBXG4vCi0gICAgICAgICAgICAjIG5ld2xp
bmUsIGlnbm9yZQotICAgICAgICAgICAgbGluZU51bWJlciArPSAxCi0gICAgICAgIHdoZW4gL1xB
W2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLwotICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCi0gICAgICAgIHdoZW4g
L1xBKFsgXHRccl0rKS8KLSAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCi0gICAgICAg
IHdoZW4gL1xBWz0oKSxdLwotICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKLSAgICAg
ICAgZW5kCi0gICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKLSAgICBlbmQKLSAgICByZXN1bHQK
LWVuZAotCi1kZWYgaXNLZXl3b3JkKHRva2VuKQotICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFz
IHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVu
dHVhbGx5LgotICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUpKVxaLwotZW5kCi0K
LWRlZiBpc0lkZW50aWZpZXIodG9rZW4pCi0gICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFth
LXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQotZW5kCi0KLWNsYXNzIFBh
cnNlcgotICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQotICAgICAgICBAdG9rZW5z
ID0gbGV4KGRhdGEsIGZpbGVOYW1lKQotICAgICAgICBAaWR4ID0gMAotICAgIGVuZAotCi0gICAg
ZGVmIHRva2VuCi0gICAgICAgIEB0b2tlbnNbQGlkeF0KLSAgICBlbmQKLQotICAgIGRlZiBhZHZh
bmNlCi0gICAgICAgIEBpZHggKz0gMQotICAgIGVuZAotCi0gICAgZGVmIHBhcnNlRXJyb3IoKmNv
bW1lbnQpCi0gICAgICAgIGlmIHRva2VuCi0gICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpj
b21tZW50KQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PwotICAg
ICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZp
bGU6ICN7Y29tbWVudFswXX0iCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kCi0gICAgZW5k
Ci0KLSAgICBkZWYgY29uc3VtZShzdHJpbmcpCi0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
ICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKLSAgICAgICAgYWR2YW5jZQotICAg
IGVuZAotCi0gICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCi0gICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZwotICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNz
IGlzSWRlbnRpZmllcihyZXN1bHQpCi0gICAgICAgIGFkdmFuY2UKLSAgICAgICAgcmVzdWx0Ci0g
ICAgZW5kCi0KLSAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9u
KQotICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQotICAgICAgICAgICAgcGFy
c2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0
aW9uIikKLSAgICAgICAgZW5kCi0gICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50
cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9Ci0gICAgICAgICAgICBwYXJzZUVy
cm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCi0gICAgICAgIGVuZAotICAgICAgICBwcm9kdWN0
aW9ucyA8PCBwcm9kdWN0aW9uCi0gICAgZW5kCi0KLSAgICBkZWYgcGFyc2UKLSAgICAgICAgY29u
c3VtZSgibWF0Y2hlciIpCi0KLSAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmll
cgotCi0gICAgICAgIHByb2R1Y3Rpb25zID0gW10KLQotICAgICAgICBsb29wIHsKLSAgICAgICAg
ICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKLQotICAgICAgICAgICAgIyBXZSBt
aWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQg
Z28gaGVyZS4KLSAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVu
dHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KLSAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCi0gICAgICAgICAgICBlbmQKLQotICAgICAgICAgICAg
cHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgotICAgICAgICB9Ci0KLSAgICAgICAgTWF0Y2hlci5u
ZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQotICAgIGVuZAotCi0gICAgZGVmIHBhcnNlUHJv
ZHVjdGlvbgotICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KLSAgICAgICAgbmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCi0KLSAgICAgICAgaWYgdG9rZW4gPT0gIj0iCi0gICAgICAgICAgICBj
b25zdW1lKCI9IikKLSAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCi0gICAg
ICAgICAgICBjb25zdW1lKCIoIikKLSAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCi0gICAgICAg
ICAgICBjb25zdW1lKCIoIikKLSAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKLSAgICAgICAgICAg
IG5hbWUgPSBuaWwKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24u
bmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCi0gICAgICAgIGVuZAotICAgICAgICAKLSAgICAg
ICAgcHJvZHVjdGlvbnMgPSBbXQotICAgICAgICBsb29wIHsKLSAgICAgICAgICAgIGJyZWFrIGlm
IHRva2VuID09ICIpIgotCi0gICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMs
IHBhcnNlUHJvZHVjdGlvbikKLQotICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCi0g
ICAgICAgICAgICBjb25zdW1lKCIsIikKLSAgICAgICAgfQotCi0gICAgICAgICMgQWR2YW5jZSBh
ZnRlciB0aGUgIikiCi0gICAgICAgIGFkdmFuY2UKLQotICAgICAgICBQcm9kdWN0aW9uLm5ldyhv
cmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCi0gICAgZW5kCi1lbmQKLQotZmlsZU5h
bWUgPSBBUkdWWzBdCi0KLXBhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBm
aWxlTmFtZSkKLW1hdGNoZXIgPSBwYXJzZXIucGFyc2UKLQotY2xhc3MgU3ViTWF0Y2gKLSAgICBh
dHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucwotICAgIAotICAgIGRlZiBpbml0aWFs
aXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCi0gICAgICAgIEBpbmRleE1hcCA9IFtdCi0gICAg
ICAgIEBwcm9kdWN0aW9ucyA9IFtdCi0gICAgICAgIGluZGV4TGlzdC5lYWNoIHsKLSAgICAgICAg
ICAgIHwgaW5kZXggfAotICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4Ci0gICAgICAgICAg
ICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCi0gICAgICAgIH0KLSAgICBlbmQK
LQotICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQotICAgICAgICBpbmRleExpc3QubWFw
IHsKLSAgICAgICAgICAgIHwgaW5kZXggfAotICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQot
ICAgICAgICB9Ci0gICAgZW5kCi1lbmQKLQotJHN0ZGVyci5wdXRzICJHZW5lcmF0aW5nIGNvZGUg
Zm9yICN7ZmlsZU5hbWV9LiIKLQotRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgi
LCAidyIpIHsKLSAgICB8IG91dHAgfAotCi0gICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVk
aXQhIgotCi0gICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCi0gICAg
b3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCi0gICAgCi0gICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgotICAgIAotICAgIG91dHAucHV0cyAibmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgotCi0gICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPiIKLSAgICBvdXRwLnB1dHMgImJvb2wgcnVuI3ttYXRjaGVyLm5hbWV9KFZh
bHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgotICAgIG91dHAucHV0cyAieyIKLQotICAg
ICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBi
ZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91Ci0gICAgIyB3YW50IHRvIHNl
ZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRv
ciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAotICAgICMgZm9yIHlvdS4KLQotICAgICMgSW4gb2Rk
IHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29t
cGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgotICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFN
KF92YWx1ZSk7IgotICAgICAgICAKLSAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVy
IGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQg
bGVuZ3Rocy4KLSAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykKLSAgICAgICAgaW5kZXhMaXN0cyA9IFtdCi0gICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0
aF9pbmRleCB7Ci0gICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKLSAgICAgICAgICAg
IGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hp
bGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCi0gICAgICAgICAgICAg
ICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KLSAgICAgICAgICAgIGVuZAotICAgICAgICB9Ci0K
LSAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKLSAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKLSAg
ICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVu
Z3RoCi0gICAgICAgICAgICBpZiBsZW5ndGggPiAwCi0gICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCi0g
ICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0Ci0gICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAot
ICAgICAgICAgICAgZW5kCi0gICAgICAgIH0KLSAgICBlbmQKLQotICAgICMgVGhpcyBlZmZpY2ll
bnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1l
cyB0aGF0IHByb2R1Y3Rpb25zCi0gICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0
aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCi0g
ICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9k
dWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCi0gICAgIyBpbmRpY2VzIG9m
IHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgotICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25z
KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCi0gICAgICAgICMgRmlyc3QsIHNwbGl0IHRo
ZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29k
ZSBhbmQgcHJvZHVjdGlvbnMKLSAgICAgICAgIyB3aXRob3V0IG9uZS4KLSAgICAgICAgaW5kZXhM
aXN0cyA9IFtdCi0gICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7Ci0gICAgICAg
ICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKLSAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFd
IGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rp
b24uaGFzT3Bjb2RlCi0gICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KLSAg
ICAgICAgICAgIGVuZAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAjIE5vdywgZW1pdCBw
YXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRo
IGFuIG9wY29kZSB0aGFuIGZvcgotICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgotICAgICAg
ICBpbmRleExpc3RzLmVhY2ggewotICAgICAgICAgICAgfCBpbmRleExpc3QgfAotICAgICAgICAg
ICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKLSAgICAgICAgICAgICAg
ICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9w
Y29kZS4KLSAgICAgICAgICAgICAgICBncm91cHMgPSB7fQotICAgICAgICAgICAgICAgIGluZGV4
TGlzdC5lYWNoIHsKLSAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8Ci0gICAgICAgICAgICAg
ICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQotICAgICAgICAgICAgICAgICAgICAgICAg
Z3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0g
W2luZGV4XQotICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgICAg
IG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgotICAgICAgICAg
ICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgewotICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwg
c3ViSW5kZXhMaXN0IHwKLSAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bj
b2RlfToiCi0gICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1Yklu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91
dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1h
dGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCi0gICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCi0gICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCi0gICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1l
LCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgewotICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlz
dCB8Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRl
eExpc3QpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZW5kCi0gICAgICAgIH0KLSAg
ICBlbmQKLQotICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29k
ZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgotICAg
ICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCi0gICAgZGVmIG1hdGNoQ29s
dW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQotICAgICAgICBp
ZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKLSAgICAgICAg
ICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCi0gICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgZW5kCi0KLSAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKLSAgICAgICAgCi0g
ICAgICAgIG91dHAucHV0cyAieyIKLSAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1
ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCi0KLSAgICAgICAgIyBX
ZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQg
YWJvdXQgaXQuCi0gICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsi
Ci0gICAgICAgIAotICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7Ci0g
ICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAotICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJl
bltjb2x1bW5JbmRleF0KLSAgICAgICAgfQotCi0gICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0
cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7Ci0gICAgICAgICAgICB8IGluZGV4TGlzdCB8
Ci0gICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rp
b25zKQotICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7Ci0gICAgICAgICAgICAgICAgfCBpbmRleExp
c3QgfAotICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvdXRwLnB1dHMgIn0iCi0g
ICAgZW5kCi0KLSAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1
Y3Rpb25zKQotICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVj
dGlvbnMpIHsKLSAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKLSAgICAgICAgICAgICMgV2UgYXJl
IGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0
aCB0aGUgc2FtZSBvcGNvZGUgYW5kCi0gICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KLSAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
Ci0gICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1
Y3Rpb25zLCAwKSB7Ci0gICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAotICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCi0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICBlbmQKLQotICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1
ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKLSAgICAgICAgfCBpbmRleExpc3QgfAotICAgICAg
ICBpbmRleExpc3QuZWFjaCB7Ci0gICAgICAgICAgICB8IGluZGV4IHwKLSAgICAgICAgICAgIHBy
b2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQotICAgICAgICAgICAgb3V0cC5w
dXRzICJ7IgotICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5h
bWV9ID0gX3ZhbHVlOyIKLSAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7cHJv
ZHVjdGlvbi52YXJOYW1lfSk7IgotICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQot
ICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCi0gICAgICAgICAgICB0cnlBcmd1bWVu
dHMgPSBbXQotICAgICAgICAgICAgbnVtU2NvcGVzID0gMAotICAgICAgICAgICAgc2VlbiA9IHt9
Ci0KLSAgICAgICAgICAgICMgRklYTUU6IFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb21iaW5lIHBh
dHRlcm4gbWF0Y2hlcnMsIGxpa2UgaGF2ZSB0aGUgcGF0dGVybiBtYXRjaCBydWxlCi0gICAgICAg
ICAgICAjIGZvciBCcmFuY2ggaW4gdGhlIGxvd2VyaW5nIHBhdGNoZXIgZGVsZWdhdGUgdG8gYSBt
YXRjaGVyIHRoYXQgY2FuIGRlZHVjZSB0aGUga2luZCBvZgotICAgICAgICAgICAgIyBjb21wYXJp
c29uIHRoYXQgd2UncmUgZG9pbmcuIFdlIGNvdWxkIHRoZW4gcmV1c2UgdGhhdCBsYXR0ZXIgbWF0
Y2hlciBmb3IgQ2hlY2sgYW5kCi0gICAgICAgICAgICAjIHVuZnVzZWQgY29tcGFyZS4gVGhlIGtl
eSB0byBtYWtpbmcgc3VjaCBhIGRlbGVnYXRpb24gd29yayBpcyB0byBoYXZlIHRoZSBpbm5lciBt
YXRjaGVyCi0gICAgICAgICAgICAjICh0aGUgY29tcGFyaXNvbiBtYXRjaGVyIGluIHRoaXMgY2Fz
ZSkga2VlcCBjYXNjYWRpbmcgaWYgaXQgZW5jb3VudGVycyBhIHJ1bGUgdGhhdAotICAgICAgICAg
ICAgIyBwcm9kdWNlcyBzb21ldGhpbmcgdGhhdCB0aGUgb3V0ZXIgbWF0Y2hlciBjYW5ub3QgaGFu
ZGxlLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgdGhlCi0gICAgICAgICAgICAjIGNvbXBhcmlzb24g
bWF0Y2hlciB3b3VsZCBuZWVkIHRoaXMsIGJ1dCB0aGUgYWRkcmVzcyBtYXRjaGVyIHByb2JhYmx5
IHdpbGwuIEZvciBleGFtcGxlLAotICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBhIFN0b3JlQWRk
TG9hZCBydWxlIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSBhZGRyZXNzIG1hdGNoZXIsIGFuZCB0aGUg
YWRkcmVzcwotICAgICAgICAgICAgIyBtYXRjaGVyIG1heSBwcm9kdWNlIGFuIGFkZHJlc3MgdGhh
dCB0aGUgbG93ZXJpbmcgbWF0Y2hlciBjYW5ub3QgdXNlIGJlY2F1c2Ugd2hpbGUgdGhlCi0gICAg
ICAgICAgICAjIEFkZCBmb3JtIGRvZXMgYWNjZXB0IGFkZHJlc3NlcyBpdCBtYXkgbm90IGFjY2Vw
dCB0aGUgcGFydGljdWxhciBhZGRyZXNzIHRoYXQgdGhlCi0gICAgICAgICAgICAjIGFkZHJlc3Mg
bWF0Y2hlciBwcm9kdWNlZC4gSW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGdpdmluZyB1cCBvbiB0
aGUgU3RvcmVBZGRMb2FkIHJ1bGUsCi0gICAgICAgICAgICAjIHdlIHdhbnQgdGhlIGFkZHJlc3Mg
bWF0Y2hlciB0byBqdXN0IHRyeSBhIGRpZmZlcmVudCBhZGRyZXNzLiBUaGUgY29tcGFyaXNvbiBt
YXRjaGVyCi0gICAgICAgICAgICAjIG1pZ2h0IHdhbnQgdGhpcyBqdXN0IGZvciBiZXR0ZXIgY29u
dHJvbGxpbmcgd2hlbiB0byBwaW4gdmFyaWFibGVzLiBDdXJyZW50bHksIGlmIGl0Ci0gICAgICAg
ICAgICAjIGNvbnN0cnVjdGVkIHNvbWUgY29kZSwgaXQgd291bGQgYWxzbyBwaW4gdGhlIHZhcmlh
YmxlcyB0aGF0IGl0IHVzZWQuIElmIHRoZSBsb3dlcmluZwotICAgICAgICAgICAgIyBtYXRjaGVy
IHRoZW4gZGVjaWRlZCB0byByZWplY3QgdGhlIGNvZGUgY3JlYXRlZCBieSB0aGUgY29tcGFyaXNv
biBtYXRjaGVyLCBpdCB3b3VsZAotICAgICAgICAgICAgIyBoYXZlIGEgaGFyZCB0aW1lICJ1bnBp
bm5pbmciIHRob3NlIHZhcmlhYmxlcy4gQnV0IGlmIHdlIGhhZCBzb21lIGtpbmQgb2YgZGVsZWdh
dGlvbiwgd2UKLSAgICAgICAgICAgICMgY291bGQgaGF2ZSB0aGUgcGlubmluZyBvZiB0aGUgY29t
cGFyaXNvbiBtYXRjaGVyIGhhcHBlbiBvbmx5IGlmIHRoZSBsb3dlcmluZyBtYXRjaGVyCi0gICAg
ICAgICAgICAjIGFjY2VwdGVkLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGlzIGNv
dWxkIGFsbCBiZSBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIHRyeUJsYWgoKSByZXR1cm4gc29tZXRo
aW5nLCBhbmQgaGF2ZSB0aGUKLSAgICAgICAgICAgICMgbWF0Y2hlciBhbHNvIHRha2UgYSBmdW5j
dG9yIGFyZ3VtZW50IHRoYXQgYWNjZXB0cyB3aGF0IHRyeUJsYWgoKSByZXR1cm5zLiBTbyBpbnN0
ZWFkIG9mCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIGlmICh0cnlCbGFoKCkpIG9rOwot
ICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBXZSB3b3VsZCBoYXZlOgotICAgICAgICAgICAg
IwotICAgICAgICAgICAgIyBpZiAoZnVuY3Rvcih0cnlCbGFoKCkpIG9rOwotICAgICAgICAgICAg
IwotICAgICAgICAgICAgIyBXaGVuIGxvd2VyaW5nIGRlY2lkZWQgdG8gZGVsZWdhdGUgdG8gdGhl
IGFkZHJlc3Mgb3IgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCBjb3VsZCBzdXBwbHkKLSAgICAgICAg
ICAgICMgYSBmdW5jdG9yIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSB0aGluZyB0aGF0IHRoZSBz
dWItbWF0Y2hlciBzZWxlY3RlZCBpcyBpbmRlZWQKLSAgICAgICAgICAgICMgdXNlZnVsLgotICAg
ICAgICAgICAgIwotICAgICAgICAgICAgIyBJbiB0aGUgbmVhciB0ZXJtLCB3ZSBwcm9iYWJseSB3
b24ndCBuZWVkIHRoaXMuIEJ1dCB3ZSB3aWxsIGRlZmluaXRlbHkgbmVlZCBpdCBhcyB3ZQotICAg
ICAgICAgICAgIyBleHBhbmQgdG8gZWZmaWNpZW50bHkgc3VwcG9ydCBtb3JlIHBsYXRmb3Jtcy4g
T24gWDg2XzY0LCBhbnkgYnJhbmNoaW5nIGluc3RydWN0aW9uIGlzCi0gICAgICAgICAgICAjIHVz
YWJsZSBpbiBhbnkgY29udGV4dCwgYW5kIGFueSBhZGRyZXNzIHNob3VsZCBiZSB1c2FibGUgaW4g
YW55IGNvbnRleHQgKGFuZCB0aGUgb25seQotICAgICAgICAgICAgIyBjYXNlcyB3aGVyZSBpdCB3
b3VsZG4ndCBiZSBpcyBpZiB3ZSBoYXZlIGhvbGVzIGluIHRoZSBNYWNyb0Fzc2VtYmxlcikuCi0g
ICAgICAgICAgICAjCi0gICAgICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1NTkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHJvZHVjdGlvbi5l
YWNoVmFyaWFibGUgewotICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1l
LCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKLSAgICAgICAgICAgICAgICBsb2FkRXhwciA9
ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCi0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCi0gICAgICAgICAgICAgICAgICAg
IHRtcCA9IG5ld1ZhcgotICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Rt
cH0gPSAje2xvYWRFeHByfTsiCi0gICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7
dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCi0gICAgICAgICAgICAgICAgICAgIG51bVNjb3Bl
cyArPSAxCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZWVuW2No
aWxkVmFyTmFtZV0gPSB0cnVlCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCi0K
LSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgZ2V0dGluZyByaWQgb2YgdGhl
ICQgcHJlZml4LgotICAgICAgICAgICAgICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKLSAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1l
ID1+IC9cQVwkLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwk
KFswLTldKylcWi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxk
VmFyTmFtZX0tPmhhc0ludCgpKSB7IgotICAgICAgICAgICAgICAgICAgICAgICAgZW5kCi0gICAg
ICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQotICAgICAgICAgICAgICAgICAgICBl
bmQKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGludGVybmFsQXJn
dW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDph
bm9uSW50ZXJuYWwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGls
ZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAotICAg
ICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0g
OmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0Um9vdChf
dmFsdWUpIgotICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PwotICAg
ICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMoIiArIGlu
dGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCi0gICAgICAgICAgICBlbmQKLSAgICAg
ICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PwotICAgICAgICAgICAgICAgIG91
dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFuZEFyZ3VtZW50cy5q
b2luKCIsICIpICsgIikiKQotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBvdXRwLnB1dHMo
IiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMuam9pbigi
LCAiKSArICIpKSB7IikKLSAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRSb290
TGF0ZShfdmFsdWUpOyIKLSAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5lbXB0
eT8KLSAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzTGF0
ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKLSAgICAgICAgICAgIGVu
ZAotICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/Ci0gICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0ZSgiICsgb3BlcmFuZEFy
Z3VtZW50cy5qb2luKCIsICIpICsgIik7IgotICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBv
dXRwLnB1dHMgInJldHVybiB0cnVlOyIKLSAgICAgICAgICAgIG91dHAucHV0cyAifSIKLSAgICAg
ICAgICAgIG51bVNjb3Blcy50aW1lcyB7Ci0gICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxzZTsiCi0gICAgb3V0cC5wdXRz
ICJ9IgotICAgIAotICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgotCi0g
ICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFtZX1faCIKLX0K
</data>
<flag name="review"
          id="290100"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>