<?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>68779</bug_id>
          
          <creation_ts>2011-09-25 12:43:55 -0700</creation_ts>
          <short_desc>Finish removing PLATFORM(BREWMP) by removing associated code</short_desc>
          <delta_ts>2011-09-25 21:12:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68012</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>472901</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-25 12:43:55 -0700</bug_when>
    <thetext>Finish removing PLATFORM(BREWMP) by removing associated code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472902</commentid>
    <comment_count>1</comment_count>
      <attachid>108610</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-25 12:45:31 -0700</bug_when>
    <thetext>Created attachment 108610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472964</commentid>
    <comment_count>2</comment_count>
      <attachid>108610</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-25 21:12:54 -0700</bug_when>
    <thetext>Comment on attachment 108610
Patch

Clearing flags on attachment: 108610

Committed r95934: &lt;http://trac.webkit.org/changeset/95934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472965</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-25 21:12:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108610</attachid>
            <date>2011-09-25 12:45:31 -0700</date>
            <delta_ts>2011-09-25 21:12:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68779-20110925124530.patch</filename>
            <type>text/plain</type>
            <size>214187</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1OTIy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDkt
MjUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBGaW5pc2ggcmVt
b3ZpbmcgUExBVEZPUk0oQlJFV01QKSBieSByZW1vdmluZyBhc3NvY2lhdGVkIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
V2ViS2l0UGFja2FnaW5nLmNtYWtlOgorICAgICAgICAqIHdzY3JpcHQ6CisKIDIwMTEtMDktMjUg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgUExBVEZP
Uk0oSEFJS1UpIGFuZCBhc3NvY2lhdGVkIGNvZGUKSW5kZXg6IHdzY3JpcHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd3NjcmlwdAkocmV2aXNpb24gOTU5MjIpCisrKyB3c2NyaXB0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMTQsNyArMjE0LDcgQEAgZGVmIGJ1aWxkKGJsZCk6CiAgICAgICAgIFRhc2tHZW4udGFza19n
ZW4ubWFwcGluZ3NbJy5tJ10gPSBUYXNrR2VuLnRhc2tfZ2VuLm1hcHBpbmdzWycuY3h4J10KIAog
ICAgIGZlYXR1cmVzID0gW09wdGlvbnMub3B0aW9ucy5wb3J0Lmxvd2VyKCldCi0gICAgZXhjbHVk
ZV9wYXR0ZXJucyA9IFsnKkFsbEluT25lLmNwcCcsICcqQnJldy5jcHAnLCAnKkNGTmV0LmNwcCcs
ICcqQ2hyb21pdW0qLmNwcCcsIAorICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSBbJypBbGxJbk9uZS5j
cHAnLCAnKkNGTmV0LmNwcCcsICcqQ2hyb21pdW0qLmNwcCcsIAogICAgICAgICAgICAgJypFZmwu
Y3BwJywgJypHdGsuY3BwJywgJypNYWMuY3BwJywgJypOb25lLmNwcCcsICcqUXQuY3BwJywgJypT
YWZhcmkuY3BwJywKICAgICAgICAgICAgICd0ZXN0KmJpbmRpbmdzLionLCAnKldpbkNFLmNwcCcs
ICJXZWJET01DYW52YXMqLmNwcCIsICJXZWJET01TVkcqLmNwcCJdCiAgICAgaWYgT3B0aW9ucy5v
cHRpb25zLnBvcnQgPT0gJ3d4JzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gOTU5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMjUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBGaW5pc2ggcmVtb3ZpbmcgUExBVEZPUk0oQlJFV01QKSBieSBy
ZW1vdmluZyBhc3NvY2lhdGVkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY4Nzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXAvSmF2YVNjcmlwdENvcmUuZ3lwOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAgICogZ3lwL0phdmFTY3JpcHRD
b3JlLmd5cDoKKyAgICAgICAgKiB3c2NyaXB0OgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNw
cDoKKyAgICAgICAgKFdURjo6ZmFzdE1hbGxvY1NpemUpOgorICAgICAgICAqIHd0Zi9WZWN0b3Iu
aDoKKyAgICAgICAgKiB3dGYvYnJldzogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvYnJldy9NYWlu
VGhyZWFkQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL2JyZXcvT3duUHRyQnJldy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL2JyZXcvUmVmUHRyQnJldy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHd0Zi9icmV3L1NoZWxsQnJldy5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9i
cmV3L1N0cmluZ0JyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9icmV3L1N5c3RlbU1h
bGxvY0JyZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9icmV3OiBSZW1vdmVk
LgorICAgICAgICAqIHd0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHd0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuaDogUmVtb3ZlZC4KKwogMjAx
MS0wOS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92
ZSBQTEFURk9STShIQUlLVSkgYW5kIGFzc29jaWF0ZWQgY29kZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDk1OTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTYy
OSwxMiArNjI5LDYgQEAKICAgICAgICAgICAgICd3dGYvVGhyZWFkaW5nV2luLmNwcCcsCiAgICAg
ICAgICAgICAnd3RmL1R5cGVUcmFpdHMuY3BwJywKICAgICAgICAgICAgICd3dGYvV1RGVGhyZWFk
RGF0YS5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9icmV3L01haW5UaHJlYWRCcmV3LmNwcCcsCi0g
ICAgICAgICAgICAnd3RmL2JyZXcvT3duUHRyQnJldy5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9i
cmV3L1JlZlB0ckJyZXcuaCcsCi0gICAgICAgICAgICAnd3RmL2JyZXcvU2hlbGxCcmV3LmgnLAot
ICAgICAgICAgICAgJ3d0Zi9icmV3L1N0cmluZ0JyZXcuY3BwJywKLSAgICAgICAgICAgICd3dGYv
YnJldy9TeXN0ZW1NYWxsb2NCcmV3LmgnLAogICAgICAgICAgICAgJ3d0Zi9jaHJvbWl1bS9DaHJv
bWl1bVRocmVhZGluZy5oJywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0vTWFpblRocmVhZENo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnd3RmL2R0b2EuY3BwJywKQEAgLTY2OSw4ICs2NjMs
NiBAQAogICAgICAgICAgICAgJ3d0Zi91bmljb2RlL1NjcmlwdENvZGVzRnJvbUlDVS5oJywKICAg
ICAgICAgICAgICd3dGYvdW5pY29kZS9VVEY4LmNwcCcsCiAgICAgICAgICAgICAnd3RmL3VuaWNv
ZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCcsCi0gICAgICAgICAgICAnd3RmL3VuaWNvZGUvYnJl
dy9Vbmljb2RlQnJldy5jcHAnLAotICAgICAgICAgICAgJ3d0Zi91bmljb2RlL2JyZXcvVW5pY29k
ZUJyZXcuaCcsCiAgICAgICAgICAgICAnd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAn
LAogICAgICAgICAgICAgJ3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaCcsCiAgICAgICAg
ICAgICAnd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcCcsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3NjcmlwdAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Njcmlw
dAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBkZWYgYnVpbGQoYmxkKToKICAgICBp
bXBvcnQgT3B0aW9ucwogCiAgICAganNjb3JlX2V4Y2x1ZGVzID0gWydqc2MuY3BwJywgJ0V4ZWN1
dGFibGVBbGxvY2F0b3JQb3NpeC5jcHAnXQotICAgIGpzY29yZV9leGNsdWRlcy5leHRlbmQoZ2V0
X2V4Y2x1ZGVzKGpzY29yZV9kaXIsIFsnKkJyZXcuY3BwJywgJypDRi5jcHAnLCAnKlN5bWJpYW4u
Y3BwJ10pKQotCisgICAganNjb3JlX2V4Y2x1ZGVzLmV4dGVuZChnZXRfZXhjbHVkZXMoanNjb3Jl
X2RpciwgWycqQ0YuY3BwJywgJypTeW1iaWFuLmNwcCddKSkKICAgICBqc2NvcmVfZXhjbHVkZXMu
ZXh0ZW5kKGdldF9leGNsdWRlcyhqc2NvcmVfZGlyLCBbJypOb25lLmNwcCddKSkKIAogICAgIHNv
dXJjZXMgPSBbXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5
cC9KYXZhU2NyaXB0Q29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAJKHJldmlzaW9uIDk1OTIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNiBAQAogICAgICAgICAjIC4uLiBU
aGVuIGluY2x1ZGUgd2hhdCB3ZSB3YW50LgogICAgICAgICBbJ2luY2x1ZGUnLCAnLi4vd3RmLydd
LAogICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGNsZWFybHkgbm90IHN1c3RhaW5hYmxlLiAKLSAg
ICAgICAgWydleGNsdWRlJywgJy4uL3d0Zi9icmV3J10sIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAn
Li4vd3RmL2VmbCddLCAKICAgICAgICAgWydleGNsdWRlJywgJy4uL3d0Zi9nb2JqZWN0J10sIAog
ICAgICAgICBbJ2V4Y2x1ZGUnLCAnLi4vd3RmL2d0ayddLCAKQEAgLTEzNCw3ICsxMzMsNiBAQAog
ICAgICAgICBbJ2V4Y2x1ZGUnLCAnLi4vd3RmL3VybCddLCAKICAgICAgICAgWydleGNsdWRlJywg
Jy4uL3d0Zi93aW5jZSddLCAKICAgICAgICAgWydleGNsdWRlJywgJy4uL3d0Zi93eCddLCAKLSAg
ICAgICAgWydleGNsdWRlJywgJy4uL3d0Zi91bmljb2RlL2JyZXcnXSwgCiAgICAgICAgIFsnZXhj
bHVkZScsICcuLi93dGYvdW5pY29kZS93aW5jZSddLCAKICAgICAgICAgWydleGNsdWRlJywgJy4u
L3d0Zi91bmljb2RlL2dsaWInXSwgCiAgICAgICAgIFsnZXhjbHVkZScsICcuLi93dGYvdW5pY29k
ZS9xdDQnXSwgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ3lwL0phdmFTY3JpcHRDb3Jl
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ3lwL0phdmFTY3JpcHRD
b3JlLmd5cAkocmV2aXNpb24gOTU5MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ3lwL0ph
dmFTY3JpcHRDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsNyBAQAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnKD88IXVuaWNvZGUpL2ljdS8nXSwKICAgICAgICAgWydleGNsdWRlJywg
J29zLXdpbjMyLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncXQvJ10sCi0gICAgICAgIFsnZXhj
bHVkZScsICd3dGYvKGJyZXd8ZWZsfGd0a3xxdHx3aW5jZXx3eCkvJ10sCi0gICAgICAgIFsnZXhj
bHVkZScsICd3dGYvdW5pY29kZS9icmV3LyddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnd3RmLyhl
Zmx8Z3RrfHF0fHdpbmNlfHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJ3d0Zi91bmljb2Rl
L2dsaWIvJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICd3dGYvdW5pY29kZS9xdDQvJ10sCiAgICAg
ICAgIFsnZXhjbHVkZScsICd3dGYvdW5pY29kZS93aW5jZS8nXSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUs
NyArMzg1LDYgQEAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHApCiAjZWxpZiBP
UyhEQVJXSU4pCiAgICAgcmV0dXJuIG1hbGxvY19zaXplKHApOwogI2VsaWYgT1MoV0lORE9XUykK
LSAgICAvLyBCcmV3IE1QIHVzZXMgaXRzIG93biBtZW1vcnkgYWxsb2NhdG9yLCBzbyBfbXNpemUg
ZG9lcyBub3Qgd29yayBvbiB0aGUgQnJldyBNUCBzaW11bGF0b3IuCiAgICAgcmV0dXJuIF9tc2l6
ZShjb25zdF9jYXN0PHZvaWQqPihwKSk7CiAjZWxzZQogICAgIHJldHVybiAxOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmVjdG9yQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkK
ICAgICAgICAgewogICAgICAgICAgICAgLy8gQ2FsbGluZyBtYWxsb2MoMCkgbWlnaHQgdGFrZSBh
IGxvY2sgYW5kIG1heSBhY3R1YWxseSBkbyBhbgotICAgICAgICAgICAgLy8gYWxsb2NhdGlvbiBv
biBzb21lIHN5c3RlbXMgKGUuZy4gQnJldykuCisgICAgICAgICAgICAvLyBhbGxvY2F0aW9uIG9u
IHNvbWUgc3lzdGVtcy4KICAgICAgICAgICAgIGlmIChjYXBhY2l0eSkKICAgICAgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihjYXBhY2l0eSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvYnJldy9NYWluVGhyZWFkQnJldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9icmV3L01haW5UaHJlYWRCcmV3LmNwcAkocmV2aXNpb24g
OTU5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2JyZXcvTWFpblRocmVhZEJyZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TWFpblRocmVhZC5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdm9pZCBpbml0aWFsaXplTWFpblRo
cmVhZFBsYXRmb3JtKCkKLXsKLSAgICAvLyBub3QgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBzY2hl
ZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKLXsKLSAgICAvLyBub3QgaW1wbGVt
ZW50ZWQKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvYnJldy9Pd25QdHJCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2JyZXcvT3duUHRyQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9icmV3L093blB0ckJyZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiT3duUHRyLmgiCi0KLSNpbmNsdWRlIDxBRUVCaXRtYXAuaD4KLSNpbmNsdWRlIDxB
RUVGaWxlLmg+Ci0jaW5jbHVkZSA8QUVFSU1lbUdyb3VwLmg+Ci0jaW5jbHVkZSA8QUVFSU1lbVNw
YWNlLmg+Ci0jaW5jbHVkZSA8QUVFTmV0Lmg+Ci0jaW5jbHVkZSA8QUVFU1NMLmg+Ci0jaW5jbHVk
ZSA8QUVFU3RkTGliLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lkIGRlbGV0ZU93bmVkUHRy
KElGaWxlTWdyKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgSUZJTEVNR1JfUmVsZWFz
ZShwdHIpOwotfQotCi12b2lkIGRlbGV0ZU93bmVkUHRyKElGaWxlKiBwdHIpCi17Ci0gICAgaWYg
KHB0cikKLSAgICAgICAgSUZJTEVfUmVsZWFzZShwdHIpOwotfQotCi12b2lkIGRlbGV0ZU93bmVk
UHRyKElCaXRtYXAqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBJQml0bWFwX1JlbGVh
c2UocHRyKTsKLX0KLQotdm9pZCBkZWxldGVPd25lZFB0cihJU1NMKiBwdHIpCi17Ci0gICAgaWYg
KHB0cikKLSAgICAgICAgSVNTTF9SZWxlYXNlKHB0cik7Ci19Ci0KLXZvaWQgZGVsZXRlT3duZWRQ
dHIoSU1lbUdyb3VwKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgSU1lbUdyb3VwX1Jl
bGVhc2UocHRyKTsKLX0KLQotdm9pZCBkZWxldGVPd25lZFB0cihJTWVtU3BhY2UqIHB0cikKLXsK
LSAgICBpZiAocHRyKQotICAgICAgICBJTWVtU3BhY2VfUmVsZWFzZShwdHIpOwotfQotCi12b2lk
IGRlbGV0ZU93bmVkUHRyKElTb2NrZXQqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBJ
U09DS0VUX1JlbGVhc2UocHRyKTsKLX0KLQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9icmV3L1JlZlB0ckJyZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2JyZXcvUmVmUHRyQnJldy5oCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvYnJldy9SZWZQdHJCcmV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5k
ZWYgUmVmUHRyQnJld19oCi0jZGVmaW5lIFJlZlB0ckJyZXdfaAotCi0jaW5jbHVkZSAiUmVmUHRy
LmgiCi0jaW5jbHVkZSA8QUVFSUJhc2UuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEFsbCBC
cmV3IE1QIGNsYXNzZXMgYXJlIGRlcml2ZWQgZnJvbSBlaXRoZXIgSUJhc2Ugb3IgSVFJLgotdGVt
cGxhdGU8PiB2b2lkIHJlZklmTm90TnVsbChJQmFzZSogcHRyKQotewotICAgIGlmIChMSUtFTFko
cHRyICE9IDApKQotICAgICAgICBJQmFzZV9BZGRSZWYocHRyKTsKLX0KLQotdGVtcGxhdGU8PiB2
b2lkIGRlcmVmSWZOb3ROdWxsKElCYXNlKiBwdHIpCi17Ci0gICAgaWYgKExJS0VMWShwdHIgIT0g
MCkpCi0gICAgICAgIElCYXNlX1JlbGVhc2UocHRyKTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIHJl
ZklmTm90TnVsbChJUUkqIHB0cikKLXsKLSAgICBpZiAoTElLRUxZKHB0ciAhPSAwKSkKLSAgICAg
ICAgSVFJX0FkZFJlZihwdHIpOwotfQotCi10ZW1wbGF0ZTw+IHZvaWQgZGVyZWZJZk5vdE51bGwo
SVFJKiBwdHIpCi17Ci0gICAgaWYgKExJS0VMWShwdHIgIT0gMCkpCi0gICAgICAgIElRSV9SZWxl
YXNlKHB0cik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gUmVmUHRyQnJl
d19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2JyZXcvU2hlbGxCcmV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9icmV3L1NoZWxsQnJldy5oCShy
ZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvYnJldy9TaGVsbEJy
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNo
ZWxsQnJld19oCi0jZGVmaW5lIFNoZWxsQnJld19oCi0KLSNpbmNsdWRlIDxBRUVBcHBHZW4uaD4K
LSNpbmNsdWRlIDxBRUVTdGRMaWIuaD4KLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgUGFz
c093blB0cjxUPiBjcmVhdGVJbnN0YW5jZShBRUVDTFNJRCBjbHMpCi17Ci0gICAgVCogaW5zdGFu
Y2UgPSAwOwotCi0gICAgSVNoZWxsKiBzaGVsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QUVFQXBwbGV0
Kj4oR0VUQVBQSU5TVEFOQ0UoKSktPm1fcElTaGVsbDsKLSAgICBJU0hFTExfQ3JlYXRlSW5zdGFu
Y2Uoc2hlbGwsIGNscywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZpbnN0YW5jZSkpOwotICAg
IEFTU0VSVChpbnN0YW5jZSk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBSZWZQdHI8VD4gY3JlYXRlUmVmUHRySW5zdGFu
Y2UoQUVFQ0xTSUQgY2xzKQotewotICAgIFQqIGluc3RhbmNlID0gMDsKLQotICAgIElTaGVsbCog
c2hlbGwgPSByZWludGVycHJldF9jYXN0PEFFRUFwcGxldCo+KEdFVEFQUElOU1RBTkNFKCkpLT5t
X3BJU2hlbGw7Ci0gICAgSVNIRUxMX0NyZWF0ZUluc3RhbmNlKHNoZWxsLCBjbHMsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmaW5zdGFuY2UpKTsKLSAgICBBU1NFUlQoaW5zdGFuY2UpOwotCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKGluc3RhbmNlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LXVzaW5nIFdURjo6Y3JlYXRlSW5zdGFuY2U7Ci11c2luZyBXVEY6OmNyZWF0ZVJlZlB0ckluc3Rh
bmNlOwotCi0jZW5kaWYgLy8gU2hlbGxCcmV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvYnJldy9TdHJpbmdCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2JyZXcvU3RyaW5nQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9icmV3L1N0cmluZ0JyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotI2luY2x1ZGUgPEFFRXN0ZC5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gU3RyaW5nIGNvbnZlcnNpb25zCi1TdHJpbmc6OlN0cmluZyhjb25zdCBB
RUNIQVIqIHN0cmluZykKLXsKLSAgICAvLyBJdCBpcyBzYWZlIHRvIGNhc3QgQUVDSEFSIHRvIFVD
aGFyIGFzIGJvdGggb2YgdGhlbSB1c2UgMTYgYml0cyByZXByZXNlbnRhdGlvbi4KLSAgICBjb25z
dCBVQ2hhciogc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0cmluZyk7Ci0g
ICAgY29uc3Qgc2l6ZV90IGxlbiA9IHN0ZF93c3RybGVuKHN0cmluZyk7Ci0KLSAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLCBsZW4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvYnJldy9TeXN0ZW1NYWxsb2NCcmV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9icmV3L1N5c3RlbU1hbGxv
Y0JyZXcuaAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2Jy
ZXcvU3lzdGVtTWFsbG9jQnJldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN5c3Rl
bU1hbGxvY0JyZXdfaAotI2RlZmluZSBTeXN0ZW1NYWxsb2NCcmV3X2gKLQotI2luY2x1ZGUgPEFF
RVN0ZExpYi5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQqIG1hbGxvY0JyZXcoc2l6ZV90IG4pCi17
Ci0gICAgLy8gQnkgZGVmYXVsdCwgbWVtb3J5IGFsbG9jYXRlZCB1c2luZyBNQUxMT0MoKSBpcyBp
bml0aWFsaXplZAotICAgIC8vIHRvIHplcm8uIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGRpc2FibGVk
IGJ5IHBlcmZvcm1pbmcgYSBiaXR3aXNlCi0gICAgLy8gT1Igb2YgdGhlIGZsYWcgQUxMT0NfTk9f
Wk1FTSB3aXRoIHRoZSBkd1NpemUgcGFyYW1ldGVyLgotICAgIHJldHVybiBNQUxMT0MobiB8IEFM
TE9DX05PX1pNRU0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQqIGNhbGxvY0JyZXcoc2l6ZV90
IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpCi17Ci0gICAgcmV0dXJuIE1BTExPQyhu
dW1FbGVtZW50cyAqIGVsZW1lbnRTaXplKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVC
cmV3KHZvaWQqIHApCi17Ci0gICAgcmV0dXJuIEZSRUUocCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCogcmVhbGxvY0JyZXcodm9pZCogcCwgc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFJFQUxM
T0MocCwgbiB8IEFMTE9DX05PX1pNRU0pOwotfQotCi0vLyBVc2UgTUFMTE9DIG1hY3JvIGluc3Rl
YWQgb2YgdGhlIHN0YW5kYXJkIG1hbGxvYyBmdW5jdGlvbi4KLS8vIEFsdGhvdWdoIFJWQ1QgcHJv
dmlkZXMgbWFsbG9jLCB3ZSBjYW4ndCB1c2UgaXQgaW4gQlJFVwotLy8gYmVjYXVzZSB0aGUgbG9h
ZGVyIGRvZXMgbm90IGluaXRpYWxpemUgdGhlIGJhc2UgYWRkcmVzcyBwcm9wZXJseS4KLSNkZWZp
bmUgbWFsbG9jKG4pIG1hbGxvY0JyZXcobikKLSNkZWZpbmUgY2FsbG9jKG4sIHMpIGNhbGxvY0Jy
ZXcobiwgcykKLSNkZWZpbmUgcmVhbGxvYyhwLCBuKSByZWFsbG9jQnJldyhwLCBuKQotI2RlZmlu
ZSBmcmVlKHApIGZyZWVCcmV3KHApCi0KLSNlbmRpZiAvLyBTeXN0ZW1NYWxsb2NCcmV3X2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9V
bmljb2RlQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi91bmljb2RlL2JyZXcvVW5pY29kZUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4
MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3Rh
aWtvc0BrZGUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEBueXBvcC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVbmljb2RlQnJldy5oIgotCi0jaW5j
bHVkZSA8d2NoYXIuaD4KLSNpbmNsdWRlIDx3Y3R5cGUuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1u
YW1lc3BhY2UgVW5pY29kZSB7Ci0KLVVDaGFyIHRvTG93ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1
cm4gdG93bG93ZXIoYyk7Ci19Ci0KLVVDaGFyIHRvVXBwZXIoVUNoYXIgYykKLXsKLSAgICByZXR1
cm4gdG93dXBwZXIoYyk7Ci19Ci0KLVVDaGFyIGZvbGRDYXNlKFVDaGFyIGMpCi17Ci0gICAgcmV0
dXJuIHRvd2xvd2VyKGMpOwotfQotCi1ib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhciBjKQotewot
ICAgIHJldHVybiAhIWlzd3ByaW50KGMpOwotfQotCi1ib29sIGlzVXBwZXIoVUNoYXIgYykKLXsK
LSAgICByZXR1cm4gISFpc3d1cHBlcihjKTsKLX0KLQotYm9vbCBpc0xvd2VyKFVDaGFyIGMpCi17
Ci0gICAgcmV0dXJuICEhaXN3bG93ZXIoYyk7Ci19Ci0KLWJvb2wgaXNEaWdpdChVQ2hhciBjKQot
ewotICAgIHJldHVybiAhIWlzd2RpZ2l0KGMpOwotfQotCi1ib29sIGlzUHVuY3QoVUNoYXIgYykK
LXsKLSAgICByZXR1cm4gISFpc3dwdW5jdChjKTsKLX0KLQotYm9vbCBpc0FscGhhbnVtZXJpYyhV
Q2hhciBjKQotewotICAgIHJldHVybiAhIWlzd2FsbnVtKGMpOwotfQotCi1pbnQgdG9Mb3dlcihV
Q2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQg
c291cmNlTGVuZ3RoLCBib29sKiBpc0Vycm9yKQotewotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VJ
dGVyYXRvciA9IHNvdXJjZTsKLSAgICBjb25zdCBVQ2hhciogc291cmNlRW5kID0gc291cmNlICsg
c291cmNlTGVuZ3RoOwotICAgIFVDaGFyKiByZXN1bHRJdGVyYXRvciA9IHJlc3VsdDsKLSAgICBV
Q2hhciogcmVzdWx0RW5kID0gcmVzdWx0ICsgcmVzdWx0TGVuZ3RoOwotCi0gICAgaWYgKHNvdXJj
ZUxlbmd0aCA8PSByZXN1bHRMZW5ndGgpIHsKLSAgICAgICAgd2hpbGUgKHNvdXJjZUl0ZXJhdG9y
IDwgc291cmNlRW5kKQotICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3dsb3dlcigq
c291cmNlSXRlcmF0b3IrKyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHJlc3VsdEl0
ZXJhdG9yIDwgcmVzdWx0RW5kKQotICAgICAgICAgICAgKnJlc3VsdEl0ZXJhdG9yKysgPSB0b3ds
b3dlcigqc291cmNlSXRlcmF0b3IrKyk7Ci0gICAgfQotCi0gICAgaW50IHJlbWFpbmluZ0NoYXJh
Y3RlcnMgPSBzb3VyY2VJdGVyYXRvciA8IHNvdXJjZUVuZCA/IHNvdXJjZUVuZCAtIHNvdXJjZUl0
ZXJhdG9yIDogMDsKLSAgICAqaXNFcnJvciA9ICEhcmVtYWluaW5nQ2hhcmFjdGVyczsKLSAgICBp
ZiAocmVzdWx0SXRlcmF0b3IgPCByZXN1bHRFbmQpCi0gICAgICAgICpyZXN1bHRJdGVyYXRvciA9
IDA7Ci0KLSAgICByZXR1cm4gKHJlc3VsdEl0ZXJhdG9yIC0gcmVzdWx0KSArIHJlbWFpbmluZ0No
YXJhY3RlcnM7Ci19Ci0KLWludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5n
dGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3Ip
Ci17Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZUl0ZXJhdG9yID0gc291cmNlOwotICAgIGNvbnN0
IFVDaGFyKiBzb3VyY2VFbmQgPSBzb3VyY2UgKyBzb3VyY2VMZW5ndGg7Ci0gICAgVUNoYXIqIHJl
c3VsdEl0ZXJhdG9yID0gcmVzdWx0OwotICAgIFVDaGFyKiByZXN1bHRFbmQgPSByZXN1bHQgKyBy
ZXN1bHRMZW5ndGg7Ci0KLSAgICBpZiAoc291cmNlTGVuZ3RoIDw9IHJlc3VsdExlbmd0aCkgewot
ICAgICAgICB3aGlsZSAoc291cmNlSXRlcmF0b3IgPCBzb3VyY2VFbmQpCi0gICAgICAgICAgICAq
cmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRvcisrKTsKLSAgICB9IGVs
c2UgewotICAgICAgICB3aGlsZSAocmVzdWx0SXRlcmF0b3IgPCByZXN1bHRFbmQpCi0gICAgICAg
ICAgICAqcmVzdWx0SXRlcmF0b3IrKyA9IHRvd3VwcGVyKCpzb3VyY2VJdGVyYXRvcisrKTsKLSAg
ICB9Ci0KLSAgICBpbnQgcmVtYWluaW5nQ2hhcmFjdGVycyA9IHNvdXJjZUl0ZXJhdG9yIDwgc291
cmNlRW5kID8gc291cmNlRW5kIC0gc291cmNlSXRlcmF0b3IgOiAwOwotICAgICppc0Vycm9yID0g
ISFyZW1haW5pbmdDaGFyYWN0ZXJzOwotICAgIGlmIChyZXN1bHRJdGVyYXRvciA8IHJlc3VsdEVu
ZCkKLSAgICAgICAgKnJlc3VsdEl0ZXJhdG9yID0gMDsKLQotICAgIHJldHVybiAocmVzdWx0SXRl
cmF0b3IgLSByZXN1bHQpICsgcmVtYWluaW5nQ2hhcmFjdGVyczsKLX0KLQotaW50IGZvbGRDYXNl
KFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGlu
dCBzb3VyY2VMZW5ndGgsIGJvb2wqIGlzRXJyb3IpCi17Ci0gICAgKmlzRXJyb3IgPSBmYWxzZTsK
LSAgICBpZiAocmVzdWx0TGVuZ3RoIDwgc291cmNlTGVuZ3RoKSB7Ci0gICAgICAgICppc0Vycm9y
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZUxlbmd0aDsKLSAgICB9Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldID0gZm9s
ZENhc2Uoc291cmNlW2ldKTsKLSAgICByZXR1cm4gc291cmNlTGVuZ3RoOwotfQotCi1VQ2hhciB0
b1RpdGxlQ2FzZShVQ2hhciBjKQotewotICAgIHJldHVybiB0b3d1cHBlcihjKTsKLX0KLQotRGly
ZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERp
cmVjdGlvbj4oSUNVOjpkaXJlY3Rpb24oYykpOwotfQotCi1DaGFyQ2F0ZWdvcnkgY2F0ZWdvcnko
dW5zaWduZWQgaW50IGMpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENoYXJDYXRlZ29yeT4o
VE9fTUFTSygoaW50OF90KSBJQ1U6OmNhdGVnb3J5KGMpKSk7Ci19Ci0KLURlY29tcG9zaXRpb25U
eXBlIGRlY29tcG9zaXRpb25UeXBlKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGVjb21wb3NpdGlvblR5cGU+KElDVTo6ZGVjb21wb3NpdGlvblR5cGUoYykpOwotfQotCi11
bnNpZ25lZCBjaGFyIGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gSUNV
Ojpjb21iaW5pbmdDbGFzcyhjKTsKLX0KLQotVUNoYXIgbWlycm9yZWRDaGFyKFVDaGFyMzIgYykK
LXsKLSAgICByZXR1cm4gSUNVOjptaXJyb3JlZENoYXIoYyk7Ci19Ci0KLWludCBkaWdpdFZhbHVl
KFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIElDVTo6ZGlnaXRWYWx1ZShjKTsKLX0KLQotYm9vbCBp
c1NwYWNlKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuICEhaXN3c3BhY2UoYyk7Ci19Ci0KLWJvb2wg
aXNMZXR0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gISFpc3dhbHBoYShjKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgVW5pY29kZQotfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvYnJldy9Vbmljb2RlQnJldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9icmV3L1VuaWNvZGVCcmV3LmgJKHJl
dmlzaW9uIDk1OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2JyZXcv
VW5pY29kZUJyZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgotICog
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICog
IENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBVbmljb2RlQnJld19oCi0jZGVmaW5lIFVuaWNvZGVCcmV3X2gKLQotI2luY2x1ZGUgIlNj
cmlwdENvZGVzRnJvbUlDVS5oIgotI2luY2x1ZGUgIlVuaWNvZGVGcm9tSUNVLmgiCi0jaW5jbHVk
ZSAiVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci1uYW1lc3BhY2Ug
VW5pY29kZSB7Ci0KLWVudW0gRGlyZWN0aW9uIHsKLSAgICBMZWZ0VG9SaWdodCA9IElDVTo6VV9M
RUZUX1RPX1JJR0hULAotICAgIFJpZ2h0VG9MZWZ0ID0gSUNVOjpVX1JJR0hUX1RPX0xFRlQsCi0g
ICAgRXVyb3BlYW5OdW1iZXIgPSBJQ1U6OlVfRVVST1BFQU5fTlVNQkVSLAotICAgIEV1cm9wZWFu
TnVtYmVyU2VwYXJhdG9yID0gSUNVOjpVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IsCi0gICAg
RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yID0gSUNVOjpVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SLAotICAgIEFyYWJpY051bWJlciA9IElDVTo6VV9BUkFCSUNfTlVNQkVSLAotICAgIENvbW1v
bk51bWJlclNlcGFyYXRvciA9IElDVTo6VV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUiwKLSAgICBC
bG9ja1NlcGFyYXRvciA9IElDVTo6VV9CTE9DS19TRVBBUkFUT1IsCi0gICAgU2VnbWVudFNlcGFy
YXRvciA9IElDVTo6VV9TRUdNRU5UX1NFUEFSQVRPUiwKLSAgICBXaGl0ZVNwYWNlTmV1dHJhbCA9
IElDVTo6VV9XSElURV9TUEFDRV9ORVVUUkFMLAotICAgIE90aGVyTmV1dHJhbCA9IElDVTo6VV9P
VEhFUl9ORVVUUkFMLAotICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nID0gSUNVOjpVX0xFRlRfVE9f
UklHSFRfRU1CRURESU5HLAotICAgIExlZnRUb1JpZ2h0T3ZlcnJpZGUgPSBJQ1U6OlVfTEVGVF9U
T19SSUdIVF9PVkVSUklERSwKLSAgICBSaWdodFRvTGVmdEFyYWJpYyA9IElDVTo6VV9SSUdIVF9U
T19MRUZUX0FSQUJJQywKLSAgICBSaWdodFRvTGVmdEVtYmVkZGluZyA9IElDVTo6VV9SSUdIVF9U
T19MRUZUX0VNQkVERElORywKLSAgICBSaWdodFRvTGVmdE92ZXJyaWRlID0gSUNVOjpVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREUsCi0gICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQgPSBJQ1U6OlVfUE9Q
X0RJUkVDVElPTkFMX0ZPUk1BVCwKLSAgICBOb25TcGFjaW5nTWFyayA9IElDVTo6VV9ESVJfTk9O
X1NQQUNJTkdfTUFSSywKLSAgICBCb3VuZGFyeU5ldXRyYWwgPSBJQ1U6OlVfQk9VTkRBUllfTkVV
VFJBTAotfTsKLQotZW51bSBEZWNvbXBvc2l0aW9uVHlwZSB7Ci0gICAgRGVjb21wb3NpdGlvbk5v
bmUgPSBJQ1U6OlVfRFRfTk9ORSwKLSAgICBEZWNvbXBvc2l0aW9uQ2Fub25pY2FsID0gSUNVOjpV
X0RUX0NBTk9OSUNBTCwKLSAgICBEZWNvbXBvc2l0aW9uQ29tcGF0ID0gSUNVOjpVX0RUX0NPTVBB
VCwKLSAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlID0gSUNVOjpVX0RUX0NJUkNMRSwKLSAgICBEZWNv
bXBvc2l0aW9uRmluYWwgPSBJQ1U6OlVfRFRfRklOQUwsCi0gICAgRGVjb21wb3NpdGlvbkZvbnQg
PSBJQ1U6OlVfRFRfRk9OVCwKLSAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24gPSBJQ1U6OlVfRFRf
RlJBQ1RJT04sCi0gICAgRGVjb21wb3NpdGlvbkluaXRpYWwgPSBJQ1U6OlVfRFRfSU5JVElBTCwK
LSAgICBEZWNvbXBvc2l0aW9uSXNvbGF0ZWQgPSBJQ1U6OlVfRFRfSVNPTEFURUQsCi0gICAgRGVj
b21wb3NpdGlvbk1lZGlhbCA9IElDVTo6VV9EVF9NRURJQUwsCi0gICAgRGVjb21wb3NpdGlvbk5h
cnJvdyA9IElDVTo6VV9EVF9OQVJST1csCi0gICAgRGVjb21wb3NpdGlvbk5vQnJlYWsgPSBJQ1U6
OlVfRFRfTk9CUkVBSywKLSAgICBEZWNvbXBvc2l0aW9uU21hbGwgPSBJQ1U6OlVfRFRfU01BTEws
Ci0gICAgRGVjb21wb3NpdGlvblNxdWFyZSA9IElDVTo6VV9EVF9TUVVBUkUsCi0gICAgRGVjb21w
b3NpdGlvblN1YiA9IElDVTo6VV9EVF9TVUIsCi0gICAgRGVjb21wb3NpdGlvblN1cGVyID0gSUNV
OjpVX0RUX1NVUEVSLAotICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCA9IElDVTo6VV9EVF9WRVJU
SUNBTCwKLSAgICBEZWNvbXBvc2l0aW9uV2lkZSA9IElDVTo6VV9EVF9XSURFLAotfTsKLQotZW51
bSBDaGFyQ2F0ZWdvcnkgewotICAgIE5vQ2F0ZWdvcnkgPSAgMCwKLSAgICBPdGhlcl9Ob3RBc3Np
Z25lZCA9IFRPX01BU0soSUNVOjpVX0dFTkVSQUxfT1RIRVJfVFlQRVMpLAotICAgIExldHRlcl9V
cHBlcmNhc2UgPSBUT19NQVNLKElDVTo6VV9VUFBFUkNBU0VfTEVUVEVSKSwKLSAgICBMZXR0ZXJf
TG93ZXJjYXNlID0gVE9fTUFTSyhJQ1U6OlVfTE9XRVJDQVNFX0xFVFRFUiksCi0gICAgTGV0dGVy
X1RpdGxlY2FzZSA9IFRPX01BU0soSUNVOjpVX1RJVExFQ0FTRV9MRVRURVIpLAotICAgIExldHRl
cl9Nb2RpZmllciA9IFRPX01BU0soSUNVOjpVX01PRElGSUVSX0xFVFRFUiksCi0gICAgTGV0dGVy
X090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfTEVUVEVSKSwKLQotICAgIE1hcmtfTm9uU3Bh
Y2luZyA9IFRPX01BU0soSUNVOjpVX05PTl9TUEFDSU5HX01BUkspLAotICAgIE1hcmtfRW5jbG9z
aW5nID0gVE9fTUFTSyhJQ1U6OlVfRU5DTE9TSU5HX01BUkspLAotICAgIE1hcmtfU3BhY2luZ0Nv
bWJpbmluZyA9IFRPX01BU0soSUNVOjpVX0NPTUJJTklOR19TUEFDSU5HX01BUkspLAotCi0gICAg
TnVtYmVyX0RlY2ltYWxEaWdpdCA9IFRPX01BU0soSUNVOjpVX0RFQ0lNQUxfRElHSVRfTlVNQkVS
KSwKLSAgICBOdW1iZXJfTGV0dGVyID0gVE9fTUFTSyhJQ1U6OlVfTEVUVEVSX05VTUJFUiksCi0g
ICAgTnVtYmVyX090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfTlVNQkVSKSwKLQotICAgIFNl
cGFyYXRvcl9TcGFjZSA9IFRPX01BU0soSUNVOjpVX1NQQUNFX1NFUEFSQVRPUiksCi0gICAgU2Vw
YXJhdG9yX0xpbmUgPSBUT19NQVNLKElDVTo6VV9MSU5FX1NFUEFSQVRPUiksCi0gICAgU2VwYXJh
dG9yX1BhcmFncmFwaCA9IFRPX01BU0soSUNVOjpVX1BBUkFHUkFQSF9TRVBBUkFUT1IpLAotCi0g
ICAgT3RoZXJfQ29udHJvbCA9IFRPX01BU0soSUNVOjpVX0NPTlRST0xfQ0hBUiksCi0gICAgT3Ro
ZXJfRm9ybWF0ID0gVE9fTUFTSyhJQ1U6OlVfRk9STUFUX0NIQVIpLAotICAgIE90aGVyX1ByaXZh
dGVVc2UgPSBUT19NQVNLKElDVTo6VV9QUklWQVRFX1VTRV9DSEFSKSwKLSAgICBPdGhlcl9TdXJy
b2dhdGUgPSBUT19NQVNLKElDVTo6VV9TVVJST0dBVEUpLAotCi0gICAgUHVuY3R1YXRpb25fRGFz
aCA9IFRPX01BU0soSUNVOjpVX0RBU0hfUFVOQ1RVQVRJT04pLAotICAgIFB1bmN0dWF0aW9uX09w
ZW4gPSBUT19NQVNLKElDVTo6VV9TVEFSVF9QVU5DVFVBVElPTiksCi0gICAgUHVuY3R1YXRpb25f
Q2xvc2UgPSBUT19NQVNLKElDVTo6VV9FTkRfUFVOQ1RVQVRJT04pLAotICAgIFB1bmN0dWF0aW9u
X0Nvbm5lY3RvciA9IFRPX01BU0soSUNVOjpVX0NPTk5FQ1RPUl9QVU5DVFVBVElPTiksCi0gICAg
UHVuY3R1YXRpb25fT3RoZXIgPSBUT19NQVNLKElDVTo6VV9PVEhFUl9QVU5DVFVBVElPTiksCi0K
LSAgICBTeW1ib2xfTWF0aCA9IFRPX01BU0soSUNVOjpVX01BVEhfU1lNQk9MKSwKLSAgICBTeW1i
b2xfQ3VycmVuY3kgPSBUT19NQVNLKElDVTo6VV9DVVJSRU5DWV9TWU1CT0wpLAotICAgIFN5bWJv
bF9Nb2RpZmllciA9IFRPX01BU0soSUNVOjpVX01PRElGSUVSX1NZTUJPTCksCi0gICAgU3ltYm9s
X090aGVyID0gVE9fTUFTSyhJQ1U6OlVfT1RIRVJfU1lNQk9MKSwKLQotICAgIFB1bmN0dWF0aW9u
X0luaXRpYWxRdW90ZSA9IFRPX01BU0soSUNVOjpVX0lOSVRJQUxfUFVOQ1RVQVRJT04pLAotICAg
IFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUgPSBUT19NQVNLKElDVTo6VV9GSU5BTF9QVU5DVFVBVElP
TikKLX07Ci0KLVVDaGFyIGZvbGRDYXNlKFVDaGFyKTsKLQotaW50IGZvbGRDYXNlKFVDaGFyKiBy
ZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBzb3VyY2VM
ZW5ndGgsIGJvb2wqIGlzRXJyb3IpOwotCi1pbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc291cmNlLCBpbnQgc291cmNlTGVuZ3RoLCBib29s
KiBpc0Vycm9yKTsKLQotVUNoYXIgdG9VcHBlcihVQ2hhcik7Ci1VQ2hhciB0b0xvd2VyKFVDaGFy
KTsKLQotYm9vbCBpc1VwcGVyKFVDaGFyKTsKLQotaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwg
aW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IHNvdXJjZUxlbmd0aCwg
Ym9vbCogaXNFcnJvcik7Ci0KLVVDaGFyIHRvVGl0bGVDYXNlKFVDaGFyKTsKLQotaW5saW5lIGJv
b2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYg
YyA8PSAweDA2RkY7Ci19Ci0KLWJvb2wgaXNBbHBoYW51bWVyaWMoVUNoYXIpOwotCi1DaGFyQ2F0
ZWdvcnkgY2F0ZWdvcnkodW5zaWduZWQgaW50KTsKLQotaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JT
cGFjZShVQ2hhciBjKQotewotICAgIHJldHVybiBjYXRlZ29yeShjKSA9PSBTZXBhcmF0b3JfU3Bh
Y2U7Ci19Ci0KLWJvb2wgaXNQcmludGFibGVDaGFyKFVDaGFyKTsKLQotYm9vbCBpc0RpZ2l0KFVD
aGFyKTsKLQotYm9vbCBpc1B1bmN0KFVDaGFyKTsKLQotaW5saW5lIGJvb2wgaGFzTGluZUJyZWFr
aW5nUHJvcGVydHlDb21wbGV4Q29udGV4dChVQ2hhcjMyKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQhCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxpbmUgYm9vbCBoYXNMaW5lQnJlYWtp
bmdQcm9wZXJ0eUNvbXBsZXhDb250ZXh0T3JJZGVvZ3JhcGhpYyhVQ2hhcjMyIGMpCi17Ci0gICAg
Ly8gRklYTUUKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVVDaGFyIG1pcnJvcmVkQ2hhcihVQ2hh
cjMyKTsKLQotRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyKTsKLQotYm9vbCBpc0xvd2VyKFVD
aGFyKTsKLQotaW50IGRpZ2l0VmFsdWUoVUNoYXIpOwotCi11bnNpZ25lZCBjaGFyIGNvbWJpbmlu
Z0NsYXNzKFVDaGFyMzIpOwotCi1EZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShV
Q2hhcjMyKTsKLQotaW5saW5lIGludCB1bWVtY2FzZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3Qg
VUNoYXIqIGIsIGludCBsZW4pCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkg
ewotICAgICAgICBVQ2hhciBjMSA9IGZvbGRDYXNlKGFbaV0pOwotICAgICAgICBVQ2hhciBjMiA9
IGZvbGRDYXNlKGJbaV0pOwotICAgICAgICBpZiAoYzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1
cm4gYzEgLSBjMjsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgaXNTcGFjZShVQ2hh
cik7Ci1ib29sIGlzTGV0dGVyKFVDaGFyKTsKLQotfSAvLyBuYW1lc3BhY2UgVW5pY29kZQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3
NiBAQAorMjAxMS0wOS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAg
ICAgIEZpbmlzaCByZW1vdmluZyBQTEFURk9STShCUkVXTVApIGJ5IHJlbW92aW5nIGFzc29jaWF0
ZWQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg3NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
aGVuIEdlb2ZmcmV5IEdhcmVuIHJlbW92ZWQgUExBVEZPUk0oQlJFV01QKSBpbgorICAgICAgICBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NTU1NSwgaGUgZGlkIG5vdCByZW1vdmUg
YWxsIHRoZQorICAgICAgICBhc3NvY2lhdGVkIGNvZGUuICBUaGlzIGNvbXBsZXRlcyB0aGUgd29y
ayBzdGFydGVkIGluIHI5NTU1NSBieSByZW1vdmluZworICAgICAgICBhbGwgdGhlIGNvZGUgYXNz
b2ljYXRlZCB3aXRoIFBMQVRGT1JNKEJSRVdNUCkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlckJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGVkaXRpbmcv
YnJldzogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL2JyZXcvRWRpdG9yQnJldy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIHBhZ2UvYnJldzog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2JyZXcvQ2hyb21lQ2xpZW50QnJldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBhZ2UvYnJldy9EcmFnQ29udHJvbGxlckJyZXcuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBhZ2UvYnJldy9FdmVudEhhbmRsZXJCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwYWdlL2JyZXcvRnJhbWVCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9icmV3OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2JyZXcvQ2xpcGJvYXJkQnJldy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9DbGlwYm9hcmRCcmV3Lmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2JyZXcvQ29udGV4dE1lbnVJdGVtQnJldy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9DdXJzb3JCcmV3LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9icmV3L0RyYWdEYXRhQnJldy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vYnJldy9FdmVudExvb3BCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9icmV3L0ZpbGVTeXN0ZW1CcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9icmV3L0tVUkxCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9i
cmV3L0xhbmd1YWdlQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9M
b2NhbGl6ZWRTdHJpbmdzQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJl
dy9Mb2dnaW5nQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9NSU1F
VHlwZVJlZ2lzdHJ5QnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9Q
YXN0ZWJvYXJkQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9i
cmV3L1BsYXRmb3JtTW91c2VFdmVudEJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2JyZXcvUGxhdGZvcm1Ub3VjaEV2ZW50QnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vYnJldy9QbGF0Zm9ybVRvdWNoUG9pbnRCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9icmV3L1BvcHVwTWVudUJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2JyZXcvUG9wdXBNZW51QnJldy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2JyZXcvU1NMS2V5R2VuZXJhdG9yQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vYnJldy9TY3JlZW5CcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9i
cmV3L1Njcm9sbGJhclRoZW1lQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
YnJldy9TY3JvbGxiYXJUaGVtZUJyZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9i
cmV3L1NlYXJjaFBvcHVwTWVudUJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2JyZXcvU2VhcmNoUG9wdXBNZW51QnJldy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2JyZXcvU2hhcmVkQnVmZmVyQnJldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
YnJldy9TaGFyZWRUaW1lckJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Jy
ZXcvU291bmRCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9icmV3L1N5c3Rl
bVRpbWVCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9icmV3L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYnJldy9XaWRnZXRC
cmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9icmV3OiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JyZXcvSWNvbkJyZXcuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JyZXcvSW1hZ2VCcmV3LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9icmV3L0ludFBvaW50QnJldy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYnJldy9JbnRTaXplQnJldy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9icmV3OiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYnJldy9ETlNCcmV3LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JyZXcvU29ja2V0U3RyZWFtRXJyb3IuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JyZXcvU29ja2V0U3RyZWFtSGFuZGxlLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUhh
bmRsZUJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYnJldy9T
b2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9icmV3OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvYnJldy9UZXh0Qm91
bmRhcmllc0JyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvYnJldy9U
ZXh0QnJlYWtJdGVyYXRvckJyZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvYnJldy9UZXh0Q29kZWNCcmV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5oOiBSZW1vdmVkLgorCiAyMDExLTA5LTI1ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFBMQVRGT1JNKEhBSUtV
KSBhbmQgYXNzb2NpYXRlZCBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NTky
MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTk0
MSw3ICsxOTQxLDYgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCcs
Ci0gICAgICAgICAgICAnYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckJyZXcuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyRWZsLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckd0ay5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0nLApAQCAtMjUyNSw3ICsyNTI0LDYg
QEAKICAgICAgICAgICAgICdlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAnLAogICAgICAg
ICAgICAgJ2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmgnLAotICAgICAg
ICAgICAgJ2VkaXRpbmcvYnJldy9FZGl0b3JCcmV3LmNwcCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvY2hy
b21pdW0vRnJhbWVTZWxlY3Rpb25DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcv
Z3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcCcsCkBAIC0yOTYxLDEwICsyOTU5LDYgQEAKICAgICAg
ICAgICAgICdwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oJywKICAgICAgICAgICAg
ICdwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAnLAogICAgICAgICAgICAgJ3Bh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgnLAotICAgICAgICAgICAgJ3BhZ2UvYnJl
dy9DaHJvbWVDbGllbnRCcmV3LmgnLAotICAgICAgICAgICAgJ3BhZ2UvYnJldy9EcmFnQ29udHJv
bGxlckJyZXcuY3BwJywKLSAgICAgICAgICAgICdwYWdlL2JyZXcvRXZlbnRIYW5kbGVyQnJldy5j
cHAnLAotICAgICAgICAgICAgJ3BhZ2UvYnJldy9GcmFtZUJyZXcuY3BwJywKICAgICAgICAgICAg
ICdwYWdlL2Nocm9taXVtL0Nocm9tZUNsaWVudENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3Bh
Z2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwJywKQEAgLTMxNDUsMzggKzMxMzks
NiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL21rbC9GRlRGcmFtZU1LTC5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2JyZXcvQ2xpcGJvYXJkQnJldy5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2JyZXcvQ2xpcGJvYXJkQnJldy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3
L0NvbnRleHRNZW51QnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvQ29udGV4
dE1lbnVJdGVtQnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvQ3Vyc29yQnJl
dy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvRHJhZ0RhdGFCcmV3LmNwcCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vYnJldy9FdmVudExvb3BCcmV3LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vYnJldy9GaWxlU3lzdGVtQnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2JyZXcvS1VSTEJyZXcuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L0xhbmd1
YWdlQnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvTG9jYWxpemVkU3RyaW5n
c0JyZXcuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L0xvZ2dpbmdCcmV3LmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vYnJldy9NSU1FVHlwZVJlZ2lzdHJ5QnJldy5jcHAnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvUGFzdGVib2FyZEJyZXcuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9icmV3L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEJyZXcuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9icmV3L1BsYXRmb3JtTW91c2VFdmVudEJyZXcuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9icmV3L1BsYXRmb3JtVG91Y2hFdmVudEJyZXcuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9icmV3L1BsYXRmb3JtVG91Y2hQb2ludEJyZXcuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9icmV3L1BvcHVwTWVudUJyZXcuY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9icmV3L1BvcHVwTWVudUJyZXcuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vYnJl
dy9TU0xLZXlHZW5lcmF0b3JCcmV3LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vYnJldy9T
Y3JlZW5CcmV3LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vYnJldy9TY3JvbGxiYXJUaGVt
ZUJyZXcuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L1Njcm9sbGJhclRoZW1lQnJl
dy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L1NlYXJjaFBvcHVwTWVudUJyZXcuY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L1NlYXJjaFBvcHVwTWVudUJyZXcuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vYnJldy9TaGFyZWRCdWZmZXJCcmV3LmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vYnJldy9TaGFyZWRUaW1lckJyZXcuY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9icmV3L1NvdW5kQnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcv
U3lzdGVtVGltZUJyZXcuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9icmV3L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2JyZXcvV2lkZ2V0QnJldy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0ZpbGVTeXN0ZW1DRi5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAnLApAQCAtMzM2OSwxMCArMzMzMSw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0nLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2JyZXcvSWNvbkJyZXcuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9icmV3
L0ltYWdlQnJldy5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2JyZXcvSW50
UG9pbnRCcmV3LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvYnJldy9JbnRT
aXplQnJldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uLmgnLApAQCAtNDExMiwxMSArNDA3MCw2IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL25ldHdvcmsvYnJldy9ETlNCcmV3LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUVycm9yLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL25ldHdvcmsvYnJldy9Tb2NrZXRTdHJlYW1IYW5kbGUuaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUhhbmRsZUJyZXcuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9uZXR3b3JrL2JyZXcvU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ0YuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ0YuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAnLApAQCAt
NDMxNCwxMCArNDI2Nyw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdSZWdpc3RyeS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9icmV3L1RleHRCb3VuZGFyaWVzQnJldy5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL3RleHQvYnJldy9UZXh0QnJlYWtJdGVyYXRvckJyZXcuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Q29kZWNCcmV3LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvY2YvU3RyaW5nQ0YuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L2NmL1N0cmluZ0ltcGxDRi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDk1OTIyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTMsNyArMTI5Myw3IEBACiAgICAgICBd
LAogICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
byBzdG9yZSB0aGVzZSBwYXR0ZXJucyBpbiBhIHZhcmlhYmxlLgotICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKGJyZXd8Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xs
aW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xz
eW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKKyAgICAgICAgWydleGNsdWRl
JywgJyhjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGxpbnV4
fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJp
YW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAn
KD88IUNocm9taXVtKShDYWlyb3xDRnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBl
fFBPU0lYfFBvc2l4fFF0fFNhZmFyaXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8
bW0/KSQnXSwKIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnQWxsSW5PbmVcXC5jcHAkJ10sCkBAIC0x
MzQ4LDcgKzEzNDgsNyBAQAogICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vJ10sCiAKICAg
ICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4g
YSB2YXJpYWJsZS4KLSAgICAgICAgWydleGNsdWRlJywgJyhicmV3fGNhaXJvfGNhfGNmfGNnfGN1
cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8bGludXh8bWFjfG9wZW5nbHxvcGVudmd8b3Bl
bnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlhbnx0ZXhtYXB8aXBob25lfHdpbnx3
aW5jZXx3eCkvJ10sCisgICAgICAgIFsnZXhjbHVkZScsICcoY2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxl
Zmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlw
ZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNl
fHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8
Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291
cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLApAQCAtMTYwMCw3ICsxNjAwLDcgQEAK
ICAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRlcmluZy8nXSwKIAogICAgICAgICAjIEZJWE1FOiBG
aWd1cmUgb3V0IGhvdyB0byBzdG9yZSB0aGVzZSBwYXR0ZXJucyBpbiBhIHZhcmlhYmxlLgotICAg
ICAgICBbJ2V4Y2x1ZGUnLCAnKGJyZXd8Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8
Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3Np
eHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKKyAg
ICAgICAgWydleGNsdWRlJywgJyhjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3Ry
ZWFtZXJ8Z3RrfGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0
fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnKD88IUNocm9taXVtKShDYWlyb3xDRnxDR3xDdXJsfEd0a3xKU0N8TGlu
dXh8TWFjfE9wZW5UeXBlfFBPU0lYfFBvc2l4fFF0fFNhZmFyaXxTb3VwfFN5bWJpYW58V2lufFdp
bkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnQWxsSW5PbmVc
XC5jcHAkJ10sCkBAIC0xNjY5LDcgKzE2NjksNyBAQAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnYnJp
ZGdlL2puaS9qc2MvJ10sCiAKICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gc3Rv
cmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJpYWJsZS4KLSAgICAgICAgWydleGNsdWRlJywgJyhi
cmV3fGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8bGludXh8
bWFjfG9wZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlh
bnx0ZXhtYXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCisgICAgICAgIFsnZXhjbHVkZScsICco
Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8
b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRl
eG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJyg/PCFD
aHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJ
WHxQb3NpeHxRdHxTYWZhcml8U291cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykk
J10sCiAKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwuY3BwJCddLApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckJyZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJCcmV3LmNw
cAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgot
Ci0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8
SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdElu
c3RhbmNlRm9yV2lkZ2V0KFdlYkNvcmU6OldpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lk
Z2V0LT5pc1BsdWdpblZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvYnJl
dy9FZGl0b3JCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Jy
ZXcvRWRpdG9yQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9icmV3L0VkaXRvckJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0KLSNpbmNsdWRlICJD
bGlwYm9hcmRCcmV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxDbGlw
Ym9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kg
cG9saWN5LCBGcmFtZSopCi17Ci0gICAgcmV0dXJuIG5ldyBDbGlwYm9hcmRCcmV3KHBvbGljeSwg
Q2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA5NTkyMikKKysrIFNvdXJjZS9XZWJD
b3JlL2d5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsOCBAQAogICAg
ICAgICBbJ2V4Y2x1ZGUnLCAndGhpcmRwYXJ0eS8nXSwKIAogICAgICAgICAjIEZJWE1FOiBGaWd1
cmUgb3V0IGhvdyB0byBzdG9yZSB0aGVzZSBwYXR0ZXJucyBpbiBhIHZhcmlhYmxlLgotICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnKGJyZXd8Y2Fpcm98Y2hyb21pdW18Y3VybHxlZmx8ZnJlZXR5cGV8ZmZ0
d3xnc3RyZWFtZXJ8Z3RrfGxpbnV4fG1rbHxvcGVudmd8cGFuZ298cXR8c2tpYXxzb3VwfHN5bWJp
YW58dGV4bWFwfGlwaG9uZXx2OHx3aW58d2luY2V8d3gpLyddLAotICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKEJyZXd8Q2Fpcm98Q3VybHxDaHJvbWl1bXxFZmx8R3RrfExpbnV4fE9wZW5UeXBlfFF0fFNh
ZmFyaXxTb3VwfFN5bWJpYW58Vjh8V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKKyAgICAg
ICAgWydleGNsdWRlJywgJyhjYWlyb3xjaHJvbWl1bXxjdXJsfGVmbHxmcmVldHlwZXxmZnR3fGdz
dHJlYW1lcnxndGt8bGludXh8bWtsfG9wZW52Z3xwYW5nb3xxdHxza2lhfHNvdXB8c3ltYmlhbnx0
ZXhtYXB8aXBob25lfHY4fHdpbnx3aW5jZXx3eCkvJ10sCisgICAgICAgIFsnZXhjbHVkZScsICco
Q2Fpcm98Q3VybHxDaHJvbWl1bXxFZmx8R3RrfExpbnV4fE9wZW5UeXBlfFF0fFNhZmFyaXxTb3Vw
fFN5bWJpYW58Vjh8V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKICAgICAgICAgWydleGNs
dWRlJywgJ0Nocm9taXVtW14vXSpcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzLyddLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9icmV3L0Nocm9tZUNsaWVudEJyZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2JyZXcvQ2hyb21lQ2xpZW50QnJldy5oCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYnJldy9DaHJvbWVDbGllbnRCcmV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENocm9tZUNsaWVudEJyZXdfaAotI2RlZmluZSBDaHJv
bWVDbGllbnRCcmV3X2gKLQotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFz
cyBQb3B1cE1lbnVDbGllbnQ7Ci0KLS8vIENvbnRhaW5zIEJyZXctc3BlY2lmaWMgZXh0ZW5zaW9u
cyB0byB0aGUgQ2hyb21lQ2xpZW50LiAgT25seSBwdXQKLS8vIHRoaW5ncyBoZXJlIHRoYXQgZG9u
J3QgbWFrZSBzZW5zZSBmb3Igb3RoZXIgcG9ydHMuCi1jbGFzcyBDaHJvbWVDbGllbnRCcmV3IDog
cHVibGljIENocm9tZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkKiB3ZWJWaWV3
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVTZWxlY3RQb3B1
cChQb3B1cE1lbnVDbGllbnQqLCBpbnQgc2VsZWN0ZWQsIGNvbnN0IEludFJlY3QmIHJlY3QpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVzdHJveVNlbGVjdFBvcHVwKCkgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
YnJldy9EcmFnQ29udHJvbGxlckJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYnJldy9EcmFnQ29udHJvbGxlckJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYnJldy9EcmFnQ29udHJvbGxlckJyZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIENvbXBh
bnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFn
Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBGSVhNRTogVGhlc2UgdmFsdWVzIGFyZSBzdHJhaWdodCBvdXQgb2YgRHJhZ0Nv
bnRyb2xsZXJNYWMsIHNvIHByb2JhYmx5IGhhdmUKLS8vIGxpdHRsZSBjb3JyZWxhdGlvbiB3aXRo
IEJSRVcgc3RhbmRhcmRzLi4uCi1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9y
ZGVySW5zZXQgPSAyOwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpNYXhPcmlnaW5hbEltYWdl
QXJlYSA9IDE1MDAgKiAxNTAwOwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvblJp
Z2h0SW5zZXQgPSA3OwotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbUlu
c2V0ID0gMzsKLQotY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0g
MC43NWY7Ci0KLQotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSop
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVy
OjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBsb2dpYyBpcyBpbmNvbXBsZXRlCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc1VSTCgpKQot
ICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7Ci0KLSAgICByZXR1cm4gRHJhZ09wZXJh
dGlvbk5vbmU7Ci19Ci0KLWNvbnN0IEludFNpemUmIERyYWdDb250cm9sbGVyOjptYXhEcmFnSW1h
Z2VTaXplKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBtYXhEcmFnSW1hZ2VTaXplKDQw
MCwgNDAwKTsKLQotICAgIHJldHVybiBtYXhEcmFnSW1hZ2VTaXplOwotfQotCi12b2lkIERyYWdD
b250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1EcmFnKCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRXZlbnRIYW5kbGVy
QnJldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9icmV3L0V2ZW50SGFu
ZGxlckJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYnJl
dy9FdmVudEhhbmRsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgotICogQ29weXJpZ2h0
IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIkNsaXBib2FyZEJyZXcu
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJXaWRnZXQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxs
Rm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQotewotICAg
IFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7Ci19Ci0KLWJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKLXsKLSAgICAvLyBGaWd1cmUgb3V0
IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVyT2JqZWN0KiB0YXJn
ZXQgPSB0YXJnZXROb2RlKGV2ZW50KSA/IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDog
MDsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVy
V2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NX
aWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQot
ewotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndp
ZGdldCgpKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJvdXRlIHRoZSBtb3Vz
ZSBkb3duIGV2ZW50IHRvIHRoZSBuYXRpdmUgd2lkZ2V0cywgaXQgc2VlbXMgbGlrZSBhCi0vLyB3
b3JrIGFyb3VuZCBmb3IgdGhlIE1hYyBwbGF0Zm9ybSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGRv
dWJsZSBjbGlja3MsIGJ1dCBicm93c2VycyBkby4KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91
c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0
aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBmb3IgbW91c2UgZXZlbnRzIGJ5IEZyYW1lVmlldzo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KCkuCi0vLyBJdCBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGV2ZW50cyBhcmUgc3luYydlZCBj
b3JyZWN0bHkgYmV0d2VlbiBmcmFtZXMuIEZvciBleGFtcGxlCi0vLyBpZiB0aGUgdXNlciBwcmVz
c2VzIGRvd24gaW4gb25lIGZyYW1lIGFuZCB1cCBpbiBhbm90aGVyIGZyYW1lLCB0aGlzIGZ1bmN0
aW9uIHdpbGwKLS8vIHJldHVybnMgdHJ1ZSwgYW5kIHBhc3MgdGhlIGV2ZW50IHRvIHRoZSBjb3Jy
ZWN0IGZyYW1lLgotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFt
ZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgRnJhbWUqIHN1YmZyYW1lLCBI
aXRUZXN0UmVzdWx0KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8gVGhpcyBpcyBjYWxsZWQgdG8gcm91dGUgd2hlZWwgZXZlbnRzIHRvIGNoaWxk
IHdpZGdldHMgd2hlbiB0aGV5IGFyZSBSZW5kZXJXaWRnZXQKLS8vIGFzIHRoZSBwYXJlbnQgdXN1
YWxseSBnZXRzIHdoZWVsIGV2ZW50LiBEb24ndCBoYXZlIGEgbW91c2Ugd2l0aCBhIHdoZWVsIHRv
IGNvbmZpcm0KLS8vIHRoZSBvcGVyYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KLWJvb2wgRXZlbnRI
YW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQs
IFdpZGdldCogd2lkZ2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJh
bWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCi17
Ci0gICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsK
LX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RS
ZXN1bHQqIGhvdmVyZWROb2RlKQotewotICAgIHJldHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3Vi
ZnJhbWUobWV2LCBzdWJmcmFtZSwgaG92ZXJlZE5vZGUpOwotfQotCi1ib29sIEV2ZW50SGFuZGxl
cjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKLXsKLSAgICByZXR1cm4gcGFzc1N1YmZyYW1l
RXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOwotfQotCi11bnNpZ25lZCBFdmVudEhhbmRs
ZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6QWx0S2V5OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYnJldy9GcmFtZUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYnJldy9GcmFtZUJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYnJldy9GcmFtZUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1EcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1EcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJ
bWFnZUZvclNlbGVjdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9DbGlwYm9hcmRC
cmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NsaXBi
b2FyZEJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JyZXcvQ2xpcGJvYXJkQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQnJldy5oIgotCi0jaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmls
ZUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRy
PENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBEcmFn
RGF0YSosIEZyYW1lKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQ2xpcGJvYXJkQnJldzo6Q2xp
cGJvYXJkQnJldyhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBDbGlwYm9hcmRUeXBlIGNs
aXBib2FyZFR5cGUpCi0gICAgOiBDbGlwYm9hcmQocG9saWN5LCBjbGlwYm9hcmRUeXBlKQotewot
fQotCi1DbGlwYm9hcmRCcmV3Ojp+Q2xpcGJvYXJkQnJldygpCi17Ci19Ci0KLXZvaWQgQ2xpcGJv
YXJkQnJldzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgQVNTRVJUKGlzRm9yRHJh
Z0FuZERyb3AoKSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQnJldzo6Y2xlYXJBbGxEYXRhKCkKLXsK
LSAgICBBU1NFUlQoaXNGb3JEcmFnQW5kRHJvcCgpKTsKLX0KLQotU3RyaW5nIENsaXBib2FyZEJy
ZXc6OmdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9vbCYgc3VjY2VzcykgY29uc3QKLXsKLSAgICBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgcmV0dXJuICIiOwotfQotCi1ib29sIENsaXBib2FyZEJyZXc6
OnNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBBU1NFUlQoaXNG
b3JEcmFnQW5kRHJvcCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIGV4dGVuc2lvbnMg
YmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQnJldzo6dHlwZXMoKSBj
b25zdAotewotICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKLX0KLQotUGFzc1JlZlB0cjxG
aWxlTGlzdD4gQ2xpcGJvYXJkQnJldzo6ZmlsZXMoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQnJldzo6c2V0RHJhZ0lt
YWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotewotfQotCi12b2lkIENsaXBib2Fy
ZEJyZXc6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50JikKLXsKLX0K
LQotRHJhZ0ltYWdlUmVmIENsaXBib2FyZEJyZXc6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQnJldzo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwg
RnJhbWUqKQotewotfQotCi12b2lkIENsaXBib2FyZEJyZXc6OndyaXRlVVJMKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCi17Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQnJldzo6d3Jp
dGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqKQotewotICAgIEFTU0VSVChzZWxl
Y3RlZFJhbmdlKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRCcmV3Ojp3cml0ZVBsYWluVGV4dChjb25z
dCBTdHJpbmcmKQotewotfQotCi1ib29sIENsaXBib2FyZEJyZXc6Omhhc0RhdGEoKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYnJldy9DbGlwYm9hcmRCcmV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9DbGlwYm9hcmRCcmV3LmgJKHJldmlzaW9uIDk1OTIx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9DbGlwYm9hcmRCcmV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkQnJld19oCi0jZGVm
aW5lIENsaXBib2FyZEJyZXdfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
LSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
YWNoZWRJbWFnZTsKLQotY2xhc3MgQ2xpcGJvYXJkQnJldyA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgQ2xpcGJvYXJkQnJldyhD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBDbGlwYm9hcmRUeXBlKTsKLSAgICB+Q2xpcGJv
YXJkQnJldygpOwotCi0gICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCBjbGVhckFsbERhdGEoKTsKLSAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29s
JiBzdWNjZXNzKSBjb25zdDsKLSAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNv
bnN0IEludFBvaW50Jik7Ci0KLSAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2UoSW50UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJh
Z0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1l
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwotICAgIHZp
cnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBoYXNEYXRhKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBDbGlwYm9hcmRCcmV3X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvQ29u
dGV4dE1lbnVCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
cmV3L0NvbnRleHRNZW51QnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAs
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51
LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Db250ZXh0TWVudTo6Q29udGV4dE1l
bnUoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbiBtZW51KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLUNvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXVuc2lnbmVkIENvbnRl
eHRNZW51OjppdGVtQ291bnQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVk
IGludCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnU6
OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbSogQ29u
dGV4dE1lbnU6Oml0ZW1XaXRoQWN0aW9uKHVuc2lnbmVkIGFjdGlvbikKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1Db250ZXh0TWVudUl0ZW0qIENvbnRleHRNZW51OjppdGVtQXRJbmRleCh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlwdGlvbikKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBs
YXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29u
dGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVBs
YXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlw
dGlvbigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YnJldy9Db250ZXh0TWVudUl0ZW1CcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51SXRlbUJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvQ29udGV4dE1lbnVJdGVtQnJldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBDb21wYW55IDEwMCwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0KLSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVu
dUl0ZW0oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gaXRlbSkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShDb250ZXh0TWVudSogc3ViTWVudSkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9u
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1lbnUqIHN1Yk1lbnUpCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQ29u
dGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi1Db250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gQWN0aW9uVHlwZTsKLX0KLQotQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJ
dGVtOjphY3Rpb24oKSBjb25zdAoteyAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjsK
LX0KLQotU3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0bGUoKSBjb25zdCAKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0
Zm9ybVN1Yk1lbnUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51
SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0U3ViTWVudShDb250ZXh0TWVudSogc3ViTWVudSkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0Q2hlY2tlZChib29sIGNoZWNrZWQpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVu
YWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ29udGV4dE1lbnVJdGVtOjplbmFibGVkKCkgY29u
c3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YnJldy9DdXJzb3JCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9icmV3L0N1cnNvckJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JyZXcvQ3Vyc29yQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIldlYkNvcmUiCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDdXJzb3IuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1DdXJzb3I6On5DdXJzb3IoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLUN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29y
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotc3Rh
dGljIGlubGluZSBDdXJzb3ImIGR1bW15Q3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKCkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHBv
aW50ZXJDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15
Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgaGFuZEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVt
bXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJz
b3ImIGlCZWFtQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBk
dW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgaGVscEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1j
b25zdCBDdXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFz
dFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVt
bXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBk
dW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0K
LQotY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRo
U291dGhSZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3Io
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25z
dCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29y
JiBjb2x1bW5SZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQot
Ci1jb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjZWxs
Q3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNv
cigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJz
b3ImIG5vRHJvcEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBD
dXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1j
b25zdCBDdXJzb3ImIG5vbmVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNv
cigpCi17Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9v
bUluQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vy
c29yJiB6b29tT3V0Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RQ
YW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1t
eUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoUGFubmluZ0N1cnNvcigpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQotY29u
c3QgQ3Vyc29yJiBub3J0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQot
Ci1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
c291dGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZHVtbXlDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNv
cigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZHVtbXlDdXJzb3IoKTsK
LX0KLQotY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBkdW1teUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGdyYWJiaW5n
Q3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkdW1teUN1cnNv
cigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9icmV3L0RyYWdEYXRhQnJldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYnJldy9EcmFnRGF0YUJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvRHJhZ0RhdGFCcmV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAs
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdEYXRhLmgi
Ci0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2Uo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIERyYWdEYXRh
Ojpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1T
dHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLUNvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q29sb3IoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWlu
c1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVuYW1lQ29u
dmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKikgY29uc3QKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6
OmFzRnJhZ21lbnQoRG9jdW1lbnQqKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi12b2lk
IERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0Ci17Ci19Ci0KLWJv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYnJldy9FdmVudExvb3BCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9icmV3L0V2ZW50TG9vcEJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvRXZlbnRMb29wQnJldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55IDEwMCwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRXZlbnRMb29wLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBFdmVu
dExvb3A6OmN5Y2xlKCkKLXsKLSAgICAvLyBCUkVXIE1QIGRvZXMgbm90IGhhdmUgYW4gZXhwbGlj
aXQgZXZlbnQgbG9vcC4KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYnJldy9GaWxlU3lzdGVtQnJldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9GaWxlU3lzdGVtQnJldy5jcHAJKHJldmlzaW9u
IDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9GaWxlU3lzdGVtQnJldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotI2luY2x1ZGUgPEFFRUFwcEdlbi5oPgotI2luY2x1ZGUgPEFFRUZpbGUuaD4K
LSNpbmNsdWRlIDxBRUVTdGRMaWIuaD4KLQotI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4K
LSNpbmNsdWRlIDx3dGYvYnJldy9SZWZQdHJCcmV3Lmg+Ci0jaW5jbHVkZSA8d3RmL2JyZXcvU2hl
bGxCcmV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyBsb25nJiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPElGaWxlTWdyPiBmaWxlTWdyID0g
Y3JlYXRlUmVmUHRySW5zdGFuY2U8SUZpbGVNZ3I+KEFFRUNMU0lEX0ZJTEVNR1IpOwotICAgIEZp
bGVJbmZvIGluZm87Ci0KLSAgICBpZiAoSUZJTEVNR1JfR2V0SW5mbyhmaWxlTWdyLmdldCgpLCBw
YXRoLnV0ZjgoKS5kYXRhKCksICZpbmZvKSA9PSBTVUNDRVNTKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGluZm8uZHdTaXplOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBw
YXRoLCB0aW1lX3QmIHJlc3VsdCkKLXsKLSAgICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gZ2V0IGZp
bGUgbW9kaWZpY2F0aW9uIHRpbWUgaW4gQlJFVy4gSUZJTEVNR1JfR2V0SW5mb0V4KCkgcmV0dXJu
cwotICAgIC8vIG9ubHkgZmlsZSBjcmVhdGlvbiB0aW1lLgotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBSZWZQdHI8SUZp
bGVNZ3I+IGZpbGVNZ3IgPSBjcmVhdGVSZWZQdHJJbnN0YW5jZTxJRmlsZU1ncj4oQUVFQ0xTSURf
RklMRU1HUik7Ci0KLSAgICByZXR1cm4gKElGSUxFTUdSX1Rlc3QoZmlsZU1nci5nZXQoKSwgcGF0
aC51dGY4KCkuZGF0YSgpKSA9PSBTVUNDRVNTKTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICBSZWZQdHI8SUZpbGVNZ3I+IGZpbGVNZ3IgPSBjcmVhdGVS
ZWZQdHJJbnN0YW5jZTxJRmlsZU1ncj4oQUVFQ0xTSURfRklMRU1HUik7Ci0KLSAgICByZXR1cm4g
KElGSUxFTUdSX1JlbW92ZShmaWxlTWdyLmdldCgpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpID09IFNV
Q0NFU1MpOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBSZWZQdHI8SUZpbGVNZ3I+IGZpbGVNZ3IgPSBjcmVhdGVSZWZQdHJJbnN0YW5j
ZTxJRmlsZU1ncj4oQUVFQ0xTSURfRklMRU1HUik7Ci0KLSAgICByZXR1cm4gKElGSUxFTUdSX1Jt
RGlyKGZpbGVNZ3IuZ2V0KCksIHBhdGgudXRmOCgpLmRhdGEoKSkgPT0gU1VDQ0VTUyk7Ci19Ci0K
LVN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICBpZiAoY29tcG9uZW50LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IGJ1ZmZlcjsKLQot
ICAgIGJ1ZmZlci5hcHBlbmQocGF0aC5jaGFyYWN0ZXJzKCksIHBhdGgubGVuZ3RoKCkpOwotCi0g
ICAgaWYgKGJ1ZmZlci5sYXN0KCkgIT0gTCcvJyAmJiBjb21wb25lbnRbMF0gIT0gTCcvJykKLSAg
ICAgICAgYnVmZmVyLmFwcGVuZChMJy8nKTsKLQotICAgIGJ1ZmZlci5hcHBlbmQoY29tcG9uZW50
LmNoYXJhY3RlcnMoKSwgY29tcG9uZW50Lmxlbmd0aCgpKTsKLQotICAgIHJldHVybiBTdHJpbmco
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci19Ci0KLUNTdHJpbmcgZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gcGF0aC51dGY4
KCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY2Fub25pY2FsUGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgUmVmUHRyPElGaWxlTWdyPiBmaWxlTWdyID0gY3JlYXRlUmVmUHRySW5zdGFuY2U8
SUZpbGVNZ3I+KEFFRUNMU0lEX0ZJTEVNR1IpOwotCi0gICAgLy8gR2V0IHRoZSBidWZmZXIgc2l6
ZSByZXF1aXJlZCB0byByZXNvbHZlIHRoZSBwYXRoLgotICAgIGludCBjYW5vblBhdGhMZW47Ci0g
ICAgSUZJTEVNR1JfUmVzb2x2ZVBhdGgoZmlsZU1nci5nZXQoKSwgcGF0aC51dGY4KCkuZGF0YSgp
LCAwLCAmY2Fub25QYXRoTGVuKTsKLQotICAgIC8vIFJlc29sdmUgdGhlIHBhdGggdG8gdGhlIGNh
bm9uaWNhbCBwYXRoLgotICAgIFZlY3RvcjxjaGFyPiBjYW5vblBhdGhCdWZmZXIoY2Fub25QYXRo
TGVuKTsKLSAgICBJRklMRU1HUl9SZXNvbHZlUGF0aChmaWxlTWdyLmdldCgpLCBwYXRoLnV0Zjgo
KS5kYXRhKCksIGNhbm9uUGF0aEJ1ZmZlci5kYXRhKCksICZjYW5vblBhdGhMZW4pOwotCi0gICAg
U3RyaW5nIGNhbm9uUGF0aChjYW5vblBhdGhCdWZmZXIuZGF0YSgpKTsKLQotICAgIC8vIFJlbW92
ZSB0aGUgdHJhaWxpbmcgJy8nLgotICAgIGludCBsYXN0RGl2UG9zID0gY2Fub25QYXRoLnJldmVy
c2VGaW5kKCcvJyk7Ci0gICAgaW50IGVuZFBvcyA9IGNhbm9uUGF0aC5sZW5ndGgoKTsKLSAgICBp
ZiAobGFzdERpdlBvcyA9PSBlbmRQb3MgLSAxKQotICAgICAgICBjYW5vblBhdGggPSBjYW5vblBh
dGguc3Vic3RyaW5nKDAsIGNhbm9uUGF0aC5sZW5ndGgoKSAtIDEpOwotCi0gICAgcmV0dXJuIGNh
bm9uUGF0aDsKLX0KLQotc3RhdGljIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKElGaWxlTWdyKiBm
aWxlTWFuYWdlciwgY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGlmIChwYXRoID09IGNhbm9u
aWNhbFBhdGgoQUVFRlNfSE9NRV9ESVIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlu
dCBsYXN0RGl2UG9zID0gcGF0aC5yZXZlcnNlRmluZCgnLycpOwotICAgIGludCBlbmRQb3MgPSBw
YXRoLmxlbmd0aCgpOwotICAgIGlmIChsYXN0RGl2UG9zID09IHBhdGgubGVuZ3RoKCkgLSAxKSB7
Ci0gICAgICAgIGVuZFBvcyAtPSAxOwotICAgICAgICBsYXN0RGl2UG9zID0gcGF0aC5yZXZlcnNl
RmluZCgnLycsIGxhc3REaXZQb3MpOwotICAgIH0KLQotICAgIGlmIChsYXN0RGl2UG9zID4gMCkg
ewotICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhmaWxlTWFuYWdlciwgcGF0aC5zdWJz
dHJpbmcoMCwgbGFzdERpdlBvcykpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFN0cmluZyBmb2xkZXIocGF0aC5zdWJzdHJpbmcoMCwgZW5kUG9zKSk7Ci0KLSAgICAv
LyBJRklMRU1HUl9Na0RpciByZXR1cm4gU1VDQ0VTUyB3aGVuIHRoZSBmaWxlIGlzIHN1Y2Nlc3Nm
dWxseSBjcmVhdGVkIG9yIGlmIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0gICAgLy8gU28gd2UgbmVl
ZCB0byBjaGVjayBmaWxlaW5mby5hdHRyaWIuCi0gICAgSUZJTEVNR1JfTWtEaXIoZmlsZU1hbmFn
ZXIsIGZvbGRlci51dGY4KCkuZGF0YSgpKTsKLQotICAgIEZpbGVJbmZvIGZpbGVJbmZvOwotICAg
IGlmIChJRklMRU1HUl9HZXRJbmZvKGZpbGVNYW5hZ2VyLCBmb2xkZXIudXRmOCgpLmRhdGEoKSwg
JmZpbGVJbmZvKSAhPSBTVUNDRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZmlsZUluZm8uYXR0cmliICYgX0ZBX0RJUjsKLX0KLQotYm9vbCBtYWtlQWxsRGlyZWN0b3Jp
ZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFJlZlB0cjxJRmlsZU1ncj4gZmlsZU1nciA9
IGNyZWF0ZVJlZlB0ckluc3RhbmNlPElGaWxlTWdyPihBRUVDTFNJRF9GSUxFTUdSKTsKLQotICAg
IHJldHVybiBtYWtlQWxsRGlyZWN0b3JpZXMoZmlsZU1nci5nZXQoKSwgY2Fub25pY2FsUGF0aChw
YXRoKSk7Ci19Ci0KLVN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgY29uc3QgaW50
IHdlYlZpZXdDbGFzc0lkID0gMHgwMTBhYTA0YzsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQo
ImZzOi9+MFglMDhYLyIsIHdlYlZpZXdDbGFzc0lkKTsKLX0KLQotU3RyaW5nIHBhdGhHZXRGaWxl
TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBh
dGgucmV2ZXJzZUZpbmQoJy8nKSArIDEpOwotfQotCi1TdHJpbmcgZGlyZWN0b3J5TmFtZShjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgU3RyaW5nIGZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1l
KHBhdGgpOwotICAgIFN0cmluZyBkaXJOYW1lID0gU3RyaW5nKHBhdGgpOwotICAgIGRpck5hbWUu
dHJ1bmNhdGUoZGlyTmFtZS5sZW5ndGgoKSAtIHBhdGhHZXRGaWxlTmFtZShwYXRoKS5sZW5ndGgo
KSk7Ci0gICAgcmV0dXJuIGRpck5hbWU7Ci19Ci0KLVN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShj
b25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAg
Ly8gQlJFVyBkb2VzIG5vdCBoYXZlIGEgc3lzdGVtLXdpZGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSwK
LSAgICAvLyB1c2UgImZzOi9+L3RtcCIgYXMgb3VyIHRlbXBvcmFyeSBkaXJlY3RvcnkuCi0gICAg
U3RyaW5nIHRlbXBQYXRoKCJmczovfi90bXAiKTsKLQotICAgIFJlZlB0cjxJRmlsZU1ncj4gZmls
ZU1nciA9IGNyZWF0ZVJlZlB0ckluc3RhbmNlPElGaWxlTWdyPihBRUVDTFNJRF9GSUxFTUdSKTsK
LQotICAgIC8vIENyZWF0ZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBl
eGlzdC4KLSAgICBJRklMRU1HUl9Na0RpcihmaWxlTWdyLmdldCgpLCB0ZW1wUGF0aC51dGY4KCku
ZGF0YSgpKTsKLQotICAgIC8vIExvb3AgdW50aWwgd2UgZmluZCBhIHRlbXBvcmFyeSBmaWxlbmFt
ZSB0aGF0IGRvZXMgbm90IGV4aXN0LgotICAgIGludCBudW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHJhbmRvbU51bWJlcigpICogMTAwMDApOwotICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICBkbyB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
dGVtcFBhdGgpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnLycpOwotICAgICAgICBidWlsZGVy
LmFwcGVuZChwcmVmaXgpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihu
dW1iZXIpKTsKLSAgICAgICAgZmlsZW5hbWUgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IG51bWJlcisrOwotICAgIH0gd2hpbGUgKElGSUxFTUdSX1Rlc3QoZmlsZU1nci5nZXQoKSwgZmls
ZW5hbWUudXRmOCgpLmRhdGEoKSkgPT0gU1VDQ0VTUyk7Ci0KLSAgICBJRmlsZSogdGVtcEZpbGUg
PSBJRklMRU1HUl9PcGVuRmlsZShmaWxlTWdyLmdldCgpLCBmaWxlbmFtZS51dGY4KCkuZGF0YSgp
LCBfT0ZNX0NSRUFURSk7Ci0gICAgaWYgKHRlbXBGaWxlKSB7Ci0gICAgICAgIGhhbmRsZSA9IHRl
bXBGaWxlOwotICAgICAgICByZXR1cm4gZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkK
LXsKLSAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5kbGUpKSB7Ci0gICAgICAgIElGSUxFX1JlbGVh
c2UoaGFuZGxlKTsKLSAgICAgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsK
LSAgICB9Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghaXNIYW5kbGVWYWxpZCho
YW5kbGUpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpbnQgYnl0ZXNXcml0dGVuID0gSUZJ
TEVfV3JpdGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotICAgIGlmICghYnl0ZXNXcml0dGVuKQot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGJ5dGVzV3JpdHRlbjsKLX0KLQotYm9vbCB1
bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiBlbnRyaWVzOwotCi0gICAgLy8gT0sgdG8gbm90IGltcGxlbWVudCBsaXN0RGly
ZWN0b3J5LCBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGZvciBwbHVnLWlucyBhbmQKLSAgICAvLyBC
cmV3IE1QIGRvZXMgbm90IHN1cHBvcnQgdGhlIHBsdWctaW4gYXQgdGhlIG1vbWVudC4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIGVudHJpZXM7Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvS1VSTEJyZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvS1VSTEJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvS1VSTEJyZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAx
MDAsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaW5jbHVkZSA8QUVFRmlsZS5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Ci17
Ci0gICAgLy8gQWNjZXNzIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vZHVsZSBkaXJl
Y3RvcnkgaW4gYSBjYXNlLXNlbnNpdGl2ZSBtYW5uZXIuCi0gICAgLy8gQXMgSVdlYiAiZmlsZToi
IGVuZ2luZSBvcGVucyBmaWxlcyBpbiBCUkVXJ3MgYXBwbGljYXRpb24tcmVsYXRpdmUgZmlsZSBu
YW1lc3BhY2UsCi0gICAgLy8gd2UgZm9sbG93IHRoZSBzYW1lIHBvbGljeSBoZXJlLgotICAgIHJl
dHVybiBTdHJpbmcoQUVFRlNfSE9NRV9ESVIpICsgcGF0aCgpOwotfQotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0xhbmd1YWdlQnJldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9MYW5ndWFnZUJyZXcuY3BwCShyZXZpc2lvbiA5
NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvTGFuZ3VhZ2VCcmV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxhbmd1YWdlLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU3RyaW5nIHBsYXRmb3JtRGVmYXVsdExhbmd1YWdlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYnJldy9Mb2NhbGl6ZWRTdHJpbmdzQnJldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9Mb2NhbGl6ZWRTdHJpbmdzQnJldy5jcHAJKHJl
dmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9Mb2NhbGl6ZWRT
dHJpbmdzQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTA5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0
TGFiZWwoKQotewotICAgIHJldHVybiAiU3VibWl0IjsKLX0KLQotU3RyaW5nIGlucHV0RWxlbWVu
dEFsdFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHJlc2V0QnV0
dG9uRGVmYXVsdExhYmVsKCkKLXsKLSAgICByZXR1cm4gIlJlc2V0IjsKLX0KLQotU3RyaW5nIGRl
ZmF1bHREZXRhaWxzU3VtbWFyeVRleHQoKQotewotICAgIHJldHVybiAiRGV0YWlscyI7Ci19Ci0K
LVN0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQotewotICAgIHJldHVybiAiU2Vh
cmNoYWJsZSBJbmRleCI7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkK
LXsKLSAgICByZXR1cm4gIkNob29zZSBGaWxlIjsKLX0KLQotU3RyaW5nIGZpbGVCdXR0b25DaG9v
c2VNdWx0aXBsZUZpbGVzTGFiZWwoKQotewotICAgIHJldHVybiAiQ2hvb3NlIEZpbGVzIjsKLX0K
LQotU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4g
Ik5vIGZpbGUgc2VsZWN0ZWQiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmtJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuICJPcGVuIGluIG5ldyB0YWIiOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkKLXsKLSAgICByZXR1
cm4gIkRvd25sb2FkIGxpbmsgdG8gZGlzayI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gIkNvcHkgbGluayB0byBjbGlw
Ym9hcmQiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3coKQotewotICAgIHJldHVybiAiT3BlbiBpbWFnZSBpbiBuZXcgd2luZG93IjsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQotewotICAgIHJldHVy
biAiRG93bmxvYWQgaW1hZ2UgdG8gZGlzayI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuICJDb3B5IGltYWdlIHRvIGNs
aXBib2FyZCI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dp
bmRvdygpCi17Ci0gICAgcmV0dXJuICJPcGVuIHZpZGVvIGluIG5ldyB3aW5kb3ciOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQotewotICAgIHJl
dHVybiAiT3BlbiBhdWRpbyBpbiBuZXcgd2luZG93IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuICJDb3B5IFZp
ZGVvIGxpbmsgbG9jYXRpb24iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1
ZGlvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gIkNvcHkgYXVkaW8gbGluayBsb2Nh
dGlvbiI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xz
KCkKLXsKLSAgICByZXR1cm4gIlRvZ2dsZSBtZWRpYSBjb250cm9scyI7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQotewotICAgIHJldHVybiAiVG9nZ2xl
IG1lZGlhIGxvb3AgcGxheWJhY2siOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRW50
ZXJWaWRlb0Z1bGxzY3JlZW4oKQotewotICAgIHJldHVybiAiU3dpdGNoIHZpZGVvIHRvIGZ1bGxz
Y3JlZW4iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKLXsKLSAg
ICByZXR1cm4gIlBsYXkiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVz
ZSgpCi17Ci0gICAgcmV0dXJuICJQYXVzZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdNZWRpYU11dGUoKQotewotICAgIHJldHVybiAiTXV0ZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuICJPcGVuIGZy
YW1lIGluIG5ldyB3aW5kb3ciOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weSgp
Ci17Ci0gICAgcmV0dXJuICJDb3B5IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dv
QmFjaygpCi17Ci0gICAgcmV0dXJuICJHbyBiYWNrIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0dvRm9yd2FyZCgpCi17Ci0gICAgcmV0dXJuICJHbyBmb3J3YXJkIjsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKQotewotICAgIHJldHVybiAiU3RvcCI7Ci19Ci0K
LVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKQotewotICAgIHJldHVybiAiUmVsb2Fk
IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCi17Ci0gICAgcmV0dXJuICJD
dXQiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQotewotICAgIHJldHVy
biAiUGFzdGUiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQo
KQotewotICAgIHJldHVybiAiTm8gZ3Vlc3NlcyBmb3VuZCI7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuICJJZ25vcmUgc3BlbGxp
bmciOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCi17Ci0g
ICAgcmV0dXJuICJMZWFybiBzcGVsbGluZyI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdTZWFyY2hXZWIoKQotewotICAgIHJldHVybiAiU2VhcmNoIHdlYiI7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICByZXR1cm4gIkxvb2t1cCBpbiBkaWN0aW9uYXJ5IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rKCkKLXsKLSAgICByZXR1cm4gIk9wZW4gbGluayI7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKLXsKLSAgICByZXR1cm4gIklnbm9y
ZSBncmFtbWFyIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgp
Ci17Ci0gICAgcmV0dXJuICJTcGVsbGluZyBtZW51IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKLXsKLSAgICByZXR1cm4gIlNob3cg
c3BlbGxpbmcgcGFuZWwiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVs
bGluZygpCi17Ci0gICAgcmV0dXJuICJDaGVjayBzcGVsbGluZyI7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKQotewotICAgIHJldHVybiAi
Q2hlY2sgc3BlbGxpbmcgd2hpbGUgdHlwaW5nIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuICJDaGVjayBmb3Ig
Z3JhbW1hciB3aXRoIHNwZWxsaW5nIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Zv
bnRNZW51KCkKLXsKLSAgICByZXR1cm4gIkZvbnQgbWVudSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdCb2xkKCkKLXsKLSAgICByZXR1cm4gIkJvbGQiOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnSXRhbGljKCkKLXsKLSAgICByZXR1cm4gIkl0YWxpYyI7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQotewotICAgIHJldHVybiAiVW5kZXJs
aW5lIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQotewotICAgIHJl
dHVybiAiT3V0bGluZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGly
ZWN0aW9uTWVudSgpCi17Ci0gICAgcmV0dXJuICJXcml0aW5nIGRpcmVjdGlvbiBtZW51IjsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKQotewotICAgIHJl
dHVybiAiRGVmYXVsdCBkaXJlY3Rpb24iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
TGVmdFRvUmlnaHQoKQotewotICAgIHJldHVybiAiTGVmdCB0byByaWdodCI7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCi17Ci0gICAgcmV0dXJuICJSaWdodCB0
byBsZWZ0IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkK
LXsKLSAgICByZXR1cm4gIkluc3BlY3QiOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50
U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gIk5vIHJlY2VudCB0ZXh0IHNlYXJjaGVzIjsK
LX0KLQotU3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVy
biAiUmVjZW50IHRleHQgc2VhcmNoZXMiOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVj
ZW50U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gIkNsZWFyIHJlY2VudCB0ZXh0IHNlYXJj
aGVzIjsKLX0KLQotU3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQotewotICAgIHJldHVybiAi
VW5rbm93biI7Ci19Ci0KLVN0cmluZyBBWFdlYkFyZWFUZXh0KCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBBWExpbmtUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBBWExpc3RNYXJrZXJUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBBWEltYWdlTWFwVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi1TdHJpbmcgQVhIZWFkaW5nVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci1TdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIHJldHVybiBTdHJpbmcoZmlsZW5hbWUpOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUoKQotewotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotU3RyaW5nIEFYQnV0dG9uQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWFJhZGlvQnV0dG9uQWN0aW9uVmVyYigpCi17Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJi
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWFVuY2hlY2tlZENoZWNr
Qm94QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhM
aW5rQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhN
ZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1T
dHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEFYRGVmaW5pdGlvbkxpc3RUZXJtVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgQVhEZWZpbml0aW9uTGlzdERlZmluaXRpb25UZXh0KCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlz
c2luZ1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JDaGVja2JveFRl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1
ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5n
VGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JSYWRp
b1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VW
YWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmlu
ZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVN
aXNtYXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNo
Rm9yVVJMVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRh
dGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4
dChpbnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KGNvbnN0IFN0
cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIG1pc3NpbmdQbHVnaW5UZXh0KCkKLXsKLSAgICByZXR1cm4g
Ik1pc3NpbmcgUGx1Zy1pbiI7Ci19Ci0KLVN0cmluZyBjcmFzaGVkUGx1Z2luVGV4dCgpCi17Ci0g
ICAgcmV0dXJuICJQbHVnLWluIENyYXNoZWQiOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0xvZ2dpbmdCcmV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0xvZ2dpbmdCcmV3LmNwcAko
cmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0xvZ2dpbmdC
cmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBJbml0
aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEZJWE1FOiBTaG91
bGQgcmVhZCB0aGUgbG9nZ2luZyBjaGFubmVscyBmcm9tIGEgZmlsZS4KLSAgICBzdGF0aWMgYm9v
bCBoYXZlSW5pdGlhbGl6ZWRMb2dnaW5nQ2hhbm5lbHMgPSBmYWxzZTsKLSAgICBpZiAoaGF2ZUlu
aXRpYWxpemVkTG9nZ2luZ0NoYW5uZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBoYXZlSW5p
dGlhbGl6ZWRMb2dnaW5nQ2hhbm5lbHMgPSB0cnVlOwotCi0gICAgLy8gQnkgZGVmYXVsdCB3ZSBs
b2cgY2FsbHMgdG8gbm90SW1wbGVtZW50ZWQoKS4KLSAgICBMb2dOb3RZZXRJbXBsZW1lbnRlZC5z
dGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L01JTUVUeXBlUmVnaXN0cnlCcmV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L01JTUVUeXBlUmVn
aXN0cnlCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9icmV3L01JTUVUeXBlUmVnaXN0cnlCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEV4dGVuc2lvbk1hcCB7
Ci0gICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOwotICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOwot
fTsKLQotc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXBbXSA9IHsKLSAgICB7
ICJibXAiLCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKLSAgICB7
ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAotICAg
IHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwK
LSAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWci
IH0sCi0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBk
ZiIsICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAg
ICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uv
c3ZnK3htbCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAidHh0Iiwg
InRleHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKLSAgICB7
ICJ4bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQveHNsIiB9LAotICAgIHsg
InhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7IDAsIDAgfQotfTsKLQot
U3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyAmZXh0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBTdHJpbmcg
c3RyID0gZXh0Lmxvd2VyKCk7Ci0KLSAgICBjb25zdCBFeHRlbnNpb25NYXAqIGUgPSBleHRlbnNp
b25NYXA7Ci0gICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgewotICAgICAgICBpZiAoc3RyID09IGUt
PmV4dGVuc2lvbikKLSAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKLSAgICAgICAgKytl
OwotICAgIH0KLQotICAgIC8vIHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQK
LSAgICByZXR1cm4gInRleHQvcGxhaW4iOwotfQotCi1ib29sIE1JTUVUeXBlUmVnaXN0cnk6Omlz
QXBwbGljYXRpb25QbHVnaW5NSU1FVHlwZShjb25zdCBTdHJpbmcmKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9icmV3L1Bhc3RlYm9hcmRCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9icmV3L1Bhc3RlYm9hcmRCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1Bhc3RlYm9hcmRCcmV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGFzdGVib2FyZC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXN0ZWJvYXJk
KiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCi17Ci0gICAgc3RhdGljIFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZDsKLSAgICByZXR1cm4gcGFzdGVib2FyZDsK
LX0KLQotUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5n
ZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlU3RyLCBG
cmFtZSogZnJhbWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRS
ZXBsYWNlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUs
IFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNo
b3NlUGxhaW5UZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JyZXcvUGxhdGZvcm1LZXlib2FyZEV2ZW50QnJldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYnJldy9QbGF0Zm9ybUtleWJvYXJkRXZlbnRCcmV3LmNwcAkocmV2
aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1BsYXRmb3JtS2V5
Ym9hcmRFdmVudEJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXaW5k
b3dzS2V5Ym9hcmRDb2Rlcy5oIgotCi0jaW5jbHVkZSA8QUVFRXZlbnQuaD4KLSNpbmNsdWRlIDxB
RUVJS2V5c01hcHBpbmcuaD4KLSNpbmNsdWRlIDxBRUVLZXlzTWFwcGluZy5iaWQ+Ci0jaW5jbHVk
ZSA8QUVFU3RkRGVmLmg+Ci0jaW5jbHVkZSA8QUVFVkNvZGVzLmg+Ci0KLSNpbmNsdWRlIDx3dGYv
YnJldy9SZWZQdHJCcmV3Lmg+Ci0jaW5jbHVkZSA8d3RmL2JyZXcvU2hlbGxCcmV3Lmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yQnJld0tl
eUNvZGUodWludDE2IGtleUNvZGUpCi17Ci0gICAgc3dpdGNoIChrZXlDb2RlKSB7Ci0gICAgY2Fz
ZSBBVktfTEFMVDoKLSAgICBjYXNlIEFWS19SQUxUOgotICAgICAgICByZXR1cm4gIkFsdCI7Ci0g
ICAgY2FzZSBBVktfTENUUkw6Ci0gICAgY2FzZSBBVktfUkNUUkw6Ci0gICAgICAgIHJldHVybiAi
Q29udHJvbCI7Ci0gICAgY2FzZSBBVktfTFNISUZUOgotICAgIGNhc2UgQVZLX1JTSElGVDoKLSAg
ICAgICAgcmV0dXJuICJTaGlmdCI7Ci0gICAgY2FzZSBBVktfQ0FQTEs6Ci0gICAgICAgIHJldHVy
biAiQ2Fwc0xvY2siOwotICAgIGNhc2UgQVZLX0ZVTkNUSU9OMToKLSAgICAgICAgcmV0dXJuICJG
MSI7Ci0gICAgY2FzZSBBVktfRlVOQ1RJT04yOgotICAgICAgICByZXR1cm4gIkYyIjsKLSAgICBj
YXNlIEFWS19GVU5DVElPTjM6Ci0gICAgICAgIHJldHVybiAiRjMiOwotICAgIGNhc2UgQVZLX0ZV
TkNUSU9ONDoKLSAgICAgICAgcmV0dXJuICJGNCI7Ci0gICAgY2FzZSBBVktfRlVOQ1RJT041Ogot
ICAgICAgICByZXR1cm4gIkY1IjsKLSAgICBjYXNlIEFWS19GVU5DVElPTjY6Ci0gICAgICAgIHJl
dHVybiAiRjYiOwotICAgIGNhc2UgQVZLX0ZVTkNUSU9ONzoKLSAgICAgICAgcmV0dXJuICJGNyI7
Ci0gICAgY2FzZSBBVktfRlVOQ1RJT044OgotICAgICAgICByZXR1cm4gIkY4IjsKLSAgICBjYXNl
IEFWS19GVU5DVElPTjk6Ci0gICAgICAgIHJldHVybiAiRjkiOwotICAgIGNhc2UgQVZLX0ZVTkNU
SU9OMTA6Ci0gICAgICAgIHJldHVybiAiRjEwIjsKLSAgICBjYXNlIEFWS19GVU5DVElPTjExOgot
ICAgICAgICByZXR1cm4gIkYxMSI7Ci0gICAgY2FzZSBBVktfRlVOQ1RJT04xMjoKLSAgICAgICAg
cmV0dXJuICJGMTIiOwotICAgIGNhc2UgQVZLX1BSU0NSTjoKLSAgICAgICAgcmV0dXJuICJQcmlu
dFNjcmVlbiI7Ci0gICAgY2FzZSBBVktfTEVGVDoKLSAgICAgICAgcmV0dXJuICJMZWZ0IjsKLSAg
ICBjYXNlIEFWS19SSUdIVDoKLSAgICAgICAgcmV0dXJuICJSaWdodCI7Ci0gICAgY2FzZSBBVktf
VVA6Ci0gICAgICAgIHJldHVybiAiVXAiOwotICAgIGNhc2UgQVZLX0RPV046Ci0gICAgICAgIHJl
dHVybiAiRG93biI7Ci0gICAgY2FzZSBBVktfVFhJTlNFUlQ6Ci0gICAgICAgIHJldHVybiAiSW5z
ZXJ0IjsKLSAgICBjYXNlIEFWS19FTlRFUjoKLSAgICAgICAgcmV0dXJuICJFbnRlciI7Ci0gICAg
Y2FzZSBBVktfVFhIT01FOgotICAgICAgICByZXR1cm4gIkhvbWUiOwotICAgIGNhc2UgQVZLX1RY
REVMRVRFOgotICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdG
LgotICAgICAgICByZXR1cm4gIlUrMDA3RiI7Ci0gICAgY2FzZSBBVktfVFhFTkQ6Ci0gICAgICAg
IHJldHVybiAiRW5kIjsKLSAgICBjYXNlIEFWS19UWFBHVVA6Ci0gICAgICAgIHJldHVybiAiUGFn
ZVVwIjsKLSAgICBjYXNlIEFWS19UWFBHRE9XTjoKLSAgICAgICAgcmV0dXJuICJQYWdlRG93biI7
Ci0gICAgY2FzZSBBVktfRlVOQ1RJT046Ci0gICAgICAgIHJldHVybiAiVSswMDA5IjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlV
cHBlcihrZXlDb2RlKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9y
S2V5RXZlbnQodWludDE2IGNvZGUpCi17Ci0gICAgc3dpdGNoIChjb2RlKSB7Ci0gICAgY2FzZSBB
VktfQ0xSOgotICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0g
ICAgY2FzZSBBVktfRU5URVI6Ci0gICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vICgwRCkgUmV0
dXJuIGtleQotICAgIGNhc2UgQVZLX1NQQUNFOgotICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8v
ICgyMCkgU1BBQ0VCQVIKLSAgICBjYXNlIEFWS19UWFBHVVA6Ci0gICAgICAgIHJldHVybiBWS19Q
UklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAgIGNhc2UgQVZLX1RYUEdET1dOOgotICAgICAg
ICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgY2FzZSBBVktfVFhF
TkQ6Ci0gICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQotICAgIGNhc2UgQVZL
X1RYSE9NRToKLSAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICBj
YXNlIEFWS19MRUZUOgotICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFSUk9X
IGtleQotICAgIGNhc2UgQVZLX1VQOgotICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAg
QVJST1cga2V5Ci0gICAgY2FzZSBBVktfUklHSFQ6Ci0gICAgICAgIHJldHVybiBWS19SSUdIVDsg
Ly8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICBjYXNlIEFWS19ET1dOOgotICAgICAgICByZXR1
cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQotICAgIGNhc2UgQVZLX1RYSU5TRVJU
OgotICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKLSAgICBjYXNlIEFW
S19UWERFTEVURToKLSAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0g
ICAgY2FzZSBBVktfRlVOQ1RJT046Ci0gICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFC
IGtleQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotc3RhdGlj
IGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFVDaGFyIGMpCi17Ci0gICAgVUNo
YXIgdGV4dDsKLQotICAgIC8vIFNvbWUga2V5IGNvZGVzIGFyZSBub3QgbWFwcGVkIHRvIFVuaWNv
ZGUgY2hhcmFjdGVycy4gQ29udmVydCB0aGVtIHRvIFVuaWNvZGUgY2hhcmFjdGVycyBoZXJlLgot
ICAgIHN3aXRjaCAoYykgewotICAgIGNhc2UgQVZLXzA6Ci0gICAgICAgIHRleHQgPSBWS18wOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFWS18xOgotICAgICAgICB0ZXh0ID0gVktfMTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVktfMjoKLSAgICAgICAgdGV4dCA9IFZLXzI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQVZLXzM6Ci0gICAgICAgIHRleHQgPSBWS18zOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFWS180OgotICAgICAgICB0ZXh0ID0gVktfNDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBVktfNToKLSAgICAgICAgdGV4dCA9IFZLXzU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQVZLXzY6Ci0gICAgICAgIHRleHQgPSBWS182OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEFWS183OgotICAgICAgICB0ZXh0ID0gVktfNzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBVktfODoKLSAgICAgICAgdGV4dCA9IFZLXzg7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQVZLXzk6Ci0gICAgICAgIHRleHQgPSBWS185OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFWS19TVEFSOgotICAgICAgICB0ZXh0ID0gJyonOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFWS19QT1VORDoKLSAgICAgICAgdGV4dCA9ICcjJzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBVktfRlVOQ1RJT04xOgotICAgICAgICB0ZXh0ID0gJz0nOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEFWS19GVU5DVElPTjI6Ci0gICAgICAgIHRleHQgPSAnLyc7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQVZLX0ZVTkNUSU9OMzoKLSAgICAgICAgdGV4dCA9ICdfJzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVktfUFVOQzE6Ci0gICAgICAgIHRleHQgPSAnLCc7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVZLX1BVTkMyOgotICAgICAgICB0ZXh0ID0gJy4nOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFWS19TUEFDRToKLSAgICAgICAgdGV4dCA9IFZLX1NQ
QUNFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB0ZXh0ID0gYzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0cmluZygmdGV4dCwgMSk7Ci19Ci0K
LVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEFFRUV2ZW50IGV2
ZW50LCB1aW50MTYgY29kZSwgdWludDMyIG1vZGlmaWVycywgVHlwZSB0eXBlKQotICAgIDogbV90
eXBlKHR5cGUpCi0gICAgLCBtX2lzS2V5cGFkKGZhbHNlKQotICAgICwgbV9tZXRhS2V5KGZhbHNl
KQotICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUoKHR5cGUgPT0gUmF3S2V5RG93biB8fCB0
eXBlID09IEtleVVwKSA/IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoY29kZSkgOiAwKQotewot
ICAgIGlmICgobV90eXBlID09IENoYXIpICYmIG1vZGlmaWVycykgewotICAgICAgICBSZWZQdHI8
SUtleXNNYXBwaW5nPiBrZXlzTWFwcGluZyA9IGNyZWF0ZVJlZlB0ckluc3RhbmNlPElLZXlzTWFw
cGluZz4oQUVFQ0xTSURfS2V5c01hcHBpbmcpOwotICAgICAgICBpbnQgcmVzdWx0ID0gSUtleXNN
YXBwaW5nX0dldE1hcHBpbmcoa2V5c01hcHBpbmcuZ2V0KCksIGNvZGUsIG1vZGlmaWVycywgcmVp
bnRlcnByZXRfY2FzdDxBRUNIQVIqPigmY29kZSkpOwotICAgICAgICBpZiAocmVzdWx0ID09IEFF
RV9TVUNDRVNTKSAvLyBSZXNldCB0aGUgbW9kaWZpZXIgd2hlbiBrZXkgY29kZSBpcyBzdWNjZXNz
ZnVsbHkgbWFwcGVkLgotICAgICAgICAgICAgbW9kaWZpZXJzID0gMDsKLSAgICB9Ci0KLSAgICBt
X3RleHQgPSAodHlwZSA9PSBDaGFyKSA/IHNpbmdsZUNoYXJhY3RlclN0cmluZyhjb2RlKSA6IFN0
cmluZygpOwotICAgIG1fdW5tb2RpZmllZFRleHQgPSAodHlwZSA9PSBDaGFyKSA/IHNpbmdsZUNo
YXJhY3RlclN0cmluZyhjb2RlKSA6IFN0cmluZygpOwotICAgIG1fa2V5SWRlbnRpZmllciA9ICh0
eXBlID09IENoYXIpID8gU3RyaW5nKCkgOiBrZXlJZGVudGlmaWVyRm9yQnJld0tleUNvZGUoY29k
ZSk7Ci0gICAgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSA9IGNvZGU7Ci0gICAgbV9hdXRvUmVwZWF0
ID0gbW9kaWZpZXJzICYgS0JfQVVUT1JFUEVBVDsKLSAgICBtX3NoaWZ0S2V5ID0gbW9kaWZpZXJz
ICYgKEtCX0xTSElGVCB8IEtCX1JTSElGVCk7Ci0gICAgbV9jdHJsS2V5ID0gbW9kaWZpZXJzICYg
KEtCX0xDVFJMIHwgS0JfUkNUUkwpOwotICAgIG1fYWx0S2V5ID0gbW9kaWZpZXJzICYgKEtCX0xB
TFQgfCBLQl9SQUxUKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmln
dWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wpCi17Ci0gICAgLy8gTm8gS2V5RG93biBl
dmVudHMgb24gQlJFVyB0byBkaXNhbWJpZ3VhdGUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLWJvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShib29sJiBzaGlm
dEtleSwgYm9vbCYgY3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29sJiBtZXRhS2V5KQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgc2hpZnRLZXkgPSBmYWxzZTsKLSAgICBjdHJsS2V5ID0g
ZmFsc2U7Ci0gICAgYWx0S2V5ID0gZmFsc2U7Ci0gICAgbWV0YUtleSA9IGZhbHNlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3
L1BsYXRmb3JtTW91c2VFdmVudEJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JyZXcvUGxhdGZvcm1Nb3VzZUV2ZW50QnJldy5jcHAJKHJldmlzaW9uIDk1OTIx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9QbGF0Zm9ybU1vdXNlRXZlbnRCcmV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5j
bHVkZSA8QUVFRXZlbnQuaD4KLSNpbmNsdWRlIDxBRUVQb2ludGVySGVscGVycy5oPgotI2luY2x1
ZGUgPEFFRVN0ZERlZi5oPgotI2luY2x1ZGUgPEFFRVZDb2Rlcy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEFFRUV2ZW50
IGV2ZW50LCB1aW50MTYgd1BhcmFtLCB1aW50MzIgZHdQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50KSB7Ci0gICAgY2FzZSBFVlRfUE9JTlRFUl9ET1dOOgotICAgICAgICBtX2V2ZW50VHlwZSA9
IE1vdXNlRXZlbnRQcmVzc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVWVF9QT0lOVEVS
X1VQOgotICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFVlRfUE9JTlRFUl9NT1ZFOgotICAgIGNhc2UgRVZUX1BPSU5URVJf
U1RBTEVfTU9WRToKLSAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVu
dE1vdmVkOwotICAgICAgICBicmVhazsKLSAgICB9OwotCi0gICAgY2hhciogZHdQYXJhbVN0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGR3UGFyYW0pOwotCi0gICAgaW50IHgsIHk7Ci0gICAg
QUVFX1BPSU5URVJfR0VUX1hZKGR3UGFyYW1TdHIsICZ4LCAmeSk7Ci0gICAgbV9wb3NpdGlvbiA9
IEludFBvaW50KHgsIHkpOwotICAgIC8vIFVzZSBJRGlzcGxheSwgc28gcG9zaXRpb24gYW5kIGds
b2JhbCBwb3NpdGlvbiBhcmUgdGhlIHNhbWUuCi0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IG1fcG9z
aXRpb247Ci0KLSAgICB1aW50MzIga2V5TW9kaWZpZXJzID0gQUVFX1BPSU5URVJfR0VUX0tFWV9N
T0RJRklFUlMoZHdQYXJhbVN0cik7Ci0gICAgbV9zaGlmdEtleSA9IGtleU1vZGlmaWVycyAmIChL
Ql9MU0hJRlQgfCBLQl9SU0hJRlQpOwotICAgIG1fY3RybEtleSAgPSBrZXlNb2RpZmllcnMgJiAo
S0JfTENUUkwgfCBLQl9SQ1RSTCk7Ci0gICAgbV9hbHRLZXkgICA9IGtleU1vZGlmaWVycyAmIChL
Ql9MQUxUIHwgS0JfUkFMVCk7Ci0gICAgbV9tZXRhS2V5ICA9IG1fYWx0S2V5OwotCi0gICAgLy8g
QUVFX1BPSU5URVJfR0VUX01PVVNFX01PRElGSUVSUyhkd1BhcmFtU3RyKSBhbHdheXMgcmV0dXJu
cyAwLAotICAgIC8vIHNvIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyB3aGljaCBidXR0b24gaXMg
cHJlc3NlZCBvciByZWxlYXNlZC4KLSAgICAvLyBKdXN0IHVzZSBMZWZ0QnV0dG9uIGJlY2F1c2Ug
QnJldyBNUCB1c3VhbGx5IHJ1bnMgb24gdG91Y2ggZGV2aWNlLgotICAgIG1fYnV0dG9uID0gTGVm
dEJ1dHRvbjsKLQotICAgIC8vIEFFRV9QT0lOVEVSX0dFVF9USU1FIHJldHVybnMgbWlsbGlzZWNv
bmRzCi0gICAgbV90aW1lc3RhbXAgPSBBRUVfUE9JTlRFUl9HRVRfVElNRShkd1BhcmFtU3RyKSAq
IDAuMDAxOwotCi0gICAgbV9jbGlja0NvdW50ID0gQUVFX1BPSU5URVJfR0VUX0NMSUNLQ09VTlQo
ZHdQYXJhbVN0cik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYnJldy9QbGF0Zm9ybVRvdWNoRXZlbnRCcmV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1BsYXRmb3JtVG91Y2hFdmVudEJy
ZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcv
UGxhdGZvcm1Ub3VjaEV2ZW50QnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDEwLCBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVRv
dWNoRXZlbnQuaCIKLQotI2luY2x1ZGUgPEFFRUV2ZW50Lmg+Ci0jaW5jbHVkZSA8QUVFUG9pbnRl
ckhlbHBlcnMuaD4KLSNpbmNsdWRlIDxBRUVWQ29kZXMuaD4KLQotI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1Ub3VjaEV2ZW50OjpQbGF0
Zm9ybVRvdWNoRXZlbnQoQUVFRXZlbnQgZXZlbnQsIHVpbnQxNiB3UGFyYW0sIHVpbnQzMiBkd1Bh
cmFtKQotICAgIDogbV9tZXRhS2V5KGZhbHNlKQotewotICAgIFBsYXRmb3JtVG91Y2hQb2ludDo6
U3RhdGUgc3RhdGU7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50KSB7Ci0gICAgY2FzZSBFVlRfUE9JTlRF
Ul9ET1dOOgotICAgICAgICBtX3R5cGUgPSBUb3VjaFN0YXJ0OwotICAgICAgICBzdGF0ZSA9IFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVWVF9QT0lOVEVSX1VQOgotICAgICAgICBtX3R5cGUgPSBUb3VjaEVuZDsKLSAgICAgICAgc3Rh
dGUgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRVZUX1BPSU5URVJfTU9WRToKLSAgICBjYXNlIEVWVF9QT0lOVEVSX1NUQUxFX01P
VkU6Ci0gICAgICAgIG1fdHlwZSA9IFRvdWNoTW92ZTsKLSAgICAgICAgc3RhdGUgPSBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGNoYXIqIGR3UGFyYW1T
dHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkd1BhcmFtKTsKLSAgICBpbnQgeCwgeTsKLSAg
ICBBRUVfUE9JTlRFUl9HRVRfWFkoZHdQYXJhbVN0ciwgJngsICZ5KTsKLSAgICBJbnRQb2ludCB3
aW5kb3dQb3MgPSBJbnRQb2ludCh4LCB5KTsKLQotICAgIGludCBpZCA9IEFFRV9QT0lOVEVSX0dF
VF9QVFJJRChkd1BhcmFtU3RyKTsKLSAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZChQbGF0Zm9ybVRv
dWNoUG9pbnQoaWQsIHdpbmRvd1Bvcywgc3RhdGUpKTsKLQotICAgIHVpbnQzMiBrZXlNb2RpZmll
cnMgPSBBRUVfUE9JTlRFUl9HRVRfS0VZX01PRElGSUVSUyhkd1BhcmFtU3RyKTsKLSAgICBtX2Fs
dEtleSAgID0ga2V5TW9kaWZpZXJzICYgKEtCX0xBTFQgfCBLQl9SQUxUKTsKLSAgICBtX3NoaWZ0
S2V5ID0ga2V5TW9kaWZpZXJzICYgKEtCX0xTSElGVCB8IEtCX1JTSElGVCk7Ci0gICAgbV9jdHJs
S2V5ICA9IGtleU1vZGlmaWVycyAmIChLQl9MQ1RSTCB8IEtCX1JDVFJMKTsKLX0KLQotfQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvUGxhdGZvcm1Ub3VjaFBv
aW50QnJldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9Q
bGF0Zm9ybVRvdWNoUG9pbnRCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9icmV3L1BsYXRmb3JtVG91Y2hQb2ludEJyZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCwgQ29tcGFueSAxMDAs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Ub3VjaFBvaW50LmgiCi0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsYXRmb3JtVG91Y2hQb2ludDo6UGxhdGZvcm1U
b3VjaFBvaW50KGludCBpZCwgY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvcywgU3RhdGUgc3RhdGUp
Ci0gICAgOiBtX2lkKGlkKQotICAgICwgbV9zdGF0ZShzdGF0ZSkKLSAgICAsIG1fc2NyZWVuUG9z
KHdpbmRvd1BvcykKLSAgICAsIG1fcG9zKHdpbmRvd1BvcykgeyB9Ci0KLX0KLQotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1BvcHVwTWVudUJyZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvUG9wdXBNZW51QnJldy5jcHAJ
KHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9Qb3B1cE1l
bnVCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKLSAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQb3B1cE1lbnVCcmV3LmgiCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJDaHJvbWVDbGllbnRCcmV3LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Qb3B1cE1l
bnVCcmV3OjpQb3B1cE1lbnVCcmV3KFBvcHVwTWVudUNsaWVudCogbWVudUxpc3QpCi0gICAgOiBt
X3BvcHVwQ2xpZW50KG1lbnVMaXN0KQotICAgICwgbV92aWV3KDApCi17Ci19Ci0KLVBvcHVwTWVu
dUJyZXc6On5Qb3B1cE1lbnVCcmV3KCkKLXsKLSAgICAvLyBUZWxsIGNsaWVudCB0byBkZXN0cm95
IGRhdGEgcmVsYXRlZCB0byB0aGlzIHBvcHVwIHNpbmNlIHRoaXMgb2JqZWN0IGlzCi0gICAgLy8g
Z29pbmcgYXdheS4KLSAgICBoaWRlKCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51QnJldzo6ZGlzY29u
bmVjdENsaWVudCgpCi17Ci0gICAgbV9wb3B1cENsaWVudCA9IDA7Ci19Ci0KLXZvaWQgUG9wdXBN
ZW51QnJldzo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBp
bmRleCkKLXsKLSAgICBBU1NFUlQobV9wb3B1cENsaWVudCk7Ci0gICAgQ2hyb21lQ2xpZW50QnJl
dyogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50QnJldyo+KHZpZXctPmZy
YW1lKCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsKLSAgICBBU1NFUlQoY2hyb21lQ2xp
ZW50KTsKLQotICAgIG1fdmlldyA9IHZpZXc7Ci0gICAgY2hyb21lQ2xpZW50LT5jcmVhdGVTZWxl
Y3RQb3B1cChtX3BvcHVwQ2xpZW50LCBpbmRleCwgcmVjdCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51
QnJldzo6aGlkZSgpCi17Ci0gICAgQVNTRVJUKG1fdmlldyk7Ci0gICAgQ2hyb21lQ2xpZW50QnJl
dyogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50QnJldyo+KG1fdmlldy0+
ZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwotICAgIEFTU0VSVChjaHJvbWVD
bGllbnQpOwotCi0gICAgY2hyb21lQ2xpZW50LT5kZXN0cm95U2VsZWN0UG9wdXAoKTsKLX0KLQot
dm9pZCBQb3B1cE1lbnVCcmV3Ojp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgY2xpZW50KCkt
PnNldFRleHRGcm9tSXRlbShjbGllbnQoKS0+c2VsZWN0ZWRJbmRleCgpKTsKLX0KLQotLy8gVGhp
cyBjb2RlIG11c3QgYmUgbW92ZWQgdG8gdGhlIGNvbmNyZXRlIGJyZXcgQ2hyb21lQ2xpZW50IHRo
YXQgaXMgbm90IGluIHJlcG9zaXRvcnkuCi0vLyBJIGtlcHQgdGhpcyBjb2RlIGNvbW1lbnRlZCBv
dXQgaGVyZSB0byBwcmV2ZW50IGxvb3NpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHdoYXQKLS8vIG11
c3QgYmUgdGhlIHJldHVybiB2YWx1ZSBmb3IgYnJldy4KLQotLy8gYm9vbCBQb3B1cE1lbnVCcmV3
OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpCi0vLyB7Ci0vLyAgICAgcmV0dXJuIHRy
dWU7Ci0vLyB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JyZXcvUG9wdXBNZW51QnJldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2JyZXcvUG9wdXBNZW51QnJldy5oCShyZXZpc2lvbiA5NTkyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvUG9wdXBNZW51QnJldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFBvcHVwTWVudUJyZXdf
aAotI2RlZmluZSBQb3B1cE1lbnVCcmV3X2gKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgU2Nyb2xsYmFyOwotCi1j
bGFzcyBQb3B1cE1lbnVCcmV3IDogcHVibGljIFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgUG9w
dXBNZW51QnJldyhQb3B1cE1lbnVDbGllbnQqKTsKLSAgICB+UG9wdXBNZW51QnJldygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCBpbmRl
eCk7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgpOwotCi1wcml2
YXRlOgotICAgIFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9wb3B1
cENsaWVudDsgfQotCi0gICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwotICAgIEZy
YW1lVmlldyogbV92aWV3OwotfTsKLQotfQotCi0jZW5kaWYgLy8gUG9wdXBNZW51QnJld19oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NTTEtleUdlbmVyYXRvckJyZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU1NMS2V5R2VuZXJh
dG9yQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YnJldy9TU0xLZXlHZW5lcmF0b3JCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTU0xLZXlHZW5lcmF0
b3IuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYgdikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3Qg
S1VSTCYgdXJsKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9icmV3L1NjcmVlbkJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JyZXcvU2NyZWVuQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYnJldy9TY3JlZW5CcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTY3JlZW4uaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIldpZGdldC5o
IgotCi0jaW5jbHVkZSA8QUVFQXBwR2VuLmg+Ci0jaW5jbHVkZSA8QUVFU3RkTGliLmg+Ci0jaW5j
bHVkZSA8d3RmL2JyZXcvUmVmUHRyQnJldy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
cnVjdCBEaXNwbGF5SW5mbyB7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0gICAg
aW50IGRlcHRoOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0RGlzcGxheUluZm8oRGlzcGxheUluZm8m
IGluZm8pCi17Ci0gICAgSURpc3BsYXkqIGRpc3BsYXkgPSByZWludGVycHJldF9jYXN0PEFFRUFw
cGxldCo+KEdFVEFQUElOU1RBTkNFKCkpLT5tX3BJRGlzcGxheTsKLSAgICBSZWZQdHI8SUJpdG1h
cD4gYml0bWFwID0gYWRvcHRSZWYoSURpc3BsYXlfR2V0RGVzdGluYXRpb24oZGlzcGxheSkpOwot
Ci0gICAgQUVFQml0bWFwSW5mbyBiaXRtYXBJbmZvOwotICAgIElCaXRtYXBfR2V0SW5mbyhiaXRt
YXAuZ2V0KCksICZiaXRtYXBJbmZvLCBzaXplb2YoQUVFQml0bWFwSW5mbykpOwotCi0gICAgaW5m
by53aWR0aCAgPSBiaXRtYXBJbmZvLmN4OwotICAgIGluZm8uaGVpZ2h0ID0gYml0bWFwSW5mby5j
eTsKLSAgICBpbmZvLmRlcHRoICA9IGJpdG1hcEluZm8ubkRlcHRoOwotfQotCi1GbG9hdFJlY3Qg
c2NyZWVuUmVjdChXaWRnZXQqKQotewotICAgIERpc3BsYXlJbmZvIGluZm87Ci0gICAgZ2V0RGlz
cGxheUluZm8oaW5mbyk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIGluZm8ud2lkdGgs
IGluZm8uaGVpZ2h0KTsKLX0KLQotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0
KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKLX0KLQotaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopCi17Ci0gICAgRGlzcGxheUluZm8gaW5mbzsKLSAgICBnZXREaXNw
bGF5SW5mbyhpbmZvKTsKLQotICAgIHJldHVybiBpbmZvLmRlcHRoOwotfQotCi1pbnQgc2NyZWVu
RGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIHNjcmVlbkRl
cHRoKHdpZGdldCk7Ci19Ci0KLWJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU2Nyb2xsYmFyVGhlbWVCcmV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1Njcm9sbGJhclRoZW1lQnJldy5j
cHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9TY3Jv
bGxiYXJUaGVtZUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBDb21wYW55IDEwMCwgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVCcmV3LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTY3JvbGxiYXJUaGVtZUJyZXcsIHRo
ZW1lLCAoKSk7Ci0gICAgcmV0dXJuICZ0aGVtZTsKLX0KLQotU2Nyb2xsYmFyVGhlbWVCcmV3Ojp+
U2Nyb2xsYmFyVGhlbWVCcmV3KCkKLXsKLX0KLQotfQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9icmV3L1Njcm9sbGJhclRoZW1lQnJldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JyZXcvU2Nyb2xsYmFyVGhlbWVCcmV3LmgJKHJldmlzaW9uIDk1OTIx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9TY3JvbGxiYXJUaGVtZUJyZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgQ29tcGFueSAxMDAsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVC
cmV3X2gKLSNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVCcmV3X2gKLQotI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsYmFyVGhlbWVC
cmV3IDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3Jv
bGxiYXJUaGVtZUJyZXcoKTsKLX07Ci0KLX0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYnJldy9TZWFyY2hQb3B1cE1lbnVCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NlYXJjaFBvcHVwTWVudUJyZXcuY3BwCShyZXZpc2lv
biA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU2VhcmNoUG9wdXBNZW51
QnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVw
TWVudUJyZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTYXZlIHRoZSBwYXN0IHNl
YXJjaGVzIHN0b3JlZCBpbiAnc2VhcmNoSXRlbXMnIHRvIGEgZGF0YWJhc2UgYXNzb2NpYXRlZCB3
aXRoICduYW1lJwotdm9pZCBTZWFyY2hQb3B1cE1lbnVCcmV3OjpzYXZlUmVjZW50U2VhcmNoZXMo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRl
bXMpCi17Ci19Ci0KLS8vIExvYWQgcGFzdCBzZWFyY2hlcyBhc3NvY2lhdGVkIHdpdGggJ25hbWUn
IGZyb20gdGhlIGRhdGFiYXNlIHRvICdzZWFyY2hJdGVtcycKLXZvaWQgU2VhcmNoUG9wdXBNZW51
QnJldzo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9y
PFN0cmluZz4mIHNlYXJjaEl0ZW1zKQotewotfQotCi0vLyBDcmVhdGUgYSBzZWFyY2ggcG9wdXAg
bWVudSAtIG5vdCBzdXJlIHdoYXQgZWxzZSB3ZSBoYXZlIHRvIGRvIGhlcmUKLVNlYXJjaFBvcHVw
TWVudUJyZXc6OlNlYXJjaFBvcHVwTWVudUJyZXcoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0g
ICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVCcmV3KGNsaWVudCkpKQotewotfQot
Ci1ib29sIFNlYXJjaFBvcHVwTWVudUJyZXc6OmVuYWJsZWQoKQotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotUG9wdXBNZW51KiBTZWFyY2hQb3B1cE1lbnVCcmV3Ojpwb3B1cE1lbnUoKQotewot
ICAgIHJldHVybiBtX3BvcHVwLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NlYXJjaFBvcHVwTWVudUJyZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NlYXJjaFBvcHVwTWVu
dUJyZXcuaAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3
L1NlYXJjaFBvcHVwTWVudUJyZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51QnJld19oCi0jZGVmaW5l
IFNlYXJjaFBvcHVwTWVudUJyZXdfaAotCi0jaW5jbHVkZSAiUG9wdXBNZW51QnJldy5oIgotI2lu
Y2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFNlYXJjaFBvcHVwTWVudUJyZXcgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKLXB1YmxpYzoK
LSAgICBTZWFyY2hQb3B1cE1lbnVCcmV3KFBvcHVwTWVudUNsaWVudCopOwotCi0gICAgdmlydHVh
bCBQb3B1cE1lbnUqIHBvcHVwTWVudSgpOwotICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50U2Vh
cmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2Vh
cmNoSXRlbXMpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwotICAgIHZpcnR1
YWwgYm9vbCBlbmFibGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFBvcHVwTWVudUJyZXc+
IG1fcG9wdXA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVCcmV3X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU2hhcmVkQnVmZmVyQnJldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9TaGFyZWRCdWZmZXJCcmV3
LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1No
YXJlZEJ1ZmZlckJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlNoZWxsQnJldy5oIgotCi0j
aW5jbHVkZSA8QUVFQXBwR2VuLmg+Ci0jaW5jbHVkZSA8QUVFRmlsZS5oPgotI2luY2x1ZGUgPEFF
RVN0ZExpYi5oPgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkKLXsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKLSAgICBpZiAoIWZpbGVFeGlzdHMoZmls
ZVBhdGgpIHx8ICFnZXRGaWxlU2l6ZShmaWxlUGF0aCwgZmlsZVNpemUpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAg
IHJlc3VsdC0+bV9idWZmZXIuZ3JvdyhmaWxlU2l6ZSk7Ci0KLSAgICBPd25QdHI8SUZpbGVNZ3I+
IGZpbGVNZ3IgPSBjcmVhdGVJbnN0YW5jZTxJRmlsZU1ncj4oQUVFQ0xTSURfRklMRU1HUik7Ci0K
LSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRo
KTsKLSAgICBPd25QdHI8SUZpbGU+IGZpbGUoSUZJTEVNR1JfT3BlbkZpbGUoZmlsZU1nci5nZXQo
KSwgZmlsZW5hbWUuZGF0YSgpLCBfT0ZNX1JFQUQpKTsKLQotICAgIGlmICghZmlsZSkgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMgdG8gY3JlYXRlIHNoYXJlZCBi
dWZmZXIsIGVycm5vKCVpKSIsIGZpbGVQYXRoLmFzY2lpKCkuZGF0YSgpLCBJRklMRU1HUl9HZXRM
YXN0RXJyb3IoZmlsZU1nci5nZXQoKSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSAwOwotICAgIGludDMyIGJ5dGVzUmVhZDsKLSAgICB3
aGlsZSAoKGJ5dGVzUmVhZCA9IElGSUxFX1JlYWQoZmlsZS5nZXQoKSwgcmVzdWx0LT5tX2J1ZmZl
ci5kYXRhKCkgKyB0b3RhbEJ5dGVzUmVhZCwgZmlsZVNpemUgLSB0b3RhbEJ5dGVzUmVhZCkpID4g
MCkKLSAgICAgICAgdG90YWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOwotICAgIHJlc3VsdC0+bV9z
aXplID0gdG90YWxCeXRlc1JlYWQ7Ci0KLSAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gZmlsZVNp
emUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBv
ZiBmaWxlICVzIC0gZXJybm8oJWkpIiwgZmlsZVBhdGguYXNjaWkoKS5kYXRhKCksIElGSUxFTUdS
X0dldExhc3RFcnJvcihmaWxlTWdyLmdldCgpKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NoYXJlZFRpbWVyQnJldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9TaGFyZWRUaW1l
ckJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Jy
ZXcvU2hhcmVkVGltZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbXBhbnkgMTAwLCBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgotCi0jaW5j
bHVkZSA8QUVFQXBwR2VuLmg+Ci0jaW5jbHVkZSA8QUVFU3RkTGliLmg+Ci0KLSNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCAo
KnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikoKTsKLQotc3RhdGljIEFFRUNhbGxiYWNrIHNoYXJl
ZFRpbWVyQ2FsbGJhY2s7Ci0KLXN0YXRpYyB2b2lkIGludm9rZUNhbGxiYWNrKHZvaWQqKQotewot
ICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24gPSBmOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRl
cnZhbCkKLXsKLSAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKTsKLQotICAgIENB
TExCQUNLX0NhbmNlbCgmc2hhcmVkVGltZXJDYWxsYmFjayk7Ci0KLSAgICBpbnQgaW50ZXJ2YWxJ
bk1TID0gc3RhdGl0X2Nhc3Q8aW50PihpbnRlcnZhbCAqIDEwMDApOwotCi0gICAgc2hhcmVkVGlt
ZXJDYWxsYmFjay5wZm5DYW5jZWwgPSAwOwotICAgIHNoYXJlZFRpbWVyQ2FsbGJhY2sucGZuTm90
aWZ5ID0gaW52b2tlQ2FsbGJhY2s7Ci0gICAgc2hhcmVkVGltZXJDYWxsYmFjay5wTm90aWZ5RGF0
YSA9IDA7Ci0KLSAgICBJU2hlbGwqIHNoZWxsID0gcmVpbnRlcnByZXRfY2FzdDxBRUVBcHBsZXQq
PihHRVRBUFBJTlNUQU5DRSgpKS0+bV9wSVNoZWxsOwotICAgIElTSEVMTF9TZXRUaW1lckV4KHNo
ZWxsLCBpbnRlcnZhbEluTVMsICZzaGFyZWRUaW1lckNhbGxiYWNrKTsKLX0KLQotdm9pZCBzdG9w
U2hhcmVkVGltZXIoKQotewotICAgIENBTExCQUNLX0NhbmNlbCgmc2hhcmVkVGltZXJDYWxsYmFj
ayk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU291bmRCcmV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NvdW5kQnJl
dy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9T
b3VuZEJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU291bmQuaCIKLQotI2luY2x1ZGUg
PEFFRUFwcEdlbi5oPgotI2luY2x1ZGUgPEFFRVN0ZExpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXZvaWQgc3lzdGVtQmVlcCgpCi17Ci0gICAgLy8gc3lzdGVtQmVlcCBpcyB1c2VkIGJ5
IEVkaXRvciB0byBub3RpZnkgZXJyb3JzIHdoZW4gYSB1c2VyIGN1dHMgb3IgcGFzdGVzCi0gICAg
Ly8gd2hlcmUgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgbm90IHBlcm1pdHRlZC4KLSAgICAvLyBVc2Ug
QkVFUF9FUlJPUiB3aXRoIGxvdWQgdm9sdW1lLgotICAgIElTaGVsbCogc2hlbGwgPSByZWludGVy
cHJldF9jYXN0PEFFRUFwcGxldCo+KEdFVEFQUElOU1RBTkNFKCkpLT5tX3BJU2hlbGw7Ci0gICAg
SVNIRUxMX0JlZXAoc2hlbGwsIEJFRVBfRVJST1IsIFRSVUUpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU3lzdGVtVGlt
ZUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU3lz
dGVtVGltZUJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JyZXcvU3lzdGVtVGltZUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotZmxvYXQgdXNlcklkbGVUaW1lKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8v
IFJldHVybiBhbiBhcmJpdHJhcmlseSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2lu
ZyBwYWdlcyBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzbid0IHBvc3Rwb25lZC4KLSAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2JyZXcvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgc3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi19Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvV2lkZ2V0QnJldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9XaWRnZXRCcmV3
LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1dp
ZGdldEJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLSNpbmNsdWRl
ICJDdXJzb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1XaWRnZXQ6OldpZGdldChQbGF0Zm9ybVdpZGdldCB3aWRnZXQpCi17Ci0gICAgaW5pdCh3
aWRnZXQpOwotfQotCi1XaWRnZXQ6On5XaWRnZXQoKQotewotfQotCi1JbnRSZWN0IFdpZGdldDo6
ZnJhbWVSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZTsKLX0KLQotdm9pZCBXaWRn
ZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1fZnJhbWUgPSBy
ZWN0OwotfQotCi12b2lkIFdpZGdldDo6c2V0Rm9jdXMoYm9vbCkKLXsKLX0KLQotdm9pZCBXaWRn
ZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKLXsKLX0KLQotdm9pZCBXaWRnZXQ6
OnNob3coKQotewotfQotCi12b2lkIFdpZGdldDo6aGlkZSgpCi17Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIEludFJlY3QgY29uc3QmIHIpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JyZXcvSWNvbkJyZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JyZXcvSWNvbkJy
ZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JyZXcvSWNvbkJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIENvbXBhbnkgMTAwLCBJbmMuCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklj
b24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSWNvbjo6fkljb24oKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JyZXcvSW1hZ2VCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9icmV3L0ltYWdlQnJldy5jcHAJKHJldmlzaW9uIDk1OTIxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYnJldy9JbWFnZUJyZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvbXBh
bnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBTdHJpbmcgcmVzb3VyY2VQYXRoID0gaG9tZURp
cmVjdG9yeVBhdGgoKSArICJyZXMvIiArIG5hbWUgKyAiLnBuZyI7Ci0KLSAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmls
ZShyZXNvdXJjZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAg
IHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltYWdlLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7
Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYnJldy9JbnRQb2ludEJy
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Jy
ZXcvSW50UG9pbnRCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9icmV3L0ludFBvaW50QnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBDb21wYW55IDEwMCwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnRQb2ludC5oIgotCi0jaW5jbHVkZSA8QUVFUG9pbnQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JbnRQb2ludDo6SW50UG9pbnQoY29uc3QgQUVFUG9pbnQmIHBvaW50KQotICAg
IDogbV94KHBvaW50LngpCi0gICAgLCBtX3kocG9pbnQueSkKLXsKLX0KLQotSW50UG9pbnQ6Om9w
ZXJhdG9yIEFFRVBvaW50KCkgY29uc3QKLXsKLSAgICBBRUVQb2ludCBwb2ludDsKLSAgICBwb2lu
dC54ID0gc3RhdGljX2Nhc3Q8aW50MTY+KG1feCk7Ci0gICAgcG9pbnQueSA9IHN0YXRpY19jYXN0
PGludDE2PihtX3kpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9icmV3L0ludFNp
emVCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9icmV3L0ludFNpemVCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9icmV3L0ludFNpemVCcmV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbXBhbnkgMTAwLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkludFNpemUuaCIKLQotI2luY2x1ZGUgPEFFRS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUludFNpemU6OkludFNpemUoY29uc3QgQUVFU2l6ZSYgc2l6ZSkKLSAgICA6IG1fd2lk
dGgoc2l6ZS5jeCkKLSAgICAsIG1faGVpZ2h0KHNpemUuY3kpCi17Ci19Ci0KLUludFNpemU6Om9w
ZXJhdG9yIEFFRVNpemUoKSBjb25zdAotewotICAgIEFFRVNpemUgc2l6ZTsKLSAgICBzaXplLmN4
ID0gd2lkdGgoKTsKLSAgICBzaXplLmN5ID0gaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIHNpemU7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9icmV3L0ROU0JyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYnJldy9ETlNCcmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JyZXcvRE5TQnJldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21wYW55
IDEwMCwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRO
Uy5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgLy8g
RE5TIHByZWZldGNoaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBiZWNhdXNlIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBVRFAKLSAgICAvLyBzb2NrZXRzIGlzIHF1aXRlIHNtYWxsIGluIG1vc3QgQlJFVyBk
ZXZpY2VzLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYnJldy9Tb2NrZXRTdHJlYW1FcnJvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYnJldy9Tb2NrZXRTdHJlYW1FcnJv
ci5oCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YnJldy9Tb2NrZXRTdHJlYW1FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTb2NrZXRTdHJlYW1FcnJvcl9oCi0jZGVmaW5lIFNvY2tldFN0cmVhbUVycm9yX2gK
LQotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yIDogcHVibGljIFNvY2tldFN0cmVhbUVycm9y
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgU29ja2V0U3RyZWFtRXJyb3IoKSB7IH0KLSAgICBleHBsaWNp
dCBTb2NrZXRTdHJlYW1FcnJvcihpbnQgZXJyb3JDb2RlKQotICAgICAgICA6IFNvY2tldFN0cmVh
bUVycm9yQmFzZShlcnJvckNvZGUpCi0gICAgewotICAgIH0KLQotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU29ja2V0U3RyZWFtRXJyb3JfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYnJldy9Tb2NrZXRTdHJl
YW1IYW5kbGUuaAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JyZXcvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBTb2NrZXRTdHJlYW1IYW5kbGVfaAotI2RlZmluZSBTb2NrZXRTdHJlYW1I
YW5kbGVfaAotCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotY2xhc3Mg
Q3JlZGVudGlhbDsKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDsKLWNsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZVByaXZhdGU7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xp
ZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50
KSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7Ci0KLXByaXZhdGU6Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IEtVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQq
KTsKLQotICAgIC8vIE5vIGF1dGhlbnRpY2F0aW9uIGZvciBzdHJlYW1zIHBlciBzZSwgYnV0IHBy
b3h5IG1heSBhc2sgZm9yIGNyZWRlbnRpYWxzLgotICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdm9p
ZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25z
dCBDcmVkZW50aWFsJik7Ci0gICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIHJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0KLSAg
ICBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlKiBtX3A7Ci0gICAgZnJpZW5kIGNsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZVByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBTb2NrZXRTdHJlYW1IYW5kbGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUhhbmRsZUJyZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYnJldy9Tb2NrZXRTdHJlYW1IYW5kbGVC
cmV3LmNwcAkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JyZXcvU29ja2V0U3RyZWFtSGFuZGxlQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50LmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZS5oIgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvYnJldy9TaGVsbEJyZXcuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IHZvaWQgc29ja2V0U3RyZWFtQ29ubmVjdENhbGxiYWNrKHZvaWQqIHVzZXIsIGludCBuRXJyb3Ip
Ci17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSogcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSo+KHVzZXIpOwotCi0gICAgaWYgKG5FcnJvciAhPSBB
RUVfTkVUX1NVQ0NFU1MpIHsKLSAgICAgICAgcC0+c29ja2V0RXJyb3IobkVycm9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHAtPnNvY2tldENvbm5lY3RlZCgpOwotfQotCi1zdGF0
aWMgdm9pZCBnZXRIb3N0QnlOYW1lQ2FsbGJhY2sodm9pZCogdXNlcikKLXsKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGVQcml2YXRlKiBwID0gcmVpbnRlcnByZXRfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGVQcml2YXRlKj4odXNlcik7Ci0KLSAgICBpZiAocC0+bV9kbnMublJlc3VsdCA8IDEgfHwgcC0+
bV9kbnMublJlc3VsdCA+IEFFRUROU01BWEFERFJTKSB7Ci0gICAgICAgIHAtPnNvY2tldEVycm9y
KHAtPm1fZG5zLm5SZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcC0+Y29u
bmVjdCgpOwotfQotCi1zdGF0aWMgdm9pZCBzb2NrZXRSZWFkYWJsZUNhbGxiYWNrKHZvaWQqIHVz
ZXIpCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSogcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSo+KHVzZXIpOwotICAgIHAtPnNvY2tldFJlYWR5
UmVhZCgpOwotfQotCi1zdGF0aWMgSU5ldE1nciogbmV0d29ya01hbmFnZXIoKQotewotICAgIHN0
YXRpYyBJTmV0TWdyKiBzX25ldE1ncjsKLQotICAgIGlmICghc19uZXRNZ3IpIHsKLSAgICAgICAg
SVNoZWxsKiBzaGVsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QUVFQXBwbGV0Kj4oR0VUQVBQSU5TVEFO
Q0UoKSktPm1fcElTaGVsbDsKLSAgICAgICAgSVNIRUxMX0NyZWF0ZUluc3RhbmNlKHNoZWxsLCBB
RUVDTFNJRF9ORVQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc19uZXRNZ3IpKTsKLSAgICAg
ICAgQVNTRVJUKHNfbmV0TWdyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc19uZXRNZ3I7Ci19Ci0K
LVNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGU6OlNvY2tldFN0cmVhbUhhbmRsZVByaXZhdGUoU29j
a2V0U3RyZWFtSGFuZGxlKiBzdHJlYW1IYW5kbGUsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBt
X3N0cmVhbUhhbmRsZSA9IHN0cmVhbUhhbmRsZTsKLSAgICBtX2lzU2VjdXJlID0gdXJsLnByb3Rv
Y29sSXMoIndzcyIpOwotCi0gICAgbV9zb2NrZXQuc2V0KElORVRNR1JfT3BlblNvY2tldChuZXR3
b3JrTWFuYWdlcigpLCBBRUVfU09DS19TVFJFQU0pKTsKLSAgICBpZiAoIW1fc29ja2V0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1NlY3VyZSkKLSAgICAgICAgbV9zc2wgPSBjcmVh
dGVJbnN0YW5jZTxJU1NMPihBRUVDTFNJRF9TU0wpOwotCi0gICAgbV9wb3J0ID0gdXJsLmhhc1Bv
cnQoKSA/IHVybC5wb3J0KCkgOiAobV9pc1NlY3VyZSA/IDQ0MyA6IDgwKTsKLQotICAgIENBTExC
QUNLX0luaXQoJm1fZG5zQ2FsbGJhY2ssIGdldEhvc3RCeU5hbWVDYWxsYmFjaywgdGhpcyk7Ci0g
ICAgbV9kbnNDYWxsYmFjay5wZm5DYW5jZWwgPSAwOwotCi0gICAgSU5FVE1HUl9HZXRIb3N0QnlO
YW1lKG5ldHdvcmtNYW5hZ2VyKCksICZtX2RucywgdXJsLmhvc3QoKS5sYXRpbjEoKS5kYXRhKCks
ICZtX2Ruc0NhbGxiYWNrKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6flNvY2tl
dFN0cmVhbUhhbmRsZVByaXZhdGUoKQotewotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZVBy
aXZhdGU6OnNvY2tldENvbm5lY3RlZCgpCi17Ci0gICAgaWYgKG1fc3RyZWFtSGFuZGxlICYmIG1f
c3RyZWFtSGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICBtX3N0cmVhbUhhbmRsZS0+bV9zdGF0
ZSA9IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6Ok9wZW47Ci0gICAgICAgIG1fc3RyZWFtSGFuZGxl
LT5jbGllbnQoKS0+ZGlkT3BlblNvY2tldFN0cmVhbShtX3N0cmVhbUhhbmRsZSk7Ci0gICAgfQot
Ci0gICAgSVNPQ0tFVF9SZWFkYWJsZShtX3NvY2tldC5nZXQoKSwgc29ja2V0UmVhZGFibGVDYWxs
YmFjaywgdGhpcyk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6c29ja2V0
UmVhZHlSZWFkKCkKLXsKLSAgICBpZiAobV9zdHJlYW1IYW5kbGUgJiYgbV9zdHJlYW1IYW5kbGUt
PmNsaWVudCgpKSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoMTAyNCk7Ci0KLSAgICAg
ICAgaW50IHJlYWRTaXplID0gSVNPQ0tFVF9SZWFkKG1fc29ja2V0LmdldCgpLCBidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgaWYgKHJlYWRTaXplID09IEFFRV9ORVRfRVJS
T1IpIHsKLSAgICAgICAgICAgIHNvY2tldEVycm9yKElTT0NLRVRfR2V0TGFzdEVycm9yKG1fc29j
a2V0LmdldCgpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3N0cmVhbUhhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKG1fc3Ry
ZWFtSGFuZGxlLCBidWZmZXIuZGF0YSgpLCByZWFkU2l6ZSk7Ci0gICAgfQotCi0gICAgSVNPQ0tF
VF9SZWFkYWJsZShtX3NvY2tldC5nZXQoKSwgc29ja2V0UmVhZGFibGVDYWxsYmFjaywgdGhpcyk7
Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6Y29ubmVjdCgpCi17Ci0gICAg
SVNPQ0tFVF9Db25uZWN0KG1fc29ja2V0LmdldCgpLCBtX2Rucy5hZGRyc1swXSwgSFRPTlMobV9w
b3J0KSwgc29ja2V0U3RyZWFtQ29ubmVjdENhbGxiYWNrLCB0aGlzKTsKLX0KLQotaW50IFNvY2tl
dFN0cmVhbUhhbmRsZVByaXZhdGU6OnNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKLXsK
LSAgICBpZiAoIW1fc29ja2V0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBzZW50U2l6
ZSA9IElTT0NLRVRfV3JpdGUobV9zb2NrZXQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Ynl0ZSo+
KGNvbnN0X2Nhc3Q8Y2hhcio+KGRhdGEpKSwgbGVuKTsKLSAgICBpZiAoc2VudFNpemUgPT0gQUVF
X05FVF9FUlJPUikgewotICAgICAgICBzb2NrZXRFcnJvcihJU09DS0VUX0dldExhc3RFcnJvciht
X3NvY2tldC5nZXQoKSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
c2VudFNpemU7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZTo6Y2xvc2UoKQot
ewotICAgIG1fc29ja2V0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlUHJp
dmF0ZTo6c29ja2V0Q2xvc2VkKCkKLXsKLSAgICBpZiAobV9zdHJlYW1IYW5kbGUgJiYgbV9zdHJl
YW1IYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFt
SGFuZGxlID0gbV9zdHJlYW1IYW5kbGU7Ci0gICAgICAgIG1fc3RyZWFtSGFuZGxlID0gMDsKLSAg
ICAgICAgLy8gVGhpcyBmb2xsb3dpbmcgY2FsbCBkZWxldGVzIF90aGlzXy4gTm90aGluZyBzaG91
bGQgYmUgYWZ0ZXIgaXQuCi0gICAgICAgIHN0cmVhbUhhbmRsZS0+Y2xpZW50KCktPmRpZENsb3Nl
U29ja2V0U3RyZWFtKHN0cmVhbUhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVh
bUhhbmRsZVByaXZhdGU6OnNvY2tldEVycm9yKGludCBlcnJvcikKLXsKLSAgICAvLyBGSVhNRSAt
IGluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IG5vdCB3YW50IHRvIHRyZWF0IGFsbCBlcnJvcnMgYXMg
ZmF0YWwuCi0gICAgaWYgKG1fc3RyZWFtSGFuZGxlICYmIG1fc3RyZWFtSGFuZGxlLT5jbGllbnQo
KSkgewotICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbUhhbmRsZSA9IG1fc3RyZWFt
SGFuZGxlOwotICAgICAgICBtX3N0cmVhbUhhbmRsZSA9IDA7Ci0gICAgICAgIC8vIFRoaXMgZm9s
bG93aW5nIGNhbGwgZGVsZXRlcyBfdGhpc18uIE5vdGhpbmcgc2hvdWxkIGJlIGFmdGVyIGl0Lgot
ICAgICAgICBzdHJlYW1IYW5kbGUtPmNsaWVudCgpLT5kaWRDbG9zZVNvY2tldFN0cmVhbShzdHJl
YW1IYW5kbGUpOwotICAgIH0KLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1I
YW5kbGUoY29uc3QgS1VSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqIGNsaWVudCkK
LSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCi17Ci0gICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsIG1fY2xp
ZW50KTsKLSAgICBtX3AgPSBuZXcgU29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSh0aGlzLCB1cmwp
OwotfQotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQotewotICAg
IExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwotICAg
IHNldENsaWVudCgwKTsKLSAgICBkZWxldGUgbV9wOwotfQotCi1pbnQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKLXsKLSAgICBMT0co
TmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKLSAg
ICByZXR1cm4gbV9wLT5zZW5kKGRhdGEsIGxlbik7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpwbGF0Zm9ybUNsb3NlKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7Ci0gICAgbV9wLT5jbG9zZSgpOwotfQotCi12
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlY2VpdmVkUmVx
dWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JyZXcvU29ja2V0U3RyZWFt
SGFuZGxlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYnJldy9Tb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlLmgJKHJldmlzaW9uIDk1OTIxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9icmV3L1NvY2tldFN0cmVhbUhhbmRs
ZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
b2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlX2gKLSNkZWZpbmUgU29ja2V0U3RyZWFtSGFuZGxlUHJp
dmF0ZV9oCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpbmNsdWRl
IDxBRUVOZXQuaD4KLSNpbmNsdWRlIDxBRUVTU0wuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGVQcml2YXRlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IEtVUkwmKTsK
LSAgICB+U29ja2V0U3RyZWFtSGFuZGxlUHJpdmF0ZSgpOwotCi0gICAgdm9pZCBzb2NrZXRDb25u
ZWN0ZWQoKTsKLSAgICB2b2lkIHNvY2tldFJlYWR5UmVhZCgpOwotICAgIHZvaWQgc29ja2V0Q2xv
c2VkKCk7Ci0gICAgdm9pZCBzb2NrZXRFcnJvcihpbnQpOwotCi0gICAgdm9pZCBjb25uZWN0KCk7
Ci0gICAgaW50IHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbik7Ci0gICAgdm9pZCBjbG9z
ZSgpOwotCi0gICAgQUVFRE5TUmVzdWx0IG1fZG5zOwotICAgIEFFRUNhbGxiYWNrIG1fZG5zQ2Fs
bGJhY2s7Ci0gICAgdW5zaWduZWQgaW50IG1fcG9ydDsKLSAgICBib29sIG1faXNTZWN1cmU7Ci0K
LSAgICBPd25QdHI8SVNvY2tldD4gbV9zb2NrZXQ7Ci0gICAgT3duUHRyPElTU0w+IG1fc3NsOwot
ICAgIFNvY2tldFN0cmVhbUhhbmRsZSogbV9zdHJlYW1IYW5kbGU7Ci19OwotCi19Ci0KLSNlbmRp
ZiAvLyBTb2NrZXRTdHJlYW1IYW5kbGVQcml2YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvYnJldy9UZXh0Qm91bmRhcmllc0JyZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Qm91bmRhcmllc0JyZXcuY3BwCShy
ZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0
Qm91bmRhcmllc0JyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgi
Ci0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQg
bGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi12b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIq
IGJ1ZmZlciwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKLXsK
LSAgICBpZiAocG9zaXRpb24gPiBsZW4pIHsKLSAgICAgICAgKnN0YXJ0ID0gMDsKLSAgICAgICAg
KmVuZCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc3RyKGJ1ZmZl
ciwgbGVuKTsKLQotICAgIGludCBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbiAtIDE7Ci0gICAg
U3RyaW5nIGZvdW5kV29yZDsKLSAgICB3aGlsZSAoY3VycmVudFBvc2l0aW9uID49IDAgJiYgaXNM
ZXR0ZXIoc3RyW2N1cnJlbnRQb3NpdGlvbl0pKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzdHJbY3Vy
cmVudFBvc2l0aW9uXTsKLSAgICAgICAgZm91bmRXb3JkLmluc2VydCgmYywgMSwgMCk7Ci0gICAg
ICAgIC0tY3VycmVudFBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIGN1cnJlbnRQb3NpdGlvbiA9
PSAwIG1lYW5zIHRoZSBmaXJzdCBjaGFyIGlzIG5vdCBsZXR0ZXIKLSAgICAvLyBjdXJyZW50UG9z
aXRpb24gPT0gLTEgbWVhbnMgd2UgcmVhY2hlZCB0aGUgYmVnaW5uaW5nCi0gICAgaW50IHN0YXJ0
UG9zID0gKGN1cnJlbnRQb3NpdGlvbiA8IDApID8gMCA6ICsrY3VycmVudFBvc2l0aW9uOwotICAg
IGN1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHdoaWxlIChpc0xldHRlcihzdHJbY3Vy
cmVudFBvc2l0aW9uXSkpIHsKLSAgICAgICAgZm91bmRXb3JkLmFwcGVuZChzdHJbY3VycmVudFBv
c2l0aW9uXSk7Ci0gICAgICAgICsrY3VycmVudFBvc2l0aW9uOwotICAgIH0KLQotICAgICpzdGFy
dCA9IHN0YXJ0UG9zOwotICAgICplbmQgPSBjdXJyZW50UG9zaXRpb247Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0QnJlYWtJdGVyYXRvckJyZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0
QnJlYWtJdGVyYXRvckJyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvYnJldy9UZXh0QnJlYWtJdGVyYXRvckJyZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25v
bGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRl
cmF0b3IuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gSGFjaywgbm90IGVudGlyZWx5IGNvcnJlY3QKLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc0NoYXJTdG9wKFVDaGFyIGMpCi17Ci0gICAgQ2hhckNhdGVnb3J5IGNoYXJDYXRl
Z29yeSA9IGNhdGVnb3J5KGMpOwotICAgIHJldHVybiBjaGFyQ2F0ZWdvcnkgIT0gTWFya19Ob25T
cGFjaW5nICYmIChjaGFyQ2F0ZWdvcnkgIT0gT3RoZXJfU3Vycm9nYXRlIHx8IChjIDwgMHhkODAw
IHx8IGMgPj0gMHhkYzAwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0xpbmVTdG9wKFVD
aGFyIGMpCi17Ci0gICAgcmV0dXJuIGNhdGVnb3J5KGMpICE9IFNlcGFyYXRvcl9MaW5lOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNTZW50ZW5jZVN0b3AoVUNoYXIgYykKLXsKLSAgICByZXR1
cm4gaXNQdW5jdChjKTsKLX0KLQotY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3IgewotcHVibGljOgot
ICAgIHZvaWQgcmVzZXQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbikKLSAgICB7Ci0gICAgICAg
IHN0cmluZyA9IHN0cjsKLSAgICAgICAgbGVuZ3RoID0gbGVuOwotICAgICAgICBjdXJyZW50UG9z
ID0gMDsKLSAgICB9Ci0gICAgdmlydHVhbCBpbnQgZmlyc3QoKSA9IDA7Ci0gICAgdmlydHVhbCBp
bnQgbmV4dCgpID0gMDsKLSAgICB2aXJ0dWFsIGludCBwcmV2aW91cygpID0gMDsKLSAgICBpbnQg
Zm9sbG93aW5nKGludCBwb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIGN1cnJlbnRQb3MgPSBwb3Np
dGlvbjsKLSAgICAgICAgcmV0dXJuIG5leHQoKTsKLSAgICB9Ci0gICAgaW50IHByZWNlZGluZyhp
bnQgcG9zaXRpb24pCi0gICAgewotICAgICAgICBjdXJyZW50UG9zID0gcG9zaXRpb247Ci0gICAg
ICAgIHJldHVybiBwcmV2aW91cygpOwotICAgIH0KLQotICAgIGludCBjdXJyZW50UG9zOwotICAg
IGNvbnN0IFVDaGFyKiBzdHJpbmc7Ci0gICAgaW50IGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBXb3Jk
QnJlYWtJdGVyYXRvcjogVGV4dEJyZWFrSXRlcmF0b3IgewotICAgIHZpcnR1YWwgaW50IGZpcnN0
KCk7Ci0gICAgdmlydHVhbCBpbnQgbmV4dCgpOwotICAgIHZpcnR1YWwgaW50IHByZXZpb3VzKCk7
Ci19OwotCi1zdHJ1Y3QgQ2hhckJyZWFrSXRlcmF0b3I6IFRleHRCcmVha0l0ZXJhdG9yIHsKLSAg
ICB2aXJ0dWFsIGludCBmaXJzdCgpOwotICAgIHZpcnR1YWwgaW50IG5leHQoKTsKLSAgICB2aXJ0
dWFsIGludCBwcmV2aW91cygpOwotfTsKLQotc3RydWN0IExpbmVCcmVha0l0ZXJhdG9yOiBUZXh0
QnJlYWtJdGVyYXRvciB7Ci0gICAgdmlydHVhbCBpbnQgZmlyc3QoKTsKLSAgICB2aXJ0dWFsIGlu
dCBuZXh0KCk7Ci0gICAgdmlydHVhbCBpbnQgcHJldmlvdXMoKTsKLX07Ci0KLXN0cnVjdCBTZW50
ZW5jZUJyZWFrSXRlcmF0b3IgOiBUZXh0QnJlYWtJdGVyYXRvciB7Ci0gICAgdmlydHVhbCBpbnQg
Zmlyc3QoKTsKLSAgICB2aXJ0dWFsIGludCBuZXh0KCk7Ci0gICAgdmlydHVhbCBpbnQgcHJldmlv
dXMoKTsKLX07Ci0KLWludCBXb3JkQnJlYWtJdGVyYXRvcjo6Zmlyc3QoKQotewotICAgIGN1cnJl
bnRQb3MgPSAwOwotICAgIHJldHVybiBjdXJyZW50UG9zOwotfQotCi1pbnQgV29yZEJyZWFrSXRl
cmF0b3I6Om5leHQoKQotewotICAgIGlmIChjdXJyZW50UG9zID09IGxlbmd0aCkgewotICAgICAg
ICBjdXJyZW50UG9zID0gLTE7Ci0gICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgIH0KLSAg
ICBib29sIGhhdmVTcGFjZSA9IGZhbHNlOwotICAgIHdoaWxlIChjdXJyZW50UG9zIDwgbGVuZ3Ro
KSB7Ci0gICAgICAgIGlmIChoYXZlU3BhY2UgJiYgIWlzU3BhY2Uoc3RyaW5nW2N1cnJlbnRQb3Nd
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoaXNTcGFjZShzdHJpbmdbY3VycmVu
dFBvc10pKQotICAgICAgICAgICAgaGF2ZVNwYWNlID0gdHJ1ZTsKLSAgICAgICAgKytjdXJyZW50
UG9zOwotICAgIH0KLSAgICByZXR1cm4gY3VycmVudFBvczsKLX0KLQotaW50IFdvcmRCcmVha0l0
ZXJhdG9yOjpwcmV2aW91cygpCi17Ci0gICAgaWYgKCFjdXJyZW50UG9zKSB7Ci0gICAgICAgIGN1
cnJlbnRQb3MgPSAtMTsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7Ci0gICAgfQotICAgIGJv
b2wgaGF2ZVNwYWNlID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1cnJlbnRQb3MgPiAwKSB7Ci0gICAg
ICAgIGlmIChoYXZlU3BhY2UgJiYgIWlzU3BhY2Uoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoaXNTcGFjZShzdHJpbmdbY3VycmVudFBvc10pKQot
ICAgICAgICAgICAgaGF2ZVNwYWNlID0gdHJ1ZTsKLSAgICAgICAgLS1jdXJyZW50UG9zOwotICAg
IH0KLSAgICByZXR1cm4gY3VycmVudFBvczsKLX0KLQotaW50IENoYXJCcmVha0l0ZXJhdG9yOjpm
aXJzdCgpCi17Ci0gICAgY3VycmVudFBvcyA9IDA7Ci0gICAgcmV0dXJuIGN1cnJlbnRQb3M7Ci19
Ci0KLWludCBDaGFyQnJlYWtJdGVyYXRvcjo6bmV4dCgpCi17Ci0gICAgaWYgKGN1cnJlbnRQb3Mg
Pj0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgKytjdXJyZW50UG9zOwotICAgIHdo
aWxlIChjdXJyZW50UG9zIDwgbGVuZ3RoICYmICFpc0NoYXJTdG9wKHN0cmluZ1tjdXJyZW50UG9z
XSkpCi0gICAgICAgICsrY3VycmVudFBvczsKLSAgICByZXR1cm4gY3VycmVudFBvczsKLX0KLQot
aW50IENoYXJCcmVha0l0ZXJhdG9yOjpwcmV2aW91cygpCi17Ci0gICAgaWYgKGN1cnJlbnRQb3Mg
PD0gMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChjdXJyZW50UG9zID4gbGVuZ3RoKQot
ICAgICAgICBjdXJyZW50UG9zID0gbGVuZ3RoOwotICAgIC0tY3VycmVudFBvczsKLSAgICB3aGls
ZSAoY3VycmVudFBvcyA+IDAgJiYgIWlzQ2hhclN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAg
ICAgICAgLS1jdXJyZW50UG9zOwotICAgIHJldHVybiBjdXJyZW50UG9zOwotfQotCi1pbnQgTGlu
ZUJyZWFrSXRlcmF0b3I6OmZpcnN0KCkKLXsKLSAgICBjdXJyZW50UG9zID0gMDsKLSAgICByZXR1
cm4gY3VycmVudFBvczsKLX0KLQotaW50IExpbmVCcmVha0l0ZXJhdG9yOjpuZXh0KCkKLXsKLSAg
ICBpZiAoY3VycmVudFBvcyA9PSBsZW5ndGgpIHsKLSAgICAgICAgY3VycmVudFBvcyA9IC0xOwot
ICAgICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICB9Ci0gICAgYm9vbCBoYXZlU3BhY2UgPSBm
YWxzZTsKLSAgICB3aGlsZSAoY3VycmVudFBvcyA8IGxlbmd0aCkgewotICAgICAgICBpZiAoaGF2
ZVNwYWNlICYmICFpc0xpbmVTdG9wKHN0cmluZ1tjdXJyZW50UG9zXSkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaWYgKGlzTGluZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAg
ICAgICAgIGhhdmVTcGFjZSA9IHRydWU7Ci0gICAgICAgICsrY3VycmVudFBvczsKLSAgICB9Ci0g
ICAgcmV0dXJuIGN1cnJlbnRQb3M7Ci19Ci0KLWludCBMaW5lQnJlYWtJdGVyYXRvcjo6cHJldmlv
dXMoKQotewotICAgIGlmICghY3VycmVudFBvcykgewotICAgICAgICBjdXJyZW50UG9zID0gLTE7
Ci0gICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgIH0KLSAgICBib29sIGhhdmVTcGFjZSA9
IGZhbHNlOwotICAgIHdoaWxlIChjdXJyZW50UG9zID4gMCkgewotICAgICAgICBpZiAoaGF2ZVNw
YWNlICYmICFpc0xpbmVTdG9wKHN0cmluZ1tjdXJyZW50UG9zXSkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgaWYgKGlzTGluZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAgICAg
ICAgIGhhdmVTcGFjZSA9IHRydWU7Ci0gICAgICAgIC0tY3VycmVudFBvczsKLSAgICB9Ci0gICAg
cmV0dXJuIGN1cnJlbnRQb3M7Ci19Ci0KLWludCBTZW50ZW5jZUJyZWFrSXRlcmF0b3I6OmZpcnN0
KCkKLXsKLSAgICBjdXJyZW50UG9zID0gMDsKLSAgICByZXR1cm4gY3VycmVudFBvczsKLX0KLQot
aW50IFNlbnRlbmNlQnJlYWtJdGVyYXRvcjo6bmV4dCgpCi17Ci0gICAgaWYgKGN1cnJlbnRQb3Mg
PT0gbGVuZ3RoKSB7Ci0gICAgICAgIGN1cnJlbnRQb3MgPSAtMTsKLSAgICAgICAgcmV0dXJuIGN1
cnJlbnRQb3M7Ci0gICAgfQotICAgIGJvb2wgaGF2ZVNwYWNlID0gZmFsc2U7Ci0gICAgd2hpbGUg
KGN1cnJlbnRQb3MgPCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKGhhdmVTcGFjZSAmJiAhaXNTZW50
ZW5jZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpZiAoaXNTZW50ZW5jZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAgICAgICAgIGhh
dmVTcGFjZSA9IHRydWU7Ci0gICAgICAgICsrY3VycmVudFBvczsKLSAgICB9Ci0gICAgcmV0dXJu
IGN1cnJlbnRQb3M7Ci19Ci0KLWludCBTZW50ZW5jZUJyZWFrSXRlcmF0b3I6OnByZXZpb3VzKCkK
LXsKLSAgICBpZiAoIWN1cnJlbnRQb3MpIHsKLSAgICAgICAgY3VycmVudFBvcyA9IC0xOwotICAg
ICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICB9Ci0gICAgYm9vbCBoYXZlU3BhY2UgPSBmYWxz
ZTsKLSAgICB3aGlsZSAoY3VycmVudFBvcyA+IDApIHsKLSAgICAgICAgaWYgKGhhdmVTcGFjZSAm
JiAhaXNTZW50ZW5jZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAoaXNTZW50ZW5jZVN0b3Aoc3RyaW5nW2N1cnJlbnRQb3NdKSkKLSAgICAg
ICAgICAgIGhhdmVTcGFjZSA9IHRydWU7Ci0gICAgICAgIC0tY3VycmVudFBvczsKLSAgICB9Ci0g
ICAgcmV0dXJuIGN1cnJlbnRQb3M7Ci19Ci0KLVRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJ
dGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoV29yZEJyZWFrSXRlcmF0b3IsIGl0ZXJhdG9yLCAoKSk7Ci0gICAgaXRlcmF0
b3IucmVzZXQoc3RyaW5nLCBsZW5ndGgpOwotICAgIHJldHVybiAmaXRlcmF0b3I7Ci19Ci0KLVRl
eHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJp
bmcsIGludCBsZW5ndGgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDaGFyQnJlYWtJdGVy
YXRvciwgaXRlcmF0b3IsICgpKTsKLSAgICBpdGVyYXRvci5yZXNldChzdHJpbmcsIGxlbmd0aCk7
Ci0gICAgcmV0dXJuICZpdGVyYXRvcjsKLX0KLQotc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBz
dGF0aWNMaW5lQnJlYWtJdGVyYXRvcjsKLQotVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5l
QnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9t
aWNTdHJpbmcmKQotewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvciA9
IDA7Ci0gICAgaWYgKHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yKSB7Ci0gICAgICAgIHN0YXRpY0xp
bmVCcmVha0l0ZXJhdG9yLT5yZXNldChzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIHN3YXAoc3Rh
dGljTGluZUJyZWFrSXRlcmF0b3IsIGxpbmVCcmVha0l0ZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxpbmVCcmVha0l0ZXJhdG9yICYmIHN0cmluZyAmJiBsZW5ndGgpIHsKLSAgICAgICAgbGlu
ZUJyZWFrSXRlcmF0b3IgPSBuZXcgTGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgICAgIGxpbmVCcmVh
a0l0ZXJhdG9yLT5yZXNldChzdHJpbmcsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxp
bmVCcmVha0l0ZXJhdG9yOwotfQotCi12b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRvcihUZXh0
QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgQVNTRVJUKGl0ZXJhdG9yKTsKLQotICAg
IGlmICghc3RhdGljTGluZUJyZWFrSXRlcmF0b3IpCi0gICAgICAgIHN0YXRpY0xpbmVCcmVha0l0
ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgZWxzZQotICAgICAgICBkZWxldGUgaXRlcmF0b3I7Ci19
Ci0KLVRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
IHN0cmluZywgaW50IGxlbmd0aCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNlbnRlbmNl
QnJlYWtJdGVyYXRvciwgaXRlcmF0b3IsICgpKTsKLSAgICBpdGVyYXRvci5yZXNldChzdHJpbmcs
IGxlbmd0aCk7Ci0gICAgcmV0dXJuICZpdGVyYXRvcjsKLX0KLQotaW50IHRleHRCcmVha0ZpcnN0
KFRleHRCcmVha0l0ZXJhdG9yKiBicmVha0l0ZXJhdG9yKQotewotICAgIHJldHVybiBicmVha0l0
ZXJhdG9yLT5maXJzdCgpOwotfQotCi1pbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRv
ciogYnJlYWtJdGVyYXRvcikKLXsKLSAgICByZXR1cm4gYnJlYWtJdGVyYXRvci0+bmV4dCgpOwot
fQotCi1pbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBicmVha0l0ZXJh
dG9yLCBpbnQgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIGJyZWFrSXRlcmF0b3ItPnByZWNlZGlu
Zyhwb3NpdGlvbik7Ci19Ci0KLWludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0
b3IqIGJyZWFrSXRlcmF0b3IsIGludCBwb3NpdGlvbikKLXsKLSAgICByZXR1cm4gYnJlYWtJdGVy
YXRvci0+Zm9sbG93aW5nKHBvc2l0aW9uKTsKLX0KLQotaW50IHRleHRCcmVha0N1cnJlbnQoVGV4
dEJyZWFrSXRlcmF0b3IqIGJyZWFrSXRlcmF0b3IpCi17Ci0gICAgcmV0dXJuIGJyZWFrSXRlcmF0
b3ItPmN1cnJlbnRQb3M7Ci19Ci0KLWJvb2wgaXNUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3Iq
LCBpbnQpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRCcmVha0l0ZXJhdG9yKiBjdXJz
b3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlckJyZWFrSXRlcmF0b3Ioc3RyaW5nLCBsZW5ndGgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2JyZXcvVGV4dENvZGVjQnJldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9icmV3L1RleHRDb2RlY0JyZXcuY3BwCShyZXZpc2lvbiA5NTkyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Q29kZWNCcmV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENvZGVjQnJldy5oIgotCi0jaW5jbHVkZSAiQUVFQXBwR2Vu
LmgiCi0jaW5jbHVkZSAiQUVFSUNoYXJzZXRDb252LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEZJWE1FOiBOb3Qgc3VyZSBpZiB0aGVyZSBhcmUgQnJldyBNUCBkZXZpY2VzIHdo
aWNoIHVzZSBiaWcgZW5kaWFuLgotY29uc3QgY2hhciogV2ViQ29yZTo6VGV4dENvZGVjQnJldzo6
bV9pbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZMRSI7Ci0KLXN0YXRpYyBQYXNzT3duUHRy
PFRleHRDb2RlYz4gbmV3VGV4dENvZGVjQnJldyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
LCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gbmV3IFRleHRDb2RlY0JyZXcoZW5jb2Rpbmcp
OwotfQotCi12b2lkIFRleHRDb2RlY0JyZXc6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBz
dXJlIGhvdyB0byBlbnVtZXJhdGUgYWxsIGF2YWlsYWJsZSBlbmNvZGluZ3MuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q29kZWNCcmV3OjpyZWdpc3RlckV4dGVuZGVkQ29k
ZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotVGV4dENvZGVjQnJldzo6VGV4dENvZGVjQnJldyhjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQotICAgIDogbV9jaGFyc2V0Q29udmVydGVyKDApCi0gICAgLCBtX2VuY29kaW5n
KGVuY29kaW5nKQotICAgICwgbV9udW1CdWZmZXJlZEJ5dGVzKDApCi17Ci0gICAgU3RyaW5nIGZv
cm1hdCA9IFN0cmluZzo6Zm9ybWF0KCIlcz4lcyIsIGVuY29kaW5nLm5hbWUoKSwgbV9pbnRlcm5h
bEVuY29kaW5nTmFtZSk7Ci0KLSAgICBJU2hlbGwqIHNoZWxsID0gcmVpbnRlcnByZXRfY2FzdDxB
RUVBcHBsZXQqPihHRVRBUFBJTlNUQU5DRSgpKS0+bV9wSVNoZWxsOwotICAgIEFFRUNMU0lEIGNs
YXNzSUQgPSBJU0hFTExfR2V0SGFuZGxlcihzaGVsbCwgQUVFSUlEX0lDaGFyc2V0Q29udiwgZm9y
bWF0LmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgSVNIRUxMX0NyZWF0ZUluc3RhbmNlKHNoZWxsLCBj
bGFzc0lELCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fY2hhcnNldENvbnZlcnRlcikpOwot
Ci0gICAgQVNTRVJUKG1fY2hhcnNldENvbnZlcnRlcik7Ci19Ci0KLVRleHRDb2RlY0JyZXc6On5U
ZXh0Q29kZWNCcmV3KCkKLXsKLSAgICBpZiAobV9jaGFyc2V0Q29udmVydGVyKQotICAgICAgICBJ
Q2hhcnNldENvbnZfUmVsZWFzZShtX2NoYXJzZXRDb252ZXJ0ZXIpOwotfQotCi1TdHJpbmcgVGV4
dENvZGVjQnJldzo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29s
IGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKLXsKLSAgICBpbnQgY29k
ZSA9IElDaGFyc2V0Q29udl9Jbml0aWFsaXplKG1fY2hhcnNldENvbnZlcnRlciwgbV9lbmNvZGlu
Zy5uYW1lKCksIG1faW50ZXJuYWxFbmNvZGluZ05hbWUsIDApOwotICAgIEFTU0VSVChjb2RlID09
IEFFRV9TVUNDRVNTKTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBwcmVmaXhlZEJ5dGVzKGxlbmd0aCk7Ci0KLSAgICBpbnQgc3JjU2l6ZTsK
LSAgICB1bnNpZ25lZCBjaGFyKiBzcmNCZWdpbjsKLQotICAgIGlmIChtX251bUJ1ZmZlcmVkQnl0
ZXMpIHsKLSAgICAgICAgc3JjU2l6ZSA9IGxlbmd0aCArIG1fbnVtQnVmZmVyZWRCeXRlczsKLSAg
ICAgICAgcHJlZml4ZWRCeXRlcy5ncm93KHNyY1NpemUpOwotICAgICAgICBtZW1jcHkocHJlZml4
ZWRCeXRlcy5kYXRhKCksIG1fYnVmZmVyZWRCeXRlcywgbV9udW1CdWZmZXJlZEJ5dGVzKTsKLSAg
ICAgICAgbWVtY3B5KHByZWZpeGVkQnl0ZXMuZGF0YSgpICsgbV9udW1CdWZmZXJlZEJ5dGVzLCBi
eXRlcywgbGVuZ3RoKTsKLQotICAgICAgICBzcmNCZWdpbiA9IHByZWZpeGVkQnl0ZXMuZGF0YSgp
OwotCi0gICAgICAgIC8vIGFsbCBidWZmZXJlZCBieXRlcyBhcmUgY29uc3VtZWQgbm93Ci0gICAg
ICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3JjU2l6
ZSA9IGxlbmd0aDsKLSAgICAgICAgc3JjQmVnaW4gPSBjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIq
PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihieXRlcykpOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IHNyY0JlZ2luOwotICAgIHVuc2lnbmVkIGNoYXIq
IHNyY0VuZCA9IHNyY0JlZ2luICsgc3JjU2l6ZTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gZHN0QnVm
ZmVyKHNyY1NpemUpOwotCi0gICAgd2hpbGUgKHNyYyA8IHNyY0VuZCkgewotICAgICAgICBpbnQg
bnVtQ2hhcnNDb252ZXJ0ZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRzdEJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZHN0QnVmZmVyLmRhdGEoKSk7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIqIGRzdCA9IGRzdEJlZ2luOwotICAgICAgICBpbnQgZHN0U2l6ZSA9IGRz
dEJ1ZmZlci5zaXplKCkgKiBzaXplb2YoVUNoYXIpOwotCi0gICAgICAgIGNvZGUgPSBJQ2hhcnNl
dENvbnZfQ2hhcnNldENvbnZlcnQobV9jaGFyc2V0Q29udmVydGVyLCAmc3JjLCAmc3JjU2l6ZSwg
JmRzdCwgJmRzdFNpemUsICZudW1DaGFyc0NvbnZlcnRlZCk7Ci0gICAgICAgIEFTU0VSVChjb2Rl
ICE9IEFFRV9FTk9TVUNIKTsKLQotICAgICAgICBpZiAoY29kZSA9PSBBRUVfRUJVRkZFUlRPT1NN
QUxMKSB7Ci0gICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgYnVmZmVyIGFuZCB0cnkgaXQgYWdh
aW4uCi0gICAgICAgICAgICBkc3RCdWZmZXIuZ3Jvdyhkc3RCdWZmZXIuc2l6ZSgpICogMik7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2RlID09IEFF
RV9FQkFESVRFTSkgewotICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAg
aWYgKHN0b3BPbkVycm9yKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChMJz8nKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Jj
Kys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29kZSA9PSBBRUVfRUlOQ09NUExFVEVJVEVN
KSB7Ci0gICAgICAgICAgICBpZiAoZmx1c2gpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlBhcnRpYWwgYnl0ZXMgYXQgZW5kIG9mIGlucHV0IHdoaWxlIGZsdXNoIHJlcXVlc3RlZC4iKTsK
LSAgICAgICAgICAgICAgICBzYXdFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX251bUJ1ZmZlcmVkQnl0
ZXMgPSBzcmNFbmQgLSBzcmM7Ci0gICAgICAgICAgICBtZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBz
cmMsIG1fbnVtQnVmZmVyZWRCeXRlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCBudW1DaGFycyA9IChkc3QgLSBkc3RCZWdpbikgLyBzaXplb2YoVUNoYXIp
OwotICAgICAgICBpZiAobnVtQ2hhcnMgPiAwKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
c3RCdWZmZXIuZGF0YSgpLCBudW1DaGFycyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0cmluZzo6
YWRvcHQocmVzdWx0KTsKLX0KLQotQ1N0cmluZyBUZXh0Q29kZWNCcmV3OjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFu
ZGxpbmcpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIHVu
c2lnbmVkIGludCByZXBsYWNlbWVudENoYXJhY3RlciA9ICc/JzsKLQotICAgIC8vIEZJWE1FOiBJ
bXBvc3NpYmxlIHRvIGhhbmRsZSBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyBvciBVUkxFbmNvZGVk
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMgd2l0aCBJQ2hhcnNldENvbnYuCi0gICAgaW50IGNvZGUg
PSBJQ2hhcnNldENvbnZfSW5pdGlhbGl6ZShtX2NoYXJzZXRDb252ZXJ0ZXIsIG1faW50ZXJuYWxF
bmNvZGluZ05hbWUsIG1fZW5jb2RpbmcubmFtZSgpLCByZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0g
ICAgQVNTRVJUKGNvZGUgPT0gQUVFX1NVQ0NFU1MpOwotCi0gICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKLQotICAgIGludCBzcmNTaXplID0gbGVuZ3RoICogc2l6ZW9mKFVDaGFyKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBzcmNCZWdpbiA9IGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNoYXJhY3RlcnMpKTsKLSAgICB1bnNpZ25l
ZCBjaGFyKiBzcmMgPSBzcmNCZWdpbjsKLSAgICB1bnNpZ25lZCBjaGFyKiBzcmNFbmQgPSBzcmNC
ZWdpbiArIHNyY1NpemU7Ci0KLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZHN0QnVmZmVyKGxl
bmd0aCAqIHNpemVvZihVQ2hhcikpOwotCi0gICAgd2hpbGUgKHNyYyA8IHNyY0VuZCkgewotICAg
ICAgICBpbnQgbnVtQ2hhcnNDb252ZXJ0ZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRzdEJl
Z2luID0gZHN0QnVmZmVyLmRhdGEoKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogZHN0ID0gZHN0
QmVnaW47Ci0gICAgICAgIGludCBkc3RTaXplID0gZHN0QnVmZmVyLnNpemUoKTsKLQotICAgICAg
ICBjb2RlID0gSUNoYXJzZXRDb252X0NoYXJzZXRDb252ZXJ0KG1fY2hhcnNldENvbnZlcnRlciwg
JnNyYywgJnNyY1NpemUsICZkc3QsICZkc3RTaXplLCAmbnVtQ2hhcnNDb252ZXJ0ZWQpOwotICAg
ICAgICBBU1NFUlQoY29kZSAhPSBBRUVfRUlOQ09NUExFVEVJVEVNKTsKLQotICAgICAgICBpZiAo
Y29kZSA9PSBBRUVfRU5PU1VDSCkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb252ZXJzaW9u
IGVycm9yLCBDb2RlPSVkIiwgY29kZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1N0cmluZygpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvZGUgPT0gQUVFX0VCVUZGRVJUT09TTUFMTCkgewot
ICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGJ1ZmZlciBhbmQgdHJ5IGl0IGFnYWluLgotICAg
ICAgICAgICAgZHN0QnVmZmVyLmdyb3coZHN0QnVmZmVyLnNpemUoKSAqIDIpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29kZSA9PSBBRUVfRUJBRElU
RU0pCi0gICAgICAgICAgICBzcmMgKz0gc2l6ZW9mKFVDaGFyKTsgLy8gU2tpcCB0aGUgaW52YWxp
ZCBjaGFyYWN0ZXIKLQotICAgICAgICBpbnQgbnVtQnl0ZXMgPSBkc3QgLSBkc3RCZWdpbjsKLSAg
ICAgICAgaWYgKG51bUJ5dGVzID4gMCkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZHN0QnVm
ZmVyLmRhdGEoKSwgbnVtQnl0ZXMpOwotICAgIH0KLQotICAgIHJldHVybiBDU3RyaW5nKHJlc3Vs
dC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2JyZXcvVGV4dENvZGVjQnJldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvYnJldy9UZXh0Q29kZWNC
cmV3LmgJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9i
cmV3L1RleHRDb2RlY0JyZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgVGV4dENvZGVjQnJld19oCi0jZGVmaW5lIFRleHRDb2RlY0Jy
ZXdfaAotCi0jaW5jbHVkZSAiVGV4dENvZGVjLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgi
Ci0KLXR5cGVkZWYgc3RydWN0IElDaGFyc2V0Q29udiBJQ2hhcnNldENvbnY7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dENvZGVjQnJldyA6IHB1YmxpYyBUZXh0Q29kZWMgewot
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVu
Y29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENv
ZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwotCi0gICAgVGV4dENvZGVjQnJldyhjb25zdCBUZXh0
RW5jb2RpbmcmKTsKLSAgICB2aXJ0dWFsIH5UZXh0Q29kZWNCcmV3KCk7Ci0KLSAgICB2aXJ0dWFs
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJv
b2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKLSAgICB2aXJ0dWFsIENTdHJpbmcgZW5j
b2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7Ci0K
LXByaXZhdGU6Ci0gICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgc2l6ZV90IG1fbnVt
QnVmZmVyZWRCeXRlczsKLSAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07IC8v
IGJpZ2dlciB0aGFuIGFueSBzaW5nbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIKLSAgICBJQ2hhcnNl
dENvbnYqIG1fY2hhcnNldENvbnZlcnRlcjsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtX2lu
dGVybmFsRW5jb2RpbmdOYW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gVGV4dENvZGVjQnJld19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTkyMikKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDExLTA5LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
RmluaXNoIHJlbW92aW5nIFBMQVRGT1JNKEJSRVdNUCkgYnkgcmVtb3ZpbmcgYXNzb2NpYXRlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGw6CisKIDIwMTEtMDktMjUgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgUExBVEZPUk0oSEFJ
S1UpIGFuZCBhc3NvY2lhdGVkIGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2Vu
ZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCShyZXZpc2lvbiA5NTkyMikK
KysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBs
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHVzZSBGaWxlOjpTcGVjOjpGdW5jdGlv
bnM7CiAKIG15ICRzcmNSb290ID0gcmVhbHBhdGgoRmlsZTo6U3BlYy0+Y2F0ZmlsZShkaXJuYW1l
KGFic19wYXRoKCQwKSksICIuLi8uLiIpKTsKIG15ICRpbmNGcm9tUm9vdCA9IGFic19wYXRoKCRB
UkdWWzBdKTsKLW15IEBwbGF0Zm9ybVByZWZpeGVzID0gKCJicmV3IiwgImNmIiwgImNocm9taXVt
IiwgImN1cmwiLCAiZWZsIiwgImd0ayIsICJtYWMiLCAicXQiLCAic291cCIsICJ2OCIsICJ3aW4i
LCAid3giKTsKK215IEBwbGF0Zm9ybVByZWZpeGVzID0gKCJjZiIsICJjaHJvbWl1bSIsICJjdXJs
IiwgImVmbCIsICJndGsiLCAibWFjIiwgInF0IiwgInNvdXAiLCAidjgiLCAid2luIiwgInd4Iik7
CiBteSBAZnJhbWV3b3JrcyA9ICggIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiLCAiV2ViS2l0
MiIpOwogbXkgQHNraXBwZWRQcmVmaXhlczsKIG15IEBmcmFtZXdvcmtIZWFkZXJzOwpJbmRleDog
U291cmNlL2NtYWtlL1dlYktpdFBhY2thZ2luZy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Y21ha2UvV2ViS2l0UGFja2FnaW5nLmNtYWtlCShyZXZpc2lvbiA5NTkyMikKKysrIFNvdXJjZS9j
bWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgs
NiBAQCBJRihOT1QgREVGSU5FRCBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTCiAKICAgICAjIEZp
bGUgYW5kIERpcmVjdG9yeSBwYXR0ZXJucyB0aGF0IG5vIENNYWtlLWlmaWVkIHBvcnQgdXNlcwog
ICAgIFNFVChGSUxFX1BBVFRFUk5TX1VOS05PV05fUE9SVFMKLSAgICAgICIvYnJldy8iICIvQnJl
dy8iICJicmV3XFxcXC4iICJCcmV3XFxcXC4iCiAgICAgICAiL2NhcmJvbi8iICIvQ2FyYm9uLyIg
ImNhcmJvblxcXFwuIiAiQ2FyYm9uXFxcXC4iCiAgICAgICAiL2NmLyIgIi9DZi8iICJjZlxcXFwu
IiAiQ2ZcXFxcLiIKICAgICAgICIvY2cvIiAiL0NnLyIgImNnXFxcXC4iICJDZ1xcXFwuIgpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gOTU5MjIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxMS0wOS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAg
ICAgIEZpbmlzaCByZW1vdmluZyBQTEFURk9STShCUkVXTVApIGJ5IHJlbW92aW5nIGFzc29jaWF0
ZWQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg3NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9idWlsZC5weToKKyAgICAgICAgKiB3YWYv
YnVpbGQvc2V0dGluZ3MucHk6CisKIDIwMTEtMDktMjUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgUExBVEZPUk0oSEFJS1UpIGFuZCBhc3NvY2lhdGVk
IGNvZGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9idWlsZC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvYnVp
bGQucHkJKHJldmlzaW9uIDk1OTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y29uZmlnL2J1aWxkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIGRlZiBfc2hv
dWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJnZXRfcGwKICAgICAgICAgKCJTb3VyY2UvV2ViQ29y
ZS9tYW51YWwtdGVzdHMiLCBbXSksCiAgICAgICAgICgiVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwiLCBbXSksCiAgICAgICAgICgiV2Vi
c2l0ZXMiLCBbXSksCi0gICAgICAgICgiYnJldyIsIFtdKSwKICAgICAgICAgKCJlZmwiLCBbXSks
CiAgICAgICAgICgiaXBob25lIiwgW10pLAogICAgICAgICAoIm9wZW5nbCIsIFtdKSwKSW5kZXg6
IFRvb2xzL3dhZi9idWlsZC9zZXR0aW5ncy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy93YWYvYnVp
bGQvc2V0dGluZ3MucHkJKHJldmlzaW9uIDk1OTIyKQorKysgVG9vbHMvd2FmL2J1aWxkL3NldHRp
bmdzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIGNvbW1vbl9saWJwYXRocyA9
IFtdCiBjb21tb25fZnJhbWV3b3JrcyA9IFtdCiAKIHBvcnRzID0gWwotICAgICdCcmV3JywKICAg
ICAnQ2hyb21pdW0nLAogICAgICdHdGsnLAogICAgICdNYWMnLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>