<?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>175214</bug_id>
          
          <creation_ts>2017-08-04 15:07:29 -0700</creation_ts>
          <short_desc>Move DFG::OSRExitCompiler methods into DFG::OSRExit [step 2].</short_desc>
          <delta_ts>2017-08-04 17:05:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          <blocked>175144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1335510</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-04 15:07:29 -0700</bug_when>
    <thetext>Actually move the 64-bit and common DFGOSRExit code (previously in DFGOSRExitCompiler) into DFGOSRExit.cpp, and delete unneeded files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335511</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-04 15:08:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/33733302&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335512</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-04 15:08:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/33733308&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335589</commentid>
    <comment_count>3</comment_count>
      <attachid>317312</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-04 16:51:02 -0700</bug_when>
    <thetext>Created attachment 317312
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335591</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-04 16:51:59 -0700</bug_when>
    <thetext>Attachment 317312 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRExit32_64.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335592</commentid>
    <comment_count>5</comment_count>
      <attachid>317313</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-04 16:52:57 -0700</bug_when>
    <thetext>Created attachment 317313
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335593</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-04 16:54:51 -0700</bug_when>
    <thetext>Attachment 317313 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGOSRExit32_64.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335597</commentid>
    <comment_count>7</comment_count>
      <attachid>317315</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-04 16:59:24 -0700</bug_when>
    <thetext>Created attachment 317315
proposed patch: fixed style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335598</commentid>
    <comment_count>8</comment_count>
      <attachid>317315</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-08-04 17:02:07 -0700</bug_when>
    <thetext>Comment on attachment 317315
proposed patch: fixed style issue.

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335599</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-04 17:05:24 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r220306: &lt;http://trac.webkit.org/r220306&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317312</attachid>
            <date>2017-08-04 16:51:02 -0700</date>
            <delta_ts>2017-08-04 16:52:57 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-175214.patch</filename>
            <type>text/plain</type>
            <size>107830</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE3LTA4LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIERGRzo6T1NSRXhpdENvbXBpbGVyIG1ldGhvZHMgaW50byBERkc6Ok9TUkV4aXQgW3N0ZXAg
Ml0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUy
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzNzMzMzA4PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcHkgdGhlIDY0LWJpdCBhbmQgY29tbW9u
IG1ldGhvZHMgaW50byBERkdPU1JFeGl0LmNwcCwgYW5kIGRlbGV0ZSB0aGUgdW51c2VkCisgICAg
ICAgIERGR09TUkV4aXRDb21waWxlciBmaWxlcy4KKworICAgICAgICBBbHNvIG1vdmUgZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSgpIGludG8gREZHT1NSRXhpdC5jcHAuICBJ
dCdzIG9ubHkKKyAgICAgICAgdXNlZCBieSBjb21waWxlT1NSRXhpdCgpLCBhbmQgd2lsbCBiZSBj
aGFuZ2VkIHRvIG5vdCBiZSBhIERGRyBvcGVyYXRpb24gZnVuY3Rpb24KKyAgICAgICAgd2hlbiB3
ZSB1c2UgSklUIHByb2JlcyBmb3IgREZHIE9TUiBleGl0cyBsYXRlciBpbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ0LgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjplbWl0UmVz
dG9yZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZU9TUkV4
aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJl
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
MzJfNjQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjMyXzY0LmNwcC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorCiAyMDE3LTA4LTA0ICBNYXR0IEJha2VyICA8
bWF0dGJha2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjYXB0dXJlIGFz
eW5jIHN0YWNrIHRyYWNlIHdoZW4gd29ya2Vycy9tYWluIGNvbnRleHQgcG9zdHMgYSBtZXNzYWdl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjAyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTM3NiwxMCArMzc2LDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwCiAgICAgZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdPU1JFeGl0LmNwcAorICAgIGRmZy9ERkdPU1JFeGl0MzJfNjQuY3BwCiAg
ICAgZGZnL0RGR09TUkV4aXRCYXNlLmNwcAotICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3Bw
Ci0gICAgZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAotICAgIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAogICAg
IGRmZy9ERkdPU1JFeGl0RnV6ei5jcHAKICAgICBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjAyOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQ0LDExICs3NDQsOCBAQAogCQkwRkJGMTU4
QzE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1OEExOUI3QTUzMTAwNjk1REQwIC8qIERG
R0Jsb2NrU2V0LmNwcCAqLzsgfTsKIAkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Js
b2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oICov
OyB9OwogCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NjgxNDY4QTZFRjAw
Q0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLzsgfTsKLQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3NkYxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlci5oICovOyB9OwotCQkwRkMwOTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCAq
LzsgfTsKLQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgKi87
IH07CisJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdPU1JFeGl0MzJfNjQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NzUxNDY5
NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXQzMl82NC5jcHAgKi87IH07CiAJCTBGQzA5NzkxMTQ2
QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JF
eGl0LmNwcCAqLzsgfTsKLQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkMwOTc4RjE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmNwcCAqLzsg
fTsKIAkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc5RjE0NkIyOEM3MDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQy
IC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovOyB9OwogCQkw
RkMyMENCNTE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMyMENCMzE4
NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi87IH07CkBA
IC0zMzQyLDEyICszMzM5LDkgQEAKIAkJMEZCRjE1OEExOUI3QTUzMTAwNjk1REQwIC8qIERGR0Js
b2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jsb2Nr
U2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tTZXRJbmxpbmVzLmg7
IHBhdGggPSBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzA5NzZGMTQ2OTNBRUYwMENG
MjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHT1NSRXhpdENvbXBpbGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkMwOTc3NTE0
Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXQzMl82NC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0MzJfNjQu
Y3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXQzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHQ29t
bW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzhFMTQ2QTZGNjMwMENG
MjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR09TUkV4aXQuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkMwOTc4RjE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09T
UkV4aXRDb21waWxlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERG
R1RodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaHVu
a3MuY3BwOyBwYXRoID0gZGZnL0RGR1RodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGh1bmtzLmg7IHBhdGggPSBkZmcvREZHVGh1bmtz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzQ3MywxMyArNzQ2NywxMCBAQAogCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAv
KiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZG
NjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBD
RjI0NDIgLyogREZHT1NSRXhpdC5oICovLAorCQkJCTBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAv
KiBERkdPU1JFeGl0MzJfNjQuY3BwICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0QmFzZS5jcHAgKi8sCiAJCQkJMEYyMzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8q
IERGR09TUkV4aXRCYXNlLmggKi8sCiAJCQkJNjU5ODdGMkMxNjdGRTg0QjAwM0MyRjhEIC8qIERG
R09TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKLQkJCQkwRkMwOTc4RjE0NkE2RjYzMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmNwcCAqLywKLQkJCQkwRkMwOTc2RjE0NjkzQUVGMDBD
RjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8sCi0JCQkJMEZDMDk3NzUxNDY5NDNBRDAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCAqLywKLQkJCQkwRkMwOTc3MDE0
NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovLAogCQkJCTBGNzAy
NUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovLAog
CQkJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aCAqLywKIAkJCQkwRjM5MkM4NzFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3Bw
ICovLApAQCAtODY4OSw3ICs4NjgwLDYgQEAKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkw
QzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAy
RjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0
NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVGQzlBQjE2ODFB
M0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xMDQ4NCw5ICsxMDQ3NCw3IEBACiAJCQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRkMwOTc5MjE0NkE2RjczMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBp
bGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkMwOTc3MjE0
NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXQzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2
ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAyMjAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUg
IkRGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiREZHSklURmluYWxpemVyLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBp
bGVyLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKICNpbmNsdWRlICJERkdTbG93UGF0aEdl
bmVyYXRvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dDMyXzY0LmNwcAkocmV2aXNpb24gMjIwMjk4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoyMjAyOTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKKworI2luY2x1ZGUg
IkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIK
KyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2
bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9w
ZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3sKKyAgICAvLyBQcm8tZm9y
bWEgc3R1ZmYuCisgICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgeworICAgICAg
ICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm87CisgICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNv
ZGVCbG9jaygpOworICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKKyAgICAg
ICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXg7CisgICAgICAgIAorICAgICAgICBqaXQuZGVidWdDYWxsKHZtLCBkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworICAgIH0KKworICAgIC8vIFBl
cmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hl
biBhbiBvcGVyYXRpb24KKyAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlm
eWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBpZiAo
cmVjb3ZlcnkpIHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBqaXQuc3ViMzIocmVjb3ZlcnktPnNy
YygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6CisgICAgICAgICAgICBqaXQuc3ViMzIoQXNzZW1i
bHlIZWxwZXJzOjpJbW0zMihyZWNvdmVyeS0+aW1tZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVzdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAKKyAg
ICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgeworICAgICAgICBpZiAoZXhpdC5tX2tpbmQg
PT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7CisgICAgICAg
ICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbSBoYXMg
YW4gYXJyYXkgcHJvZmlsZSwgdGhlbgorICAgICAgICAgICAgLy8gcmVmaW5lIGl0LiBJZiBpdCBk
b2Vzbid0LCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBsYXR0ZXIgY291bGQgaGFwcGVuIGZvcgorICAg
ICAgICAgICAgLy8gaG9pc3RlZCBjaGVja3MsIG9yIGNoZWNrcyBlbWl0dGVkIGZvciBvcGVyYXRp
b25zIHRoYXQgZGlkbid0IGhhdmUgYXJyYXkKKyAgICAgICAgICAgIC8vIHByb2ZpbGluZyAtIGVp
dGhlciBvcHMgdGhhdCBhcmVuJ3QgYXJyYXkgYWNjZXNzZXMgYXQgYWxsLCBvciB3ZXJlbid0Cisg
ICAgICAgICAgICAvLyBrbm93biB0byBiZSBhcnJheSBhY2Nlc2VzIGluIHRoZSBieXRlY29kZS4g
VGhlIGxhdHRlciBjYXNlIGlzIGEgRklYTUUKKyAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBmb3Jt
ZXIgY2FzZSBpcyBhbiBvdXRjb21lIG9mIGEgQ2hlY2tTdHJ1Y3R1cmUgbm90IGtub3dpbmcgd2h5
CisgICAgICAgICAgICAvLyBpdCB3YXMgZW1pdHRlZCAoY291bGQgYmUgZWl0aGVyIGR1ZSB0byBh
biBpbmxpbmUgY2FjaGUgb2YgYSBwcm9wZXJ0eQorICAgICAgICAgICAgLy8gcHJvcGVydHkgYWNj
ZXNzLCBvciBkdWUgdG8gYW4gYXJyYXkgcHJvZmlsZSkuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE5vdGU6IFdlIGFyZSBmcmVlIHRvIGFzc3VtZSB0aGF0IHRoZSBqc1ZhbHVlU291cmNl
IGlzIGFscmVhZHkga25vd24gdG8KKyAgICAgICAgICAgIC8vIGJlIGEgY2VsbCBzaW5jZSBib3Ro
IEJhZENhY2hlIGFuZCBCYWRJbmRleGluZ1R5cGUgZXhpdHMgb2NjdXIgYWZ0ZXIKKyAgICAgICAg
ICAgIC8vIHRoZSBjZWxsIGNoZWNrIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQ
cm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgdXNlZFJlZ2lzdGVyMTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVyMjsK
KyAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMSA9IGV4aXQubV9qc1ZhbHVlU291cmNl
LmJhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlZFJl
Z2lzdGVyMSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9
IGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7CisgICAgICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyOworICAgICAgICAgICAgICAgIHNjcmF0Y2gxID0gQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3RlcjIp
OworICAgICAgICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3RlcjIsIHNjcmF0Y2gxKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7CisgICAgICAgICAg
ICAgICAgaml0LnB1c2goc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNoMTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVlU291
cmNlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2Ny
YXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gx
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0
Y2gxKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigxKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihzY3JhdGNo
MSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJs
eUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9k
ZXMoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRj
aDIpOworICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRjaDEpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkgeworICAgICAgICAgICAgaWYgKGV4
aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAgICAgLy8gU2F2
ZSBhIHJlZ2lzdGVyIHNvIHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hQYXlsb2FkID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4aXQubV9q
c1ZhbHVlU291cmNlLmJhc2UoKSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hUYWcg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2Uu
YmFzZSgpLCBzY3JhdGNoUGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUo
c2NyYXRjaFBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2hU
YWcpOworCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgc2NyYXRjaChzY3JhdGNoVGFnLCBz
Y3JhdGNoUGF5bG9hZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0Lmxv
YWRWYWx1ZShleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSwgc2NyYXRjaCk7CisgICAg
ICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hUYWcp
OworICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFBheWxvYWQpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5oYXNLbm93blRhZygpKSB7
CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hUYWcgPSBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJj
ZS50YWcoKSksIHNjcmF0Y2hUYWcpOworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVl
KHNjcmF0Y2hUYWcsIGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSk7CisgICAgICAg
ICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgaml0LnBvcFRvUmVzdG9yZShzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwgZXhpdC5tX2pzVmFs
dWVTb3VyY2UucmVncygpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBEbyBhIHNp
bXBsaWZpZWQgT1NSIGV4aXQuIFNlZSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAncyBjb21tZW50
IHJlZ2FyZGluZyBob3cgYW5kIHdueSB3ZQorICAgIC8vIGRvIHRoaXMgc2ltcGxlIGFwcHJvYWNo
LgorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLgorICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNo
QnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3BlcmFuZHMuc2l6ZSgpKTsK
KyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOworICAg
IAorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5k
c1tpbmRleF07CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hl
ZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICAg
ICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkuZ3ByKCksCisgICAgICAg
ICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCAr
IGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgICAgICByZWNvdmVyeS50YWdHUFIoKSwKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMudGFn
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHJlY292ZXJ5LnBh
eWxvYWRHUFIoKSwKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTm93IGFsbCBHUFJzIGFyZSBmcmVl
IHRvIHJldXNlLgorICAgIAorICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRvIHRo
ZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQ
UjoKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gTm93IGFsbCBGUFJzIGFyZSBmcmVlIHRvIHJldXNlLgorICAgIAor
ICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLiBGb3Igc2ltcGxpY2l0eSB3ZQorICAgIC8vIGRvIHRoaXMgZXZlbiBmb3Igc3RhdGUgdGhh
dCdzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBJdCBt
YWtlcyB0aGluZ3Mgc2ltcGxlciBsYXRlci4KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAg
ICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQ2VsbERpc3Bs
YWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCisgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAorICAgICAgICAgICAgICAgICZiaXR3
aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0
cy50YWcpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDEsCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhl
IHN0YWNrIHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdlIGF0
IGV4aXQuIFRoaXMKKyAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERGRyB1
c2VkLiBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMKKyAg
ICAvLyB1c2VkIGJ5IGJhc2VsaW5lLgorICAgIGppdC5hZGRQdHIoCisgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVvZihS
ZWdpc3RlcikpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBSZXN0b3Jl
IHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5l
IEpJVCB1c2VzLgorICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgaml0LmVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3Ioaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOworCisgICAgaWYg
KGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKworICAgIC8vIERvIGFsbCBkYXRh
IGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2su
CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZp
cnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKworICAgICAgICBpZiAocmVnLmlzTG9jYWwo
KSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxv
Y2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisKKyAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluUGFpcjoK
KyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW5GUFI6Cisg
ICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5j
b2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcsCisgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAg
ICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3Jh
dGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMCwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5k
KSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUMSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFu
ZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVbmJv
eGVkRG91YmxlSW5GUFI6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2ggKyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkRG91Ymxl
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQucHVyaWZ5TmFOKEZQUkluZm86OmZwUmVnVDApOworICAgICAg
ICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9h
ZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
b3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9h
ZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcihv
cGVyYW5kKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUMCwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
b3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpT
U3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICZiaXR3aXNl
X2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5w
YXlsb2FkLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAg
ICAgIEdQUkluZm86OnJlZ1QwLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50
YWcoKSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLAorICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQ6CisgICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRo
ZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1
bWUgdGhhdCBhcmd1bWVudHMKKyAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJl
ZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkg
b25seQorICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5
IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KKyAg
ICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMg
bWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCisgICAgLy8gaW5saW5l
IGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQu
CisgICAgCisgICAgZW1pdFJlc3RvcmVBcmd1bWVudHMoaml0LCBvcGVyYW5kcyk7CisKKyAgICAv
LyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0
aW5nIE9TUiwgd2Uga25vdworICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29k
ZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQorICAgIC8vIGNvdW50ZXIg
b25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxs
IGZyYW1lcworICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQg
dGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKKyAgICAvLyBPU1IgZXhpdC4gV2Ugd2Fu
dCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAo
YSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVy
IG9wdGltaXplZAorICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBj
b2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0CisgICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCBy
ZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAvLworICAgIC8v
IChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVu
bmluZyB0aGUgb2xkCisgICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwg
dGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgIHBlcmZvcm0gT1NSIGVu
dHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8KKyAgICAvLyAo
YykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBy
ZXRyeSBPU1IKKyAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBl
eHBlbnNpdmUuIE9TUiBlbnRyeSBpcworICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZl
LgorICAgIC8vCisgICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0
aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKKyAgICAvLyAgICAgcnVubmluZyBpbiBhIGhv
dCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAv
LworICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291
bnRlciB0bworICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhp
cyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCisgICAgLy8gKGEpIGFuZCAoYiksIHNpbmNl
IHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgorICAg
IC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBp
ZiBPU1IgZXhpdCBoYXBwZW5zCisgICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhh
cyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgorICAgIC8vIGJlY29tZSBu
b24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVu
dHJ5CisgICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAo
YSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vIHNp
bmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3Vu
dGVyLgorICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlv
biBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJl
ciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgorICAgIC8v
IHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNv
LCB3ZSBzZXQgdGhlCisgICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBj
b3VudGVyIHRvCisgICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgor
ICAgIAorICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBleGl0KTsKKyAgICAKKyAgICAvLyBSZWlm
eSBpbmxpbmVkIGNhbGwgZnJhbWVzLgorICAgIAorICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
aml0LCBleGl0KTsKKyAgICAKKyAgICAvLyBBbmQgZmluaXNoLgorICAgIGFkanVzdEFuZEp1bXBU
b1RhcmdldCh2bSwgaml0LCBleGl0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJfNjQuY3BwCShyZXZpc2lv
biAyMjAyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHT1NS
RXhpdC5oIgogCiAjaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjIw
Mjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsOCArMzEsMTMgQEAKICNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRl
ICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0UHJlcGFy
YXRpb24uaCIKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3Vs
YXRpdmVKSVQuaCIKKyNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIApAQCAtNzMsNiArNzgsNTQ3IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVj
dEp1bXAoTGlua0J1ZmZlciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVm
ZmVyLm9mZnNldE9mKGxhYmVsKTsKIH0KIAordm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3Vt
ZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9w
ZXJhbmRzKQoreworICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5QWxsb2NhdGVk
QXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8gb3BlcmFuZC4K
KyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2lu
ZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNb
aW5kZXhdOworICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChp
bmRleCk7CisKKyAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpcmVjdEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZAorICAgICAgICAgICAgJiYgcmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOworICAg
ICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOworICAg
ICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVS
ZWdzKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICBqaXQubG9h
ZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihpdGVyLT52YWx1ZSksIHJlZ3MpOworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUocmVncywgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPQorICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5qaXRDb2RlKCktPmRmZygpLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFt
ZSgpOworCisgICAgICAgIGludCBzdGFja09mZnNldDsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOworCisgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwK
KyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2Vs
bCgpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICB9CisKKyAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDEpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAgICAgaml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3Bl
cmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFy
Z3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKwor
ICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CisgICAg
fQorfQorCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisKKyAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNh
dGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhl
Yyk7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAg
IEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworCisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3
ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAg
IC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2
bS0+aGVhcCk7CisKKyAgICB1aW50MzJfdCBleGl0SW5kZXggPSB2bS0+b3NyRXhpdEluZGV4Owor
ICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckV4aXRb
ZXhpdEluZGV4XTsKKworICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCisgICAgICAgIEFT
U0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKKyAgICBpZiAoZXhpdC5pc0V4Y2Vw
dGlvbkhhbmRsZXIoKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgCisgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4
aXQubV9jb2RlT3JpZ2luKTsKKworICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMu
CisgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7CisgICAgY29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZygpLT52YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9j
aywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+bWluaWZp
ZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMpOworCisgICAgU3BlY3VsYXRpb25S
ZWNvdmVyeSogcmVjb3ZlcnkgPSAwOworICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBV
SU5UX01BWCkKKyAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygp
LT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKKworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOworCisgICAgICAgIGlmIChleGl0Lm1f
a2luZCA9PSBHZW5lcmljVW53aW5kKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFz
IGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vu
d2luZCgpLgorICAgICAgICAgICAgLy8gU28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFt
ZSBhbmQgc3RhY2sgcG9pbnRlci4KKyAgICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICBq
aXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKKworICAgICAgICBpZiAodm0tPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNv
bXBpbGF0aW9uKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0g
KnZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgICAgICBQcm9maWxlcjo6Q29tcGls
YXRpb24qIGNvbXBpbGF0aW9uID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5j
b21waWxhdGlvbi5nZXQoKTsKKworICAgICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2Zp
bGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAorICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0g
VW5jb3VudGFibGVJbnZhbGlkYXRpb24pOworICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9m
aWxlckV4aXQtPmNvdW50ZXJBZGRyZXNzKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBp
bGVFeGl0KGppdCwgKnZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOworCisgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOworICAgICAgICBleGl0Lm1fY29k
ZSA9IEZJTkFMSVpFX0NPREVfSUYoCisgICAgICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHko
KSB8fCBPcHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQo
KSwKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJERkcgT1NSIGV4aXQg
IyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCisgICAgICAgICAgICAg
ICAgZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKKyAgICAg
ICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2Rl
QmxvY2spLmRhdGEoKSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0
PER1bXBDb250ZXh0PihvcGVyYW5kcykpLmRhdGEoKSkpOworICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2Nr
KSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7CisKKyAgICB2bS0+b3Ny
RXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKwordm9pZCBPU1JFeGl0Ojpjb21waWxlRXhp
dChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJl
Y292ZXJ5KQoreworICAgIGppdC5qaXRBc3NlcnRUYWdzSW5QbGFjZSgpOworCisgICAgLy8gUHJv
LWZvcm1hIHN0dWZmLgorICAgIGlmIChPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpIHsKKyAg
ICAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3Vs
YXRpb25GYWlsdXJlRGVidWdJbmZvOworICAgICAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IGpp
dC5jb2RlQmxvY2soKTsKKyAgICAgICAgZGVidWdJbmZvLT5raW5kID0gZXhpdC5tX2tpbmQ7Cisg
ICAgICAgIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4OworCisgICAgICAgIGppdC5kZWJ1Z0NhbGwodm0sIGRlYnVnT3BlcmF0aW9uUHJp
bnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisgICAgfQorCisgICAgLy8gUGVyZm9y
bSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFu
IG9wZXJhdGlvbgorICAgIC8vIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5n
IHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorCisgICAgaWYgKHJlY292ZXJ5
KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgeworICAgICAgICBjYXNlIFNw
ZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgaml0LnN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVj
b3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBqaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKKyAgICAgICAgICAgIGppdC5zdWIz
MihBc3NlbWJseUhlbHBlcnM6OkltbTMyKHJlY292ZXJ5LT5pbW1lZGlhdGUoKSksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICBqaXQueG9yNjQoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJl
ZmluZSBzb21lIGFycmF5IGFuZC9vciB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KKwor
ICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7CisgICAgICAgIGlmIChleGl0Lm1fa2lu
ZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tIGhh
cyBhbiBhcnJheSBwcm9maWxlLCB0aGVuCisgICAgICAgICAgICAvLyByZWZpbmUgaXQuIElmIGl0
IGRvZXNuJ3QsIHRoZW4gZG8gbm90aGluZy4gVGhlIGxhdHRlciBjb3VsZCBoYXBwZW4gZm9yCisg
ICAgICAgICAgICAvLyBob2lzdGVkIGNoZWNrcywgb3IgY2hlY2tzIGVtaXR0ZWQgZm9yIG9wZXJh
dGlvbnMgdGhhdCBkaWRuJ3QgaGF2ZSBhcnJheQorICAgICAgICAgICAgLy8gcHJvZmlsaW5nIC0g
ZWl0aGVyIG9wcyB0aGF0IGFyZW4ndCBhcnJheSBhY2Nlc3NlcyBhdCBhbGwsIG9yIHdlcmVuJ3QK
KyAgICAgICAgICAgIC8vIGtub3duIHRvIGJlIGFycmF5IGFjY2VzZXMgaW4gdGhlIGJ5dGVjb2Rl
LiBUaGUgbGF0dGVyIGNhc2UgaXMgYSBGSVhNRQorICAgICAgICAgICAgLy8gd2hpbGUgdGhlIGZv
cm1lciBjYXNlIGlzIGFuIG91dGNvbWUgb2YgYSBDaGVja1N0cnVjdHVyZSBub3Qga25vd2luZyB3
aHkKKyAgICAgICAgICAgIC8vIGl0IHdhcyBlbWl0dGVkIChjb3VsZCBiZSBlaXRoZXIgZHVlIHRv
IGFuIGlubGluZSBjYWNoZSBvZiBhIHByb3BlcnR5CisgICAgICAgICAgICAvLyBwcm9wZXJ0eSBh
Y2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBwcm9maWxlKS4KKworICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICAg
ICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCkpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVyOworICAgICAgICAg
ICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhp
dC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCk7CisKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aDE7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyOworICAgICAgICAgICAgICAgIHNj
cmF0Y2gxID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgc2NyYXRjaDIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIodXNlZFJlZ2lzdGVyLCBzY3JhdGNoMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNB
Uk02NCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2gxKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaDIpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnB1c2goc2NyYXRjaDIpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
ZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBzY3JhdGNoMTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpOworCisgICAgICAgICAgICAgICAgaml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMSwg
YXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7Cisg
ICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgICAg
ICAgICAgICAgaml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRy
ZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3Rv
cmUoc2NyYXRjaDIpOworICAgICAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0
Y2gxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQu
cG9wKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2Zp
bGUpIHsKKyAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgc3Bh
cmUgcmVnaXN0ZXIuIFNvIHVzZSB0aGUgdGFnVHlwZU51bWJlclJlZ2lzdGVyLAorICAgICAgICAg
ICAgICAgIC8vIHNpbmNlIHdlIGtub3cgaG93IHRvIHJlc3RvcmUgaXQuCisgICAgICAgICAgICAg
ICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuYXNBZGRyZXNzKCkpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBw
cm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVSZWdzKGV4aXQubV9qc1ZhbHVlU291
cmNlLmdwcigpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXaGF0IGZvbGxvd3MgaXMg
YW4gaW50ZW50aW9uYWxseSBzaW1wbGUgT1NSIGV4aXQgaW1wbGVtZW50YXRpb24gdGhhdCBnZW5l
cmF0ZXMKKyAgICAvLyBmYWlybHkgcG9vciBjb2RlIGJ1dCBpcyB2ZXJ5IGVhc3kgdG8gaGFjay4g
SW4gcGFydGljdWxhciwgaXQgZHVtcHMgYWxsIHN0YXRlIHRoYXQKKyAgICAvLyBuZWVkcyBjb252
ZXJzaW9uIGludG8gYSBzY3JhdGNoIGJ1ZmZlciBzbyB0aGF0IGluIHN0ZXAgNiwgd2hlcmUgd2Ug
YWN0dWFsbHkgZG8gdGhlCisgICAgLy8gY29udmVyc2lvbnMsIHdlIGtub3cgdGhhdCBhbGwgdGVt
cCByZWdpc3RlcnMgYXJlIGZyZWUgdG8gdXNlIGFuZCB0aGUgdmFyaWFibGUgaXMKKyAgICAvLyBk
ZWZpbml0ZWx5IGluIGEgd2VsbC1rbm93biBzcG90IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciByZWdh
cmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFkCisgICAgLy8gb3JpZ2luYWxseSBiZWVuIGluIGEgcmVn
aXN0ZXIgb3Igc3BpbGxlZC4gVGhpcyBhbGxvd3MgdXMgdG8gZGVjb3VwbGUgIndoZXJlIHdhcwor
ICAgIC8vIHRoZSB2YXJpYWJsZSIgZnJvbSAiaG93IHdhcyBpdCByZXByZXNlbnRlZCIuIENvbnNp
ZGVyIHRoYXQgdGhlCisgICAgLy8gSW50MzJEaXNwbGFjZWRJbkpTU3RhY2sgcmVjb3Zlcnk6IGl0
IHRlbGxzIHVzIHRoYXQgdGhlIHZhbHVlIGlzIGluIGEKKyAgICAvLyBwYXJ0aWN1bGFyIHBsYWNl
IGFuZCB0aGF0IHRoYXQgcGxhY2UgaG9sZHMgYW4gdW5ib3hlZCBpbnQzMi4gV2UgaGF2ZSB0d28g
ZGlmZmVyZW50CisgICAgLy8gcGxhY2VzIHRoYXQgYSB2YWx1ZSBjb3VsZCBiZSAoZGlzcGxhY2Vk
LCByZWdpc3RlcikgYW5kIGEgYnVuY2ggb2YgZGlmZmVyZW50CisgICAgLy8gd2F5cyBvZiByZXBy
ZXNlbnRpbmcgYSB2YWx1ZS4gVGhlIG51bWJlciBvZiByZWNvdmVyaWVzIGlzIHR3byAqIGEgYnVu
Y2guIFRoZSBjb2RlCisgICAgLy8gYmVsb3cgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIGhhdmUgdHdv
ICsgYSBidW5jaCBjYXNlcyByYXRoZXIgdGhhbiB0d28gKiBhIGJ1bmNoLgorICAgIC8vIE9uY2Ug
d2UgaGF2ZSBsb2FkZWQgdGhlIHZhbHVlIGZyb20gd2hlcmV2ZXIgaXQgd2FzLCB0aGUgcmVib3hp
bmcgaXMgdGhlIHNhbWUKKyAgICAvLyByZWdhcmRsZXNzIG9mIGl0cyBsb2NhdGlvbi4gTGlrZXdp
c2UsIGJlZm9yZSB3ZSBkbyB0aGUgcmVib3hpbmcsIHRoZSB3YXkgd2UgZ2V0IHRvCisgICAgLy8g
dGhlIHZhbHVlIChpLmUuIHdoZXJlIHdlIGxvYWQgaXQgZnJvbSkgaXMgdGhlIHNhbWUgcmVnYXJk
bGVzcyBvZiBpdHMgdHlwZS4gQmVjYXVzZQorICAgIC8vIHRoZSBjb2RlIGJlbG93IGFsd2F5cyBk
dW1wcyBldmVyeXRoaW5nIGludG8gYSBzY3JhdGNoIGJ1ZmZlciBmaXJzdCwgdGhlIHR3bworICAg
IC8vIHF1ZXN0aW9ucyBiZWNvbWUgb3J0aG9nb25hbCwgd2hpY2ggc2ltcGxpZmllcyBhZGRpbmcg
bmV3IHR5cGVzIGFuZCBhZGRpbmcgbmV3CisgICAgLy8gbG9jYXRpb25zLgorICAgIC8vCisgICAg
Ly8gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uOiBkb2VzIHVzaW5nIHN1Y2ggYSBzdWJvcHRpbWFs
IGltcGxlbWVudGF0aW9uIG9mIE9TUiBleGl0LAorICAgIC8vIHdoZXJlIHdlIGFsd2F5cyBlbWl0
IGNvZGUgdG8gZHVtcCBhbGwgc3RhdGUgaW50byBhIHNjcmF0Y2ggYnVmZmVyIG9ubHkgdG8gdGhl
bgorICAgIC8vIGR1bXAgaXQgcmlnaHQgYmFjayBpbnRvIHRoZSBzdGFjaywgaHVydCB1cyBpbiBh
bnkgd2F5PyBUaGUgYXNud2VyIGlzIHRoYXQgT1NSIGV4aXRzCisgICAgLy8gYXJlIHJhcmUuIE91
ciB0aWVyaW5nIHN0cmF0ZWd5IGVuc3VyZXMgdGhpcy4gVGhpcyBpcyBiZWNhdXNlIGlmIGFuIE9T
UiBleGl0IGlzCisgICAgLy8gdGFrZW4gbW9yZSB0aGFuIH4xMDAgdGltZXMsIHdlIGpldHRpc29u
IHRoZSBERkcgY29kZSBibG9jayBhbG9uZyB3aXRoIGFsbCBvZiBpdHMKKyAgICAvLyBleGl0cy4g
SXQgaXMgaW1wb3NzaWJsZSBmb3IgYW4gT1NSIGV4aXQgLSBpLmUuIHRoZSBjb2RlIHdlIGNvbXBp
bGUgYmVsb3cgLSB0bworICAgIC8vIGV4ZWN1dGUgZnJlcXVlbnRseSBlbm91Z2ggZm9yIHRoZSBj
b2RlZ2VuIHRvIG1hdHRlciB0aGF0IG11Y2guIEl0IHByb2JhYmx5IG1hdHRlcnMKKyAgICAvLyBl
bm91Z2ggdGhhdCB3ZSBkb24ndCB3YW50IHRvIHR1cm4gdGhpcyBpbnRvIHNvbWUgc3VwZXItc2xv
dyBmdW5jdGlvbiBjYWxsLCBidXQgc28KKyAgICAvLyBsb25nIGFzIHdlJ3JlIGdlbmVyYXRpbmcg
c3RyYWlnaHQtbGluZSBjb2RlLCB0aGF0IGNvZGUgY2FuIGJlIHByZXR0eSBiYWQuIEFsc28KKyAg
ICAvLyBiZWNhdXNlIHdlIHRlbmQgdG8gZXhpdCBvbmx5IGFsb25nIG9uZSBPU1IgZXhpdCBmcm9t
IGFueSBERkcgY29kZSBibG9jayAtIHRoYXQncyBhbgorICAgIC8vIGVtcGlyaWNhbCByZXN1bHQg
dGhhdCB3ZSdyZSBleHRyZW1lbHkgY29uZmlkZW50IGFib3V0IC0gdGhlIGNvZGUgc2l6ZSBvZiB0
aGlzCisgICAgLy8gZG9lc24ndCBtYXR0ZXIgbXVjaC4gSGVuY2UgYW55IGF0dGVtcHQgdG8gb3B0
aW1pemUgdGhlIGNvZGVnZW4gaGVyZSBpcyBqdXN0IHB1cmVseQorICAgIC8vIGhhcm1mdWwgdG8g
dGhlIHN5c3RlbTogaXQgcHJvYmFibHkgd29uJ3QgcmVkdWNlIGVpdGhlciBuZXQgbWVtb3J5IHVz
YWdlIG9yIG5ldAorICAgIC8vIGV4ZWN1dGlvbiB0aW1lLiBJdCB3aWxsIG9ubHkgcHJldmVudCB1
cyBmcm9tIGNsZWFubHkgZGVjb3VwbGluZyAid2hlcmUgd2FzIHRoZQorICAgIC8vIHZhcmlhYmxl
IiBmcm9tICJob3cgd2FzIGl0IHJlcHJlc2VudGVkIiwgd2hpY2ggd2lsbCBtYWtlIGl0IG1vcmUg
ZGlmZmljdWx0IHRvIGFkZAorICAgIC8vIGZlYXR1cmVzIGluIHRoZSBmdXR1cmUgYW5kIGl0IHdp
bGwgbWFrZSBpdCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGJ1Z3MuCisKKyAgICAvLyBTYXZlIGFs
bCBzdGF0ZSBmcm9tIEdQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisKKyAgICBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIHNj
cmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisKKyAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgor
ICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgorICAgICAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6CisgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgc2Ny
YXRjaCArIGluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFuZCB2b2lsYSwg
YWxsIEdQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9t
IEZQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworCisgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5G
UFI6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHJlY292ZXJ5LmZwcigpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gTm93LCBhbGwgRlBScyBhcmUgYWxzbyBmcmVlLgorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUg
ZnJvbSB0aGUgc3RhY2sgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEZvciBzaW1wbGljaXR5IHdl
CisgICAgLy8gZG8gdGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3MgYWxyZWFkeSBpbiB0aGUgcmln
aHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyIGxh
dGVyLgorCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKKworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIENlbGxEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBEb3Vi
bGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6CisgICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
ICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sgcG9pbnRlciBhY2NvdW50cyBm
b3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNhZ2UgYXQgZXhpdC4gVGhpcworICAgIC8vIGNvdWxk
IHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUgREZHIHVzZWQuIFdlIG5lZWQgdG8gZG8gaXQgYmVm
b3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0cworICAgIC8vIHVzZWQgYnkgYmFzZWxpbmUuCisg
ICAgaml0LmFkZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAg
ICAgICAgICAtaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0ICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgIENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhl
biBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KKyAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOworICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGppdC5iYXNl
bGluZUNvZGVCbG9jaygpKTsKKworICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQg
dG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KKyAgICBqaXQuZW1pdE1hdGVyaWFsaXpl
VGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSk7CisKKyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0
b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgorCisgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsK
KworICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nh
c3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaW50IG9wZXJh
bmQgPSByZWcub2Zmc2V0KCk7CisKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIENlbGxEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGlu
ZGV4LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2gg
KyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQub3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBVbmJv
eGVkSW50NTJJbkdQUjoKKyAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBqaXQucnNoaWZ0NjQoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFu
ZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50
NTJJbkdQUjoKKyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBqaXQuYm94SW50NTIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwLCBH
UFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2
NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgor
ICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAg
aml0LnB1cmlmeU5hTihGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5ib3hEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAg
ICAgICAgaml0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0
ZWQ6CisgICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAg
ICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgeWV0LgorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB0aGF0
IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNv
dmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCisgICAgLy8gcmVjb3ZlcmllcyBkb24ndCBy
ZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1
bWUgdGhhdCB0aGV5IG9ubHkKKyAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2Nh
bHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMg
c2Vuc2libGUuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0
aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwor
ICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3Vs
ZG4ndCBkbyB0aGF0LgorCisgICAgZW1pdFJlc3RvcmVBcmd1bWVudHMoaml0LCBvcGVyYW5kcyk7
CisKKyAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdl
IGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRv
IHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQorICAgIC8v
IGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0
IGFuZCBjYWxsIGZyYW1lcworICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9s
ZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKKyAgICAvLyBPU1IgZXhp
dC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8K
KyAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0
byByZWVudGVyIG9wdGltaXplZAorICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9w
dGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0CisgICAgLy8gICAgIHdhbnQgdG8g
ZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAv
LworICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMg
c3RpbGwgcnVubmluZyB0aGUgb2xkCisgICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZl
ciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgIHBlcmZv
cm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8K
KyAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1l
ZGlhdGVseSByZXRyeSBPU1IKKyAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2Yg
T1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcworICAgIC8vICAgICBwYXJ0aWN1bGFybHkg
ZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZl
biB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKKyAgICAvLyAgICAgcnVubmlu
ZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJl
ZC4KKyAgICAvLworICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4
ZWN1dGUgY291bnRlciB0bworICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCisgICAgLy8gKGEpIGFuZCAo
YiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5
IGZvcgorICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2Vu
dGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCisgICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1
bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgorICAgIC8v
IGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJl
ZC4gT1NSIGVudHJ5CisgICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3Qg
aW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyBnb29kIGpvYiBvZiBl
bnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAor
ICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhl
Y3V0ZSBjb3VudGVyLgorICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBz
cGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVy
ZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ug
c2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpLgorCisgICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQpOworCisgICAgLy8gUmVp
ZnkgaW5saW5lZCBjYWxsIGZyYW1lcy4KKworICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0
LCBleGl0KTsKKworICAgIC8vIEFuZCBmaW5pc2guCisgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KHZtLCBqaXQsIGV4aXQpOworfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQgSklU
X09QRVJBVElPTiBPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJl
KEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQorewor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworCisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0lu
Zm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihkZWJ1Z0luZm9S
YXcpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7Cisg
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAg
ICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2spOworICAgIGRh
dGFMb2coIiBAIGV4aXQgIyIsIHZtLT5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+
Ynl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwg
Iikgd2l0aCAiKTsKKyAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291
bnRlcigpLAorICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAiLCBh
bHRlcm5hdGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIs
IG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFMb2coIm5vIGFsdGVybmF0
aXZlIGNvZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0aXNvbmVkKSIpOworICAgIGRhdGFM
b2coIiwgb3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCksICJc
biIpOworICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKKyAgICBjaGFy
KiBzY3JhdGNoUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewor
ICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgZGF0
YUxvZygiICIsIEdQUkluZm86OmRlYnVnTmFtZShncHIpLCAiOiIsIFJhd1BvaW50ZXIoKnJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4oc2NyYXRjaFBvaW50ZXIpKSk7CisgICAgICAgIHNjcmF0
Y2hQb2ludGVyICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorICAgIGRhdGFMb2co
IlxuIik7CisgICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBvZiBleGl0OiIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
CisgICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBk
YXRhTG9nKCIgIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwciksICI6Iik7CisgICAgICAgIHVpbnQ2
NF90IGJpdHMgPSAqcmVpbnRlcnByZXRfY2FzdF9wdHI8dWludDY0X3QqPihzY3JhdGNoUG9pbnRl
cik7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0X3B0cjxkb3VibGUq
PihzY3JhdGNoUG9pbnRlcik7CisgICAgICAgIGRhdGFMb2dGKCIlbGx4OiVsZiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oYml0cyksIHZhbHVlKTsKKyAgICAgICAgc2NyYXRjaFBvaW50ZXIgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICB9CisgICAgZGF0YUxvZygiXG4iKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMjIwMjk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFz
ZSB7CiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYs
IFZNJiwgY29uc3QgT1NSRXhpdCYsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiwgU3Bl
Y3VsYXRpb25SZWNvdmVyeSopOwogICAgIHN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRz
KENDYWxsSGVscGVycyYsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+Jik7CisgICAgc3Rh
dGljIHZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwogfTsKIAogc3RydWN0
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24g
MjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIz
Ml82NC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKSAm
JiBVU0UoSlNWQUxVRTMyXzY0KQotCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBPU1JFeGl0Ojpjb21w
aWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBj
b25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3Zl
cnkqIHJlY292ZXJ5KQotewotICAgIC8vIFByby1mb3JtYSBzdHVmZi4KLSAgICBpZiAoT3B0aW9u
czo6cHJpbnRFYWNoT1NSRXhpdCgpKSB7Ci0gICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKLSAgICAg
ICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7Ci0gICAgICAgIGRlYnVn
SW5mby0+a2luZCA9IGV4aXQubV9raW5kOwotICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAg
IGppdC5kZWJ1Z0NhbGwodm0sIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUs
IGRlYnVnSW5mbyk7Ci0gICAgfQotCi0gICAgLy8gUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVy
eS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgotICAgIC8vIHN0
YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBo
YXMgYWxyZWFkeSBtYWRlLgotICAgIAotICAgIGlmIChyZWNvdmVyeSkgewotICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAg
ICAgICAgICAgIGppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0
ZToKLSAgICAgICAgICAgIGppdC5zdWIzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKHJlY292ZXJ5
LT5pbW1lZGlhdGUoKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlZmluZSBzb21lIHZhbHVlIHBy
b2ZpbGUsIGlmIGFwcHJvcHJpYXRlLgotICAgIAotICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291
cmNlKSB7Ci0gICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2lu
ZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlv
biB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tIGhhcyBhbiBhcnJheSBwcm9maWxlLCB0aGVuCi0g
ICAgICAgICAgICAvLyByZWZpbmUgaXQuIElmIGl0IGRvZXNuJ3QsIHRoZW4gZG8gbm90aGluZy4g
VGhlIGxhdHRlciBjb3VsZCBoYXBwZW4gZm9yCi0gICAgICAgICAgICAvLyBob2lzdGVkIGNoZWNr
cywgb3IgY2hlY2tzIGVtaXR0ZWQgZm9yIG9wZXJhdGlvbnMgdGhhdCBkaWRuJ3QgaGF2ZSBhcnJh
eQotICAgICAgICAgICAgLy8gcHJvZmlsaW5nIC0gZWl0aGVyIG9wcyB0aGF0IGFyZW4ndCBhcnJh
eSBhY2Nlc3NlcyBhdCBhbGwsIG9yIHdlcmVuJ3QKLSAgICAgICAgICAgIC8vIGtub3duIHRvIGJl
IGFycmF5IGFjY2VzZXMgaW4gdGhlIGJ5dGVjb2RlLiBUaGUgbGF0dGVyIGNhc2UgaXMgYSBGSVhN
RQotICAgICAgICAgICAgLy8gd2hpbGUgdGhlIGZvcm1lciBjYXNlIGlzIGFuIG91dGNvbWUgb2Yg
YSBDaGVja1N0cnVjdHVyZSBub3Qga25vd2luZyB3aHkKLSAgICAgICAgICAgIC8vIGl0IHdhcyBl
bWl0dGVkIChjb3VsZCBiZSBlaXRoZXIgZHVlIHRvIGFuIGlubGluZSBjYWNoZSBvZiBhIHByb3Bl
cnR5Ci0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBhY2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBw
cm9maWxlKS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm90ZTogV2UgYXJlIGZyZWUg
dG8gYXNzdW1lIHRoYXQgdGhlIGpzVmFsdWVTb3VyY2UgaXMgYWxyZWFkeSBrbm93biB0bwotICAg
ICAgICAgICAgLy8gYmUgYSBjZWxsIHNpbmNlIGJvdGggQmFkQ2FjaGUgYW5kIEJhZEluZGV4aW5n
VHlwZSBleGl0cyBvY2N1ciBhZnRlcgotICAgICAgICAgICAgLy8gdGhlIGNlbGwgY2hlY2sgd291
bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAg
ICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KSkgewotICAgICAgICAgICAgICAgIEdQUlJlZyB1c2VkUmVnaXN0ZXIxOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyB1c2VkUmVnaXN0ZXIyOwotICAgICAgICAgICAgICAgIGlmIChleGl0
Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXIxID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpOwotICAgICAgICAgICAgICAg
ICAgICB1c2VkUmVnaXN0ZXIyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIxID0gZXhpdC5tX2pzVmFsdWVT
b3VyY2UucGF5bG9hZEdQUigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFs
dWVTb3VyY2UuaGFzS25vd25UYWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdp
c3RlcjIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UudGFn
R1BSKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDI7Ci0g
ICAgICAgICAgICAgICAgc2NyYXRjaDEgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIodXNlZFJlZ2lzdGVyMSwgdXNlZFJlZ2lzdGVyMik7Ci0gICAgICAgICAgICAgICAgc2NyYXRj
aDIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyMSwgdXNl
ZFJlZ2lzdGVyMiwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGppdC5wdXNoKHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMik7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlOwotICAgICAg
ICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHNjcmF0Y2gxOwotICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNB
ZGRyZXNzKCkpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoMSwgYXJyYXlQcm9maWxlLT5hZGRy
ZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkOChB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7Ci0gICAg
ICAgICAgICAgICAgaml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0gICAgICAgICAg
ICAgICAgaml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNz
KGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAgaml0
LnBvcChzY3JhdGNoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFs
dWVQcm9maWxlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRy
ZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVz
ZSBpdC4KLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFBheWxvYWQgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpKTsKLSAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCksIHNjcmF0Y2hQYXlsb2FkKTsK
LSAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoUGF5bG9hZCk7Ci0gICAgICAg
ICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaFRhZyk7Ci0KLSAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyBzY3JhdGNoKHNjcmF0Y2hUYWcsIHNjcmF0Y2hQYXlsb2FkKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKGV4aXQubV9qc1ZhbHVlU291
cmNlLmFzQWRkcmVzcygpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRS
ZXBvcnRWYWx1ZShqaXQsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFRhZyk7Ci0gICAgICAgICAgICAgICAgaml0LnBv
cFRvUmVzdG9yZShzY3JhdGNoUGF5bG9hZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihleGl0Lm1fanNW
YWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCkpOwotICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZl
KHNjcmF0Y2hUYWcpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZygpKSwgc2NyYXRjaFRhZyk7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUoc2NyYXRjaFRhZywgZXhpdC5tX2pzVmFs
dWVTb3VyY2UucGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBv
cnRWYWx1ZShqaXQsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hUYWcpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5l
bWl0UmVwb3J0VmFsdWUoaml0LCBleGl0Lm1fanNWYWx1ZVNvdXJjZS5yZWdzKCkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIC8vIERvIGEgc2ltcGxpZmllZCBPU1IgZXhpdC4gU2VlIERG
R09TUkV4aXRDb21waWxlcjY0LmNwcCdzIGNvbW1lbnQgcmVnYXJkaW5nIGhvdyBhbmQgd255IHdl
Ci0gICAgLy8gZG8gdGhpcyBzaW1wbGUgYXBwcm9hY2guCi0KLSAgICAvLyBTYXZlIGFsbCBzdGF0
ZSBmcm9tIEdQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCi0gICAgCi0gICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXplKCkpOwotICAgIEVuY29kZWRKU1ZhbHVlKiBzY3Jh
dGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBVbmJveGVk
SW50MzJJbkdQUjoKLSAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICBj
YXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
ICAgICAgICByZWNvdmVyeS5ncHIoKSwKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEluUGFpcjoK
LSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIHJlY292ZXJ5LnRhZ0dQ
UigpLAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRv
cio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcpOwotICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCi0gICAgICAgICAgICAgICAgcmVjb3ZlcnkucGF5bG9hZEdQUigpLAotICAgICAgICAgICAg
ICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRl
eCktPmFzQml0cy5wYXlsb2FkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICAvLyBOb3cgYWxsIEdQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCi0gICAgCi0gICAgLy8g
U2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgotICAgIAot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
Ci0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgotICAgICAgICBjYXNlIEluRlBSOgot
ICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2ggKyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZURvdWJs
ZShyZWNvdmVyeS5mcHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgYWxs
IEZQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCi0gICAgCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJv
bSB0aGUgc3RhY2sgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEZvciBzaW1wbGljaXR5IHdlCi0g
ICAgLy8gZG8gdGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3MgYWxyZWFkeSBpbiB0aGUgcmlnaHQg
cGxhY2Ugb24gdGhlIHN0YWNrLgotICAgIC8vIEl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyIGxhdGVy
LgotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBj
YXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAot
ICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDEpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDAsCi0gICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnRhZyk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAgICAgICAg
ICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgp
LT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sgcG9pbnRlciBhY2NvdW50cyBm
b3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNhZ2UgYXQgZXhpdC4gVGhpcwotICAgIC8vIGNvdWxk
IHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUgREZHIHVzZWQuIFdlIG5lZWQgdG8gZG8gaXQgYmVm
b3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0cwotICAgIC8vIHVzZWQgYnkgYmFzZWxpbmUuCi0g
ICAgaml0LmFkZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCi0gICAg
ICAgICAgICAtaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0ICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgIAotICAgIC8vIFJlc3RvcmUgdGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5k
IHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCi0gICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBqaXQuZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcihqaXQu
YmFzZWxpbmVDb2RlQmxvY2soKSk7Ci0KLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIo
KSkKLSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0pOwotCi0gICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5k
ZXgpOwotCi0gICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0
aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpbnQg
b3BlcmFuZCA9IHJlZy5vZmZzZXQoKTsKLQotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW5QYWlyOgotICAgICAgICBjYXNlIERpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGppdC5sb2FkMzIoCi0g
ICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2Ny
YXRjaCArIGluZGV4KS0+YXNCaXRzLnRhZywKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXls
b2FkLAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5z
dG9yZTMyKAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAotICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZTMyKAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxLAotICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAg
Y2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5wdXJp
ZnlOYU4oRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBS
SW5mbzo6ZnBSZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAg
ICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDMy
KAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkLAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwKLSAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBq
aXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKLSAgICAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAg
ICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDMy
KAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkLAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGpp
dC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAotICAgICAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Ci0g
ICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGppdC5s
b2FkMzIoCi0gICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQsCi0gICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksCi0g
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOwotICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCi0gICAg
ICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAg
ICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnRhZygpKSwKLSAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUz
MigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZWNvdmVy
eS5jb25zdGFudCgpLnBheWxvYWQoKSksCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAg
ICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIC8v
IERvbid0IGRvIHRoaXMsIHlldC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVyZWQsIGRv
IHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cwotICAgIC8v
IHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3
ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVmZXIgdG8gY2Vy
dGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUs
IG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJv
dWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6
ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBm
b3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLSAgICAKLSAgICBlbWl0UmVzdG9yZUFy
Z3VtZW50cyhqaXQsIG9wZXJhbmRzKTsKLQotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8g
dGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQs
IHNvIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMg
dGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJl
IHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwg
ZnJhbWUncwotICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNv
ZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9u
J3QKLSAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkg
KHNlZSAoYykgYmVsb3cpLgotICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24g
dGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAg
SklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFu
Y2UgdG8KLSAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGV4aXRlZC4KLSAgICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRy
eSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0g
ICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJl
cXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUg
Y29kZQotICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBp
bGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5k
YW5nZXIKLSAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3Vs
ZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBw
ZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAv
LyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291
bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5
IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFw
cGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0
eQotICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vz
bid0IHRha2UgY2FyZSBvZiAoZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWls
dXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sg
aGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5
MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2Ug
ZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3Vu
dGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCi0gICAgCi0gICAgaGFuZGxlRXhpdENvdW50
cyhqaXQsIGV4aXQpOwotICAgIAotICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCi0g
ICAgCi0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwotICAgIAotICAgIC8v
IEFuZCBmaW5pc2guCi0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwot
fQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAyMjAyOTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDM5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR09T
UkV4aXRDb21waWxlci5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQp
Ci0KLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCi0KLSNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQg
T1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NS
RXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKLXsKLSAgICBqaXQuaml0QXNzZXJ0VGFnc0luUGxh
Y2UoKTsKLQotICAgIC8vIFByby1mb3JtYSBzdHVmZi4KLSAgICBpZiAoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSB7Ci0gICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVi
dWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKLSAgICAgICAgZGVidWdJ
bmZvLT5jb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7Ci0gICAgICAgIGRlYnVnSW5mby0+a2lu
ZCA9IGV4aXQubV9raW5kOwotICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0ID0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAgIGppdC5kZWJ1
Z0NhbGwodm0sIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5m
byk7Ci0gICAgfQotCi0gICAgLy8gUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBv
bmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgotICAgIC8vIHN0YXJ0cyBtdXRh
dGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFk
eSBtYWRlLgotICAgIAotICAgIGlmIChyZWNvdmVyeSkgewotICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAg
IGppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAg
ICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVz
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJ
bW1lZGlhdGU6Ci0gICAgICAgICAgICBqaXQuc3ViMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihy
ZWNvdmVyeS0+aW1tZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGpp
dC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrOgotICAgICAgICAgICAgaml0LnhvcjY0KEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zlcnkt
PmRlc3QoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZWZp
bmUgc29tZSBhcnJheSBhbmQvb3IgdmFsdWUgcHJvZmlsZSwgaWYgYXBwcm9wcmlhdGUuCi0gICAg
Ci0gICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKLSAgICAgICAgaWYgKGV4aXQubV9r
aW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGluc3RydWN0aW9uIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20g
aGFzIGFuIGFycmF5IHByb2ZpbGUsIHRoZW4KLSAgICAgICAgICAgIC8vIHJlZmluZSBpdC4gSWYg
aXQgZG9lc24ndCwgdGhlbiBkbyBub3RoaW5nLiBUaGUgbGF0dGVyIGNvdWxkIGhhcHBlbiBmb3IK
LSAgICAgICAgICAgIC8vIGhvaXN0ZWQgY2hlY2tzLCBvciBjaGVja3MgZW1pdHRlZCBmb3Igb3Bl
cmF0aW9ucyB0aGF0IGRpZG4ndCBoYXZlIGFycmF5Ci0gICAgICAgICAgICAvLyBwcm9maWxpbmcg
LSBlaXRoZXIgb3BzIHRoYXQgYXJlbid0IGFycmF5IGFjY2Vzc2VzIGF0IGFsbCwgb3Igd2VyZW4n
dAotICAgICAgICAgICAgLy8ga25vd24gdG8gYmUgYXJyYXkgYWNjZXNlcyBpbiB0aGUgYnl0ZWNv
ZGUuIFRoZSBsYXR0ZXIgY2FzZSBpcyBhIEZJWE1FCi0gICAgICAgICAgICAvLyB3aGlsZSB0aGUg
Zm9ybWVyIGNhc2UgaXMgYW4gb3V0Y29tZSBvZiBhIENoZWNrU3RydWN0dXJlIG5vdCBrbm93aW5n
IHdoeQotICAgICAgICAgICAgLy8gaXQgd2FzIGVtaXR0ZWQgKGNvdWxkIGJlIGVpdGhlciBkdWUg
dG8gYW4gaW5saW5lIGNhY2hlIG9mIGEgcHJvcGVydHkKLSAgICAgICAgICAgIC8vIHByb3BlcnR5
IGFjY2Vzcywgb3IgZHVlIHRvIGFuIGFycmF5IHByb2ZpbGUpLgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlOwotICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIEdQUlJlZyB1c2VkUmVnaXN0
ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygp
KQotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIgPSBleGl0Lm1fanNWYWx1ZVNvdXJj
ZS5iYXNlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXIgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7Ci0gICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyOwotICAgICAgICAgICAgICAgIHNjcmF0Y2gxID0gQXNzZW1ibHlIZWxwZXJzOjpz
ZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaDIg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyLCBzY3JhdGNo
MSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2gyKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlOwotICAgICAgICAgICAgICAg
IGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHNjcmF0Y2gxOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKCkp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRj
aDEpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKHNjcmF0Y2gx
LCBzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAgaml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5
SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2Rl
cygpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2gyKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnBvcFRvUmVzdG9yZShzY3JhdGNoMSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMik7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpIHsKLSAgICAg
ICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFdlIGNhbid0IGJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIu
IFNvIHVzZSB0aGUgdGFnVHlwZU51bWJlclJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIC8vIHNp
bmNlIHdlIGtub3cgaG93IHRvIHJlc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgaml0LmxvYWQ2
NChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNz
KCkpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIHBy
b2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRS
ZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVSZWdzKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gV2hhdCBmb2xsb3dzIGlzIGFuIGludGVu
dGlvbmFsbHkgc2ltcGxlIE9TUiBleGl0IGltcGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzCi0g
ICAgLy8gZmFpcmx5IHBvb3IgY29kZSBidXQgaXMgdmVyeSBlYXN5IHRvIGhhY2suIEluIHBhcnRp
Y3VsYXIsIGl0IGR1bXBzIGFsbCBzdGF0ZSB0aGF0Ci0gICAgLy8gbmVlZHMgY29udmVyc2lvbiBp
bnRvIGEgc2NyYXRjaCBidWZmZXIgc28gdGhhdCBpbiBzdGVwIDYsIHdoZXJlIHdlIGFjdHVhbGx5
IGRvIHRoZQotICAgIC8vIGNvbnZlcnNpb25zLCB3ZSBrbm93IHRoYXQgYWxsIHRlbXAgcmVnaXN0
ZXJzIGFyZSBmcmVlIHRvIHVzZSBhbmQgdGhlIHZhcmlhYmxlIGlzCi0gICAgLy8gZGVmaW5pdGVs
eSBpbiBhIHdlbGwta25vd24gc3BvdCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIGl0IGhhZAotICAgIC8vIG9yaWdpbmFsbHkgYmVlbiBpbiBhIHJlZ2lzdGVyIG9y
IHNwaWxsZWQuIFRoaXMgYWxsb3dzIHVzIHRvIGRlY291cGxlICJ3aGVyZSB3YXMKLSAgICAvLyB0
aGUgdmFyaWFibGUiIGZyb20gImhvdyB3YXMgaXQgcmVwcmVzZW50ZWQiLiBDb25zaWRlciB0aGF0
IHRoZQotICAgIC8vIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrIHJlY292ZXJ5OiBpdCB0ZWxscyB1
cyB0aGF0IHRoZSB2YWx1ZSBpcyBpbiBhCi0gICAgLy8gcGFydGljdWxhciBwbGFjZSBhbmQgdGhh
dCB0aGF0IHBsYWNlIGhvbGRzIGFuIHVuYm94ZWQgaW50MzIuIFdlIGhhdmUgdHdvIGRpZmZlcmVu
dAotICAgIC8vIHBsYWNlcyB0aGF0IGEgdmFsdWUgY291bGQgYmUgKGRpc3BsYWNlZCwgcmVnaXN0
ZXIpIGFuZCBhIGJ1bmNoIG9mIGRpZmZlcmVudAotICAgIC8vIHdheXMgb2YgcmVwcmVzZW50aW5n
IGEgdmFsdWUuIFRoZSBudW1iZXIgb2YgcmVjb3ZlcmllcyBpcyB0d28gKiBhIGJ1bmNoLiBUaGUg
Y29kZQotICAgIC8vIGJlbG93IG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBoYXZlIHR3byArIGEgYnVu
Y2ggY2FzZXMgcmF0aGVyIHRoYW4gdHdvICogYSBidW5jaC4KLSAgICAvLyBPbmNlIHdlIGhhdmUg
bG9hZGVkIHRoZSB2YWx1ZSBmcm9tIHdoZXJldmVyIGl0IHdhcywgdGhlIHJlYm94aW5nIGlzIHRo
ZSBzYW1lCi0gICAgLy8gcmVnYXJkbGVzcyBvZiBpdHMgbG9jYXRpb24uIExpa2V3aXNlLCBiZWZv
cmUgd2UgZG8gdGhlIHJlYm94aW5nLCB0aGUgd2F5IHdlIGdldCB0bwotICAgIC8vIHRoZSB2YWx1
ZSAoaS5lLiB3aGVyZSB3ZSBsb2FkIGl0IGZyb20pIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Yg
aXRzIHR5cGUuIEJlY2F1c2UKLSAgICAvLyB0aGUgY29kZSBiZWxvdyBhbHdheXMgZHVtcHMgZXZl
cnl0aGluZyBpbnRvIGEgc2NyYXRjaCBidWZmZXIgZmlyc3QsIHRoZSB0d28KLSAgICAvLyBxdWVz
dGlvbnMgYmVjb21lIG9ydGhvZ29uYWwsIHdoaWNoIHNpbXBsaWZpZXMgYWRkaW5nIG5ldyB0eXBl
cyBhbmQgYWRkaW5nIG5ldwotICAgIC8vIGxvY2F0aW9ucy4KLSAgICAvLwotICAgIC8vIFRoaXMg
cmFpc2VzIHRoZSBxdWVzdGlvbjogZG9lcyB1c2luZyBzdWNoIGEgc3Vib3B0aW1hbCBpbXBsZW1l
bnRhdGlvbiBvZiBPU1IgZXhpdCwKLSAgICAvLyB3aGVyZSB3ZSBhbHdheXMgZW1pdCBjb2RlIHRv
IGR1bXAgYWxsIHN0YXRlIGludG8gYSBzY3JhdGNoIGJ1ZmZlciBvbmx5IHRvIHRoZW4KLSAgICAv
LyBkdW1wIGl0IHJpZ2h0IGJhY2sgaW50byB0aGUgc3RhY2ssIGh1cnQgdXMgaW4gYW55IHdheT8g
VGhlIGFzbndlciBpcyB0aGF0IE9TUiBleGl0cwotICAgIC8vIGFyZSByYXJlLiBPdXIgdGllcmlu
ZyBzdHJhdGVneSBlbnN1cmVzIHRoaXMuIFRoaXMgaXMgYmVjYXVzZSBpZiBhbiBPU1IgZXhpdCBp
cwotICAgIC8vIHRha2VuIG1vcmUgdGhhbiB+MTAwIHRpbWVzLCB3ZSBqZXR0aXNvbiB0aGUgREZH
IGNvZGUgYmxvY2sgYWxvbmcgd2l0aCBhbGwgb2YgaXRzCi0gICAgLy8gZXhpdHMuIEl0IGlzIGlt
cG9zc2libGUgZm9yIGFuIE9TUiBleGl0IC0gaS5lLiB0aGUgY29kZSB3ZSBjb21waWxlIGJlbG93
IC0gdG8KLSAgICAvLyBleGVjdXRlIGZyZXF1ZW50bHkgZW5vdWdoIGZvciB0aGUgY29kZWdlbiB0
byBtYXR0ZXIgdGhhdCBtdWNoLiBJdCBwcm9iYWJseSBtYXR0ZXJzCi0gICAgLy8gZW5vdWdoIHRo
YXQgd2UgZG9uJ3Qgd2FudCB0byB0dXJuIHRoaXMgaW50byBzb21lIHN1cGVyLXNsb3cgZnVuY3Rp
b24gY2FsbCwgYnV0IHNvCi0gICAgLy8gbG9uZyBhcyB3ZSdyZSBnZW5lcmF0aW5nIHN0cmFpZ2h0
LWxpbmUgY29kZSwgdGhhdCBjb2RlIGNhbiBiZSBwcmV0dHkgYmFkLiBBbHNvCi0gICAgLy8gYmVj
YXVzZSB3ZSB0ZW5kIHRvIGV4aXQgb25seSBhbG9uZyBvbmUgT1NSIGV4aXQgZnJvbSBhbnkgREZH
IGNvZGUgYmxvY2sgLSB0aGF0J3MgYW4KLSAgICAvLyBlbXBpcmljYWwgcmVzdWx0IHRoYXQgd2Un
cmUgZXh0cmVtZWx5IGNvbmZpZGVudCBhYm91dCAtIHRoZSBjb2RlIHNpemUgb2YgdGhpcwotICAg
IC8vIGRvZXNuJ3QgbWF0dGVyIG11Y2guIEhlbmNlIGFueSBhdHRlbXB0IHRvIG9wdGltaXplIHRo
ZSBjb2RlZ2VuIGhlcmUgaXMganVzdCBwdXJlbHkKLSAgICAvLyBoYXJtZnVsIHRvIHRoZSBzeXN0
ZW06IGl0IHByb2JhYmx5IHdvbid0IHJlZHVjZSBlaXRoZXIgbmV0IG1lbW9yeSB1c2FnZSBvciBu
ZXQKLSAgICAvLyBleGVjdXRpb24gdGltZS4gSXQgd2lsbCBvbmx5IHByZXZlbnQgdXMgZnJvbSBj
bGVhbmx5IGRlY291cGxpbmcgIndoZXJlIHdhcyB0aGUKLSAgICAvLyB2YXJpYWJsZSIgZnJvbSAi
aG93IHdhcyBpdCByZXByZXNlbnRlZCIsIHdoaWNoIHdpbGwgbWFrZSBpdCBtb3JlIGRpZmZpY3Vs
dCB0byBhZGQKLSAgICAvLyBmZWF0dXJlcyBpbiB0aGUgZnV0dXJlIGFuZCBpdCB3aWxsIG1ha2Ug
aXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBidWdzLgotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUg
ZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgotICAgIAotICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogb3BlcmFuZHMuc2l6ZSgpKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRj
aCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIAotICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW5HUFI6Ci0g
ICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgIGNhc2UgVW5ib3hlZEludDUy
SW5HUFI6Ci0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgIGNh
c2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlY292ZXJ5Lmdw
cigpLCBzY3JhdGNoICsgaW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIC8vIEFuZCB2b2lsYSwgYWxsIEdQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCi0KLSAg
ICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIEZQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCi0g
ICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKLSAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgIGNhc2UgSW5G
UFI6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3Jl
RG91YmxlKHJlY292ZXJ5LmZwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5v
dywgYWxsIEZQUnMgYXJlIGFsc28gZnJlZS4KLSAgICAKLSAgICAvLyBTYXZlIGFsbCBzdGF0ZSBm
cm9tIHRoZSBzdGFjayBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4gRm9yIHNpbXBsaWNpdHkgd2UK
LSAgICAvLyBkbyB0aGlzIGV2ZW4gZm9yIHN0YXRlIHRoYXQncyBhbHJlYWR5IGluIHRoZSByaWdo
dCBwbGFjZSBvbiB0aGUgc3RhY2suCi0gICAgLy8gSXQgbWFrZXMgdGhpbmdzIHNpbXBsZXIgbGF0
ZXIuCi0KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgp
OyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewotICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBD
ZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNh
c2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEludDUyRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNr
IHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdlIGF0IGV4aXQu
IFRoaXMKLSAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERGRyB1c2VkLiBX
ZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMKLSAgICAvLyB1
c2VkIGJ5IGJhc2VsaW5lLgotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKAotICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5k
ZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVvZihSZWdpc3Rl
cikpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBSZXN0b3JlIHRoZSBE
RkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1
c2VzLgotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgaml0LmVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3Ioaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOwotCi0gICAgLy8gVGhlIHRh
ZyByZWdpc3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93Lgot
ICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwotCi0gICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKLQotICAgIC8vIERvIGFsbCBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0g
ICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAm
JiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAg
ICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2Ug
Qm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAg
ICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQub3I2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkSW50
NTJJbkdQUjoKLSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
ICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQucnNoaWZ0NjQoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDAsIEdQ
UkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkU3Ry
aWN0SW50NTJJbkdQUjoKLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBqaXQuYm94SW50NTIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJh
bmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVW5i
b3hlZERvdWJsZUluRlBSOgotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3Jh
dGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCksIEZQUkluZm86OmZwUmVn
VDApOwotICAgICAgICAgICAgaml0LnB1cmlmeU5hTihGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIGppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgaml0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHJl
Y292ZXJ5LmNvbnN0YW50KCkpKSwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgLy8gRG9u
J3QgZG8gdGhpcywgeWV0LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHRo
aW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVy
eS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCi0gICAgLy8gcmVjb3ZlcmllcyBkb24ndCByZWN1
cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0byBhc3N1bWUg
dGhhdCB0aGV5IG9ubHkKLSAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMu
IEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vu
c2libGUuCi0gICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUgdGhhdCB0aGUg
YXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9mIGl0cwotICAg
IC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERGRyB3b3VsZG4n
dCBkbyB0aGF0LgotICAgIAotICAgIGVtaXRSZXN0b3JlQXJndW1lbnRzKGppdCwgb3BlcmFuZHMp
OwotICAgIAotICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2lu
Y2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxz
IGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0g
ICAgLy8gY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NS
IGV4aXQgYW5kIGNhbGwgZnJhbWVzCi0gICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0
aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwotICAgIC8vIE9T
UiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKLSAg
ICAvLwotICAgIC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hh
bmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2lu
Y2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAgICAgd2Fu
dCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgot
ICAgIC8vCi0gICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhh
dCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKLSAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFz
IG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KLSAgICAvLyAgICAg
cGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KLSAg
ICAvLwotICAgIC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90
IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgotICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3Jt
cyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgIHBhcnRpY3Vs
YXJseSBleHBlbnNpdmUuCi0gICAgLy8KLSAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVz
LCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAgICBy
dW5uaW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJp
Z2dlcmVkLgotICAgIC8vCi0gICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0
aGUgZXhlY3V0ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAoYSkg
YW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0
dW5pdHkgZm9yCi0gICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4g
RXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKLSAgICAvLyBmcmVxdWVudGx5IGFuZCB0
aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0g
ICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJp
Z2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRz
IGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vIGdvb2Qgam9i
IG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAo
ZCksCi0gICAgLy8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRo
ZSBleGVjdXRlIGNvdW50ZXIuCi0gICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVy
IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKLSAgICAvLyBsYXJnZXIg
dGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwg
YW5kIGlmCi0gICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBm
YWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKLSAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lz
ZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KLSAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuCi0gICAgCi0gICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQpOwotICAg
IAotICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCi0gICAgCi0gICAgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwotCi0gICAgLy8gQW5kIGZpbmlzaC4KLSAgICBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQodm0sIGppdCwgZXhpdCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCi0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLQotI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgotI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0UHJlcGFyYXRp
b24uaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgotI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewotCi12b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCi17
Ci0gICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7
IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgotICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0g
ICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQKLSAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgp
OwotICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQp
OwotICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFp
bGFibGVSZWdzKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICBq
aXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihpdGVyLT52YWx1ZSksIHJlZ3Mp
OwotICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUocmVncywgQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0gICAgICAgICAg
ICBqaXQuY29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnKCktPm1pbmlmaWVkREZHLmF0KGlkKS0+
aW5saW5lQ2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaW50IHN0YWNrT2Zmc2V0OwotICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFja09mZnNl
dCA9IDA7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaml0Lm1vdmUoCi0gICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVj
b3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8
fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICBqaXQubG9hZDMy
KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLAotICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGppdC5tb3ZlKAotICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNh
bGxGcmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgot
ICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgICAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAgICAKLSAgICAgICAgYWxy
ZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQpOwotICAgIH0KLX0KLQotdm9p
ZCBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKLQotICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKLSAgICAKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwotICAg
IAotICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUg
aW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKLSAgICAvLyByZWFsbHkgYmUgcHJv
Zml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0tPmhlYXApOwotCi0gICAg
dWludDMyX3QgZXhpdEluZGV4ID0gdm0tPm9zckV4aXRJbmRleDsKLSAgICBPU1JFeGl0JiBleGl0
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0gICAg
Ci0gICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKLSAgICAgICAgQVNTRVJUKGV4aXQubV9r
aW5kID09IEdlbmVyaWNVbndpbmQpOwotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAg
ICAgICAgCi0gICAgCi0gICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQu
bV9jb2RlT3JpZ2luKTsKLSAgICAKLSAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVz
LgotICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRzOwotICAgIGNvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmcoKS0+dmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxv
Y2ssIGV4aXQubV9jb2RlT3JpZ2luLCBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm1pbmlm
aWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzKTsKLSAgICAKLSAgICBTcGVjdWxh
dGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IDA7Ci0gICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4
ICE9IFVJTlRfTUFYKQotICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwotCi0gICAg
ewotICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7Ci0KLSAgICAgICAgaWYgKGV4
aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBhY3Rp
bmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5l
cmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxs
IGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwotICAgICAgICAgICAg
aml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgICAgICBqaXQuYWRkUHRyKAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJP
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAg
ICAgIGppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT5jb21waWxhdGlvbikgewotICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNl
JiBkYXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhp
dCgKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRh
YmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAgICAgICAgICAgZXhp
dC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsKLSAgICAg
ICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxw
ZXJzOjpBYnNvbHV0ZUFkZHJlc3MocHJvZmlsZXJFeGl0LT5jb3VudGVyQWRkcmVzcygpKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb21waWxlRXhpdChqaXQsICp2bSwgZXhpdCwgb3BlcmFuZHMs
IHJlY292ZXJ5KTsKLQotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJs
b2NrKTsKLSAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICAg
ICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9w
dGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAg
ICAgICAgICAgICgiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJh
bmRzID0gJXMiLAotICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9j
b2RlT3JpZ2luKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0
Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICAgICAg
dG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkp
KTsKLSAgICB9Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4aXQuY29k
ZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1f
Y29kZS5jb2RlKCkpKTsKLSAgICAKLSAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4
aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMjIw
Mjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgotI2luY2x1ZGUgIk9wZXJhbmRzLmgiCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjIwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE5OSw0NCArMjE5OSw2IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Qcm9jZXNzVHlwZVAKICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vz
c0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJMb2cgRnVsbCwgY2FsbGVkIGZyb20gaW5zaWRlIERG
Ry4iKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3Vs
YXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBz
Y3JhdGNoKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIFNwZWN1bGF0aW9uRmFpbHVyZURl
YnVnSW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJ
bmZvKj4oZGVidWdJbmZvUmF3KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5m
by0+Y29kZUJsb2NrOwotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCk7Ci0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29k
ZUJsb2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS0+b3NyRXhpdEluZGV4LCAiIChi
YyMiLCBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGRl
YnVnSW5mby0+a2luZCksICIpIHdpdGggIik7Ci0gICAgaWYgKGFsdGVybmF0aXZlKSB7Ci0gICAg
ICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2
ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKLSAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCks
Ci0gICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5hdGl2
ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRh
TG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25l
ZCkiKTsKLSAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JF
eGl0Q291bnRlcigpLCAiXG4iKTsKLSAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4
aXQ6Iik7Ci0gICAgY2hhciogc2NyYXRjaFBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2Ny
YXRjaCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIo
aSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKSwgIjoiLCBS
YXdQb2ludGVyKCpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHNjcmF0Y2hQb2ludGVyKSkp
OwotICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAg
IH0KLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2Yg
ZXhpdDoiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgewotICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIEZQUkluZm86OmRlYnVnTmFtZShmcHIpLCAiOiIp
OwotICAgICAgICB1aW50NjRfdCBiaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVpbnQ2NF90
Kj4oc2NyYXRjaFBvaW50ZXIpOwotICAgICAgICBkb3VibGUgdmFsdWUgPSAqcmVpbnRlcnByZXRf
Y2FzdF9wdHI8ZG91YmxlKj4oc2NyYXRjaFBvaW50ZXIpOwotICAgICAgICBkYXRhTG9nRigiJWxs
eDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7Ci0gICAgICAgIHNj
cmF0Y2hQb2ludGVyICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgfQotICAgIGRhdGFM
b2coIlxuIik7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2Nv
cGUqIHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDIyMDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMwLDggKzIzMCw2IEBAIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OwogCi12b2lkIEpJVF9PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFp
bHVyZShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopIFdURl9JTlRFUk5BTDsKLQogdm9pZCBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqLCBPU1JFeGl0QmFz
ZSopIFdURl9JTlRFUk5BTDsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMjAyOTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDggKzI5LDggQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317313</attachid>
            <date>2017-08-04 16:52:57 -0700</date>
            <delta_ts>2017-08-04 16:59:24 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-175214.patch</filename>
            <type>text/plain</type>
            <size>107906</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE3LTA4LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIERGRzo6T1NSRXhpdENvbXBpbGVyIG1ldGhvZHMgaW50byBERkc6Ok9TUkV4aXQgW3N0ZXAg
Ml0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUy
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzNzMzMzA4PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcHkgdGhlIDY0LWJpdCBhbmQgY29tbW9u
IG1ldGhvZHMgaW50byBERkdPU1JFeGl0LmNwcCwgYW5kIGRlbGV0ZSB0aGUgdW51c2VkCisgICAg
ICAgIERGR09TUkV4aXRDb21waWxlciBmaWxlcy4KKworICAgICAgICBBbHNvIHJlbmFtZWQgREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIHRvIERGR09TUkV4aXQzMl82NC5jcHAuCisKKyAgICAg
ICAgQWxzbyBtb3ZlIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoKSBpbnRv
IERGR09TUkV4aXQuY3BwLiAgSXQncyBvbmx5CisgICAgICAgIHVzZWQgYnkgY29tcGlsZU9TUkV4
aXQoKSwgYW5kIHdpbGwgYmUgY2hhbmdlZCB0byBub3QgYmUgYSBERkcgb3BlcmF0aW9uIGZ1bmN0
aW9uCisgICAgICAgIHdoZW4gd2UgdXNlIEpJVCBwcm9iZXMgZm9yIERGRyBPU1IgZXhpdHMgbGF0
ZXIgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTE0NC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21w
aWxlRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZGVidWdPcGVyYXRpb25Qcmlu
dFNwZWN1bGF0aW9uRmFpbHVyZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdDMyXzY0LmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAuCisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKwogMjAxNy0w
OC0wNCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogY2FwdHVyZSBhc3luYyBzdGFjayB0cmFjZSB3aGVuIHdvcmtlcnMvbWFpbiBjb250
ZXh0IHBvc3RzIGEgbWVzc2FnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsMTAgKzM3Niw4IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR09TUkVudHJ5LmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHT1NSRXhpdC5jcHAKKyAgICBkZmcvREZH
T1NSRXhpdDMyXzY0LmNwcAogICAgIGRmZy9ERkdPU1JFeGl0QmFzZS5jcHAKLSAgICBkZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAotICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAK
LSAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCiAgICAgZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEZ1enouY3BwCiAgICAgZGZnL0RGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NCwxMSAr
NzQ0LDggQEAKIAkJMEZCRjE1OEMxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkYxNThBMTlC
N0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldC5jcHAgKi87IH07CiAJCTBGQkYxNThEMTlCN0E1
MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAvKiBERkdC
bG9ja1NldElubGluZXMuaCAqLzsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERG
R09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IH07Ci0JCTBGQzA5
NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZGMTQ2OTNBRUYwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCAqLzsgfTsKLQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JF
eGl0Q29tcGlsZXI2NC5jcHAgKi87IH07Ci0JCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwICovOyB9OworCQkwRkMwOTc3NjE0Njk0M0IwMDBDRjI0NDIgLyogREZH
T1NSRXhpdDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAvKiBERkdPU1JFeGl0MzJfNjQuY3BwICov
OyB9OwogCQkwRkMwOTc5MTE0NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc4RTE0NkE2RjYz
MDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi87IH07Ci0JCTBGQzA5NzkyMTQ2QTZGNzMwMENG
MjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5jcHAgKi87IH07CiAJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdU
aHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi87IH07CiAJCTBGQzA5
N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdU
aHVua3MuaCAqLzsgfTsKIAkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDMjBDQjMxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwICovOyB9OwpAQCAtMzM0MiwxMiArMzMzOSw5IEBACiAJCTBGQkYxNThBMTlCN0E1
MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCbG9ja1NldC5jcHA7IHBhdGggPSBkZmcvREZHQmxvY2tTZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJGMTU4QjE5QjdBNTMxMDA2OTVERDAgLyog
REZHQmxvY2tTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Jsb2NrU2V0SW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Lmg7
IHBhdGggPSBkZmcvREZHT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZn
L0RGR09TUkV4aXRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkMw
OTc3MDE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAv
KiBERkdPU1JFeGl0MzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHT1NSRXhpdDMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0MzJfNjQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyog
REZHQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbi5o
OyBwYXRoID0gZGZnL0RGR0NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDMDk3OEYxNDZBNkY2MzAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXIuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzlGMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVGh1bmtzLmNwcDsgcGF0aCA9IGRmZy9ERkdUaHVua3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZH
VGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RodW5rcy5oOyBw
YXRoID0gZGZnL0RGR1RodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMy
MENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NzMsMTMgKzc0NjcsMTAgQEAKIAkJCQkwRkQ4QTMx
RTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJ
MEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKKwkJCQkwRkMwOTc3
NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdDMyXzY0LmNwcCAqLywKIAkJCQkwRjIzNUJF
NzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovLAogCQkJCTBGMjM1QkU4
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oICovLAogCQkJCTY1OTg3RjJDMTY3
RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggKi8sCi0JCQkJMEZD
MDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi8sCi0JCQkJ
MEZDMDk3NkYxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oICovLAotCQkJ
CTBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAg
Ki8sCi0JCQkJMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0
LmNwcCAqLywKIAkJCQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcCAqLywKIAkJCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmggKi8sCiAJCQkJMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4IC8q
IERGR09TUkV4aXRGdXp6LmNwcCAqLywKQEAgLTg2ODksNyArODY4MCw2IEBACiAJCQkJMEZDMDk3
NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdP
U1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4
MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0ODQsOSArMTA0NzQsNyBAQAogCQkJCTBGRDhBMzI1
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkMwOTc3NjE0
Njk0M0IwMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdP
U1JFeGl0MzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgy
QzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjM5MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlICJERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgotI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5j
bHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQzMl82NC5jcHAJKHJldmlzaW9uIDIyMDI5OCkJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA6MjIwMjk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R09TUkV4aXRDb21waWxlci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVF
MzJfNjQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxs
SGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zlcnkp
Cit7CisgICAgLy8gUHJvLWZvcm1hIHN0dWZmLgorICAgIGlmIChPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpIHsKKyAgICAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0lu
Zm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOworICAgICAgICBkZWJ1Z0luZm8t
PmNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICAgICAgZGVidWdJbmZvLT5raW5kID0g
ZXhpdC5tX2tpbmQ7CisgICAgICAgIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICAKKyAgICAgICAgaml0LmRlYnVnQ2Fs
bCh2bSwgZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsK
KyAgICB9CisKKyAgICAvLyBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCisgICAgLy8gc3RhcnRzIG11dGF0aW5n
IHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1h
ZGUuCisgICAgCisgICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgeworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgaml0
LnN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgorICAgICAgICAg
ICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgp
KSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmVmaW5lIHNvbWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBw
cm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKKyAgICAg
ICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4
aW5nVHlwZSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGluc3RydWN0aW9uIHRoYXQgdGhpcyBv
cmlnaW5hdGVkIGZyb20gaGFzIGFuIGFycmF5IHByb2ZpbGUsIHRoZW4KKyAgICAgICAgICAgIC8v
IHJlZmluZSBpdC4gSWYgaXQgZG9lc24ndCwgdGhlbiBkbyBub3RoaW5nLiBUaGUgbGF0dGVyIGNv
dWxkIGhhcHBlbiBmb3IKKyAgICAgICAgICAgIC8vIGhvaXN0ZWQgY2hlY2tzLCBvciBjaGVja3Mg
ZW1pdHRlZCBmb3Igb3BlcmF0aW9ucyB0aGF0IGRpZG4ndCBoYXZlIGFycmF5CisgICAgICAgICAg
ICAvLyBwcm9maWxpbmcgLSBlaXRoZXIgb3BzIHRoYXQgYXJlbid0IGFycmF5IGFjY2Vzc2VzIGF0
IGFsbCwgb3Igd2VyZW4ndAorICAgICAgICAgICAgLy8ga25vd24gdG8gYmUgYXJyYXkgYWNjZXNl
cyBpbiB0aGUgYnl0ZWNvZGUuIFRoZSBsYXR0ZXIgY2FzZSBpcyBhIEZJWE1FCisgICAgICAgICAg
ICAvLyB3aGlsZSB0aGUgZm9ybWVyIGNhc2UgaXMgYW4gb3V0Y29tZSBvZiBhIENoZWNrU3RydWN0
dXJlIG5vdCBrbm93aW5nIHdoeQorICAgICAgICAgICAgLy8gaXQgd2FzIGVtaXR0ZWQgKGNvdWxk
IGJlIGVpdGhlciBkdWUgdG8gYW4gaW5saW5lIGNhY2hlIG9mIGEgcHJvcGVydHkKKyAgICAgICAg
ICAgIC8vIHByb3BlcnR5IGFjY2Vzcywgb3IgZHVlIHRvIGFuIGFycmF5IHByb2ZpbGUpLgorICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBOb3RlOiBXZSBhcmUgZnJlZSB0byBhc3N1bWUgdGhh
dCB0aGUganNWYWx1ZVNvdXJjZSBpcyBhbHJlYWR5IGtub3duIHRvCisgICAgICAgICAgICAvLyBi
ZSBhIGNlbGwgc2luY2UgYm90aCBCYWRDYWNoZSBhbmQgQmFkSW5kZXhpbmdUeXBlIGV4aXRzIG9j
Y3VyIGFmdGVyCisgICAgICAgICAgICAvLyB0aGUgY2VsbCBjaGVjayB3b3VsZCBoYXZlIGFscmVh
ZHkgaGFwcGVuZWQuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgICAgICAgICBpZiAo
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHVzZWRSZWdpc3RlcjE7CisgICAgICAgICAgICAgICAgR1BS
UmVnIHVzZWRSZWdpc3RlcjI7CisgICAgICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291
cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjEgPSBl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdp
c3RlcjIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjEgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5oYXNL
bm93blRhZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcjIgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWdHUFIoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMjsKKyAgICAgICAgICAgICAg
ICBzY3JhdGNoMSA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0
ZXIxLCB1c2VkUmVnaXN0ZXIyKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoMiA9IEFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIxLCB1c2VkUmVnaXN0ZXIyLCBz
Y3JhdGNoMSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnB1c2goc2Ny
YXRjaDEpOworICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gyKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWU7CisgICAgICAgICAgICAgICAgaWYg
KGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gc2NyYXRjaDE7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5T2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBq
aXQubHNoaWZ0MzIoc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQub3Iz
MihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBqaXQucG9wKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0Y2gx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpIHsK
KyAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAg
ICAgICAgICAgICAgIC8vIFNhdmUgYSByZWdpc3RlciBzbyB3ZSBjYW4gdXNlIGl0LgorICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUGF5bG9hZCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoVGFnID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4
aXQubV9qc1ZhbHVlU291cmNlLmJhc2UoKSwgc2NyYXRjaFBheWxvYWQpOworICAgICAgICAgICAg
ICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2hQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXQu
cHVzaFRvU2F2ZShzY3JhdGNoVGFnKTsKKworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHNj
cmF0Y2goc2NyYXRjaFRhZywgc2NyYXRjaFBheWxvYWQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNz
KCksIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGpp
dCwgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnBvcFRv
UmVzdG9yZShzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hQYXlsb2FkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaGFzS25vd25UYWcoKSkgeworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoVGFnID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4aXQubV9qc1ZhbHVlU291cmNlLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaFRhZyk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZXhpdC5tX2pzVmFsdWVTb3VyY2UudGFnKCkpLCBzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZShzY3JhdGNoVGFnLCBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXls
b2FkR1BSKCkpOworICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwg
dmFsdWUpOworICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFRhZyk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1
ZShqaXQsIGV4aXQubV9qc1ZhbHVlU291cmNlLnJlZ3MoKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gRG8gYSBzaW1wbGlmaWVkIE9TUiBleGl0LiBTZWUgREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwJ3MgY29tbWVudCByZWdhcmRpbmcgaG93IGFuZCB3bnkgd2UKKyAgICAvLyBkbyB0
aGlzIHNpbXBsZSBhcHByb2FjaC4KKworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gR1BScyBp
bnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG9wZXJhbmRzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNo
QnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRh
QnVmZmVyKCkpIDogMDsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgor
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZENl
bGxJbkdQUjoKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHJlY292
ZXJ5LmdwcigpLAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAgICAg
aml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkudGFnR1BSKCksCisgICAgICAg
ICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCAr
IGluZGV4KS0+YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICByZWNvdmVyeS5wYXlsb2FkR1BSKCksCisgICAgICAgICAgICAgICAgJmJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBh
eWxvYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5v
dyBhbGwgR1BScyBhcmUgZnJlZSB0byByZXVzZS4KKyAgICAKKyAgICAvLyBTYXZlIGFsbCBzdGF0
ZSBmcm9tIEZQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgCisgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAg
ICAgCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2Fz
ZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHJlY292ZXJ5LmZw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBhbGwgRlBScyBhcmUgZnJl
ZSB0byByZXVzZS4KKyAgICAKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHRoZSBzdGFjayBp
bnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4gRm9yIHNpbXBsaWNpdHkgd2UKKyAgICAvLyBkbyB0aGlz
IGV2ZW4gZm9yIHN0YXRlIHRoYXQncyBhbHJlYWR5IGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUg
c3RhY2suCisgICAgLy8gSXQgbWFrZXMgdGhpbmdzIHNpbXBsZXIgbGF0ZXIuCisgICAgCisgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQm9vbGVhbkRp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAg
ICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3Jh
dGNoICsgaW5kZXgpLT5hc0JpdHMudGFnKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxLAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXls
b2FkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOZWVk
IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGFjY291bnRzIGZvciB0aGUgd29yc3Qt
Y2FzZSBzdGFjayB1c2FnZSBhdCBleGl0LiBUaGlzCisgICAgLy8gY291bGQgdG9hc3Qgc29tZSBz
dGFjayB0aGF0IHRoZSBERkcgdXNlZC4gV2UgbmVlZCB0byBkbyBpdCBiZWZvcmUgc3RvcmluZyB0
byBzdGFjayBvZmZzZXRzCisgICAgLy8gdXNlZCBieSBiYXNlbGluZS4KKyAgICBqaXQuYWRkUHRy
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIC1qaXQu
Y29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvckV4aXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRo
ZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOworICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGppdC5iYXNlbGluZUNvZGVC
bG9jaygpKTsKKworICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQorICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisK
KyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1
bHRzIGludG8gdGhlIHN0YWNrLgorICAgIAorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisKKyAgICAg
ICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGludCBvcGVyYW5kID0gcmVn
Lm9mZnNldCgpOworCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAg
ICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgp
LT5hc0JpdHMudGFnLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LnB1cmlmeU5hTihGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGlu
ZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLAorICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGlu
ZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAg
ICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNo
ICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJl
Y292ZXJ5LmNvbnN0YW50KCkudGFnKCkpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50KCku
cGF5bG9hZCgpKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
b3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgQ2xvbmVk
QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhp
cywgeWV0LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5v
dyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50
cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCisgICAgLy8gcmVjb3ZlcmllcyBk
b24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0
byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKKyAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBv
ZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3Rh
Y2sgaXMgc2Vuc2libGUuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUg
dGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9m
IGl0cworICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERG
RyB3b3VsZG4ndCBkbyB0aGF0LgorICAgIAorICAgIGVtaXRSZXN0b3JlQXJndW1lbnRzKGppdCwg
b3BlcmFuZHMpOworCisgICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVy
LiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyB0aGF0IGFsbCBuZXcg
Y2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1
dGUKKyAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1l
ZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0
aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCisgICAg
Ly8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVl
OgorICAgIC8vCisgICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMg
YSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKKyAgICAvLyAgICAgY29kZSBldmVudHVhbGx5
LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAg
ICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxv
dykuCisgICAgLy8KKyAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFj
ayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICBKSVQncyBjb2RlIGFu
ZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bworICAgIC8v
ICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVk
LgorICAgIC8vCisgICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3Vs
ZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3Ro
IGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgcGFy
dGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFp
bHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8g
ICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGlu
ZyB0cmlnZ2VyZWQuCisgICAgLy8KKyAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8g
c2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgorICAgIC8v
IChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBv
cHBvcnR1bml0eSBmb3IKKyAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVu
dHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAgIC8vIGZyZXF1ZW50bHkg
YW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2
ZXIKKyAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBi
ZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29w
IGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5CisgICAgLy8gZ29v
ZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJl
IG9mIChkKSwKKyAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KKyAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBu
dW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vIGxh
cmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJh
dGUpLCBhbmQgaWYKKyAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVy
IG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vIGNvdW50ZXIgdG8gMDsgb3Ro
ZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7
CisgICAgCisgICAgLy8gUmVpZnkgaW5saW5lZCBjYWxsIGZyYW1lcy4KKyAgICAKKyAgICByZWlm
eUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7CisgICAgCisgICAgLy8gQW5kIGZpbmlzaC4K
KyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQodm0sIGppdCwgZXhpdCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNW
QUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dDMyXzY0LmNwcAkocmV2aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlci5o
IgorI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0Uo
SlNWQUxVRTMyXzY0KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHJldmlzaW9uIDIyMDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEzIEBACiAjaW5jbHVkZSAi
QXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdN
YXlFeGl0LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVk
ZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTczLDYgKzc4LDU0NyBAQCB2
b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxpCiAgICAgbV9wYXRjaGFibGVD
b2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7CiB9CiAKK3ZvaWQgT1NSRXhp
dDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKK3sKKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGlu
dD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBu
b2RlIElEIHRvIG9wZXJhbmQuCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9w
ZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKKyAgICAgICAgICAgICYm
IHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRl
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNv
dmVyeS5ub2RlSUQoKTsKKyAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3Vt
ZW50cy5maW5kKGlkKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3Vt
ZW50cy5lbmQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IEpTVmFsdWVSZWdz
Ojp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOwor
ICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoaXRlci0+
dmFsdWUpLCByZWdzKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHJlZ3MsIENDYWxsSGVs
cGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KKyAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5kZmcoKS0+bWluaWZpZWRERkcuYXQo
aWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsKKworICAgICAgICBpbnQgc3RhY2tPZmZzZXQ7CisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBzdGFja09mZnNldCA9IGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YWNr
T2Zmc2V0ID0gMDsKKworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zl
cnkuY29uc3RhbnQoKS5hc0NlbGwoKSksCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgfQor
CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSwgR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgeworICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
KyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5z
dG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisKKyAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5hZGQo
aWQsIG9wZXJhbmQpOworICAgIH0KK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworCisgICAgaWYg
KHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxG
cmFtZUZvckNhdGNoID09IGV4ZWMpOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKworICAgIC8vIEl0J3Mgc29ydCBv
ZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9p
bmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0Modm0tPmhlYXApOworCisgICAgdWludDMyX3QgZXhpdEluZGV4ID0g
dm0tPm9zckV4aXRJbmRleDsKKyAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07CisKKyAgICBpZiAodm0tPmNhbGxGcmFtZUZv
ckNhdGNoKQorICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7Cisg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIAorICAgIHByZXBhcmVDb2RlT3JpZ2lu
Rm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7CisKKyAgICAvLyBDb21wdXRlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRz
OworICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+dmFyaWFibGVFdmVudFN0cmVhbS5y
ZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzKTsK
KworICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gMDsKKyAgICBpZiAoZXhpdC5t
X3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIHJlY292ZXJ5ID0gJmNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmcoKS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJ
bmRleF07CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKKwor
ICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgeworICAgICAgICAgICAg
Ly8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUg
aGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KKyAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJl
c3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCisgICAgICAgICAgICBqaXQu
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2go
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIGppdC5h
ZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2st
PnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICAgICAgaml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CisKKyAg
ICAgICAgaWYgKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikgeworICAgICAgICAgICAgUHJvZmlsZXI6OkRh
dGFiYXNlJiBkYXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICAg
ICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisKKyAgICAgICAgICAgIFByb2Zp
bGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKKyAg
ICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwg
Y29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgZXhpdC5tX2tp
bmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsKKyAgICAgICAgICAg
IGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MocHJvZmlsZXJFeGl0LT5jb3VudGVyQWRkcmVzcygpKSk7CisgICAgICAg
IH0KKworICAgICAgICBjb21waWxlRXhpdChqaXQsICp2bSwgZXhpdCwgb3BlcmFuZHMsIHJlY292
ZXJ5KTsKKworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsK
KyAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAorICAgICAgICAgICAgc2hv
dWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6
OnZlcmJvc2VERkdPU1JFeGl0KCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
ICAgICgiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0g
JXMiLAorICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3Jp
Z2luKS5kYXRhKCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2lu
ZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCisgICAgICAgICAgICAgICAgdG9DU3Ry
aW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhpdC5jb2RlTG9jYXRpb25G
b3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9jb2RlLmNvZGUo
KSkpOworCisgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworI2lmIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQg
T1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT1NS
RXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3sKKyAgICBqaXQuaml0QXNzZXJ0VGFnc0luUGxh
Y2UoKTsKKworICAgIC8vIFByby1mb3JtYSBzdHVmZi4KKyAgICBpZiAoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSB7CisgICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVi
dWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICAgICAgZGVidWdJ
bmZvLT5jb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgICAgIGRlYnVnSW5mby0+a2lu
ZCA9IGV4aXQubV9raW5kOworICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0ID0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKworICAgICAgICBqaXQuZGVidWdDYWxsKHZt
LCBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworICAg
IH0KKworICAgIC8vIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21l
cyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3Rh
dGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4K
KworICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIGppdC5zdWIzMihy
ZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgaml0Lm9yNjQo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Cisg
ICAgICAgICAgICBqaXQuc3ViMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihyZWNvdmVyeS0+aW1t
ZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAg
ICAgICAgaml0LnhvcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBSZWZpbmUgc29tZSBhcnJheSBhbmQvb3IgdmFsdWUgcHJvZmlsZSwg
aWYgYXBwcm9wcmlhdGUuCisKKyAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgeworICAg
ICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5k
ZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB0aGlz
IG9yaWdpbmF0ZWQgZnJvbSBoYXMgYW4gYXJyYXkgcHJvZmlsZSwgdGhlbgorICAgICAgICAgICAg
Ly8gcmVmaW5lIGl0LiBJZiBpdCBkb2Vzbid0LCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBsYXR0ZXIg
Y291bGQgaGFwcGVuIGZvcgorICAgICAgICAgICAgLy8gaG9pc3RlZCBjaGVja3MsIG9yIGNoZWNr
cyBlbWl0dGVkIGZvciBvcGVyYXRpb25zIHRoYXQgZGlkbid0IGhhdmUgYXJyYXkKKyAgICAgICAg
ICAgIC8vIHByb2ZpbGluZyAtIGVpdGhlciBvcHMgdGhhdCBhcmVuJ3QgYXJyYXkgYWNjZXNzZXMg
YXQgYWxsLCBvciB3ZXJlbid0CisgICAgICAgICAgICAvLyBrbm93biB0byBiZSBhcnJheSBhY2Nl
c2VzIGluIHRoZSBieXRlY29kZS4gVGhlIGxhdHRlciBjYXNlIGlzIGEgRklYTUUKKyAgICAgICAg
ICAgIC8vIHdoaWxlIHRoZSBmb3JtZXIgY2FzZSBpcyBhbiBvdXRjb21lIG9mIGEgQ2hlY2tTdHJ1
Y3R1cmUgbm90IGtub3dpbmcgd2h5CisgICAgICAgICAgICAvLyBpdCB3YXMgZW1pdHRlZCAoY291
bGQgYmUgZWl0aGVyIGR1ZSB0byBhbiBpbmxpbmUgY2FjaGUgb2YgYSBwcm9wZXJ0eQorICAgICAg
ICAgICAgLy8gcHJvcGVydHkgYWNjZXNzLCBvciBkdWUgdG8gYW4gYXJyYXkgcHJvZmlsZSkuCisK
KyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9y
RXhpdFByb2ZpbGU7CisgICAgICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgR1BSUmVnIHVzZWRS
ZWdpc3RlcjsKKyAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRy
ZXNzKCkpCisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlciA9IGV4aXQubV9qc1ZhbHVl
U291cmNlLmJhc2UoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHVzZWRSZWdpc3RlciA9IGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpOworCisgICAgICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMjsK
KyAgICAgICAgICAgICAgICBzY3JhdGNoMSA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUih1c2VkUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3Rlciwgc2NyYXRjaDEpOworCisgICAg
ICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgICAgICAgICBqaXQucHVz
aFRvU2F2ZShzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNj
cmF0Y2gyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBq
aXQucHVzaChzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gy
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWU7Cisg
ICAgICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NyYXRjaDE7CisgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJj
ZS5hc0FkZHJlc3MoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKTsKKworICAgICAg
ICAgICAgICAgIGppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgaml0
LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gx
KTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihzY3JhdGNoMSwg
c2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJseUhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMo
KSkpOworCisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnBvcFRvUmVzdG9yZShzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5wb3Aoc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUg
PSBleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVT
b3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBzdXJl
IHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3Jl
IGl0LgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQs
IEpTVmFsdWVSZWdzKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBKU1ZhbHVlUmVn
cyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gV2hhdCBmb2xsb3dzIGlzIGFuIGludGVudGlvbmFsbHkgc2ltcGxlIE9TUiBleGl0IGltcGxl
bWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzCisgICAgLy8gZmFpcmx5IHBvb3IgY29kZSBidXQgaXMg
dmVyeSBlYXN5IHRvIGhhY2suIEluIHBhcnRpY3VsYXIsIGl0IGR1bXBzIGFsbCBzdGF0ZSB0aGF0
CisgICAgLy8gbmVlZHMgY29udmVyc2lvbiBpbnRvIGEgc2NyYXRjaCBidWZmZXIgc28gdGhhdCBp
biBzdGVwIDYsIHdoZXJlIHdlIGFjdHVhbGx5IGRvIHRoZQorICAgIC8vIGNvbnZlcnNpb25zLCB3
ZSBrbm93IHRoYXQgYWxsIHRlbXAgcmVnaXN0ZXJzIGFyZSBmcmVlIHRvIHVzZSBhbmQgdGhlIHZh
cmlhYmxlIGlzCisgICAgLy8gZGVmaW5pdGVseSBpbiBhIHdlbGwta25vd24gc3BvdCBpbiB0aGUg
c2NyYXRjaCBidWZmZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGhhZAorICAgIC8vIG9yaWdp
bmFsbHkgYmVlbiBpbiBhIHJlZ2lzdGVyIG9yIHNwaWxsZWQuIFRoaXMgYWxsb3dzIHVzIHRvIGRl
Y291cGxlICJ3aGVyZSB3YXMKKyAgICAvLyB0aGUgdmFyaWFibGUiIGZyb20gImhvdyB3YXMgaXQg
cmVwcmVzZW50ZWQiLiBDb25zaWRlciB0aGF0IHRoZQorICAgIC8vIEludDMyRGlzcGxhY2VkSW5K
U1N0YWNrIHJlY292ZXJ5OiBpdCB0ZWxscyB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBpbiBhCisgICAg
Ly8gcGFydGljdWxhciBwbGFjZSBhbmQgdGhhdCB0aGF0IHBsYWNlIGhvbGRzIGFuIHVuYm94ZWQg
aW50MzIuIFdlIGhhdmUgdHdvIGRpZmZlcmVudAorICAgIC8vIHBsYWNlcyB0aGF0IGEgdmFsdWUg
Y291bGQgYmUgKGRpc3BsYWNlZCwgcmVnaXN0ZXIpIGFuZCBhIGJ1bmNoIG9mIGRpZmZlcmVudAor
ICAgIC8vIHdheXMgb2YgcmVwcmVzZW50aW5nIGEgdmFsdWUuIFRoZSBudW1iZXIgb2YgcmVjb3Zl
cmllcyBpcyB0d28gKiBhIGJ1bmNoLiBUaGUgY29kZQorICAgIC8vIGJlbG93IG1lYW5zIHRoYXQg
d2UgaGF2ZSB0byBoYXZlIHR3byArIGEgYnVuY2ggY2FzZXMgcmF0aGVyIHRoYW4gdHdvICogYSBi
dW5jaC4KKyAgICAvLyBPbmNlIHdlIGhhdmUgbG9hZGVkIHRoZSB2YWx1ZSBmcm9tIHdoZXJldmVy
IGl0IHdhcywgdGhlIHJlYm94aW5nIGlzIHRoZSBzYW1lCisgICAgLy8gcmVnYXJkbGVzcyBvZiBp
dHMgbG9jYXRpb24uIExpa2V3aXNlLCBiZWZvcmUgd2UgZG8gdGhlIHJlYm94aW5nLCB0aGUgd2F5
IHdlIGdldCB0bworICAgIC8vIHRoZSB2YWx1ZSAoaS5lLiB3aGVyZSB3ZSBsb2FkIGl0IGZyb20p
IGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuIEJlY2F1c2UKKyAgICAvLyB0aGUg
Y29kZSBiZWxvdyBhbHdheXMgZHVtcHMgZXZlcnl0aGluZyBpbnRvIGEgc2NyYXRjaCBidWZmZXIg
Zmlyc3QsIHRoZSB0d28KKyAgICAvLyBxdWVzdGlvbnMgYmVjb21lIG9ydGhvZ29uYWwsIHdoaWNo
IHNpbXBsaWZpZXMgYWRkaW5nIG5ldyB0eXBlcyBhbmQgYWRkaW5nIG5ldworICAgIC8vIGxvY2F0
aW9ucy4KKyAgICAvLworICAgIC8vIFRoaXMgcmFpc2VzIHRoZSBxdWVzdGlvbjogZG9lcyB1c2lu
ZyBzdWNoIGEgc3Vib3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBPU1IgZXhpdCwKKyAgICAvLyB3
aGVyZSB3ZSBhbHdheXMgZW1pdCBjb2RlIHRvIGR1bXAgYWxsIHN0YXRlIGludG8gYSBzY3JhdGNo
IGJ1ZmZlciBvbmx5IHRvIHRoZW4KKyAgICAvLyBkdW1wIGl0IHJpZ2h0IGJhY2sgaW50byB0aGUg
c3RhY2ssIGh1cnQgdXMgaW4gYW55IHdheT8gVGhlIGFzbndlciBpcyB0aGF0IE9TUiBleGl0cwor
ICAgIC8vIGFyZSByYXJlLiBPdXIgdGllcmluZyBzdHJhdGVneSBlbnN1cmVzIHRoaXMuIFRoaXMg
aXMgYmVjYXVzZSBpZiBhbiBPU1IgZXhpdCBpcworICAgIC8vIHRha2VuIG1vcmUgdGhhbiB+MTAw
IHRpbWVzLCB3ZSBqZXR0aXNvbiB0aGUgREZHIGNvZGUgYmxvY2sgYWxvbmcgd2l0aCBhbGwgb2Yg
aXRzCisgICAgLy8gZXhpdHMuIEl0IGlzIGltcG9zc2libGUgZm9yIGFuIE9TUiBleGl0IC0gaS5l
LiB0aGUgY29kZSB3ZSBjb21waWxlIGJlbG93IC0gdG8KKyAgICAvLyBleGVjdXRlIGZyZXF1ZW50
bHkgZW5vdWdoIGZvciB0aGUgY29kZWdlbiB0byBtYXR0ZXIgdGhhdCBtdWNoLiBJdCBwcm9iYWJs
eSBtYXR0ZXJzCisgICAgLy8gZW5vdWdoIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB0dXJuIHRoaXMg
aW50byBzb21lIHN1cGVyLXNsb3cgZnVuY3Rpb24gY2FsbCwgYnV0IHNvCisgICAgLy8gbG9uZyBh
cyB3ZSdyZSBnZW5lcmF0aW5nIHN0cmFpZ2h0LWxpbmUgY29kZSwgdGhhdCBjb2RlIGNhbiBiZSBw
cmV0dHkgYmFkLiBBbHNvCisgICAgLy8gYmVjYXVzZSB3ZSB0ZW5kIHRvIGV4aXQgb25seSBhbG9u
ZyBvbmUgT1NSIGV4aXQgZnJvbSBhbnkgREZHIGNvZGUgYmxvY2sgLSB0aGF0J3MgYW4KKyAgICAv
LyBlbXBpcmljYWwgcmVzdWx0IHRoYXQgd2UncmUgZXh0cmVtZWx5IGNvbmZpZGVudCBhYm91dCAt
IHRoZSBjb2RlIHNpemUgb2YgdGhpcworICAgIC8vIGRvZXNuJ3QgbWF0dGVyIG11Y2guIEhlbmNl
IGFueSBhdHRlbXB0IHRvIG9wdGltaXplIHRoZSBjb2RlZ2VuIGhlcmUgaXMganVzdCBwdXJlbHkK
KyAgICAvLyBoYXJtZnVsIHRvIHRoZSBzeXN0ZW06IGl0IHByb2JhYmx5IHdvbid0IHJlZHVjZSBl
aXRoZXIgbmV0IG1lbW9yeSB1c2FnZSBvciBuZXQKKyAgICAvLyBleGVjdXRpb24gdGltZS4gSXQg
d2lsbCBvbmx5IHByZXZlbnQgdXMgZnJvbSBjbGVhbmx5IGRlY291cGxpbmcgIndoZXJlIHdhcyB0
aGUKKyAgICAvLyB2YXJpYWJsZSIgZnJvbSAiaG93IHdhcyBpdCByZXByZXNlbnRlZCIsIHdoaWNo
IHdpbGwgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBhZGQKKyAgICAvLyBmZWF0dXJlcyBpbiB0
aGUgZnV0dXJlIGFuZCBpdCB3aWxsIG1ha2UgaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBidWdz
LgorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVm
ZmVyLgorCisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXplKCkpOworICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CisKKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OworCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBV
bmJveGVkSW50NTJJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICAgICAgaml0LnN0b3JlNjQo
cmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBBbmQgdm9pbGEsIGFsbCBHUFJzIGFyZSBmcmVlIHRvIHJldXNlLgorCisgICAgLy8g
U2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgorCisgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKKworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNh
c2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBpbmRleCks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5m
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5vdywgYWxsIEZQUnMgYXJlIGFsc28gZnJlZS4KKworICAg
IC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVy
LiBGb3Igc2ltcGxpY2l0eSB3ZQorICAgIC8vIGRvIHRoaXMgZXZlbiBmb3Igc3RhdGUgdGhhdCdz
IGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyBJdCBtYWtl
cyB0aGluZ3Mgc2ltcGxlciBsYXRlci4KKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisKKyAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6
CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIElu
dDUyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNr
IHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdlIGF0IGV4aXQu
IFRoaXMKKyAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERGRyB1c2VkLiBX
ZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMKKyAgICAvLyB1
c2VkIGJ5IGJhc2VsaW5lLgorICAgIGppdC5hZGRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5k
ZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVvZihSZWdpc3Rl
cikpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIERGRyBj
YWxsZWUgc2F2ZXMgYW5kIHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUgSklUIHVzZXMu
CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBqaXQuZW1pdFNhdmVDYWxs
ZWVTYXZlc0ZvcihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSk7CisKKyAgICAvLyBUaGUgdGFnIHJl
Z2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJpZXMgYmVsb3cuCisgICAg
aml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworCisgICAgLy8gRG8gYWxsIGRhdGEgZm9ybWF0
IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KKworICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0
ZXJGb3JJbmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRv
TG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworCisgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2Fz
ZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBqaXQu
bG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAg
aml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CisgICAgICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnJzaGlmdDY0KAorICAgICAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91
bnQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuYm94SW50NTIoR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmJveEludDUyKEdQUkluZm86OnJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFVu
Ym94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6
CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2Ny
YXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25z
dGFudCgpKSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRGlyZWN0QXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHlldC4KKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVyZWQsIGRv
IHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cworICAgIC8v
IHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3
ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5CisgICAgLy8gcmVmZXIgdG8gY2Vy
dGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUs
IG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJv
dWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6
ZWQgb3V0c2lkZSBvZiBpdHMKKyAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBm
b3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KKworICAgIGVtaXRSZXN0b3JlQXJndW1l
bnRzKGppdCwgb3BlcmFuZHMpOworCisgICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0
ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyB0aGF0
IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28g
dGhlIGV4ZWN1dGUKKyAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0
IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyB0aGF0IHdlcmUgc3Rp
bGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFt
ZSdzCisgICAgLy8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBl
eGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKKyAgICAvLyAgICAgY29kZSBl
dmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAor
ICAgIC8vICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2Vl
IChjKSBiZWxvdykuCisgICAgLy8KKyAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUg
Y2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICBKSVQn
cyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0
bworICAgIC8vICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2Un
dmUgZXhpdGVkLgorICAgIC8vCisgICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBl
eGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgIGVudHJ5LCBz
aW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAv
LyAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vIChkKSBGcmVxdWVu
dCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2Rl
CisgICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRp
b24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8KKyAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdk
IGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdl
cgorICAgIC8vIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRl
bGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKKyAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZv
cm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAgIC8vIGZy
ZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVy
IHdpbGwgbmV2ZXIKKyAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2ls
bCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vIHdpbGwgb25seSBoYXBwZW4g
aWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Cisg
ICAgLy8gZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3Qg
dGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUg
d291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KKyAgICAvLyBTbyB3ZSBjaGVjayBoZXJl
IGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQor
ICAgIC8vIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBz
dWNjZXNzIHJhdGUpLCBhbmQgaWYKKyAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91
Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vIGNvdW50ZXIg
dG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vIGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKworICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBl
eGl0KTsKKworICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCisKKyAgICByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7CisKKyAgICAvLyBBbmQgZmluaXNoLgorICAgIGFk
anVzdEFuZEp1bXBUb1RhcmdldCh2bSwgaml0LCBleGl0KTsKK30KKyNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQorCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6ZGVidWdPcGVyYXRpb25Qcmlu
dFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRlYnVnSW5mb1Jhdywg
dm9pZCogc2NyYXRjaCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIFNwZWN1bGF0aW9uRmFpbHVy
ZURlYnVnSW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRpb25GYWlsdXJlRGVi
dWdJbmZvKj4oZGVidWdJbmZvUmF3KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVn
SW5mby0+Y29kZUJsb2NrOworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCk7CisgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAq
Y29kZUJsb2NrKTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS0+b3NyRXhpdEluZGV4LCAi
IChiYyMiLCBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5n
KGRlYnVnSW5mby0+a2luZCksICIpIHdpdGggIik7CisgICAgaWYgKGFsdGVybmF0aXZlKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAiLCBhbHRlcm5h
dGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIsIHJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
KCksCisgICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAiLCBhbHRlcm5h
dGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworICAgIH0gZWxzZQorICAgICAgICBk
YXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlz
b25lZCkiKTsKKyAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5v
c3JFeGl0Q291bnRlcigpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9m
IGV4aXQ6Iik7CisgICAgY2hhciogc2NyYXRjaFBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
c2NyYXRjaCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoaSk7CisgICAgICAgIGRhdGFMb2coIiAiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKSwgIjoi
LCBSYXdQb2ludGVyKCpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHNjcmF0Y2hQb2ludGVy
KSkpOworICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgIH0KKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUg
b2YgZXhpdDoiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgZGF0YUxvZygiICIsIEZQUkluZm86OmRlYnVnTmFtZShmcHIpLCAi
OiIpOworICAgICAgICB1aW50NjRfdCBiaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVpbnQ2
NF90Kj4oc2NyYXRjaFBvaW50ZXIpOworICAgICAgICBkb3VibGUgdmFsdWUgPSAqcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8ZG91YmxlKj4oc2NyYXRjaFBvaW50ZXIpOworICAgICAgICBkYXRhTG9nRigi
JWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7CisgICAgICAg
IHNjcmF0Y2hQb2ludGVyICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorICAgIGRh
dGFMb2coIlxuIik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgc3RydWN0IE9TUkV4aXQg
OiBwdWJsaWMgT1NSRXhpdEJhc2UgewogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBjb21waWxl
RXhpdChDQ2FsbEhlbHBlcnMmLCBWTSYsIGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5PiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICBzdGF0aWMgdm9pZCBl
bWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5PiYpOworICAgIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Q
cmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopIFdURl9JTlRF
Uk5BTDsKIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8gewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIz
Ml82NC5jcHAJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDExICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCi0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKLQotI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKLSNpbmNs
dWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0K
LXZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29u
c3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRz
LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKLXsKLSAgICAvLyBQcm8tZm9ybWEgc3R1
ZmYuCi0gICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAgICAgICBTcGVj
dWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1
cmVEZWJ1Z0luZm87Ci0gICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNvZGVCbG9j
aygpOwotICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVi
dWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7
Ci0gICAgICAgIAotICAgICAgICBqaXQuZGVidWdDYWxsKHZtLCBkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLQotICAgIC8vIFBlcmZvcm0g
c3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBv
cGVyYXRpb24KLSAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0
aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBpZiAocmVjb3Zl
cnkpIHsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
U3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICBqaXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCBy
ZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU3Bl
Y3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICBqaXQuc3ViMzIoQXNzZW1ibHlIZWxw
ZXJzOjpJbW0zMihyZWNvdmVyeS0+aW1tZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQm9vbGVhblNwZWN1
bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBS
ZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KLSAgICAKLSAgICBpZiAo
ISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFk
Q2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICAv
LyBJZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbSBoYXMgYW4gYXJy
YXkgcHJvZmlsZSwgdGhlbgotICAgICAgICAgICAgLy8gcmVmaW5lIGl0LiBJZiBpdCBkb2Vzbid0
LCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBsYXR0ZXIgY291bGQgaGFwcGVuIGZvcgotICAgICAgICAg
ICAgLy8gaG9pc3RlZCBjaGVja3MsIG9yIGNoZWNrcyBlbWl0dGVkIGZvciBvcGVyYXRpb25zIHRo
YXQgZGlkbid0IGhhdmUgYXJyYXkKLSAgICAgICAgICAgIC8vIHByb2ZpbGluZyAtIGVpdGhlciBv
cHMgdGhhdCBhcmVuJ3QgYXJyYXkgYWNjZXNzZXMgYXQgYWxsLCBvciB3ZXJlbid0Ci0gICAgICAg
ICAgICAvLyBrbm93biB0byBiZSBhcnJheSBhY2Nlc2VzIGluIHRoZSBieXRlY29kZS4gVGhlIGxh
dHRlciBjYXNlIGlzIGEgRklYTUUKLSAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBmb3JtZXIgY2Fz
ZSBpcyBhbiBvdXRjb21lIG9mIGEgQ2hlY2tTdHJ1Y3R1cmUgbm90IGtub3dpbmcgd2h5Ci0gICAg
ICAgICAgICAvLyBpdCB3YXMgZW1pdHRlZCAoY291bGQgYmUgZWl0aGVyIGR1ZSB0byBhbiBpbmxp
bmUgY2FjaGUgb2YgYSBwcm9wZXJ0eQotICAgICAgICAgICAgLy8gcHJvcGVydHkgYWNjZXNzLCBv
ciBkdWUgdG8gYW4gYXJyYXkgcHJvZmlsZSkuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IE5vdGU6IFdlIGFyZSBmcmVlIHRvIGFzc3VtZSB0aGF0IHRoZSBqc1ZhbHVlU291cmNlIGlzIGFs
cmVhZHkga25vd24gdG8KLSAgICAgICAgICAgIC8vIGJlIGEgY2VsbCBzaW5jZSBib3RoIEJhZENh
Y2hlIGFuZCBCYWRJbmRleGluZ1R5cGUgZXhpdHMgb2NjdXIgYWZ0ZXIKLSAgICAgICAgICAgIC8v
IHRoZSBjZWxsIGNoZWNrIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxl
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdXNl
ZFJlZ2lzdGVyMTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVyMjsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLmJhc2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IEludmFsaWRHUFJSZWc7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVy
MSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1c2VkUmVnaXN0ZXIyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IGV4aXQu
bV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyOwotICAgICAgICAgICAgICAgIHNjcmF0Y2gxID0gQXNzZW1ibHlIZWxw
ZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3RlcjIpOwotICAg
ICAgICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3RlcjIsIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7Ci0gICAgICAgICAgICAgICAg
aml0LnB1c2goc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNB
ZGRyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNoMTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLnBh
eWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaDEs
IGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAg
ICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gxLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0Y2gxKTsK
LSAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihzY3JhdGNoMSwgc2Ny
YXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJseUhlbHBl
cnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRjaDIpOwot
ICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRjaDEpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBw
cm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkgewotICAgICAgICAgICAgaWYgKGV4aXQubV9q
c1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2F2ZSBhIHJl
Z2lzdGVyIHNvIHdlIGNhbiB1c2UgaXQuCi0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hQ
YXlsb2FkID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4aXQubV9qc1ZhbHVl
U291cmNlLmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hUYWcgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgp
LCBzY3JhdGNoUGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRj
aFBheWxvYWQpOwotICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2hUYWcpOwot
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgc2NyYXRjaChzY3JhdGNoVGFnLCBzY3JhdGNo
UGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmxvYWRWYWx1
ZShleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSwgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBzY3JhdGNoKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hUYWcpOwotICAg
ICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFBheWxvYWQpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5oYXNLbm93blRhZygpKSB7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hUYWcgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNj
cmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAg
ICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoVGFnKTsKLSAgICAgICAgICAgICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWco
KSksIHNjcmF0Y2hUYWcpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlKHNjcmF0
Y2hUYWcsIGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgICAgICAg
ICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
aml0LnBvcFRvUmVzdG9yZShzY3JhdGNoVGFnKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwgZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UucmVncygpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBEbyBhIHNpbXBsaWZp
ZWQgT1NSIGV4aXQuIFNlZSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAncyBjb21tZW50IHJlZ2Fy
ZGluZyBob3cgYW5kIHdueSB3ZQotICAgIC8vIGRvIHRoaXMgc2ltcGxlIGFwcHJvYWNoLgotCi0g
ICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgot
ICAgIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3BlcmFuZHMuc2l6ZSgpKTsKLSAgICBF
bmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgIAotICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0g
ICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgIGNhc2UgVW5ib3hlZEJvb2xl
YW5JbkdQUjoKLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgaml0
LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgcmVjb3ZlcnkuZ3ByKCksCi0gICAgICAgICAgICAg
ICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4
KS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAg
ICAgICByZWNvdmVyeS50YWdHUFIoKSwKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMudGFnKTsKLSAg
ICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIHJlY292ZXJ5LnBheWxvYWRH
UFIoKSwKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGFsbCBHUFJzIGFyZSBmcmVlIHRvIHJl
dXNlLgotICAgIAotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRvIHRoZSBzY3Jh
dGNoIGJ1ZmZlci4KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAg
ICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgLy8gTm93IGFsbCBGUFJzIGFyZSBmcmVlIHRvIHJldXNlLgotICAgIAotICAgIC8v
IFNhdmUgYWxsIHN0YXRlIGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBG
b3Igc2ltcGxpY2l0eSB3ZQotICAgIC8vIGRvIHRoaXMgZXZlbiBmb3Igc3RhdGUgdGhhdCdzIGFs
cmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KLSAgICAvLyBJdCBtYWtlcyB0
aGluZ3Mgc2ltcGxlciBsYXRlci4KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAKLSAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZElu
SlNTdGFjazoKLSAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAg
ICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLAotICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcp
OwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDEsCi0gICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
Kj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNr
IHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdlIGF0IGV4aXQu
IFRoaXMKLSAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERGRyB1c2VkLiBX
ZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMKLSAgICAvLyB1
c2VkIGJ5IGJhc2VsaW5lLgotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKAotICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5k
ZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVvZihSZWdpc3Rl
cikpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBSZXN0b3JlIHRoZSBE
RkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1
c2VzLgotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgaml0LmVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3Ioaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOwotCi0gICAgaWYgKGV4aXQu
aXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKLQotICAgIC8vIERvIGFsbCBkYXRhIGZvcm1h
dCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCi0gICAg
Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxS
ZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiBy
ZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+
Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluUGFpcjoKLSAgICAg
ICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAg
ICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZh
bHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcsCi0gICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAg
ICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsg
aW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7
Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7Ci0g
ICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwK
LSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJveGVkRG91
YmxlSW5GUFI6Ci0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAg
ICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBp
bmRleCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBqaXQucHVyaWZ5TmFOKEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVuYm94
ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKLSAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFu
ZCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDAsCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJh
bmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVW5i
b3hlZENlbGxJbkdQUjoKLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKLSAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5k
KSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZWdUMCwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFu
ZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVbmJv
eGVkQm9vbGVhbkluR1BSOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2Fk
LAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZTMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkJvb2xlYW5UYWcpLAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6dGFnRm9y
KG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIEdQ
UkluZm86OnJlZ1QwLAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIENvbnN0YW50OgotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSks
Ci0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOwotICAg
ICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLAotICAgICAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0
ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFj
ayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhh
dCBhcmd1bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRv
IGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQot
ICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5l
ZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4KLSAgICAvLyBO
b3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQg
c3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5saW5lIGNhbGwg
ZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCi0gICAg
Ci0gICAgZW1pdFJlc3RvcmVBcmd1bWVudHMoaml0LCBvcGVyYW5kcyk7Ci0KLSAgICAvLyBBZGp1
c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9T
Uiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxs
IGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBh
ZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1l
cwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRp
bWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBl
bnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29k
ZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGlt
aXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlz
IGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVy
eSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJ
ZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0
aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBp
dCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRl
c3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29k
ZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBP
U1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNp
dmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAg
IC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRv
IG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29w
LCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAg
IC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0
bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVt
cyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2
ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1Ig
ZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcg
bG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVn
YXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0g
ICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQs
IHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5k
IChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVh
Y2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgot
ICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWls
dXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBz
dWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJl
IGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBz
ZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVy
IHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotICAgIAot
ICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBleGl0KTsKLSAgICAKLSAgICAvLyBSZWlmeSBpbmxp
bmVkIGNhbGwgZnJhbWVzLgotICAgIAotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBl
eGl0KTsKLSAgICAKLSAgICAvLyBBbmQgZmluaXNoLgotICAgIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dCh2bSwgaml0LCBleGl0KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2
aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKLQotI2lmIEVOQUJMRShERkdfSklU
KSAmJiBVU0UoSlNWQUxVRTY0KQotCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rl
ci5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi12b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0
LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCi17Ci0gICAgaml0
LmppdEFzc2VydFRhZ3NJblBsYWNlKCk7Ci0KLSAgICAvLyBQcm8tZm9ybWEgc3R1ZmYuCi0gICAg
aWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAgICAgICBTcGVjdWxhdGlvbkZh
aWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm87Ci0gICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
ICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5i
eXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAg
IAotICAgICAgICBqaXQuZGVidWdDYWxsKHZtLCBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRp
b25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLQotICAgIC8vIFBlcmZvcm0gc3BlY3VsYXRp
b24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24K
LSAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3Vs
YXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBpZiAocmVjb3ZlcnkpIHsKLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRp
dmVBZGQ6Ci0gICAgICAgICAgICBqaXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+
ZGVzdCgpKTsKLSAgICAgICAgICAgIGppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgaml0LnN1YjMyKEFzc2Vt
Ymx5SGVscGVyczo6SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgpKSwgcmVjb3ZlcnktPmRlc3Qo
KSk7Ci0gICAgICAgICAgICBqaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIGppdC54b3I2
NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUmVmaW5lIHNvbWUgYXJyYXkgYW5kL29yIHZhbHVlIHByb2ZpbGUsIGlm
IGFwcHJvcHJpYXRlLgotICAgIAotICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291cmNlKSB7Ci0g
ICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJ
bmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHRo
aXMgb3JpZ2luYXRlZCBmcm9tIGhhcyBhbiBhcnJheSBwcm9maWxlLCB0aGVuCi0gICAgICAgICAg
ICAvLyByZWZpbmUgaXQuIElmIGl0IGRvZXNuJ3QsIHRoZW4gZG8gbm90aGluZy4gVGhlIGxhdHRl
ciBjb3VsZCBoYXBwZW4gZm9yCi0gICAgICAgICAgICAvLyBob2lzdGVkIGNoZWNrcywgb3IgY2hl
Y2tzIGVtaXR0ZWQgZm9yIG9wZXJhdGlvbnMgdGhhdCBkaWRuJ3QgaGF2ZSBhcnJheQotICAgICAg
ICAgICAgLy8gcHJvZmlsaW5nIC0gZWl0aGVyIG9wcyB0aGF0IGFyZW4ndCBhcnJheSBhY2Nlc3Nl
cyBhdCBhbGwsIG9yIHdlcmVuJ3QKLSAgICAgICAgICAgIC8vIGtub3duIHRvIGJlIGFycmF5IGFj
Y2VzZXMgaW4gdGhlIGJ5dGVjb2RlLiBUaGUgbGF0dGVyIGNhc2UgaXMgYSBGSVhNRQotICAgICAg
ICAgICAgLy8gd2hpbGUgdGhlIGZvcm1lciBjYXNlIGlzIGFuIG91dGNvbWUgb2YgYSBDaGVja1N0
cnVjdHVyZSBub3Qga25vd2luZyB3aHkKLSAgICAgICAgICAgIC8vIGl0IHdhcyBlbWl0dGVkIChj
b3VsZCBiZSBlaXRoZXIgZHVlIHRvIGFuIGlubGluZSBjYWNoZSBvZiBhIHByb3BlcnR5Ci0gICAg
ICAgICAgICAvLyBwcm9wZXJ0eSBhY2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBwcm9maWxlKS4K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0
QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAg
ICBHUFJSZWcgdXNlZFJlZ2lzdGVyOwotICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1
ZVNvdXJjZS5pc0FkZHJlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0g
ZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxOwotICAg
ICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMjsKLSAgICAgICAgICAgICAgICBzY3JhdGNoMSA9
IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVz
ZWRSZWdpc3Rlciwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2Ny
YXRjaDEpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoMik7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnB1c2goc2Ny
YXRjaDEpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNoMTsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVl
U291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZDgo
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIGpp
dC5sc2hpZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5vcjMy
KHNjcmF0Y2gyLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUt
PmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnBvcFRvUmVzdG9y
ZShzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRj
aDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5w
b3Aoc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0Y2gxKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBleGl0Lm1fdmFs
dWVQcm9maWxlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRy
ZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2
ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKLSAg
ICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgotICAgICAg
ICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1Zh
bHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVSZWdz
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIGppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBKU1ZhbHVlUmVncyhleGl0Lm1fanNW
YWx1ZVNvdXJjZS5ncHIoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhbiBpbnRlbnRpb25hbGx5IHNpbXBsZSBPU1IgZXhpdCBpbXBsZW1lbnRhdGlv
biB0aGF0IGdlbmVyYXRlcwotICAgIC8vIGZhaXJseSBwb29yIGNvZGUgYnV0IGlzIHZlcnkgZWFz
eSB0byBoYWNrLiBJbiBwYXJ0aWN1bGFyLCBpdCBkdW1wcyBhbGwgc3RhdGUgdGhhdAotICAgIC8v
IG5lZWRzIGNvbnZlcnNpb24gaW50byBhIHNjcmF0Y2ggYnVmZmVyIHNvIHRoYXQgaW4gc3RlcCA2
LCB3aGVyZSB3ZSBhY3R1YWxseSBkbyB0aGUKLSAgICAvLyBjb252ZXJzaW9ucywgd2Uga25vdyB0
aGF0IGFsbCB0ZW1wIHJlZ2lzdGVycyBhcmUgZnJlZSB0byB1c2UgYW5kIHRoZSB2YXJpYWJsZSBp
cwotICAgIC8vIGRlZmluaXRlbHkgaW4gYSB3ZWxsLWtub3duIHNwb3QgaW4gdGhlIHNjcmF0Y2gg
YnVmZmVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBoYWQKLSAgICAvLyBvcmlnaW5hbGx5IGJl
ZW4gaW4gYSByZWdpc3RlciBvciBzcGlsbGVkLiBUaGlzIGFsbG93cyB1cyB0byBkZWNvdXBsZSAi
d2hlcmUgd2FzCi0gICAgLy8gdGhlIHZhcmlhYmxlIiBmcm9tICJob3cgd2FzIGl0IHJlcHJlc2Vu
dGVkIi4gQ29uc2lkZXIgdGhhdCB0aGUKLSAgICAvLyBJbnQzMkRpc3BsYWNlZEluSlNTdGFjayBy
ZWNvdmVyeTogaXQgdGVsbHMgdXMgdGhhdCB0aGUgdmFsdWUgaXMgaW4gYQotICAgIC8vIHBhcnRp
Y3VsYXIgcGxhY2UgYW5kIHRoYXQgdGhhdCBwbGFjZSBob2xkcyBhbiB1bmJveGVkIGludDMyLiBX
ZSBoYXZlIHR3byBkaWZmZXJlbnQKLSAgICAvLyBwbGFjZXMgdGhhdCBhIHZhbHVlIGNvdWxkIGJl
IChkaXNwbGFjZWQsIHJlZ2lzdGVyKSBhbmQgYSBidW5jaCBvZiBkaWZmZXJlbnQKLSAgICAvLyB3
YXlzIG9mIHJlcHJlc2VudGluZyBhIHZhbHVlLiBUaGUgbnVtYmVyIG9mIHJlY292ZXJpZXMgaXMg
dHdvICogYSBidW5jaC4gVGhlIGNvZGUKLSAgICAvLyBiZWxvdyBtZWFucyB0aGF0IHdlIGhhdmUg
dG8gaGF2ZSB0d28gKyBhIGJ1bmNoIGNhc2VzIHJhdGhlciB0aGFuIHR3byAqIGEgYnVuY2guCi0g
ICAgLy8gT25jZSB3ZSBoYXZlIGxvYWRlZCB0aGUgdmFsdWUgZnJvbSB3aGVyZXZlciBpdCB3YXMs
IHRoZSByZWJveGluZyBpcyB0aGUgc2FtZQotICAgIC8vIHJlZ2FyZGxlc3Mgb2YgaXRzIGxvY2F0
aW9uLiBMaWtld2lzZSwgYmVmb3JlIHdlIGRvIHRoZSByZWJveGluZywgdGhlIHdheSB3ZSBnZXQg
dG8KLSAgICAvLyB0aGUgdmFsdWUgKGkuZS4gd2hlcmUgd2UgbG9hZCBpdCBmcm9tKSBpcyB0aGUg
c2FtZSByZWdhcmRsZXNzIG9mIGl0cyB0eXBlLiBCZWNhdXNlCi0gICAgLy8gdGhlIGNvZGUgYmVs
b3cgYWx3YXlzIGR1bXBzIGV2ZXJ5dGhpbmcgaW50byBhIHNjcmF0Y2ggYnVmZmVyIGZpcnN0LCB0
aGUgdHdvCi0gICAgLy8gcXVlc3Rpb25zIGJlY29tZSBvcnRob2dvbmFsLCB3aGljaCBzaW1wbGlm
aWVzIGFkZGluZyBuZXcgdHlwZXMgYW5kIGFkZGluZyBuZXcKLSAgICAvLyBsb2NhdGlvbnMuCi0g
ICAgLy8KLSAgICAvLyBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb246IGRvZXMgdXNpbmcgc3VjaCBh
IHN1Ym9wdGltYWwgaW1wbGVtZW50YXRpb24gb2YgT1NSIGV4aXQsCi0gICAgLy8gd2hlcmUgd2Ug
YWx3YXlzIGVtaXQgY29kZSB0byBkdW1wIGFsbCBzdGF0ZSBpbnRvIGEgc2NyYXRjaCBidWZmZXIg
b25seSB0byB0aGVuCi0gICAgLy8gZHVtcCBpdCByaWdodCBiYWNrIGludG8gdGhlIHN0YWNrLCBo
dXJ0IHVzIGluIGFueSB3YXk/IFRoZSBhc253ZXIgaXMgdGhhdCBPU1IgZXhpdHMKLSAgICAvLyBh
cmUgcmFyZS4gT3VyIHRpZXJpbmcgc3RyYXRlZ3kgZW5zdXJlcyB0aGlzLiBUaGlzIGlzIGJlY2F1
c2UgaWYgYW4gT1NSIGV4aXQgaXMKLSAgICAvLyB0YWtlbiBtb3JlIHRoYW4gfjEwMCB0aW1lcywg
d2UgamV0dGlzb24gdGhlIERGRyBjb2RlIGJsb2NrIGFsb25nIHdpdGggYWxsIG9mIGl0cwotICAg
IC8vIGV4aXRzLiBJdCBpcyBpbXBvc3NpYmxlIGZvciBhbiBPU1IgZXhpdCAtIGkuZS4gdGhlIGNv
ZGUgd2UgY29tcGlsZSBiZWxvdyAtIHRvCi0gICAgLy8gZXhlY3V0ZSBmcmVxdWVudGx5IGVub3Vn
aCBmb3IgdGhlIGNvZGVnZW4gdG8gbWF0dGVyIHRoYXQgbXVjaC4gSXQgcHJvYmFibHkgbWF0dGVy
cwotICAgIC8vIGVub3VnaCB0aGF0IHdlIGRvbid0IHdhbnQgdG8gdHVybiB0aGlzIGludG8gc29t
ZSBzdXBlci1zbG93IGZ1bmN0aW9uIGNhbGwsIGJ1dCBzbwotICAgIC8vIGxvbmcgYXMgd2UncmUg
Z2VuZXJhdGluZyBzdHJhaWdodC1saW5lIGNvZGUsIHRoYXQgY29kZSBjYW4gYmUgcHJldHR5IGJh
ZC4gQWxzbwotICAgIC8vIGJlY2F1c2Ugd2UgdGVuZCB0byBleGl0IG9ubHkgYWxvbmcgb25lIE9T
UiBleGl0IGZyb20gYW55IERGRyBjb2RlIGJsb2NrIC0gdGhhdCdzIGFuCi0gICAgLy8gZW1waXJp
Y2FsIHJlc3VsdCB0aGF0IHdlJ3JlIGV4dHJlbWVseSBjb25maWRlbnQgYWJvdXQgLSB0aGUgY29k
ZSBzaXplIG9mIHRoaXMKLSAgICAvLyBkb2Vzbid0IG1hdHRlciBtdWNoLiBIZW5jZSBhbnkgYXR0
ZW1wdCB0byBvcHRpbWl6ZSB0aGUgY29kZWdlbiBoZXJlIGlzIGp1c3QgcHVyZWx5Ci0gICAgLy8g
aGFybWZ1bCB0byB0aGUgc3lzdGVtOiBpdCBwcm9iYWJseSB3b24ndCByZWR1Y2UgZWl0aGVyIG5l
dCBtZW1vcnkgdXNhZ2Ugb3IgbmV0Ci0gICAgLy8gZXhlY3V0aW9uIHRpbWUuIEl0IHdpbGwgb25s
eSBwcmV2ZW50IHVzIGZyb20gY2xlYW5seSBkZWNvdXBsaW5nICJ3aGVyZSB3YXMgdGhlCi0gICAg
Ly8gdmFyaWFibGUiIGZyb20gImhvdyB3YXMgaXQgcmVwcmVzZW50ZWQiLCB3aGljaCB3aWxsIG1h
a2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gYWRkCi0gICAgLy8gZmVhdHVyZXMgaW4gdGhlIGZ1dHVy
ZSBhbmQgaXQgd2lsbCBtYWtlIGl0IGhhcmRlciB0byByZWFzb24gYWJvdXQgYnVncy4KLQotICAg
IC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gR1BScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAg
ICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7Ci0gICAgRW5j
b2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAg
ICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAg
ICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1
MkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBqaXQu
c3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaCArIGluZGV4KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBbmQgdm9pbGEsIGFsbCBHUFJzIGFyZSBm
cmVlIHRvIHJldXNlLgotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLgotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBS
OgotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgIGppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICAvLyBOb3csIGFsbCBGUFJzIGFyZSBhbHNvIGZyZWUuCi0gICAgCi0gICAg
Ly8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB0aGUgc3RhY2sgaW50byB0aGUgc2NyYXRjaCBidWZmZXIu
IEZvciBzaW1wbGljaXR5IHdlCi0gICAgLy8gZG8gdGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3Mg
YWxyZWFkeSBpbiB0aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgotICAgIC8vIEl0IG1ha2Vz
IHRoaW5ncyBzaW1wbGVyIGxhdGVyLgotCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRl
eCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOZWVkIHRvIGVu
c3VyZSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGFjY291bnRzIGZvciB0aGUgd29yc3QtY2FzZSBz
dGFjayB1c2FnZSBhdCBleGl0LiBUaGlzCi0gICAgLy8gY291bGQgdG9hc3Qgc29tZSBzdGFjayB0
aGF0IHRoZSBERkcgdXNlZC4gV2UgbmVlZCB0byBkbyBpdCBiZWZvcmUgc3RvcmluZyB0byBzdGFj
ayBvZmZzZXRzCi0gICAgLy8gdXNlZCBieSBiYXNlbGluZS4KLSAgICBqaXQuYWRkUHRyKAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKLSAgICAgICAgICAgIC1qaXQuY29kZUJs
b2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4
aXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50
ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgCi0g
ICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVz
IHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwotICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGppdC5iYXNlbGluZUNvZGVCbG9jaygp
KTsKLQotICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUg
cmVjb3ZlcmllcyBiZWxvdy4KLSAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3Rl
cnMoKTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7Ci0KLSAg
ICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRz
IGludG8gdGhlIHN0YWNrLgotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0KLSAgICAgICAg
aWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0
LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9m
ZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAg
ICAgY2FzZSBJbkdQUjoKLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICBj
YXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNh
c2UgSW5GUFI6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNo
ICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0Lm9y
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnJzaGlmdDY0KAotICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuYm94SW50NTIoR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgIGNhc2UgU3RyaWN0SW50
NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBp
bmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LmJveEludDUyKEdQUkluZm86
OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVnVDAp
OwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgY2FzZSBEb3VibGVE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oRlBSSW5m
bzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgIGpp
dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksCi0gICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHlldC4KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVyZWQsIGRvIHRo
ZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cwotICAgIC8vIHJl
Y292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4gQnV0LCB3ZSBk
b24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVmZXIgdG8gY2VydGFp
biByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUsIG9u
Y2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBhbHNvIHJvdWdo
bHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRlcmlhbGl6ZWQg
b3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAtIGJ1dCBmb3Ig
bm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLSAgICAKLSAgICBlbWl0UmVzdG9yZUFyZ3Vt
ZW50cyhqaXQsIG9wZXJhbmRzKTsKLSAgICAKLSAgICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBl
eGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8v
IHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklU
LCBzbyB0aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVz
IHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2Vy
ZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxs
IGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9s
bG93aW5nIGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4g
T1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAgIC8vICAgICBj
b2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRv
bid0Ci0gICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5
IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9u
IHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAg
IEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hh
bmNlIHRvCi0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhh
dCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4g
T1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50
cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwot
ICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZy
ZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhl
IGNvZGUKLSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21w
aWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyks
IHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vIGNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVu
ZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291
bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8g
cGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAg
Ly8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNv
dW50ZXIgd2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRy
eSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhh
cHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0
dHkKLSAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9l
c24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFp
bHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNr
IGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2Fu
dGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQg
OTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdl
IGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291
bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotICAgIAotICAgIGhhbmRsZUV4aXRDb3Vu
dHMoaml0LCBleGl0KTsKLSAgICAKLSAgICAvLyBSZWlmeSBpbmxpbmVkIGNhbGwgZnJhbWVzLgot
ICAgIAotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKLQotICAgIC8vIEFu
ZCBmaW5pc2guCi0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwotfQot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkg
JiYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxl
ci5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNp
bmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJERkdKSVRDb2RlLmgiCi0jaW5jbHVkZSAi
REZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBPU1JFeGl0OjplbWl0UmVz
dG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4mIG9wZXJhbmRzKQotewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50PiBhbHJlYWR5
QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8g
b3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
b3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAgICAgICAmJiBy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIE1pbmlmaWVkSUQgaWQg
PSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDEpOwotICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
aXRlci0+dmFsdWUpLCByZWdzKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHJlZ3MsIEND
YWxsSGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPQotICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZygpLT5t
aW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwotCi0gICAgICAgIGludCBzdGFj
a09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHN0YWNr
T2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAotICAgICAgICAgICAgICAg
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGppdC5tb3Zl
KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAotICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwKLSAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLAotICAgICAgICAgICAgICAg
IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDEpOwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgaml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3Bl
cmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFy
Z3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAg
ICAgICAgCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5k
KTsKLSAgICB9Ci19Ci0KLXZvaWQgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KLSAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNhdGNoKQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7Ci0g
ICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6REZHSklUKTsKLSAgICAKLSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0
IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0Ci0g
ICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdD
KHZtLT5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLT5vc3JFeGl0SW5kZXg7
Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRXhp
dFtleGl0SW5kZXhdOwotICAgIAotICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAg
ICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgICAgIAotICAgIAotICAgIHByZXBhcmVDb2RlT3JpZ2luRm9y
T1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgCi0gICAgLy8gQ29tcHV0ZSB0
aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5k
czsKLSAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnZhcmlhYmxlRXZlbnRTdHJlYW0u
cmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7
Ci0gICAgCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSAwOwotICAgIGlmIChl
eGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkKLSAgICAgICAgcmVjb3ZlcnkgPSAmY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNv
dmVyeUluZGV4XTsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2sp
OwotCi0gICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7Ci0gICAgICAg
ICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFy
cml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAgICAgLy8gU28sIHdlIG11
c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAgICAgICAgICAg
IGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JD
YXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
aml0LmFkZFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVC
bG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLQotICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pIHsKLSAgICAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29t
cGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxl
cjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAot
ICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUlu
dmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291
bnRlckFkZHJlc3MoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tcGlsZUV4aXQoaml0LCAq
dm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7Ci0KLSAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVf
Q09ERV9JRigKLSAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpLAotICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykg
ZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgs
IHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4
aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgp
LAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+
KG9wZXJhbmRzKSkuZGF0YSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7Ci0gICAgCi0gICAgdm0tPm9zckV4aXRK
dW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyLmgJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2lu
Y2x1ZGUgIkRGR09TUkV4aXQuaCIKLSNpbmNsdWRlICJPcGVyYW5kcy5oIgotCi0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOTksNDQgKzIxOTksNiBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQCiAgICAgdm0udHlwZVBy
b2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9nIEZ1bGwsIGNh
bGxlZCBmcm9tIGluc2lkZSBERkcuIikpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRl
YnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKLXsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKLSAgICBT
cGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0PFNwZWN1
bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIGRhdGFMb2coIlNwZWN1bGF0aW9u
IGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgdm0t
Pm9zckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCwgIiwgIiwg
ZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOwotICAgIGlmIChh
bHRlcm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4ZWN1dGVDb3Vu
dGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAgICAgICAgICAi
LCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9jayAoaS5lLiB3
ZSd2ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0Q291bnRlciA9
ICIsIGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0YUxvZygiICAg
IEdQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGNoYXIqIHNjcmF0Y2hQb2ludGVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2gpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgR1BSSW5mbzo6ZGVi
dWdOYW1lKGdwciksICI6IiwgUmF3UG9pbnRlcigqcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCoq
PihzY3JhdGNoUG9pbnRlcikpKTsKLSAgICAgICAgc2NyYXRjaFBvaW50ZXIgKz0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCIg
ICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgRlBSUmVnIGZwciA9
IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBGUFJJbmZvOjpk
ZWJ1Z05hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0X3QgYml0cyA9ICpyZWludGVycHJl
dF9jYXN0X3B0cjx1aW50NjRfdCo+KHNjcmF0Y2hQb2ludGVyKTsKLSAgICAgICAgZG91YmxlIHZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGRvdWJsZSo+KHNjcmF0Y2hQb2ludGVyKTsKLSAg
ICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwg
dmFsdWUpOwotICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoRXhl
Y1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMjAyOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzMCw4
ICsyMzAsNiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0CiAKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKIAotdm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9u
UHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5U
RVJOQUw7Ci0KIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29k
ZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNp
b24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIK
ICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1
ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317315</attachid>
            <date>2017-08-04 16:59:24 -0700</date>
            <delta_ts>2017-08-04 17:02:07 -0700</delta_ts>
            <desc>proposed patch: fixed style issue.</desc>
            <filename>bug-175214.patch</filename>
            <type>text/plain</type>
            <size>108086</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE3LTA4LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIERGRzo6T1NSRXhpdENvbXBpbGVyIG1ldGhvZHMgaW50byBERkc6Ok9TUkV4aXQgW3N0ZXAg
Ml0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUy
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzNzMzMzA4PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcHkgdGhlIDY0LWJpdCBhbmQgY29tbW9u
IG1ldGhvZHMgaW50byBERkdPU1JFeGl0LmNwcCwgYW5kIGRlbGV0ZSB0aGUgdW51c2VkCisgICAg
ICAgIERGR09TUkV4aXRDb21waWxlciBmaWxlcy4KKworICAgICAgICBBbHNvIHJlbmFtZWQgREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIHRvIERGR09TUkV4aXQzMl82NC5jcHAuCisKKyAgICAg
ICAgQWxzbyBtb3ZlIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoKSBpbnRv
IERGR09TUkV4aXQuY3BwLiAgSXQncyBvbmx5CisgICAgICAgIHVzZWQgYnkgY29tcGlsZU9TUkV4
aXQoKSwgYW5kIHdpbGwgYmUgY2hhbmdlZCB0byBub3QgYmUgYSBERkcgb3BlcmF0aW9uIGZ1bmN0
aW9uCisgICAgICAgIHdoZW4gd2UgdXNlIEpJVCBwcm9iZXMgZm9yIERGRyBPU1IgZXhpdHMgbGF0
ZXIgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NTE0NC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21w
aWxlRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZGVidWdPcGVyYXRpb25Qcmlu
dFNwZWN1bGF0aW9uRmFpbHVyZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdDMyXzY0LmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAuCisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKwogMjAxNy0w
OC0wNCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogY2FwdHVyZSBhc3luYyBzdGFjayB0cmFjZSB3aGVuIHdvcmtlcnMvbWFpbiBjb250
ZXh0IHBvc3RzIGEgbWVzc2FnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsMTAgKzM3Niw4IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR09TUkVudHJ5LmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHT1NSRXhpdC5jcHAKKyAgICBkZmcvREZH
T1NSRXhpdDMyXzY0LmNwcAogICAgIGRmZy9ERkdPU1JFeGl0QmFzZS5jcHAKLSAgICBkZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAotICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAK
LSAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCiAgICAgZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKICAgICBkZmcvREZHT1NSRXhpdEZ1enouY3BwCiAgICAgZGZnL0RGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NCwxMSAr
NzQ0LDggQEAKIAkJMEZCRjE1OEMxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkYxNThBMTlC
N0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldC5jcHAgKi87IH07CiAJCTBGQkYxNThEMTlCN0E1
MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAvKiBERkdC
bG9ja1NldElubGluZXMuaCAqLzsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERG
R09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IH07Ci0JCTBGQzA5
NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZGMTQ2OTNBRUYwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCAqLzsgfTsKLQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzcwMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JF
eGl0Q29tcGlsZXI2NC5jcHAgKi87IH07Ci0JCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwICovOyB9OworCQkwRkMwOTc3NjE0Njk0M0IwMDBDRjI0NDIgLyogREZH
T1NSRXhpdDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAvKiBERkdPU1JFeGl0MzJfNjQuY3BwICov
OyB9OwogCQkwRkMwOTc5MTE0NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc4RTE0NkE2RjYz
MDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi87IH07Ci0JCTBGQzA5NzkyMTQ2QTZGNzMwMENG
MjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5jcHAgKi87IH07CiAJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdU
aHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi87IH07CiAJCTBGQzA5
N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdU
aHVua3MuaCAqLzsgfTsKIAkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDMjBDQjMxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwICovOyB9OwpAQCAtMzM0MiwxMiArMzMzOSw5IEBACiAJCTBGQkYxNThBMTlCN0E1
MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCbG9ja1NldC5jcHA7IHBhdGggPSBkZmcvREZHQmxvY2tTZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJGMTU4QjE5QjdBNTMxMDA2OTVERDAgLyog
REZHQmxvY2tTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Jsb2NrU2V0SW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Lmg7
IHBhdGggPSBkZmcvREZHT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZGZn
L0RGR09TUkV4aXRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkMw
OTc3MDE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZDMDk3NzUxNDY5NDNBRDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAv
KiBERkdPU1JFeGl0MzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHT1NSRXhpdDMyXzY0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0MzJfNjQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyog
REZHQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbi5o
OyBwYXRoID0gZGZnL0RGR0NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDMDk3OEYxNDZBNkY2MzAw
Q0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXIuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzlGMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVGh1bmtzLmNwcDsgcGF0aCA9IGRmZy9ERkdUaHVua3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZH
VGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RodW5rcy5oOyBw
YXRoID0gZGZnL0RGR1RodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMy
MENCMzE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NzMsMTMgKzc0NjcsMTAgQEAKIAkJCQkwRkQ4QTMx
RTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJ
MEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKKwkJCQkwRkMwOTc3
NTE0Njk0M0FEMDBDRjI0NDIgLyogREZHT1NSRXhpdDMyXzY0LmNwcCAqLywKIAkJCQkwRjIzNUJF
NzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovLAogCQkJCTBGMjM1QkU4
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oICovLAogCQkJCTY1OTg3RjJDMTY3
RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggKi8sCi0JCQkJMEZD
MDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi8sCi0JCQkJ
MEZDMDk3NkYxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oICovLAotCQkJ
CTBGQzA5Nzc1MTQ2OTQzQUQwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAg
Ki8sCi0JCQkJMEZDMDk3NzAxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0
LmNwcCAqLywKIAkJCQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcCAqLywKIAkJCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmggKi8sCiAJCQkJMEYzOTJDODcxQjQ2MTg4NDAwODQ0NzI4IC8q
IERGR09TUkV4aXRGdXp6LmNwcCAqLywKQEAgLTg2ODksNyArODY4MCw2IEBACiAJCQkJMEZDMDk3
NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdP
U1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4
MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0ODQsOSArMTA0NzQsNyBAQAogCQkJCTBGRDhBMzI1
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDMDk3OTIxNDZBNkY3MzAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkMwOTc3NjE0
Njk0M0IwMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdP
U1JFeGl0MzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgy
QzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjM5MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjIwMjk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlICJERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgotI2luY2x1
ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5j
bHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQzMl82NC5jcHAJKHJldmlzaW9uIDIyMDI5OCkJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA6MjIwMjk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R09TUkV4aXRDb21waWxlci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVF
MzJfNjQpCisKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxs
SGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zlcnkp
Cit7CisgICAgLy8gUHJvLWZvcm1hIHN0dWZmLgorICAgIGlmIChPcHRpb25zOjpwcmludEVhY2hP
U1JFeGl0KCkpIHsKKyAgICAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0lu
Zm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOworICAgICAgICBkZWJ1Z0luZm8t
PmNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICAgICAgZGVidWdJbmZvLT5raW5kID0g
ZXhpdC5tX2tpbmQ7CisgICAgICAgIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1f
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICAKKyAgICAgICAgaml0LmRlYnVnQ2Fs
bCh2bSwgZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsK
KyAgICB9CisKKyAgICAvLyBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCisgICAgLy8gc3RhcnRzIG11dGF0aW5n
IHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1h
ZGUuCisgICAgCisgICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgeworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgaml0
LnN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgorICAgICAgICAg
ICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgp
KSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmVmaW5lIHNvbWUgdmFsdWUgcHJvZmlsZSwgaWYgYXBw
cm9wcmlhdGUuCisgICAgCisgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKKyAgICAg
ICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4
aW5nVHlwZSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGluc3RydWN0aW9uIHRoYXQgdGhpcyBv
cmlnaW5hdGVkIGZyb20gaGFzIGFuIGFycmF5IHByb2ZpbGUsIHRoZW4KKyAgICAgICAgICAgIC8v
IHJlZmluZSBpdC4gSWYgaXQgZG9lc24ndCwgdGhlbiBkbyBub3RoaW5nLiBUaGUgbGF0dGVyIGNv
dWxkIGhhcHBlbiBmb3IKKyAgICAgICAgICAgIC8vIGhvaXN0ZWQgY2hlY2tzLCBvciBjaGVja3Mg
ZW1pdHRlZCBmb3Igb3BlcmF0aW9ucyB0aGF0IGRpZG4ndCBoYXZlIGFycmF5CisgICAgICAgICAg
ICAvLyBwcm9maWxpbmcgLSBlaXRoZXIgb3BzIHRoYXQgYXJlbid0IGFycmF5IGFjY2Vzc2VzIGF0
IGFsbCwgb3Igd2VyZW4ndAorICAgICAgICAgICAgLy8ga25vd24gdG8gYmUgYXJyYXkgYWNjZXNl
cyBpbiB0aGUgYnl0ZWNvZGUuIFRoZSBsYXR0ZXIgY2FzZSBpcyBhIEZJWE1FCisgICAgICAgICAg
ICAvLyB3aGlsZSB0aGUgZm9ybWVyIGNhc2UgaXMgYW4gb3V0Y29tZSBvZiBhIENoZWNrU3RydWN0
dXJlIG5vdCBrbm93aW5nIHdoeQorICAgICAgICAgICAgLy8gaXQgd2FzIGVtaXR0ZWQgKGNvdWxk
IGJlIGVpdGhlciBkdWUgdG8gYW4gaW5saW5lIGNhY2hlIG9mIGEgcHJvcGVydHkKKyAgICAgICAg
ICAgIC8vIHByb3BlcnR5IGFjY2Vzcywgb3IgZHVlIHRvIGFuIGFycmF5IHByb2ZpbGUpLgorICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBOb3RlOiBXZSBhcmUgZnJlZSB0byBhc3N1bWUgdGhh
dCB0aGUganNWYWx1ZVNvdXJjZSBpcyBhbHJlYWR5IGtub3duIHRvCisgICAgICAgICAgICAvLyBi
ZSBhIGNlbGwgc2luY2UgYm90aCBCYWRDYWNoZSBhbmQgQmFkSW5kZXhpbmdUeXBlIGV4aXRzIG9j
Y3VyIGFmdGVyCisgICAgICAgICAgICAvLyB0aGUgY2VsbCBjaGVjayB3b3VsZCBoYXZlIGFscmVh
ZHkgaGFwcGVuZWQuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgICAgICAgICBpZiAo
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHVzZWRSZWdpc3RlcjE7CisgICAgICAgICAgICAgICAgR1BS
UmVnIHVzZWRSZWdpc3RlcjI7CisgICAgICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291
cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjEgPSBl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdp
c3RlcjIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjEgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5oYXNL
bm93blRhZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcjIgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWdHUFIoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMjsKKyAgICAgICAgICAgICAg
ICBzY3JhdGNoMSA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0
ZXIxLCB1c2VkUmVnaXN0ZXIyKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoMiA9IEFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIxLCB1c2VkUmVnaXN0ZXIyLCBz
Y3JhdGNoMSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnB1c2goc2Ny
YXRjaDEpOworICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gyKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWU7CisgICAgICAgICAgICAgICAgaWYg
KGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gc2NyYXRjaDE7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5T2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBq
aXQubHNoaWZ0MzIoc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQub3Iz
MihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBqaXQucG9wKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0Y2gx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpIHsK
KyAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgeworICAg
ICAgICAgICAgICAgIC8vIFNhdmUgYSByZWdpc3RlciBzbyB3ZSBjYW4gdXNlIGl0LgorICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUGF5bG9hZCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoVGFnID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4
aXQubV9qc1ZhbHVlU291cmNlLmJhc2UoKSwgc2NyYXRjaFBheWxvYWQpOworICAgICAgICAgICAg
ICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2hQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXQu
cHVzaFRvU2F2ZShzY3JhdGNoVGFnKTsKKworICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHNj
cmF0Y2goc2NyYXRjaFRhZywgc2NyYXRjaFBheWxvYWQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNz
KCksIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGpp
dCwgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnBvcFRv
UmVzdG9yZShzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hQYXlsb2FkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaGFzS25vd25UYWcoKSkgeworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoVGFnID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4aXQubV9qc1ZhbHVlU291cmNlLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaFRhZyk7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZXhpdC5tX2pzVmFsdWVTb3VyY2UudGFnKCkpLCBzY3JhdGNoVGFnKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZShzY3JhdGNoVGFnLCBleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXls
b2FkR1BSKCkpOworICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwg
dmFsdWUpOworICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFRhZyk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1
ZShqaXQsIGV4aXQubV9qc1ZhbHVlU291cmNlLnJlZ3MoKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gRG8gYSBzaW1wbGlmaWVkIE9TUiBleGl0LiBTZWUgREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwJ3MgY29tbWVudCByZWdhcmRpbmcgaG93IGFuZCB3bnkgd2UKKyAgICAvLyBkbyB0
aGlzIHNpbXBsZSBhcHByb2FjaC4KKworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gR1BScyBp
bnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG9wZXJhbmRzLnNpemUoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNo
QnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRh
QnVmZmVyKCkpIDogMDsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgor
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZENl
bGxJbkdQUjoKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHJlY292
ZXJ5LmdwcigpLAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5QYWlyOgorICAgICAgICAgICAg
aml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkudGFnR1BSKCksCisgICAgICAg
ICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCAr
IGluZGV4KS0+YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICByZWNvdmVyeS5wYXlsb2FkR1BSKCksCisgICAgICAgICAgICAgICAgJmJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBh
eWxvYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5v
dyBhbGwgR1BScyBhcmUgZnJlZSB0byByZXVzZS4KKyAgICAKKyAgICAvLyBTYXZlIGFsbCBzdGF0
ZSBmcm9tIEZQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgCisgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAg
ICAgCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2Fz
ZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHJlY292ZXJ5LmZw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5vdyBhbGwgRlBScyBhcmUgZnJl
ZSB0byByZXVzZS4KKyAgICAKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHRoZSBzdGFjayBp
bnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4gRm9yIHNpbXBsaWNpdHkgd2UKKyAgICAvLyBkbyB0aGlz
IGV2ZW4gZm9yIHN0YXRlIHRoYXQncyBhbHJlYWR5IGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUg
c3RhY2suCisgICAgLy8gSXQgbWFrZXMgdGhpbmdzIHNpbXBsZXIgbGF0ZXIuCisgICAgCisgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQm9vbGVhbkRp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAg
ICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3Jh
dGNoICsgaW5kZXgpLT5hc0JpdHMudGFnKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxLAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXls
b2FkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOZWVk
IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGFjY291bnRzIGZvciB0aGUgd29yc3Qt
Y2FzZSBzdGFjayB1c2FnZSBhdCBleGl0LiBUaGlzCisgICAgLy8gY291bGQgdG9hc3Qgc29tZSBz
dGFjayB0aGF0IHRoZSBERkcgdXNlZC4gV2UgbmVlZCB0byBkbyBpdCBiZWZvcmUgc3RvcmluZyB0
byBzdGFjayBvZmZzZXRzCisgICAgLy8gdXNlZCBieSBiYXNlbGluZS4KKyAgICBqaXQuYWRkUHRy
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIC1qaXQu
Y29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvckV4aXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRo
ZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOworICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGppdC5iYXNlbGluZUNvZGVC
bG9jaygpKTsKKworICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQorICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisK
KyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1
bHRzIGludG8gdGhlIHN0YWNrLgorICAgIAorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisKKyAgICAg
ICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGludCBvcGVyYW5kID0gcmVn
Lm9mZnNldCgpOworCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAg
ICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgp
LT5hc0JpdHMudGFnLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LnB1cmlmeU5hTihGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGlu
ZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLAorICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGlu
ZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAg
ICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNo
ICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5z
dG9yZTMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJl
Y292ZXJ5LmNvbnN0YW50KCkudGFnKCkpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50KCku
cGF5bG9hZCgpKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
b3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgQ2xvbmVk
QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhp
cywgeWV0LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE5v
dyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50
cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCisgICAgLy8gcmVjb3ZlcmllcyBk
b24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0
byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKKyAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBv
ZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3Rh
Y2sgaXMgc2Vuc2libGUuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUg
dGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9m
IGl0cworICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERG
RyB3b3VsZG4ndCBkbyB0aGF0LgorICAgIAorICAgIGVtaXRSZXN0b3JlQXJndW1lbnRzKGppdCwg
b3BlcmFuZHMpOworCisgICAgLy8gQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVy
LiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyB0aGF0IGFsbCBuZXcg
Y2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1
dGUKKyAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1l
ZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0
aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCisgICAg
Ly8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVl
OgorICAgIC8vCisgICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMg
YSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKKyAgICAvLyAgICAgY29kZSBldmVudHVhbGx5
LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAg
ICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxv
dykuCisgICAgLy8KKyAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFj
ayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICBKSVQncyBjb2RlIGFu
ZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bworICAgIC8v
ICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVk
LgorICAgIC8vCisgICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3Vs
ZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgIGVudHJ5LCBzaW5jZSBib3Ro
IGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgcGFy
dGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vIChkKSBGcmVxdWVudCBPU1IgZmFp
bHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8g
ICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGlu
ZyB0cmlnZ2VyZWQuCisgICAgLy8KKyAgICAvLyBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8g
c2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgorICAgIC8v
IChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBv
cHBvcnR1bml0eSBmb3IKKyAgICAvLyBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVu
dHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAgIC8vIGZyZXF1ZW50bHkg
YW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2
ZXIKKyAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBi
ZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29w
IGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5CisgICAgLy8gZ29v
ZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJl
IG9mIChkKSwKKyAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVz
ZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KKyAgICAvLyBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBu
dW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vIGxh
cmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJh
dGUpLCBhbmQgaWYKKyAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVy
IG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vIGNvdW50ZXIgdG8gMDsgb3Ro
ZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7
CisgICAgCisgICAgLy8gUmVpZnkgaW5saW5lZCBjYWxsIGZyYW1lcy4KKyAgICAKKyAgICByZWlm
eUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7CisgICAgCisgICAgLy8gQW5kIGZpbmlzaC4K
KyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQodm0sIGppdCwgZXhpdCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNW
QUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0MzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dDMyXzY0LmNwcAkocmV2aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQsMTIgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVy
LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogCiAjaWYgRU5BQkxFKERGR19KSVQpICYmIFVT
RShKU1ZBTFVFMzJfNjQpCiAKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyMDI5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEzIEBACiAj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgi
CisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRnJhbWVU
cmFjZXJzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTczLDYgKzc4
LDU0NyBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxpCiAgICAgbV9w
YXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7CiB9CiAKK3Zv
aWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKK3sKKyAgICBIYXNoTWFwPE1pbmlm
aWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFy
Z3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQg
PSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKKyAgICAg
ICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJl
Tm90Q3JlYXRlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIE1pbmlmaWVkSUQg
aWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKKyAgICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9j
YXRlZEFyZ3VtZW50cy5lbmQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IEpT
VmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6
cmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3IoaXRlci0+dmFsdWUpLCByZWdzKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKHJlZ3Ms
IENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0KKyAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5kZmcoKS0+bWluaWZp
ZWRERkcuYXQoaWQpLT5pbmxpbmVDYWxsRnJhbWUoKTsKKworICAgICAgICBpbnQgc3RhY2tPZmZz
ZXQ7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBzdGFja09mZnNl
dCA9IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHN0YWNrT2Zmc2V0ID0gMDsKKworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSksCisgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwg
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgaml0LmxvYWQzMigK
KyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqaXQubW92ZSgKKyAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZDoKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1
cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisKKyAgICAgICAgYWxyZWFkeUFsbG9jYXRlZEFyZ3Vt
ZW50cy5hZGQoaWQsIG9wZXJhbmQpOworICAgIH0KK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIE9T
UkV4aXQ6OmNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
CisgICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dm0tPmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NF
UlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKworICAgIC8vIEl0
J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55
d2F5cywgZG9pbmcgc28gd291bGRuJ3QKKyAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KKyAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0tPmhlYXApOworCisgICAgdWludDMyX3QgZXhp
dEluZGV4ID0gdm0tPm9zckV4aXRJbmRleDsKKyAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07CisKKyAgICBpZiAodm0tPmNh
bGxGcmFtZUZvckNhdGNoKQorICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCk7CisgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAgIEFTU0VS
VF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIAorICAgIHByZXBhcmVD
b2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7CisKKyAgICAvLyBD
b21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
IG9wZXJhbmRzOworICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+dmFyaWFibGVFdmVu
dFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnKCktPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9w
ZXJhbmRzKTsKKworICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gMDsKKyAgICBp
ZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIHJlY292ZXJ5ID0g
JmNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1f
cmVjb3ZlcnlJbmRleF07CisKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJs
b2NrKTsKKworICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3
ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KKyAgICAgICAgICAgIC8vIFNvLCB3
ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCisgICAgICAg
ICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCp2bSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1l
Rm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB9CisgICAg
ICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihj
b2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAg
ICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAgaml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1l
KCk7CisKKyAgICAgICAgaWYgKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikgeworICAgICAgICAgICAgUHJv
ZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwor
ICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisKKyAgICAgICAg
ICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NS
RXhpdCgKKyAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhk
YXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAg
ZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsKKyAg
ICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQ0NhbGxI
ZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MocHJvZmlsZXJFeGl0LT5jb3VudGVyQWRkcmVzcygpKSk7
CisgICAgICAgIH0KKworICAgICAgICBjb21waWxlRXhpdChqaXQsICp2bSwgZXhpdCwgb3BlcmFu
ZHMsIHJlY292ZXJ5KTsKKworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29k
ZUJsb2NrKTsKKyAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAorICAgICAg
ICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8
IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICgiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9w
ZXJhbmRzID0gJXMiLAorICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQu
bV9jb2RlT3JpZ2luKS5kYXRhKCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhl
eGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCisgICAgICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRh
KCkpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhpdC5jb2Rl
TG9jYXRpb25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9j
b2RlLmNvZGUoKSkpOworCisgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1f
Y29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKworI2lmIFVTRShKU1ZBTFVFNjQp
CisKK3ZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwg
Y29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJh
bmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3sKKyAgICBqaXQuaml0QXNzZXJ0
VGFnc0luUGxhY2UoKTsKKworICAgIC8vIFByby1mb3JtYSBzdHVmZi4KKyAgICBpZiAoT3B0aW9u
czo6cHJpbnRFYWNoT1NSRXhpdCgpKSB7CisgICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICAg
ICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgICAgIGRlYnVn
SW5mby0+a2luZCA9IGV4aXQubV9raW5kOworICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zm
c2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKworICAgICAgICBqaXQuZGVi
dWdDYWxsKHZtLCBkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0lu
Zm8pOworICAgIH0KKworICAgIC8vIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMg
b25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAgICAvLyBzdGFydHMgbXV0
YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVh
ZHkgbWFkZS4KKworICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIGpp
dC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAg
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1l
ZGlhdGU6CisgICAgICAgICAgICBqaXQuc3ViMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMihyZWNv
dmVyeS0+aW1tZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGppdC5v
cjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
OgorICAgICAgICAgICAgaml0LnhvcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWZpbmUgc29tZSBhcnJheSBhbmQvb3IgdmFsdWUg
cHJvZmlsZSwgaWYgYXBwcm9wcmlhdGUuCisKKyAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJj
ZSkgeworICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQg
PT0gQmFkSW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24g
dGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbSBoYXMgYW4gYXJyYXkgcHJvZmlsZSwgdGhlbgorICAg
ICAgICAgICAgLy8gcmVmaW5lIGl0LiBJZiBpdCBkb2Vzbid0LCB0aGVuIGRvIG5vdGhpbmcuIFRo
ZSBsYXR0ZXIgY291bGQgaGFwcGVuIGZvcgorICAgICAgICAgICAgLy8gaG9pc3RlZCBjaGVja3Ms
IG9yIGNoZWNrcyBlbWl0dGVkIGZvciBvcGVyYXRpb25zIHRoYXQgZGlkbid0IGhhdmUgYXJyYXkK
KyAgICAgICAgICAgIC8vIHByb2ZpbGluZyAtIGVpdGhlciBvcHMgdGhhdCBhcmVuJ3QgYXJyYXkg
YWNjZXNzZXMgYXQgYWxsLCBvciB3ZXJlbid0CisgICAgICAgICAgICAvLyBrbm93biB0byBiZSBh
cnJheSBhY2Nlc2VzIGluIHRoZSBieXRlY29kZS4gVGhlIGxhdHRlciBjYXNlIGlzIGEgRklYTUUK
KyAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBmb3JtZXIgY2FzZSBpcyBhbiBvdXRjb21lIG9mIGEg
Q2hlY2tTdHJ1Y3R1cmUgbm90IGtub3dpbmcgd2h5CisgICAgICAgICAgICAvLyBpdCB3YXMgZW1p
dHRlZCAoY291bGQgYmUgZWl0aGVyIGR1ZSB0byBhbiBpbmxpbmUgY2FjaGUgb2YgYSBwcm9wZXJ0
eQorICAgICAgICAgICAgLy8gcHJvcGVydHkgYWNjZXNzLCBvciBkdWUgdG8gYW4gYXJyYXkgcHJv
ZmlsZSkuCisKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2Rl
T3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5
UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgR1BS
UmVnIHVzZWRSZWdpc3RlcjsKKyAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaXNBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlciA9IGV4aXQu
bV9qc1ZhbHVlU291cmNlLmJhc2UoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHVzZWRSZWdpc3RlciA9IGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpOworCisg
ICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxOworICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMjsKKyAgICAgICAgICAgICAgICBzY3JhdGNoMSA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIHNjcmF0Y2gyID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3Rlciwgc2NyYXRjaDEp
OworCisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNo
VG9TYXZlKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNo
KHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHUFJSZWcg
dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVz
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NyYXRjaDE7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNW
YWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKTsK
KworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZh
bHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihz
Y3JhdGNoMSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5vcjMyKHNjcmF0Y2gyLCBB
c3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFy
cmF5TW9kZXMoKSkpOworCisgICAgICAgICAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnBvcFRvUmVzdG9yZShzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMik7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5wb3Aoc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHByb2ZpbGUgPSBleGl0Lm1fdmFsdWVQcm9maWxlKSB7CisgICAgICAgICAgICBpZiAoZXhpdC5t
X2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4n
dCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0
byByZXN0b3JlIGl0LgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRW
YWx1ZShqaXQsIEpTVmFsdWVSZWdzKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRh
Z1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBK
U1ZhbHVlUmVncyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGFuIGludGVudGlvbmFsbHkgc2ltcGxlIE9TUiBl
eGl0IGltcGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzCisgICAgLy8gZmFpcmx5IHBvb3IgY29k
ZSBidXQgaXMgdmVyeSBlYXN5IHRvIGhhY2suIEluIHBhcnRpY3VsYXIsIGl0IGR1bXBzIGFsbCBz
dGF0ZSB0aGF0CisgICAgLy8gbmVlZHMgY29udmVyc2lvbiBpbnRvIGEgc2NyYXRjaCBidWZmZXIg
c28gdGhhdCBpbiBzdGVwIDYsIHdoZXJlIHdlIGFjdHVhbGx5IGRvIHRoZQorICAgIC8vIGNvbnZl
cnNpb25zLCB3ZSBrbm93IHRoYXQgYWxsIHRlbXAgcmVnaXN0ZXJzIGFyZSBmcmVlIHRvIHVzZSBh
bmQgdGhlIHZhcmlhYmxlIGlzCisgICAgLy8gZGVmaW5pdGVseSBpbiBhIHdlbGwta25vd24gc3Bv
dCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGhhZAorICAg
IC8vIG9yaWdpbmFsbHkgYmVlbiBpbiBhIHJlZ2lzdGVyIG9yIHNwaWxsZWQuIFRoaXMgYWxsb3dz
IHVzIHRvIGRlY291cGxlICJ3aGVyZSB3YXMKKyAgICAvLyB0aGUgdmFyaWFibGUiIGZyb20gImhv
dyB3YXMgaXQgcmVwcmVzZW50ZWQiLiBDb25zaWRlciB0aGF0IHRoZQorICAgIC8vIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrIHJlY292ZXJ5OiBpdCB0ZWxscyB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBp
biBhCisgICAgLy8gcGFydGljdWxhciBwbGFjZSBhbmQgdGhhdCB0aGF0IHBsYWNlIGhvbGRzIGFu
IHVuYm94ZWQgaW50MzIuIFdlIGhhdmUgdHdvIGRpZmZlcmVudAorICAgIC8vIHBsYWNlcyB0aGF0
IGEgdmFsdWUgY291bGQgYmUgKGRpc3BsYWNlZCwgcmVnaXN0ZXIpIGFuZCBhIGJ1bmNoIG9mIGRp
ZmZlcmVudAorICAgIC8vIHdheXMgb2YgcmVwcmVzZW50aW5nIGEgdmFsdWUuIFRoZSBudW1iZXIg
b2YgcmVjb3ZlcmllcyBpcyB0d28gKiBhIGJ1bmNoLiBUaGUgY29kZQorICAgIC8vIGJlbG93IG1l
YW5zIHRoYXQgd2UgaGF2ZSB0byBoYXZlIHR3byArIGEgYnVuY2ggY2FzZXMgcmF0aGVyIHRoYW4g
dHdvICogYSBidW5jaC4KKyAgICAvLyBPbmNlIHdlIGhhdmUgbG9hZGVkIHRoZSB2YWx1ZSBmcm9t
IHdoZXJldmVyIGl0IHdhcywgdGhlIHJlYm94aW5nIGlzIHRoZSBzYW1lCisgICAgLy8gcmVnYXJk
bGVzcyBvZiBpdHMgbG9jYXRpb24uIExpa2V3aXNlLCBiZWZvcmUgd2UgZG8gdGhlIHJlYm94aW5n
LCB0aGUgd2F5IHdlIGdldCB0bworICAgIC8vIHRoZSB2YWx1ZSAoaS5lLiB3aGVyZSB3ZSBsb2Fk
IGl0IGZyb20pIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuIEJlY2F1c2UKKyAg
ICAvLyB0aGUgY29kZSBiZWxvdyBhbHdheXMgZHVtcHMgZXZlcnl0aGluZyBpbnRvIGEgc2NyYXRj
aCBidWZmZXIgZmlyc3QsIHRoZSB0d28KKyAgICAvLyBxdWVzdGlvbnMgYmVjb21lIG9ydGhvZ29u
YWwsIHdoaWNoIHNpbXBsaWZpZXMgYWRkaW5nIG5ldyB0eXBlcyBhbmQgYWRkaW5nIG5ldworICAg
IC8vIGxvY2F0aW9ucy4KKyAgICAvLworICAgIC8vIFRoaXMgcmFpc2VzIHRoZSBxdWVzdGlvbjog
ZG9lcyB1c2luZyBzdWNoIGEgc3Vib3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBPU1IgZXhpdCwK
KyAgICAvLyB3aGVyZSB3ZSBhbHdheXMgZW1pdCBjb2RlIHRvIGR1bXAgYWxsIHN0YXRlIGludG8g
YSBzY3JhdGNoIGJ1ZmZlciBvbmx5IHRvIHRoZW4KKyAgICAvLyBkdW1wIGl0IHJpZ2h0IGJhY2sg
aW50byB0aGUgc3RhY2ssIGh1cnQgdXMgaW4gYW55IHdheT8gVGhlIGFzbndlciBpcyB0aGF0IE9T
UiBleGl0cworICAgIC8vIGFyZSByYXJlLiBPdXIgdGllcmluZyBzdHJhdGVneSBlbnN1cmVzIHRo
aXMuIFRoaXMgaXMgYmVjYXVzZSBpZiBhbiBPU1IgZXhpdCBpcworICAgIC8vIHRha2VuIG1vcmUg
dGhhbiB+MTAwIHRpbWVzLCB3ZSBqZXR0aXNvbiB0aGUgREZHIGNvZGUgYmxvY2sgYWxvbmcgd2l0
aCBhbGwgb2YgaXRzCisgICAgLy8gZXhpdHMuIEl0IGlzIGltcG9zc2libGUgZm9yIGFuIE9TUiBl
eGl0IC0gaS5lLiB0aGUgY29kZSB3ZSBjb21waWxlIGJlbG93IC0gdG8KKyAgICAvLyBleGVjdXRl
IGZyZXF1ZW50bHkgZW5vdWdoIGZvciB0aGUgY29kZWdlbiB0byBtYXR0ZXIgdGhhdCBtdWNoLiBJ
dCBwcm9iYWJseSBtYXR0ZXJzCisgICAgLy8gZW5vdWdoIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB0
dXJuIHRoaXMgaW50byBzb21lIHN1cGVyLXNsb3cgZnVuY3Rpb24gY2FsbCwgYnV0IHNvCisgICAg
Ly8gbG9uZyBhcyB3ZSdyZSBnZW5lcmF0aW5nIHN0cmFpZ2h0LWxpbmUgY29kZSwgdGhhdCBjb2Rl
IGNhbiBiZSBwcmV0dHkgYmFkLiBBbHNvCisgICAgLy8gYmVjYXVzZSB3ZSB0ZW5kIHRvIGV4aXQg
b25seSBhbG9uZyBvbmUgT1NSIGV4aXQgZnJvbSBhbnkgREZHIGNvZGUgYmxvY2sgLSB0aGF0J3Mg
YW4KKyAgICAvLyBlbXBpcmljYWwgcmVzdWx0IHRoYXQgd2UncmUgZXh0cmVtZWx5IGNvbmZpZGVu
dCBhYm91dCAtIHRoZSBjb2RlIHNpemUgb2YgdGhpcworICAgIC8vIGRvZXNuJ3QgbWF0dGVyIG11
Y2guIEhlbmNlIGFueSBhdHRlbXB0IHRvIG9wdGltaXplIHRoZSBjb2RlZ2VuIGhlcmUgaXMganVz
dCBwdXJlbHkKKyAgICAvLyBoYXJtZnVsIHRvIHRoZSBzeXN0ZW06IGl0IHByb2JhYmx5IHdvbid0
IHJlZHVjZSBlaXRoZXIgbmV0IG1lbW9yeSB1c2FnZSBvciBuZXQKKyAgICAvLyBleGVjdXRpb24g
dGltZS4gSXQgd2lsbCBvbmx5IHByZXZlbnQgdXMgZnJvbSBjbGVhbmx5IGRlY291cGxpbmcgIndo
ZXJlIHdhcyB0aGUKKyAgICAvLyB2YXJpYWJsZSIgZnJvbSAiaG93IHdhcyBpdCByZXByZXNlbnRl
ZCIsIHdoaWNoIHdpbGwgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBhZGQKKyAgICAvLyBmZWF0
dXJlcyBpbiB0aGUgZnV0dXJlIGFuZCBpdCB3aWxsIG1ha2UgaXQgaGFyZGVyIHRvIHJlYXNvbiBh
Ym91dCBidWdzLgorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNj
cmF0Y2ggYnVmZmVyLgorCisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXpl
KCkpOworICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7
CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFu
ZHNbaW5kZXhdOworCisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAg
ICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50
NTJJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICAgICAgaml0
LnN0b3JlNjQocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBBbmQgdm9pbGEsIGFsbCBHUFJzIGFyZSBmcmVlIHRvIHJldXNlLgor
CisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVy
LgorCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKKworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAgICBjYXNlIEluRlBSOgorICAg
ICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2gg
KyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShy
ZWNvdmVyeS5mcHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdywgYWxsIEZQUnMgYXJlIGFsc28gZnJl
ZS4KKworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0
Y2ggYnVmZmVyLiBGb3Igc2ltcGxpY2l0eSB3ZQorICAgIC8vIGRvIHRoaXMgZXZlbiBmb3Igc3Rh
dGUgdGhhdCdzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAv
LyBJdCBtYWtlcyB0aGluZ3Mgc2ltcGxlciBsYXRlci4KKworICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisKKyAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNl
IEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJ
bkpTU3RhY2s6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAg
ICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIFN0cmljdEludDUy
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIHN0YWNrIHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdl
IGF0IGV4aXQuIFRoaXMKKyAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERG
RyB1c2VkLiBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMK
KyAgICAvLyB1c2VkIGJ5IGJhc2VsaW5lLgorICAgIGppdC5hZGRQdHIoCisgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVv
ZihSZWdpc3RlcikpLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFJlc3RvcmUg
dGhlIERGRyBjYWxsZWUgc2F2ZXMgYW5kIHRoZW4gc2F2ZSB0aGUgb25lcyB0aGUgYmFzZWxpbmUg
SklUIHVzZXMuCisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBqaXQuZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvcihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSk7CisKKyAgICAvLyBU
aGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJpZXMgYmVs
b3cuCisgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKKyAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworCisgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0
dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CisKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworCisgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAg
ICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNl
IEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAg
ICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFVuYm94
ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAg
ICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CisgICAgICAgIGNhc2Ug
SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2gg
KyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnJzaGlmdDY0KAorICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUy
U2hpZnRBbW91bnQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuYm94SW50NTIo
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgIGNhc2UgU3RyaWN0
SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2gg
KyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmJveEludDUyKEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJ
bkpTU3RhY2s6CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRGly
ZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIENsb25lZEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHll
dC4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNv
dmVyZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50
cworICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhl
ci4gQnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5CisgICAgLy8gcmVm
ZXIgdG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0
aGlzIGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgorICAgIC8vIE5vdGUgdGhhdCB3
ZSBhbHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBt
YXRlcmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKKyAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29w
ZSAtIGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KKworICAgIGVtaXRSZXN0
b3JlQXJndW1lbnRzKGppdCwgb3BlcmFuZHMpOworCisgICAgLy8gQWRqdXN0IHRoZSBvbGQgSklU
J3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAg
ICAvLyB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3
IEpJVCwgc28gdGhlIGV4ZWN1dGUKKyAgICAvLyBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZy
YW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyB0aGF0
IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIg
Y2FsbCBmcmFtZSdzCisgICAgLy8gT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhl
IGZvbGxvd2luZyBpcyB0cnVlOgorICAgIC8vCisgICAgLy8gKGEpIENvZGUgdGhlIHBlcmZvcm1z
IGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKKyAgICAvLyAg
ICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3
ZSBkb24ndAorICAgIC8vICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkgdG9vIGFnZ3Jlc3Np
dmVseSAoc2VlIChjKSBiZWxvdykuCisgICAgLy8KKyAgICAvLyAoYikgSWYgdGhlcmUgaXMgY29k
ZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAorICAgIC8v
ICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBh
IGNoYW5jZSB0bworICAgIC8vICAgICBwZXJmb3JtIE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0
IHRoYXQgd2UndmUgZXhpdGVkLgorICAgIC8vCisgICAgLy8gKGMpIENvZGUgdGhlIHBlcmZvcm1z
IGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAg
IGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkg
aXMKKyAgICAvLyAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KKyAgICAvLworICAgIC8vIChk
KSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3QgcmVzdWx0IGlu
IHRoZSBjb2RlCisgICAgLy8gICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJl
Y29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8KKyAgICAvLyBUbyBlbnN1cmUg
KGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3Vs
ZCBlbmRhbmdlcgorICAgIC8vIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0
IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKKyAgICAvLyBldmVyeSBjYWxsIGZyYW1l
IHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucwor
ICAgIC8vIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRo
ZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1Ig
ZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vIHdpbGwgb25s
eSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEg
cHJldHR5CisgICAgLy8gZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0
IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyBzaW5jZSBlYWNoIHNwZWN1bGF0aW9u
IGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KKyAgICAvLyBTbyB3ZSBj
aGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlm
aWNhbnRseQorICAgIC8vIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3
YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKKyAgICAvLyB0aGVyZSBoYXZlIGJlZW4gYSBs
YXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8v
IGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vIGNv
dW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKworICAgIGhhbmRsZUV4aXRDb3Vu
dHMoaml0LCBleGl0KTsKKworICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCisKKyAg
ICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7CisKKyAgICAvLyBBbmQgZmluaXNo
LgorICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldCh2bSwgaml0LCBleGl0KTsKK30KKyNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQorCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6ZGVidWdPcGVy
YXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGRlYnVn
SW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIFNwZWN1bGF0
aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRpb25G
YWlsdXJlRGVidWdJbmZvKj4oZGVidWdJbmZvUmF3KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVy
ZSBpbiAiLCAqY29kZUJsb2NrKTsKKyAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCB2bS0+b3NyRXhp
dEluZGV4LCAiIChiYyMiLCBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2lu
ZFRvU3RyaW5nKGRlYnVnSW5mby0+a2luZCksICIpIHdpdGggIik7CisgICAgaWYgKGFsdGVybmF0
aXZlKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiZXhlY3V0ZUNvdW50ZXIgPSAi
LCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIsIHJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCksCisgICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAi
LCBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUuIHdlJ3ZlIGJl
ZW4gamV0dGlzb25lZCkiKTsKKyAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCIgICAgR1BScyBh
dCB0aW1lIG9mIGV4aXQ6Iik7CisgICAgY2hhciogc2NyYXRjaFBvaW50ZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oc2NyYXRjaCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGRhdGFMb2coIiAiLCBHUFJJbmZvOjpkZWJ1Z05hbWUo
Z3ByKSwgIjoiLCBSYXdQb2ludGVyKCpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHNjcmF0
Y2hQb2ludGVyKSkpOworICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworICAgIH0KKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIiAgICBGUFJz
IGF0IHRpbWUgb2YgZXhpdDoiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5m
bzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgZGF0YUxvZygiICIsIEZQUkluZm86OmRlYnVnTmFt
ZShmcHIpLCAiOiIpOworICAgICAgICB1aW50NjRfdCBiaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVpbnQ2NF90Kj4oc2NyYXRjaFBvaW50ZXIpOworICAgICAgICBkb3VibGUgdmFsdWUgPSAq
cmVpbnRlcnByZXRfY2FzdF9wdHI8ZG91YmxlKj4oc2NyYXRjaFBvaW50ZXIpOworICAgICAgICBk
YXRhTG9nRigiJWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2YWx1ZSk7
CisgICAgICAgIHNjcmF0Y2hQb2ludGVyICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
fQorICAgIGRhdGFMb2coIlxuIik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgc3RydWN0
IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmLCBWTSYsIGNvbnN0IE9TUkV4aXQmLCBjb25zdCBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICBzdGF0
aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYpOworICAgIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gZGVidWdP
cGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCop
IFdURl9JTlRFUk5BTDsKIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8g
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShub25leGlzdGVudCkKQEAgLTEs
NDExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVy
LmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUUzMl82NCkKLQotI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7Ci0KLXZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZN
JiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
IG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKLXsKLSAgICAvLyBQcm8t
Zm9ybWEgc3R1ZmYuCi0gICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAg
ICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxh
dGlvbkZhaWx1cmVEZWJ1Z0luZm87Ci0gICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0
LmNvZGVCbG9jaygpOwotICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAg
ICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICBqaXQuZGVidWdDYWxsKHZtLCBkZWJ1Z09wZXJh
dGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLQotICAgIC8v
IFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkg
d2hlbiBhbiBvcGVyYXRpb24KLSAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZl
cmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBp
ZiAocmVjb3ZlcnkpIHsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAg
ICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICBqaXQuc3ViMzIocmVjb3Zlcnkt
PnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGU6Ci0gICAgICAgICAgICBqaXQuc3ViMzIoQXNz
ZW1ibHlIZWxwZXJzOjpJbW0zMihyZWNvdmVyeS0+aW1tZWRpYXRlKCkpLCByZWNvdmVyeS0+ZGVz
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBSZWZpbmUgc29tZSB2YWx1ZSBwcm9maWxlLCBpZiBhcHByb3ByaWF0ZS4KLSAgICAK
LSAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNvdXJjZSkgewotICAgICAgICBpZiAoZXhpdC5tX2tp
bmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbSBo
YXMgYW4gYXJyYXkgcHJvZmlsZSwgdGhlbgotICAgICAgICAgICAgLy8gcmVmaW5lIGl0LiBJZiBp
dCBkb2Vzbid0LCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBsYXR0ZXIgY291bGQgaGFwcGVuIGZvcgot
ICAgICAgICAgICAgLy8gaG9pc3RlZCBjaGVja3MsIG9yIGNoZWNrcyBlbWl0dGVkIGZvciBvcGVy
YXRpb25zIHRoYXQgZGlkbid0IGhhdmUgYXJyYXkKLSAgICAgICAgICAgIC8vIHByb2ZpbGluZyAt
IGVpdGhlciBvcHMgdGhhdCBhcmVuJ3QgYXJyYXkgYWNjZXNzZXMgYXQgYWxsLCBvciB3ZXJlbid0
Ci0gICAgICAgICAgICAvLyBrbm93biB0byBiZSBhcnJheSBhY2Nlc2VzIGluIHRoZSBieXRlY29k
ZS4gVGhlIGxhdHRlciBjYXNlIGlzIGEgRklYTUUKLSAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBm
b3JtZXIgY2FzZSBpcyBhbiBvdXRjb21lIG9mIGEgQ2hlY2tTdHJ1Y3R1cmUgbm90IGtub3dpbmcg
d2h5Ci0gICAgICAgICAgICAvLyBpdCB3YXMgZW1pdHRlZCAoY291bGQgYmUgZWl0aGVyIGR1ZSB0
byBhbiBpbmxpbmUgY2FjaGUgb2YgYSBwcm9wZXJ0eQotICAgICAgICAgICAgLy8gcHJvcGVydHkg
YWNjZXNzLCBvciBkdWUgdG8gYW4gYXJyYXkgcHJvZmlsZSkuCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIE5vdGU6IFdlIGFyZSBmcmVlIHRvIGFzc3VtZSB0aGF0IHRoZSBqc1ZhbHVlU291
cmNlIGlzIGFscmVhZHkga25vd24gdG8KLSAgICAgICAgICAgIC8vIGJlIGEgY2VsbCBzaW5jZSBi
b3RoIEJhZENhY2hlIGFuZCBCYWRJbmRleGluZ1R5cGUgZXhpdHMgb2NjdXIgYWZ0ZXIKLSAgICAg
ICAgICAgIC8vIHRoZSBjZWxsIGNoZWNrIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZC4KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJy
YXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgdXNlZFJlZ2lzdGVyMTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVy
MjsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMSA9IGV4aXQubV9qc1ZhbHVlU291
cmNlLmJhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyMiA9IEludmFsaWRH
UFJSZWc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVyMSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIyID0gSW52YWxpZEdQUlJlZzsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVy
MiA9IGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7Ci0gICAgICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyOwotICAgICAgICAgICAgICAgIHNjcmF0Y2gxID0gQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3Rl
cjIpOwotICAgICAgICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKHVzZWRSZWdpc3RlcjEsIHVzZWRSZWdpc3RlcjIsIHNjcmF0Y2gxKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMSk7Ci0gICAgICAg
ICAgICAgICAgaml0LnB1c2goc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVT
b3VyY2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNo
MTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVl
U291cmNlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
c2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
LSAgICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNj
cmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihzY3Jh
dGNoMSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5vcjMyKHNjcmF0Y2gyLCBBc3Nl
bWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5
TW9kZXMoKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5wb3Aoc2Ny
YXRjaDIpOwotICAgICAgICAgICAgICAgIGppdC5wb3Aoc2NyYXRjaDEpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkgewotICAgICAgICAgICAgaWYg
KGV4aXQubV9qc1ZhbHVlU291cmNlLmlzQWRkcmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
U2F2ZSBhIHJlZ2lzdGVyIHNvIHdlIGNhbiB1c2UgaXQuCi0gICAgICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hQYXlsb2FkID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hU
YWcgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuYmFzZSgpLCBzY3JhdGNoUGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgaml0LnB1c2hUb1Nh
dmUoc2NyYXRjaFBheWxvYWQpOwotICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0
Y2hUYWcpOwotCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgc2NyYXRjaChzY3JhdGNoVGFn
LCBzY3JhdGNoUGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoKSwgc2NyYXRjaCk7Ci0g
ICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2hU
YWcpOwotICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFBheWxvYWQpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5oYXNLbm93blRhZygp
KSB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hUYWcgPSBBc3NlbWJseUhlbHBlcnM6
OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpKTsKLSAg
ICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoVGFnKTsKLSAgICAgICAgICAgICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0Lm1fanNWYWx1ZVNv
dXJjZS50YWcoKSksIHNjcmF0Y2hUYWcpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlKHNjcmF0Y2hUYWcsIGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKSk7Ci0gICAg
ICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgaml0LnBvcFRvUmVzdG9yZShzY3JhdGNoVGFnKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHByb2ZpbGUuZW1pdFJlcG9ydFZhbHVlKGppdCwgZXhpdC5tX2pz
VmFsdWVTb3VyY2UucmVncygpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBEbyBh
IHNpbXBsaWZpZWQgT1NSIGV4aXQuIFNlZSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAncyBjb21t
ZW50IHJlZ2FyZGluZyBob3cgYW5kIHdueSB3ZQotICAgIC8vIGRvIHRoaXMgc2ltcGxlIGFwcHJv
YWNoLgotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2gg
YnVmZmVyLgotICAgIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3BlcmFuZHMuc2l6ZSgp
KTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwot
ICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7Ci0gICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgIGNhc2UgVW5i
b3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgcmVjb3ZlcnkuZ3ByKCksCi0gICAg
ICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRj
aCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAg
ICAgICAgICAgICAgICByZWNvdmVyeS50YWdHUFIoKSwKLSAgICAgICAgICAgICAgICAmYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMu
dGFnKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIHJlY292ZXJ5
LnBheWxvYWRHUFIoKSwKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGFsbCBHUFJzIGFyZSBm
cmVlIHRvIHJldXNlLgotICAgIAotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRv
IHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAKLSAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJ
bkZQUjoKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGFsbCBGUFJzIGFyZSBmcmVlIHRvIHJldXNlLgotICAg
IAotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0Y2gg
YnVmZmVyLiBGb3Igc2ltcGxpY2l0eSB3ZQotICAgIC8vIGRvIHRoaXMgZXZlbiBmb3Igc3RhdGUg
dGhhdCdzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KLSAgICAvLyBJ
dCBtYWtlcyB0aGluZ3Mgc2ltcGxlciBsYXRlci4KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCi0gICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5zdG9y
ZTMyKAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLAotICAgICAgICAgICAgICAgICZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFz
Qml0cy50YWcpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDEsCi0gICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5lZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIHN0YWNrIHBvaW50ZXIgYWNjb3VudHMgZm9yIHRoZSB3b3JzdC1jYXNlIHN0YWNrIHVzYWdl
IGF0IGV4aXQuIFRoaXMKLSAgICAvLyBjb3VsZCB0b2FzdCBzb21lIHN0YWNrIHRoYXQgdGhlIERG
RyB1c2VkLiBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZSBzdG9yaW5nIHRvIHN0YWNrIG9mZnNldHMK
LSAgICAvLyB1c2VkIGJ5IGJhc2VsaW5lLgotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKAotICAgICAgICAgICAgLWppdC5jb2RlQmxvY2soKS0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCAqIHNpemVv
ZihSZWdpc3RlcikpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBSZXN0
b3JlIHRoZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2Vs
aW5lIEpJVCB1c2VzLgotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgaml0
LmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3Ioaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOwotCi0gICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKLQotICAgIC8vIERvIGFsbCBk
YXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3Rh
Y2suCi0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRz
LnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKLQotICAgICAgICBpZiAocmVnLmlzTG9j
YWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2Rl
QmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7Ci0KLSAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIEluUGFp
cjoKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgSW5GUFI6
Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcsCi0g
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMigK
LSAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihz
Y3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKLSAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUMCwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVy
YW5kKSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMSwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3Bl
cmFuZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBV
bmJveGVkRG91YmxlSW5GUFI6Ci0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2ggKyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2FkRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7Ci0gICAgICAgICAgICBqaXQucHVyaWZ5TmFOKEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5
bG9hZCwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmUzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDAsCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKLSAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0
YWNrOgotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAmYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5
bG9hZCwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQu
c3RvcmUzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMCwKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3Iob3BlcmFuZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJ
bkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICZiaXR3
aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0
cy5wYXlsb2FkLAotICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1QwLAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQo
KS50YWcoKSksCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFu
ZCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLAotICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IHRoYXQgdGhpbmdzIG9u
IHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBh
c3N1bWUgdGhhdCBhcmd1bWVudHMKLSAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRo
ZXkgb25seQotICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fscy4gSGVuY2Ug
d2h5IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBzZW5zaWJsZS4K
LSAgICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRoZSBhcmd1bWVu
dHMgbWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCi0gICAgLy8gaW5s
aW5lIGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxkbid0IGRvIHRo
YXQuCi0gICAgCi0gICAgZW1pdFJlc3RvcmVBcmd1bWVudHMoaml0LCBvcGVyYW5kcyk7Ci0KLSAg
ICAvLyBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBl
eGl0aW5nIE9TUiwgd2Uga25vdwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMg
Y29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50
ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBj
YWxsIGZyYW1lcwotICAgIC8vIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQg
YXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ug
d2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVu
dGVyIG9wdGltaXplZAotICAgIC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXpl
ZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQgdG8gZG8gc3Vj
aCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAg
IC8vIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwg
cnVubmluZyB0aGUgb2xkCi0gICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1In
ZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBlcmZvcm0gT1NS
IGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAv
LyAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVs
eSByZXRyeSBPU1IKLSAgICAvLyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFy
ZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5z
aXZlLgotICAgIC8vCi0gICAgLy8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9z
ZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVubmluZyBpbiBh
IGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAg
ICAvLwotICAgIC8vIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUg
Y291bnRlciB0bwotICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4g
VGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAoYiksIHNp
bmNlIHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgot
ICAgIC8vIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5
LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9u
IGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vIGJlY29t
ZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NS
IGVudHJ5Ci0gICAgLy8gd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhl
IG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmlu
ZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8v
IHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBj
b3VudGVyLgotICAgIC8vIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxh
dGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51
bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAg
IC8vIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElm
IHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRo
ZSBjb3VudGVyIHRvCi0gICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
LgotICAgIAotICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBleGl0KTsKLSAgICAKLSAgICAvLyBS
ZWlmeSBpbmxpbmVkIGNhbGwgZnJhbWVzLgotICAgIAotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoaml0LCBleGl0KTsKLSAgICAKLSAgICAvLyBBbmQgZmluaXNoLgotICAgIGFkanVzdEFuZEp1
bXBUb1RhcmdldCh2bSwgaml0LCBleGl0KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAkocmV2aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXIuaCIKLQotI2lmIEVOQUJM
RShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQotCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgotI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlZpcnR1
YWxSZWdpc3Rlci5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLQotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVs
cGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZh
bHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCi17
Ci0gICAgaml0LmppdEFzc2VydFRhZ3NJblBsYWNlKCk7Ci0KLSAgICAvLyBQcm8tZm9ybWEgc3R1
ZmYuCi0gICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAgICAgICBTcGVj
dWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1
cmVEZWJ1Z0luZm87Ci0gICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNvZGVCbG9j
aygpOwotICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVi
dWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7
Ci0gICAgICAgIAotICAgICAgICBqaXQuZGVidWdDYWxsKHZtLCBkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLQotICAgIC8vIFBlcmZvcm0g
c3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBv
cGVyYXRpb24KLSAgICAvLyBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0
aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KLSAgICAKLSAgICBpZiAocmVjb3Zl
cnkpIHsKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
U3BlY3VsYXRpdmVBZGQ6Ci0gICAgICAgICAgICBqaXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCBy
ZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgotICAgICAgICAgICAgaml0LnN1
YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgpKSwgcmVjb3Zl
cnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBqaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAg
IGppdC54b3I2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVmaW5lIHNvbWUgYXJyYXkgYW5kL29yIHZhbHVlIHBy
b2ZpbGUsIGlmIGFwcHJvcHJpYXRlLgotICAgIAotICAgIGlmICghIWV4aXQubV9qc1ZhbHVlU291
cmNlKSB7Ci0gICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2lu
ZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlv
biB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tIGhhcyBhbiBhcnJheSBwcm9maWxlLCB0aGVuCi0g
ICAgICAgICAgICAvLyByZWZpbmUgaXQuIElmIGl0IGRvZXNuJ3QsIHRoZW4gZG8gbm90aGluZy4g
VGhlIGxhdHRlciBjb3VsZCBoYXBwZW4gZm9yCi0gICAgICAgICAgICAvLyBob2lzdGVkIGNoZWNr
cywgb3IgY2hlY2tzIGVtaXR0ZWQgZm9yIG9wZXJhdGlvbnMgdGhhdCBkaWRuJ3QgaGF2ZSBhcnJh
eQotICAgICAgICAgICAgLy8gcHJvZmlsaW5nIC0gZWl0aGVyIG9wcyB0aGF0IGFyZW4ndCBhcnJh
eSBhY2Nlc3NlcyBhdCBhbGwsIG9yIHdlcmVuJ3QKLSAgICAgICAgICAgIC8vIGtub3duIHRvIGJl
IGFycmF5IGFjY2VzZXMgaW4gdGhlIGJ5dGVjb2RlLiBUaGUgbGF0dGVyIGNhc2UgaXMgYSBGSVhN
RQotICAgICAgICAgICAgLy8gd2hpbGUgdGhlIGZvcm1lciBjYXNlIGlzIGFuIG91dGNvbWUgb2Yg
YSBDaGVja1N0cnVjdHVyZSBub3Qga25vd2luZyB3aHkKLSAgICAgICAgICAgIC8vIGl0IHdhcyBl
bWl0dGVkIChjb3VsZCBiZSBlaXRoZXIgZHVlIHRvIGFuIGlubGluZSBjYWNoZSBvZiBhIHByb3Bl
cnR5Ci0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBhY2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBw
cm9maWxlKS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgIGlmIChBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3Jp
Z2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVyOwotICAgICAgICAgICAgICAgIGlmIChleGl0
Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJl
Z2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMjsKLSAgICAgICAgICAgICAgICBz
Y3JhdGNoMSA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIp
OwotICAgICAgICAgICAgICAgIHNjcmF0Y2gyID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKHVzZWRSZWdpc3Rlciwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hU
b1NhdmUoc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3Jh
dGNoMik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaml0
LnB1c2goc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHVzaChzY3JhdGNoMik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNB
ZGRyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNoMTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVlU291cmNlLmdw
cigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoMSk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBq
aXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwotICAgICAgICAg
ICAgICAgIGppdC5sc2hpZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAg
IGppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnBv
cFRvUmVzdG9yZShzY3JhdGNoMik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3Rv
cmUoc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5wb3Aoc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0
Y2gxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
eGl0Lm1fdmFsdWVQcm9maWxlKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaXNBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRo
YXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwKLSAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0
LgotICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4
aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpT
VmFsdWVSZWdzKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIp
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBKU1ZhbHVlUmVncyhl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IC8vIFdoYXQgZm9sbG93cyBpcyBhbiBpbnRlbnRpb25hbGx5IHNpbXBsZSBPU1IgZXhpdCBpbXBs
ZW1lbnRhdGlvbiB0aGF0IGdlbmVyYXRlcwotICAgIC8vIGZhaXJseSBwb29yIGNvZGUgYnV0IGlz
IHZlcnkgZWFzeSB0byBoYWNrLiBJbiBwYXJ0aWN1bGFyLCBpdCBkdW1wcyBhbGwgc3RhdGUgdGhh
dAotICAgIC8vIG5lZWRzIGNvbnZlcnNpb24gaW50byBhIHNjcmF0Y2ggYnVmZmVyIHNvIHRoYXQg
aW4gc3RlcCA2LCB3aGVyZSB3ZSBhY3R1YWxseSBkbyB0aGUKLSAgICAvLyBjb252ZXJzaW9ucywg
d2Uga25vdyB0aGF0IGFsbCB0ZW1wIHJlZ2lzdGVycyBhcmUgZnJlZSB0byB1c2UgYW5kIHRoZSB2
YXJpYWJsZSBpcwotICAgIC8vIGRlZmluaXRlbHkgaW4gYSB3ZWxsLWtub3duIHNwb3QgaW4gdGhl
IHNjcmF0Y2ggYnVmZmVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBoYWQKLSAgICAvLyBvcmln
aW5hbGx5IGJlZW4gaW4gYSByZWdpc3RlciBvciBzcGlsbGVkLiBUaGlzIGFsbG93cyB1cyB0byBk
ZWNvdXBsZSAid2hlcmUgd2FzCi0gICAgLy8gdGhlIHZhcmlhYmxlIiBmcm9tICJob3cgd2FzIGl0
IHJlcHJlc2VudGVkIi4gQ29uc2lkZXIgdGhhdCB0aGUKLSAgICAvLyBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjayByZWNvdmVyeTogaXQgdGVsbHMgdXMgdGhhdCB0aGUgdmFsdWUgaXMgaW4gYQotICAg
IC8vIHBhcnRpY3VsYXIgcGxhY2UgYW5kIHRoYXQgdGhhdCBwbGFjZSBob2xkcyBhbiB1bmJveGVk
IGludDMyLiBXZSBoYXZlIHR3byBkaWZmZXJlbnQKLSAgICAvLyBwbGFjZXMgdGhhdCBhIHZhbHVl
IGNvdWxkIGJlIChkaXNwbGFjZWQsIHJlZ2lzdGVyKSBhbmQgYSBidW5jaCBvZiBkaWZmZXJlbnQK
LSAgICAvLyB3YXlzIG9mIHJlcHJlc2VudGluZyBhIHZhbHVlLiBUaGUgbnVtYmVyIG9mIHJlY292
ZXJpZXMgaXMgdHdvICogYSBidW5jaC4gVGhlIGNvZGUKLSAgICAvLyBiZWxvdyBtZWFucyB0aGF0
IHdlIGhhdmUgdG8gaGF2ZSB0d28gKyBhIGJ1bmNoIGNhc2VzIHJhdGhlciB0aGFuIHR3byAqIGEg
YnVuY2guCi0gICAgLy8gT25jZSB3ZSBoYXZlIGxvYWRlZCB0aGUgdmFsdWUgZnJvbSB3aGVyZXZl
ciBpdCB3YXMsIHRoZSByZWJveGluZyBpcyB0aGUgc2FtZQotICAgIC8vIHJlZ2FyZGxlc3Mgb2Yg
aXRzIGxvY2F0aW9uLiBMaWtld2lzZSwgYmVmb3JlIHdlIGRvIHRoZSByZWJveGluZywgdGhlIHdh
eSB3ZSBnZXQgdG8KLSAgICAvLyB0aGUgdmFsdWUgKGkuZS4gd2hlcmUgd2UgbG9hZCBpdCBmcm9t
KSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIGl0cyB0eXBlLiBCZWNhdXNlCi0gICAgLy8gdGhl
IGNvZGUgYmVsb3cgYWx3YXlzIGR1bXBzIGV2ZXJ5dGhpbmcgaW50byBhIHNjcmF0Y2ggYnVmZmVy
IGZpcnN0LCB0aGUgdHdvCi0gICAgLy8gcXVlc3Rpb25zIGJlY29tZSBvcnRob2dvbmFsLCB3aGlj
aCBzaW1wbGlmaWVzIGFkZGluZyBuZXcgdHlwZXMgYW5kIGFkZGluZyBuZXcKLSAgICAvLyBsb2Nh
dGlvbnMuCi0gICAgLy8KLSAgICAvLyBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb246IGRvZXMgdXNp
bmcgc3VjaCBhIHN1Ym9wdGltYWwgaW1wbGVtZW50YXRpb24gb2YgT1NSIGV4aXQsCi0gICAgLy8g
d2hlcmUgd2UgYWx3YXlzIGVtaXQgY29kZSB0byBkdW1wIGFsbCBzdGF0ZSBpbnRvIGEgc2NyYXRj
aCBidWZmZXIgb25seSB0byB0aGVuCi0gICAgLy8gZHVtcCBpdCByaWdodCBiYWNrIGludG8gdGhl
IHN0YWNrLCBodXJ0IHVzIGluIGFueSB3YXk/IFRoZSBhc253ZXIgaXMgdGhhdCBPU1IgZXhpdHMK
LSAgICAvLyBhcmUgcmFyZS4gT3VyIHRpZXJpbmcgc3RyYXRlZ3kgZW5zdXJlcyB0aGlzLiBUaGlz
IGlzIGJlY2F1c2UgaWYgYW4gT1NSIGV4aXQgaXMKLSAgICAvLyB0YWtlbiBtb3JlIHRoYW4gfjEw
MCB0aW1lcywgd2UgamV0dGlzb24gdGhlIERGRyBjb2RlIGJsb2NrIGFsb25nIHdpdGggYWxsIG9m
IGl0cwotICAgIC8vIGV4aXRzLiBJdCBpcyBpbXBvc3NpYmxlIGZvciBhbiBPU1IgZXhpdCAtIGku
ZS4gdGhlIGNvZGUgd2UgY29tcGlsZSBiZWxvdyAtIHRvCi0gICAgLy8gZXhlY3V0ZSBmcmVxdWVu
dGx5IGVub3VnaCBmb3IgdGhlIGNvZGVnZW4gdG8gbWF0dGVyIHRoYXQgbXVjaC4gSXQgcHJvYmFi
bHkgbWF0dGVycwotICAgIC8vIGVub3VnaCB0aGF0IHdlIGRvbid0IHdhbnQgdG8gdHVybiB0aGlz
IGludG8gc29tZSBzdXBlci1zbG93IGZ1bmN0aW9uIGNhbGwsIGJ1dCBzbwotICAgIC8vIGxvbmcg
YXMgd2UncmUgZ2VuZXJhdGluZyBzdHJhaWdodC1saW5lIGNvZGUsIHRoYXQgY29kZSBjYW4gYmUg
cHJldHR5IGJhZC4gQWxzbwotICAgIC8vIGJlY2F1c2Ugd2UgdGVuZCB0byBleGl0IG9ubHkgYWxv
bmcgb25lIE9TUiBleGl0IGZyb20gYW55IERGRyBjb2RlIGJsb2NrIC0gdGhhdCdzIGFuCi0gICAg
Ly8gZW1waXJpY2FsIHJlc3VsdCB0aGF0IHdlJ3JlIGV4dHJlbWVseSBjb25maWRlbnQgYWJvdXQg
LSB0aGUgY29kZSBzaXplIG9mIHRoaXMKLSAgICAvLyBkb2Vzbid0IG1hdHRlciBtdWNoLiBIZW5j
ZSBhbnkgYXR0ZW1wdCB0byBvcHRpbWl6ZSB0aGUgY29kZWdlbiBoZXJlIGlzIGp1c3QgcHVyZWx5
Ci0gICAgLy8gaGFybWZ1bCB0byB0aGUgc3lzdGVtOiBpdCBwcm9iYWJseSB3b24ndCByZWR1Y2Ug
ZWl0aGVyIG5ldCBtZW1vcnkgdXNhZ2Ugb3IgbmV0Ci0gICAgLy8gZXhlY3V0aW9uIHRpbWUuIEl0
IHdpbGwgb25seSBwcmV2ZW50IHVzIGZyb20gY2xlYW5seSBkZWNvdXBsaW5nICJ3aGVyZSB3YXMg
dGhlCi0gICAgLy8gdmFyaWFibGUiIGZyb20gImhvdyB3YXMgaXQgcmVwcmVzZW50ZWQiLCB3aGlj
aCB3aWxsIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gYWRkCi0gICAgLy8gZmVhdHVyZXMgaW4g
dGhlIGZ1dHVyZSBhbmQgaXQgd2lsbCBtYWtlIGl0IGhhcmRlciB0byByZWFzb24gYWJvdXQgYnVn
cy4KLQotICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gR1BScyBpbnRvIHRoZSBzY3JhdGNoIGJ1
ZmZlci4KLSAgICAKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRj
aEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7
Ci0gICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFu
ZHNbaW5kZXhdOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgewotICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRT
dHJpY3RJbnQ1MkluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAg
ICAgICBqaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaCArIGluZGV4KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBbmQgdm9pbGEsIGFsbCBH
UFJzIGFyZSBmcmVlIHRvIHJldXNlLgotCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJz
IGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLgotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIAotICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgVW5ib3hlZERv
dWJsZUluRlBSOgotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgaml0Lm1vdmUoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBpbmRleCksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBOb3csIGFsbCBGUFJzIGFyZSBhbHNvIGZyZWUuCi0g
ICAgCi0gICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB0aGUgc3RhY2sgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIuIEZvciBzaW1wbGljaXR5IHdlCi0gICAgLy8gZG8gdGhpcyBldmVuIGZvciBzdGF0
ZSB0aGF0J3MgYWxyZWFkeSBpbiB0aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgotICAgIC8v
IEl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyIGxhdGVyLgotCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBTdHJp
Y3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0
Y2ggKyBpbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBO
ZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFjayBwb2ludGVyIGFjY291bnRzIGZvciB0aGUgd29y
c3QtY2FzZSBzdGFjayB1c2FnZSBhdCBleGl0LiBUaGlzCi0gICAgLy8gY291bGQgdG9hc3Qgc29t
ZSBzdGFjayB0aGF0IHRoZSBERkcgdXNlZC4gV2UgbmVlZCB0byBkbyBpdCBiZWZvcmUgc3Rvcmlu
ZyB0byBzdGFjayBvZmZzZXRzCi0gICAgLy8gdXNlZCBieSBiYXNlbGluZS4KLSAgICBqaXQuYWRk
UHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKLSAgICAgICAgICAgIC1q
aXQuY29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgCi0gICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZl
IHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwotICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpKTsKLQotICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0
ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KLSAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSk7Ci0KLSAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRo
ZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgotICAgIAotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBvcGVyYW5kcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7Ci0K
LSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0
PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGludCBvcGVyYW5k
ID0gcmVnLm9mZnNldCgpOwotCi0gICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgot
ICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBDZWxsRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRl
eCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAg
ICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgaml0LmxvYWQ2
NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgIGNhc2UgSW50NTJE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRl
eCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LnJzaGlmdDY0KAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRB
bW91bnQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuYm94SW50NTIoR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgRlBSSW5mbzo6ZnBSZWdU
MCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6Ci0gICAgICAgIGNhc2Ug
U3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNj
cmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0LmJveEludDUy
KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5wdXJpZnlO
YU4oRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86
OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAg
ICAgICAgIGppdC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksCi0gICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhh
dFdlcmVOb3RDcmVhdGVkOgotICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZDoKLSAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMsIHlldC4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGluZ3Mgb24gdGhlIHN0YWNrIGFyZSByZWNvdmVy
ZWQsIGRvIHRoZSBhcmd1bWVudHMgcmVjb3ZlcnkuIFdlIGFzc3VtZSB0aGF0IGFyZ3VtZW50cwot
ICAgIC8vIHJlY292ZXJpZXMgZG9uJ3QgcmVjdXJzaXZlbHkgcmVmZXIgdG8gZWFjaCBvdGhlci4g
QnV0LCB3ZSBkb24ndCB0cnkgdG8gYXNzdW1lIHRoYXQgdGhleSBvbmx5Ci0gICAgLy8gcmVmZXIg
dG8gY2VydGFpbiByYW5nZXMgb2YgbG9jYWxzLiBIZW5jZSB3aHkgd2UgbmVlZCB0byBkbyB0aGlz
IGhlcmUsIG9uY2UgdGhlIHN0YWNrIGlzIHNlbnNpYmxlLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBh
bHNvIHJvdWdobHkgYXNzdW1lIHRoYXQgdGhlIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBtYXRl
cmlhbGl6ZWQgb3V0c2lkZSBvZiBpdHMKLSAgICAvLyBpbmxpbmUgY2FsbCBmcmFtZSBzY29wZSAt
IGJ1dCBmb3Igbm93IHRoZSBERkcgd291bGRuJ3QgZG8gdGhhdC4KLSAgICAKLSAgICBlbWl0UmVz
dG9yZUFyZ3VtZW50cyhqaXQsIG9wZXJhbmRzKTsKLSAgICAKLSAgICAvLyBBZGp1c3QgdGhlIG9s
ZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25v
dwotICAgIC8vIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRo
ZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQotICAgIC8vIGNvdW50ZXIgb25seSBhZmZlY3RzIGNh
bGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwotICAgIC8v
IHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5v
dGhlciBjYWxsIGZyYW1lJ3MKLSAgICAvLyBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gICAgLy8KLSAgICAvLyAoYSkgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAotICAg
IC8vICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4g
QnV0IHdlIGRvbid0Ci0gICAgLy8gICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdn
cmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KLSAgICAvLwotICAgIC8vIChiKSBJZiB0aGVyZSBp
cyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCi0g
ICAgLy8gICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1InZCwgdGhlbiBpdCBzaG91bGQg
Z2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhl
IGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCi0gICAgLy8KLSAgICAvLyAoYykgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAv
LyAgICAgZW50cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBl
bnRyeSBpcwotICAgIC8vICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgotICAgIC8vCi0gICAg
Ly8gKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1
bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQg
aW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KLSAgICAvLwotICAgIC8vIFRvIGVu
c3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8v
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0
IHdvdWxkIGVuZGFuZ2VyCi0gICAgLy8gKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZlcnkgT1NS
IGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vIGV2ZXJ5IGNhbGwg
ZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBw
ZW5zCi0gICAgLy8gZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRo
ZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgotICAgIC8vIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5Ci0gICAgLy8gd2ls
bCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRv
ZXMgYSBwcmV0dHkKLSAgICAvLyBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gQnV0
IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAotICAgIC8vIHNpbmNlIGVhY2ggc3BlY3Vs
YXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vIFNv
IHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBz
aWduaWZpY2FudGx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMg
KHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBpZgotICAgIC8vIHRoZXJlIGhhdmUgYmVl
biBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0g
ICAgLy8gY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCi0gICAg
Ly8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgotICAgIAotICAgIGhhbmRs
ZUV4aXRDb3VudHMoaml0LCBleGl0KTsKLSAgICAKLSAgICAvLyBSZWlmeSBpbmxpbmVkIGNhbGwg
ZnJhbWVzLgotICAgIAotICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKLQot
ICAgIC8vIEFuZCBmaW5pc2guCi0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4
aXQpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkgJiYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlci5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKLSNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJERkdKSVRDb2RlLmgiCi0j
aW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBPU1JFeGl0
OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKQotewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgaW50
PiBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5v
ZGUgSUQgdG8gb3BlcmFuZC4KLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkCi0gICAgICAg
ICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIE1pbmlm
aWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKLSAgICAgICAgYXV0byBpdGVyID0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFk
eUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVn
cyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFk
ZHJlc3NGb3IoaXRlci0+dmFsdWUpLCByZWdzKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVZhbHVl
KHJlZ3MsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPQotICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCkt
PmRmZygpLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwotCi0gICAgICAg
IGludCBzdGFja09mZnNldDsKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAg
ICAgIHN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLAotICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGppdC5tb3ZlKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAot
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewotICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLAotICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDEpOwotICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0g
ICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAg
ICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4ob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0
ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0LnN0b3JlQ2VsbChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJh
bmQpKTsKLSAgICAgICAgCi0gICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlk
LCBvcGVyYW5kKTsKLSAgICB9Ci19Ci0KLXZvaWQgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0KLSAgICBpZiAodm0tPmNhbGxGcmFtZUZv
ckNhdGNoKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0g
ZXhlYyk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKTsKLSAgICAKLSAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVy
YWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdv
dWxkbid0Ci0gICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCi0gICAgRGVmZXJHQ0ZvckFXaGls
ZSBkZWZlckdDKHZtLT5oZWFwKTsKLQotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLT5vc3JF
eGl0SW5kZXg7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmco
KS0+b3NyRXhpdFtleGl0SW5kZXhdOwotICAgIAotICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpCi0gICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKLSAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzY29w
ZSwgISFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgICAgIAotICAgIAotICAgIHByZXBhcmVDb2Rl
T3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgCi0gICAgLy8g
Q29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiBvcGVyYW5kczsKLSAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnZhcmlhYmxlRXZl
bnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZygpLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4LCBv
cGVyYW5kcyk7Ci0gICAgCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSAwOwot
ICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkKLSAgICAgICAgcmVjb3Zl
cnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zcGVjdWxhdGlvblJlY292ZXJ5W2V4
aXQubV9yZWNvdmVyeUluZGV4XTsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwotCi0gICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKSB7
Ci0gICAgICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNh
dXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAgICAgLy8g
U28sIHdlIG11c3QgcmVzdG9yZSBvdXIgY2FsbCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4KLSAg
ICAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKnZtKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxs
RnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwK
LSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgICAgICBqaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxs
RnJhbWUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pIHsKLSAg
ICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlcjsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRp
b24gPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJF
eGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgZXhpdEluZGV4
LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVP
cmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNv
dW50YWJsZUludmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVy
RXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tcGlsZUV4
aXQoaml0LCAqdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7Ci0KLSAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7Ci0gICAgICAgIGV4aXQubV9jb2RlID0g
RklOQUxJWkVfQ09ERV9JRigKLSAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8
IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpLAot
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUg
KCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzIiwKLSAgICAgICAgICAgICAgICBl
eGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAg
ICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9j
aykuZGF0YSgpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVt
cENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKSk7Ci0gICAgfQotICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2Nr
KSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7Ci0gICAgCi0gICAgdm0t
Pm9zckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDIyMDI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgotI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKLSNpbmNsdWRlICJPcGVyYW5kcy5oIgotCi0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMDI5NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOTksNDQg
KzIxOTksNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQCiAgICAg
dm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9n
IEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBERkcuIikpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJ
T04gZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZShFeGVjU3RhdGUqIGV4ZWMs
IHZvaWQqIGRlYnVnSW5mb1Jhdywgdm9pZCogc2NyYXRjaCkKLXsKLSAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICAKLSAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19j
YXN0PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7Ci0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKLSAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIGRhdGFMb2coIlNw
ZWN1bGF0aW9uIGZhaWx1cmUgaW4gIiwgKmNvZGVCbG9jayk7Ci0gICAgZGF0YUxvZygiIEAgZXhp
dCAjIiwgdm0tPm9zckV4aXRJbmRleCwgIiAoYmMjIiwgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNl
dCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhkZWJ1Z0luZm8tPmtpbmQpLCAiKSB3aXRoICIpOwot
ICAgIGlmIChhbHRlcm5hdGl2ZSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImV4
ZWN1dGVDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCksCi0gICAg
ICAgICAgICAiLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLAotICAgICAgICAgICAgIiwgb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YUxvZygibm8gYWx0ZXJuYXRpdmUgY29kZSBibG9j
ayAoaS5lLiB3ZSd2ZSBiZWVuIGpldHRpc29uZWQpIik7Ci0gICAgZGF0YUxvZygiLCBvc3JFeGl0
Q291bnRlciA9ICIsIGNvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSwgIlxuIik7Ci0gICAgZGF0
YUxvZygiICAgIEdQUnMgYXQgdGltZSBvZiBleGl0OiIpOwotICAgIGNoYXIqIHNjcmF0Y2hQb2lu
dGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2gpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7Ci0gICAgICAgIEdQUlJl
ZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICBkYXRhTG9nKCIgIiwgR1BS
SW5mbzo6ZGVidWdOYW1lKGdwciksICI6IiwgUmF3UG9pbnRlcigqcmVpbnRlcnByZXRfY2FzdF9w
dHI8dm9pZCoqPihzY3JhdGNoUG9pbnRlcikpKTsKLSAgICAgICAgc2NyYXRjaFBvaW50ZXIgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBk
YXRhTG9nKCIgICAgRlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgRlBS
UmVnIGZwciA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBG
UFJJbmZvOjpkZWJ1Z05hbWUoZnByKSwgIjoiKTsKLSAgICAgICAgdWludDY0X3QgYml0cyA9ICpy
ZWludGVycHJldF9jYXN0X3B0cjx1aW50NjRfdCo+KHNjcmF0Y2hQb2ludGVyKTsKLSAgICAgICAg
ZG91YmxlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGRvdWJsZSo+KHNjcmF0Y2hQb2lu
dGVyKTsKLSAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihiaXRzKSwgdmFsdWUpOwotICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgIH0KLSAgICBkYXRhTG9nKCJcbiIpOwotfQotCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IGltcGwpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMjAyOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIzMCw4ICsyMzAsNiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2Jq
ZWN0CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
REZHKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIAotdm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVn
T3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQq
KSBXVEZfSU5URVJOQUw7Ci0KIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRp
b25Ob3coQ29kZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAkocmV2aXNpb24gMjIwMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0Q29t
cGlsZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgo=
</data>
<flag name="review"
          id="337908"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>