<?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>184512</bug_id>
          
          <creation_ts>2018-04-11 12:26:31 -0700</creation_ts>
          <short_desc>Replace CompactJITCodeMap with JITCodeMap.</short_desc>
          <delta_ts>2018-04-11 15:47:40 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1413768</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 12:26:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/35391728&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413770</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 12:33:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/35391728&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413793</commentid>
    <comment_count>2</comment_count>
      <attachid>337728</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 13:24:34 -0700</bug_when>
    <thetext>Created attachment 337728
proposed patch.

Let&apos;s try this on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413800</commentid>
    <comment_count>3</comment_count>
      <attachid>337730</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 13:34:07 -0700</bug_when>
    <thetext>Created attachment 337730
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413834</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 15:09:45 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r230549: &lt;http://trac.webkit.org/r230549&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413838</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-11 15:47:40 -0700</bug_when>
    <thetext>CLoop build fix landed in r230550: &lt;http://trac.webkit.org/r230550&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337728</attachid>
            <date>2018-04-11 13:24:34 -0700</date>
            <delta_ts>2018-04-11 13:34:07 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184512.patch</filename>
            <type>text/plain</type>
            <size>32037</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE4LTA0LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXBsYWNlIENvbXBhY3RKSVRDb2RlTWFwIHdpdGggSklUQ29kZU1hcC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDUxMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzUzOTE3Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGVNYXApOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmppdENvZGVNYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmppdENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9Db21wYWN0
SklUQ29kZU1hcC5oOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVRDb2RlTWFwLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoSlNDOjpKSVRD
b2RlTWFwOjpFbnRyeTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENv
ZGVNYXA6OkVudHJ5Ojpjb2RlTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjph
cHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjpmaW5pc2gpOgorICAgICAgICAoSlND
OjpKSVRDb2RlTWFwOjpmaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorCiAyMDE4LTA0LTEx
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGJ1aWxkIGZpeCBmb3IgMzJiaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDcgKzYxNSw2IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAotICAgIGppdC9Db21wYWN0SklUQ29kZU1hcC5oCiAg
ICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9GUFJJbmZvLmgKICAgICBqaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMzA1MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0
OSw2IEBACiAJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDgx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZENzlBMkQxRUJCQkRCQjAwREE4OEQz
IC8qIFN5bmNocm9ub3VzbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZENzlBMkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgx
QUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyog
REZHRG9taW5hdG9ycy5oICovOyB9OwotCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29t
cGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTU0
MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFNw
ZWN1bGF0ZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MzE0MURBRURF
MDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLzsgfTsKIAkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzU2LDYg
KzE3NTUsNyBAQAogCQlGRTNBMDZCNDFDMTBDQjkzMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNB
MDZCMDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJhdG9yLmggKi87IH07CiAJCUZF
M0EwNkJFMUMxMTA0MTIwMDM5MEZERCAvKiBKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkI3MUMxMTAzRDkw
MDM5MEZERCAvKiBKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkUzQTA2QzAxQzEx
MDQxQTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkI5MUMxMTAzRDkwMDM5MEZERCAv
KiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggKi87IH07CisJCUZFNDc2RkY0MjA3RTg1RDUwMDkz
Q0EyRCAvKiBKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTQ3NkZGMzIwN0U4NUQ0MDA5M0NBMkQgLyogSklUQ29kZU1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNDhFNjM4MUVC
MTE4RDIwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFsaXphdGlvblNjb3BlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTQ4RTYzNjFFQjExODhGMDA1RDdB
OTYgLyogT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNEJGRjJDMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU0QkZGMkExQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmgg
Ki87IH07CiAJCUZFNEQ1NUI4MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0dXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEQ1NUI3MUFF
NzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjcxMCw3ICsyNzEwLDYgQEAKIAkJMEZEODFB
RDAxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0
IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAv
KiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
Q2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklU
Q29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0SklUQ29k
ZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU0RjE0MURBRUExMDAx
NzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BlY3VsYXRlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
NTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRy
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUzMTQxREFFREUwMDE3
OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00NjgyLDYgKzQ2ODEsNyBAQAogCQlGRTNBMDZCODFDMTEwM0Q5MDAzOTBG
REQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzQTA2QjkxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTQyMzg4RjFCRTE4
QzEyMDA1MTQ3MzcgLyogSklUU3ViR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVFN1YkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFNDc2RkYzMjA3RTg1RDQwMDkzQ0EyRCAvKiBKSVRDb2RlTWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU0OEU2MzYxRUIxMTg4RjAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxp
emF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0SW5p
dGlhbGl6YXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTQ4RTYz
NzFFQjExOEFEMDA1RDdBOTYgLyogT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPYmplY3RJbml0aWFsaXphdGlvblNjb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QkZGMjkxQUQ0NzZFNzAwMDg4
Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU0NzksNyArNTQ3OSw2IEBACiAJCQkJNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovLAogCQkJCURDMTdFODE2MUM5QzgwMkIwMDhBNkFC
MyAvKiBDQ2FsbEhlbHBlcnMuY3BwICovLAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAv
KiBDQ2FsbEhlbHBlcnMuaCAqLywKLQkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29t
cGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhl
Y3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKIAkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJF
NTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLApAQCAtNTUxMiw2ICs1NTEx
LDcgQEAKIAkJCQkxNDZGRTUxMTExQTcxMDQzMDA4N0FFNjYgLyogSklUQ2FsbDMyXzY0LmNwcCAq
LywKIAkJCQkwRjhGOTQ0MzE2Njc2MzUyMDBENjE5NzEgLyogSklUQ29kZS5jcHAgKi8sCiAJCQkJ
ODZDQ0VGREQwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCAqLywKKwkJCQlGRTQ3NkZGMzIw
N0U4NUQ0MDA5M0NBMkQgLyogSklUQ29kZU1hcC5oICovLAogCQkJCTBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovLAogCQkJCTBGQUY3RUZBMTY1QkE5
MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGQUY3RUZCMTY1QkE5
MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLywKQEAgLTg0MjEsNyArODQyMSw2IEBA
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1Bh
dGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29t
bW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZEODJFMzkxNDFB
QjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlv
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzQxLDYgKzg3NDAsNyBAQAogCQkJCTBGMjVGMUI0MTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzMjJFNUE3MURBNjQ0QTgwMDZFNzcwOSAvKiBGVExTbmlwcGV0UGFyYW1zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjIzNUJENzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMU3RhY2ttYXBBcmd1bWVu
dExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNDc2RkY0MjA3RTg1RDUwMDkzQ0EyRCAvKiBK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQx
QSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKLSNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiQ29u
Y3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgpAQCAtNDgsNiArNDcsNyBA
QAogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkpJ
VE1hdGhJQ0ZvcndhcmRzLmgiCiAjaW5jbHVkZSAiSlNDUG9pc29uLmgiCiAjaW5jbHVkZSAiSlND
YXN0LmgiCkBAIC0zMDEsMTMgKzMwMSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxpbmtJbmNv
bWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKIAot
ICAgIHZvaWQgc2V0SklUQ29kZU1hcChzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+
IGppdENvZGVNYXApCisgICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2Rl
TWFwKQogICAgIHsKICAgICAgICAgbV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
ICAgICB9Ci0gICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQorICAgIGNvbnN0IEpJ
VENvZGVNYXAmIGppdENvZGVNYXAoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0
Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1faml0Q29kZU1hcDsKICAgICB9CiAgICAg
CiAgICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOwpAQCAtOTg3LDcgKzk4
Nyw3IEBAIHByaXZhdGU6CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5v
ZGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5n
UG9seW1vcnBoaWNDYWxsczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+
IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAjZW5kaWYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFj
dEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcg
Y29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawogICAgIC8v
IGZvciBERkcgY29kZSBibG9ja3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OSwxNSArMzg5LDEyIEBAIHZv
aWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY28KICAgICAgICAgYWRqdXN0ZWRU
aHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOwogCiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsK
LSAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7
Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRD
b2RlTWFwKTsKKyAgICAgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0Zv
ckV4aXQtPmppdENvZGVNYXAoKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0
aW9uID0gY29kZU1hcC5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAotICAgICAgICBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1
bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRl
Y29kZUluZGV4KTsKLQotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0gICAgICAgIEFTU0VSVCht
YXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7Ci0KLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICAgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVFbnRyeVB0clRh
ZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQobG9jYXRpb25U
YWcsIENvZGVFbnRyeVB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAgICAgICAvLyBD
b21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgogICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiBvcGVyYW5kczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE3LDE2ICszMTcsMTQgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwog
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKLSAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgZGVjb2RlZENvZGVNYXAgPSBqaXQuZGVjb2RlZENvZGVNYXBGb3IoY29kZUJsb2NrRm9y
RXhpdCk7Ci0gICAgCi0gICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmlu
YXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2Rl
TWFwLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0g
ICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXgg
PT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKGNvZGVCbG9j
a0ZvckV4aXQgPT0gY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgIEFT
U0VSVChjb2RlQmxvY2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQt
PmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
IEFTU0VSVChjb2RlTG9jYXRpb24pOwogCisgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFn
KENvZGVFbnRyeVB0clRhZywgY29kZUJsb2NrRm9yRXhpdCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiAgICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOwotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZXRhZ0NvZGVQdHIo
Y29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1h
cHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpLCBDb2RlRW50cnlQdHJUYWcsIGV4aXRUYWcpOwot
CisgICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRh
ZywgZXhpdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
a0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkgewogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRv
IG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIz
MDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMjAgKzUwLDYgQEAgRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5
SGVscGVyczo6ZXhlY3V0YQogICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogfQogCi1WZWN0b3I8Qnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJsb2NrID09IGNvZGVCbG9j
ay0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZU1h
cCgpKTsKLSAgICAKLSAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ+Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChj
b2RlQmxvY2ssIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOwotICAgIAotICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkt
PmRlY29kZShyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQogQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJs
eUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKICAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcg
dGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUYWdS
ZWdpc3RlcnNNb2RlIG1vZGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MzgsOCArMTUz
OCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGVtaXREdW1iVmlydHVhbENhbGwoVk0mLCBD
YWxsTGlua0luZm8qKTsKICAgICAKLSAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7Ci0KICAgICB2b2lkIG1ha2VTcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
CiAKQEAgLTE2NjEsOCArMTY1OSw2IEBAIHByb3RlY3RlZDoKIAogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwotCi0gICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Pj4gbV9kZWNv
ZGVkQ29kZU1hcHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlzaW9uIDIzMDUzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDI5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gR2l2
ZXMgeW91IGEgY29tcHJlc3NlZCBtYXAgYmV0d2VlbiBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMg
YW5kIG1hY2hpbmUgY29kZQotLy8gZW50cnkgcG9pbnRzLiBUaGUgY29tcHJlc3Npb24gc2ltcGx5
IHRyaWVzIHRvIHVzZSBlaXRoZXIgMSwgMiwgb3IgNCBieXRlcyBmb3IKLS8vIGFueSBnaXZlbiBv
ZmZzZXQuIFRoZSBsYXJnZXN0IG9mZnNldCB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgMl4zMC4KLQot
Ly8gRXhhbXBsZSB1c2U6Ci0vLwotLy8gQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgZW5jb2Rl
cihtYXApOwotLy8gZW5jb2Rlci5hcHBlbmQoYSwgYik7Ci0vLyBlbmNvZGVyLmFwcGVuZChjLCBk
KTsgLy8gcHJlY29uZGl0aW9uczogYyA+PSBhLCBkID49IGIKLS8vIGF1dG8gbWFwID0gZW5jb2Rl
ci5maW5pc2goKTsKLS8vCi0vLyBBdCBzb21lIGxhdGVyIHRpbWU6Ci0vLwotLy8gVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZDsKLS8vIG1hcC0+ZGVjb2RlKGRlY29kZWQp
OwotCi1zdHJ1Y3QgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0IHsKLSAgICBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQoKSB7IH0KLSAgICAKLSAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCi0gICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICwgbV9tYWNoaW5lQ29k
ZU9mZnNldChtYWNoaW5lQ29kZU9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2ln
bmVkIG1fYnl0ZWNvZGVJbmRleDsKLSAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0Owot
ICAgIAotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gbWFwcGlu
Zy0+bV9ieXRlY29kZUluZGV4OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGdldE1hY2hpbmVDb2RlT2Zmc2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0Owot
ICAgIH0KLX07Ci0KLWNsYXNzIENvbXBhY3RKSVRDb2RlTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDb21wYWN0SklUQ29kZU1hcCh1aW50OF90KiBidWZm
ZXIsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG51bWJlck9mRW50cmllcykKLSAgICAgICAgOiBt
X2J1ZmZlcihidWZmZXIpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAsIG1fc2l6ZShz
aXplKQotI2VuZGlmCi0gICAgICAgICwgbV9udW1iZXJPZkVudHJpZXMobnVtYmVyT2ZFbnRyaWVz
KQotICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIH0KLQotICAgIH5Db21w
YWN0SklUQ29kZU1hcCgpCi0gICAgewotICAgICAgICBpZiAobV9idWZmZXIpCi0gICAgICAgICAg
ICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9m
RW50cmllcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9udW1iZXJPZkVudHJpZXM7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiByZXN1bHQpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICB1aW50OF90IGF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXpl
KTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyW2luZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgdW5z
aWduZWQgZGVjb2RlTnVtYmVyKHVuc2lnbmVkJiBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHVpbnQ4X3QgaGVhZFZhbHVlID0gYXQoaW5kZXgrKyk7Ci0gICAgICAgIGlmICghKGhlYWRWYWx1
ZSAmIDEyOCkpCi0gICAgICAgICAgICByZXR1cm4gaGVhZFZhbHVlOwotICAgICAgICBpZiAoISho
ZWFkVmFsdWUgJiA2NCkpCi0gICAgICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihoZWFkVmFsdWUgJiB+MTI4KSA8PCA4KSB8IGF0KGluZGV4KyspOwotICAgICAgICB1bnNpZ25l
ZCBzZWNvbmQgPSBhdChpbmRleCsrKTsKLSAgICAgICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5k
ZXgrKyk7Ci0gICAgICAgIHVuc2lnbmVkIGZvdXJ0aCA9IGF0KGluZGV4KyspOwotICAgICAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwg
MjQpIHwgKHNlY29uZCA8PCAxNikgfCAodGhpcmQgPDwgOCkgfCBmb3VydGg7Ci0gICAgfQotICAg
IAotICAgIHVpbnQ4X3QqIG1fYnVmZmVyOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNp
Z25lZCBtX3NpemU7Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKLSAg
ICAKLXB1YmxpYzoKLSAgICBjbGFzcyBFbmNvZGVyIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRW5jb2Rlcik7Ci0gICAgcHVibGljOgotICAgICAgICBFbmNvZGVyKCk7Ci0gICAgICAg
IH5FbmNvZGVyKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVu
c2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKTsKLSAgICAgICAgdm9pZCBhcHBlbmQodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IGZpbmlzaCgpOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgdm9pZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpOwotICAgICAgICB2b2lk
IGVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSk7Ci0gICAgCi0gICAgICAgIHVpbnQ4X3QqIG1f
YnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7Ci0gICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVk
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIERl
Y29kZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIERlY29kZXIoY29uc3QgQ29tcGFjdEpJVENvZGVNYXAqKTsKLSAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0OwotICAg
ICAgICB2b2lkIHJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5l
Q29kZU9mZnNldCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IENvbXBh
Y3RKSVRDb2RlTWFwKiBtX2ppdENvZGVNYXA7Ci0gICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNC
eXRlY29kZUluZGV4OwotICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZz
ZXQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2J1ZmZlckluZGV4OwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIEVuY29kZXI7Ci0gICAgZnJpZW5kIGNsYXNzIERlY29kZXI7Ci19OwotCi1pbmxpbmUg
dm9pZCBDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgRGVjb2RlciBkZWNvZGVyKHRoaXMpOwotICAg
IHJlc3VsdC5yZXNpemUoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKLSAgICAgICAgZGVj
b2Rlci5yZWFkKHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXgsIHJlc3VsdFtpXS5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKLSAgICAKLSAgICBBU1NFUlQoIWRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVt
YWluaW5nKCkpOwotfQotCi1pbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29k
ZXIoKQotICAgIDogbV9idWZmZXIoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAgICwgbV9jYXBhY2l0
eSgwKQotICAgICwgbV9udW1iZXJPZkVudHJpZXMoMCkKLSAgICAsIG1fcHJldmlvdXNCeXRlY29k
ZUluZGV4KDApCi0gICAgLCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKLXsKLX0KLQot
aW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjp+RW5jb2RlcigpCi17Ci0gICAgaWYg
KG1fYnVmZmVyKQotICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci19Ci0gICAgICAgIAotaW5s
aW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZCh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKLXsKLSAgICBBU1NFUlQoYnl0
ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1hY2hp
bmVDb2RlT2Zmc2V0ID49IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgZW5zdXJl
Q2FwYWNpdHlGb3IoMSk7Ci0gICAgZW5jb2RlTnVtYmVyKGJ5dGVjb2RlSW5kZXggLSBtX3ByZXZp
b3VzQnl0ZWNvZGVJbmRleCk7Ci0gICAgZW5jb2RlTnVtYmVyKG1hY2hpbmVDb2RlT2Zmc2V0IC0g
bV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KTsKLSAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eCA9IGJ5dGVjb2RlSW5kZXg7Ci0gICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gbWFj
aGluZUNvZGVPZmZzZXQ7Ci0gICAgbV9udW1iZXJPZkVudHJpZXMrKzsKLX0KLQotaW5saW5lIHN0
ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gQ29tcGFjdEpJVENvZGVNYXA6OkVuY29k
ZXI6OmZpbmlzaCgpCi17Ci0gICAgbV9jYXBhY2l0eSA9IG1fc2l6ZTsKLSAgICBtX2J1ZmZlciA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkp
OwotICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21wYWN0SklUQ29kZU1hcD4o
bV9idWZmZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpOwotICAgIG1fYnVmZmVyID0gMDsK
LSAgICBtX3NpemUgPSAwOwotICAgIG1fY2FwYWNpdHkgPSAwOwotICAgIG1fbnVtYmVyT2ZFbnRy
aWVzID0gMDsKLSAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7Ci0gICAgbV9wcmV2aW91
c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgICAgICAK
LWlubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKHVpbnQ4
X3QgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fc2l6ZSArIDEgPD0gbV9jYXBhY2l0eSk7Ci0gICAg
bV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7Ci19Ci0gICAgCi1pbmxpbmUgdm9pZCBDb21wYWN0
SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKHVpbnQzMl90IHZhbHVlKQotewotICAg
IEFTU0VSVChtX3NpemUgKyA0IDw9IG1fY2FwYWNpdHkpOwotICAgIEFTU0VSVCh2YWx1ZSA8ICgx
IDw8IDMwKSk7Ci0gICAgaWYgKHZhbHVlIDw9IDEyNykgewotICAgICAgICB1aW50OF90IGhlYWRW
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKLSAgICAgICAgQVNTRVJUKCEoaGVh
ZFZhbHVlICYgMTI4KSk7Ci0gICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlKTsKLSAgICB9IGVs
c2UgaWYgKHZhbHVlIDw9IDE2MzgzKSB7Ci0gICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gOCk7Ci0gICAgICAgIEFTU0VSVCghKGhlYWRWYWx1
ZSAmIDEyOCkpOwotICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOwotICAgICAgICBh
cHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCk7Ci0gICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsdWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1aW50OF90IGhlYWRW
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDI0KTsKLSAgICAgICAgQVNTRVJU
KCEoaGVhZFZhbHVlICYgMTI4KSk7Ci0gICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDY0KSk7
Ci0gICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4IHwgNjQpOwotICAgICAgICBhcHBl
bmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDE2KSk7Ci0gICAgICAgIGFwcGVu
ZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gOCkpOwotICAgICAgICBhcHBlbmRC
eXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9p
ZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQg
bnVtYmVyT2ZFbnRyaWVzVG9BZGQpCi17Ci0gICAgdW5zaWduZWQgY2FwYWNpdHlOZWVkZWQgPSBt
X3NpemUgKyBudW1iZXJPZkVudHJpZXNUb0FkZCAqIDIgKiA0OwotICAgIGlmIChjYXBhY2l0eU5l
ZWRlZCA+IG1fY2FwYWNpdHkpIHsKLSAgICAgICAgbV9jYXBhY2l0eSA9IGNhcGFjaXR5TmVlZGVk
ICogMjsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxs
b2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsKLSAgICB9Ci19Ci0KLWlubGluZSBDb21wYWN0SklU
Q29kZU1hcDo6RGVjb2Rlcjo6RGVjb2Rlcihjb25zdCBDb21wYWN0SklUQ29kZU1hcCogaml0Q29k
ZU1hcCkKLSAgICA6IG1faml0Q29kZU1hcChqaXRDb2RlTWFwKQotICAgICwgbV9wcmV2aW91c0J5
dGVjb2RlSW5kZXgoMCkKLSAgICAsIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCgwKQotICAg
ICwgbV9udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoaml0Q29kZU1hcC0+bV9udW1iZXJPZkVudHJp
ZXMpCi0gICAgLCBtX2J1ZmZlckluZGV4KDApCi17Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBDb21w
YWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6bnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9udW1iZXJPZkVudHJpZXNSZW1haW5pbmcgfHwgbV9idWZmZXJJbmRl
eCA9PSBtX2ppdENvZGVNYXAtPm1fc2l6ZSk7Ci0gICAgcmV0dXJuIG1fbnVtYmVyT2ZFbnRyaWVz
UmVtYWluaW5nOwotfQotCi1pbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6
cmVhZCh1bnNpZ25lZCYgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQmIG1hY2hpbmVDb2RlT2Zmc2V0
KQotewotICAgIEFTU0VSVChudW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSk7Ci0gICAgCi0gICAg
bV9wcmV2aW91c0J5dGVjb2RlSW5kZXggKz0gbV9qaXRDb2RlTWFwLT5kZWNvZGVOdW1iZXIobV9i
dWZmZXJJbmRleCk7Ci0gICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ICs9IG1faml0Q29k
ZU1hcC0+ZGVjb2RlTnVtYmVyKG1fYnVmZmVySW5kZXgpOwotICAgIGJ5dGVjb2RlSW5kZXggPSBt
X3ByZXZpb3VzQnl0ZWNvZGVJbmRleDsKLSAgICBtYWNoaW5lQ29kZU9mZnNldCA9IG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldDsKLSAgICBtX251bWJlck9mRW50cmllc1JlbWFpbmluZy0tOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMDUz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODY2LDEyICs4NjYsMTUgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChjb21waWxhdGlvbkluZm8uaG90
UGF0aE90aGVyKSk7CiAgICAgfQogCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgaml0
Q29kZU1hcEVuY29kZXI7CisgICAgSklUQ29kZU1hcCBqaXRDb2RlTWFwOwogICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUo
KTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICBqaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYnl0ZWNv
ZGVPZmZzZXQsIHBhdGNoQnVmZmVyLm9mZnNldE9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkp
OworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpIHsKKyAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoQ29kZUVudHJ5UHRyVGFnLCBtX2NvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgaml0Q29kZU1hcC5hcHBlbmQoYnl0ZWNvZGVP
ZmZzZXQsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLCB0
YWcpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChq
aXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7CisgICAgaml0Q29kZU1hcC5maW5pc2goKTsKKyAg
ICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChXVEZNb3ZlKGppdENvZGVNYXApKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9hcml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSklUQ29kZU1hcCB7Citwcml2YXRlOgorICAgIHN0cnVjdCBFbnRy
eSB7CisgICAgICAgIEVudHJ5KCkgeyB9CisKKyAgICAgICAgRW50cnkodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uKQorICAgICAgICAgICAgOiBt
X2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgbV9jb2RlTG9jYXRp
b24oY29kZUxvY2F0aW9uKQorICAgICAgICB7IH0KKworICAgICAgICBpbmxpbmUgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgICAg
ICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWwgY29kZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9jb2Rl
TG9jYXRpb247IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9jb2RlTG9jYXRpb247CisgICAgfTsK
KworcHVibGljOgorICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVM
b2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbikKKyAgICB7CisgICAgICAgIG1fZW50cmllcy5hcHBl
bmQoeyBieXRlY29kZUluZGV4LCBjb2RlTG9jYXRpb24gfSk7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2goKSB7IG1fZW50cmllcy5zaHJpbmtUb0ZpdCgpOyB9CisKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBmaW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBh
dXRvKiBlbnRyeSA9CisgICAgICAgICAgICBiaW5hcnlTZWFyY2g8RW50cnksIHVuc2lnbmVkPiht
X2VudHJpZXMsCisgICAgICAgICAgICAgICAgbV9lbnRyaWVzLnNpemUoKSwgYnl0ZWNvZGVJbmRl
eCwgW10gKEVudHJ5KiBlbnRyeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkt
PmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFlbnRy
eSkKKyAgICAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICByZXR1
cm4gZW50cnktPmNvZGVMb2NhdGlvbigpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXMuc2l6ZSgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPEVudHJ5PiBtX2VudHJpZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMjMwNTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDE0ICs0NDIsMTMgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpKTsKIAog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7
Ci0gICAgCi0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gbWFwOwotICAgIGNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUobWFwKTsKLSAgICBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
LCB1bnNpZ25lZD4obWFwLCBtYXAuc2l6ZSgpLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCwg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQo
bWFwcGluZyk7Ci0gICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFj
aGluZUNvZGVPZmZzZXQpOworCisgICAgY29uc3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVC
bG9jay0+aml0Q29kZU1hcCgpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbiA9
IGNvZGVNYXAuZmluZChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgQVNTRVJUKGNv
ZGVMb2NhdGlvbik7CisKKyAgICBQdHJUYWcgbG9jYXRpb25UYWcgPSBwdHJUYWcoQ29kZUVudHJ5
UHRyVGFnLCBjb2RlQmxvY2ssIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lk
KiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9uVGFnLCBDb2RlRW50
cnlQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwog
ICAgIAogICAgIExMSU5UX1JFVFVSTl9UV08oanVtcFRhcmdldCwgZXhlYy0+dG9wT2ZGcmFtZSgp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337730</attachid>
            <date>2018-04-11 13:34:07 -0700</date>
            <delta_ts>2018-04-11 15:05:05 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184512.patch</filename>
            <type>text/plain</type>
            <size>32209</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwNTQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE4LTA0LTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXBsYWNlIENvbXBhY3RKSVRDb2RlTWFwIHdpdGggSklUQ29kZU1hcC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDUxMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzUzOTE3Mjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGVNYXApOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmppdENvZGVNYXAgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmppdENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1hcEZvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9Db21wYWN0
SklUQ29kZU1hcC5oOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVRDb2RlTWFwLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpKSVRDb2RlTWFwOjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoSlNDOjpKSVRD
b2RlTWFwOjpFbnRyeTo6Ynl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENv
ZGVNYXA6OkVudHJ5Ojpjb2RlTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjph
cHBlbmQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlTWFwOjpmaW5pc2gpOgorICAgICAgICAoSlND
OjpKSVRDb2RlTWFwOjpmaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29kZU1hcDo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorCiAyMDE4LTA0LTEx
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGJ1aWxkIGZpeCBmb3IgMzJiaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDIzMDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDEzICs2MTUsMTMgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVy
cy5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCi0gICAgaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCiAgICAgaml0L0ZQUkluZm8uaAogICAgIGpp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAogICAgIGppdC9HUFJJbmZvLmgKICAgICBqaXQvSklU
QWxsb2NhdG9yLmgKICAgICBqaXQvSklUQ29kZS5oCisgICAgaml0L0pJVENvZGVNYXAuaAogICAg
IGppdC9KSVRDb21waWxhdGlvbkVmZm9ydC5oCiAgICAgaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgK
ICAgICBqaXQvSklUT3BlcmF0aW9ucy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjMwNTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1
NDksNiBAQAogCQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4
MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDc5QTJEMUVCQkJEQkIwMERBODhE
MyAvKiBTeW5jaHJvbm91c25lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDc5QTJDMUVCQkJEQjIwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4
MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcyIC8q
IERGR0RvbWluYXRvcnMuaCAqLzsgfTsKLQkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1
NDE0MURBRUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBT
cGVjdWxhdGVkVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVE
RTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IH07CiAJCTBGRDhBMzE0MTdENDMyNkMwMENB
MkM0MCAvKiBDb2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTc1Niw2
ICsxNzU1LDcgQEAKIAkJRkUzQTA2QjQxQzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUz
QTA2QjAxQzEwQ0I2RjAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oICovOyB9OwogCQlG
RTNBMDZCRTFDMTEwNDEyMDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZCNzFDMTEwM0Q5
MDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmggKi87IH07CiAJCUZFM0EwNkMwMUMx
MTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQg
LyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oICovOyB9OworCQlGRTQ3NkZGNDIwN0U4NUQ1MDA5
M0NBMkQgLyogSklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU0NzZGRjMyMDdFODVENDAwOTNDQTJEIC8qIEpJVENvZGVNYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTQ4RTYzODFF
QjExOEQyMDA1RDdBOTYgLyogT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0OEU2MzYxRUIxMTg4RjAwNUQ3
QTk2IC8qIE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyog
RnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFNEJGRjJBMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5o
ICovOyB9OwogCQlGRTRENTVCODFBRTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRENTVCNzFB
RTcxNkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3MTAsNyArMjcxMCw2IEBACiAJCTBGRDgx
QUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3Jz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5
NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQg
LyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJVENv
ZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFNEYxNDFEQUVBMTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNwZWN1bGF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgy
RTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1MzE0MURBRURFMDAx
NzlDOTQgLyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY4Miw2ICs0NjgxLDcgQEAKIAkJRkUzQTA2QjgxQzExMDNEOTAwMzkw
RkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFM0EwNkI5MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0MjM4OEYxQkUx
OEMxMjAwNTE0NzM3IC8qIEpJVFN1YkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRTQ3NkZGMzIwN0U4NUQ0MDA5M0NBMkQgLyogSklUQ29kZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNDhFNjM2MUVCMTE4OEYwMDVEN0E5NiAvKiBPYmplY3RJbml0aWFs
aXphdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdElu
aXRpYWxpemF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0OEU2
MzcxRUIxMThBRDAwNUQ3QTk2IC8qIE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2JqZWN0SW5pdGlhbGl6YXRpb25TY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEJGRjI5MUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGdW5jdGlvbk92ZXJyaWRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NDc5LDcgKzU0NzksNiBAQAogCQkJCTYyRDc1NUQzMUI4NEZCMzkwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLywKIAkJCQlEQzE3RTgxNjFDOUM4MDJCMDA4QTZB
QjMgLyogQ0NhbGxIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcg
LyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJMEZGMDU0RjcxQUMzNUI0NDAwRTVCRTU3IC8qIEV4
ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEZGMDU0RjgxQUMzNUI0NDAwRTVC
RTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovLAogCQkJCUE3QjQ4REI2MEVFNzRD
RkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKQEAgLTU1MTIsNiArNTUx
MSw3IEBACiAJCQkJMTQ2RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAg
Ki8sCiAJCQkJMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJVENvZGUuY3BwICovLAogCQkJ
CTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8sCisJCQkJRkU0NzZGRjMy
MDdFODVENDAwOTNDQTJEIC8qIEpJVENvZGVNYXAuaCAqLywKIAkJCQkwRjA3NzZCRDE0RkYwMDI4
MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLywKIAkJCQkwRkFGN0VGQTE2NUJB
OTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQkwRkFGN0VGQjE2NUJB
OTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8sCkBAIC04NDIxLDcgKzg0MjEsNiBA
QAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQ
YXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0EzMzIxN0ExRjFFRTAwOENGNkYzIC8qIENv
bW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDgyRTM5MTQx
QUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRDRTEyQTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtODc0MSw2ICs4NzQwLDcgQEAKIAkJCQkwRjI1RjFCNDE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzIyRTVBNzFEQTY0NEE4MDA2RTc3MDkgLyogRlRMU25pcHBldFBhcmFtcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyMzVCRDcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1l
bnRMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTQ3NkZGNDIwN0U4NUQ1MDA5M0NBMkQgLyog
SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0ZDQzI2RDE3QTBCNkFBMDA3ODZE
MUEgLyogRlRMU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTIxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMzA1MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAiQ29tcGFjdEpJ
VENvZGVNYXAuaCIKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkNv
bmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKQEAgLTQ4LDYgKzQ3LDcg
QEAKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAj
aW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJK
SVRNYXRoSUNGb3J3YXJkcy5oIgogI2luY2x1ZGUgIkpTQ1BvaXNvbi5oIgogI2luY2x1ZGUgIkpT
Q2FzdC5oIgpAQCAtMzAxLDEzICszMDEsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBsaW5rSW5j
b21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7CiAK
LSAgICB2b2lkIHNldEpJVENvZGVNYXAoc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFw
PiBqaXRDb2RlTWFwKQorICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29k
ZU1hcCkKICAgICB7CiAgICAgICAgIG1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7
CiAgICAgfQotICAgIENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICBjb25zdCBK
SVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2pp
dENvZGVNYXAuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXA7CiAgICAgfQogICAg
IAogICAgIHR5cGVkZWYgSlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVjdGlvbjsKQEAgLTk4Nyw3ICs5
ODcsNyBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxO
b2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFw
PiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZH
IGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKICAgICAv
LyBmb3IgREZHIGNvZGUgYmxvY2tzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCShyZXZpc2lvbiAyMzA1MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTUgKzM4OSwxMiBAQCB2
b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvCiAgICAgICAgIGFkanVzdGVk
VGhyZXNob2xkID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGFkanVzdGVkVGhyZXNob2xkKTsKIAogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9ja0ZvckV4aXQgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGV4aXQubV9jb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRDb2RlTWFw
OwotICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVk
Q29kZU1hcCk7CisgICAgICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2RlQmxvY2tG
b3JFeGl0LT5qaXRDb2RlTWFwKCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2Nh
dGlvbiA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CiAKLSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwg
dW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0
ZWNvZGVJbmRleCk7Ci0KLSAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwotICAgICAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOwotCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9m
ZnNldCk7CisgICAgICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRhZyhDb2RlRW50cnlQdHJU
YWcsIGNvZGVCbG9ja0ZvckV4aXQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLnJldGFnZ2VkKGxvY2F0aW9u
VGFnLCBDb2RlRW50cnlQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KICAgICAgICAgT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4gb3BlcmFuZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMzA1MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxNywxNiArMzE3LDE0IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihleGl0Lm1fY29kZU9yaWdpbik7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0LmRlY29kZWRDb2RlTWFwRm9yKGNvZGVCbG9ja0Zv
ckV4aXQpOwotICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJp
bmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29k
ZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwotICAgIAot
ICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4
ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChjb2RlQmxv
Y2tGb3JFeGl0ID09IGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICBB
U1NFUlQoY29kZUJsb2NrRm9yRXhpdC0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0
LT5qaXRDb2RlTWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAg
ICBBU1NFUlQoY29kZUxvY2F0aW9uKTsKIAorICAgIFB0clRhZyBsb2NhdGlvblRhZyA9IHB0clRh
ZyhDb2RlRW50cnlQdHJUYWcsIGNvZGVCbG9ja0ZvckV4aXQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOwogICAgIFB0clRhZyBleGl0VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJU
YWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmV0YWdDb2RlUHRy
KGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCht
YXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KSwgQ29kZUVudHJ5UHRyVGFnLCBleGl0VGFnKTsK
LQorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24ucmV0YWdnZWQobG9jYXRpb25U
YWcsIGV4aXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaml0LmFkZFB0cihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxv
Y2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQu
aXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0
byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
MzA1MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDIwICs1MCw2IEBAIEV4ZWN1dGFibGVCYXNlKiBBc3NlbWJs
eUhlbHBlcnM6OmV4ZWN1dGEKICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKIH0KIAotVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYmx5SGVscGVyczo6ZGVjb2RlZENvZGVNYXBGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVN
YXAoKSk7Ci0gICAgCi0gICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0Pj46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFwcy5hZGQo
Y29kZUJsb2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKLSAgICAKLSAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgp
LT5kZWNvZGUocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1i
bHlIZWxwZXJzOjpicmFuY2hJZk5vdFR5cGUoCiAgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVGFn
UmVnaXN0ZXJzTW9kZSBtb2RlKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMzA1MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM4LDggKzE1
MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBlbWl0RHVtYlZpcnR1YWxDYWxsKFZNJiwg
Q2FsbExpbmtJbmZvKik7CiAgICAgCi0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwotCiAgICAgdm9pZCBtYWtlU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgp
OwogCkBAIC0xNjYxLDggKzE2NTksNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9jazsKLQotICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4+IG1fZGVj
b2RlZENvZGVNYXBzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiAyMzA1MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vIEdp
dmVzIHlvdSBhIGNvbXByZXNzZWQgbWFwIGJldHdlZW4gYmV0d2VlbiBieXRlY29kZSBpbmRpY2Vz
IGFuZCBtYWNoaW5lIGNvZGUKLS8vIGVudHJ5IHBvaW50cy4gVGhlIGNvbXByZXNzaW9uIHNpbXBs
eSB0cmllcyB0byB1c2UgZWl0aGVyIDEsIDIsIG9yIDQgYnl0ZXMgZm9yCi0vLyBhbnkgZ2l2ZW4g
b2Zmc2V0LiBUaGUgbGFyZ2VzdCBvZmZzZXQgdGhhdCBjYW4gYmUgc3RvcmVkIGlzIDJeMzAuCi0K
LS8vIEV4YW1wbGUgdXNlOgotLy8KLS8vIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIGVuY29k
ZXIobWFwKTsKLS8vIGVuY29kZXIuYXBwZW5kKGEsIGIpOwotLy8gZW5jb2Rlci5hcHBlbmQoYywg
ZCk7IC8vIHByZWNvbmRpdGlvbnM6IGMgPj0gYSwgZCA+PSBiCi0vLyBhdXRvIG1hcCA9IGVuY29k
ZXIuZmluaXNoKCk7Ci0vLwotLy8gQXQgc29tZSBsYXRlciB0aW1lOgotLy8KLS8vIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWQ7Ci0vLyBtYXAtPmRlY29kZShkZWNvZGVk
KTsKLQotc3RydWN0IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCB7Ci0gICAgQnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0KCkgeyB9Ci0gICAgCi0gICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQotICAgICAg
ICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQotICAgICAgICAsIG1fbWFjaGluZUNv
ZGVPZmZzZXQobWFjaGluZUNvZGVPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB1bnNp
Z25lZCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsK
LSAgICAKLSAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1hcHBp
bmctPm1fYnl0ZWNvZGVJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBnZXRNYWNoaW5lQ29kZU9mZnNldChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcpCi0gICAgewotICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldDsK
LSAgICB9Ci19OwotCi1jbGFzcyBDb21wYWN0SklUQ29kZU1hcCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29tcGFjdEpJVENvZGVNYXAodWludDhfdCogYnVm
ZmVyLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMpCi0gICAgICAgIDog
bV9idWZmZXIoYnVmZmVyKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgLCBtX3NpemUo
c2l6ZSkKLSNlbmRpZgotICAgICAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKG51bWJlck9mRW50cmll
cykKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAgICB9Ci0KLSAgICB+Q29t
cGFjdEpJVENvZGVNYXAoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyKQotICAgICAgICAg
ICAgZmFzdEZyZWUobV9idWZmZXIpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkVudHJpZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZFbnRyaWVz
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgcmVzdWx0KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgdWludDhfdCBhdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6
ZSk7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlcltpbmRleF07Ci0gICAgfQotICAgIAotICAgIHVu
c2lnbmVkIGRlY29kZU51bWJlcih1bnNpZ25lZCYgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAg
ICB1aW50OF90IGhlYWRWYWx1ZSA9IGF0KGluZGV4KyspOwotICAgICAgICBpZiAoIShoZWFkVmFs
dWUgJiAxMjgpKQotICAgICAgICAgICAgcmV0dXJuIGhlYWRWYWx1ZTsKLSAgICAgICAgaWYgKCEo
aGVhZFZhbHVlICYgNjQpKQotICAgICAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaGVhZFZhbHVlICYgfjEyOCkgPDwgOCkgfCBhdChpbmRleCsrKTsKLSAgICAgICAgdW5zaWdu
ZWQgc2Vjb25kID0gYXQoaW5kZXgrKyk7Ci0gICAgICAgIHVuc2lnbmVkIHRoaXJkICA9IGF0KGlu
ZGV4KyspOwotICAgICAgICB1bnNpZ25lZCBmb3VydGggPSBhdChpbmRleCsrKTsKLSAgICAgICAg
cmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhZFZhbHVlICYgfigxMjggKyA2NCkpIDw8
IDI0KSB8IChzZWNvbmQgPDwgMTYpIHwgKHRoaXJkIDw8IDgpIHwgZm91cnRoOwotICAgIH0KLSAg
ICAKLSAgICB1aW50OF90KiBtX2J1ZmZlcjsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdW5z
aWduZWQgbV9zaXplOwotI2VuZGlmCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkVudHJpZXM7Ci0g
ICAgCi1wdWJsaWM6Ci0gICAgY2xhc3MgRW5jb2RlciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEVuY29kZXIpOwotICAgIHB1YmxpYzoKLSAgICAgICAgRW5jb2RlcigpOwotICAgICAg
ICB+RW5jb2RlcigpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eUZvcih1
bnNpZ25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCk7Ci0gICAgICAgIHZvaWQgYXBwZW5kKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KTsKLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBmaW5pc2goKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHZvaWQgYXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKTsKLSAgICAgICAgdm9p
ZCBlbmNvZGVOdW1iZXIodWludDMyX3QgdmFsdWUpOwotICAgIAotICAgICAgICB1aW50OF90KiBt
X2J1ZmZlcjsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAgICAgICB1bnNpZ25lZCBtX2Nh
cGFjaXR5OwotICAgICAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNCeXRlY29kZUluZGV4OwotICAgICAgICB1bnNpZ25l
ZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgfTsKLSAgICAKLSAgICBjbGFzcyBE
ZWNvZGVyIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7Ci0gICAgcHVi
bGljOgotICAgICAgICBEZWNvZGVyKGNvbnN0IENvbXBhY3RKSVRDb2RlTWFwKik7Ci0gICAgICAg
IAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCByZWFkKHVuc2lnbmVkJiBieXRlY29kZUluZGV4LCB1bnNpZ25lZCYgbWFjaGlu
ZUNvZGVPZmZzZXQpOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBDb21w
YWN0SklUQ29kZU1hcCogbV9qaXRDb2RlTWFwOwotICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3Vz
Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zm
c2V0OwotICAgICAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllc1JlbWFpbmluZzsKLSAgICAg
ICAgdW5zaWduZWQgbV9idWZmZXJJbmRleDsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBFbmNvZGVyOwotICAgIGZyaWVuZCBjbGFzcyBEZWNvZGVyOwotfTsKLQotaW5saW5l
IHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OmRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgcmVzdWx0KSBjb25zdAotewotICAgIERlY29kZXIgZGVjb2Rlcih0aGlzKTsKLSAg
ICByZXN1bHQucmVzaXplKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRl
Y29kZXIucmVhZChyZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4LCByZXN1bHRbaV0ubV9tYWNoaW5l
Q29kZU9mZnNldCk7Ci0gICAgCi0gICAgQVNTRVJUKCFkZWNvZGVyLm51bWJlck9mRW50cmllc1Jl
bWFpbmluZygpKTsKLX0KLQotaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNv
ZGVyKCkKLSAgICA6IG1fYnVmZmVyKDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fY2FwYWNp
dHkoMCkKLSAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDApCi0gICAgLCBtX3ByZXZpb3VzQnl0ZWNv
ZGVJbmRleCgwKQotICAgICwgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCi17Ci19Ci0K
LWlubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQotewotICAgIGlm
IChtX2J1ZmZlcikKLSAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwotfQotICAgICAgICAKLWlu
bGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKGJ5
dGVjb2RlSW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtYWNo
aW5lQ29kZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOwotICAgIGVuc3Vy
ZUNhcGFjaXR5Rm9yKDEpOwotICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2
aW91c0J5dGVjb2RlSW5kZXgpOwotICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAt
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgbV9wcmV2aW91c0J5dGVjb2RlSW5k
ZXggPSBieXRlY29kZUluZGV4OwotICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1h
Y2hpbmVDb2RlT2Zmc2V0OwotICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Ci19Ci0KLWlubGluZSBz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNv
ZGVyOjpmaW5pc2goKQotewotICAgIG1fY2FwYWNpdHkgPSBtX3NpemU7Ci0gICAgbV9idWZmZXIg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2FwYWNpdHkp
KTsKLSAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGFjdEpJVENvZGVNYXA+
KG1fYnVmZmVyLCBtX3NpemUsIG1fbnVtYmVyT2ZFbnRyaWVzKTsKLSAgICBtX2J1ZmZlciA9IDA7
Ci0gICAgbV9zaXplID0gMDsKLSAgICBtX2NhcGFjaXR5ID0gMDsKLSAgICBtX251bWJlck9mRW50
cmllcyA9IDA7Ci0gICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOwotICAgIG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAgICAg
Ci1pbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50
OF90IHZhbHVlKQotewotICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2FwYWNpdHkpOwotICAg
IG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOwotfQotICAgIAotaW5saW5lIHZvaWQgQ29tcGFj
dEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQobV9zaXplICsgNCA8PSBtX2NhcGFjaXR5KTsKLSAgICBBU1NFUlQodmFsdWUgPCAo
MSA8PCAzMCkpOwotICAgIGlmICh2YWx1ZSA8PSAxMjcpIHsKLSAgICAgICAgdWludDhfdCBoZWFk
VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVCghKGhl
YWRWYWx1ZSAmIDEyOCkpOwotICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSk7Ci0gICAgfSBl
bHNlIGlmICh2YWx1ZSA8PSAxNjM4MykgewotICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpOwotICAgICAgICBBU1NFUlQoIShoZWFkVmFs
dWUgJiAxMjgpKTsKLSAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKLSAgICAgICAg
YXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjgpOwotICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHZhbHVlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdWludDhfdCBoZWFk
VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAyNCk7Ci0gICAgICAgIEFTU0VS
VCghKGhlYWRWYWx1ZSAmIDEyOCkpOwotICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkp
OwotICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCB8IDY0KTsKLSAgICAgICAgYXBw
ZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAxNikpOwotICAgICAgICBhcHBl
bmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpKTsKLSAgICAgICAgYXBwZW5k
Qnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOwotICAgIH0KLX0KLQotaW5saW5lIHZv
aWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVk
IG51bWJlck9mRW50cmllc1RvQWRkKQotewotICAgIHVuc2lnbmVkIGNhcGFjaXR5TmVlZGVkID0g
bV9zaXplICsgbnVtYmVyT2ZFbnRyaWVzVG9BZGQgKiAyICogNDsKLSAgICBpZiAoY2FwYWNpdHlO
ZWVkZWQgPiBtX2NhcGFjaXR5KSB7Ci0gICAgICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eU5lZWRl
ZCAqIDI7Ci0gICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFs
bG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7Ci0gICAgfQotfQotCi1pbmxpbmUgQ29tcGFjdEpJ
VENvZGVNYXA6OkRlY29kZXI6OkRlY29kZXIoY29uc3QgQ29tcGFjdEpJVENvZGVNYXAqIGppdENv
ZGVNYXApCi0gICAgOiBtX2ppdENvZGVNYXAoaml0Q29kZU1hcCkKLSAgICAsIG1fcHJldmlvdXNC
eXRlY29kZUluZGV4KDApCi0gICAgLCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKLSAg
ICAsIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKGppdENvZGVNYXAtPm1fbnVtYmVyT2ZFbnRy
aWVzKQotICAgICwgbV9idWZmZXJJbmRleCgwKQotewotfQotCi1pbmxpbmUgdW5zaWduZWQgQ29t
cGFjdEpJVENvZGVNYXA6OkRlY29kZXI6Om51bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nIHx8IG1fYnVmZmVySW5k
ZXggPT0gbV9qaXRDb2RlTWFwLT5tX3NpemUpOwotICAgIHJldHVybiBtX251bWJlck9mRW50cmll
c1JlbWFpbmluZzsKLX0KLQotaW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6
OnJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5lQ29kZU9mZnNl
dCkKLXsKLSAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpOwotICAgIAotICAg
IG1fcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IG1faml0Q29kZU1hcC0+ZGVjb2RlTnVtYmVyKG1f
YnVmZmVySW5kZXgpOwotICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBtX2ppdENv
ZGVNYXAtPmRlY29kZU51bWJlcihtX2J1ZmZlckluZGV4KTsKLSAgICBieXRlY29kZUluZGV4ID0g
bV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7Ci0gICAgbWFjaGluZUNvZGVPZmZzZXQgPSBtX3ByZXZp
b3VzTWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgbV9udW1iZXJPZkVudHJpZXNSZW1haW5pbmctLTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMzA1
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg2NiwxMiArODY2LDE1IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhv
dFBhdGhPdGhlcikpOwogICAgIH0KIAotICAgIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIGpp
dENvZGVNYXBFbmNvZGVyOworICAgIEpJVENvZGVNYXAgaml0Q29kZU1hcDsKICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXpl
KCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQotICAgICAgICAgICAgaml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKGJ5dGVj
b2RlT2Zmc2V0LCBwYXRjaEJ1ZmZlci5vZmZzZXRPZihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0p
KTsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKSB7CisgICAg
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKENvZGVFbnRyeVB0clRhZywgbV9jb2RlQmxvY2ss
IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIGppdENvZGVNYXAuYXBwZW5kKGJ5dGVjb2Rl
T2Zmc2V0LCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSwg
dGFnKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAo
aml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOworICAgIGppdENvZGVNYXAuZmluaXNoKCk7Cisg
ICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoV1RGTW92ZShqaXRDb2RlTWFwKSk7CiAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mKG1fYXJpdHlDaGVjaywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGVNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpJVENvZGVNYXAgeworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRW50
cnkgeworICAgICAgICBFbnRyeSgpIHsgfQorCisgICAgICAgIEVudHJ5KHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbikKKyAgICAgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIG1fY29kZUxvY2F0
aW9uKGNvZGVMb2NhdGlvbikKKyAgICAgICAgeyB9CisKKyAgICAgICAgaW5saW5lIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAg
ICAgaW5saW5lIENvZGVMb2NhdGlvbkxhYmVsIGNvZGVMb2NhdGlvbigpIHsgcmV0dXJuIG1fY29k
ZUxvY2F0aW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fY29kZUxvY2F0aW9uOworICAgIH07
CisKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2Rl
TG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24pCisgICAgeworICAgICAgICBtX2VudHJpZXMuYXBw
ZW5kKHsgYnl0ZWNvZGVJbmRleCwgY29kZUxvY2F0aW9uIH0pOworICAgIH0KKworICAgIHZvaWQg
ZmluaXNoKCkgeyBtX2VudHJpZXMuc2hyaW5rVG9GaXQoKTsgfQorCisgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZmluZCh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
YXV0byogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2VhcmNoPEVudHJ5LCB1bnNpZ25lZD4o
bV9lbnRyaWVzLAorICAgICAgICAgICAgICAgIG1fZW50cmllcy5zaXplKCksIGJ5dGVjb2RlSW5k
ZXgsIFtdIChFbnRyeSogZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5
LT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICghZW50
cnkpCisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgcmV0
dXJuIGVudHJ5LT5jb2RlTG9jYXRpb24oKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVzLnNpemUoKTsgfQorCitwcml2YXRlOgor
ICAgIFZlY3RvcjxFbnRyeT4gbV9lbnRyaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDIzMDUzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MiwxNCArNDQyLDEzIEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2Nr
LCAib3NyRW50cnkiLCAoImF0IGJjIyIsIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KSk7CiAK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwotICAgIAotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IG1hcDsKLSAgICBj
b2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKG1hcCk7Ci0gICAgQnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCwgdW5zaWduZWQ+KG1hcCwgbWFwLnNpemUoKSwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQs
IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOwotICAgIAotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21h
Y2hpbmVDb2RlT2Zmc2V0KTsKKworICAgIGNvbnN0IEpJVENvZGVNYXAmIGNvZGVNYXAgPSBjb2Rl
QmxvY2stPmppdENvZGVNYXAoKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBjb2RlTG9jYXRpb24g
PSBjb2RlTWFwLmZpbmQobG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOworICAgIEFTU0VSVChj
b2RlTG9jYXRpb24pOworCisgICAgUHRyVGFnIGxvY2F0aW9uVGFnID0gcHRyVGFnKENvZGVFbnRy
eVB0clRhZywgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CisgICAgdm9p
ZCoganVtcFRhcmdldCA9IGNvZGVMb2NhdGlvbi5yZXRhZ2dlZChsb2NhdGlvblRhZywgQ29kZUVu
dHJ5UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsK
ICAgICAKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJnZXQsIGV4ZWMtPnRvcE9mRnJhbWUo
KSk7Cg==
</data>
<flag name="review"
          id="356107"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>