<?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>203691</bug_id>
          
          <creation_ts>2019-10-31 13:10:13 -0700</creation_ts>
          <short_desc>Consider merging Wasm::FunctionCodeBlock and Wasm::LLIntCallee</short_desc>
          <delta_ts>2021-12-27 02:06:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1586037</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-10-31 13:10:13 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826809</commentid>
    <comment_count>1</comment_count>
      <attachid>447959</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-25 06:55:22 -0800</bug_when>
    <thetext>Created attachment 447959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826810</commentid>
    <comment_count>2</comment_count>
      <attachid>447960</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-25 07:01:01 -0800</bug_when>
    <thetext>Created attachment 447960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826848</commentid>
    <comment_count>3</comment_count>
      <attachid>447969</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-26 00:54:50 -0800</bug_when>
    <thetext>Created attachment 447969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826947</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-27 02:05:30 -0800</bug_when>
    <thetext>Committed r287459 (245594@main): &lt;https://commits.webkit.org/245594@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447969.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826948</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-27 02:06:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/86931772&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447959</attachid>
            <date>2021-12-25 06:55:22 -0800</date>
            <delta_ts>2021-12-25 07:00:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203691-20211225065521.patch</filename>
            <type>text/plain</type>
            <size>69832</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZjZiNzYyNmZlMTU4MGI3YTUzNTFmZjFiYmQ5NzRkNTgyZTg3YzE1Li5jZTlhZTBkYjFjM2IwZjNi
YmQwYzcxYTcyMTkxNzE5MzM5ODNkYTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAyMS0xMi0yNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIENvbnNpZGVyIG1lcmdpbmcgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sgYW5k
IFdhc206OkxMSW50Q2FsbGVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRl
Y29kZUR1bXBlcjo6ZHVtcEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1w
ZXI6OmR1bXBDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6
Y29uc3RhbnROYW1lIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5o
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2F0Y2hJbmZvOjpDYXRjaEluZm8pOgorICAgICAgICAqIGxsaW50L0xMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvV2ViQXNzZW1ibHkuYXNtOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxlZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpMTElu
dENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpvdXRPZkxpbmVKdW1w
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRDYWxsZWU6Om91dE9mTGluZUp1bXBU
YXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludENhbGxlZTo6bGlua0V4Y2VwdGlvbkhh
bmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q2FsbGVlOjpsbGludEZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6
c2V0SW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZE91dE9mTGluZUp1bXBUYXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1wVGFy
Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OmFk
ZFNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJh
dG9yOjpzaWduYXR1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXRvcjo6YWRkSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I6Omp1bXBUYWJsZSBjb25zdCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkp1bXBUYWJsZXMg
Y29uc3QpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suaC4KKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6
OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I6OnRpZXJVcENvdW50ZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bUdlbmVyYXRvclRyYWl0cy5oOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRTd2l0Y2gpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmg6
CisgICAgICAgICogd2FzbS9XYXNtTExJbnRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBs
YW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxh
bi5oOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6OkxMSW50VGllclVwQ291bnRlcik6CisgICAg
ICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3Vs
ZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6
CisgICAgICAgIChKU0M6OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmRvV2FzbUNhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dh
c21DYWxsUmVmKToKKwogMjAyMS0xMi0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBEZWZlcnJlZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmsoKSByZXR1
cm4gYSBUaWNrZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ4Yjdh
YzkxN2Y5YmY4NDUwNDk0ZDVhYzdhNTQ4NTJiYTNhOWJmMy4uMGRkZWEwZDZkYjFiY2UyNDliZTA2
YzVlMDJmOWY2MzQ4MjZjMWY2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTI0NCw3ICsxMjQ0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICB3YXNtL1dhc21FeGNlcHRpb25UeXBlLmgKICAgICB3YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaAogICAgIHdhc20vV2FzbUZvcm1hdC5oCi0gICAgd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2suaAorICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9y
LmgKICAgICB3YXNtL1dhc21IYW5kbGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUu
aAogICAgIHdhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGNjYzA4YjU2OTg1Njg3Y2Q3ZTk0YTE4MDQ2M2U4MTc2OGVmYWRmNzEuLmEx
NmMyZjQ1MTQ3NWU5YmEzZjI3MjA3MDgzYTBmNDgwMDE2MzE0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC03NzgsNyArNzc4LDcgQEAKIAkJMTQ0MjU2NjIxNUVERTk4RDAwNjZB
NDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDQyNTY2MDE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ4MzZFNzEz
MkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0NENBMzUwMjIyNDE4MDEwMDgxNzc4OSAvKiBDYWNoZWRCeXRlY29kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0Q0EzNEYy
MjFGMDM3OTAwODE3Nzg5IC8qIENhY2hlZEJ5dGVjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ1MEZBMUMyMzU3QkRCRTAwOTNDRDREIC8q
IFdhc21GdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRDNUFENkIyMkYzM0ZDMDAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNv
ZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
QzVBRDZCMjJGMzNGQzAwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDUw
RkExRjIzNTdCRUM5MDA5M0NENEQgLyogV2FzbUxMSW50VGllclVwQ291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MEZBMUUyMzU3QkVDNDAw
OTNDRDREIC8qIFdhc21MTEludFRpZXJVcENvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyog
U3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ1NzIyODUxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDVGRjJDODI0M0JC
OUQ2MDA1NjlFNzEgLyogRUNNQU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NUZGMkM3MjQzQkI5OUEwMDU2OUU3MSAvKiBFQ01BTW9kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTU4LDEx
ICszNTU4LDExIEBACiAJCTE0QzFGOUNGMjJFQTUxRkQwMDQwQjE0NSAvKiBXYXNtLnJiICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cnVieTsgcGF0aCA9IFdhc20ucmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzVB
RDY1MjJGMTg2NkMwMEYxRkI4MyAvKiBCeXRlY29kZUdlbmVyYXRvckJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVHZW5lcmF0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0QzVBRDY2MjJGMTg2NkMwMEYxRkI4MyAvKiBCeXRlY29kZUdlbmVyYXRvckJhc2VJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTRDNUFENjcyMkYzM0ZCRjAwRjFGQjgzIC8qIFdh
c21GdW5jdGlvbkNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRnVuY3Rpb25D
b2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEM1QUQ2NzIyRjMz
RkJGMDBGMUZCODMgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzVBRDY4MjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtTExJ
bnRHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUxMSW50R2VuZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDNUFENjkyMkYzM0ZCRjAwRjFGQjgz
IC8qIFdhc21MTEludEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTExJbnRHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDNUFENkEyMkYzM0ZCRjAwRjFG
QjgzIC8qIFdhc21MTEludFBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUxMSW50UGxh
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0QzVBRDZCMjJGMzNGQzAwMEYx
RkI4MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QzVBRDZCMjJG
MzNGQzAwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0QzVBRDZDMjJGMzNGQzAwMEYxRkI4MyAvKiBXYXNtTExJbnRQbGFu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21MTEludFBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTRDQTk1OEExNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUHJvcGVydHlBbmFs
eXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENBOTU4QzE2QUI1MEZBMDA5
MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTcyMTgsOCArNzIxOCw4IEBACiAJCQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLywKIAkJCQlBRDJGQ0MzMjFEQzQwNDUz
MDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5
QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywKLQkJCQkxNEM1QUQ2NzIyRjMzRkJGMDBGMUZCODMgLyog
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcCAqLywKLQkJCQkxNEM1QUQ2QjIyRjMzRkMwMDBGMUZC
ODMgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggKi8sCisJCQkJMTRDNUFENjcyMkYzM0ZCRjAw
RjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgKi8sCisJCQkJMTRD
NUFENkIyMkYzM0ZDMDAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5o
ICovLAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIu
aCAqLywKIAkJCQkxNDg3Q0UxNjIzNzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVyYXRvclRyYWl0
cy5oICovLAogCQkJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmNwcCAq
LywKQEAgLTcyNTUsMTMgKzcyNTUsMTMgQEAKIAkJCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYg
LyogV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmggKi8sCiAJCQkJNTMxMUJENDgxRUE1ODFFNTAwNTI1
MjgxIC8qIFdhc21PTUdQbGFuLmNwcCAqLywKIAkJCQk1MzExQkQ0OTFFQTU4MUU1MDA1MjUyODEg
LyogV2FzbU9NR1BsYW4uaCAqLywKLQkJCQk1MjdFNkNFQTI3NzJCOUM1MDA1RTA3ODIgLyogV2Fz
bU9TUkVudHJ5UGxhbi5jcHAgKi8sCi0JCQkJNTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdh
c21PU1JFbnRyeVBsYW4uaCAqLywKIAkJCQk1M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2Fz
bU9wY29kZU9yaWdpbi5jcHAgKi8sCiAJCQkJNTNDNkZFRUUxRThBREZBOTAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uaCAqLywKIAkJCQlFMzlEOEIyQzIzMDIxRTFFMDAyNjU4NTIgLyogV2Fz
bU9wZXJhdGlvbnMuY3BwICovLAogCQkJCUUzOUQ4QjJEMjMwMjFFMUUwMDI2NTg1MiAvKiBXYXNt
T3BlcmF0aW9ucy5oICovLAogCQkJCUUzQzY5NEIxMjMwMjY4NzMwMDZGQkU0MiAvKiBXYXNtT1NS
RW50cnlEYXRhLmggKi8sCisJCQkJNTI3RTZDRUEyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JF
bnRyeVBsYW4uY3BwICovLAorCQkJCTUyN0U2Q0VCMjc3MkI5QzUwMDVFMDc4MiAvKiBXYXNtT1NS
RW50cnlQbGFuLmggKi8sCiAJCQkJQURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdl
Q291bnQuY3BwICovLAogCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNv
dW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAq
LywKQEAgLTk3MTUsNyArOTcxNSw2IEBACiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8q
IENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMTFFODIwOUJDREFC
MDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
Q0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUyN0U2Q0VDMjc3MkI5Q0IwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFuLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQyRkQ5NDIwQjUyQkRFMDBGMDk0NDEgLyogQ29tcGxldGVTdWJz
cGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDk1Nyw3ICsx
MDk1Niw3IEBACiAJCQkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25U
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0JDNTQ3RDMxQjY5NTlB
MTAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NTBGQTFDMjM1
N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAor
CQkJCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBX
YXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODM1MDBBMjM5MEQ5M0Iw
MDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg1MjFEODI2RUFF
QkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTc5
LDYgKzEwOTc4LDcgQEAKIAkJCQlFMzlEOEIyRTIzMDIxRTI2MDAyNjU4NTIgLyogV2FzbU9wZXJh
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVBMyAvKiBX
YXNtT3BzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyog
V2FzbU9TUkVudHJ5RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTI3RTZDRUMyNzcyQjlDQjAw
NUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Qjc1OTc2
MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA5ZjFlMGEwMDNiYzkxNTM4ZGJjZWM1NDBm
NWRkNDU0ZTRlY2JjMTFlLi5mZjhiYmU5YjJkMzkxZDRiNmRhNWExNDQxYmYwZDhkNzA2ZGM2OTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMDgyLDcgKzEwODIsNyBAQCB3YXNt
L1dhc21FbWJlZGRlci5oCiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwCiB3YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuY3BwCiB3YXNtL1dhc21Gb3JtYXQuY3BwCi13YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9jay5jcHAKK3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcAogd2Fz
bS9XYXNtR2xvYmFsLmNwcAogd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21JbmRl
eE9yTmFtZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCmluZGV4IDM5OGY1NWIzZTc1NjVkYjM2MjQ2ZjdlMWUyMTMxOTM5ZTAxMWE5
NzYuLjViZjY3YjYxYjYyYmMxMmUwNGMyZmE3Y2E5MzQzYzBjN2FkZTY3MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFi
bGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVy
YXRvclRyYWl0cy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1
ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCkBAIC0zMjUsNyArMzI1LDcgQEAgdGVtcGxhdGUg
Y2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjsKIAogbmFtZXNwYWNlIFdh
c20gewogCi12b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxvY2sq
IGJsb2NrLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIFByaW50
U3RyZWFtJiBvdXQpCit2b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2Rl
QmxvY2tHZW5lcmF0b3IqIGJsb2NrLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5m
b3JtYXRpb24sIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291
bnQgPSAwOwogICAgIHNpemVfdCB3aWRlMTZJbnN0cnVjdGlvbkNvdW50ID0gMDsKQEAgLTM3MSw3
ICszNzEsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxv
Y2sqIGJsb2NrLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbgogCiB2b2lkIEJ5dGVjb2RlRHVtcGVy
OjpkdW1wQ29uc3RhbnRzKCkKIHsKLSAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlz
LT5ibG9jaygpOworICAgIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yKiBibG9jayA9IHRoaXMt
PmJsb2NrKCk7CiAgICAgaWYgKCFibG9jay0+Y29uc3RhbnRzKCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIHRoaXMtPm1fb3V0LnByaW50ZigiXG5Db25zdGFudHM6XG4iKTsKICAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENv
bnN0YW50cygpCiAKIENTdHJpbmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXgpIGNvbnN0CiB7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0g
dGhpcy0+YmxvY2soKTsKKyAgICBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciogYmxvY2sgPSB0
aGlzLT5ibG9jaygpOwogICAgIGF1dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0
Q29uc3RhbnRUeXBlKGluZGV4KSwgYmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CiAgICAgcmV0
dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApp
bmRleCA4NzJmNmFiYTJjYmU1NGU5NmE5NGM1MWFjNTQ3NTA2YTI2Y2Q3MzYxLi4yMTZlNmU2N2Vh
MGQyZGM3ZDkzYWE0NTEyOGU5YTA2MmQzZDYzYjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtMTI5LDE1ICsxMjksMTUgQEAgY2xh
c3MgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8
QmxvY2s+IHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsK
K2NsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOwogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uOwogCi1jbGFzcyBCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBKU0M6OkJ5dGVjb2Rl
RHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrPiB7CitjbGFzcyBCeXRlY29kZUR1bXBlciBmaW5hbCA6
IHB1YmxpYyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEZ1bmN0aW9uQ29kZUJsb2NrKiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcmludFN0cmVhbSYgb3V0KTsKKyAgICBzdGF0aWMg
dm9pZCBkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IqLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByaW50U3RyZWFtJiBvdXQpOwogCiBwcml2YXRlOgotICAgIHVzaW5nIEpT
Qzo6Qnl0ZWNvZGVEdW1wZXI8RnVuY3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKKyAg
ICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPjo6
Qnl0ZWNvZGVEdW1wZXI7CiAKICAgICB2b2lkIGR1bXBDb25zdGFudHMoKTsKICAgICBDU3RyaW5n
IGNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0IGZpbmFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXgg
MGU5YTkzYjI5NWNkY2JmZTU4MjQwMGFhYTJkOTI3NzFiNzIzNGQ2Ny4uNDkxZWE0NTI3ZmRmNjZi
MmIxYmMzMWQ2OWY1NTVlN2U1ZmYzZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC01NDUsOCArNTQ1LDggQEAgQ2F0Y2hJ
bmZvOjpDYXRjaEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhhbmRsZXIsIGNvbnN0IFdh
c206OkNhbGxlZSogY2FsbGUKICAgICBpZiAobV92YWxpZCkgewogICAgICAgICBtX3R5cGUgPSBI
YW5kbGVyVHlwZTo6Q2F0Y2g7CiAgICAgICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm1fbmF0
aXZlQ29kZTsKLSAgICAgICAgaWYgKGNvbnN0IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsZWUtPmxsaW50RnVuY3Rpb25Db2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1f
Y2F0Y2hQQ0ZvckludGVycHJldGVyID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5k
bGVyLT5tX3RhcmdldCkucHRyKCk7CisgICAgICAgIGlmIChjYWxsZWUtPmNvbXBpbGF0aW9uTW9k
ZSgpID09IFdhc206OkNvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlKQorICAgICAgICAgICAgbV9j
YXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBXYXNtOjpMTEludENhbGxl
ZSo+KGNhbGxlZSktPmluc3RydWN0aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5wdHIoKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxs
cHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dE9mZnNldHNFeHRyYWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
T2Zmc2V0c0V4dHJhY3Rvci5jcHAKaW5kZXggMzk3YjA1ZDg2YTA3MTJhN2EzOGNhMDIxZDIzMmNi
MmQ5ZGI1MWI5My4uMmY5MTU5Njg3YzNjY2U4ZWQ3ZDI0NDA3Mjg1OWU3OGJmNThjYmFlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZh
bHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1
ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldh
dGNoZG9nLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtOTMsNyArOTMs
MTEgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yIHsKICAgICB1c2luZyBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZUZpeGVkVmVjdG9yID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1w
VGFibGU+OwogICAgIHVzaW5nIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlRml4ZWRWZWN0b3IgPSBG
aXhlZFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT47CiAgICAgdXNpbmcgSW50MzJGaXhl
ZFZlY3RvciA9IEZpeGVkVmVjdG9yPGludDMyX3Q+OworICAgIHVzaW5nIEludDY0Rml4ZWRWZWN0
b3IgPSBGaXhlZFZlY3Rvcjx1aW50NjRfdD47CiAgICAgdXNpbmcgVm9pZFBvaW50ZXJGaXhlZFZl
Y3RvciA9IEZpeGVkVmVjdG9yPHZvaWQqPjsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
dXNpbmcgV2FzbUp1bXBUYWJsZUZpeGVkVmVjdG9yID0gRml4ZWRWZWN0b3I8V2FzbTo6SnVtcFRh
YmxlPjsKKyNlbmRpZgogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QqIGR1bW15
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHku
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQppbmRleCA1
M2EyMDIwYWM4OGY1MmIwYjhmODg3MTcyODE1MTJmNGViNTU0ODRmLi5mNTQ3NGRmMDViYTQ2ZTZj
NzRmNjg0NWY2YWUyYTI4OWY1NzBjZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9XZWJBc3NlbWJseS5hc20KQEAgLTExMyw3ICsxMTMsNyBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
d3MwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fdGll
clVwQ291bnRlciArIFdhc206OkxMSW50VGllclVwQ291bnRlcjo6bV9jb3VudGVyW3dzMF0sIC5j
b250aW51ZQorICAgIGJhZGRpcyBpbmNyZW1lbnQsIFdhc206OkxMSW50Q2FsbGVlOjptX3RpZXJV
cENvdW50ZXIgKyBXYXNtOjpMTEludFRpZXJVcENvdW50ZXI6Om1fY291bnRlclt3czBdLCAuY29u
dGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAtMjc3LDcgKzI3Nyw3
IEBAIGVuZAogCiBtYWNybyByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgd3MxCi0gICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6
Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMV0sIHdzMQorICAgIGxvYWRpIFdhc206OkxMSW50Q2FsbGVl
OjptX251bUNhbGxlZUxvY2Fsc1t3czFdLCB3czEKICAgICBsc2hpZnRwIDMsIHdzMQogICAgIGFk
ZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQogICAgIHN1YnAgY2ZyLCB3czEs
IHNwCkBAIC0yOTcsNyArMjk3LDcgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9ja0dldHRl
ciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGNvZGVCbG9ja1NldHRl
cih3czApCiAKICAgICAjIEdldCBuZXcgc3AgaW4gd3MxIGFuZCBjaGVjayBzdGFjayBoZWlnaHQu
Ci0gICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dz
MF0sIHdzMQorICAgIGxvYWRpIFdhc206OkxMSW50Q2FsbGVlOjptX251bUNhbGxlZUxvY2Fsc1t3
czBdLCB3czEKICAgICBsc2hpZnRwIDMsIHdzMQogICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwsIHdzMQogICAgIHN1YnAgY2ZyLCB3czEsIHdzMQpAQCAtMzIyLDEwICszMjIs
MTAgQEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVy
LCBsb2FkV2FzbUluc3RhbmNlKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JQcm9sb2d1ZSh3czAp
CiAKICAgICAjIFNldCB1cCB0aGUgUEMuCi0gICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxv
Y2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlclt3czBdLCBQQgorICAgIGxvYWRwIFdhc206OkxM
SW50Q2FsbGVlOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbd3MwXSwgUEIKICAgICBtb3ZlIDAs
IFBDCiAKLSAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1WYXJzW3dzMF0s
IHdzMQorICAgIGxvYWRpIFdhc206OkxMSW50Q2FsbGVlOjptX251bVZhcnNbd3MwXSwgd3MxCiAg
ICAgc3ViaSBOdW1iZXJPZldhc21Bcmd1bWVudHMgKyBDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMsIHdzMQogICAgIGJ0aXogd3MxLCAuemVyb0luaXRpYWxpemVMb2NhbHNEb25lCiAg
ICAgbmVnaSB3czEKQEAgLTM4OSw5ICszODksOSBAQCBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKGN0eCwgaW5kZXgsIGxvYWRlcikKICAgICAgICAgam1wIC5kb25lCiAgICAgLmNvbnN0YW50
OgogICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDYKLSAgICAgICAgbG9hZHAgV2FzbTo6
RnVuY3Rpb25Db2RlQmxvY2s6Om1fY29uc3RhbnRzICsgVmVjdG9yQnVmZmVyT2Zmc2V0W3Q2XSwg
dDYKKyAgICAgICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1fY29uc3RhbnRzW3Q2XSwgdDYK
ICAgICAgICAgc3VicCBmaXJzdENvbnN0YW50SW5kZXgsIGluZGV4Ci0gICAgICAgIGxvYWRlcihb
dDYsIGluZGV4LCA4XSkKKyAgICAgICAgbG9hZGVyKChjb25zdGV4cHIgKEludDY0Rml4ZWRWZWN0
b3I6OlN0b3JhZ2U6Om9mZnNldE9mRGF0YSgpKSlbdDYsIGluZGV4LCA4XSkKICAgICAuZG9uZToK
ICAgICBlbmQpCiBlbmQKQEAgLTUwNyw3ICs1MDcsNiBAQCBlbmQKIG1hY3JvIHdhc21Db2RlQmxv
Y2tHZXR0ZXIodGFyZ2V0UmVnaXN0ZXIpCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHRhcmdldFJl
Z2lzdGVyCiAgICAgYW5kcCB+MywgdGFyZ2V0UmVnaXN0ZXIKLSAgICBsb2FkcCBXYXNtOjpMTElu
dENhbGxlZTo6bV9jb2RlQmxvY2tbdGFyZ2V0UmVnaXN0ZXJdLCB0YXJnZXRSZWdpc3RlcgogZW5k
CiAKIG9wKHdhc21fZnVuY3Rpb25fcHJvbG9ndWUsIG1hY3JvICgpCkBAIC02MjEsNyArNjIwLDcg
QEAgX3dhc21fZW50ZXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KHQyLCAweGRlYWQwMGUxKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0
MiAgICAgICAgICAgICAgICAvLyB0MjxDb2RlQmxvY2s+ID0gY2ZyLkNvZGVCbG9jawotICAgIGxv
YWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX251bVZhcnNbdDJdLCB0MiAgICAgIC8vIHQy
PHNpemVfdD4gPSB0MjxDb2RlQmxvY2s+Lm1fbnVtVmFycworICAgIGxvYWRpIFdhc206OkxMSW50
Q2FsbGVlOjptX251bVZhcnNbdDJdLCB0MiAgICAgIC8vIHQyPHNpemVfdD4gPSB0MjxDb2RlQmxv
Y2s+Lm1fbnVtVmFycwogICAgIHN1YnEgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
ICsgTnVtYmVyT2ZXYXNtQXJndW1lbnRzLCB0MgogICAgIGJ0aXogdDIsIC5vcEVudGVyRG9uZQog
ICAgIG1vdmUgY2ZyLCB0MQpAQCAtNjcwLDI2ICs2NjksMjYgQEAgd2FzbU9wKHN3aXRjaCwgV2Fz
bVN3aXRjaCwgbWFjcm8oY3R4KQogICAgIHdnZXR1KGN0eCwgbV90YWJsZUluZGV4LCB0MSkKIAog
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgotICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjptX2p1bXBUYWJsZXMgKyBWZWN0b3JCdWZmZXJPZmZzZXRbdDJdLCB0MgotICAgIG11
bGkgc2l6ZW9mIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUsIHQxCisgICAgbG9h
ZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1fanVtcFRhYmxlc1t0Ml0sIHQyCisgICAgbXVsaSBzaXpl
b2YgV2FzbTo6SnVtcFRhYmxlLCB0MQogICAgIGFkZHAgdDEsIHQyCiAKLSAgICBsb2FkaSBWZWN0
b3JTaXplT2Zmc2V0W3QyXSwgdDMKKyAgICBsb2FkcCAoY29uc3RleHByIChXYXNtSnVtcFRhYmxl
Rml4ZWRWZWN0b3I6OlN0b3JhZ2U6Om9mZnNldE9mRGF0YSgpKSlbdDJdLCB0MgorICAgIGxvYWRp
IFdhc206Okp1bXBUYWJsZTo6U3RvcmFnZTo6bV9zaXplW3QyXSwgdDMKICAgICBiaWIgdDAsIHQz
LCAuaW5Cb3VuZHMKIAogLm91dE9mQm91bmRzOgogICAgIHN1YmkgdDMsIDEsIHQwCiAKIC5pbkJv
dW5kczoKLSAgICBsb2FkcCBWZWN0b3JCdWZmZXJPZmZzZXRbdDJdLCB0MgotICAgIG11bGkgc2l6
ZW9mIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeSwgdDAKKyAgICBtdWxp
IHNpemVvZiBXYXNtOjpKdW1wVGFibGVFbnRyeSwgdDAKIAotICAgIGxvYWRpIFdhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6c3RhcnRPZmZzZXRbdDIsIHQwXSwgdDEKLSAg
ICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6SnVtcFRhYmxlRW50cnk6OmRyb3BDb3Vu
dFt0MiwgdDBdLCB0MwotICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFi
bGVFbnRyeTo6a2VlcENvdW50W3QyLCB0MF0sIHQ1CisgICAgbG9hZGkgKGNvbnN0ZXhwciAoV2Fz
bTo6SnVtcFRhYmxlOjpTdG9yYWdlOjpvZmZzZXRPZkRhdGEoKSkpICsgV2FzbTo6SnVtcFRhYmxl
RW50cnk6OnN0YXJ0T2Zmc2V0W3QyLCB0MF0sIHQxCisgICAgbG9hZGkgKGNvbnN0ZXhwciAoV2Fz
bTo6SnVtcFRhYmxlOjpTdG9yYWdlOjpvZmZzZXRPZkRhdGEoKSkpICsgV2FzbTo6SnVtcFRhYmxl
RW50cnk6OmRyb3BDb3VudFt0MiwgdDBdLCB0MworICAgIGxvYWRpIChjb25zdGV4cHIgKFdhc206
Okp1bXBUYWJsZTo6U3RvcmFnZTo6b2Zmc2V0T2ZEYXRhKCkpKSArIFdhc206Okp1bXBUYWJsZUVu
dHJ5OjprZWVwQ291bnRbdDIsIHQwXSwgdDUKICAgICBkcm9wS2VlcCh0MSwgdDMsIHQ1KQogCi0g
ICAgbG9hZGlzIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0
W3QyLCB0MF0sIHQzCisgICAgbG9hZGlzIChjb25zdGV4cHIgKFdhc206Okp1bXBUYWJsZTo6U3Rv
cmFnZTo6b2Zmc2V0T2ZEYXRhKCkpKSArIFdhc206Okp1bXBUYWJsZUVudHJ5Ojp0YXJnZXRbdDIs
IHQwXSwgdDMKICAgICBhc3NlcnQobWFjcm8ob2spIGJ0aW56IHQzLCAub2sgZW5kKQogICAgIHdh
c21EaXNwYXRjaEluZGlyZWN0KHQzKQogZW5kKQpAQCAtODMzLDcgKzgzMiw3IEBAIG1hY3JvIHNs
b3dQYXRoRm9yV2FzbUNhbGwoY3R4LCBzbG93UGF0aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAgICAg
ICAgICAgICBtb3ZlIFBCLCB3YXNtSW5zdGFuY2UKICAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiAgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgUEIKLSAgICAgICAgICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAK
ICAgICAgICAgICAgIHdnZXR1KGN0eCwgbV9zdGFja09mZnNldCwgd3MxKQogICAgICAgICAgICAg
bHNoaWZ0aSAzLCB3czEKQEAgLTI4NTMsNyArMjg1Miw3IEBAIG1hY3JvIGNvbW1vbkNhdGNoSW1w
bChjdHgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21J
bnN0YW5jZSh3YXNtSW5zdGFuY2UsIHdzMCwgd3MxKQogCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIFBCCi0gICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcltQQl0sIFBCCisgICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVy
UENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3VicCBQQiwgUEMKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCBhMDM2M2RhNmU4MmM3ZGYwOTA0OWM1ZmFhNjAy
MWY5ZGJlMTdjYTcyLi5kOWIzZTk4MzlmOTk3ZDZmYzMzMGUxMjM4YTJlNTE2ZjJmYTRiZTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAtNzYsMjEgKzc2
LDI4IEBAIEpJVENhbGxlZTo6SklUQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvCiB7CiB9CiAKLUxMSW50Q2FsbGVlOjpMTElu
dENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSkKK0xMSW50Q2FsbGVlOjpMTEludENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6TExJbnRNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAsIG1fY29kZUJsb2NrKFdU
Rk1vdmUoY29kZUJsb2NrKSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChnZW5lcmF0b3IubV9mdW5j
dGlvbkluZGV4KQorICAgICwgbV9udW1WYXJzKGdlbmVyYXRvci5tX251bVZhcnMpCisgICAgLCBt
X251bUNhbGxlZUxvY2FscyhnZW5lcmF0b3IubV9udW1DYWxsZWVMb2NhbHMpCisgICAgLCBtX251
bUFyZ3VtZW50cyhnZW5lcmF0b3IubV9udW1Bcmd1bWVudHMpCisgICAgLCBtX2NvbnN0YW50VHlw
ZXMoV1RGTW92ZShnZW5lcmF0b3IubV9jb25zdGFudFR5cGVzKSkKKyAgICAsIG1fY29uc3RhbnRz
KFdURk1vdmUoZ2VuZXJhdG9yLm1fY29uc3RhbnRzKSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKFdU
Rk1vdmUoZ2VuZXJhdG9yLm1faW5zdHJ1Y3Rpb25zKSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlcihnZW5lcmF0b3IubV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9qdW1w
VGFyZ2V0cyhXVEZNb3ZlKGdlbmVyYXRvci5tX2p1bXBUYXJnZXRzKSkKKyAgICAsIG1fc2lnbmF0
dXJlcyhXVEZNb3ZlKGdlbmVyYXRvci5tX3NpZ25hdHVyZXMpKQorICAgICwgbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0cyhXVEZNb3ZlKGdlbmVyYXRvci5tX291dE9mTGluZUp1bXBUYXJnZXRzKSkKKyAg
ICAsIG1fdGllclVwQ291bnRlcihXVEZNb3ZlKGdlbmVyYXRvci5tX3RpZXJVcENvdW50ZXIpKQor
ICAgICwgbV9qdW1wVGFibGVzKFdURk1vdmUoZ2VuZXJhdG9yLm1fanVtcFRhYmxlcykpCiB7Ci0g
ICAgbGlua0V4Y2VwdGlvbkhhbmRsZXJzKCk7Ci19Ci0KLXZvaWQgTExJbnRDYWxsZWU6OmxpbmtF
eGNlcHRpb25IYW5kbGVycygpCi17Ci0gICAgaWYgKHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2Nr
LT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICBpZiAoc2l6ZV90IGNvdW50ID0g
Z2VuZXJhdG9yLm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewogICAgICAgICBtX2V4Y2Vw
dGlvbkhhbmRsZXJzID0gRml4ZWRWZWN0b3I8SGFuZGxlckluZm8+KGNvdW50KTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVu
bGlua2VkSGFuZGxlciA9IGdlbmVyYXRvci5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAg
ICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAg
ICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KHVubGlua2VkSGFuZGxlci5tX3RhcmdldCkucHRyKCk7CisgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICptX2luc3RydWN0aW9ucy0+YXQodW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5w
dHIoKTsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IHRhcmdldDsKICAgICAgICAgICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhh
bmRsZXJUeXBlOjpDYXRjaCkKICAgICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3Ry
dWN0aW9uLndpZHRoPFdhc21PcGNvZGVUcmFpdHM+KCkpLmNvZGUoKSk7CkBAIC0xMzcsNiArMTQ0
LDE5IEBAIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiBMTEludENhbGxlZTo6cmFuZ2UoKSBjb25z
dAogICAgIHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsKIH0KIAorSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBMTEludENhbGxlZTo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFTU0VSVChtX291dE9mTGluZUp1
bXBUYXJnZXRzLmNvbnRhaW5zKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIG1fb3V0T2ZM
aW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworY29uc3QgSW5zdHJ1Y3Rp
b24qIExMSW50Q2FsbGVlOjpvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKK3sKKyAgICBpbnQgb2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQocGMpOworICAgIGludCB0YXJn
ZXQgPSBvdXRPZkxpbmVKdW1wT2Zmc2V0KG9mZnNldCk7CisgICAgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zLT5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOworfQorCiB2b2lkIE9wdGltaXppbmdKSVRD
YWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycyhWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4g
dW5saW5rZWRFeGNlcHRpb25IYW5kbGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+PiBleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogewogICAgIHNp
emVfdCBjb3VudCA9IHVubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGE0NmMzZGI2MmQzMzQzOTQ0MzQ4OTUx
ODRhOTNlYWExY2VmMzFiMjYuLjg3YTg3Y2U0MGYxZmYyOGZkM2M3MTgzNDg5YmMxMmNiNTRiZjk1
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUgIldhc21D
b21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2FzbUlu
ZGV4T3JOYW1lLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50VGllclVwQ291bnRlci5oIgpAQCAtNjUs
OCArNjUsNiBAQCBjbGFzcyBDYWxsZWUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q2Fs
bGVlPiB7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgRnVuY3Rpb25Db2RlQmxvY2sqIGxsaW50RnVuY3Rpb25Db2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9Ci0KIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxs
ZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUo
V2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBzaXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVm
UHRyPE5hbWVTZWN0aW9uPj4mJik7CkBAIC0yMTQsOSArMjEyLDkgQEAgY2xhc3MgTExJbnRDYWxs
ZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKICAgICBmcmllbmQgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxMTEludENhbGxlZT4gY3JlYXRlKHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gY29kZUJsb2NrLCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorICAgIHN0
YXRpYyBSZWY8TExJbnRDYWxsZWU+IGNyZWF0ZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYg
Z2VuZXJhdG9yLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TExJbnRDYWxsZWUoV1RGTW92ZShjb2RlQmxvY2spLCBpbmRleCwgV1RGTW92ZShuYW1lKSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMTEludENhbGxlZShnZW5lcmF0b3IsIGluZGV4
LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRFbnRyeXBvaW50KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KTsKQEAg
LTIyNCw2ICsyMjIsNDkgQEAgY2xhc3MgTExJbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVl
IHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGZpbmFsOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8dm9p
ZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0IGZpbmFsOwogCisgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25JbmRleDsgfQorICAgIHVuc2lnbmVkIG51
bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KKyAgICB1bnNpZ25lZCBudW1DYWxs
ZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQorICAgIHVpbnQz
Ml90IG51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CisgICAg
Y29uc3QgRml4ZWRWZWN0b3I8VHlwZT4mIGNvbnN0YW50VHlwZXMoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50VHlwZXM7IH0KKyAgICBjb25zdCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9CisgICAgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsg
fQorCisgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCld
OyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0
ZWRXYXNtQnl0ZWNvZGVzKCkpOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07CisgICAgfQorCisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0K
KyAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxhc3RKdW1wVGFyZ2V0KCkgeyByZXR1cm4g
bV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0KKworICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxp
bmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpOwor
ICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGlu
c3RydWN0aW9uc0JlZ2luID0gbV9pbnN0cnVjdGlvbnMtPmF0KDApLnB0cigpOworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3Ry
dWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSAr
IG1faW5zdHJ1Y3Rpb25zLT5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5B
ZGRyZXNzID49IGluc3RydWN0aW9uc0JlZ2luICYmIHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlv
bnNFbmQpOworICAgICAgICByZXR1cm4gcmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2lu
OworICAgIH0KKworICAgIExMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0
dXJuIG1fdGllclVwQ291bnRlcjsgfQorCisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKm1fc2lnbmF0dXJl
c1tpbmRleF07CisgICAgfQorCisgICAgY29uc3QgSnVtcFRhYmxlJiBqdW1wVGFibGUodW5zaWdu
ZWQgdGFibGVJbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKCkg
Y29uc3Q7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgSklUQ2FsbGVlKiBy
ZXBsYWNlbWVudChNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnRzW3N0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQo
UmVmPEpJVENhbGxlZT4mJiByZXBsYWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQpAQCAtMjM2LDIx
ICsyNzcsMzQgQEAgY2xhc3MgTExJbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKICAg
ICB7CiAgICAgICAgIG1fb3NyRW50cnlDYWxsZWVzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
XSA9IFdURk1vdmUob3NyRW50cnlDYWxsZWUpOwogICAgIH0KLQotICAgIExMSW50VGllclVwQ291
bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT50aWVyVXBDb3VudGVy
KCk7IH0KLSAgICBGdW5jdGlvbkNvZGVCbG9jayogbGxpbnRGdW5jdGlvbkNvZGVCbG9jaygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAjZW5kaWYKIAotcHJpdmF0
ZToKLSAgICBMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
Jik7CisgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQsIGludD47CiAKLSAgICB2b2lkIGxpbmtFeGNlcHRpb25IYW5kbGVycygp
OworcHJpdmF0ZToKKyAgICBMTEludENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYs
IHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+
PiYmKTsKKworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleCB7IDAgfTsKKworICAgIC8vIFVz
ZWQgZm9yIHRoZSBudW1iZXIgb2YgV2ViQXNzZW1ibHkgbG9jYWxzLCBhcyBpbiBodHRwczovL3dl
YmFzc2VtYmx5LmdpdGh1Yi5pby9zcGVjL2NvcmUvc3ludGF4L21vZHVsZXMuaHRtbCNzeW50YXgt
bG9jYWwKKyAgICB1bnNpZ25lZCBtX251bVZhcnMgeyAwIH07CisgICAgLy8gTnVtYmVyIG9mIFZp
cnR1YWxSZWdpc3Rlci4gVGhlIG5hbWluZyBpcyB1bmZvcnR1bmF0ZSwgYnV0IGhhcyB0byBtYXRj
aCBVbmxpbmtlZENvZGVCbG9jaworICAgIHVuc2lnbmVkIG1fbnVtQ2FsbGVlTG9jYWxzIHsgMCB9
OworICAgIHVpbnQzMl90IG1fbnVtQXJndW1lbnRzIHsgMCB9OworICAgIEZpeGVkVmVjdG9yPFR5
cGU+IG1fY29uc3RhbnRUeXBlczsKKyAgICBGaXhlZFZlY3Rvcjx1aW50NjRfdD4gbV9jb25zdGFu
dHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9u
czsKKyAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07
CisgICAgRml4ZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0
czsKKyAgICBGaXhlZFZlY3Rvcjxjb25zdCBTaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7CisgICAg
T3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKKyAgICBMTEludFRp
ZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOworICAgIEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4g
bV9qdW1wVGFibGVzOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIFJlZlB0
cjxKSVRDYWxsZWU+IG1fcmVwbGFjZW1lbnRzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwog
ICAgIFJlZlB0cjxPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZXNbV2FzbTo6TnVtYmVy
T2ZNZW1vcnlNb2Rlc107CiAjZW5kaWYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IG1fY29kZUJsb2NrOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IG1fZW50cnlwb2ludDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxYjA2ODYyMGNjN2Q5ZTVlNzc4ZWJiYTMyOTNlOWZiMjE3NmYzNDM2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgi
Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVh
bS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi12b2lkIEZ1bmN0aW9u
Q29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBpbnN0cnVjdGlvbnMpCi17Ci0gICAgbV9pbnN0cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3Ry
dWN0aW9ucyk7Ci0gICAgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyID0gbV9pbnN0cnVjdGlvbnMt
PnJhd1BvaW50ZXIoKTsKLX0KLQotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6YWRkT3V0T2ZMaW5l
SnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBpbnQg
dGFyZ2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7Ci0gICAgbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0cy5zZXQoYnl0ZWNvZGVPZmZzZXQsIHRhcmdldCk7Ci19Ci0KLUluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgRnVuY3Rpb25Db2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9v
dXRPZkxpbmVKdW1wVGFyZ2V0cy5jb250YWlucyhieXRlY29kZU9mZnNldCkpOwotICAgIHJldHVy
biBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7Ci19Ci0KLWNvbnN0
IEluc3RydWN0aW9uKiBGdW5jdGlvbkNvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcFRhcmdldChjb25z
dCBJbnN0cnVjdGlvbiogcGMpCi17Ci0gICAgaW50IG9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0KHBj
KTsKLSAgICBpbnQgdGFyZ2V0ID0gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOwotICAgIHJl
dHVybiBtX2luc3RydWN0aW9ucy0+YXQob2Zmc2V0ICsgdGFyZ2V0KS5wdHIoKTsKLX0KLQotdW5z
aWduZWQgRnVuY3Rpb25Db2RlQmxvY2s6OmFkZFNpZ25hdHVyZShjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkKLXsKLSAgICB1bnNpZ25lZCBpbmRleCA9IG1fc2lnbmF0dXJlcy5zaXplKCk7Ci0g
ICAgbV9zaWduYXR1cmVzLmFwcGVuZCgmc2lnbmF0dXJlKTsKLSAgICByZXR1cm4gaW5kZXg7Ci19
Ci0KLWNvbnN0IFNpZ25hdHVyZSYgRnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25hdHVyZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fc2lnbmF0dXJlc1tpbmRleF07Ci19Ci0K
LWF1dG8gRnVuY3Rpb25Db2RlQmxvY2s6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRy
aWVzKSAtPiBKdW1wVGFibGUmCi17Ci0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUo
bnVtYmVyT2ZFbnRyaWVzKSk7Ci0gICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7Ci19Ci0K
LWF1dG8gRnVuY3Rpb25Db2RlQmxvY2s6Omp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBj
b25zdCAtPiBjb25zdCBKdW1wVGFibGUmCi17Ci0gICAgcmV0dXJuIG1fanVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKLX0KLQotdW5zaWduZWQgRnVuY3Rpb25Db2RlQmxvY2s6Om51bWJlck9mSnVtcFRh
YmxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fanVtcFRhYmxlcy5zaXplKCk7Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmYzZTY0MTMyYzE3Yjk1MTFhM2Vi
ZWE2YzYwZDAwMjRiMzI3YjUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9j
ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgotI2luY2x1
ZGUgIkhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKLSNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8u
aCIKLSNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCi0jaW5jbHVkZSAiV2FzbU9w
cy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSklUQ29kZTsKLWNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgotY2xhc3MgQnl0ZWNvZGVHZW5l
cmF0b3JCYXNlOwotCi1uYW1lc3BhY2UgV2FzbSB7Ci0KLWNsYXNzIFNpZ25hdHVyZTsKLXN0cnVj
dCBHZW5lcmF0b3JUcmFpdHM7Ci0KLS8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIHRoaXMgd2l0
aCBMTEludENhbGxlZQotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMzY5MQotY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZ1bmN0aW9uQ29kZUJsb2NrKTsKLQot
ICAgIGZyaWVuZCBCeXRlY29kZUdlbmVyYXRvckJhc2U8R2VuZXJhdG9yVHJhaXRzPjsKLSAgICBm
cmllbmQgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIGZyaWVuZCBjbGFzcyBMTEludEdlbmVy
YXRvcjsKLQotcHVibGljOgotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpCi0gICAgICAgIDogbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCi0gICAgewot
ICAgIH0KLQotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1
bmN0aW9uSW5kZXg7IH0KLSAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9Ci0gICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1DYWxsZWVMb2NhbHM7IH0KLSAgICB1aW50MzJfdCBudW1Bcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUFyZ3VtZW50czsgfQotICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgY29uc3Rh
bnRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRUeXBlczsgfQotICAgIGNvbnN0IFZl
Y3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9
Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuICptX2luc3RydWN0aW9uczsgfQotCi0gICAgdm9pZCBzZXROdW1WYXJzKHVuc2lnbmVkIG51
bVZhcnMpIHsgbV9udW1WYXJzID0gbnVtVmFyczsgfQotICAgIHZvaWQgc2V0TnVtQ2FsbGVlTG9j
YWxzKHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscykgeyBtX251bUNhbGxlZUxvY2FscyA9IG51bUNh
bGxlZUxvY2FsczsgfQotCi0gICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25z
dGFudEluZGV4KCldOyB9Ci0gICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE9wdGlvbnM6
OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9jb25zdGFu
dFR5cGVzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbnN0
cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPik7Ci0gICAgdm9pZCBh
ZGRKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQganVtcFRhcmdldCkgeyBtX2p1
bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQotICAgIEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgp
OyB9Ci0gICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsYXN0SnVtcFRhcmdldCgpIHsgcmV0
dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9Ci0KLSAgICB2b2lkIGFkZE91dE9mTGluZUp1bXBU
YXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50IHRhcmdldCk7Ci0gICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIG91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCk7Ci0gICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvdXRPZkxp
bmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zm
c2V0KCkpOwotICAgIH0KLQotICAgIGlubGluZSBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5
dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQotICAgIHsKLSAg
ICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2luc3RydWN0aW9ucy0+YXQo
MCkucHRyKCk7Ci0gICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aW5zdHJ1Y3Rpb25zQmVnaW4pICsgbV9pbnN0cnVjdGlvbnMtPnNpemUoKSk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgcmV0dXJu
QWRkcmVzcyA8IGluc3RydWN0aW9uc0VuZCk7Ci0gICAgICAgIHJldHVybiByZXR1cm5BZGRyZXNz
IC0gaW5zdHJ1Y3Rpb25zQmVnaW47Ci0gICAgfQotCi0gICAgTExJbnRUaWVyVXBDb3VudGVyJiB0
aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV90aWVyVXBDb3VudGVyOyB9Ci0KLSAgICB1bnNpZ25l
ZCBhZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJik7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IEp1bXBUYWJsZUVu
dHJ5IHsKLSAgICAgICAgaW50IHRhcmdldCB7IDAgfTsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGRyb3BDb3VudDsKLSAgICAgICAgdW5zaWduZWQga2Vl
cENvdW50OwotICAgIH07Ci0KLSAgICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxl
RW50cnk+OwotICAgIEp1bXBUYWJsZSYgYWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJp
ZXMpOwotICAgIGNvbnN0IEp1bXBUYWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgp
IGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwotCi0gICAg
c2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2Vw
dGlvbkhhbmRsZXJzLnNpemUoKTsgfQotICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlv
bkhhbmRsZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsg
fQotICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiBoYW5kbGVyKSB7IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQsIGludD47Ci0KLSAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7
Ci0KLSAgICAvLyBVc2VkIGZvciB0aGUgbnVtYmVyIG9mIFdlYkFzc2VtYmx5IGxvY2FscywgYXMg
aW4gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy9jb3JlL3N5bnRheC9tb2R1bGVz
Lmh0bWwjc3ludGF4LWxvY2FsCi0gICAgdW5zaWduZWQgbV9udW1WYXJzIHsgMCB9OwotICAgIC8v
IE51bWJlciBvZiBWaXJ0dWFsUmVnaXN0ZXIuIFRoZSBuYW1pbmcgaXMgdW5mb3J0dW5hdGUsIGJ1
dCBoYXMgdG8gbWF0Y2ggVW5saW5rZWRDb2RlQmxvY2sKLSAgICB1bnNpZ25lZCBtX251bUNhbGxl
ZUxvY2FscyB7IDAgfTsKLSAgICB1aW50MzJfdCBtX251bUFyZ3VtZW50cyB7IDAgfTsKLSAgICBW
ZWN0b3I8VHlwZT4gbV9jb25zdGFudFR5cGVzOwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9jb25z
dGFudHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKLSAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRy
IH07Ci0gICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7
Ci0gICAgVmVjdG9yPGNvbnN0IFNpZ25hdHVyZSo+IG1fc2lnbmF0dXJlczsKLSAgICBPdXRPZkxp
bmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwotICAgIExMSW50VGllclVwQ291
bnRlciBtX3RpZXJVcENvdW50ZXI7Ci0gICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVz
OwotICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwot
fTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhOTBhYTRmOWIy
NWVlN2M2MWIwYzY2YjZkNTFjNWZiZWEyMTAwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxv
Y2tHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIklu
c3RydWN0aW9uU3RyZWFtLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K3ZvaWQgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OnNldEluc3RydWN0aW9ucyhzdGQ6OnVu
aXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IGluc3RydWN0aW9ucykKK3sKKyAgICBtX2luc3Ry
dWN0aW9ucyA9IFdURk1vdmUoaW5zdHJ1Y3Rpb25zKTsKKyAgICBtX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIgPSBtX2luc3RydWN0aW9ucy0+cmF3UG9pbnRlcigpOworfQorCit2b2lkIEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIGludCB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQodGFyZ2V0KTsKKyAgICBtX291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9m
ZnNldCwgdGFyZ2V0KTsKK30KKworSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBGdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFTU0VSVChtX291dE9mTGluZUp1bXBUYXJn
ZXRzLmNvbnRhaW5zKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVt
cFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworY29uc3QgSW5zdHJ1Y3Rpb24qIEZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykKK3sKKyAgICBpbnQgb2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQocGMpOworICAg
IGludCB0YXJnZXQgPSBvdXRPZkxpbmVKdW1wT2Zmc2V0KG9mZnNldCk7CisgICAgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zLT5hdChvZmZzZXQgKyB0YXJnZXQpLnB0cigpOworfQorCit1bnNpZ25lZCBG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJlKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9zaWduYXR1cmVzLnNpemUoKTsK
KyAgICBtX3NpZ25hdHVyZXMuYXBwZW5kKCZzaWduYXR1cmUpOworICAgIHJldHVybiBpbmRleDsK
K30KKworY29uc3QgU2lnbmF0dXJlJiBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6c2lnbmF0
dXJlKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiAqbV9zaWduYXR1cmVzW2lu
ZGV4XTsKK30KKworYXV0byBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkSnVtcFRhYmxl
KHNpemVfdCBudW1iZXJPZkVudHJpZXMpIC0+IEp1bXBUYWJsZSYKK3sKKyAgICBtX2p1bXBUYWJs
ZXMuYXBwZW5kKEp1bXBUYWJsZShudW1iZXJPZkVudHJpZXMpKTsKKyAgICByZXR1cm4gbV9qdW1w
VGFibGVzLmxhc3QoKTsKK30KKworYXV0byBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6anVt
cFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0IC0+IGNvbnN0IEp1bXBUYWJsZSYKK3sK
KyAgICByZXR1cm4gbV9qdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCit1bnNpZ25lZCBGdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6bnVtYmVyT2ZKdW1wVGFibGVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9qdW1wVGFibGVzLnNpemUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTQyN2I3YTExYThmZDVjOTA2MWNmODNmNjQxYjI5ZTc4ZjI0YTZiMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9ja0dlbmVyYXRvci5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKKyNp
bmNsdWRlICJIYW5kbGVySW5mby5oIgorI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgiCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUhhbmRsZXJJ
bmZvLmgiCisjaW5jbHVkZSAiV2FzbUxMSW50VGllclVwQ291bnRlci5oIgorI2luY2x1ZGUgIldh
c21PcHMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KK2NsYXNzIEJ5dGVjb2Rl
R2VuZXJhdG9yQmFzZTsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBMTEludENhbGxlZTsK
K2NsYXNzIFNpZ25hdHVyZTsKK3N0cnVjdCBHZW5lcmF0b3JUcmFpdHM7CisKK3N0cnVjdCBKdW1w
VGFibGVFbnRyeSB7CisgICAgaW50IHRhcmdldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldDsKKyAgICB1bnNpZ25lZCBkcm9wQ291bnQ7CisgICAgdW5zaWduZWQga2VlcENvdW50Owor
fTsKKwordXNpbmcgSnVtcFRhYmxlID0gRml4ZWRWZWN0b3I8SnVtcFRhYmxlRW50cnk+OworCitj
bGFzcyBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0
b3IpOworCisgICAgZnJpZW5kIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFpdHM+
OworICAgIGZyaWVuZCBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIExM
SW50R2VuZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBMTEludENhbGxlZTsKKworcHVibGljOgor
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCisg
ICAgICAgIDogbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgeworICAgIH0KKwor
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW5k
ZXg7IH0KKyAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9
CisgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxs
ZWVMb2NhbHM7IH0KKyAgICB1aW50MzJfdCBudW1Bcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBt
X251bUFyZ3VtZW50czsgfQorICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgY29uc3RhbnRUeXBlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRUeXBlczsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50
NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9CisgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2lu
c3RydWN0aW9uczsgfQorCisgICAgdm9pZCBzZXROdW1WYXJzKHVuc2lnbmVkIG51bVZhcnMpIHsg
bV9udW1WYXJzID0gbnVtVmFyczsgfQorICAgIHZvaWQgc2V0TnVtQ2FsbGVlTG9jYWxzKHVuc2ln
bmVkIG51bUNhbGxlZUxvY2FscykgeyBtX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2Fs
czsgfQorCisgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4
KCldOyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5l
cmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV07CisgICAgfQorCisgICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMo
c3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPik7CisgICAgdm9pZCBhZGRKdW1wVGFy
Z2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQganVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRz
LmFwcGVuZChqdW1wVGFyZ2V0KTsgfQorICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbnVt
YmVyT2ZKdW1wVGFyZ2V0cygpIHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9CisgICAg
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBsYXN0SnVtcFRhcmdldCgpIHsgcmV0dXJuIG1fanVt
cFRhcmdldHMubGFzdCgpOyB9CisKKyAgICB2b2lkIGFkZE91dE9mTGluZUp1bXBUYXJnZXQoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50IHRhcmdldCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIG91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICBJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCk7CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvdXRPZkxpbmVKdW1wT2Zm
c2V0KGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwor
ICAgIH0KKworICAgIGlubGluZSBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zm
c2V0KGNvbnN0IEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQorICAgIHsKKyAgICAgICAgY29u
c3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2luc3RydWN0aW9ucy0+YXQoMCkucHRyKCk7
CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rp
b25zQmVnaW4pICsgbV9pbnN0cnVjdGlvbnMtPnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgcmV0dXJuQWRkcmVzcyA8
IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiByZXR1cm5BZGRyZXNzIC0gaW5zdHJ1
Y3Rpb25zQmVnaW47CisgICAgfQorCisgICAgSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0LCBMTEludFRpZXJVcENvdW50ZXI6Ok9TUkVudHJ5RGF0YT4mIHRpZXJVcENvdW50ZXIoKSB7
IHJldHVybiBtX3RpZXJVcENvdW50ZXI7IH0KKworICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShj
b25zdCBTaWduYXR1cmUmKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisKKyAgICBKdW1wVGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVt
YmVyT2ZFbnRyaWVzKTsKKyAgICBjb25zdCBKdW1wVGFibGUmIGp1bXBUYWJsZSh1bnNpZ25lZCB0
YWJsZUluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25z
dDsKKworICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZv
JiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVy
c1tpbmRleF07IH0KKyAgICB2b2lkIGFkZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgVW5saW5rZWRI
YW5kbGVySW5mbyYgaGFuZGxlcikgeyBtX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVy
KTsgfQorCitwcml2YXRlOgorICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1h
cDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OworCisgICAgdWludDMyX3QgbV9mdW5j
dGlvbkluZGV4OworCisgICAgLy8gVXNlZCBmb3IgdGhlIG51bWJlciBvZiBXZWJBc3NlbWJseSBs
b2NhbHMsIGFzIGluIGh0dHBzOi8vd2ViYXNzZW1ibHkuZ2l0aHViLmlvL3NwZWMvY29yZS9zeW50
YXgvbW9kdWxlcy5odG1sI3N5bnRheC1sb2NhbAorICAgIHVuc2lnbmVkIG1fbnVtVmFycyB7IDAg
fTsKKyAgICAvLyBOdW1iZXIgb2YgVmlydHVhbFJlZ2lzdGVyLiBUaGUgbmFtaW5nIGlzIHVuZm9y
dHVuYXRlLCBidXQgaGFzIHRvIG1hdGNoIFVubGlua2VkQ29kZUJsb2NrCisgICAgdW5zaWduZWQg
bV9udW1DYWxsZWVMb2NhbHMgeyAwIH07CisgICAgdWludDMyX3QgbV9udW1Bcmd1bWVudHMgeyAw
IH07CisgICAgVmVjdG9yPFR5cGU+IG1fY29uc3RhbnRUeXBlczsKKyAgICBWZWN0b3I8dWludDY0
X3Q+IG1fY29uc3RhbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4g
bV9pbnN0cnVjdGlvbnM7CisgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVy
IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1
bXBUYXJnZXRzOworICAgIFZlY3Rvcjxjb25zdCBTaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7Cisg
ICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKKyAgICBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIExMSW50VGllclVwQ291bnRlcjo6T1NSRW50
cnlEYXRhPiBtX3RpZXJVcENvdW50ZXI7CisgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFi
bGVzOworICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21H
ZW5lcmF0b3JUcmFpdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HZW5lcmF0
b3JUcmFpdHMuaAppbmRleCA4MjUwYmVhNzgzMjY3Y2ZmZTU2MWViM2Q5ZGEwYWVjMzEwNTk3YTNj
Li42YTg4YmI0ZDBiOGE3YWZmODFkOTgwNzBkYTYyN2E1Mzk2ODZlZDAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2VuZXJhdG9yVHJhaXRzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdlbmVyYXRvclRyYWl0cy5oCkBAIC0zNiw3ICsz
Niw3IEBAIHN0cnVjdCBHZW5lcmF0b3JUcmFpdHMgewogICAgIHVzaW5nIE9wY29kZVRyYWl0cyA9
IFdhc21PcGNvZGVUcmFpdHM7CiAgICAgdXNpbmcgT3Bjb2RlSUQgPSBXYXNtT3Bjb2RlSUQ7CiAg
ICAgdXNpbmcgT3BOb3AgPSBXYXNtTm9wOwotICAgIHVzaW5nIENvZGVCbG9jayA9IHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz47CisgICAgdXNpbmcgQ29kZUJsb2NrID0gc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPjsKICAgICBzdGF0aWMgY29uc3Rl
eHByIE9wY29kZUlEIG9wY29kZUZvckRpc2FibGluZ09wdGltaXphdGlvbnMgPSB3YXNtX3VucmVh
Y2hhYmxlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5jcHAKaW5kZXggOGVkMjMwOTNmNzEzZTFmNDIyOWViM2YxZmM3NDVkNTQxYmZm
YjI3Ny4uNGVhMmRjOTA4YTZhMmYzNjA2M2MwZGQwNTUzNTYxZmY1NTNmNTY3MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSAiTGFiZWwuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKLSNpbmNsdWRlICJX
YXNtRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJX
YXNtR2VuZXJhdG9yVHJhaXRzLmgiCiAjaW5jbHVkZSA8dmFyaWFudD4KQEAgLTE5Myw3ICsxOTMs
NyBAQCBjbGFzcyBMTEludEdlbmVyYXRvciA6IHB1YmxpYyBCeXRlY29kZUdlbmVyYXRvckJhc2U8
R2VuZXJhdG9yVHJhaXRzPiB7CiAKICAgICBMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlv
biYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBmaW5hbGl6ZSgpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4gZmluYWxpemUoKTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0QSwgdHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RC
PgogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3RBJiBk
ZXN0aW5hdGlvbnMsIGNvbnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQpAQCAtNTAwLDcgKzUw
MCw3IEBAIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVjb2RlR2VuZXJhdG9yQmFz
ZTxHZW5lcmF0b3JUcmFpdHM+IHsKICAgICBib29sIG1fdXNlc0V4Y2VwdGlvbnMgeyBmYWxzZSB9
OwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1
bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgTExJbnRHZW5lcmF0b3Ig
bGxpbnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5j
dGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4gcGFyc2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlv
blN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKQEAgLTUyNSw3ICs1MjUs
NyBAQCBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8QnVmZmVyPiYgdGhyZWFkU3BlY2lmaWNCdWZmZXIo
KQogfQogCiBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCi0gICAgOiBC
eXRlY29kZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxGdW5jdGlvbkNvZGVCbG9jaz4oZnVuY3Rp
b25JbmRleCksIDApCisgICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxGdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4oZnVuY3Rpb25JbmRleCksIDApCiAgICAgLCBtX2luZm8o
aW5mbykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogewpAQCAtNTQzLDcg
KzU0Myw3IEBAIExMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwKICAgICBXYXNtRW50ZXI6OmVtaXQodGhp
cyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gTExJbnRHZW5lcmF0
b3I6OmZpbmFsaXplKCkKK3N0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
cj4gTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2Nv
ZGVCbG9jayk7CiAKQEAgLTk4Myw3ICs5ODMsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRM
b29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwog
CiAgICAgV2FzbUxvb3BIaW50OjplbWl0KHRoaXMpOwogCi0gICAgbV9jb2RlQmxvY2stPnRpZXJV
cENvdW50ZXIoKS5hZGRPU1JFbnRyeURhdGFGb3JMb29wKG1fbGFzdEluc3RydWN0aW9uLm9mZnNl
dCgpLCB7IGxvb3BJbmRleCwgV1RGTW92ZShvc3JFbnRyeURhdGEpIH0pOworICAgIG1fY29kZUJs
b2NrLT50aWVyVXBDb3VudGVyKCkuYWRkKG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBMTElu
dFRpZXJVcENvdW50ZXI6Ok9TUkVudHJ5RGF0YSB7IGxvb3BJbmRleCwgV1RGTW92ZShvc3JFbnRy
eURhdGEpIH0pOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEyMjYsNyArMTIyNiw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IFZlY3RvcjxDb250cm9sVHlwCiAgICAgbWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMo
ZXhwcmVzc2lvblN0YWNrKTsKIAogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZKdW1wVGFibGVzKCk7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2s6Okp1bXBUYWJs
ZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZEp1bXBUYWJsZSh0YXJnZXRzLnNpemUoKSAr
IDEpOworICAgIGF1dG8mIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFy
Z2V0cy5zaXplKCkgKyAxKTsKIAogICAgIFdhc21Td2l0Y2g6OmVtaXQodGhpcywgY29uZGl0aW9u
LCB0YWJsZUluZGV4KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuaAppbmRleCBjMDEyZmIxZWU3MTRhZjk4MjNkYTI2YzZjMzRkOGFiNzcyZWI0
NTUyLi5iNTVjYTUyMDFkMDg1MzIyZGNlNzQxNWMxMDNiZGQ3ZmE2Y2NmZWY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaApAQCAtMzIsMTEg
KzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIEZ1
bmN0aW9uQ29kZUJsb2NrOworY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFz
cyBTaWduYXR1cmU7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0
ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5m
b3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
Qnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxl
SW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFu
LmNwcAppbmRleCA3YzBiYmM1ZjcxZjU5Y2JkNjZiMmU4ZTMyOWUzYzIzNTc3ZGNlODBhLi44NTA2
N2MxMmIyMDNlMGU5ZDc3NzYwNzM3MmNhOWE1ZjAyNTE1NTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAtODUsNyArODUsNyBAQCB2b2lkIExM
SW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgQVNT
RVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNp
Z25hdHVyZUluZGV4KTsKIAogICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25J
bmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBmdW5jdGlvbkluZGV4KTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBmdW5jdGlvbkluZGV4
KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBMTElu
dFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oKQogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpKQogICAgICAgICAgICAgICAg
IEJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2sobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaV0uZ2V0
KCksIG1fbW9kdWxlSW5mb3JtYXRpb24sIFdURjo6ZGF0YUZpbGUoKSk7CiAKLSAgICAgICAgICAg
IG1fY2FsbGVlc1ZlY3RvcltpXSA9IExMSW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tpXSksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKKyAgICAgICAgICAg
IG1fY2FsbGVlc1ZlY3RvcltpXSA9IExMSW50Q2FsbGVlOjpjcmVhdGUoKm1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2ldLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CiAgICAgICAgICAgICBlbnRyeXBv
aW50c1tpXSA9IGppdC5sYWJlbCgpOwogI2lmIENQVShYODZfNjQpCiAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2xvdChDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRQbGFuLmgKaW5kZXggOTRkZDlmMmZjMWEwMGVkMGM2YWQ1OGY0ZDc2Mjg2
ZGNjODA3YTk0Ni4uMGQ1OWJiMjc0Y2QxODM0MTVkNjQ0MmM1NzAwY2JhOWQxNDQ0Y2Q1YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaApAQCAtMjgsNyArMjgs
NyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21FbnRyeVBsYW4u
aCIKLSNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRnVu
Y3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTg3LDcg
Kzg3LDcgQEAgY2xhc3MgTExJbnRQbGFuIGZpbmFsIDogcHVibGljIEVudHJ5UGxhbiB7CiAgICAg
Ym9vbCBwcmVwYXJlSW1wbCgpIGZpbmFsOwogICAgIHZvaWQgZGlkQ29tcGxldGVDb21waWxhdGlv
bigpIFdURl9SRVFVSVJFU19MT0NLKG1fbG9jaykgZmluYWw7CiAKLSAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4+IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIG1fY2Fs
bGVlcyB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4gbV9jYWxsZWVz
VmVjdG9yOwogICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZU1hcCBtX2VtYmVkZGVyQ2FsbGVl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJV
cENvdW50ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaAppbmRleCBlNmY2NTU0MDc3NDZiMTJlOGQ2N2RlNjIyMTcxYjRhMWI3YTkwNzllLi4x
NDBhODJjOGU0YTMxODc5M2NjZmI4MzIxYzAyNTAxOTZjODM0ZWZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCkBAIC00NCw3
ICs0NCwxMyBAQCBjbGFzcyBMTEludFRpZXJVcENvdW50ZXIgOiBwdWJsaWMgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyIHsKICAgICAgICAgQ29tcGlsZWQsCiAgICAgfTsKIAotICAgIExMSW50VGll
clVwQ291bnRlcigpCisgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CisgICAgICAgIHVpbnQzMl90
IGxvb3BJbmRleDsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gdmFsdWVzOworICAg
IH07CisKKyAgICBMTEludFRpZXJVcENvdW50ZXIoSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0LCBPU1JFbnRyeURhdGE+JiYgb3NyRW50cnlEYXRhKQorICAgICAgICA6IG1fb3NyRW50
cnlEYXRhKFdURk1vdmUob3NyRW50cnlEYXRhKSkKICAgICB7CiAgICAgICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKICAgICB9CkBAIC03MCwxMSArNzYsNiBAQCBjbGFzcyBMTEludFRpZXJVcENv
dW50ZXIgOiBwdWJsaWMgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIHsKICAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgfQogCi0gICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7Ci0gICAgICAgIHVpbnQzMl90IGxvb3BJ
bmRleDsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gdmFsdWVzOwotICAgIH07Ci0K
ICAgICB2b2lkIGFkZE9TUkVudHJ5RGF0YUZvckxvb3AoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCwgT1NSRW50cnlEYXRhJiYpOwogCiAgICAgY29uc3QgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURh
dGFGb3JMb29wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCA5NTc1ZGMxN2U5MTM4Mjg1
MDlhZDdlNjZjOGVmMGJmMjc4ZjZmY2QwLi42ZTQ0MjBjYTFlZThkNTNkMTQ0MDQ5OTY4MDUxOTgw
OGI1NDY4YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUg
Ildhc21CQlFQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgotI2luY2x1ZGUgIldhc21G
dW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVy
YXRvci5oIgogI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCkBAIC03MSwxOCArNzEsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgICAgIFdBU01fUkVUVVJO
X1RXTygocmV0YWdDb2RlUHRyPGNhbGxUYXJnZXRUYWcsIEpTRW50cnlTbG93UGF0aFB0clRhZz4o
Y2FsbFRhcmdldCkpLCB0YXJnZXRJbnN0YW5jZSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAot
I2RlZmluZSBDT0RFX0JMT0NLKCkgXAotICAgIGJpdHdpc2VfY2FzdDxXYXNtOjpGdW5jdGlvbkNv
ZGVCbG9jayo+KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCisjZGVmaW5lIENBTExFRSgpIFwKKyAg
ICBzdGF0aWNfY2FzdDxXYXNtOjpMTEludENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNX
YXNtQ2FsbGVlKCkpCiAKICNkZWZpbmUgUkVBRCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmly
dHVhbFJlZ2lzdGVyLmlzQ29uc3RhbnQoKSBcCi0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENP
REVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAorICAgICAgICA/IEpT
VmFsdWU6OmRlY29kZShDQUxMRUUoKS0+Z2V0Q29uc3RhbnQodmlydHVhbFJlZ2lzdGVyKSkgXAog
ICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIpKQogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZX0IzSklUKQogZW51bSBjbGFzcyBSZXF1aXJlZFdhc21KSVQgeyBBbnksIE9NRyB9
OwogCi1pbmxpbmUgYm9vbCBzaG91bGRKSVQoV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVC
bG9jaywgUmVxdWlyZWRXYXNtSklUIHJlcXVpcmVkSklUID0gUmVxdWlyZWRXYXNtSklUOjpBbnkp
CitpbmxpbmUgYm9vbCBzaG91bGRKSVQoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgUmVxdWly
ZWRXYXNtSklUIHJlcXVpcmVkSklUID0gUmVxdWlyZWRXYXNtSklUOjpBbnkpCiB7CiAgICAgaWYg
KHJlcXVpcmVkSklUID09IFJlcXVpcmVkV2FzbUpJVDo6T01HKSB7CiAgICAgICAgIGlmICghT3B0
aW9uczo6dXNlT01HSklUKCkpCkBAIC05MywxNCArOTMsMTQgQEAgaW5saW5lIGJvb2wgc2hvdWxk
SklUKFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlcXVpcmVkV2FzbUpJVCBy
ZXF1aXIKICAgICAgICAgaWYgKCFPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSAmJiAh
T3B0aW9uczo6dXNlT01HSklUKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIGlmICghT3B0aW9uczo6d2FzbUZ1bmN0aW9uSW5kZXhSYW5nZVRvQ29tcGlsZSgpLmlzSW5S
YW5nZShjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKSkpCisgICAgaWYgKCFPcHRpb25zOjp3YXNt
RnVuY3Rpb25JbmRleFJhbmdlVG9Db21waWxlKCkuaXNJblJhbmdlKGNhbGxlZS0+ZnVuY3Rpb25J
bmRleCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCi1p
bmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSog
Y2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpJbnN0YW5j
ZSogaW5zdGFuY2UpCitpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCiB7Ci0gICAg
V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBDb3VudGVyID0gY29kZUJsb2NrLT50aWVy
VXBDb3VudGVyKCk7CisgICAgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBDb3VudGVy
ID0gY2FsbGVlLT50aWVyVXBDb3VudGVyKCk7CiAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRl
ZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5LDcgKzEyOSw3IEBAIGlubGluZSBi
b29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUs
IFdhc206OkZ1bmN0aW9uCiAgICAgfQogCiAgICAgaWYgKGNvbXBpbGUpIHsKLSAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCA9IGNvZGVCbG9jay0+ZnVuY3Rpb25JbmRleCgpOworICAgICAg
ICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gY2FsbGVlLT5mdW5jdGlvbkluZGV4KCk7CiAgICAg
ICAgIFJlZlB0cjxXYXNtOjpQbGFuPiBwbGFuOwogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxM
SW50VGllcnNVcFRvQkJRKCkpCiAgICAgICAgICAgICBwbGFuID0gYWRvcHRSZWYoKm5ldyBXYXNt
OjpCQlFQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIGNvbnN0X2Nhc3Q8V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mPihpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKSksIGZ1bmN0
aW9uSW5kZXgsIGluc3RhbmNlLT5jYWxsZWVHcm91cCgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxp
emUoKSkpOwpAQCAtMTUxLDE5ICsxNTEsMTggQEAgV0FTTV9TTE9XX1BBVEhfREVDTChwcm9sb2d1
ZV9vc3IpCiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKIAogICAgIFdhc206OkxMSW50Q2FsbGVlKiBj
YWxsZWUgPSBzdGF0aWNfY2FzdDxXYXNtOjpMTEludENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVl
KCkuYXNXYXNtQ2FsbGVlKCkpOwotICAgIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBDT0RFX0JMT0NLKCk7CiAKLSAgICBpZiAoIXNob3VsZEpJVChjb2RlQmxvY2spKSB7Ci0g
ICAgICAgIGNvZGVCbG9jay0+dGllclVwQ291bnRlcigpLmRlZmVySW5kZWZpbml0ZWx5KCk7Cisg
ICAgaWYgKCFzaG91bGRKSVQoY2FsbGVlKSkgeworICAgICAgICBjYWxsZWUtPnRpZXJVcENvdW50
ZXIoKS5kZWZlckluZGVmaW5pdGVseSgpOwogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0
ciwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VXYXNtTExJbnRQcm9s
b2d1ZU9TUigpKQogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAK
LSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpjYWxsZWUsICI6IEVudGVy
ZWQgcHJvbG9ndWVfb3NyIHdpdGggdGllclVwQ291bnRlciA9ICIsIGNvZGVCbG9jay0+dGllclVw
Q291bnRlcigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpjYWxs
ZWUsICI6IEVudGVyZWQgcHJvbG9ndWVfb3NyIHdpdGggdGllclVwQ291bnRlciA9ICIsIGNhbGxl
ZS0+dGllclVwQ291bnRlcigpKTsKIAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoY2FsbGVlLCBjb2RlQmxvY2ssIGluc3RhbmNlKSkKKyAgICBpZiAoIWppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKGNhbGxlZSwgaW5zdGFuY2UpKQogICAgICAgICBXQVNNX1JFVFVSTl9UV08o
bnVsbHB0ciwgbnVsbHB0cik7CiAKICAgICBXQVNNX1JFVFVSTl9UV08oY2FsbGVlLT5yZXBsYWNl
bWVudChpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSktPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBudWxscHRyKTsKQEAgLTE3MiwxNyArMTcxLDE2IEBAIFdBU01fU0xPV19QQVRI
X0RFQ0wocHJvbG9ndWVfb3NyKQogV0FTTV9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIHsKICAg
ICBXYXNtOjpMTEludENhbGxlZSogY2FsbGVlID0gc3RhdGljX2Nhc3Q8V2FzbTo6TExJbnRDYWxs
ZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKLSAgICBXYXNtOjpGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gQ09ERV9CTE9DSygpOwotICAgIFdhc206OkxMSW50
VGllclVwQ291bnRlciYgdGllclVwQ291bnRlciA9IGNvZGVCbG9jay0+dGllclVwQ291bnRlcigp
OworICAgIFdhc206OkxMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlciA9IGNhbGxlZS0+
dGllclVwQ291bnRlcigpOwogCi0gICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseU9TUigp
IHx8ICFPcHRpb25zOjp1c2VXYXNtTExJbnRMb29wT1NSKCkgfHwgIXNob3VsZEpJVChjb2RlQmxv
Y2ssIFJlcXVpcmVkV2FzbUpJVDo6T01HKSkgeworICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNz
ZW1ibHlPU1IoKSB8fCAhT3B0aW9uczo6dXNlV2FzbUxMSW50TG9vcE9TUigpIHx8ICFzaG91bGRK
SVQoY2FsbGVlLCBSZXF1aXJlZFdhc21KSVQ6Ok9NRykpIHsKICAgICAgICAgc2xvd19wYXRoX3dh
c21fcHJvbG9ndWVfb3NyKGNhbGxGcmFtZSwgcGMsIGluc3RhbmNlKTsKICAgICAgICAgV0FTTV9S
RVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50ZXJlZCBsb29wX29zciB3aXRoIHRp
ZXJVcENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPnRpZXJVcENvdW50ZXIoKSk7CisgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY2FsbGVlLCAiOiBFbnRlcmVkIGxvb3Bfb3Ny
IHdpdGggdGllclVwQ291bnRlciA9ICIsIGNhbGxlZS0+dGllclVwQ291bnRlcigpKTsKIAotICAg
IHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gY29kZUJsb2NrLT5ieXRlY29k
ZU9mZnNldChwYyk7CisgICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBj
YWxsZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKICAgICBjb25zdCBhdXRvJiBvc3JFbnRyeURhdGEg
PSB0aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0YUZvckxvb3AobG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQpOwogCiAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKCkpIHsKQEAgLTIyNyw3ICsyMjUsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQogICAgIH0KIAogICAgIGlmIChjb21waWxlKSB7Ci0gICAgICAgIFJlZjxXYXNt
OjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PFdhc206OlBsYW4qPihuZXcgV2Fz
bTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGlu
c3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxsZWU+KCpjYWxsZWUpLCBjb2RlQmxvY2st
PmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxvb3BJbmRleCwgaW5zdGFuY2UtPm1lbW9y
eSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSgpKSkpOworICAgICAgICBSZWY8
V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxXYXNtOjpQbGFuKj4obmV3
IFdhc206Ok9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxl
PihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2FsbGVlPigqY2FsbGVlKSwgY2FsbGVl
LT5mdW5jdGlvbkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29wSW5kZXgsIGluc3RhbmNlLT5tZW1v
cnkoKS0+bW9kZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxpemUoKSkpKTsKICAgICAgICAgV2Fz
bTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxh
bi0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAgLTI0NCwxOCArMjQyLDE3IEBAIFdBU01fU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGVwaWxvZ3VlX29zcikKIHsK
ICAgICBXYXNtOjpMTEludENhbGxlZSogY2FsbGVlID0gc3RhdGljX2Nhc3Q8V2FzbTo6TExJbnRD
YWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKLSAgICBXYXNtOjpG
dW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gQ09ERV9CTE9DSygpOwogCi0gICAgaWYgKCFz
aG91bGRKSVQoY29kZUJsb2NrKSkgewotICAgICAgICBjb2RlQmxvY2stPnRpZXJVcENvdW50ZXIo
KS5kZWZlckluZGVmaW5pdGVseSgpOworICAgIGlmICghc2hvdWxkSklUKGNhbGxlZSkpIHsKKyAg
ICAgICAgY2FsbGVlLT50aWVyVXBDb3VudGVyKCkuZGVmZXJJbmRlZmluaXRlbHkoKTsKICAgICAg
ICAgV0FTTV9FTkRfSU1QTCgpOwogICAgIH0KICAgICBpZiAoIU9wdGlvbnM6OnVzZVdhc21MTElu
dEVwaWxvZ3VlT1NSKCkpCiAgICAgICAgIFdBU01fRU5EX0lNUEwoKTsKIAotICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50ZXJlZCBlcGlsb2d1ZV9v
c3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY29kZUJsb2NrLT50aWVyVXBDb3VudGVyKCkpOwor
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50ZXJl
ZCBlcGlsb2d1ZV9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY2FsbGVlLT50aWVyVXBDb3Vu
dGVyKCkpOwogCi0gICAgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVlLCBjb2RlQmxv
Y2ssIGluc3RhbmNlKTsKKyAgICBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhjYWxsZWUsIGlu
c3RhbmNlKTsKICAgICBXQVNNX0VORF9JTVBMKCk7CiB9CiAjZW5kaWYKQEAgLTI3MCw5ICsyNjcs
OSBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKHRyYWNlKQogICAgIFdhc21PcGNvZGVJRCBvcGNvZGVJ
RCA9IHBjLT5vcGNvZGVJRDxXYXNtT3Bjb2RlVHJhaXRzPigpOwogICAgIGRhdGFMb2dGKCI8JXA+
ICVwIC8gJXA6IGV4ZWN1dGluZyBiYyMlenUsICVzLCBwYyA9ICVwXG4iLAogICAgICAgICAmVGhy
ZWFkOjpjdXJyZW50KCksCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksCisgICAgICAg
IENBTExFRSgpLAogICAgICAgICBjYWxsRnJhbWUsCi0gICAgICAgIHN0YXRpY19jYXN0PGludHB0
cl90PihDT0RFX0JMT0NLKCktPmJ5dGVjb2RlT2Zmc2V0KHBjKSksCisgICAgICAgIHN0YXRpY19j
YXN0PGludHB0cl90PihDQUxMRUUoKS0+Ynl0ZWNvZGVPZmZzZXQocGMpKSwKICAgICAgICAgcGMt
Pm5hbWU8V2FzbU9wY29kZVRyYWl0cz4oKSwKICAgICAgICAgcGMpOwogICAgIGlmIChvcGNvZGVJ
RCA9PSB3YXNtX2VudGVyKSB7CkBAIC0yOTAsNyArMjg3LDcgQEAgV0FTTV9TTE9XX1BBVEhfREVD
TChvdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKIHsKICAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2Up
OwogCi0gICAgcGMgPSBDT0RFX0JMT0NLKCktPm91dE9mTGluZUp1bXBUYXJnZXQocGMpOworICAg
IHBjID0gQ0FMTEVFKCktPm91dE9mTGluZUp1bXBUYXJnZXQocGMpOwogICAgIFdBU01fRU5EX0lN
UEwoKTsKIH0KIApAQCAtNDc3LDcgKzQ3NCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
ZG9XYXNtQ2FsbEluZGlyZWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jCiAg
ICAgaWYgKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxp
ZEluZGV4KQogICAgICAgICBXQVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6Ok51bGxUYWJs
ZUVudHJ5KTsKIAotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgY2FsbFNpZ25hdHVyZSA9IENP
REVfQkxPQ0soKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUluZGV4KTsKKyAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUmIGNhbGxTaWduYXR1cmUgPSBDQUxMRUUoKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUlu
ZGV4KTsKICAgICBpZiAoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggIT0gV2FzbTo6U2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChjYWxsU2lnbmF0dXJlKSkKICAgICAgICAgV0FTTV9USFJPVyhXYXNt
OjpFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOwogCkBAIC01MTksNyArNTE2LDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBXYXNtOjpJbnN0YW5jZSogY2EKICAgICBpZiAoY2FsbGVlSW5zdGFuY2UgIT0gY2FsbGVySW5z
dGFuY2UpCiAgICAgICAgIGNhbGxlZUluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGNhbGxl
ckluc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgQVNTRVJUKGZ1bmN0aW9uLnNp
Z25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoQ09ERV9CTE9D
SygpLT5zaWduYXR1cmUoc2lnbmF0dXJlSW5kZXgpKSk7CisgICAgQVNTRVJUKGZ1bmN0aW9uLnNp
Z25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoQ0FMTEVFKCkt
PnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCkpKTsKICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJl
SW5kZXgpOwogICAgIFdBU01fQ0FMTF9SRVRVUk4oY2FsbGVlSW5zdGFuY2UsIGZ1bmN0aW9uLmVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24tPmV4ZWN1dGFibGVBZGRyZXNzKCksIFdhc21FbnRyeVB0clRh
Zyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447960</attachid>
            <date>2021-12-25 07:01:01 -0800</date>
            <delta_ts>2021-12-26 00:54:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203691-20211225070100.patch</filename>
            <type>text/plain</type>
            <size>69456</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZjZiNzYyNmZlMTU4MGI3YTUzNTFmZjFiYmQ5NzRkNTgyZTg3YzE1Li40MWRmNzFiN2M2NWY3ZjI3
MjQwNmIxZTFlNThkOWRhNDc2NWE2MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MSBAQAorMjAyMS0xMi0yNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIENvbnNpZGVyIG1lcmdpbmcgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sgYW5k
IFdhc206OkxMSW50Q2FsbGVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRl
Y29kZUR1bXBlcjo6ZHVtcEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1w
ZXI6OmR1bXBDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCeXRlY29kZUR1bXBlcjo6
Y29uc3RhbnROYW1lIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1bXBlci5o
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2F0Y2hJbmZvOjpDYXRjaEluZm8pOgorICAgICAgICAqIGxsaW50L0xMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvV2ViQXNzZW1ibHkuYXNtOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxlZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpMTElu
dENhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2FsbGVlOjpvdXRPZkxpbmVKdW1w
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRDYWxsZWU6Om91dE9mTGluZUp1bXBU
YXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludENhbGxlZTo6bGlua0V4Y2VwdGlvbkhh
bmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q2FsbGVlOjpsbGludEZ1bmN0aW9uQ29kZUJsb2NrIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6
c2V0SW5zdHJ1Y3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZE91dE9mTGluZUp1bXBUYXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1wVGFy
Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OmFk
ZFNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJh
dG9yOjphZGRKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9j
a0dlbmVyYXRvcjo6bnVtYmVyT2ZKdW1wVGFibGVzIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dh
c21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmguCisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjp0aWVy
VXBDb3VudGVyKToKKyAgICAgICAgKiB3YXNtL1dhc21HZW5lcmF0b3JUcmFpdHMuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnBh
cnNlQW5kQ29tcGlsZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OkxMSW50R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3Ap
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkU3dpdGNoKToKKyAgICAg
ICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50
UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9u
KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3Vu
dGVyOjpMTEludFRpZXJVcENvdW50ZXIpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzaG91bGRKSVQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6V0FT
TV9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dhc21DYWxsSW5kaXJl
Y3QpOgorICAgICAgICAoSlNDOjpMTEludDo6ZG9XYXNtQ2FsbFJlZik6CisKIDIwMjEtMTItMjMg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRGVmZXJyZWRX
b3JrVGltZXI6OmFkZFBlbmRpbmdXb3JrKCkgcmV0dXJuIGEgVGlja2V0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY0OGI3YWM5MTdmOWJmODQ1MDQ5NGQ1YWM3YTU0ODUy
YmEzYTliZjMuLjBkZGVhMGQ2ZGIxYmNlMjQ5YmUwNmM1ZTAyZjlmNjM0ODI2YzFmNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRXhj
ZXB0aW9uVHlwZS5oCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKICAgICB3YXNt
L1dhc21Gb3JtYXQuaAotICAgIHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKyAgICB3YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCiAgICAgd2FzbS9XYXNtSGFuZGxlcklu
Zm8uaAogICAgIHdhc20vV2FzbUluZGV4T3JOYW1lLmgKICAgICB3YXNtL1dhc21MTEludFRpZXJV
cENvdW50ZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjY2MwOGI1Njk4NTY4
N2NkN2U5NGExODA0NjNlODE3NjhlZmFkZjcxLi5hMTZjMmY0NTE0NzVlOWJhM2YyNzIwNzA4M2Ew
ZjQ4MDAxNjMxNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzc4LDcgKzc3
OCw3IEBACiAJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MjU2NjAxNUVERTk4
RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDlEQUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDRDQTM1MDIyMjQx
ODAxMDA4MTc3ODkgLyogQ2FjaGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NENBMzRGMjIxRjAzNzkwMDgxNzc4OSAvKiBDYWNoZWRC
eXRlY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzVBRDZCMjJG
MzNGQzAwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDUwRkExQzIzNTdCREJFMDA5M0NE
NEQgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM1QUQ2QjIyRjMzRkMwMDBGMUZCODMgLyog
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ1MEZBMUYyMzU3QkVDOTAwOTNDRDREIC8qIFdh
c21MTEludFRpZXJVcENvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NTBGQTFFMjM1N0JFQzQwMDkzQ0Q0RCAvKiBXYXNtTExJbnRUaWVyVXBD
b3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NTcyMjg1MTQzN0UxNDAwMDVG
REUyNiAvKiBTdHJvbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ1RkYyQzgyNDNCQjlENjAwNTY5RTcxIC8qIEVDTUFNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGRjJDNzI0
M0JCOTlBMDA1NjlFNzEgLyogRUNNQU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzU1OCwxMSArMzU1OCwxMSBAQAogCQkxNEMxRjlDRjIy
RUE1MUZEMDA0MEIxNDUgLyogV2FzbS5yYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnJ1Ynk7IHBhdGggPSBXYXNtLnJiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM1QUQ2NTIyRjE4NjZDMDBGMUZCODMgLyogQnl0
ZWNvZGVHZW5lcmF0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlR2VuZXJhdG9yQmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM1QUQ2NjIyRjE4NjZDMDBGMUZC
ODMgLyogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
Y29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTE0QzVBRDY3MjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTRDNUFENjcyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21GdW5jdGlv
bkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM1
QUQ2ODIyRjMzRkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21MTEludEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0QzVBRDY5MjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbUxMSW50R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0QzVBRDZBMjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtTExJbnRQbGFuLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21MTEludFBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxNEM1QUQ2QjIyRjMzRkMwMDBGMUZCODMgLyogV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GdW5jdGlvbkNvZGVCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEM1QUQ2QjIyRjMzRkMwMDBGMUZCODMgLyogV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEM1QUQ2QzIy
RjMzRkMwMDBGMUZCODMgLyogV2FzbUxMSW50UGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTExJ
bnRQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Q0E5NThBMTZBQjUwREUw
MDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MjE4LDggKzcyMTgs
OCBAQAogCQkJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmggKi8sCiAJCQkJQUQyRkNDMzIxREM0MDQ1MzAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3Bw
ICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXYXNtRm9ybWF0LmggKi8sCi0J
CQkJMTRDNUFENjcyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAg
Ki8sCi0JCQkJMTRDNUFENkIyMkYzM0ZDMDAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9j
ay5oICovLAorCQkJCTE0QzVBRDY3MjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25Db2Rl
QmxvY2tHZW5lcmF0b3IuY3BwICovLAorCQkJCTE0QzVBRDZCMjJGMzNGQzAwMEYxRkI4MyAvKiBX
YXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0Y0MEU4QTFENTkwMUJC
MDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJCQkJMTQ4N0NFMTYyMzc3NDEw
MDAwNDQ0MjlDIC8qIFdhc21HZW5lcmF0b3JUcmFpdHMuaCAqLywKIAkJCQlFMzgzNTAwODIzOTBE
OTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5jcHAgKi8sCkBAIC03MjU1LDEzICs3MjU1LDEzIEBA
CiAJCQkJQUREOEZBNDMxRUIzMDc3MTAwREY1NDJGIC8qIFdhc21OYW1lU2VjdGlvblBhcnNlci5o
ICovLAogCQkJCTUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgKi8s
CiAJCQkJNTMxMUJENDkxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8sCi0JCQkJ
NTI3RTZDRUEyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uY3BwICovLAotCQkJ
CTUyN0U2Q0VCMjc3MkI5QzUwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFuLmggKi8sCiAJCQkJ
NTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwICovLAogCQkJ
CTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi8sCiAJCQkJ
RTM5RDhCMkMyMzAyMUUxRTAwMjY1ODUyIC8qIFdhc21PcGVyYXRpb25zLmNwcCAqLywKIAkJCQlF
MzlEOEIyRDIzMDIxRTFFMDAyNjU4NTIgLyogV2FzbU9wZXJhdGlvbnMuaCAqLywKIAkJCQlFM0M2
OTRCMTIzMDI2ODczMDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0YS5oICovLAorCQkJCTUyN0U2
Q0VBMjc3MkI5QzUwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFuLmNwcCAqLywKKwkJCQk1MjdF
NkNFQjI3NzJCOUM1MDA1RTA3ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5oICovLAogCQkJCUFEQjZG
NjdDMUUxNUQ3NTAwMDgyRjM4NCAvKiBXYXNtUGFnZUNvdW50LmNwcCAqLywKIAkJCQk3OUI3NTk3
MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBhZ2VDb3VudC5oICovLAogCQkJCTUzRjQwRThDMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCkBAIC05NzE1LDcgKzk3MTUsNiBAQAog
CQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5n
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBD
b21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MjdFNkNFQzI3NzJCOUNCMDA1
RTA3ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkZEOTQy
MEI1MkJERTAwRjA5NDQxIC8qIENvbXBsZXRlU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA5NTcsNyArMTA5NTYsNyBAQAogCQkJCTc5REFFMjdBMUUw
M0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTM4MUI5MzkxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXYXNtRm9ybWF0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxNDUwRkExQzIzNTdCREJFMDA5M0NENEQgLyogV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDUwRkExQzIzNTdCREJFMDA5M0NE
NEQgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0Y0MEU4QjFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzgzNTAwQTIzOTBEOTNCMDAzNjMxNkQgLyogV2FzbUdsb2JhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVy
SW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDk3OSw2ICsxMDk3OCw3IEBACiAJCQkJRTM5RDhC
MkUyMzAyMUUyNjAwMjY1ODUyIC8qIFdhc21PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0I0QkQxMjFGNjhCMzI1MDBEMkJFQTMgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTNDNjk0QjMyMzAyNjg3NzAwNkZCRTQyIC8qIFdhc21PU1JFbnRyeURhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUyN0U2Q0VDMjc3MkI5Q0IwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFu
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUI3NTk3NjFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBh
Z2VDb3VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNGNDBFOEQxRDU5MDFGMjAwOTlBMUI2IC8q
IFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzMTM3NEJEMUQ1Q0U2NzYwMEFGN0Ew
QiAvKiBXYXNtUGxhbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
aW5kZXggOWYxZTBhMDAzYmM5MTUzOGRiY2VjNTQwZjVkZDQ1NGU0ZWNiYzExZS4uZmY4YmJlOWIy
ZDM5MWQ0YjZkYTVhMTQ0MWJmMGQ4ZDcwNmRjNjk1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dApAQCAtMTA4Miw3ICsxMDgyLDcgQEAgd2FzbS9XYXNtRW1iZWRkZXIuaAogd2FzbS9XYXNt
RW50cnlQbGFuLmNwcAogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAogd2FzbS9XYXNt
Rm9ybWF0LmNwcAotd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwCit3YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAKIHdhc20vV2FzbUdsb2JhbC5jcHAKIHdhc20vV2Fz
bUhhbmRsZXJJbmZvLmNwcAogd2FzbS9XYXNtSW5kZXhPck5hbWUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAppbmRleCAzOThmNTVi
M2U3NTY1ZGIzNjI0NmY3ZTFlMjEzMTkzOWUwMTFhOTc2Li41YmY2N2I2MWI2MmJjMTJlMDRjMmZh
N2NhOTM0M2MwYzdhZGU2NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUgIldh
c21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dl
bmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21HZW5lcmF0b3JUcmFpdHMuaCIKICNpbmNsdWRlICJX
YXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5o
IgpAQCAtMzI1LDcgKzMyNSw3IEBAIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPENvZGVCbG9jaz47CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBCeXRlY29kZUR1bXBl
cjo6ZHVtcEJsb2NrKEZ1bmN0aW9uQ29kZUJsb2NrKiBibG9jaywgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBQcmludFN0cmVhbSYgb3V0KQordm9pZCBCeXRlY29k
ZUR1bXBlcjo6ZHVtcEJsb2NrKEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yKiBibG9jaywgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBQcmludFN0cmVhbSYgb3V0
KQogewogICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKICAgICBzaXplX3Qgd2lkZTE2
SW5zdHJ1Y3Rpb25Db3VudCA9IDA7CkBAIC0zNzEsNyArMzcxLDcgQEAgdm9pZCBCeXRlY29kZUR1
bXBlcjo6ZHVtcEJsb2NrKEZ1bmN0aW9uQ29kZUJsb2NrKiBibG9jaywgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24KIAogdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiB7Ci0gICAg
RnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICBGdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvciogYmxvY2sgPSB0aGlzLT5ibG9jaygpOwogICAgIGlmICghYmxvY2st
PmNvbnN0YW50cygpLmlzRW1wdHkoKSkgewogICAgICAgICB0aGlzLT5tX291dC5wcmludGYoIlxu
Q29uc3RhbnRzOlxuIik7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMzg1LDcgKzM4NSw3
IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFudHMoKQogCiBDU3RyaW5nIEJ5dGVj
b2RlRHVtcGVyOjpjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25zdAogewot
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CisgICAgRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3IqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZh
bHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2Nr
LT5nZXRDb25zdGFudChpbmRleCkpOwogICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwg
VmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgKaW5kZXggODcyZjZhYmEyY2JlNTRlOTZhOTRj
NTFhYzU0NzUwNmEyNmNkNzM2MS4uMjE2ZTZlNjdlYTBkMmRjN2Q5M2FhNDUxMjhlOWEwNjJkM2Q2
M2I5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
RHVtcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmgKQEAgLTEyOSwxNSArMTI5LDE1IEBAIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
IGZpbmFsIDogcHVibGljIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPiB7CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIAotY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CitjbGFzcyBGdW5jdGlvbkNvZGVCbG9ja0dl
bmVyYXRvcjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIAotY2xhc3MgQnl0ZWNvZGVEdW1w
ZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz4g
eworY2xhc3MgQnl0ZWNvZGVEdW1wZXIgZmluYWwgOiBwdWJsaWMgSlNDOjpCeXRlY29kZUR1bXBl
cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGR1bXBCbG9jayhGdW5jdGlvbkNvZGVCbG9jayosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
UHJpbnRTdHJlYW0mIG91dCk7CisgICAgc3RhdGljIHZvaWQgZHVtcEJsb2NrKEZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcmludFN0cmVhbSYg
b3V0KTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9u
Q29kZUJsb2NrPjo6Qnl0ZWNvZGVEdW1wZXI7CisgICAgdXNpbmcgSlNDOjpCeXRlY29kZUR1bXBl
cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj46OkJ5dGVjb2RlRHVtcGVyOwogCiAgICAgdm9p
ZCBkdW1wQ29uc3RhbnRzKCk7CiAgICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDBlOWE5M2IyOTVjZGNiZmU1ODI0MDBhYWEy
ZDkyNzcxYjcyMzRkNjcuLjQ5MWVhNDUyN2ZkZjY2YjJiMWJjMzFkNjlmNTU1ZTdlNWZmM2U2Nzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcApAQCAtNTQ1LDggKzU0NSw4IEBAIENhdGNoSW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206
OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBXYXNtOjpDYWxsZWUqIGNhbGxlCiAgICAgaWYg
KG1fdmFsaWQpIHsKICAgICAgICAgbV90eXBlID0gSGFuZGxlclR5cGU6OkNhdGNoOwogICAgICAg
ICBtX25hdGl2ZUNvZGUgPSBoYW5kbGVyLT5tX25hdGl2ZUNvZGU7Ci0gICAgICAgIGlmIChjb25z
dCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLT5sbGludEZ1bmN0
aW9uQ29kZUJsb2NrKCkpCi0gICAgICAgICAgICBtX2NhdGNoUENGb3JJbnRlcnByZXRlciA9IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoaGFuZGxlci0+bV90YXJnZXQpLnB0cigpOworICAg
ICAgICBpZiAoY2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSA9PSBXYXNtOjpDb21waWxhdGlvbk1v
ZGU6OkxMSW50TW9kZSkKKyAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2FzbTo6TExJbnRDYWxsZWUqPihjYWxsZWUpLT5pbnN0cnVjdGlvbnMo
KS5hdChoYW5kbGVyLT5tX3RhcmdldCkucHRyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fY2F0Y2hQQ0ZvckludGVycHJldGVyID0gbnVsbHB0cjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCmluZGV4
IDM5N2IwNWQ4NmEwNzEyYTdhMzhjYTAyMWQyMzJjYjJkOWRiNTFiOTMuLjJmOTE1OTY4N2MzY2Nl
OGVkN2QyNDQwNzI4NTllNzhiZjU4Y2JhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCkBAIC03MSw3ICs3MSw3IEBA
CiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJX
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKLSNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2su
aCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYkFz
c2VtYmx5RnVuY3Rpb24uaCIKQEAgLTkzLDcgKzkzLDExIEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvciB7CiAgICAgdXNpbmcgVW5saW5rZWRTaW1wbGVKdW1wVGFibGVGaXhlZFZlY3RvciA9
IEZpeGVkVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPjsKICAgICB1c2luZyBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZUZpeGVkVmVjdG9yID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJpbmdK
dW1wVGFibGU+OwogICAgIHVzaW5nIEludDMyRml4ZWRWZWN0b3IgPSBGaXhlZFZlY3RvcjxpbnQz
Ml90PjsKKyAgICB1c2luZyBJbnQ2NEZpeGVkVmVjdG9yID0gRml4ZWRWZWN0b3I8dWludDY0X3Q+
OwogICAgIHVzaW5nIFZvaWRQb2ludGVyRml4ZWRWZWN0b3IgPSBGaXhlZFZlY3Rvcjx2b2lkKj47
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHVzaW5nIFdhc21KdW1wVGFibGVGaXhlZFZl
Y3RvciA9IEZpeGVkVmVjdG9yPFdhc206Okp1bXBUYWJsZT47CisjZW5kaWYKIAogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90KiBkdW1teSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggNTNhMjAyMGFjODhmNTJiMGI4Zjg4NzE3Mjgx
NTEyZjRlYjU1NDg0Zi4uZjU0NzRkZjA1YmE0NmU2Yzc0ZjY4NDVmNmFlMmEyODlmNTcwY2Y2NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCkBAIC0xMTMs
NyArMTEzLDcgQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rp
b24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHdzMAotICAgIGJhZGRpcyBpbmNyZW1lbnQs
IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX3RpZXJVcENvdW50ZXIgKyBXYXNtOjpMTEludFRp
ZXJVcENvdW50ZXI6Om1fY291bnRlclt3czBdLCAuY29udGludWUKKyAgICBiYWRkaXMgaW5jcmVt
ZW50LCBXYXNtOjpMTEludENhbGxlZTo6bV90aWVyVXBDb3VudGVyICsgV2FzbTo6TExJbnRUaWVy
VXBDb3VudGVyOjptX2NvdW50ZXJbd3MwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAu
Y29udGludWU6CiBlbmQKQEAgLTI3Nyw3ICsyNzcsNyBAQCBlbmQKIAogbWFjcm8gcmVzdG9yZVN0
YWNrUG9pbnRlckFmdGVyQ2FsbCgpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHdzMQotICAg
IGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX251bUNhbGxlZUxvY2Fsc1t3czFdLCB3
czEKKyAgICBsb2FkaSBXYXNtOjpMTEludENhbGxlZTo6bV9udW1DYWxsZWVMb2NhbHNbd3MxXSwg
d3MxCiAgICAgbHNoaWZ0cCAzLCB3czEKICAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsLCB3czEKICAgICBzdWJwIGNmciwgd3MxLCBzcApAQCAtMjk3LDcgKzI5Nyw3IEBAIG1h
Y3JvIHdhc21Qcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgbG9hZFdh
c21JbnN0YW5jZSkKICAgICBjb2RlQmxvY2tTZXR0ZXIod3MwKQogCiAgICAgIyBHZXQgbmV3IHNw
IGluIHdzMSBhbmQgY2hlY2sgc3RhY2sgaGVpZ2h0LgotICAgIGxvYWRpIFdhc206OkZ1bmN0aW9u
Q29kZUJsb2NrOjptX251bUNhbGxlZUxvY2Fsc1t3czBdLCB3czEKKyAgICBsb2FkaSBXYXNtOjpM
TEludENhbGxlZTo6bV9udW1DYWxsZWVMb2NhbHNbd3MwXSwgd3MxCiAgICAgbHNoaWZ0cCAzLCB3
czEKICAgICBhZGRwIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLCB3czEKICAgICBzdWJw
IGNmciwgd3MxLCB3czEKQEAgLTMyMiwxMCArMzIyLDEwIEBAIG1hY3JvIHdhc21Qcm9sb2d1ZShj
b2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgbG9hZFdhc21JbnN0YW5jZSkKICAgICBj
aGVja1N3aXRjaFRvSklURm9yUHJvbG9ndWUod3MwKQogCiAgICAgIyBTZXQgdXAgdGhlIFBDLgot
ICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXJbd3MwXSwgUEIKKyAgICBsb2FkcCBXYXNtOjpMTEludENhbGxlZTo6bV9pbnN0cnVjdGlvbnNS
YXdQb2ludGVyW3dzMF0sIFBCCiAgICAgbW92ZSAwLCBQQwogCi0gICAgbG9hZGkgV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2s6Om1fbnVtVmFyc1t3czBdLCB3czEKKyAgICBsb2FkaSBXYXNtOjpMTElu
dENhbGxlZTo6bV9udW1WYXJzW3dzMF0sIHdzMQogICAgIHN1YmkgTnVtYmVyT2ZXYXNtQXJndW1l
bnRzICsgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzLCB3czEKICAgICBidGl6IHdz
MSwgLnplcm9Jbml0aWFsaXplTG9jYWxzRG9uZQogICAgIG5lZ2kgd3MxCkBAIC0zODksOSArMzg5
LDkgQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZShjdHgsIGluZGV4LCBsb2FkZXIpCiAg
ICAgICAgIGptcCAuZG9uZQogICAgIC5jb25zdGFudDoKICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQ2Ci0gICAgICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2NvbnN0
YW50cyArIFZlY3RvckJ1ZmZlck9mZnNldFt0Nl0sIHQ2CisgICAgICAgIGxvYWRwIFdhc206OkxM
SW50Q2FsbGVlOjptX2NvbnN0YW50c1t0Nl0sIHQ2CiAgICAgICAgIHN1YnAgZmlyc3RDb25zdGFu
dEluZGV4LCBpbmRleAotICAgICAgICBsb2FkZXIoW3Q2LCBpbmRleCwgOF0pCisgICAgICAgIGxv
YWRlcigoY29uc3RleHByIChJbnQ2NEZpeGVkVmVjdG9yOjpTdG9yYWdlOjpvZmZzZXRPZkRhdGEo
KSkpW3Q2LCBpbmRleCwgOF0pCiAgICAgLmRvbmU6CiAgICAgZW5kKQogZW5kCkBAIC01MDcsNyAr
NTA3LDYgQEAgZW5kCiBtYWNybyB3YXNtQ29kZUJsb2NrR2V0dGVyKHRhcmdldFJlZ2lzdGVyKQog
ICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0YXJnZXRSZWdpc3RlcgogICAgIGFuZHAgfjMsIHRhcmdl
dFJlZ2lzdGVyCi0gICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1fY29kZUJsb2NrW3Rhcmdl
dFJlZ2lzdGVyXSwgdGFyZ2V0UmVnaXN0ZXIKIGVuZAogCiBvcCh3YXNtX2Z1bmN0aW9uX3Byb2xv
Z3VlLCBtYWNybyAoKQpAQCAtNjIxLDcgKzYyMCw3IEBAIF93YXNtX2VudGVyOgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0MiwgMHhkZWFkMDBl
MSkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIgICAgICAgICAgICAgICAgLy8gdDI8Q29k
ZUJsb2NrPiA9IGNmci5Db2RlQmxvY2sKLSAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9j
azo6bV9udW1WYXJzW3QyXSwgdDIgICAgICAvLyB0MjxzaXplX3Q+ID0gdDI8Q29kZUJsb2NrPi5t
X251bVZhcnMKKyAgICBsb2FkaSBXYXNtOjpMTEludENhbGxlZTo6bV9udW1WYXJzW3QyXSwgdDIg
ICAgICAvLyB0MjxzaXplX3Q+ID0gdDI8Q29kZUJsb2NrPi5tX251bVZhcnMKICAgICBzdWJxIENh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyArIE51bWJlck9mV2FzbUFyZ3VtZW50cywg
dDIKICAgICBidGl6IHQyLCAub3BFbnRlckRvbmUKICAgICBtb3ZlIGNmciwgdDEKQEAgLTY3MCwy
NiArNjY5LDI2IEBAIHdhc21PcChzd2l0Y2gsIFdhc21Td2l0Y2gsIG1hY3JvKGN0eCkKICAgICB3
Z2V0dShjdHgsIG1fdGFibGVJbmRleCwgdDEpCiAKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDIKLSAgICBsb2FkcCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9qdW1wVGFibGVzICsgVmVj
dG9yQnVmZmVyT2Zmc2V0W3QyXSwgdDIKLSAgICBtdWxpIHNpemVvZiBXYXNtOjpGdW5jdGlvbkNv
ZGVCbG9jazo6SnVtcFRhYmxlLCB0MQorICAgIGxvYWRwIFdhc206OkxMSW50Q2FsbGVlOjptX2p1
bXBUYWJsZXNbdDJdLCB0MgorICAgIG11bGkgc2l6ZW9mIFdhc206Okp1bXBUYWJsZSwgdDEKICAg
ICBhZGRwIHQxLCB0MgogCi0gICAgbG9hZGkgVmVjdG9yU2l6ZU9mZnNldFt0Ml0sIHQzCisgICAg
bG9hZHAgKGNvbnN0ZXhwciAoV2FzbUp1bXBUYWJsZUZpeGVkVmVjdG9yOjpTdG9yYWdlOjpvZmZz
ZXRPZkRhdGEoKSkpW3QyXSwgdDIKKyAgICBsb2FkaSBXYXNtOjpKdW1wVGFibGU6OlN0b3JhZ2U6
Om1fc2l6ZVt0Ml0sIHQzCiAgICAgYmliIHQwLCB0MywgLmluQm91bmRzCiAKIC5vdXRPZkJvdW5k
czoKICAgICBzdWJpIHQzLCAxLCB0MAogCiAuaW5Cb3VuZHM6Ci0gICAgbG9hZHAgVmVjdG9yQnVm
ZmVyT2Zmc2V0W3QyXSwgdDIKLSAgICBtdWxpIHNpemVvZiBXYXNtOjpGdW5jdGlvbkNvZGVCbG9j
azo6SnVtcFRhYmxlRW50cnksIHQwCisgICAgbXVsaSBzaXplb2YgV2FzbTo6SnVtcFRhYmxlRW50
cnksIHQwCiAKLSAgICBsb2FkaSBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6SnVtcFRhYmxlRW50
cnk6OnN0YXJ0T2Zmc2V0W3QyLCB0MF0sIHQxCi0gICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2s6Okp1bXBUYWJsZUVudHJ5Ojpkcm9wQ291bnRbdDIsIHQwXSwgdDMKLSAgICBsb2FkaSBX
YXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6SnVtcFRhYmxlRW50cnk6OmtlZXBDb3VudFt0MiwgdDBd
LCB0NQorICAgIGxvYWRpIChjb25zdGV4cHIgKFdhc206Okp1bXBUYWJsZTo6U3RvcmFnZTo6b2Zm
c2V0T2ZEYXRhKCkpKSArIFdhc206Okp1bXBUYWJsZUVudHJ5OjpzdGFydE9mZnNldFt0MiwgdDBd
LCB0MQorICAgIGxvYWRpIChjb25zdGV4cHIgKFdhc206Okp1bXBUYWJsZTo6U3RvcmFnZTo6b2Zm
c2V0T2ZEYXRhKCkpKSArIFdhc206Okp1bXBUYWJsZUVudHJ5Ojpkcm9wQ291bnRbdDIsIHQwXSwg
dDMKKyAgICBsb2FkaSAoY29uc3RleHByIChXYXNtOjpKdW1wVGFibGU6OlN0b3JhZ2U6Om9mZnNl
dE9mRGF0YSgpKSkgKyBXYXNtOjpKdW1wVGFibGVFbnRyeTo6a2VlcENvdW50W3QyLCB0MF0sIHQ1
CiAgICAgZHJvcEtlZXAodDEsIHQzLCB0NSkKIAotICAgIGxvYWRpcyBXYXNtOjpGdW5jdGlvbkNv
ZGVCbG9jazo6SnVtcFRhYmxlRW50cnk6OnRhcmdldFt0MiwgdDBdLCB0MworICAgIGxvYWRpcyAo
Y29uc3RleHByIChXYXNtOjpKdW1wVGFibGU6OlN0b3JhZ2U6Om9mZnNldE9mRGF0YSgpKSkgKyBX
YXNtOjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCiAgICAgYXNzZXJ0KG1hY3Jv
KG9rKSBidGlueiB0MywgLm9rIGVuZCkKICAgICB3YXNtRGlzcGF0Y2hJbmRpcmVjdCh0MykKIGVu
ZCkKQEAgLTgzMyw3ICs4MzIsNyBAQCBtYWNybyBzbG93UGF0aEZvcldhc21DYWxsKGN0eCwgc2xv
d1BhdGgsIHN0b3JlV2FzbUluc3RhbmNlKQogICAgICAgICAgICAgbW92ZSBQQiwgd2FzbUluc3Rh
bmNlCiAgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09m
ZnNldFtjZnJdLCBQQwogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCi0gICAg
ICAgICAgICBsb2FkcCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNSYXdQ
b2ludGVyW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIFdhc206OkxMSW50Q2FsbGVlOjptX2lu
c3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogCiAgICAgICAgICAgICB3Z2V0dShjdHgsIG1f
c3RhY2tPZmZzZXQsIHdzMSkKICAgICAgICAgICAgIGxzaGlmdGkgMywgd3MxCkBAIC0yODUzLDcg
KzI4NTIsNyBAQCBtYWNybyBjb21tb25DYXRjaEltcGwoY3R4LCBzdG9yZVdhc21JbnN0YW5jZSkK
ICAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5zdGFuY2Uod2FzbUluc3RhbmNlLCB3czAs
IHdzMSkKIAogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgotICAgIGxvYWRwIFdhc206OkZ1
bmN0aW9uQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgIGxv
YWRwIFdhc206OkxMSW50Q2FsbGVlOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgog
ICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwogICAgIHN1
YnAgUEIsIFBDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5k
ZXggYTAzNjNkYTZlODJjN2RmMDkwNDljNWZhYTYwMjFmOWRiZTE3Y2E3Mi4uZDliM2U5ODM5Zjk5
N2Q2ZmMzMzBlMTIzOGEyZTUxNmYyZmE0YmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5jcHAKQEAgLTc2LDIxICs3NiwyOCBAQCBKSVRDYWxsZWU6OkpJVENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50
cnlwbwogewogfQogCi1MTEludENhbGxlZTo6TExJbnRDYWxsZWUoc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiBjb2RlQmxvY2ssIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCitMTEludENhbGxlZTo6TExJbnRD
YWxsZWUoRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3ImIGdlbmVyYXRvciwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAg
ICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSwgaW5kZXgsIFdURk1v
dmUobmFtZSkpCi0gICAgLCBtX2NvZGVCbG9jayhXVEZNb3ZlKGNvZGVCbG9jaykpCisgICAgLCBt
X2Z1bmN0aW9uSW5kZXgoZ2VuZXJhdG9yLm1fZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fbnVtVmFy
cyhnZW5lcmF0b3IubV9udW1WYXJzKQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMoZ2VuZXJhdG9y
Lm1fbnVtQ2FsbGVlTG9jYWxzKQorICAgICwgbV9udW1Bcmd1bWVudHMoZ2VuZXJhdG9yLm1fbnVt
QXJndW1lbnRzKQorICAgICwgbV9jb25zdGFudFR5cGVzKFdURk1vdmUoZ2VuZXJhdG9yLm1fY29u
c3RhbnRUeXBlcykpCisgICAgLCBtX2NvbnN0YW50cyhXVEZNb3ZlKGdlbmVyYXRvci5tX2NvbnN0
YW50cykpCisgICAgLCBtX2luc3RydWN0aW9ucyhXVEZNb3ZlKGdlbmVyYXRvci5tX2luc3RydWN0
aW9ucykpCisgICAgLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIoZ2VuZXJhdG9yLm1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcikKKyAgICAsIG1fanVtcFRhcmdldHMoV1RGTW92ZShnZW5lcmF0b3Iu
bV9qdW1wVGFyZ2V0cykpCisgICAgLCBtX3NpZ25hdHVyZXMoV1RGTW92ZShnZW5lcmF0b3IubV9z
aWduYXR1cmVzKSkKKyAgICAsIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMoV1RGTW92ZShnZW5lcmF0
b3IubV9vdXRPZkxpbmVKdW1wVGFyZ2V0cykpCisgICAgLCBtX3RpZXJVcENvdW50ZXIoV1RGTW92
ZShnZW5lcmF0b3IubV90aWVyVXBDb3VudGVyKSkKKyAgICAsIG1fanVtcFRhYmxlcyhXVEZNb3Zl
KGdlbmVyYXRvci5tX2p1bXBUYWJsZXMpKQogewotICAgIGxpbmtFeGNlcHRpb25IYW5kbGVycygp
OwotfQotCi12b2lkIExMSW50Q2FsbGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKQotewotICAg
IGlmIChzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpKSB7CisgICAgaWYgKHNpemVfdCBjb3VudCA9IGdlbmVyYXRvci5udW1iZXJPZkV4Y2VwdGlv
bkhhbmRsZXJzKCkpIHsKICAgICAgICAgbV9leGNlcHRpb25IYW5kbGVycyA9IEZpeGVkVmVjdG9y
PEhhbmRsZXJJbmZvPihjb3VudCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5r
ZWRIYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBnZW5lcmF0b3Iu
ZXhjZXB0aW9uSGFuZGxlcihpKTsKICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0g
bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0g
Km1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIubV90YXJnZXQp
LnB0cigpOworICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqbV9pbnN0cnVjdGlvbnMt
PmF0KHVubGlua2VkSGFuZGxlci5tX3RhcmdldCkucHRyKCk7CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiB0YXJnZXQ7CiAgICAgICAgICAgICBp
ZiAodW5saW5rZWRIYW5kbGVyLm1fdHlwZSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2gpCiAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRh
Zz4oTExJbnQ6OmhhbmRsZVdhc21DYXRjaChpbnN0cnVjdGlvbi53aWR0aDxXYXNtT3Bjb2RlVHJh
aXRzPigpKS5jb2RlKCkpOwpAQCAtMTM3LDYgKzE0NCwxOSBAQCBzdGQ6OnR1cGxlPHZvaWQqLCB2
b2lkKj4gTExJbnRDYWxsZWU6OnJhbmdlKCkgY29uc3QKICAgICByZXR1cm4geyBudWxscHRyLCBu
dWxscHRyIH07CiB9CiAKK0luc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgTExJbnRDYWxsZWU6Om91
dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNl
dCkKK3sKKyAgICBBU1NFUlQobV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5jb250YWlucyhieXRlY29k
ZU9mZnNldCkpOworICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29k
ZU9mZnNldCk7Cit9CisKK2NvbnN0IEluc3RydWN0aW9uKiBMTEludENhbGxlZTo6b3V0T2ZMaW5l
SnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCit7CisgICAgaW50IG9mZnNldCA9IGJ5
dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBpbnQgdGFyZ2V0ID0gb3V0T2ZMaW5lSnVtcE9mZnNldChv
ZmZzZXQpOworICAgIHJldHVybiBtX2luc3RydWN0aW9ucy0+YXQob2Zmc2V0ICsgdGFyZ2V0KS5w
dHIoKTsKK30KKwogdm9pZCBPcHRpbWl6aW5nSklUQ2FsbGVlOjpsaW5rRXhjZXB0aW9uSGFuZGxl
cnMoVmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IHVubGlua2VkRXhjZXB0aW9uSGFuZGxlcnMs
IFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4gZXhjZXB0
aW9uSGFuZGxlckxvY2F0aW9ucykKIHsKICAgICBzaXplX3QgY291bnQgPSB1bmxpbmtlZEV4Y2Vw
dGlvbkhhbmRsZXJzLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
aAppbmRleCBhNDZjM2RiNjJkMzM0Mzk0NDM0ODk1MTg0YTkzZWFhMWNlZjMxYjI2Li44N2E4N2Nl
NDBmMWZmMjhmZDNjNzE4MzQ4OWJjMTJjYjU0YmY5NWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxlZS5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiUmVnaXN0ZXJB
dE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21I
YW5kbGVySW5mby5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgogI2luY2x1ZGUgIldh
c21MTEludFRpZXJVcENvdW50ZXIuaCIKQEAgLTY1LDggKzY1LDYgQEAgY2xhc3MgQ2FsbGVlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZ1bmN0aW9uQ29kZUJsb2NrKiBsbGlu
dEZ1bmN0aW9uQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQotCiBwcm90ZWN0
ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSwgc2l6
ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOwpAQCAt
MjE0LDkgKzIxMiw5IEBAIGNsYXNzIExMSW50Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7
CiAgICAgZnJpZW5kIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TExJbnRDYWxsZWU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICBzdGF0aWMgUmVmPExMSW50Q2FsbGVlPiBjcmVh
dGUoRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3ImIGdlbmVyYXRvciwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExMSW50Q2FsbGVlKFdURk1vdmUoY29kZUJs
b2NrKSwgaW5kZXgsIFdURk1vdmUobmFtZSkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTExJbnRDYWxsZWUoZ2VuZXJhdG9yLCBpbmRleCwgV1RGTW92ZShuYW1lKSkpOwogICAgIH0K
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RW50cnlwb2ludChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPik7CkBAIC0yMjQsNiArMjIyLDQ5IEBAIGNsYXNzIExM
SW50Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBmaW5hbDsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdCBm
aW5hbDsKIAorICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1
bmN0aW9uSW5kZXg7IH0KKyAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9CisgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1DYWxsZWVMb2NhbHM7IH0KKyAgICB1aW50MzJfdCBudW1Bcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUFyZ3VtZW50czsgfQorICAgIGNvbnN0IEZpeGVkVmVjdG9yPFR5cGU+JiBj
b25zdGFudFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFR5cGVzOyB9CisgICAgY29u
c3QgRml4ZWRWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50czsgfQorICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdWlu
dDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIEFMV0FZU19JTkxJTkUgVHlw
ZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKTsKKyAgICAg
ICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4KCldOworICAgIH0K
KworICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIHsg
cmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBsYXN0SnVtcFRhcmdldCgpIHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9CisK
KyAgICBjb25zdCBJbnN0cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVj
dGlvbiopOworICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb3V0T2ZMaW5lSnVtcE9mZnNl
dChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KTsKKyAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5z
dHJ1Y3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbi5vZmZzZXQoKSk7CisgICAgfQorCisgICAgaW5saW5lIEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3Mp
CisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1faW5zdHJ1
Y3Rpb25zLT5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5k
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBtX2luc3RydWN0aW9ucy0+c2l6ZSgpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuQWRkcmVzcyA+PSBpbnN0cnVjdGlvbnNCZWdp
biAmJiByZXR1cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIHJl
dHVybkFkZHJlc3MgLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisKKyAgICBMTEludFRpZXJV
cENvdW50ZXImIHRpZXJVcENvdW50ZXIoKSB7IHJldHVybiBtX3RpZXJVcENvdW50ZXI7IH0KKwor
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICptX3NpZ25hdHVyZXNbaW5kZXhdOworICAgIH0KKworICAgIGNv
bnN0IEp1bXBUYWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OworICAg
IHVuc2lnbmVkIG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OworCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZX0IzSklUKQogICAgIEpJVENhbGxlZSogcmVwbGFjZW1lbnQoTWVtb3J5TW9kZSBtb2Rl
KSB7IHJldHVybiBtX3JlcGxhY2VtZW50c1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0uZ2V0
KCk7IH0KICAgICB2b2lkIHNldFJlcGxhY2VtZW50KFJlZjxKSVRDYWxsZWU+JiYgcmVwbGFjZW1l
bnQsIE1lbW9yeU1vZGUgbW9kZSkKQEAgLTIzNiwyMSArMjc3LDM0IEBAIGNsYXNzIExMSW50Q2Fs
bGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiAgICAgewogICAgICAgICBtX29zckVudHJ5Q2Fs
bGVlc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBXVEZNb3ZlKG9zckVudHJ5Q2FsbGVl
KTsKICAgICB9Ci0KLSAgICBMTEludFRpZXJVcENvdW50ZXImIHRpZXJVcENvdW50ZXIoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+dGllclVwQ291bnRlcigpOyB9Ci0gICAgRnVuY3Rpb25Db2RlQmxv
Y2sqIGxsaW50RnVuY3Rpb25Db2RlQmxvY2soKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGVC
bG9jay5nZXQoKTsgfQogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgTExJbnRDYWxsZWUoc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29u
c3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIHVzaW5nIE91dE9mTGluZUp1
bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCi0g
ICAgdm9pZCBsaW5rRXhjZXB0aW9uSGFuZGxlcnMoKTsKK3ByaXZhdGU6CisgICAgTExJbnRDYWxs
ZWUoRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3ImLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxj
b25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CisKKyAgICB1aW50MzJfdCBtX2Z1
bmN0aW9uSW5kZXggeyAwIH07CisKKyAgICAvLyBVc2VkIGZvciB0aGUgbnVtYmVyIG9mIFdlYkFz
c2VtYmx5IGxvY2FscywgYXMgaW4gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy9j
b3JlL3N5bnRheC9tb2R1bGVzLmh0bWwjc3ludGF4LWxvY2FsCisgICAgdW5zaWduZWQgbV9udW1W
YXJzIHsgMCB9OworICAgIC8vIE51bWJlciBvZiBWaXJ0dWFsUmVnaXN0ZXIuIFRoZSBuYW1pbmcg
aXMgdW5mb3J0dW5hdGUsIGJ1dCBoYXMgdG8gbWF0Y2ggVW5saW5rZWRDb2RlQmxvY2sKKyAgICB1
bnNpZ25lZCBtX251bUNhbGxlZUxvY2FscyB7IDAgfTsKKyAgICB1aW50MzJfdCBtX251bUFyZ3Vt
ZW50cyB7IDAgfTsKKyAgICBGaXhlZFZlY3RvcjxUeXBlPiBtX2NvbnN0YW50VHlwZXM7CisgICAg
Rml4ZWRWZWN0b3I8dWludDY0X3Q+IG1fY29uc3RhbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CisgICAgY29uc3Qgdm9pZCogbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9OworICAgIEZpeGVkVmVjdG9yPEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7CisgICAgRml4ZWRWZWN0b3I8Y29uc3Qg
U2lnbmF0dXJlKj4gbV9zaWduYXR1cmVzOworICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0
T2ZMaW5lSnVtcFRhcmdldHM7CisgICAgTExJbnRUaWVyVXBDb3VudGVyIG1fdGllclVwQ291bnRl
cjsKKyAgICBGaXhlZFZlY3RvcjxKdW1wVGFibGU+IG1fanVtcFRhYmxlczsKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWV9CM0pJVCkKICAgICBSZWZQdHI8SklUQ2FsbGVlPiBtX3JlcGxhY2VtZW50
c1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKICAgICBSZWZQdHI8T1NSRW50cnlDYWxsZWU+
IG1fb3NyRW50cnlDYWxsZWVzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogI2VuZGlmCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBtX2VudHJ5cG9pbnQ7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIwNjg2MjBjYzdkOWU1ZTc3
OGViYmEzMjkzZTlmYjIxNzZmMzQzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2Rl
QmxvY2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9jay5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotCi0jaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKLQotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25z
KHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zKQotewotICAg
IG1faW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOwotICAgIG1faW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlciA9IG1faW5zdHJ1Y3Rpb25zLT5yYXdQb2ludGVyKCk7Ci19Ci0KLXZvaWQg
RnVuY3Rpb25Db2RlQmxvY2s6OmFkZE91dE9mTGluZUp1bXBUYXJnZXQoSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBieXRlY29kZU9mZnNldCwgaW50IHRhcmdldCkKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVCh0YXJnZXQpOwotICAgIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuc2V0KGJ5dGVjb2RlT2Zm
c2V0LCB0YXJnZXQpOwotfQotCi1JbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IEZ1bmN0aW9uQ29k
ZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0
ZWNvZGVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuY29udGFp
bnMoYnl0ZWNvZGVPZmZzZXQpKTsKLSAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5n
ZXQoYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1jb25zdCBJbnN0cnVjdGlvbiogRnVuY3Rpb25Db2Rl
QmxvY2s6Om91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQotewotICAg
IGludCBvZmZzZXQgPSBieXRlY29kZU9mZnNldChwYyk7Ci0gICAgaW50IHRhcmdldCA9IG91dE9m
TGluZUp1bXBPZmZzZXQob2Zmc2V0KTsKLSAgICByZXR1cm4gbV9pbnN0cnVjdGlvbnMtPmF0KG9m
ZnNldCArIHRhcmdldCkucHRyKCk7Ci19Ci0KLXVuc2lnbmVkIEZ1bmN0aW9uQ29kZUJsb2NrOjph
ZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCi17Ci0gICAgdW5zaWduZWQg
aW5kZXggPSBtX3NpZ25hdHVyZXMuc2l6ZSgpOwotICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoJnNp
Z25hdHVyZSk7Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1jb25zdCBTaWduYXR1cmUmIEZ1bmN0
aW9uQ29kZUJsb2NrOjpzaWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICptX3NpZ25hdHVyZXNbaW5kZXhdOwotfQotCi1hdXRvIEZ1bmN0aW9uQ29kZUJsb2NrOjph
ZGRKdW1wVGFibGUoc2l6ZV90IG51bWJlck9mRW50cmllcykgLT4gSnVtcFRhYmxlJgotewotICAg
IG1fanVtcFRhYmxlcy5hcHBlbmQoSnVtcFRhYmxlKG51bWJlck9mRW50cmllcykpOwotICAgIHJl
dHVybiBtX2p1bXBUYWJsZXMubGFzdCgpOwotfQotCi1hdXRvIEZ1bmN0aW9uQ29kZUJsb2NrOjpq
dW1wVGFibGUodW5zaWduZWQgdGFibGVJbmRleCkgY29uc3QgLT4gY29uc3QgSnVtcFRhYmxlJgot
ewotICAgIHJldHVybiBtX2p1bXBUYWJsZXNbdGFibGVJbmRleF07Ci19Ci0KLXVuc2lnbmVkIEZ1
bmN0aW9uQ29kZUJsb2NrOjpudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2p1bXBUYWJsZXMuc2l6ZSgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzJmM2U2NDEzMmMxN2I5NTExYTNlYmVhNmM2MGQwMDI0YjMyN2I1Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDE1
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1
ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCi0jaW5jbHVkZSAiV2FzbUhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2FzbUxMSW50VGll
clVwQ291bnRlci5oIgotI2luY2x1ZGUgIldhc21PcHMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEpJVENvZGU7Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFRyYWl0cz4KLWNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTsKLQotbmFtZXNwYWNlIFdh
c20gewotCi1jbGFzcyBTaWduYXR1cmU7Ci1zdHJ1Y3QgR2VuZXJhdG9yVHJhaXRzOwotCi0vLyBG
SVhNRTogQ29uc2lkZXIgbWVyZ2luZyB0aGlzIHdpdGggTExJbnRDYWxsZWUKLS8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM2OTEKLWNsYXNzIEZ1bmN0aW9uQ29k
ZUJsb2NrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShGdW5jdGlvbkNvZGVCbG9jayk7Ci0KLSAgICBmcmllbmQgQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlPEdlbmVyYXRvclRyYWl0cz47Ci0gICAgZnJpZW5kIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKLSAgICBmcmllbmQgY2xhc3MgTExJbnRHZW5lcmF0b3I7Ci0KLXB1YmxpYzoKLSAgICBGdW5j
dGlvbkNvZGVCbG9jayh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQotICAgICAgICA6IG1fZnVuY3Rp
b25JbmRleChmdW5jdGlvbkluZGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkluZGV4OyB9Ci0gICAgdW5zaWdu
ZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQotICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0gICAg
dWludDMyX3QgbnVtQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0K
LSAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGNvbnN0YW50VHlwZXMoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50VHlwZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMo
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQotICAgIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KLQot
ICAgIHZvaWQgc2V0TnVtVmFycyh1bnNpZ25lZCBudW1WYXJzKSB7IG1fbnVtVmFycyA9IG51bVZh
cnM7IH0KLSAgICB2b2lkIHNldE51bUNhbGxlZUxvY2Fscyh1bnNpZ25lZCBudW1DYWxsZWVMb2Nh
bHMpIHsgbV9udW1DYWxsZWVMb2NhbHMgPSBudW1DYWxsZWVMb2NhbHM7IH0KLQotICAgIEFMV0FZ
U19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQotICAgIEFMV0FZ
U19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2Rl
cygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25zdGFudEluZGV4
KCldOwotICAgIH0KLQotICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4pOwotICAgIHZvaWQgYWRkSnVtcFRhcmdldChJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0IGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdl
dCk7IH0KLSAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG51bWJlck9mSnVtcFRhcmdldHMo
KSB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQotICAgIEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgbGFzdEp1bXBUYXJnZXQoKSB7IHJldHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsg
fQotCi0gICAgdm9pZCBhZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIGludCB0YXJnZXQpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1w
VGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpOwotICAgIElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVj
dGlvblN0cmVhbTo6UmVmJiBpbnN0cnVjdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBvdXRP
ZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVj
dGlvbiogcmV0dXJuQWRkcmVzcykKLSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0
aW9uc0JlZ2luID0gbV9pbnN0cnVjdGlvbnMtPmF0KDApLnB0cigpOwotICAgICAgICBjb25zdCBh
dXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9u
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIG1faW5z
dHJ1Y3Rpb25zLT5zaXplKCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNz
ID49IGluc3RydWN0aW9uc0JlZ2luICYmIHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlvbnNFbmQp
OwotICAgICAgICByZXR1cm4gcmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2luOwotICAg
IH0KLQotICAgIExMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1f
dGllclVwQ291bnRlcjsgfQotCi0gICAgdW5zaWduZWQgYWRkU2lnbmF0dXJlKGNvbnN0IFNpZ25h
dHVyZSYpOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKLQotICAgIHN0cnVjdCBKdW1wVGFibGVFbnRyeSB7Ci0gICAgICAgIGludCB0YXJnZXQg
eyAwIH07Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBk
cm9wQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGtlZXBDb3VudDsKLSAgICB9OwotCi0gICAgdXNp
bmcgSnVtcFRhYmxlID0gVmVjdG9yPEp1bXBUYWJsZUVudHJ5PjsKLSAgICBKdW1wVGFibGUmIGFk
ZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKTsKLSAgICBjb25zdCBKdW1wVGFibGUm
IGp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1i
ZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKLQotICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb25IYW5kbGVycy5zaXplKCk7IH0KLSAg
ICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyByZXR1
cm4gbV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KLSAgICB2b2lkIGFkZEV4Y2VwdGlvbkhh
bmRsZXIoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlcikgeyBtX2V4Y2VwdGlvbkhh
bmRsZXJzLmFwcGVuZChoYW5kbGVyKTsgfQotCi1wcml2YXRlOgotICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+Owot
Ci0gICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4OwotCi0gICAgLy8gVXNlZCBmb3IgdGhlIG51
bWJlciBvZiBXZWJBc3NlbWJseSBsb2NhbHMsIGFzIGluIGh0dHBzOi8vd2ViYXNzZW1ibHkuZ2l0
aHViLmlvL3NwZWMvY29yZS9zeW50YXgvbW9kdWxlcy5odG1sI3N5bnRheC1sb2NhbAotICAgIHVu
c2lnbmVkIG1fbnVtVmFycyB7IDAgfTsKLSAgICAvLyBOdW1iZXIgb2YgVmlydHVhbFJlZ2lzdGVy
LiBUaGUgbmFtaW5nIGlzIHVuZm9ydHVuYXRlLCBidXQgaGFzIHRvIG1hdGNoIFVubGlua2VkQ29k
ZUJsb2NrCi0gICAgdW5zaWduZWQgbV9udW1DYWxsZWVMb2NhbHMgeyAwIH07Ci0gICAgdWludDMy
X3QgbV9udW1Bcmd1bWVudHMgeyAwIH07Ci0gICAgVmVjdG9yPFR5cGU+IG1fY29uc3RhbnRUeXBl
czsKLSAgICBWZWN0b3I8dWludDY0X3Q+IG1fY29uc3RhbnRzOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7Ci0gICAgY29uc3Qgdm9pZCogbV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFZlY3RvcjxJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwotICAgIFZlY3Rvcjxjb25zdCBTaWduYXR1
cmUqPiBtX3NpZ25hdHVyZXM7Ci0gICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0czsKLSAgICBMTEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOwotICAg
IFZlY3RvcjxKdW1wVGFibGU+IG1fanVtcFRhYmxlczsKLSAgICBWZWN0b3I8VW5saW5rZWRIYW5k
bGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mYzdhMDg3NWQ2M2RkMGI2MGM5MTAzZmIwMjNhN2NkYzMxOGNk
NTQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFt
PiBpbnN0cnVjdGlvbnMpCit7CisgICAgbV9pbnN0cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3RydWN0
aW9ucyk7CisgICAgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyID0gbV9pbnN0cnVjdGlvbnMtPnJh
d1BvaW50ZXIoKTsKK30KKwordm9pZCBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkT3V0
T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0
LCBpbnQgdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7CisgICAgbV9vdXRP
ZkxpbmVKdW1wVGFyZ2V0cy5zZXQoYnl0ZWNvZGVPZmZzZXQsIHRhcmdldCk7Cit9CisKK0luc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6Om91dE9mTGlu
ZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICBBU1NFUlQobV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5jb250YWlucyhieXRlY29kZU9mZnNl
dCkpOworICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNl
dCk7Cit9CisKK2NvbnN0IEluc3RydWN0aW9uKiBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6
b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCit7CisgICAgaW50IG9m
ZnNldCA9IGJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICBpbnQgdGFyZ2V0ID0gb3V0T2ZMaW5lSnVt
cE9mZnNldChvZmZzZXQpOworICAgIHJldHVybiBtX2luc3RydWN0aW9ucy0+YXQob2Zmc2V0ICsg
dGFyZ2V0KS5wdHIoKTsKK30KKwordW5zaWduZWQgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6
OmFkZFNpZ25hdHVyZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IG1fc2lnbmF0dXJlcy5zaXplKCk7CisgICAgbV9zaWduYXR1cmVzLmFwcGVuZCgm
c2lnbmF0dXJlKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK2F1dG8gRnVuY3Rpb25Db2RlQmxv
Y2tHZW5lcmF0b3I6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKSAtPiBKdW1w
VGFibGUmCit7CisgICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVyT2ZFbnRy
aWVzKSk7CisgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7Cit9CisKK3Vuc2lnbmVkIEZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2p1bXBUYWJsZXMuc2l6ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44YTNiYmE5NjhiM2JmNThjNjM0YjU5OWUyZDQ0ZmYwN2NlZDRhNzA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgor
I2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxl
ckluZm8uaCIKKyNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCisjaW5jbHVkZSAi
V2FzbU9wcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUQ29kZTsKK2NsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgorY2xhc3MgQnl0ZWNv
ZGVHZW5lcmF0b3JCYXNlOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIExMSW50Q2FsbGVl
OworY2xhc3MgU2lnbmF0dXJlOworc3RydWN0IEdlbmVyYXRvclRyYWl0czsKKworc3RydWN0IEp1
bXBUYWJsZUVudHJ5IHsKKyAgICBpbnQgdGFyZ2V0IHsgMCB9OworICAgIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0OworICAgIHVuc2lnbmVkIGRyb3BDb3VudDsKKyAgICB1bnNpZ25lZCBrZWVwQ291bnQ7
Cit9OworCit1c2luZyBKdW1wVGFibGUgPSBGaXhlZFZlY3RvcjxKdW1wVGFibGVFbnRyeT47CisK
K2NsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGdW5jdGlvbkNvZGVCbG9ja0dlbmVy
YXRvcik7CisKKyAgICBmcmllbmQgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0
cz47CisgICAgZnJpZW5kIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICBmcmllbmQgY2xhc3Mg
TExJbnRHZW5lcmF0b3I7CisgICAgZnJpZW5kIGNsYXNzIExMSW50Q2FsbGVlOworCitwdWJsaWM6
CisgICAgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IodWludDMyX3QgZnVuY3Rpb25JbmRleCkK
KyAgICAgICAgOiBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICB7CisgICAgfQor
CisgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25J
bmRleDsgfQorICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7
IH0KKyAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNh
bGxlZUxvY2FsczsgfQorICAgIHVpbnQzMl90IG51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQXJndW1lbnRzOyB9CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBjb25zdGFudFR5cGVz
KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFR5cGVzOyB9CisgICAgY29uc3QgVmVjdG9yPHVp
bnQ2NF90PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KKyAgICBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1f
aW5zdHJ1Y3Rpb25zOyB9CisKKyAgICB2b2lkIHNldE51bVZhcnModW5zaWduZWQgbnVtVmFycykg
eyBtX251bVZhcnMgPSBudW1WYXJzOyB9CisgICAgdm9pZCBzZXROdW1DYWxsZWVMb2NhbHModW5z
aWduZWQgbnVtQ2FsbGVlTG9jYWxzKSB7IG1fbnVtQ2FsbGVlTG9jYWxzID0gbnVtQ2FsbGVlTG9j
YWxzOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxS
ZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdl
bmVyYXRlZFdhc21CeXRlY29kZXMoKSk7CisgICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNb
cmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluc3RydWN0aW9u
cyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKKyAgICB2b2lkIGFkZEp1bXBU
YXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdl
dHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBu
dW1iZXJPZkp1bXBUYXJnZXRzKCkgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KKyAg
ICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxhc3RKdW1wVGFyZ2V0KCkgeyByZXR1cm4gbV9q
dW1wVGFyZ2V0cy5sYXN0KCk7IH0KKworICAgIHZvaWQgYWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQgdGFyZ2V0KTsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiopOworICAgIEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0KTsKKyAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG91dE9mTGluZUp1bXBP
ZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CisgICAgfQorCisgICAgaW5saW5lIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVP
ZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCisgICAgeworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1faW5zdHJ1Y3Rpb25zLT5hdCgwKS5wdHIo
KTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVj
dGlvbnNCZWdpbikgKyBtX2luc3RydWN0aW9ucy0+c2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmV0dXJuQWRkcmVzcyA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiByZXR1cm5BZGRyZXNz
IDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIHJldHVybkFkZHJlc3MgLSBpbnN0
cnVjdGlvbnNCZWdpbjsKKyAgICB9CisKKyAgICBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIExMSW50VGllclVwQ291bnRlcjo6T1NSRW50cnlEYXRhPiYgdGllclVwQ291bnRlcigp
IHsgcmV0dXJuIG1fdGllclVwQ291bnRlcjsgfQorCisgICAgdW5zaWduZWQgYWRkU2lnbmF0dXJl
KGNvbnN0IFNpZ25hdHVyZSYpOworCisgICAgSnVtcFRhYmxlJiBhZGRKdW1wVGFibGUoc2l6ZV90
IG51bWJlck9mRW50cmllcyk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKCkgY29u
c3Q7CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyB9CisgICAgVW5saW5rZWRIYW5kbGVySW5m
byYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxl
cnNbaW5kZXhdOyB9CisgICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2Vk
SGFuZGxlckluZm8mIGhhbmRsZXIpIHsgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxl
cik7IH0KKworcHJpdmF0ZToKKyAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hN
YXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKKworICAgIHVpbnQzMl90IG1fZnVu
Y3Rpb25JbmRleDsKKworICAgIC8vIFVzZWQgZm9yIHRoZSBudW1iZXIgb2YgV2ViQXNzZW1ibHkg
bG9jYWxzLCBhcyBpbiBodHRwczovL3dlYmFzc2VtYmx5LmdpdGh1Yi5pby9zcGVjL2NvcmUvc3lu
dGF4L21vZHVsZXMuaHRtbCNzeW50YXgtbG9jYWwKKyAgICB1bnNpZ25lZCBtX251bVZhcnMgeyAw
IH07CisgICAgLy8gTnVtYmVyIG9mIFZpcnR1YWxSZWdpc3Rlci4gVGhlIG5hbWluZyBpcyB1bmZv
cnR1bmF0ZSwgYnV0IGhhcyB0byBtYXRjaCBVbmxpbmtlZENvZGVCbG9jaworICAgIHVuc2lnbmVk
IG1fbnVtQ2FsbGVlTG9jYWxzIHsgMCB9OworICAgIHVpbnQzMl90IG1fbnVtQXJndW1lbnRzIHsg
MCB9OworICAgIFZlY3RvcjxUeXBlPiBtX2NvbnN0YW50VHlwZXM7CisgICAgVmVjdG9yPHVpbnQ2
NF90PiBtX2NvbnN0YW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+
IG1faW5zdHJ1Y3Rpb25zOworICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
ciB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9q
dW1wVGFyZ2V0czsKKyAgICBWZWN0b3I8Y29uc3QgU2lnbmF0dXJlKj4gbV9zaWduYXR1cmVzOwor
ICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CisgICAgSGFz
aE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBMTEludFRpZXJVcENvdW50ZXI6Ok9TUkVu
dHJ5RGF0YT4gbV90aWVyVXBDb3VudGVyOworICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fanVtcFRh
YmxlczsKKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVy
czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
R2VuZXJhdG9yVHJhaXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2VuZXJh
dG9yVHJhaXRzLmgKaW5kZXggODI1MGJlYTc4MzI2N2NmZmU1NjFlYjNkOWRhMGFlYzMxMDU5N2Ez
Yy4uNmE4OGJiNGQwYjhhN2FmZjgxZDk4MDcwZGE2MjdhNTM5Njg2ZWQwMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdlbmVyYXRvclRyYWl0cy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HZW5lcmF0b3JUcmFpdHMuaApAQCAtMzYsNyAr
MzYsNyBAQCBzdHJ1Y3QgR2VuZXJhdG9yVHJhaXRzIHsKICAgICB1c2luZyBPcGNvZGVUcmFpdHMg
PSBXYXNtT3Bjb2RlVHJhaXRzOwogICAgIHVzaW5nIE9wY29kZUlEID0gV2FzbU9wY29kZUlEOwog
ICAgIHVzaW5nIE9wTm9wID0gV2FzbU5vcDsKLSAgICB1c2luZyBDb2RlQmxvY2sgPSBzdGQ6OnVu
aXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+OworICAgIHVzaW5nIENvZGVCbG9jayA9IHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj47CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBPcGNvZGVJRCBvcGNvZGVGb3JEaXNhYmxpbmdPcHRpbWl6YXRpb25zID0gd2FzbV91bnJl
YWNoYWJsZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCmluZGV4IDhlZDIzMDkzZjcxM2UxZjQyMjllYjNmMWZjNzQ1ZDU0MWJm
ZmIyNzcuLjRlYTJkYzkwOGE2YTJmMzYwNjNjMGRkMDU1MzU2MWZmNTUzZjU2NzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAt
MzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkxhYmVsLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAi
V2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1ZGUgPHZhcmlhbnQ+CkBAIC0xOTMsNyArMTkz
LDcgQEAgY2xhc3MgTExJbnRHZW5lcmF0b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNl
PEdlbmVyYXRvclRyYWl0cz4gewogCiAgICAgTExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRp
b24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gZmluYWxpemUoKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+IGZpbmFsaXplKCk7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEEsIHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0
Qj4KICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYg
ZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKQEAgLTUwMCw3ICs1
MDAsNyBAQCBjbGFzcyBMTEludEdlbmVyYXRvciA6IHB1YmxpYyBCeXRlY29kZUdlbmVyYXRvckJh
c2U8R2VuZXJhdG9yVHJhaXRzPiB7CiAgICAgYm9vbCBtX3VzZXNFeGNlcHRpb25zIHsgZmFsc2Ug
fTsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCitFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewogICAgIExMSW50R2VuZXJhdG9y
IGxsaW50R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVu
Y3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CkBAIC01MjUsNyArNTI1
LDcgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJ1ZmZlcj4mIHRocmVhZFNwZWNpZmljQnVmZmVy
KCkKIH0KIAogTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQotICAgIDog
Qnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0
aW9uSW5kZXgpLCAwKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVu
Y3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZv
KGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKQEAgLTU0Myw3
ICs1NDMsNyBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsCiAgICAgV2FzbUVudGVyOjplbWl0KHRo
aXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IExMSW50R2VuZXJh
dG9yOjpmaW5hbGl6ZSgpCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0
b3I+IExMSW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2RlQmxvY2spOwogCkBAIC05ODMsNyArOTgzLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
TG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28K
IAogICAgIFdhc21Mb29wSGludDo6ZW1pdCh0aGlzKTsKIAotICAgIG1fY29kZUJsb2NrLT50aWVy
VXBDb3VudGVyKCkuYWRkT1NSRW50cnlEYXRhRm9yTG9vcChtX2xhc3RJbnN0cnVjdGlvbi5vZmZz
ZXQoKSwgeyBsb29wSW5kZXgsIFdURk1vdmUob3NyRW50cnlEYXRhKSB9KTsKKyAgICBtX2NvZGVC
bG9jay0+dGllclVwQ291bnRlcigpLmFkZChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgTExJ
bnRUaWVyVXBDb3VudGVyOjpPU1JFbnRyeURhdGEgeyBsb29wSW5kZXgsIFdURk1vdmUob3NyRW50
cnlEYXRhKSB9KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBWZWN0b3I8Q29udHJvbFR5cAogICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxz
KGV4cHJlc3Npb25TdGFjayk7CiAKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gbV9jb2RlQmxv
Y2stPm51bWJlck9mSnVtcFRhYmxlcygpOwotICAgIEZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFi
bGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRKdW1wVGFibGUodGFyZ2V0cy5zaXplKCkg
KyAxKTsKKyAgICBhdXRvJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkSnVtcFRhYmxlKHRh
cmdldHMuc2l6ZSgpICsgMSk7CiAKICAgICBXYXNtU3dpdGNoOjplbWl0KHRoaXMsIGNvbmRpdGlv
biwgdGFibGVJbmRleCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmgKaW5kZXggYzAxMmZiMWVlNzE0YWY5ODIzZGEyNmM2YzM0ZDhhYjc3MmVi
NDU1Mi4uYjU1Y2E1MjAxZDA4NTMyMmRjZTc0MTVjMTAzYmRkN2ZhNmNjZmVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAgLTMyLDEx
ICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBG
dW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xh
c3MgU2lnbmF0dXJlOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5
dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIE1vZHVsZUlu
Zm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIE1vZHVs
ZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludFBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxh
bi5jcHAKaW5kZXggN2MwYmJjNWY3MWY1OWNiZDY2YjJlOGUzMjllM2MyMzU3N2RjZTgwYS4uODUw
NjdjMTJiMjAzZTBlOWQ3Nzc2MDczNzJjYTlhNWYwMjUxNTU5NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBM
TEludFBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIEFT
U0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBz
aWduYXR1cmVJbmRleCk7CiAKICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwg
ZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgZnVuY3Rpb25JbmRleCk7CisgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRl
eCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgTExJ
bnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKSkKICAgICAgICAgICAgICAg
ICBCeXRlY29kZUR1bXBlcjo6ZHVtcEJsb2NrKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ldLmdl
dCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLCBXVEY6OmRhdGFGaWxlKCkpOwogCi0gICAgICAgICAg
ICBtX2NhbGxlZXNWZWN0b3JbaV0gPSBMTEludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUobV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbaV0pLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CisgICAgICAgICAg
ICBtX2NhbGxlZXNWZWN0b3JbaV0gPSBMTEludENhbGxlZTo6Y3JlYXRlKCptX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tpXSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICAgICAgZW50cnlw
b2ludHNbaV0gPSBqaXQubGFiZWwoKTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZVNsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSAtIHNpemVvZihDUFVSZWdpc3RlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50UGxhbi5oCmluZGV4IDk0ZGQ5ZjJmYzFhMDBlZDBjNmFkNThmNGQ3NjI4
NmRjYzgwN2E5NDYuLjBkNTliYjI3NGNkMTgzNDE1ZDY0NDJjNTcwMGNiYTlkMTQ0NGNkNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmgKQEAgLTI4LDcgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtRW50cnlQbGFu
LmgiCi0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC04Nyw3
ICs4Nyw3IEBAIGNsYXNzIExMSW50UGxhbiBmaW5hbCA6IHB1YmxpYyBFbnRyeVBsYW4gewogICAg
IGJvb2wgcHJlcGFyZUltcGwoKSBmaW5hbDsKICAgICB2b2lkIGRpZENvbXBsZXRlQ29tcGlsYXRp
b24oKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spIGZpbmFsOwogCi0gICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+PiBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBtX2Nh
bGxlZXMgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFJlZjxMTEludENhbGxlZT4+IG1fY2FsbGVl
c1ZlY3RvcjsKICAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVNYXAgbV9lbWJlZGRlckNhbGxl
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmgKaW5kZXggZTZmNjU1NDA3NzQ2YjEyZThkNjdkZTYyMjE3MWI0YTFiN2E5MDc5ZS4u
MTQwYTgyYzhlNGEzMTg3OTNjY2ZiODMyMWMwMjUwMTk2YzgzNGVmYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaApAQCAtNDQs
NyArNDQsMTMgQEAgY2xhc3MgTExJbnRUaWVyVXBDb3VudGVyIDogcHVibGljIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciB7CiAgICAgICAgIENvbXBpbGVkLAogICAgIH07CiAKLSAgICBMTEludFRp
ZXJVcENvdW50ZXIoKQorICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgeworICAgICAgICB1aW50MzJf
dCBsb29wSW5kZXg7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHZhbHVlczsKKyAg
ICB9OworCisgICAgTExJbnRUaWVyVXBDb3VudGVyKEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCwgT1NSRW50cnlEYXRhPiYmIG9zckVudHJ5RGF0YSkKKyAgICAgICAgOiBtX29zckVu
dHJ5RGF0YShXVEZNb3ZlKG9zckVudHJ5RGF0YSkpCiAgICAgewogICAgICAgICBvcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAgICAgfQpAQCAtNzAsMTEgKzc2LDYgQEAgY2xhc3MgTExJbnRUaWVyVXBD
b3VudGVyIDogcHVibGljIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciB7CiAgICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwog
ICAgIH0KIAotICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewotICAgICAgICB1aW50MzJfdCBsb29w
SW5kZXg7Ci0gICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IHZhbHVlczsKLSAgICB9Owot
CiAgICAgdm9pZCBhZGRPU1JFbnRyeURhdGFGb3JMb29wKEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQsIE9TUkVudHJ5RGF0YSYmKTsKIAogICAgIGNvbnN0IE9TUkVudHJ5RGF0YSYgb3NyRW50cnlE
YXRhRm9yTG9vcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggOTU3NWRjMTdlOTEzODI4
NTA5YWQ3ZTY2YzhlZjBiZjI3OGY2ZmNkMC4uOTQ1YTQwMTZkM2RjZDYyMTBjNTFlMTQ1MDUyNDcy
MzkxYjI1NjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRl
ICJXYXNtQkJRUGxhbi5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKLSNpbmNsdWRlICJXYXNt
RnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxl
SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtT01HUGxhbi5oIgpAQCAtNzEsMTggKzcxLDE4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogICAgICAgICBXQVNNX1JFVFVS
Tl9UV08oKHJldGFnQ29kZVB0cjxjYWxsVGFyZ2V0VGFnLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWc+
KGNhbGxUYXJnZXQpKSwgdGFyZ2V0SW5zdGFuY2UpOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAK
LSNkZWZpbmUgQ09ERV9CTE9DSygpIFwKLSAgICBiaXR3aXNlX2Nhc3Q8V2FzbTo6RnVuY3Rpb25D
b2RlQmxvY2sqPihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKQorI2RlZmluZSBDQUxMRUUoKSBcCisg
ICAgc3RhdGljX2Nhc3Q8V2FzbTo6TExJbnRDYWxsZWUqPihjYWxsRnJhbWUtPmNhbGxlZSgpLmFz
V2FzbUNhbGxlZSgpKQogCiAjZGVmaW5lIFJFQUQodmlydHVhbFJlZ2lzdGVyKSBcCiAgICAgKHZp
cnR1YWxSZWdpc3Rlci5pc0NvbnN0YW50KCkgXAotICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShD
T0RFX0JMT0NLKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwKKyAgICAgICAgPyBK
U1ZhbHVlOjpkZWNvZGUoQ0FMTEVFKCktPmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3RlcikpIFwK
ICAgICAgICAgOiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWV9CM0pJVCkKIGVudW0gY2xhc3MgUmVxdWlyZWRXYXNtSklUIHsgQW55LCBPTUcg
fTsKIAotaW5saW5lIGJvb2wgc2hvdWxkSklUKFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFJlcXVpcmVkV2FzbUpJVCByZXF1aXJlZEpJVCA9IFJlcXVpcmVkV2FzbUpJVDo6QW55
KQoraW5saW5lIGJvb2wgc2hvdWxkSklUKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFJlcXVp
cmVkV2FzbUpJVCByZXF1aXJlZEpJVCA9IFJlcXVpcmVkV2FzbUpJVDo6QW55KQogewogICAgIGlm
IChyZXF1aXJlZEpJVCA9PSBSZXF1aXJlZFdhc21KSVQ6Ok9NRykgewogICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZU9NR0pJVCgpKQpAQCAtOTMsMTQgKzkzLDE0IEBAIGlubGluZSBib29sIHNob3Vs
ZEpJVChXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZXF1aXJlZFdhc21KSVQg
cmVxdWlyCiAgICAgICAgIGlmICghT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkgJiYg
IU9wdGlvbnM6OnVzZU9NR0pJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBpZiAoIU9wdGlvbnM6Ondhc21GdW5jdGlvbkluZGV4UmFuZ2VUb0NvbXBpbGUoKS5pc0lu
UmFuZ2UoY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCkpKQorICAgIGlmICghT3B0aW9uczo6d2Fz
bUZ1bmN0aW9uSW5kZXhSYW5nZVRvQ29tcGlsZSgpLmlzSW5SYW5nZShjYWxsZWUtPmZ1bmN0aW9u
SW5kZXgoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
aW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUq
IGNhbGxlZSwgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFu
Y2UqIGluc3RhbmNlKQoraW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2Fz
bTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQogewotICAg
IFdhc206OkxMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlciA9IGNvZGVCbG9jay0+dGll
clVwQ291bnRlcigpOworICAgIFdhc206OkxMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRl
ciA9IGNhbGxlZS0+dGllclVwQ291bnRlcigpOwogICAgIGlmICghdGllclVwQ291bnRlci5jaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0
ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOSw3ICsxMjksNyBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpMTEludENhbGxlZSogY2FsbGVl
LCBXYXNtOjpGdW5jdGlvbgogICAgIH0KIAogICAgIGlmIChjb21waWxlKSB7Ci0gICAgICAgIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXggPSBjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKTsKKyAgICAg
ICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGNhbGxlZS0+ZnVuY3Rpb25JbmRleCgpOwogICAg
ICAgICBSZWZQdHI8V2FzbTo6UGxhbj4gcGxhbjsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21M
TEludFRpZXJzVXBUb0JCUSgpKQogICAgICAgICAgICAgcGxhbiA9IGFkb3B0UmVmKCpuZXcgV2Fz
bTo6QkJRUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBjb25zdF9jYXN0PFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJj4oaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkpLCBmdW5j
dGlvbkluZGV4LCBpbnN0YW5jZS0+Y2FsbGVlR3JvdXAoKSwgV2FzbTo6UGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKQEAgLTE1MCwyMCArMTUwLDE5IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wocHJvbG9n
dWVfb3NyKQogewogICAgIFVOVVNFRF9QQVJBTShwYyk7CiAKLSAgICBXYXNtOjpMTEludENhbGxl
ZSogY2FsbGVlID0gc3RhdGljX2Nhc3Q8V2FzbTo6TExJbnRDYWxsZWUqPihjYWxsRnJhbWUtPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpKTsKLSAgICBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrID0gQ09ERV9CTE9DSygpOworICAgIFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUgPSBD
QUxMRUUoKTsKIAotICAgIGlmICghc2hvdWxkSklUKGNvZGVCbG9jaykpIHsKLSAgICAgICAgY29k
ZUJsb2NrLT50aWVyVXBDb3VudGVyKCkuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICBpZiAoIXNo
b3VsZEpJVChjYWxsZWUpKSB7CisgICAgICAgIGNhbGxlZS0+dGllclVwQ291bnRlcigpLmRlZmVy
SW5kZWZpbml0ZWx5KCk7CiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRy
KTsKICAgICB9CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdhc21MTEludFByb2xvZ3VlT1NSKCkp
CiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBudWxscHRyKTsKIAotICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50ZXJlZCBwcm9sb2d1
ZV9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY29kZUJsb2NrLT50aWVyVXBDb3VudGVyKCkp
OworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50
ZXJlZCBwcm9sb2d1ZV9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY2FsbGVlLT50aWVyVXBD
b3VudGVyKCkpOwogCi0gICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhjYWxsZWUs
IGNvZGVCbG9jaywgaW5zdGFuY2UpKQorICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoY2FsbGVlLCBpbnN0YW5jZSkpCiAgICAgICAgIFdBU01fUkVUVVJOX1RXTyhudWxscHRyLCBu
dWxscHRyKTsKIAogICAgIFdBU01fUkVUVVJOX1RXTyhjYWxsZWUtPnJlcGxhY2VtZW50KGluc3Rh
bmNlLT5tZW1vcnkoKS0+bW9kZSgpKS0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IG51bGxwdHIpOwpAQCAtMTcxLDE4ICsxNzAsMTcgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChwcm9s
b2d1ZV9vc3IpCiAKIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiB7Ci0gICAgV2FzbTo6
TExJbnRDYWxsZWUqIGNhbGxlZSA9IHN0YXRpY19jYXN0PFdhc206OkxMSW50Q2FsbGVlKj4oY2Fs
bEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7Ci0gICAgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2sqIGNvZGVCbG9jayA9IENPREVfQkxPQ0soKTsKLSAgICBXYXNtOjpMTEludFRpZXJVcENv
dW50ZXImIHRpZXJVcENvdW50ZXIgPSBjb2RlQmxvY2stPnRpZXJVcENvdW50ZXIoKTsKKyAgICBX
YXNtOjpMTEludENhbGxlZSogY2FsbGVlID0gQ0FMTEVFKCk7CisgICAgV2FzbTo6TExJbnRUaWVy
VXBDb3VudGVyJiB0aWVyVXBDb3VudGVyID0gY2FsbGVlLT50aWVyVXBDb3VudGVyKCk7CiAKLSAg
ICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5T1NSKCkgfHwgIU9wdGlvbnM6OnVzZVdhc21M
TEludExvb3BPU1IoKSB8fCAhc2hvdWxkSklUKGNvZGVCbG9jaywgUmVxdWlyZWRXYXNtSklUOjpP
TUcpKSB7CisgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseU9TUigpIHx8ICFPcHRpb25z
Ojp1c2VXYXNtTExJbnRMb29wT1NSKCkgfHwgIXNob3VsZEpJVChjYWxsZWUsIFJlcXVpcmVkV2Fz
bUpJVDo6T01HKSkgewogICAgICAgICBzbG93X3BhdGhfd2FzbV9wcm9sb2d1ZV9vc3IoY2FsbEZy
YW1lLCBwYywgaW5zdGFuY2UpOwogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAq
Y2FsbGVlLCAiOiBFbnRlcmVkIGxvb3Bfb3NyIHdpdGggdGllclVwQ291bnRlciA9ICIsIGNvZGVC
bG9jay0+dGllclVwQ291bnRlcigpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICpjYWxsZWUsICI6IEVudGVyZWQgbG9vcF9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0g
IiwgY2FsbGVlLT50aWVyVXBDb3VudGVyKCkpOwogCi0gICAgdW5zaWduZWQgbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVPZmZzZXQgPSBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICB1bnNp
Z25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IGNhbGxlZS0+Ynl0ZWNvZGVPZmZzZXQo
cGMpOwogICAgIGNvbnN0IGF1dG8mIG9zckVudHJ5RGF0YSA9IHRpZXJVcENvdW50ZXIub3NyRW50
cnlEYXRhRm9yTG9vcChsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAKICAgICBpZiAoIXRp
ZXJVcENvdW50ZXIuY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewpAQCAt
MjI3LDcgKzIyNSw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgfQogCiAg
ICAgaWYgKGNvbXBpbGUpIHsKLSAgICAgICAgUmVmPFdhc206OlBsYW4+IHBsYW4gPSBhZG9wdFJl
Zigqc3RhdGljX2Nhc3Q8V2FzbTo6UGxhbio+KG5ldyBXYXNtOjpPU1JFbnRyeVBsYW4oaW5zdGFu
Y2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVm
PFdhc206OkNhbGxlZT4oKmNhbGxlZSksIGNvZGVCbG9jay0+ZnVuY3Rpb25JbmRleCgpLCBvc3JF
bnRyeURhdGEubG9vcEluZGV4LCBpbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSwgV2FzbTo6UGxh
bjo6ZG9udEZpbmFsaXplKCkpKSk7CisgICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRv
cHRSZWYoKnN0YXRpY19jYXN0PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGlu
c3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSks
IFJlZjxXYXNtOjpDYWxsZWU+KCpjYWxsZWUpLCBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSwgb3Ny
RW50cnlEYXRhLmxvb3BJbmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBs
YW46OmRvbnRGaW5hbGl6ZSgpKSkpOwogICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVu
cXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigp
OwpAQCAtMjQzLDE5ICsyNDEsMTggQEAgV0FTTV9TTE9XX1BBVEhfREVDTChsb29wX29zcikKIAog
V0FTTV9TTE9XX1BBVEhfREVDTChlcGlsb2d1ZV9vc3IpCiB7Ci0gICAgV2FzbTo6TExJbnRDYWxs
ZWUqIGNhbGxlZSA9IHN0YXRpY19jYXN0PFdhc206OkxMSW50Q2FsbGVlKj4oY2FsbEZyYW1lLT5j
YWxsZWUoKS5hc1dhc21DYWxsZWUoKSk7Ci0gICAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNv
ZGVCbG9jayA9IENPREVfQkxPQ0soKTsKKyAgICBXYXNtOjpMTEludENhbGxlZSogY2FsbGVlID0g
Q0FMTEVFKCk7CiAKLSAgICBpZiAoIXNob3VsZEpJVChjb2RlQmxvY2spKSB7Ci0gICAgICAgIGNv
ZGVCbG9jay0+dGllclVwQ291bnRlcigpLmRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgaWYgKCFz
aG91bGRKSVQoY2FsbGVlKSkgeworICAgICAgICBjYWxsZWUtPnRpZXJVcENvdW50ZXIoKS5kZWZl
ckluZGVmaW5pdGVseSgpOwogICAgICAgICBXQVNNX0VORF9JTVBMKCk7CiAgICAgfQogICAgIGlm
ICghT3B0aW9uczo6dXNlV2FzbUxMSW50RXBpbG9ndWVPU1IoKSkKICAgICAgICAgV0FTTV9FTkRf
SU1QTCgpOwogCi0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY2FsbGVl
LCAiOiBFbnRlcmVkIGVwaWxvZ3VlX29zciB3aXRoIHRpZXJVcENvdW50ZXIgPSAiLCBjb2RlQmxv
Y2stPnRpZXJVcENvdW50ZXIoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAqY2FsbGVlLCAiOiBFbnRlcmVkIGVwaWxvZ3VlX29zciB3aXRoIHRpZXJVcENvdW50ZXIg
PSAiLCBjYWxsZWUtPnRpZXJVcENvdW50ZXIoKSk7CiAKLSAgICBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhjYWxsZWUsIGNvZGVCbG9jaywgaW5zdGFuY2UpOworICAgIGppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKGNhbGxlZSwgaW5zdGFuY2UpOwogICAgIFdBU01fRU5EX0lNUEwoKTsKIH0K
ICNlbmRpZgpAQCAtMjcwLDkgKzI2Nyw5IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wodHJhY2UpCiAg
ICAgV2FzbU9wY29kZUlEIG9wY29kZUlEID0gcGMtPm9wY29kZUlEPFdhc21PcGNvZGVUcmFpdHM+
KCk7CiAgICAgZGF0YUxvZ0YoIjwlcD4gJXAgLyAlcDogZXhlY3V0aW5nIGJjIyV6dSwgJXMsIHBj
ID0gJXBcbiIsCiAgICAgICAgICZUaHJlYWQ6OmN1cnJlbnQoKSwKLSAgICAgICAgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwKKyAgICAgICAgQ0FMTEVFKCksCiAgICAgICAgIGNhbGxGcmFtZSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENPREVfQkxPQ0soKS0+Ynl0ZWNvZGVPZmZzZXQo
cGMpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENBTExFRSgpLT5ieXRlY29kZU9m
ZnNldChwYykpLAogICAgICAgICBwYy0+bmFtZTxXYXNtT3Bjb2RlVHJhaXRzPigpLAogICAgICAg
ICBwYyk7CiAgICAgaWYgKG9wY29kZUlEID09IHdhc21fZW50ZXIpIHsKQEAgLTI5MCw3ICsyODcs
NyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKG91dF9vZl9saW5lX2p1bXBfdGFyZ2V0KQogewogICAg
IFVOVVNFRF9QQVJBTShpbnN0YW5jZSk7CiAKLSAgICBwYyA9IENPREVfQkxPQ0soKS0+b3V0T2ZM
aW5lSnVtcFRhcmdldChwYyk7CisgICAgcGMgPSBDQUxMRUUoKS0+b3V0T2ZMaW5lSnVtcFRhcmdl
dChwYyk7CiAgICAgV0FTTV9FTkRfSU1QTCgpOwogfQogCkBAIC00NzcsNyArNDc0LDcgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsSW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFdhc206Okluc3RhbmMKICAgICBpZiAoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggPT0g
V2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpCiAgICAgICAgIFdBU01fVEhST1coV2FzbTo6
RXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwogCi0gICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlJiBjYWxsU2lnbmF0dXJlID0gQ09ERV9CTE9DSygpLT5zaWduYXR1cmUoc2lnbmF0dXJlSW5k
ZXgpOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgY2FsbFNpZ25hdHVyZSA9IENBTExFRSgp
LT5zaWduYXR1cmUoc2lnbmF0dXJlSW5kZXgpOwogICAgIGlmIChmdW5jdGlvbi5zaWduYXR1cmVJ
bmRleCAhPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxTaWduYXR1cmUpKQog
ICAgICAgICBXQVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CiAK
QEAgLTUxOSw3ICs1MTYsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxS
ZWYoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmNlKiBjYQogICAgIGlmIChjYWxs
ZWVJbnN0YW5jZSAhPSBjYWxsZXJJbnN0YW5jZSkKICAgICAgICAgY2FsbGVlSW5zdGFuY2UtPnNl
dENhY2hlZFN0YWNrTGltaXQoY2FsbGVySW5zdGFuY2UtPmNhY2hlZFN0YWNrTGltaXQoKSk7CiAK
LSAgICBBU1NFUlQoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChDT0RFX0JMT0NLKCktPnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCkpKTsK
KyAgICBBU1NFUlQoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChDQUxMRUUoKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUluZGV4KSkpOwogICAg
IFVOVVNFRF9QQVJBTShzaWduYXR1cmVJbmRleCk7CiAgICAgV0FTTV9DQUxMX1JFVFVSTihjYWxs
ZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFnKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447969</attachid>
            <date>2021-12-26 00:54:50 -0800</date>
            <delta_ts>2021-12-27 02:05:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203691-20211226005449.patch</filename>
            <type>text/plain</type>
            <size>69499</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZjZiNzYyNmZlMTU4MGI3YTUzNTFmZjFiYmQ5NzRkNTgyZTg3YzE1Li4yOTVmNDNmODhkYmIxNmI0
MzU5ZTUxN2YxNWZjOWUwMmI0YWQxMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAyMS0xMi0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIENvbnNpZGVyIG1lcmdpbmcgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sgYW5k
IFdhc206OkxMSW50Q2FsbGVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIG1lcmdlcyBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayBpbnRv
IFdhc206OkxMSW50Q2FsbGVlIHNpbmNlIGJvdGgKKyAgICAgICAgYXJlIG9uZS1vbi1vbmUgYW5k
IHdoYXQgdGhleSB3YW50IHRvIHJlcHJlc2VudCBhcmUgdGhlIHNhbWUuIFdlIGNoYW5nZQorICAg
ICAgICBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayB0byBXYXNtOjpGdW5jdGlvbkNvZGVCbG9ja0dl
bmVyYXRvciBzbyB0aGF0IHdlIGNhbgorICAgICAgICB1c2UgRml4ZWRWZWN0b3IgaW4gV2FzbTo6
TExJbnRDYWxsZWUgd2hpY2ggbWFrZXMgV2FzbTo6TExJbnRDYWxsZWUgc21hbGwsCisgICAgICAg
IGFuZCB0aGlzIGlzIHNpbWlsYXIgdG8gd2hhdCBKUyBzaWRlIGlzIGRvaW5nIChVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpkdW1wQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Qnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZSBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OkNhdGNoSW5mbzo6Q2F0Y2hJbmZvKToKKyAgICAgICAgKiBsbGlu
dC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L1dlYkFzc2VtYmx5
LmFzbToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludENhbGxlZTo6TExJbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludENh
bGxlZTo6b3V0T2ZMaW5lSnVtcE9mZnNldCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50Q2Fs
bGVlOjpvdXRPZkxpbmVKdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRDYWxs
ZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNt
Q2FsbGVlLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6bGxpbnRGdW5jdGlvbkNvZGVC
bG9jayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2tHZW5lcmF0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmNwcC4KKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3I6OnNldEluc3RydWN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206
OkZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6Om91dE9mTGluZUp1
bXBPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
cjo6YWRkU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OkZ1bmN0aW9uQ29kZUJsb2NrR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6
OnRpZXJVcENvdW50ZXIpOgorICAgICAgICAqIHdhc20vV2FzbUdlbmVyYXRvclRyYWl0cy5oOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cGFyc2VBbmRDb21waWxlQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdl
bmVyYXRvcjo6TExJbnRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRk
TG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRTd2l0Y2gpOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNt
TExJbnRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5oOgorICAgICAgICAqIHdhc20v
V2FzbUxMSW50VGllclVwQ291bnRlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFRpZXJV
cENvdW50ZXI6OkxMSW50VGllclVwQ291bnRlcik6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50
OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmRvV2FzbUNhbGxJ
bmRpcmVjdCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dhc21DYWxsUmVmKToKKwogMjAyMS0x
Mi0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBEZWZl
cnJlZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmsoKSByZXR1cm4gYSBUaWNrZXQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ4YjdhYzkxN2Y5YmY4NDUwNDk0ZDVhYzdh
NTQ4NTJiYTNhOWJmMy4uMGRkZWEwZDZkYjFiY2UyNDliZTA2YzVlMDJmOWY2MzQ4MjZjMWY2OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTI0NCw3ICsxMjQ0LDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICB3YXNtL1dh
c21FeGNlcHRpb25UeXBlLmgKICAgICB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAogICAg
IHdhc20vV2FzbUZvcm1hdC5oCi0gICAgd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorICAg
IHdhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgKICAgICB3YXNtL1dhc21IYW5k
bGVySW5mby5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUuaAogICAgIHdhc20vV2FzbUxMSW50
VGllclVwQ291bnRlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNjYzA4YjU2
OTg1Njg3Y2Q3ZTk0YTE4MDQ2M2U4MTc2OGVmYWRmNzEuLmExNmMyZjQ1MTQ3NWU5YmEzZjI3MjA3
MDgzYTBmNDgwMDE2MzE0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03Nzgs
NyArNzc4LDcgQEAKIAkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQyNTY2MDE1
RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29u
c2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NENBMzUw
MjIyNDE4MDEwMDgxNzc4OSAvKiBDYWNoZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0Q0EzNEYyMjFGMDM3OTAwODE3Nzg5IC8qIENh
Y2hlZEJ5dGVjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMTQ1MEZBMUMyMzU3QkRCRTAwOTNDRDREIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDNUFE
NkIyMkYzM0ZDMDAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0NTBGQTFDMjM1N0JEQkUw
MDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QzVBRDZCMjJGMzNGQzAwMEYxRkI4
MyAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDUwRkExRjIzNTdCRUM5MDA5M0NENEQg
LyogV2FzbUxMSW50VGllclVwQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ1MEZBMUUyMzU3QkVDNDAwOTNDRDREIC8qIFdhc21MTEludFRp
ZXJVcENvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1NzIyODUxNDM3RTE0
MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDVGRjJDODI0M0JCOUQ2MDA1NjlFNzEgLyogRUNNQU1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUZG
MkM3MjQzQkI5OUEwMDU2OUU3MSAvKiBFQ01BTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTU4LDExICszNTU4LDExIEBACiAJCTE0QzFG
OUNGMjJFQTUxRkQwMDQwQjE0NSAvKiBXYXNtLnJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucnVieTsgcGF0aCA9IFdhc20ucmI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzVBRDY1MjJGMTg2NkMwMEYxRkI4MyAv
KiBCeXRlY29kZUdlbmVyYXRvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzVBRDY2MjJGMTg2NkMw
MEYxRkI4MyAvKiBCeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTRDNUFENjcyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21GdW5jdGlvbkNvZGVCbG9jay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRnVuY3Rpb25Db2RlQmxvY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxNEM1QUQ2NzIyRjMzRkJGMDBGMUZCODMgLyogV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21GdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0QzVBRDY4MjJGMzNGQkYwMEYxRkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUxMSW50R2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRDNUFENjkyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTEludEdlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTExJbnRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTRDNUFENkEyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTEludFBsYW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUxMSW50UGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTE0QzVBRDZCMjJGMzNGQzAwMEYxRkI4MyAvKiBXYXNtRnVuY3Rpb25D
b2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QzVBRDZCMjJGMzNGQzAwMEYxRkI4MyAvKiBXYXNt
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzVB
RDZDMjJGMzNGQzAwMEYxRkI4MyAvKiBXYXNtTExJbnRQbGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21MTEludFBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDQTk1OEExNkFC
NTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUHJvcGVydHlBbmFseXplci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMTgsOCAr
NzIxOCw4IEBACiAJCQkJNTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25h
bEhhbmRsZXIuaCAqLywKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1h
dC5jcHAgKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAq
LywKLQkJCQkxNEM1QUQ2NzIyRjMzRkJGMDBGMUZCODMgLyogV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmNwcCAqLywKLQkJCQkxNEM1QUQ2QjIyRjMzRkMwMDBGMUZCODMgLyogV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmggKi8sCisJCQkJMTRDNUFENjcyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21GdW5jdGlv
bkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgKi8sCisJCQkJMTRDNUFENkIyMkYzM0ZDMDAwRjFGQjgz
IC8qIFdhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oICovLAogCQkJCTUzRjQwRThBMUQ1
OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQkxNDg3Q0UxNjIz
Nzc0MTAwMDA0NDQyOUMgLyogV2FzbUdlbmVyYXRvclRyYWl0cy5oICovLAogCQkJCUUzODM1MDA4
MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmNwcCAqLywKQEAgLTcyNTUsMTMgKzcyNTUs
MTMgQEAKIAkJCQlBREQ4RkE0MzFFQjMwNzcxMDBERjU0MkYgLyogV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmggKi8sCiAJCQkJNTMxMUJENDgxRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNw
cCAqLywKIAkJCQk1MzExQkQ0OTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCAqLywK
LQkJCQk1MjdFNkNFQTI3NzJCOUM1MDA1RTA3ODIgLyogV2FzbU9TUkVudHJ5UGxhbi5jcHAgKi8s
Ci0JCQkJNTI3RTZDRUIyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uaCAqLywK
IAkJCQk1M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5jcHAgKi8s
CiAJCQkJNTNDNkZFRUUxRThBREZBOTAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLywK
IAkJCQlFMzlEOEIyQzIzMDIxRTFFMDAyNjU4NTIgLyogV2FzbU9wZXJhdGlvbnMuY3BwICovLAog
CQkJCUUzOUQ4QjJEMjMwMjFFMUUwMDI2NTg1MiAvKiBXYXNtT3BlcmF0aW9ucy5oICovLAogCQkJ
CUUzQzY5NEIxMjMwMjY4NzMwMDZGQkU0MiAvKiBXYXNtT1NSRW50cnlEYXRhLmggKi8sCisJCQkJ
NTI3RTZDRUEyNzcyQjlDNTAwNUUwNzgyIC8qIFdhc21PU1JFbnRyeVBsYW4uY3BwICovLAorCQkJ
CTUyN0U2Q0VCMjc3MkI5QzUwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFuLmggKi8sCiAJCQkJ
QURCNkY2N0MxRTE1RDc1MDAwODJGMzg0IC8qIFdhc21QYWdlQ291bnQuY3BwICovLAogCQkJCTc5
Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBF
OEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKQEAgLTk3MTUsNyArOTcxNSw2
IEBACiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJU
aW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAx
IC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyN0U2Q0VDMjc3MkI5
Q0IwMDVFMDc4MiAvKiBXYXNtT1NSRW50cnlQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQy
RkQ5NDIwQjUyQkRFMDBGMDk0NDEgLyogQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0
YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDk1Nyw3ICsxMDk1Niw3IEBACiAJCQkJNzlEQUUy
N0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdhc21Gb3Jt
YXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NTBGQTFDMjM1N0JEQkUwMDkzQ0Q0RCAvKiBXYXNt
RnVuY3Rpb25Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NTBGQTFDMjM1N0JEQkUw
MDkzQ0Q0RCAvKiBXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhh
bmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTc5LDYgKzEwOTc4LDcgQEAKIAkJCQlF
MzlEOEIyRTIzMDIxRTI2MDAyNjU4NTIgLyogV2FzbU9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVBMyAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFM0M2OTRCMzIzMDI2ODc3MDA2RkJFNDIgLyogV2FzbU9TUkVudHJ5RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTI3RTZDRUMyNzcyQjlDQjAwNUUwNzgyIC8qIFdhc21PU1JFbnRy
eVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5Qjc1OTc2MURGQTRDNjAwMDUyMTc0QyAvKiBX
YXNtUGFnZUNvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0Y0MEU4RDFENTkwMUYyMDA5OUEx
QjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTMxMzc0QkQxRDVDRTY3NjAw
QUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA5ZjFlMGEwMDNiYzkxNTM4ZGJjZWM1NDBmNWRkNDU0ZTRlY2JjMTFlLi5mZjhi
YmU5YjJkMzkxZDRiNmRhNWExNDQxYmYwZDhkNzA2ZGM2OTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xMDgyLDcgKzEwODIsNyBAQCB3YXNtL1dhc21FbWJlZGRlci5oCiB3YXNt
L1dhc21FbnRyeVBsYW4uY3BwCiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCiB3YXNt
L1dhc21Gb3JtYXQuY3BwCi13YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5jcHAKK3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtR2xvYmFsLmNwcAogd2Fz
bS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNtL1dhc21JbmRleE9yTmFtZS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDM5
OGY1NWIzZTc1NjVkYjM2MjQ2ZjdlMWUyMTMxOTM5ZTAxMWE5NzYuLjViZjY3YjYxYjYyYmMxMmUw
NGMyZmE3Y2E5MzQzYzBjN2FkZTY3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1
ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxp
bmVzLmgiCkBAIC0zMjUsNyArMzI1LDcgQEAgdGVtcGxhdGUgY2xhc3MgQ29kZUJsb2NrQnl0ZWNv
ZGVEdW1wZXI8Q29kZUJsb2NrPjsKIAogbmFtZXNwYWNlIFdhc20gewogCi12b2lkIEJ5dGVjb2Rl
RHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIFByaW50U3RyZWFtJiBvdXQpCit2b2lkIEJ5
dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IqIGJsb2Nr
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIFByaW50U3RyZWFt
JiBvdXQpCiB7CiAgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQgPSAwOwogICAgIHNpemVfdCB3
aWRlMTZJbnN0cnVjdGlvbkNvdW50ID0gMDsKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIEJ5dGVj
b2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbgogCiB2b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQ29uc3RhbnRzKCkKIHsK
LSAgICBGdW5jdGlvbkNvZGVCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jaygpOworICAgIEZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yKiBibG9jayA9IHRoaXMtPmJsb2NrKCk7CiAgICAgaWYgKCFi
bG9jay0+Y29uc3RhbnRzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRoaXMtPm1fb3V0LnByaW50
ZigiXG5Db25zdGFudHM6XG4iKTsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC0zODUsNyAr
Mzg1LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcENvbnN0YW50cygpCiAKIENTdHJpbmcg
Qnl0ZWNvZGVEdW1wZXI6OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpIGNvbnN0
CiB7Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICBG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciogYmxvY2sgPSB0aGlzLT5ibG9jaygpOwogICAgIGF1
dG8gdmFsdWUgPSBmb3JtYXRDb25zdGFudChibG9jay0+Z2V0Q29uc3RhbnRUeXBlKGluZGV4KSwg
YmxvY2stPmdldENvbnN0YW50KGluZGV4KSk7CiAgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwg
IigiLCBWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCA4NzJmNmFiYTJjYmU1NGU5
NmE5NGM1MWFjNTQ3NTA2YTI2Y2Q3MzYxLi4yMTZlNmU2N2VhMGQyZGM3ZDkzYWE0NTEyOGU5YTA2
MmQzZDYzYjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuaApAQCAtMTI5LDE1ICsxMjksMTUgQEAgY2xhc3MgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXIgZmluYWwgOiBwdWJsaWMgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+IHsKIAogbmFtZXNwYWNl
IFdhc20gewogCi1jbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKK2NsYXNzIEZ1bmN0aW9uQ29kZUJs
b2NrR2VuZXJhdG9yOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogCi1jbGFzcyBCeXRlY29k
ZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBKU0M6OkJ5dGVjb2RlRHVtcGVyPEZ1bmN0aW9uQ29kZUJs
b2NrPiB7CitjbGFzcyBCeXRlY29kZUR1bXBlciBmaW5hbCA6IHB1YmxpYyBKU0M6OkJ5dGVjb2Rl
RHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgZHVtcEJsb2NrKEZ1bmN0aW9uQ29kZUJsb2NrKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBQcmludFN0cmVhbSYgb3V0KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wQmxvY2soRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3IqLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByaW50U3Ry
ZWFtJiBvdXQpOwogCiBwcml2YXRlOgotICAgIHVzaW5nIEpTQzo6Qnl0ZWNvZGVEdW1wZXI8RnVu
Y3Rpb25Db2RlQmxvY2s+OjpCeXRlY29kZUR1bXBlcjsKKyAgICB1c2luZyBKU0M6OkJ5dGVjb2Rl
RHVtcGVyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPjo6Qnl0ZWNvZGVEdW1wZXI7CiAKICAg
ICB2b2lkIGR1bXBDb25zdGFudHMoKTsKICAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMGU5YTkzYjI5NWNkY2JmZTU4MjQw
MGFhYTJkOTI3NzFiNzIzNGQ2Ny4uNDkxZWE0NTI3ZmRmNjZiMmIxYmMzMWQ2OWY1NTVlN2U1ZmYz
ZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCkBAIC01NDUsOCArNTQ1LDggQEAgQ2F0Y2hJbmZvOjpDYXRjaEluZm8oY29uc3Qg
V2FzbTo6SGFuZGxlckluZm8qIGhhbmRsZXIsIGNvbnN0IFdhc206OkNhbGxlZSogY2FsbGUKICAg
ICBpZiAobV92YWxpZCkgewogICAgICAgICBtX3R5cGUgPSBIYW5kbGVyVHlwZTo6Q2F0Y2g7CiAg
ICAgICAgIG1fbmF0aXZlQ29kZSA9IGhhbmRsZXItPm1fbmF0aXZlQ29kZTsKLSAgICAgICAgaWYg
KGNvbnN0IFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUtPmxsaW50
RnVuY3Rpb25Db2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1fY2F0Y2hQQ0ZvckludGVycHJldGVy
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChoYW5kbGVyLT5tX3RhcmdldCkucHRyKCk7
CisgICAgICAgIGlmIChjYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpID09IFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6TExJbnRNb2RlKQorICAgICAgICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIg
PSBzdGF0aWNfY2FzdDxjb25zdCBXYXNtOjpMTEludENhbGxlZSo+KGNhbGxlZSktPmluc3RydWN0
aW9ucygpLmF0KGhhbmRsZXItPm1fdGFyZ2V0KS5wdHIoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9jYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSBudWxscHRyOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAK
aW5kZXggMzk3YjA1ZDg2YTA3MTJhN2EzOGNhMDIxZDIzMmNiMmQ5ZGI1MWI5My4uMmY5MTU5Njg3
YzNjY2U4ZWQ3ZDI0NDA3Mjg1OWU3OGJmNThjYmFlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1
ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgotI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgpAQCAtOTMsNyArOTMsMTEgQEAgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yIHsKICAgICB1c2luZyBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZUZpeGVkVmVj
dG9yID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+OwogICAgIHVzaW5nIFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlRml4ZWRWZWN0b3IgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZT47CiAgICAgdXNpbmcgSW50MzJGaXhlZFZlY3RvciA9IEZpeGVkVmVjdG9y
PGludDMyX3Q+OworICAgIHVzaW5nIEludDY0Rml4ZWRWZWN0b3IgPSBGaXhlZFZlY3Rvcjx1aW50
NjRfdD47CiAgICAgdXNpbmcgVm9pZFBvaW50ZXJGaXhlZFZlY3RvciA9IEZpeGVkVmVjdG9yPHZv
aWQqPjsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgdXNpbmcgV2FzbUp1bXBUYWJsZUZp
eGVkVmVjdG9yID0gRml4ZWRWZWN0b3I8V2FzbTo6SnVtcFRhYmxlPjsKKyNlbmRpZgogCiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QqIGR1bW15KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQppbmRleCA1M2EyMDIwYWM4OGY1MmIwYjhmODg3
MTcyODE1MTJmNGViNTU0ODRmLi5mNTQ3NGRmMDViYTQ2ZTZjNzRmNjg0NWY2YWUyYTI4OWY1NzBj
ZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHku
YXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KQEAg
LTExMyw3ICsxMTMsNyBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQs
IGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3MwCi0gICAgYmFkZGlzIGluY3Jl
bWVudCwgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fdGllclVwQ291bnRlciArIFdhc206OkxM
SW50VGllclVwQ291bnRlcjo6bV9jb3VudGVyW3dzMF0sIC5jb250aW51ZQorICAgIGJhZGRpcyBp
bmNyZW1lbnQsIFdhc206OkxMSW50Q2FsbGVlOjptX3RpZXJVcENvdW50ZXIgKyBXYXNtOjpMTElu
dFRpZXJVcENvdW50ZXI6Om1fY291bnRlclt3czBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQog
ICAgIC5jb250aW51ZToKIGVuZApAQCAtMjc3LDcgKzI3Nyw3IEBAIGVuZAogCiBtYWNybyByZXN0
b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgd3Mx
Ci0gICAgbG9hZGkgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dz
MV0sIHdzMQorICAgIGxvYWRpIFdhc206OkxMSW50Q2FsbGVlOjptX251bUNhbGxlZUxvY2Fsc1t3
czFdLCB3czEKICAgICBsc2hpZnRwIDMsIHdzMQogICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwsIHdzMQogICAgIHN1YnAgY2ZyLCB3czEsIHNwCkBAIC0yOTcsNyArMjk3LDcg
QEAgbWFjcm8gd2FzbVByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBs
b2FkV2FzbUluc3RhbmNlKQogICAgIGNvZGVCbG9ja1NldHRlcih3czApCiAKICAgICAjIEdldCBu
ZXcgc3AgaW4gd3MxIGFuZCBjaGVjayBzdGFjayBoZWlnaHQuCi0gICAgbG9hZGkgV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2s6Om1fbnVtQ2FsbGVlTG9jYWxzW3dzMF0sIHdzMQorICAgIGxvYWRpIFdh
c206OkxMSW50Q2FsbGVlOjptX251bUNhbGxlZUxvY2Fsc1t3czBdLCB3czEKICAgICBsc2hpZnRw
IDMsIHdzMQogICAgIGFkZHAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwsIHdzMQogICAg
IHN1YnAgY2ZyLCB3czEsIHdzMQpAQCAtMzIyLDEwICszMjIsMTAgQEAgbWFjcm8gd2FzbVByb2xv
Z3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVyLCBsb2FkV2FzbUluc3RhbmNlKQog
ICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JQcm9sb2d1ZSh3czApCiAKICAgICAjIFNldCB1cCB0aGUg
UEMuCi0gICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlclt3czBdLCBQQgorICAgIGxvYWRwIFdhc206OkxMSW50Q2FsbGVlOjptX2luc3RydWN0
aW9uc1Jhd1BvaW50ZXJbd3MwXSwgUEIKICAgICBtb3ZlIDAsIFBDCiAKLSAgICBsb2FkaSBXYXNt
OjpGdW5jdGlvbkNvZGVCbG9jazo6bV9udW1WYXJzW3dzMF0sIHdzMQorICAgIGxvYWRpIFdhc206
OkxMSW50Q2FsbGVlOjptX251bVZhcnNbd3MwXSwgd3MxCiAgICAgc3ViaSBOdW1iZXJPZldhc21B
cmd1bWVudHMgKyBDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMsIHdzMQogICAgIGJ0
aXogd3MxLCAuemVyb0luaXRpYWxpemVMb2NhbHNEb25lCiAgICAgbmVnaSB3czEKQEAgLTM4OSw5
ICszODksOSBAQCBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKGN0eCwgaW5kZXgsIGxvYWRl
cikKICAgICAgICAgam1wIC5kb25lCiAgICAgLmNvbnN0YW50OgogICAgICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDYKLSAgICAgICAgbG9hZHAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1f
Y29uc3RhbnRzICsgVmVjdG9yQnVmZmVyT2Zmc2V0W3Q2XSwgdDYKKyAgICAgICAgbG9hZHAgV2Fz
bTo6TExJbnRDYWxsZWU6Om1fY29uc3RhbnRzW3Q2XSwgdDYKICAgICAgICAgc3VicCBmaXJzdENv
bnN0YW50SW5kZXgsIGluZGV4Ci0gICAgICAgIGxvYWRlcihbdDYsIGluZGV4LCA4XSkKKyAgICAg
ICAgbG9hZGVyKChjb25zdGV4cHIgKEludDY0Rml4ZWRWZWN0b3I6OlN0b3JhZ2U6Om9mZnNldE9m
RGF0YSgpKSlbdDYsIGluZGV4LCA4XSkKICAgICAuZG9uZToKICAgICBlbmQpCiBlbmQKQEAgLTUw
Nyw3ICs1MDcsNiBAQCBlbmQKIG1hY3JvIHdhc21Db2RlQmxvY2tHZXR0ZXIodGFyZ2V0UmVnaXN0
ZXIpCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHRhcmdldFJlZ2lzdGVyCiAgICAgYW5kcCB+Mywg
dGFyZ2V0UmVnaXN0ZXIKLSAgICBsb2FkcCBXYXNtOjpMTEludENhbGxlZTo6bV9jb2RlQmxvY2tb
dGFyZ2V0UmVnaXN0ZXJdLCB0YXJnZXRSZWdpc3RlcgogZW5kCiAKIG9wKHdhc21fZnVuY3Rpb25f
cHJvbG9ndWUsIG1hY3JvICgpCkBAIC02MjEsNyArNjIwLDcgQEAgX3dhc21fZW50ZXI6CiAgICAg
dHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQyLCAweGRl
YWQwMGUxKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MiAgICAgICAgICAgICAgICAvLyB0
MjxDb2RlQmxvY2s+ID0gY2ZyLkNvZGVCbG9jawotICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjptX251bVZhcnNbdDJdLCB0MiAgICAgIC8vIHQyPHNpemVfdD4gPSB0MjxDb2RlQmxv
Y2s+Lm1fbnVtVmFycworICAgIGxvYWRpIFdhc206OkxMSW50Q2FsbGVlOjptX251bVZhcnNbdDJd
LCB0MiAgICAgIC8vIHQyPHNpemVfdD4gPSB0MjxDb2RlQmxvY2s+Lm1fbnVtVmFycwogICAgIHN1
YnEgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzICsgTnVtYmVyT2ZXYXNtQXJndW1l
bnRzLCB0MgogICAgIGJ0aXogdDIsIC5vcEVudGVyRG9uZQogICAgIG1vdmUgY2ZyLCB0MQpAQCAt
NjcwLDI2ICs2NjksMjYgQEAgd2FzbU9wKHN3aXRjaCwgV2FzbVN3aXRjaCwgbWFjcm8oY3R4KQog
ICAgIHdnZXR1KGN0eCwgbV90YWJsZUluZGV4LCB0MSkKIAogICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCB0MgotICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2p1bXBUYWJsZXMg
KyBWZWN0b3JCdWZmZXJPZmZzZXRbdDJdLCB0MgotICAgIG11bGkgc2l6ZW9mIFdhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjpKdW1wVGFibGUsIHQxCisgICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6
Om1fanVtcFRhYmxlc1t0Ml0sIHQyCisgICAgbXVsaSBzaXplb2YgV2FzbTo6SnVtcFRhYmxlLCB0
MQogICAgIGFkZHAgdDEsIHQyCiAKLSAgICBsb2FkaSBWZWN0b3JTaXplT2Zmc2V0W3QyXSwgdDMK
KyAgICBsb2FkcCAoY29uc3RleHByIChXYXNtSnVtcFRhYmxlRml4ZWRWZWN0b3I6OlN0b3JhZ2U6
Om9mZnNldE9mRGF0YSgpKSlbdDJdLCB0MgorICAgIGxvYWRpIFdhc206Okp1bXBUYWJsZTo6U3Rv
cmFnZTo6bV9zaXplW3QyXSwgdDMKICAgICBiaWIgdDAsIHQzLCAuaW5Cb3VuZHMKIAogLm91dE9m
Qm91bmRzOgogICAgIHN1YmkgdDMsIDEsIHQwCiAKIC5pbkJvdW5kczoKLSAgICBsb2FkcCBWZWN0
b3JCdWZmZXJPZmZzZXRbdDJdLCB0MgotICAgIG11bGkgc2l6ZW9mIFdhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpKdW1wVGFibGVFbnRyeSwgdDAKKyAgICBtdWxpIHNpemVvZiBXYXNtOjpKdW1wVGFi
bGVFbnRyeSwgdDAKIAotICAgIGxvYWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFi
bGVFbnRyeTo6c3RhcnRPZmZzZXRbdDIsIHQwXSwgdDEKLSAgICBsb2FkaSBXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6SnVtcFRhYmxlRW50cnk6OmRyb3BDb3VudFt0MiwgdDBdLCB0MwotICAgIGxv
YWRpIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6a2VlcENvdW50W3Qy
LCB0MF0sIHQ1CisgICAgbG9hZGkgKGNvbnN0ZXhwciAoV2FzbTo6SnVtcFRhYmxlOjpTdG9yYWdl
OjpvZmZzZXRPZkRhdGEoKSkpICsgV2FzbTo6SnVtcFRhYmxlRW50cnk6OnN0YXJ0T2Zmc2V0W3Qy
LCB0MF0sIHQxCisgICAgbG9hZGkgKGNvbnN0ZXhwciAoV2FzbTo6SnVtcFRhYmxlOjpTdG9yYWdl
OjpvZmZzZXRPZkRhdGEoKSkpICsgV2FzbTo6SnVtcFRhYmxlRW50cnk6OmRyb3BDb3VudFt0Miwg
dDBdLCB0MworICAgIGxvYWRpIChjb25zdGV4cHIgKFdhc206Okp1bXBUYWJsZTo6U3RvcmFnZTo6
b2Zmc2V0T2ZEYXRhKCkpKSArIFdhc206Okp1bXBUYWJsZUVudHJ5OjprZWVwQ291bnRbdDIsIHQw
XSwgdDUKICAgICBkcm9wS2VlcCh0MSwgdDMsIHQ1KQogCi0gICAgbG9hZGlzIFdhc206OkZ1bmN0
aW9uQ29kZUJsb2NrOjpKdW1wVGFibGVFbnRyeTo6dGFyZ2V0W3QyLCB0MF0sIHQzCisgICAgbG9h
ZGlzIChjb25zdGV4cHIgKFdhc206Okp1bXBUYWJsZTo6U3RvcmFnZTo6b2Zmc2V0T2ZEYXRhKCkp
KSArIFdhc206Okp1bXBUYWJsZUVudHJ5Ojp0YXJnZXRbdDIsIHQwXSwgdDMKICAgICBhc3NlcnQo
bWFjcm8ob2spIGJ0aW56IHQzLCAub2sgZW5kKQogICAgIHdhc21EaXNwYXRjaEluZGlyZWN0KHQz
KQogZW5kKQpAQCAtODMzLDcgKzgzMiw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yV2FzbUNhbGwoY3R4
LCBzbG93UGF0aCwgc3RvcmVXYXNtSW5zdGFuY2UpCiAgICAgICAgICAgICBtb3ZlIFBCLCB3YXNt
SW5zdGFuY2UKICAgICAgICAgICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
VGFnT2Zmc2V0W2Nmcl0sIFBDCiAgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIK
LSAgICAgICAgICAgIGxvYWRwIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrOjptX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXJbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6
Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAKICAgICAgICAgICAgIHdnZXR1KGN0
eCwgbV9zdGFja09mZnNldCwgd3MxKQogICAgICAgICAgICAgbHNoaWZ0aSAzLCB3czEKQEAgLTI4
NTMsNyArMjg1Miw3IEBAIG1hY3JvIGNvbW1vbkNhdGNoSW1wbChjdHgsIHN0b3JlV2FzbUluc3Rh
bmNlKQogICAgIHJlbG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZSh3YXNtSW5zdGFuY2Us
IHdzMCwgd3MxKQogCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCi0gICAgbG9hZHAgV2Fz
bTo6RnVuY3Rpb25Db2RlQmxvY2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCisg
ICAgbG9hZHAgV2FzbTo6TExJbnRDYWxsZWU6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0s
IFBCCiAgICAgbG9hZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCiAg
ICAgc3VicCBQQiwgUEMKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNw
cAppbmRleCBhMDM2M2RhNmU4MmM3ZGYwOTA0OWM1ZmFhNjAyMWY5ZGJlMTdjYTcyLi5kOWIzZTk4
MzlmOTk3ZDZmYzMzMGUxMjM4YTJlNTE2ZjJmYTRiZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAtNzYsMjEgKzc2LDI4IEBAIEpJVENhbGxlZTo6SklU
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQm
JiBlbnRyeXBvCiB7CiB9CiAKLUxMSW50Q2FsbGVlOjpMTEludENhbGxlZShzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IGNvZGVCbG9jaywgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKK0xMSW50Q2FsbGVlOjpM
TEludENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJhdG9yLCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
KQogICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlLCBpbmRleCwg
V1RGTW92ZShuYW1lKSkKLSAgICAsIG1fY29kZUJsb2NrKFdURk1vdmUoY29kZUJsb2NrKSkKKyAg
ICAsIG1fZnVuY3Rpb25JbmRleChnZW5lcmF0b3IubV9mdW5jdGlvbkluZGV4KQorICAgICwgbV9u
dW1WYXJzKGdlbmVyYXRvci5tX251bVZhcnMpCisgICAgLCBtX251bUNhbGxlZUxvY2FscyhnZW5l
cmF0b3IubV9udW1DYWxsZWVMb2NhbHMpCisgICAgLCBtX251bUFyZ3VtZW50cyhnZW5lcmF0b3Iu
bV9udW1Bcmd1bWVudHMpCisgICAgLCBtX2NvbnN0YW50VHlwZXMoV1RGTW92ZShnZW5lcmF0b3Iu
bV9jb25zdGFudFR5cGVzKSkKKyAgICAsIG1fY29uc3RhbnRzKFdURk1vdmUoZ2VuZXJhdG9yLm1f
Y29uc3RhbnRzKSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKFdURk1vdmUoZ2VuZXJhdG9yLm1faW5z
dHJ1Y3Rpb25zKSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcihnZW5lcmF0b3IubV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKQorICAgICwgbV9qdW1wVGFyZ2V0cyhXVEZNb3ZlKGdlbmVy
YXRvci5tX2p1bXBUYXJnZXRzKSkKKyAgICAsIG1fc2lnbmF0dXJlcyhXVEZNb3ZlKGdlbmVyYXRv
ci5tX3NpZ25hdHVyZXMpKQorICAgICwgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyhXVEZNb3ZlKGdl
bmVyYXRvci5tX291dE9mTGluZUp1bXBUYXJnZXRzKSkKKyAgICAsIG1fdGllclVwQ291bnRlcihX
VEZNb3ZlKGdlbmVyYXRvci5tX3RpZXJVcENvdW50ZXIpKQorICAgICwgbV9qdW1wVGFibGVzKFdU
Rk1vdmUoZ2VuZXJhdG9yLm1fanVtcFRhYmxlcykpCiB7Ci0gICAgbGlua0V4Y2VwdGlvbkhhbmRs
ZXJzKCk7Ci19Ci0KLXZvaWQgTExJbnRDYWxsZWU6OmxpbmtFeGNlcHRpb25IYW5kbGVycygpCi17
Ci0gICAgaWYgKHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkpIHsKKyAgICBpZiAoc2l6ZV90IGNvdW50ID0gZ2VuZXJhdG9yLm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzID0gRml4ZWRW
ZWN0b3I8SGFuZGxlckluZm8+KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1
bmxpbmtlZEhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IGdlbmVy
YXRvci5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rp
b24gPSAqbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci5tX3Rh
cmdldCkucHRyKCk7CisgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICptX2luc3RydWN0
aW9ucy0+YXQodW5saW5rZWRIYW5kbGVyLm1fdGFyZ2V0KS5wdHIoKTsKICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHRhcmdldDsKICAgICAgICAg
ICAgIGlmICh1bmxpbmtlZEhhbmRsZXIubV90eXBlID09IEhhbmRsZXJUeXBlOjpDYXRjaCkKICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPihMTEludDo6aGFuZGxlV2FzbUNhdGNoKGluc3RydWN0aW9uLndpZHRoPFdhc21PcGNv
ZGVUcmFpdHM+KCkpLmNvZGUoKSk7CkBAIC0xMzcsNiArMTQ0LDE5IEBAIHN0ZDo6dHVwbGU8dm9p
ZCosIHZvaWQqPiBMTEludENhbGxlZTo6cmFuZ2UoKSBjb25zdAogICAgIHJldHVybiB7IG51bGxw
dHIsIG51bGxwdHIgfTsKIH0KIAorSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBMTEludENhbGxl
ZTo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2Rl
T2Zmc2V0KQoreworICAgIEFTU0VSVChtX291dE9mTGluZUp1bXBUYXJnZXRzLmNvbnRhaW5zKGJ5
dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKK30KKworY29uc3QgSW5zdHJ1Y3Rpb24qIExMSW50Q2FsbGVlOjpvdXRP
ZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKK3sKKyAgICBpbnQgb2Zmc2V0
ID0gYnl0ZWNvZGVPZmZzZXQocGMpOworICAgIGludCB0YXJnZXQgPSBvdXRPZkxpbmVKdW1wT2Zm
c2V0KG9mZnNldCk7CisgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLT5hdChvZmZzZXQgKyB0YXJn
ZXQpLnB0cigpOworfQorCiB2b2lkIE9wdGltaXppbmdKSVRDYWxsZWU6OmxpbmtFeGNlcHRpb25I
YW5kbGVycyhWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gdW5saW5rZWRFeGNlcHRpb25IYW5k
bGVycywgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiBl
eGNlcHRpb25IYW5kbGVyTG9jYXRpb25zKQogewogICAgIHNpemVfdCBjb3VudCA9IHVubGlua2Vk
RXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5oCmluZGV4IGE0NmMzZGI2MmQzMzQzOTQ0MzQ4OTUxODRhOTNlYWExY2VmMzFiMjYuLjg3
YTg3Y2U0MGYxZmYyOGZkM2M3MTgzNDg5YmMxMmNiNTRiZjk1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNp
bmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
V2FzbUhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCiAjaW5jbHVk
ZSAiV2FzbUxMSW50VGllclVwQ291bnRlci5oIgpAQCAtNjUsOCArNjUsNiBAQCBjbGFzcyBDYWxs
ZWUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q2FsbGVlPiB7CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRnVuY3Rpb25Db2RlQmxvY2sq
IGxsaW50RnVuY3Rpb25Db2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9Ci0KIHBy
b3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
LCBzaXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7
CkBAIC0yMTQsOSArMjEyLDkgQEAgY2xhc3MgTExJbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2Fs
bGVlIHsKICAgICBmcmllbmQgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxMTEludENhbGxlZT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gY29kZUJsb2NrLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorICAgIHN0YXRpYyBSZWY8TExJbnRDYWxsZWU+
IGNyZWF0ZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYgZ2VuZXJhdG9yLCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTExJbnRDYWxsZWUoV1RGTW92ZShj
b2RlQmxvY2spLCBpbmRleCwgV1RGTW92ZShuYW1lKSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBMTEludENhbGxlZShnZW5lcmF0b3IsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAg
ICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRFbnRyeXBvaW50KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KTsKQEAgLTIyNCw2ICsyMjIsNDkgQEAgY2xh
c3MgTExJbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGZpbmFsOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgpIGNv
bnN0IGZpbmFsOwogCisgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25JbmRleDsgfQorICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVZhcnM7IH0KKyAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUNhbGxlZUxvY2FsczsgfQorICAgIHVpbnQzMl90IG51bUFyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9CisgICAgY29uc3QgRml4ZWRWZWN0b3I8VHlw
ZT4mIGNvbnN0YW50VHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50VHlwZXM7IH0KKyAg
ICBjb25zdCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzOyB9CisgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
cygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQorCisgICAgQUxXQVlTX0lOTElO
RSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgQUxXQVlTX0lOTElO
RSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpOwor
ICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07Cisg
ICAgfQorCisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBudW1iZXJPZkp1bXBUYXJnZXRz
KCkgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KKyAgICBJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGxhc3RKdW1wVGFyZ2V0KCkgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0KCk7
IH0KKworICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IElu
c3RydWN0aW9uKik7CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvdXRPZkxpbmVKdW1w
T2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQpOworICAgIEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVm
JiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uLm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW5zdHJ1Y3Rpb25T
dHJlYW06Ok9mZnNldCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcmV0dXJuQWRk
cmVzcykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gbV9p
bnN0cnVjdGlvbnMtPmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlv
bnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIG1faW5zdHJ1Y3Rpb25zLT5zaXpl
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0aW9u
c0JlZ2luICYmIHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1
cm4gcmV0dXJuQWRkcmVzcyAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKworICAgIExMSW50
VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fdGllclVwQ291bnRlcjsg
fQorCisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKm1fc2lnbmF0dXJlc1tpbmRleF07CisgICAgfQorCisg
ICAgY29uc3QgSnVtcFRhYmxlJiBqdW1wVGFibGUodW5zaWduZWQgdGFibGVJbmRleCkgY29uc3Q7
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKCkgY29uc3Q7CisKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfQjNKSVQpCiAgICAgSklUQ2FsbGVlKiByZXBsYWNlbWVudChNZW1vcnlNb2Rl
IG1vZGUpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnRzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
XS5nZXQoKTsgfQogICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQoUmVmPEpJVENhbGxlZT4mJiByZXBs
YWNlbWVudCwgTWVtb3J5TW9kZSBtb2RlKQpAQCAtMjM2LDIxICsyNzcsMzQgQEAgY2xhc3MgTExJ
bnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKICAgICB7CiAgICAgICAgIG1fb3NyRW50
cnlDYWxsZWVzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXSA9IFdURk1vdmUob3NyRW50cnlD
YWxsZWUpOwogICAgIH0KLQotICAgIExMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlcigp
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT50aWVyVXBDb3VudGVyKCk7IH0KLSAgICBGdW5jdGlvbkNv
ZGVCbG9jayogbGxpbnRGdW5jdGlvbkNvZGVCbG9jaygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y29kZUJsb2NrLmdldCgpOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBMTEludENhbGxlZShz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CisgICAgdXNpbmcgT3V0T2ZM
aW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47
CiAKLSAgICB2b2lkIGxpbmtFeGNlcHRpb25IYW5kbGVycygpOworcHJpdmF0ZToKKyAgICBMTElu
dENhbGxlZShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvciYsIHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKKworICAgIHVpbnQzMl90
IG1fZnVuY3Rpb25JbmRleCB7IDAgfTsKKworICAgIC8vIFVzZWQgZm9yIHRoZSBudW1iZXIgb2Yg
V2ViQXNzZW1ibHkgbG9jYWxzLCBhcyBpbiBodHRwczovL3dlYmFzc2VtYmx5LmdpdGh1Yi5pby9z
cGVjL2NvcmUvc3ludGF4L21vZHVsZXMuaHRtbCNzeW50YXgtbG9jYWwKKyAgICB1bnNpZ25lZCBt
X251bVZhcnMgeyAwIH07CisgICAgLy8gTnVtYmVyIG9mIFZpcnR1YWxSZWdpc3Rlci4gVGhlIG5h
bWluZyBpcyB1bmZvcnR1bmF0ZSwgYnV0IGhhcyB0byBtYXRjaCBVbmxpbmtlZENvZGVCbG9jawor
ICAgIHVuc2lnbmVkIG1fbnVtQ2FsbGVlTG9jYWxzIHsgMCB9OworICAgIHVpbnQzMl90IG1fbnVt
QXJndW1lbnRzIHsgMCB9OworICAgIEZpeGVkVmVjdG9yPFR5cGU+IG1fY29uc3RhbnRUeXBlczsK
KyAgICBGaXhlZFZlY3Rvcjx1aW50NjRfdD4gbV9jb25zdGFudHM7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKKyAgICBjb25zdCB2b2lkKiBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07CisgICAgRml4ZWRWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKKyAgICBGaXhlZFZlY3Rvcjxj
b25zdCBTaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7CisgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMg
bV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKKyAgICBMTEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBD
b3VudGVyOworICAgIEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQogICAgIFJlZlB0cjxKSVRDYWxsZWU+IG1fcmVwbGFj
ZW1lbnRzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOwogICAgIFJlZlB0cjxPU1JFbnRyeUNh
bGxlZT4gbV9vc3JFbnRyeUNhbGxlZXNbV2FzbTo6TnVtYmVyT2ZNZW1vcnlNb2Rlc107CiAjZW5k
aWYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fZW50cnlwb2ludDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjA2ODYyMGNjN2Q5
ZTVlNzc4ZWJiYTMyOTNlOWZiMjE3NmYzNDM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0KLSNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewotCi12b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpzZXRJbnN0cnVj
dGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlvbnMpCi17
Ci0gICAgbV9pbnN0cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3RydWN0aW9ucyk7Ci0gICAgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyID0gbV9pbnN0cnVjdGlvbnMtPnJhd1BvaW50ZXIoKTsKLX0KLQot
dm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBpbnQgdGFyZ2V0KQotewotICAgIFJFTEVB
U0VfQVNTRVJUKHRhcmdldCk7Ci0gICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5zZXQoYnl0ZWNv
ZGVPZmZzZXQsIHRhcmdldCk7Ci19Ci0KLUluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgRnVuY3Rp
b25Db2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5j
b250YWlucyhieXRlY29kZU9mZnNldCkpOwotICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJn
ZXRzLmdldChieXRlY29kZU9mZnNldCk7Ci19Ci0KLWNvbnN0IEluc3RydWN0aW9uKiBGdW5jdGlv
bkNvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCi17
Ci0gICAgaW50IG9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0KHBjKTsKLSAgICBpbnQgdGFyZ2V0ID0g
b3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOwotICAgIHJldHVybiBtX2luc3RydWN0aW9ucy0+
YXQob2Zmc2V0ICsgdGFyZ2V0KS5wdHIoKTsKLX0KLQotdW5zaWduZWQgRnVuY3Rpb25Db2RlQmxv
Y2s6OmFkZFNpZ25hdHVyZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKLXsKLSAgICB1bnNp
Z25lZCBpbmRleCA9IG1fc2lnbmF0dXJlcy5zaXplKCk7Ci0gICAgbV9zaWduYXR1cmVzLmFwcGVu
ZCgmc2lnbmF0dXJlKTsKLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWNvbnN0IFNpZ25hdHVyZSYg
RnVuY3Rpb25Db2RlQmxvY2s6OnNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gKm1fc2lnbmF0dXJlc1tpbmRleF07Ci19Ci0KLWF1dG8gRnVuY3Rpb25Db2RlQmxv
Y2s6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKSAtPiBKdW1wVGFibGUmCi17
Ci0gICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVyT2ZFbnRyaWVzKSk7Ci0g
ICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7Ci19Ci0KLWF1dG8gRnVuY3Rpb25Db2RlQmxv
Y2s6Omp1bXBUYWJsZSh1bnNpZ25lZCB0YWJsZUluZGV4KSBjb25zdCAtPiBjb25zdCBKdW1wVGFi
bGUmCi17Ci0gICAgcmV0dXJuIG1fanVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLX0KLQotdW5zaWdu
ZWQgRnVuY3Rpb25Db2RlQmxvY2s6Om51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fanVtcFRhYmxlcy5zaXplKCk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MmYzZTY0MTMyYzE3Yjk1MTFhM2ViZWE2YzYwZDAwMjRiMzI3YjUyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5j
bHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgotI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCi0j
aW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCIKLSNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8uaCIKLSNpbmNsdWRlICJXYXNtTExJ
bnRUaWVyVXBDb3VudGVyLmgiCi0jaW5jbHVkZSAiV2FzbU9wcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgSklUQ29kZTsKLWNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVHJhaXRzPgotY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlOwotCi1uYW1lc3Bh
Y2UgV2FzbSB7Ci0KLWNsYXNzIFNpZ25hdHVyZTsKLXN0cnVjdCBHZW5lcmF0b3JUcmFpdHM7Ci0K
LS8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIHRoaXMgd2l0aCBMTEludENhbGxlZQotLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzY5MQotY2xhc3MgRnVuY3Rp
b25Db2RlQmxvY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEZ1bmN0aW9uQ29kZUJsb2NrKTsKLQotICAgIGZyaWVuZCBCeXRlY29kZUdl
bmVyYXRvckJhc2U8R2VuZXJhdG9yVHJhaXRzPjsKLSAgICBmcmllbmQgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwotICAgIGZyaWVuZCBjbGFzcyBMTEludEdlbmVyYXRvcjsKLQotcHVibGljOgotICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCi0gICAgICAgIDogbV9m
dW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW5kZXg7IH0KLSAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9Ci0gICAgdW5zaWdu
ZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0K
LSAgICB1aW50MzJfdCBudW1Bcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUFyZ3VtZW50
czsgfQotICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgY29uc3RhbnRUeXBlcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRUeXBlczsgfQotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9Ci0gICAgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsg
fQotCi0gICAgdm9pZCBzZXROdW1WYXJzKHVuc2lnbmVkIG51bVZhcnMpIHsgbV9udW1WYXJzID0g
bnVtVmFyczsgfQotICAgIHZvaWQgc2V0TnVtQ2FsbGVlTG9jYWxzKHVuc2lnbmVkIG51bUNhbGxl
ZUxvY2FscykgeyBtX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsgfQotCi0gICAg
QUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9Ci0gICAg
QUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRXYXNtQnl0
ZWNvZGVzKCkpOwotICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVf
cHRyPEluc3RydWN0aW9uU3RyZWFtPik7Ci0gICAgdm9pZCBhZGRKdW1wVGFyZ2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQganVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRzLmFwcGVuZChqdW1w
VGFyZ2V0KTsgfQotICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbnVtYmVyT2ZKdW1wVGFy
Z2V0cygpIHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgSW5zdHJ1Y3Rpb25T
dHJlYW06Ok9mZnNldCBsYXN0SnVtcFRhcmdldCgpIHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFz
dCgpOyB9Ci0KLSAgICB2b2lkIGFkZE91dE9mTGluZUp1bXBUYXJnZXQoSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCwgaW50IHRhcmdldCk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG91dE9mTGlu
ZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICBJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7Ci0g
ICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwotICAgIH0KLQotICAg
IGlubGluZSBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgY29uc3QgYXV0byogaW5z
dHJ1Y3Rpb25zQmVnaW4gPSBtX2luc3RydWN0aW9ucy0+YXQoMCkucHRyKCk7Ci0gICAgICAgIGNv
bnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1
Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsg
bV9pbnN0cnVjdGlvbnMtPnNpemUoKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFk
ZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9u
c0VuZCk7Ci0gICAgICAgIHJldHVybiByZXR1cm5BZGRyZXNzIC0gaW5zdHJ1Y3Rpb25zQmVnaW47
Ci0gICAgfQotCi0gICAgTExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBDb3VudGVyKCkgeyByZXR1
cm4gbV90aWVyVXBDb3VudGVyOyB9Ci0KLSAgICB1bnNpZ25lZCBhZGRTaWduYXR1cmUoY29uc3Qg
U2lnbmF0dXJlJik7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUodW5zaWduZWQgaW5k
ZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IEp1bXBUYWJsZUVudHJ5IHsKLSAgICAgICAgaW50IHRh
cmdldCB7IDAgfTsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVuc2ln
bmVkIGRyb3BDb3VudDsKLSAgICAgICAgdW5zaWduZWQga2VlcENvdW50OwotICAgIH07Ci0KLSAg
ICB1c2luZyBKdW1wVGFibGUgPSBWZWN0b3I8SnVtcFRhYmxlRW50cnk+OwotICAgIEp1bXBUYWJs
ZSYgYWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJpZXMpOwotICAgIGNvbnN0IEp1bXBU
YWJsZSYganVtcFRhYmxlKHVuc2lnbmVkIHRhYmxlSW5kZXgpIGNvbnN0OwotICAgIHVuc2lnbmVk
IG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OwotCi0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsg
fQotICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7
IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQotICAgIHZvaWQgYWRkRXhjZXB0
aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IG1fZXhjZXB0
aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdXNpbmcgT3V0
T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGlu
dD47Ci0KLSAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7Ci0KLSAgICAvLyBVc2VkIGZvciB0
aGUgbnVtYmVyIG9mIFdlYkFzc2VtYmx5IGxvY2FscywgYXMgaW4gaHR0cHM6Ly93ZWJhc3NlbWJs
eS5naXRodWIuaW8vc3BlYy9jb3JlL3N5bnRheC9tb2R1bGVzLmh0bWwjc3ludGF4LWxvY2FsCi0g
ICAgdW5zaWduZWQgbV9udW1WYXJzIHsgMCB9OwotICAgIC8vIE51bWJlciBvZiBWaXJ0dWFsUmVn
aXN0ZXIuIFRoZSBuYW1pbmcgaXMgdW5mb3J0dW5hdGUsIGJ1dCBoYXMgdG8gbWF0Y2ggVW5saW5r
ZWRDb2RlQmxvY2sKLSAgICB1bnNpZ25lZCBtX251bUNhbGxlZUxvY2FscyB7IDAgfTsKLSAgICB1
aW50MzJfdCBtX251bUFyZ3VtZW50cyB7IDAgfTsKLSAgICBWZWN0b3I8VHlwZT4gbV9jb25zdGFu
dFR5cGVzOwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9jb25zdGFudHM7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKLSAgICBjb25zdCB2b2lk
KiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7Ci0gICAgVmVjdG9yPGNvbnN0IFNp
Z25hdHVyZSo+IG1fc2lnbmF0dXJlczsKLSAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9m
TGluZUp1bXBUYXJnZXRzOwotICAgIExMSW50VGllclVwQ291bnRlciBtX3RpZXJVcENvdW50ZXI7
Ci0gICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwotICAgIFZlY3RvcjxVbmxpbmtl
ZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwotfTsKLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNzQ5MTNkNjhjYjY1YzgxZTY4MTI3Nzk1ZDMwMmEw
YTg3NmJiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3ZvaWQgRnVuY3Rpb25Db2RlQmxv
Y2tHZW5lcmF0b3I6OnNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25T
dHJlYW0+IGluc3RydWN0aW9ucykKK3sKKyAgICBtX2luc3RydWN0aW9ucyA9IFdURk1vdmUoaW5z
dHJ1Y3Rpb25zKTsKKyAgICBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgPSBtX2luc3RydWN0aW9u
cy0+cmF3UG9pbnRlcigpOworfQorCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjph
ZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVP
ZmZzZXQsIGludCB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKKyAgICBt
X291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9mZnNldCwgdGFyZ2V0KTsKK30KKwor
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6b3V0
T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0
KQoreworICAgIEFTU0VSVChtX291dE9mTGluZUp1bXBUYXJnZXRzLmNvbnRhaW5zKGJ5dGVjb2Rl
T2Zmc2V0KSk7CisgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2Rl
T2Zmc2V0KTsKK30KKwordW5zaWduZWQgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNp
Z25hdHVyZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IG1fc2lnbmF0dXJlcy5zaXplKCk7CisgICAgbV9zaWduYXR1cmVzLmFwcGVuZCgmc2lnbmF0
dXJlKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK2F1dG8gRnVuY3Rpb25Db2RlQmxvY2tHZW5l
cmF0b3I6OmFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKSAtPiBKdW1wVGFibGUm
Cit7CisgICAgbV9qdW1wVGFibGVzLmFwcGVuZChKdW1wVGFibGUobnVtYmVyT2ZFbnRyaWVzKSk7
CisgICAgcmV0dXJuIG1fanVtcFRhYmxlcy5sYXN0KCk7Cit9CisKK3Vuc2lnbmVkIEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2p1bXBUYWJsZXMuc2l6ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZTRhNDBiZjQ1MDg2ZGY3NzhhMzMzMTA5NTIxYWJhN2Y3M2ZjNzllCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1
ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtSGFuZGxlckluZm8u
aCIKKyNpbmNsdWRlICJXYXNtTExJbnRUaWVyVXBDb3VudGVyLmgiCisjaW5jbHVkZSAiV2FzbU9w
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUQ29kZTsKK2NsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgorY2xhc3MgQnl0ZWNvZGVHZW5l
cmF0b3JCYXNlOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIExMSW50Q2FsbGVlOworY2xh
c3MgU2lnbmF0dXJlOworc3RydWN0IEdlbmVyYXRvclRyYWl0czsKKworc3RydWN0IEp1bXBUYWJs
ZUVudHJ5IHsKKyAgICBpbnQgdGFyZ2V0IHsgMCB9OworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
OworICAgIHVuc2lnbmVkIGRyb3BDb3VudDsKKyAgICB1bnNpZ25lZCBrZWVwQ291bnQ7Cit9Owor
Cit1c2luZyBKdW1wVGFibGUgPSBGaXhlZFZlY3RvcjxKdW1wVGFibGVFbnRyeT47CisKK2NsYXNz
IEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcik7
CisKKyAgICBmcmllbmQgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0cz47Cisg
ICAgZnJpZW5kIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRH
ZW5lcmF0b3I7CisgICAgZnJpZW5kIGNsYXNzIExMSW50Q2FsbGVlOworCitwdWJsaWM6CisgICAg
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IodWludDMyX3QgZnVuY3Rpb25JbmRleCkKKyAgICAg
ICAgOiBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICB7CisgICAgfQorCisgICAg
dWludDMyX3QgZnVuY3Rpb25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25JbmRleDsg
fQorICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KKyAg
ICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxv
Y2FsczsgfQorICAgIHVpbnQzMl90IG51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QXJndW1lbnRzOyB9CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBjb25zdGFudFR5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFR5cGVzOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KKyAgICBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1
Y3Rpb25zOyB9CisKKyAgICB2b2lkIHNldE51bVZhcnModW5zaWduZWQgbnVtVmFycykgeyBtX251
bVZhcnMgPSBudW1WYXJzOyB9CisgICAgdm9pZCBzZXROdW1DYWxsZWVMb2NhbHModW5zaWduZWQg
bnVtQ2FsbGVlTG9jYWxzKSB7IG1fbnVtQ2FsbGVlTG9jYWxzID0gbnVtQ2FsbGVlTG9jYWxzOyB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoT3B0aW9uczo6ZHVtcEdlbmVyYXRl
ZFdhc21CeXRlY29kZXMoKSk7CisgICAgICAgIHJldHVybiBtX2NvbnN0YW50VHlwZXNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXTsKKyAgICB9CisKKyAgICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6
OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKKyAgICB2b2lkIGFkZEp1bXBUYXJnZXQo
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBw
ZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBudW1iZXJP
Zkp1bXBUYXJnZXRzKCkgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KKyAgICBJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGxhc3RKdW1wVGFyZ2V0KCkgeyByZXR1cm4gbV9qdW1wVGFy
Z2V0cy5sYXN0KCk7IH0KKworICAgIHZvaWQgYWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQgdGFyZ2V0KTsKKyAgICBJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7Cisg
ICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOworICAgIH0KKworICAg
IGlubGluZSBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5z
dHJ1Y3Rpb25zQmVnaW4gPSBtX2luc3RydWN0aW9ucy0+YXQoMCkucHRyKCk7CisgICAgICAgIGNv
bnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1
Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsg
bV9pbnN0cnVjdGlvbnMtPnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFk
ZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9u
c0VuZCk7CisgICAgICAgIHJldHVybiByZXR1cm5BZGRyZXNzIC0gaW5zdHJ1Y3Rpb25zQmVnaW47
CisgICAgfQorCisgICAgSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBMTEludFRp
ZXJVcENvdW50ZXI6Ok9TUkVudHJ5RGF0YT4mIHRpZXJVcENvdW50ZXIoKSB7IHJldHVybiBtX3Rp
ZXJVcENvdW50ZXI7IH0KKworICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBTaWduYXR1
cmUmKTsKKworICAgIEp1bXBUYWJsZSYgYWRkSnVtcFRhYmxlKHNpemVfdCBudW1iZXJPZkVudHJp
ZXMpOworICAgIHVuc2lnbmVkIG51bWJlck9mSnVtcFRhYmxlcygpIGNvbnN0OworCisgICAgc2l6
ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlv
bkhhbmRsZXJzLnNpemUoKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhh
bmRsZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQor
ICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBo
YW5kbGVyKSB7IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CisKK3ByaXZh
dGU6CisgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQsIGludD47CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXg7CisK
KyAgICAvLyBVc2VkIGZvciB0aGUgbnVtYmVyIG9mIFdlYkFzc2VtYmx5IGxvY2FscywgYXMgaW4g
aHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy9jb3JlL3N5bnRheC9tb2R1bGVzLmh0
bWwjc3ludGF4LWxvY2FsCisgICAgdW5zaWduZWQgbV9udW1WYXJzIHsgMCB9OworICAgIC8vIE51
bWJlciBvZiBWaXJ0dWFsUmVnaXN0ZXIuIFRoZSBuYW1pbmcgaXMgdW5mb3J0dW5hdGUsIGJ1dCBo
YXMgdG8gbWF0Y2ggVW5saW5rZWRDb2RlQmxvY2sKKyAgICB1bnNpZ25lZCBtX251bUNhbGxlZUxv
Y2FscyB7IDAgfTsKKyAgICB1aW50MzJfdCBtX251bUFyZ3VtZW50cyB7IDAgfTsKKyAgICBWZWN0
b3I8VHlwZT4gbV9jb25zdGFudFR5cGVzOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9jb25zdGFu
dHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9u
czsKKyAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7Cisg
ICAgVmVjdG9yPGNvbnN0IFNpZ25hdHVyZSo+IG1fc2lnbmF0dXJlczsKKyAgICBPdXRPZkxpbmVK
dW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOworICAgIEhhc2hNYXA8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgTExJbnRUaWVyVXBDb3VudGVyOjpPU1JFbnRyeURhdGE+IG1fdGll
clVwQ291bnRlcjsKKyAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2p1bXBUYWJsZXM7CisgICAgVmVj
dG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdlbmVyYXRvclRyYWl0
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdlbmVyYXRvclRyYWl0cy5oCmlu
ZGV4IDgyNTBiZWE3ODMyNjdjZmZlNTYxZWIzZDlkYTBhZWMzMTA1OTdhM2MuLjZhODhiYjRkMGI4
YTdhZmY4MWQ5ODA3MGRhNjI3YTUzOTY4NmVkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21HZW5lcmF0b3JUcmFpdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtR2VuZXJhdG9yVHJhaXRzLmgKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0
IEdlbmVyYXRvclRyYWl0cyB7CiAgICAgdXNpbmcgT3Bjb2RlVHJhaXRzID0gV2FzbU9wY29kZVRy
YWl0czsKICAgICB1c2luZyBPcGNvZGVJRCA9IFdhc21PcGNvZGVJRDsKICAgICB1c2luZyBPcE5v
cCA9IFdhc21Ob3A7Ci0gICAgdXNpbmcgQ29kZUJsb2NrID0gc3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPjsKKyAgICB1c2luZyBDb2RlQmxvY2sgPSBzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgT3Bjb2RlSUQg
b3Bjb2RlRm9yRGlzYWJsaW5nT3B0aW1pemF0aW9ucyA9IHdhc21fdW5yZWFjaGFibGU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNw
cAppbmRleCA4ZWQyMzA5M2Y3MTNlMWY0MjI5ZWIzZjFmYzc0NWQ1NDFiZmZiMjc3Li40ZWEyZGM5
MDhhNmEyZjM2MDYzYzBkZDA1NTM1NjFmZjU1M2Y1NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
ICNpbmNsdWRlICJMYWJlbC5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgog
I2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21GdW5jdGlvbkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oIgog
I2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21HZW5lcmF0b3JU
cmFpdHMuaCIKICNpbmNsdWRlIDx2YXJpYW50PgpAQCAtMTkzLDcgKzE5Myw3IEBAIGNsYXNzIExM
SW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxHZW5lcmF0b3JUcmFp
dHM+IHsKIAogICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IGZpbmFsaXplKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiBmaW5hbGl6ZSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhwcmVzc2lvbkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1
bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywg
Y29uc3QgRXhwcmVzc2lvbkxpc3RCJiB2YWx1ZXMpCkBAIC01MDAsNyArNTAwLDcgQEAgY2xhc3Mg
TExJbnRHZW5lcmF0b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRy
YWl0cz4gewogICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRl
Y29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBMTEludEdlbmVyYXRvciBsbGludEdlbmVyYXRv
cihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExM
SW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwpAQCAtNTI1LDcgKzUyNSw3IEBAIHN0YXRpYyBU
aHJlYWRTcGVjaWZpYzxCdWZmZXI+JiB0aHJlYWRTcGVjaWZpY0J1ZmZlcigpCiB9CiAKIExMSW50
R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJikKLSAgICA6IEJ5dGVjb2RlR2VuZXJh
dG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlvbkluZGV4KSwgMCkK
KyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2Nr
R2VuZXJhdG9yPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwg
bV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7CkBAIC01NDMsNyArNTQzLDcgQEAgTExJ
bnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LAogICAgIFdhc21FbnRlcjo6ZW1pdCh0aGlzKTsKIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBMTEludEdlbmVyYXRvcjo6ZmluYWxpemUo
KQorc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiBMTEludEdlbmVy
YXRvcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrKTsKIApA
QCAtOTgzLDcgKzk4Myw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAKICAgICBXYXNtTG9v
cEhpbnQ6OmVtaXQodGhpcyk7CiAKLSAgICBtX2NvZGVCbG9jay0+dGllclVwQ291bnRlcigpLmFk
ZE9TUkVudHJ5RGF0YUZvckxvb3AobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIHsgbG9vcElu
ZGV4LCBXVEZNb3ZlKG9zckVudHJ5RGF0YSkgfSk7CisgICAgbV9jb2RlQmxvY2stPnRpZXJVcENv
dW50ZXIoKS5hZGQobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIExMSW50VGllclVwQ291bnRl
cjo6T1NSRW50cnlEYXRhIHsgbG9vcEluZGV4LCBXVEZNb3ZlKG9zckVudHJ5RGF0YSkgfSk7CiAK
ICAgICByZXR1cm4geyB9OwogfQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENv
bnRyb2xUeXAKICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2FscyhleHByZXNzaW9uU3Rh
Y2spOwogCiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1
bXBUYWJsZXMoKTsKLSAgICBGdW5jdGlvbkNvZGVCbG9jazo6SnVtcFRhYmxlJiBqdW1wVGFibGUg
PSBtX2NvZGVCbG9jay0+YWRkSnVtcFRhYmxlKHRhcmdldHMuc2l6ZSgpICsgMSk7CisgICAgYXV0
byYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZEp1bXBUYWJsZSh0YXJnZXRzLnNpemUoKSAr
IDEpOwogCiAgICAgV2FzbVN3aXRjaDo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIHRhYmxlSW5kZXgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5o
CmluZGV4IGMwMTJmYjFlZTcxNGFmOTgyM2RhMjZjNmMzNGQ4YWI3NzJlYjQ1NTIuLmI1NWNhNTIw
MWQwODUzMjJkY2U3NDE1YzEwM2JkZDdmYTZjY2ZlZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCkBAIC0zMiwxMSArMzIsMTEgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgRnVuY3Rpb25Db2RlQmxv
Y2s7CitjbGFzcyBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFNpZ25hdHVyZTsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBNb2R1bGVJbmZvcm1hdGlvbiYs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IDdj
MGJiYzVmNzFmNTljYmQ2NmIyZThlMzI5ZTNjMjM1NzdkY2U4MGEuLjg1MDY3YzEyYjIwM2UwZTlk
Nzc3NjA3MzcyY2E5YTVmMDI1MTU1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFBsYW4uY3BwCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgTExJbnRQbGFuOjpjb21w
aWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgp
OwogCiAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlQnl0ZWNvZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0aW9uSW5k
ZXgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVy
YXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQnl0
ZWNvZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1
cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2xvY2sgfTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29t
cGxldGVDb21waWxhdGlvbigpCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVEdW1w
ZXI6OmR1bXBCbG9jayhtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpXS5nZXQoKSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbiwgV1RGOjpkYXRhRmlsZSgpKTsKIAotICAgICAgICAgICAgbV9jYWxsZWVzVmVj
dG9yW2ldID0gTExJbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVybmFsRnVuY3Rp
b25zW2ldKSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOworICAgICAgICAgICAgbV9jYWxsZWVzVmVj
dG9yW2ldID0gTExJbnRDYWxsZWU6OmNyZWF0ZSgqbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaV0s
IGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnRzW2ldID0gaml0
LmxhYmVsKCk7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyBjYWxsZWVTbG90KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBz
aXplb2YoQ1BVUmVnaXN0ZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dFBsYW4uaAppbmRleCA5NGRkOWYyZmMxYTAwZWQwYzZhZDU4ZjRkNzYyODZkY2M4MDdhOTQ2Li4w
ZDU5YmIyNzRjZDE4MzQxNWQ2NDQyYzU3MDBjYmE5ZDE0NDRjZDVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUVudHJ5UGxhbi5oIgotI2luY2x1ZGUg
Ildhc21GdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9j
a0dlbmVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODcsNyArODcsNyBAQCBjbGFz
cyBMTEludFBsYW4gZmluYWwgOiBwdWJsaWMgRW50cnlQbGFuIHsKICAgICBib29sIHByZXBhcmVJ
bXBsKCkgZmluYWw7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkgV1RGX1JFUVVJ
UkVTX0xPQ0sobV9sb2NrKSBmaW5hbDsKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CiAgICAgY29uc3QgUmVmPExMSW50Q2FsbGVlPiogbV9jYWxsZWVzIHsgbnVsbHB0
ciB9OwogICAgIFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+PiBtX2NhbGxlZXNWZWN0b3I7CiAgICAg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwIG1fZW1iZWRkZXJDYWxsZWVzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCmluZGV4
IGU2ZjY1NTQwNzc0NmIxMmU4ZDY3ZGU2MjIxNzFiNGExYjdhOTA3OWUuLjE0MGE4MmM4ZTRhMzE4
NzkzY2NmYjgzMjFjMDI1MDE5NmM4MzRlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKQEAgLTQ0LDcgKzQ0LDEzIEBAIGNs
YXNzIExMSW50VGllclVwQ291bnRlciA6IHB1YmxpYyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
ewogICAgICAgICBDb21waWxlZCwKICAgICB9OwogCi0gICAgTExJbnRUaWVyVXBDb3VudGVyKCkK
KyAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKKyAgICAgICAgdWludDMyX3QgbG9vcEluZGV4Owor
ICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiB2YWx1ZXM7CisgICAgfTsKKworICAgIExM
SW50VGllclVwQ291bnRlcihIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIE9TUkVu
dHJ5RGF0YT4mJiBvc3JFbnRyeURhdGEpCisgICAgICAgIDogbV9vc3JFbnRyeURhdGEoV1RGTW92
ZShvc3JFbnRyeURhdGEpKQogICAgIHsKICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwog
ICAgIH0KQEAgLTcwLDExICs3Niw2IEBAIGNsYXNzIExMSW50VGllclVwQ291bnRlciA6IHB1Ymxp
YyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgewogICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xk
KE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKLSAgICBz
dHJ1Y3QgT1NSRW50cnlEYXRhIHsKLSAgICAgICAgdWludDMyX3QgbG9vcEluZGV4OwotICAgICAg
ICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiB2YWx1ZXM7Ci0gICAgfTsKLQogICAgIHZvaWQgYWRk
T1NSRW50cnlEYXRhRm9yTG9vcChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBPU1JFbnRyeURh
dGEmJik7CiAKICAgICBjb25zdCBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YUZvckxvb3AoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDk1NzVkYzE3ZTkxMzgyODUwOWFkN2U2NmM4ZWYw
YmYyNzhmNmZjZDAuLjk0NWE0MDE2ZDNkY2Q2MjEwYzUxZTE0NTA1MjQ3MjM5MWIyNTY2OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiV2FzbUJCUVBsYW4u
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCi0jaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgi
CiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKQEAgLTcxLDE4ICs3MSwxOCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKChyZXRhZ0Nv
ZGVQdHI8Y2FsbFRhcmdldFRhZywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnPihjYWxsVGFyZ2V0KSks
IHRhcmdldEluc3RhbmNlKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi0jZGVmaW5lIENPREVf
QkxPQ0soKSBcCi0gICAgYml0d2lzZV9jYXN0PFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKj4oY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSkKKyNkZWZpbmUgQ0FMTEVFKCkgXAorICAgIHN0YXRpY19jYXN0
PFdhc206OkxMSW50Q2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21DYWxsZWUoKSkK
IAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3RlcikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIu
aXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1ZhbHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5n
ZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBcCisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2Rl
KENBTExFRSgpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBcCiAgICAgICAgIDogY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcikpCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCiBlbnVtIGNsYXNzIFJlcXVpcmVkV2FzbUpJVCB7IEFueSwgT01HIH07CiAKLWlubGluZSBi
b29sIHNob3VsZEpJVChXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZXF1aXJl
ZFdhc21KSVQgcmVxdWlyZWRKSVQgPSBSZXF1aXJlZFdhc21KSVQ6OkFueSkKK2lubGluZSBib29s
IHNob3VsZEpJVChXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBSZXF1aXJlZFdhc21KSVQgcmVx
dWlyZWRKSVQgPSBSZXF1aXJlZFdhc21KSVQ6OkFueSkKIHsKICAgICBpZiAocmVxdWlyZWRKSVQg
PT0gUmVxdWlyZWRXYXNtSklUOjpPTUcpIHsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VPTUdK
SVQoKSkKQEAgLTkzLDE0ICs5MywxNCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoV2FzbTo6RnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgUmVxdWlyZWRXYXNtSklUIHJlcXVpcgogICAgICAg
ICBpZiAoIU9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpICYmICFPcHRpb25zOjp1c2VP
TUdKSVQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCFPcHRp
b25zOjp3YXNtRnVuY3Rpb25JbmRleFJhbmdlVG9Db21waWxlKCkuaXNJblJhbmdlKGNvZGVCbG9j
ay0+ZnVuY3Rpb25JbmRleCgpKSkKKyAgICBpZiAoIU9wdGlvbnM6Ondhc21GdW5jdGlvbkluZGV4
UmFuZ2VUb0NvbXBpbGUoKS5pc0luUmFuZ2UoY2FsbGVlLT5mdW5jdGlvbkluZGV4KCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIGpp
dENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIFdhc206
OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkK
K2lubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVl
KiBjYWxsZWUsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkKIHsKLSAgICBXYXNtOjpMTEludFRp
ZXJVcENvdW50ZXImIHRpZXJVcENvdW50ZXIgPSBjb2RlQmxvY2stPnRpZXJVcENvdW50ZXIoKTsK
KyAgICBXYXNtOjpMTEludFRpZXJVcENvdW50ZXImIHRpZXJVcENvdW50ZXIgPSBjYWxsZWUtPnRp
ZXJVcENvdW50ZXIoKTsKICAgICBpZiAoIXRpZXJVcENvdW50ZXIuY2hlY2tJZk9wdGltaXphdGlv
blRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6RnVuY3Rp
b24KICAgICB9CiAKICAgICBpZiAoY29tcGlsZSkgewotICAgICAgICB1aW50MzJfdCBmdW5jdGlv
bkluZGV4ID0gY29kZUJsb2NrLT5mdW5jdGlvbkluZGV4KCk7CisgICAgICAgIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXggPSBjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKTsKICAgICAgICAgUmVmUHRyPFdh
c206OlBsYW4+IHBsYW47CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKICAgICAgICAgICAgIHBsYW4gPSBhZG9wdFJlZigqbmV3IFdhc206OkJCUVBsYW4oaW5z
dGFuY2UtPmNvbnRleHQoKSwgY29uc3RfY2FzdDxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiY+KGlu
c3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpKSwgZnVuY3Rpb25JbmRleCwgaW5z
dGFuY2UtPmNhbGxlZUdyb3VwKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CkBAIC0x
NTAsMjAgKzE1MCwxOSBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKHByb2xvZ3VlX29zcikKIHsKICAg
ICBVTlVTRURfUEFSQU0ocGMpOwogCi0gICAgV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSA9IHN0
YXRpY19jYXN0PFdhc206OkxMSW50Q2FsbGVlKj4oY2FsbEZyYW1lLT5jYWxsZWUoKS5hc1dhc21D
YWxsZWUoKSk7Ci0gICAgV2FzbTo6RnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IENPREVf
QkxPQ0soKTsKKyAgICBXYXNtOjpMTEludENhbGxlZSogY2FsbGVlID0gQ0FMTEVFKCk7CiAKLSAg
ICBpZiAoIXNob3VsZEpJVChjb2RlQmxvY2spKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+dGllclVw
Q291bnRlcigpLmRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgaWYgKCFzaG91bGRKSVQoY2FsbGVl
KSkgeworICAgICAgICBjYWxsZWUtPnRpZXJVcENvdW50ZXIoKS5kZWZlckluZGVmaW5pdGVseSgp
OwogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VXYXNtTExJbnRQcm9sb2d1ZU9TUigpKQogICAgICAgICBXQVNN
X1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICBkYXRhTG9nTG5JZihPcHRpb25z
Ojp2ZXJib3NlT1NSKCksICpjYWxsZWUsICI6IEVudGVyZWQgcHJvbG9ndWVfb3NyIHdpdGggdGll
clVwQ291bnRlciA9ICIsIGNvZGVCbG9jay0+dGllclVwQ291bnRlcigpKTsKKyAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICpjYWxsZWUsICI6IEVudGVyZWQgcHJvbG9ndWVf
b3NyIHdpdGggdGllclVwQ291bnRlciA9ICIsIGNhbGxlZS0+dGllclVwQ291bnRlcigpKTsKIAot
ICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVlLCBjb2RlQmxvY2ssIGlu
c3RhbmNlKSkKKyAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNhbGxlZSwgaW5z
dGFuY2UpKQogICAgICAgICBXQVNNX1JFVFVSTl9UV08obnVsbHB0ciwgbnVsbHB0cik7CiAKICAg
ICBXQVNNX1JFVFVSTl9UV08oY2FsbGVlLT5yZXBsYWNlbWVudChpbnN0YW5jZS0+bWVtb3J5KCkt
Pm1vZGUoKSktPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKQEAg
LTE3MSwxOCArMTcwLDE3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wocHJvbG9ndWVfb3NyKQogCiBX
QVNNX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogewotICAgIFdhc206OkxMSW50Q2FsbGVlKiBj
YWxsZWUgPSBzdGF0aWNfY2FzdDxXYXNtOjpMTEludENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVl
KCkuYXNXYXNtQ2FsbGVlKCkpOwotICAgIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBDT0RFX0JMT0NLKCk7Ci0gICAgV2FzbTo6TExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBD
b3VudGVyID0gY29kZUJsb2NrLT50aWVyVXBDb3VudGVyKCk7CisgICAgV2FzbTo6TExJbnRDYWxs
ZWUqIGNhbGxlZSA9IENBTExFRSgpOworICAgIFdhc206OkxMSW50VGllclVwQ291bnRlciYgdGll
clVwQ291bnRlciA9IGNhbGxlZS0+dGllclVwQ291bnRlcigpOwogCi0gICAgaWYgKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseU9TUigpIHx8ICFPcHRpb25zOjp1c2VXYXNtTExJbnRMb29wT1NSKCkg
fHwgIXNob3VsZEpJVChjb2RlQmxvY2ssIFJlcXVpcmVkV2FzbUpJVDo6T01HKSkgeworICAgIGlm
ICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlPU1IoKSB8fCAhT3B0aW9uczo6dXNlV2FzbUxMSW50
TG9vcE9TUigpIHx8ICFzaG91bGRKSVQoY2FsbGVlLCBSZXF1aXJlZFdhc21KSVQ6Ok9NRykpIHsK
ICAgICAgICAgc2xvd19wYXRoX3dhc21fcHJvbG9ndWVfb3NyKGNhbGxGcmFtZSwgcGMsIGluc3Rh
bmNlKTsKICAgICAgICAgV0FTTV9SRVRVUk5fVFdPKG51bGxwdHIsIG51bGxwdHIpOwogICAgIH0K
IAotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50
ZXJlZCBsb29wX29zciB3aXRoIHRpZXJVcENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPnRpZXJVcENv
dW50ZXIoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY2FsbGVl
LCAiOiBFbnRlcmVkIGxvb3Bfb3NyIHdpdGggdGllclVwQ291bnRlciA9ICIsIGNhbGxlZS0+dGll
clVwQ291bnRlcigpKTsKIAotICAgIHVuc2lnbmVkIGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0
ID0gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgdW5zaWduZWQgbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVPZmZzZXQgPSBjYWxsZWUtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKICAgICBjb25z
dCBhdXRvJiBvc3JFbnRyeURhdGEgPSB0aWVyVXBDb3VudGVyLm9zckVudHJ5RGF0YUZvckxvb3Ao
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpOwogCiAgICAgaWYgKCF0aWVyVXBDb3VudGVyLmNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKQEAgLTIyNyw3ICsyMjUsNyBA
QCBXQVNNX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIH0KIAogICAgIGlmIChjb21waWxl
KSB7Ci0gICAgICAgIFJlZjxXYXNtOjpQbGFuPiBwbGFuID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0
PFdhc206OlBsYW4qPihuZXcgV2FzbTo6T1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCks
IFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpDYWxsZWU+
KCpjYWxsZWUpLCBjb2RlQmxvY2stPmZ1bmN0aW9uSW5kZXgoKSwgb3NyRW50cnlEYXRhLmxvb3BJ
bmRleCwgaW5zdGFuY2UtPm1lbW9yeSgpLT5tb2RlKCksIFdhc206OlBsYW46OmRvbnRGaW5hbGl6
ZSgpKSkpOworICAgICAgICBSZWY8V2FzbTo6UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpzdGF0aWNf
Y2FzdDxXYXNtOjpQbGFuKj4obmV3IFdhc206Ok9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4
dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6Q2Fs
bGVlPigqY2FsbGVlKSwgY2FsbGVlLT5mdW5jdGlvbkluZGV4KCksIG9zckVudHJ5RGF0YS5sb29w
SW5kZXgsIGluc3RhbmNlLT5tZW1vcnkoKS0+bW9kZSgpLCBXYXNtOjpQbGFuOjpkb250RmluYWxp
emUoKSkpKTsKICAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29w
eVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklU
KCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAgLTI0MywxOSAr
MjQxLDE4IEBAIFdBU01fU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAKIFdBU01fU0xPV19QQVRI
X0RFQ0woZXBpbG9ndWVfb3NyKQogewotICAgIFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUgPSBz
dGF0aWNfY2FzdDxXYXNtOjpMTEludENhbGxlZSo+KGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNXYXNt
Q2FsbGVlKCkpOwotICAgIFdhc206OkZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBDT0RF
X0JMT0NLKCk7CisgICAgV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSA9IENBTExFRSgpOwogCi0g
ICAgaWYgKCFzaG91bGRKSVQoY29kZUJsb2NrKSkgewotICAgICAgICBjb2RlQmxvY2stPnRpZXJV
cENvdW50ZXIoKS5kZWZlckluZGVmaW5pdGVseSgpOworICAgIGlmICghc2hvdWxkSklUKGNhbGxl
ZSkpIHsKKyAgICAgICAgY2FsbGVlLT50aWVyVXBDb3VudGVyKCkuZGVmZXJJbmRlZmluaXRlbHko
KTsKICAgICAgICAgV0FTTV9FTkRfSU1QTCgpOwogICAgIH0KICAgICBpZiAoIU9wdGlvbnM6OnVz
ZVdhc21MTEludEVwaWxvZ3VlT1NSKCkpCiAgICAgICAgIFdBU01fRU5EX0lNUEwoKTsKIAotICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwgIjogRW50ZXJlZCBl
cGlsb2d1ZV9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY29kZUJsb2NrLT50aWVyVXBDb3Vu
dGVyKCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNhbGxlZSwg
IjogRW50ZXJlZCBlcGlsb2d1ZV9vc3Igd2l0aCB0aWVyVXBDb3VudGVyID0gIiwgY2FsbGVlLT50
aWVyVXBDb3VudGVyKCkpOwogCi0gICAgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY2FsbGVl
LCBjb2RlQmxvY2ssIGluc3RhbmNlKTsKKyAgICBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhj
YWxsZWUsIGluc3RhbmNlKTsKICAgICBXQVNNX0VORF9JTVBMKCk7CiB9CiAjZW5kaWYKQEAgLTI3
MCw5ICsyNjcsOSBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKHRyYWNlKQogICAgIFdhc21PcGNvZGVJ
RCBvcGNvZGVJRCA9IHBjLT5vcGNvZGVJRDxXYXNtT3Bjb2RlVHJhaXRzPigpOwogICAgIGRhdGFM
b2dGKCI8JXA+ICVwIC8gJXA6IGV4ZWN1dGluZyBiYyMlenUsICVzLCBwYyA9ICVwXG4iLAogICAg
ICAgICAmVGhyZWFkOjpjdXJyZW50KCksCi0gICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCks
CisgICAgICAgIENBTExFRSgpLAogICAgICAgICBjYWxsRnJhbWUsCi0gICAgICAgIHN0YXRpY19j
YXN0PGludHB0cl90PihDT0RFX0JMT0NLKCktPmJ5dGVjb2RlT2Zmc2V0KHBjKSksCisgICAgICAg
IHN0YXRpY19jYXN0PGludHB0cl90PihDQUxMRUUoKS0+Ynl0ZWNvZGVPZmZzZXQocGMpKSwKICAg
ICAgICAgcGMtPm5hbWU8V2FzbU9wY29kZVRyYWl0cz4oKSwKICAgICAgICAgcGMpOwogICAgIGlm
IChvcGNvZGVJRCA9PSB3YXNtX2VudGVyKSB7CkBAIC0yOTAsNyArMjg3LDcgQEAgV0FTTV9TTE9X
X1BBVEhfREVDTChvdXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKIHsKICAgICBVTlVTRURfUEFSQU0o
aW5zdGFuY2UpOwogCi0gICAgcGMgPSBDT0RFX0JMT0NLKCktPm91dE9mTGluZUp1bXBUYXJnZXQo
cGMpOworICAgIHBjID0gQ0FMTEVFKCktPm91dE9mTGluZUp1bXBUYXJnZXQocGMpOwogICAgIFdB
U01fRU5EX0lNUEwoKTsKIH0KIApAQCAtNDc3LDcgKzQ3NCw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgZG9XYXNtQ2FsbEluZGlyZWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJ
bnN0YW5jCiAgICAgaWYgKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVy
ZTo6aW52YWxpZEluZGV4KQogICAgICAgICBXQVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6
Ok51bGxUYWJsZUVudHJ5KTsKIAotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgY2FsbFNpZ25h
dHVyZSA9IENPREVfQkxPQ0soKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUluZGV4KTsKKyAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUmIGNhbGxTaWduYXR1cmUgPSBDQUxMRUUoKS0+c2lnbmF0dXJlKHNp
Z25hdHVyZUluZGV4KTsKICAgICBpZiAoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggIT0gV2FzbTo6
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsU2lnbmF0dXJlKSkKICAgICAgICAgV0FTTV9U
SFJPVyhXYXNtOjpFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOwogCkBAIC01MTksNyArNTE2
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogY2EKICAgICBpZiAoY2FsbGVlSW5zdGFuY2UgIT0g
Y2FsbGVySW5zdGFuY2UpCiAgICAgICAgIGNhbGxlZUluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xp
bWl0KGNhbGxlckluc3RhbmNlLT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgQVNTRVJUKGZ1
bmN0aW9uLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
Q09ERV9CTE9DSygpLT5zaWduYXR1cmUoc2lnbmF0dXJlSW5kZXgpKSk7CisgICAgQVNTRVJUKGZ1
bmN0aW9uLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
Q0FMTEVFKCktPnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCkpKTsKICAgICBVTlVTRURfUEFSQU0o
c2lnbmF0dXJlSW5kZXgpOwogICAgIFdBU01fQ0FMTF9SRVRVUk4oY2FsbGVlSW5zdGFuY2UsIGZ1
bmN0aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRpb24tPmV4ZWN1dGFibGVBZGRyZXNzKCksIFdhc21F
bnRyeVB0clRhZyk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>