<?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>234864</bug_id>
          
          <creation_ts>2022-01-04 16:08:11 -0800</creation_ts>
          <short_desc>Rename Vector and FixedVector::findMatching to findIf to match stl naming.</short_desc>
          <delta_ts>2022-01-24 22:16:55 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>234855</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>saam</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tzagallo</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1828136</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-04 16:08:11 -0800</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=234855#c3 and https://en.cppreference.com/w/cpp/algorithm/find.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828162</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-04 17:16:30 -0800</bug_when>
    <thetext>Also do reverseFindMatching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828165</commentid>
    <comment_count>2</comment_count>
      <attachid>448352</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-04 17:28:22 -0800</bug_when>
    <thetext>Created attachment 448352
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828166</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2022-01-04 17:29:15 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828168</commentid>
    <comment_count>4</comment_count>
      <attachid>448354</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-04 17:42:22 -0800</bug_when>
    <thetext>Created attachment 448354
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829949</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-11 16:09:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/87424746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833466</commentid>
    <comment_count>6</comment_count>
      <attachid>449854</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-24 13:58:07 -0800</bug_when>
    <thetext>Created attachment 449854
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833468</commentid>
    <comment_count>7</comment_count>
      <attachid>449854</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-24 14:00:01 -0800</bug_when>
    <thetext>Comment on attachment 449854
proposed patch.

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

r=me

&gt; Tools/TestWebKitAPI/Tests/WTF/FixedVector.cpp:160
&gt;  TEST(WTF_FixedVector, FindMatching)

Rename this test to FindIf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833477</commentid>
    <comment_count>8</comment_count>
      <attachid>449855</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-24 14:05:13 -0800</bug_when>
    <thetext>Created attachment 449855
patch for landing.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833610</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-24 22:16:43 -0800</bug_when>
    <thetext>Committed r288541 (246373@main): &lt;https://commits.webkit.org/246373@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 449855.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448352</attachid>
            <date>2022-01-04 17:28:22 -0800</date>
            <delta_ts>2022-01-04 17:55:40 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-234864.patch</filename>
            <type>text/plain</type>
            <size>117608</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0qICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hA
dXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtNTM0OSw3
ICs1MzQ5LDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlQYXR0ZXJuTm9kZTo6ZW1pdERpcmVjdAogICAg
IGlmICghcmhzLT5pc1NpbXBsZUFycmF5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKG1fdGFyZ2V0UGF0dGVybnMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgdGFyZ2V0KSB7
IHJldHVybiB0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50OyB9
KSAhPSBub3RGb3VuZCkKKyAgICBpZiAobV90YXJnZXRQYXR0ZXJucy5maW5kSWYoWyZdIChhdXRv
JiB0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6UmVz
dEVsZW1lbnQ7IH0pICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEVsZW1lbnROb2RlKiBlbGVtZW50Tm9kZXMgPSBzdGF0aWNfY2FzdDxBcnJheU5vZGUqPihyaHMp
LT5lbGVtZW50cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGVmZXJy
ZWRXb3JrVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EZWZlcnJlZFdvcmtUaW1lci5oCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgICAgIGJv
b2wgaXNDYW5jZWxsZWQoKSBjb25zdCB7IHJldHVybiAhc2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0
KCk7IH0KIAotICAgICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAg
ICAgICAgRml4ZWRWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICAgICAg
U3Ryb25nPEpTT2JqZWN0PiBzY3JpcHRFeGVjdXRpb25Pd25lcjsKICAgICB9OwogCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GaXhlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZpeGVkVmVjdG9yLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XVEYvd3RmL0ZpeGVk
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI3LDYgKzEyNyw4IEBAIHB1YmxpYzoKICAgICBUJiBs
YXN0KCkgeyByZXR1cm4gKCp0aGlzKVtzaXplKCkgLSAxXTsgfQogICAgIGNvbnN0IFQmIGxhc3Qo
KSBjb25zdCB7IHJldHVybiAoKnRoaXMpW3NpemUoKSAtIDFdOyB9CiAKKyAgICB2b2lkIGNsZWFy
KCkgeyBtX3N0b3JhZ2UgPSBudWxscHRyOyB9CisKICAgICB2b2lkIGZpbGwoY29uc3QgVCYgdmFs
KQogICAgIHsKICAgICAgICAgaWYgKCFtX3N0b3JhZ2UpCkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICptX3N0b3JhZ2UgPT0gKm90aGVyLm1fc3RvcmFnZTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRJZihj
b25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisKICAgICB2b2lkIHN3YXAoRml4ZWRWZWN0b3I8
VD4mIG90aGVyKQogICAgIHsKICAgICAgICAgdXNpbmcgc3RkOjpzd2FwOwpAQCAtMTY5LDYgKzE3
NSwzMyBAQCBwcml2YXRlOgogc3RhdGljX2Fzc2VydChzaXplb2YoRml4ZWRWZWN0b3I8aW50Pikg
PT0gc2l6ZW9mKGludCopKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFU+Citib29sIEZpeGVkVmVjdG9yPFQ+Ojpjb250YWlucyhjb25zdCBVJiB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgorc2l6ZV90IEZp
eGVkVmVjdG9yPFQ+OjpmaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtYXRjaGVzKGF0KGkpKSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1
cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorc2l6ZV90IEZpeGVkVmVjdG9yPFQ+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBmaW5kSWYoWyZdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0
ZW0gPT0gdmFsdWU7CisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
dm9pZCBzd2FwKEZpeGVkVmVjdG9yPFQ+JiBhLCBGaXhlZFZlY3RvcjxUPiYgYikKIHsKICAgICBh
LnN3YXAoYik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dURi93
dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzU2LDkgKzc1Niw5IEBAIHB1YmxpYzoKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRNYXRjaGluZyhjb25z
dCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5j
dGlvbj4gc2l6ZV90IGZpbmRJZihjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFUmKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgcmV2ZXJzZUZpbmRNYXRj
aGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWF0Y2hGdW5jdGlvbj4gc2l6ZV90IHJldmVyc2VGaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBhcHBlbmRJZk5vdENvbnRh
aW5zKGNvbnN0IFUmKTsKIApAQCAtOTk2LDcgKzk5Niw3IEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVf
dCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46OmZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25z
dAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6ZmluZElmKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpIGNv
bnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAobWF0Y2hlcyhhdChpKSkpCkBAIC0xMDA5LDcgKzEwMDksNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogc2l6ZV90
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZE1h
dGNoaW5nKFsmXShhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIGZpbmRJZihbJl0oYXV0byYgaXRl
bSkgewogICAgICAgICByZXR1cm4gaXRlbSA9PSB2YWx1ZTsKICAgICB9KTsKIH0KQEAgLTEwMjgs
NyArMTAyOCw3IEBAIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgogdGVtcGxh
dGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJldmVyc2VGaW5kTWF0
Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKK3NpemVfdCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OnJldmVyc2VGaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBzaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBz
aXplX3QgaW5kZXggPSBzaXplKCkgLSBpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
c3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3BwCShyZXZpc2lvbiAyODc1Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIENsaXBib2FyZDo6Z2V0VHlwZShD
bGlwYm9hcmRJdGVtJiBpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGl0ZW1J
bmRleCA9IG1fYWN0aXZlU2Vzc2lvbi0+aXRlbXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgYWN0
aXZlSXRlbSkgeworICAgIGF1dG8gaXRlbUluZGV4ID0gbV9hY3RpdmVTZXNzaW9uLT5pdGVtcy5m
aW5kSWYoWyZdIChhdXRvJiBhY3RpdmVJdGVtKSB7CiAgICAgICAgIHJldHVybiBhY3RpdmVJdGVt
LnB0cigpID09ICZpdGVtOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBWZWN0b3I8U3RyaW5nPiBD
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhCiAKIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Z2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSkKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2l0ZW1Qcm9taXNlcy5maW5k
TWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gbV9pdGVt
UHJvbWlzZXMuZmluZElmKFsmXSAoYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gdHlwZSA9
PSBpdGVtLmtleTsKICAgICB9KTsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Y28KIAogICAgICAgICAgICAgUmVmIGl0ZW1UeXBlTG9h
ZGVyIHsgKndlYWtJdGVtVHlwZUxvYWRlciB9OwogI2lmICFDT01QSUxFUihNU1ZDKQotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5m
aW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBsb2FkZXIpIHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBp
dGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0aGlz
LCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5maW5kSWYoWyZdIChhdXRvJiBsb2FkZXIp
IHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOwogI2Vu
ZGlmCiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvbWlzZS0+cmVzdWx0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZVN0b3JhZ2UuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgRE9NQ2Fj
aGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmUKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
b3B0aW9ucy5jYWNoZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcG9zaXRpb24g
PSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5h
bWUoKSA9PSBvcHRpb25zLmNhY2hlTmFtZTsgfSk7CisgICAgICAgICAgICBhdXRvIHBvc2l0aW9u
ID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1lKCkg
PT0gb3B0aW9ucy5jYWNoZU5hbWU7IH0pOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5v
dEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZXNbcG9zaXRpb25dLT5tYXRjaChXVEZN
b3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCB2b2lkIERPTUNhY2hlU3RvcmFn
ZTo6aGFzKGNvbnN0IFN0cmluZyYgCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChXVEZNb3Zl
KGV4Y2VwdGlvbi52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKKyAgICAg
ICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKICAgICB9KTsKIH0KIAog
UmVmPERPTUNhY2hlPiBET01DYWNoZVN0b3JhZ2U6OmZpbmRDYWNoZU9yQ3JlYXRlKERPTUNhY2hl
RW5naW5lOjpDYWNoZUluZm8mJiBpbmZvKQogewotICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVz
LmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGNhY2hlKSB7IHJldHVybiBpbmZvLmlkZW50
aWZpZXIgPT0gY2FjaGUtPmlkZW50aWZpZXIoKTsgfSk7CisgICBhdXRvIHBvc2l0aW9uID0gbV9j
YWNoZXMuZmluZElmKFsmXSAoY29uc3QgYXV0byYgY2FjaGUpIHsgcmV0dXJuIGluZm8uaWRlbnRp
ZmllciA9PSBjYWNoZS0+aWRlbnRpZmllcigpOyB9KTsKICAgIGlmIChwb3NpdGlvbiAhPSBub3RG
b3VuZCkKICAgICAgICByZXR1cm4gbV9jYWNoZXNbcG9zaXRpb25dLmNvcHlSZWYoKTsKICAgIHJl
dHVybiBET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFdURk1vdmUo
aW5mby5uYW1lKSwgaW5mby5pZGVudGlmaWVyLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAg
LTE5OSw3ICsxOTksNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcm
CiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBET01Q
cm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUNhY2hlPj4mJiBwcm9taXNlKQogewotICAg
IGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9j
YWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1lKCkgPT0gbmFt
ZTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHByb21pc2Uu
cmVzb2x2ZShET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFN0cmlu
ZyB7IG1fY2FjaGVzW3Bvc2l0aW9uXS0+bmFtZSgpIH0sIG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRl
bnRpZmllcigpLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTIzMiw3ICsyMzIsNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmlu
CiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb1JlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIERP
TVByb21pc2VEZWZlcnJlZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7Ci0gICAgYXV0byBwb3Np
dGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS0+bmFtZSgpID09IG5hbWU7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5k
SWYoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKICAg
ICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdo
bGlnaHQvSGlnaGxpZ2h0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODUsNyArODUsNyBAQCB2b2lkIEhpZ2hsaWdodDo6Y2xlYXJGcm9tU2V0TGlrZSgpCiAKIGJvb2wg
SGlnaGxpZ2h0OjphZGRUb1NldExpa2UoU3RhdGljUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChu
b3RGb3VuZCAhPSBtX3Jhbmdlc0RhdGEuZmluZE1hdGNoaW5nKFsmcmFuZ2VdKGNvbnN0IFJlZjxI
aWdobGlnaHRSYW5nZURhdGE+JiBjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmdldCgpLnJhbmdl
LmdldCgpID09IHJhbmdlOyB9KSkKKyAgICBpZiAobm90Rm91bmQgIT0gbV9yYW5nZXNEYXRhLmZp
bmRJZihbJnJhbmdlXShjb25zdCBSZWY8SGlnaGxpZ2h0UmFuZ2VEYXRhPiYgY3VycmVudCkgeyBy
ZXR1cm4gY3VycmVudC5nZXQoKS5yYW5nZS5nZXQoKSA9PSByYW5nZTsgfSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXBhaW50UmFuZ2UocmFuZ2UpOwogICAgIG1fcmFuZ2VzRGF0YS5h
cHBlbmQoSGlnaGxpZ2h0UmFuZ2VEYXRhOjpjcmVhdGUocmFuZ2UpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJv
bHNIb3N0LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NzIsNyArNTcyLDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbAog
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJh
Y2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNr
cywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9u
cywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7Ci0gICAgICAgICAgICBib29sIGFs
bFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kTWF0Y2hp
bmcoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgeworICAgICAgICAgICAgYm9vbCBhbGxUcmFj
a3NEaXNhYmxlZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25z
dCBhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5t
b2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBib29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0
aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYg
YWxsVHJhY2tzRGlzYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVj
b3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgTWVkaWFSZWNvcmRlcjo6ZGlzcGF0
Y2hFcnJvcihFeGNlcHQKIAogdm9pZCBNZWRpYVJlY29yZGVyOjp0cmFja0VuZGVkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90cmFja3MuZmluZE1h
dGNoaW5nKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fdHJhY2tzLmZp
bmRJZihbXShhdXRvJiB0cmFjaykgewogICAgICAgICByZXR1cm4gIXRyYWNrLT5lbmRlZCgpOwog
ICAgIH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVEND
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgUlRDQ29udHJv
bGxlcjo6c2hvdWxkRGlzYWJsZUlDRUNhbmQKIHsKICAgICBpZiAoIW1fc2hvdWxkRmlsdGVySUNF
Q2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG5vdEZvdW5kICE9
IG1fZmlsdGVyaW5nRGlzYWJsZWRPcmlnaW5zLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8m
IG9yaWdpbikgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2ZpbHRlcmluZ0Rpc2FibGVkT3Jp
Z2lucy5maW5kSWYoWyZdIChjb25zdCBhdXRvJiBvcmlnaW4pIHsKICAgICAgICAgcmV0dXJuIG1h
dGNoRG9jdW1lbnRPcmlnaW4oZG9jdW1lbnQsIG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGll
bnRPcmlnaW4pOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICog
Q29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDg4LDcgKzQ4OCw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpzZXQKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJDZXJ0aWZpY2F0ZXMgcGFy
YW1ldGVycyBhcmUgZGlmZmVyZW50IiB9OwogCiAgICAgICAgIGZvciAoYXV0byYgY2VydGlmaWNh
dGUgOiBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcykgewotICAgICAgICAgICAgYm9vbCBpc1Ro
ZXJlID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kTWF0Y2hpbmcoWyZjZXJ0aWZp
Y2F0ZV0oY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICAgICAgYm9vbCBpc1RoZXJlID0gbV9j
b25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kSWYoWyZjZXJ0aWZpY2F0ZV0oY29uc3QgYXV0
byYgaXRlbSkgewogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldCgpID09IGNlcnRpZmlj
YXRlLmdldCgpOwogICAgICAgICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAgICAgICBpZiAo
IWlzVGhlcmUpCkBAIC05NTksNyArOTU5LDcgQEAgRG9jdW1lbnQqIFJUQ1BlZXJDb25uZWN0aW9u
Ojpkb2N1bWVudCgpCiAKIFJlZjxSVENJY2VUcmFuc3BvcnQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpn
ZXRPckNyZWF0ZUljZVRyYW5zcG9ydChVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4m
JiBiYWNrZW5kKQogewotICAgIGF1dG8gaW5kZXggPSBtX2ljZVRyYW5zcG9ydHMuZmluZE1hdGNo
aW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7IHJldHVybiBiYWNrZW5kLmdldCgpID09
IHRyYW5zcG9ydC0+YmFja2VuZCgpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gbV9pY2VUcmFuc3Bv
cnRzLmZpbmRJZihbJmJhY2tlbmRdKGF1dG8mIHRyYW5zcG9ydCkgeyByZXR1cm4gYmFja2VuZC5n
ZXQoKSA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZv
dW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9pY2VUcmFuc3BvcnRzLnNpemUoKTsKICAgICAgICAg
bV9pY2VUcmFuc3BvcnRzLmFwcGVuZChSVENJY2VUcmFuc3BvcnQ6OmNyZWF0ZSgqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBXVEZNb3ZlKGJhY2tlbmQpLCAqdGhpcykpOwpAQCAtOTc4LDcgKzk3
OCw3IEBAIFJlZlB0cjxSVENEdGxzVHJhbnNwb3J0PiBSVENQZWVyQ29ubmVjdGkKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBpbmRleCA9IG1f
ZHRsc1RyYW5zcG9ydHMuZmluZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7
IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CisgICAgYXV0byBp
bmRleCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZElmKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0
KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYg
KGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9kdGxzVHJhbnNwb3J0cy5z
aXplKCk7CiAgICAgICAgIGF1dG8gaWNlVHJhbnNwb3J0QmFja2VuZCA9IGJhY2tlbmQtPmljZVRy
YW5zcG9ydEJhY2tlbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCShyZXZp
c2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0
cFNGcmFtZVRyYW5zZm9ybWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNyArMjQ2LDcgQEAgUlRD
UnRwU0ZyYW1lVHJhbnNmb3JtZXI6OlRyYW5zZm9ybVJlc3VsdAogICAgIG1fY291bnRlciA9IGhl
YWRlci0+Y291bnRlcjsKIAogICAgIGlmIChoZWFkZXItPmtleUlkICE9IG1fa2V5SWQpIHsKLSAg
ICAgICAgYXV0byBwb3NpdGlvbiA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoW2tleUlkID0gaGVhZGVy
LT5rZXlJZF0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5rZXlJZCA9PSBrZXlJZDsgfSk7Cisg
ICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2tleXMuZmluZElmKFtrZXlJZCA9IGhlYWRlci0+a2V5
SWRdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2V5SWQgPT0ga2V5SWQ7IH0pOwogICAgICAg
ICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoRXJyb3JJbmZvcm1hdGlvbiB7IEVycm9yOjpLZXlJRCwgICJLZXkgSUQgaXMgdW5rbm93
biJfcywgaGVhZGVyLT5rZXlJZCB9KTsKICAgICAgICAgYXV0byByZXN1bHQgPSB1cGRhdGVFbmNy
eXB0aW9uS2V5KG1fa2V5c1twb3NpdGlvbl0ua2V5RGF0YSwgaGVhZGVyLT5rZXlJZCwgU2hvdWxk
VXBkYXRlS2V5czo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4Myw3ICs0ODQsNyBAQCB2
b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9yCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQoKS5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLmlzR3JhcGhPd25lcigpKTsKIAot
ICAgIEFTU0VSVChtX2lucHV0cy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGFzc29jaWF0ZWRJbnB1
dCkgeyByZXR1cm4gYXNzb2NpYXRlZElucHV0LmdldCgpID09IGlucHV0OyB9KSAhPSBub3RGb3Vu
ZCk7CisgICAgQVNTRVJUKG1faW5wdXRzLmZpbmRJZihbJl0oYXV0byYgYXNzb2NpYXRlZElucHV0
KSB7IHJldHVybiBhc3NvY2lhdGVkSW5wdXQuZ2V0KCkgPT0gaW5wdXQ7IH0pICE9IG5vdEZvdW5k
KTsKICAgICBpbnB1dC0+dXBkYXRlSW50ZXJuYWxCdXMoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNw
cAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE4LDcgKzIxOSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6Y2EKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9l
dmVudHNMb2NrIH07CiAKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBldmVudCBhdCBvciBqdXN0IHBh
c3QgY2FuY2VsVGltZS4KLSAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgZXZlbnQpIHsKKyAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRJZihbJl0oYXV0byYg
ZXZlbnQpIHsKICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWUoKSA+IGNhbmNlbFRpbWU7CiAgICAg
fSk7CiAgICAgaSA9IChpID09IG5vdEZvdW5kKSA/IG1fZXZlbnRzLnNpemUoKSA6IGk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0lJUkZpbHRlck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSUlSRmlsdGVyTm9kZS5j
cHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
SUlSRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsNyArODcsNyBAQCBFeGNl
cHRpb25PcjxSZWY8SUlSRmlsdGVyTm9kZT4+IElJUkZpbHRlCiAgICAgaWYgKCFvcHRpb25zLmZl
ZWRmb3J3YXJkLnNpemUoKSB8fCBvcHRpb25zLmZlZWRmb3J3YXJkLnNpemUoKSA+IElJUkZpbHRl
cjo6bWF4T3JkZXIpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJv
ciwgImZlZWRmb3J3YXJkIGFycmF5IG11c3QgaGF2ZSBhIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDIw
Il9zIH07CiAKLSAgICBhdXRvIG5vblplcm9WYWx1ZUluZGV4ID0gb3B0aW9ucy5mZWVkZm9yd2Fy
ZC5maW5kTWF0Y2hpbmcoW10oYXV0byYgdmFsdWUpIHsgcmV0dXJuICEhdmFsdWU7IH0pOworICAg
IGF1dG8gbm9uWmVyb1ZhbHVlSW5kZXggPSBvcHRpb25zLmZlZWRmb3J3YXJkLmZpbmRJZihbXShh
dXRvJiB2YWx1ZSkgeyByZXR1cm4gISF2YWx1ZTsgfSk7CiAgICAgaWYgKG5vblplcm9WYWx1ZUlu
ZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsICJmZWVkZm9yd2FyZCBhcnJheSBtdXN0IGNvbnRhaW4gYSBub24temVybyB2YWx1ZSJf
cyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vVTJmQ29t
bWFuZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vVTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjg3NTc3
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL1UyZkNvbW1hbmRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQg
MjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
CiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBp
c0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQoYwogewogICAgIGlmIChyZXF1ZXN0LmF1
dGhlbnRpY2F0b3JTZWxlY3Rpb24gJiYgKHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+
dXNlclZlcmlmaWNhdGlvbiA9PSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVk
IHx8IHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXF1ZXN0LnB1YktleUNyZWRQYXJhbXMu
ZmluZE1hdGNoaW5nKFtdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uYWxnID09IENPU0U6OkVT
MjU2OyB9KSA9PSBub3RGb3VuZCkKKyAgICBpZiAocmVxdWVzdC5wdWJLZXlDcmVkUGFyYW1zLmZp
bmRJZihbXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmFsZyA9PSBDT1NFOjpFUzI1NjsgfSkg
PT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSSW5w
dXRTb3VyY2VBcnJheS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsx
NDMsNyBAQCB2b2lkIFdlYlhSSW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRPCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJjZXMpIHsK
LSAgICAgICAgYXV0byBpbmRleCA9IG1faW5wdXRTb3VyY2VzLmZpbmRNYXRjaGluZyhbJmlucHV0
U291cmNlXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5oYW5kbGUoKSA9PSBpbnB1dFNvdXJj
ZS5oYW5kbGU7IH0pOworICAgICAgICBhdXRvIGluZGV4ID0gbV9pbnB1dFNvdXJjZXMuZmluZElm
KFsmaW5wdXRTb3VyY2VdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmhhbmRsZSgpID09IGlu
cHV0U291cmNlLmhhbmRsZTsgfSk7CiAgICAgICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewog
ICAgICAgICAgICAgLy8gV2hlbiBuZXcgWFIgaW5wdXQgc291cmNlcyBiZWNvbWUgYXZhaWxhYmxl
IGZvciBYUlNlc3Npb24gc2Vzc2lvbiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBydW4gdGhlIGZvbGxv
d2luZyBzdGVwczoKICAgICAgICAgICAgIC8vIDEuIElmIHNlc3Npb24ncyBwcm9taXNlIHJlc29s
dmVkIGZsYWcgaXMgbm90IHNldCwgYWJvcnQgdGhlc2Ugc3RlcHMuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCShyZXZpc2lvbiAyODc1Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNzksNyArMjgwLDcgQEAgdm9pZCBXZWJYUlNlc3Npb246OmNhbmNlbEFuaW1hdGlvbkZy
YW1lKAogICAgIC8vICAgIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbiBmcmFtZSBjYWxsYmFj
a3MgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGhhbmRsZS4KICAgICAvLyAzLiBJ
ZiB0aGVyZSBpcyBzdWNoIGFuIGVudHJ5LCBzZXQgaXRzIGNhbmNlbGxlZCBib29sZWFuIHRvIHRy
dWUgYW5kIHJlbW92ZSBpdCBmcm9tCiAgICAgLy8gICAgc2Vzc2lvbidzIGxpc3Qgb2YgYW5pbWF0
aW9uIGZyYW1lIGNhbGxiYWNrcy4KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX2NhbGxiYWNrcy5m
aW5kTWF0Y2hpbmcoW2NhbGxiYWNrSWRdIChhdXRvJiBpdGVtKSB7CisgICAgc2l6ZV90IHBvc2l0
aW9uID0gbV9jYWxsYmFja3MuZmluZElmKFtjYWxsYmFja0lkXSAoYXV0byYgaXRlbSkgewogICAg
ICAgICByZXR1cm4gaXRlbS0+Y2FsbGJhY2tJZCgpID09IGNhbGxiYWNrSWQ7CiAgICAgfSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lz
dGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTcsNyBAQCB2b2lkIFdlYlhSU3lzdGVtOjplbnN1
cmVJbW1lcnNpdmVYUkRldmljCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uICYmIG9sZERldmljZSAmJiBpbW1lcnNp
dmVYUkRldmljZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnku
cHRyKCkgPT0gb2xkRGV2aWNlOyB9KSAhPSBub3RGb3VuZCkKKyAgICAgICAgaWYgKG1fYWN0aXZl
SW1tZXJzaXZlU2Vzc2lvbiAmJiBvbGREZXZpY2UgJiYgaW1tZXJzaXZlWFJEZXZpY2VzLmZpbmRJ
ZihbJl0oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09IG9sZERldmljZTsgfSkg
IT0gbm90Rm91bmQpCiAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVJbW1lcnNpdmVEZXZpY2Uu
Z2V0KCkgPT0gb2xkRGV2aWNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IGEgYmV0dGVyIFVBIHNlbGVjdGlvbiBtZWNoYW5pc20gaWYgcmVxdWlyZWQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzE4LDcgKzMzMTgsNyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUlzb2xhdGVkVHJlZShBCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGPgogc3RhdGljIGJvb2wgYXBwZW5kSWZOb3RDb250YWluc01hdGNoaW5nKFZl
Y3RvcjxUPiYgdmVjdG9yLCBjb25zdCBUJiB2YWx1ZSwgRiBtYXRjaGVzKQogewotICAgIGlmICh2
ZWN0b3IuZmluZE1hdGNoaW5nKG1hdGNoZXMpICE9IG5vdEZvdW5kKQorICAgIGlmICh2ZWN0b3Iu
ZmluZElmKG1hdGNoZXMpICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
dmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xOTEsNyArMTkyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNob3VsZEVt
aXRTaWduYQogCiAgICAgY29uc3QgY2hhciogbmVlZGxlWzRdID0geyBpbnRlcmZhY2UsIG5hbWUs
IGRldGFpbCwgbnVsbHB0ciB9OwogICAgIGZvciAoY29uc3QgYXV0byYgbGlzdGVuZXJzIDogbV9l
dmVudExpc3RlbmVycy52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVy
cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IEdVbmlxdWVQdHI8Y2hhcio+JiBldmVudCkgeworICAg
ICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVycy5maW5kSWYoWyZdKGNvbnN0IEdVbmlxdWVQdHI8
Y2hhcio+JiBldmVudCkgewogICAgICAgICAgICAgcmV0dXJuIGV2ZW50SXNTdWJ0eXBlKGNvbnN0
X2Nhc3Q8Y2hhcioqPihuZWVkbGUpLCBldmVudC5nZXQoKSk7CiAgICAgICAgIH0pOwogICAgICAg
ICBpZiAocmVzdWx0ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI0LDcgKzMyNCw3IEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFUcmFuc2Zlcjo6dHlwZXMoQWRkRmkKICAgICB9CiAKICAgICBhdXRvIHNhZmVUeXBlcyA9
IG1fcGFzdGVib2FyZC0+dHlwZXNTYWZlRm9yQmluZGluZ3MobV9vcmlnaW5JZGVudGlmaWVyKTsK
LSAgICBib29sIGhhc0ZpbGVCYWNrZWRJdGVtID0gbV9pdGVtTGlzdCAmJiBtX2l0ZW1MaXN0LT5o
YXNJdGVtcygpICYmIG5vdEZvdW5kICE9IG1faXRlbUxpc3QtPml0ZW1zKCkuZmluZE1hdGNoaW5n
KFtdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgYm9vbCBoYXNGaWxlQmFja2VkSXRlbSA9IG1f
aXRlbUxpc3QgJiYgbV9pdGVtTGlzdC0+aGFzSXRlbXMoKSAmJiBub3RGb3VuZCAhPSBtX2l0ZW1M
aXN0LT5pdGVtcygpLmZpbmRJZihbXSAoY29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICByZXR1
cm4gaXRlbS0+aXNGaWxlKCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
YXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyAr
MTU1LDcgQEAgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4mIERhdGFUcmFucwogCiBzdGF0
aWMgdm9pZCByZW1vdmVTdHJpbmdJdGVtT2ZMb3dlcmNhc2VkVHlwZShWZWN0b3I8UmVmPERhdGFU
cmFuc2Zlckl0ZW0+PiYgaXRlbXMsIGNvbnN0IFN0cmluZyYgbG93ZXJjYXNlZFR5cGUpCiB7Ci0g
ICAgYXV0byBpbmRleCA9IGl0ZW1zLmZpbmRNYXRjaGluZyhbbG93ZXJjYXNlZFR5cGVdKGF1dG8m
IGl0ZW0pIHsKKyAgICBhdXRvIGluZGV4ID0gaXRlbXMuZmluZElmKFtsb3dlcmNhc2VkVHlwZV0o
YXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gIWl0ZW0tPmlzRmlsZSgpICYmIGl0ZW0tPnR5
cGUoKSA9PSBsb3dlcmNhc2VkVHlwZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91
bmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC00MzMyLDcgKzQzMzIsNyBAQCB2b2lkIERvY3VtZW50
OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnCiAgICAgICAgIG1fcGVuZGluZ1Njcm9sbEV2ZW50
VGFyZ2V0TGlzdCA9IG1ha2VVbmlxdWU8UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlzdD4oKTsK
IAogICAgIGF1dG8mIHRhcmdldHMgPSBtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3QtPnRh
cmdldHM7Ci0gICAgaWYgKHRhcmdldHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50cnkpIHsg
cmV0dXJuIGVudHJ5LnB0cigpID09ICZ0YXJnZXQ7IH0pICE9IG5vdEZvdW5kKQorICAgIGlmICh0
YXJnZXRzLmZpbmRJZihbJl0gKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAm
dGFyZ2V0OyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHRhcmdl
dHMuaXNFbXB0eSgpKQpAQCAtODA5MCw3ICs4MDkwLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRl
SW50ZXJzZWN0aW9uT2JzZXJ2YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAo
YXV0byYgdGFyZ2V0IDogb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpKSB7CiAgICAgICAg
ICAgICBhdXRvJiB0YXJnZXRSZWdpc3RyYXRpb25zID0gdGFyZ2V0LT5pbnRlcnNlY3Rpb25PYnNl
cnZlckRhdGFJZkV4aXN0cygpLT5yZWdpc3RyYXRpb25zOwotICAgICAgICAgICAgYXV0byBpbmRl
eCA9IHRhcmdldFJlZ2lzdHJhdGlvbnMuZmluZE1hdGNoaW5nKFtvYnNlcnZlcl0oYXV0byYgcmVn
aXN0cmF0aW9uKSB7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gdGFyZ2V0UmVnaXN0cmF0aW9u
cy5maW5kSWYoW29ic2VydmVyXShhdXRvJiByZWdpc3RyYXRpb24pIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVyLmdldCgpID09IG9ic2VydmVyOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDEsNyArMjQxLDcgQEAgVmVjdG9yPEV2ZW50
VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUAogICAgIFJFTEVBU0VfQVNTRVJUKHBhdGhTaXpl
KTsKICAgICBwYXRoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aFNpemUpOwogCi0gICAgYXV0
byBjdXJyZW50VGFyZ2V0SW5kZXggPSBtX3BhdGguZmluZE1hdGNoaW5nKFsmdGFyZ2V0XSAoYXV0
byYgY29udGV4dCkgeworICAgIGF1dG8gY3VycmVudFRhcmdldEluZGV4ID0gbV9wYXRoLmZpbmRJ
ZihbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3Vy
cmVudFRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY3Vy
cmVudFRhcmdldEluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgUmVmIGV2ZW50TG9vcCA9IHNsb3QuZG9jdW1lbnQoKS53aW5kb3dF
dmVudExvb3AoKTsKICAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxTbG90TGlzdCgp
OwotICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJl
dHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAgIEFTU0VSVChs
aXN0LmZpbmRJZihbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAm
c2xvdDsgfSkgPT0gbm90Rm91bmQpOwogICAgIGxpc3QuYXBwZW5kKHNsb3QpOwogCiAgICAgZXZl
bnRMb29wLT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDI4NzU3
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBNaWNoZWxh
bmdlbG8gRGUgU2ltb25lIDxtaWNkZXNpbUBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVybk1pc21hdGNo
KAogCiAgICAgaWYgKGlzRW1haWxGaWVsZCgpICYmIGVsZW1lbnQoKS0+bXVsdGlwbGUoKSkgewog
ICAgICAgICBhdXRvIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgICAgIHJldHVybiB2
YWx1ZXMuZmluZE1hdGNoaW5nKHZhbHVlUGF0dGVybk1pc21hdGNoKSAhPSBub3RGb3VuZDsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlcy5maW5kSWYodmFsdWVQYXR0ZXJuTWlzbWF0Y2gpICE9IG5vdEZv
dW5kOwogICAgIH0KICAgICByZXR1cm4gdmFsdWVQYXR0ZXJuTWlzbWF0Y2godmFsdWUpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
ODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjAzLDcgKzYwMyw3IEBAIHVuc2lnbmVkIEhUTUxWaWRlb0VsZW1lbnQ6
OnJlcXVlc3RWaWRlb0YKIAogdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpjYW5jZWxWaWRlb0ZyYW1l
Q2FsbGJhY2sodW5zaWduZWQgaWRlbnRpZmllcikKIHsKLSAgICBhdXRvIGluZGV4ID0gbV92aWRl
b0ZyYW1lUmVxdWVzdHMuZmluZE1hdGNoaW5nKFtpZGVudGlmaWVyXShhdXRvJiByZXF1ZXN0KSB7
IHJldHVybiByZXF1ZXN0LT5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8g
aW5kZXggPSBtX3ZpZGVvRnJhbWVSZXF1ZXN0cy5maW5kSWYoW2lkZW50aWZpZXJdKGF1dG8mIHJl
cXVlc3QpIHsgcmV0dXJuIHJlcXVlc3QtPmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcjsgfSk7CiAg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1faXNS
dW5uaW5nVmlkZW9GcmFtZVJlcXVlc3RzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjg3NTc3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjphZGRG
aWVsZChSZWY8RAogCiBzaXplX3QgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRJbmRleE9mKGNv
bnN0IERhdGVUaW1lRmllbGRFbGVtZW50JiBmaWVsZFRvRmluZCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZmllbGQpIHsKKyAgICByZXR1cm4g
bV9maWVsZHMuZmluZElmKFsmXSAoYXV0byYgZmllbGQpIHsKICAgICAgICAgcmV0dXJuIGZpZWxk
LnB0cigpID09ICZmaWVsZFRvRmluZDsKICAgICB9KTsKIH0KQEAgLTIyMyw3ICsyMjMsNyBAQCBz
aXplX3QgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRJbmRleE9mCiBEYXRlVGltZUZpZWxkRWxl
bWVudCogRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNlZEZpZWxkRWxlbWVudCgpIGNvbnN0CiB7
CiAgICAgYXV0byogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7
Ci0gICAgYXV0byBmaWVsZEluZGV4ID0gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYg
ZmllbGQpIHsKKyAgICBhdXRvIGZpZWxkSW5kZXggPSBtX2ZpZWxkcy5maW5kSWYoWyZdIChhdXRv
JiBmaWVsZCkgewogICAgICAgICByZXR1cm4gZmllbGQucHRyKCkgPT0gZm9jdXNlZEVsZW1lbnQ7
CiAgICAgfSk7CiAKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmRpZEJsdXJGcm9tRmllCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvKiBuZXdGb2N1
c2VkRWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkgewotICAgICAgICBib29sIGRpZEZv
Y3VzU2libGluZ0ZpZWxkID0gbm90Rm91bmQgIT0gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAo
YXV0byYgZmllbGQpIHsKKyAgICAgICAgYm9vbCBkaWRGb2N1c1NpYmxpbmdGaWVsZCA9IG5vdEZv
dW5kICE9IG1fZmllbGRzLmZpbmRJZihbJl0gKGF1dG8mIGZpZWxkKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gZmllbGQucHRyKCkgPT0gbmV3Rm9jdXNlZEVsZW1lbnQ7CiAgICAgICAgIH0pOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFj
ay5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kRGF0YVRleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IENhYmxlIFRlbGV2aXNpb24gTGFicyBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgSW5iYW5kRGF0YVRleHRUcmFjazo6YWRkRGF0YUN1ZShjb24KIAog
UmVmUHRyPERhdGFDdWU+IEluYmFuZERhdGFUZXh0VHJhY2s6OmZpbmRJbmNvbXBsZXRlQ3VlKGNv
bnN0IFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUmIGN1ZVRvRmluZCkKIHsKLSAgICBhdXRvIGlu
ZGV4ID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgY3Vl
KSB7CisgICAgYXV0byBpbmRleCA9IG1faW5jb21wbGV0ZUN1ZU1hcC5maW5kSWYoWyZdKGNvbnN0
IGF1dG8mIGN1ZSkgewogICAgICAgICByZXR1cm4gY3VlVG9GaW5kLmlzRXF1YWwoKmN1ZS0+cGxh
dGZvcm1WYWx1ZSgpKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzMiw3
ICsxMDMyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OmFwcGVuZEFjdGlvblNuYXBzaAogCiBp
bnQgSW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0
YSkKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmZpbmRNYXRj
aGluZyhbJl0gKGF1dG8gaXRlbSkgeworICAgIHNpemVfdCBpbmRleCA9IG1faW5kZXhlZER1cGxp
Y2F0ZURhdGEuZmluZElmKFsmXSAoYXV0byBpdGVtKSB7CiAgICAgICAgIGlmIChkYXRhID09IGl0
ZW0pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAy
ODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBXZWJEZWJ1Z2dl
ckFnZW50OjpkaWRBZGRFdmVudExpc3RlbgogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBl
dmVudExpc3RlbmVycyA9IHRhcmdldC5ldmVudExpc3RlbmVycyhldmVudFR5cGUpOwotICAgIGF1
dG8gcG9zaXRpb24gPSBldmVudExpc3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHJlZ2lz
dGVyZWRMaXN0ZW5lcikgeworICAgIGF1dG8gcG9zaXRpb24gPSBldmVudExpc3RlbmVycy5maW5k
SWYoWyZdKGF1dG8mIHJlZ2lzdGVyZWRMaXN0ZW5lcikgewogICAgICAgICByZXR1cm4gJnJlZ2lz
dGVyZWRMaXN0ZW5lci0+Y2FsbGJhY2soKSA9PSAmbGlzdGVuZXIgJiYgcmVnaXN0ZXJlZExpc3Rl
bmVyLT51c2VDYXB0dXJlKCkgPT0gY2FwdHVyZTsKICAgICB9KTsKICAgICBpZiAocG9zaXRpb24g
PT0gbm90Rm91bmQpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlk
QWRkRXZlbnRMaXN0ZW4KIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlz
dGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIGF1dG8mIGV2ZW50
TGlzdGVuZXJzID0gdGFyZ2V0LmV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7Ci0gICAgc2l6ZV90
IGxpc3RlbmVySW5kZXggPSBldmVudExpc3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHJl
Z2lzdGVyZWRMaXN0ZW5lcikgeworICAgIHNpemVfdCBsaXN0ZW5lckluZGV4ID0gZXZlbnRMaXN0
ZW5lcnMuZmluZElmKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKICAgICAgICAgcmV0
dXJuICZyZWdpc3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkgPT0gJmxpc3RlbmVyICYmIHJlZ2lz
dGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IGNhcHR1cmU7CiAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAkocmV2
aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgRmxvYXRpbmdTdGF0ZTo6
YXBwZW5kKEZsb2F0SXRlbSBmbG8KICAgICAgICAgcmV0dXJuIG1fZmxvYXRzLmFwcGVuZChmbG9h
dEl0ZW0pOwogCiAgICAgLy8gVGhlIGludGVncmF0aW9uIGNvZGVwYXRoIGRvZXMgbm90IGNvbnN0
cnVjdCBhIGxheW91dCBib3ggZm9yIHRoZSBmbG9hdCBpdGVtLgotICAgIEFTU0VSVF9JTVBMSUVT
KGZsb2F0SXRlbS5mbG9hdEJveCgpLCBtX2Zsb2F0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBl
bnRyeSkgeworICAgIEFTU0VSVF9JTVBMSUVTKGZsb2F0SXRlbS5mbG9hdEJveCgpLCBtX2Zsb2F0
cy5maW5kSWYoWyZdIChhdXRvJiBlbnRyeSkgewogICAgICAgICByZXR1cm4gZW50cnkuZmxvYXRC
b3goKSA9PSBmbG9hdEl0ZW0uZmxvYXRCb3goKTsKICAgICB9KSA9PSBub3RGb3VuZCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJv
eFRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDUsNyArMjA1LDcgQEAgTGF5b3V0OjpCb3gmIEJveFRyZWU6Omxh
eW91dEJveEZvclJlbmRlcgogICAgICAgICByZXR1cm4gbV9yb290OwogCiAgICAgaWYgKG1fYm94
ZXMuc2l6ZSgpIDw9IHNtYWxsVHJlZVRocmVzaG9sZCkgewotICAgICAgICBhdXRvIGluZGV4ID0g
bV9ib3hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIGF1dG8gaW5k
ZXggPSBtX2JveGVzLmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsKICAgICAgICAgICAgIHJldHVy
biBlbnRyeS5yZW5kZXJlciA9PSAmcmVuZGVyZXI7CiAgICAgICAgIH0pOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgUmVuZGVy
T2JqZWN0JiBCb3hUcmVlOjpyZW5kZXJlckZvckxheW91dAogICAgICAgICByZXR1cm4gbV9mbG93
OwogCiAgICAgaWYgKG1fYm94ZXMuc2l6ZSgpIDw9IHNtYWxsVHJlZVRocmVzaG9sZCkgewotICAg
ICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGVudHJ5KSB7
CisgICAgICAgIGF1dG8gaW5kZXggPSBtX2JveGVzLmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsK
ICAgICAgICAgICAgIHJldHVybiBlbnRyeS5ib3gucHRyKCkgPT0gJmJveDsKICAgICAgICAgfSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyNzcsNyArMjI3
Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxvYWRpbmcoKQogCiAgICAgbV9s
aW5rSWNvbnMgPSBMaW5rSWNvbkNvbGxlY3RvciB7ICpkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7
IExpbmtJY29uVHlwZTo6RmF2aWNvbiwgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29u
VHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSk7CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBt
X2xpbmtJY29ucy5maW5kTWF0Y2hpbmcoW10oYXV0byYgaWNvbikgeyByZXR1cm4gaWNvbi50eXBl
ID09IExpbmtJY29uVHlwZTo6RmF2aWNvbjsgfSk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9s
aW5rSWNvbnMuZmluZElmKFtdKGF1dG8mIGljb24pIHsgcmV0dXJuIGljb24udHlwZSA9PSBMaW5r
SWNvblR5cGU6OkZhdmljb247IH0pOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG5vdEZvdW5kKQog
ICAgICAgICBtX2xpbmtJY29ucy5hcHBlbmQoeyBkb2N1bWVudC0+Y29tcGxldGVVUkwoIi9mYXZp
Y29uLmljbyJfcyksIExpbmtJY29uVHlwZTo6RmF2aWNvbiwgU3RyaW5nKCksIHN0ZDo6bnVsbG9w
dCwgeyB9IH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9i
c2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw3IEBAIFN0cmlu
ZyBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cm9vdE1hcmdpbigKIAogYm9vbCBJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6aXNPYnNlcnZpbmcoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiB0YXJn
ZXQpIHsKKyAgICByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuZmluZElmKFsmXShhdXRvJiB0
YXJnZXQpIHsKICAgICAgICAgcmV0dXJuIHRhcmdldC5nZXQoKSA9PSAmZWxlbWVudDsKICAgICB9
KSAhPSBub3RGb3VuZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWlu
ZXJPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Nb2RhbENv
bnRhaW5lck9ic2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9Nb2RhbENvbnRhaW5lck9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zODUsMTMgKzM4
NSwxMyBAQCB2b2lkIE1vZGFsQ29udGFpbmVyT2JzZXJ2ZXI6OmNvbGxlY3RDbGljCiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgTW9kYWxDb250YWluZXJEZWNpc2lvbjo6SGlkZUFuZElnbm9yZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNl
IE1vZGFsQ29udGFpbmVyRGVjaXNpb246OkhpZGVBbmRBbGxvdzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGluZGV4ID0gcG9zaXRpdmUuZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVs
bCk7IGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
aW5kZXggPSBwb3NpdGl2ZS5maW5kSWYobWF0Y2hOb25OdWxsKTsgaW5kZXggIT0gbm90Rm91bmQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aXZlW2luZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbmV1dHJhbC5maW5k
TWF0Y2hpbmcobWF0Y2hOb25OdWxsKTsgaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byBpbmRleCA9IG5ldXRyYWwuZmluZElmKG1hdGNoTm9uTnVsbCk7
IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
ZXV0cmFsW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIE1vZGFsQ29udGFpbmVyRGVjaXNpb246OkhpZGVBbmREaXNh
bGxvdzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbmVnYXRpdmUu
ZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8gaW5kZXggPSBuZWdhdGl2ZS5maW5kSWYobWF0Y2hOb25O
dWxsKTsgaW5kZXggIT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5lZ2F0aXZlW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9i
c2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01OSw3ICs2MCw3IEBAIHZvaWQgUmVzaXplT2JzZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYg
dGEKICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcG9z
aXRpb24gPSBtX29ic2VydmF0aW9ucy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIG9ic2VydmF0aW9u
KSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fb2JzZXJ2YXRpb25zLmZpbmRJZihbJl0oYXV0byYg
b2JzZXJ2YXRpb24pIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmF0aW9uLT50YXJnZXQoKSA9PSAm
dGFyZ2V0OwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgU2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVyOjpyZW1vdmVMYXQKICAgICBpZiAobV9mcmFtZVN0YXRlU3RhY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX2ZyYW1l
U3RhdGVTdGFjay5maW5kTWF0Y2hpbmcoWyZlbGVtZW50XSAoY29uc3QgYXV0byYgc3RhdGUpIHsK
KyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX2ZyYW1lU3RhdGVTdGFjay5maW5kSWYoWyZlbGVtZW50
XSAoY29uc3QgYXV0byYgc3RhdGUpIHsKICAgICAgICAgYXV0byogd2hlZWxFbGVtZW50ID0gc3Rh
dGUud2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7CiAgICAgICAgIHJldHVybiB3aGVlbEVsZW1lbnQg
JiYgZWxlbWVudC5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQpOwogICAgIH0pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBib29sIGhhc0NvbXBhdGlibGVT
bmFwQXJlYShjb25zdCAKICAgICBhdXRvIHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgPSBj
b21wb25lbnRGb3JBeGlzPFVuaXRUeXBlLCBQb2ludFR5cGU+KGRlc3RpbmF0aW9uT2Zmc2V0UG9p
bnQsIG90aGVyQXhpcyk7CiAgICAgYXV0byB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzID0gYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUuaGVpZ2h0KCkg
OiB2aWV3cG9ydFNpemUud2lkdGgoKTsKIAotICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBBcmVh
SW5kaWNlcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGluZGV4KSB7CisgICAgcmV0dXJuIHNuYXBP
ZmZzZXQuc25hcEFyZWFJbmRpY2VzLmZpbmRJZihbJl0gKGF1dG8gaW5kZXgpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgc25hcEFyZWEgPSBpbmZvLnNuYXBBcmVhc1tpbmRleF07CiAgICAgICAgIGF1
dG8gW290aGVyQXhpc01pbiwgb3RoZXJBeGlzTWF4XSA9IHJhbmdlRm9yQXhpczxVbml0VHlwZT4o
c25hcEFyZWEsIG90aGVyQXhpcyk7CiAgICAgICAgIHJldHVybiAoc2Nyb2xsRGVzdGluYXRpb25J
bk90aGVyQXhpcyArIHZpZXdwb3J0TGVuZ3RoSW5PdGhlckF4aXMpID4gb3RoZXJBeGlzTWluICYm
IHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgPCBvdGhlckF4aXNNYXg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFNjcm9s
bGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZChTY3JvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9z
Y3JvbGxpbmdUcmVlLmluQ29tbWl0VHJlZVN0YXRlKCkpOwogCi0gICAgc2l6ZV90IGluZGV4ID0g
bV9jaGlsZHJlbi5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGNoaWxkKSB7CisgICAgc2l6ZV90IGlu
ZGV4ID0gbV9jaGlsZHJlbi5maW5kSWYoWyZdKGF1dG8mIGNoaWxkKSB7CiAgICAgICAgIHJldHVy
biAmbm9kZSA9PSBjaGlsZC5wdHIoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzgzLDcgKzc4Myw3IEBAIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRJbWFnZU0KIHsKICAgICBhdXRvIGFsbG93ZWRNSU1F
VHlwZXMgPSBNSU1FVHlwZVJlZ2lzdHJ5OjphbGxvd2VkTUlNRVR5cGVzKG1pbWVUeXBlcywgZXh0
ZW5zaW9ucyk7CiAKLSAgICBhdXRvIHBvc2l0aW9uID0gYWxsb3dlZE1JTUVUeXBlcy5maW5kTWF0
Y2hpbmcoW10oY29uc3QgYXV0byYgbWltZVR5cGUpIHsKKyAgICBhdXRvIHBvc2l0aW9uID0gYWxs
b3dlZE1JTUVUeXBlcy5maW5kSWYoW10oY29uc3QgYXV0byYgbWltZVR5cGUpIHsKICAgICAgICAg
cmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKTsKICAgICB9KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVT
dHJpbmdJbgogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnkmIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjphZGRPck1vdmVFbnRyeVRvRW5kKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBhdXRv
IGluZGV4ID0gbV9kYXRhLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVudHJ5KSB7CisgICAgYXV0
byBpbmRleCA9IG1fZGF0YS5maW5kSWYoWyZdIChhdXRvJiBlbnRyeSkgewogICAgICAgICByZXR1
cm4gZW50cnkudHlwZSA9PSB0eXBlOwogICAgIH0pOwogICAgIGF1dG8gZW50cnkgPSBpbmRleCA9
PSBub3RGb3VuZCA/IEVudHJ5KHR5cGUpIDogbV9kYXRhW2luZGV4XTsKQEAgLTE4OSw3ICsxODks
NyBAQCBib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNEYXRhKCkgY29uCiAKIGJvb2wgUGFz
dGVib2FyZEN1c3RvbURhdGE6Omhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbm90Rm91bmQgIT0gbV9kYXRhLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVudHJ5
KSB7CisgICAgcmV0dXJuIG5vdEZvdW5kICE9IG1fZGF0YS5maW5kSWYoWyZdIChhdXRvJiBlbnRy
eSkgewogICAgICAgICByZXR1cm4gIWVudHJ5LmN1c3RvbURhdGEuaXNOdWxsKCk7CiAgICAgfSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2Fy
ZENvY29hLm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFBh
c3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICAgICAgaWYgKCFpdGVt
cykKICAgICAgICAgICAgIHJldHVybiBGaWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0
YTsKIAotICAgICAgICBtYXlDb250YWluRmlsZVBhdGhzID0gaXRlbXMtPnNpemUoKSAhPSAxIHx8
IG5vdEZvdW5kICE9IGl0ZW1zLT5maW5kTWF0Y2hpbmcoW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgbWF5Q29udGFpbkZpbGVQYXRocyA9IGl0ZW1zLT5zaXplKCkgIT0gMSB8fCBub3RGb3VuZCAh
PSBpdGVtcy0+ZmluZElmKFtdIChhdXRvJiBpdGVtKSB7CiAgICAgICAgICAgICByZXR1cm4gaXRl
bS5jYW5CZVRyZWF0ZWRBc0F0dGFjaG1lbnRPckZpbGUoKSB8fCBpdGVtLmlzTm9uVGV4dFR5cGUg
fHwgaXRlbS5jb250YWluc0ZpbGVVUkxBbmRGaWxlVXBsb2FkQ29udGVudDsKICAgICAgICAgfSk7
CiAgICAgfQpAQCAtMTU4LDEwICsxNTgsMTAgQEAgUGFzdGVib2FyZDo6RmlsZUNvbnRlbnRTdGF0
ZSBQYXN0ZWJvYXJkOgogICAgIGlmICghbWF5Q29udGFpbkZpbGVQYXRocykgewogICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOwogICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1fcGFzdGVib2FyZE5h
bWUsIGNvbnRleHQoKSk7Ci0gICAgICAgIGlmIChjb2NvYVR5cGVzLmZpbmRNYXRjaGluZyhbXShj
b25zdCBTdHJpbmcmIGNvY29hVHlwZSkgeyByZXR1cm4gc2hvdWxkVHJlYXRDb2NvYVR5cGVBc0Zp
bGUoY29jb2FUeXBlKTsgfSkgPT0gbm90Rm91bmQpCisgICAgICAgIGlmIChjb2NvYVR5cGVzLmZp
bmRJZihbXShjb25zdCBTdHJpbmcmIGNvY29hVHlwZSkgeyByZXR1cm4gc2hvdWxkVHJlYXRDb2Nv
YVR5cGVBc0ZpbGUoY29jb2FUeXBlKTsgfSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1
cm4gRmlsZUNvbnRlbnRTdGF0ZTo6Tm9GaWxlT3JJbWFnZURhdGE7CiAKLSAgICAgICAgYXV0byBp
bmRleE9mVVJMID0gY29jb2FUeXBlcy5maW5kTWF0Y2hpbmcoW10oYXV0byYgY29jb2FUeXBlKSB7
CisgICAgICAgIGF1dG8gaW5kZXhPZlVSTCA9IGNvY29hVHlwZXMuZmluZElmKFtdKGF1dG8mIGNv
Y29hVHlwZSkgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIGlmIChjb2NvYVR5cGUg
PT0gU3RyaW5nKGxlZ2FjeVVSTFBhc3RlYm9hcmRUeXBlKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVByb3h5LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTEwLDcgQEAgYm9vbCBLZXlIYW5kbGU6OnRha2VW
YWx1ZUlmRGlmZmVyZW50KEtleQogCiBib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0
IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKKyAgICByZXR1cm4g
bV9rZXlzLmZpbmRJZihbJl0oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewog
ICAgICAgICByZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKICAgICB9KSAhPSBub3RGb3VuZDsK
IH0KQEAgLTE0OSw3ICsxNTAsNyBAQCBib29sIEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQ
dHI8S2V5CiBib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleUhhbmRsZT4mJiBrZXkpCiB7CiAg
ICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOwotICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hp
bmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eCA9IG1fa2V5cy5maW5kSWYoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5
KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CiAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBEaXNwbGF5
UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpkaXNwbAogCiBzaXplX3QgRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlcjo6ZmluZE1vbml0b3JGb3JEaXNwbGF5SUQoUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKSBjb25zdAogewotICAgIHJldHVybiBtX21vbml0b3JzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgbW9uaXRvcldyYXBwZXIpIHsKKyAgICByZXR1cm4gbV9tb25pdG9ycy5maW5kSWYoWyZd
KGF1dG8mIG1vbml0b3JXcmFwcGVyKSB7CiAgICAgICAgIHJldHVybiBtb25pdG9yV3JhcHBlci5t
b25pdG9yLT5kaXNwbGF5SUQoKSA9PSBkaXNwbGF5SUQ7CiAgICAgfSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVW
Q1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzcsNyArMjM3LDcgQEAgU3RyaW5n
IGNyZWF0ZUhFVkNDb2RlY1BhcmFtZXRlcnNTdHJpbmcoYwogICAgIC8vIGdlbmVyYWxfcHJvZ3Jl
c3NpdmVfc291cmNlX2ZsYWcsIGVhY2ggZW5jb2RlZCBhcyBhIGhleGFkZWNpbWFsIG51bWJlciwg
YW5kIHRoZSBlbmNvZGluZwogICAgIC8vIG9mIGVhY2ggYnl0ZSBzZXBhcmF0ZWQgYnkgYSBwZXJp
b2Q7IHRyYWlsaW5nIGJ5dGVzIHRoYXQgYXJlIHplcm8gbWF5IGJlIG9taXR0ZWQuCiAgICAgU3Ry
aW5nQnVpbGRlciBjb21wYXRpYmlsaXR5RmxhZ3M7Ci0gICAgYXV0byBsYXN0RmxhZ0J5dGUgPSBw
YXJhbWV0ZXJzLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MucmV2ZXJzZUZpbmRNYXRj
aGluZyhbXSAoYXV0byYgZmxhZykgeyByZXR1cm4gZmxhZzsgfSk7CisgICAgYXV0byBsYXN0Rmxh
Z0J5dGUgPSBwYXJhbWV0ZXJzLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MucmV2ZXJz
ZUZpbmRJZihbXSAoYXV0byYgZmxhZykgeyByZXR1cm4gZmxhZzsgfSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGxhc3RGbGFnQnl0ZSAhPSBub3RGb3VuZCAmJiBpIDw9IGxhc3RGbGFnQnl0ZTsg
KytpKSB7CiAgICAgICAgIGNvbXBhdGliaWxpdHlGbGFncy5hcHBlbmQoJy4nKTsKICAgICAgICAg
Y29tcGF0aWJpbGl0eUZsYWdzLmFwcGVuZChoZXgocGFyYW1ldGVycy5nZW5lcmFsQ29uc3RyYWlu
dEluZGljYXRvckZsYWdzW2ldLCAyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMzIsNyArMzMyLDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRp
YVBsYXllcgogY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBNZWRpYVBsYXllcjo6bWVkaWFFbmdp
bmUoTWVkaWFQbGF5ZXJFbnVtczo6TWVkaWFFbmdpbmVJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7
CiAgICAgYXV0byYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOwotICAgIGF1dG8g
Y3VycmVudEluZGV4ID0gZW5naW5lcy5maW5kTWF0Y2hpbmcoW2lkZW50aWZpZXJdIChhdXRvJiBl
bmdpbmUpIHsKKyAgICBhdXRvIGN1cnJlbnRJbmRleCA9IGVuZ2luZXMuZmluZElmKFtpZGVudGlm
aWVyXSAoYXV0byYgZW5naW5lKSB7CiAgICAgICAgIHJldHVybiBlbmdpbmUtPmlkZW50aWZpZXIo
KSA9PSBpZGVudGlmaWVyOwogICAgIH0pOwogCkBAIC0zOTMsNyArMzkzLDcgQEAgY29uc3QgTWVk
aWFQbGF5ZXJGYWN0b3J5KiBNZWRpYVBsYXllcjo6bgogICAgIGlmICghY3VycmVudCkgCiAgICAg
ICAgIHJldHVybiBlbmdpbmVzLmZpcnN0KCkuZ2V0KCk7CiAKLSAgICBhdXRvIGN1cnJlbnRJbmRl
eCA9IGVuZ2luZXMuZmluZE1hdGNoaW5nKFtjdXJyZW50XSAoYXV0byYgZW5naW5lKSB7CisgICAg
YXV0byBjdXJyZW50SW5kZXggPSBlbmdpbmVzLmZpbmRJZihbY3VycmVudF0gKGF1dG8mIGVuZ2lu
ZSkgewogICAgICAgICByZXR1cm4gZW5naW5lLmdldCgpID09IGN1cnJlbnQ7CiAgICAgfSk7CiAg
ICAgaWYgKGN1cnJlbnRJbmRleCA9PSBub3RGb3VuZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakMubW0JKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4NSw3ICs1ODUsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iCiAKICAgICAgICAgYXV0byBzZXNzaW9uS2V5cyA9IHNlc3Np
b25JbnRlcmZhY2UtPmtleUlEcygpOwogICAgICAgICBpZiAoYW55T2Yoc2Vzc2lvbktleXMsIFsm
XShjb25zdCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIHNlc3Npb25LZXkpIHsKLSAgICAg
ICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8RnJhZ21lbnRl
ZFNoYXJlZEJ1ZmZlcj4mIGtleUlEKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRJ
ZihbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBrZXlJRCkgewogICAgICAg
ICAgICAgICAgIHJldHVybiBrZXlJRC5nZXQoKSA9PSBzZXNzaW9uS2V5LmdldCgpOwogICAgICAg
ICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAgIH0pKQpAQCAtNTk2LDcgKzU5Niw3IEBAIENE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2IKIAogQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDKiBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c2Vzc2lvbkZvclJlcXVlc3QoQVZDb250ZW50S2V5UmVxdWVzdCogcmVxdWVzdCkg
Y29uc3QKIHsKLSAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kTWF0Y2hpbmcoWyZdIChh
dXRvIHNlc3Npb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kSWYoWyZdIChh
dXRvIHNlc3Npb24pIHsKICAgICAgICAgcmV0dXJuIHNlc3Npb24gJiYgc2Vzc2lvbi0+aGFzUmVx
dWVzdChyZXF1ZXN0KTsKICAgICB9KTsKIApAQCAtNjA4LDcgKzYwOCw3IEBAIENETUluc3RhbmNl
U2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2IKIAogQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDKiBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6
c2Vzc2lvbkZvckdyb3VwKEFWQ29udGVudEtleVJlcG9ydEdyb3VwKiBncm91cCkgY29uc3QKIHsK
LSAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kTWF0Y2hpbmcoW2dyb3VwXSAoYXV0byBz
ZXNzaW9uKSB7CisgICAgYXV0byBpbmRleCA9IG1fc2Vzc2lvbnMuZmluZElmKFtncm91cF0gKGF1
dG8gc2Vzc2lvbikgewogICAgICAgICByZXR1cm4gc2Vzc2lvbiAmJiBzZXNzaW9uLT5jb250ZW50
S2V5UmVwb3J0R3JvdXAoKSA9PSBncm91cDsKICAgICB9KTsKIApAQCAtODUzLDkgKzg1Myw5IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShXVEZNb3ZlKCprZXlJRFZlY3RvcikpOwotICAgICAgICAgICAgYXV0byBmb3VuZElu
ZGV4ID0gbV9jdXJyZW50UmVxdWVzdC52YWx1ZSgpLnJlcXVlc3RzLmZpbmRNYXRjaGluZyhbJl0g
KGF1dG8mIHJlcXVlc3QpIHsKKyAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVu
dFJlcXVlc3QudmFsdWUoKS5yZXF1ZXN0cy5maW5kSWYoWyZdIChhdXRvJiByZXF1ZXN0KSB7CiAg
ICAgICAgICAgICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNGb3JSZXF1ZXN0KHJlcXVlc3QuZ2V0
KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25z
dCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGtleUlEcy5maW5kSWYoWyZdKGNvbnN0IFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYg
aWQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkLmdldCgpID09IGtleUlELmdldCgp
OwogICAgICAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOwogICAgICAgICAgICAgfSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDc5LDcgKzEwNzksNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2hvdWxkUmVwYWludE9uU2l6
CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjphbmltYXRpb25Jc1J1bm5pbmcoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKSBjb25zdAogewotICAgIGF1dG8gaW5kZXggPSBtX2FuaW1hdGlvbnMu
ZmluZE1hdGNoaW5nKFsmXShMYXllclByb3BlcnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAg
IGF1dG8gaW5kZXggPSBtX2FuaW1hdGlvbnMuZmluZElmKFsmXShMYXllclByb3BlcnR5QW5pbWF0
aW9uIGFuaW1hdGlvbikgewogICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm1fbmFtZSA9PSBhbmlt
YXRpb25OYW1lOwogICAgIH0pOwogICAgIHJldHVybiBpbmRleCAhPSBub3RGb3VuZCAmJiBtX2Fu
aW1hdGlvbnNbaW5kZXhdLm1fcGxheVN0YXRlID09IFBsYXlTdGF0ZTo6UGxheWluZzsKQEAgLTEy
MDYsNyArMTIwNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmkK
IHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xh
eWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7CiAKLSAgICBhdXRv
IGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRNYXRjaGluZyhbJl0oTGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbiBhbmltYXRpb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRJZihb
Jl0oTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiBhbmltYXRpb24pIHsKICAgICAgICAgcmV0dXJuIGFu
aW1hdGlvbi5hbmltYXRpb25JZGVudGlmaWVyKCkgPT0gYW5pbWF0aW9uS2V5ICYmICFhbmltYXRp
b24ubV9iZWdpblRpbWU7CiAgICAgfSk7CiAKQEAgLTMzMDMsNyArMzMwMyw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKCkKIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6
OmlzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYW5p
bWF0aW9ucy5maW5kTWF0Y2hpbmcoWyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0aW9u
KSB7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9ucy5maW5kSWYoWyZdKExheWVyUHJvcGVydHlBbmlt
YXRpb24gYW5pbWF0aW9uKSB7CiAgICAgICAgIHJldHVybiBhbmltYXRlZFByb3BlcnR5SXNUcmFu
c2Zvcm1PclJlbGF0ZWQoYW5pbWF0aW9uLm1fcHJvcGVydHkpICYmIChhbmltYXRpb24ubV9wbGF5
U3RhdGUgPT0gUGxheVN0YXRlOjpQbGF5aW5nIHx8IGFuaW1hdGlvbi5tX3BsYXlTdGF0ZSA9PSBQ
bGF5U3RhdGU6OlBhdXNlZCk7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50UmVu
ZGVyZXJDRy5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYWRpZW50UmVuZGVyZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
Myw3ICs0MjMsNyBAQCBHcmFkaWVudFJlbmRlcmVyQ0c6OlN0cmF0ZWd5IEdyYWRpZW50UmVuCiAg
ICAgQVNTRVJUX1VOVVNFRChjb2xvckludGVycG9sYXRpb25NZXRob2QsIGNvbG9ySW50ZXJwb2xh
dGlvbk1ldGhvZC5hbHBoYVByZW11bHRpcGxpY2F0aW9uID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCk7CiAjZW5kaWYKIAotI2lmIEhBVkUoQ09SRV9HUkFQSElDU19H
UkFESUVOVF9DUkVBVEVfV0lUSF9PUFRJT05TKQorI2lmIDAgJiYgSEFWRShDT1JFX0dSQVBISUNT
X0dSQURJRU5UX0NSRUFURV9XSVRIX09QVElPTlMpCiAjaWYgSEFWRShDT1JFX0dSQVBISUNTX1BS
RU1VTFRJUExJRURfSU5URVJQT0xBVElPTl9HUkFESUVOVCkKICAgICBhdXRvIGdyYWRpZW50SW50
ZXJwb2xhdGVzUHJlbXVsdGlwbGllZE9wdGlvbnNEaWN0aW9uYXJ5ID0gW10gKCkgLT4gQ0ZEaWN0
aW9uYXJ5UmVmIHsKICAgICAgICAgc3RhdGljIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDR0dyYWRp
ZW50SW50ZXJwb2xhdGVzUHJlbXVsdGlwbGllZCB9OwpAQCAtNTAwLDcgKzUwMCw3IEBAIEdyYWRp
ZW50UmVuZGVyZXJDRzo6U3RyYXRlZ3kgR3JhZGllbnRSZW4KICAgICAgICAgfQogICAgIH0KIAot
I2lmIEhBVkUoQ09SRV9HUkFQSElDU19HUkFESUVOVF9DUkVBVEVfV0lUSF9PUFRJT05TKQorI2lm
IDAgJiYgSEFWRShDT1JFX0dSQVBISUNTX0dSQURJRU5UX0NSRUFURV9XSVRIX09QVElPTlMpCiAg
ICAgcmV0dXJuIEdyYWRpZW50IHsgYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9yQ29t
cG9uZW50c0FuZE9wdGlvbnMoZ3JhZGllbnRDb2xvclNwYWNlLCBjb2xvckNvbXBvbmVudHMuZGF0
YSgpLCBsb2NhdGlvbnMuZGF0YSgpLCBudW1iZXJPZlN0b3BzLCBncmFkaWVudE9wdGlvbnNEaWN0
aW9uYXJ5KGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCkpKSB9OwogI2Vsc2UKICAgICByZXR1cm4g
R3JhZGllbnQgeyBhZG9wdENGKENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JDb21wb25lbnRzKGdy
YWRpZW50Q29sb3JTcGFjZSwgY29sb3JDb21wb25lbnRzLmRhdGEoKSwgbG9jYXRpb25zLmRhdGEo
KSwgbnVtYmVyT2ZTdG9wcykpIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAJKHJldmlzaW9u
IDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Zv
bnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTg0Nyw3ICs4NDcsNyBAQCBib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVu
ZGVySWNvCiAgICAgVmVjdG9yPENHUmVjdD4gYm91bmRpbmdSZWN0czsKICAgICBib3VuZGluZ1Jl
Y3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhzLnNpemUoKSk7CiAgICAgQ1RGb250R2V0Qm91bmRp
bmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQs
IGdseXBocy5iZWdpbigpLCBib3VuZGluZ1JlY3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOwot
ICAgIHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRv
JiByZWN0KSB7CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmluZElmKFtd
KGF1dG8mIHJlY3QpIHsKICAgICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5KHJlY3QpOwogICAg
IH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29u
dGV4dEVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWdsL0dMQ29udGV4dEVHTC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBHTENvbnRleHRFR0w6OmdldEVHTENvbmZpZyhFR0xE
aXNwbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYXV0byBpbmRleCA9IGNv
bmZpZ3MuZmluZE1hdGNoaW5nKFsmXShFR0xDb25maWcgdmFsdWUpIHsKKyAgICBhdXRvIGluZGV4
ID0gY29uZmlncy5maW5kSWYoWyZdKEVHTENvbmZpZyB2YWx1ZSkgewogICAgICAgICBFR0xpbnQg
cmVkU2l6ZSwgZ3JlZW5TaXplLCBibHVlU2l6ZSwgYWxwaGFTaXplOwogICAgICAgICBlZ2xHZXRD
b25maWdBdHRyaWIoZGlzcGxheSwgdmFsdWUsIEVHTF9SRURfU0laRSwgJnJlZFNpemUpOwogICAg
ICAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlzcGxheSwgdmFsdWUsIEVHTF9HUkVFTl9TSVpFLCAm
Z3JlZW5TaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJSZWdpc3RyeVNjYW5u
ZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYxLDE0ICs1NjEsMTQgQEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIEdT
dHJlYW1lcgogICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGNvZGVjcykgewogICAgICAgICBh
dXRvIGNvZGVjID0gaXRlbS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAgICBib29s
IHJlcXVpcmVzSGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVT
dXBwb3J0Ci0gICAgICAgICAgICAuZmluZE1hdGNoaW5nKFtjb250YWluZXJUeXBlLCBjb2RlY10o
YXV0byYgaGFyZHdhcmVDb250ZW50VHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAuZmluZElm
KFtjb250YWluZXJUeXBlLCBjb2RlY10oYXV0byYgaGFyZHdhcmVDb250ZW50VHlwZSkgLT4gYm9v
bCB7CiAgICAgICAgICAgICBhdXRvIGhhcmR3YXJlQ29udGFpbmVyID0gaGFyZHdhcmVDb250ZW50
VHlwZS5jb250YWluZXJUeXBlKCk7CiAgICAgICAgICAgICBpZiAoIWhhcmR3YXJlQ29udGFpbmVy
LmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICYmIGZubWF0Y2goaGFyZHdhcmVDb250YWluZXIu
dXRmOCgpLmRhdGEoKSwgY29udGFpbmVyVHlwZS51dGY4KCkuZGF0YSgpLCAwKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhdXRvIGhhcmR3YXJlQ29kZWNzID0g
aGFyZHdhcmVDb250ZW50VHlwZS5jb2RlY3MoKTsKICAgICAgICAgICAgIHJldHVybiBoYXJkd2Fy
ZUNvZGVjcy5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICB8fCBoYXJkd2FyZUNvZGVjcy5maW5k
TWF0Y2hpbmcoW2NvZGVjXShhdXRvJiBoYXJkd2FyZUNvZGVjKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICB8fCBoYXJkd2FyZUNvZGVjcy5maW5kSWYoW2NvZGVjXShhdXRvJiBoYXJkd2FyZUNv
ZGVjKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFmbm1hdGNoKGhhcmR3
YXJlQ29kZWMudXRmOCgpLmRhdGEoKSwgY29kZWMudXRmOCgpLmRhdGEoKSwgMCk7CiAgICAgICAg
ICAgICB9KSAhPSBub3RGb3VuZDsKICAgICAgICAgfSkgIT0gbm90Rm91bmQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNw
cAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIENvcHlyaWdodCAoQykgMjAxMC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29t
cGFueSAxMDAsIEluYy4KICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCkBAIC0xMzU5LDcgKzEzNTksNyBAQCBib29sIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2CiAgICAgYm9vbCBpc0ludmlzaWJsZUJlY2F1c2VPcGFj
aXR5WmVybyA9ICFvcGFjaXR5KCkgJiYgIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25z
T2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKIAogICAgIC8vIENoZWNrIGlmIHRoZXJl
J3MgYSBmaWx0ZXIgdGhhdCBzZXRzIHRoZSBvcGFjaXR5IHRvIHplcm8uCi0gICAgYm9vbCBoYXNP
cGFjaXR5WmVyb0ZpbHRlciA9IG5vdEZvdW5kICE9IGZpbHRlcnMoKS5vcGVyYXRpb25zKCkuZmlu
ZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBvcGVyYXRpb24pIHsKKyAgICBib29sIGhhc09wYWNp
dHlaZXJvRmlsdGVyID0gbm90Rm91bmQgIT0gZmlsdGVycygpLm9wZXJhdGlvbnMoKS5maW5kSWYo
WyZdKGNvbnN0IGF1dG8mIG9wZXJhdGlvbikgewogICAgICAgICByZXR1cm4gb3BlcmF0aW9uLT50
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlOjpPUEFDSVRZICYmICFkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5h
bW91bnQoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNyAr
NDU1LDcgQEAgUGFzdGVib2FyZDo6RmlsZUNvbnRlbnRTdGF0ZSBQYXN0ZWJvYXJkOgogICAgICAg
ICAgICAgcmV0dXJuIEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0aHM7CiAgICAg
fQogCi0gICAgYXV0byByZXN1bHQgPSB0eXBlcy5maW5kTWF0Y2hpbmcoW10oY29uc3QgU3RyaW5n
JiB0eXBlKSB7CisgICAgYXV0byByZXN1bHQgPSB0eXBlcy5maW5kSWYoW10oY29uc3QgU3RyaW5n
JiB0eXBlKSB7CiAgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGUodHlwZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdCA9PSBub3RGb3Vu
ZCA/IEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1hZ2VEYXRhIDogRmlsZUNvbnRlbnRTdGF0
ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgJKHJldmlzaW9uIDI4NzU3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNTQsNyArMTU0LDcgQEAgaW5saW5lIGJvb2wgaGF2ZURldmljZXNDaGFuZ2Vk
KGNvbnN0IFZlYwogICAgICAgICBpZiAobmV3RGV2aWNlLnR5cGUoKSAhPSBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgbmV3RGV2aWNlLnR5cGUoKSAhPSBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgYXV0byBpbmRleCA9IG9sZERldmljZXMuZmluZE1hdGNoaW5nKFsmbmV3RGV2aWNlXShhdXRv
JiBvbGREZXZpY2UpIHsKKyAgICAgICAgYXV0byBpbmRleCA9IG9sZERldmljZXMuZmluZElmKFsm
bmV3RGV2aWNlXShhdXRvJiBvbGREZXZpY2UpIHsKICAgICAgICAgICAgIHJldHVybiBuZXdEZXZp
Y2UucGVyc2lzdGVudElkKCkgPT0gb2xkRGV2aWNlLnBlcnNpc3RlbnRJZCgpICYmIG5ld0Rldmlj
ZS5lbmFibGVkKCkgIT0gb2xkRGV2aWNlLmVuYWJsZWQoKTsKICAgICAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNv
bnN0cmFpbnRzLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA1LDcg
KzMwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX21pbikgewotICAg
ICAgICAgICAgYXV0byBpbmRleCA9IGRpc2NyZXRlQ2FwYWJpbGl0eVZhbHVlcy5maW5kTWF0Y2hp
bmcoWyZdKFZhbHVlVHlwZSB2YWx1ZSkgeyByZXR1cm4gbV9taW4udmFsdWUoKSA+PSB2YWx1ZTsg
fSk7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gZGlzY3JldGVDYXBhYmlsaXR5VmFsdWVzLmZp
bmRJZihbJl0oVmFsdWVUeXBlIHZhbHVlKSB7IHJldHVybiBtX21pbi52YWx1ZSgpID49IHZhbHVl
OyB9KTsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgewogICAgICAgICAgICAg
ICAgIG1pbiA9IHZhbHVlID0gZGlzY3JldGVDYXBhYmlsaXR5VmFsdWVzW2luZGV4XTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ck1lZGlhU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBXZWJLaXRNZWRpYVN0cmVhbU9ic2VydmVyOjpkaWRS
ZW1vdgogICAgIGF1dG8qIHByaXYgPSBlbGVtZW50LT5wcml2OwogCiAgICAgLy8gTG9va3VwIHRo
ZSBjb3JyZXNwb25kaW5nIEludGVybmFsU291cmNlIGFuZCB0YWtlIGl0IGZyb20gdGhlIHN0b3Jh
Z2UuCi0gICAgYXV0byBpbmRleCA9IHByaXYtPnNvdXJjZXMuZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBpdGVtKSB7CisgICAgYXV0byBpbmRleCA9IHByaXYtPnNvdXJjZXMuZmluZElmKFsmXShhdXRv
JiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLT50cmFjaygpLmlkKCkgPT0gdHJhY2suaWQo
KTsKICAgICB9KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxTb3VyY2U+IHNvdXJjZSA9
IFdURk1vdmUocHJpdi0+c291cmNlc1tpbmRleF0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVy
ZVNvdXJjZS5tbQkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjE5LDcgKzYxOSw3IEBAIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmdlbmVyYXRlUHJl
c2UKIAogICAgICAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gUEFMOjpDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zKGZvcm1hdC5mb3JtYXREZXNjcmlwdGlvbik7
CiAgICAgICAgIEludFNpemUgc2l6ZSA9IHsgZGltZW5zaW9ucy53aWR0aCwgZGltZW5zaW9ucy5o
ZWlnaHQgfTsKLSAgICAgICAgYXV0byBpbmRleCA9IHByZXNldHMuZmluZE1hdGNoaW5nKFsmc2l6
ZV0oYXV0byYgcHJlc2V0KSB7CisgICAgICAgIGF1dG8gaW5kZXggPSBwcmVzZXRzLmZpbmRJZihb
JnNpemVdKGF1dG8mIHByZXNldCkgewogICAgICAgICAgICAgcmV0dXJuIHNpemUgPT0gcHJlc2V0
LT5zaXplOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAu
Y3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTYwLDcgKzYxLDcgQEAgU3RyaW5nIEhU
VFBIZWFkZXJNYXA6OmdldChjb25zdCBTdHJpbmcmIAogCiBTdHJpbmcgSFRUUEhlYWRlck1hcDo6
Z2V0VW5jb21tb25IZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGF1dG8g
aW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikg
eworICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhl
YWRlcikgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIua2V5
LCBuYW1lKTsKICAgICB9KTsKICAgICByZXR1cm4gaW5kZXggIT0gbm90Rm91bmQgPyBtX3VuY29t
bW9uSGVhZGVyc1tpbmRleF0udmFsdWUgOiBTdHJpbmcoKTsKQEAgLTEwMCw3ICsxMDEsNyBAQCB2
b2lkIEhUVFBIZWFkZXJNYXA6OnNldChjb25zdCBTdHJpbmcmIG5hCiAKIHZvaWQgSFRUUEhlYWRl
ck1hcDo6c2V0VW5jb21tb25IZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVy
cy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCkBAIC0xMTYsNyArMTE3LDcgQEAgdm9pZCBIVFRQSGVhZGVyTWFwOjphZGQoY29u
c3QgU3RyaW5nJiBuYQogICAgICAgICBhZGQoaGVhZGVyTmFtZSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0
Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVh
ZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAgICB9KTsKICAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQpCkBAIC0xNTEsNyArMTUyLDcgQEAgYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250
YWlucyhjb25zdCBTdHJpbgogICAgIGlmIChmaW5kSFRUUEhlYWRlck5hbWUobmFtZSwgaGVhZGVy
TmFtZSkpCiAgICAgICAgIHJldHVybiBjb250YWlucyhoZWFkZXJOYW1lKTsKIAotICAgIHJldHVy
biBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAg
IHJldHVybiBtX3VuY29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAg
ICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAg
ICB9KSAhPSBub3RGb3VuZDsKIH0KQEAgLTE2OSw3ICsxNzAsNyBAQCBib29sIEhUVFBIZWFkZXJN
YXA6OnJlbW92ZShjb25zdCBTdHJpbmcmCiAKIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpnZXQoSFRU
UEhlYWRlck5hbWUgbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIGluZGV4ID0gbV9jb21tb25IZWFk
ZXJzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaGVhZGVyKSB7CisgICAgYXV0byBpbmRleCA9IG1f
Y29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAgICAgICByZXR1cm4g
aGVhZGVyLmtleSA9PSBuYW1lOwogICAgIH0pOwogICAgIHJldHVybiBpbmRleCAhPSBub3RGb3Vu
ZCA/IG1fY29tbW9uSGVhZGVyc1tpbmRleF0udmFsdWUgOiBTdHJpbmcoKTsKQEAgLTE3Nyw3ICsx
NzgsNyBAQCBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KEhUVFBIZWFkZXJOYW1lCiAKIHZvaWQg
SFRUUEhlYWRlck1hcDo6c2V0KEhUVFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZd
KGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZElm
KFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlci5rZXkgPT0gbmFtZTsK
ICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCkBAIC0xODgsNyArMTg5LDcgQEAg
dm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoSFRUUEhlYWRlck5hbWUgbgogCiBib29sIEhUVFBIZWFk
ZXJNYXA6OmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIHJl
dHVybiBtX2NvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAg
cmV0dXJuIGhlYWRlci5rZXkgPT0gbmFtZTsKICAgICB9KSAhPSBub3RGb3VuZDsKIH0KQEAgLTIw
Miw3ICsyMDMsNyBAQCBib29sIEhUVFBIZWFkZXJNYXA6OnJlbW92ZShIVFRQSGVhZGVyTmFtCiAK
IHZvaWQgSFRUUEhlYWRlck1hcDo6YWRkKEhUVFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVhZGVycy5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMu
ZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlci5rZXkgPT0g
bmFtZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0ZW5zaW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMu
Y3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVu
eHIvT3BlblhSRXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNjQsNyArNjUsNyBAQCB2b2lkIE9wZW5YUkV4dGVuc2lvbnM6OmxvYWRNZXRob2RzKFhySW5z
CiAKIGJvb2wgT3BlblhSRXh0ZW5zaW9uczo6aXNFeHRlbnNpb25TdXBwb3J0ZWQoY29uc3QgY2hh
ciogbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV9leHRlbnNpb25zLmZpbmRN
YXRjaGluZyhbbmFtZV0oYXV0byYgcHJvcGVydHkpIHsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9l
eHRlbnNpb25zLmZpbmRJZihbbmFtZV0oYXV0byYgcHJvcGVydHkpIHsKICAgICAgICAgcmV0dXJu
ICFzdHJjbXAocHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgbmFtZSk7CiAgICAgfSk7CiAgICAgcmV0
dXJuIHBvc2l0aW9uICE9IG5vdEZvdW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICAgIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTMxLDcgKzEzMSw3IEBAIHByb3RlY3RlZDoK
IAogaW5saW5lIGJvb2wgaXNTdXBwb3J0ZWRQbHVnaW4oY29uc3QgVmVjdG9yPFN1cHBvcnRlZFBs
dWdpbklkZW50aWZpZXI+JiBwbHVnaW5JZGVudGlmaWVycywgY29uc3QgVVJMJiBwYWdlVVJMLCBj
b25zdCBTdHJpbmcmIHBsdWdpbklkZW50aWZpZXIpCiB7Ci0gICAgcmV0dXJuIHBsdWdpbklkZW50
aWZpZXJzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mJiBwbHVnaW4pIHsKKyAgICByZXR1cm4gcGx1
Z2luSWRlbnRpZmllcnMuZmluZElmKFsmXSAoYXV0byYmIHBsdWdpbikgewogICAgICAgICByZXR1
cm4gcGFnZVVSTC5pc01hdGNoaW5nRG9tYWluKHBsdWdpbi5tYXRjaGluZ0RvbWFpbikgJiYgcGx1
Z2luLnBsdWdpbklkZW50aWZpZXIgPT0gcGx1Z2luSWRlbnRpZmllcjsKICAgICB9KSAhPSBub3RG
b3VuZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1G
YWN0b3J5UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVDRE1GYWN0b3J5UHJveHkuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNRmFjdG9yeVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIFJlbW90ZUNETUZhY3RvcnlQcm94eTo6flJlbW90ZUNE
TUZhY3RvcnkKIHN0YXRpYyBDRE1GYWN0b3J5KiBmYWN0b3J5Rm9yS2V5U3lzdGVtKGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKQogewogICAgIGF1dG8mIGZhY3RvcmllcyA9IENETUZhY3Rvcnk6OnJl
Z2lzdGVyZWRGYWN0b3JpZXMoKTsKLSAgICBhdXRvIGZvdW5kSW5kZXggPSBmYWN0b3JpZXMuZmlu
ZE1hdGNoaW5nKFsmXSAoYXV0byYgZmFjdG9yeSkgeyByZXR1cm4gZmFjdG9yeS0+c3VwcG9ydHNL
ZXlTeXN0ZW0oa2V5U3lzdGVtKTsgfSk7CisgICAgYXV0byBmb3VuZEluZGV4ID0gZmFjdG9yaWVz
LmZpbmRJZihbJl0gKGF1dG8mIGZhY3RvcnkpIHsgcmV0dXJuIGZhY3RvcnktPnN1cHBvcnRzS2V5
U3lzdGVtKGtleVN5c3RlbSk7IH0pOwogICAgIGlmIChmb3VuZEluZGV4ID09IG5vdEZvdW5kKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gZmFjdG9yaWVzW2ZvdW5kSW5kZXhd
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzMywxNCArMTEzMywxNCBAQCB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdG9wCiAKIHNpemVfdCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZmluZFJvb3ROZXR3b3JrQWN0aXZpdHkoUGFnZUlkZW50aWZpZXIgcGFn
ZUlEKQogewotICAgIHJldHVybiBtX25ldHdvcmtBY3Rpdml0eVRyYWNrZXJzLmZpbmRNYXRjaGlu
ZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeworICAgIHJldHVybiBtX25ldHdvcmtBY3Rpdml0eVRy
YWNrZXJzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gaXRl
bS5pc1Jvb3RBY3Rpdml0eSAmJiBpdGVtLnBhZ2VJRCA9PSBwYWdlSUQ7CiAgICAgfSk7CiB9CiAK
IHNpemVfdCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZE5ldHdvcmtBY3Rpdml0
eVRyYWNrZXIoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJJZGVudGlmaWVyIHJlc291cmNlSUQpCiB7
Ci0gICAgcmV0dXJuIG1fbmV0d29ya0FjdGl2aXR5VHJhY2tlcnMuZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIG1fbmV0d29ya0FjdGl2aXR5VHJhY2tlcnMu
ZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLnJlc291
cmNlSUQgPT0gcmVzb3VyY2VJRDsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
MSw3ICs0MTEsNyBAQCB2b2lkIENhY2hlOjpzdG9yZVJlY29yZHMoVmVjdG9yPFJlY29yZD4mCiAg
ICAgICAgIGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwocmVjb3JkLnJlcXVl
c3QudXJsKCkpOwogICAgICAgICBhdXRvIG1hdGNoaW5nUmVjb3JkcyA9IHF1ZXJ5Q2FjaGUoc2Ft
ZVVSTFJlY29yZHMsIHJlY29yZC5yZXF1ZXN0LCBvcHRpb25zKTsKIAotICAgICAgICBhdXRvIHBv
c2l0aW9uID0gIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkgPyBzYW1lVVJMUmVjb3Jkcy0+Zmlu
ZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIg
PT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5kOworICAgICAgICBhdXRvIHBvc2l0
aW9uID0gIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkgPyBzYW1lVVJMUmVjb3Jkcy0+ZmluZElm
KFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hp
bmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5kOwogCiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBu
b3RGb3VuZCkgewogICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29y
ZElkZW50aWZpZXI7CkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxS
ZWNvcmQ+JiYgcmVjb3JkcwogICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9IHJlY29yZHNG
cm9tVVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKICAgICAgICAgYXV0byBtYXRjaGluZ1JlY29y
ZHMgPSBxdWVyeUNhY2hlKHNhbWVVUkxSZWNvcmRzLCByZWNvcmQucmVxdWVzdCwgb3B0aW9ucyk7
CiAKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IChzYW1lVVJMUmVjb3JkcyAmJiAhbWF0Y2hpbmdS
ZWNvcmRzLmlzRW1wdHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXShjb25z
dCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNvcmRz
WzBdOyB9KSA6IG5vdEZvdW5kOworICAgICAgICBhdXRvIHBvc2l0aW9uID0gKHNhbWVVUkxSZWNv
cmRzICYmICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0eSgpKSA/IHNhbWVVUkxSZWNvcmRzLT5maW5k
SWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBtYXRj
aGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91bmQ7CiAKICAgICAgICAgc3BhY2VSZXF1aXJlZCAr
PSByZWNvcmQucmVzcG9uc2VCb2R5U2l6ZTsKICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZv
dW5kKSB7CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJl
c291cmNlUmVxdQogICAgIH0KIAogICAgIHJlY29yZHMtPnJlbW92ZUFsbE1hdGNoaW5nKFt0aGlz
LCAmcmVjb3JkSWRlbnRpZmllcnNdKGF1dG8mIGl0ZW0pIHsKLSAgICAgICAgYm9vbCBzaG91bGRS
ZW1vdmUgPSByZWNvcmRJZGVudGlmaWVycy5maW5kTWF0Y2hpbmcoWyZpdGVtXShhdXRvIGlkZW50
aWZpZXIpIHsgcmV0dXJuIGlkZW50aWZpZXIgPT0gaXRlbS5pZGVudGlmaWVyOyB9KSAhPSBub3RG
b3VuZDsKKyAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSByZWNvcmRJZGVudGlmaWVycy5maW5k
SWYoWyZpdGVtXShhdXRvIGlkZW50aWZpZXIpIHsgcmV0dXJuIGlkZW50aWZpZXIgPT0gaXRlbS5p
ZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZDsKICAgICAgICAgaWYgKHNob3VsZFJlbW92ZSkKICAg
ICAgICAgICAgIHRoaXMtPnJlbW92ZVJlY29yZEZyb21EaXNrKGl0ZW0pOwogICAgICAgICByZXR1
cm4gc2hvdWxkUmVtb3ZlOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIHZvaWQgQ2FjaGU6OnJlbW92ZUZy
b21SZWNvcmRMaXN0KGNvbnN0IFYKICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29yZHMu
dmFsdWVzKCkpIHsKICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzOwogICAgICAgICByZWNvcmRz
LnJlbW92ZUFsbE1hdGNoaW5nKFtjYWNoZSwgJnJlY29yZElkZW50aWZpZXJzXShjb25zdCBhdXRv
JiBpdGVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gbm90Rm91bmQgIT0gcmVjb3JkSWRlbnRpZmll
cnMuZmluZE1hdGNoaW5nKFtjYWNoZSwgJml0ZW1dKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZCAhPSByZWNvcmRJZGVudGlmaWVycy5maW5kSWYo
W2NhY2hlLCAmaXRlbV0oY29uc3QgYXV0byYgaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAg
IGlmIChpdGVtLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1vdmVSZWNvcmRGcm9tRGlz
ayhpdGVtKTsKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIENhY2hlOjp1cGRhdGVSZWNvcmRUb0Rp
c2soUmVjb3JkSW5mCiAgICAgICAgIGlmICghc2FtZVVSTFJlY29yZHMpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5maW5kTWF0
Y2hpbmcoWyZdIChjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0g
cmVjb3JkSWRlbnRpZmllcjsgfSk7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVj
b3Jkcy0+ZmluZElmKFsmXSAoY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlm
aWVyID09IHJlY29yZElkZW50aWZpZXI7IH0pOwogICAgICAgICBpZiAocG9zaXRpb24gPT0gbm90
Rm91bmQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGF1dG8mIHJlY29yZEluZm8gPSBz
YW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc5
LDE3ICsyNzksMTcgQEAgdm9pZCBDYWNoZXM6OmNsZWFyUGVuZGluZ1dyaXRpbmdDYWNoZXNUbwog
CiBDYWNoZSogQ2FjaGVzOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBhdXRvIHBv
c2l0aW9uID0gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9jYWNo
ZXMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLm5hbWUoKSA9PSBu
YW1lOyB9KTsKICAgICByZXR1cm4gKHBvc2l0aW9uICE9IG5vdEZvdW5kKSA/ICZtX2NhY2hlc1tw
b3NpdGlvbl0gOiBudWxscHRyOwogfQogCiBDYWNoZSogQ2FjaGVzOjpmaW5kKHVpbnQ2NF90IGlk
ZW50aWZpZXIpCiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRp
ZmllcjsgfSk7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRJZihbJl0oY29uc3Qg
YXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7
CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gJm1fY2FjaGVz
W3Bvc2l0aW9uXTsKIAotICAgIHBvc2l0aW9uID0gbV9yZW1vdmVkQ2FjaGVzLmZpbmRNYXRjaGlu
ZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRl
bnRpZmllcjsgfSk7CisgICAgcG9zaXRpb24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZElmKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVy
OyB9KTsKICAgICByZXR1cm4gKHBvc2l0aW9uICE9IG5vdEZvdW5kKSA/ICZtX3JlbW92ZWRDYWNo
ZXNbcG9zaXRpb25dIDogbnVsbHB0cjsKIH0KIApAQCAtMzQ2LDEwICszNDYsMTAgQEAgdm9pZCBD
YWNoZXM6OnJlbW92ZSh1aW50NjRfdCBpZGVudGlmaWVyLAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3Qg
YXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7
CisgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CiAKICAgICBp
ZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKLSAgICAgICAgQVNTRVJUKG1fcmVtb3ZlZENhY2hl
cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRp
ZmllcigpID09IGlkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kKTsKKyAgICAgICAgQVNTRVJUKG1f
cmVtb3ZlZENhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0u
aWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kKTsKICAgICAgICAgY2Fs
bGJhY2soQ2FjaGVJZGVudGlmaWVyT3BlcmF0aW9uUmVzdWx0IHsgMCwgZmFsc2UgfSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNjgsMTIgKzM2OCwxMiBAQCBib29sIENhY2hlczo6aGFz
QWN0aXZlQ2FjaGUoKSBjb25zdAogewogICAgIGlmIChtX3JlbW92ZWRDYWNoZXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFtd
KGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaXNBY3RpdmUoKTsgfSkgIT0gbm90Rm91
bmQ7CisgICAgcmV0dXJuIG1fY2FjaGVzLmZpbmRJZihbXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLmlzQWN0aXZlKCk7IH0pICE9IG5vdEZvdW5kOwogfQogCiB2b2lkIENhY2hlczo6
ZGlzcG9zZShDYWNoZSYgY2FjaGUpCiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fcmVtb3ZlZENh
Y2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRl
bnRpZmllcigpID09IGNhY2hlLmlkZW50aWZpZXIoKTsgfSk7CisgICAgYXV0byBwb3NpdGlvbiA9
IG1fcmVtb3ZlZENhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0uaWRlbnRpZmllcigpID09IGNhY2hlLmlkZW50aWZpZXIoKTsgfSk7CiAgICAgaWYgKHBvc2l0
aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChtX3N0b3JhZ2UpCiAgICAgICAgICAgICBt
X3N0b3JhZ2UtPnJlbW92ZShjYWNoZS5rZXlzKCksIFtdIHsgfSk7CkBAIC0zODEsNyArMzgxLDcg
QEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQogICAgICAgICBtX3JlbW92ZWRD
YWNoZXMucmVtb3ZlKHBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NF
UlQobV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBp
dGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVyKCk7IH0pICE9IG5vdEZvdW5kKTsK
KyAgICBBU1NFUlQobV9jYWNoZXMuZmluZElmKGZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUuaWRlbnRpZmllcigpOyB9KSAhPSBu
b3RGb3VuZCk7CiAKICAgICAvLyBXZSBjYW5ub3QgY2xlYXIgdGhlIG1lbW9yeSByZXByZXNlbnRh
dGlvbiBpbiBlcGhlbWVyYWwgc2Vzc2lvbnMgc2luY2Ugd2Ugd291bGQgbG9vc2UgYWxsIGRhdGEu
CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJl
YWRlci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI4
LDcgKzIyOCw3IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYUQKICAg
ICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJz
ZVRyYWNrc0xvY2sgfTsKLSAgICBhdXRvIHRyYWNrSW5kZXggPSBtX3RyYWNrUmVhZGVycy5maW5k
TWF0Y2hpbmcoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0byB0cmFja0luZGV4ID0gbV90cmFj
a1JlYWRlcnMuZmluZElmKFsmXShhdXRvJiB0cmFjaykgewogICAgICAgICByZXR1cm4gdHJhY2st
PnRyYWNrSUQoKSA9PSB0cmFja0lEOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5
LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC00OCw3ICs0OCw3IEBAIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
UHJveHk6OlVzZXJNZWQKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogc3RhdGljIGlubGluZSB2
b2lkIHNldERldmljZUFzRmlyc3QoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzLCBjb25z
dCBTdHJpbmcmIGRldmljZUlEKQogewotICAgIHNpemVfdCBpbmRleCA9IGRldmljZXMuZmluZE1h
dGNoaW5nKFsmZGV2aWNlSURdKGNvbnN0IGF1dG8mIGRldmljZSkgeworICAgIHNpemVfdCBpbmRl
eCA9IGRldmljZXMuZmluZElmKFsmZGV2aWNlSURdKGNvbnN0IGF1dG8mIGRldmljZSkgewogICAg
ICAgICByZXR1cm4gZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09IGRldmljZUlEOwogICAgIH0pOwog
ICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAkocmV2aXNpb24gMjg3NTc3
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2MzAsNyArNDYzMCw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3
X3JlbW92ZV9mcmFtZV9kaXNwbGEKICAgICB9OwogCiAgICAgaWYgKHdlYlZpZXctPnByaXYtPmlu
RnJhbWVEaXNwbGF5ZWQpIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHdlYlZpZXctPnByaXYtPmZy
YW1lRGlzcGxheWVkQ2FsbGJhY2tzLmZpbmRNYXRjaGluZyhtYXRjaEZ1bmN0aW9uKTsKKyAgICAg
ICAgYXV0byBpbmRleCA9IHdlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVkQ2FsbGJhY2tzLmZp
bmRJZihtYXRjaEZ1bmN0aW9uKTsKICAgICAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQogICAg
ICAgICAgICAgd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3NUb1JlbW92ZS5h
ZGQoaWQpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
TW9kZWxFbGVtZW50Q29udHJvbGxlckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL01vZGVsRWxlbWVudENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNp
b24gMjg3NTc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTW9kZWxFbGVtZW50
Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDEzIEBAIHZv
aWQgTW9kZWxFbGVtZW50Q29udHJvbGxlcjo6aGFuZGxlTW91c2UKIAogI2lmIEVOQUJMRShBUktJ
VF9JTkxJTkVfUFJFVklFVykKIAorI3VuZGVmIEVOQUJMRV9BUktJVF9JTkxJTkVfUFJFVklFV19D
QU1FUkFfVFJBTlNGT1JNIC8vIG1sYW0gSEFDSworI3VuZGVmIEVOQUJMRV9BUktJVF9JTkxJTkVf
UFJFVklFV19BTklNQVRJT05TX0NPTlRST0wgLy8gbWxhbSBIQUNLCisjdW5kZWYgRU5BQkxFX0FS
S0lUX0lOTElORV9QUkVWSUVXX0FVRElPX0NPTlRST0wgLy8gbWxhbSBIQUNLCisjdW5kZWYgSEFW
RV9BU1ZfSU5MSU5FX1BSRVZJRVdfQ0FNRVJBX0NPTlRST0wgLy8gbWxhbSBIQUNLCisjdW5kZWYg
SEFWRV9BU1ZfSU5MSU5FX1BSRVZJRVdfQU5JTUFUSU9OX0NPTlRST0wgLy8gbWxhbSBIQUNLCisj
dW5kZWYgSEFWRV9BU1ZfSU5MSU5FX1BSRVZJRVdfQVVESU9fQ09OVFJPTCAvLyBtbGFtIEhBQ0sK
Kwogc3RhdGljIGJvb2wgcHJldmlld0hhc0NhbWVyYVN1cHBvcnQoQVNWSW5saW5lUHJldmlldyAq
cHJldmlldykKIHsKICNpZiBFTkFCTEUoQVJLSVRfSU5MSU5FX1BSRVZJRVdfQ0FNRVJBX1RSQU5T
Rk9STSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQ
cm94eUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02ODIsNyArNjgyLDcgQEAgc3RkOjpvcHRpb25hbDxEYXRhT3duZXJUeXBlPiBXZWJQ
YXN0ZWJvYQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9y
bWF0aW9uOjpncmFudEFjY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFBhc3RlYm9hcmRB
Y2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgYXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRN
YXRjaGluZyhbJl0oYXV0byYgcHJvY2Vzc0FuZFR5cGUpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXgg
PSBwcm9jZXNzZXMuZmluZElmKFsmXShhdXRvJiBwcm9jZXNzQW5kVHlwZSkgewogICAgICAgICBy
ZXR1cm4gcHJvY2Vzc0FuZFR5cGUuZmlyc3QgPT0gJnByb2Nlc3M7CiAgICAgfSk7CiAKQEAgLTcw
OCw3ICs3MDgsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2VzCiAK
IHN0ZDo6b3B0aW9uYWw8V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzVHlwZT4g
V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRpb246OmFjY2Vzc1R5
cGUoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKSBjb25zdAogewotICAgIGF1dG8gbWF0Y2hJbmRl
eCA9IHByb2Nlc3Nlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7Cisg
ICAgYXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRJZihbJl0oYXV0byYgcHJvY2Vzc0Fu
ZFR5cGUpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3NBbmRUeXBlLmZpcnN0ID09ICZwcm9jZXNz
OwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMDUsNyArMjA1LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFs
KAogICAgIC8vIFN0ZXAgOCBpcyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJy
b3IgZXhjZXB0aW9uIHJlY2VpdmVSZXNwb25kcy4KICAgICAvLyBTa2lwIFN0ZXAgMTAgYXMgY291
bnRlciBpcyBjb25zdGFudGx5IDAuCiAgICAgLy8gU3RlcCAyLgotICAgIGlmIChub3RGb3VuZCA9
PSBjcmVhdGlvbk9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcy5maW5kTWF0Y2hpbmcoW10gKGF1dG8m
IHB1YktleUNyZWRQYXJhbSkgeworICAgIGlmIChub3RGb3VuZCA9PSBjcmVhdGlvbk9wdGlvbnMu
cHViS2V5Q3JlZFBhcmFtcy5maW5kSWYoW10gKGF1dG8mIHB1YktleUNyZWRQYXJhbSkgewogICAg
ICAgICByZXR1cm4gcHViS2V5Q3JlZFBhcmFtLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSAmJiBwdWJLZXlDcmVkUGFyYW0uYWxnID09IENPU0U6OkVTMjU2OwogICAg
IH0pKSB7CiAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RTdXBwb3J0ZWRFcnJvciwgIlRo
ZSBwbGF0Zm9ybSBhdHRhY2hlZCBhdXRoZW50aWNhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcHJv
dmlkZWQgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuIl9zIH0pOwpAQCAtMjIyLDcgKzIy
Miw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgKIAogICAgIGF1
dG8gZXhjbHVkZUNyZWRlbnRpYWxJZHMgPSBwcm9kdWNlSGFzaFNldChjcmVhdGlvbk9wdGlvbnMu
ZXhjbHVkZUNyZWRlbnRpYWxzKTsKICAgICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFsSWRzLmlzRW1w
dHkoKSkgewotICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZp
bmRNYXRjaGluZyhbJmV4Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewor
ICAgICAgICBpZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRJZihbJmV4
Y2x1ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0
byogcmF3SWQgPSBjcmVkZW50aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lk
KTsKICAgICAgICAgICAgIHJldHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNl
NjRFbmNvZGVUb1N0cmluZyhyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CkBA
IC01MjksNyArNTI5LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigp
CiAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNo
aW5nKFtleHBlY3RlZFJlc3BvbnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZElmKFtleHBl
Y3RlZFJlc3BvbnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgewogICAgICAgICAgICAg
ICAgIHJldHVybiByZXNwb25zZS5wdHIoKSA9PSBleHBlY3RlZFJlc3BvbnNlOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG5vdEZvdW5kKQpAQCAtNjg2LDcgKzY4
Niw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpkZWxldGVEdXBsaWNhdGUKICAgICB1c2lu
ZyBuYW1lc3BhY2UgTG9jYWxBdXRoZW50aWNhdG9ySW50ZXJuYWw7CiAKICAgICBhdXRvJiBjcmVh
dGlvbk9wdGlvbnMgPSBzdGQ6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
PihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpOwotICAgIG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5k
TWF0Y2hpbmcoW2NyZWF0aW9uT3B0aW9uc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKKyAgICBtX2V4
aXN0aW5nQ3JlZGVudGlhbHMuZmluZElmKFtjcmVhdGlvbk9wdGlvbnNdIChhdXRvJiBjcmVkZW50
aWFsKSB7CiAgICAgICAgIGF1dG8qIHVzZXJIYW5kbGUgPSBjcmVkZW50aWFsLT51c2VySGFuZGxl
KCk7CiAgICAgICAgIEFTU0VSVCh1c2VySGFuZGxlKTsKICAgICAgICAgaWYgKHVzZXJIYW5kbGUt
PmJ5dGVMZW5ndGgoKSAhPSBjcmVhdGlvbk9wdGlvbnMudXNlci5pZC5sZW5ndGgoKSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhl
bnRpY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCShyZXZpc2lvbiAyODc1Nzcp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBB
dXRoZW50aWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lk
IEN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBCiAgICAgICAgICAgICAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtX2Fzc2VydGlvblJlc3BvbnNlcy5maW5kTWF0Y2hpbmcoW2V4cGVjdGVkUmVzcG9uc2UgPSBy
ZXNwb25zZV0gKGF1dG8mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtX2Fzc2VydGlvblJlc3BvbnNlcy5maW5kSWYoW2V4cGVjdGVkUmVzcG9uc2UgPSByZXNwb25z
ZV0gKGF1dG8mIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25z
ZS5wdHIoKSA9PSBleHBlY3RlZFJlc3BvbnNlOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gbm90Rm91bmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0JKHJl
dmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpzZXREZWZhdWwKIAogVUlUYXJnZXRlZERyYWdQcmV2aWV3
ICpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRlZmF1bHREcm9wUHJldmlldyhVSURyYWdJdGVt
ICppdGVtKSBjb25zdAogewotICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZGVmYXVsdERyb3BQcmV2
aWV3cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtQW5kUHJldmlldykgeworICAgIGF1dG8g
bWF0Y2hJbmRleCA9IG1fZGVmYXVsdERyb3BQcmV2aWV3cy5maW5kSWYoWyZdIChhdXRvJiBpdGVt
QW5kUHJldmlldykgewogICAgICAgICByZXR1cm4gaXRlbUFuZFByZXZpZXcuaXRlbSA9PSBpdGVt
OwogICAgIH0pOwogICAgIHJldHVybiBtYXRjaEluZGV4ID09IG5vdEZvdW5kID8gbmlsIDogbV9k
ZWZhdWx0RHJvcFByZXZpZXdzW21hdGNoSW5kZXhdLnByZXZpZXcuZ2V0KCk7CkBAIC0yMDYsNyAr
MjA2LDcgQEAgVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpEcmFnRHJvcEludGVyYWN0aQogCiBCbG9j
a1B0cjx2b2lkKFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqKT4gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlOjpkcm9wUHJldmlld1Byb3ZpZGVyKFVJRHJhZ0l0ZW0gKml0ZW0pCiB7Ci0gICAgYXV0byBt
YXRjaEluZGV4ID0gbV9kZWxheWVkSXRlbVByZXZpZXdQcm92aWRlcnMuZmluZE1hdGNoaW5nKFsm
XSAoYXV0byYgaXRlbUFuZFByb3ZpZGVyKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gbV9kZWxh
eWVkSXRlbVByZXZpZXdQcm92aWRlcnMuZmluZElmKFsmXSAoYXV0byYgaXRlbUFuZFByb3ZpZGVy
KSB7CiAgICAgICAgIHJldHVybiBpdGVtQW5kUHJvdmlkZXIuaXRlbSA9PSBpdGVtOwogICAgIH0p
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAJ
KHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5
TGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBEaXNwbGF5
TGluazo6c2V0UHJlZmVycmVkRnJhbWVzUGVyUwogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
JiBjb25uZWN0aW9uSW5mbyA9IGl0LT52YWx1ZTsKLSAgICBhdXRvIGluZGV4ID0gY29ubmVjdGlv
bkluZm8ub2JzZXJ2ZXJzLmZpbmRNYXRjaGluZyhbb2JzZXJ2ZXJJRF0oY29uc3QgYXV0byYgb2Jz
ZXJ2ZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gY29ubmVjdGlvbkluZm8ub2JzZXJ2ZXJzLmZpbmRJ
Zihbb2JzZXJ2ZXJJRF0oY29uc3QgYXV0byYgb2JzZXJ2ZXIpIHsKICAgICAgICAgcmV0dXJuIG9i
c2VydmVyLm9ic2VydmVySUQgPT0gb2JzZXJ2ZXJJRDsKICAgICB9KTsKIApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMu
bW0JKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJD
b250ZXh0TWVudVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIwLDcgKzUyMCw3IEBA
IHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Z2V0Q29udGV4dE0KICAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IHF1aWNrTG9va0l0ZW1Ub0luc2VydElmTmVlZGVk
OwogCiAjaWYgRU5BQkxFKElNQUdFX0FOQUxZU0lTKQotICAgIGF1dG8gaW5kZXhPZlF1aWNrTG9v
a0l0ZW0gPSBmaWx0ZXJlZEl0ZW1zLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGl0ZW0pIHsKKyAg
ICBhdXRvIGluZGV4T2ZRdWlja0xvb2tJdGVtID0gZmlsdGVyZWRJdGVtcy5maW5kSWYoWyZdIChh
dXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLmFjdGlvbigpID09IFdlYkNvcmU6OkNv
bnRleHRNZW51SXRlbVRhZ1F1aWNrTG9va0ltYWdlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1
Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0JKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzA3LDcgKzMwNyw3IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVy
CiAKIHN0YXRpYyBCT09MIHNob3VsZFNob3dEaXZpZGVyc0JldHdlZW5DZWxscyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6RGF0YUxpc3RTdWdnZXN0aW9uPiYgc3VnZ2VzdGlvbnMpCiB7Ci0gICAgcmV0
dXJuIG5vdEZvdW5kICE9IHN1Z2dlc3Rpb25zLmZpbmRNYXRjaGluZyhbXShhdXRvJiBzdWdnZXN0
aW9uKSB7CisgICAgcmV0dXJuIG5vdEZvdW5kICE9IHN1Z2dlc3Rpb25zLmZpbmRJZihbXShhdXRv
JiBzdWdnZXN0aW9uKSB7CiAgICAgICAgIHJldHVybiAhc3VnZ2VzdGlvbi5sYWJlbC5pc0VtcHR5
KCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTgzLDkgKzE5ODMsOSBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgY2hlY2tEb2N1bWVudHNDYXB0dXJlCiAgICAgfSk7CiAKICAgICBpZiAoaXNDYXB0
dXJpbmdBdWRpbykKLSAgICAgICAgQVNTRVJUKGV4dGVuc2lvbklEcy5maW5kTWF0Y2hpbmcoW10o
YXV0byYgaWQpIHsgcmV0dXJuIGlkLmNvbnRhaW5zKCJtaWNyb3Bob25lIik7IH0pID09IG5vdEZv
dW5kKTsKKyAgICAgICAgQVNTRVJUKGV4dGVuc2lvbklEcy5maW5kSWYoW10oYXV0byYgaWQpIHsg
cmV0dXJuIGlkLmNvbnRhaW5zKCJtaWNyb3Bob25lIik7IH0pID09IG5vdEZvdW5kKTsKICAgICBp
ZiAoaXNDYXB0dXJpbmdWaWRlbykKLSAgICAgICAgQVNTRVJUKGV4dGVuc2lvbklEcy5maW5kTWF0
Y2hpbmcoW10oYXV0byYgaWQpIHsgcmV0dXJuIGlkLmNvbnRhaW5zKCJjYW1lcmEiKTsgfSkgPT0g
bm90Rm91bmQpOworICAgICAgICBBU1NFUlQoZXh0ZW5zaW9uSURzLmZpbmRJZihbXShhdXRvJiBp
ZCkgeyByZXR1cm4gaWQuY29udGFpbnMoImNhbWVyYSIpOyB9KSA9PSBub3RGb3VuZCk7CiAjZW5k
aWYgLy8gQVNTRVJUX0VOQUJMRUQKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5
OSw3ICs2OTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmNvbXB1dGVFCiAK
ICAgICBhdXRvIGVsZW1lbnRJblZpZXdDZW50ZXJQb2ludCA9IHZpc2libGVQb3J0aW9uT2ZFbGVt
ZW50UmVjdC5jZW50ZXIoKTsKICAgICBhdXRvIGVsZW1lbnRMaXN0ID0gY29udGFpbmVyRWxlbWVu
dC0+dHJlZVNjb3BlKCkuZWxlbWVudHNGcm9tUG9pbnQoZWxlbWVudEluVmlld0NlbnRlclBvaW50
KTsKLSAgICBhdXRvIGluZGV4ID0gZWxlbWVudExpc3QuZmluZE1hdGNoaW5nKFtjb250YWluZXJF
bGVtZW50XSAoYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5nZXQoKSA9PSBjb250YWluZXJFbGVt
ZW50OyB9KTsKKyAgICBhdXRvIGluZGV4ID0gZWxlbWVudExpc3QuZmluZElmKFtjb250YWluZXJF
bGVtZW50XSAoYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5nZXQoKSA9PSBjb250YWluZXJFbGVt
ZW50OyB9KTsKICAgICBpZiAoZWxlbWVudExpc3QuaXNFbXB0eSgpIHx8IGluZGV4ID09IG5vdEZv
dW5kKSB7CiAgICAgICAgIC8vIFdlIGhpdCB0aGlzIGNhc2UgaWYgdGhlIGVsZW1lbnQgaXMgdmlz
aWJpbGl0eTpoaWRkZW4gb3Igb3BhY2l0eTowLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgbm90IGhp
dCB0ZXN0CiAgICAgICAgIC8vIGF0IHRoZSBjYWxjdWxhdGVkIElWQ1AuIEFuIGVsZW1lbnQgaXMg
dGVjaG5pY2FsbHkgbm90ICJpbiB2aWV3IiBpZiBpdCBpcyBub3Qgd2l0aGluIGl0cyBvd24gcGFp
bnQvaGl0IHRlc3QgdHJlZSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTYsNyArMzU2
LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogdm9pZCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlckludGVybmFs
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0TWVz
c2FnZUhhbmRsZXJJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgYXV0byYg
bWVzc2FnZUhhbmRsZXJzSW5Xb3JsZCA9IG1fdXNlck1lc3NhZ2VIYW5kbGVycy5lbnN1cmUoJndv
cmxkLCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWZQdHI8V2ViVXNl
ck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5Pj4+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVl
OwotICAgIGlmIChtZXNzYWdlSGFuZGxlcnNJbldvcmxkLmZpbmRNYXRjaGluZyhbJl0oYXV0byYg
cGFpcikgeyByZXR1cm4gcGFpci5maXJzdCA9PSAgdXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRl
bnRpZmllcjsgfSkgIT0gbm90Rm91bmQpCisgICAgaWYgKG1lc3NhZ2VIYW5kbGVyc0luV29ybGQu
ZmluZElmKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZpcnN0ID09ICB1c2VyU2NyaXB0
TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJu
OwogICAgIG1lc3NhZ2VIYW5kbGVyc0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZpZXIsIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2Ny
aXB0b3JQcm94eTo6Y3JlYXRlKHRoaXMsIG5hbWUsIHdvcmxkLCB1c2VyU2NyaXB0TWVzc2FnZUhh
bmRsZXJJZGVudGlmaWVyKSkpOwogfQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2MKICAgICB9CiAKICAgICBhdXRvJiBzY3JpcHRzSW5X
b3JsZCA9IG1fdXNlclNjcmlwdHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiwgV2ViQ29yZTo6VXNlclNjcmlwdD4+KCk7
IH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAodXNlclNjcmlwdElkZW50aWZpZXIgJiYgc2Ny
aXB0c0luV29ybGQuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZp
cnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKKyAgICBpZiAodXNl
clNjcmlwdElkZW50aWZpZXIgJiYgc2NyaXB0c0luV29ybGQuZmluZElmKFsmXShhdXRvJiBwYWly
KSB7IHJldHVybiBwYWlyLmZpcnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyOyB9KSAhPSBub3RG
b3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2NyaXB0c0luV29ybGQuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKSk7CkBA
IC00NzUsNyArNDc1LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVz
ZQogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50ZXJu
YWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+JiB1c2VyU3R5bGVTaGVldElkZW50aWZpZXIsIFVzZXJTdHlsZVNoZWV0JiYgdXNl
clN0eWxlU2hlZXQpCiB7CiAgICAgYXV0byYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5
bGVTaGVldHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PigpOyB9KS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciAmJiBzdHlsZVNo
ZWV0c0luV29ybGQuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZp
cnN0ID09IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcjsgfSkgIT0gbm90Rm91bmQpCisgICAgaWYg
KHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciAmJiBzdHlsZVNoZWV0c0luV29ybGQuZmluZElmKFsm
XShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZpcnN0ID09IHVzZXJTdHlsZVNoZWV0SWRlbnRp
ZmllcjsgfSkgIT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvIHBh
Z2VJRCA9IHVzZXJTdHlsZVNoZWV0LnBhZ2VJRCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKQEAgLTc1Njgs
NyArNzU2OCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlvbihFbGUKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZWxlbWVudHNQ
ZW5kaW5nVGV4dFJlY29nbml0aW9uLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVsZW1lbnRBbmRD
b21wbGV0aW9uSGFuZGxlcnMpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2VsZW1lbnRzUGVu
ZGluZ1RleHRSZWNvZ25pdGlvbi5maW5kSWYoWyZdIChhdXRvJiBlbGVtZW50QW5kQ29tcGxldGlv
bkhhbmRsZXJzKSB7CiAgICAgICAgIHJldHVybiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRsZXJz
LmZpcnN0ID09ICZlbGVtZW50OwogICAgIH0pOwogCkBAIC03NjMwLDcgKzc2MzAsNyBAQCB2b2lk
IFdlYlBhZ2U6OnJlcXVlc3RUZXh0UmVjb2duaXRpb24oRWxlCiAgICAgICAgIGF1dG8mIGh0bWxF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpwcm90ZWN0ZWRFbGVtZW50KTsKICAgICAg
ICAgSW1hZ2VPdmVybGF5Ojp1cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGh0bWxFbGVt
ZW50LCByZXN1bHQpOwogCi0gICAgICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb3RlY3RlZFBhZ2Ut
Pm1fZWxlbWVudHNQZW5kaW5nVGV4dFJlY29nbml0aW9uLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8m
IGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMpIHsKKyAgICAgICAgYXV0byBtYXRjaEluZGV4
ID0gcHJvdGVjdGVkUGFnZS0+bV9lbGVtZW50c1BlbmRpbmdUZXh0UmVjb2duaXRpb24uZmluZElm
KFsmXSAoYXV0byYgZWxlbWVudEFuZENvbXBsZXRpb25IYW5kbGVycykgewogICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMuZmlyc3QgPT0gJmh0bWxFbGVtZW50
OwogICAgICAgICB9KTsKIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRml4
ZWRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0ZpeGVkVmVjdG9yLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvRml4ZWRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDYgKzc4LDQ2IEBA
IFRFU1QoV1RGX0ZpeGVkVmVjdG9yLCBPdmVybG9hZGVkT3BlcmF0b3IKICAgICB2ZWN0b3JbMF0g
PSBUZXN0KCk7CiB9CiAKK1RFU1QoV1RGX0ZpeGVkVmVjdG9yLCBDbGVhckNvbnRhaW5zQW5kRmlu
ZCkKK3sKKyAgICBGaXhlZFZlY3RvcjxpbnQ+IHY7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5
KCkpOworICAgIHYuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisKKyAg
ICB2ID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgICAgRVhQRUNUX0VRKDEw
VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDEpKTsKKyAgICBFWFBF
Q1RfRVEobm90Rm91bmQsIHYuZmluZCgxKSk7CisgICAgdi5jbGVhcigpOworICAgIEVYUEVDVF9U
UlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5jb250YWlucygxKSk7CisgICAg
RVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoMSkpOworCisgICAgdiA9IHsgMywgMSwgMiwgMSwg
MSwgNCwgMiwgMiwgMSwgMSwgMywgNSB9OworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRSh2LmNvbnRhaW5zKDMpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmNvbnRh
aW5zKDQpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uodi5jb250YWlucyg2KSk7CisgICAgRVhQRUNUX0VRKDBVLCB2LmZpbmQoMykpOworICAgIEVY
UEVDVF9FUSg1VSwgdi5maW5kKDQpKTsKKyAgICBFWFBFQ1RfRVEoMTFVLCB2LmZpbmQoNSkpOwor
ICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDYpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09
IEZpeGVkVmVjdG9yPGludD4oeyAzLCAxLCAyLCAxLCAxLCA0LCAyLCAyLCAxLCAxLCAzLCA1IH0p
KTsKKyAgICB2LmNsZWFyKCk7CisgICAgRVhQRUNUX0VRKDBVLCB2LnNpemUoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHYuY29udGFpbnMoMykpOworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDQp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYu
Y29udGFpbnMoNikpOworICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDMpKTsKKyAgICBF
WFBFQ1RfRVEobm90Rm91bmQsIHYuZmluZCg0KSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2
LmZpbmQoNSkpOworICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDYpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2ID09IEZpeGVkVmVjdG9yPGludD4oeyB9KSk7Cit9CisKIFRFU1QoV1RGX0ZpeGVk
VmVjdG9yLCBDb3B5KQogewogICAgIEZpeGVkVmVjdG9yPHVuc2lnbmVkPiB2ZWMxKDMpOwpAQCAt
MTE3LDYgKzE1NywyMSBAQCBURVNUKFdURl9GaXhlZFZlY3RvciwgQ29weUFzc2lnbikKICAgICBF
WFBFQ1RfRVEoMlUsIHZlYzJbMl0pOwogfQogCitURVNUKFdURl9GaXhlZFZlY3RvciwgRmluZE1h
dGNoaW5nKQoreworICAgIEZpeGVkVmVjdG9yPGludD4gdjsKKyAgICBFWFBFQ1RfVFJVRSh2LmZp
bmRJZihbXShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUodi5maW5kSWYoW10oaW50KSB7IHJldHVybiB0cnVlOyB9KSA9PSBub3RGb3VuZCk7CisK
KyAgICB2ID0geyAzLCAxLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxLCAzIH07CisgICAgRVhQ
RUNUX1RSVUUodi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDM7IH0pID09
IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIGZh
bHNlOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRJZihbXShpbnQp
IHsgcmV0dXJuIHRydWU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMFUsIHYuZmluZElmKFtdKGludCB2
YWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0gMzsgfSkpOworICAgIEVYUEVDVF9FUSgxVSwgdi5maW5k
SWYoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IDM7IH0pKTsKKyAgICBFWFBFQ1RfRVEo
MlUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOworfQor
CiBURVNUKFdURl9GaXhlZFZlY3RvciwgTW92ZSkKIHsKICAgICBGaXhlZFZlY3Rvcjx1bnNpZ25l
ZD4gdmVjMSgzKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNw
cAkocmV2aXNpb24gMjg3NTc3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02ODUsMTkgKzY4NSw1OSBAQCBURVNUKFdURl9WZWN0b3Is
IFJlbW92ZUFsbCkKICAgICBFWFBFQ1RfVFJVRSh2MiA9PSB2RXhwZWN0ZWQpOwogfQogCitURVNU
KFdURl9WZWN0b3IsIENsZWFyQ29udGFpbnNBbmRGaW5kKQoreworICAgIFZlY3RvcjxpbnQ+IHY7
CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworICAgIHYuY2xlYXIoKTsKKyAgICBFWFBF
Q1RfVFJVRSh2LmlzRW1wdHkoKSk7CisKKyAgICB2ID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwIH07CisgICAgRVhQRUNUX0VRKDEwVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxT
RSh2LmNvbnRhaW5zKDEpKTsKKyAgICBFWFBFQ1RfRVEobm90Rm91bmQsIHYuZmluZCgxKSk7Cisg
ICAgdi5jbGVhcigpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
RkFMU0Uodi5jb250YWlucygxKSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoMSkp
OworCisgICAgdiA9IHsgMywgMSwgMiwgMSwgMSwgNCwgMiwgMiwgMSwgMSwgMywgNSB9OworICAg
IEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmNvbnRhaW5zKDMp
KTsKKyAgICBFWFBFQ1RfVFJVRSh2LmNvbnRhaW5zKDQpKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmNv
bnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5jb250YWlucyg2KSk7CisgICAgRVhQRUNU
X0VRKDBVLCB2LmZpbmQoMykpOworICAgIEVYUEVDVF9FUSg1VSwgdi5maW5kKDQpKTsKKyAgICBF
WFBFQ1RfRVEoMTFVLCB2LmZpbmQoNSkpOworICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5k
KDYpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsgMywgMSwgMiwgMSwgMSwg
NCwgMiwgMiwgMSwgMSwgMywgNSB9KSk7CisgICAgdi5jbGVhcigpOworICAgIEVYUEVDVF9FUSgw
VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDMpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uodi5jb250YWlucyg0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYuY29udGFpbnMoNSkp
OworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDYpKTsKKyAgICBFWFBFQ1RfRVEobm90Rm91
bmQsIHYuZmluZCgzKSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoNCkpOworICAg
IEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDUpKTsKKyAgICBFWFBFQ1RfRVEobm90Rm91bmQs
IHYuZmluZCg2KSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7IH0pKTsKK30K
KwogVEVTVChXVEZfVmVjdG9yLCBGaW5kTWF0Y2hpbmcpCiB7CiAgICAgVmVjdG9yPGludD4gdjsK
LSAgICBFWFBFQ1RfVFJVRSh2LmZpbmRNYXRjaGluZyhbXShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9
KSA9PSBub3RGb3VuZCk7Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hpbmcoW10oaW50KSB7
IHJldHVybiB0cnVlOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYo
W10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVF
KHYuZmluZElmKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkgPT0gbm90Rm91bmQpOwogCiAgICAg
diA9IHszLCAxLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxLCAzfTsKLSAgICBFWFBFQ1RfVFJV
RSh2LmZpbmRNYXRjaGluZyhbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMzsgfSkgPT0g
bm90Rm91bmQpOwotICAgIEVYUEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1
cm4gZmFsc2U7IH0pID09IG5vdEZvdW5kKTsKLSAgICBFWFBFQ1RfRVEoMFUsIHYuZmluZE1hdGNo
aW5nKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkpOwotICAgIEVYUEVDVF9FUSgwVSwgdi5maW5k
TWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8PSAzOyB9KSk7Ci0gICAgRVhQ
RUNUX0VRKDFVLCB2LmZpbmRNYXRjaGluZyhbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwg
MzsgfSkpOwotICAgIEVYUEVDVF9FUSgyVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA9PSAyOyB9KSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50
IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDM7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7Cisg
ICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pKTsKKyAg
ICBFWFBFQ1RfRVEoMFUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0g
MzsgfSkpOworICAgIEVYUEVDVF9FUSgxVSwgdi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA8IDM7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMlUsIHYuZmluZElmKFtdKGludCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOwogfQogCiBURVNUKFdURl9WZWN0b3IsIFJlbW92
ZUZpcnN0TWF0Y2hpbmcpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL01lZGlhTG9hZGluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbQkocmV2aXNpb24gMjg3NTc3KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiBzdGF0aWMg
U3RyaW5nIHBhcnNlVXNlckFnZW50KGNvbnN0IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCkKIHsKICAg
ICBhdXRvIGhlYWRlcnMgPSBTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3QuZGF0YSgpLCByZXF1ZXN0
LnNpemUoKSkuc3BsaXQoIlxyXG4iKTsKLSAgICBhdXRvIGluZGV4ID0gaGVhZGVycy5maW5kTWF0
Y2hpbmcoW10gKGF1dG8mIGhlYWRlcikgeyByZXR1cm4gaGVhZGVyLnN0YXJ0c1dpdGgoIlVzZXIt
QWdlbnQ6Iik7IH0pOworICAgIGF1dG8gaW5kZXggPSBoZWFkZXJzLmZpbmRJZihbXSAoYXV0byYg
aGVhZGVyKSB7IHJldHVybiBoZWFkZXIuc3RhcnRzV2l0aCgiVXNlci1BZ2VudDoiKTsgfSk7CiAg
ICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gaGVhZGVyc1tpbmRleF07
CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNjIsNyArMzYy
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SXNNZWRpYUtleVN5c3RlbQogdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y2xvc2VPdGhlclBhZ2UoV0tQYWdlUmVmIHBhZ2UsIFBsYXRmb3JtV2ViVmll
dyogdmlldykKIHsKICAgICBXS1BhZ2VDbG9zZShwYWdlKTsKLSAgICBhdXRvIGluZGV4ID0gbV9h
dXhpbGlhcnlXZWJWaWV3cy5maW5kTWF0Y2hpbmcoW3ZpZXddKGF1dG8mIGF1eGlsaWFyeVdlYlZp
ZXcpIHsgcmV0dXJuIGF1eGlsaWFyeVdlYlZpZXcucHRyKCkgPT0gdmlldzsgfSk7CisgICAgYXV0
byBpbmRleCA9IG1fYXV4aWxpYXJ5V2ViVmlld3MuZmluZElmKFt2aWV3XShhdXRvJiBhdXhpbGlh
cnlXZWJWaWV3KSB7IHJldHVybiBhdXhpbGlhcnlXZWJWaWV3LnB0cigpID09IHZpZXc7IH0pOwog
ICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgbV9hdXhpbGlhcnlXZWJWaWV3cy5y
ZW1vdmUoaW5kZXgpOwogfQo=
</data>
<flag name="commit-queue"
          id="474195"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448354</attachid>
            <date>2022-01-04 17:42:22 -0800</date>
            <delta_ts>2022-01-24 13:58:07 -0800</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-234864.patch</filename>
            <type>text/plain</type>
            <size>115299</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0qICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hA
dXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtNTM0OSw3
ICs1MzQ5LDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlQYXR0ZXJuTm9kZTo6ZW1pdERpcmVjdAogICAg
IGlmICghcmhzLT5pc1NpbXBsZUFycmF5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKG1fdGFyZ2V0UGF0dGVybnMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgdGFyZ2V0KSB7
IHJldHVybiB0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50OyB9
KSAhPSBub3RGb3VuZCkKKyAgICBpZiAobV90YXJnZXRQYXR0ZXJucy5maW5kSWYoWyZdIChhdXRv
JiB0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6UmVz
dEVsZW1lbnQ7IH0pICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEVsZW1lbnROb2RlKiBlbGVtZW50Tm9kZXMgPSBzdGF0aWNfY2FzdDxBcnJheU5vZGUqPihyaHMp
LT5lbGVtZW50cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGVmZXJy
ZWRXb3JrVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EZWZlcnJlZFdvcmtUaW1lci5oCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgICAgIGJv
b2wgaXNDYW5jZWxsZWQoKSBjb25zdCB7IHJldHVybiAhc2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0
KCk7IH0KIAotICAgICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKKyAg
ICAgICAgRml4ZWRWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICAgICAg
U3Ryb25nPEpTT2JqZWN0PiBzY3JpcHRFeGVjdXRpb25Pd25lcjsKICAgICB9OwogCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9GaXhlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZpeGVkVmVjdG9yLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XVEYvd3RmL0ZpeGVk
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI3LDYgKzEyNyw4IEBAIHB1YmxpYzoKICAgICBUJiBs
YXN0KCkgeyByZXR1cm4gKCp0aGlzKVtzaXplKCkgLSAxXTsgfQogICAgIGNvbnN0IFQmIGxhc3Qo
KSBjb25zdCB7IHJldHVybiAoKnRoaXMpW3NpemUoKSAtIDFdOyB9CiAKKyAgICB2b2lkIGNsZWFy
KCkgeyBtX3N0b3JhZ2UgPSBudWxscHRyOyB9CisKICAgICB2b2lkIGZpbGwoY29uc3QgVCYgdmFs
KQogICAgIHsKICAgICAgICAgaWYgKCFtX3N0b3JhZ2UpCkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICptX3N0b3JhZ2UgPT0gKm90aGVyLm1fc3RvcmFnZTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRJZihj
b25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisKICAgICB2b2lkIHN3YXAoRml4ZWRWZWN0b3I8
VD4mIG90aGVyKQogICAgIHsKICAgICAgICAgdXNpbmcgc3RkOjpzd2FwOwpAQCAtMTY5LDYgKzE3
NSwzMyBAQCBwcml2YXRlOgogc3RhdGljX2Fzc2VydChzaXplb2YoRml4ZWRWZWN0b3I8aW50Pikg
PT0gc2l6ZW9mKGludCopKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFU+Citib29sIEZpeGVkVmVjdG9yPFQ+Ojpjb250YWlucyhjb25zdCBVJiB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgorc2l6ZV90IEZp
eGVkVmVjdG9yPFQ+OjpmaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtYXRjaGVzKGF0KGkpKSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1
cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorc2l6ZV90IEZpeGVkVmVjdG9yPFQ+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBmaW5kSWYoWyZdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0
ZW0gPT0gdmFsdWU7CisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
dm9pZCBzd2FwKEZpeGVkVmVjdG9yPFQ+JiBhLCBGaXhlZFZlY3RvcjxUPiYgYikKIHsKICAgICBh
LnN3YXAoYik7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dURi93
dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzU2LDkgKzc1Niw5IEBAIHB1YmxpYzoKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRNYXRjaGluZyhjb25z
dCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5j
dGlvbj4gc2l6ZV90IGZpbmRJZihjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFUmKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgcmV2ZXJzZUZpbmRNYXRj
aGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWF0Y2hGdW5jdGlvbj4gc2l6ZV90IHJldmVyc2VGaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBhcHBlbmRJZk5vdENvbnRh
aW5zKGNvbnN0IFUmKTsKIApAQCAtOTk2LDcgKzk5Niw3IEBAIGJvb2wgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0gKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwg
dHlwZW5hbWUgTWFsbG9jPgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVf
dCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHks
IE1hbGxvYz46OmZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25z
dAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eSwgTWFsbG9jPjo6ZmluZElmKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpIGNv
bnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAobWF0Y2hlcyhhdChpKSkpCkBAIC0xMDA5LDcgKzEwMDksNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogc2l6ZV90
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZE1h
dGNoaW5nKFsmXShhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIGZpbmRJZihbJl0oYXV0byYgaXRl
bSkgewogICAgICAgICByZXR1cm4gaXRlbSA9PSB2YWx1ZTsKICAgICB9KTsKIH0KQEAgLTEwMjgs
NyArMTAyOCw3IEBAIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgogdGVtcGxh
dGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJldmVyc2VGaW5kTWF0
Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKK3NpemVfdCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46
OnJldmVyc2VGaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBzaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBz
aXplX3QgaW5kZXggPSBzaXplKCkgLSBpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
c3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3BwCShyZXZpc2lvbiAyODc1Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIENsaXBib2FyZDo6Z2V0VHlwZShD
bGlwYm9hcmRJdGVtJiBpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGl0ZW1J
bmRleCA9IG1fYWN0aXZlU2Vzc2lvbi0+aXRlbXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgYWN0
aXZlSXRlbSkgeworICAgIGF1dG8gaXRlbUluZGV4ID0gbV9hY3RpdmVTZXNzaW9uLT5pdGVtcy5m
aW5kSWYoWyZdIChhdXRvJiBhY3RpdmVJdGVtKSB7CiAgICAgICAgIHJldHVybiBhY3RpdmVJdGVt
LnB0cigpID09ICZpdGVtOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBWZWN0b3I8U3RyaW5nPiBD
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhCiAKIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Z2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSkKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2l0ZW1Qcm9taXNlcy5maW5k
TWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gbV9pdGVt
UHJvbWlzZXMuZmluZElmKFsmXSAoYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gdHlwZSA9
PSBpdGVtLmtleTsKICAgICB9KTsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Y28KIAogICAgICAgICAgICAgUmVmIGl0ZW1UeXBlTG9h
ZGVyIHsgKndlYWtJdGVtVHlwZUxvYWRlciB9OwogI2lmICFDT01QSUxFUihNU1ZDKQotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5m
aW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBsb2FkZXIpIHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBp
dGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0aGlz
LCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5maW5kSWYoWyZdIChhdXRvJiBsb2FkZXIp
IHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOwogI2Vu
ZGlmCiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvbWlzZS0+cmVzdWx0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZVN0b3JhZ2UuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgRE9NQ2Fj
aGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmUKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
b3B0aW9ucy5jYWNoZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcG9zaXRpb24g
PSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5h
bWUoKSA9PSBvcHRpb25zLmNhY2hlTmFtZTsgfSk7CisgICAgICAgICAgICBhdXRvIHBvc2l0aW9u
ID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1lKCkg
PT0gb3B0aW9ucy5jYWNoZU5hbWU7IH0pOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5v
dEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZXNbcG9zaXRpb25dLT5tYXRjaChXVEZN
b3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCB2b2lkIERPTUNhY2hlU3RvcmFn
ZTo6aGFzKGNvbnN0IFN0cmluZyYgCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChXVEZNb3Zl
KGV4Y2VwdGlvbi52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKKyAgICAg
ICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKICAgICB9KTsKIH0KIAog
UmVmPERPTUNhY2hlPiBET01DYWNoZVN0b3JhZ2U6OmZpbmRDYWNoZU9yQ3JlYXRlKERPTUNhY2hl
RW5naW5lOjpDYWNoZUluZm8mJiBpbmZvKQogewotICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVz
LmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGNhY2hlKSB7IHJldHVybiBpbmZvLmlkZW50
aWZpZXIgPT0gY2FjaGUtPmlkZW50aWZpZXIoKTsgfSk7CisgICBhdXRvIHBvc2l0aW9uID0gbV9j
YWNoZXMuZmluZElmKFsmXSAoY29uc3QgYXV0byYgY2FjaGUpIHsgcmV0dXJuIGluZm8uaWRlbnRp
ZmllciA9PSBjYWNoZS0+aWRlbnRpZmllcigpOyB9KTsKICAgIGlmIChwb3NpdGlvbiAhPSBub3RG
b3VuZCkKICAgICAgICByZXR1cm4gbV9jYWNoZXNbcG9zaXRpb25dLmNvcHlSZWYoKTsKICAgIHJl
dHVybiBET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFdURk1vdmUo
aW5mby5uYW1lKSwgaW5mby5pZGVudGlmaWVyLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKTsKQEAg
LTE5OSw3ICsxOTksNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcm
CiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBET01Q
cm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUNhY2hlPj4mJiBwcm9taXNlKQogewotICAg
IGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9j
YWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1lKCkgPT0gbmFt
ZTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHByb21pc2Uu
cmVzb2x2ZShET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFN0cmlu
ZyB7IG1fY2FjaGVzW3Bvc2l0aW9uXS0+bmFtZSgpIH0sIG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRl
bnRpZmllcigpLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTIzMiw3ICsyMzIsNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmlu
CiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb1JlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIERP
TVByb21pc2VEZWZlcnJlZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7Ci0gICAgYXV0byBwb3Np
dGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS0+bmFtZSgpID09IG5hbWU7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5k
SWYoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKICAg
ICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdo
bGlnaHQvSGlnaGxpZ2h0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODUsNyArODUsNyBAQCB2b2lkIEhpZ2hsaWdodDo6Y2xlYXJGcm9tU2V0TGlrZSgpCiAKIGJvb2wg
SGlnaGxpZ2h0OjphZGRUb1NldExpa2UoU3RhdGljUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChu
b3RGb3VuZCAhPSBtX3Jhbmdlc0RhdGEuZmluZE1hdGNoaW5nKFsmcmFuZ2VdKGNvbnN0IFJlZjxI
aWdobGlnaHRSYW5nZURhdGE+JiBjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmdldCgpLnJhbmdl
LmdldCgpID09IHJhbmdlOyB9KSkKKyAgICBpZiAobm90Rm91bmQgIT0gbV9yYW5nZXNEYXRhLmZp
bmRJZihbJnJhbmdlXShjb25zdCBSZWY8SGlnaGxpZ2h0UmFuZ2VEYXRhPiYgY3VycmVudCkgeyBy
ZXR1cm4gY3VycmVudC5nZXQoKS5yYW5nZS5nZXQoKSA9PSByYW5nZTsgfSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXBhaW50UmFuZ2UocmFuZ2UpOwogICAgIG1fcmFuZ2VzRGF0YS5h
cHBlbmQoSGlnaGxpZ2h0UmFuZ2VEYXRhOjpjcmVhdGUocmFuZ2UpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJv
bHNIb3N0LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NzIsNyArNTcyLDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbAog
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJh
Y2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNr
cywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9u
cywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7Ci0gICAgICAgICAgICBib29sIGFs
bFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kTWF0Y2hp
bmcoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgeworICAgICAgICAgICAgYm9vbCBhbGxUcmFj
a3NEaXNhYmxlZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25z
dCBhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5t
b2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBib29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0
aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYg
YWxsVHJhY2tzRGlzYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVj
b3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgTWVkaWFSZWNvcmRlcjo6ZGlzcGF0
Y2hFcnJvcihFeGNlcHQKIAogdm9pZCBNZWRpYVJlY29yZGVyOjp0cmFja0VuZGVkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90cmFja3MuZmluZE1h
dGNoaW5nKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fdHJhY2tzLmZp
bmRJZihbXShhdXRvJiB0cmFjaykgewogICAgICAgICByZXR1cm4gIXRyYWNrLT5lbmRlZCgpOwog
ICAgIH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVEND
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgUlRDQ29udHJv
bGxlcjo6c2hvdWxkRGlzYWJsZUlDRUNhbmQKIHsKICAgICBpZiAoIW1fc2hvdWxkRmlsdGVySUNF
Q2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG5vdEZvdW5kICE9
IG1fZmlsdGVyaW5nRGlzYWJsZWRPcmlnaW5zLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8m
IG9yaWdpbikgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2ZpbHRlcmluZ0Rpc2FibGVkT3Jp
Z2lucy5maW5kSWYoWyZdIChjb25zdCBhdXRvJiBvcmlnaW4pIHsKICAgICAgICAgcmV0dXJuIG1h
dGNoRG9jdW1lbnRPcmlnaW4oZG9jdW1lbnQsIG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGll
bnRPcmlnaW4pOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICog
Q29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDg4LDcgKzQ4OCw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpzZXQKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJDZXJ0aWZpY2F0ZXMgcGFy
YW1ldGVycyBhcmUgZGlmZmVyZW50IiB9OwogCiAgICAgICAgIGZvciAoYXV0byYgY2VydGlmaWNh
dGUgOiBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcykgewotICAgICAgICAgICAgYm9vbCBpc1Ro
ZXJlID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kTWF0Y2hpbmcoWyZjZXJ0aWZp
Y2F0ZV0oY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICAgICAgYm9vbCBpc1RoZXJlID0gbV9j
b25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kSWYoWyZjZXJ0aWZpY2F0ZV0oY29uc3QgYXV0
byYgaXRlbSkgewogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldCgpID09IGNlcnRpZmlj
YXRlLmdldCgpOwogICAgICAgICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAgICAgICBpZiAo
IWlzVGhlcmUpCkBAIC05NTksNyArOTU5LDcgQEAgRG9jdW1lbnQqIFJUQ1BlZXJDb25uZWN0aW9u
Ojpkb2N1bWVudCgpCiAKIFJlZjxSVENJY2VUcmFuc3BvcnQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpn
ZXRPckNyZWF0ZUljZVRyYW5zcG9ydChVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4m
JiBiYWNrZW5kKQogewotICAgIGF1dG8gaW5kZXggPSBtX2ljZVRyYW5zcG9ydHMuZmluZE1hdGNo
aW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7IHJldHVybiBiYWNrZW5kLmdldCgpID09
IHRyYW5zcG9ydC0+YmFja2VuZCgpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gbV9pY2VUcmFuc3Bv
cnRzLmZpbmRJZihbJmJhY2tlbmRdKGF1dG8mIHRyYW5zcG9ydCkgeyByZXR1cm4gYmFja2VuZC5n
ZXQoKSA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZv
dW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9pY2VUcmFuc3BvcnRzLnNpemUoKTsKICAgICAgICAg
bV9pY2VUcmFuc3BvcnRzLmFwcGVuZChSVENJY2VUcmFuc3BvcnQ6OmNyZWF0ZSgqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBXVEZNb3ZlKGJhY2tlbmQpLCAqdGhpcykpOwpAQCAtOTc4LDcgKzk3
OCw3IEBAIFJlZlB0cjxSVENEdGxzVHJhbnNwb3J0PiBSVENQZWVyQ29ubmVjdGkKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBpbmRleCA9IG1f
ZHRsc1RyYW5zcG9ydHMuZmluZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7
IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CisgICAgYXV0byBp
bmRleCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZElmKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0
KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYg
KGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9kdGxzVHJhbnNwb3J0cy5z
aXplKCk7CiAgICAgICAgIGF1dG8gaWNlVHJhbnNwb3J0QmFja2VuZCA9IGJhY2tlbmQtPmljZVRy
YW5zcG9ydEJhY2tlbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCShyZXZp
c2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0
cFNGcmFtZVRyYW5zZm9ybWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNyArMjQ2LDcgQEAgUlRD
UnRwU0ZyYW1lVHJhbnNmb3JtZXI6OlRyYW5zZm9ybVJlc3VsdAogICAgIG1fY291bnRlciA9IGhl
YWRlci0+Y291bnRlcjsKIAogICAgIGlmIChoZWFkZXItPmtleUlkICE9IG1fa2V5SWQpIHsKLSAg
ICAgICAgYXV0byBwb3NpdGlvbiA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoW2tleUlkID0gaGVhZGVy
LT5rZXlJZF0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5rZXlJZCA9PSBrZXlJZDsgfSk7Cisg
ICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2tleXMuZmluZElmKFtrZXlJZCA9IGhlYWRlci0+a2V5
SWRdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2V5SWQgPT0ga2V5SWQ7IH0pOwogICAgICAg
ICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoRXJyb3JJbmZvcm1hdGlvbiB7IEVycm9yOjpLZXlJRCwgICJLZXkgSUQgaXMgdW5rbm93
biJfcywgaGVhZGVyLT5rZXlJZCB9KTsKICAgICAgICAgYXV0byByZXN1bHQgPSB1cGRhdGVFbmNy
eXB0aW9uS2V5KG1fa2V5c1twb3NpdGlvbl0ua2V5RGF0YSwgaGVhZGVyLT5rZXlJZCwgU2hvdWxk
VXBkYXRlS2V5czo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4Myw3ICs0ODQsNyBAQCB2
b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9yCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQoKS5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLmlzR3JhcGhPd25lcigpKTsKIAot
ICAgIEFTU0VSVChtX2lucHV0cy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGFzc29jaWF0ZWRJbnB1
dCkgeyByZXR1cm4gYXNzb2NpYXRlZElucHV0LmdldCgpID09IGlucHV0OyB9KSAhPSBub3RGb3Vu
ZCk7CisgICAgQVNTRVJUKG1faW5wdXRzLmZpbmRJZihbJl0oYXV0byYgYXNzb2NpYXRlZElucHV0
KSB7IHJldHVybiBhc3NvY2lhdGVkSW5wdXQuZ2V0KCkgPT0gaW5wdXQ7IH0pICE9IG5vdEZvdW5k
KTsKICAgICBpbnB1dC0+dXBkYXRlSW50ZXJuYWxCdXMoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNw
cAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE4LDcgKzIxOSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6Y2EKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9l
dmVudHNMb2NrIH07CiAKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBldmVudCBhdCBvciBqdXN0IHBh
c3QgY2FuY2VsVGltZS4KLSAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgZXZlbnQpIHsKKyAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRJZihbJl0oYXV0byYg
ZXZlbnQpIHsKICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWUoKSA+IGNhbmNlbFRpbWU7CiAgICAg
fSk7CiAgICAgaSA9IChpID09IG5vdEZvdW5kKSA/IG1fZXZlbnRzLnNpemUoKSA6IGk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0lJUkZpbHRlck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSUlSRmlsdGVyTm9kZS5j
cHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
SUlSRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsNyArODcsNyBAQCBFeGNl
cHRpb25PcjxSZWY8SUlSRmlsdGVyTm9kZT4+IElJUkZpbHRlCiAgICAgaWYgKCFvcHRpb25zLmZl
ZWRmb3J3YXJkLnNpemUoKSB8fCBvcHRpb25zLmZlZWRmb3J3YXJkLnNpemUoKSA+IElJUkZpbHRl
cjo6bWF4T3JkZXIpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJv
ciwgImZlZWRmb3J3YXJkIGFycmF5IG11c3QgaGF2ZSBhIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDIw
Il9zIH07CiAKLSAgICBhdXRvIG5vblplcm9WYWx1ZUluZGV4ID0gb3B0aW9ucy5mZWVkZm9yd2Fy
ZC5maW5kTWF0Y2hpbmcoW10oYXV0byYgdmFsdWUpIHsgcmV0dXJuICEhdmFsdWU7IH0pOworICAg
IGF1dG8gbm9uWmVyb1ZhbHVlSW5kZXggPSBvcHRpb25zLmZlZWRmb3J3YXJkLmZpbmRJZihbXShh
dXRvJiB2YWx1ZSkgeyByZXR1cm4gISF2YWx1ZTsgfSk7CiAgICAgaWYgKG5vblplcm9WYWx1ZUlu
ZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsICJmZWVkZm9yd2FyZCBhcnJheSBtdXN0IGNvbnRhaW4gYSBub24temVybyB2YWx1ZSJf
cyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vVTJmQ29t
bWFuZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vVTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjg3NTc3
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL1UyZkNvbW1hbmRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQg
MjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
CiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBp
c0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQoYwogewogICAgIGlmIChyZXF1ZXN0LmF1
dGhlbnRpY2F0b3JTZWxlY3Rpb24gJiYgKHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+
dXNlclZlcmlmaWNhdGlvbiA9PSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVk
IHx8IHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXF1ZXN0LnB1YktleUNyZWRQYXJhbXMu
ZmluZE1hdGNoaW5nKFtdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uYWxnID09IENPU0U6OkVT
MjU2OyB9KSA9PSBub3RGb3VuZCkKKyAgICBpZiAocmVxdWVzdC5wdWJLZXlDcmVkUGFyYW1zLmZp
bmRJZihbXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmFsZyA9PSBDT1NFOjpFUzI1NjsgfSkg
PT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSSW5w
dXRTb3VyY2VBcnJheS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0Miw3ICsx
NDMsNyBAQCB2b2lkIFdlYlhSSW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRPCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJjZXMpIHsK
LSAgICAgICAgYXV0byBpbmRleCA9IG1faW5wdXRTb3VyY2VzLmZpbmRNYXRjaGluZyhbJmlucHV0
U291cmNlXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5oYW5kbGUoKSA9PSBpbnB1dFNvdXJj
ZS5oYW5kbGU7IH0pOworICAgICAgICBhdXRvIGluZGV4ID0gbV9pbnB1dFNvdXJjZXMuZmluZElm
KFsmaW5wdXRTb3VyY2VdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmhhbmRsZSgpID09IGlu
cHV0U291cmNlLmhhbmRsZTsgfSk7CiAgICAgICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewog
ICAgICAgICAgICAgLy8gV2hlbiBuZXcgWFIgaW5wdXQgc291cmNlcyBiZWNvbWUgYXZhaWxhYmxl
IGZvciBYUlNlc3Npb24gc2Vzc2lvbiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBydW4gdGhlIGZvbGxv
d2luZyBzdGVwczoKICAgICAgICAgICAgIC8vIDEuIElmIHNlc3Npb24ncyBwcm9taXNlIHJlc29s
dmVkIGZsYWcgaXMgbm90IHNldCwgYWJvcnQgdGhlc2Ugc3RlcHMuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCShyZXZpc2lvbiAyODc1Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNzksNyArMjgwLDcgQEAgdm9pZCBXZWJYUlNlc3Npb246OmNhbmNlbEFuaW1hdGlvbkZy
YW1lKAogICAgIC8vICAgIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbiBmcmFtZSBjYWxsYmFj
a3MgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGhhbmRsZS4KICAgICAvLyAzLiBJ
ZiB0aGVyZSBpcyBzdWNoIGFuIGVudHJ5LCBzZXQgaXRzIGNhbmNlbGxlZCBib29sZWFuIHRvIHRy
dWUgYW5kIHJlbW92ZSBpdCBmcm9tCiAgICAgLy8gICAgc2Vzc2lvbidzIGxpc3Qgb2YgYW5pbWF0
aW9uIGZyYW1lIGNhbGxiYWNrcy4KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX2NhbGxiYWNrcy5m
aW5kTWF0Y2hpbmcoW2NhbGxiYWNrSWRdIChhdXRvJiBpdGVtKSB7CisgICAgc2l6ZV90IHBvc2l0
aW9uID0gbV9jYWxsYmFja3MuZmluZElmKFtjYWxsYmFja0lkXSAoYXV0byYgaXRlbSkgewogICAg
ICAgICByZXR1cm4gaXRlbS0+Y2FsbGJhY2tJZCgpID09IGNhbGxiYWNrSWQ7CiAgICAgfSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lz
dGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTcsNyBAQCB2b2lkIFdlYlhSU3lzdGVtOjplbnN1
cmVJbW1lcnNpdmVYUkRldmljCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uICYmIG9sZERldmljZSAmJiBpbW1lcnNp
dmVYUkRldmljZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnku
cHRyKCkgPT0gb2xkRGV2aWNlOyB9KSAhPSBub3RGb3VuZCkKKyAgICAgICAgaWYgKG1fYWN0aXZl
SW1tZXJzaXZlU2Vzc2lvbiAmJiBvbGREZXZpY2UgJiYgaW1tZXJzaXZlWFJEZXZpY2VzLmZpbmRJ
ZihbJl0oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09IG9sZERldmljZTsgfSkg
IT0gbm90Rm91bmQpCiAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVJbW1lcnNpdmVEZXZpY2Uu
Z2V0KCkgPT0gb2xkRGV2aWNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IGEgYmV0dGVyIFVBIHNlbGVjdGlvbiBtZWNoYW5pc20gaWYgcmVxdWlyZWQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzE4LDcgKzMzMTgsNyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUlzb2xhdGVkVHJlZShBCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGPgogc3RhdGljIGJvb2wgYXBwZW5kSWZOb3RDb250YWluc01hdGNoaW5nKFZl
Y3RvcjxUPiYgdmVjdG9yLCBjb25zdCBUJiB2YWx1ZSwgRiBtYXRjaGVzKQogewotICAgIGlmICh2
ZWN0b3IuZmluZE1hdGNoaW5nKG1hdGNoZXMpICE9IG5vdEZvdW5kKQorICAgIGlmICh2ZWN0b3Iu
ZmluZElmKG1hdGNoZXMpICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
dmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xOTEsNyArMTkyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNob3VsZEVt
aXRTaWduYQogCiAgICAgY29uc3QgY2hhciogbmVlZGxlWzRdID0geyBpbnRlcmZhY2UsIG5hbWUs
IGRldGFpbCwgbnVsbHB0ciB9OwogICAgIGZvciAoY29uc3QgYXV0byYgbGlzdGVuZXJzIDogbV9l
dmVudExpc3RlbmVycy52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVy
cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IEdVbmlxdWVQdHI8Y2hhcio+JiBldmVudCkgeworICAg
ICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVycy5maW5kSWYoWyZdKGNvbnN0IEdVbmlxdWVQdHI8
Y2hhcio+JiBldmVudCkgewogICAgICAgICAgICAgcmV0dXJuIGV2ZW50SXNTdWJ0eXBlKGNvbnN0
X2Nhc3Q8Y2hhcioqPihuZWVkbGUpLCBldmVudC5nZXQoKSk7CiAgICAgICAgIH0pOwogICAgICAg
ICBpZiAocmVzdWx0ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI0LDcgKzMyNCw3IEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFUcmFuc2Zlcjo6dHlwZXMoQWRkRmkKICAgICB9CiAKICAgICBhdXRvIHNhZmVUeXBlcyA9
IG1fcGFzdGVib2FyZC0+dHlwZXNTYWZlRm9yQmluZGluZ3MobV9vcmlnaW5JZGVudGlmaWVyKTsK
LSAgICBib29sIGhhc0ZpbGVCYWNrZWRJdGVtID0gbV9pdGVtTGlzdCAmJiBtX2l0ZW1MaXN0LT5o
YXNJdGVtcygpICYmIG5vdEZvdW5kICE9IG1faXRlbUxpc3QtPml0ZW1zKCkuZmluZE1hdGNoaW5n
KFtdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgYm9vbCBoYXNGaWxlQmFja2VkSXRlbSA9IG1f
aXRlbUxpc3QgJiYgbV9pdGVtTGlzdC0+aGFzSXRlbXMoKSAmJiBub3RGb3VuZCAhPSBtX2l0ZW1M
aXN0LT5pdGVtcygpLmZpbmRJZihbXSAoY29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICByZXR1
cm4gaXRlbS0+aXNGaWxlKCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
YXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTUsNyAr
MTU1LDcgQEAgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4mIERhdGFUcmFucwogCiBzdGF0
aWMgdm9pZCByZW1vdmVTdHJpbmdJdGVtT2ZMb3dlcmNhc2VkVHlwZShWZWN0b3I8UmVmPERhdGFU
cmFuc2Zlckl0ZW0+PiYgaXRlbXMsIGNvbnN0IFN0cmluZyYgbG93ZXJjYXNlZFR5cGUpCiB7Ci0g
ICAgYXV0byBpbmRleCA9IGl0ZW1zLmZpbmRNYXRjaGluZyhbbG93ZXJjYXNlZFR5cGVdKGF1dG8m
IGl0ZW0pIHsKKyAgICBhdXRvIGluZGV4ID0gaXRlbXMuZmluZElmKFtsb3dlcmNhc2VkVHlwZV0o
YXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gIWl0ZW0tPmlzRmlsZSgpICYmIGl0ZW0tPnR5
cGUoKSA9PSBsb3dlcmNhc2VkVHlwZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91
bmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC00MzMyLDcgKzQzMzIsNyBAQCB2b2lkIERvY3VtZW50
OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnCiAgICAgICAgIG1fcGVuZGluZ1Njcm9sbEV2ZW50
VGFyZ2V0TGlzdCA9IG1ha2VVbmlxdWU8UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlzdD4oKTsK
IAogICAgIGF1dG8mIHRhcmdldHMgPSBtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3QtPnRh
cmdldHM7Ci0gICAgaWYgKHRhcmdldHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50cnkpIHsg
cmV0dXJuIGVudHJ5LnB0cigpID09ICZ0YXJnZXQ7IH0pICE9IG5vdEZvdW5kKQorICAgIGlmICh0
YXJnZXRzLmZpbmRJZihbJl0gKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAm
dGFyZ2V0OyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHRhcmdl
dHMuaXNFbXB0eSgpKQpAQCAtODA5MCw3ICs4MDkwLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRl
SW50ZXJzZWN0aW9uT2JzZXJ2YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAo
YXV0byYgdGFyZ2V0IDogb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpKSB7CiAgICAgICAg
ICAgICBhdXRvJiB0YXJnZXRSZWdpc3RyYXRpb25zID0gdGFyZ2V0LT5pbnRlcnNlY3Rpb25PYnNl
cnZlckRhdGFJZkV4aXN0cygpLT5yZWdpc3RyYXRpb25zOwotICAgICAgICAgICAgYXV0byBpbmRl
eCA9IHRhcmdldFJlZ2lzdHJhdGlvbnMuZmluZE1hdGNoaW5nKFtvYnNlcnZlcl0oYXV0byYgcmVn
aXN0cmF0aW9uKSB7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gdGFyZ2V0UmVnaXN0cmF0aW9u
cy5maW5kSWYoW29ic2VydmVyXShhdXRvJiByZWdpc3RyYXRpb24pIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVyLmdldCgpID09IG9ic2VydmVyOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDEsNyArMjQxLDcgQEAgVmVjdG9yPEV2ZW50
VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUAogICAgIFJFTEVBU0VfQVNTRVJUKHBhdGhTaXpl
KTsKICAgICBwYXRoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aFNpemUpOwogCi0gICAgYXV0
byBjdXJyZW50VGFyZ2V0SW5kZXggPSBtX3BhdGguZmluZE1hdGNoaW5nKFsmdGFyZ2V0XSAoYXV0
byYgY29udGV4dCkgeworICAgIGF1dG8gY3VycmVudFRhcmdldEluZGV4ID0gbV9wYXRoLmZpbmRJ
ZihbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3Vy
cmVudFRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY3Vy
cmVudFRhcmdldEluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgUmVmIGV2ZW50TG9vcCA9IHNsb3QuZG9jdW1lbnQoKS53aW5kb3dF
dmVudExvb3AoKTsKICAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxTbG90TGlzdCgp
OwotICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJl
dHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAgIEFTU0VSVChs
aXN0LmZpbmRJZihbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAm
c2xvdDsgfSkgPT0gbm90Rm91bmQpOwogICAgIGxpc3QuYXBwZW5kKHNsb3QpOwogCiAgICAgZXZl
bnRMb29wLT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDI4NzU3
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBNaWNoZWxh
bmdlbG8gRGUgU2ltb25lIDxtaWNkZXNpbUBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVybk1pc21hdGNo
KAogCiAgICAgaWYgKGlzRW1haWxGaWVsZCgpICYmIGVsZW1lbnQoKS0+bXVsdGlwbGUoKSkgewog
ICAgICAgICBhdXRvIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgICAgIHJldHVybiB2
YWx1ZXMuZmluZE1hdGNoaW5nKHZhbHVlUGF0dGVybk1pc21hdGNoKSAhPSBub3RGb3VuZDsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlcy5maW5kSWYodmFsdWVQYXR0ZXJuTWlzbWF0Y2gpICE9IG5vdEZv
dW5kOwogICAgIH0KICAgICByZXR1cm4gdmFsdWVQYXR0ZXJuTWlzbWF0Y2godmFsdWUpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
ODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjAzLDcgKzYwMyw3IEBAIHVuc2lnbmVkIEhUTUxWaWRlb0VsZW1lbnQ6
OnJlcXVlc3RWaWRlb0YKIAogdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpjYW5jZWxWaWRlb0ZyYW1l
Q2FsbGJhY2sodW5zaWduZWQgaWRlbnRpZmllcikKIHsKLSAgICBhdXRvIGluZGV4ID0gbV92aWRl
b0ZyYW1lUmVxdWVzdHMuZmluZE1hdGNoaW5nKFtpZGVudGlmaWVyXShhdXRvJiByZXF1ZXN0KSB7
IHJldHVybiByZXF1ZXN0LT5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8g
aW5kZXggPSBtX3ZpZGVvRnJhbWVSZXF1ZXN0cy5maW5kSWYoW2lkZW50aWZpZXJdKGF1dG8mIHJl
cXVlc3QpIHsgcmV0dXJuIHJlcXVlc3QtPmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcjsgfSk7CiAg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1faXNS
dW5uaW5nVmlkZW9GcmFtZVJlcXVlc3RzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAkocmV2aXNpb24gMjg3NTc3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjphZGRG
aWVsZChSZWY8RAogCiBzaXplX3QgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRJbmRleE9mKGNv
bnN0IERhdGVUaW1lRmllbGRFbGVtZW50JiBmaWVsZFRvRmluZCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZmllbGQpIHsKKyAgICByZXR1cm4g
bV9maWVsZHMuZmluZElmKFsmXSAoYXV0byYgZmllbGQpIHsKICAgICAgICAgcmV0dXJuIGZpZWxk
LnB0cigpID09ICZmaWVsZFRvRmluZDsKICAgICB9KTsKIH0KQEAgLTIyMyw3ICsyMjMsNyBAQCBz
aXplX3QgRGF0ZVRpbWVFZGl0RWxlbWVudDo6ZmllbGRJbmRleE9mCiBEYXRlVGltZUZpZWxkRWxl
bWVudCogRGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNlZEZpZWxkRWxlbWVudCgpIGNvbnN0CiB7
CiAgICAgYXV0byogZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCk7
Ci0gICAgYXV0byBmaWVsZEluZGV4ID0gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYg
ZmllbGQpIHsKKyAgICBhdXRvIGZpZWxkSW5kZXggPSBtX2ZpZWxkcy5maW5kSWYoWyZdIChhdXRv
JiBmaWVsZCkgewogICAgICAgICByZXR1cm4gZmllbGQucHRyKCkgPT0gZm9jdXNlZEVsZW1lbnQ7
CiAgICAgfSk7CiAKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIERhdGVUaW1lRWRpdEVsZW1lbnQ6
OmRpZEJsdXJGcm9tRmllCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvKiBuZXdGb2N1
c2VkRWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkgewotICAgICAgICBib29sIGRpZEZv
Y3VzU2libGluZ0ZpZWxkID0gbm90Rm91bmQgIT0gbV9maWVsZHMuZmluZE1hdGNoaW5nKFsmXSAo
YXV0byYgZmllbGQpIHsKKyAgICAgICAgYm9vbCBkaWRGb2N1c1NpYmxpbmdGaWVsZCA9IG5vdEZv
dW5kICE9IG1fZmllbGRzLmZpbmRJZihbJl0gKGF1dG8mIGZpZWxkKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gZmllbGQucHRyKCkgPT0gbmV3Rm9jdXNlZEVsZW1lbnQ7CiAgICAgICAgIH0pOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFj
ay5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kRGF0YVRleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IENhYmxlIFRlbGV2aXNpb24gTGFicyBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgSW5iYW5kRGF0YVRleHRUcmFjazo6YWRkRGF0YUN1ZShjb24KIAog
UmVmUHRyPERhdGFDdWU+IEluYmFuZERhdGFUZXh0VHJhY2s6OmZpbmRJbmNvbXBsZXRlQ3VlKGNv
bnN0IFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUmIGN1ZVRvRmluZCkKIHsKLSAgICBhdXRvIGlu
ZGV4ID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgY3Vl
KSB7CisgICAgYXV0byBpbmRleCA9IG1faW5jb21wbGV0ZUN1ZU1hcC5maW5kSWYoWyZdKGNvbnN0
IGF1dG8mIGN1ZSkgewogICAgICAgICByZXR1cm4gY3VlVG9GaW5kLmlzRXF1YWwoKmN1ZS0+cGxh
dGZvcm1WYWx1ZSgpKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzMiw3
ICsxMDMyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OmFwcGVuZEFjdGlvblNuYXBzaAogCiBp
bnQgSW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0
YSkKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmZpbmRNYXRj
aGluZyhbJl0gKGF1dG8gaXRlbSkgeworICAgIHNpemVfdCBpbmRleCA9IG1faW5kZXhlZER1cGxp
Y2F0ZURhdGEuZmluZElmKFsmXSAoYXV0byBpdGVtKSB7CiAgICAgICAgIGlmIChkYXRhID09IGl0
ZW0pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAy
ODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBXZWJEZWJ1Z2dl
ckFnZW50OjpkaWRBZGRFdmVudExpc3RlbgogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBl
dmVudExpc3RlbmVycyA9IHRhcmdldC5ldmVudExpc3RlbmVycyhldmVudFR5cGUpOwotICAgIGF1
dG8gcG9zaXRpb24gPSBldmVudExpc3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHJlZ2lz
dGVyZWRMaXN0ZW5lcikgeworICAgIGF1dG8gcG9zaXRpb24gPSBldmVudExpc3RlbmVycy5maW5k
SWYoWyZdKGF1dG8mIHJlZ2lzdGVyZWRMaXN0ZW5lcikgewogICAgICAgICByZXR1cm4gJnJlZ2lz
dGVyZWRMaXN0ZW5lci0+Y2FsbGJhY2soKSA9PSAmbGlzdGVuZXIgJiYgcmVnaXN0ZXJlZExpc3Rl
bmVyLT51c2VDYXB0dXJlKCkgPT0gY2FwdHVyZTsKICAgICB9KTsKICAgICBpZiAocG9zaXRpb24g
PT0gbm90Rm91bmQpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlk
QWRkRXZlbnRMaXN0ZW4KIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlz
dGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIGF1dG8mIGV2ZW50
TGlzdGVuZXJzID0gdGFyZ2V0LmV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7Ci0gICAgc2l6ZV90
IGxpc3RlbmVySW5kZXggPSBldmVudExpc3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHJl
Z2lzdGVyZWRMaXN0ZW5lcikgeworICAgIHNpemVfdCBsaXN0ZW5lckluZGV4ID0gZXZlbnRMaXN0
ZW5lcnMuZmluZElmKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKICAgICAgICAgcmV0
dXJuICZyZWdpc3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkgPT0gJmxpc3RlbmVyICYmIHJlZ2lz
dGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IGNhcHR1cmU7CiAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAkocmV2
aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgRmxvYXRpbmdTdGF0ZTo6
YXBwZW5kKEZsb2F0SXRlbSBmbG8KICAgICAgICAgcmV0dXJuIG1fZmxvYXRzLmFwcGVuZChmbG9h
dEl0ZW0pOwogCiAgICAgLy8gVGhlIGludGVncmF0aW9uIGNvZGVwYXRoIGRvZXMgbm90IGNvbnN0
cnVjdCBhIGxheW91dCBib3ggZm9yIHRoZSBmbG9hdCBpdGVtLgotICAgIEFTU0VSVF9JTVBMSUVT
KGZsb2F0SXRlbS5mbG9hdEJveCgpLCBtX2Zsb2F0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBl
bnRyeSkgeworICAgIEFTU0VSVF9JTVBMSUVTKGZsb2F0SXRlbS5mbG9hdEJveCgpLCBtX2Zsb2F0
cy5maW5kSWYoWyZdIChhdXRvJiBlbnRyeSkgewogICAgICAgICByZXR1cm4gZW50cnkuZmxvYXRC
b3goKSA9PSBmbG9hdEl0ZW0uZmxvYXRCb3goKTsKICAgICB9KSA9PSBub3RGb3VuZCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJv
eFRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDUsNyArMjA1LDcgQEAgTGF5b3V0OjpCb3gmIEJveFRyZWU6Omxh
eW91dEJveEZvclJlbmRlcgogICAgICAgICByZXR1cm4gbV9yb290OwogCiAgICAgaWYgKG1fYm94
ZXMuc2l6ZSgpIDw9IHNtYWxsVHJlZVRocmVzaG9sZCkgewotICAgICAgICBhdXRvIGluZGV4ID0g
bV9ib3hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIGF1dG8gaW5k
ZXggPSBtX2JveGVzLmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsKICAgICAgICAgICAgIHJldHVy
biBlbnRyeS5yZW5kZXJlciA9PSAmcmVuZGVyZXI7CiAgICAgICAgIH0pOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgUmVuZGVy
T2JqZWN0JiBCb3hUcmVlOjpyZW5kZXJlckZvckxheW91dAogICAgICAgICByZXR1cm4gbV9mbG93
OwogCiAgICAgaWYgKG1fYm94ZXMuc2l6ZSgpIDw9IHNtYWxsVHJlZVRocmVzaG9sZCkgewotICAg
ICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGVudHJ5KSB7
CisgICAgICAgIGF1dG8gaW5kZXggPSBtX2JveGVzLmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsK
ICAgICAgICAgICAgIHJldHVybiBlbnRyeS5ib3gucHRyKCkgPT0gJmJveDsKICAgICAgICAgfSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIyNzcsNyArMjI3
Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxvYWRpbmcoKQogCiAgICAgbV9s
aW5rSWNvbnMgPSBMaW5rSWNvbkNvbGxlY3RvciB7ICpkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7
IExpbmtJY29uVHlwZTo6RmF2aWNvbiwgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29u
VHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSk7CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBt
X2xpbmtJY29ucy5maW5kTWF0Y2hpbmcoW10oYXV0byYgaWNvbikgeyByZXR1cm4gaWNvbi50eXBl
ID09IExpbmtJY29uVHlwZTo6RmF2aWNvbjsgfSk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9s
aW5rSWNvbnMuZmluZElmKFtdKGF1dG8mIGljb24pIHsgcmV0dXJuIGljb24udHlwZSA9PSBMaW5r
SWNvblR5cGU6OkZhdmljb247IH0pOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG5vdEZvdW5kKQog
ICAgICAgICBtX2xpbmtJY29ucy5hcHBlbmQoeyBkb2N1bWVudC0+Y29tcGxldGVVUkwoIi9mYXZp
Y29uLmljbyJfcyksIExpbmtJY29uVHlwZTo6RmF2aWNvbiwgU3RyaW5nKCksIHN0ZDo6bnVsbG9w
dCwgeyB9IH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9i
c2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU1LDcgKzE1NSw3IEBAIFN0cmlu
ZyBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cm9vdE1hcmdpbigKIAogYm9vbCBJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6aXNPYnNlcnZpbmcoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiB0YXJn
ZXQpIHsKKyAgICByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuZmluZElmKFsmXShhdXRvJiB0
YXJnZXQpIHsKICAgICAgICAgcmV0dXJuIHRhcmdldC5nZXQoKSA9PSAmZWxlbWVudDsKICAgICB9
KSAhPSBub3RGb3VuZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWlu
ZXJPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Nb2RhbENv
bnRhaW5lck9ic2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9Nb2RhbENvbnRhaW5lck9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zODUsMTMgKzM4
NSwxMyBAQCB2b2lkIE1vZGFsQ29udGFpbmVyT2JzZXJ2ZXI6OmNvbGxlY3RDbGljCiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgTW9kYWxDb250YWluZXJEZWNpc2lvbjo6SGlkZUFuZElnbm9yZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNl
IE1vZGFsQ29udGFpbmVyRGVjaXNpb246OkhpZGVBbmRBbGxvdzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGluZGV4ID0gcG9zaXRpdmUuZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVs
bCk7IGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
aW5kZXggPSBwb3NpdGl2ZS5maW5kSWYobWF0Y2hOb25OdWxsKTsgaW5kZXggIT0gbm90Rm91bmQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aXZlW2luZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbmV1dHJhbC5maW5k
TWF0Y2hpbmcobWF0Y2hOb25OdWxsKTsgaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byBpbmRleCA9IG5ldXRyYWwuZmluZElmKG1hdGNoTm9uTnVsbCk7
IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
ZXV0cmFsW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIE1vZGFsQ29udGFpbmVyRGVjaXNpb246OkhpZGVBbmREaXNh
bGxvdzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbmVnYXRpdmUu
ZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8gaW5kZXggPSBuZWdhdGl2ZS5maW5kSWYobWF0Y2hOb25O
dWxsKTsgaW5kZXggIT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5lZ2F0aXZlW2luZGV4XS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9i
c2VydmVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01OSw3ICs2MCw3IEBAIHZvaWQgUmVzaXplT2JzZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYg
dGEKICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcG9z
aXRpb24gPSBtX29ic2VydmF0aW9ucy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIG9ic2VydmF0aW9u
KSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fb2JzZXJ2YXRpb25zLmZpbmRJZihbJl0oYXV0byYg
b2JzZXJ2YXRpb24pIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmF0aW9uLT50YXJnZXQoKSA9PSAm
dGFyZ2V0OwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgU2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVyOjpyZW1vdmVMYXQKICAgICBpZiAobV9mcmFtZVN0YXRlU3RhY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX2ZyYW1l
U3RhdGVTdGFjay5maW5kTWF0Y2hpbmcoWyZlbGVtZW50XSAoY29uc3QgYXV0byYgc3RhdGUpIHsK
KyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX2ZyYW1lU3RhdGVTdGFjay5maW5kSWYoWyZlbGVtZW50
XSAoY29uc3QgYXV0byYgc3RhdGUpIHsKICAgICAgICAgYXV0byogd2hlZWxFbGVtZW50ID0gc3Rh
dGUud2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7CiAgICAgICAgIHJldHVybiB3aGVlbEVsZW1lbnQg
JiYgZWxlbWVudC5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQpOwogICAgIH0pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBib29sIGhhc0NvbXBhdGlibGVT
bmFwQXJlYShjb25zdCAKICAgICBhdXRvIHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgPSBj
b21wb25lbnRGb3JBeGlzPFVuaXRUeXBlLCBQb2ludFR5cGU+KGRlc3RpbmF0aW9uT2Zmc2V0UG9p
bnQsIG90aGVyQXhpcyk7CiAgICAgYXV0byB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzID0gYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUuaGVpZ2h0KCkg
OiB2aWV3cG9ydFNpemUud2lkdGgoKTsKIAotICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBBcmVh
SW5kaWNlcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGluZGV4KSB7CisgICAgcmV0dXJuIHNuYXBP
ZmZzZXQuc25hcEFyZWFJbmRpY2VzLmZpbmRJZihbJl0gKGF1dG8gaW5kZXgpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgc25hcEFyZWEgPSBpbmZvLnNuYXBBcmVhc1tpbmRleF07CiAgICAgICAgIGF1
dG8gW290aGVyQXhpc01pbiwgb3RoZXJBeGlzTWF4XSA9IHJhbmdlRm9yQXhpczxVbml0VHlwZT4o
c25hcEFyZWEsIG90aGVyQXhpcyk7CiAgICAgICAgIHJldHVybiAoc2Nyb2xsRGVzdGluYXRpb25J
bk90aGVyQXhpcyArIHZpZXdwb3J0TGVuZ3RoSW5PdGhlckF4aXMpID4gb3RoZXJBeGlzTWluICYm
IHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgPCBvdGhlckF4aXNNYXg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3Bw
CShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFNjcm9s
bGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZChTY3JvCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9z
Y3JvbGxpbmdUcmVlLmluQ29tbWl0VHJlZVN0YXRlKCkpOwogCi0gICAgc2l6ZV90IGluZGV4ID0g
bV9jaGlsZHJlbi5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGNoaWxkKSB7CisgICAgc2l6ZV90IGlu
ZGV4ID0gbV9jaGlsZHJlbi5maW5kSWYoWyZdKGF1dG8mIGNoaWxkKSB7CiAgICAgICAgIHJldHVy
biAmbm9kZSA9PSBjaGlsZC5wdHIoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzgzLDcgKzc4Myw3IEBAIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRJbWFnZU0KIHsKICAgICBhdXRvIGFsbG93ZWRNSU1F
VHlwZXMgPSBNSU1FVHlwZVJlZ2lzdHJ5OjphbGxvd2VkTUlNRVR5cGVzKG1pbWVUeXBlcywgZXh0
ZW5zaW9ucyk7CiAKLSAgICBhdXRvIHBvc2l0aW9uID0gYWxsb3dlZE1JTUVUeXBlcy5maW5kTWF0
Y2hpbmcoW10oY29uc3QgYXV0byYgbWltZVR5cGUpIHsKKyAgICBhdXRvIHBvc2l0aW9uID0gYWxs
b3dlZE1JTUVUeXBlcy5maW5kSWYoW10oY29uc3QgYXV0byYgbWltZVR5cGUpIHsKICAgICAgICAg
cmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKTsKICAgICB9KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6d3JpdGVT
dHJpbmdJbgogCiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6RW50cnkmIFBhc3RlYm9hcmRDdXN0b21E
YXRhOjphZGRPck1vdmVFbnRyeVRvRW5kKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBhdXRv
IGluZGV4ID0gbV9kYXRhLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVudHJ5KSB7CisgICAgYXV0
byBpbmRleCA9IG1fZGF0YS5maW5kSWYoWyZdIChhdXRvJiBlbnRyeSkgewogICAgICAgICByZXR1
cm4gZW50cnkudHlwZSA9PSB0eXBlOwogICAgIH0pOwogICAgIGF1dG8gZW50cnkgPSBpbmRleCA9
PSBub3RGb3VuZCA/IEVudHJ5KHR5cGUpIDogbV9kYXRhW2luZGV4XTsKQEAgLTE4OSw3ICsxODks
NyBAQCBib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNEYXRhKCkgY29uCiAKIGJvb2wgUGFz
dGVib2FyZEN1c3RvbURhdGE6Omhhc1NhbWVPcmlnaW5DdXN0b21EYXRhKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbm90Rm91bmQgIT0gbV9kYXRhLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVudHJ5
KSB7CisgICAgcmV0dXJuIG5vdEZvdW5kICE9IG1fZGF0YS5maW5kSWYoWyZdIChhdXRvJiBlbnRy
eSkgewogICAgICAgICByZXR1cm4gIWVudHJ5LmN1c3RvbURhdGEuaXNOdWxsKCk7CiAgICAgfSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2Fy
ZENvY29hLm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFBh
c3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICAgICAgaWYgKCFpdGVt
cykKICAgICAgICAgICAgIHJldHVybiBGaWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0
YTsKIAotICAgICAgICBtYXlDb250YWluRmlsZVBhdGhzID0gaXRlbXMtPnNpemUoKSAhPSAxIHx8
IG5vdEZvdW5kICE9IGl0ZW1zLT5maW5kTWF0Y2hpbmcoW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgbWF5Q29udGFpbkZpbGVQYXRocyA9IGl0ZW1zLT5zaXplKCkgIT0gMSB8fCBub3RGb3VuZCAh
PSBpdGVtcy0+ZmluZElmKFtdIChhdXRvJiBpdGVtKSB7CiAgICAgICAgICAgICByZXR1cm4gaXRl
bS5jYW5CZVRyZWF0ZWRBc0F0dGFjaG1lbnRPckZpbGUoKSB8fCBpdGVtLmlzTm9uVGV4dFR5cGUg
fHwgaXRlbS5jb250YWluc0ZpbGVVUkxBbmRGaWxlVXBsb2FkQ29udGVudDsKICAgICAgICAgfSk7
CiAgICAgfQpAQCAtMTU4LDEwICsxNTgsMTAgQEAgUGFzdGVib2FyZDo6RmlsZUNvbnRlbnRTdGF0
ZSBQYXN0ZWJvYXJkOgogICAgIGlmICghbWF5Q29udGFpbkZpbGVQYXRocykgewogICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOwogICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1fcGFzdGVib2FyZE5h
bWUsIGNvbnRleHQoKSk7Ci0gICAgICAgIGlmIChjb2NvYVR5cGVzLmZpbmRNYXRjaGluZyhbXShj
b25zdCBTdHJpbmcmIGNvY29hVHlwZSkgeyByZXR1cm4gc2hvdWxkVHJlYXRDb2NvYVR5cGVBc0Zp
bGUoY29jb2FUeXBlKTsgfSkgPT0gbm90Rm91bmQpCisgICAgICAgIGlmIChjb2NvYVR5cGVzLmZp
bmRJZihbXShjb25zdCBTdHJpbmcmIGNvY29hVHlwZSkgeyByZXR1cm4gc2hvdWxkVHJlYXRDb2Nv
YVR5cGVBc0ZpbGUoY29jb2FUeXBlKTsgfSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1
cm4gRmlsZUNvbnRlbnRTdGF0ZTo6Tm9GaWxlT3JJbWFnZURhdGE7CiAKLSAgICAgICAgYXV0byBp
bmRleE9mVVJMID0gY29jb2FUeXBlcy5maW5kTWF0Y2hpbmcoW10oYXV0byYgY29jb2FUeXBlKSB7
CisgICAgICAgIGF1dG8gaW5kZXhPZlVSTCA9IGNvY29hVHlwZXMuZmluZElmKFtdKGF1dG8mIGNv
Y29hVHlwZSkgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIGlmIChjb2NvYVR5cGUg
PT0gU3RyaW5nKGxlZ2FjeVVSTFBhc3RlYm9hcmRUeXBlKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVByb3h5LmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMDksNyArMTEwLDcgQEAgYm9vbCBLZXlIYW5kbGU6OnRha2VW
YWx1ZUlmRGlmZmVyZW50KEtleQogCiBib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0
IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKKyAgICByZXR1cm4g
bV9rZXlzLmZpbmRJZihbJl0oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewog
ICAgICAgICByZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKICAgICB9KSAhPSBub3RGb3VuZDsK
IH0KQEAgLTE0OSw3ICsxNTAsNyBAQCBib29sIEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQ
dHI8S2V5CiBib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleUhhbmRsZT4mJiBrZXkpCiB7CiAg
ICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOwotICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hp
bmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eCA9IG1fa2V5cy5maW5kSWYoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5
KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CiAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBEaXNwbGF5
UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpkaXNwbAogCiBzaXplX3QgRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlcjo6ZmluZE1vbml0b3JGb3JEaXNwbGF5SUQoUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKSBjb25zdAogewotICAgIHJldHVybiBtX21vbml0b3JzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgbW9uaXRvcldyYXBwZXIpIHsKKyAgICByZXR1cm4gbV9tb25pdG9ycy5maW5kSWYoWyZd
KGF1dG8mIG1vbml0b3JXcmFwcGVyKSB7CiAgICAgICAgIHJldHVybiBtb25pdG9yV3JhcHBlci5t
b25pdG9yLT5kaXNwbGF5SUQoKSA9PSBkaXNwbGF5SUQ7CiAgICAgfSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVW
Q1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzcsNyArMjM3LDcgQEAgU3RyaW5n
IGNyZWF0ZUhFVkNDb2RlY1BhcmFtZXRlcnNTdHJpbmcoYwogICAgIC8vIGdlbmVyYWxfcHJvZ3Jl
c3NpdmVfc291cmNlX2ZsYWcsIGVhY2ggZW5jb2RlZCBhcyBhIGhleGFkZWNpbWFsIG51bWJlciwg
YW5kIHRoZSBlbmNvZGluZwogICAgIC8vIG9mIGVhY2ggYnl0ZSBzZXBhcmF0ZWQgYnkgYSBwZXJp
b2Q7IHRyYWlsaW5nIGJ5dGVzIHRoYXQgYXJlIHplcm8gbWF5IGJlIG9taXR0ZWQuCiAgICAgU3Ry
aW5nQnVpbGRlciBjb21wYXRpYmlsaXR5RmxhZ3M7Ci0gICAgYXV0byBsYXN0RmxhZ0J5dGUgPSBw
YXJhbWV0ZXJzLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MucmV2ZXJzZUZpbmRNYXRj
aGluZyhbXSAoYXV0byYgZmxhZykgeyByZXR1cm4gZmxhZzsgfSk7CisgICAgYXV0byBsYXN0Rmxh
Z0J5dGUgPSBwYXJhbWV0ZXJzLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MucmV2ZXJz
ZUZpbmRJZihbXSAoYXV0byYgZmxhZykgeyByZXR1cm4gZmxhZzsgfSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGxhc3RGbGFnQnl0ZSAhPSBub3RGb3VuZCAmJiBpIDw9IGxhc3RGbGFnQnl0ZTsg
KytpKSB7CiAgICAgICAgIGNvbXBhdGliaWxpdHlGbGFncy5hcHBlbmQoJy4nKTsKICAgICAgICAg
Y29tcGF0aWJpbGl0eUZsYWdzLmFwcGVuZChoZXgocGFyYW1ldGVycy5nZW5lcmFsQ29uc3RyYWlu
dEluZGljYXRvckZsYWdzW2ldLCAyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMzIsNyArMzMyLDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRp
YVBsYXllcgogY29uc3QgTWVkaWFQbGF5ZXJGYWN0b3J5KiBNZWRpYVBsYXllcjo6bWVkaWFFbmdp
bmUoTWVkaWFQbGF5ZXJFbnVtczo6TWVkaWFFbmdpbmVJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7
CiAgICAgYXV0byYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOwotICAgIGF1dG8g
Y3VycmVudEluZGV4ID0gZW5naW5lcy5maW5kTWF0Y2hpbmcoW2lkZW50aWZpZXJdIChhdXRvJiBl
bmdpbmUpIHsKKyAgICBhdXRvIGN1cnJlbnRJbmRleCA9IGVuZ2luZXMuZmluZElmKFtpZGVudGlm
aWVyXSAoYXV0byYgZW5naW5lKSB7CiAgICAgICAgIHJldHVybiBlbmdpbmUtPmlkZW50aWZpZXIo
KSA9PSBpZGVudGlmaWVyOwogICAgIH0pOwogCkBAIC0zOTMsNyArMzkzLDcgQEAgY29uc3QgTWVk
aWFQbGF5ZXJGYWN0b3J5KiBNZWRpYVBsYXllcjo6bgogICAgIGlmICghY3VycmVudCkgCiAgICAg
ICAgIHJldHVybiBlbmdpbmVzLmZpcnN0KCkuZ2V0KCk7CiAKLSAgICBhdXRvIGN1cnJlbnRJbmRl
eCA9IGVuZ2luZXMuZmluZE1hdGNoaW5nKFtjdXJyZW50XSAoYXV0byYgZW5naW5lKSB7CisgICAg
YXV0byBjdXJyZW50SW5kZXggPSBlbmdpbmVzLmZpbmRJZihbY3VycmVudF0gKGF1dG8mIGVuZ2lu
ZSkgewogICAgICAgICByZXR1cm4gZW5naW5lLmdldCgpID09IGN1cnJlbnQ7CiAgICAgfSk7CiAg
ICAgaWYgKGN1cnJlbnRJbmRleCA9PSBub3RGb3VuZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakMubW0JKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4NSw3ICs1ODUsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25G
YWlyUGxheVN0cmVhbWluZ0FWRk9iCiAKICAgICAgICAgYXV0byBzZXNzaW9uS2V5cyA9IHNlc3Np
b25JbnRlcmZhY2UtPmtleUlEcygpOwogICAgICAgICBpZiAoYW55T2Yoc2Vzc2lvbktleXMsIFsm
XShjb25zdCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIHNlc3Npb25LZXkpIHsKLSAgICAg
ICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWY8RnJhZ21lbnRl
ZFNoYXJlZEJ1ZmZlcj4mIGtleUlEKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRJ
ZihbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBrZXlJRCkgewogICAgICAg
ICAgICAgICAgIHJldHVybiBrZXlJRC5nZXQoKSA9PSBzZXNzaW9uS2V5LmdldCgpOwogICAgICAg
ICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAgIH0pKQpAQCAtNTk2LDcgKzU5Niw3IEBAIENE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2IKIAogQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDKiBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c2Vzc2lvbkZvclJlcXVlc3QoQVZDb250ZW50S2V5UmVxdWVzdCogcmVxdWVzdCkg
Y29uc3QKIHsKLSAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kTWF0Y2hpbmcoWyZdIChh
dXRvIHNlc3Npb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kSWYoWyZdIChh
dXRvIHNlc3Npb24pIHsKICAgICAgICAgcmV0dXJuIHNlc3Npb24gJiYgc2Vzc2lvbi0+aGFzUmVx
dWVzdChyZXF1ZXN0KTsKICAgICB9KTsKIApAQCAtNjA4LDcgKzYwOCw3IEBAIENETUluc3RhbmNl
U2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2IKIAogQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDKiBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6
c2Vzc2lvbkZvckdyb3VwKEFWQ29udGVudEtleVJlcG9ydEdyb3VwKiBncm91cCkgY29uc3QKIHsK
LSAgICBhdXRvIGluZGV4ID0gbV9zZXNzaW9ucy5maW5kTWF0Y2hpbmcoW2dyb3VwXSAoYXV0byBz
ZXNzaW9uKSB7CisgICAgYXV0byBpbmRleCA9IG1fc2Vzc2lvbnMuZmluZElmKFtncm91cF0gKGF1
dG8gc2Vzc2lvbikgewogICAgICAgICByZXR1cm4gc2Vzc2lvbiAmJiBzZXNzaW9uLT5jb250ZW50
S2V5UmVwb3J0R3JvdXAoKSA9PSBncm91cDsKICAgICB9KTsKIApAQCAtODUzLDkgKzg1Myw5IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmcKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShXVEZNb3ZlKCprZXlJRFZlY3RvcikpOwotICAgICAgICAgICAgYXV0byBmb3VuZElu
ZGV4ID0gbV9jdXJyZW50UmVxdWVzdC52YWx1ZSgpLnJlcXVlc3RzLmZpbmRNYXRjaGluZyhbJl0g
KGF1dG8mIHJlcXVlc3QpIHsKKyAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVu
dFJlcXVlc3QudmFsdWUoKS5yZXF1ZXN0cy5maW5kSWYoWyZdIChhdXRvJiByZXF1ZXN0KSB7CiAg
ICAgICAgICAgICAgICAgYXV0byBrZXlJRHMgPSBrZXlJRHNGb3JSZXF1ZXN0KHJlcXVlc3QuZ2V0
KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZE1hdGNoaW5nKFsmXShjb25z
dCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGtleUlEcy5maW5kSWYoWyZdKGNvbnN0IFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYg
aWQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkLmdldCgpID09IGtleUlELmdldCgp
OwogICAgICAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOwogICAgICAgICAgICAgfSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MDc5LDcgKzEwNzksNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2hvdWxkUmVwYWludE9uU2l6
CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjphbmltYXRpb25Jc1J1bm5pbmcoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKSBjb25zdAogewotICAgIGF1dG8gaW5kZXggPSBtX2FuaW1hdGlvbnMu
ZmluZE1hdGNoaW5nKFsmXShMYXllclByb3BlcnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAg
IGF1dG8gaW5kZXggPSBtX2FuaW1hdGlvbnMuZmluZElmKFsmXShMYXllclByb3BlcnR5QW5pbWF0
aW9uIGFuaW1hdGlvbikgewogICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm1fbmFtZSA9PSBhbmlt
YXRpb25OYW1lOwogICAgIH0pOwogICAgIHJldHVybiBpbmRleCAhPSBub3RGb3VuZCAmJiBtX2Fu
aW1hdGlvbnNbaW5kZXhdLm1fcGxheVN0YXRlID09IFBsYXlTdGF0ZTo6UGxheWluZzsKQEAgLTEy
MDYsNyArMTIwNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmkK
IHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xh
eWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7CiAKLSAgICBhdXRv
IGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRNYXRjaGluZyhbJl0oTGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbiBhbmltYXRpb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRJZihb
Jl0oTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiBhbmltYXRpb24pIHsKICAgICAgICAgcmV0dXJuIGFu
aW1hdGlvbi5hbmltYXRpb25JZGVudGlmaWVyKCkgPT0gYW5pbWF0aW9uS2V5ICYmICFhbmltYXRp
b24ubV9iZWdpblRpbWU7CiAgICAgfSk7CiAKQEAgLTMzMDMsNyArMzMwMyw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjp1cGRhdGVBbmltYXRpb25zKCkKIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6
OmlzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYW5p
bWF0aW9ucy5maW5kTWF0Y2hpbmcoWyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0aW9u
KSB7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9ucy5maW5kSWYoWyZdKExheWVyUHJvcGVydHlBbmlt
YXRpb24gYW5pbWF0aW9uKSB7CiAgICAgICAgIHJldHVybiBhbmltYXRlZFByb3BlcnR5SXNUcmFu
c2Zvcm1PclJlbGF0ZWQoYW5pbWF0aW9uLm1fcHJvcGVydHkpICYmIChhbmltYXRpb24ubV9wbGF5
U3RhdGUgPT0gUGxheVN0YXRlOjpQbGF5aW5nIHx8IGFuaW1hdGlvbi5tX3BsYXlTdGF0ZSA9PSBQ
bGF5U3RhdGU6OlBhdXNlZCk7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg0Nyw3ICs4NDcsNyBAQCBib29sIEZvbnQ6Omlz
UHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvCiAgICAgVmVjdG9yPENHUmVjdD4gYm91bmRpbmdS
ZWN0czsKICAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhzLnNpemUoKSk7
CiAgICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZv
bnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGluZ1JlY3RzLmJlZ2lu
KCksIGdseXBocy5zaXplKCkpOwotICAgIHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3Rz
LmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJv
dW5kaW5nUmVjdHMuZmluZElmKFtdKGF1dG8mIHJlY3QpIHsKICAgICAgICAgcmV0dXJuICFDR1Jl
Y3RJc0VtcHR5KHJlY3QpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRF
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBHTENvbnRleHRF
R0w6OmdldEVHTENvbmZpZyhFR0xEaXNwbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgYXV0byBpbmRleCA9IGNvbmZpZ3MuZmluZE1hdGNoaW5nKFsmXShFR0xDb25maWcgdmFs
dWUpIHsKKyAgICBhdXRvIGluZGV4ID0gY29uZmlncy5maW5kSWYoWyZdKEVHTENvbmZpZyB2YWx1
ZSkgewogICAgICAgICBFR0xpbnQgcmVkU2l6ZSwgZ3JlZW5TaXplLCBibHVlU2l6ZSwgYWxwaGFT
aXplOwogICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlzcGxheSwgdmFsdWUsIEVHTF9SRURf
U0laRSwgJnJlZFNpemUpOwogICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlzcGxheSwgdmFs
dWUsIEVHTF9HUkVFTl9TSVpFLCAmZ3JlZW5TaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJSZWdpc3RyeVNjYW5uZXIuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2Fu
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDE0ICs1NjEsMTQgQEAgTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlIEdTdHJlYW1lcgogICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6
IGNvZGVjcykgewogICAgICAgICBhdXRvIGNvZGVjID0gaXRlbS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgICAgICBib29sIHJlcXVpcmVzSGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5
cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0Ci0gICAgICAgICAgICAuZmluZE1hdGNoaW5nKFtj
b250YWluZXJUeXBlLCBjb2RlY10oYXV0byYgaGFyZHdhcmVDb250ZW50VHlwZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAuZmluZElmKFtjb250YWluZXJUeXBlLCBjb2RlY10oYXV0byYgaGFyZHdh
cmVDb250ZW50VHlwZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBhdXRvIGhhcmR3YXJlQ29udGFp
bmVyID0gaGFyZHdhcmVDb250ZW50VHlwZS5jb250YWluZXJUeXBlKCk7CiAgICAgICAgICAgICBp
ZiAoIWhhcmR3YXJlQ29udGFpbmVyLmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICYmIGZubWF0
Y2goaGFyZHdhcmVDb250YWluZXIudXRmOCgpLmRhdGEoKSwgY29udGFpbmVyVHlwZS51dGY4KCku
ZGF0YSgpLCAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBh
dXRvIGhhcmR3YXJlQ29kZWNzID0gaGFyZHdhcmVDb250ZW50VHlwZS5jb2RlY3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBoYXJkd2FyZUNvZGVjcy5pc0VtcHR5KCkKLSAgICAgICAgICAgICAgICB8
fCBoYXJkd2FyZUNvZGVjcy5maW5kTWF0Y2hpbmcoW2NvZGVjXShhdXRvJiBoYXJkd2FyZUNvZGVj
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICB8fCBoYXJkd2FyZUNvZGVjcy5maW5kSWYoW2Nv
ZGVjXShhdXRvJiBoYXJkd2FyZUNvZGVjKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICFmbm1hdGNoKGhhcmR3YXJlQ29kZWMudXRmOCgpLmRhdGEoKSwgY29kZWMudXRmOCgp
LmRhdGEoKSwgMCk7CiAgICAgICAgICAgICB9KSAhPSBub3RGb3VuZDsKICAgICAgICAgfSkgIT0g
bm90Rm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIENv
cHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICBD
b3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KICBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgQ29weXJpZ2h0IChDKSAy
MDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCkBAIC0xMzU5LDcgKzEzNTks
NyBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2CiAgICAgYm9vbCBp
c0ludmlzaWJsZUJlY2F1c2VPcGFjaXR5WmVybyA9ICFvcGFjaXR5KCkgJiYgIW1fYW5pbWF0aW9u
cy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBmaWx0ZXIgdGhhdCBzZXRzIHRoZSBvcGFjaXR5IHRv
IHplcm8uCi0gICAgYm9vbCBoYXNPcGFjaXR5WmVyb0ZpbHRlciA9IG5vdEZvdW5kICE9IGZpbHRl
cnMoKS5vcGVyYXRpb25zKCkuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBvcGVyYXRpb24p
IHsKKyAgICBib29sIGhhc09wYWNpdHlaZXJvRmlsdGVyID0gbm90Rm91bmQgIT0gZmlsdGVycygp
Lm9wZXJhdGlvbnMoKS5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIG9wZXJhdGlvbikgewogICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uLT50eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlOjpPUEFDSVRZICYmICFkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKS5hbW91bnQoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gMjg3NTc3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTUsNyArNDU1LDcgQEAgUGFzdGVib2FyZDo6RmlsZUNvbnRlbnRTdGF0
ZSBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgcmV0dXJuIEZpbGVDb250ZW50U3RhdGU6Ok1heUNv
bnRhaW5GaWxlUGF0aHM7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSB0eXBlcy5maW5kTWF0
Y2hpbmcoW10oY29uc3QgU3RyaW5nJiB0eXBlKSB7CisgICAgYXV0byByZXN1bHQgPSB0eXBlcy5m
aW5kSWYoW10oY29uc3QgU3RyaW5nJiB0eXBlKSB7CiAgICAgICAgIHJldHVybiBNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSk7CiAgICAgfSk7CiAgICAgcmV0
dXJuIHJlc3VsdCA9PSBub3RGb3VuZCA/IEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1hZ2VE
YXRhIDogRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgJ
KHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L0NhcHR1cmVEZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTQsNyArMTU0LDcgQEAgaW5saW5lIGJv
b2wgaGF2ZURldmljZXNDaGFuZ2VkKGNvbnN0IFZlYwogICAgICAgICBpZiAobmV3RGV2aWNlLnR5
cGUoKSAhPSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEgJiYgbmV3RGV2aWNlLnR5
cGUoKSAhPSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IG9sZERldmljZXMuZmluZE1hdGNo
aW5nKFsmbmV3RGV2aWNlXShhdXRvJiBvbGREZXZpY2UpIHsKKyAgICAgICAgYXV0byBpbmRleCA9
IG9sZERldmljZXMuZmluZElmKFsmbmV3RGV2aWNlXShhdXRvJiBvbGREZXZpY2UpIHsKICAgICAg
ICAgICAgIHJldHVybiBuZXdEZXZpY2UucGVyc2lzdGVudElkKCkgPT0gb2xkRGV2aWNlLnBlcnNp
c3RlbnRJZCgpICYmIG5ld0RldmljZS5lbmFibGVkKCkgIT0gb2xkRGV2aWNlLmVuYWJsZWQoKTsK
ICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhQ29uc3RyYWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChtX21pbikgewotICAgICAgICAgICAgYXV0byBpbmRleCA9IGRpc2NyZXRlQ2FwYWJp
bGl0eVZhbHVlcy5maW5kTWF0Y2hpbmcoWyZdKFZhbHVlVHlwZSB2YWx1ZSkgeyByZXR1cm4gbV9t
aW4udmFsdWUoKSA+PSB2YWx1ZTsgfSk7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gZGlzY3Jl
dGVDYXBhYmlsaXR5VmFsdWVzLmZpbmRJZihbJl0oVmFsdWVUeXBlIHZhbHVlKSB7IHJldHVybiBt
X21pbi52YWx1ZSgpID49IHZhbHVlOyB9KTsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSBub3RG
b3VuZCkgewogICAgICAgICAgICAgICAgIG1pbiA9IHZhbHVlID0gZGlzY3JldGVDYXBhYmlsaXR5
VmFsdWVzW2luZGV4XTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
TWVkaWFTdHJlYW1Tb3VyY2UuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBXZWJLaXRNZWRp
YVN0cmVhbU9ic2VydmVyOjpkaWRSZW1vdgogICAgIGF1dG8qIHByaXYgPSBlbGVtZW50LT5wcml2
OwogCiAgICAgLy8gTG9va3VwIHRoZSBjb3JyZXNwb25kaW5nIEludGVybmFsU291cmNlIGFuZCB0
YWtlIGl0IGZyb20gdGhlIHN0b3JhZ2UuCi0gICAgYXV0byBpbmRleCA9IHByaXYtPnNvdXJjZXMu
ZmluZE1hdGNoaW5nKFsmXShhdXRvJiBpdGVtKSB7CisgICAgYXV0byBpbmRleCA9IHByaXYtPnNv
dXJjZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLT50cmFj
aygpLmlkKCkgPT0gdHJhY2suaWQoKTsKICAgICB9KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxTb3VyY2U+IHNvdXJjZSA9IFdURk1vdmUocHJpdi0+c291cmNlc1tpbmRleF0pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJl
U291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQkocmV2aXNpb24gMjg3NTc3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjE5LDcgKzYxOSw3IEBAIHZvaWQgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OmdlbmVyYXRlUHJlc2UKIAogICAgICAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1l
bnNpb25zID0gUEFMOjpDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zKGZvcm1h
dC5mb3JtYXREZXNjcmlwdGlvbik7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IHsgZGltZW5zaW9u
cy53aWR0aCwgZGltZW5zaW9ucy5oZWlnaHQgfTsKLSAgICAgICAgYXV0byBpbmRleCA9IHByZXNl
dHMuZmluZE1hdGNoaW5nKFsmc2l6ZV0oYXV0byYgcHJlc2V0KSB7CisgICAgICAgIGF1dG8gaW5k
ZXggPSBwcmVzZXRzLmZpbmRJZihbJnNpemVdKGF1dG8mIHByZXNldCkgewogICAgICAgICAgICAg
cmV0dXJuIHNpemUgPT0gcHJlc2V0LT5zaXplOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKGlu
ZGV4ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQSGVhZGVyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTYw
LDcgKzYxLDcgQEAgU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldChjb25zdCBTdHJpbmcmIAogCiBT
dHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0VW5jb21tb25IZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAogewotICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX3VuY29tbW9uSGVhZGVy
cy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAgICB9KTsKICAgICByZXR1cm4gaW5kZXgg
IT0gbm90Rm91bmQgPyBtX3VuY29tbW9uSGVhZGVyc1tpbmRleF0udmFsdWUgOiBTdHJpbmcoKTsK
QEAgLTEwMCw3ICsxMDEsNyBAQCB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldChjb25zdCBTdHJpbmcm
IG5hCiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6c2V0VW5jb21tb25IZWFkZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8gaW5kZXggPSBtX3VuY29t
bW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5k
ZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAgICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAgICB9
KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCkBAIC0xMTYsNyArMTE3LDcgQEAgdm9pZCBI
VFRQSGVhZGVyTWFwOjphZGQoY29uc3QgU3RyaW5nJiBuYQogICAgICAgICBhZGQoaGVhZGVyTmFt
ZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGF1dG8gaW5kZXggPSBtX3Vu
Y29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8g
aW5kZXggPSBtX3VuY29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRlcikgewogICAg
ICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShoZWFkZXIua2V5LCBuYW1lKTsKICAg
ICB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCkBAIC0xNTEsNyArMTUyLDcgQEAgYm9v
bCBIVFRQSGVhZGVyTWFwOjpjb250YWlucyhjb25zdCBTdHJpbgogICAgIGlmIChmaW5kSFRUUEhl
YWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpCiAgICAgICAgIHJldHVybiBjb250YWlucyhoZWFk
ZXJOYW1lKTsKIAotICAgIHJldHVybiBtX3VuY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZd
KGF1dG8mIGhlYWRlcikgeworICAgIHJldHVybiBtX3VuY29tbW9uSGVhZGVycy5maW5kSWYoWyZd
KGF1dG8mIGhlYWRlcikgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSho
ZWFkZXIua2V5LCBuYW1lKTsKICAgICB9KSAhPSBub3RGb3VuZDsKIH0KQEAgLTE2OSw3ICsxNzAs
NyBAQCBib29sIEhUVFBIZWFkZXJNYXA6OnJlbW92ZShjb25zdCBTdHJpbmcmCiAKIFN0cmluZyBI
VFRQSGVhZGVyTWFwOjpnZXQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKIHsKLSAgICBhdXRv
IGluZGV4ID0gbV9jb21tb25IZWFkZXJzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaGVhZGVyKSB7
CisgICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVhZGVycy5maW5kSWYoWyZdKGF1dG8mIGhlYWRl
cikgewogICAgICAgICByZXR1cm4gaGVhZGVyLmtleSA9PSBuYW1lOwogICAgIH0pOwogICAgIHJl
dHVybiBpbmRleCAhPSBub3RGb3VuZCA/IG1fY29tbW9uSGVhZGVyc1tpbmRleF0udmFsdWUgOiBT
dHJpbmcoKTsKQEAgLTE3Nyw3ICsxNzgsNyBAQCBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KEhU
VFBIZWFkZXJOYW1lCiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6c2V0KEhUVFBIZWFkZXJOYW1lIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVh
ZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBt
X2NvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJu
IGhlYWRlci5rZXkgPT0gbmFtZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQp
CkBAIC0xODgsNyArMTg5LDcgQEAgdm9pZCBIVFRQSGVhZGVyTWFwOjpzZXQoSFRUUEhlYWRlck5h
bWUgbgogCiBib29sIEhUVFBIZWFkZXJNYXA6OmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lIG5hbWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29tbW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1
dG8mIGhlYWRlcikgeworICAgIHJldHVybiBtX2NvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRv
JiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlci5rZXkgPT0gbmFtZTsKICAgICB9KSAh
PSBub3RGb3VuZDsKIH0KQEAgLTIwMiw3ICsyMDMsNyBAQCBib29sIEhUVFBIZWFkZXJNYXA6OnJl
bW92ZShIVFRQSGVhZGVyTmFtCiAKIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRkKEhUVFBIZWFkZXJO
YW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29t
bW9uSGVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5k
ZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAg
cmV0dXJuIGhlYWRlci5rZXkgPT0gbmFtZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggIT0gbm90
Rm91bmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0
ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Bl
bnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNyArNjUsNyBAQCB2b2lkIE9wZW5YUkV4dGVuc2lv
bnM6OmxvYWRNZXRob2RzKFhySW5zCiAKIGJvb2wgT3BlblhSRXh0ZW5zaW9uczo6aXNFeHRlbnNp
b25TdXBwb3J0ZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIHBvc2l0aW9u
ID0gbV9leHRlbnNpb25zLmZpbmRNYXRjaGluZyhbbmFtZV0oYXV0byYgcHJvcGVydHkpIHsKKyAg
ICBhdXRvIHBvc2l0aW9uID0gbV9leHRlbnNpb25zLmZpbmRJZihbbmFtZV0oYXV0byYgcHJvcGVy
dHkpIHsKICAgICAgICAgcmV0dXJuICFzdHJjbXAocHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgbmFt
ZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uICE9IG5vdEZvdW5kOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTMxLDcg
KzEzMSw3IEBAIHByb3RlY3RlZDoKIAogaW5saW5lIGJvb2wgaXNTdXBwb3J0ZWRQbHVnaW4oY29u
c3QgVmVjdG9yPFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+JiBwbHVnaW5JZGVudGlmaWVycywg
Y29uc3QgVVJMJiBwYWdlVVJMLCBjb25zdCBTdHJpbmcmIHBsdWdpbklkZW50aWZpZXIpCiB7Ci0g
ICAgcmV0dXJuIHBsdWdpbklkZW50aWZpZXJzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mJiBwbHVn
aW4pIHsKKyAgICByZXR1cm4gcGx1Z2luSWRlbnRpZmllcnMuZmluZElmKFsmXSAoYXV0byYmIHBs
dWdpbikgewogICAgICAgICByZXR1cm4gcGFnZVVSTC5pc01hdGNoaW5nRG9tYWluKHBsdWdpbi5t
YXRjaGluZ0RvbWFpbikgJiYgcGx1Z2luLnBsdWdpbklkZW50aWZpZXIgPT0gcGx1Z2luSWRlbnRp
ZmllcjsKICAgICB9KSAhPSBub3RGb3VuZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVDRE1GYWN0b3J5UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1GYWN0b3J5UHJveHkuY3BwCShyZXZp
c2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RN
RmFjdG9yeVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIFJlbW90ZUNETUZh
Y3RvcnlQcm94eTo6flJlbW90ZUNETUZhY3RvcnkKIHN0YXRpYyBDRE1GYWN0b3J5KiBmYWN0b3J5
Rm9yS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogewogICAgIGF1dG8mIGZhY3Rv
cmllcyA9IENETUZhY3Rvcnk6OnJlZ2lzdGVyZWRGYWN0b3JpZXMoKTsKLSAgICBhdXRvIGZvdW5k
SW5kZXggPSBmYWN0b3JpZXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZmFjdG9yeSkgeyByZXR1
cm4gZmFjdG9yeS0+c3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKTsgfSk7CisgICAgYXV0byBm
b3VuZEluZGV4ID0gZmFjdG9yaWVzLmZpbmRJZihbJl0gKGF1dG8mIGZhY3RvcnkpIHsgcmV0dXJu
IGZhY3RvcnktPnN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSk7IH0pOwogICAgIGlmIChmb3Vu
ZEluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4g
ZmFjdG9yaWVzW2ZvdW5kSW5kZXhdOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEzMywxNCAr
MTEzMywxNCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdG9wCiAKIHNp
emVfdCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJvb3ROZXR3b3JrQWN0aXZp
dHkoUGFnZUlkZW50aWZpZXIgcGFnZUlEKQogewotICAgIHJldHVybiBtX25ldHdvcmtBY3Rpdml0
eVRyYWNrZXJzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeworICAgIHJldHVy
biBtX25ldHdvcmtBY3Rpdml0eVRyYWNrZXJzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkg
ewogICAgICAgICByZXR1cm4gaXRlbS5pc1Jvb3RBY3Rpdml0eSAmJiBpdGVtLnBhZ2VJRCA9PSBw
YWdlSUQ7CiAgICAgfSk7CiB9CiAKIHNpemVfdCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZmluZE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJJZGVu
dGlmaWVyIHJlc291cmNlSUQpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya0FjdGl2aXR5VHJhY2tl
cnMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIG1fbmV0
d29ya0FjdGl2aXR5VHJhY2tlcnMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAg
ICAgIHJldHVybiBpdGVtLnJlc291cmNlSUQgPT0gcmVzb3VyY2VJRDsKICAgICB9KTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIENhY2hlOjpzdG9yZVJlY29y
ZHMoVmVjdG9yPFJlY29yZD4mCiAgICAgICAgIGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gcmVjb3Jk
c0Zyb21VUkwocmVjb3JkLnJlcXVlc3QudXJsKCkpOwogICAgICAgICBhdXRvIG1hdGNoaW5nUmVj
b3JkcyA9IHF1ZXJ5Q2FjaGUoc2FtZVVSTFJlY29yZHMsIHJlY29yZC5yZXF1ZXN0LCBvcHRpb25z
KTsKIAotICAgICAgICBhdXRvIHBvc2l0aW9uID0gIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkg
PyBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5k
OworICAgICAgICBhdXRvIHBvc2l0aW9uID0gIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkgPyBz
YW1lVVJMUmVjb3Jkcy0+ZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVt
LmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5kOwogCiAgICAg
ICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkgewogICAgICAgICAgICAgcmVjb3JkLmlkZW50
aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CkBAIC00MzgsNyArNDM4LDcgQEAgdm9p
ZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcwogICAgICAgICBhdXRvKiBzYW1l
VVJMUmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKICAgICAg
ICAgYXV0byBtYXRjaGluZ1JlY29yZHMgPSBxdWVyeUNhY2hlKHNhbWVVUkxSZWNvcmRzLCByZWNv
cmQucmVxdWVzdCwgb3B0aW9ucyk7CiAKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IChzYW1lVVJM
UmVjb3JkcyAmJiAhbWF0Y2hpbmdSZWNvcmRzLmlzRW1wdHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+
ZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZp
ZXIgPT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5kOworICAgICAgICBhdXRvIHBv
c2l0aW9uID0gKHNhbWVVUkxSZWNvcmRzICYmICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0eSgpKSA/
IHNhbWVVUkxSZWNvcmRzLT5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0uaWRlbnRpZmllciA9PSBtYXRjaGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91bmQ7CiAKICAg
ICAgICAgc3BhY2VSZXF1aXJlZCArPSByZWNvcmQucmVzcG9uc2VCb2R5U2l6ZTsKICAgICAgICAg
aWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBDYWNo
ZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdQogICAgIH0KIAogICAgIHJlY29yZHMtPnJl
bW92ZUFsbE1hdGNoaW5nKFt0aGlzLCAmcmVjb3JkSWRlbnRpZmllcnNdKGF1dG8mIGl0ZW0pIHsK
LSAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSByZWNvcmRJZGVudGlmaWVycy5maW5kTWF0Y2hp
bmcoWyZpdGVtXShhdXRvIGlkZW50aWZpZXIpIHsgcmV0dXJuIGlkZW50aWZpZXIgPT0gaXRlbS5p
ZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZDsKKyAgICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBy
ZWNvcmRJZGVudGlmaWVycy5maW5kSWYoWyZpdGVtXShhdXRvIGlkZW50aWZpZXIpIHsgcmV0dXJu
IGlkZW50aWZpZXIgPT0gaXRlbS5pZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZDsKICAgICAgICAg
aWYgKHNob3VsZFJlbW92ZSkKICAgICAgICAgICAgIHRoaXMtPnJlbW92ZVJlY29yZEZyb21EaXNr
KGl0ZW0pOwogICAgICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlOwpAQCAtNDk5LDcgKzQ5OSw3IEBA
IHZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFYKICAgICBmb3IgKGF1dG8m
IHJlY29yZHMgOiBtX3JlY29yZHMudmFsdWVzKCkpIHsKICAgICAgICAgYXV0byogY2FjaGUgPSB0
aGlzOwogICAgICAgICByZWNvcmRzLnJlbW92ZUFsbE1hdGNoaW5nKFtjYWNoZSwgJnJlY29yZElk
ZW50aWZpZXJzXShjb25zdCBhdXRvJiBpdGVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gbm90Rm91
bmQgIT0gcmVjb3JkSWRlbnRpZmllcnMuZmluZE1hdGNoaW5nKFtjYWNoZSwgJml0ZW1dKGNvbnN0
IGF1dG8mIGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZCAhPSByZWNv
cmRJZGVudGlmaWVycy5maW5kSWYoW2NhY2hlLCAmaXRlbV0oY29uc3QgYXV0byYgaWRlbnRpZmll
cikgewogICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGNhY2hl
LT5yZW1vdmVSZWNvcmRGcm9tRGlzayhpdGVtKTsKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIENh
Y2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mCiAgICAgICAgIGlmICghc2FtZVVSTFJl
Y29yZHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNh
bWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVy
biBpdGVtLmlkZW50aWZpZXIgPT0gcmVjb3JkSWRlbnRpZmllcjsgfSk7CisgICAgICAgIGF1dG8g
cG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZElmKFsmXSAoY29uc3QgYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IHJlY29yZElkZW50aWZpZXI7IH0pOwogICAgICAg
ICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGF1dG8mIHJlY29yZEluZm8gPSBzYW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pOwpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjc5LDE3ICsyNzksMTcgQEAgdm9pZCBDYWNoZXM6OmNsZWFyUGVu
ZGluZ1dyaXRpbmdDYWNoZXNUbwogCiBDYWNoZSogQ2FjaGVzOjpmaW5kKGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBh
dXRvIHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLm5hbWUoKSA9PSBuYW1lOyB9KTsKICAgICByZXR1cm4gKHBvc2l0aW9uICE9IG5v
dEZvdW5kKSA/ICZtX2NhY2hlc1twb3NpdGlvbl0gOiBudWxscHRyOwogfQogCiBDYWNoZSogQ2Fj
aGVzOjpmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1f
Y2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5p
ZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fY2Fj
aGVzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVy
KCkgPT0gaWRlbnRpZmllcjsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm4gJm1fY2FjaGVzW3Bvc2l0aW9uXTsKIAotICAgIHBvc2l0aW9uID0gbV9yZW1v
dmVkQ2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CisgICAgcG9zaXRpb24gPSBtX3JlbW92
ZWRDYWNoZXMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50
aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKICAgICByZXR1cm4gKHBvc2l0aW9uICE9IG5vdEZv
dW5kKSA/ICZtX3JlbW92ZWRDYWNoZXNbcG9zaXRpb25dIDogbnVsbHB0cjsKIH0KIApAQCAtMzQ2
LDEwICszNDYsMTAgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZSh1aW50NjRfdCBpZGVudGlmaWVyLAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVy
KCkgPT0gaWRlbnRpZmllcjsgfSk7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRJ
ZihbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRl
bnRpZmllcjsgfSk7CiAKICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKLSAgICAgICAg
QVNTRVJUKG1fcmVtb3ZlZENhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0p
IHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5k
KTsKKyAgICAgICAgQVNTRVJUKG1fcmVtb3ZlZENhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pICE9IG5v
dEZvdW5kKTsKICAgICAgICAgY2FsbGJhY2soQ2FjaGVJZGVudGlmaWVyT3BlcmF0aW9uUmVzdWx0
IHsgMCwgZmFsc2UgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjgsMTIgKzM2OCwx
MiBAQCBib29sIENhY2hlczo6aGFzQWN0aXZlQ2FjaGUoKSBjb25zdAogewogICAgIGlmIChtX3Jl
bW92ZWRDYWNoZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9j
YWNoZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaXNB
Y3RpdmUoKTsgfSkgIT0gbm90Rm91bmQ7CisgICAgcmV0dXJuIG1fY2FjaGVzLmZpbmRJZihbXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlzQWN0aXZlKCk7IH0pICE9IG5vdEZvdW5k
OwogfQogCiB2b2lkIENhY2hlczo6ZGlzcG9zZShDYWNoZSYgY2FjaGUpCiB7Ci0gICAgYXV0byBw
b3NpdGlvbiA9IG1fcmVtb3ZlZENhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0
ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNhY2hlLmlkZW50aWZpZXIoKTsgfSk7
CisgICAgYXV0byBwb3NpdGlvbiA9IG1fcmVtb3ZlZENhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1
dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNhY2hlLmlkZW50aWZpZXIo
KTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChtX3N0
b3JhZ2UpCiAgICAgICAgICAgICBtX3N0b3JhZ2UtPnJlbW92ZShjYWNoZS5rZXlzKCksIFtdIHsg
fSk7CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hl
KQogICAgICAgICBtX3JlbW92ZWRDYWNoZXMucmVtb3ZlKHBvc2l0aW9uKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBBU1NFUlQobV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBh
dXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVy
KCk7IH0pICE9IG5vdEZvdW5kKTsKKyAgICBBU1NFUlQobV9jYWNoZXMuZmluZElmKFsmXShjb25z
dCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlm
aWVyKCk7IH0pICE9IG5vdEZvdW5kKTsKIAogICAgIC8vIFdlIGNhbm5vdCBjbGVhciB0aGUgbWVt
b3J5IHJlcHJlc2VudGF0aW9uIGluIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZSB3ZSB3b3VsZCBs
b29zZSBhbGwgZGF0YS4KICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhRm9ybWF0UmVhZGVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJv
dmlkZU1lZGlhRAogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKIAogICAgIExvY2tlciBs
b2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwotICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJh
Y2tSZWFkZXJzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgdHJhY2spIHsKKyAgICBhdXRvIHRyYWNr
SW5kZXggPSBtX3RyYWNrUmVhZGVycy5maW5kSWYoWyZdKGF1dG8mIHRyYWNrKSB7CiAgICAgICAg
IHJldHVybiB0cmFjay0+dHJhY2tJRCgpID09IHRyYWNrSUQ7CiAgICAgfSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ4LDcgKzQ4LDcgQEAgVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1lZAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0RGV2aWNlQXNGaXJzdChWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGRldmljZXMsIGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0g
ZGV2aWNlcy5maW5kTWF0Y2hpbmcoWyZkZXZpY2VJRF0oY29uc3QgYXV0byYgZGV2aWNlKSB7Cisg
ICAgc2l6ZV90IGluZGV4ID0gZGV2aWNlcy5maW5kSWYoWyZkZXZpY2VJRF0oY29uc3QgYXV0byYg
ZGV2aWNlKSB7CiAgICAgICAgIHJldHVybiBkZXZpY2UucGVyc2lzdGVudElkKCkgPT0gZGV2aWNl
SUQ7CiAgICAgfSk7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCShy
ZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzMCw3ICs0NjMwLDcgQEAgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfcmVtb3ZlX2ZyYW1lX2Rpc3BsYQogICAgIH07CiAKICAgICBpZiAod2Vi
Vmlldy0+cHJpdi0+aW5GcmFtZURpc3BsYXllZCkgewotICAgICAgICBhdXRvIGluZGV4ID0gd2Vi
Vmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5ZWRDYWxsYmFja3MuZmluZE1hdGNoaW5nKG1hdGNoRnVu
Y3Rpb24pOworICAgICAgICBhdXRvIGluZGV4ID0gd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5
ZWRDYWxsYmFja3MuZmluZElmKG1hdGNoRnVuY3Rpb24pOwogICAgICAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpCiAgICAgICAgICAgICB3ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENhbGxi
YWNrc1RvUmVtb3ZlLmFkZChpZCk7CiAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQko
cmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFz
dGVib2FyZFByb3h5Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgyLDcgKzY4Miw3IEBAIHN0ZDo6
b3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gV2ViUGFzdGVib2EKIAogdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OlBhc3RlYm9hcmRBY2Nlc3NJbmZvcm1hdGlvbjo6Z3JhbnRBY2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzLCBQYXN0ZWJvYXJkQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGF1dG8g
bWF0Y2hJbmRleCA9IHByb2Nlc3Nlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHByb2Nlc3NBbmRU
eXBlKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRJZihbJl0oYXV0byYg
cHJvY2Vzc0FuZFR5cGUpIHsKICAgICAgICAgcmV0dXJuIHByb2Nlc3NBbmRUeXBlLmZpcnN0ID09
ICZwcm9jZXNzOwogICAgIH0pOwogCkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OlBhc3RlYm9hcmRBY2NlcwogCiBzdGQ6Om9wdGlvbmFsPFdlYlBhc3RlYm9hcmRQ
cm94eTo6UGFzdGVib2FyZEFjY2Vzc1R5cGU+IFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2Fy
ZEFjY2Vzc0luZm9ybWF0aW9uOjphY2Nlc3NUeXBlKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vzcykg
Y29uc3QKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBwcm9jZXNzZXMuZmluZE1hdGNoaW5nKFsm
XShhdXRvJiBwcm9jZXNzQW5kVHlwZSkgeworICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb2Nlc3Nl
cy5maW5kSWYoWyZdKGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzQW5kVHlwZS5maXJzdCA9PSAmcHJvY2VzczsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQkocmV2aXNpb24gMjg3NTc3KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50
aWNhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgKICAgICAvLyBTdGVwIDggaXMgaW1wbGljaXRs
eSBjYXB0dXJlZCBieSBhbGwgVW5rbm93bkVycm9yIGV4Y2VwdGlvbiByZWNlaXZlUmVzcG9uZHMu
CiAgICAgLy8gU2tpcCBTdGVwIDEwIGFzIGNvdW50ZXIgaXMgY29uc3RhbnRseSAwLgogICAgIC8v
IFN0ZXAgMi4KLSAgICBpZiAobm90Rm91bmQgPT0gY3JlYXRpb25PcHRpb25zLnB1YktleUNyZWRQ
YXJhbXMuZmluZE1hdGNoaW5nKFtdIChhdXRvJiBwdWJLZXlDcmVkUGFyYW0pIHsKKyAgICBpZiAo
bm90Rm91bmQgPT0gY3JlYXRpb25PcHRpb25zLnB1YktleUNyZWRQYXJhbXMuZmluZElmKFtdIChh
dXRvJiBwdWJLZXlDcmVkUGFyYW0pIHsKICAgICAgICAgcmV0dXJuIHB1YktleUNyZWRQYXJhbS50
eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkgJiYgcHViS2V5Q3JlZFBh
cmFtLmFsZyA9PSBDT1NFOjpFUzI1NjsKICAgICB9KSkgewogICAgICAgICByZWNlaXZlRXhjZXB0
aW9uKHsgTm90U3VwcG9ydGVkRXJyb3IsICJUaGUgcGxhdGZvcm0gYXR0YWNoZWQgYXV0aGVudGlj
YXRvciBkb2Vzbid0IHN1cHBvcnQgYW55IHByb3ZpZGVkIFB1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzLiJfcyB9KTsKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRv
cjo6bWFrZUNyZWRlbnRpYWwoCiAKICAgICBhdXRvIGV4Y2x1ZGVDcmVkZW50aWFsSWRzID0gcHJv
ZHVjZUhhc2hTZXQoY3JlYXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CiAgICAgaWYg
KCFleGNsdWRlQ3JlZGVudGlhbElkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG5vdEZvdW5k
ICE9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hpbmcoWyZleGNsdWRlQ3JlZGVudGlh
bElkc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKKyAgICAgICAgaWYgKG5vdEZvdW5kICE9IG1fZXhp
c3RpbmdDcmVkZW50aWFscy5maW5kSWYoWyZleGNsdWRlQ3JlZGVudGlhbElkc10gKGF1dG8mIGNy
ZWRlbnRpYWwpIHsKICAgICAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+cmF3SWQo
KTsKICAgICAgICAgICAgIEFTU0VSVChyYXdJZCk7CiAgICAgICAgICAgICByZXR1cm4gZXhjbHVk
ZUNyZWRlbnRpYWxJZHMuY29udGFpbnMoYmFzZTY0RW5jb2RlVG9TdHJpbmcocmF3SWQtPmRhdGEo
KSwgcmF3SWQtPmJ5dGVMZW5ndGgoKSkpOwpAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9l
eGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbZXhwZWN0ZWRSZXNwb25zZSA9IHJlc3Bv
bnNlXSAoYXV0byYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9leGlz
dGluZ0NyZWRlbnRpYWxzLmZpbmRJZihbZXhwZWN0ZWRSZXNwb25zZSA9IHJlc3BvbnNlXSAoYXV0
byYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucHRyKCkgPT0g
ZXhwZWN0ZWRSZXNwb25zZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBub3RGb3VuZCkKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRv
cjo6ZGVsZXRlRHVwbGljYXRlCiAgICAgdXNpbmcgbmFtZXNwYWNlIExvY2FsQXV0aGVudGljYXRv
ckludGVybmFsOwogCiAgICAgYXV0byYgY3JlYXRpb25PcHRpb25zID0gc3RkOjpnZXQ8UHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKTsKLSAg
ICBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFtjcmVhdGlvbk9wdGlvbnNdIChh
dXRvJiBjcmVkZW50aWFsKSB7CisgICAgbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRJZihbY3Jl
YXRpb25PcHRpb25zXSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICBhdXRvKiB1c2VySGFu
ZGxlID0gY3JlZGVudGlhbC0+dXNlckhhbmRsZSgpOwogICAgICAgICBBU1NFUlQodXNlckhhbmRs
ZSk7CiAgICAgICAgIGlmICh1c2VySGFuZGxlLT5ieXRlTGVuZ3RoKCkgIT0gY3JlYXRpb25PcHRp
b25zLnVzZXIuaWQubGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50
aWNhdG9yLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBDdGFwQXV0aGVudGljYXRvcjo6Y29udGludWVH
ZXROZXh0QQogICAgICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9hc3NlcnRpb25SZXNwb25zZXMuZmluZE1h
dGNoaW5nKFtleHBlY3RlZFJlc3BvbnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9hc3NlcnRpb25SZXNwb25zZXMuZmluZElm
KFtleHBlY3RlZFJlc3BvbnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgewogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucHRyKCkgPT0gZXhwZWN0ZWRSZXNwb25zZTsK
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG5vdEZv
dW5kKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rp
b25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6c2V0RGVm
YXVsCiAKIFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpk
ZWZhdWx0RHJvcFByZXZpZXcoVUlEcmFnSXRlbSAqaXRlbSkgY29uc3QKIHsKLSAgICBhdXRvIG1h
dGNoSW5kZXggPSBtX2RlZmF1bHREcm9wUHJldmlld3MuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYg
aXRlbUFuZFByZXZpZXcpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2RlZmF1bHREcm9wUHJl
dmlld3MuZmluZElmKFsmXSAoYXV0byYgaXRlbUFuZFByZXZpZXcpIHsKICAgICAgICAgcmV0dXJu
IGl0ZW1BbmRQcmV2aWV3Lml0ZW0gPT0gaXRlbTsKICAgICB9KTsKICAgICByZXR1cm4gbWF0Y2hJ
bmRleCA9PSBub3RGb3VuZCA/IG5pbCA6IG1fZGVmYXVsdERyb3BQcmV2aWV3c1ttYXRjaEluZGV4
XS5wcmV2aWV3LmdldCgpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIFVJVGFyZ2V0ZWREcmFnUHJldmll
dyAqRHJhZ0Ryb3BJbnRlcmFjdGkKIAogQmxvY2tQdHI8dm9pZChVSVRhcmdldGVkRHJhZ1ByZXZp
ZXcgKik+IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJvcFByZXZpZXdQcm92aWRlcihVSURy
YWdJdGVtICppdGVtKQogewotICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZGVsYXllZEl0ZW1QcmV2
aWV3UHJvdmlkZXJzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGl0ZW1BbmRQcm92aWRlcikgewor
ICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZGVsYXllZEl0ZW1QcmV2aWV3UHJvdmlkZXJzLmZpbmRJ
ZihbJl0gKGF1dG8mIGl0ZW1BbmRQcm92aWRlcikgewogICAgICAgICByZXR1cm4gaXRlbUFuZFBy
b3ZpZGVyLml0ZW0gPT0gaXRlbTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTk1LDcgKzE5NSw3IEBAIHZvaWQgRGlzcGxheUxpbms6OnNldFByZWZlcnJlZEZyYW1lc1BlclMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgY29ubmVjdGlvbkluZm8gPSBpdC0+dmFsdWU7
Ci0gICAgYXV0byBpbmRleCA9IGNvbm5lY3Rpb25JbmZvLm9ic2VydmVycy5maW5kTWF0Y2hpbmco
W29ic2VydmVySURdKGNvbnN0IGF1dG8mIG9ic2VydmVyKSB7CisgICAgYXV0byBpbmRleCA9IGNv
bm5lY3Rpb25JbmZvLm9ic2VydmVycy5maW5kSWYoW29ic2VydmVySURdKGNvbnN0IGF1dG8mIG9i
c2VydmVyKSB7CiAgICAgICAgIHJldHVybiBvYnNlcnZlci5vYnNlcnZlcklEID09IG9ic2VydmVy
SUQ7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250
ZXh0TWVudVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCShyZXZpc2lvbiAyODc1NzcpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6
OmdldENvbnRleHRNCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBx
dWlja0xvb2tJdGVtVG9JbnNlcnRJZk5lZWRlZDsKIAogI2lmIEVOQUJMRShJTUFHRV9BTkFMWVNJ
UykKLSAgICBhdXRvIGluZGV4T2ZRdWlja0xvb2tJdGVtID0gZmlsdGVyZWRJdGVtcy5maW5kTWF0
Y2hpbmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgYXV0byBpbmRleE9mUXVpY2tMb29rSXRlbSA9
IGZpbHRlcmVkSXRlbXMuZmluZElmKFsmXSAoYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4g
aXRlbS5hY3Rpb24oKSA9PSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdRdWlja0xvb2tJbWFn
ZTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkRhdGFM
aXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCShyZXZp
c2lvbiAyODc1NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RT
dWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNyw3ICszMDcsNyBAQCAt
IChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogCiBzdGF0aWMgQk9PTCBzaG91bGRTaG93RGl2
aWRlcnNCZXR3ZWVuQ2VsbHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRhdGFMaXN0U3VnZ2VzdGlv
bj4mIHN1Z2dlc3Rpb25zKQogewotICAgIHJldHVybiBub3RGb3VuZCAhPSBzdWdnZXN0aW9ucy5m
aW5kTWF0Y2hpbmcoW10oYXV0byYgc3VnZ2VzdGlvbikgeworICAgIHJldHVybiBub3RGb3VuZCAh
PSBzdWdnZXN0aW9ucy5maW5kSWYoW10oYXV0byYgc3VnZ2VzdGlvbikgewogICAgICAgICByZXR1
cm4gIXN1Z2dlc3Rpb24ubGFiZWwuaXNFbXB0eSgpOwogICAgIH0pOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTk4Myw5ICsxOTgzLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGNoZWNrRG9jdW1lbnRzQ2FwdHVy
ZQogICAgIH0pOwogCiAgICAgaWYgKGlzQ2FwdHVyaW5nQXVkaW8pCi0gICAgICAgIEFTU0VSVChl
eHRlbnNpb25JRHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIGlkKSB7IHJldHVybiBpZC5jb250YWlu
cygibWljcm9waG9uZSIpOyB9KSA9PSBub3RGb3VuZCk7CisgICAgICAgIEFTU0VSVChleHRlbnNp
b25JRHMuZmluZElmKFtdKGF1dG8mIGlkKSB7IHJldHVybiBpZC5jb250YWlucygibWljcm9waG9u
ZSIpOyB9KSA9PSBub3RGb3VuZCk7CiAgICAgaWYgKGlzQ2FwdHVyaW5nVmlkZW8pCi0gICAgICAg
IEFTU0VSVChleHRlbnNpb25JRHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIGlkKSB7IHJldHVybiBp
ZC5jb250YWlucygiY2FtZXJhIik7IH0pID09IG5vdEZvdW5kKTsKKyAgICAgICAgQVNTRVJUKGV4
dGVuc2lvbklEcy5maW5kSWYoW10oYXV0byYgaWQpIHsgcmV0dXJuIGlkLmNvbnRhaW5zKCJjYW1l
cmEiKTsgfSkgPT0gbm90Rm91bmQpOwogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCShyZXZpc2lvbiAyODc1NzcpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OTksNyArNjk5LDcgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5Ojpjb21wdXRlRQogCiAgICAgYXV0byBlbGVtZW50SW5WaWV3Q2VudGVy
UG9pbnQgPSB2aXNpYmxlUG9ydGlvbk9mRWxlbWVudFJlY3QuY2VudGVyKCk7CiAgICAgYXV0byBl
bGVtZW50TGlzdCA9IGNvbnRhaW5lckVsZW1lbnQtPnRyZWVTY29wZSgpLmVsZW1lbnRzRnJvbVBv
aW50KGVsZW1lbnRJblZpZXdDZW50ZXJQb2ludCk7Ci0gICAgYXV0byBpbmRleCA9IGVsZW1lbnRM
aXN0LmZpbmRNYXRjaGluZyhbY29udGFpbmVyRWxlbWVudF0gKGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0uZ2V0KCkgPT0gY29udGFpbmVyRWxlbWVudDsgfSk7CisgICAgYXV0byBpbmRleCA9IGVs
ZW1lbnRMaXN0LmZpbmRJZihbY29udGFpbmVyRWxlbWVudF0gKGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0uZ2V0KCkgPT0gY29udGFpbmVyRWxlbWVudDsgfSk7CiAgICAgaWYgKGVsZW1lbnRMaXN0
LmlzRW1wdHkoKSB8fCBpbmRleCA9PSBub3RGb3VuZCkgewogICAgICAgICAvLyBXZSBoaXQgdGhp
cyBjYXNlIGlmIHRoZSBlbGVtZW50IGlzIHZpc2liaWxpdHk6aGlkZGVuIG9yIG9wYWNpdHk6MCwg
aW4gd2hpY2ggY2FzZSBpdCB3aWxsIG5vdCBoaXQgdGVzdAogICAgICAgICAvLyBhdCB0aGUgY2Fs
Y3VsYXRlZCBJVkNQLiBBbiBlbGVtZW50IGlzIHRlY2huaWNhbGx5IG5vdCAiaW4gdmlldyIgaWYg
aXQgaXMgbm90IHdpdGhpbiBpdHMgb3duIHBhaW50L2hpdCB0ZXN0IHRyZWUsCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjg3NTc3KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGwKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2Vy
U2NyaXB0TWVzc2FnZUhhbmRsZXJJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3
b3JsZCwgdWludDY0X3QgdXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuYW1lKQogewogICAgIGF1dG8mIG1lc3NhZ2VIYW5kbGVyc0luV29ybGQgPSBtX3Vz
ZXJNZXNzYWdlSGFuZGxlcnMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6
cGFpcjx1aW50NjRfdCwgUmVmUHRyPFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94
eT4+PiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAobWVzc2FnZUhhbmRsZXJzSW5X
b3JsZC5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHBhaXIpIHsgcmV0dXJuIHBhaXIuZmlyc3QgPT0g
IHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kKQorICAg
IGlmIChtZXNzYWdlSGFuZGxlcnNJbldvcmxkLmZpbmRJZihbJl0oYXV0byYgcGFpcikgeyByZXR1
cm4gcGFpci5maXJzdCA9PSAgdXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllcjsgfSkg
IT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKICAgICBtZXNzYWdlSGFuZGxlcnNJbldvcmxk
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVy
LCBXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHk6OmNyZWF0ZSh0aGlzLCBuYW1l
LCB3b3JsZCwgdXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllcikpKTsKIH0KQEAgLTQy
Niw3ICs0MjYsNyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjCiAg
ICAgfQogCiAgICAgYXV0byYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgm
d29ybGQsIFtdIHsgcmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDx1aW50NjRf
dD4sIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYg
KHVzZXJTY3JpcHRJZGVudGlmaWVyICYmIHNjcmlwdHNJbldvcmxkLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgcGFpcikgeyByZXR1cm4gcGFpci5maXJzdCA9PSB1c2VyU2NyaXB0SWRlbnRpZmllcjsg
fSkgIT0gbm90Rm91bmQpCisgICAgaWYgKHVzZXJTY3JpcHRJZGVudGlmaWVyICYmIHNjcmlwdHNJ
bldvcmxkLmZpbmRJZihbJl0oYXV0byYgcGFpcikgeyByZXR1cm4gcGFpci5maXJzdCA9PSB1c2Vy
U2NyaXB0SWRlbnRpZmllcjsgfSkgIT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHNjcmlwdHNJbldvcmxkLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyU2NyaXB0SWRlbnRpZmll
ciwgV1RGTW92ZSh1c2VyU2NyaXB0KSkpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjphZGRVc2VyU3R5bGVTaGVldEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQm
IHdvcmxkLCBjb25zdCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYgdXNlclN0eWxlU2hlZXRJZGVu
dGlmaWVyLCBVc2VyU3R5bGVTaGVldCYmIHVzZXJTdHlsZVNoZWV0KQogewogICAgIGF1dG8mIHN0
eWxlU2hlZXRzSW5Xb3JsZCA9IG1fdXNlclN0eWxlU2hlZXRzLmVuc3VyZSgmd29ybGQsIFtdIHsg
cmV0dXJuIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDx1aW50NjRfdD4sIFdlYkNvcmU6
OlVzZXJTdHlsZVNoZWV0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICh1c2VyU3R5
bGVTaGVldElkZW50aWZpZXIgJiYgc3R5bGVTaGVldHNJbldvcmxkLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgcGFpcikgeyByZXR1cm4gcGFpci5maXJzdCA9PSB1c2VyU3R5bGVTaGVldElkZW50aWZp
ZXI7IH0pICE9IG5vdEZvdW5kKQorICAgIGlmICh1c2VyU3R5bGVTaGVldElkZW50aWZpZXIgJiYg
c3R5bGVTaGVldHNJbldvcmxkLmZpbmRJZihbJl0oYXV0byYgcGFpcikgeyByZXR1cm4gcGFpci5m
aXJzdCA9PSB1c2VyU3R5bGVTaGVldElkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoYXV0byBwYWdlSUQgPSB1c2VyU3R5bGVTaGVldC5wYWdlSUQo
KSkgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKICAqCkBAIC03NTY4LDcgKzc1NjgsNyBAQCB2b2lkIFdlYlBhZ2U6OnJl
cXVlc3RUZXh0UmVjb2duaXRpb24oRWxlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG1hdGNoSW5kZXggPSBtX2VsZW1lbnRzUGVuZGluZ1RleHRSZWNvZ25pdGlvbi5maW5kTWF0
Y2hpbmcoWyZdIChhdXRvJiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRsZXJzKSB7CisgICAgYXV0
byBtYXRjaEluZGV4ID0gbV9lbGVtZW50c1BlbmRpbmdUZXh0UmVjb2duaXRpb24uZmluZElmKFsm
XSAoYXV0byYgZWxlbWVudEFuZENvbXBsZXRpb25IYW5kbGVycykgewogICAgICAgICByZXR1cm4g
ZWxlbWVudEFuZENvbXBsZXRpb25IYW5kbGVycy5maXJzdCA9PSAmZWxlbWVudDsKICAgICB9KTsK
IApAQCAtNzYzMCw3ICs3NjMwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0VGV4dFJlY29nbml0
aW9uKEVsZQogICAgICAgICBhdXRvJiBodG1sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50
PigqcHJvdGVjdGVkRWxlbWVudCk7CiAgICAgICAgIEltYWdlT3ZlcmxheTo6dXBkYXRlV2l0aFRl
eHRSZWNvZ25pdGlvblJlc3VsdChodG1sRWxlbWVudCwgcmVzdWx0KTsKIAotICAgICAgICBhdXRv
IG1hdGNoSW5kZXggPSBwcm90ZWN0ZWRQYWdlLT5tX2VsZW1lbnRzUGVuZGluZ1RleHRSZWNvZ25p
dGlvbi5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRsZXJz
KSB7CisgICAgICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb3RlY3RlZFBhZ2UtPm1fZWxlbWVudHNQ
ZW5kaW5nVGV4dFJlY29nbml0aW9uLmZpbmRJZihbJl0gKGF1dG8mIGVsZW1lbnRBbmRDb21wbGV0
aW9uSGFuZGxlcnMpIHsKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50QW5kQ29tcGxldGlvbkhh
bmRsZXJzLmZpcnN0ID09ICZodG1sRWxlbWVudDsKICAgICAgICAgfSk7CiAKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpeGVkVmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFZlY3Rvci5jcHAJKHJldmlzaW9uIDI4
NzU3NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpeGVkVmVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03OCw2ICs3OCw0NiBAQCBURVNUKFdURl9GaXhlZFZlY3RvciwgT3Zlcmxv
YWRlZE9wZXJhdG9yCiAgICAgdmVjdG9yWzBdID0gVGVzdCgpOwogfQogCitURVNUKFdURl9GaXhl
ZFZlY3RvciwgQ2xlYXJDb250YWluc0FuZEZpbmQpCit7CisgICAgRml4ZWRWZWN0b3I8aW50PiB2
OworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAgICB2LmNsZWFyKCk7CisgICAgRVhQ
RUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCB9OworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uodi5jb250YWlucygxKSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoMSkpOwor
ICAgIHYuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHYuY29udGFpbnMoMSkpOworICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDEp
KTsKKworICAgIHYgPSB7IDMsIDEsIDIsIDEsIDEsIDQsIDIsIDIsIDEsIDEsIDMsIDUgfTsKKyAg
ICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodi5jb250YWlucygz
KSk7CisgICAgRVhQRUNUX1RSVUUodi5jb250YWlucyg0KSk7CisgICAgRVhQRUNUX1RSVUUodi5j
b250YWlucyg1KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYuY29udGFpbnMoNikpOworICAgIEVYUEVD
VF9FUSgwVSwgdi5maW5kKDMpKTsKKyAgICBFWFBFQ1RfRVEoNVUsIHYuZmluZCg0KSk7CisgICAg
RVhQRUNUX0VRKDExVSwgdi5maW5kKDUpKTsKKyAgICBFWFBFQ1RfRVEobm90Rm91bmQsIHYuZmlu
ZCg2KSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBGaXhlZFZlY3RvcjxpbnQ+KHsgMywgMSwgMiwg
MSwgMSwgNCwgMiwgMiwgMSwgMSwgMywgNSB9KSk7CisgICAgdi5jbGVhcigpOworICAgIEVYUEVD
VF9FUSgwVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDMpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uodi5jb250YWlucyg0KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYuY29udGFp
bnMoNSkpOworICAgIEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDYpKTsKKyAgICBFWFBFQ1RfRVEo
bm90Rm91bmQsIHYuZmluZCgzKSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoNCkp
OworICAgIEVYUEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDUpKTsKKyAgICBFWFBFQ1RfRVEobm90
Rm91bmQsIHYuZmluZCg2KSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBGaXhlZFZlY3RvcjxpbnQ+
KHsgfSkpOworfQorCiBURVNUKFdURl9GaXhlZFZlY3RvciwgQ29weSkKIHsKICAgICBGaXhlZFZl
Y3Rvcjx1bnNpZ25lZD4gdmVjMSgzKTsKQEAgLTExNyw2ICsxNTcsMjEgQEAgVEVTVChXVEZfRml4
ZWRWZWN0b3IsIENvcHlBc3NpZ24pCiAgICAgRVhQRUNUX0VRKDJVLCB2ZWMyWzJdKTsKIH0KIAor
VEVTVChXVEZfRml4ZWRWZWN0b3IsIEZpbmRNYXRjaGluZykKK3sKKyAgICBGaXhlZFZlY3Rvcjxp
bnQ+IHY7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50KSB7IHJldHVybiBmYWxzZTsg
fSkgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCkgeyByZXR1
cm4gdHJ1ZTsgfSkgPT0gbm90Rm91bmQpOworCisgICAgdiA9IHsgMywgMSwgMiwgMSwgMiwgMSwg
MiwgMiwgMSwgMSwgMSwgMyB9OworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPiAzOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUo
di5maW5kSWYoW10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOworICAgIEVY
UEVDVF9FUSgwVSwgdi5maW5kSWYoW10oaW50KSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgRVhQ
RUNUX0VRKDBVLCB2LmZpbmRJZihbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IDM7IH0p
KTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPCAzOyB9KSk7CisgICAgRVhQRUNUX0VRKDJVLCB2LmZpbmRJZihbXShpbnQgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlID09IDI7IH0pKTsKK30KKwogVEVTVChXVEZfRml4ZWRWZWN0b3IsIE1vdmUp
CiB7CiAgICAgRml4ZWRWZWN0b3I8dW5zaWduZWQ+IHZlYzEoMyk7CkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAJKHJldmlzaW9uIDI4NzU3NykKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjg1LDE5
ICs2ODUsNTkgQEAgVEVTVChXVEZfVmVjdG9yLCBSZW1vdmVBbGwpCiAgICAgRVhQRUNUX1RSVUUo
djIgPT0gdkV4cGVjdGVkKTsKIH0KIAorVEVTVChXVEZfVmVjdG9yLCBDbGVhckNvbnRhaW5zQW5k
RmluZCkKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgp
KTsKKyAgICB2LmNsZWFyKCk7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAg
diA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICAgIEVYUEVDVF9FUSgxMFUs
IHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5jb250YWlucygxKSk7CisgICAgRVhQRUNU
X0VRKG5vdEZvdW5kLCB2LmZpbmQoMSkpOworICAgIHYuY2xlYXIoKTsKKyAgICBFWFBFQ1RfVFJV
RSh2LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYuY29udGFpbnMoMSkpOworICAgIEVY
UEVDVF9FUShub3RGb3VuZCwgdi5maW5kKDEpKTsKKworICAgIHYgPSB7IDMsIDEsIDIsIDEsIDEs
IDQsIDIsIDIsIDEsIDEsIDMsIDUgfTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5jb250YWlucygzKSk7CisgICAgRVhQRUNUX1RSVUUodi5jb250YWlu
cyg0KSk7CisgICAgRVhQRUNUX1RSVUUodi5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX0ZBTFNF
KHYuY29udGFpbnMoNikpOworICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kKDMpKTsKKyAgICBFWFBF
Q1RfRVEoNVUsIHYuZmluZCg0KSk7CisgICAgRVhQRUNUX0VRKDExVSwgdi5maW5kKDUpKTsKKyAg
ICBFWFBFQ1RfRVEobm90Rm91bmQsIHYuZmluZCg2KSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBW
ZWN0b3I8aW50Pih7IDMsIDEsIDIsIDEsIDEsIDQsIDIsIDIsIDEsIDEsIDMsIDUgfSkpOworICAg
IHYuY2xlYXIoKTsKKyAgICBFWFBFQ1RfRVEoMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uodi5jb250YWlucygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHYuY29udGFpbnMoNCkpOworICAg
IEVYUEVDVF9GQUxTRSh2LmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5jb250YWlu
cyg2KSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoMykpOworICAgIEVYUEVDVF9F
UShub3RGb3VuZCwgdi5maW5kKDQpKTsKKyAgICBFWFBFQ1RfRVEobm90Rm91bmQsIHYuZmluZCg1
KSk7CisgICAgRVhQRUNUX0VRKG5vdEZvdW5kLCB2LmZpbmQoNikpOworICAgIEVYUEVDVF9UUlVF
KHYgPT0gVmVjdG9yPGludD4oeyB9KSk7Cit9CisKIFRFU1QoV1RGX1ZlY3RvciwgRmluZE1hdGNo
aW5nKQogewogICAgIFZlY3RvcjxpbnQ+IHY7Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hp
bmcoW10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOwotICAgIEVYUEVDVF9U
UlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkgPT0gbm90Rm91bmQp
OworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCkgeyByZXR1cm4gZmFsc2U7IH0pID09
IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRy
dWU7IH0pID09IG5vdEZvdW5kKTsKIAogICAgIHYgPSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwg
MSwgMSwgMSwgM307Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA+IDM7IH0pID09IG5vdEZvdW5kKTsKLSAgICBFWFBFQ1RfVFJVRSh2
LmZpbmRNYXRjaGluZyhbXShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7Ci0g
ICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRNYXRjaGluZyhbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0p
KTsKLSAgICBFWFBFQ1RfRVEoMFUsIHYuZmluZE1hdGNoaW5nKFtdKGludCB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPD0gMzsgfSkpOwotICAgIEVYUEVDVF9FUSgxVSwgdi5maW5kTWF0Y2hpbmcoW10o
aW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IDM7IH0pKTsKLSAgICBFWFBFQ1RfRVEoMlUsIHYu
ZmluZE1hdGNoaW5nKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOworICAg
IEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAzOyB9
KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50KSB7IHJldHVy
biBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kSWYoW10o
aW50KSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRJZihbXShp
bnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9IDM7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYu
ZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPCAzOyB9KSk7CisgICAgRVhQRUNU
X0VRKDJVLCB2LmZpbmRJZihbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IDI7IH0pKTsK
IH0KIAogVEVTVChXVEZfVmVjdG9yLCBSZW1vdmVGaXJzdE1hdGNoaW5nKQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcu
bW0JKHJldmlzaW9uIDI4NzU3NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTWVkaWFMb2FkaW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGljIFN0cmluZyBwYXJzZVVzZXJBZ2VudChjb25zdCBW
ZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCiB7CiAgICAgYXV0byBoZWFkZXJzID0gU3RyaW5nOjpmcm9t
VVRGOChyZXF1ZXN0LmRhdGEoKSwgcmVxdWVzdC5zaXplKCkpLnNwbGl0KCJcclxuIik7Ci0gICAg
YXV0byBpbmRleCA9IGhlYWRlcnMuZmluZE1hdGNoaW5nKFtdIChhdXRvJiBoZWFkZXIpIHsgcmV0
dXJuIGhlYWRlci5zdGFydHNXaXRoKCJVc2VyLUFnZW50OiIpOyB9KTsKKyAgICBhdXRvIGluZGV4
ID0gaGVhZGVycy5maW5kSWYoW10gKGF1dG8mIGhlYWRlcikgeyByZXR1cm4gaGVhZGVyLnN0YXJ0
c1dpdGgoIlVzZXItQWdlbnQ6Iik7IH0pOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKICAg
ICAgICAgcmV0dXJuIGhlYWRlcnNbaW5kZXhdOwogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDI4NzU3NykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dElzTWVkaWFLZXlTeXN0ZW0KIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsb3NlT3RoZXJQYWdlKFdL
UGFnZVJlZiBwYWdlLCBQbGF0Zm9ybVdlYlZpZXcqIHZpZXcpCiB7CiAgICAgV0tQYWdlQ2xvc2Uo
cGFnZSk7Ci0gICAgYXV0byBpbmRleCA9IG1fYXV4aWxpYXJ5V2ViVmlld3MuZmluZE1hdGNoaW5n
KFt2aWV3XShhdXRvJiBhdXhpbGlhcnlXZWJWaWV3KSB7IHJldHVybiBhdXhpbGlhcnlXZWJWaWV3
LnB0cigpID09IHZpZXc7IH0pOworICAgIGF1dG8gaW5kZXggPSBtX2F1eGlsaWFyeVdlYlZpZXdz
LmZpbmRJZihbdmlld10oYXV0byYgYXV4aWxpYXJ5V2ViVmlldykgeyByZXR1cm4gYXV4aWxpYXJ5
V2ViVmlldy5wdHIoKSA9PSB2aWV3OyB9KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCiAg
ICAgICAgIG1fYXV4aWxpYXJ5V2ViVmlld3MucmVtb3ZlKGluZGV4KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449854</attachid>
            <date>2022-01-24 13:58:07 -0800</date>
            <delta_ts>2022-01-24 14:05:13 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-234864.patch</filename>
            <type>text/plain</type>
            <size>126330</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDIyLTAxLTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgVmVjdG9yIGFuZCBGaXhlZFZlY3Rvcjo6ZmluZE1hdGNoaW5nIHRvIGZpbmRJZiB0byBt
YXRjaCBzdGwgbmFtaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0ODY0CisgICAgICAgIHJkYXI6Ly84NzQyNDc0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkFycmF5UGF0dGVybk5vZGU6OmVtaXREaXJlY3RCaW5k
aW5nKToKKwogMjAyMi0wMS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIEZpeGVkVmVjdG9yOjpjbGVhcigpLCBjb250YWlucygpLCBmaW5kKCksIGFuZCBm
aW5kTWF0Y2hpbmcoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0qICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2Fy
aWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3Mg
T3Jsb3ZpY2gKICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgpAQCAtNTM0OSw3ICs1MzQ5LDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlQYXR0ZXJuTm9kZTo6
ZW1pdERpcmVjdAogICAgIGlmICghcmhzLT5pc1NpbXBsZUFycmF5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKG1fdGFyZ2V0UGF0dGVybnMuZmluZE1hdGNoaW5nKFsmXSAo
YXV0byYgdGFyZ2V0KSB7IHJldHVybiB0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6
OlJlc3RFbGVtZW50OyB9KSAhPSBub3RGb3VuZCkKKyAgICBpZiAobV90YXJnZXRQYXR0ZXJucy5m
aW5kSWYoWyZdIChhdXRvJiB0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5iaW5kaW5nVHlwZSA9PSBC
aW5kaW5nVHlwZTo6UmVzdEVsZW1lbnQ7IH0pICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIEVsZW1lbnROb2RlKiBlbGVtZW50Tm9kZXMgPSBzdGF0aWNfY2FzdDxB
cnJheU5vZGUqPihyaHMpLT5lbGVtZW50cygpOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIw
MjItMDEtMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFt
ZSBWZWN0b3IgYW5kIEZpeGVkVmVjdG9yOjpmaW5kTWF0Y2hpbmcgdG8gZmluZElmIHRvIG1hdGNo
IHN0bCBuYW1pbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzQ4NjQKKyAgICAgICAgcmRhcjovLzg3NDI0NzQ2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxzbyByZW5hbWUgcmV2ZXJzZUZpbmRNYXRj
aGluZyB0byByZXZlcnNlRmluZElmLgorCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0ODU1I2MzIGFuZAorICAgICAgICBodHRwczovL2VuLmNw
cHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2ZpbmQuCisKKyAgICAgICAgKiB3dGYvRml4
ZWRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Rml4ZWRWZWN0b3I8VD46OmZpbmRJZiBjb25zdCk6
CisgICAgICAgIChXVEY6OkZpeGVkVmVjdG9yPFQ+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Rml4ZWRWZWN0b3I8VD46OmZpbmRNYXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kSWYgY29uc3QpOgor
ICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6TWFsbG9j
Pjo6cmV2ZXJzZUZpbmRJZiBjb25zdCk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmZpbmRNYXRj
aGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvYz46OnJldmVyc2VGaW5k
TWF0Y2hpbmcgY29uc3QpOiBEZWxldGVkLgorCiAyMDIyLTAxLTI0ICBNaWNoYWVsIENhdGFuemFy
byAgPG1jYXRhbnphcm9AZ25vbWUub3JnPgogCiAgICAgICAgIEJ1aWxkIGZhaWx1cmUgd2l0aCBH
Q0MgMTI6IG5vIG1hdGNoaW5nIGZ1bmN0aW9uIGZvciBjYWxsIHRvICdlbmQoTENoYXIgWzddKScK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZpeGVkVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRml4ZWRWZWN0b3IuaAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dURi93
dGYvRml4ZWRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgY29udGFpbnMoY29uc3QgVSYpIGNv
bnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHNpemVfdCBmaW5kKGNvbnN0IFUmKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgZmluZE1hdGNo
aW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXRjaEZ1bmN0aW9uPiBzaXplX3QgZmluZElmKGNvbnN0IE1hdGNoRnVuY3Rpb24mKSBjb25zdDsK
IAogICAgIHZvaWQgc3dhcChGaXhlZFZlY3RvcjxUPiYgb3RoZXIpCiAgICAgewpAQCAtMTgzLDcg
KzE4Myw3IEBAIGJvb2wgRml4ZWRWZWN0b3I8VD46OmNvbnRhaW5zKGNvbnN0IFUmIHYKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1zaXpl
X3QgRml4ZWRWZWN0b3I8VD46OmZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRj
aGVzKSBjb25zdAorc2l6ZV90IEZpeGVkVmVjdG9yPFQ+OjpmaW5kSWYoY29uc3QgTWF0Y2hGdW5j
dGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKSB7CiAgICAgICAgIGlmIChtYXRjaGVzKGF0KGkpKSkKQEAgLTE5Niw3ICsxOTYsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdGVtcGxhdGU8dHlwZW5hbWUgVT4KIHNpemVfdCBGaXhl
ZFZlY3RvcjxUPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZmlu
ZE1hdGNoaW5nKFsmXShhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIGZpbmRJZihbJl0oYXV0byYg
aXRlbSkgewogICAgICAgICByZXR1cm4gaXRlbSA9PSB2YWx1ZTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Zl
Y3Rvci5oCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC03NTYsOSArNzU2LDkgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IGJvb2wgY29udGFpbnMoY29uc3QgVSYpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHNpemVfdCBmaW5kKGNvbnN0IFUmKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgZmluZE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24m
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgZmlu
ZElmKGNvbnN0IE1hdGNoRnVuY3Rpb24mKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVSYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1hdGNoRnVuY3Rpb24+IHNpemVfdCByZXZlcnNlRmluZE1hdGNoaW5nKGNvbnN0IE1hdGNo
RnVuY3Rpb24mKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiBz
aXplX3QgcmV2ZXJzZUZpbmRJZihjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGFwcGVuZElmTm90Q29udGFpbnMoY29uc3QgVSYpOwog
CkBAIC05OTYsNyArOTk2LDcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotc2l6ZV90IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZmluZE1h
dGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpIGNvbnN0CitzaXplX3QgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjpmaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtYXRjaGVzKGF0
KGkpKSkKQEAgLTEwMDksNyArMTAwOSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2kKIHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBzaXplX3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpmaW5kKGNv
bnN0IFUmIHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBmaW5kTWF0Y2hpbmcoWyZdKGF1dG8m
IGl0ZW0pIHsKKyAgICByZXR1cm4gZmluZElmKFsmXShhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJl
dHVybiBpdGVtID09IHZhbHVlOwogICAgIH0pOwogfQpAQCAtMTAyOCw3ICsxMDI4LDcgQEAgc2l6
ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsbwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRj
aEZ1bmN0aW9uPgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmV2ZXJzZUZpbmRNYXRjaGluZyhjb25zdCBNYXRj
aEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6cmV2ZXJzZUZpbmRJZihj
b25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDw9IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IHNpemVfdCBpbmRleCA9IHNp
emUoKSAtIGk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNTUgQEAKKzIwMjItMDEt
MjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBWZWN0
b3IgYW5kIEZpeGVkVmVjdG9yOjpmaW5kTWF0Y2hpbmcgdG8gZmluZElmIHRvIG1hdGNoIHN0bCBu
YW1pbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzQ4NjQKKyAgICAgICAgcmRhcjovLzg3NDI0NzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9h
cmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpnZXRUeXBlKToKKyAgICAgICAg
KiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6
OmdldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZTo6Y29sbGVjdERhdGFGb3JXcml0aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0RP
TUNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZVN0b3JhZ2U6Om1h
dGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlU3RvcmFnZTo6aGFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUNhY2hlU3RvcmFnZTo6ZmluZENhY2hlT3JDcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9N
Q2FjaGVTdG9yYWdlOjpkb1JlbW92ZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvSGln
aGxpZ2h0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodDo6YWRkVG9TZXRMaWtlKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29u
dGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUmVjb3JkZXI6OnRyYWNrRW5kZWQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSVENDb250cm9sbGVyOjpzaG91bGREaXNhYmxlSUNFQ2FuZGlkYXRlRmlsdGVyaW5n
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpnZXRPckNyZWF0ZUljZVRyYW5z
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6Z2V0T3JDcmVhdGVE
dGxzVHJhbnNwb3J0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNGcmFt
ZVRyYW5zZm9ybWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1J0cFNGcmFtZVRyYW5zZm9y
bWVyOjpkZWNyeXB0RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxz
Rm9ySW5wdXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2VsQW5kSG9s
ZEF0VGltZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9JSVJGaWx0ZXJOb2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklJUkZpbHRlck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdXRobi9maWRvL1UyZkNvbW1hbmRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChm
aWRvOjppc0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlhSSW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRPclVwZGF0ZWRJbnB1dFNvdXJjZXMpOgor
ICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlhSU2Vzc2lvbjo6Y2FuY2VsQW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVs
ZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTeXN0ZW06
OmVuc3VyZUltbWVyc2l2ZVhSRGV2aWNlSXNTZWxlY3RlZCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZElmTm90Q29u
dGFpbnNNYXRjaGluZyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmls
aXR5QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpzaG91
bGRFbWl0U2lnbmFsKToKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6dHlwZXMgY29uc3QpOgorICAgICAgICAqIGRvbS9EYXRh
VHJhbnNmZXJJdGVtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVTdHJpbmdJdGVt
T2ZMb3dlcmNhc2VkVHlwZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmF0aW9ucyk6Cisg
ICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgor
ICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11
dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVTbG90Q2hhbmdlRXZlbnQpOgorICAgICAgICAqIGh0bWwv
QmFzZVRleHRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZVRleHRJbnB1dFR5
cGU6OnBhdHRlcm5NaXNtYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6OmNhbmNlbFZpZGVv
RnJhbWVDYWxsYmFjayk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEluZGV4
T2YgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNl
ZEZpZWxkRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVt
ZW50OjpkaWRCbHVyRnJvbUZpZWxkKToKKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZERhdGFU
ZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kRGF0YVRleHRUcmFjazo6Zmlu
ZEluY29tcGxldGVDdWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJEZWJ1Z2dlckFnZW50OjpkaWRBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjphcHBlbmQpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0SW50ZWdyYXRpb246OkJveFRyZWU6OmxheW91dEJveEZvclJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpCb3hUcmVlOjpyZW5kZXJlckZvckxheW91
dEJveCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdGFydEljb25Mb2FkaW5nKToKKyAgICAgICAgKiBwYWdl
L0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlv
bk9ic2VydmVyOjppc09ic2VydmluZyBjb25zdCk6CisgICAgICAgICogcGFnZS9Nb2RhbENvbnRh
aW5lck9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGFsQ29udGFpbmVyT2JzZXJ2
ZXI6OmNvbGxlY3RDbGlja2FibGVFbGVtZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2Uv
UmVzaXplT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2ZXI6Om9i
c2VydmUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNDb21wYXRpYmxlU25h
cEFyZWEpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAg
ICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjphZGRPck1vdmVFbnRyeVRvRW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNTYW1lT3JpZ2luQ3VzdG9tRGF0YSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZmlsZUNvbnRlbnRTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JN
YW5hZ2VyOjpmaW5kTW9uaXRvckZvckRpc3BsYXlJRCBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVI
RVZDQ29kZWNQYXJhbWV0ZXJzU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFFbmdp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om5leHRNZWRpYUVuZ2luZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6c2Vzc2lvbkZvcktleUlEcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6c2Vzc2lv
bkZvclJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JHcm91cCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxp
Y2Vuc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmFuaW1hdGlvbklzUnVubmlu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FM
YXllckFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
Ojppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdMQ29udGV4dEVHTDo6Z2V0RUdMQ29uZmlnKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6aXNDb250ZW50VHlwZVN1cHBvcnRlZCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNob3VsZEhhdmVCYWNraW5nU3RvcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OmZpbGVDb250ZW50U3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL0Nh
cHR1cmVEZXZpY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmhhdmVEZXZpY2VzQ2hhbmdlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnZhbHVlRm9yRGlzY3JldGVDYXBhYmlsaXR5
VmFsdWVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0TWVkaWFTdHJl
YW1PYnNlcnZlcjo6ZGlkUmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlk
ZW9DYXB0dXJlU291cmNlOjpnZW5lcmF0ZVByZXNldHMpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvSFRUUEhlYWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
OjpnZXRVbmNvbW1vbkhlYWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwOjpzZXRVbmNvbW1vbkhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29udGFpbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Z2V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA6OnNldCk6CisgICAgICAgICogcGxhdGZvcm0veHIvb3Bl
bnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRXh0
ZW5zaW9uczo6aXNFeHRlbnNpb25TdXBwb3J0ZWQgY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMv
UGx1Z2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6aXNTdXBwb3J0ZWRQbHVnaW4pOgorCiAy
MDIyLTAxLTI0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBm
aWxlLnN0cmVhbSgpIGlzIHNsb3cgYW5kIENQVS1ib3VuZApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3BwCShyZXZpc2lv
biAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlw
Ym9hcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIENsaXBib2FyZDo6
Z2V0VHlwZShDbGlwYm9hcmRJdGVtJiBpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIGl0ZW1JbmRleCA9IG1fYWN0aXZlU2Vzc2lvbi0+aXRlbXMuZmluZE1hdGNoaW5nKFsmXSAo
YXV0byYgYWN0aXZlSXRlbSkgeworICAgIGF1dG8gaXRlbUluZGV4ID0gbV9hY3RpdmVTZXNzaW9u
LT5pdGVtcy5maW5kSWYoWyZdIChhdXRvJiBhY3RpdmVJdGVtKSB7CiAgICAgICAgIHJldHVybiBh
Y3RpdmVJdGVtLnB0cigpID09ICZpdGVtOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2Fy
ZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAkocmV2aXNpb24gMjg4NDYzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJp
bmRpbmdzRGF0YVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBWZWN0b3I8
U3RyaW5nPiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhCiAKIHZvaWQgQ2xpcGJvYXJkSXRlbUJp
bmRpbmdzRGF0YVNvdXJjZTo6Z2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2l0ZW1Qcm9t
aXNlcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgYXV0byBtYXRjaEluZGV4
ID0gbV9pdGVtUHJvbWlzZXMuZmluZElmKFsmXSAoYXV0byYgaXRlbSkgewogICAgICAgICByZXR1
cm4gdHlwZSA9PSBpdGVtLmtleTsKICAgICB9KTsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQg
Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Y28KIAogICAgICAgICAgICAgUmVmIGl0
ZW1UeXBlTG9hZGVyIHsgKndlYWtJdGVtVHlwZUxvYWRlciB9OwogI2lmICFDT01QSUxFUihNU1ZD
KQotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBl
TG9hZGVycy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBsb2FkZXIpIHsgcmV0dXJuIGxvYWRlci5w
dHIoKSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5maW5kSWYoWyZdIChhdXRv
JiBsb2FkZXIpIHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsg
fSkpOwogI2VuZGlmCiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvbWlzZS0+cmVzdWx0
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZVN0
b3JhZ2UuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHZv
aWQgRE9NQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmUKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghb3B0aW9ucy5jYWNoZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGF1dG8g
cG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0tPm5hbWUoKSA9PSBvcHRpb25zLmNhY2hlTmFtZTsgfSk7CisgICAgICAgICAgICBhdXRv
IHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVt
LT5uYW1lKCkgPT0gb3B0aW9ucy5jYWNoZU5hbWU7IH0pOwogICAgICAgICAgICAgaWYgKHBvc2l0
aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZXNbcG9zaXRpb25dLT5t
YXRjaChXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKHByb21pc2UpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCB2b2lkIERPTUNh
Y2hlU3RvcmFnZTo6aGFzKGNvbnN0IFN0cmluZyYgCiAgICAgICAgICAgICBwcm9taXNlLnJlamVj
dChXVEZNb3ZlKGV4Y2VwdGlvbi52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0o
YXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5k
KTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRJZihbJl0oYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKICAgICB9
KTsKIH0KIAogUmVmPERPTUNhY2hlPiBET01DYWNoZVN0b3JhZ2U6OmZpbmRDYWNoZU9yQ3JlYXRl
KERPTUNhY2hlRW5naW5lOjpDYWNoZUluZm8mJiBpbmZvKQogewotICAgYXV0byBwb3NpdGlvbiA9
IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGNhY2hlKSB7IHJldHVybiBp
bmZvLmlkZW50aWZpZXIgPT0gY2FjaGUtPmlkZW50aWZpZXIoKTsgfSk7CisgICBhdXRvIHBvc2l0
aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXSAoY29uc3QgYXV0byYgY2FjaGUpIHsgcmV0dXJuIGlu
Zm8uaWRlbnRpZmllciA9PSBjYWNoZS0+aWRlbnRpZmllcigpOyB9KTsKICAgIGlmIChwb3NpdGlv
biAhPSBub3RGb3VuZCkKICAgICAgICByZXR1cm4gbV9jYWNoZXNbcG9zaXRpb25dLmNvcHlSZWYo
KTsKICAgIHJldHVybiBET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFdURk1vdmUoaW5mby5uYW1lKSwgaW5mby5pZGVudGlmaWVyLCBtX2Nvbm5lY3Rpb24uY29weVJl
ZigpKTsKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6b3Blbihjb25z
dCBTdHJpbmcmCiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4oY29uc3QgU3RyaW5nJiBu
YW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUNhY2hlPj4mJiBwcm9taXNl
KQogewotICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBhdXRvIHBvc2l0
aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1l
KCkgPT0gbmFtZTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAg
IHByb21pc2UucmVzb2x2ZShET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIFN0cmluZyB7IG1fY2FjaGVzW3Bvc2l0aW9uXS0+bmFtZSgpIH0sIG1fY2FjaGVzW3Bvc2l0
aW9uXS0+aWRlbnRpZmllcigpLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6cmVtb3ZlKGNv
bnN0IFN0cmluCiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb1JlbW92ZShjb25zdCBTdHJpbmcm
IG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7Ci0gICAg
YXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeyBy
ZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2Nh
Y2hlcy5maW5kSWYoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1l
OyB9KTsKICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKICAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODUsNyArODUsNyBAQCB2b2lkIEhpZ2hsaWdodDo6Y2xlYXJGcm9tU2V0TGlrZSgp
CiAKIGJvb2wgSGlnaGxpZ2h0OjphZGRUb1NldExpa2UoU3RhdGljUmFuZ2UmIHJhbmdlKQogewot
ICAgIGlmIChub3RGb3VuZCAhPSBtX3Jhbmdlc0RhdGEuZmluZE1hdGNoaW5nKFsmcmFuZ2VdKGNv
bnN0IFJlZjxIaWdobGlnaHRSYW5nZURhdGE+JiBjdXJyZW50KSB7IHJldHVybiBjdXJyZW50Lmdl
dCgpLnJhbmdlLmdldCgpID09IHJhbmdlOyB9KSkKKyAgICBpZiAobm90Rm91bmQgIT0gbV9yYW5n
ZXNEYXRhLmZpbmRJZihbJnJhbmdlXShjb25zdCBSZWY8SGlnaGxpZ2h0UmFuZ2VEYXRhPiYgY3Vy
cmVudCkgeyByZXR1cm4gY3VycmVudC5nZXQoKS5yYW5nZS5nZXQoKSA9PSByYW5nZTsgfSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXBhaW50UmFuZ2UocmFuZ2UpOwogICAgIG1fcmFu
Z2VzRGF0YS5hcHBlbmQoSGlnaGxpZ2h0UmFuZ2VEYXRhOjpjcmVhdGUocmFuZ2UpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NzIsNyArNTcyLDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlh
Q29udHJvbAogCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5n
cm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0
ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUo
dGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5k
OjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7Ci0gICAgICAgICAg
ICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5m
aW5kTWF0Y2hpbmcoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgeworICAgICAgICAgICAgYm9v
bCBhbGxUcmFja3NEaXNhYmxlZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElm
KFtdIChjb25zdCBhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4
dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBib29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJl
bmNlcy5jYXB0aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRv
bWF0aWMgJiYgYWxsVHJhY2tzRGlzYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCShyZXZpc2lvbiAy
ODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNv
cmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgTWVkaWFSZWNvcmRl
cjo6ZGlzcGF0Y2hFcnJvcihFeGNlcHQKIAogdm9pZCBNZWRpYVJlY29yZGVyOjp0cmFja0VuZGVk
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90cmFj
a3MuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1f
dHJhY2tzLmZpbmRJZihbXShhdXRvJiB0cmFjaykgewogICAgICAgICByZXR1cm4gIXRyYWNrLT5l
bmRlZCgpOwogICAgIH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wg
UlRDQ29udHJvbGxlcjo6c2hvdWxkRGlzYWJsZUlDRUNhbmQKIHsKICAgICBpZiAoIW1fc2hvdWxk
RmlsdGVySUNFQ2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG5v
dEZvdW5kICE9IG1fZmlsdGVyaW5nRGlzYWJsZWRPcmlnaW5zLmZpbmRNYXRjaGluZyhbJl0gKGNv
bnN0IGF1dG8mIG9yaWdpbikgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2ZpbHRlcmluZ0Rp
c2FibGVkT3JpZ2lucy5maW5kSWYoWyZdIChjb25zdCBhdXRvJiBvcmlnaW4pIHsKICAgICAgICAg
cmV0dXJuIG1hdGNoRG9jdW1lbnRPcmlnaW4oZG9jdW1lbnQsIG9yaWdpbi50b3BPcmlnaW4sIG9y
aWdpbi5jbGllbnRPcmlnaW4pOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJl
dmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgogICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDg4LDcgKzQ4
OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpzZXQKICAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJDZXJ0aWZp
Y2F0ZXMgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50IiB9OwogCiAgICAgICAgIGZvciAoYXV0byYg
Y2VydGlmaWNhdGUgOiBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcykgewotICAgICAgICAgICAg
Ym9vbCBpc1RoZXJlID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kTWF0Y2hpbmco
WyZjZXJ0aWZpY2F0ZV0oY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICAgICAgYm9vbCBpc1Ro
ZXJlID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kSWYoWyZjZXJ0aWZpY2F0ZV0o
Y29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldCgpID09
IGNlcnRpZmljYXRlLmdldCgpOwogICAgICAgICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAg
ICAgICBpZiAoIWlzVGhlcmUpCkBAIC05NTksNyArOTU5LDcgQEAgRG9jdW1lbnQqIFJUQ1BlZXJD
b25uZWN0aW9uOjpkb2N1bWVudCgpCiAKIFJlZjxSVENJY2VUcmFuc3BvcnQ+IFJUQ1BlZXJDb25u
ZWN0aW9uOjpnZXRPckNyZWF0ZUljZVRyYW5zcG9ydChVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0
QmFja2VuZD4mJiBiYWNrZW5kKQogewotICAgIGF1dG8gaW5kZXggPSBtX2ljZVRyYW5zcG9ydHMu
ZmluZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7IHJldHVybiBiYWNrZW5k
LmdldCgpID09IHRyYW5zcG9ydC0+YmFja2VuZCgpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gbV9p
Y2VUcmFuc3BvcnRzLmZpbmRJZihbJmJhY2tlbmRdKGF1dG8mIHRyYW5zcG9ydCkgeyByZXR1cm4g
YmFja2VuZC5nZXQoKSA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9pY2VUcmFuc3BvcnRzLnNpemUoKTsK
ICAgICAgICAgbV9pY2VUcmFuc3BvcnRzLmFwcGVuZChSVENJY2VUcmFuc3BvcnQ6OmNyZWF0ZSgq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBXVEZNb3ZlKGJhY2tlbmQpLCAqdGhpcykpOwpAQCAt
OTc4LDcgKzk3OCw3IEBAIFJlZlB0cjxSVENEdGxzVHJhbnNwb3J0PiBSVENQZWVyQ29ubmVjdGkK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBp
bmRleCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJh
bnNwb3J0KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7Cisg
ICAgYXV0byBpbmRleCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZElmKFsmYmFja2VuZF0oYXV0byYg
dHJhbnNwb3J0KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7
CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9kdGxzVHJh
bnNwb3J0cy5zaXplKCk7CiAgICAgICAgIGF1dG8gaWNlVHJhbnNwb3J0QmFja2VuZCA9IGJhY2tl
bmQtPmljZVRyYW5zcG9ydEJhY2tlbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIu
Y3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1J0cFNGcmFtZVRyYW5zZm9ybWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNyArMjQ2
LDcgQEAgUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXI6OlRyYW5zZm9ybVJlc3VsdAogICAgIG1fY291
bnRlciA9IGhlYWRlci0+Y291bnRlcjsKIAogICAgIGlmIChoZWFkZXItPmtleUlkICE9IG1fa2V5
SWQpIHsKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoW2tleUlk
ID0gaGVhZGVyLT5rZXlJZF0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5rZXlJZCA9PSBrZXlJ
ZDsgfSk7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2tleXMuZmluZElmKFtrZXlJZCA9IGhl
YWRlci0+a2V5SWRdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2V5SWQgPT0ga2V5SWQ7IH0p
OwogICAgICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoRXJyb3JJbmZvcm1hdGlvbiB7IEVycm9yOjpLZXlJRCwgICJLZXkgSUQg
aXMgdW5rbm93biJfcywgaGVhZGVyLT5rZXlJZCB9KTsKICAgICAgICAgYXV0byByZXN1bHQgPSB1
cGRhdGVFbmNyeXB0aW9uS2V5KG1fa2V5c1twb3NpdGlvbl0ua2V5RGF0YSwgaGVhZGVyLT5rZXlJ
ZCwgU2hvdWxkVXBkYXRlS2V5czo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4Myw3ICs0
ODQsNyBAQCB2b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9yCiB7CiAgICAg
QVNTRVJUKGNvbnRleHQoKS5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLmlzR3JhcGhPd25l
cigpKTsKIAotICAgIEFTU0VSVChtX2lucHV0cy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGFzc29j
aWF0ZWRJbnB1dCkgeyByZXR1cm4gYXNzb2NpYXRlZElucHV0LmdldCgpID09IGlucHV0OyB9KSAh
PSBub3RGb3VuZCk7CisgICAgQVNTRVJUKG1faW5wdXRzLmZpbmRJZihbJl0oYXV0byYgYXNzb2Np
YXRlZElucHV0KSB7IHJldHVybiBhc3NvY2lhdGVkSW5wdXQuZ2V0KCkgPT0gaW5wdXQ7IH0pICE9
IG5vdEZvdW5kKTsKICAgICBpbnB1dC0+dXBkYXRlSW50ZXJuYWxCdXMoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRp
bWVsaW5lLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE4LDcgKzIxOSw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6Y2EKICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9ldmVudHNMb2NrIH07CiAKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBldmVudCBhdCBv
ciBqdXN0IHBhc3QgY2FuY2VsVGltZS4KLSAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRNYXRj
aGluZyhbJl0oYXV0byYgZXZlbnQpIHsKKyAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRJZihb
Jl0oYXV0byYgZXZlbnQpIHsKICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWUoKSA+IGNhbmNlbFRp
bWU7CiAgICAgfSk7CiAgICAgaSA9IChpID09IG5vdEZvdW5kKSA/IG1fZXZlbnRzLnNpemUoKSA6
IGk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0lJUkZpbHRlck5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSUlSRmls
dGVyTm9kZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vSUlSRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsNyArODcs
NyBAQCBFeGNlcHRpb25PcjxSZWY8SUlSRmlsdGVyTm9kZT4+IElJUkZpbHRlCiAgICAgaWYgKCFv
cHRpb25zLmZlZWRmb3J3YXJkLnNpemUoKSB8fCBvcHRpb25zLmZlZWRmb3J3YXJkLnNpemUoKSA+
IElJUkZpbHRlcjo6bWF4T3JkZXIpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciwgImZlZWRmb3J3YXJkIGFycmF5IG11c3QgaGF2ZSBhIGxlbmd0aCBiZXR3ZWVu
IDEgYW5kIDIwIl9zIH07CiAKLSAgICBhdXRvIG5vblplcm9WYWx1ZUluZGV4ID0gb3B0aW9ucy5m
ZWVkZm9yd2FyZC5maW5kTWF0Y2hpbmcoW10oYXV0byYgdmFsdWUpIHsgcmV0dXJuICEhdmFsdWU7
IH0pOworICAgIGF1dG8gbm9uWmVyb1ZhbHVlSW5kZXggPSBvcHRpb25zLmZlZWRmb3J3YXJkLmZp
bmRJZihbXShhdXRvJiB2YWx1ZSkgeyByZXR1cm4gISF2YWx1ZTsgfSk7CiAgICAgaWYgKG5vblpl
cm9WYWx1ZUluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJmZWVkZm9yd2FyZCBhcnJheSBtdXN0IGNvbnRhaW4gYSBub24temVy
byB2YWx1ZSJfcyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Zp
ZG8vVTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vVTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL1UyZkNv
bW1hbmRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBD
b3B5cmlnaHQgMjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg3LDcgKzg3LDcg
QEAgYm9vbCBpc0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQoYwogewogICAgIGlmIChy
ZXF1ZXN0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gJiYgKHJlcXVlc3QuYXV0aGVudGljYXRvclNl
bGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiA9PSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6
OlJlcXVpcmVkIHx8IHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lk
ZW50S2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXF1ZXN0LnB1YktleUNy
ZWRQYXJhbXMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uYWxnID09
IENPU0U6OkVTMjU2OyB9KSA9PSBub3RGb3VuZCkKKyAgICBpZiAocmVxdWVzdC5wdWJLZXlDcmVk
UGFyYW1zLmZpbmRJZihbXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmFsZyA9PSBDT1NFOjpF
UzI1NjsgfSkgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNv
dXJjZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhy
L1dlYlhSSW5wdXRTb3VyY2VBcnJheS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0Miw3ICsxNDMsNyBAQCB2b2lkIFdlYlhSSW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRP
CiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNv
dXJjZXMpIHsKLSAgICAgICAgYXV0byBpbmRleCA9IG1faW5wdXRTb3VyY2VzLmZpbmRNYXRjaGlu
ZyhbJmlucHV0U291cmNlXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5oYW5kbGUoKSA9PSBp
bnB1dFNvdXJjZS5oYW5kbGU7IH0pOworICAgICAgICBhdXRvIGluZGV4ID0gbV9pbnB1dFNvdXJj
ZXMuZmluZElmKFsmaW5wdXRTb3VyY2VdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmhhbmRs
ZSgpID09IGlucHV0U291cmNlLmhhbmRsZTsgfSk7CiAgICAgICAgIGlmIChpbmRleCA9PSBub3RG
b3VuZCkgewogICAgICAgICAgICAgLy8gV2hlbiBuZXcgWFIgaW5wdXQgc291cmNlcyBiZWNvbWUg
YXZhaWxhYmxlIGZvciBYUlNlc3Npb24gc2Vzc2lvbiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBydW4g
dGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgICAgIC8vIDEuIElmIHNlc3Npb24ncyBwcm9t
aXNlIHJlc29sdmVkIGZsYWcgaXMgbm90IHNldCwgYWJvcnQgdGhlc2Ugc3RlcHMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCShyZXZpc2lv
biAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNzksNyArMjgwLDcgQEAgdm9pZCBXZWJYUlNlc3Npb246OmNhbmNlbEFu
aW1hdGlvbkZyYW1lKAogICAgIC8vICAgIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbiBmcmFt
ZSBjYWxsYmFja3MgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGhhbmRsZS4KICAg
ICAvLyAzLiBJZiB0aGVyZSBpcyBzdWNoIGFuIGVudHJ5LCBzZXQgaXRzIGNhbmNlbGxlZCBib29s
ZWFuIHRvIHRydWUgYW5kIHJlbW92ZSBpdCBmcm9tCiAgICAgLy8gICAgc2Vzc2lvbidzIGxpc3Qg
b2YgYW5pbWF0aW9uIGZyYW1lIGNhbGxiYWNrcy4KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX2Nh
bGxiYWNrcy5maW5kTWF0Y2hpbmcoW2NhbGxiYWNrSWRdIChhdXRvJiBpdGVtKSB7CisgICAgc2l6
ZV90IHBvc2l0aW9uID0gbV9jYWxsYmFja3MuZmluZElmKFtjYWxsYmFja0lkXSAoYXV0byYgaXRl
bSkgewogICAgICAgICByZXR1cm4gaXRlbS0+Y2FsbGJhY2tJZCgpID09IGNhbGxiYWNrSWQ7CiAg
ICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0
ZW0uY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhy
L1dlYlhSU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTcsNyBAQCB2b2lkIFdlYlhSU3lz
dGVtOjplbnN1cmVJbW1lcnNpdmVYUkRldmljCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uICYmIG9sZERldmljZSAm
JiBpbW1lcnNpdmVYUkRldmljZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBlbnRyeSkgeyByZXR1
cm4gZW50cnkucHRyKCkgPT0gb2xkRGV2aWNlOyB9KSAhPSBub3RGb3VuZCkKKyAgICAgICAgaWYg
KG1fYWN0aXZlSW1tZXJzaXZlU2Vzc2lvbiAmJiBvbGREZXZpY2UgJiYgaW1tZXJzaXZlWFJEZXZp
Y2VzLmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09IG9sZERl
dmljZTsgfSkgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVJbW1lcnNp
dmVEZXZpY2UuZ2V0KCkgPT0gb2xkRGV2aWNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IGEgYmV0dGVyIFVBIHNlbGVjdGlvbiBtZWNoYW5pc20gaWYg
cmVxdWlyZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjgwLDcgKzMyODAs
NyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBGPgogc3RhdGljIGJvb2wgYXBwZW5kSWZOb3RDb250YWluc01h
dGNoaW5nKFZlY3RvcjxUPiYgdmVjdG9yLCBjb25zdCBUJiB2YWx1ZSwgRiBtYXRjaGVzKQogewot
ICAgIGlmICh2ZWN0b3IuZmluZE1hdGNoaW5nKG1hdGNoZXMpICE9IG5vdEZvdW5kKQorICAgIGlm
ICh2ZWN0b3IuZmluZElmKG1hdGNoZXMpICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgdmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3Np
YmlsaXR5QXRzcGkuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNDAsNyArMjQxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5QXRzcGk6
OnNob3VsZEVtaXRTaWduYQogCiAgICAgY29uc3QgY2hhciogbmVlZGxlWzRdID0geyBpbnRlcmZh
Y2UsIG5hbWUsIGRldGFpbCwgbnVsbHB0ciB9OwogICAgIGZvciAoY29uc3QgYXV0byYgbGlzdGVu
ZXJzIDogbV9ldmVudExpc3RlbmVycy52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9
IGxpc3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IEdVbmlxdWVQdHI8Y2hhcio+JiBldmVu
dCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVycy5maW5kSWYoWyZdKGNvbnN0IEdV
bmlxdWVQdHI8Y2hhcio+JiBldmVudCkgewogICAgICAgICAgICAgcmV0dXJuIGV2ZW50SXNTdWJ0
eXBlKGNvbnN0X2Nhc3Q8Y2hhcioqPihuZWVkbGUpLCBldmVudC5nZXQoKSk7CiAgICAgICAgIH0p
OwogICAgICAgICBpZiAocmVzdWx0ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
YXRhVHJhbnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI0LDcgKzMyNCw3IEBAIFZlY3Rv
cjxTdHJpbmc+IERhdGFUcmFuc2Zlcjo6dHlwZXMoQWRkRmkKICAgICB9CiAKICAgICBhdXRvIHNh
ZmVUeXBlcyA9IG1fcGFzdGVib2FyZC0+dHlwZXNTYWZlRm9yQmluZGluZ3MobV9vcmlnaW5JZGVu
dGlmaWVyKTsKLSAgICBib29sIGhhc0ZpbGVCYWNrZWRJdGVtID0gbV9pdGVtTGlzdCAmJiBtX2l0
ZW1MaXN0LT5oYXNJdGVtcygpICYmIG5vdEZvdW5kICE9IG1faXRlbUxpc3QtPml0ZW1zKCkuZmlu
ZE1hdGNoaW5nKFtdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgYm9vbCBoYXNGaWxlQmFja2Vk
SXRlbSA9IG1faXRlbUxpc3QgJiYgbV9pdGVtTGlzdC0+aGFzSXRlbXMoKSAmJiBub3RGb3VuZCAh
PSBtX2l0ZW1MaXN0LT5pdGVtcygpLmZpbmRJZihbXSAoY29uc3QgYXV0byYgaXRlbSkgewogICAg
ICAgICByZXR1cm4gaXRlbS0+aXNGaWxlKCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTUsNyArMTU1LDcgQEAgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4mIERhdGFUcmFu
cwogCiBzdGF0aWMgdm9pZCByZW1vdmVTdHJpbmdJdGVtT2ZMb3dlcmNhc2VkVHlwZShWZWN0b3I8
UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiYgaXRlbXMsIGNvbnN0IFN0cmluZyYgbG93ZXJjYXNlZFR5
cGUpCiB7Ci0gICAgYXV0byBpbmRleCA9IGl0ZW1zLmZpbmRNYXRjaGluZyhbbG93ZXJjYXNlZFR5
cGVdKGF1dG8mIGl0ZW0pIHsKKyAgICBhdXRvIGluZGV4ID0gaXRlbXMuZmluZElmKFtsb3dlcmNh
c2VkVHlwZV0oYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gIWl0ZW0tPmlzRmlsZSgpICYm
IGl0ZW0tPnR5cGUoKSA9PSBsb3dlcmNhc2VkVHlwZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI4ODQ2
MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
d2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC00MjgzLDcgKzQyODMsNyBAQCB2b2lk
IERvY3VtZW50OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnCiAgICAgICAgIG1fcGVuZGluZ1Nj
cm9sbEV2ZW50VGFyZ2V0TGlzdCA9IG1ha2VVbmlxdWU8UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0
TGlzdD4oKTsKIAogICAgIGF1dG8mIHRhcmdldHMgPSBtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdl
dExpc3QtPnRhcmdldHM7Ci0gICAgaWYgKHRhcmdldHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYg
ZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09ICZ0YXJnZXQ7IH0pICE9IG5vdEZvdW5kKQor
ICAgIGlmICh0YXJnZXRzLmZpbmRJZihbJl0gKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5w
dHIoKSA9PSAmdGFyZ2V0OyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHRhcmdldHMuaXNFbXB0eSgpKQpAQCAtODAzMyw3ICs4MDMzLDcgQEAgdm9pZCBEb2N1bWVu
dDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGZvciAoYXV0byYgdGFyZ2V0IDogb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpKSB7
CiAgICAgICAgICAgICBhdXRvJiB0YXJnZXRSZWdpc3RyYXRpb25zID0gdGFyZ2V0LT5pbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGFJZkV4aXN0cygpLT5yZWdpc3RyYXRpb25zOwotICAgICAgICAgICAg
YXV0byBpbmRleCA9IHRhcmdldFJlZ2lzdHJhdGlvbnMuZmluZE1hdGNoaW5nKFtvYnNlcnZlcl0o
YXV0byYgcmVnaXN0cmF0aW9uKSB7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gdGFyZ2V0UmVn
aXN0cmF0aW9ucy5maW5kSWYoW29ic2VydmVyXShhdXRvJiByZWdpc3RyYXRpb24pIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVyLmdldCgpID09IG9ic2VydmVy
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDEsNyArMjQxLDcgQEAgVmVj
dG9yPEV2ZW50VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUAogICAgIFJFTEVBU0VfQVNTRVJU
KHBhdGhTaXplKTsKICAgICBwYXRoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aFNpemUpOwog
Ci0gICAgYXV0byBjdXJyZW50VGFyZ2V0SW5kZXggPSBtX3BhdGguZmluZE1hdGNoaW5nKFsmdGFy
Z2V0XSAoYXV0byYgY29udGV4dCkgeworICAgIGF1dG8gY3VycmVudFRhcmdldEluZGV4ID0gbV9w
YXRoLmZpbmRJZihbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIGNv
bnRleHQuY3VycmVudFRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoY3VycmVudFRhcmdldEluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xNTgsNyAr
MTU4LDcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZQogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgUmVmIGV2ZW50TG9vcCA9IHNsb3QuZG9jdW1lbnQo
KS53aW5kb3dFdmVudExvb3AoKTsKICAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxT
bG90TGlzdCgpOwotICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVu
dHJ5KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAg
IEFTU0VSVChsaXN0LmZpbmRJZihbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5w
dHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOwogICAgIGxpc3QuYXBwZW5kKHNsb3QpOwog
CiAgICAgZXZlbnRMb29wLT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAJKHJldmlz
aW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAw
OSBNaWNoZWxhbmdlbG8gRGUgU2ltb25lIDxtaWNkZXNpbUBnbWFpbC5jb20+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVy
bk1pc21hdGNoKAogCiAgICAgaWYgKGlzRW1haWxGaWVsZCgpICYmIGVsZW1lbnQoKS0+bXVsdGlw
bGUoKSkgewogICAgICAgICBhdXRvIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZXMuZmluZE1hdGNoaW5nKHZhbHVlUGF0dGVybk1pc21hdGNoKSAhPSBub3RG
b3VuZDsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5maW5kSWYodmFsdWVQYXR0ZXJuTWlzbWF0Y2gp
ICE9IG5vdEZvdW5kOwogICAgIH0KICAgICByZXR1cm4gdmFsdWVQYXR0ZXJuTWlzbWF0Y2godmFs
dWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjA0LDEzICs2MDQsMTMgQEAgdW5zaWduZWQgSFRNTFZp
ZGVvRWxlbWVudDo6cmVxdWVzdFZpZGVvRgogdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpjYW5jZWxW
aWRlb0ZyYW1lQ2FsbGJhY2sodW5zaWduZWQgaWRlbnRpZmllcikKIHsKICAgICAvLyBTZWFyY2gg
Zmlyc3QgdGhlIHJlcXVlc3RzIGN1cnJlbnRseSBiZWluZyBzZXJ2aWNlZCwgYW5kIG1hcmsgdGhl
bSBhcyBjYW5jZWxsZWQgaWYgZm91bmQuCi0gICAgYXV0byBpbmRleCA9IG1fc2VydmljZWRWaWRl
b0ZyYW1lUmVxdWVzdHMuZmluZE1hdGNoaW5nKFtpZGVudGlmaWVyXShhdXRvJiByZXF1ZXN0KSB7
IHJldHVybiByZXF1ZXN0LT5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8g
aW5kZXggPSBtX3NlcnZpY2VkVmlkZW9GcmFtZVJlcXVlc3RzLmZpbmRJZihbaWRlbnRpZmllcl0o
YXV0byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OyB9KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgbV9zZXJ2aWNlZFZp
ZGVvRnJhbWVSZXF1ZXN0c1tpbmRleF0tPmNhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpbmRleCA9IG1fdmlkZW9GcmFtZVJlcXVlc3RzLmZpbmRNYXRjaGlu
ZyhbaWRlbnRpZmllcl0oYXV0byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOyB9KTsKKyAgICBpbmRleCA9IG1fdmlkZW9GcmFtZVJlcXVlc3RzLmZp
bmRJZihbaWRlbnRpZmllcl0oYXV0byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRp
ZmllciA9PSBpZGVudGlmaWVyOyB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3ZpZGVvRnJhbWVSZXF1ZXN0cy5yZW1vdmUoaW5kZXgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Rh
dGVUaW1lRWRpdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQg
RGF0ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQoUmVmPEQKIAogc2l6ZV90IERhdGVUaW1lRWRp
dEVsZW1lbnQ6OmZpZWxkSW5kZXhPZihjb25zdCBEYXRlVGltZUZpZWxkRWxlbWVudCYgZmllbGRU
b0ZpbmQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZmllbGRzLmZpbmRNYXRjaGluZyhbJl0gKGF1
dG8mIGZpZWxkKSB7CisgICAgcmV0dXJuIG1fZmllbGRzLmZpbmRJZihbJl0gKGF1dG8mIGZpZWxk
KSB7CiAgICAgICAgIHJldHVybiBmaWVsZC5wdHIoKSA9PSAmZmllbGRUb0ZpbmQ7CiAgICAgfSk7
CiB9CkBAIC0yMjMsNyArMjIzLDcgQEAgc2l6ZV90IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxk
SW5kZXhPZgogRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3Vz
ZWRGaWVsZEVsZW1lbnQoKSBjb25zdAogewogICAgIGF1dG8qIGZvY3VzZWRFbGVtZW50ID0gZG9j
dW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpOwotICAgIGF1dG8gZmllbGRJbmRleCA9IG1fZmllbGRz
LmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGZpZWxkKSB7CisgICAgYXV0byBmaWVsZEluZGV4ID0g
bV9maWVsZHMuZmluZElmKFsmXSAoYXV0byYgZmllbGQpIHsKICAgICAgICAgcmV0dXJuIGZpZWxk
LnB0cigpID09IGZvY3VzZWRFbGVtZW50OwogICAgIH0pOwogCkBAIC0yODksNyArMjg5LDcgQEAg
dm9pZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaWRCbHVyRnJvbUZpZQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoYXV0byogbmV3Rm9jdXNlZEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0
KCkpIHsKLSAgICAgICAgYm9vbCBkaWRGb2N1c1NpYmxpbmdGaWVsZCA9IG5vdEZvdW5kICE9IG1f
ZmllbGRzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGZpZWxkKSB7CisgICAgICAgIGJvb2wgZGlk
Rm9jdXNTaWJsaW5nRmllbGQgPSBub3RGb3VuZCAhPSBtX2ZpZWxkcy5maW5kSWYoWyZdIChhdXRv
JiBmaWVsZCkgewogICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnB0cigpID09IG5ld0ZvY3VzZWRF
bGVtZW50OwogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmREYXRhVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBDYWJsZSBUZWxl
dmlzaW9uIExhYnMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCB2b2lkIEluYmFuZERhdGFUZXh0
VHJhY2s6OmFkZERhdGFDdWUoY29uCiAKIFJlZlB0cjxEYXRhQ3VlPiBJbmJhbmREYXRhVGV4dFRy
YWNrOjpmaW5kSW5jb21wbGV0ZUN1ZShjb25zdCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJiBj
dWVUb0ZpbmQpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1faW5jb21wbGV0ZUN1ZU1hcC5maW5kTWF0
Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGN1ZSkgeworICAgIGF1dG8gaW5kZXggPSBtX2luY29tcGxl
dGVDdWVNYXAuZmluZElmKFsmXShjb25zdCBhdXRvJiBjdWUpIHsKICAgICAgICAgcmV0dXJuIGN1
ZVRvRmluZC5pc0VxdWFsKCpjdWUtPnBsYXRmb3JtVmFsdWUoKSk7CiAgICAgfSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCShyZXZpc2lv
biAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjphcHBlbmRBY3Rpb25TbmFwc2gKIAogaW50IEluc3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRh
KER1cGxpY2F0ZURhdGFWYXJpYW50IGRhdGEpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9pbmRl
eGVkRHVwbGljYXRlRGF0YS5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGl0ZW0pIHsKKyAgICBzaXpl
X3QgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmZpbmRJZihbJl0gKGF1dG8gaXRlbSkg
ewogICAgICAgICBpZiAoZGF0YSA9PSBpdGVtKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3
ICs2OSw3IEBAIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW4KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXV0byYgZXZlbnRMaXN0ZW5lcnMgPSB0YXJnZXQuZXZlbnRMaXN0
ZW5lcnMoZXZlbnRUeXBlKTsKLSAgICBhdXRvIHBvc2l0aW9uID0gZXZlbnRMaXN0ZW5lcnMuZmlu
ZE1hdGNoaW5nKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICBhdXRvIHBvc2l0
aW9uID0gZXZlbnRMaXN0ZW5lcnMuZmluZElmKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIp
IHsKICAgICAgICAgcmV0dXJuICZyZWdpc3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkgPT0gJmxp
c3RlbmVyICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IGNhcHR1cmU7CiAg
ICAgfSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQpAQCAtOTIsNyArOTIsNyBAQCB2
b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuCiB2b2lkIFdlYkRlYnVnZ2Vy
QWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0
IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2Fw
dHVyZSkKIHsKICAgICBhdXRvJiBldmVudExpc3RlbmVycyA9IHRhcmdldC5ldmVudExpc3RlbmVy
cyhldmVudFR5cGUpOwotICAgIHNpemVfdCBsaXN0ZW5lckluZGV4ID0gZXZlbnRMaXN0ZW5lcnMu
ZmluZE1hdGNoaW5nKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICBzaXplX3Qg
bGlzdGVuZXJJbmRleCA9IGV2ZW50TGlzdGVuZXJzLmZpbmRJZihbJl0oYXV0byYgcmVnaXN0ZXJl
ZExpc3RlbmVyKSB7CiAgICAgICAgIHJldHVybiAmcmVnaXN0ZXJlZExpc3RlbmVyLT5jYWxsYmFj
aygpID09ICZsaXN0ZW5lciAmJiByZWdpc3RlcmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSA9PSBj
YXB0dXJlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdTdGF0ZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUs
NyBAQCB2b2lkIEZsb2F0aW5nU3RhdGU6OmFwcGVuZChGbG9hdEl0ZW0gZmxvCiAgICAgICAgIHJl
dHVybiBtX2Zsb2F0cy5hcHBlbmQoZmxvYXRJdGVtKTsKIAogICAgIC8vIFRoZSBpbnRlZ3JhdGlv
biBjb2RlcGF0aCBkb2VzIG5vdCBjb25zdHJ1Y3QgYSBsYXlvdXQgYm94IGZvciB0aGUgZmxvYXQg
aXRlbS4KLSAgICBBU1NFUlRfSU1QTElFUyhmbG9hdEl0ZW0uZmxvYXRCb3goKSwgbV9mbG9hdHMu
ZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50cnkpIHsKKyAgICBBU1NFUlRfSU1QTElFUyhmbG9h
dEl0ZW0uZmxvYXRCb3goKSwgbV9mbG9hdHMuZmluZElmKFsmXSAoYXV0byYgZW50cnkpIHsKICAg
ICAgICAgcmV0dXJuIGVudHJ5LmZsb2F0Qm94KCkgPT0gZmxvYXRJdGVtLmZsb2F0Qm94KCk7CiAg
ICAgfSkgPT0gbm90Rm91bmQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAko
cmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uQm94VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBA
IExheW91dDo6Qm94JiBCb3hUcmVlOjpsYXlvdXRCb3hGb3JSZW5kZXIKICAgICAgICAgcmV0dXJu
IG1fcm9vdDsKIAogICAgIGlmIChtX2JveGVzLnNpemUoKSA8PSBzbWFsbFRyZWVUaHJlc2hvbGQp
IHsKLSAgICAgICAgYXV0byBpbmRleCA9IG1fYm94ZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBl
bnRyeSkgeworICAgICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5maW5kSWYoWyZdKGF1dG8mIGVu
dHJ5KSB7CiAgICAgICAgICAgICByZXR1cm4gZW50cnkucmVuZGVyZXIgPT0gJnJlbmRlcmVyOwog
ICAgICAgICB9KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpA
QCAtMjI2LDcgKzIyNiw3IEBAIFJlbmRlck9iamVjdCYgQm94VHJlZTo6cmVuZGVyZXJGb3JMYXlv
dXQKICAgICAgICAgcmV0dXJuIG1fZmxvdzsKIAogICAgIGlmIChtX2JveGVzLnNpemUoKSA8PSBz
bWFsbFRyZWVUaHJlc2hvbGQpIHsKLSAgICAgICAgYXV0byBpbmRleCA9IG1fYm94ZXMuZmluZE1h
dGNoaW5nKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5m
aW5kSWYoWyZdKGF1dG8mIGVudHJ5KSB7CiAgICAgICAgICAgICByZXR1cm4gZW50cnkuYm94LnB0
cigpID09ICZib3g7CiAgICAgICAgIH0pOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAh
PSBub3RGb3VuZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yMjcxLDcgKzIyNzEsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdGFy
dEljb25Mb2FkaW5nKCkKIAogICAgIG1fbGlua0ljb25zID0gTGlua0ljb25Db2xsZWN0b3IgeyAq
ZG9jdW1lbnQgfS5pY29uc09mVHlwZXMoeyBMaW5rSWNvblR5cGU6OkZhdmljb24sIExpbmtJY29u
VHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pOwog
Ci0gICAgYXV0byBmaW5kUmVzdWx0ID0gbV9saW5rSWNvbnMuZmluZE1hdGNoaW5nKFtdKGF1dG8m
IGljb24pIHsgcmV0dXJuIGljb24udHlwZSA9PSBMaW5rSWNvblR5cGU6OkZhdmljb247IH0pOwor
ICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbGlua0ljb25zLmZpbmRJZihbXShhdXRvJiBpY29uKSB7
IHJldHVybiBpY29uLnR5cGUgPT0gTGlua0ljb25UeXBlOjpGYXZpY29uOyB9KTsKICAgICBpZiAo
ZmluZFJlc3VsdCA9PSBub3RGb3VuZCkKICAgICAgICAgbV9saW5rSWNvbnMuYXBwZW5kKHsgZG9j
dW1lbnQtPmNvbXBsZXRlVVJMKCIvZmF2aWNvbi5pY28iX3MpLCBMaW5rSWNvblR5cGU6OkZhdmlj
b24sIFN0cmluZygpLCBzdGQ6Om51bGxvcHQsIHsgfSB9KTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE1Niw3ICsxNTYsNyBAQCBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJn
aW4oCiAKIGJvb2wgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzT2JzZXJ2aW5nKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzLmZp
bmRNYXRjaGluZyhbJl0oYXV0byYgdGFyZ2V0KSB7CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25U
YXJnZXRzLmZpbmRJZihbJl0oYXV0byYgdGFyZ2V0KSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQu
Z2V0KCkgPT0gJmVsZW1lbnQ7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL01vZGFsQ29udGFpbmVyT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWluZXJPYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4
ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWluZXJPYnNlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTE1LDEzICs1MTUsMTMgQEAgdm9pZCBNb2RhbENvbnRhaW5lck9ic2Vy
dmVyOjpjb2xsZWN0Q2xpYwogICAgICAgICAgICAgICAgICAgICBjYXNlIE1vZGFsQ29udGFpbmVy
RGVjaXNpb246OkhpZGVBbmRJZ25vcmU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBNb2RhbENvbnRhaW5lckRlY2lzaW9uOjpIaWRlQW5k
QWxsb3c6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbmRleCA9IHBvc2l0aXZl
LmZpbmRNYXRjaGluZyhtYXRjaE5vbk51bGwpOyBpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gcG9zaXRpdmUuZmluZElmKG1hdGNoTm9u
TnVsbCk7IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwb3NpdGl2ZVtpbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbmRleCA9IG5ldXRyYWwuZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9
IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW5kZXggPSBuZXV0
cmFsLmZpbmRJZihtYXRjaE5vbk51bGwpOyBpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV1dHJhbFtpbmRleF0uZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNb2RhbENvbnRh
aW5lckRlY2lzaW9uOjpIaWRlQW5kRGlzYWxsb3c6Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXV0byBpbmRleCA9IG5lZ2F0aXZlLmZpbmRNYXRjaGluZyhtYXRjaE5vbk51bGwpOyBpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0g
bmVnYXRpdmUuZmluZElmKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGl2ZVtpbmRleF0uZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNjAsNyBAQCB2b2lkIFJlc2l6ZU9i
c2VydmVyOjpvYnNlcnZlKEVsZW1lbnQmIHRhCiAgICAgaWYgKCFtX2NhbGxiYWNrKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHBvc2l0aW9uID0gbV9vYnNlcnZhdGlvbnMuZmluZE1hdGNo
aW5nKFsmXShhdXRvJiBvYnNlcnZhdGlvbikgeworICAgIGF1dG8gcG9zaXRpb24gPSBtX29ic2Vy
dmF0aW9ucy5maW5kSWYoWyZdKGF1dG8mIG9ic2VydmF0aW9uKSB7CiAgICAgICAgIHJldHVybiBv
YnNlcnZhdGlvbi0+dGFyZ2V0KCkgPT0gJnRhcmdldDsKICAgICB9KTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OCw3
ICsxNTgsNyBAQCB2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVtb3ZlTGF0CiAgICAg
aWYgKG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBmaW5kUmVzdWx0ID0gbV9mcmFtZVN0YXRlU3RhY2suZmluZE1hdGNoaW5nKFsmZWxlbWVu
dF0gKGNvbnN0IGF1dG8mIHN0YXRlKSB7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9mcmFtZVN0
YXRlU3RhY2suZmluZElmKFsmZWxlbWVudF0gKGNvbnN0IGF1dG8mIHN0YXRlKSB7CiAgICAgICAg
IGF1dG8qIHdoZWVsRWxlbWVudCA9IHN0YXRlLndoZWVsRXZlbnRFbGVtZW50LmdldCgpOwogICAg
ICAgICByZXR1cm4gd2hlZWxFbGVtZW50ICYmIGVsZW1lbnQuaXNFcXVhbE5vZGUod2hlZWxFbGVt
ZW50KTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMyw3ICsxMTMsNyBAQCBz
dGF0aWMgYm9vbCBoYXNDb21wYXRpYmxlU25hcEFyZWEoY29uc3QgCiAgICAgYXV0byBzY3JvbGxE
ZXN0aW5hdGlvbkluT3RoZXJBeGlzID0gY29tcG9uZW50Rm9yQXhpczxVbml0VHlwZSwgUG9pbnRU
eXBlPihkZXN0aW5hdGlvbk9mZnNldFBvaW50LCBvdGhlckF4aXMpOwogICAgIGF1dG8gdmlld3Bv
cnRMZW5ndGhJbk90aGVyQXhpcyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
ID8gdmlld3BvcnRTaXplLmhlaWdodCgpIDogdmlld3BvcnRTaXplLndpZHRoKCk7CiAKLSAgICBy
ZXR1cm4gc25hcE9mZnNldC5zbmFwQXJlYUluZGljZXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byBp
bmRleCkgeworICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBBcmVhSW5kaWNlcy5maW5kSWYoWyZd
IChhdXRvIGluZGV4KSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHNuYXBBcmVhID0gaW5mby5zbmFw
QXJlYXNbaW5kZXhdOwogICAgICAgICBhdXRvIFtvdGhlckF4aXNNaW4sIG90aGVyQXhpc01heF0g
PSByYW5nZUZvckF4aXM8VW5pdFR5cGU+KHNuYXBBcmVhLCBvdGhlckF4aXMpOwogICAgICAgICBy
ZXR1cm4gKHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgKyB2aWV3cG9ydExlbmd0aEluT3Ro
ZXJBeGlzKSA+IG90aGVyQXhpc01pbiAmJiBzY3JvbGxEZXN0aW5hdGlvbkluT3RoZXJBeGlzIDwg
b3RoZXJBeGlzTWF4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTU3LDcgKzU3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nybwog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZS5pbkNvbW1pdFRyZWVTdGF0ZSgp
KTsKIAotICAgIHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4uZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBjaGlsZCkgeworICAgIHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4uZmluZElmKFsmXShhdXRv
JiBjaGlsZCkgewogICAgICAgICByZXR1cm4gJm5vZGUgPT0gY2hpbGQucHRyKCk7CiAgICAgfSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3Bw
CShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTc4Myw3ICs3ODMsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6cHJlZmVycmVkSW1hZ2VN
CiB7CiAgICAgYXV0byBhbGxvd2VkTUlNRVR5cGVzID0gTUlNRVR5cGVSZWdpc3RyeTo6YWxsb3dl
ZE1JTUVUeXBlcyhtaW1lVHlwZXMsIGV4dGVuc2lvbnMpOwogCi0gICAgYXV0byBwb3NpdGlvbiA9
IGFsbG93ZWRNSU1FVHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IGF1dG8mIG1pbWVUeXBlKSB7
CisgICAgYXV0byBwb3NpdGlvbiA9IGFsbG93ZWRNSU1FVHlwZXMuZmluZElmKFtdKGNvbnN0IGF1
dG8mIG1pbWVUeXBlKSB7CiAgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSk7CiAgICAgfSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEu
Y3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkQ3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgUGFz
dGVib2FyZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nSW4KIAogUGFzdGVib2FyZEN1c3RvbURhdGE6
OkVudHJ5JiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6YWRkT3JNb3ZlRW50cnlUb0VuZChjb25zdCBT
dHJpbmcmIHR5cGUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fZGF0YS5maW5kTWF0Y2hpbmcoWyZd
IChhdXRvJiBlbnRyeSkgeworICAgIGF1dG8gaW5kZXggPSBtX2RhdGEuZmluZElmKFsmXSAoYXV0
byYgZW50cnkpIHsKICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGUgPT0gdHlwZTsKICAgICB9KTsK
ICAgICBhdXRvIGVudHJ5ID0gaW5kZXggPT0gbm90Rm91bmQgPyBFbnRyeSh0eXBlKSA6IG1fZGF0
YVtpbmRleF07CkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6
aGFzRGF0YSgpIGNvbgogCiBib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNTYW1lT3JpZ2lu
Q3VzdG9tRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vdEZvdW5kICE9IG1fZGF0YS5maW5k
TWF0Y2hpbmcoWyZdIChhdXRvJiBlbnRyeSkgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2Rh
dGEuZmluZElmKFsmXSAoYXV0byYgZW50cnkpIHsKICAgICAgICAgcmV0dXJuICFlbnRyeS5jdXN0
b21EYXRhLmlzTnVsbCgpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE0OSw3ICsxNDksNyBAQCBQYXN0ZWJvYXJkOjpGaWxlQ29udGVudFN0YXRlIFBhc3Rl
Ym9hcmQ6CiAgICAgICAgIGlmICghaXRlbXMpCiAgICAgICAgICAgICByZXR1cm4gRmlsZUNvbnRl
bnRTdGF0ZTo6Tm9GaWxlT3JJbWFnZURhdGE7CiAKLSAgICAgICAgbWF5Q29udGFpbkZpbGVQYXRo
cyA9IGl0ZW1zLT5zaXplKCkgIT0gMSB8fCBub3RGb3VuZCAhPSBpdGVtcy0+ZmluZE1hdGNoaW5n
KFtdIChhdXRvJiBpdGVtKSB7CisgICAgICAgIG1heUNvbnRhaW5GaWxlUGF0aHMgPSBpdGVtcy0+
c2l6ZSgpICE9IDEgfHwgbm90Rm91bmQgIT0gaXRlbXMtPmZpbmRJZihbXSAoYXV0byYgaXRlbSkg
ewogICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY2FuQmVUcmVhdGVkQXNBdHRhY2htZW50T3JGaWxl
KCkgfHwgaXRlbS5pc05vblRleHRUeXBlIHx8IGl0ZW0uY29udGFpbnNGaWxlVVJMQW5kRmlsZVVw
bG9hZENvbnRlbnQ7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTE1OCwxMCArMTU4LDEwIEBAIFBh
c3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICBpZiAoIW1heUNvbnRh
aW5GaWxlUGF0aHMpIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlczsKICAgICAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyhj
b2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwotICAgICAgICBpZiAoY29j
b2FUeXBlcy5maW5kTWF0Y2hpbmcoW10oY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUpIHsgcmV0dXJu
IHNob3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKGNvY29hVHlwZSk7IH0pID09IG5vdEZvdW5kKQor
ICAgICAgICBpZiAoY29jb2FUeXBlcy5maW5kSWYoW10oY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUp
IHsgcmV0dXJuIHNob3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKGNvY29hVHlwZSk7IH0pID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1h
Z2VEYXRhOwogCi0gICAgICAgIGF1dG8gaW5kZXhPZlVSTCA9IGNvY29hVHlwZXMuZmluZE1hdGNo
aW5nKFtdKGF1dG8mIGNvY29hVHlwZSkgeworICAgICAgICBhdXRvIGluZGV4T2ZVUkwgPSBjb2Nv
YVR5cGVzLmZpbmRJZihbXShhdXRvJiBjb2NvYVR5cGUpIHsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgICAgICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlw
ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAJKHJldmlzaW9u
IDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcgKzExMCw3
IEBAIGJvb2wgS2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudChLZXkKIAogYm9vbCBLZXlT
dG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewotICAg
IHJldHVybiBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYg
c3RvcmVkS2V5KSB7CisgICAgcmV0dXJuIG1fa2V5cy5maW5kSWYoWyZdKGNvbnN0IFJlZlB0cjxL
ZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5
SUQ7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkBAIC0xNDksNyArMTUwLDcgQEAgYm9vbCBLZXlT
dG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleQogYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0
cjxLZXlIYW5kbGU+JiYga2V5KQogewogICAgIGJvb2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxzZTsK
LSAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CisgICAgc2l6ZV90
IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZElmKFsmXSAoY29uc3QgUmVm
UHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewogICAgICAgICByZXR1cm4gKmtleSA9PSAqc3Rv
cmVkS2V5OwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE5
LDcgKzExOSw3IEBAIHZvaWQgRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZGlzcGwKIAog
c2l6ZV90IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OmZpbmRNb25pdG9yRm9yRGlzcGxh
eUlEKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9t
b25pdG9ycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIG1vbml0b3JXcmFwcGVyKSB7CisgICAgcmV0
dXJuIG1fbW9uaXRvcnMuZmluZElmKFsmXShhdXRvJiBtb25pdG9yV3JhcHBlcikgewogICAgICAg
ICByZXR1cm4gbW9uaXRvcldyYXBwZXIubW9uaXRvci0+ZGlzcGxheUlEKCkgPT0gZGlzcGxheUlE
OwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVW
Q1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjIwLDcgKzIyMCw3IEBAIFN0cmluZyBjcmVhdGVIRVZDQ29kZWNQYXJhbWV0ZXJzU3RyaW5n
KGMKICAgICAvLyBnZW5lcmFsX3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnLCBlYWNoIGVuY29kZWQg
YXMgYSBoZXhhZGVjaW1hbCBudW1iZXIsIGFuZCB0aGUgZW5jb2RpbmcKICAgICAvLyBvZiBlYWNo
IGJ5dGUgc2VwYXJhdGVkIGJ5IGEgcGVyaW9kOyB0cmFpbGluZyBieXRlcyB0aGF0IGFyZSB6ZXJv
IG1heSBiZSBvbWl0dGVkLgogICAgIFN0cmluZ0J1aWxkZXIgY29tcGF0aWJpbGl0eUZsYWdzOwot
ICAgIGF1dG8gbGFzdEZsYWdCeXRlID0gcGFyYW1ldGVycy5nZW5lcmFsQ29uc3RyYWludEluZGlj
YXRvckZsYWdzLnJldmVyc2VGaW5kTWF0Y2hpbmcoW10gKGF1dG8mIGZsYWcpIHsgcmV0dXJuIGZs
YWc7IH0pOworICAgIGF1dG8gbGFzdEZsYWdCeXRlID0gcGFyYW1ldGVycy5nZW5lcmFsQ29uc3Ry
YWludEluZGljYXRvckZsYWdzLnJldmVyc2VGaW5kSWYoW10gKGF1dG8mIGZsYWcpIHsgcmV0dXJu
IGZsYWc7IH0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBsYXN0RmxhZ0J5dGUgIT0gbm90Rm91
bmQgJiYgaSA8PSBsYXN0RmxhZ0J5dGU7ICsraSkgewogICAgICAgICBjb21wYXRpYmlsaXR5Rmxh
Z3MuYXBwZW5kKCcuJyk7CiAgICAgICAgIGNvbXBhdGliaWxpdHlGbGFncy5hcHBlbmQoaGV4KHBh
cmFtZXRlcnMuZ2VuZXJhbENvbnN0cmFpbnRJbmRpY2F0b3JGbGFnc1tpXSwgMikpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAko
cmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMyLDcgKzMzMiw3IEBAIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXIKIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9y
eSogTWVkaWFQbGF5ZXI6Om1lZGlhRW5naW5lKE1lZGlhUGxheWVyRW51bXM6Ok1lZGlhRW5naW5l
SWRlbnRpZmllciBpZGVudGlmaWVyKQogewogICAgIGF1dG8mIGVuZ2luZXMgPSBpbnN0YWxsZWRN
ZWRpYUVuZ2luZXMoKTsKLSAgICBhdXRvIGN1cnJlbnRJbmRleCA9IGVuZ2luZXMuZmluZE1hdGNo
aW5nKFtpZGVudGlmaWVyXSAoYXV0byYgZW5naW5lKSB7CisgICAgYXV0byBjdXJyZW50SW5kZXgg
PSBlbmdpbmVzLmZpbmRJZihbaWRlbnRpZmllcl0gKGF1dG8mIGVuZ2luZSkgewogICAgICAgICBy
ZXR1cm4gZW5naW5lLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsKICAgICB9KTsKIApAQCAt
MzkzLDcgKzM5Myw3IEBAIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogTWVkaWFQbGF5ZXI6Om4K
ICAgICBpZiAoIWN1cnJlbnQpIAogICAgICAgICByZXR1cm4gZW5naW5lcy5maXJzdCgpLmdldCgp
OwogCi0gICAgYXV0byBjdXJyZW50SW5kZXggPSBlbmdpbmVzLmZpbmRNYXRjaGluZyhbY3VycmVu
dF0gKGF1dG8mIGVuZ2luZSkgeworICAgIGF1dG8gY3VycmVudEluZGV4ID0gZW5naW5lcy5maW5k
SWYoW2N1cnJlbnRdIChhdXRvJiBlbmdpbmUpIHsKICAgICAgICAgcmV0dXJuIGVuZ2luZS5nZXQo
KSA9PSBjdXJyZW50OwogICAgIH0pOwogICAgIGlmIChjdXJyZW50SW5kZXggPT0gbm90Rm91bmQp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyODg0NjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODUsNyArNTg1
LDcgQEAgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYgogCiAgICAgICAg
IGF1dG8gc2Vzc2lvbktleXMgPSBzZXNzaW9uSW50ZXJmYWNlLT5rZXlJRHMoKTsKICAgICAgICAg
aWYgKGFueU9mKHNlc3Npb25LZXlzLCBbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI+JiBzZXNzaW9uS2V5KSB7Ci0gICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRNYXRjaGlu
ZyhbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBrZXlJRCkgeworICAgICAg
ICAgICAgcmV0dXJuIGtleUlEcy5maW5kSWYoWyZdKGNvbnN0IFJlZjxGcmFnbWVudGVkU2hhcmVk
QnVmZmVyPiYga2V5SUQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4ga2V5SUQuZ2V0KCkgPT0g
c2Vzc2lvbktleS5nZXQoKTsKICAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOwogICAgICAgICB9
KSkKQEAgLTU5Niw3ICs1OTYsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWlu
Z0FWRk9iCiAKIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQyogQ0RN
SW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JSZXF1ZXN0KEFWQ29u
dGVudEtleVJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fc2Vz
c2lvbnMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byBzZXNzaW9uKSB7CisgICAgYXV0byBpbmRleCA9
IG1fc2Vzc2lvbnMuZmluZElmKFsmXSAoYXV0byBzZXNzaW9uKSB7CiAgICAgICAgIHJldHVybiBz
ZXNzaW9uICYmIHNlc3Npb24tPmhhc1JlcXVlc3QocmVxdWVzdCk7CiAgICAgfSk7CiAKQEAgLTYw
OCw3ICs2MDgsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iCiAK
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQyogQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JHcm91cChBVkNvbnRlbnRLZXlSZXBv
cnRHcm91cCogZ3JvdXApIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fc2Vzc2lvbnMuZmlu
ZE1hdGNoaW5nKFtncm91cF0gKGF1dG8gc2Vzc2lvbikgeworICAgIGF1dG8gaW5kZXggPSBtX3Nl
c3Npb25zLmZpbmRJZihbZ3JvdXBdIChhdXRvIHNlc3Npb24pIHsKICAgICAgICAgcmV0dXJuIHNl
c3Npb24gJiYgc2Vzc2lvbi0+Y29udGVudEtleVJlcG9ydEdyb3VwKCkgPT0gZ3JvdXA7CiAgICAg
fSk7CiAKQEAgLTg1Myw5ICs4NTMsOSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5
U3RyZWFtaW5nCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBh
dXRvIGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3IpKTsK
LSAgICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUoKS5y
ZXF1ZXN0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiByZXF1ZXN0KSB7CisgICAgICAgICAgICBh
dXRvIGZvdW5kSW5kZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZElm
KFsmXSAoYXV0byYgcmVxdWVzdCkgewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURzID0ga2V5
SURzRm9yUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5
SURzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBp
ZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZElmKFsmXShjb25zdCBSZWY8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpZC5nZXQoKSA9PSBrZXlJRC5nZXQoKTsKICAgICAgICAgICAgICAgICB9KSAhPSBub3RGb3Vu
ZDsKICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyODg0NjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgYm9vbCBHcmFwaGljc0xh
eWVyQ0E6OnNob3VsZFJlcGFpbnRPblNpegogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YW5pbWF0
aW9uSXNSdW5uaW5nKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkgY29uc3QKIHsKLSAgICBh
dXRvIGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRNYXRjaGluZyhbJl0oTGF5ZXJQcm9wZXJ0eUFu
aW1hdGlvbiBhbmltYXRpb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRJ
ZihbJl0oTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiBhbmltYXRpb24pIHsKICAgICAgICAgcmV0dXJu
IGFuaW1hdGlvbi5tX25hbWUgPT0gYW5pbWF0aW9uTmFtZTsKICAgICB9KTsKICAgICByZXR1cm4g
aW5kZXggIT0gbm90Rm91bmQgJiYgbV9hbmltYXRpb25zW2luZGV4XS5tX3BsYXlTdGF0ZSA9PSBQ
bGF5U3RhdGU6OlBsYXlpbmc7CkBAIC0xMjA2LDcgKzEyMDYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cGxhdGZvcm1DQUxheWVyQW5pCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlv
bnMsIHN0cmVhbSA8PCAiR3JhcGhpY3NMYXllckNBICIgPDwgdGhpcyA8PCAiIGlkICIgPDwgcHJp
bWFyeUxheWVySUQoKSA8PCAiIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQgIiA8PCBh
bmltYXRpb25LZXkpOwogCi0gICAgYXV0byBpbmRleCA9IG1fYW5pbWF0aW9ucy5maW5kTWF0Y2hp
bmcoWyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0aW9uKSB7CisgICAgYXV0byBpbmRl
eCA9IG1fYW5pbWF0aW9ucy5maW5kSWYoWyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0
aW9uKSB7CiAgICAgICAgIHJldHVybiBhbmltYXRpb24uYW5pbWF0aW9uSWRlbnRpZmllcigpID09
IGFuaW1hdGlvbktleSAmJiAhYW5pbWF0aW9uLm1fYmVnaW5UaW1lOwogICAgIH0pOwogCkBAIC0z
MzAzLDcgKzMzMDMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQW5pbWF0aW9ucygp
CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBtX2FuaW1hdGlvbnMuZmluZE1hdGNoaW5nKFsmXShMYXllclBy
b3BlcnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAgIHJldHVybiBtX2FuaW1hdGlvbnMuZmlu
ZElmKFsmXShMYXllclByb3BlcnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgewogICAgICAgICByZXR1
cm4gYW5pbWF0ZWRQcm9wZXJ0eUlzVHJhbnNmb3JtT3JSZWxhdGVkKGFuaW1hdGlvbi5tX3Byb3Bl
cnR5KSAmJiAoYW5pbWF0aW9uLm1fcGxheVN0YXRlID09IFBsYXlTdGF0ZTo6UGxheWluZyB8fCBh
bmltYXRpb24ubV9wbGF5U3RhdGUgPT0gUGxheVN0YXRlOjpQYXVzZWQpOwogICAgIH0pICE9IG5v
dEZvdW5kOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCShyZXZpc2lvbiAyODg0NjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04NDcs
NyArODQ3LDcgQEAgYm9vbCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljbwogICAg
IFZlY3RvcjxDR1JlY3Q+IGJvdW5kaW5nUmVjdHM7CiAgICAgYm91bmRpbmdSZWN0cy5maWxsKENH
UmVjdFplcm8sIGdseXBocy5zaXplKCkpOwogICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JH
bHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVn
aW4oKSwgYm91bmRpbmdSZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICByZXR1cm4g
bm90Rm91bmQgPT0gYm91bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgewor
ICAgIHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRJZihbXShhdXRvJiByZWN0
KSB7CiAgICAgICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKICAgICB9KTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENv
bnRleHRFR0wuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcg
KzE0MCw3IEBAIGJvb2wgR0xDb250ZXh0RUdMOjpnZXRFR0xDb25maWcoRUdMRGlzcGwKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGF1dG8gaW5kZXggPSBjb25maWdzLmZpbmRN
YXRjaGluZyhbJl0oRUdMQ29uZmlnIHZhbHVlKSB7CisgICAgYXV0byBpbmRleCA9IGNvbmZpZ3Mu
ZmluZElmKFsmXShFR0xDb25maWcgdmFsdWUpIHsKICAgICAgICAgRUdMaW50IHJlZFNpemUsIGdy
ZWVuU2l6ZSwgYmx1ZVNpemUsIGFscGhhU2l6ZTsKICAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmli
KGRpc3BsYXksIHZhbHVlLCBFR0xfUkVEX1NJWkUsICZyZWRTaXplKTsKICAgICAgICAgZWdsR2V0
Q29uZmlnQXR0cmliKGRpc3BsYXksIHZhbHVlLCBFR0xfR1JFRU5fU0laRSwgJmdyZWVuU2l6ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyUmVnaXN0cnlTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmNwcAkocmV2
aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MSwx
NCArNTYxLDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBHU3RyZWFtZXIKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBjb2RlY3MpIHsKICAgICAgICAgYXV0byBjb2RlYyA9
IGl0ZW0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICAgICAgYm9vbCByZXF1aXJlc0hh
cmR3YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydAotICAg
ICAgICAgICAgLmZpbmRNYXRjaGluZyhbY29udGFpbmVyVHlwZSwgY29kZWNdKGF1dG8mIGhhcmR3
YXJlQ29udGVudFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgLmZpbmRJZihbY29udGFpbmVy
VHlwZSwgY29kZWNdKGF1dG8mIGhhcmR3YXJlQ29udGVudFR5cGUpIC0+IGJvb2wgewogICAgICAg
ICAgICAgYXV0byBoYXJkd2FyZUNvbnRhaW5lciA9IGhhcmR3YXJlQ29udGVudFR5cGUuY29udGFp
bmVyVHlwZSgpOwogICAgICAgICAgICAgaWYgKCFoYXJkd2FyZUNvbnRhaW5lci5pc0VtcHR5KCkK
ICAgICAgICAgICAgICAgICAmJiBmbm1hdGNoKGhhcmR3YXJlQ29udGFpbmVyLnV0ZjgoKS5kYXRh
KCksIGNvbnRhaW5lclR5cGUudXRmOCgpLmRhdGEoKSwgMCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgYXV0byBoYXJkd2FyZUNvZGVjcyA9IGhhcmR3YXJlQ29u
dGVudFR5cGUuY29kZWNzKCk7CiAgICAgICAgICAgICByZXR1cm4gaGFyZHdhcmVDb2RlY3MuaXNF
bXB0eSgpCi0gICAgICAgICAgICAgICAgfHwgaGFyZHdhcmVDb2RlY3MuZmluZE1hdGNoaW5nKFtj
b2RlY10oYXV0byYgaGFyZHdhcmVDb2RlYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgfHwg
aGFyZHdhcmVDb2RlY3MuZmluZElmKFtjb2RlY10oYXV0byYgaGFyZHdhcmVDb2RlYykgLT4gYm9v
bCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZm5tYXRjaChoYXJkd2FyZUNvZGVjLnV0
ZjgoKS5kYXRhKCksIGNvZGVjLnV0ZjgoKS5kYXRhKCksIDApOwogICAgICAgICAgICAgfSkgIT0g
bm90Rm91bmQ7CiAgICAgICAgIH0pICE9IG5vdEZvdW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9u
IDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuCiAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgpAQCAtMTM1OSw3ICsxMzU5LDcgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNob3VsZEhhdgogICAgIGJvb2wgaXNJbnZpc2libGVCZWNhdXNlT3BhY2l0eVplcm8gPSAh
b3BhY2l0eSgpICYmICFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmlt
YXRlZFByb3BlcnR5T3BhY2l0eSk7CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmlsdGVy
IHRoYXQgc2V0cyB0aGUgb3BhY2l0eSB0byB6ZXJvLgotICAgIGJvb2wgaGFzT3BhY2l0eVplcm9G
aWx0ZXIgPSBub3RGb3VuZCAhPSBmaWx0ZXJzKCkub3BlcmF0aW9ucygpLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgYXV0byYgb3BlcmF0aW9uKSB7CisgICAgYm9vbCBoYXNPcGFjaXR5WmVyb0ZpbHRl
ciA9IG5vdEZvdW5kICE9IGZpbHRlcnMoKS5vcGVyYXRpb25zKCkuZmluZElmKFsmXShjb25zdCBh
dXRvJiBvcGVyYXRpb24pIHsKICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi0+dHlwZSgpID09IEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZTo6T1BBQ0lUWSAmJiAhZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7CiAg
ICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEd0ay5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDcgKzQ1NSw3IEBAIFBh
c3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICAgICAgICAgIHJldHVy
biBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOwogICAgIH0KIAotICAgIGF1
dG8gcmVzdWx0ID0gdHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IFN0cmluZyYgdHlwZSkgewor
ICAgIGF1dG8gcmVzdWx0ID0gdHlwZXMuZmluZElmKFtdKGNvbnN0IFN0cmluZyYgdHlwZSkgewog
ICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
KHR5cGUpOwogICAgIH0pOwogICAgIHJldHVybiByZXN1bHQgPT0gbm90Rm91bmQgPyBGaWxlQ29u
dGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRh
aW5GaWxlUGF0aHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9D
YXB0dXJlRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vQ2FwdHVyZURldmljZS5oCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTU0LDcgKzE1NCw3IEBAIGlubGluZSBib29sIGhhdmVEZXZpY2VzQ2hhbmdlZChjb25zdCBWZWMK
ICAgICAgICAgaWYgKG5ld0RldmljZS50eXBlKCkgIT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6Q2FtZXJhICYmIG5ld0RldmljZS50eXBlKCkgIT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6TWljcm9waG9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gaW5k
ZXggPSBvbGREZXZpY2VzLmZpbmRNYXRjaGluZyhbJm5ld0RldmljZV0oYXV0byYgb2xkRGV2aWNl
KSB7CisgICAgICAgIGF1dG8gaW5kZXggPSBvbGREZXZpY2VzLmZpbmRJZihbJm5ld0RldmljZV0o
YXV0byYgb2xkRGV2aWNlKSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3RGV2aWNlLnBlcnNpc3Rl
bnRJZCgpID09IG9sZERldmljZS5wZXJzaXN0ZW50SWQoKSAmJiBuZXdEZXZpY2UuZW5hYmxlZCgp
ICE9IG9sZERldmljZS5lbmFibGVkKCk7CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5o
CShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNSw3ICszMDUsNyBAQCBw
dWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9taW4pIHsKLSAgICAgICAgICAgIGF1
dG8gaW5kZXggPSBkaXNjcmV0ZUNhcGFiaWxpdHlWYWx1ZXMuZmluZE1hdGNoaW5nKFsmXShWYWx1
ZVR5cGUgdmFsdWUpIHsgcmV0dXJuIG1fbWluLnZhbHVlKCkgPj0gdmFsdWU7IH0pOworICAgICAg
ICAgICAgYXV0byBpbmRleCA9IGRpc2NyZXRlQ2FwYWJpbGl0eVZhbHVlcy5maW5kSWYoWyZdKFZh
bHVlVHlwZSB2YWx1ZSkgeyByZXR1cm4gbV9taW4udmFsdWUoKSA+PSB2YWx1ZTsgfSk7CiAgICAg
ICAgICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICBtaW4gPSB2
YWx1ZSA9IGRpc2NyZXRlQ2FwYWJpbGl0eVZhbHVlc1tpbmRleF07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24g
Mjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDcg
KzQwMCw3IEBAIHZvaWQgV2ViS2l0TWVkaWFTdHJlYW1PYnNlcnZlcjo6ZGlkUmVtb3YKICAgICBh
dXRvKiBwcml2ID0gZWxlbWVudC0+cHJpdjsKIAogICAgIC8vIExvb2t1cCB0aGUgY29ycmVzcG9u
ZGluZyBJbnRlcm5hbFNvdXJjZSBhbmQgdGFrZSBpdCBmcm9tIHRoZSBzdG9yYWdlLgotICAgIGF1
dG8gaW5kZXggPSBwcml2LT5zb3VyY2VzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgewor
ICAgIGF1dG8gaW5kZXggPSBwcml2LT5zb3VyY2VzLmZpbmRJZihbJl0oYXV0byYgaXRlbSkgewog
ICAgICAgICByZXR1cm4gaXRlbS0+dHJhY2soKS5pZCgpID09IHRyYWNrLmlkKCk7CiAgICAgfSk7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsU291cmNlPiBzb3VyY2UgPSBXVEZNb3ZlKHBy
aXYtPnNvdXJjZXNbaW5kZXhdKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0J
KHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxOSw3ICs2
MTksNyBAQCB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpnZW5lcmF0ZVByZXNlCiAKICAgICAg
ICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IFBBTDo6Q01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uR2V0RGltZW5zaW9ucyhmb3JtYXQuZm9ybWF0RGVzY3JpcHRpb24pOwogICAgICAgICBJ
bnRTaXplIHNpemUgPSB7IGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0IH07Ci0g
ICAgICAgIGF1dG8gaW5kZXggPSBwcmVzZXRzLmZpbmRNYXRjaGluZyhbJnNpemVdKGF1dG8mIHBy
ZXNldCkgeworICAgICAgICBhdXRvIGluZGV4ID0gcHJlc2V0cy5maW5kSWYoWyZzaXplXShhdXRv
JiBwcmVzZXQpIHsKICAgICAgICAgICAgIHJldHVybiBzaXplID09IHByZXNldC0+c2l6ZTsKICAg
ICAgICAgfSk7CiAgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAkocmV2aXNp
b24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVy
TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC02MCw3ICs2MSw3IEBAIFN0cmluZyBIVFRQSGVhZGVyTWFw
OjpnZXQoY29uc3QgU3RyaW5nJiAKIAogU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldFVuY29tbW9u
SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIGluZGV4ID0gbV91
bmNvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICBhdXRv
IGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAg
ICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaGVhZGVyLmtleSwgbmFtZSk7CiAg
ICAgfSk7CiAgICAgcmV0dXJuIGluZGV4ICE9IG5vdEZvdW5kID8gbV91bmNvbW1vbkhlYWRlcnNb
aW5kZXhdLnZhbHVlIDogU3RyaW5nKCk7CkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBIVFRQSGVh
ZGVyTWFwOjpzZXQoY29uc3QgU3RyaW5nJiBuYQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldFVu
Y29tbW9uSGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBoZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElmKFsm
XShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
aGVhZGVyLmtleSwgbmFtZSk7CiAgICAgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQpA
QCAtMTE2LDcgKzExNyw3IEBAIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRkKGNvbnN0IFN0cmluZyYg
bmEKICAgICAgICAgYWRkKGhlYWRlck5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShh
dXRvJiBoZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElm
KFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoaGVhZGVyLmtleSwgbmFtZSk7CiAgICAgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5k
KQpAQCAtMTUxLDcgKzE1Miw3IEBAIGJvb2wgSFRUUEhlYWRlck1hcDo6Y29udGFpbnMoY29uc3Qg
U3RyaW4KICAgICBpZiAoZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKQogICAg
ICAgICByZXR1cm4gY29udGFpbnMoaGVhZGVyTmFtZSk7CiAKLSAgICByZXR1cm4gbV91bmNvbW1v
bkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICByZXR1cm4gbV91
bmNvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJu
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaGVhZGVyLmtleSwgbmFtZSk7CiAgICAgfSkgIT0gbm90
Rm91bmQ7CiB9CkBAIC0xNjksNyArMTcwLDcgQEAgYm9vbCBIVFRQSGVhZGVyTWFwOjpyZW1vdmUo
Y29uc3QgU3RyaW5nJgogCiBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KEhUVFBIZWFkZXJOYW1l
IG5hbWUpIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVhZGVycy5maW5kTWF0
Y2hpbmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRl
cnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlci5rZXkg
PT0gbmFtZTsKICAgICB9KTsKICAgICByZXR1cm4gaW5kZXggIT0gbm90Rm91bmQgPyBtX2NvbW1v
bkhlYWRlcnNbaW5kZXhdLnZhbHVlIDogU3RyaW5nKCk7CkBAIC0xNzcsNyArMTc4LDcgQEAgU3Ry
aW5nIEhUVFBIZWFkZXJNYXA6OmdldChIVFRQSGVhZGVyTmFtZQogCiB2b2lkIEhUVFBIZWFkZXJN
YXA6OnNldChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAg
IGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFk
ZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV9jb21tb25IZWFkZXJzLmZpbmRJZihbJl0oYXV0byYg
aGVhZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXIua2V5ID09IG5hbWU7CiAgICAgfSk7CiAg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgSFRUUEhl
YWRlck1hcDo6c2V0KEhUVFBIZWFkZXJOYW1lIG4KIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250
YWlucyhIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbkhl
YWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICByZXR1cm4gbV9jb21t
b25IZWFkZXJzLmZpbmRJZihbJl0oYXV0byYgaGVhZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFk
ZXIua2V5ID09IG5hbWU7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkBAIC0yMDIsNyArMjAzLDcg
QEAgYm9vbCBIVFRQSGVhZGVyTWFwOjpyZW1vdmUoSFRUUEhlYWRlck5hbQogCiB2b2lkIEhUVFBI
ZWFkZXJNYXA6OmFkZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBoZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV9jb21tb25IZWFkZXJzLmZpbmRJZihbJl0o
YXV0byYgaGVhZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXIua2V5ID09IG5hbWU7CiAgICAg
fSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcAkocmV2aXNp
b24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4
dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY1
LDcgQEAgdm9pZCBPcGVuWFJFeHRlbnNpb25zOjpsb2FkTWV0aG9kcyhYcklucwogCiBib29sIE9w
ZW5YUkV4dGVuc2lvbnM6OmlzRXh0ZW5zaW9uU3VwcG9ydGVkKGNvbnN0IGNoYXIqIG5hbWUpIGNv
bnN0CiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fZXh0ZW5zaW9ucy5maW5kTWF0Y2hpbmcoW25h
bWVdKGF1dG8mIHByb3BlcnR5KSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fZXh0ZW5zaW9ucy5m
aW5kSWYoW25hbWVdKGF1dG8mIHByb3BlcnR5KSB7CiAgICAgICAgIHJldHVybiAhc3RyY21wKHBy
b3BlcnR5LmV4dGVuc2lvbk5hbWUsIG5hbWUpOwogICAgIH0pOwogICAgIHJldHVybiBwb3NpdGlv
biAhPSBub3RGb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCShyZXZp
c2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTEzMSw3ICsxMzEsNyBAQCBwcm90ZWN0ZWQ6CiAKIGlubGluZSBi
b29sIGlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW5JZGVudGlm
aWVyPiYgcGx1Z2luSWRlbnRpZmllcnMsIGNvbnN0IFVSTCYgcGFnZVVSTCwgY29uc3QgU3RyaW5n
JiBwbHVnaW5JZGVudGlmaWVyKQogewotICAgIHJldHVybiBwbHVnaW5JZGVudGlmaWVycy5maW5k
TWF0Y2hpbmcoWyZdIChhdXRvJiYgcGx1Z2luKSB7CisgICAgcmV0dXJuIHBsdWdpbklkZW50aWZp
ZXJzLmZpbmRJZihbJl0gKGF1dG8mJiBwbHVnaW4pIHsKICAgICAgICAgcmV0dXJuIHBhZ2VVUkwu
aXNNYXRjaGluZ0RvbWFpbihwbHVnaW4ubWF0Y2hpbmdEb21haW4pICYmIHBsdWdpbi5wbHVnaW5J
ZGVudGlmaWVyID09IHBsdWdpbklkZW50aWZpZXI7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAyMi0wMS0yNCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFZlY3RvciBhbmQgRml4ZWRWZWN0
b3I6OmZpbmRNYXRjaGluZyB0byBmaW5kSWYgdG8gbWF0Y2ggc3RsIG5hbWluZy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2NAorICAgICAgICBy
ZGFyOi8vODc0MjQ3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNRmFjdG9yeVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6ZmFjdG9yeUZvcktleVN5c3RlbSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZFJvb3ROZXR3b3JrQWN0aXZpdHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZmluZE5l
dHdvcmtBY3Rpdml0eVRyYWNrZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZTo6c3RvcmVSZWNvcmRzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZTo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlRnJvbVJlY29y
ZExpc3QpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNv
cmRUb0Rpc2spOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpm
aW5kKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpoYXNBY3RpdmVDYWNoZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpkaXNwb3NlKToKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURh
dGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcDoKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19yZW1vdmVfZnJhbWVfZGlzcGxheWVkX2NhbGxiYWNrKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9y
bWF0aW9uOjpncmFudEFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9ybWF0aW9uOjphY2Nlc3NUeXBlIGNvbnN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OnNldERldmljZUFzRmlyc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsQXV0aGVudGljYXRvcjo6ZGVsZXRlRHVwbGljYXRlQ3JlZGVudGlhbCBjb25zdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3Iu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0aGVudGljYXRvcjo6Y29udGludWVHZXROZXh0
QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlOjpkZWZhdWx0RHJvcFByZXZpZXcgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpCbG9ja1B0cjx2b2lkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5r
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGlzcGxheUxpbms6OnNldFByZWZlcnJlZEZyYW1lc1Bl
clNlY29uZCk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpnZXRDb250ZXh0
TWVudUZyb21JdGVtcyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dl
c3Rpb25zRHJvcGRvd25NYWMubW06CisgICAgICAgIChzaG91bGRTaG93RGl2aWRlcnNCZXR3ZWVu
Q2VsbHMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJbnRlcm5hbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlw
dEludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjph
ZGRVc2VyU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RUZXh0UmVjb2du
aXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OmNoZWNrRG9jdW1lbnRzQ2FwdHVyZVN0YXRlQ29uc2lzdGVuY3kpOgorCiAyMDIyLTAx
LTI0ICBEYXZpZCBRdWVzYWRhICA8ZGF2aWRfcXVlc2FkYUBhcHBsZS5jb20+CiAKICAgICAgICAg
U2ltcGxpZnkgYWNjZXNzZXMgdG8gU3lzdGVtVmVyc2lvbi5wbGlzdApJbmRleDogU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETUZhY3RvcnlQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZUNETUZhY3RvcnlQcm94
eS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVDRE1GYWN0b3J5UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAg
UmVtb3RlQ0RNRmFjdG9yeVByb3h5Ojp+UmVtb3RlQ0RNRmFjdG9yeQogc3RhdGljIENETUZhY3Rv
cnkqIGZhY3RvcnlGb3JLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiB7CiAgICAg
YXV0byYgZmFjdG9yaWVzID0gQ0RNRmFjdG9yeTo6cmVnaXN0ZXJlZEZhY3RvcmllcygpOwotICAg
IGF1dG8gZm91bmRJbmRleCA9IGZhY3Rvcmllcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBmYWN0
b3J5KSB7IHJldHVybiBmYWN0b3J5LT5zdXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0pOyB9KTsK
KyAgICBhdXRvIGZvdW5kSW5kZXggPSBmYWN0b3JpZXMuZmluZElmKFsmXSAoYXV0byYgZmFjdG9y
eSkgeyByZXR1cm4gZmFjdG9yeS0+c3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKTsgfSk7CiAg
ICAgaWYgKGZvdW5kSW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIHJldHVybiBmYWN0b3JpZXNbZm91bmRJbmRleF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMTcyLDE0ICsxMTcyLDE0IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnN0b3AKIAogc2l6ZV90IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpmaW5kUm9vdE5l
dHdvcmtBY3Rpdml0eShQYWdlSWRlbnRpZmllciBwYWdlSUQpCiB7Ci0gICAgcmV0dXJuIG1fbmV0
d29ya0FjdGl2aXR5VHJhY2tlcnMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7
CisgICAgcmV0dXJuIG1fbmV0d29ya0FjdGl2aXR5VHJhY2tlcnMuZmluZElmKFsmXShjb25zdCBh
dXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLmlzUm9vdEFjdGl2aXR5ICYmIGl0ZW0u
cGFnZUlEID09IHBhZ2VJRDsKICAgICB9KTsKIH0KIAogc2l6ZV90IE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpmaW5kTmV0d29ya0FjdGl2aXR5VHJhY2tlcihXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlcklkZW50aWZpZXIgcmVzb3VyY2VJRCkKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrQWN0
aXZpdHlUcmFja2Vycy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICBy
ZXR1cm4gbV9uZXR3b3JrQWN0aXZpdHlUcmFja2Vycy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0
ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0ucmVzb3VyY2VJRCA9PSByZXNvdXJjZUlEOwogICAg
IH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAJKHJldmlzaW9uIDI4ODQ2
MykKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgQ2FjaGU6
OnN0b3JlUmVjb3JkcyhWZWN0b3I8UmVjb3JkPiYKICAgICAgICAgYXV0byogc2FtZVVSTFJlY29y
ZHMgPSByZWNvcmRzRnJvbVVSTChyZWNvcmQucmVxdWVzdC51cmwoKSk7CiAgICAgICAgIGF1dG8g
bWF0Y2hpbmdSZWNvcmRzID0gcXVlcnlDYWNoZShzYW1lVVJMUmVjb3JkcywgcmVjb3JkLnJlcXVl
c3QsIG9wdGlvbnMpOwogCi0gICAgICAgIGF1dG8gcG9zaXRpb24gPSAhbWF0Y2hpbmdSZWNvcmRz
LmlzRW1wdHkoKSA/IHNhbWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBtYXRjaGluZ1JlY29yZHNbMF07IH0p
IDogbm90Rm91bmQ7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSAhbWF0Y2hpbmdSZWNvcmRzLmlz
RW1wdHkoKSA/IHNhbWVVUkxSZWNvcmRzLT5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBtYXRjaGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91
bmQ7CiAKICAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICBy
ZWNvcmQuaWRlbnRpZmllciA9ICsrbV9uZXh0UmVjb3JkSWRlbnRpZmllcjsKQEAgLTQzOCw3ICs0
MzgsNyBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzCiAgICAgICAg
IGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwocmVjb3JkLnJlcXVlc3QudXJs
KCkpOwogICAgICAgICBhdXRvIG1hdGNoaW5nUmVjb3JkcyA9IHF1ZXJ5Q2FjaGUoc2FtZVVSTFJl
Y29yZHMsIHJlY29yZC5yZXF1ZXN0LCBvcHRpb25zKTsKIAotICAgICAgICBhdXRvIHBvc2l0aW9u
ID0gKHNhbWVVUkxSZWNvcmRzICYmICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0eSgpKSA/IHNhbWVV
UkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0uaWRlbnRpZmllciA9PSBtYXRjaGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91bmQ7CisgICAg
ICAgIGF1dG8gcG9zaXRpb24gPSAoc2FtZVVSTFJlY29yZHMgJiYgIW1hdGNoaW5nUmVjb3Jkcy5p
c0VtcHR5KCkpID8gc2FtZVVSTFJlY29yZHMtPmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IG1hdGNoaW5nUmVjb3Jkc1swXTsgfSkgOiBub3RG
b3VuZDsKIAogICAgICAgICBzcGFjZVJlcXVpcmVkICs9IHJlY29yZC5yZXNwb25zZUJvZHlTaXpl
OwogICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKQEAgLTQ3OSw3ICs0NzksNyBA
QCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1CiAgICAgfQogCiAgICAg
cmVjb3Jkcy0+cmVtb3ZlQWxsTWF0Y2hpbmcoW3RoaXMsICZyZWNvcmRJZGVudGlmaWVyc10oYXV0
byYgaXRlbSkgewotICAgICAgICBib29sIHNob3VsZFJlbW92ZSA9IHJlY29yZElkZW50aWZpZXJz
LmZpbmRNYXRjaGluZyhbJml0ZW1dKGF1dG8gaWRlbnRpZmllcikgeyByZXR1cm4gaWRlbnRpZmll
ciA9PSBpdGVtLmlkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kOworICAgICAgICBib29sIHNob3Vs
ZFJlbW92ZSA9IHJlY29yZElkZW50aWZpZXJzLmZpbmRJZihbJml0ZW1dKGF1dG8gaWRlbnRpZmll
cikgeyByZXR1cm4gaWRlbnRpZmllciA9PSBpdGVtLmlkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5k
OwogICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlKQogICAgICAgICAgICAgdGhpcy0+cmVtb3ZlUmVj
b3JkRnJvbURpc2soaXRlbSk7CiAgICAgICAgIHJldHVybiBzaG91bGRSZW1vdmU7CkBAIC00OTks
NyArNDk5LDcgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVgogICAg
IGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgewogICAgICAgICBhdXRv
KiBjYWNoZSA9IHRoaXM7CiAgICAgICAgIHJlY29yZHMucmVtb3ZlQWxsTWF0Y2hpbmcoW2NhY2hl
LCAmcmVjb3JkSWRlbnRpZmllcnNdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKLSAgICAgICAgICAgIHJl
dHVybiBub3RGb3VuZCAhPSByZWNvcmRJZGVudGlmaWVycy5maW5kTWF0Y2hpbmcoW2NhY2hlLCAm
aXRlbV0oY29uc3QgYXV0byYgaWRlbnRpZmllcikgeworICAgICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kICE9IHJlY29yZElkZW50aWZpZXJzLmZpbmRJZihbY2FjaGUsICZpdGVtXShjb25zdCBhdXRv
JiBpZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWRlbnRpZmllciAhPSBp
ZGVudGlmaWVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgY2FjaGUtPnJlbW92ZVJlY29yZEZyb21EaXNrKGl0ZW0pOwpAQCAtNTMyLDcgKzUzMiw3
IEBAIHZvaWQgQ2FjaGU6OnVwZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmYKICAgICAgICAgaWYg
KCFzYW1lVVJMUmVjb3JkcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvIHBv
c2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGl0
ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSByZWNvcmRJZGVudGlmaWVyOyB9KTsKKyAg
ICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5maW5kSWYoWyZdIChjb25zdCBh
dXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gcmVjb3JkSWRlbnRpZmllcjsg
fSk7CiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgYXV0byYgcmVjb3JkSW5mbyA9IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlv
bik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyODg0NjMp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzksMTcgKzI3OSwxNyBAQCB2b2lkIENhY2hl
czo6Y2xlYXJQZW5kaW5nV3JpdGluZ0NhY2hlc1RvCiAKIENhY2hlKiBDYWNoZXM6OmZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKQogewotICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0
Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ubmFtZSgpID09IG5hbWU7
IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0ubmFtZSgpID09IG5hbWU7IH0pOwogICAgIHJldHVybiAocG9z
aXRpb24gIT0gbm90Rm91bmQpID8gJm1fY2FjaGVzW3Bvc2l0aW9uXSA6IG51bGxwdHI7CiB9CiAK
IENhY2hlKiBDYWNoZXM6OmZpbmQodWludDY0X3QgaWRlbnRpZmllcikKIHsKLSAgICBhdXRvIHBv
c2l0aW9uID0gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKKyAgICBhdXRvIHBvc2l0
aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVt
LmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKICAgICBpZiAocG9zaXRpb24gIT0gbm90
Rm91bmQpCiAgICAgICAgIHJldHVybiAmbV9jYWNoZXNbcG9zaXRpb25dOwogCi0gICAgcG9zaXRp
b24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7
IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKKyAgICBwb3NpdGlv
biA9IG1fcmVtb3ZlZENhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOwogICAgIHJldHVybiAocG9zaXRp
b24gIT0gbm90Rm91bmQpID8gJm1fcmVtb3ZlZENhY2hlc1twb3NpdGlvbl0gOiBudWxscHRyOwog
fQogCkBAIC0zNDYsMTAgKzM0NiwxMCBAQCB2b2lkIENhY2hlczo6cmVtb3ZlKHVpbnQ2NF90IGlk
ZW50aWZpZXIsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHBvc2l0aW9uID0g
bV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVt
LmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9j
YWNoZXMuZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZp
ZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKIAogICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkg
ewotICAgICAgICBBU1NFUlQobV9yZW1vdmVkQ2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3Qg
YXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSkg
IT0gbm90Rm91bmQpOworICAgICAgICBBU1NFUlQobV9yZW1vdmVkQ2FjaGVzLmZpbmRJZihbJl0o
Y29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmll
cjsgfSkgIT0gbm90Rm91bmQpOwogICAgICAgICBjYWxsYmFjayhDYWNoZUlkZW50aWZpZXJPcGVy
YXRpb25SZXN1bHQgeyAwLCBmYWxzZSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM2
OCwxMiArMzY4LDEyIEBAIGJvb2wgQ2FjaGVzOjpoYXNBY3RpdmVDYWNoZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcmVtb3ZlZENhY2hlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoW10oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS5pc0FjdGl2ZSgpOyB9KSAhPSBub3RGb3VuZDsKKyAgICByZXR1cm4gbV9jYWNoZXMu
ZmluZElmKFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaXNBY3RpdmUoKTsgfSkg
IT0gbm90Rm91bmQ7CiB9CiAKIHZvaWQgQ2FjaGVzOjpkaXNwb3NlKENhY2hlJiBjYWNoZSkKIHsK
LSAgICBhdXRvIHBvc2l0aW9uID0gbV9yZW1vdmVkQ2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29u
c3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUuaWRlbnRp
ZmllcigpOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9yZW1vdmVkQ2FjaGVzLmZpbmRJZihb
Jl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUu
aWRlbnRpZmllcigpOyB9KTsKICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKICAgICAg
ICAgaWYgKG1fc3RvcmFnZSkKICAgICAgICAgICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGNhY2hlLmtl
eXMoKSwgW10geyB9KTsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIENhY2hlczo6ZGlzcG9zZShD
YWNoZSYgY2FjaGUpCiAgICAgICAgIG1fcmVtb3ZlZENhY2hlcy5yZW1vdmUocG9zaXRpb24pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChtX2NhY2hlcy5maW5kTWF0Y2hpbmco
WyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNhY2hl
LmlkZW50aWZpZXIoKTsgfSkgIT0gbm90Rm91bmQpOworICAgIEFTU0VSVChtX2NhY2hlcy5maW5k
SWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNh
Y2hlLmlkZW50aWZpZXIoKTsgfSkgIT0gbm90Rm91bmQpOwogCiAgICAgLy8gV2UgY2Fubm90IGNs
ZWFyIHRoZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gaW4gZXBoZW1lcmFsIHNlc3Npb25zIHNpbmNl
IHdlIHdvdWxkIGxvb3NlIGFsbCBkYXRhLgogICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0
UmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIE1lZGlhRm9ybWF0UmVh
ZGVyOjpkaWRQcm92aWRlTWVkaWFECiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogCiAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07Ci0gICAgYXV0byB0cmFja0lu
ZGV4ID0gbV90cmFja1JlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiB0cmFjaykgeworICAg
IGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJzLmZpbmRJZihbJl0oYXV0byYgdHJhY2sp
IHsKICAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0gdHJhY2tJRDsKICAgICB9KTsK
IApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDgsNyArNDgsNyBAQCBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXREZXZpY2VBc0ZpcnN0KFZlY3RvcjxDYXB0
dXJlRGV2aWNlPiYgZGV2aWNlcywgY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKIHsKLSAgICBzaXpl
X3QgaW5kZXggPSBkZXZpY2VzLmZpbmRNYXRjaGluZyhbJmRldmljZUlEXShjb25zdCBhdXRvJiBk
ZXZpY2UpIHsKKyAgICBzaXplX3QgaW5kZXggPSBkZXZpY2VzLmZpbmRJZihbJmRldmljZUlEXShj
b25zdCBhdXRvJiBkZXZpY2UpIHsKICAgICAgICAgcmV0dXJuIGRldmljZS5wZXJzaXN0ZW50SWQo
KSA9PSBkZXZpY2VJRDsKICAgICB9KTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjMwLDcgKzQ2MzAs
NyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19yZW1vdmVfZnJhbWVfZGlzcGxhCiAgICAgfTsKIAog
ICAgIGlmICh3ZWJWaWV3LT5wcml2LT5pbkZyYW1lRGlzcGxheWVkKSB7Ci0gICAgICAgIGF1dG8g
aW5kZXggPSB3ZWJWaWV3LT5wcml2LT5mcmFtZURpc3BsYXllZENhbGxiYWNrcy5maW5kTWF0Y2hp
bmcobWF0Y2hGdW5jdGlvbik7CisgICAgICAgIGF1dG8gaW5kZXggPSB3ZWJWaWV3LT5wcml2LT5m
cmFtZURpc3BsYXllZENhbGxiYWNrcy5maW5kSWYobWF0Y2hGdW5jdGlvbik7CiAgICAgICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIHdlYlZpZXctPnByaXYtPmZyYW1lRGlz
cGxheWVkQ2FsbGJhY2tzVG9SZW1vdmUuYWRkKGlkKTsKICAgICB9IGVsc2UKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94
eUNvY29hLm1tCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02ODEsNyArNjgx
LDcgQEAgc3RkOjpvcHRpb25hbDxEYXRhT3duZXJUeXBlPiBXZWJQYXN0ZWJvYQogCiB2b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9ybWF0aW9uOjpncmFudEFjY2Vz
cyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFBhc3RlYm9hcmRBY2Nlc3NUeXBlIHR5cGUpCiB7
Ci0gICAgYXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYg
cHJvY2Vzc0FuZFR5cGUpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBwcm9jZXNzZXMuZmluZElm
KFsmXShhdXRvJiBwcm9jZXNzQW5kVHlwZSkgewogICAgICAgICByZXR1cm4gcHJvY2Vzc0FuZFR5
cGUuZmlyc3QgPT0gJnByb2Nlc3M7CiAgICAgfSk7CiAKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2VzCiAKIHN0ZDo6b3B0aW9uYWw8V2Vi
UGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzVHlwZT4gV2ViUGFzdGVib2FyZFByb3h5
OjpQYXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRpb246OmFjY2Vzc1R5cGUoV2ViUHJvY2Vzc1Byb3h5
JiBwcm9jZXNzKSBjb25zdAogewotICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb2Nlc3Nlcy5maW5k
TWF0Y2hpbmcoWyZdKGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7CisgICAgYXV0byBtYXRjaEluZGV4
ID0gcHJvY2Vzc2VzLmZpbmRJZihbJl0oYXV0byYgcHJvY2Vzc0FuZFR5cGUpIHsKICAgICAgICAg
cmV0dXJuIHByb2Nlc3NBbmRUeXBlLmZpcnN0ID09ICZwcm9jZXNzOwogICAgIH0pOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1
dGhlbnRpY2F0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCShyZXZpc2lvbiAyODg0
NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9M
b2NhbEF1dGhlbnRpY2F0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDUsNyArMjA1LDcgQEAg
dm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogICAgIC8vIFN0ZXAgOCBp
cyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJyb3IgZXhjZXB0aW9uIHJlY2Vp
dmVSZXNwb25kcy4KICAgICAvLyBTa2lwIFN0ZXAgMTAgYXMgY291bnRlciBpcyBjb25zdGFudGx5
IDAuCiAgICAgLy8gU3RlcCAyLgotICAgIGlmIChub3RGb3VuZCA9PSBjcmVhdGlvbk9wdGlvbnMu
cHViS2V5Q3JlZFBhcmFtcy5maW5kTWF0Y2hpbmcoW10gKGF1dG8mIHB1YktleUNyZWRQYXJhbSkg
eworICAgIGlmIChub3RGb3VuZCA9PSBjcmVhdGlvbk9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcy5m
aW5kSWYoW10gKGF1dG8mIHB1YktleUNyZWRQYXJhbSkgewogICAgICAgICByZXR1cm4gcHViS2V5
Q3JlZFBhcmFtLnR5cGUgPT0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSAmJiBw
dWJLZXlDcmVkUGFyYW0uYWxnID09IENPU0U6OkVTMjU2OwogICAgIH0pKSB7CiAgICAgICAgIHJl
Y2VpdmVFeGNlcHRpb24oeyBOb3RTdXBwb3J0ZWRFcnJvciwgIlRoZSBwbGF0Zm9ybSBhdHRhY2hl
ZCBhdXRoZW50aWNhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcHJvdmlkZWQgUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMuIl9zIH0pOwpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgKIAogICAgIGF1dG8gZXhjbHVkZUNyZWRlbnRp
YWxJZHMgPSBwcm9kdWNlSGFzaFNldChjcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxz
KTsKICAgICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFsSWRzLmlzRW1wdHkoKSkgewotICAgICAgICBp
ZiAobm90Rm91bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbJmV4Y2x1
ZGVDcmVkZW50aWFsSWRzXSAoYXV0byYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobm90Rm91
bmQgIT0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRJZihbJmV4Y2x1ZGVDcmVkZW50aWFsSWRz
XSAoYXV0byYgY3JlZGVudGlhbCkgewogICAgICAgICAgICAgYXV0byogcmF3SWQgPSBjcmVkZW50
aWFsLT5yYXdJZCgpOwogICAgICAgICAgICAgQVNTRVJUKHJhd0lkKTsKICAgICAgICAgICAgIHJl
dHVybiBleGNsdWRlQ3JlZGVudGlhbElkcy5jb250YWlucyhiYXNlNjRFbmNvZGVUb1N0cmluZyhy
YXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7CkBAIC01MjksNyArNTI5LDcgQEAg
dm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFtleHBlY3RlZFJlc3Bv
bnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgeworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZElmKFtleHBlY3RlZFJlc3BvbnNlID0gcmVz
cG9uc2VdIChhdXRvJiByZXNwb25zZSkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25z
ZS5wdHIoKSA9PSBleHBlY3RlZFJlc3BvbnNlOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IG5vdEZvdW5kKQpAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgTG9jYWxB
dXRoZW50aWNhdG9yOjpkZWxldGVEdXBsaWNhdGUKICAgICB1c2luZyBuYW1lc3BhY2UgTG9jYWxB
dXRoZW50aWNhdG9ySW50ZXJuYWw7CiAKICAgICBhdXRvJiBjcmVhdGlvbk9wdGlvbnMgPSBzdGQ6
OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9w
dGlvbnMpOwotICAgIG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hpbmcoW2NyZWF0aW9u
T3B0aW9uc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKKyAgICBtX2V4aXN0aW5nQ3JlZGVudGlhbHMu
ZmluZElmKFtjcmVhdGlvbk9wdGlvbnNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIGF1
dG8qIHVzZXJIYW5kbGUgPSBjcmVkZW50aWFsLT51c2VySGFuZGxlKCk7CiAgICAgICAgIEFTU0VS
VCh1c2VySGFuZGxlKTsKICAgICAgICAgaWYgKHVzZXJIYW5kbGUtPmJ5dGVMZW5ndGgoKSAhPSBj
cmVhdGlvbk9wdGlvbnMudXNlci5pZC5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
Q3RhcEF1dGhlbnRpY2F0b3IuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEN0YXBBdXRoZW50aWNhdG9y
Ojpjb250aW51ZUdldE5leHRBCiAgICAgICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2Fzc2VydGlvblJlc3Bv
bnNlcy5maW5kTWF0Y2hpbmcoW2V4cGVjdGVkUmVzcG9uc2UgPSByZXNwb25zZV0gKGF1dG8mIHJl
c3BvbnNlKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2Fzc2VydGlvblJlc3Bv
bnNlcy5maW5kSWYoW2V4cGVjdGVkUmVzcG9uc2UgPSByZXNwb25zZV0gKGF1dG8mIHJlc3BvbnNl
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5wdHIoKSA9PSBleHBlY3Rl
ZFJlc3BvbnNlOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gbm90Rm91bmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlOjpzZXREZWZhdWwKIAogVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGU6OmRlZmF1bHREcm9wUHJldmlldyhVSURyYWdJdGVtICppdGVtKSBjb25zdAogewot
ICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZGVmYXVsdERyb3BQcmV2aWV3cy5maW5kTWF0Y2hpbmco
WyZdIChhdXRvJiBpdGVtQW5kUHJldmlldykgeworICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZGVm
YXVsdERyb3BQcmV2aWV3cy5maW5kSWYoWyZdIChhdXRvJiBpdGVtQW5kUHJldmlldykgewogICAg
ICAgICByZXR1cm4gaXRlbUFuZFByZXZpZXcuaXRlbSA9PSBpdGVtOwogICAgIH0pOwogICAgIHJl
dHVybiBtYXRjaEluZGV4ID09IG5vdEZvdW5kID8gbmlsIDogbV9kZWZhdWx0RHJvcFByZXZpZXdz
W21hdGNoSW5kZXhdLnByZXZpZXcuZ2V0KCk7CkBAIC0yMDYsNyArMjA2LDcgQEAgVUlUYXJnZXRl
ZERyYWdQcmV2aWV3ICpEcmFnRHJvcEludGVyYWN0aQogCiBCbG9ja1B0cjx2b2lkKFVJVGFyZ2V0
ZWREcmFnUHJldmlldyAqKT4gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpkcm9wUHJldmlld1By
b3ZpZGVyKFVJRHJhZ0l0ZW0gKml0ZW0pCiB7Ci0gICAgYXV0byBtYXRjaEluZGV4ID0gbV9kZWxh
eWVkSXRlbVByZXZpZXdQcm92aWRlcnMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgaXRlbUFuZFBy
b3ZpZGVyKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gbV9kZWxheWVkSXRlbVByZXZpZXdQcm92
aWRlcnMuZmluZElmKFsmXSAoYXV0byYgaXRlbUFuZFByb3ZpZGVyKSB7CiAgICAgICAgIHJldHVy
biBpdGVtQW5kUHJvdmlkZXIuaXRlbSA9PSBpdGVtOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAJKHJldmlzaW9uIDI4ODQ2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBEaXNwbGF5TGluazo6c2V0UHJlZmVycmVk
RnJhbWVzUGVyUwogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBjb25uZWN0aW9uSW5mbyA9
IGl0LT52YWx1ZTsKLSAgICBhdXRvIGluZGV4ID0gY29ubmVjdGlvbkluZm8ub2JzZXJ2ZXJzLmZp
bmRNYXRjaGluZyhbb2JzZXJ2ZXJJRF0oY29uc3QgYXV0byYgb2JzZXJ2ZXIpIHsKKyAgICBhdXRv
IGluZGV4ID0gY29ubmVjdGlvbkluZm8ub2JzZXJ2ZXJzLmZpbmRJZihbb2JzZXJ2ZXJJRF0oY29u
c3QgYXV0byYgb2JzZXJ2ZXIpIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm9ic2VydmVySUQg
PT0gb2JzZXJ2ZXJJRDsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0JKHJldmlzaW9uIDI4ODQ2
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgV2ViQ29udGV4dE1l
bnVQcm94eU1hYzo6Z2V0Q29udGV4dE0KICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvbnRleHRNZW51
SXRlbURhdGE+IHF1aWNrTG9va0l0ZW1Ub0luc2VydElmTmVlZGVkOwogCiAjaWYgRU5BQkxFKElN
QUdFX0FOQUxZU0lTKQotICAgIGF1dG8gaW5kZXhPZlF1aWNrTG9va0l0ZW0gPSBmaWx0ZXJlZEl0
ZW1zLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGl0ZW0pIHsKKyAgICBhdXRvIGluZGV4T2ZRdWlj
a0xvb2tJdGVtID0gZmlsdGVyZWRJdGVtcy5maW5kSWYoWyZdIChhdXRvJiBpdGVtKSB7CiAgICAg
ICAgIHJldHVybiBpdGVtLmFjdGlvbigpID09IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ1F1
aWNrTG9va0ltYWdlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25N
YWMubW0JKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA3LDcg
KzMwNyw3IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiAKIHN0YXRpYyBCT09MIHNo
b3VsZFNob3dEaXZpZGVyc0JldHdlZW5DZWxscyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RGF0YUxp
c3RTdWdnZXN0aW9uPiYgc3VnZ2VzdGlvbnMpCiB7Ci0gICAgcmV0dXJuIG5vdEZvdW5kICE9IHN1
Z2dlc3Rpb25zLmZpbmRNYXRjaGluZyhbXShhdXRvJiBzdWdnZXN0aW9uKSB7CisgICAgcmV0dXJu
IG5vdEZvdW5kICE9IHN1Z2dlc3Rpb25zLmZpbmRJZihbXShhdXRvJiBzdWdnZXN0aW9uKSB7CiAg
ICAgICAgIHJldHVybiAhc3VnZ2VzdGlvbi5sYWJlbC5pc0VtcHR5KCk7CiAgICAgfSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyODg0
NjMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTgzLDkgKzE5ODMsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tEb2N1
bWVudHNDYXB0dXJlCiAgICAgfSk7CiAKICAgICBpZiAoaXNDYXB0dXJpbmdBdWRpbykKLSAgICAg
ICAgQVNTRVJUKGV4dGVuc2lvbklEcy5maW5kTWF0Y2hpbmcoW10oYXV0byYgaWQpIHsgcmV0dXJu
IGlkLmNvbnRhaW5zKCJtaWNyb3Bob25lIik7IH0pID09IG5vdEZvdW5kKTsKKyAgICAgICAgQVNT
RVJUKGV4dGVuc2lvbklEcy5maW5kSWYoW10oYXV0byYgaWQpIHsgcmV0dXJuIGlkLmNvbnRhaW5z
KCJtaWNyb3Bob25lIik7IH0pID09IG5vdEZvdW5kKTsKICAgICBpZiAoaXNDYXB0dXJpbmdWaWRl
bykKLSAgICAgICAgQVNTRVJUKGV4dGVuc2lvbklEcy5maW5kTWF0Y2hpbmcoW10oYXV0byYgaWQp
IHsgcmV0dXJuIGlkLmNvbnRhaW5zKCJjYW1lcmEiKTsgfSkgPT0gbm90Rm91bmQpOworICAgICAg
ICBBU1NFUlQoZXh0ZW5zaW9uSURzLmZpbmRJZihbXShhdXRvJiBpZCkgeyByZXR1cm4gaWQuY29u
dGFpbnMoImNhbWVyYSIpOyB9KSA9PSBub3RGb3VuZCk7CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAJKHJldmlzaW9u
IDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5OSw3ICs2OTksNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmNvbXB1dGVFCiAKICAgICBhdXRvIGVsZW1lbnRJ
blZpZXdDZW50ZXJQb2ludCA9IHZpc2libGVQb3J0aW9uT2ZFbGVtZW50UmVjdC5jZW50ZXIoKTsK
ICAgICBhdXRvIGVsZW1lbnRMaXN0ID0gY29udGFpbmVyRWxlbWVudC0+dHJlZVNjb3BlKCkuZWxl
bWVudHNGcm9tUG9pbnQoZWxlbWVudEluVmlld0NlbnRlclBvaW50KTsKLSAgICBhdXRvIGluZGV4
ID0gZWxlbWVudExpc3QuZmluZE1hdGNoaW5nKFtjb250YWluZXJFbGVtZW50XSAoYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5nZXQoKSA9PSBjb250YWluZXJFbGVtZW50OyB9KTsKKyAgICBhdXRv
IGluZGV4ID0gZWxlbWVudExpc3QuZmluZElmKFtjb250YWluZXJFbGVtZW50XSAoYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5nZXQoKSA9PSBjb250YWluZXJFbGVtZW50OyB9KTsKICAgICBpZiAo
ZWxlbWVudExpc3QuaXNFbXB0eSgpIHx8IGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIC8v
IFdlIGhpdCB0aGlzIGNhc2UgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJpbGl0eTpoaWRkZW4gb3Ig
b3BhY2l0eTowLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgbm90IGhpdCB0ZXN0CiAgICAgICAgIC8v
IGF0IHRoZSBjYWxjdWxhdGVkIElWQ1AuIEFuIGVsZW1lbnQgaXMgdGVjaG5pY2FsbHkgbm90ICJp
biB2aWV3IiBpZiBpdCBpcyBub3Qgd2l0aGluIGl0cyBvd24gcGFpbnQvaGl0IHRlc3QgdHJlZSwK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyODg0NjMp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlckludGVybmFsKEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgYXV0byYgbWVzc2FnZUhhbmRsZXJzSW5X
b3JsZCA9IG1fdXNlck1lc3NhZ2VIYW5kbGVycy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBW
ZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclByb3h5Pj4+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmIChtZXNzYWdl
SGFuZGxlcnNJbldvcmxkLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgcGFpcikgeyByZXR1cm4gcGFp
ci5maXJzdCA9PSAgdXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllcjsgfSkgIT0gbm90
Rm91bmQpCisgICAgaWYgKG1lc3NhZ2VIYW5kbGVyc0luV29ybGQuZmluZElmKFsmXShhdXRvJiBw
YWlyKSB7IHJldHVybiBwYWlyLmZpcnN0ID09ICB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVu
dGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1lc3NhZ2VIYW5k
bGVyc0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxl
cklkZW50aWZpZXIsIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTo6Y3JlYXRl
KHRoaXMsIG5hbWUsIHdvcmxkLCB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyKSkp
OwogfQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjph
ZGRVc2VyU2MKICAgICB9CiAKICAgICBhdXRvJiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNjcmlw
dHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiwgV2ViQ29yZTo6VXNlclNjcmlwdD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICBpZiAodXNlclNjcmlwdElkZW50aWZpZXIgJiYgc2NyaXB0c0luV29ybGQuZmluZE1h
dGNoaW5nKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZpcnN0ID09IHVzZXJTY3JpcHRJ
ZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKKyAgICBpZiAodXNlclNjcmlwdElkZW50aWZpZXIg
JiYgc2NyaXB0c0luV29ybGQuZmluZElmKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZp
cnN0ID09IHVzZXJTY3JpcHRJZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc2NyaXB0c0luV29ybGQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJTY3Jp
cHRJZGVudGlmaWVyLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKSk7CkBAIC00NzUsNyArNDc1LDcgQEAg
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZCYgd29ybGQsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiB1c2VyU3R5
bGVTaGVldElkZW50aWZpZXIsIFVzZXJTdHlsZVNoZWV0JiYgdXNlclN0eWxlU2hlZXQpCiB7CiAg
ICAgYXV0byYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5bGVTaGVldHMuZW5zdXJlKCZ3
b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAg
aWYgKHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciAmJiBzdHlsZVNoZWV0c0luV29ybGQuZmluZE1h
dGNoaW5nKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZpcnN0ID09IHVzZXJTdHlsZVNo
ZWV0SWRlbnRpZmllcjsgfSkgIT0gbm90Rm91bmQpCisgICAgaWYgKHVzZXJTdHlsZVNoZWV0SWRl
bnRpZmllciAmJiBzdHlsZVNoZWV0c0luV29ybGQuZmluZElmKFsmXShhdXRvJiBwYWlyKSB7IHJl
dHVybiBwYWlyLmZpcnN0ID09IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllcjsgfSkgIT0gbm90Rm91
bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhdXRvIHBhZ2VJRCA9IHVzZXJTdHlsZVNo
ZWV0LnBhZ2VJRCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKQEAgLTc1MjMsNyArNzUyMyw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlvbihFbGUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZWxlbWVudHNQZW5kaW5nVGV4dFJlY29nbml0
aW9uLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMp
IHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2VsZW1lbnRzUGVuZGluZ1RleHRSZWNvZ25pdGlv
bi5maW5kSWYoWyZdIChhdXRvJiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRsZXJzKSB7CiAgICAg
ICAgIHJldHVybiBlbGVtZW50QW5kQ29tcGxldGlvbkhhbmRsZXJzLmZpcnN0ID09ICZlbGVtZW50
OwogICAgIH0pOwogCkBAIC03NTg1LDcgKzc1ODUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RU
ZXh0UmVjb2duaXRpb24oRWxlCiAgICAgICAgIGF1dG8mIGh0bWxFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KCpwcm90ZWN0ZWRFbGVtZW50KTsKICAgICAgICAgSW1hZ2VPdmVybGF5Ojp1
cGRhdGVXaXRoVGV4dFJlY29nbml0aW9uUmVzdWx0KGh0bWxFbGVtZW50LCByZXN1bHQpOwogCi0g
ICAgICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb3RlY3RlZFBhZ2UtPm1fZWxlbWVudHNQZW5kaW5n
VGV4dFJlY29nbml0aW9uLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGVsZW1lbnRBbmRDb21wbGV0
aW9uSGFuZGxlcnMpIHsKKyAgICAgICAgYXV0byBtYXRjaEluZGV4ID0gcHJvdGVjdGVkUGFnZS0+
bV9lbGVtZW50c1BlbmRpbmdUZXh0UmVjb2duaXRpb24uZmluZElmKFsmXSAoYXV0byYgZWxlbWVu
dEFuZENvbXBsZXRpb25IYW5kbGVycykgewogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBbmRD
b21wbGV0aW9uSGFuZGxlcnMuZmlyc3QgPT0gJmh0bWxFbGVtZW50OwogICAgICAgICB9KTsKIApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjg4NDY0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMjItMDEtMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFJlbmFtZSBWZWN0b3IgYW5kIEZpeGVkVmVjdG9yOjpmaW5kTWF0Y2hpbmcgdG8gZmlu
ZElmIHRvIG1hdGNoIHN0bCBuYW1pbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzQ4NjQKKyAgICAgICAgcmRhcjovLzg3NDI0NzQ2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9GaXhlZFZlY3Rvci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwYXJz
ZVVzZXJBZ2VudCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjbG9zZU90aGVyUGFnZSk6CisKIDIw
MjItMDEtMjQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBG
aXhlZFZlY3Rvcjo6Y2xlYXIoKSwgY29udGFpbnMoKSwgZmluZCgpLCBhbmQgZmluZE1hdGNoaW5n
KCkuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9GaXhlZFZlY3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRml4ZWRWZWN0b3Iu
Y3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9G
aXhlZFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNiArMTYwLDE2IEBAIFRFU1Qo
V1RGX0ZpeGVkVmVjdG9yLCBDb3B5QXNzaWduKQogVEVTVChXVEZfRml4ZWRWZWN0b3IsIEZpbmRN
YXRjaGluZykKIHsKICAgICBGaXhlZFZlY3RvcjxpbnQ+IHY7Ci0gICAgRVhQRUNUX1RSVUUodi5m
aW5kTWF0Y2hpbmcoW10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOwotICAg
IEVYUEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkgPT0g
bm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCkgeyByZXR1cm4gZmFs
c2U7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShpbnQpIHsg
cmV0dXJuIHRydWU7IH0pID09IG5vdEZvdW5kKTsKIAogICAgIHYgPSB7IDMsIDEsIDIsIDEsIDIs
IDEsIDIsIDIsIDEsIDEsIDEsIDMgfTsKLSAgICBFWFBFQ1RfVFJVRSh2LmZpbmRNYXRjaGluZyhb
XShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMzsgfSkgPT0gbm90Rm91bmQpOwotICAgIEVY
UEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gZmFsc2U7IH0pID09IG5v
dEZvdW5kKTsKLSAgICBFWFBFQ1RfRVEoMFUsIHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1
cm4gdHJ1ZTsgfSkpOwotICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZh
bHVlKSB7IHJldHVybiB2YWx1ZSA8PSAzOyB9KSk7Ci0gICAgRVhQRUNUX0VRKDFVLCB2LmZpbmRN
YXRjaGluZyhbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwgMzsgfSkpOwotICAgIEVYUEVD
VF9FUSgyVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAy
OyB9KSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVybiB2
YWx1ZSA+IDM7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShp
bnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX0VRKDBVLCB2
LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMFUsIHYu
ZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0gMzsgfSkpOworICAgIEVYUEVD
VF9FUSgxVSwgdi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IDM7IH0pKTsK
KyAgICBFWFBFQ1RfRVEoMlUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gMjsgfSkpOwogfQogCiBURVNUKFdURl9GaXhlZFZlY3RvciwgTW92ZSkKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzI4LDE2ICs3MjgsMTYgQEAgVEVTVChXVEZfVmVjdG9yLCBDbGVhckNvbnRhaW5zQW5kRmlu
ZCkKIFRFU1QoV1RGX1ZlY3RvciwgRmluZE1hdGNoaW5nKQogewogICAgIFZlY3RvcjxpbnQ+IHY7
Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hpbmcoW10oaW50KSB7IHJldHVybiBmYWxzZTsg
fSkgPT0gbm90Rm91bmQpOwotICAgIEVYUEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkg
eyByZXR1cm4gdHJ1ZTsgfSkgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZElm
KFtdKGludCkgeyByZXR1cm4gZmFsc2U7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJV
RSh2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pID09IG5vdEZvdW5kKTsKIAogICAg
IHYgPSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307Ci0gICAgRVhQRUNUX1RS
VUUodi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDM7IH0pID09
IG5vdEZvdW5kKTsKLSAgICBFWFBFQ1RfVFJVRSh2LmZpbmRNYXRjaGluZyhbXShpbnQpIHsgcmV0
dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7Ci0gICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRNYXRj
aGluZyhbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pKTsKLSAgICBFWFBFQ1RfRVEoMFUsIHYuZmlu
ZE1hdGNoaW5nKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0gMzsgfSkpOwotICAgIEVY
UEVDVF9FUSgxVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8
IDM7IH0pKTsKLSAgICBFWFBFQ1RfRVEoMlUsIHYuZmluZE1hdGNoaW5nKFtdKGludCB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGlu
dCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAzOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNU
X1RSVUUodi5maW5kSWYoW10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOwor
ICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kSWYoW10oaW50KSB7IHJldHVybiB0cnVlOyB9KSk7Cisg
ICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRJZihbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDw9
IDM7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPCAzOyB9KSk7CisgICAgRVhQRUNUX0VRKDJVLCB2LmZpbmRJZihbXShpbnQgdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID09IDI7IH0pKTsKIH0KIAogVEVTVChXVEZfVmVjdG9yLCBSZW1v
dmVGaXJzdE1hdGNoaW5nKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9NZWRpYUxvYWRpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0JKHJldmlzaW9uIDI4ODQ2MykKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogc3RhdGlj
IFN0cmluZyBwYXJzZVVzZXJBZ2VudChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCiB7CiAg
ICAgYXV0byBoZWFkZXJzID0gU3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0LmRhdGEoKSwgcmVxdWVz
dC5zaXplKCkpLnNwbGl0KCJcclxuIik7Ci0gICAgYXV0byBpbmRleCA9IGhlYWRlcnMuZmluZE1h
dGNoaW5nKFtdIChhdXRvJiBoZWFkZXIpIHsgcmV0dXJuIGhlYWRlci5zdGFydHNXaXRoKCJVc2Vy
LUFnZW50OiIpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gaGVhZGVycy5maW5kSWYoW10gKGF1dG8m
IGhlYWRlcikgeyByZXR1cm4gaGVhZGVyLnN0YXJ0c1dpdGgoIlVzZXItQWdlbnQ6Iik7IH0pOwog
ICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIGhlYWRlcnNbaW5kZXhd
OwogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYyLDcgKzM2
Miw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElzTWVkaWFLZXlTeXN0ZW0KIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmNsb3NlT3RoZXJQYWdlKFdLUGFnZVJlZiBwYWdlLCBQbGF0Zm9ybVdlYlZp
ZXcqIHZpZXcpCiB7CiAgICAgV0tQYWdlQ2xvc2UocGFnZSk7Ci0gICAgYXV0byBpbmRleCA9IG1f
YXV4aWxpYXJ5V2ViVmlld3MuZmluZE1hdGNoaW5nKFt2aWV3XShhdXRvJiBhdXhpbGlhcnlXZWJW
aWV3KSB7IHJldHVybiBhdXhpbGlhcnlXZWJWaWV3LnB0cigpID09IHZpZXc7IH0pOworICAgIGF1
dG8gaW5kZXggPSBtX2F1eGlsaWFyeVdlYlZpZXdzLmZpbmRJZihbdmlld10oYXV0byYgYXV4aWxp
YXJ5V2ViVmlldykgeyByZXR1cm4gYXV4aWxpYXJ5V2ViVmlldy5wdHIoKSA9PSB2aWV3OyB9KTsK
ICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCiAgICAgICAgIG1fYXV4aWxpYXJ5V2ViVmlld3Mu
cmVtb3ZlKGluZGV4KTsKIH0K
</data>
<flag name="review"
          id="476075"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449855</attachid>
            <date>2022-01-24 14:05:13 -0800</date>
            <delta_ts>2022-01-24 22:16:50 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-234864.patch</filename>
            <type>text/plain</type>
            <size>126462</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDIyLTAxLTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgVmVjdG9yIGFuZCBGaXhlZFZlY3Rvcjo6ZmluZE1hdGNoaW5nIHRvIGZpbmRJZiB0byBt
YXRjaCBzdGwgbmFtaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0ODY0CisgICAgICAgIHJkYXI6Ly84NzQyNDc0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQYXR0ZXJuTm9kZTo6ZW1pdERpcmVjdEJpbmRp
bmcpOgorCiAyMDIyLTAxLTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgRml4ZWRWZWN0b3I6OmNsZWFyKCksIGNvbnRhaW5zKCksIGZpbmQoKSwgYW5kIGZp
bmRNYXRjaGluZygpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyogIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJp
Y2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBP
cmxvdmljaAogKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CkBAIC01MzQ5LDcgKzUzNDksNyBAQCBSZWdpc3RlcklEKiBBcnJheVBhdHRlcm5Ob2RlOjpl
bWl0RGlyZWN0CiAgICAgaWYgKCFyaHMtPmlzU2ltcGxlQXJyYXkoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBpZiAobV90YXJnZXRQYXR0ZXJucy5maW5kTWF0Y2hpbmcoWyZdIChh
dXRvJiB0YXJnZXQpIHsgcmV0dXJuIHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6
UmVzdEVsZW1lbnQ7IH0pICE9IG5vdEZvdW5kKQorICAgIGlmIChtX3RhcmdldFBhdHRlcm5zLmZp
bmRJZihbJl0gKGF1dG8mIHRhcmdldCkgeyByZXR1cm4gdGFyZ2V0LmJpbmRpbmdUeXBlID09IEJp
bmRpbmdUeXBlOjpSZXN0RWxlbWVudDsgfSkgIT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgRWxlbWVudE5vZGUqIGVsZW1lbnROb2RlcyA9IHN0YXRpY19jYXN0PEFy
cmF5Tm9kZSo+KHJocyktPmVsZW1lbnRzKCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAy
Mi0wMS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1l
IFZlY3RvciBhbmQgRml4ZWRWZWN0b3I6OmZpbmRNYXRjaGluZyB0byBmaW5kSWYgdG8gbWF0Y2gg
c3RsIG5hbWluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDg2NAorICAgICAgICByZGFyOi8vODc0MjQ3NDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIEFsc28gcmVuYW1lIHJldmVyc2VGaW5kTWF0Y2hp
bmcgdG8gcmV2ZXJzZUZpbmRJZi4KKworICAgICAgICBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDg1NSNjMyBhbmQKKyAgICAgICAgaHR0cHM6Ly9lbi5jcHBy
ZWZlcmVuY2UuY29tL3cvY3BwL2FsZ29yaXRobS9maW5kLgorCisgICAgICAgICogd3RmL0ZpeGVk
VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkZpeGVkVmVjdG9yPFQ+OjpmaW5kSWYgY29uc3QpOgor
ICAgICAgICAoV1RGOjpGaXhlZFZlY3RvcjxUPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6
OkZpeGVkVmVjdG9yPFQ+OjpmaW5kTWF0Y2hpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKFdURjo6TWFsbG9jPjo6ZmluZElmIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6TWFsbG9jPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Ok1hbGxvYz46
OnJldmVyc2VGaW5kSWYgY29uc3QpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpmaW5kTWF0Y2hp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpyZXZlcnNlRmluZE1h
dGNoaW5nIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMi0wMS0yNCAgTWljaGFlbCBDYXRhbnphcm8g
IDxtY2F0YW56YXJvQGdub21lLm9yZz4KIAogICAgICAgICBCdWlsZCBmYWlsdXJlIHdpdGggR0ND
IDEyOiBubyBtYXRjaGluZyBmdW5jdGlvbiBmb3IgY2FsbCB0byAnZW5kKExDaGFyIFs3XSknCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0ZpeGVkVmVjdG9yLmgJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XVEYvd3Rm
L0ZpeGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBjb25z
dDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRNYXRjaGlu
Zyhjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0
Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRJZihjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CiAK
ICAgICB2b2lkIHN3YXAoRml4ZWRWZWN0b3I8VD4mIG90aGVyKQogICAgIHsKQEAgLTE4Myw3ICsx
ODMsNyBAQCBib29sIEZpeGVkVmVjdG9yPFQ+Ojpjb250YWlucyhjb25zdCBVJiB2CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotc2l6ZV90
IEZpeGVkVmVjdG9yPFQ+OjpmaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hl
cykgY29uc3QKK3NpemVfdCBGaXhlZFZlY3RvcjxUPjo6ZmluZElmKGNvbnN0IE1hdGNoRnVuY3Rp
b24mIG1hdGNoZXMpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7
ICsraSkgewogICAgICAgICBpZiAobWF0Y2hlcyhhdChpKSkpCkBAIC0xOTYsNyArMTk2LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBzaXplX3QgRml4ZWRW
ZWN0b3I8VD46OmZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZpbmRN
YXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeworICAgIHJldHVybiBmaW5kSWYoWyZdKGF1dG8mIGl0
ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0gPT0gdmFsdWU7CiAgICAgfSk7CiB9CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0
b3IuaAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNzU2LDkgKzc1Niw5IEBAIHB1YmxpYzoKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBib29sIGNvbnRhaW5zKGNvbnN0IFUmKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzaXplX3QgZmluZChjb25zdCBVJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6ZV90IGZpbmRJ
Zihjb25zdCBNYXRjaEZ1bmN0aW9uJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFUmKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNYXRjaEZ1bmN0aW9uPiBzaXplX3QgcmV2ZXJzZUZpbmRNYXRjaGluZyhjb25zdCBNYXRjaEZ1
bmN0aW9uJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gc2l6
ZV90IHJldmVyc2VGaW5kSWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYpIGNvbnN0OwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBhcHBlbmRJZk5vdENvbnRhaW5zKGNvbnN0IFUmKTsKIApA
QCAtOTk2LDcgKzk5Niw3IEBAIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0gKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgog
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmZpbmRNYXRj
aGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKSBjb25zdAorc2l6ZV90IFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6
ZmluZElmKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpIGNvbnN0CiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBpZiAobWF0Y2hlcyhhdChp
KSkpCkBAIC0xMDA5LDcgKzEwMDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6ZmluZChjb25z
dCBVJiB2YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZmluZE1hdGNoaW5nKFsmXShhdXRvJiBp
dGVtKSB7CisgICAgcmV0dXJuIGZpbmRJZihbJl0oYXV0byYgaXRlbSkgewogICAgICAgICByZXR1
cm4gaXRlbSA9PSB2YWx1ZTsKICAgICB9KTsKIH0KQEAgLTEwMjgsNyArMTAyOCw3IEBAIHNpemVf
dCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG8KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUgTWFsbG9jPgogdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hG
dW5jdGlvbj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJldmVyc2VGaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hG
dW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKK3NpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OnJldmVyc2VGaW5kSWYoY29u
c3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8PSBzaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBzaXplX3QgaW5kZXggPSBzaXpl
KCkgLSBpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU1IEBACisyMDIyLTAxLTI0
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgVmVjdG9y
IGFuZCBGaXhlZFZlY3Rvcjo6ZmluZE1hdGNoaW5nIHRvIGZpbmRJZiB0byBtYXRjaCBzdGwgbmFt
aW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
ODY0CisgICAgICAgIHJkYXI6Ly84NzQyNDc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3Vr
ZSBTdXp1a2kuCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpnZXRUeXBlKToKKyAgICAgICAgKiBN
b2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6Omdl
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJj
ZTo6Y29sbGVjdERhdGFGb3JXcml0aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZVN0b3JhZ2U6Om1hdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlU3RvcmFnZTo6aGFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUNhY2hlU3RvcmFnZTo6ZmluZENhY2hlT3JDcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2Fj
aGVTdG9yYWdlOjpkb1JlbW92ZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxp
Z2h0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodDo6YWRkVG9TZXRMaWtlKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4
dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUmVjb3JkZXI6OnRyYWNrRW5kZWQpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSVENDb250cm9sbGVyOjpzaG91bGREaXNhYmxlSUNFQ2FuZGlkYXRlRmlsdGVyaW5nKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpzZXRDb25maWd1cmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpnZXRPckNyZWF0ZUljZVRyYW5zcG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6Z2V0T3JDcmVhdGVEdGxz
VHJhbnNwb3J0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNGcmFtZVRy
YW5zZm9ybWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1J0cFNGcmFtZVRyYW5zZm9ybWVy
OjpkZWNyeXB0RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9y
SW5wdXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2VsQW5kSG9sZEF0
VGltZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9JSVJGaWx0ZXJOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklJUkZpbHRlck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdXRobi9maWRvL1UyZkNvbW1hbmRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChmaWRv
Ojppc0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQpOgorICAgICAgICAqIE1vZHVsZXMv
d2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhS
SW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRPclVwZGF0ZWRJbnB1dFNvdXJjZXMpOgorICAg
ICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYlhSU2Vzc2lvbjo6Y2FuY2VsQW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMv
d2VieHIvV2ViWFJTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTeXN0ZW06OmVu
c3VyZUltbWVyc2l2ZVhSRGV2aWNlSXNTZWxlY3RlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZElmTm90Q29udGFp
bnNNYXRjaGluZyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpzaG91bGRF
bWl0U2lnbmFsKToKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFUcmFuc2Zlcjo6dHlwZXMgY29uc3QpOgorICAgICAgICAqIGRvbS9EYXRhVHJh
bnNmZXJJdGVtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVTdHJpbmdJdGVtT2ZM
b3dlcmNhc2VkVHlwZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmF0aW9ucyk6CisgICAg
ICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorICAg
ICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0
aW9uT2JzZXJ2ZXI6OmVucXVldWVTbG90Q2hhbmdlRXZlbnQpOgorICAgICAgICAqIGh0bWwvQmFz
ZVRleHRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZVRleHRJbnB1dFR5cGU6
OnBhdHRlcm5NaXNtYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6OmNhbmNlbFZpZGVvRnJh
bWVDYWxsYmFjayk6CisgICAgICAgICogaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50OjpmaWVsZEluZGV4T2Yg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0RWxlbWVudDo6Zm9jdXNlZEZp
ZWxkRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZUVkaXRFbGVtZW50
OjpkaWRCbHVyRnJvbUZpZWxkKToKKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZERhdGFUZXh0
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kRGF0YVRleHRUcmFjazo6ZmluZElu
Y29tcGxldGVDdWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEpOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJEZWJ1Z2dlckFnZW50OjpkaWRBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjphcHBlbmQpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OkJveFRyZWU6OmxheW91dEJveEZvclJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpCb3hUcmVlOjpyZW5kZXJlckZvckxheW91dEJv
eCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjpzdGFydEljb25Mb2FkaW5nKToKKyAgICAgICAgKiBwYWdlL0lu
dGVyc2VjdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9i
c2VydmVyOjppc09ic2VydmluZyBjb25zdCk6CisgICAgICAgICogcGFnZS9Nb2RhbENvbnRhaW5l
ck9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGFsQ29udGFpbmVyT2JzZXJ2ZXI6
OmNvbGxlY3RDbGlja2FibGVFbGVtZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2UvUmVz
aXplT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2ZXI6Om9ic2Vy
dmUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxh
dGNoaW5nU3RhdGVGb3JUYXJnZXQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNDb21wYXRpYmxlU25hcEFy
ZWEpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
ICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmRDdXN0b21EYXRhOjphZGRPck1vdmVFbnRyeVRvRW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNTYW1lT3JpZ2luQ3VzdG9tRGF0YSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZmlsZUNvbnRlbnRTdGF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5h
Z2VyOjpmaW5kTW9uaXRvckZvckRpc3BsYXlJRCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIRVZD
Q29kZWNQYXJhbWV0ZXJzU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bWVkaWFFbmdpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om5leHRNZWRpYUVuZ2luZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6c2Vzc2lvbkZvcktleUlEcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6c2Vzc2lvbkZv
clJlcXVlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JHcm91cCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vu
c2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmFuaW1hdGlvbklzUnVubmluZyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXll
ckFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpp
c1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
Q29udGV4dEVHTDo6Z2V0RUdMQ29uZmlnKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6aXNDb250ZW50VHlwZVN1cHBvcnRlZCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNob3VsZEhhdmVCYWNraW5nU3RvcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OmZpbGVDb250ZW50U3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL0NhcHR1
cmVEZXZpY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmhhdmVEZXZpY2VzQ2hhbmdlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oOgorICAgICAgICAo
V2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnZhbHVlRm9yRGlzY3JldGVDYXBhYmlsaXR5VmFs
dWVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0TWVkaWFTdHJlYW1P
YnNlcnZlcjo6ZGlkUmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9D
YXB0dXJlU291cmNlOjpnZW5lcmF0ZVByZXNldHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjpn
ZXRVbmNvbW1vbkhlYWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
OjpzZXRVbmNvbW1vbkhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUVFBIZWFkZXJNYXA6OnNldCk6CisgICAgICAgICogcGxhdGZvcm0veHIvb3Blbnhy
L09wZW5YUkV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRXh0ZW5z
aW9uczo6aXNFeHRlbnNpb25TdXBwb3J0ZWQgY29uc3QpOgorICAgICAgICAqIHBsdWdpbnMvUGx1
Z2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6aXNTdXBwb3J0ZWRQbHVnaW4pOgorCiAyMDIy
LTAxLTI0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBmaWxl
LnN0cmVhbSgpIGlzIHNsb3cgYW5kIENQVS1ib3VuZApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3BwCShyZXZpc2lvbiAy
ODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9h
cmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIENsaXBib2FyZDo6Z2V0
VHlwZShDbGlwYm9hcmRJdGVtJiBpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IGl0ZW1JbmRleCA9IG1fYWN0aXZlU2Vzc2lvbi0+aXRlbXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0
byYgYWN0aXZlSXRlbSkgeworICAgIGF1dG8gaXRlbUluZGV4ID0gbV9hY3RpdmVTZXNzaW9uLT5p
dGVtcy5maW5kSWYoWyZdIChhdXRvJiBhY3RpdmVJdGVtKSB7CiAgICAgICAgIHJldHVybiBhY3Rp
dmVJdGVtLnB0cigpID09ICZpdGVtOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9D
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRp
bmdzRGF0YVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODIsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhCiAKIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRp
bmdzRGF0YVNvdXJjZTo6Z2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2l0ZW1Qcm9taXNl
cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtKSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0g
bV9pdGVtUHJvbWlzZXMuZmluZElmKFsmXSAoYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4g
dHlwZSA9PSBpdGVtLmtleTsKICAgICB9KTsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Y28KIAogICAgICAgICAgICAgUmVmIGl0ZW1U
eXBlTG9hZGVyIHsgKndlYWtJdGVtVHlwZUxvYWRlciB9OwogI2lmICFDT01QSUxFUihNU1ZDKQot
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9h
ZGVycy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBsb2FkZXIpIHsgcmV0dXJuIGxvYWRlci5wdHIo
KSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsgfSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RCh0aGlzLCBub3RGb3VuZCAhPSBtX2l0ZW1UeXBlTG9hZGVycy5maW5kSWYoWyZdIChhdXRvJiBs
b2FkZXIpIHsgcmV0dXJuIGxvYWRlci5wdHIoKSA9PSBpdGVtVHlwZUxvYWRlci5wdHIoKTsgfSkp
OwogI2VuZGlmCiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvbWlzZS0+cmVzdWx0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZVN0b3Jh
Z2UuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hl
L0RPTUNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQg
RE9NQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmUKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghb3B0aW9ucy5jYWNoZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcG9z
aXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0tPm5hbWUoKSA9PSBvcHRpb25zLmNhY2hlTmFtZTsgfSk7CisgICAgICAgICAgICBhdXRvIHBv
c2l0aW9uID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5u
YW1lKCkgPT0gb3B0aW9ucy5jYWNoZU5hbWU7IH0pOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9u
ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgbV9jYWNoZXNbcG9zaXRpb25dLT5tYXRj
aChXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKHByb21pc2UpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCB2b2lkIERPTUNhY2hl
U3RvcmFnZTo6aGFzKGNvbnN0IFN0cmluZyYgCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChX
VEZNb3ZlKGV4Y2VwdGlvbi52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0
byYgaXRlbSkgeyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsK
KyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1fY2FjaGVzLmZpbmRJZihbJl0oYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pICE9IG5vdEZvdW5kKTsKICAgICB9KTsK
IH0KIAogUmVmPERPTUNhY2hlPiBET01DYWNoZVN0b3JhZ2U6OmZpbmRDYWNoZU9yQ3JlYXRlKERP
TUNhY2hlRW5naW5lOjpDYWNoZUluZm8mJiBpbmZvKQogewotICAgYXV0byBwb3NpdGlvbiA9IG1f
Y2FjaGVzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGNhY2hlKSB7IHJldHVybiBpbmZv
LmlkZW50aWZpZXIgPT0gY2FjaGUtPmlkZW50aWZpZXIoKTsgfSk7CisgICBhdXRvIHBvc2l0aW9u
ID0gbV9jYWNoZXMuZmluZElmKFsmXSAoY29uc3QgYXV0byYgY2FjaGUpIHsgcmV0dXJuIGluZm8u
aWRlbnRpZmllciA9PSBjYWNoZS0+aWRlbnRpZmllcigpOyB9KTsKICAgIGlmIChwb3NpdGlvbiAh
PSBub3RGb3VuZCkKICAgICAgICByZXR1cm4gbV9jYWNoZXNbcG9zaXRpb25dLmNvcHlSZWYoKTsK
ICAgIHJldHVybiBET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIFdU
Rk1vdmUoaW5mby5uYW1lKSwgaW5mby5pZGVudGlmaWVyLCBtX2Nvbm5lY3Rpb24uY29weVJlZigp
KTsKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6b3Blbihjb25zdCBT
dHJpbmcmCiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb09wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUNhY2hlPj4mJiBwcm9taXNlKQog
ewotICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGl0
ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9KTsKKyAgICBhdXRvIHBvc2l0aW9u
ID0gbV9jYWNoZXMuZmluZElmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5uYW1lKCkg
PT0gbmFtZTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHBy
b21pc2UucmVzb2x2ZShET01DYWNoZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFN0cmluZyB7IG1fY2FjaGVzW3Bvc2l0aW9uXS0+bmFtZSgpIH0sIG1fY2FjaGVzW3Bvc2l0aW9u
XS0+aWRlbnRpZmllcigpLCBtX2Nvbm5lY3Rpb24uY29weVJlZigpKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIERPTUNhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0
IFN0cmluCiAKIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjpkb1JlbW92ZShjb25zdCBTdHJpbmcmIG5h
bWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7Ci0gICAgYXV0
byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS0+bmFtZSgpID09IG5hbWU7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hl
cy5maW5kSWYoWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPm5hbWUoKSA9PSBuYW1lOyB9
KTsKICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKICAgICAgICAgcHJvbWlzZS5yZXNv
bHZlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9oaWdobGlnaHQvSGlnaGxpZ2h0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODUsNyArODUsNyBAQCB2b2lkIEhpZ2hsaWdodDo6Y2xlYXJGcm9tU2V0TGlrZSgpCiAK
IGJvb2wgSGlnaGxpZ2h0OjphZGRUb1NldExpa2UoU3RhdGljUmFuZ2UmIHJhbmdlKQogewotICAg
IGlmIChub3RGb3VuZCAhPSBtX3Jhbmdlc0RhdGEuZmluZE1hdGNoaW5nKFsmcmFuZ2VdKGNvbnN0
IFJlZjxIaWdobGlnaHRSYW5nZURhdGE+JiBjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmdldCgp
LnJhbmdlLmdldCgpID09IHJhbmdlOyB9KSkKKyAgICBpZiAobm90Rm91bmQgIT0gbV9yYW5nZXNE
YXRhLmZpbmRJZihbJnJhbmdlXShjb25zdCBSZWY8SGlnaGxpZ2h0UmFuZ2VEYXRhPiYgY3VycmVu
dCkgeyByZXR1cm4gY3VycmVudC5nZXQoKS5yYW5nZS5nZXQoKSA9PSByYW5nZTsgfSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXBhaW50UmFuZ2UocmFuZ2UpOwogICAgIG1fcmFuZ2Vz
RGF0YS5hcHBlbmQoSGlnaGxpZ2h0UmFuZ2VEYXRhOjpjcmVhdGUocmFuZ2UpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NzIsNyArNTcyLDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29u
dHJvbAogCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91
cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRU
ZXh0VHJhY2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4
dFRyYWNrcywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpD
YXB0aW9ucywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7Ci0gICAgICAgICAgICBi
b29sIGFsbFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5k
TWF0Y2hpbmcoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgeworICAgICAgICAgICAgYm9vbCBh
bGxUcmFja3NEaXNhYmxlZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtd
IChjb25zdCBhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRy
YWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBib29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNl
cy5jYXB0aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0
aWMgJiYgYWxsVHJhY2tzRGlzYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyODg0
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgTWVkaWFSZWNvcmRlcjo6
ZGlzcGF0Y2hFcnJvcihFeGNlcHQKIAogdm9pZCBNZWRpYVJlY29yZGVyOjp0cmFja0VuZGVkKE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKIHsKLSAgICBhdXRvIHBvc2l0aW9uID0gbV90cmFja3Mu
ZmluZE1hdGNoaW5nKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fdHJh
Y2tzLmZpbmRJZihbXShhdXRvJiB0cmFjaykgewogICAgICAgICByZXR1cm4gIXRyYWNrLT5lbmRl
ZCgpOwogICAgIH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgUlRD
Q29udHJvbGxlcjo6c2hvdWxkRGlzYWJsZUlDRUNhbmQKIHsKICAgICBpZiAoIW1fc2hvdWxkRmls
dGVySUNFQ2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG5vdEZv
dW5kICE9IG1fZmlsdGVyaW5nRGlzYWJsZWRPcmlnaW5zLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0
IGF1dG8mIG9yaWdpbikgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2ZpbHRlcmluZ0Rpc2Fi
bGVkT3JpZ2lucy5maW5kSWYoWyZdIChjb25zdCBhdXRvJiBvcmlnaW4pIHsKICAgICAgICAgcmV0
dXJuIG1hdGNoRG9jdW1lbnRPcmlnaW4oZG9jdW1lbnQsIG9yaWdpbi50b3BPcmlnaW4sIG9yaWdp
bi5jbGllbnRPcmlnaW4pOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlz
aW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgogICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDg4LDcgKzQ4OCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpzZXQKICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJDZXJ0aWZpY2F0
ZXMgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50IiB9OwogCiAgICAgICAgIGZvciAoYXV0byYgY2Vy
dGlmaWNhdGUgOiBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcykgewotICAgICAgICAgICAgYm9v
bCBpc1RoZXJlID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kTWF0Y2hpbmcoWyZj
ZXJ0aWZpY2F0ZV0oY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICAgICAgYm9vbCBpc1RoZXJl
ID0gbV9jb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5maW5kSWYoWyZjZXJ0aWZpY2F0ZV0oY29u
c3QgYXV0byYgaXRlbSkgewogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldCgpID09IGNl
cnRpZmljYXRlLmdldCgpOwogICAgICAgICAgICAgfSkgIT0gbm90Rm91bmQ7CiAgICAgICAgICAg
ICBpZiAoIWlzVGhlcmUpCkBAIC05NTksNyArOTU5LDcgQEAgRG9jdW1lbnQqIFJUQ1BlZXJDb25u
ZWN0aW9uOjpkb2N1bWVudCgpCiAKIFJlZjxSVENJY2VUcmFuc3BvcnQ+IFJUQ1BlZXJDb25uZWN0
aW9uOjpnZXRPckNyZWF0ZUljZVRyYW5zcG9ydChVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFj
a2VuZD4mJiBiYWNrZW5kKQogewotICAgIGF1dG8gaW5kZXggPSBtX2ljZVRyYW5zcG9ydHMuZmlu
ZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNwb3J0KSB7IHJldHVybiBiYWNrZW5kLmdl
dCgpID09IHRyYW5zcG9ydC0+YmFja2VuZCgpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gbV9pY2VU
cmFuc3BvcnRzLmZpbmRJZihbJmJhY2tlbmRdKGF1dG8mIHRyYW5zcG9ydCkgeyByZXR1cm4gYmFj
a2VuZC5nZXQoKSA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAgICAgaWYgKGluZGV4ID09
IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9pY2VUcmFuc3BvcnRzLnNpemUoKTsKICAg
ICAgICAgbV9pY2VUcmFuc3BvcnRzLmFwcGVuZChSVENJY2VUcmFuc3BvcnQ6OmNyZWF0ZSgqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBXVEZNb3ZlKGJhY2tlbmQpLCAqdGhpcykpOwpAQCAtOTc4
LDcgKzk3OCw3IEBAIFJlZlB0cjxSVENEdGxzVHJhbnNwb3J0PiBSVENQZWVyQ29ubmVjdGkKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBpbmRl
eCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZE1hdGNoaW5nKFsmYmFja2VuZF0oYXV0byYgdHJhbnNw
b3J0KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CisgICAg
YXV0byBpbmRleCA9IG1fZHRsc1RyYW5zcG9ydHMuZmluZElmKFsmYmFja2VuZF0oYXV0byYgdHJh
bnNwb3J0KSB7IHJldHVybiAqYmFja2VuZCA9PSB0cmFuc3BvcnQtPmJhY2tlbmQoKTsgfSk7CiAg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGluZGV4ID0gbV9kdGxzVHJhbnNw
b3J0cy5zaXplKCk7CiAgICAgICAgIGF1dG8gaWNlVHJhbnNwb3J0QmFja2VuZCA9IGJhY2tlbmQt
PmljZVRyYW5zcG9ydEJhY2tlbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXIuY3Bw
CShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1J0cFNGcmFtZVRyYW5zZm9ybWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNyArMjQ2LDcg
QEAgUlRDUnRwU0ZyYW1lVHJhbnNmb3JtZXI6OlRyYW5zZm9ybVJlc3VsdAogICAgIG1fY291bnRl
ciA9IGhlYWRlci0+Y291bnRlcjsKIAogICAgIGlmIChoZWFkZXItPmtleUlkICE9IG1fa2V5SWQp
IHsKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoW2tleUlkID0g
aGVhZGVyLT5rZXlJZF0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5rZXlJZCA9PSBrZXlJZDsg
fSk7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2tleXMuZmluZElmKFtrZXlJZCA9IGhlYWRl
ci0+a2V5SWRdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ua2V5SWQgPT0ga2V5SWQ7IH0pOwog
ICAgICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3JJbmZvcm1hdGlvbiB7IEVycm9yOjpLZXlJRCwgICJLZXkgSUQgaXMg
dW5rbm93biJfcywgaGVhZGVyLT5rZXlJZCB9KTsKICAgICAgICAgYXV0byByZXN1bHQgPSB1cGRh
dGVFbmNyeXB0aW9uS2V5KG1fa2V5c1twb3NpdGlvbl0ua2V5RGF0YSwgaGVhZGVyLT5rZXlJZCwg
U2hvdWxkVXBkYXRlS2V5czo6Tm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4Myw3ICs0ODQs
NyBAQCB2b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9yCiB7CiAgICAgQVNT
RVJUKGNvbnRleHQoKS5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLmlzR3JhcGhPd25lcigp
KTsKIAotICAgIEFTU0VSVChtX2lucHV0cy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIGFzc29jaWF0
ZWRJbnB1dCkgeyByZXR1cm4gYXNzb2NpYXRlZElucHV0LmdldCgpID09IGlucHV0OyB9KSAhPSBu
b3RGb3VuZCk7CisgICAgQVNTRVJUKG1faW5wdXRzLmZpbmRJZihbJl0oYXV0byYgYXNzb2NpYXRl
ZElucHV0KSB7IHJldHVybiBhc3NvY2lhdGVkSW5wdXQuZ2V0KCkgPT0gaW5wdXQ7IH0pICE9IG5v
dEZvdW5kKTsKICAgICBpbnB1dC0+dXBkYXRlSW50ZXJuYWxCdXMoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVs
aW5lLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE4LDcgKzIxOSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvUGFyYW1UaW1lbGluZTo6Y2EKICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9ldmVudHNMb2NrIH07CiAKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBldmVudCBhdCBvciBq
dXN0IHBhc3QgY2FuY2VsVGltZS4KLSAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRNYXRjaGlu
ZyhbJl0oYXV0byYgZXZlbnQpIHsKKyAgICBzaXplX3QgaSA9IG1fZXZlbnRzLmZpbmRJZihbJl0o
YXV0byYgZXZlbnQpIHsKICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWUoKSA+IGNhbmNlbFRpbWU7
CiAgICAgfSk7CiAgICAgaSA9IChpID09IG5vdEZvdW5kKSA/IG1fZXZlbnRzLnNpemUoKSA6IGk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0lJUkZpbHRlck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSUlSRmlsdGVy
Tm9kZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vSUlSRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODcsNyArODcsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SUlSRmlsdGVyTm9kZT4+IElJUkZpbHRlCiAgICAgaWYgKCFvcHRp
b25zLmZlZWRmb3J3YXJkLnNpemUoKSB8fCBvcHRpb25zLmZlZWRmb3J3YXJkLnNpemUoKSA+IElJ
UkZpbHRlcjo6bWF4T3JkZXIpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciwgImZlZWRmb3J3YXJkIGFycmF5IG11c3QgaGF2ZSBhIGxlbmd0aCBiZXR3ZWVuIDEg
YW5kIDIwIl9zIH07CiAKLSAgICBhdXRvIG5vblplcm9WYWx1ZUluZGV4ID0gb3B0aW9ucy5mZWVk
Zm9yd2FyZC5maW5kTWF0Y2hpbmcoW10oYXV0byYgdmFsdWUpIHsgcmV0dXJuICEhdmFsdWU7IH0p
OworICAgIGF1dG8gbm9uWmVyb1ZhbHVlSW5kZXggPSBvcHRpb25zLmZlZWRmb3J3YXJkLmZpbmRJ
ZihbXShhdXRvJiB2YWx1ZSkgeyByZXR1cm4gISF2YWx1ZTsgfSk7CiAgICAgaWYgKG5vblplcm9W
YWx1ZUluZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsICJmZWVkZm9yd2FyZCBhcnJheSBtdXN0IGNvbnRhaW4gYSBub24temVybyB2
YWx1ZSJfcyB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
VTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL2ZpZG8vVTJmQ29tbWFuZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
Mjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL1UyZkNvbW1h
bmRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5
cmlnaHQgMjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg3LDcgKzg3LDcgQEAg
Ym9vbCBpc0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1hbmQoYwogewogICAgIGlmIChyZXF1
ZXN0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gJiYgKHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVj
dGlvbi0+dXNlclZlcmlmaWNhdGlvbiA9PSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJl
cXVpcmVkIHx8IHJlcXVlc3QuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50
S2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZXF1ZXN0LnB1YktleUNyZWRQ
YXJhbXMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uYWxnID09IENP
U0U6OkVTMjU2OyB9KSA9PSBub3RGb3VuZCkKKyAgICBpZiAocmVxdWVzdC5wdWJLZXlDcmVkUGFy
YW1zLmZpbmRJZihbXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmFsZyA9PSBDT1NFOjpFUzI1
NjsgfSkgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJj
ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSSW5wdXRTb3VyY2VBcnJheS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0
Miw3ICsxNDMsNyBAQCB2b2lkIFdlYlhSSW5wdXRTb3VyY2VBcnJheTo6aGFuZGxlQWRkZWRPCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJj
ZXMpIHsKLSAgICAgICAgYXV0byBpbmRleCA9IG1faW5wdXRTb3VyY2VzLmZpbmRNYXRjaGluZyhb
JmlucHV0U291cmNlXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLT5oYW5kbGUoKSA9PSBpbnB1
dFNvdXJjZS5oYW5kbGU7IH0pOworICAgICAgICBhdXRvIGluZGV4ID0gbV9pbnB1dFNvdXJjZXMu
ZmluZElmKFsmaW5wdXRTb3VyY2VdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0tPmhhbmRsZSgp
ID09IGlucHV0U291cmNlLmhhbmRsZTsgfSk7CiAgICAgICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCkgewogICAgICAgICAgICAgLy8gV2hlbiBuZXcgWFIgaW5wdXQgc291cmNlcyBiZWNvbWUgYXZh
aWxhYmxlIGZvciBYUlNlc3Npb24gc2Vzc2lvbiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBydW4gdGhl
IGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgICAgIC8vIDEuIElmIHNlc3Npb24ncyBwcm9taXNl
IHJlc29sdmVkIGZsYWcgaXMgbm90IHNldCwgYWJvcnQgdGhlc2Ugc3RlcHMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCShyZXZpc2lvbiAy
ODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIw
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNzksNyArMjgwLDcgQEAgdm9pZCBXZWJYUlNlc3Npb246OmNhbmNlbEFuaW1h
dGlvbkZyYW1lKAogICAgIC8vICAgIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbiBmcmFtZSBj
YWxsYmFja3MgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGhhbmRsZS4KICAgICAv
LyAzLiBJZiB0aGVyZSBpcyBzdWNoIGFuIGVudHJ5LCBzZXQgaXRzIGNhbmNlbGxlZCBib29sZWFu
IHRvIHRydWUgYW5kIHJlbW92ZSBpdCBmcm9tCiAgICAgLy8gICAgc2Vzc2lvbidzIGxpc3Qgb2Yg
YW5pbWF0aW9uIGZyYW1lIGNhbGxiYWNrcy4KLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX2NhbGxi
YWNrcy5maW5kTWF0Y2hpbmcoW2NhbGxiYWNrSWRdIChhdXRvJiBpdGVtKSB7CisgICAgc2l6ZV90
IHBvc2l0aW9uID0gbV9jYWxsYmFja3MuZmluZElmKFtjYWxsYmFja0lkXSAoYXV0byYgaXRlbSkg
ewogICAgICAgICByZXR1cm4gaXRlbS0+Y2FsbGJhY2tJZCgpID09IGNhbGxiYWNrSWQ7CiAgICAg
fSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
Y3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNiw3ICsxMTcsNyBAQCB2b2lkIFdlYlhSU3lzdGVt
OjplbnN1cmVJbW1lcnNpdmVYUkRldmljCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uICYmIG9sZERldmljZSAmJiBp
bW1lcnNpdmVYUkRldmljZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBlbnRyeSkgeyByZXR1cm4g
ZW50cnkucHRyKCkgPT0gb2xkRGV2aWNlOyB9KSAhPSBub3RGb3VuZCkKKyAgICAgICAgaWYgKG1f
YWN0aXZlSW1tZXJzaXZlU2Vzc2lvbiAmJiBvbGREZXZpY2UgJiYgaW1tZXJzaXZlWFJEZXZpY2Vz
LmZpbmRJZihbJl0oYXV0byYgZW50cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09IG9sZERldmlj
ZTsgfSkgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVJbW1lcnNpdmVE
ZXZpY2UuZ2V0KCkgPT0gb2xkRGV2aWNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogaW1wbGVtZW50IGEgYmV0dGVyIFVBIHNlbGVjdGlvbiBtZWNoYW5pc20gaWYgcmVx
dWlyZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjgwLDcgKzMyODAsNyBA
QCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGPgogc3RhdGljIGJvb2wgYXBwZW5kSWZOb3RDb250YWluc01hdGNo
aW5nKFZlY3RvcjxUPiYgdmVjdG9yLCBjb25zdCBUJiB2YWx1ZSwgRiBtYXRjaGVzKQogewotICAg
IGlmICh2ZWN0b3IuZmluZE1hdGNoaW5nKG1hdGNoZXMpICE9IG5vdEZvdW5kKQorICAgIGlmICh2
ZWN0b3IuZmluZElmKG1hdGNoZXMpICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgdmVjdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmls
aXR5QXRzcGkuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNDAsNyArMjQxLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNo
b3VsZEVtaXRTaWduYQogCiAgICAgY29uc3QgY2hhciogbmVlZGxlWzRdID0geyBpbnRlcmZhY2Us
IG5hbWUsIGRldGFpbCwgbnVsbHB0ciB9OwogICAgIGZvciAoY29uc3QgYXV0byYgbGlzdGVuZXJz
IDogbV9ldmVudExpc3RlbmVycy52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGxp
c3RlbmVycy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IEdVbmlxdWVQdHI8Y2hhcio+JiBldmVudCkg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IGxpc3RlbmVycy5maW5kSWYoWyZdKGNvbnN0IEdVbmlx
dWVQdHI8Y2hhcio+JiBldmVudCkgewogICAgICAgICAgICAgcmV0dXJuIGV2ZW50SXNTdWJ0eXBl
KGNvbnN0X2Nhc3Q8Y2hhcioqPihuZWVkbGUpLCBldmVudC5nZXQoKSk7CiAgICAgICAgIH0pOwog
ICAgICAgICBpZiAocmVzdWx0ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI0LDcgKzMyNCw3IEBAIFZlY3RvcjxT
dHJpbmc+IERhdGFUcmFuc2Zlcjo6dHlwZXMoQWRkRmkKICAgICB9CiAKICAgICBhdXRvIHNhZmVU
eXBlcyA9IG1fcGFzdGVib2FyZC0+dHlwZXNTYWZlRm9yQmluZGluZ3MobV9vcmlnaW5JZGVudGlm
aWVyKTsKLSAgICBib29sIGhhc0ZpbGVCYWNrZWRJdGVtID0gbV9pdGVtTGlzdCAmJiBtX2l0ZW1M
aXN0LT5oYXNJdGVtcygpICYmIG5vdEZvdW5kICE9IG1faXRlbUxpc3QtPml0ZW1zKCkuZmluZE1h
dGNoaW5nKFtdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgYm9vbCBoYXNGaWxlQmFja2VkSXRl
bSA9IG1faXRlbUxpc3QgJiYgbV9pdGVtTGlzdC0+aGFzSXRlbXMoKSAmJiBub3RGb3VuZCAhPSBt
X2l0ZW1MaXN0LT5pdGVtcygpLmZpbmRJZihbXSAoY29uc3QgYXV0byYgaXRlbSkgewogICAgICAg
ICByZXR1cm4gaXRlbS0+aXNGaWxlKCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NTUsNyArMTU1LDcgQEAgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4mIERhdGFUcmFucwog
CiBzdGF0aWMgdm9pZCByZW1vdmVTdHJpbmdJdGVtT2ZMb3dlcmNhc2VkVHlwZShWZWN0b3I8UmVm
PERhdGFUcmFuc2Zlckl0ZW0+PiYgaXRlbXMsIGNvbnN0IFN0cmluZyYgbG93ZXJjYXNlZFR5cGUp
CiB7Ci0gICAgYXV0byBpbmRleCA9IGl0ZW1zLmZpbmRNYXRjaGluZyhbbG93ZXJjYXNlZFR5cGVd
KGF1dG8mIGl0ZW0pIHsKKyAgICBhdXRvIGluZGV4ID0gaXRlbXMuZmluZElmKFtsb3dlcmNhc2Vk
VHlwZV0oYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gIWl0ZW0tPmlzRmlsZSgpICYmIGl0
ZW0tPnR5cGUoKSA9PSBsb3dlcmNhc2VkVHlwZTsKICAgICB9KTsKICAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI4ODQ2MykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMs
NyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQog
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC00MjgzLDcgKzQyODMsNyBAQCB2b2lkIERv
Y3VtZW50OjphZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnCiAgICAgICAgIG1fcGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0TGlzdCA9IG1ha2VVbmlxdWU8UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlz
dD4oKTsKIAogICAgIGF1dG8mIHRhcmdldHMgPSBtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdldExp
c3QtPnRhcmdldHM7Ci0gICAgaWYgKHRhcmdldHMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50
cnkpIHsgcmV0dXJuIGVudHJ5LnB0cigpID09ICZ0YXJnZXQ7IH0pICE9IG5vdEZvdW5kKQorICAg
IGlmICh0YXJnZXRzLmZpbmRJZihbJl0gKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIo
KSA9PSAmdGFyZ2V0OyB9KSAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KHRhcmdldHMuaXNFbXB0eSgpKQpAQCAtODAzMyw3ICs4MDMzLDcgQEAgdm9pZCBEb2N1bWVudDo6
dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGZvciAoYXV0byYgdGFyZ2V0IDogb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpKSB7CiAg
ICAgICAgICAgICBhdXRvJiB0YXJnZXRSZWdpc3RyYXRpb25zID0gdGFyZ2V0LT5pbnRlcnNlY3Rp
b25PYnNlcnZlckRhdGFJZkV4aXN0cygpLT5yZWdpc3RyYXRpb25zOwotICAgICAgICAgICAgYXV0
byBpbmRleCA9IHRhcmdldFJlZ2lzdHJhdGlvbnMuZmluZE1hdGNoaW5nKFtvYnNlcnZlcl0oYXV0
byYgcmVnaXN0cmF0aW9uKSB7CisgICAgICAgICAgICBhdXRvIGluZGV4ID0gdGFyZ2V0UmVnaXN0
cmF0aW9ucy5maW5kSWYoW29ic2VydmVyXShhdXRvJiByZWdpc3RyYXRpb24pIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVyLmdldCgpID09IG9ic2VydmVyOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDEsNyArMjQxLDcgQEAgVmVjdG9y
PEV2ZW50VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUAogICAgIFJFTEVBU0VfQVNTRVJUKHBh
dGhTaXplKTsKICAgICBwYXRoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aFNpemUpOwogCi0g
ICAgYXV0byBjdXJyZW50VGFyZ2V0SW5kZXggPSBtX3BhdGguZmluZE1hdGNoaW5nKFsmdGFyZ2V0
XSAoYXV0byYgY29udGV4dCkgeworICAgIGF1dG8gY3VycmVudFRhcmdldEluZGV4ID0gbV9wYXRo
LmZpbmRJZihbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3VycmVudFRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoY3VycmVudFRhcmdldEluZGV4ICE9IG5vdEZvdW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xNTgsNyArMTU4
LDcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlU2xvdENoYW5nZQogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgUmVmIGV2ZW50TG9vcCA9IHNsb3QuZG9jdW1lbnQoKS53
aW5kb3dFdmVudExvb3AoKTsKICAgICBhdXRvJiBsaXN0ID0gZXZlbnRMb29wLT5zaWduYWxTbG90
TGlzdCgpOwotICAgIEFTU0VSVChsaXN0LmZpbmRNYXRjaGluZyhbJnNsb3RdKGF1dG8mIGVudHJ5
KSB7IHJldHVybiBlbnRyeS5wdHIoKSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOworICAgIEFT
U0VSVChsaXN0LmZpbmRJZihbJnNsb3RdKGF1dG8mIGVudHJ5KSB7IHJldHVybiBlbnRyeS5wdHIo
KSA9PSAmc2xvdDsgfSkgPT0gbm90Rm91bmQpOwogICAgIGxpc3QuYXBwZW5kKHNsb3QpOwogCiAg
ICAgZXZlbnRMb29wLT5xdWV1ZU11dGF0aW9uT2JzZXJ2ZXJDb21wb3VuZE1pY3JvdGFzaygpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlVGV4dElucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBN
aWNoZWxhbmdlbG8gRGUgU2ltb25lIDxtaWNkZXNpbUBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBCYXNlVGV4dElucHV0VHlwZTo6cGF0dGVybk1p
c21hdGNoKAogCiAgICAgaWYgKGlzRW1haWxGaWVsZCgpICYmIGVsZW1lbnQoKS0+bXVsdGlwbGUo
KSkgewogICAgICAgICBhdXRvIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZXMuZmluZE1hdGNoaW5nKHZhbHVlUGF0dGVybk1pc21hdGNoKSAhPSBub3RGb3Vu
ZDsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5maW5kSWYodmFsdWVQYXR0ZXJuTWlzbWF0Y2gpICE9
IG5vdEZvdW5kOwogICAgIH0KICAgICByZXR1cm4gdmFsdWVQYXR0ZXJuTWlzbWF0Y2godmFsdWUp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjA0LDEzICs2MDQsMTMgQEAgdW5zaWduZWQgSFRNTFZpZGVv
RWxlbWVudDo6cmVxdWVzdFZpZGVvRgogdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpjYW5jZWxWaWRl
b0ZyYW1lQ2FsbGJhY2sodW5zaWduZWQgaWRlbnRpZmllcikKIHsKICAgICAvLyBTZWFyY2ggZmly
c3QgdGhlIHJlcXVlc3RzIGN1cnJlbnRseSBiZWluZyBzZXJ2aWNlZCwgYW5kIG1hcmsgdGhlbSBh
cyBjYW5jZWxsZWQgaWYgZm91bmQuCi0gICAgYXV0byBpbmRleCA9IG1fc2VydmljZWRWaWRlb0Zy
YW1lUmVxdWVzdHMuZmluZE1hdGNoaW5nKFtpZGVudGlmaWVyXShhdXRvJiByZXF1ZXN0KSB7IHJl
dHVybiByZXF1ZXN0LT5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8gaW5k
ZXggPSBtX3NlcnZpY2VkVmlkZW9GcmFtZVJlcXVlc3RzLmZpbmRJZihbaWRlbnRpZmllcl0oYXV0
byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRpZmllciA9PSBpZGVudGlmaWVyOyB9
KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgbV9zZXJ2aWNlZFZpZGVv
RnJhbWVSZXF1ZXN0c1tpbmRleF0tPmNhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpbmRleCA9IG1fdmlkZW9GcmFtZVJlcXVlc3RzLmZpbmRNYXRjaGluZyhb
aWRlbnRpZmllcl0oYXV0byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRpZmllciA9
PSBpZGVudGlmaWVyOyB9KTsKKyAgICBpbmRleCA9IG1fdmlkZW9GcmFtZVJlcXVlc3RzLmZpbmRJ
ZihbaWRlbnRpZmllcl0oYXV0byYgcmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC0+aWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOyB9KTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAg
IHJldHVybjsKICAgICBtX3ZpZGVvRnJhbWVSZXF1ZXN0cy5yZW1vdmUoaW5kZXgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVU
aW1lRWRpdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgRGF0
ZVRpbWVFZGl0RWxlbWVudDo6YWRkRmllbGQoUmVmPEQKIAogc2l6ZV90IERhdGVUaW1lRWRpdEVs
ZW1lbnQ6OmZpZWxkSW5kZXhPZihjb25zdCBEYXRlVGltZUZpZWxkRWxlbWVudCYgZmllbGRUb0Zp
bmQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZmllbGRzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8m
IGZpZWxkKSB7CisgICAgcmV0dXJuIG1fZmllbGRzLmZpbmRJZihbJl0gKGF1dG8mIGZpZWxkKSB7
CiAgICAgICAgIHJldHVybiBmaWVsZC5wdHIoKSA9PSAmZmllbGRUb0ZpbmQ7CiAgICAgfSk7CiB9
CkBAIC0yMjMsNyArMjIzLDcgQEAgc2l6ZV90IERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZpZWxkSW5k
ZXhPZgogRGF0ZVRpbWVGaWVsZEVsZW1lbnQqIERhdGVUaW1lRWRpdEVsZW1lbnQ6OmZvY3VzZWRG
aWVsZEVsZW1lbnQoKSBjb25zdAogewogICAgIGF1dG8qIGZvY3VzZWRFbGVtZW50ID0gZG9jdW1l
bnQoKS5mb2N1c2VkRWxlbWVudCgpOwotICAgIGF1dG8gZmllbGRJbmRleCA9IG1fZmllbGRzLmZp
bmRNYXRjaGluZyhbJl0gKGF1dG8mIGZpZWxkKSB7CisgICAgYXV0byBmaWVsZEluZGV4ID0gbV9m
aWVsZHMuZmluZElmKFsmXSAoYXV0byYgZmllbGQpIHsKICAgICAgICAgcmV0dXJuIGZpZWxkLnB0
cigpID09IGZvY3VzZWRFbGVtZW50OwogICAgIH0pOwogCkBAIC0yODksNyArMjg5LDcgQEAgdm9p
ZCBEYXRlVGltZUVkaXRFbGVtZW50OjpkaWRCbHVyRnJvbUZpZQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoYXV0byogbmV3Rm9jdXNlZEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkp
IHsKLSAgICAgICAgYm9vbCBkaWRGb2N1c1NpYmxpbmdGaWVsZCA9IG5vdEZvdW5kICE9IG1fZmll
bGRzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGZpZWxkKSB7CisgICAgICAgIGJvb2wgZGlkRm9j
dXNTaWJsaW5nRmllbGQgPSBub3RGb3VuZCAhPSBtX2ZpZWxkcy5maW5kSWYoWyZdIChhdXRvJiBm
aWVsZCkgewogICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnB0cigpID09IG5ld0ZvY3VzZWRFbGVt
ZW50OwogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmREYXRhVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNCBDYWJsZSBUZWxldmlz
aW9uIExhYnMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODMsNyArODMsNyBAQCB2b2lkIEluYmFuZERhdGFUZXh0VHJh
Y2s6OmFkZERhdGFDdWUoY29uCiAKIFJlZlB0cjxEYXRhQ3VlPiBJbmJhbmREYXRhVGV4dFRyYWNr
OjpmaW5kSW5jb21wbGV0ZUN1ZShjb25zdCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJiBjdWVU
b0ZpbmQpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1faW5jb21wbGV0ZUN1ZU1hcC5maW5kTWF0Y2hp
bmcoWyZdKGNvbnN0IGF1dG8mIGN1ZSkgeworICAgIGF1dG8gaW5kZXggPSBtX2luY29tcGxldGVD
dWVNYXAuZmluZElmKFsmXShjb25zdCBhdXRvJiBjdWUpIHsKICAgICAgICAgcmV0dXJuIGN1ZVRv
RmluZC5pc0VxdWFsKCpjdWUtPnBsYXRmb3JtVmFsdWUoKSk7CiAgICAgfSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCShyZXZpc2lvbiAy
ODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjph
cHBlbmRBY3Rpb25TbmFwc2gKIAogaW50IEluc3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRhKER1
cGxpY2F0ZURhdGFWYXJpYW50IGRhdGEpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleGVk
RHVwbGljYXRlRGF0YS5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGl0ZW0pIHsKKyAgICBzaXplX3Qg
aW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmZpbmRJZihbJl0gKGF1dG8gaXRlbSkgewog
ICAgICAgICBpZiAoZGF0YSA9PSBpdGVtKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dl
ckFnZW50LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW4KICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgZXZlbnRMaXN0ZW5lcnMgPSB0YXJnZXQuZXZlbnRMaXN0ZW5l
cnMoZXZlbnRUeXBlKTsKLSAgICBhdXRvIHBvc2l0aW9uID0gZXZlbnRMaXN0ZW5lcnMuZmluZE1h
dGNoaW5nKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICBhdXRvIHBvc2l0aW9u
ID0gZXZlbnRMaXN0ZW5lcnMuZmluZElmKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsK
ICAgICAgICAgcmV0dXJuICZyZWdpc3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkgPT0gJmxpc3Rl
bmVyICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IGNhcHR1cmU7CiAgICAg
fSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQpAQCAtOTIsNyArOTIsNyBAQCB2b2lk
IFdlYkRlYnVnZ2VyQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuCiB2b2lkIFdlYkRlYnVnZ2VyQWdl
bnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0
b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVy
ZSkKIHsKICAgICBhdXRvJiBldmVudExpc3RlbmVycyA9IHRhcmdldC5ldmVudExpc3RlbmVycyhl
dmVudFR5cGUpOwotICAgIHNpemVfdCBsaXN0ZW5lckluZGV4ID0gZXZlbnRMaXN0ZW5lcnMuZmlu
ZE1hdGNoaW5nKFsmXShhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICBzaXplX3QgbGlz
dGVuZXJJbmRleCA9IGV2ZW50TGlzdGVuZXJzLmZpbmRJZihbJl0oYXV0byYgcmVnaXN0ZXJlZExp
c3RlbmVyKSB7CiAgICAgICAgIHJldHVybiAmcmVnaXN0ZXJlZExpc3RlbmVyLT5jYWxsYmFjaygp
ID09ICZsaXN0ZW5lciAmJiByZWdpc3RlcmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSA9PSBjYXB0
dXJlOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0
aW5nU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRpbmdTdGF0ZS5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2xh
eW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsNyArNjUsNyBA
QCB2b2lkIEZsb2F0aW5nU3RhdGU6OmFwcGVuZChGbG9hdEl0ZW0gZmxvCiAgICAgICAgIHJldHVy
biBtX2Zsb2F0cy5hcHBlbmQoZmxvYXRJdGVtKTsKIAogICAgIC8vIFRoZSBpbnRlZ3JhdGlvbiBj
b2RlcGF0aCBkb2VzIG5vdCBjb25zdHJ1Y3QgYSBsYXlvdXQgYm94IGZvciB0aGUgZmxvYXQgaXRl
bS4KLSAgICBBU1NFUlRfSU1QTElFUyhmbG9hdEl0ZW0uZmxvYXRCb3goKSwgbV9mbG9hdHMuZmlu
ZE1hdGNoaW5nKFsmXSAoYXV0byYgZW50cnkpIHsKKyAgICBBU1NFUlRfSU1QTElFUyhmbG9hdEl0
ZW0uZmxvYXRCb3goKSwgbV9mbG9hdHMuZmluZElmKFsmXSAoYXV0byYgZW50cnkpIHsKICAgICAg
ICAgcmV0dXJuIGVudHJ5LmZsb2F0Qm94KCkgPT0gZmxvYXRJdGVtLmZsb2F0Qm94KCk7CiAgICAg
fSkgPT0gbm90Rm91bmQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAkocmV2
aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uQm94VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBAIExh
eW91dDo6Qm94JiBCb3hUcmVlOjpsYXlvdXRCb3hGb3JSZW5kZXIKICAgICAgICAgcmV0dXJuIG1f
cm9vdDsKIAogICAgIGlmIChtX2JveGVzLnNpemUoKSA8PSBzbWFsbFRyZWVUaHJlc2hvbGQpIHsK
LSAgICAgICAgYXV0byBpbmRleCA9IG1fYm94ZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBlbnRy
eSkgeworICAgICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5maW5kSWYoWyZdKGF1dG8mIGVudHJ5
KSB7CiAgICAgICAgICAgICByZXR1cm4gZW50cnkucmVuZGVyZXIgPT0gJnJlbmRlcmVyOwogICAg
ICAgICB9KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwpAQCAt
MjI2LDcgKzIyNiw3IEBAIFJlbmRlck9iamVjdCYgQm94VHJlZTo6cmVuZGVyZXJGb3JMYXlvdXQK
ICAgICAgICAgcmV0dXJuIG1fZmxvdzsKIAogICAgIGlmIChtX2JveGVzLnNpemUoKSA8PSBzbWFs
bFRyZWVUaHJlc2hvbGQpIHsKLSAgICAgICAgYXV0byBpbmRleCA9IG1fYm94ZXMuZmluZE1hdGNo
aW5nKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICBhdXRvIGluZGV4ID0gbV9ib3hlcy5maW5k
SWYoWyZdKGF1dG8mIGVudHJ5KSB7CiAgICAgICAgICAgICByZXR1cm4gZW50cnkuYm94LnB0cigp
ID09ICZib3g7CiAgICAgICAgIH0pOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCAhPSBu
b3RGb3VuZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJ
KHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yMjcxLDcgKzIyNzEsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdGFydElj
b25Mb2FkaW5nKCkKIAogICAgIG1fbGlua0ljb25zID0gTGlua0ljb25Db2xsZWN0b3IgeyAqZG9j
dW1lbnQgfS5pY29uc09mVHlwZXMoeyBMaW5rSWNvblR5cGU6OkZhdmljb24sIExpbmtJY29uVHlw
ZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pOwogCi0g
ICAgYXV0byBmaW5kUmVzdWx0ID0gbV9saW5rSWNvbnMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIGlj
b24pIHsgcmV0dXJuIGljb24udHlwZSA9PSBMaW5rSWNvblR5cGU6OkZhdmljb247IH0pOworICAg
IGF1dG8gZmluZFJlc3VsdCA9IG1fbGlua0ljb25zLmZpbmRJZihbXShhdXRvJiBpY29uKSB7IHJl
dHVybiBpY29uLnR5cGUgPT0gTGlua0ljb25UeXBlOjpGYXZpY29uOyB9KTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBub3RGb3VuZCkKICAgICAgICAgbV9saW5rSWNvbnMuYXBwZW5kKHsgZG9jdW1l
bnQtPmNvbXBsZXRlVVJMKCIvZmF2aWNvbi5pY28iX3MpLCBMaW5rSWNvblR5cGU6OkZhdmljb24s
IFN0cmluZygpLCBzdGQ6Om51bGxvcHQsIHsgfSB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE1Niw3ICsxNTYsNyBAQCBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJnaW4o
CiAKIGJvb2wgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzT2JzZXJ2aW5nKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzLmZpbmRN
YXRjaGluZyhbJl0oYXV0byYgdGFyZ2V0KSB7CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJn
ZXRzLmZpbmRJZihbJl0oYXV0byYgdGFyZ2V0KSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQuZ2V0
KCkgPT0gJmVsZW1lbnQ7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL01vZGFsQ29udGFpbmVyT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWluZXJPYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTW9kYWxDb250YWluZXJPYnNlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTE1LDEzICs1MTUsMTMgQEAgdm9pZCBNb2RhbENvbnRhaW5lck9ic2VydmVy
Ojpjb2xsZWN0Q2xpYwogICAgICAgICAgICAgICAgICAgICBjYXNlIE1vZGFsQ29udGFpbmVyRGVj
aXNpb246OkhpZGVBbmRJZ25vcmU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBNb2RhbENvbnRhaW5lckRlY2lzaW9uOjpIaWRlQW5kQWxs
b3c6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbmRleCA9IHBvc2l0aXZlLmZp
bmRNYXRjaGluZyhtYXRjaE5vbk51bGwpOyBpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gcG9zaXRpdmUuZmluZElmKG1hdGNoTm9uTnVs
bCk7IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwb3NpdGl2ZVtpbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBpbmRleCA9IG5ldXRyYWwuZmluZE1hdGNoaW5nKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9IG5v
dEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW5kZXggPSBuZXV0cmFs
LmZpbmRJZihtYXRjaE5vbk51bGwpOyBpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV1dHJhbFtpbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNb2RhbENvbnRhaW5l
ckRlY2lzaW9uOjpIaWRlQW5kRGlzYWxsb3c6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbmRleCA9IG5lZ2F0aXZlLmZpbmRNYXRjaGluZyhtYXRjaE5vbk51bGwpOyBpbmRleCAh
PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbmVn
YXRpdmUuZmluZElmKG1hdGNoTm9uTnVsbCk7IGluZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGl2ZVtpbmRleF0uZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNyArNjAsNyBAQCB2b2lkIFJlc2l6ZU9ic2Vy
dmVyOjpvYnNlcnZlKEVsZW1lbnQmIHRhCiAgICAgaWYgKCFtX2NhbGxiYWNrKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHBvc2l0aW9uID0gbV9vYnNlcnZhdGlvbnMuZmluZE1hdGNoaW5n
KFsmXShhdXRvJiBvYnNlcnZhdGlvbikgeworICAgIGF1dG8gcG9zaXRpb24gPSBtX29ic2VydmF0
aW9ucy5maW5kSWYoWyZdKGF1dG8mIG9ic2VydmF0aW9uKSB7CiAgICAgICAgIHJldHVybiBvYnNl
cnZhdGlvbi0+dGFyZ2V0KCkgPT0gJnRhcmdldDsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1OCw3ICsx
NTgsNyBAQCB2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVtb3ZlTGF0CiAgICAgaWYg
KG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gbV9mcmFtZVN0YXRlU3RhY2suZmluZE1hdGNoaW5nKFsmZWxlbWVudF0g
KGNvbnN0IGF1dG8mIHN0YXRlKSB7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9mcmFtZVN0YXRl
U3RhY2suZmluZElmKFsmZWxlbWVudF0gKGNvbnN0IGF1dG8mIHN0YXRlKSB7CiAgICAgICAgIGF1
dG8qIHdoZWVsRWxlbWVudCA9IHN0YXRlLndoZWVsRXZlbnRFbGVtZW50LmdldCgpOwogICAgICAg
ICByZXR1cm4gd2hlZWxFbGVtZW50ICYmIGVsZW1lbnQuaXNFcXVhbE5vZGUod2hlZWxFbGVtZW50
KTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0
aWMgYm9vbCBoYXNDb21wYXRpYmxlU25hcEFyZWEoY29uc3QgCiAgICAgYXV0byBzY3JvbGxEZXN0
aW5hdGlvbkluT3RoZXJBeGlzID0gY29tcG9uZW50Rm9yQXhpczxVbml0VHlwZSwgUG9pbnRUeXBl
PihkZXN0aW5hdGlvbk9mZnNldFBvaW50LCBvdGhlckF4aXMpOwogICAgIGF1dG8gdmlld3BvcnRM
ZW5ndGhJbk90aGVyQXhpcyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
dmlld3BvcnRTaXplLmhlaWdodCgpIDogdmlld3BvcnRTaXplLndpZHRoKCk7CiAKLSAgICByZXR1
cm4gc25hcE9mZnNldC5zbmFwQXJlYUluZGljZXMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byBpbmRl
eCkgeworICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBBcmVhSW5kaWNlcy5maW5kSWYoWyZdIChh
dXRvIGluZGV4KSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHNuYXBBcmVhID0gaW5mby5zbmFwQXJl
YXNbaW5kZXhdOwogICAgICAgICBhdXRvIFtvdGhlckF4aXNNaW4sIG90aGVyQXhpc01heF0gPSBy
YW5nZUZvckF4aXM8VW5pdFR5cGU+KHNuYXBBcmVhLCBvdGhlckF4aXMpOwogICAgICAgICByZXR1
cm4gKHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMgKyB2aWV3cG9ydExlbmd0aEluT3RoZXJB
eGlzKSA+IG90aGVyQXhpc01pbiAmJiBzY3JvbGxEZXN0aW5hdGlvbkluT3RoZXJBeGlzIDwgb3Ro
ZXJBeGlzTWF4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVOb2RlLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nybwogewog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZS5pbkNvbW1pdFRyZWVTdGF0ZSgpKTsK
IAotICAgIHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4uZmluZE1hdGNoaW5nKFsmXShhdXRvJiBj
aGlsZCkgeworICAgIHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4uZmluZElmKFsmXShhdXRvJiBj
aGlsZCkgewogICAgICAgICByZXR1cm4gJm5vZGUgPT0gY2hpbGQucHRyKCk7CiAgICAgfSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCShy
ZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc4
Myw3ICs3ODMsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6cHJlZmVycmVkSW1hZ2VNCiB7
CiAgICAgYXV0byBhbGxvd2VkTUlNRVR5cGVzID0gTUlNRVR5cGVSZWdpc3RyeTo6YWxsb3dlZE1J
TUVUeXBlcyhtaW1lVHlwZXMsIGV4dGVuc2lvbnMpOwogCi0gICAgYXV0byBwb3NpdGlvbiA9IGFs
bG93ZWRNSU1FVHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IGF1dG8mIG1pbWVUeXBlKSB7Cisg
ICAgYXV0byBwb3NpdGlvbiA9IGFsbG93ZWRNSU1FVHlwZXMuZmluZElmKFtdKGNvbnN0IGF1dG8m
IG1pbWVUeXBlKSB7CiAgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSk7CiAgICAgfSk7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuY3Bw
CShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
Q3VzdG9tRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgUGFzdGVi
b2FyZEN1c3RvbURhdGE6OndyaXRlU3RyaW5nSW4KIAogUGFzdGVib2FyZEN1c3RvbURhdGE6OkVu
dHJ5JiBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6YWRkT3JNb3ZlRW50cnlUb0VuZChjb25zdCBTdHJp
bmcmIHR5cGUpCiB7Ci0gICAgYXV0byBpbmRleCA9IG1fZGF0YS5maW5kTWF0Y2hpbmcoWyZdIChh
dXRvJiBlbnRyeSkgeworICAgIGF1dG8gaW5kZXggPSBtX2RhdGEuZmluZElmKFsmXSAoYXV0byYg
ZW50cnkpIHsKICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGUgPT0gdHlwZTsKICAgICB9KTsKICAg
ICBhdXRvIGVudHJ5ID0gaW5kZXggPT0gbm90Rm91bmQgPyBFbnRyeSh0eXBlKSA6IG1fZGF0YVtp
bmRleF07CkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6aGFz
RGF0YSgpIGNvbgogCiBib29sIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpoYXNTYW1lT3JpZ2luQ3Vz
dG9tRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vdEZvdW5kICE9IG1fZGF0YS5maW5kTWF0
Y2hpbmcoWyZdIChhdXRvJiBlbnRyeSkgeworICAgIHJldHVybiBub3RGb3VuZCAhPSBtX2RhdGEu
ZmluZElmKFsmXSAoYXV0byYgZW50cnkpIHsKICAgICAgICAgcmV0dXJuICFlbnRyeS5jdXN0b21E
YXRhLmlzTnVsbCgpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGFzdGVib2FyZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQkocmV2aXNpb24gMjg4NDYzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE0OSw3ICsxNDksNyBAQCBQYXN0ZWJvYXJkOjpGaWxlQ29udGVudFN0YXRlIFBhc3RlYm9h
cmQ6CiAgICAgICAgIGlmICghaXRlbXMpCiAgICAgICAgICAgICByZXR1cm4gRmlsZUNvbnRlbnRT
dGF0ZTo6Tm9GaWxlT3JJbWFnZURhdGE7CiAKLSAgICAgICAgbWF5Q29udGFpbkZpbGVQYXRocyA9
IGl0ZW1zLT5zaXplKCkgIT0gMSB8fCBub3RGb3VuZCAhPSBpdGVtcy0+ZmluZE1hdGNoaW5nKFtd
IChhdXRvJiBpdGVtKSB7CisgICAgICAgIG1heUNvbnRhaW5GaWxlUGF0aHMgPSBpdGVtcy0+c2l6
ZSgpICE9IDEgfHwgbm90Rm91bmQgIT0gaXRlbXMtPmZpbmRJZihbXSAoYXV0byYgaXRlbSkgewog
ICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY2FuQmVUcmVhdGVkQXNBdHRhY2htZW50T3JGaWxlKCkg
fHwgaXRlbS5pc05vblRleHRUeXBlIHx8IGl0ZW0uY29udGFpbnNGaWxlVVJMQW5kRmlsZVVwbG9h
ZENvbnRlbnQ7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTE1OCwxMCArMTU4LDEwIEBAIFBhc3Rl
Ym9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICBpZiAoIW1heUNvbnRhaW5G
aWxlUGF0aHMpIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlczsKICAgICAgICAg
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyhjb2Nv
YVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwotICAgICAgICBpZiAoY29jb2FU
eXBlcy5maW5kTWF0Y2hpbmcoW10oY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUpIHsgcmV0dXJuIHNo
b3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKGNvY29hVHlwZSk7IH0pID09IG5vdEZvdW5kKQorICAg
ICAgICBpZiAoY29jb2FUeXBlcy5maW5kSWYoW10oY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUpIHsg
cmV0dXJuIHNob3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKGNvY29hVHlwZSk7IH0pID09IG5vdEZv
dW5kKQogICAgICAgICAgICAgcmV0dXJuIEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1hZ2VE
YXRhOwogCi0gICAgICAgIGF1dG8gaW5kZXhPZlVSTCA9IGNvY29hVHlwZXMuZmluZE1hdGNoaW5n
KFtdKGF1dG8mIGNvY29hVHlwZSkgeworICAgICAgICBhdXRvIGluZGV4T2ZVUkwgPSBjb2NvYVR5
cGVzLmZpbmRJZihbXShhdXRvJiBjb2NvYVR5cGUpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAg
ICAgICAgICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAJKHJldmlzaW9uIDI4
ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDcgKzExMCw3IEBA
IGJvb2wgS2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudChLZXkKIAogYm9vbCBLZXlTdG9y
ZTo6Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewotICAgIHJl
dHVybiBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3Rv
cmVkS2V5KSB7CisgICAgcmV0dXJuIG1fa2V5cy5maW5kSWYoWyZdKGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7
CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkBAIC0xNDksNyArMTUwLDcgQEAgYm9vbCBLZXlTdG9y
ZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleQogYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxL
ZXlIYW5kbGU+JiYga2V5KQogewogICAgIGJvb2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxzZTsKLSAg
ICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmco
WyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CisgICAgc2l6ZV90IGtl
eVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZElmKFsmXSAoY29uc3QgUmVmUHRy
PEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewogICAgICAgICByZXR1cm4gKmtleSA9PSAqc3RvcmVk
S2V5OwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlz
cGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE5LDcg
KzExOSw3IEBAIHZvaWQgRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZGlzcGwKIAogc2l6
ZV90IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI6OmZpbmRNb25pdG9yRm9yRGlzcGxheUlE
KFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tb25p
dG9ycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIG1vbml0b3JXcmFwcGVyKSB7CisgICAgcmV0dXJu
IG1fbW9uaXRvcnMuZmluZElmKFsmXShhdXRvJiBtb25pdG9yV3JhcHBlcikgewogICAgICAgICBy
ZXR1cm4gbW9uaXRvcldyYXBwZXIubW9uaXRvci0+ZGlzcGxheUlEKCkgPT0gZGlzcGxheUlEOwog
ICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSEVWQ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjIwLDcgKzIyMCw3IEBAIFN0cmluZyBjcmVhdGVIRVZDQ29kZWNQYXJhbWV0ZXJzU3RyaW5nKGMK
ICAgICAvLyBnZW5lcmFsX3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnLCBlYWNoIGVuY29kZWQgYXMg
YSBoZXhhZGVjaW1hbCBudW1iZXIsIGFuZCB0aGUgZW5jb2RpbmcKICAgICAvLyBvZiBlYWNoIGJ5
dGUgc2VwYXJhdGVkIGJ5IGEgcGVyaW9kOyB0cmFpbGluZyBieXRlcyB0aGF0IGFyZSB6ZXJvIG1h
eSBiZSBvbWl0dGVkLgogICAgIFN0cmluZ0J1aWxkZXIgY29tcGF0aWJpbGl0eUZsYWdzOwotICAg
IGF1dG8gbGFzdEZsYWdCeXRlID0gcGFyYW1ldGVycy5nZW5lcmFsQ29uc3RyYWludEluZGljYXRv
ckZsYWdzLnJldmVyc2VGaW5kTWF0Y2hpbmcoW10gKGF1dG8mIGZsYWcpIHsgcmV0dXJuIGZsYWc7
IH0pOworICAgIGF1dG8gbGFzdEZsYWdCeXRlID0gcGFyYW1ldGVycy5nZW5lcmFsQ29uc3RyYWlu
dEluZGljYXRvckZsYWdzLnJldmVyc2VGaW5kSWYoW10gKGF1dG8mIGZsYWcpIHsgcmV0dXJuIGZs
YWc7IH0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBsYXN0RmxhZ0J5dGUgIT0gbm90Rm91bmQg
JiYgaSA8PSBsYXN0RmxhZ0J5dGU7ICsraSkgewogICAgICAgICBjb21wYXRpYmlsaXR5RmxhZ3Mu
YXBwZW5kKCcuJyk7CiAgICAgICAgIGNvbXBhdGliaWxpdHlGbGFncy5hcHBlbmQoaGV4KHBhcmFt
ZXRlcnMuZ2VuZXJhbENvbnN0cmFpbnRJbmRpY2F0b3JGbGFnc1tpXSwgMikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2
aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMyLDcgKzMzMiw3IEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXIKIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSog
TWVkaWFQbGF5ZXI6Om1lZGlhRW5naW5lKE1lZGlhUGxheWVyRW51bXM6Ok1lZGlhRW5naW5lSWRl
bnRpZmllciBpZGVudGlmaWVyKQogewogICAgIGF1dG8mIGVuZ2luZXMgPSBpbnN0YWxsZWRNZWRp
YUVuZ2luZXMoKTsKLSAgICBhdXRvIGN1cnJlbnRJbmRleCA9IGVuZ2luZXMuZmluZE1hdGNoaW5n
KFtpZGVudGlmaWVyXSAoYXV0byYgZW5naW5lKSB7CisgICAgYXV0byBjdXJyZW50SW5kZXggPSBl
bmdpbmVzLmZpbmRJZihbaWRlbnRpZmllcl0gKGF1dG8mIGVuZ2luZSkgewogICAgICAgICByZXR1
cm4gZW5naW5lLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsKICAgICB9KTsKIApAQCAtMzkz
LDcgKzM5Myw3IEBAIGNvbnN0IE1lZGlhUGxheWVyRmFjdG9yeSogTWVkaWFQbGF5ZXI6Om4KICAg
ICBpZiAoIWN1cnJlbnQpIAogICAgICAgICByZXR1cm4gZW5naW5lcy5maXJzdCgpLmdldCgpOwog
Ci0gICAgYXV0byBjdXJyZW50SW5kZXggPSBlbmdpbmVzLmZpbmRNYXRjaGluZyhbY3VycmVudF0g
KGF1dG8mIGVuZ2luZSkgeworICAgIGF1dG8gY3VycmVudEluZGV4ID0gZW5naW5lcy5maW5kSWYo
W2N1cnJlbnRdIChhdXRvJiBlbmdpbmUpIHsKICAgICAgICAgcmV0dXJuIGVuZ2luZS5nZXQoKSA9
PSBjdXJyZW50OwogICAgIH0pOwogICAgIGlmIChjdXJyZW50SW5kZXggPT0gbm90Rm91bmQpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODUsNyArNTg1LDcg
QEAgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYgogCiAgICAgICAgIGF1
dG8gc2Vzc2lvbktleXMgPSBzZXNzaW9uSW50ZXJmYWNlLT5rZXlJRHMoKTsKICAgICAgICAgaWYg
KGFueU9mKHNlc3Npb25LZXlzLCBbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+
JiBzZXNzaW9uS2V5KSB7Ci0gICAgICAgICAgICByZXR1cm4ga2V5SURzLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBrZXlJRCkgeworICAgICAgICAg
ICAgcmV0dXJuIGtleUlEcy5maW5kSWYoWyZdKGNvbnN0IFJlZjxGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyPiYga2V5SUQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4ga2V5SUQuZ2V0KCkgPT0gc2Vz
c2lvbktleS5nZXQoKTsKICAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOwogICAgICAgICB9KSkK
QEAgLTU5Niw3ICs1OTYsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iCiAKIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQyogQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JSZXF1ZXN0KEFWQ29udGVu
dEtleVJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fc2Vzc2lv
bnMuZmluZE1hdGNoaW5nKFsmXSAoYXV0byBzZXNzaW9uKSB7CisgICAgYXV0byBpbmRleCA9IG1f
c2Vzc2lvbnMuZmluZElmKFsmXSAoYXV0byBzZXNzaW9uKSB7CiAgICAgICAgIHJldHVybiBzZXNz
aW9uICYmIHNlc3Npb24tPmhhc1JlcXVlc3QocmVxdWVzdCk7CiAgICAgfSk7CiAKQEAgLTYwOCw3
ICs2MDgsNyBAQCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iCiAKIENE
TUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQyogQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakM6OnNlc3Npb25Gb3JHcm91cChBVkNvbnRlbnRLZXlSZXBvcnRH
cm91cCogZ3JvdXApIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fc2Vzc2lvbnMuZmluZE1h
dGNoaW5nKFtncm91cF0gKGF1dG8gc2Vzc2lvbikgeworICAgIGF1dG8gaW5kZXggPSBtX3Nlc3Np
b25zLmZpbmRJZihbZ3JvdXBdIChhdXRvIHNlc3Npb24pIHsKICAgICAgICAgcmV0dXJuIHNlc3Np
b24gJiYgc2Vzc2lvbi0+Y29udGVudEtleVJlcG9ydEdyb3VwKCkgPT0gZ3JvdXA7CiAgICAgfSk7
CiAKQEAgLTg1Myw5ICs4NTMsOSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBhdXRv
IGtleUlEID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZSgqa2V5SURWZWN0b3IpKTsKLSAg
ICAgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IG1fY3VycmVudFJlcXVlc3QudmFsdWUoKS5yZXF1
ZXN0cy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiByZXF1ZXN0KSB7CisgICAgICAgICAgICBhdXRv
IGZvdW5kSW5kZXggPSBtX2N1cnJlbnRSZXF1ZXN0LnZhbHVlKCkucmVxdWVzdHMuZmluZElmKFsm
XSAoYXV0byYgcmVxdWVzdCkgewogICAgICAgICAgICAgICAgIGF1dG8ga2V5SURzID0ga2V5SURz
Rm9yUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5SURz
LmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBpZCkg
eworICAgICAgICAgICAgICAgIHJldHVybiBrZXlJRHMuZmluZElmKFsmXShjb25zdCBSZWY8RnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
ZC5nZXQoKSA9PSBrZXlJRC5nZXQoKTsKICAgICAgICAgICAgICAgICB9KSAhPSBub3RGb3VuZDsK
ICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyODg0NjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgYm9vbCBHcmFwaGljc0xheWVy
Q0E6OnNob3VsZFJlcGFpbnRPblNpegogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YW5pbWF0aW9u
SXNSdW5uaW5nKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkgY29uc3QKIHsKLSAgICBhdXRv
IGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRNYXRjaGluZyhbJl0oTGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbiBhbmltYXRpb24pIHsKKyAgICBhdXRvIGluZGV4ID0gbV9hbmltYXRpb25zLmZpbmRJZihb
Jl0oTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiBhbmltYXRpb24pIHsKICAgICAgICAgcmV0dXJuIGFu
aW1hdGlvbi5tX25hbWUgPT0gYW5pbWF0aW9uTmFtZTsKICAgICB9KTsKICAgICByZXR1cm4gaW5k
ZXggIT0gbm90Rm91bmQgJiYgbV9hbmltYXRpb25zW2luZGV4XS5tX3BsYXlTdGF0ZSA9PSBQbGF5
U3RhdGU6OlBsYXlpbmc7CkBAIC0xMjA2LDcgKzEyMDYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cGxhdGZvcm1DQUxheWVyQW5pCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMs
IHN0cmVhbSA8PCAiR3JhcGhpY3NMYXllckNBICIgPDwgdGhpcyA8PCAiIGlkICIgPDwgcHJpbWFy
eUxheWVySUQoKSA8PCAiIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQgIiA8PCBhbmlt
YXRpb25LZXkpOwogCi0gICAgYXV0byBpbmRleCA9IG1fYW5pbWF0aW9ucy5maW5kTWF0Y2hpbmco
WyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0aW9uKSB7CisgICAgYXV0byBpbmRleCA9
IG1fYW5pbWF0aW9ucy5maW5kSWYoWyZdKExheWVyUHJvcGVydHlBbmltYXRpb24gYW5pbWF0aW9u
KSB7CiAgICAgICAgIHJldHVybiBhbmltYXRpb24uYW5pbWF0aW9uSWRlbnRpZmllcigpID09IGFu
aW1hdGlvbktleSAmJiAhYW5pbWF0aW9uLm1fYmVnaW5UaW1lOwogICAgIH0pOwogCkBAIC0zMzAz
LDcgKzMzMDMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQW5pbWF0aW9ucygpCiAK
IGJvb2wgR3JhcGhpY3NMYXllckNBOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBtX2FuaW1hdGlvbnMuZmluZE1hdGNoaW5nKFsmXShMYXllclByb3Bl
cnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAgIHJldHVybiBtX2FuaW1hdGlvbnMuZmluZElm
KFsmXShMYXllclByb3BlcnR5QW5pbWF0aW9uIGFuaW1hdGlvbikgewogICAgICAgICByZXR1cm4g
YW5pbWF0ZWRQcm9wZXJ0eUlzVHJhbnNmb3JtT3JSZWxhdGVkKGFuaW1hdGlvbi5tX3Byb3BlcnR5
KSAmJiAoYW5pbWF0aW9uLm1fcGxheVN0YXRlID09IFBsYXlTdGF0ZTo6UGxheWluZyB8fCBhbmlt
YXRpb24ubV9wbGF5U3RhdGUgPT0gUGxheVN0YXRlOjpQYXVzZWQpOwogICAgIH0pICE9IG5vdEZv
dW5kOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04NDcsNyAr
ODQ3LDcgQEAgYm9vbCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljbwogICAgIFZl
Y3RvcjxDR1JlY3Q+IGJvdW5kaW5nUmVjdHM7CiAgICAgYm91bmRpbmdSZWN0cy5maWxsKENHUmVj
dFplcm8sIGdseXBocy5zaXplKCkpOwogICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlw
aHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVnaW4o
KSwgYm91bmRpbmdSZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbm90
Rm91bmQgPT0gYm91bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgeworICAg
IHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRJZihbXShhdXRvJiByZWN0KSB7
CiAgICAgICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRl
eHRFR0wuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0
MCw3IEBAIGJvb2wgR0xDb250ZXh0RUdMOjpnZXRFR0xDb25maWcoRUdMRGlzcGwKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGF1dG8gaW5kZXggPSBjb25maWdzLmZpbmRNYXRj
aGluZyhbJl0oRUdMQ29uZmlnIHZhbHVlKSB7CisgICAgYXV0byBpbmRleCA9IGNvbmZpZ3MuZmlu
ZElmKFsmXShFR0xDb25maWcgdmFsdWUpIHsKICAgICAgICAgRUdMaW50IHJlZFNpemUsIGdyZWVu
U2l6ZSwgYmx1ZVNpemUsIGFscGhhU2l6ZTsKICAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKGRp
c3BsYXksIHZhbHVlLCBFR0xfUkVEX1NJWkUsICZyZWRTaXplKTsKICAgICAgICAgZWdsR2V0Q29u
ZmlnQXR0cmliKGRpc3BsYXksIHZhbHVlLCBFR0xfR1JFRU5fU0laRSwgJmdyZWVuU2l6ZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
UmVnaXN0cnlTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmNwcAkocmV2aXNp
b24gMjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MSwxNCAr
NTYxLDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBHU3RyZWFtZXIKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBjb2RlY3MpIHsKICAgICAgICAgYXV0byBjb2RlYyA9IGl0
ZW0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICAgICAgYm9vbCByZXF1aXJlc0hhcmR3
YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydAotICAgICAg
ICAgICAgLmZpbmRNYXRjaGluZyhbY29udGFpbmVyVHlwZSwgY29kZWNdKGF1dG8mIGhhcmR3YXJl
Q29udGVudFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgLmZpbmRJZihbY29udGFpbmVyVHlw
ZSwgY29kZWNdKGF1dG8mIGhhcmR3YXJlQ29udGVudFR5cGUpIC0+IGJvb2wgewogICAgICAgICAg
ICAgYXV0byBoYXJkd2FyZUNvbnRhaW5lciA9IGhhcmR3YXJlQ29udGVudFR5cGUuY29udGFpbmVy
VHlwZSgpOwogICAgICAgICAgICAgaWYgKCFoYXJkd2FyZUNvbnRhaW5lci5pc0VtcHR5KCkKICAg
ICAgICAgICAgICAgICAmJiBmbm1hdGNoKGhhcmR3YXJlQ29udGFpbmVyLnV0ZjgoKS5kYXRhKCks
IGNvbnRhaW5lclR5cGUudXRmOCgpLmRhdGEoKSwgMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgYXV0byBoYXJkd2FyZUNvZGVjcyA9IGhhcmR3YXJlQ29udGVu
dFR5cGUuY29kZWNzKCk7CiAgICAgICAgICAgICByZXR1cm4gaGFyZHdhcmVDb2RlY3MuaXNFbXB0
eSgpCi0gICAgICAgICAgICAgICAgfHwgaGFyZHdhcmVDb2RlY3MuZmluZE1hdGNoaW5nKFtjb2Rl
Y10oYXV0byYgaGFyZHdhcmVDb2RlYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgfHwgaGFy
ZHdhcmVDb2RlY3MuZmluZElmKFtjb2RlY10oYXV0byYgaGFyZHdhcmVDb2RlYykgLT4gYm9vbCB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZm5tYXRjaChoYXJkd2FyZUNvZGVjLnV0Zjgo
KS5kYXRhKCksIGNvZGVjLnV0ZjgoKS5kYXRhKCksIDApOwogICAgICAgICAgICAgfSkgIT0gbm90
Rm91bmQ7CiAgICAgICAgIH0pICE9IG5vdEZvdW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDI4
ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
CiAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgpAQCAtMTM1OSw3ICsxMzU5LDcgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNob3VsZEhhdgogICAgIGJvb2wgaXNJbnZpc2libGVCZWNhdXNlT3BhY2l0eVplcm8gPSAhb3Bh
Y2l0eSgpICYmICFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRl
ZFByb3BlcnR5T3BhY2l0eSk7CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmlsdGVyIHRo
YXQgc2V0cyB0aGUgb3BhY2l0eSB0byB6ZXJvLgotICAgIGJvb2wgaGFzT3BhY2l0eVplcm9GaWx0
ZXIgPSBub3RGb3VuZCAhPSBmaWx0ZXJzKCkub3BlcmF0aW9ucygpLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgYXV0byYgb3BlcmF0aW9uKSB7CisgICAgYm9vbCBoYXNPcGFjaXR5WmVyb0ZpbHRlciA9
IG5vdEZvdW5kICE9IGZpbHRlcnMoKS5vcGVyYXRpb25zKCkuZmluZElmKFsmXShjb25zdCBhdXRv
JiBvcGVyYXRpb24pIHsKICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi0+dHlwZSgpID09IEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZTo6T1BBQ0lUWSAmJiAhZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikuYW1vdW50KCk7CiAgICAg
fSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDcgKzQ1NSw3IEBAIFBhc3Rl
Ym9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDoKICAgICAgICAgICAgIHJldHVybiBG
aWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOwogICAgIH0KIAotICAgIGF1dG8g
cmVzdWx0ID0gdHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IFN0cmluZyYgdHlwZSkgeworICAg
IGF1dG8gcmVzdWx0ID0gdHlwZXMuZmluZElmKFtdKGNvbnN0IFN0cmluZyYgdHlwZSkgewogICAg
ICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5
cGUpOwogICAgIH0pOwogICAgIHJldHVybiByZXN1bHQgPT0gbm90Rm91bmQgPyBGaWxlQ29udGVu
dFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5G
aWxlUGF0aHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0
dXJlRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vQ2FwdHVyZURldmljZS5oCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0
LDcgKzE1NCw3IEBAIGlubGluZSBib29sIGhhdmVEZXZpY2VzQ2hhbmdlZChjb25zdCBWZWMKICAg
ICAgICAgaWYgKG5ld0RldmljZS50eXBlKCkgIT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
Q2FtZXJhICYmIG5ld0RldmljZS50eXBlKCkgIT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
TWljcm9waG9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gaW5kZXgg
PSBvbGREZXZpY2VzLmZpbmRNYXRjaGluZyhbJm5ld0RldmljZV0oYXV0byYgb2xkRGV2aWNlKSB7
CisgICAgICAgIGF1dG8gaW5kZXggPSBvbGREZXZpY2VzLmZpbmRJZihbJm5ld0RldmljZV0oYXV0
byYgb2xkRGV2aWNlKSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3RGV2aWNlLnBlcnNpc3RlbnRJ
ZCgpID09IG9sZERldmljZS5wZXJzaXN0ZW50SWQoKSAmJiBuZXdEZXZpY2UuZW5hYmxlZCgpICE9
IG9sZERldmljZS5lbmFibGVkKCk7CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCShy
ZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9taW4pIHsKLSAgICAgICAgICAgIGF1dG8g
aW5kZXggPSBkaXNjcmV0ZUNhcGFiaWxpdHlWYWx1ZXMuZmluZE1hdGNoaW5nKFsmXShWYWx1ZVR5
cGUgdmFsdWUpIHsgcmV0dXJuIG1fbWluLnZhbHVlKCkgPj0gdmFsdWU7IH0pOworICAgICAgICAg
ICAgYXV0byBpbmRleCA9IGRpc2NyZXRlQ2FwYWJpbGl0eVZhbHVlcy5maW5kSWYoWyZdKFZhbHVl
VHlwZSB2YWx1ZSkgeyByZXR1cm4gbV9taW4udmFsdWUoKSA+PSB2YWx1ZTsgfSk7CiAgICAgICAg
ICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgICAgICBtaW4gPSB2YWx1
ZSA9IGRpc2NyZXRlQ2FwYWJpbGl0eVZhbHVlc1tpbmRleF07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gMjg4
NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDcgKzQw
MCw3IEBAIHZvaWQgV2ViS2l0TWVkaWFTdHJlYW1PYnNlcnZlcjo6ZGlkUmVtb3YKICAgICBhdXRv
KiBwcml2ID0gZWxlbWVudC0+cHJpdjsKIAogICAgIC8vIExvb2t1cCB0aGUgY29ycmVzcG9uZGlu
ZyBJbnRlcm5hbFNvdXJjZSBhbmQgdGFrZSBpdCBmcm9tIHRoZSBzdG9yYWdlLgotICAgIGF1dG8g
aW5kZXggPSBwcml2LT5zb3VyY2VzLmZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgeworICAg
IGF1dG8gaW5kZXggPSBwcml2LT5zb3VyY2VzLmZpbmRJZihbJl0oYXV0byYgaXRlbSkgewogICAg
ICAgICByZXR1cm4gaXRlbS0+dHJhY2soKS5pZCgpID09IHRyYWNrLmlkKCk7CiAgICAgfSk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsU291cmNlPiBzb3VyY2UgPSBXVEZNb3ZlKHByaXYt
PnNvdXJjZXNbaW5kZXhdKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0JKHJl
dmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxOSw3ICs2MTks
NyBAQCB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpnZW5lcmF0ZVByZXNlCiAKICAgICAgICAg
Q01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0
aW9uR2V0RGltZW5zaW9ucyhmb3JtYXQuZm9ybWF0RGVzY3JpcHRpb24pOwogICAgICAgICBJbnRT
aXplIHNpemUgPSB7IGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0IH07Ci0gICAg
ICAgIGF1dG8gaW5kZXggPSBwcmVzZXRzLmZpbmRNYXRjaGluZyhbJnNpemVdKGF1dG8mIHByZXNl
dCkgeworICAgICAgICBhdXRvIGluZGV4ID0gcHJlc2V0cy5maW5kSWYoWyZzaXplXShhdXRvJiBw
cmVzZXQpIHsKICAgICAgICAgICAgIHJldHVybiBzaXplID09IHByZXNldC0+c2l6ZTsKICAgICAg
ICAgfSk7CiAgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAkocmV2aXNpb24g
Mjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC02MCw3ICs2MSw3IEBAIFN0cmluZyBIVFRQSGVhZGVyTWFwOjpn
ZXQoY29uc3QgU3RyaW5nJiAKIAogU3RyaW5nIEhUVFBIZWFkZXJNYXA6OmdldFVuY29tbW9uSGVh
ZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBhdXRvIGluZGV4ID0gbV91bmNv
bW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICBhdXRvIGlu
ZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaGVhZGVyLmtleSwgbmFtZSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIGluZGV4ICE9IG5vdEZvdW5kID8gbV91bmNvbW1vbkhlYWRlcnNbaW5k
ZXhdLnZhbHVlIDogU3RyaW5nKCk7CkBAIC0xMDAsNyArMTAxLDcgQEAgdm9pZCBIVFRQSGVhZGVy
TWFwOjpzZXQoY29uc3QgU3RyaW5nJiBuYQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6OnNldFVuY29t
bW9uSGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBo
ZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElmKFsmXShh
dXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaGVh
ZGVyLmtleSwgbmFtZSk7CiAgICAgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQpAQCAt
MTE2LDcgKzExNyw3IEBAIHZvaWQgSFRUUEhlYWRlck1hcDo6YWRkKGNvbnN0IFN0cmluZyYgbmEK
ICAgICAgICAgYWRkKGhlYWRlck5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBoZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV91bmNvbW1vbkhlYWRlcnMuZmluZElmKFsm
XShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
aGVhZGVyLmtleSwgbmFtZSk7CiAgICAgfSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQpA
QCAtMTUxLDcgKzE1Miw3IEBAIGJvb2wgSFRUUEhlYWRlck1hcDo6Y29udGFpbnMoY29uc3QgU3Ry
aW4KICAgICBpZiAoZmluZEhUVFBIZWFkZXJOYW1lKG5hbWUsIGhlYWRlck5hbWUpKQogICAgICAg
ICByZXR1cm4gY29udGFpbnMoaGVhZGVyTmFtZSk7CiAKLSAgICByZXR1cm4gbV91bmNvbW1vbkhl
YWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICByZXR1cm4gbV91bmNv
bW1vbkhlYWRlcnMuZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoaGVhZGVyLmtleSwgbmFtZSk7CiAgICAgfSkgIT0gbm90Rm91
bmQ7CiB9CkBAIC0xNjksNyArMTcwLDcgQEAgYm9vbCBIVFRQSGVhZGVyTWFwOjpyZW1vdmUoY29u
c3QgU3RyaW5nJgogCiBTdHJpbmcgSFRUUEhlYWRlck1hcDo6Z2V0KEhUVFBIZWFkZXJOYW1lIG5h
bWUpIGNvbnN0CiB7Ci0gICAgYXV0byBpbmRleCA9IG1fY29tbW9uSGVhZGVycy5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIGhlYWRlcikgeworICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMu
ZmluZElmKFsmXShhdXRvJiBoZWFkZXIpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlci5rZXkgPT0g
bmFtZTsKICAgICB9KTsKICAgICByZXR1cm4gaW5kZXggIT0gbm90Rm91bmQgPyBtX2NvbW1vbkhl
YWRlcnNbaW5kZXhdLnZhbHVlIDogU3RyaW5nKCk7CkBAIC0xNzcsNyArMTc4LDcgQEAgU3RyaW5n
IEhUVFBIZWFkZXJNYXA6OmdldChIVFRQSGVhZGVyTmFtZQogCiB2b2lkIEhUVFBIZWFkZXJNYXA6
OnNldChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1
dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIp
IHsKKyAgICBhdXRvIGluZGV4ID0gbV9jb21tb25IZWFkZXJzLmZpbmRJZihbJl0oYXV0byYgaGVh
ZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXIua2V5ID09IG5hbWU7CiAgICAgfSk7CiAgICAg
aWYgKGluZGV4ID09IG5vdEZvdW5kKQpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgSFRUUEhlYWRl
ck1hcDo6c2V0KEhUVFBIZWFkZXJOYW1lIG4KIAogYm9vbCBIVFRQSGVhZGVyTWFwOjpjb250YWlu
cyhIVFRQSGVhZGVyTmFtZSBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbW1vbkhlYWRl
cnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBoZWFkZXIpIHsKKyAgICByZXR1cm4gbV9jb21tb25I
ZWFkZXJzLmZpbmRJZihbJl0oYXV0byYgaGVhZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXIu
a2V5ID09IG5hbWU7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkBAIC0yMDIsNyArMjAzLDcgQEAg
Ym9vbCBIVFRQSGVhZGVyTWFwOjpyZW1vdmUoSFRUUEhlYWRlck5hbQogCiB2b2lkIEhUVFBIZWFk
ZXJNYXA6OmFkZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGF1dG8gaW5kZXggPSBtX2NvbW1vbkhlYWRlcnMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBo
ZWFkZXIpIHsKKyAgICBhdXRvIGluZGV4ID0gbV9jb21tb25IZWFkZXJzLmZpbmRJZihbJl0oYXV0
byYgaGVhZGVyKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXIua2V5ID09IG5hbWU7CiAgICAgfSk7
CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcAkocmV2aXNpb24g
Mjg4NDYzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVu
c2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTY0LDcgKzY1LDcg
QEAgdm9pZCBPcGVuWFJFeHRlbnNpb25zOjpsb2FkTWV0aG9kcyhYcklucwogCiBib29sIE9wZW5Y
UkV4dGVuc2lvbnM6OmlzRXh0ZW5zaW9uU3VwcG9ydGVkKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0
CiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fZXh0ZW5zaW9ucy5maW5kTWF0Y2hpbmcoW25hbWVd
KGF1dG8mIHByb3BlcnR5KSB7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fZXh0ZW5zaW9ucy5maW5k
SWYoW25hbWVdKGF1dG8mIHByb3BlcnR5KSB7CiAgICAgICAgIHJldHVybiAhc3RyY21wKHByb3Bl
cnR5LmV4dGVuc2lvbk5hbWUsIG5hbWUpOwogICAgIH0pOwogICAgIHJldHVybiBwb3NpdGlvbiAh
PSBub3RGb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCShyZXZpc2lv
biAyODg0NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAo
QykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTEzMSw3ICsxMzEsNyBAQCBwcm90ZWN0ZWQ6CiAKIGlubGluZSBib29s
IGlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
PiYgcGx1Z2luSWRlbnRpZmllcnMsIGNvbnN0IFVSTCYgcGFnZVVSTCwgY29uc3QgU3RyaW5nJiBw
bHVnaW5JZGVudGlmaWVyKQogewotICAgIHJldHVybiBwbHVnaW5JZGVudGlmaWVycy5maW5kTWF0
Y2hpbmcoWyZdIChhdXRvJiYgcGx1Z2luKSB7CisgICAgcmV0dXJuIHBsdWdpbklkZW50aWZpZXJz
LmZpbmRJZihbJl0gKGF1dG8mJiBwbHVnaW4pIHsKICAgICAgICAgcmV0dXJuIHBhZ2VVUkwuaXNN
YXRjaGluZ0RvbWFpbihwbHVnaW4ubWF0Y2hpbmdEb21haW4pICYmIHBsdWdpbi5wbHVnaW5JZGVu
dGlmaWVyID09IHBsdWdpbklkZW50aWZpZXI7CiAgICAgfSkgIT0gbm90Rm91bmQ7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAyMi0wMS0yNCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFZlY3RvciBhbmQgRml4ZWRWZWN0b3I6
OmZpbmRNYXRjaGluZyB0byBmaW5kSWYgdG8gbWF0Y2ggc3RsIG5hbWluZy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2NAorICAgICAgICByZGFy
Oi8vODc0MjQ3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAg
ICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVDRE1GYWN0b3J5UHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpmYWN0b3J5Rm9yS2V5U3lzdGVtKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpmaW5kUm9vdE5ldHdvcmtBY3Rpdml0eSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpmaW5kTmV0d29y
a0FjdGl2aXR5VHJhY2tlcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlOjpzdG9yZVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVGcm9tUmVjb3JkTGlz
dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnVwZGF0ZVJlY29yZFRv
RGlzayk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmZpbmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6Omhhc0FjdGl2ZUNhY2hlIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmRpc3Bvc2UpOgorICAgICAg
ICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X3JlbW92ZV9mcmFtZV9kaXNwbGF5ZWRfY2FsbGJhY2spOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRp
b246OmdyYW50QWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpQ
YXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRpb246OmFjY2Vzc1R5cGUgY29uc3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6c2V0RGV2aWNlQXNGaXJzdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxB
dXRoZW50aWNhdG9yOjpkZWxldGVEdXBsaWNhdGVDcmVkZW50aWFsIGNvbnN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3Nl
cnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGU6OmRlZmF1bHREcm9wUHJldmlldyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkJsb2NrUHRyPHZvaWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEaXNwbGF5TGluazo6c2V0UHJlZmVycmVkRnJhbWVzUGVyU2Vj
b25kKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OmdldENvbnRleHRNZW51
RnJvbUl0ZW1zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkRhdGFMaXN0U3VnZ2VzdGlv
bnNEcm9wZG93bk1hYy5tbToKKyAgICAgICAgKHNob3VsZFNob3dEaXZpZGVyc0JldHdlZW5DZWxs
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojpj
b21wdXRlRWxlbWVudExheW91dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlckludGVybmFsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0SW50
ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTdHlsZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdFRleHRSZWNvZ25pdGlv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Y2hlY2tEb2N1bWVudHNDYXB0dXJlU3RhdGVDb25zaXN0ZW5jeSk6CisKIDIwMjItMDEtMjQg
IERhdmlkIFF1ZXNhZGEgIDxkYXZpZF9xdWVzYWRhQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1w
bGlmeSBhY2Nlc3NlcyB0byBTeXN0ZW1WZXJzaW9uLnBsaXN0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNRmFjdG9yeVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlQ0RNRmFjdG9yeVByb3h5LmNw
cAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZUNETUZhY3RvcnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBSZW1v
dGVDRE1GYWN0b3J5UHJveHk6On5SZW1vdGVDRE1GYWN0b3J5CiBzdGF0aWMgQ0RNRmFjdG9yeSog
ZmFjdG9yeUZvcktleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKIHsKICAgICBhdXRv
JiBmYWN0b3JpZXMgPSBDRE1GYWN0b3J5OjpyZWdpc3RlcmVkRmFjdG9yaWVzKCk7Ci0gICAgYXV0
byBmb3VuZEluZGV4ID0gZmFjdG9yaWVzLmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mIGZhY3Rvcnkp
IHsgcmV0dXJuIGZhY3RvcnktPnN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSk7IH0pOworICAg
IGF1dG8gZm91bmRJbmRleCA9IGZhY3Rvcmllcy5maW5kSWYoWyZdIChhdXRvJiBmYWN0b3J5KSB7
IHJldHVybiBmYWN0b3J5LT5zdXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0pOyB9KTsKICAgICBp
ZiAoZm91bmRJbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIGZhY3Rvcmllc1tmb3VuZEluZGV4XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
NzIsMTQgKzExNzIsMTQgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3Rv
cAogCiBzaXplX3QgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmZpbmRSb290TmV0d29y
a0FjdGl2aXR5KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKIHsKLSAgICByZXR1cm4gbV9uZXR3b3Jr
QWN0aXZpdHlUcmFja2Vycy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAg
ICByZXR1cm4gbV9uZXR3b3JrQWN0aXZpdHlUcmFja2Vycy5maW5kSWYoWyZdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0uaXNSb290QWN0aXZpdHkgJiYgaXRlbS5wYWdl
SUQgPT0gcGFnZUlEOwogICAgIH0pOwogfQogCiBzaXplX3QgTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmZpbmROZXR3b3JrQWN0aXZpdHlUcmFja2VyKFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVySWRlbnRpZmllciByZXNvdXJjZUlEKQogewotICAgIHJldHVybiBtX25ldHdvcmtBY3Rpdml0
eVRyYWNrZXJzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeworICAgIHJldHVy
biBtX25ldHdvcmtBY3Rpdml0eVRyYWNrZXJzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkg
ewogICAgICAgICByZXR1cm4gaXRlbS5yZXNvdXJjZUlEID09IHJlc291cmNlSUQ7CiAgICAgfSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAkocmV2aXNpb24gMjg4NDYzKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBDYWNoZTo6c3Rv
cmVSZWNvcmRzKFZlY3RvcjxSZWNvcmQ+JgogICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9
IHJlY29yZHNGcm9tVVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKICAgICAgICAgYXV0byBtYXRj
aGluZ1JlY29yZHMgPSBxdWVyeUNhY2hlKHNhbWVVUkxSZWNvcmRzLCByZWNvcmQucmVxdWVzdCwg
b3B0aW9ucyk7CiAKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9ICFtYXRjaGluZ1JlY29yZHMuaXNF
bXB0eSgpID8gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IG1hdGNoaW5nUmVjb3Jkc1swXTsgfSkgOiBu
b3RGb3VuZDsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9ICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0
eSgpID8gc2FtZVVSTFJlY29yZHMtPmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS5pZGVudGlmaWVyID09IG1hdGNoaW5nUmVjb3Jkc1swXTsgfSkgOiBub3RGb3VuZDsK
IAogICAgICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIHJlY29y
ZC5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJZGVudGlmaWVyOwpAQCAtNDM4LDcgKzQzOCw3
IEBAIHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMKICAgICAgICAgYXV0
byogc2FtZVVSTFJlY29yZHMgPSByZWNvcmRzRnJvbVVSTChyZWNvcmQucmVxdWVzdC51cmwoKSk7
CiAgICAgICAgIGF1dG8gbWF0Y2hpbmdSZWNvcmRzID0gcXVlcnlDYWNoZShzYW1lVVJMUmVjb3Jk
cywgcmVjb3JkLnJlcXVlc3QsIG9wdGlvbnMpOwogCi0gICAgICAgIGF1dG8gcG9zaXRpb24gPSAo
c2FtZVVSTFJlY29yZHMgJiYgIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkpID8gc2FtZVVSTFJl
Y29yZHMtPmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5p
ZGVudGlmaWVyID09IG1hdGNoaW5nUmVjb3Jkc1swXTsgfSkgOiBub3RGb3VuZDsKKyAgICAgICAg
YXV0byBwb3NpdGlvbiA9IChzYW1lVVJMUmVjb3JkcyAmJiAhbWF0Y2hpbmdSZWNvcmRzLmlzRW1w
dHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+ZmluZElmKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJl
dHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5k
OwogCiAgICAgICAgIHNwYWNlUmVxdWlyZWQgKz0gcmVjb3JkLnJlc3BvbnNlQm9keVNpemU7CiAg
ICAgICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgewpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZv
aWQgQ2FjaGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXUKICAgICB9CiAKICAgICByZWNv
cmRzLT5yZW1vdmVBbGxNYXRjaGluZyhbdGhpcywgJnJlY29yZElkZW50aWZpZXJzXShhdXRvJiBp
dGVtKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gcmVjb3JkSWRlbnRpZmllcnMuZmlu
ZE1hdGNoaW5nKFsmaXRlbV0oYXV0byBpZGVudGlmaWVyKSB7IHJldHVybiBpZGVudGlmaWVyID09
IGl0ZW0uaWRlbnRpZmllcjsgfSkgIT0gbm90Rm91bmQ7CisgICAgICAgIGJvb2wgc2hvdWxkUmVt
b3ZlID0gcmVjb3JkSWRlbnRpZmllcnMuZmluZElmKFsmaXRlbV0oYXV0byBpZGVudGlmaWVyKSB7
IHJldHVybiBpZGVudGlmaWVyID09IGl0ZW0uaWRlbnRpZmllcjsgfSkgIT0gbm90Rm91bmQ7CiAg
ICAgICAgIGlmIChzaG91bGRSZW1vdmUpCiAgICAgICAgICAgICB0aGlzLT5yZW1vdmVSZWNvcmRG
cm9tRGlzayhpdGVtKTsKICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKQEAgLTQ5OSw3ICs0
OTksNyBAQCB2b2lkIENhY2hlOjpyZW1vdmVGcm9tUmVjb3JkTGlzdChjb25zdCBWCiAgICAgZm9y
IChhdXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CiAgICAgICAgIGF1dG8qIGNh
Y2hlID0gdGhpczsKICAgICAgICAgcmVjb3Jkcy5yZW1vdmVBbGxNYXRjaGluZyhbY2FjaGUsICZy
ZWNvcmRJZGVudGlmaWVyc10oY29uc3QgYXV0byYgaXRlbSkgewotICAgICAgICAgICAgcmV0dXJu
IG5vdEZvdW5kICE9IHJlY29yZElkZW50aWZpZXJzLmZpbmRNYXRjaGluZyhbY2FjaGUsICZpdGVt
XShjb25zdCBhdXRvJiBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQg
IT0gcmVjb3JkSWRlbnRpZmllcnMuZmluZElmKFtjYWNoZSwgJml0ZW1dKGNvbnN0IGF1dG8mIGlk
ZW50aWZpZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZGVudGlmaWVyICE9IGlkZW50
aWZpZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICBjYWNoZS0+cmVtb3ZlUmVjb3JkRnJvbURpc2soaXRlbSk7CkBAIC01MzIsNyArNTMyLDcgQEAg
dm9pZCBDYWNoZTo6dXBkYXRlUmVjb3JkVG9EaXNrKFJlY29yZEluZgogICAgICAgICBpZiAoIXNh
bWVVUkxSZWNvcmRzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gcG9zaXRp
b24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgYXV0byYgaXRlbSkg
eyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IHJlY29yZElkZW50aWZpZXI7IH0pOworICAgICAg
ICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRJZihbJl0gKGNvbnN0IGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSByZWNvcmRJZGVudGlmaWVyOyB9KTsK
ICAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBhdXRvJiByZWNvcmRJbmZvID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3OSwxNyArMjc5LDE3IEBAIHZvaWQgQ2FjaGVzOjpj
bGVhclBlbmRpbmdXcml0aW5nQ2FjaGVzVG8KIAogQ2FjaGUqIENhY2hlczo6ZmluZChjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGlu
ZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5uYW1lKCkgPT0gbmFtZTsgfSk7
CisgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5uYW1lKCkgPT0gbmFtZTsgfSk7CiAgICAgcmV0dXJuIChwb3NpdGlv
biAhPSBub3RGb3VuZCkgPyAmbV9jYWNoZXNbcG9zaXRpb25dIDogbnVsbHB0cjsKIH0KIAogQ2Fj
aGUqIENhY2hlczo6ZmluZCh1aW50NjRfdCBpZGVudGlmaWVyKQogewotICAgIGF1dG8gcG9zaXRp
b24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8gcG9zaXRpb24g
PSBtX2NhY2hlcy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRl
bnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3Vu
ZCkKICAgICAgICAgcmV0dXJuICZtX2NhY2hlc1twb3NpdGlvbl07CiAKLSAgICBwb3NpdGlvbiA9
IG1fcmVtb3ZlZENhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0
dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOworICAgIHBvc2l0aW9uID0g
bV9yZW1vdmVkQ2FjaGVzLmZpbmRJZihbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CiAgICAgcmV0dXJuIChwb3NpdGlvbiAh
PSBub3RGb3VuZCkgPyAmbV9yZW1vdmVkQ2FjaGVzW3Bvc2l0aW9uXSA6IG51bGxwdHI7CiB9CiAK
QEAgLTM0NiwxMCArMzQ2LDEwIEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmUodWludDY0X3QgaWRlbnRp
ZmllciwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcG9zaXRpb24gPSBtX2Nh
Y2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRl
bnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hl
cy5maW5kSWYoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigp
ID09IGlkZW50aWZpZXI7IH0pOwogCiAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKSB7Ci0g
ICAgICAgIEFTU0VSVChtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRv
JiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KSAhPSBu
b3RGb3VuZCk7CisgICAgICAgIEFTU0VSVChtX3JlbW92ZWRDYWNoZXMuZmluZElmKFsmXShjb25z
dCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9
KSAhPSBub3RGb3VuZCk7CiAgICAgICAgIGNhbGxiYWNrKENhY2hlSWRlbnRpZmllck9wZXJhdGlv
blJlc3VsdCB7IDAsIGZhbHNlIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzY4LDEy
ICszNjgsMTIgQEAgYm9vbCBDYWNoZXM6Omhhc0FjdGl2ZUNhY2hlKCkgY29uc3QKIHsKICAgICBp
ZiAobV9yZW1vdmVkQ2FjaGVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBp
dGVtLmlzQWN0aXZlKCk7IH0pICE9IG5vdEZvdW5kOworICAgIHJldHVybiBtX2NhY2hlcy5maW5k
SWYoW10oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pc0FjdGl2ZSgpOyB9KSAhPSBu
b3RGb3VuZDsKIH0KIAogdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQogewotICAg
IGF1dG8gcG9zaXRpb24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBh
dXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVy
KCk7IH0pOworICAgIGF1dG8gcG9zaXRpb24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZElmKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVu
dGlmaWVyKCk7IH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgewogICAgICAgICBp
ZiAobV9zdG9yYWdlKQogICAgICAgICAgICAgbV9zdG9yYWdlLT5yZW1vdmUoY2FjaGUua2V5cygp
LCBbXSB7IH0pOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgQ2FjaGVzOjpkaXNwb3NlKENhY2hl
JiBjYWNoZSkKICAgICAgICAgbV9yZW1vdmVkQ2FjaGVzLnJlbW92ZShwb3NpdGlvbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUuaWRl
bnRpZmllcigpOyB9KSAhPSBub3RGb3VuZCk7CisgICAgQVNTRVJUKG1fY2FjaGVzLmZpbmRJZihb
Jl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUu
aWRlbnRpZmllcigpOyB9KSAhPSBub3RGb3VuZCk7CiAKICAgICAvLyBXZSBjYW5ub3QgY2xlYXIg
dGhlIG1lbW9yeSByZXByZXNlbnRhdGlvbiBpbiBlcGhlbWVyYWwgc2Vzc2lvbnMgc2luY2Ugd2Ug
d291bGQgbG9vc2UgYWxsIGRhdGEuCiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6
OmRpZFByb3ZpZGVNZWRpYUQKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNrc0xvY2sgfTsKLSAgICBhdXRvIHRyYWNrSW5kZXgg
PSBtX3RyYWNrUmVhZGVycy5maW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAgYXV0
byB0cmFja0luZGV4ID0gbV90cmFja1JlYWRlcnMuZmluZElmKFsmXShhdXRvJiB0cmFjaykgewog
ICAgICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQoKSA9PSB0cmFja0lEOwogICAgIH0pOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00OCw3ICs0OCw3IEBAIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVzZXJNZWQKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogc3RhdGljIGlubGluZSB2b2lkIHNldERldmljZUFzRmlyc3QoVmVjdG9yPENhcHR1cmVE
ZXZpY2U+JiBkZXZpY2VzLCBjb25zdCBTdHJpbmcmIGRldmljZUlEKQogewotICAgIHNpemVfdCBp
bmRleCA9IGRldmljZXMuZmluZE1hdGNoaW5nKFsmZGV2aWNlSURdKGNvbnN0IGF1dG8mIGRldmlj
ZSkgeworICAgIHNpemVfdCBpbmRleCA9IGRldmljZXMuZmluZElmKFsmZGV2aWNlSURdKGNvbnN0
IGF1dG8mIGRldmljZSkgewogICAgICAgICByZXR1cm4gZGV2aWNlLnBlcnNpc3RlbnRJZCgpID09
IGRldmljZUlEOwogICAgIH0pOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3
LmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MzAsNyArNDYzMCw3IEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X3JlbW92ZV9mcmFtZV9kaXNwbGEKICAgICB9OwogCiAgICAg
aWYgKHdlYlZpZXctPnByaXYtPmluRnJhbWVEaXNwbGF5ZWQpIHsKLSAgICAgICAgYXV0byBpbmRl
eCA9IHdlYlZpZXctPnByaXYtPmZyYW1lRGlzcGxheWVkQ2FsbGJhY2tzLmZpbmRNYXRjaGluZyht
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgYXV0byBpbmRleCA9IHdlYlZpZXctPnByaXYtPmZyYW1l
RGlzcGxheWVkQ2FsbGJhY2tzLmZpbmRJZihtYXRjaEZ1bmN0aW9uKTsKICAgICAgICAgaWYgKGlu
ZGV4ICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgd2ViVmlldy0+cHJpdi0+ZnJhbWVEaXNwbGF5
ZWRDYWxsYmFja3NUb1JlbW92ZS5hZGQoaWQpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29j
b2EubW0JKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4MSw3ICs2ODEsNyBA
QCBzdGQ6Om9wdGlvbmFsPERhdGFPd25lclR5cGU+IFdlYlBhc3RlYm9hCiAKIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzSW5mb3JtYXRpb246OmdyYW50QWNjZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcywgUGFzdGVib2FyZEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAg
ICBhdXRvIG1hdGNoSW5kZXggPSBwcm9jZXNzZXMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBwcm9j
ZXNzQW5kVHlwZSkgeworICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb2Nlc3Nlcy5maW5kSWYoWyZd
KGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzQW5kVHlwZS5m
aXJzdCA9PSAmcHJvY2VzczsKICAgICB9KTsKIApAQCAtNzA3LDcgKzcwNyw3IEBAIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXMKIAogc3RkOjpvcHRpb25hbDxXZWJQYXN0
ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRBY2Nlc3NUeXBlPiBXZWJQYXN0ZWJvYXJkUHJveHk6OlBh
c3RlYm9hcmRBY2Nlc3NJbmZvcm1hdGlvbjo6YWNjZXNzVHlwZShXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MpIGNvbnN0CiB7Ci0gICAgYXV0byBtYXRjaEluZGV4ID0gcHJvY2Vzc2VzLmZpbmRNYXRj
aGluZyhbJl0oYXV0byYgcHJvY2Vzc0FuZFR5cGUpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBw
cm9jZXNzZXMuZmluZElmKFsmXShhdXRvJiBwcm9jZXNzQW5kVHlwZSkgewogICAgICAgICByZXR1
cm4gcHJvY2Vzc0FuZFR5cGUuZmlyc3QgPT0gJnByb2Nlc3M7CiAgICAgfSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVu
dGljYXRvci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0JKHJldmlzaW9uIDI4ODQ2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2Fs
QXV0aGVudGljYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lk
IExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoCiAgICAgLy8gU3RlcCA4IGlzIGlt
cGxpY2l0bHkgY2FwdHVyZWQgYnkgYWxsIFVua25vd25FcnJvciBleGNlcHRpb24gcmVjZWl2ZVJl
c3BvbmRzLgogICAgIC8vIFNraXAgU3RlcCAxMCBhcyBjb3VudGVyIGlzIGNvbnN0YW50bHkgMC4K
ICAgICAvLyBTdGVwIDIuCi0gICAgaWYgKG5vdEZvdW5kID09IGNyZWF0aW9uT3B0aW9ucy5wdWJL
ZXlDcmVkUGFyYW1zLmZpbmRNYXRjaGluZyhbXSAoYXV0byYgcHViS2V5Q3JlZFBhcmFtKSB7Cisg
ICAgaWYgKG5vdEZvdW5kID09IGNyZWF0aW9uT3B0aW9ucy5wdWJLZXlDcmVkUGFyYW1zLmZpbmRJ
ZihbXSAoYXV0byYgcHViS2V5Q3JlZFBhcmFtKSB7CiAgICAgICAgIHJldHVybiBwdWJLZXlDcmVk
UGFyYW0udHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5ICYmIHB1Yktl
eUNyZWRQYXJhbS5hbGcgPT0gQ09TRTo6RVMyNTY7CiAgICAgfSkpIHsKICAgICAgICAgcmVjZWl2
ZUV4Y2VwdGlvbih7IE5vdFN1cHBvcnRlZEVycm9yLCAiVGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1
dGhlbnRpY2F0b3IgZG9lc24ndCBzdXBwb3J0IGFueSBwcm92aWRlZCBQdWJsaWNLZXlDcmVkZW50
aWFsUGFyYW1ldGVycy4iX3MgfSk7CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBMb2NhbEF1dGhl
bnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKAogCiAgICAgYXV0byBleGNsdWRlQ3JlZGVudGlhbElk
cyA9IHByb2R1Y2VIYXNoU2V0KGNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpOwog
ICAgIGlmICghZXhjbHVkZUNyZWRlbnRpYWxJZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChu
b3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhjbHVkZUNy
ZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CisgICAgICAgIGlmIChub3RGb3VuZCAh
PSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZElmKFsmZXhjbHVkZUNyZWRlbnRpYWxJZHNdIChh
dXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRvKiByYXdJZCA9IGNyZWRlbnRpYWwt
PnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQpOwogICAgICAgICAgICAgcmV0dXJu
IGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZVRvU3RyaW5nKHJhd0lk
LT5kYXRhKCksIHJhd0lkLT5ieXRlTGVuZ3RoKCkpKTsKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lk
IExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kTWF0Y2hpbmcoW2V4cGVjdGVkUmVzcG9uc2Ug
PSByZXNwb25zZV0gKGF1dG8mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5kSWYoW2V4cGVjdGVkUmVzcG9uc2UgPSByZXNwb25z
ZV0gKGF1dG8mIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnB0
cigpID09IGV4cGVjdGVkUmVzcG9uc2U7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gbm90Rm91bmQpCkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBMb2NhbEF1dGhl
bnRpY2F0b3I6OmRlbGV0ZUR1cGxpY2F0ZQogICAgIHVzaW5nIG5hbWVzcGFjZSBMb2NhbEF1dGhl
bnRpY2F0b3JJbnRlcm5hbDsKIAogICAgIGF1dG8mIGNyZWF0aW9uT3B0aW9ucyA9IHN0ZDo6Z2V0
PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9u
cyk7Ci0gICAgbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbY3JlYXRpb25PcHRp
b25zXSAoYXV0byYgY3JlZGVudGlhbCkgeworICAgIG1fZXhpc3RpbmdDcmVkZW50aWFscy5maW5k
SWYoW2NyZWF0aW9uT3B0aW9uc10gKGF1dG8mIGNyZWRlbnRpYWwpIHsKICAgICAgICAgYXV0byog
dXNlckhhbmRsZSA9IGNyZWRlbnRpYWwtPnVzZXJIYW5kbGUoKTsKICAgICAgICAgQVNTRVJUKHVz
ZXJIYW5kbGUpOwogICAgICAgICBpZiAodXNlckhhbmRsZS0+Ynl0ZUxlbmd0aCgpICE9IGNyZWF0
aW9uT3B0aW9ucy51c2VyLmlkLmxlbmd0aCgpKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFw
QXV0aGVudGljYXRvci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgQ3RhcEF1dGhlbnRpY2F0b3I6OmNv
bnRpbnVlR2V0TmV4dEEKICAgICAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fYXNzZXJ0aW9uUmVzcG9uc2Vz
LmZpbmRNYXRjaGluZyhbZXhwZWN0ZWRSZXNwb25zZSA9IHJlc3BvbnNlXSAoYXV0byYgcmVzcG9u
c2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fYXNzZXJ0aW9uUmVzcG9uc2Vz
LmZpbmRJZihbZXhwZWN0ZWRSZXNwb25zZSA9IHJlc3BvbnNlXSAoYXV0byYgcmVzcG9uc2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnB0cigpID09IGV4cGVjdGVkUmVz
cG9uc2U7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBub3RGb3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbQkocmV2aXNpb24gMjg4NDYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6
OnNldERlZmF1bAogCiBVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKkRyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZTo6ZGVmYXVsdERyb3BQcmV2aWV3KFVJRHJhZ0l0ZW0gKml0ZW0pIGNvbnN0CiB7Ci0gICAg
YXV0byBtYXRjaEluZGV4ID0gbV9kZWZhdWx0RHJvcFByZXZpZXdzLmZpbmRNYXRjaGluZyhbJl0g
KGF1dG8mIGl0ZW1BbmRQcmV2aWV3KSB7CisgICAgYXV0byBtYXRjaEluZGV4ID0gbV9kZWZhdWx0
RHJvcFByZXZpZXdzLmZpbmRJZihbJl0gKGF1dG8mIGl0ZW1BbmRQcmV2aWV3KSB7CiAgICAgICAg
IHJldHVybiBpdGVtQW5kUHJldmlldy5pdGVtID09IGl0ZW07CiAgICAgfSk7CiAgICAgcmV0dXJu
IG1hdGNoSW5kZXggPT0gbm90Rm91bmQgPyBuaWwgOiBtX2RlZmF1bHREcm9wUHJldmlld3NbbWF0
Y2hJbmRleF0ucHJldmlldy5nZXQoKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBVSVRhcmdldGVkRHJh
Z1ByZXZpZXcgKkRyYWdEcm9wSW50ZXJhY3RpCiAKIEJsb2NrUHRyPHZvaWQoVUlUYXJnZXRlZERy
YWdQcmV2aWV3ICopPiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyb3BQcmV2aWV3UHJvdmlk
ZXIoVUlEcmFnSXRlbSAqaXRlbSkKIHsKLSAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2RlbGF5ZWRJ
dGVtUHJldmlld1Byb3ZpZGVycy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiBpdGVtQW5kUHJvdmlk
ZXIpIHsKKyAgICBhdXRvIG1hdGNoSW5kZXggPSBtX2RlbGF5ZWRJdGVtUHJldmlld1Byb3ZpZGVy
cy5maW5kSWYoWyZdIChhdXRvJiBpdGVtQW5kUHJvdmlkZXIpIHsKICAgICAgICAgcmV0dXJuIGl0
ZW1BbmRQcm92aWRlci5pdGVtID09IGl0ZW07CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAkocmV2aXNpb24gMjg4NDYzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIERpc3BsYXlMaW5rOjpzZXRQcmVmZXJyZWRGcmFt
ZXNQZXJTCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIGNvbm5lY3Rpb25JbmZvID0gaXQt
PnZhbHVlOwotICAgIGF1dG8gaW5kZXggPSBjb25uZWN0aW9uSW5mby5vYnNlcnZlcnMuZmluZE1h
dGNoaW5nKFtvYnNlcnZlcklEXShjb25zdCBhdXRvJiBvYnNlcnZlcikgeworICAgIGF1dG8gaW5k
ZXggPSBjb25uZWN0aW9uSW5mby5vYnNlcnZlcnMuZmluZElmKFtvYnNlcnZlcklEXShjb25zdCBh
dXRvJiBvYnNlcnZlcikgewogICAgICAgICByZXR1cm4gb2JzZXJ2ZXIub2JzZXJ2ZXJJRCA9PSBv
YnNlcnZlcklEOwogICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQkocmV2aXNpb24gMjg4NDYzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5TWFjOjpnZXRDb250ZXh0TQogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4gcXVpY2tMb29rSXRlbVRvSW5zZXJ0SWZOZWVkZWQ7CiAKICNpZiBFTkFCTEUoSU1BR0Vf
QU5BTFlTSVMpCi0gICAgYXV0byBpbmRleE9mUXVpY2tMb29rSXRlbSA9IGZpbHRlcmVkSXRlbXMu
ZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgaXRlbSkgeworICAgIGF1dG8gaW5kZXhPZlF1aWNrTG9v
a0l0ZW0gPSBmaWx0ZXJlZEl0ZW1zLmZpbmRJZihbJl0gKGF1dG8mIGl0ZW0pIHsKICAgICAgICAg
cmV0dXJuIGl0ZW0uYWN0aW9uKCkgPT0gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVGFnUXVpY2tM
b29rSW1hZ2U7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5t
bQkocmV2aXNpb24gMjg4NDYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkRh
dGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDcsNyArMzA3
LDcgQEAgLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25kZXIKIAogc3RhdGljIEJPT0wgc2hvdWxk
U2hvd0RpdmlkZXJzQmV0d2VlbkNlbGxzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEYXRhTGlzdFN1
Z2dlc3Rpb24+JiBzdWdnZXN0aW9ucykKIHsKLSAgICByZXR1cm4gbm90Rm91bmQgIT0gc3VnZ2Vz
dGlvbnMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHN1Z2dlc3Rpb24pIHsKKyAgICByZXR1cm4gbm90
Rm91bmQgIT0gc3VnZ2VzdGlvbnMuZmluZElmKFtdKGF1dG8mIHN1Z2dlc3Rpb24pIHsKICAgICAg
ICAgcmV0dXJuICFzdWdnZXN0aW9uLmxhYmVsLmlzRW1wdHkoKTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI4ODQ2MykK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE5ODMsOSArMTk4Myw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja0RvY3VtZW50
c0NhcHR1cmUKICAgICB9KTsKIAogICAgIGlmIChpc0NhcHR1cmluZ0F1ZGlvKQotICAgICAgICBB
U1NFUlQoZXh0ZW5zaW9uSURzLmZpbmRNYXRjaGluZyhbXShhdXRvJiBpZCkgeyByZXR1cm4gaWQu
Y29udGFpbnMoIm1pY3JvcGhvbmUiKTsgfSkgPT0gbm90Rm91bmQpOworICAgICAgICBBU1NFUlQo
ZXh0ZW5zaW9uSURzLmZpbmRJZihbXShhdXRvJiBpZCkgeyByZXR1cm4gaWQuY29udGFpbnMoIm1p
Y3JvcGhvbmUiKTsgfSkgPT0gbm90Rm91bmQpOwogICAgIGlmIChpc0NhcHR1cmluZ1ZpZGVvKQot
ICAgICAgICBBU1NFUlQoZXh0ZW5zaW9uSURzLmZpbmRNYXRjaGluZyhbXShhdXRvJiBpZCkgeyBy
ZXR1cm4gaWQuY29udGFpbnMoImNhbWVyYSIpOyB9KSA9PSBub3RGb3VuZCk7CisgICAgICAgIEFT
U0VSVChleHRlbnNpb25JRHMuZmluZElmKFtdKGF1dG8mIGlkKSB7IHJldHVybiBpZC5jb250YWlu
cygiY2FtZXJhIik7IH0pID09IG5vdEZvdW5kKTsKICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcAkocmV2aXNpb24gMjg4
NDYzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjk5LDcgKzY5OSw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb25Qcm94eTo6Y29tcHV0ZUUKIAogICAgIGF1dG8gZWxlbWVudEluVmll
d0NlbnRlclBvaW50ID0gdmlzaWJsZVBvcnRpb25PZkVsZW1lbnRSZWN0LmNlbnRlcigpOwogICAg
IGF1dG8gZWxlbWVudExpc3QgPSBjb250YWluZXJFbGVtZW50LT50cmVlU2NvcGUoKS5lbGVtZW50
c0Zyb21Qb2ludChlbGVtZW50SW5WaWV3Q2VudGVyUG9pbnQpOwotICAgIGF1dG8gaW5kZXggPSBl
bGVtZW50TGlzdC5maW5kTWF0Y2hpbmcoW2NvbnRhaW5lckVsZW1lbnRdIChhdXRvJiBpdGVtKSB7
IHJldHVybiBpdGVtLmdldCgpID09IGNvbnRhaW5lckVsZW1lbnQ7IH0pOworICAgIGF1dG8gaW5k
ZXggPSBlbGVtZW50TGlzdC5maW5kSWYoW2NvbnRhaW5lckVsZW1lbnRdIChhdXRvJiBpdGVtKSB7
IHJldHVybiBpdGVtLmdldCgpID09IGNvbnRhaW5lckVsZW1lbnQ7IH0pOwogICAgIGlmIChlbGVt
ZW50TGlzdC5pc0VtcHR5KCkgfHwgaW5kZXggPT0gbm90Rm91bmQpIHsKICAgICAgICAgLy8gV2Ug
aGl0IHRoaXMgY2FzZSBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmlsaXR5OmhpZGRlbiBvciBvcGFj
aXR5OjAsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBub3QgaGl0IHRlc3QKICAgICAgICAgLy8gYXQg
dGhlIGNhbGN1bGF0ZWQgSVZDUC4gQW4gZWxlbWVudCBpcyB0ZWNobmljYWxseSBub3QgImluIHZp
ZXciIGlmIGl0IGlzIG5vdCB3aXRoaW4gaXRzIG93biBwYWludC9oaXQgdGVzdCB0cmVlLApJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1Niw3ICszNTYsNyBAQCB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRX
b3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBhdXRvJiBtZXNzYWdlSGFuZGxlcnNJbldvcmxk
ID0gbV91c2VyTWVzc2FnZUhhbmRsZXJzLmVuc3VyZSgmd29ybGQsIFtdIHsgcmV0dXJuIFZlY3Rv
cjxzdGQ6OnBhaXI8dWludDY0X3QsIFJlZlB0cjxXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yUHJveHk+Pj4geyB9OyB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKG1lc3NhZ2VIYW5k
bGVyc0luV29ybGQuZmluZE1hdGNoaW5nKFsmXShhdXRvJiBwYWlyKSB7IHJldHVybiBwYWlyLmZp
cnN0ID09ICB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyOyB9KSAhPSBub3RGb3Vu
ZCkKKyAgICBpZiAobWVzc2FnZUhhbmRsZXJzSW5Xb3JsZC5maW5kSWYoWyZdKGF1dG8mIHBhaXIp
IHsgcmV0dXJuIHBhaXIuZmlyc3QgPT0gIHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZp
ZXI7IH0pICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAgICAgbWVzc2FnZUhhbmRsZXJz
SW5Xb3JsZC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySWRl
bnRpZmllciwgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OjpjcmVhdGUodGhp
cywgbmFtZSwgd29ybGQsIHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZpZXIpKSk7CiB9
CkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTYwogICAgIH0KIAogICAgIGF1dG8mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2NyaXB0cy5l
bnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+LCBXZWJDb3JlOjpVc2VyU2NyaXB0Pj4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOwot
ICAgIGlmICh1c2VyU2NyaXB0SWRlbnRpZmllciAmJiBzY3JpcHRzSW5Xb3JsZC5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIHBhaXIpIHsgcmV0dXJuIHBhaXIuZmlyc3QgPT0gdXNlclNjcmlwdElkZW50
aWZpZXI7IH0pICE9IG5vdEZvdW5kKQorICAgIGlmICh1c2VyU2NyaXB0SWRlbnRpZmllciAmJiBz
Y3JpcHRzSW5Xb3JsZC5maW5kSWYoWyZdKGF1dG8mIHBhaXIpIHsgcmV0dXJuIHBhaXIuZmlyc3Qg
PT0gdXNlclNjcmlwdElkZW50aWZpZXI7IH0pICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47
CiAKICAgICBzY3JpcHRzSW5Xb3JsZC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodXNlclNjcmlwdElk
ZW50aWZpZXIsIFdURk1vdmUodXNlclNjcmlwdCkpKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiB2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkJiB3b3JsZCwgY29uc3Qgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mIHVzZXJTdHlsZVNo
ZWV0SWRlbnRpZmllciwgVXNlclN0eWxlU2hlZXQmJiB1c2VyU3R5bGVTaGVldCkKIHsKICAgICBh
dXRvJiBzdHlsZVNoZWV0c0luV29ybGQgPSBtX3VzZXJTdHlsZVNoZWV0cy5lbnN1cmUoJndvcmxk
LCBbXSB7IHJldHVybiBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+LCBX
ZWJDb3JlOjpVc2VyU3R5bGVTaGVldD4+KCk7IH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAo
dXNlclN0eWxlU2hlZXRJZGVudGlmaWVyICYmIHN0eWxlU2hlZXRzSW5Xb3JsZC5maW5kTWF0Y2hp
bmcoWyZdKGF1dG8mIHBhaXIpIHsgcmV0dXJuIHBhaXIuZmlyc3QgPT0gdXNlclN0eWxlU2hlZXRJ
ZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkKKyAgICBpZiAodXNlclN0eWxlU2hlZXRJZGVudGlm
aWVyICYmIHN0eWxlU2hlZXRzSW5Xb3JsZC5maW5kSWYoWyZdKGF1dG8mIHBhaXIpIHsgcmV0dXJu
IHBhaXIuZmlyc3QgPT0gdXNlclN0eWxlU2hlZXRJZGVudGlmaWVyOyB9KSAhPSBub3RGb3VuZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF1dG8gcGFnZUlEID0gdXNlclN0eWxlU2hlZXQu
cGFnZUlEKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCShyZXZpc2lvbiAyODg0NjMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgpAQCAtNzUyMyw3ICs3NTIzLDcgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0VGV4dFJlY29nbml0aW9uKEVsZQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBtYXRjaEluZGV4ID0gbV9lbGVtZW50c1BlbmRpbmdUZXh0UmVjb2duaXRpb24u
ZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZWxlbWVudEFuZENvbXBsZXRpb25IYW5kbGVycykgewor
ICAgIGF1dG8gbWF0Y2hJbmRleCA9IG1fZWxlbWVudHNQZW5kaW5nVGV4dFJlY29nbml0aW9uLmZp
bmRJZihbJl0gKGF1dG8mIGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMpIHsKICAgICAgICAg
cmV0dXJuIGVsZW1lbnRBbmRDb21wbGV0aW9uSGFuZGxlcnMuZmlyc3QgPT0gJmVsZW1lbnQ7CiAg
ICAgfSk7CiAKQEAgLTc1ODUsNyArNzU4NSw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdFRleHRS
ZWNvZ25pdGlvbihFbGUKICAgICAgICAgYXV0byYgaHRtbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKnByb3RlY3RlZEVsZW1lbnQpOwogICAgICAgICBJbWFnZU92ZXJsYXk6OnVwZGF0
ZVdpdGhUZXh0UmVjb2duaXRpb25SZXN1bHQoaHRtbEVsZW1lbnQsIHJlc3VsdCk7CiAKLSAgICAg
ICAgYXV0byBtYXRjaEluZGV4ID0gcHJvdGVjdGVkUGFnZS0+bV9lbGVtZW50c1BlbmRpbmdUZXh0
UmVjb2duaXRpb24uZmluZE1hdGNoaW5nKFsmXSAoYXV0byYgZWxlbWVudEFuZENvbXBsZXRpb25I
YW5kbGVycykgeworICAgICAgICBhdXRvIG1hdGNoSW5kZXggPSBwcm90ZWN0ZWRQYWdlLT5tX2Vs
ZW1lbnRzUGVuZGluZ1RleHRSZWNvZ25pdGlvbi5maW5kSWYoWyZdIChhdXRvJiBlbGVtZW50QW5k
Q29tcGxldGlvbkhhbmRsZXJzKSB7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudEFuZENvbXBs
ZXRpb25IYW5kbGVycy5maXJzdCA9PSAmaHRtbEVsZW1lbnQ7CiAgICAgICAgIH0pOwogCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyODg0NjQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MCBAQAorMjAyMi0wMS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVuYW1lIFZlY3RvciBhbmQgRml4ZWRWZWN0b3I6OmZpbmRNYXRjaGluZyB0byBmaW5kSWYg
dG8gbWF0Y2ggc3RsIG5hbWluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNDg2NAorICAgICAgICByZGFyOi8vODc0MjQ3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvRml4ZWRWZWN0b3IuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTWVkaWFMb2FkaW5nLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cGFyc2VVc2Vy
QWdlbnQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Y2xvc2VPdGhlclBhZ2UpOgorCiAyMDIyLTAx
LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgRml4ZWRW
ZWN0b3I6OmNsZWFyKCksIGNvbnRhaW5zKCksIGZpbmQoKSwgYW5kIGZpbmRNYXRjaGluZygpLgpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRml4ZWRWZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ZpeGVkVmVjdG9yLmNwcAko
cmV2aXNpb24gMjg4NDYzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRml4ZWRW
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTkgKzE1NywxOSBAQCBURVNUKFdURl9G
aXhlZFZlY3RvciwgQ29weUFzc2lnbikKICAgICBFWFBFQ1RfRVEoMlUsIHZlYzJbMl0pOwogfQog
Ci1URVNUKFdURl9GaXhlZFZlY3RvciwgRmluZE1hdGNoaW5nKQorVEVTVChXVEZfRml4ZWRWZWN0
b3IsIEZpbmRJZikKIHsKICAgICBGaXhlZFZlY3RvcjxpbnQ+IHY7Ci0gICAgRVhQRUNUX1RSVUUo
di5maW5kTWF0Y2hpbmcoW10oaW50KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOwot
ICAgIEVYUEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkg
PT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9UUlVFKHYuZmluZElmKFtdKGludCkgeyByZXR1cm4g
ZmFsc2U7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShpbnQp
IHsgcmV0dXJuIHRydWU7IH0pID09IG5vdEZvdW5kKTsKIAogICAgIHYgPSB7IDMsIDEsIDIsIDEs
IDIsIDEsIDIsIDIsIDEsIDEsIDEsIDMgfTsKLSAgICBFWFBFQ1RfVFJVRSh2LmZpbmRNYXRjaGlu
ZyhbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMzsgfSkgPT0gbm90Rm91bmQpOwotICAg
IEVYUEVDVF9UUlVFKHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gZmFsc2U7IH0pID09
IG5vdEZvdW5kKTsKLSAgICBFWFBFQ1RfRVEoMFUsIHYuZmluZE1hdGNoaW5nKFtdKGludCkgeyBy
ZXR1cm4gdHJ1ZTsgfSkpOwotICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50
IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8PSAzOyB9KSk7Ci0gICAgRVhQRUNUX0VRKDFVLCB2LmZp
bmRNYXRjaGluZyhbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwgMzsgfSkpOwotICAgIEVY
UEVDVF9FUSgyVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSAyOyB9KSk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA+IDM7IH0pID09IG5vdEZvdW5kKTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihb
XShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7CisgICAgRVhQRUNUX0VRKDBV
LCB2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMFUs
IHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPD0gMzsgfSkpOworICAgIEVY
UEVDVF9FUSgxVSwgdi5maW5kSWYoW10oaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA8IDM7IH0p
KTsKKyAgICBFWFBFQ1RfRVEoMlUsIHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPT0gMjsgfSkpOwogfQogCiBURVNUKFdURl9GaXhlZFZlY3RvciwgTW92ZSkKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAkocmV2aXNpb24gMjg4NDYzKQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzI1LDE5ICs3MjUsMTkgQEAgVEVTVChXVEZfVmVjdG9yLCBDbGVhckNvbnRhaW5zQW5k
RmluZCkKICAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsgfSkpOwogfQogCi1URVNU
KFdURl9WZWN0b3IsIEZpbmRNYXRjaGluZykKK1RFU1QoV1RGX1ZlY3RvciwgRmluZElmKQogewog
ICAgIFZlY3RvcjxpbnQ+IHY7Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hpbmcoW10oaW50
KSB7IHJldHVybiBmYWxzZTsgfSkgPT0gbm90Rm91bmQpOwotICAgIEVYUEVDVF9UUlVFKHYuZmlu
ZE1hdGNoaW5nKFtdKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkgPT0gbm90Rm91bmQpOworICAgIEVY
UEVDVF9UUlVFKHYuZmluZElmKFtdKGludCkgeyByZXR1cm4gZmFsc2U7IH0pID09IG5vdEZvdW5k
KTsKKyAgICBFWFBFQ1RfVFJVRSh2LmZpbmRJZihbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pID09
IG5vdEZvdW5kKTsKIAogICAgIHYgPSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwg
M307Ci0gICAgRVhQRUNUX1RSVUUodi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA+IDM7IH0pID09IG5vdEZvdW5kKTsKLSAgICBFWFBFQ1RfVFJVRSh2LmZpbmRNYXRj
aGluZyhbXShpbnQpIHsgcmV0dXJuIGZhbHNlOyB9KSA9PSBub3RGb3VuZCk7Ci0gICAgRVhQRUNU
X0VRKDBVLCB2LmZpbmRNYXRjaGluZyhbXShpbnQpIHsgcmV0dXJuIHRydWU7IH0pKTsKLSAgICBF
WFBFQ1RfRVEoMFUsIHYuZmluZE1hdGNoaW5nKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PD0gMzsgfSkpOwotICAgIEVYUEVDVF9FUSgxVSwgdi5maW5kTWF0Y2hpbmcoW10oaW50IHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA8IDM7IH0pKTsKLSAgICBFWFBFQ1RfRVEoMlUsIHYuZmluZE1hdGNo
aW5nKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOworICAgIEVYUEVDVF9U
UlVFKHYuZmluZElmKFtdKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAzOyB9KSA9PSBub3RG
b3VuZCk7CisgICAgRVhQRUNUX1RSVUUodi5maW5kSWYoW10oaW50KSB7IHJldHVybiBmYWxzZTsg
fSkgPT0gbm90Rm91bmQpOworICAgIEVYUEVDVF9FUSgwVSwgdi5maW5kSWYoW10oaW50KSB7IHJl
dHVybiB0cnVlOyB9KSk7CisgICAgRVhQRUNUX0VRKDBVLCB2LmZpbmRJZihbXShpbnQgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlIDw9IDM7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHYuZmluZElmKFtd
KGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPCAzOyB9KSk7CisgICAgRVhQRUNUX0VRKDJVLCB2
LmZpbmRJZihbXShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IDI7IH0pKTsKIH0KIAogVEVT
VChXVEZfVmVjdG9yLCBSZW1vdmVGaXJzdE1hdGNoaW5nKQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0JKHJldmlz
aW9uIDI4ODQ2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVk
aWFMb2FkaW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgewogc3RhdGljIFN0cmluZyBwYXJzZVVzZXJBZ2VudChjb25zdCBWZWN0b3I8Y2hh
cj4mIHJlcXVlc3QpCiB7CiAgICAgYXV0byBoZWFkZXJzID0gU3RyaW5nOjpmcm9tVVRGOChyZXF1
ZXN0LmRhdGEoKSwgcmVxdWVzdC5zaXplKCkpLnNwbGl0KCJcclxuIik7Ci0gICAgYXV0byBpbmRl
eCA9IGhlYWRlcnMuZmluZE1hdGNoaW5nKFtdIChhdXRvJiBoZWFkZXIpIHsgcmV0dXJuIGhlYWRl
ci5zdGFydHNXaXRoKCJVc2VyLUFnZW50OiIpOyB9KTsKKyAgICBhdXRvIGluZGV4ID0gaGVhZGVy
cy5maW5kSWYoW10gKGF1dG8mIGhlYWRlcikgeyByZXR1cm4gaGVhZGVyLnN0YXJ0c1dpdGgoIlVz
ZXItQWdlbnQ6Iik7IH0pOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0
dXJuIGhlYWRlcnNbaW5kZXhdOwogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4ODQ2MykK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElzTWVkaWFL
ZXlTeXN0ZW0KIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsb3NlT3RoZXJQYWdlKFdLUGFnZVJlZiBw
YWdlLCBQbGF0Zm9ybVdlYlZpZXcqIHZpZXcpCiB7CiAgICAgV0tQYWdlQ2xvc2UocGFnZSk7Ci0g
ICAgYXV0byBpbmRleCA9IG1fYXV4aWxpYXJ5V2ViVmlld3MuZmluZE1hdGNoaW5nKFt2aWV3XShh
dXRvJiBhdXhpbGlhcnlXZWJWaWV3KSB7IHJldHVybiBhdXhpbGlhcnlXZWJWaWV3LnB0cigpID09
IHZpZXc7IH0pOworICAgIGF1dG8gaW5kZXggPSBtX2F1eGlsaWFyeVdlYlZpZXdzLmZpbmRJZihb
dmlld10oYXV0byYgYXV4aWxpYXJ5V2ViVmlldykgeyByZXR1cm4gYXV4aWxpYXJ5V2ViVmlldy5w
dHIoKSA9PSB2aWV3OyB9KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCiAgICAgICAgIG1f
YXV4aWxpYXJ5V2ViVmlld3MucmVtb3ZlKGluZGV4KTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>