From pillai@cs.fsu.edu  Sat Jun 19 15:10:59 2004
Return-Path: <pillai@cs.fsu.edu>
X-Original-To: baker@cs.fsu.edu
Delivered-To: baker@cs.fsu.edu
Received: from websrv.cs.fsu.edu (websrv.cs.fsu.edu [128.186.120.244])
	by mail.cs.fsu.edu (Postfix) with ESMTP id 6927DF2B5F
	for <baker@cs.fsu.edu>; Sat, 19 Jun 2004 15:10:59 -0400 (EDT)
Received: (from system-vhost@localhost)
	by websrv.cs.fsu.edu (8.12.6/8.12.6/Submit) id i5JJB0RC006659
	for baker@cs.fsu.edu; Sat, 19 Jun 2004 15:11:00 -0400
X-Authentication-Warning: websrv.cs.fsu.edu: system-vhost set sender to pillai@cs.fsu.edu using -f
Received: from itl1.cs.fsu.edu (itl1.cs.fsu.edu [128.186.121.88]) by
	system.cs.fsu.edu (Horde) with HTTP for <pillai@cs.fsu.edu>; Sat, 19 Jun
	2004 15:11:00 -0400
Message-ID: <1087672260.7a5e0e049f2f8@system.cs.fsu.edu>
Date: Sat, 19 Jun 2004 15:11:00 -0400
From: pillai@cs.fsu.edu
To: baker@cs.fsu.edu
Subject: Project Code
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=_c8a30f2e9f29f826029cdf"
Content-Transfer-Encoding: 7bit
User-Agent: Internet Messaging Program (IMP) 4.0-cvs
X-Originating-IP: 128.186.121.88
X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on mail.cs.fsu.edu
X-Spam-Level: 
X-Spam-Status: No, hits=-2.5 required=5.0 tests=BAYES_00,DOMAIN_BODY,L_TO_ME,
	NO_REAL_NAME autolearn=no version=2.63
Content-Length: 71825
Lines: 958

This message is in MIME format.

--=_c8a30f2e9f29f826029cdf
Content-Type: text/plain; charset="ISO-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit


Dr. Baker,
We have attached our project code here. We will submit the hard copy (with
changes marked) on monday.
Thank you.
Have a good day.
Akhilesh .



  ************************************
  * Akhilesh Pillai                  *
  * MCH 102-C                        *
  * Dept. Of Computer Science        *
  * Florida State University         *
  ************************************
--=_c8a30f2e9f29f826029cdf
Content-Type: text/plain; name="hrt.c"; charset="ISO-8859-1"
Content-Disposition: attachment; filename="hrt.c"
Content-Transfer-Encoding: base64

LyoKICogRmlsZSBOYW1lIDogaHJ0LmMKICogCiAqIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZv
ciB0aGUgSGlnaCBSZXNvbHV0aW9uIFRlY2hub2xvZ2llcwogKiBQaXhlbHNtYXJ0IDUxMi04IGZy
YW1lIGdyYWJiZXIuCgogKiAgICAgICAgIENvcHlyaWdodCAoQykgMjAwMywgRmxvcmlkYSBTdGF0
ZSBVbml2ZXJzaXR5CiAqCiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciAKICogdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAgYnkgdGhlIEZyZWUgU29mdC0gCiAqIHdh
cmUgRm91bmRhdGlvbiwgVmVyc2lvbiAyLiAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZQogKiB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSCBPVVQgQU5ZIFdB
UlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZQogKiBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U
QUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICogU2VlIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgIG1vcmUgZGV0YWlscy4gWW91IHNob3VsZCBo
YXZlCiAqIHJlY2VpdmVkICBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogKiBzb2Z0d2FyZTsgc2VlIGZpbGUgQ09QWUlORy4gIElm
IG5vdCwgd3JpdGUgdG8gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCiAqIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgoKICogVGhp
cyBpcyBiYXNlZCBvbiB0d28gZHJpdmVycywgb3JpZ2luYWxseSB3cml0dGVuIGJ5IHR3bwogKiB0
ZWFtcyBvZiBzdHVkZW50czoKICogMSkgQnJldHQgVy4gVGhvbXBzb24sIEdpbGJlcnRvIE1vcmVq
b24sIGFuZCBBbGV4IFJ1ZG5pY2sKICogMikgVmVlbmEgQWRpdHlhbiBhbmQgQXJ0aGkgR29rYXJu
CiAqIEl0IHdhcyB0aGUgZmluYWwgcHJvamVjdCBmb3IgdGhlIGNvdXJzZSBDSVMgNTkzMCBMaW51
eCBLZXJuZWwgJgogKiBEZXZpY2UgRHJpdmVyIFByb2dyYW1taW5nLCBhdCB0aGUgRmxvcmlkYSBT
dGF0ZSBVbml2ZXJzaXR5LAogKiBTdW1tZXIgMjAwMy4KCiAqIEkyQyBpbml0aWFsaXphdGlvbiBh
bmQgcHJvYmluZyB3ZXJlIHdyaXR0ZW4gYnkgRHIuIFQuIFAuIEJha2VyLgoKICogTWVyZ2luZyB0
aGUgdHdvIGRyaXZlcnMgd2FzIHN0YXJ0ZWQgYnkgRHIuIFQuIFAuIEJha2VyIGFuZAogKiBmaW5p
c2hlZCBieSBCcmV0dCBXLiBUaG9tcHNvbiBhbmQgR2lsYmVydG8gTW9yZWpvbi4KCiAqIFN0cmVh
bWluZyBwb3J0aW9uIGFkYXB0ZWQgZnJvbSBCaWxsIERpcmtzJyB2NGwyY2FwLmMgYnkKICogVmVl
bmEgQWRpdHlhbiBhbmQgQXJ0aGkgR29rYXJuLgoKICovCgojaW5jbHVkZSA8bGludXgvbW9kdWxl
Lmg+CiNpbmNsdWRlIDxsaW51eC9wY2kuaD4KI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiNp
bmNsdWRlIDxsaW51eC9saXN0Lmg+CiNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KCiNpbmNsdWRl
IDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8YXNtL21zci5oPgoKI2luY2x1ZGUgImhydC5jb2xv
ci5oIgoKCiNpbmNsdWRlPGxpbnV4L2kyYy5oPgoKdW5zaWduZWQgbG9uZyBteV92aXJ0dWFsX2Fk
ZHJlc3M7CnZvbGF0aWxlIGludCBmcmFtZV9pcnEgPSAtMTsKdm9sYXRpbGUgaW50IGludHJfY291
bnQgPSAwOwoKCi8qIENvbnRyb2xzIHRoZSB1c2VyIGNhbiBzZXQgdmlhIFY0TCBpb2N0bCdzICov
CiNpZmRlZiBIQVZFX1Y0TDIKc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBocnRf
Y3Rsc1tdID0gewoJewoJCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCgkJLm5hbWUgPSAiQnJp
Z2h0bmVzcyIsCgkJLm1pbmltdW0gPSAwLAoJCS5tYXhpbXVtID0gMjU1LAoJCS5zdGVwID0gMSwK
CQkuZGVmYXVsdF92YWx1ZSA9IDB4OWIsCgkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VS
LAoJfSwgewoJCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAoJCS5uYW1lID0gIkNvbnRyYXN0IiwK
CQkubWluaW11bSA9IDAsCgkJLm1heGltdW0gPSAyNTUsCgkJLnN0ZXAgPSAxLAoJCS5kZWZhdWx0
X3ZhbHVlID0gMHg1ZSwKCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCgl9Cn07CiNl
bmRpZgoKLyoqCiAqIGhydF9hZGRyZXNzZXMgLSBhIGxpc3Qgb2YgcG9zc2libGUganVtcGVyLXNl
bGVjdGVkIGFkZHJlc3NlcwogKiAganVtcGVyIEEgb24gID0gcGx1ZyBhbmQgcGxheSBhZGRyZXNz
IChhYm92ZSBvbmUgTUIgYWRkcmVzcykKICogIGp1bXBlciBBIG9mZiA9IGhhcmR3aXJlZCB0byAw
eGRjMDAwIG9yIDB4ZDQwMDAKICogIGp1bXBlciBCIG9uICA9IGFkZHJlc3MgMHhkNDAwMCAoaWdu
b3JlZCBpZiBqdW1wZXIgQSBpcyBvbikgCiAqICBqdW1wZXIgQiBvZmYgPSBhZGRyZXNzIDB4ZGMw
MDAgKGlnbm9yZWQgaWYganVtcGVyIEEgaXMgb24pIAogKi8KY29uc3QgdW5zaWduZWQgbG9uZyBo
cnRfYWRkcmVzc2VzW10gPSB7IDB4ZDQwMDAsIDB4ZGMwMDAgfTsKCi8qKgogKiBJMkMgcm91dGlu
ZXMgLQogKiAgQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgY2FwYWJpbGl0eSBhbHNvIGZvciBhbiBh
cHBsaWNhdGlvbgogKiAgdGhhdCBpcyB1c2luZyByYXcgbWVtb3J5LW1hcHBpbmcsIG1heWJlIGFz
IGEgc2VwYXJhdGUgaGVhZGVyCiAqICBmaWxlIGFuZCBvYmplY3QgbGlicmFyeQogKi8KCi8qKgog
KiBzYWE3MTEwX2RlZmF1bHRfaW5pdF9yZWdzIC0gdGhlIHJlZ2lzdGVyIHZhbHVlcyB1c2VkIHRv
CiAqIGluaXRpYWxpemUgdGhlIFNBQTcxMTAgQS9EIGNvbnZlcnRlci4KICogQmVjYXVzZSBzb21l
IHJlZ2lzdGVycyBhcmUgbm90IHNldCwgdGhpcyBpcyBnaXZlbgogKiBhcyBhIGxpc3Qgb2YgcGFp
cnMuICBUaGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHBhaXIKICogaXMgdGhlIHJlZ2lzdGVyIG51
bWJlciwgYW5kIHRoZSBzZWNvbmQgbnVtYmVyIGlzIHRoZQogKiB2YWx1ZSBvZiB0aGUgcmVnaXN0
ZXIuICBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieQogKiBhIGRvdWJsZSB6ZXJvLWJ5dGUuICBU
aGlzIGdlbmVyYWxpemF0aW9uIGFsbG93cyB1cyB0byByZXVzZQogKiB0aGUgaW5pdGlhbGl6YXRp
b24gcm91dGluZSB3aXRoIGRpZmZlcmVudCB0YWJsZXMsCiAqIHRvIGFsbG93IGFuIGFwcGxpY2F0
aW9uIHRvIHJlc2V0IGFueSBzZXQgb2YgZGV2aWNlCiAqIHJlZ2lzdGVycy4KICovCmNvbnN0IHVu
c2lnbmVkIGNoYXIgc2FhNzExMF9kZWZhdWx0X2luaXRfcmVnc1tdID0gewoJOTQsICAgICAgICAg
ICAgICAgICAgICAgLyogdGhlcmUgYXJlIDk0IGJ5dGVzIHRoYXQgZm9sbG93ICovCgkweDAwLCAw
eDRjLAkJLyogaW5jcmVtZW50IGRlbGF5IChJREVMKSAqLwoJMHgwMSwgMHgzYywJCS8qIEhTWSBi
ZWdpbiA1MCBIeiAqLwoJMHgwMiwgMHgwZCwJCS8qIEhTWSBzdG9wIDUwIEh6ICovCgkweDAzLCAw
eGVmLAkJLyogSENMIGJlZ2luIDUwIEh6ICovCgkweDA0LCAweGJkLAkJLyogSENMIHN0b3AgNTAg
SHogKi8KCTB4MDUsIDB4ZjAsCQkvKiBIU1kgYWZ0ZXIgUEhJMSA1MCBIeiAqLwoJMHgwNiwgMHgw
MCwJCS8qIGx1bWluYW5jZSBjb250cm9sICovCgkweDA3LCAweDAwLAkJLyogaHVlIGNvbnRyb2wg
Ki8KCTB4MDgsIDB4ZjgsCQkvKiBjb2xvdXIga2lsbGVyIHRocmVzaG9sZCBRVUFNIChQQUwvTlRT
QykgKi8KCTB4MDksIDB4ZjgsCQkvKiBjb2xvdXIga2lsbGVyIHRocmVzaG9sZCBTRUNBTSAqLwoJ
MHgwQSwgMHg2MCwJCS8qIFBBTCBzd2l0Y2ggc2Vuc2l0aXZpdHkgKi8KCTB4MEIsIDB4NTAsCQkv
KiBTRUNBTSBzd2l0Y2ggc2Vuc2l0aXZpdHkgKi8KCTB4MEMsIDB4MDAsCQkvKiBnYWluIGNvbnRy
b2wgY2hyb21pbmFuY2UgKi8KCTB4MEQsIDB4ODYsCQkvKiBzdGFuZGFyZC9tb2RlIGNvbnRyb2wg
Ki8KCS8qIDcgVlRSQyA9IDEgIChWQ1IgbW9kZSwgbm90IFRWKQoJICAgNiBYWFgKCSAgIDUgWFhY
CgkgICA0IFhYWAoJICAgMyBSVFNFID0gMCAgKFBMSU4gc3dpdGNoZWQgdG8gb3V0cHV0KQoJICAg
MiBIUk1WID0gMSAgKEhSRUYgbm9ybWFsIHBvc2l0aW9uKQoJICAgMSBTU1RCID0gMSAgKHN0YXR1
cyBieXRlID0gMSkKCSAgIDAgU0VDUyA9IDAgIChvdGhlciBzdGFuZGFyZHMsIG5vdCBTRUNBTSkg
Ki8KCTB4MEUsIDB4MTgsCQkvKiBJL08gYW5kIGNsb2NrIGNvbnRyb2wgKi8KCTB4MEYsIDB4OTAs
CQkvKiBjb250cm9sICMxICovCgkweDEwLCAweDAwLAkJLyogY29udHJvbCAjMiAqLwoJMHgxMSwg
MHgyYywJCS8qIGNocm9taW5hbmNlIGdhaW4gcmVmZXJlbmNlICovCgkweDEyLCAweDdmLAkJLyog
Y2hyb21pbmFuY2Ugc2F0dXJhdGlvbiAqLwoJMHgxMywgMHg1ZSwJCS8qIGx1bWluYW5jZSBjb250
cmFzdCAqLwoJMHgxNCwgMHg0MiwJCS8qIEhTWSBiZWdpbiA2MCBIeiAqLwoJMHgxNSwgMHgxYSwJ
CS8qIEhTWSBzdG9wIDYwIEh6ICovCgkweDE2LCAweGZmLAkJLyogSENMIGJlZ2luIDYwIEh6ICov
CgkweDE3LCAweGRhLAkJLyogSENMIHN0b3AgNjAgSHogKi8KCTB4MTgsIDB4ZjAsCQkvKiBIU1kg
YWZ0ZXIgUEhJMSA2MCBIeiAqLwoJMHgxOSwgMHg5YiwJCS8qIGx1bWluYW5jZSBicmlnaHRuZXNz
ICovCgkvKgoJICAgMHgxQSAtIG5vdCB1c2VkCgkgICAweDFCIC0gbm90IHVzZWQKCSAgIDB4MUMg
LSBub3QgdXNlZAoJICAgMHgxRCAtIG5vdCB1c2VkCgkgICAweDFFIC0gbm90IHVzZWQKCSAgIDB4
MUYgLSBub3QgdXNlZAoJICovCgkweDIwLCAweDdjLAkJLyogYW5hbG9nIGNvbnRyb2wgIzEgKi8K
CTB4MjEsIDB4MDMsCQkvKiBhbmFsb2cgY29udHJvbCAjMiAqLwoJMHgyMiwgMHhkMiwJCS8qIG1p
eGVyIGNvbnRyb2wgIzEgKi8KCTB4MjMsIDB4NDEsCQkvKiBjbGFtcGluZyBsZXZlbCBjb250cm9s
IDIxICovCgkweDI0LCAweDgwLAkJLyogY2xhbXBpbmcgbGV2ZWwgY29udHJvbCAyMiAqLwoJMHgy
NSwgMHg0MSwJCS8qIGNsYW1waW5nIGxldmVsIGNvbnRyb2wgMzEgKi8KCTB4MjYsIDB4ODAsCQkv
KiBjbGFtcGluZyBsZXZlbCBjb250cm9sIDMyICovCgkweDI3LCAweDRmLAkJLyogZ2FpbiBjb250
cm9sICMxICovCgkweDI4LCAweGZlLAkJLyogd2hpdGUgcGVhayBjb250cm9sICovCgkweDI5LCAw
eDAxLAkJLyogc3luYyBib3R0b20gY29udHJvbCAqLwoJMHgyQSwgMHhjZiwJCS8qIGdhaW4gY29u
dHJvbCBhbmFsb2cgIzIgKi8KCTB4MkIsIDB4MGYsCQkvKiBnYWluIGNvbnRyb2wgYW5hbG9nICMz
ICovCgkweDJDLCAweDgzLAkJLyogbWl4ZXIgY29udHJvbCAjMiAqLwoJMHgyRCwgMHgwMSwJCS8q
IGludGVncmF0aW9uIHZhbHVlIGdhaW4gKi8KCTB4MkUsIDB4ODEsCQkvKiB2ZXJ0aWNhbCBibGFu
a2luZyBwdWxzZSBzZXQgKi8KCTB4MkYsIDB4MDMsCQkvKiB2ZXJ0aWNhbCBibGFua2luZyBwdWxz
ZSByZXNldCAqLwoJMHgzMCwgMHg2MCwJCS8qIEFEQ3MgZ2FpbiBjb250cm9sICovCgkweDMxLCAw
eDcxLAkJLyogbWl4ZXIgY29udHJvbCAjMyAqLwoJMHgzMiwgMHgwMiwJCS8qIGludGVncmF0aW9u
IHZhbHVlIHdoaXRlIHBlYWsgKi8KCTB4MzMsIDB4OGMsCQkvKiBtaXhlciBjb250cm9sICM0ICov
CgkweDM0LCAweDAzLAkJLyogZ2FpbiB1cGRhdGUgbGV2ZWwgKi8KfTsKCi8qIE51bWJlciBvZiBy
ZWdpc3RlcnMgb24gdGhlIGJvYXJkLSBjaGVja2VkIGluIGkyY19pbml0KCkgKi8KI2RlZmluZSBI
UlRfTlVNUkVHUyAweDM0CgovKiBTbWFsbCB1dGlsaXR5IHVzZWQgaW4gcmVhZCgpLi4uIFByb2Jh
Ymx5IHRoZXJlJ3MgYW4gb2ZmaWNpYWwKICAgb25lIHNvbWV3aGVyZSBpbiB0aGUga2VybmVsLCBo
dWg/CiovCiNpZm5kZWYgbWluCiMgIGRlZmluZSBtaW4oYSxiKSAoKGEpPChiKSA/IChhKSA6IChi
KSkKI2VuZGlmCgojaWZkZWYgSEFWRV9WNEwyCi8qKgogKiBzdHJ1Y3Qgc3RyZWFtX2J1ZmZlciAt
IHJlcHJlc2VudHMgYSBzaW5nbGUgYnVmZmVyIGZvciBzdHJlYW1pbmcKICovCnN0cnVjdCBzdHJl
YW1fYnVmZmVyIHsKCXN0cnVjdCB2NGwyX2J1ZmZlciB2aWRidWY7IC8qIEZvciB0aGUgVjRMIGlv
Y3RsJ3MgKi8KCWludCBmaWVsZHNfZ3JhYmJlZDsgLyogVHdvLWJpdCBwYWlyIG9mIGZsYWdzIGlu
ZGljYXRpbmcgd2hpY2ggZmllbGRzCgkJCSAgICAgICBoYXZlIGJlZW4gZ3JhYmJlZCAoaS5lLiwg
MDAgPSBubyBmaWVsZHMsCgkJCSAgICAgICAxMSA9IGJvdGgpICovCglzdHJ1Y3QgbGlzdF9oZWFk
IG5vZGU7IC8qIENvbm5lY3Rpb24gaW50byBxdWV1ZXMgKi8KCWludCByZXF1ZXN0ZWQ7IC8qIFNl
dCBieSBSRVFCVUYgaW9jdGwgKi8KCXVuc2lnbmVkIGNoYXIgKnZhZGRyZXNzOyAvKiBUaGlzIGlz
IHRoZSBwb2ludGVyIHRvIHRoZSB2bWFsbG9jKCknZAoJCQkJICAgIG1lbW9yeSBpbnRvIHdoaWNo
IHRoZSBhY3R1YWwgZnJhbWUgZ29lcyAqLwoJaW50IHZtYV9yZWZjb3VudDsgLyogUmVmZXJlbmNl
IGNvdW50ICovCn07CgovKioKICogc3RydWN0IHN0cmVhbV9idWZmZXJfcXVldWUgLSBGSUZPIG9m
IHN0cmVhbV9idWZmZXIgc3RydWN0cwogKi8Kc3RydWN0IHN0cmVhbV9idWZmZXJfcXVldWUgewoJ
c3RydWN0IHN0cmVhbV9idWZmZXIgKnN0cmVhbWJ1ZjsgLyogUG9pbnRlciB0byBub2RlIGRhdGEg
Ki8KCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsgLyogU3RhcnQgb2YgdGhlIHF1ZXVlICovCglyd2xv
Y2tfdCBsb2NrOyAvKiBMb2NrIHRvIHByb3RlY3QgdGhlIHF1ZXVlICovCglpbnQgbGVuZ3RoOyAv
KiBIb3cgbWFueSBub2RlcyBhcmUgb24gdGhlIHF1ZXVlICovCn07CiNlbmRpZgoKLyoqCiAqIHN0
cnVjdCBocnRfcGVyX2ZpbGUgLSBjb250YWlucyBkYXRhIHRvIGJlIHN0b3JlZCBwZXIgZmlsZSBo
YW5kbGUKICovCnN0cnVjdCBocnRfcGVyX2ZpbGUgewoJc3RydWN0IHN1YndpbmRvdyB3aW47Cglz
dHJ1Y3QgaHJ0ICpocnRkZXY7Cn07CgovKioKICogc3RydWN0IGhydCAtIHRoZSBtYWluIGRldmlj
ZSBzdHJ1Y3QuIFRoaXMgcmVwcmVzZW50cyB0aGUgY2FyZC4KICovCnN0cnVjdCBocnQgewoJdW5z
aWduZWQgbG9uZyBwaHlzYWRkcjsgLyogUGh5c2ljYWwgYWRkcmVzcyAqLwoJdW5zaWduZWQgbG9u
ZyB2aXJ0YWRkcjsgLyogVmlydHVhbCBhZGRyZXNzICh3YXMgaW9yZW1hcHBlZCkgKi8KICAgICAg
ICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OyAvKiBQQ0kgZGV2aWNlICovCglzdHJ1Y3Qgc2VtYXBo
b3JlIHNlbTsgLyogUHJvdGVjdGl2ZSBtdXRleCAqLwoJdW5zaWduZWQgaW50IGZpZWxkX2JpdDsg
LyogV2hpY2ggZmllbGQgKGV2ZW4gb3Igb2RkKSBpcyBjYXB0dXJpbmcgKi8KCXdhaXRfcXVldWVf
aGVhZF90IHdhaXRxdWV1ZTsgLyogV2FpdCBxdWV1ZSBmb3IgcG9sbCgpICovCgl1bnNpZ25lZCBj
aGFyIHJlZ3ZhbHNbSFJUX05VTVJFR1NdOyAvKiBDdXJyZW50IHZhbHVlcyBvZiB0aGUgcmVncyAq
LwoJdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhOyAvKiBUaGUgZGF0YSBmb3IgYSBmcmFtZSBmb3Ig
cmVhZCgpICovCglzdHJ1Y3Qgc3Vid2luZG93ICp3aW47IC8qIEN1cnJlbnQgcmVnaW9uIG9mIGlu
dGVyZXN0ICovCgl1bnNpZ25lZCBpbnQgYnl0ZXNwZXJsaW5lOyAvKiBCeXRlcyBwZXIgcmFzdGVy
IGxpbmUgKi8KCXVuc2lnbmVkIGludCBmcmFtZXNpemU7IC8qIFNpemUgb2YgYSBmcmFtZSAqLwoJ
dW5zaWduZWQgaW50IHVzZXJzOyAvKiBOdW1iZXIgb2YgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBvcGVu
KCknZCBocnRtZW0gKi8KCiNpZmRlZiBIQVZFX1Y0TDIKCXN0cnVjdCB2aWRlb19kZXZpY2Ugdmlk
ZW9fZGV2OwoJaW50IHN0cmVhbWluZzsgLyogRmxhZyBmb3Igc3RyZWFtaW5nIG1vZGUgKi8KCWlu
dCBudW1idWZzOyAvKiBOdW1iZXIgb2YgYnVmZmVycyBmb3Igc3RyZWFtaW5nICovCglzdHJ1Y3Qg
c3RyZWFtX2J1ZmZlciAqc3RyZWFtYnVmczsgLyogQXJyYXkgb2YgYnVmZmVycyAqLwoKCXN0cnVj
dCBzdHJlYW1fYnVmZmVyX3F1ZXVlIGNhcHR1cmVfbGlzdDsgLyogTGlzdCBvZiBxdWV1ZWQgYnVm
ZmVycyAqLwoJc3RydWN0IHN0cmVhbV9idWZmZXJfcXVldWUgZG9uZV9saXN0OyAvKiBMaXN0IG9m
IGZpbGxlZCBidWZmZXJzICovCgoJLyogVmVlbmEgYW5kIEFydGhpJ3Mgc3RyZWFtaW5nICovCglz
dHJ1Y3QgdjRsMl9mb3JtYXQgY2xpZW50Zm10OwoJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gY2Fw
dHVyZTsKCWludCBzdHJlYW1fYnVmZmVyc19tYXBwZWQ7CglzdHJ1Y3Qgc3RyZWFtX2J1ZmZlciBz
dHJlYW1fYnVmW01BWF9DQVBUVVJFX0JVRkZFUlNdOwoJaW50IHN0cmVhbV9idWZmZXJzX3JlcXVl
c3RlZDsKI2VuZGlmCn07CgovKiB2YXJpYWJsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBjYXJkIGlz
IGNvbG9yIG9yIG5vdCAqLwoKdW5zaWduZWQgc2hvcnQgdHlwZV9vZl9kZXZpY2U7CgovKiBNdWx0
aXBsZSBjYXJkIHN1cHBvcnQgKi8KI2RlZmluZSBIUlRfTUFYX0RFVlMgMgpzdGF0aWMgc3RydWN0
IGhydCBocnRkZXZzW0hSVF9NQVhfREVWU107CnN0YXRpYyBpbnQgbnVtX2hydGRldnMgPSAwOwoK
LyogRmxhZyB0byB0ZWxsIHdoZXRoZXIgdGhlIGtlcm5lbCB0aW1lciBpcyBydW5uaW5nICovCnZv
bGF0aWxlIHN0YXRpYyBpbnQgdGltZXJfcnVubmluZyA9IDA7CgovKiBUaGUga2VybmVsIHRpbWVy
ICovCnN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKCiNpZmRlZiBIQVZFX1Y0TDIKLyog
TWlub3IgbnVtYmVyLCBvciAtMSBmb3IgZmlyc3QgZnJlZSAqLwpzdGF0aWMgaW50IHZpZGVvX21p
bm9yID0gLTE7CgovKiBEb24ndCBwdXQgVjRMMl9DQVBfU1RSRUFNSU5HIGluIGNhcGFiaWxpdGll
czsgcmVjb21tZW5kZWQgZm9yIHhhd3R2ICovCnN0YXRpYyBpbnQgZGlzYWJsZV9zdHJlYW1pbmcg
PSAwOwoKLyogT25seSBvbmUgdXNlciBjYW4gb3BlbiAvZGV2L3ZpZGVvTiBhdCBhdCB0aW1lICov
CnN0YXRpYyB1bnNpZ25lZCBpbnQgZXhjbHVzaXZlID0gMDsKI2VuZGlmCgovKiBEZWJ1Z2dpbmcg
b3V0cHV0ICovCnN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWcgPSAxOwoKLyogTWFqb3IgbnVtYmVy
IGZvciBocnRtZW0gZGV2aWNlICovCnN0YXRpYyB1bnNpZ25lZCBpbnQgaHJ0bWVtX21ham9yID0g
MDsKCi8qIERpc2FibGUgdGhlIGhydG1lbSBkZXZpY2UgKi8Kc3RhdGljIHVuc2lnbmVkIGludCBk
aXNhYmxlX2hydG1lbSA9IDA7CgpNT0RVTEVfUEFSTShkZWJ1ZywgImkiKTsKTU9EVUxFX1BBUk1f
REVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7Ck1PRFVMRV9QQVJNKGhydG1l
bV9tYWpvciwgImkiKTsKTU9EVUxFX1BBUk1fREVTQyhocnRtZW1fbWFqb3IsCgkJICJNYWpvciBu
dW1iZXIgZm9yIGhydG1lbSBkZXZpY2UgKGRlZmF1bHQ6IGR5bmFtaWMpIik7Ck1PRFVMRV9QQVJN
KGRpc2FibGVfaHJ0bWVtLCAiaSIpOwpNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHJ0bWVtLCAi
RGlzYWJsZSBocnRtZW0gZGV2aWNlIChkZWZhdWx0OiBvZmYpIik7CgojaWZkZWYgSEFWRV9WNEwy
Ck1PRFVMRV9QQVJNKHZpZGVvX21pbm9yLCAiaSIpOwpNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX21p
bm9yLCAiRGV2aWNlJ3MgbWlub3IgbnVtYmVyIChkZWZhdWx0OiBkeW5hbWljKSIpOwpNT0RVTEVf
UEFSTShleGNsdXNpdmUsICJpIik7Ck1PRFVMRV9QQVJNX0RFU0MoZXhjbHVzaXZlLAoJCSAiT25s
eSBvbmUgcHJvY2VzcyBjYW4gb3BlbiB0aGUgZGV2aWNlIChkZWZhdWx0OiBvZmYpIik7Ck1PRFVM
RV9QQVJNKGRpc2FibGVfc3RyZWFtaW5nLCAiaSIpOwpNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVf
c3RyZWFtaW5nLCAiRG9uJ3QgcmV0dXJuIFY0TDJfQ0FQX1NUUkVBTUlORzsgcmVjb21tZW5kZWQg
Zm9yIHhhd3R2IChkZWZhdWx0OiBvZmYpIik7CiNlbmRpZgoKTU9EVUxFX0FVVEhPUigiQnJldHQg
Vy4gVGhvbXBzb24sIEdpbGJlcnRvIE1vcmVqb24sIFZlZW5hIEFkaXR5YW4sIEFydGhpIEdva2Fy
biwgQWxleCBSdWRuaWNrIik7Ck1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBIUlQgUGl4
ZWxzbWFydCA1MTItOC1QQ0kiKTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKLyppbnRlcnVwdCBo
YW5kbGVyIGZ1bmN0aW9uICovCnZvaWQgZnJhbWVfaW50ZXJydXB0KGludCAsIHZvaWQgKiwgc3Ry
dWN0IHB0X3JlZ3MgKik7Ci8qKgogKiBkcHJpbnRrLCBocnRfcHJpbnRrIC0gdGhpbiB3cmFwcGVy
cyBhcm91bmQgcHJpbnRrKCkKICovCiNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGRl
YnVnKSBcCglwcmludGsoImhydDogIiBmbXQsICMjIGFyZykKI2RlZmluZSBocnRfcHJpbnRrKGZt
dCwgYXJnLi4uKQlwcmludGsoImhydDogIiBmbXQsICMjIGFyZykKCi8qIFByb3RvdHlwZXMgKi8K
dm9pZCBpbmxpbmUgZ3JhYl9maWVsZChzdHJ1Y3QgaHJ0ICpocnRkZXYsIHVuc2lnbmVkIGNoYXIg
KmZyYW1lZGF0YSwgaW50IHBhcml0eSk7Ci8qZm9yIHRoZSBjb2xvciBkZXZpY2UgKi8Kdm9pZCBp
bmxpbmUgY2dyYWJfZmllbGQoc3RydWN0IGhydCAqaHJ0ZGV2LCB1bnNpZ25lZCBjaGFyICpmcmFt
ZWRhdGEsIGludCBwYXJpdHkpOwoKCnZvaWQgdGltZXJfZnVuYyh1bnNpZ25lZCBsb25nIHB0cik7
CmludCBpMmNfc2V0X3JlZyhzdHJ1Y3QgaHJ0ICpocnRkZXYsIGludCByZWcsIHVuc2lnbmVkIGNo
YXIgdmFsKTsKc3RydWN0IGhydF9wZXJfZmlsZSAqcGVyX2ZpbGVfaW5pdChzdHJ1Y3QgaHJ0ICpo
cnRkZXYpOwoKLyogRHIuIEJha2VyJ3MgSTJDIHByb3RvdHlwZXMgKi8Kc3RhdGljIGludCBpMmNf
aW5pdChzdHJ1Y3QgaHJ0ICpocnRkZXYsIHVuc2lnbmVkIGxvbmcgYWRkciwKCQkgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqaW5pdF9yZWdzKTsKCiNpZmRlZiBIQVZFX1Y0TDIKCi8qIFByb3RvdHlw
ZXMgZm9yIGZpbGVfb3BlcmF0aW9ucyAqLwpzdGF0aWMgaW50IGhydF9vcGVuKHN0cnVjdCBpbm9k
ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKc3RhdGljIGludCBocnRfcmVsZWFzZShzdHJ1
Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CnN0YXRpYyBpbnQgaHJ0X2lvY3Rs
KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoJCSAgICAgdW5zaWduZWQg
aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpzdGF0aWMgdW5zaWduZWQgaW50IGhydF9wb2xs
KHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCk7CiNlbmRpZgoKLyogaHJ0X3Jl
YWQgaXMgdXNlZCBmb3IgYm90aCBkZXZpY2VzICovCnN0YXRpYyBpbnQgaHJ0X3JlYWQoc3RydWN0
IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAoJCSAgICBsb2ZmX3QgKiBwcG9z
KTsKCi8qIFByb3RvdHlwZXMgZm9yIGRpcmVjdCBtbWFwIGRldmljZSAqLwpzdGF0aWMgaW50IGhy
dF9kaXJlY3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CnN0
YXRpYyBpbnQgaHJ0X2RpcmVjdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCgkJCSAgICAg
IHN0cnVjdCBmaWxlICpmaWxlKTsKc3RhdGljIGludCBocnRfZGlyZWN0X21tYXAoc3RydWN0IGZp
bGUgKmZpbGUsCgkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKc3RhdGljIGludCBo
cnRfZGlyZWN0X2RvX2lvY3RsKHN0cnVjdCBocnQgKmhydGRldiwgdW5zaWduZWQgaW50IGNtZCwK
CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKc3RhdGljIGludCBocnRfZGlyZWN0X2lvY3Rs
KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoJCQkgICAgdW5zaWduZWQg
aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwoKLyoqCiAqIGhydF9kaXJlY3RfZm9wcyAtIFRo
aXMgaXMgdGhlIGZvcHMgZm9yIHRoZSBkZXZpY2UgdGhhdCBtbWFwJ3MgdGhlIGRldmljZQogKiAg
bWVtb3J5IGRpcmVjdGx5ICh0aGUgaHJ0bWVtIGRldmljZSkKICovCnN0YXRpYyBzdHJ1Y3QgZmls
ZV9vcGVyYXRpb25zIGhydF9kaXJlY3RfZm9wcyA9IHsKICAgICAgLm1tYXAgPSBocnRfZGlyZWN0
X21tYXAsCiAgICAgIC5vcGVuID0gaHJ0X2RpcmVjdF9vcGVuLAogICAgICAucmVsZWFzZSA9IGhy
dF9kaXJlY3RfcmVsZWFzZSwKICAgICAgLmlvY3RsID0gaHJ0X2RpcmVjdF9pb2N0bCwKICAgICAg
LnJlYWQgPSBocnRfcmVhZCwKfTsKCi8qKgogKiBocnRfZm9wcyAtIGZvcHMgZm9yIC9kZXYvdmlk
ZW9OCiAqLwojaWZkZWYgSEFWRV9WNEwyCnN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhy
dF9mb3BzID0gewoJLm93bmVyID0gVEhJU19NT0RVTEUsCgkub3BlbiA9IGhydF9vcGVuLAoJLnJl
bGVhc2UgPSBocnRfcmVsZWFzZSwKCS5pb2N0bCA9IGhydF9pb2N0bCwKCS5yZWFkID0gaHJ0X3Jl
YWQsCgkubGxzZWVrID0gbm9fbGxzZWVrLAoJLnBvbGwgPSBocnRfcG9sbCwKfTsKCi8qIFhYWDog
R2V0IGFuIGFjdHVhbCBvZmZpY2lhbCBudW1iZXIgZnJvbSBrcmF4ZWxAYnl0ZXNleC5vcmcgCiAg
ICAgICAgKHNlZSAvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgpICovCiNk
ZWZpbmUgVklEX0hBUkRXQVJFX0hSVCAzNgoKc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugdmlk
ZW9kZXZfdGVtcGxhdGUgPSB7Cgkub3duZXIgPSBUSElTX01PRFVMRSwKCS5uYW1lID0gIkhSVCBQ
aXhlbHNtYXJ0IChQUzUxMi04LVBDSSkiLAoJLnR5cGUgPSBIUlRfVklEX1RZUEUsCgkuaGFyZHdh
cmUgPSBWSURfSEFSRFdBUkVfSFJULAoJLmZvcHMgPSAmaHJ0X2ZvcHMsCn07CgovKioKICogUXVl
dWUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAoYmFzaWNhbGx5IHdyYXBwZXJzIGZvciB0aGUgTGlu
dXgKICogbGlua2VkIGxpc3QgZnVuY3Rpb25zKQogKi8Kdm9pZCBxdWV1ZV9hZGRfdGFpbChzdHJ1
Y3Qgc3RyZWFtX2J1ZmZlciAqc3RyZWFtYnVmLAoJCSAgICBzdHJ1Y3Qgc3RyZWFtX2J1ZmZlcl9x
dWV1ZSAqcSkKewoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglpZiAoc3RyZWFtYnVmID09IE5VTEwg
fHwgcSA9PSBOVUxMKSByZXR1cm47CgoJd3JpdGVfbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFn
cyk7CglsaXN0X2FkZF90YWlsKCZzdHJlYW1idWYtPm5vZGUsICZxLT5oZWFkKTsKCXEtPmxlbmd0
aCsrOwoJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKfQoKdm9pZCBx
dWV1ZV9kZWwoc3RydWN0IHN0cmVhbV9idWZmZXIgKnN0cmVhbWJ1ZiwKCSAgICAgICBzdHJ1Y3Qg
c3RyZWFtX2J1ZmZlcl9xdWV1ZSAqcSkKewoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglpZiAocSA9
PSBOVUxMKSByZXR1cm47CgoJd3JpdGVfbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Cgls
aXN0X2RlbCgmc3RyZWFtYnVmLT5ub2RlKTsKCXEtPmxlbmd0aC0tOwoJd3JpdGVfdW5sb2NrX2ly
cXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKfQoKc3RydWN0IHN0cmVhbV9idWZmZXIgKnF1ZXVl
X3BlZWtfaGVhZChzdHJ1Y3Qgc3RyZWFtX2J1ZmZlcl9xdWV1ZSAqcSkKewoJdW5zaWduZWQgbG9u
ZyBmbGFnczsKCXN0cnVjdCBzdHJlYW1fYnVmZmVyICpzdHJlYW1idWY7CgoJaWYgKHEgPT0gTlVM
TCkgcmV0dXJuIE5VTEw7CgoJcmVhZF9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKCXN0
cmVhbWJ1ZiA9IGxpc3RfZW50cnkocS0+aGVhZC5uZXh0LCBzdHJ1Y3Qgc3RyZWFtX2J1ZmZlciwg
bm9kZSk7CglyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CgoJcmV0dXJu
IHN0cmVhbWJ1ZjsKfQoKc3RydWN0IHN0cmVhbV9idWZmZXIgKnF1ZXVlX2RlbF9oZWFkKHN0cnVj
dCBzdHJlYW1fYnVmZmVyX3F1ZXVlICpxKQp7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJc3RydWN0
IHN0cmVhbV9idWZmZXIgKnN0cmVhbWJ1ZjsKCglpZiAocSA9PSBOVUxMKSByZXR1cm4gTlVMTDsK
CWlmICghcS0+bGVuZ3RoKSByZXR1cm4gTlVMTDsKCglyZWFkX2xvY2tfaXJxc2F2ZSgmcS0+bG9j
aywgZmxhZ3MpOwoJc3RyZWFtYnVmID0gbGlzdF9lbnRyeShxLT5oZWFkLm5leHQsIHN0cnVjdCBz
dHJlYW1fYnVmZmVyLCBub2RlKTsKCWxpc3RfZGVsKCZzdHJlYW1idWYtPm5vZGUpOwoJcS0+bGVu
Z3RoLS07CglyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CglyZXR1cm4g
c3RyZWFtYnVmOwp9CiNlbmRpZgoKLyoqCiAqIGhydF9wcm9iZSAtIGNoZWNrIHRoYXQgd2UgaGF2
ZSBhIGRldmljZSBhcyB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCiAqIEFzc3VtZSB0aGUgbWVtb3J5
IHJlZ2lvbiBpcyBhbHJlYWR5IG1hcHBlZC4KICogVGhlIGFkZHJlc3MgaGFzIHRvIGJlIGEgdmly
dHVhbCBhZGRyZXNzIG1hcHBlZCB0byB0aGUgZGV2aWNlIEkvTyBzcGFjZS4KICovCmludCBocnRf
cHJvYmUodW5zaWduZWQgbG9uZyBhZGRyKQp7Cgl1bnNpZ25lZCBjaGFyIG9sZHZhbDEsIG9sZHZh
bDIsIG9sZHZhbDMsIG5ld3ZhbDI7Cgl1bnNpZ25lZCBpbnQgb2xkYWRkcjsKCgkvKiBzYXZlIHRo
ZSBvbGQgdmFsdWVzIGF0IHRoZSBhZGRyZXNzICovCglvbGR2YWwxID0gcmVhZGIoSFJUX0NPTlRS
T0xfUkVHICsgYWRkcik7CglybWIoKTsKCW9sZGFkZHIgPSByZWFkdyhIUlRfWV9MT1dfUkVHICsg
YWRkcik7CglybWIoKTsKCQoJLyogZnJlZXplIHRoZSBmcmFtZSBncmFiYmluZywgaW1tZWRpYXRl
bHkgKi8KCXdyaXRlYigweDVCLCBIUlRfQ09OVFJPTF9SRUcgKyBhZGRyKTsKCXdtYigpOwogICAg
ICAgICAgICAgICAgCgkvKiB3cml0ZSBhIG5ldyB2YWx1ZSB0byB0aGUgZmlyc3QgYnl0ZSBpbiB0
aGUgZmlyc3QgcmFzdGVyL3JvdyAqLwoJd3JpdGV3KDAsIEhSVF9ZX0xPV19SRUcgKyBhZGRyKTsK
CXdtYigpOwoJb2xkdmFsMiA9IHJlYWRiKGFkZHIpOwoJcm1iKCk7Cgl3cml0ZWIofm9sZHZhbDIs
IGFkZHIpOwoJd21iKCk7CgkKCS8qIHdyaXRlIG9sZHZhbDIgdG8gdGhlIGZpcnN0IGJ5dGUgb2Yg
dGhlIG5leHQgcmFzdGVyL3JvdyAqLwoJd3JpdGV3KDEsIEhSVF9ZX0xPV19SRUcgKyBhZGRyKTsK
CXdtYigpOwoJb2xkdmFsMyA9IHJlYWRiKGFkZHIpOwoJcm1iKCk7Cgl3cml0ZWIob2xkdmFsMiwg
YWRkcik7Cgl3bWIoKTsKCQoJLyogcmVhZCB0aGUgdmFsdWUgYXQgdGhlIHByZXZpb3VzIHJhc3Rl
ci9yb3cgKi8KCXdyaXRldygwLCBIUlRfWV9MT1dfUkVHICsgYWRkcik7Cgl3bWIoKTsKCW5ld3Zh
bDIgPSByZWFkYihhZGRyKTsKCXJtYigpOwoJCgkvKiByZXN0b3JlIHRoZSBvbGQgdmFsdWVzICov
Cgl3cml0ZWIob2xkdmFsMiwgYWRkcik7Cgl3bWIoKTsKCXdyaXRldygxLCBIUlRfWV9MT1dfUkVH
ICsgYWRkcik7Cgl3bWIoKTsKCXdyaXRlYihvbGR2YWwzLCBhZGRyKTsKCXdtYigpOwoJd3JpdGVi
KG9sZGFkZHIsIEhSVF9ZX0xPV19SRUcgKyBhZGRyKTsKCXdtYigpOwoJd3JpdGViKG9sZHZhbDEs
IEhSVF9DT05UUk9MX1JFRyArIGFkZHIpOwoJd21iKCk7CgkKCXJldHVybiAobmV3dmFsMiA9PSAo
dW5zaWduZWQgY2hhcil+b2xkdmFsMik7Cn0KCi8qKgogKiBocnRfdHJ5X2FkZHJlc3MgLSByZXR1
cm4gMSBpZiB0aGVyZSBpcyBhIGRldmljZQogKiBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3M7IGVs
c2UgcmV0dXJuIDA7CiAqIElmIHRoZXJlIGlzIGEgZGV2aWNlLCBtYXAgdGhlIGRldmljZSBtZW1v
cnkgaW50byB0aGUga2VybmVsCiAqIHZpcnR1YWwgbWVtb3J5IHNwYWNlLgogKi8KCi8qKgogKiBo
cnRfdHJ5X2FkZHJlc3MgLSByZXR1cm4gMCBpZiB0aGVyZSBpcyBhIGRldmljZQogKiAgYXQgdGhl
IHNwZWNpZmllZCBhZGRyZXNzOyBlbHNlIHJldHVybiBhbiBlcnJvciBjb2RlLgogKiAgSWYgdGhl
cmUgaXMgYSBkZXZpY2UsIG1hcCB0aGUgZGV2aWNlIG1lbW9yeSBpbnRvIHRoZSBrZXJuZWwKICog
IHZpcnR1YWwgbWVtb3J5IHNwYWNlLgogKi8KaW50IGhydF90cnlfYWRkcmVzcyhzdHJ1Y3QgaHJ0
ICpocnRkZXYsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykgewoJdW5zaWduZWQgbG9uZyB2aXJ0dWFs
X2FkZHI7CglpbnQgcmVzdWx0OwoKCWRwcmludGsoImhydF90cnlfYWRkcmVzczogMHglbHhcbiIs
IGFkZHJlc3MpOwoKCS8qIFJlc2VydmUgb3VyIG1lbW9yeSByYW5nZSAqLwoJaWYgKCFyZXF1ZXN0
X21lbV9yZWdpb24oYWRkcmVzcywgQllURVNfTkVFREVELCAiaHJ0IikpIHsKCQlocnRfcHJpbnRr
KCJJL08gbWVtb3J5IGFscmVhZHkgaW4gdXNlXG4iKTsKCQlyZXR1cm4gLUVCVVNZOwoJfQoJdmly
dHVhbF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShhZGRyZXNzLCBCWVRF
U19ORUVERUQpOwoKCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgcmVhbGx5IGEgZGV2aWNlIGF0IHRo
aXMgYWRkcmVzcyAqLwoJaWYgKGhydF9wcm9iZSh2aXJ0dWFsX2FkZHIpKSB7CgkJaHJ0ZGV2LT5w
aHlzYWRkciA9IGFkZHJlc3M7CgkJaHJ0ZGV2LT52aXJ0YWRkciA9IHZpcnR1YWxfYWRkcjsKCQlt
eV92aXJ0dWFsX2FkZHJlc3MgPSB2aXJ0dWFsX2FkZHI7CgkKCQkvKiBUcnkgdG8gaW5pdGlhbGl6
ZSB0aGUgQS9EIGNvbnZlcnRlciAqLwoJCXJlc3VsdCA9IGkyY19pbml0KGhydGRldixocnRkZXYt
PnZpcnRhZGRyLHNhYTcxMTBfZGVmYXVsdF9pbml0X3JlZ3MpOyAKCQkvKiBtYWRlIGEgY2hhbmdl
IGkgdGhlIHVwcGVyIGxpbmUgKioqKioqIGluaXRfaHJ0X2kyYyhocnRkZXYpKi8KCQkKCQlpZiAo
cmVzdWx0IDwgMCkKCQkgIGdvdG8gZmFpbHVyZTsKCQllbHNlCgkJICByZXR1cm4gcmVzdWx0OwoJ
fSBlbHNlIHsKCSAgZ290byBmYWlsdXJlOwoJfQoJCiBmYWlsdXJlOgoJLyogUmVsZWFzZSBtZW1v
cnkgYW5kIHVubWFwICovCglpb3VubWFwKCh2b2lkICopdmlydHVhbF9hZGRyKTsKCXJlbGVhc2Vf
bWVtX3JlZ2lvbihhZGRyZXNzLCBCWVRFU19ORUVERUQpOwoJcmV0dXJuIC1FTk9ERVY7CiAKfQoK
Ci8qKgogKiBrdmlydF90b19wYSAtIGNvbnZlcnRzIGFuIGFkZHJlc3MgZnJvbSB2bWFsbG9jKCkg
dG8gYSBzdHJ1Y3QgcGFnZQogKiBGcm9tIHY0bDJjYXAuYy4KICovCgojaWZkZWYgSEFWRV9WNEwy
CnN0cnVjdCBwYWdlICprdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikKewogICAgICAgIHN0
cnVjdCBwYWdlICpyZXQgPSBOVUxMOwogICAgICAgIHBtZF90ICpwbWQ7CiAgICAgICAgcHRlX3Qg
KnB0ZTsKICAgICAgICBwZ2RfdCAqcGdkOwoKICAgICAgICBwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRy
KTsKICAgICAgICBpZiAoIXBnZF9ub25lKCpwZ2QpKSB7CiAgICAgICAgICAgICAgICBwbWQgPSBw
bWRfb2Zmc2V0KHBnZCwgYWRyKTsKICAgICAgICAgICAgICAgIGlmICghcG1kX25vbmUoKnBtZCkp
IHsKI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAgICAg
ICAgICAgICAgICAgICAgICAgIHB0ZSA9IHB0ZV9vZmZzZXQocG1kLCBhZHIpOwojZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICBwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkcik7CiNl
bmRpZgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRlX3ByZXNlbnQoKnB0ZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBwdGVfcGFnZSgqcHRlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
cmV0dXJuIHJldDsKfQoKLyoqCiAqIHY0bDFfaW9jdGxzIC0gdXNlZCBmb3IgcHJpbnRpbmcgb3V0
IGlvY3RsIGNvZGVzIGluIGhydF9kb19pb2N0bAogKi8Kc3RhdGljIGNvbnN0IGNoYXIgKnY0bDFf
aW9jdGxzW10gPSB7CgkiPyIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJT
VFVORVIiLCAiR1BJQ1QiLAoJIlNQSUNUIiwgIkNDQVBUVVJFIiwgIkdXSU4iLCAiU1dJTiIsICJH
RkJVRiIsICJTRkJVRiIsICJLRVkiLCAiR0ZSRVEiLAoJIlNGUkVRIiwgIkdBVURJTyIsICJTQVVE
SU8iLCAiU1lOQyIsICJNQ0FQVFVSRSIsICJHTUJVRiIsICJHVU5JVCIsCgkiR0NBUFRVUkUiLCAi
U0NBUFRVUkUiLCAiU1BMQVlNT0RFIiwgIlNXUklURU1PREUiLCAiR1BMQVlJTkZPIiwKCSJTTUlD
Uk9DT0RFIiwgIkdWQklGTVQiLCAiU1ZCSUZNVCIKfTsKCi8qKgogKiBocnRfZG9faW9jdGwgLSBo
YW5kbGVzIGlvY3RsJ3Mgb24gL2Rldi92aWRlb04KICovCnN0YXRpYyBpbnQgaHJ0X2RvX2lvY3Rs
KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAoJCQl1bnNpZ25lZCBpbnQg
Y21kLCB2b2lkICphcmcpCnsKCXN0cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlID0gZmlsZS0+
cHJpdmF0ZV9kYXRhOwoJc3RydWN0IGhydCAqaHJ0ZGV2ID0gcGVyX2ZpbGUtPmhydGRldjsKCWhy
dGRldi0+d2luID0gJnBlcl9maWxlLT53aW47CgoJLyogVGhpcyBuaWNlIGNvZGUgY29waWVkIGZy
b20geGF3dHYncyBsaWJuZy4KCSAgIEl0IHByaW50cyBvdXQgdGhlIGlvY3RsJ3MgdGhhdCBhcmUg
ZG9uZS4KCSAqLwoJc3dpdGNoIChfSU9DX1RZUEUoY21kKSkgewoJY2FzZSAndic6CgkJZHByaW50
aygiaW9jdGwgMHgleCAodjRsMSwgVklESU9DJXMpXG4iLAoJCQljbWQsIChfSU9DX05SKGNtZCkg
PCBBUlJBWV9TSVpFKHY0bDFfaW9jdGxzKSkgPwoJCQl2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCld
IDogIj8/PyIpOwoJCWJyZWFrOwoJY2FzZSAnVic6CgkJZHByaW50aygiaW9jdGwgMHgleCAodjRs
MiwgJXMpXG4iLAoJCQljbWQsIHY0bDJfaW9jdGxfbmFtZXNbX0lPQ19OUihjbWQpXSk7CgkJYnJl
YWs7CglkZWZhdWx0OgoJCWRwcmludGsoImlvY3RsIDB4JXggKD8pXG4iLCBjbWQpOwoJfQoKCXN3
aXRjaCAoY21kKSB7CgkgIC8qTm9uIFN0cmVhbWluZyBJT0NUTCdzICovCgljYXNlIFZJRElPQ19R
VUVSWUNBUDogewoJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmIgPQoJCQkoc3RydWN0IHY0bDJf
Y2FwYWJpbGl0eSAqKSBhcmc7CgkJCgkJc3RyY3B5KGItPmRyaXZlciwgImhydCIpOwoJCXN0cm5j
cHkoYi0+Y2FyZCwgIlBTIDUxMi04LVBDSSIsIHNpemVvZihiLT5jYXJkKSk7CgkJc3ByaW50Zihi
LT5idXNfaW5mbywiUENJOiVzIiwgaHJ0ZGV2LT5wY2lkZXYtPnNsb3RfbmFtZSk7CgkJYi0+dmVy
c2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpOwoKCQlpZiAoZGlzYWJsZV9zdHJlYW1pbmcp
IHsKCQkJYi0+Y2FwYWJpbGl0aWVzID0KCQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwy
X0NBUF9SRUFEV1JJVEU7CgkJfSBlbHNlIHsKCQkJYi0+Y2FwYWJpbGl0aWVzID0KCQkJCVY0TDJf
Q0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEUgfAoJCQkJVjRMMl9DQVBfU1RS
RUFNSU5HOwoJCX0KCQlyZXR1cm4gMDsKCX0KCWNhc2UgVklESU9DX0VOVU1fRk1UOiB7CgkJc3Ry
dWN0IHY0bDJfZm10ZGVzYyAqZiA9IGFyZzsKCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGYt
PnR5cGU7CgkJaW50IGluZGV4ID0gZi0+aW5kZXg7CgkJCgkJLyogVGhlcmUncyBvbmx5IG9uZSBm
b3JtYXQgKi8KCQlpZiAoaW5kZXggPiAwKQoJCQlyZXR1cm4gLUVJTlZBTDsKCQkKCQlpZiAodHlw
ZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKCQkJbWVtc2V0KGYsIDAsIHNpemVv
ZigqZikpOwoJCQlmLT5pbmRleCA9IGluZGV4OwoJCQlmLT50eXBlID0gdHlwZTsKCQkJZi0+cGl4
ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKCQkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAi
R3JleSIpOwoJCQlyZXR1cm4gMDsKCQl9IGVsc2UgewoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9Cgl9
CgljYXNlIFZJRElPQ19UUllfRk1UOgoJY2FzZSBWSURJT0NfU19GTVQ6CgljYXNlIFZJRElPQ19H
X0ZNVDogewoJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKCgkJaWYgKGYtPnR5cGUgPT0g
VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CgkJCW1lbXNldCgmZi0+Zm10LnBpeCwgMCwK
CQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSk7CgkJCWYtPmZtdC5waXgu
d2lkdGggPSBocnRkZXYtPndpbi0+d2lkdGg7CgkJCWYtPmZtdC5waXguaGVpZ2h0ID0gaHJ0ZGV2
LT53aW4tPmhlaWdodDsKCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9H
UkVZOwoJCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGhydGRldi0+Ynl0ZXNwZXJsaW5lOwoJ
CQlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGhydGRldi0+ZnJhbWVzaXplOwoJCQlyZXR1cm4gMDsK
CQl9IGVsc2UgewoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9Cgl9CgljYXNlIFZJRElPQ19HX1NURDog
ewoJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKCgkJKmlkID0gVjRMMl9TVERfTlRTQzsKCQlyZXR1
cm4gMDsKCX0KCWNhc2UgVklESU9DX1NfU1REOiB7CgkJLyogVGhlcmUncyBvbmx5IG9uZSBzdGFu
ZGFyZCB0aGF0IHdlIHN1cHBvcnQsIE5UU0MgKi8KCQlyZXR1cm4gMDsKCX0KCWNhc2UgVklESU9D
X1FVRVJZQ1RSTDogewoJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyA9IGFyZzsKCQlpbnQgaTsK
CgkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHJ0X2N0bHMpOyBpKyspCgkJCWlmIChocnRf
Y3Rsc1tpXS5pZCA9PSBjLT5pZCkKCQkJCWJyZWFrOwoJCQoJCS8qIERpZG4ndCBmaW5kIHRoZSBp
ZCAqLwoJCWlmIChpID09IEFSUkFZX1NJWkUoaHJ0X2N0bHMpKSB7CgkJCXJldHVybiAtRUlOVkFM
OwoJCX0KCQkKCQkqYyA9IGhydF9jdGxzW2ldOwoJCXJldHVybiAwOwoJfQoJY2FzZSBWSURJT0Nf
R19DVFJMOiB7CgkJc3RydWN0IHY0bDJfY29udHJvbCAqYyA9IGFyZzsKCQlpbnQgaTsKCgkJZm9y
IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHJ0X2N0bHMpOyBpKyspCgkJCWlmIChocnRfY3Rsc1tp
XS5pZCA9PSBjLT5pZCkKCQkJCWJyZWFrOwoJCQoJCWlmIChpID09IHNpemVvZihocnRfY3Rscykp
CgkJCXJldHVybiAtRUlOVkFMOwoJCQoJCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9CUklHSFRORVNT
KSB7CgkJCWMtPnZhbHVlID0gaHJ0ZGV2LT5yZWd2YWxzW0hSVF9CUklHSFRORVNTX1JFR107CgkJ
fSBlbHNlIGlmIChjLT5pZCA9PSBWNEwyX0NJRF9DT05UUkFTVCkgewoJCQljLT52YWx1ZSA9IGhy
dGRldi0+cmVndmFsc1tIUlRfQ09OVFJBU1RfUkVHXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gLUVJ
TlZBTDsKCQl9CgkJCgkJcmV0dXJuIDA7Cgl9CgljYXNlIFZJRElPQ19TX0NUUkw6IHsKCQlzdHJ1
Y3QgdjRsMl9jb250cm9sICpjID0gYXJnOwoJCWludCBpOwoJCQoJCWZvciAoaSA9IDA7IGkgPCBz
aXplb2YoaHJ0X2N0bHMpOyBpKyspCgkJCWlmIChocnRfY3Rsc1tpXS5pZCA9PSBjLT5pZCkKCQkJ
CWJyZWFrOwoJCWlmIChpID09IHNpemVvZihocnRfY3RscykpCgkJCXJldHVybiAtRUlOVkFMOwoJ
CQoJCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9CUklHSFRORVNTKSB7CgkJCWlmIChjLT52YWx1ZSA+
IDI1NSkKCQkJCXJldHVybiAtRUlOVkFMOwoJCQljLT52YWx1ZSA9IGkyY19zZXRfcmVnKGhydGRl
diwgSFJUX0JSSUdIVE5FU1NfUkVHLAoJCQkJCSAgICAgICBjLT52YWx1ZSk7CgkJfSBlbHNlIGlm
IChjLT5pZCA9PSBWNEwyX0NJRF9DT05UUkFTVCkgewoJCQlpZiAoYy0+dmFsdWUgPiAyNTUpCgkJ
CQlyZXR1cm4gLUVJTlZBTDsKCQkJYy0+dmFsdWUgPSBpMmNfc2V0X3JlZyhocnRkZXYsIEhSVF9D
T05UUkFTVF9SRUcsCgkJCQkJICAgICAgIGMtPnZhbHVlKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4g
LUVJTlZBTDsKCQl9CgkJcmV0dXJuIDA7Cgl9CgljYXNlIFZJRElPQ19FTlVNSU5QVVQ6IHsKCQlz
dHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKCQl1bnNpZ25lZCBpbnQgbjsKCQkKCQkvKiBPbmx5
IG9uZSBpbnB1dCAqLwoJCWlmIChpLT5pbmRleCA+IDApCgkJCXJldHVybiAtRUlOVkFMOwoJCQoJ
CW4gPSBpLT5pbmRleDsKCQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7CgkJaS0+aW5kZXggPSBu
OwoJCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwoJCXNwcmludGYoaS0+bmFtZSwg
Ik5UU0MgQ2FtZXJhIik7CgkJCgkJcmV0dXJuIDA7Cgl9CgljYXNlIFZJRElPQ19FTlVNU1REOiB7
CgkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7CgkJc3RydWN0IHY0bDJfZnJhY3QgZnJh
Y3QgPSB7IDEwMDEsIDMwMDAwIH07CgkJdW5zaWduZWQgaW50IGluZGV4ID0gZS0+aW5kZXg7CgkJ
CgkJLyogT25lIHN0YW5kYXJkIChOVFNDKSAqLwoJCWlmIChpbmRleCA+IDApCgkJCXJldHVybiAt
RUlOVkFMOwoKCQllLT5pZCA9IFY0TDJfU1REX05UU0NfTTsKCQllLT5pbmRleCA9IGluZGV4OwoJ
CXN0cmNweShlLT5uYW1lLCAiTlRTQyIpOwoJCWUtPmZyYW1lcGVyaW9kID0gZnJhY3Q7CgkJZS0+
ZnJhbWVsaW5lcyA9IGhydGRldi0+d2luLT5oZWlnaHQ7CgkJCgkJcmV0dXJuIDA7Cgl9CgljYXNl
IFZJRElPQ19HX1BBUk06IHsKCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtID0gYXJnOwoJ
CXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7CgkJCgkJaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZf
VFlQRV9WSURFT19DQVBUVVJFKQoJCQlyZXR1cm4gLUVJTlZBTDsKCQltZW1zZXQocGFybSwgMCwg
c2l6ZW9mKCpwYXJtKSk7CgoJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCgmcywgVjRMMl9TVERf
TlRTQywKCQkJCQkgIk5UU0MiKTsKCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0g
cy5mcmFtZXBlcmlvZDsKCQlyZXR1cm4gMDsKCX0KCWNhc2UgVklESU9DX0dfSU5QVVQ6IHsKCQly
ZXR1cm4gMDsKCX0KCWNhc2UgVklESU9DX1NfSU5QVVQ6IHsKCQlyZXR1cm4gMDsKCX0KCWRlZmF1
bHQ6CgkJcmV0dXJuIC1FTk9JT0NUTENNRDsKCX0KfQoKLyoqCiAqIGhydF9pb2N0bCAtIGhhbmRs
ZXIgZm9yIGlvY3RsJ3Mgb24gL2Rldi92aWRlb04uIFRyaWVzIHRoZSBwcml2YXRlCiAqICBpb2N0
bCdzIGZpcnN0LCB2aWEgaHJ0X2RpcmVjdF9kb19pb2N0bCgpLgogKi8Kc3RhdGljIGludCBocnRf
aW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCgkJCSAgICB1bnNp
Z25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKewoJc3RydWN0IGhydF9wZXJfZmlsZSAq
cGVyX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CglzdHJ1Y3QgaHJ0ICpocnRkZXYgPSBwZXJf
ZmlsZS0+aHJ0ZGV2OwoJaW50IHJldDsKCWhydGRldi0+d2luID0gJnBlcl9maWxlLT53aW47CgoJ
ZHByaW50aygiaW9jdGwgYXJnID0gJWx4XG4iLCBhcmcpOwoKCWRvd24oJmhydGRldi0+c2VtKTsK
CglyZXQgPSBocnRfZGlyZWN0X2RvX2lvY3RsKGhydGRldiwgY21kLCBhcmcpOwoJaWYgKHJldCAh
PSAtRUlOVkFMKSB7CgkJZHByaW50aygiUmVsZWFzaW5nIHNlbVxuIik7CgkJdXAoJmhydGRldi0+
c2VtKTsKCQlyZXR1cm4gcmV0OwoJfQoJcmV0ID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUs
IGNtZCwgYXJnLCBocnRfZG9faW9jdGwpOwoJdXAoJmhydGRldi0+c2VtKTsKCXJldHVybiByZXQ7
Cn0KI2VuZGlmCgovKioKICogaHJ0X3JlYWQgLSBkZXBlbmRzIG9uIHRpbWVyX2Z1bmMgdG8gY2hh
bmdlIHRoZSBmaWVsZF9iaXQuCiAqICBSZWFkcyBhdCBtb3N0IGFib3V0IDIzIEZQUyBvbiB0aGlz
IDQwME1IeiBtYWNoaW5lIHdpdGhvdXQgZGlzcGxheWluZywKICogIGFuZCBpdCByZWFkcyBhdCBh
Ym91dCAxMyBGUFMgd2l0aCBkaXNwbGF5aW5nICh1c2luZyBocnRkZW1vKS4KICogIE5CIHRoYXQg
aHJ0X3JlYWQgaXMgdXNlZCBvbiBib3RoIGhydG1lbSBhbmQgL2Rldi92aWRlb04uCiAqLwpzdGF0
aWMgaW50IGhydF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsCgkJICAgIHNpemVf
dCBjb3VudCwgbG9mZl90ICpwcG9zKQp7CglzdHJ1Y3QgaHJ0X3Blcl9maWxlICpwZXJfZmlsZSA9
IGZpbGUtPnByaXZhdGVfZGF0YTsKCXN0cnVjdCBocnQgKmhydGRldiA9IHBlcl9maWxlLT5ocnRk
ZXY7CglpbnQgbGVuOwoJaW50IG9sZF9maWVsZDsKICAgICAgICAKCWhydGRldi0+d2luID0gJnBl
cl9maWxlLT53aW47CglsZW4gPSBtaW4oKHNpemVfdCkgKGhydGRldi0+d2luLT5oZWlnaHQgKiBo
cnRkZXYtPmJ5dGVzcGVybGluZSksIGNvdW50KTsKCWRvd25faW50ZXJydXB0aWJsZSgmaHJ0ZGV2
LT5zZW0pOwoJb2xkX2ZpZWxkID0gaHJ0ZGV2LT5maWVsZF9iaXQ7CiAgICAgICAgCglpZih0eXBl
X29mX2RldmljZSA9PSAgSFJUX0RFVklDRV9JRF9DT0xPUiApCgkgIHsgCgkgICAgd3JpdGViKEhS
VF9GUkVFWkVfTkVYVF9DTUQsIGhydGRldi0+dmlydGFkZHIgKyBIUlRfQ09OVFJPTF9SRUcpOwoJ
ICAgIC8qIEdyYWIgYSBmaWVsZCAqLwoJICAgIGNncmFiX2ZpZWxkKGhydGRldiwgaHJ0ZGV2LT5m
cmFtZWRhdGEsIG9sZF9maWVsZCk7CiAgICAgICAgICB9CgllbHNlCiAgICAgICAgICBncmFiX2Zp
ZWxkKGhydGRldiwgaHJ0ZGV2LT5mcmFtZWRhdGEsIG9sZF9maWVsZCk7CiAgICAgICAgCgkKCS8q
IEdvIHRvIHNsZWVwIHVudGlsIHRoZSBmaWVsZCBiaXQgY2hhbmdlcyAqLwoJd2hpbGUgKG9sZF9m
aWVsZCA9PSBocnRkZXYtPmZpZWxkX2JpdCkgewoJCXVwKCZocnRkZXYtPnNlbSk7CgkJaWYgKGZp
bGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQoJCQlyZXR1cm4gLUVBR0FJTjsKCgkJaWYgKHdhaXRf
ZXZlbnRfaW50ZXJydXB0aWJsZQoJCSAgICAoaHJ0ZGV2LT53YWl0cXVldWUsIChvbGRfZmllbGQg
IT0gaHJ0ZGV2LT5maWVsZF9iaXQpKSkKCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKCgkJaWYgKGRv
d25faW50ZXJydXB0aWJsZSgmaHJ0ZGV2LT5zZW0pKQoJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwoJ
fQoJLyogR3JhYiB0aGUgb3RoZXIgZmllbGQgKi8KCQkKCWlmKHR5cGVfb2ZfZGV2aWNlID09ICBI
UlRfREVWSUNFX0lEX0NPTE9SICkKCSAgewoJICAgIGNncmFiX2ZpZWxkKGhydGRldiwgaHJ0ZGV2
LT5mcmFtZWRhdGEsIGhydGRldi0+ZmllbGRfYml0KTsKCSAgICB3cml0ZWIoSFJUX0xJVkVfQ01E
LCBocnRkZXYtPnZpcnRhZGRyICsgSFJUX0NPTlRST0xfUkVHKTsKCSAgfSAgCiAgICAgICAgZWxz
ZQoJICBncmFiX2ZpZWxkKGhydGRldiwgaHJ0ZGV2LT5mcmFtZWRhdGEsIGhydGRldi0+ZmllbGRf
Yml0KTsKICAgICAgICAKCglpZiAoY29weV90b191c2VyKGJ1ZiwgaHJ0ZGV2LT5mcmFtZWRhdGEs
IGxlbikpIHsKCSAgdXAoJmhydGRldi0+c2VtKTsKCSAgcmV0dXJuIC1FRkFVTFQ7Cgl9Cgl1cCgm
aHJ0ZGV2LT5zZW0pOwoJCiAgICAgICAgCglyZXR1cm4gbGVuOwp9CgojaWZkZWYgSEFWRV9WNEwy
Ci8qKgogKiBzdHJlYW1pbmdfZmllbGRjaGFuZ2UgLSBpZiBzdHJlYW1pbmcgaXMgb24sIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkCiAqICBmcm9tIHRpbWVyX2Z1bmMgd2hlbiB0aGUgZmllbGRfYml0
IGNoYW5nZXMKICovCnN0YXRpYyBpbmxpbmUgdm9pZCBzdHJlYW1pbmdfZmllbGRjaGFuZ2Uoc3Ry
dWN0IGhydCAqaHJ0ZGV2KQp7CglzdHJ1Y3Qgc3RyZWFtX2J1ZmZlciAqc3RyZWFtYnVmOwoKCS8q
IENhcHR1cmUgbGlzdCBpcyBlbXB0eSAqLwoJaWYgKCFocnRkZXYtPmNhcHR1cmVfbGlzdC5sZW5n
dGgpIHsKCQlyZXR1cm47Cgl9CgoJc3RyZWFtYnVmID0gcXVldWVfcGVla19oZWFkKCZocnRkZXYt
PmNhcHR1cmVfbGlzdCk7CgkKCS8qIFNhbml0eSBjaGVja3MtIGRvbid0IHdhbnQgdG8gZG8gYW55
dGhpbmcgYmFkCgkgICBpbiBpbnRlcnJ1cHQgbW9kZSAqLwoJaWYgKHN0cmVhbWJ1ZiA9PSBOVUxM
KSB7CgkJaHJ0X3ByaW50aygic3RyZWFtYnVmIGlzIE5VTEwhXG4iKTsKCQlyZXR1cm47Cgl9Cglp
ZiAoc3RyZWFtYnVmLT52YWRkcmVzcyA9PSBOVUxMKSB7CgkJaHJ0X3ByaW50aygidmFkZHJlc3Mg
aXMgTlVMTCFcbiIpOwoJCXJldHVybjsKCX0KCWlmIChocnRkZXYtPmZyYW1lZGF0YSA9PSBOVUxM
KSB7CgkJaHJ0X3ByaW50aygiZnJhbWVkYXRhIGlzIE5VTEwhXG4iKTsKCQlyZXR1cm47Cgl9CgoJ
Z3JhYl9maWVsZChocnRkZXZzLCBzdHJlYW1idWYtPnZhZGRyZXNzLAoJCSAgICFocnRkZXYtPmZp
ZWxkX2JpdCk7CglzdHJlYW1idWYtPmZpZWxkc19ncmFiYmVkIHw9ICghaHJ0ZGV2LT5maWVsZF9i
aXQpICsgMTsKCQoJLyogV2UgaGF2ZSBhIGNvbXBsZXRlIGZyYW1lICovCglpZiAoc3RyZWFtYnVm
LT5maWVsZHNfZ3JhYmJlZCA9PSAzKSB7CgkJc3RyZWFtYnVmLT5maWVsZHNfZ3JhYmJlZCA9IDA7
CgoJCXN0cmVhbWJ1Zi0+dmlkYnVmLmZsYWdzIHw9IAoJCQlWNEwyX0JVRl9GTEFHX0RPTkUgfAoJ
CQlWNEwyX0JVRl9GTEFHX0tFWUZSQU1FOwoJCgkJLyogTW92ZSB0aGUgYnVmZmVyIHRvIHRoZSBk
b25lIHF1ZXVlICovCgkJcXVldWVfZGVsKHN0cmVhbWJ1ZiwgJmhydGRldi0+Y2FwdHVyZV9saXN0
KTsKCQlxdWV1ZV9hZGRfdGFpbChzdHJlYW1idWYsICZocnRkZXYtPmRvbmVfbGlzdCk7CgoJCWhy
dGRldi0+ZmllbGRfYml0ID0gIWhydGRldi0+ZmllbGRfYml0OwoJCXdha2VfdXAoJmhydGRldi0+
d2FpdHF1ZXVlKTsKCX0KfQoKI2VuZGlmCgovKioKICogdGltZXJfZnVuYyAtIHRoZSBjcnV4IG9m
IHRoZSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWVyCiAqICB0aWNr
IGFuZCBjaGVja3MgdG8gc2VlIGlmIHRoZSBmaWVsZCBiaXQgaGFzIGNoYW5nZWQuIElmIGl0IGhh
cywgd2UKICogIGVpdGhlciB3YWtlIHVwIHNsZWVwaW5nIHJlYWRlcnMgb3IgY2FsbCBzdHJlYW1p
bmdfZmllbGRjaGFuZ2UoKS4KICovCnZvaWQgdGltZXJfZnVuYyh1bnNpZ25lZCBsb25nIHB0cikK
ewoJaW50IGk7CgoJZm9yIChpID0gMDsgaHJ0ZGV2c1tpXS5wY2lkZXY7IGkrKykgewoJCWludCBu
ZXdfZmllbGQ7CgoJCW5ld19maWVsZCA9IHJlYWRiKGhydGRldnNbaV0udmlydGFkZHIgKyBIUlRf
Q09OVFJPTF9SRUcpICYgMTsKCQlpZiAobmV3X2ZpZWxkICE9IGhydGRldnNbaV0uZmllbGRfYml0
KSB7CgkJCWhydGRldnNbaV0uZmllbGRfYml0ID0gbmV3X2ZpZWxkOwoKI2lmZGVmIEhBVkVfVjRM
MgoJCQlpZiAoaHJ0ZGV2c1tpXS5zdHJlYW1pbmcpIHsKCQkJCXN0cmVhbWluZ19maWVsZGNoYW5n
ZSgmaHJ0ZGV2c1tpXSk7CgkJCX0gZWxzZSB7CgkJCQl3YWtlX3VwKCZocnRkZXZzW2ldLndhaXRx
dWV1ZSk7CgkJCX0KI2Vsc2UKCQkJd2FrZV91cCgmaHJ0ZGV2c1tpXS53YWl0cXVldWUpOwojZW5k
aWYKCQl9Cgl9CgoJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFovMTAwKTsKCWFkZF90aW1l
cigmdGltZXIpOwp9CgovKioKICogcGVyX2ZpbGVfaW5pdCAtIGFsbG9jYXRlcyBhbmQgaW5pdGlh
bGl6ZXMgcGVyLWZpbGUgZGF0YSwgd2hpY2gKICogIGlzIGN1cnJlbnRseSBqdXN0IHRoZSBST0kg
KHJlZ2lvbi1vZi1pbnRlcmVzdCkgc3Vid2luZG93CiAqICBhbmQgYSBwb2ludGVyIGJhY2sgdG8g
dGhpcyBocnRkZXYKICovCnN0cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlX2luaXQoc3RydWN0
IGhydCAqaHJ0ZGV2KQp7CglzdHJ1Y3QgaHJ0X3Blcl9maWxlICpwZXJfZmlsZSA9IHZtYWxsb2Mo
c2l6ZW9mKCpwZXJfZmlsZSkpOwoKCXBlcl9maWxlLT5ocnRkZXYgPSBocnRkZXY7CglwZXJfZmls
ZS0+d2luLmhlaWdodCA9IEhSVF9IRUlHSFQ7CglwZXJfZmlsZS0+d2luLndpZHRoID0gSFJUX1dJ
RFRIOwoJcGVyX2ZpbGUtPndpbi5zdGFydHggPSAwOwoJcGVyX2ZpbGUtPndpbi5zdGFydHkgPSAw
OwoKCXJldHVybiBwZXJfZmlsZTsKfQoKCiNpZmRlZiBIQVZFX1Y0TDIKLyoqCiAqIGhydF9vcGVu
IC0gY2FsbGVkIHVwb24gYW4gb3BlbigpIG9uIC9kZXYvdmlkZW9OCiAqLwppbnQgaHJ0X29wZW4o
c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCnsKCXN0cnVjdCB2aWRlb19k
ZXZpY2UgKnZmbCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CglzdHJ1Y3QgaHJ0ICpocnRkZXYgPSB2
ZmwtPnByaXY7CglpbnQgcmV0dmFsID0gMDsKCglkb3duKCZocnRkZXYtPnNlbSk7CgoJdmZsLT51
c2VycysrOwoKCWlmIChleGNsdXNpdmUgJiYgdmZsLT51c2VycykgewoJCXJldHZhbCA9IC1FQlVT
WTsKCX0gZWxzZSB7CgkJLyogSW5pdGlhbGl6ZSBwZXItZmlsZSBkYXRhICovCgkJZmlsZS0+cHJp
dmF0ZV9kYXRhID0gcGVyX2ZpbGVfaW5pdChocnRkZXYpOwoKCQkvKiBHZXQgdGhlIHRpbWVyIGdv
aW5nICovCgkJaWYgKCF0aW1lcl9ydW5uaW5nKSB7CgkJCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVz
ICsgKEhaLzEwMCk7CgkJCWFkZF90aW1lcigmdGltZXIpOwoJCQl0aW1lcl9ydW5uaW5nID0gMTsK
CQl9CgkJCgkJLyogU3RhcnQgb2ZmIG5vdCBpbiBzdHJlYW1pbmcgbW9kZSAqLwoJCWhydGRldi0+
c3RyZWFtaW5nID0gMDsKCgl9Cgl1cCgmaHJ0ZGV2LT5zZW0pOwoKCXJldHVybiByZXR2YWw7Cn0K
Ci8qKgogKiBocnRfcmVsZWFzZSAtIGJhc2ljYWxseSBqdXN0IHN0b3BzIHRoZSB0aW1lciBiZWNh
dXNlIGl0IGlzbid0IG5lY2Vzc2FyeQogKiAgaWYgbm8gcHJvY2VzcyBoYXMgL2Rldi92aWRlb04g
b3BlbgogKi8Kc3RhdGljIGludCBocnRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1
Y3QgZmlsZSAqZmlsZSkKewoJc3RydWN0IHZpZGVvX2RldmljZSAqdmZsID0gdmlkZW9fZGV2ZGF0
YShmaWxlKTsKCXN0cnVjdCBocnQgKmhydGRldiA9IHZmbC0+cHJpdjsKCglkb3duKCZocnRkZXYt
PnNlbSk7CgoJdmZsLT51c2Vycy0tOwoKCS8qIFRlbGwgdGhlIHRpbWVyIHRvIHN0b3AgaWYgbmVj
ZXNzYXJ5ICovCglpZiAoIXZmbC0+dXNlcnMgJiYgIWhydGRldi0+dXNlcnMpIHsKCQlkZWxfdGlt
ZXJfc3luYygmdGltZXIpOwoJCXRpbWVyX3J1bm5pbmcgPSAwOwoJfQoKCS8qIEZyZWUgb3VyIHBy
aXZhdGUgZGF0YSAqLwoJdmZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKCgl1cCgmaHJ0ZGV2LT5z
ZW0pOwoKCXJldHVybiAwOwp9CgovKioKICogaHJ0X3BvbGwgLSBoYW5kbGVzIHBvbGwoKSBhbmQg
c2VsZWN0KCkgb24gL2Rldi92aWRlb04KICovCnVuc2lnbmVkIGludCBocnRfcG9sbChzdHJ1Y3Qg
ZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKewoJc3RydWN0IGhydF9wZXJfZmlsZSAqcGVy
X2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CglzdHJ1Y3QgaHJ0ICpocnRkZXYgPSBwZXJfZmls
ZS0+aHJ0ZGV2OwoKCWlmICghaHJ0ZGV2LT5zdHJlYW1pbmcpIHsKCQlwb2xsX3dhaXQoZmlsZSwg
JmhydGRldi0+d2FpdHF1ZXVlLCB3YWl0KTsKCX0gZWxzZSB7CgkJLyogR28gdG8gc2xlZXAgaWYg
dGhlIGRvbmUgbGlzdCBpcyBlbXB0eSAqLwoJCXdoaWxlICghaHJ0ZGV2LT5kb25lX2xpc3QubGVu
Z3RoKSB7CgkJCXVwKCZocnRkZXYtPnNlbSk7CgkJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGli
bGUKCQkJICAgIChocnRkZXYtPndhaXRxdWV1ZSwgKGhydGRldi0+ZG9uZV9saXN0Lmxlbmd0aCkp
KQoJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKCgkJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmhy
dGRldi0+c2VtKSkKCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CgkJfQoJfQoKCXJldHVybiBQT0xM
SU4gfCBQT0xMUkROT1JNOwp9CiNlbmRpZgoKLyoqCiAqIGhydF9kZXZfaW5pdCAtIHRyeSB0byBp
bml0aWFsaXplIG9uZSBQQ0kgZGV2aWNlLCBzcGVjaWZpZWQKICogYnkgdGhlIHBhcmFtZXRlciBk
ZXYKICovCnN0YXRpYyBpbnQgaHJ0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsKICAg
ICAgICBpbnQgaSwgaW50ZXJydXB0X3Jlc3VsdDsKICAgICAgICBzdHJ1Y3QgaHJ0ICpocnRkZXYg
PSBOVUxMOwoJdTggbXlpcnE7CgoJdHlwZV9vZl9kZXZpY2UgPSBkZXYtPmRldmljZTsKICAgICAg
ICAvKiBjaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMgb25lIG9mIHRob3NlIHdlIHJlY29nbml6ZSAq
LwogICAgICAgIGlmICgoZGV2LT5kZXZpY2UgIT0gSFJUX0RFVklDRV9JRF9DT0xPUikmJihkZXYt
PmRldmljZSAhPSBIUlRfREVWSUNFX0lEX0dSQVkpKXsKICAgICAgICAgICAgICAgIGhydF9wcmlu
dGsoIlVua25vd24gSFJUIGRldmljZTogJWRcbiIsIGRldi0+ZGV2aWNlKTsKICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgLyogdHJ5IHRvIGZpbmQgYSBmcmVlIGRl
dmljZSBkZXNjcmlwdG9yICovCiAgICAgICAgZm9yIChpID0gMDsgaSA8IEhSVF9NQVhfREVWUzsg
aSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoaHJ0ZGV2c1tpXS5wY2lkZXYgPT0gTlVMTCkgewog
ICAgICAgICAgICAgICAgICAgICAgICBocnRkZXYgPSAmaHJ0ZGV2c1tpXTsKCQkJbnVtX2hydGRl
dnMrKzsKCQkJYnJlYWs7CgkJfQogICAgICAgIH0KICAgICAgICBpZiAoIWhydGRldikgewogICAg
ICAgICAgICAgICAgaHJ0X3ByaW50aygiTW9yZSB0aGFuICVkIEhSVCBkZXZpY2VzIVxuIiwKCQkJ
ICAgSFJUX01BWF9ERVZTKTsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAg
ICAgICAgLyogcHJvYmUgdGhlIGRldmljZSB0byBnZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwogICAg
ICAgIHBjaV9lbmFibGVfZGV2aWNlKGRldik7CiAgICAgICAgaWYgKCEgaHJ0X3RyeV9hZGRyZXNz
KGhydGRldiwgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpKQoJICBnb3RvIHN1Y2Nlc3M7CiAg
ICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHJ0X2FkZHJlc3Nlcyk7IGkrKykgCgkg
IGlmICghIGhydF90cnlfYWRkcmVzcyhocnRkZXYsIGhydF9hZGRyZXNzZXNbaV0pKQoJICAgIGdv
dG8gc3VjY2VzczsKCQoJLyogRmFpbHVyZTsgY291bGRuJ3QgZmluZCBpdCAqLwogICAgICAgIHJl
dHVybiAwOwoKc3VjY2VzczoKCS8qIFN1Y2Nlc3MhIFdlIGZvdW5kIHRoZSBjYXJkLCBzbyBub3cg
aW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzICovCgojaWZkZWYgSEFWRV9WNEwyCgkvKiBX
ZSBkb24ndCBzdGFydCBpbiBzdHJlYW1pbmcgbW9kZSAqLwoJaHJ0ZGV2LT5zdHJlYW1pbmcgPSAw
OwoKCS8qIE1ha2UgdGhlIGxpc3RzIGVtcHR5ICovCglJTklUX0xJU1RfSEVBRCgmaHJ0ZGV2LT5j
YXB0dXJlX2xpc3QuaGVhZCk7CglJTklUX0xJU1RfSEVBRCgmaHJ0ZGV2LT5kb25lX2xpc3QuaGVh
ZCk7CglocnRkZXYtPmNhcHR1cmVfbGlzdC5sZW5ndGggPSBocnRkZXYtPmRvbmVfbGlzdC5sZW5n
dGggPSAwOwoKCS8qIEluaXRpYWxpemUgdGhlIHNwaW5sb2NrcyB0byBwcm90ZWN0IHRoZSBsaXN0
cyAqLwoJaHJ0ZGV2LT5jYXB0dXJlX2xpc3QubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CglocnRk
ZXYtPmRvbmVfbGlzdC5sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsKCgkvKiBSZWdpc3RlciB3aXRo
IFY0TCAqLwoJaHJ0ZGV2LT52aWRlb19kZXYgPSB2aWRlb2Rldl90ZW1wbGF0ZTsKCWlmICh2aWRl
b19yZWdpc3Rlcl9kZXZpY2UoJmhydGRldi0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAoJ
CQkJICB2aWRlb19taW5vcikgPCAwKSB7CgkJaHJ0X3ByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRv
IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9CgoJLyogU2V0
IHByaXZhdGUgZGF0YSAodG8gYWNjZXNzIHRocm91Z2ggc3RydWN0IGZpbGUpICovCglocnRkZXYt
PnZpZGVvX2Rldi5wcml2ID0gaHJ0ZGV2OwojZW5kaWYKCgl3cml0ZWIoSFJUX0xJVkVfQ01ELCBI
UlRfQ09OVFJPTF9SRUcgKyBocnRkZXYtPnZpcnRhZGRyKTsKCXBjaV9yZWFkX2NvbmZpZ19ieXRl
KGRldixQQ0lfSU5URVJSVVBUX0xJTkUsJm15aXJxKTsKCWZyYW1lX2lycSA9IG15aXJxOwoJCQoJ
aWYgKGZyYW1lX2lycSA+PSAwKSB7CgkgIGludGVycnVwdF9yZXN1bHQgPQogIAkgICAgcmVxdWVz
dF9pcnEoKHVuc2lnbmVkIGludClmcmFtZV9pcnEsIGZyYW1lX2ludGVycnVwdCxTQV9JTlRFUlJV
UFQsICJocnRtZW0iLE5VTEwpOwoJICBpZiAoaW50ZXJydXB0X3Jlc3VsdCkgewoJICAgIHByaW50
ayhLRVJOX0lORk8gImhydDogY2FuJ3QgZ2V0IGFzc2lnbmVkIGlycSAlaVxuIiwKCQkgICBmcmFt
ZV9pcnEpOwoJICAgIGZyYW1lX2lycSA9IC0xOwoJICB9IGVsc2UgeyAvKiBhY3R1YWxseSBlbmFi
bGUgdGhlIGludGVycnVwdCAqLwoJCgkgICAgaWYgKG15X3ZpcnR1YWxfYWRkcmVzcyAhPSBocnRk
ZXYtPnZpcnRhZGRyKQoJICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaHJ0OiBhZGRyZXNzZXMgZG9u
J3QgbWF0Y2hcbiIpOwogICAgICAgICAgICB3bWIoKTsKCSAgICB3cml0ZWIoMHgwMSwgIDB4MjAw
NSArIGhydGRldi0+dmlydGFkZHIpOwoJICB9Cgl9CgllbHNlCgkgIHByaW50aygiZGludCBnZXQg
dGhlIHJlcXVpcmVkIGxpbmVcbiIpOwoJCgkvKiBTZXQgdGhlIGNvbnN0YW50cyAqLwoJaHJ0ZGV2
LT5ieXRlc3BlcmxpbmUgPSBIUlRfQllURVNfUEVSX0xJTkU7CglocnRkZXYtPmZyYW1lc2l6ZSA9
IEhSVF9GUkFNRVNJWkU7CgoJLyogQ29weSB0aGUgUENJIGRldmljZSBzdHJ1Y3QgKi8KICAgICAg
ICBocnRkZXYtPnBjaWRldiA9IGRldjsKCgkvKiBJbml0aWFsaXplIHRoZSB3YWl0IHF1ZXVlIChm
b3IgcG9sbCkgKi8KCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhydGRldi0+d2FpdHF1ZXVlKTsKCgkv
KiBJbml0aWFsaXplIHNlbWFwaG9yZSAqLwoJc2VtYV9pbml0KCZocnRkZXYtPnNlbSwgMSk7CgoJ
LyogUmVhZCB0aGUgZmllbGQgaWQgYml0IChzaG91bGQgYmUgMCBzaW5jZSB3ZSdyZSBzaG91bGRu
J3QgYmUKCSAgIGluIGxpdmUgbW9kZSB5ZXQpICovCglocnRkZXYtPmZpZWxkX2JpdCA9IHJlYWRi
KGhydGRldi0+dmlydGFkZHIgKyBIUlRfQ09OVFJPTF9SRUcpICYgMTsKCgkvKiBQdXQgdGhlIGNh
cmQgaW50byBMaXZlIG1vZGUgKi8KCXdyaXRlYihIUlRfTElWRV9DTUQsIGhydGRldi0+dmlydGFk
ZHIgKyBIUlRfQ09OVFJPTF9SRUcpOwoKCS8qIEFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBtZW1vcnkg
Ki8KCWhydGRldi0+ZnJhbWVkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgdm1hbGxvYyhIUlRfRlJB
TUVTSVpFKTsKCglpZiAoaHJ0ZGV2LT5mcmFtZWRhdGEgPT0gTlVMTCkgewoJCWhydF9wcmludGso
S0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOwojaWZkZWYgSEFWRV9WNEwy
CgkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmhydGRldi0+dmlkZW9fZGV2KTsKI2VuZGlmCgkJ
aWYgKCFkaXNhYmxlX2hydG1lbSkKCQkJdW5yZWdpc3Rlcl9jaHJkZXYoaHJ0bWVtX21ham9yLCAi
aHJ0bWVtIik7CgkJcmV0dXJuIC1FTk9NRU07Cgl9CgoJLyogU2V0IHVwIG91ciB0aW1lciByb3V0
aW5lLiBJdCBzaG91bGQgZXhwaXJlIDEwMCB0aW1lcwoJICAgYSBzZWNvbmQgKGV2ZXJ5IDEgamlm
Znkgb24gMi40LCBldmVyeSAxMCBqaWZmaWVzIG9uIDIuNikgKi8KCWluaXRfdGltZXIoJnRpbWVy
KTsKCXRpbWVyLmZ1bmN0aW9uID0gdGltZXJfZnVuYzsKCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVz
ICsgKEhaLzEwMCk7CgoJcmV0dXJuIDE7Cn0KCi8qKgogKiBocnRfZGV2X2NsZWFudXAgLSBkZWFs
bG9jYXRlIHBlci1jYXJkIHJlc291cmNlcwogKi8Kdm9pZCBocnRfZGV2X2NsZWFudXAoc3RydWN0
IGhydCAqaHJ0ZGV2KQp7CglpZiAoaHJ0ZGV2LT5wY2lkZXYpIHsKI2lmZGVmIEhBVkVfVjRMMgoJ
CXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZocnRkZXYtPnZpZGVvX2Rldik7CiNlbmRpZgoJCXJl
bGVhc2VfbWVtX3JlZ2lvbihocnRkZXYtPnBoeXNhZGRyLCBCWVRFU19ORUVERUQpOwoJCWlvdW5t
YXAoKHVuc2lnbmVkIGNoYXIgKilocnRkZXYtPnZpcnRhZGRyKTsKCQl2ZnJlZShocnRkZXYtPmZy
YW1lZGF0YSk7CgkJaWYgKHRpbWVyX3J1bm5pbmcpCgkJCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7
Cgl9Cn0KCi8qKgogKiogVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gCiAq
Ki8Kdm9pZCBmcmFtZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRf
cmVncyAqcmVncykKewogIGludHJfY291bnQrKzsKICAKICAvKmRpc2FibGUgdGhlIGludGVycnVw
dCAqLwogIHdyaXRlYigweDAwLDB4MjAwNSArIG15X3ZpcnR1YWxfYWRkcmVzcyk7Cn0KLyoqCiAq
IGluaXRfbW9kdWxlIC0gd2hlcmUgaXQgYWxsIHN0YXJ0cy4gTWFpbmx5IHBlcmZvcm1zIHByb2Jp
bmcuCiAqLwppbnQgaW5pdF9tb2R1bGUodm9pZCkKewoJaW50IHJlc3VsdDsKCXN0cnVjdCBwY2lf
ZGV2ICpkZXYgPSBOVUxMOwoKCiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lP
TigyLCA1LCAwKQoJLyogVGhpcyBpcyBhIFBDSSBjYXJkLCBhZnRlciBhbGwgKi8KCWlmICghcGNp
X3ByZXNlbnQoKSkKCQlyZXR1cm4gLUVOT0RFVjsKI2VuZGlmCgoJLyogTG9vayBmb3IgdGhlIGNh
cmQgKi8KCWRldiA9IHBjaV9maW5kX2RldmljZShIUlRfVkVORE9SX0lELCBQQ0lfQU5ZX0lELCBk
ZXYpOwoJaWYgKGRldikgewoJCWlmICghaHJ0X2Rldl9pbml0KGRldikpIHsKCQkJaHJ0X3ByaW50
aygiRmFpbGVkIHRvIGluaXRpYWxpemUgY2FyZFxuIik7CgkJCXJldHVybiAtRU5PREVWOwoJCX0K
CX0gZWxzZSB7CgkJLyogSXQgc2hvdWxkIGFsd2F5cyBzaG93IHVwLCByZWdhcmRsZXNzIG9mCgkJ
ICAganVtcGVyIHNldHRpbmdzICovCgkJaHJ0X3ByaW50aygiUENJIGRldmljZSBub3QgZm91bmRc
biIpOwoJCXJldHVybiAtRU5PREVWOwoJfQoKCS8qIFdlIGZvdW5kIGF0IGxlYXN0IG9uZSBjYXJk
LCBzbyByZWdpc3RlciBvdXIgZGlyZWN0LXRvLWRldmljZS1tZW1vcnkKCSAgIGNoYXJhY3RlciBk
ZXZpY2Ugb25jZSBmb3IgYWxsIGNhcmRzICovCglpZiAoIWRpc2FibGVfaHJ0bWVtKSB7CgkJcmVz
dWx0ID0gcmVnaXN0ZXJfY2hyZGV2KGhydG1lbV9tYWpvciwgImhydG1lbSIsCgkJCQkJICZocnRf
ZGlyZWN0X2ZvcHMpOwoJCWlmIChyZXN1bHQgPCAwKSB7CgkJCWludCBpOwoJCQkKCQkJaHJ0X3By
aW50aygiVW5hYmxlIHRvIHJlZ2lzdGVyIGhydG1lbSBkZXZpY2VcbiIpOwoJCQkKCQkJLyogRnJl
ZSB1cCBhbGwgdGhlIGRldmljZXMgKi8KCQkJZm9yIChpID0gMDsgaHJ0ZGV2c1tpXS5wY2lkZXY7
IGkrKykgewoJCQkJaHJ0X2Rldl9jbGVhbnVwKCZocnRkZXZzW2ldKTsKCQkJfQoJCQlyZXR1cm4g
cmVzdWx0OwoJCX0KCQlpZiAoaHJ0bWVtX21ham9yID09IDApCgkJCWhydG1lbV9tYWpvciA9IHJl
c3VsdDsKCgkJLyogWFhYOiBQdXQgaW4gc3VwcG9ydCBmb3IgZGV2ZnMhCgkJICAgQW5kIHN5c2Zz
IHRvbyBwb3NzaWJseT8gKi8KCQlocnRfcHJpbnRrKCJSZWdpc3RlcmVkIGhydG1lbSB3aXRoIG1h
am9yIG51bWJlciA9ICVkXG4iLAoJCQkgICBocnRtZW1fbWFqb3IpOwoJfQoJcmV0dXJuIDA7Cn0K
Ci8qKgogKiBocnRfZGlyZWN0X2RvX2lvY3RsIC0gaGFuZGxlIGlvY3RsJ3Mgb24gaHJ0bWVtIGRl
dmljZQogKi8Kc3RhdGljIGludCBocnRfZGlyZWN0X2RvX2lvY3RsKHN0cnVjdCBocnQgKmhydGRl
diwgdW5zaWduZWQgaW50IGNtZCwKCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQp7CglpZiAo
Y21kID09IElPQ19IUlRfU0VUX0kyQ1JFRykgewoJCXN0cnVjdCBpMmNfcmVndmFsIHI7CgoJCWlm
IChjb3B5X2Zyb21fdXNlcigmciwgKHZvaWQgKikgYXJnLCBzaXplb2YocikpKSB7CgkJCXJldHVy
biAtRUZBVUxUOwoJCX0KCQlpMmNfc2V0X3JlZyhocnRkZXYsIHIucmVnLCByLnZhbCk7CgkJcmV0
dXJuIDA7Cgl9IGVsc2UgaWYgKGNtZCA9PSBJT0NfSFJUX0dFVF9JMkNSRUcpIHsKCQlzdHJ1Y3Qg
aTJjX3JlZ3ZhbCByOwoKCQlyLnZhbCA9IGhydGRldi0+cmVndmFsc1tyLnJlZ107CgkJaWYgKGNv
cHlfdG9fdXNlcigodm9pZCAqKSBhcmcsICZyLCBzaXplb2YocikpKSB7CgkJCXJldHVybiAtRUZB
VUxUOwoJCX0KCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19IUlRfU0VUX1dJRFRI
KSB7CgkJaWYgKGFyZyArIGhydGRldi0+d2luLT5zdGFydHggPiBIUlRfV0lEVEggfHwgYXJnIDwg
MSkKCQkJcmV0dXJuIC1FSU5WQUw7CgoJCWhydGRldi0+d2luLT53aWR0aCA9IGFyZzsKCQlocnRk
ZXYtPmJ5dGVzcGVybGluZSA9IGFyZyAqIEhSVF9CWVRFU19QRVJfUElYRUw7CgkJcmV0dXJuIDA7
Cgl9IGVsc2UgaWYgKGNtZCA9PSBJT0NfSFJUX1NFVF9IRUlHSFQpIHsKCQlpZiAoYXJnICsgaHJ0
ZGV2LT53aW4tPnN0YXJ0eSA+IEhSVF9IRUlHSFQgfHwgYXJnIDwgMSkKCQkJcmV0dXJuIC1FSU5W
QUw7CgoJCWhydGRldi0+d2luLT5oZWlnaHQgPSBhcmc7CgkJcmV0dXJuIDA7Cgl9IGVsc2UgaWYg
KGNtZCA9PSBJT0NfSFJUX1NFVF9TVEFSVFgpIHsKCQlpZiAoYXJnID4gaHJ0ZGV2LT53aW4tPndp
ZHRoIHx8IGFyZyA8IDApIHJldHVybiAtRUlOVkFMOwoKCQlocnRkZXYtPndpbi0+c3RhcnR4ID0g
YXJnOwoJCXJldHVybiAwOwoJfSBlbHNlIGlmIChjbWQgPT0gSU9DX0hSVF9TRVRfU1RBUlRZKSB7
CgkJaWYgKGFyZyA+IGhydGRldi0+d2luLT5oZWlnaHQgfHwgYXJnIDwgMCkgcmV0dXJuIC1FSU5W
QUw7CgoJCWhydGRldi0+d2luLT5zdGFydHkgPSBhcmc7CgkJcmV0dXJuIDA7Cgl9IGVsc2UgaWYg
KGNtZCA9PSBJT0NfSFJUX1NFVF9ST0kpIHsKCQlzdHJ1Y3Qgc3Vid2luZG93IHdpbjsKCgkJaWYg
KGNvcHlfZnJvbV91c2VyKCZ3aW4sICh2b2lkICopIGFyZywgc2l6ZW9mKHdpbikpKSB7CgkJCXJl
dHVybiAtRUZBVUxUOwoJCX0KCQlpZiAod2luLmhlaWdodCA+IEhSVF9IRUlHSFQgfHwgd2luLmhl
aWdodCA8IDApIHJldHVybiAtRUlOVkFMOwoJCWlmICh3aW4ud2lkdGggPiBIUlRfV0lEVEggfHwg
d2luLndpZHRoIDwgMCkgcmV0dXJuIC1FSU5WQUw7CgkJaWYgKHdpbi5zdGFydHggPiB3aW4ud2lk
dGggfHwgd2luLnN0YXJ0eCA8IDApIHJldHVybiAtRUlOVkFMOwoJCWlmICh3aW4uc3RhcnR5ID4g
d2luLmhlaWdodCB8fCB3aW4uc3RhcnR5IDwgMCkgcmV0dXJuIC1FSU5WQUw7CgoJCSpocnRkZXYt
PndpbiA9IHdpbjsKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19IUlRfR0VUX1JP
SSkgewoJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCBocnRkZXYtPndpbiwKCQkJCSBz
aXplb2YoKmhydGRldi0+d2luKSkpIHsKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJfQoJCXJldHVybiAw
OwoJfSBlbHNlIGlmIChjbWQgPT0gSU9DX0hSVF9TRVRfSTJDUkVHUykgewoJCXVuc2lnbmVkIGNo
YXIgbGVuOwoJCWludCByZXR2YWw7CgkJdW5zaWduZWQgY2hhciAqYnVmOwoKCQkvKiBTdG9wIHRo
ZSB0aW1lciBmaXJzdCAqLwoJCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7CgkJdGltZXJfcnVubmlu
ZyA9IDA7CgoJCS8qIEZpcnN0IGJ5dGUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgKi8KCQlp
ZiAoY29weV9mcm9tX3VzZXIoJmxlbiwgKHZvaWQgKikgYXJnLCAxKSkKCQkJcmV0dXJuIC1FRkFV
TFQ7CgkJZHByaW50aygic2l6ZSBvZiBhcnJheSA9ICVkXG4iLCBsZW4pOwoKCQlidWYgPSB2bWFs
bG9jKGxlbiArIDEpOwoJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICh2b2lkICopIGFyZywgbGVu
KSkgewoJCQl2ZnJlZShidWYpOwoJCQlyZXR1cm4gLUVGQVVMVDsKCQl9CgkJcmV0dmFsID0gaTJj
X2luaXQoaHJ0ZGV2LCBocnRkZXYtPnZpcnRhZGRyLCBidWYpOyAKCQl2ZnJlZShidWYpOwoKCQkv
KiBTdGFydCB0aGUgdGltZXIgYWdhaW4gKi8KCQl0aW1lci5leHBpcmVzID0gamlmZmllcyArIChI
Wi8xMDApOwoJCWFkZF90aW1lcigmdGltZXIpOwoJCXRpbWVyX3J1bm5pbmcgPSAxOwoKCQlyZXR1
cm4gcmV0dmFsOwoJfQoJcmV0dXJuIC1FSU5WQUw7Cn0KCi8qKgogKiBocnRfZGlyZWN0X2lvY3Rs
IC0gd3JhcHBlciB0byBwYXNzIGlvY3RsJ3Mgb24gaHJ0bWVtIHRvCiAqICBocnRfZGlyZWN0X2Rv
X2lvY3RsKCkKICovCnN0YXRpYyBpbnQgaHJ0X2RpcmVjdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlu
b2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVk
IGxvbmcgYXJnKQp7CiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1
LCAwKQoJaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CiNlbHNlCglpbnQgbWlub3Ig
PSBNSU5PUihrZGV2X3ZhbChpbm9kZS0+aV9yZGV2KSk7CiNlbmRpZgoJc3RydWN0IGhydF9wZXJf
ZmlsZSAqcGVyX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CglzdHJ1Y3QgaHJ0ICpocnRkZXYg
PSBwZXJfZmlsZS0+aHJ0ZGV2OwoJaW50IHJldDsKCglkb3duKCZocnRkZXYtPnNlbSk7CgoJaHJ0
ZGV2LT53aW4gPSAmcGVyX2ZpbGUtPndpbjsKCglkcHJpbnRrKCJpb2N0bDogJXggb24gbWlub3Ig
JWRcbiIsIGNtZCwgbWlub3IpOwoKCWlmIChtaW5vciA+IG51bV9ocnRkZXZzKSB7CgkJaHJ0X3By
aW50aygiTWlub3IgbnVtICVkIG91dCBvZiByYW5nZVxuIiwgbWlub3IpOwoJCXVwKCZocnRkZXYt
PnNlbSk7CgkJcmV0dXJuIC0xOwoJfQoJcmV0ID0gaHJ0X2RpcmVjdF9kb19pb2N0bChocnRkZXYs
IGNtZCwgYXJnKTsKCgl1cCgmaHJ0ZGV2LT5zZW0pOwoJcmV0dXJuIHJldDsKfQoKLyoqCiAqIGhy
dF9kaXJlY3Rfb3BlbiAtIGNoZWNrcyBtaW5vciBudW1iZXIgcmFuZ2UsIHNldHMgcHJpdmF0ZV9k
YXRhLAogKiAgc3RhcnRzIHRpbWVyIGlmIG5lY2Vzc2FyeSwgaW5jcmVtZW50cyB1c2VycwogKi8K
c3RhdGljIGludCBocnRfZGlyZWN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp
bGUgKmZpbGUpCnsKI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUs
IDApCglpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKI2Vsc2UKCWludCBtaW5vciA9
IE1JTk9SKGtkZXZfdmFsKGlub2RlLT5pX3JkZXYpKTsKI2VuZGlmCgoJaWYgKG1pbm9yID4gbnVt
X2hydGRldnMpIHsKCQlocnRfcHJpbnRrKCJNaW5vciBudW0gJWQgb3V0IG9mIHJhbmdlXG4iLCBt
aW5vcik7CgkJcmV0dXJuIC0xOwoJfQoKCWRvd24oJmhydGRldnNbbWlub3JdLnNlbSk7CgoJLyog
SW5pdGlhbGl6ZSBwZXItZmlsZSBkYXRhICovCglmaWxlLT5wcml2YXRlX2RhdGEgPSBwZXJfZmls
ZV9pbml0KCZocnRkZXZzW21pbm9yXSk7CgoJLyogSW5jcmVtZW50IHVzZXJzICovCglocnRkZXZz
W21pbm9yXS51c2VycysrOwoKCS8qIEdldCB0aGUgdGltZXIgZ29pbmcgKi8KCWlmICghdGltZXJf
cnVubmluZykgewoJCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzEwMCk7CgkJYWRkX3Rp
bWVyKCZ0aW1lcik7CgkJdGltZXJfcnVubmluZyA9IDE7Cgl9CgoJdXAoJmhydGRldnNbbWlub3Jd
LnNlbSk7CgoJZHByaW50aygiaHJ0X2RpcmVjdF9vcGVuIGNhbGxlZFxuIik7CgoJcmV0dXJuIDA7
Cn0KCi8qKgogKiBocnRfZGlyZWN0X3JlbGVhc2UgLSBmcmVlIG91ciBwZXItZmQgZGF0YSwgc3Rv
cCB0aGUgdGltZXIgaWYgdXNlcnMgaXMgMAogKi8Kc3RhdGljIGludCBocnRfZGlyZWN0X3JlbGVh
c2Uoc3RydWN0IGlub2RlICppbm9kZSwKCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUpCnsKCXN0
cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwoJc3RydWN0
IGhydCAqaHJ0ZGV2ID0gcGVyX2ZpbGUtPmhydGRldjsKI2lmZGVmIEhBVkVfVjRMMgoJc3RydWN0
IHZpZGVvX2RldmljZSAqdmZsID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKI2VuZGlmCgoJZG93bigm
aHJ0ZGV2LT5zZW0pOwoKCS8qIERlY3JlbWVudCB1c2VycyAqLwoJaHJ0ZGV2LT51c2Vycy0tOwoK
CS8qIFRlbGwgdGhlIHRpbWVyIHRvIHN0b3AgaWYgbmVjZXNzYXJ5ICovCiNpZmRlZiBIQVZFX1Y0
TDIKCWlmICghdmZsLT51c2VycyAmJiAhaHJ0ZGV2LT51c2VycykgewojZWxzZQoJaWYgKCFocnRk
ZXYtPnVzZXJzKSB7CiNlbmRpZgoJCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7CgkJdGltZXJfcnVu
bmluZyA9IDA7Cgl9CgoJLyogRnJlZSBvdXIgcHJpdmF0ZSBkYXRhICovCgl2ZnJlZShmaWxlLT5w
cml2YXRlX2RhdGEpOwoKCXVwKCZocnRkZXYtPnNlbSk7CgoJZHByaW50aygiaHJ0X2RpcmVjdF9y
ZWxlYXNlIGNhbGxlZFxuIik7CgoJcmV0dXJuIDA7Cn0KCi8qKgogKiBocnRfZGlyZWN0X21tYXAg
LSBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBjYXJkJ3MgbWVtb3J5CiAqLwpzdGF0aWMg
aW50IGhydF9kaXJlY3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwKCQkJICAgc3RydWN0IHZtX2Fy
ZWFfc3RydWN0ICp2bWEpCnsKCXN0cnVjdCBocnQgKmhydGRldiA9IGZpbGUtPnByaXZhdGVfZGF0
YTsKCgl2bWEtPnZtX2ZsYWdzIHw9IChWTV9JTyB8IFZNX1JFU0VSVkVEKTsKCgkvKiBKdXN0IG1h
cCB0aGUgcGFnZXMgZGlyZWN0bHkgKi8KCWlmIChyZW1hcF9wYWdlX3JhbmdlKHZtYS0+dm1fc3Rh
cnQsIGhydGRldi0+cGh5c2FkZHIsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKCQkJICAg
ICB2bWEtPnZtX3BhZ2VfcHJvdCkpCgkJcmV0dXJuIC1FQUdBSU47CgoJcmV0dXJuIDA7Cn0KCi8q
KgogKiBjbGVhbnVwX21vZHVsZSAtIGNhbGxlZCB3aGVuIHdlJ3JlIHVubG9hZGVkIG9mIGNvdXJz
ZQogKi8Kdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQp7CglpbnQgaTsKCgl3cml0ZWIoMHgwLG15
X3ZpcnR1YWxfYWRkcmVzcyArIDB4MjAwNSk7LypkaXNhYmxlIHRoZSBpbnRlcnJ1cHQqLwoJZnJl
ZV9pcnEoZnJhbWVfaXJxLE5VTEwpOwoJcHJpbnRrKCI8MT5pbnRyX2NvdW50ID09ICVkXG4iLGlu
dHJfY291bnQpOwoKCS8qIFJlbGVhc2Ugb3VyIHJlc291Y2VzICovCglpZiAoIWRpc2FibGVfaHJ0
bWVtKQoJCXVucmVnaXN0ZXJfY2hyZGV2KGhydG1lbV9tYWpvciwgImhydG1lbSIpOwoKCWZvciAo
aSA9IDA7IGhydGRldnNbaV0ucGNpZGV2OyBpKyspIHsKCQlocnRfZGV2X2NsZWFudXAoJmhydGRl
dnNbaV0pOwoJfQp9CgovKiogIlRoaXMgaXMgZm9yIGdyYXkgZGV2aWNlIgogKiBncmFiX2ZpZWxk
IC0gcmVhZHMgYSBmaWVsZCAoaGFsZiBhIGZyYW1lKSBmcm9tIHRoZSBjYXJkJ3MgbWVtb3J5Lgog
KiBXaGljaCBmaWVsZCAoMCBvciAxKSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwYXJpdHkgcGFyYW1l
dGVyLgogKiBJdCBzdG9yZXMgdGhlIGRhdGEgaW50byB0aGUgZnJhbWVkYXRhIHBhcmFtZXRlciwg
d2hpY2ggaXMgdXN1YWxseQogKiB0aGUgc2FtZSBhcyBocnRkZXYtPmZyYW1lZGF0YSwgZXhjZXB0
IHdoZW4gd2UncmUgZG9pbmcgc3RyZWFtaW5nLAogKiBpbiB3aGljaCBjYXNlIGl0J3MgYSBzdHJl
YW0gYnVmZmVyJ3MgdmFkZHJlc3MgZmllbGQuCiAqLwp2b2lkIGlubGluZSBncmFiX2ZpZWxkKHN0
cnVjdCBocnQgKmhydGRldiwgdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhLAoJCSAgICAgICBpbnQg
cGFyaXR5KQp7CglpbnQgaTsKCgkvKiBYWFg6IG5vdCBzdXJlIHdoeSB0aGlzIGlzIG5lZWRlZC4g
V2l0aG91dCBpdCB0aGUgaW1hZ2UKCSAgIGlzIHNrZXdlZCBvbiB2YWx1ZXMgZm9yIHN0YXJ0eCB0
aGF0IGFyZSBub3QgbXVsdGlwbGVzIG9mIDQuCgkgKi8KCWludCBsaW5lbGVuOwoKCWxpbmVsZW4g
PSBocnRkZXYtPndpbi0+d2lkdGggLSBocnRkZXYtPndpbi0+c3RhcnR4OwojaWYgMAoJaWYgKGxp
bmVsZW4gJSA0KQoJCWxpbmVsZW4gPSBsaW5lbGVuICsgCgkJCSg0IC0gbGluZWxlbiAlIDQpOwoK
CWRwcmludGsoImxpbmVsZW5ndGggPSAlZCBzdGFydHkgPSAlZCBzdGFydHggPSAlZCBieXRlc3Bl
cmxpbmUgPSAlZFxuIiwKCQlsaW5lbGVuLCBocnRkZXYtPndpbi0+c3RhcnR5LCBocnRkZXYtPndp
bi0+c3RhcnR4LAoJCWhydGRldi0+Ynl0ZXNwZXJsaW5lKTsKI2VuZGlmCgoKCglmb3IgKGkgPSAo
IXBhcml0eSkgKyBocnRkZXYtPndpbi0+c3RhcnR5OyBpIDwgaHJ0ZGV2LT53aW4tPmhlaWdodDsK
CSAgICAgaSArPSAyKSB7CgkJLyogTW92ZSB0aGUgeSByZWdpc3RlciAoY3VycmVudCBsaW5lKSAq
LwoJCXdyaXRldyhpLCBocnRkZXYtPnZpcnRhZGRyICsgSFJUX1lfTE9XX1JFRyk7CgkJd21iKCk7
CgoJCW1lbWNweV9mcm9taW8oZnJhbWVkYXRhICsgKGkgLSBocnRkZXYtPndpbi0+c3RhcnR5KSAq
IGxpbmVsZW4sCgkJCSAgICAgIGhydGRldi0+dmlydGFkZHIgKyBocnRkZXYtPndpbi0+c3RhcnR4
LAoJCQkgICAgICBsaW5lbGVuKTsKCX0KfQoKLyoqICIgVGhpcyBpcyBmb3IgdGhlIGNvbG9yIGRl
dmljZSIKICogZ3JhYl9maWVsZCAtIHJlYWRzIGEgZmllbGQgKGhhbGYgYSBmcmFtZSkgZnJvbSB0
aGUgY2FyZCdzIG1lbW9yeS4KICogV2hpY2ggZmllbGQgKDAgb3IgMSkgaXMgZGV0ZXJtaW5lZCBi
eSB0aGUgcGFyaXR5IHBhcmFtZXRlci4KICogSXQgc3RvcmVzIHRoZSBkYXRhIGludG8gdGhlIGZy
YW1lZGF0YSBwYXJhbWV0ZXIsIHdoaWNoIGlzIHVzdWFsbHkKICogdGhlIHNhbWUgYXMgaHJ0ZGV2
LT5mcmFtZWRhdGEsIGV4Y2VwdCB3aGVuIHdlJ3JlIGRvaW5nIHN0cmVhbWluZywKICogaW4gd2hp
Y2ggY2FzZSBpdCdzIGEgc3RyZWFtIGJ1ZmZlcidzIHZhZGRyZXNzIGZpZWxkLgogKi8Kdm9pZCBp
bmxpbmUgY2dyYWJfZmllbGQoc3RydWN0IGhydCAqaHJ0ZGV2LCB1bnNpZ25lZCBjaGFyICpmcmFt
ZWRhdGEsIGludCBwYXJpdHkpCnsKCWludCBpOwogICAgICAgIGludCBjb2xjb3VudCxidWZjb3Vu
dD0wOyAKICAgICAgICBpbnQgbGluZWxlbjsKCWNoYXIgYnVmZmVyW2hydGRldi0+Ynl0ZXNwZXJs
aW5lXTsKCQogICAgICAgIC8qIFhYWDogbm90IHN1cmUgd2h5IHRoaXMgaXMgbmVlZGVkLiBXaXRo
b3V0IGl0IHRoZSBpbWFnZQoJICAgaXMgc2tld2VkIG9uIHZhbHVlcyBmb3Igc3RhcnR4IHRoYXQg
YXJlIG5vdCBtdWx0aXBsZXMgb2YgNC4KCSAqLwoJbGluZWxlbiA9IGhydGRldi0+d2luLT53aWR0
aCAtIGhydGRldi0+d2luLT5zdGFydHg7CiNpZiAwCglpZiAobGluZWxlbiAlIDQpCgkJbGluZWxl
biA9IGxpbmVsZW4gKyAKCQkJKDQgLSBsaW5lbGVuICUgNCk7CgoJZHByaW50aygibGluZWxlbmd0
aCA9ICVkIHN0YXJ0eSA9ICVkIHN0YXJ0eCA9ICVkIGJ5dGVzcGVybGluZSA9ICVkXG4iLAoJCWxp
bmVsZW4sIGhydGRldi0+d2luLT5zdGFydHksIGhydGRldi0+d2luLT5zdGFydHgsCgkJaHJ0ZGV2
LT5ieXRlc3BlcmxpbmUpOwojZW5kaWYKCglmb3IgKGkgPSAoIXBhcml0eSkgKyBocnRkZXYtPndp
bi0+c3RhcnR5OyBpIDwgaHJ0ZGV2LT53aW4tPmhlaWdodDsKCSAgICAgaSArPSAyKSB7CgkgIC8q
IE1vdmUgdGhlIHkgcmVnaXN0ZXIgKGN1cnJlbnQgbGluZSkgKi8KCSAgd3JpdGV3KGksIGhydGRl
di0+dmlydGFkZHIgKyBIUlRfWV9MT1dfUkVHKTsKCSAgd21iKCk7CgkgIAoJICBmb3IgKGNvbGNv
dW50ID0gMCA7IGNvbGNvdW50IDwgIDUxMjsgY29sY291bnQrKykKCSAgICB7CgkgICAgICBtZW1j
cHlfZnJvbWlvKGJ1ZmZlciArIGJ1ZmNvdW50KysgLCBocnRkZXYtPnZpcnRhZGRyICsgaHJ0ZGV2
LT53aW4tPnN0YXJ0eCArIGNvbGNvdW50LDEpOwoJICAgICAgbWVtY3B5X2Zyb21pbyhidWZmZXIg
KyBidWZjb3VudCsrLCBocnRkZXYtPnZpcnRhZGRyICsgaHJ0ZGV2LT53aW4tPnN0YXJ0eCArIGNv
bGNvdW50ICsgNTEyLDEpOyAgICAgICAgICAgICAgICAgICAgCgkgICAgfQoJICBidWZjb3VudCA9
IDA7CgkgIG1lbWNweShmcmFtZWRhdGEgKyAoaSAtIGhydGRldi0+d2luLT5zdGFydHkpICogaHJ0
ZGV2LT5ieXRlc3BlcmxpbmUgLCBidWZmZXIsaHJ0ZGV2LT5ieXRlc3BlcmxpbmUpOwoJfQp9Cgov
KioqCiAqIERyLiBCYWtlcidzIEkyQyByb3V0aW5lcyAKICoqKi8KCi8qIEhSVF9DT05UUk9MX09G
RlNFVCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBJMkMgYnVzIGNvbnRyb2wgcG9ydAogICAweDIwMDAg
PSA4MTkyID0gMl4xMyAqLwojZGVmaW5lIEhSVF9DT05UUk9MX09GRlNFVCAweDIwMDAKI2RlZmlu
ZSBIUlRfQ09OVFJPTChhZGRyKSAoYWRkciArIEhSVF9DT05UUk9MX09GRlNFVCkKCi8qIGJpdCA3
IGF0IDB4MjAwMCAodGhlIEhSVDUxMi04IGNvbnRyb2wgcmVnaXN0ZXIpIHRlbGxzIHdoZXRoZXIK
ICAgdGhlIENQVSBpcyBzZW5kaW5nIGRhdGEgYWNyb3NzIHRoZSBJMkMgYnVzICovCiNkZWZpbmUg
STJDX0JVU1koYWRkcikgKCEocmVhZGIoSFJUX0NPTlRST0woYWRkcikpICYgMHg4MCkpCgovKiAw
eDIwMDEgPSA4MTkzID0gMl4xMysxICovCiNkZWZpbmUgSTJDX0NPTlRST0xfT0ZGU0VUIDB4MjAw
MQoKLyogVGhlIHdvcmQgYXQgMHgyMDAxIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaTJjIGJ1cyBv
ZiB0aGUgSFJUNTEyLTgKICAgYml0IDAgPSBpMmMgY2xvY2sgc2lnbmFsICgic2NsIiBmb3Igc2hv
cnQpCiAgIGJpdCAxID0gaTJjIGRhdGEvYWRkcmVzcyBzaWduYWwgKCJzZGEiIGZvciBzaG9ydCkK
ICAgYml0IDIgPSAiZ28iIHNpZ25hbCBmb3IgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgYSBjbG9jayBw
dWxzZSwKICAgICAgICAgICBvbmNlIGRhdGEgaXMgcmVhZHkuIFRoaXMgaXMgYSB3cml0ZS1vbmx5
IGJpdC4KICAgICAgICAgICBJdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIGEgZmV3IG1pY3Jvc2Vj
b25kcwogICAgICAgICAgIGFmdGVyIHRoZSBzb2Z0d2FyZSBzZXRzIGl0IGhpZ2guCiAqLwojZGVm
aW5lIEkyQ19DT05UUk9MKGFkZHIpIChhZGRyICsgSTJDX0NPTlRST0xfT0ZGU0VUKQoKI2RlZmlu
ZSBJMkNfUE9LRShhZGRyLGRhdGEpIHsgd3JpdGViKGRhdGEsSTJDX0NPTlRST0woYWRkcikpOyB3
bWIoKTsgdWRlbGF5KDEwKTt9CiNkZWZpbmUgSTJDX1BFRUsoYWRkcikgKHJlYWRiKEkyQ19DT05U
Uk9MKGFkZHIpKSkKCiNkZWZpbmUgSTJDXzAwKGFkZHIpIHsgd3JpdGViKDAsSTJDX0NPTlRST0wo
YWRkcikpOyB3bWIoKTsgdWRlbGF5KDEwKTt9CiNkZWZpbmUgSTJDXzEwKGFkZHIpIHsgd3JpdGVi
KDEsSTJDX0NPTlRST0woYWRkcikpOyB3bWIoKTsgdWRlbGF5KDEwKTt9CiNkZWZpbmUgSTJDXzAx
KGFkZHIpIHsgd3JpdGViKDIsSTJDX0NPTlRST0woYWRkcikpOyB3bWIoKTsgdWRlbGF5KDEwKTt9
CiNkZWZpbmUgSTJDXzExKGFkZHIpIHsgd3JpdGViKDMsSTJDX0NPTlRST0woYWRkcikpOyB3bWIo
KTsgdWRlbGF5KDEwKTt9CgovKioKICogaTJjX3N0YXJ0IC0gc2VuZHMgJ3N0YXJ0JyBjb21tYW5k
IG9udG8gaTJjIGJ1cyB0byBiZSByZWNpZXZlZCBieSBhbGwKICogZGV2aWNlcyBvbiBidXMuIChU
aGUgSFJUNTEyLTggb25seSBoYXMgdGhlIG9uIEEvRCBvbiB0aGUgaTJjIGJ1cy4pCiAqIFRoaXMg
dGVsbHMgYWxsIGRldmljZXMgb24gdGhlIGkyYyBidXMgdG8gcHJlcGFyZSBmb3IgYW4gYWRkcmVz
cwogKiBwaGFzZSwgaS5lLiwgdGhhdCBvbmUgb2YgdGhlbSB3aWxsIGJlIGFkZHJlc3NlZCBuZXh0
LgogKiBUaGUgcGFyYW1ldGVyIGlzIHRoZSBtYXBwZWQgSS9PIGJhc2UgYWRkcmVzcyBvZiBhIGRl
dmljZS4KICovCnN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc3RhcnQodW5zaWduZWQgbG9uZyBhZGRy
KQp7CglJMkNfMDAoYWRkcik7CglJMkNfMDEoYWRkcik7CglJMkNfMTEoYWRkcik7CglJMkNfMTAo
YWRkcik7CglJMkNfMDAoYWRkcik7Cn0KCi8qKgogKiBpMmNfc3RvcCAtIHRlbGxzIHRoZSBzZWxl
Y3RlZCBkZXZpY2UgKEEvRCkgdGhhdCB0cmFuc21pc3Npb24gaGFzCiAqIGNvbXBsZXRlZCBhbmQg
dGhlIGJ1cyBpcyBmcmVlLgogKiBUaGUgcGFyYW1ldGVyIGlzIHRoZSBtYXBwZWQgSS9PIGJhc2Ug
YWRkcmVzcyBvZiBhIGRldmljZS4KICovCnN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc3RvcCh1bnNp
Z25lZCBsb25nIGFkZHIpCnsKCUkyQ18wMChhZGRyKTsKCUkyQ18xMChhZGRyKTsKCUkyQ18xMShh
ZGRyKTsKCUkyQ18wMShhZGRyKTsKCUkyQ18xMShhZGRyKTsKfQoKLyoqCiAqIGkyY19zZW5kX2J5
dGUgLSBzZW5kcyBhIGJ5dGUgdG8gdGhlIEEvRC4KICogVGhlIHBhcmFtZXRlciBhZGRyIGlzIHRo
ZSBtYXBwZWQgSS9PIGJhc2UgYWRkcmVzcyBvZiBhIGRldmljZS4KICovCnN0YXRpYyBpbmxpbmUg
aW50IGkyY19zZW5kX2J5dGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBjaGFyIGRhdGEp
CnsKCWNoYXIgYml0cG9zOwoJdW5zaWduZWQgY2hhciBzZGEsIHNkYV9zbGM7Cgl1bnNpZ25lZCBs
b25nIHRpbWVvdXQ7CgoJZm9yIChiaXRwb3MgPSA3OyBiaXRwb3MgPj0gMDsgYml0cG9zLS0pIHsK
CQkvKiBzZW5kIGEgYml0IHRvIHRoZSBBL0QgZGV2aWNlOwoJCSAgIGNsb2NrIG11c3QgYmUgbG93
IGF0IHRoaXMgdGltZS4KCQkgICBmaXJzdCwgZ2V0IHRoZSBuZXh0IGJpdCBmcm9tIGRhdGEgdmFs
dWUgKi8KCQlzZGEgPSAoZGF0YSAmICgxIDw8IGJpdHBvcykpID4+IGJpdHBvczsKCQlzZGFfc2xj
ID0gc2RhIDw8IDE7CgkJLyogcHV0IGRhdGEgYml0IG9uIGJ1cyBhbmQgdGFrZSBjbG9jayBsb3cg
KGIwPTApICovCgkJSTJDX1BPS0UoYWRkciwgc2RhX3NsYyk7CgkJLyogc2VuZCB0aGUgZ28gc2ln
bmFsIHRvIGluaXRpYXRlIGNsb2NrIHB1bHNlICovCgkJSTJDX1BPS0UoYWRkciwgc2RhX3NsYyAr
IDQpOwoJCWlmIChJMkNfQlVTWShhZGRyKSkgewoJCQl0aW1lb3V0ID0gamlmZmllcyArIEhaIC8g
MTA7CgkJCXdoaWxlIChJMkNfQlVTWShhZGRyKSkgewkvKiBzcGluICovCgkJCQlpZiAoamlmZmll
cyA+IHRpbWVvdXQpIHsKCQkJCQlocnRfcHJpbnRrKCJJMkMgYnVzIHRpbWVvdXRcbiIpOwoJCQkJ
CWdvdG8gZmFpbHVyZTsKCQkJCX0KCQkJfQoJCX0KCX0KCUkyQ18wMShhZGRyKTsKCS8qIGxlYXZl
IHRoZSBzZGEgbGluZSBhdCBoaWdoIGltcGVkYW5jZQoJICAgKGJpdDA9MCBjbG9jaywgYml0MT0x
IGRhdGEvaGlnaCBpbXBlZGFuY2UpICovCgoJLyogY2hlY2sgZm9yIGFjayBmcm9tIEEvRCBhZnRl
ciBlYWNoIGJ5dGUgaGFzIGJlZW4gc2VudCAqLwoJSTJDXzExKGFkZHIpOwoJaWYgKChJMkNfUEVF
SyhhZGRyKSAmIDIpID09IDIpIHsKCQkvKiBlcnJvcjogbm8gQUNLIGFmdGVyIERhdGEgQnl0ZSB0
cmFuc21pc2lvbiAqLwoJCWhydF9wcmludGsoIk5vIEkyQyBBQ0tcbiIpOwoJCWdvdG8gZmFpbHVy
ZTsKCX0KCUkyQ18wMShhZGRyKTsJCS8qIHJldHVybiB0aGUgYnVzIHRvIGhpZ2ggaW1wZWRpYW5j
ZSAqLwoJcmV0dXJuIDA7CiAgICAgIGZhaWx1cmU6CgkvKiBUaGlzIGlzIG9ubHkgYSBnZXN0dXJl
IHRvd2FyZCBjbGVhbmluZyB1cDsKCSAgIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSB3ZSBwcm9iYWJs
eSBoYXZlIGEgYnJva2VuCgkgICBkZXZpY2UuICovCglJMkNfMDEoYWRkcik7CQkvKiByZXR1cm4g
dGhlIGJ1cyB0byBoaWdoIGltcGVkYW5jZSAqLwoJaTJjX3N0b3AoYWRkcik7CglyZXR1cm4gLTE7
Cn0KCi8qKgogKiBpMmNfaW5pdCAtIHNldCBpbml0aWFsIHJlZ2lzdGVyIHZhbHVlcyBmb3IgdGhl
IAogKiAgU0FBNzExMCBBL0QgY29udmVydGVyIChkaWdpdGl6ZXIpLCB3aGljaCBpcyBvbiBhbgog
KiAgSTJDIGJ1cy4gSWYgYW4gYXJyYXkgb2YgdmFsdWVzIGlzIGdpdmVuLCB1c2UgaXQ7CiAqICBv
dGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCBzZXQgb2YgdmFsdWVzLiBTZWUgdGhlCiAqICBjb21t
ZW50IG9uIHRoZSBkZWNsYXJhdGlvbiBvZiBzYWE3MTEwX2RlZmF1bHRfaW5pdF9yZWdzCiAqICBm
b3IgdGhlIGZvcm1hdCBvZiB0aGUgYXJndW1lbnQuCiAqICBUaGUgcGFyYW1ldGVyIGFkZHIgaXMg
dGhlIG1hcHBlZCBJL08gYmFzZSBhZGRyZXNzIG9mIGEgZGV2aWNlLgogKgogKiAgTkIgdGhhdCB0
aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYXJyYXkgc2hvdWxkIGJlIHRoZSBzaXplIG9mIHRoZSBhcnJh
eS4KICovCnN0YXRpYyBpbnQgaTJjX2luaXQoc3RydWN0IGhydCAqaHJ0ZGV2LCB1bnNpZ25lZCBs
b25nIGFkZHIsCgkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluaXRfcmVncykKewoJaW50IGks
IGxhc3RyZWcsIGxlbjsKCglpZiAoIWluaXRfcmVncykKCQlpbml0X3JlZ3MgPSBzYWE3MTEwX2Rl
ZmF1bHRfaW5pdF9yZWdzOwoKCS8qIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5IGlzIGNvbnRhaW5l
ZCBpbiB0aGUgZmlyc3QgYnl0ZSAqLwoJbGVuID0gaW5pdF9yZWdzWzBdOwoJaW5pdF9yZWdzKys7
CgoJaTJjX3N0YXJ0KGFkZHIpOwoJLyogVGVsbCB0aGUgZGlnaXRpemVyIHRoYXQgaXQgaGFzIGJl
ZW4gc2VsZWN0ZWQKCSAgIGZvciBkYXRhIHRyYW5zbWlzc2lvbi4gKi8KCWlmIChpMmNfc2VuZF9i
eXRlKGFkZHIsIEhSVF9BRF9ERVZJQ0VfSUQpKQoJCXJldHVybiAtMTsKCgkvKiBTZXQgdGhlIHNl
bGVjdGVkIGRldmljZSdzIGludGVybmFsIGFkZHJlc3MgcmVnaXN0ZXIKCSAgIHBvaW50ZXIgdG8g
emVyby4gIEVhY2ggc3Vic2VxdWVudCBkYXRhIHdyaXRlIHdpbGwKCSAgIGF1dG9pbmNyZW1lbnQg
dGhlIGRldmljZSdzIGFkZHJlc3MgcmVnaXN0ZXIgcG9pbnRlci4gKi8KCWlmIChpMmNfc2VuZF9i
eXRlKGFkZHIsIDApKQoJCXJldHVybiAtMTsKCWxhc3RyZWcgPSAwOwoKCWZvciAoaSA9IDA7IGkg
PCBsZW47IGkgKz0gMikgewoJCWlmIChpbml0X3JlZ3NbaV0gPiBIUlRfTlVNUkVHUykgewoJCQlo
cnRfcHJpbnRrKCJSZWdpc3RlciBudW1iZXIgMHgleCBvdXQgb2YgcmFuZ2UhXG4iLAoJCQkJICAg
aW5pdF9yZWdzW2ldKTsKCQkJcmV0dXJuIC0xOwoJCX0KCQlpZiAoaW5pdF9yZWdzW2ldICE9IGxh
c3RyZWcpIHsKCQkJLyogdGhlcmUgaXMgYSBnYXAgaW4gdGhlIHNlcXVlbmNlICovCgkJCWkyY19z
dG9wKGFkZHIpOwoJCQlpMmNfc3RhcnQoYWRkcik7CgkJCS8qIHJlc2VuZCBkZXZpY2UgYWRkcmVz
cyBieXRlICovCgkJCWlmIChpMmNfc2VuZF9ieXRlKGFkZHIsIEhSVF9BRF9ERVZJQ0VfSUQpKQoJ
CQkJcmV0dXJuIC0xOwoJCQlsYXN0cmVnID0gaW5pdF9yZWdzW2ldOwoKCQkJLyogc2VuZCBuZXcg
cmVnaXN0ZXIgYWRkcmVzcyBieXRlICovCgkJCWlmIChpMmNfc2VuZF9ieXRlKGFkZHIsIGluaXRf
cmVnc1tpXSkpCgkJCQlyZXR1cm4gLTE7CgkJfQoJCWxhc3RyZWcrKzsKCQkvKiBzZW5kIHJlZ2lz
dGVyIHZhbHVlICovCgkJaWYgKGkyY19zZW5kX2J5dGUoYWRkciwgaW5pdF9yZWdzW2kgKyAxXSkp
CgkJCXJldHVybiAtMTsKCgkJLyogS2VlcCB0cmFjayBvZiB0aGUgdmFsdWVzIGluIHRoZSByZWdp
c3RlcnMgKi8KCQlocnRkZXYtPnJlZ3ZhbHNbaW5pdF9yZWdzW2ldXSA9IGluaXRfcmVnc1tpICsg
MV07Cgl9CglpMmNfc3RvcChhZGRyKTsKCXJldHVybiAwOwp9CgovKioKICogaTJjX3NldF9yZWcg
LSBzZXQgYW4gSTJDIHJlZ2lzdGVyLCByZWcsIHRvIHZhbHVlIHZhbAogKi8KaW50IGkyY19zZXRf
cmVnKHN0cnVjdCBocnQgKmhydGRldiwgaW50IHJlZywgdW5zaWduZWQgY2hhciB2YWwpCnsKCXVu
c2lnbmVkIGxvbmcgYWRkciA9IGhydGRldi0+dmlydGFkZHI7CgoJaTJjX3N0YXJ0KGFkZHIpOwoJ
aTJjX3NlbmRfYnl0ZShhZGRyLCBIUlRfQURfREVWSUNFX0lEKTsKCWkyY19zZW5kX2J5dGUoYWRk
ciwgcmVnKTsKCWkyY19zZW5kX2J5dGUoYWRkciwgdmFsKTsKCWkyY19zdG9wKGFkZHIpOwoKCWhy
dGRldi0+cmVndmFsc1tyZWddID0gdmFsOwoKCXJldHVybiB2YWw7Cn0KCiNpZiBMSU5VWF9WRVJT
SU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQpFWFBPUlRfTk9fU1lNQk9MUzsKI2Vu
ZGlmCg==

--=_c8a30f2e9f29f826029cdf
Content-Type: text/plain; name="hrt.color.h"; charset="ISO-8859-1"
Content-Disposition: attachment; filename="hrt.color.h"
Content-Transfer-Encoding: base64

LyoKICogRmlsZSBOYW1lIDogaHJ0LmgKICogCiAqIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZv
ciB0aGUgSGlnaCBSZXNvbHV0aW9uIFRlY2hub2xvZ2llcwogKiBQaXhlbHNtYXJ0IDUxMi04IGZy
YW1lIGdyYWJiZXIuCgogKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcywgY29uc3RhbnRz
LCBhbmQgaW9jdGwgbnVtYmVycyBpbgogKiB0aGUgZHJpdmVyIHRoYXQgYSB1c2VyIHByb2dyYW0g
bWlnaHQgd2lzaCB0byB1c2UuCgogKiAgICAgICAgIENvcHlyaWdodCAoQykgMjAwMywgRmxvcmlk
YSBTdGF0ZSBVbml2ZXJzaXR5CiAqCiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciAKICogdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAgYnkgdGhlIEZyZWUgU29mdC0g
CiAqIHdhcmUgRm91bmRhdGlvbiwgVmVyc2lvbiAyLiAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZQogKiB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSCBPVVQg
QU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZQogKiBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICogU2Vl
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgIG1vcmUgZGV0YWlscy4gWW91IHNo
b3VsZCBoYXZlCiAqIHJlY2VpdmVkICBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogKiBzb2Z0d2FyZTsgc2VlIGZpbGUgQ09QWUlO
Ry4gIElmIG5vdCwgd3JpdGUgdG8gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCiAqIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
Ki8KCi8qKgogKiBzdHJ1Y3Qgc3Vid2luZG93IC0gZGVzY3JpYmVzIGEgcmVnaW9uLW9mLWludGVy
ZXN0LCBpLmUuLAogKiAgYSBwYXJ0IG9mIHRoZSBmcmFtZQogKi8Kc3RydWN0IHN1YndpbmRvdyB7
CglpbnQgd2lkdGgsIGhlaWdodDsKCWludCBzdGFydHgsIHN0YXJ0eTsKfTsKCi8qKgogKiBzdHJ1
Y3QgaTJjX3JlZ3ZhbCAtIHRoaXMgaXMgZm9yIHRoZSBJMkMgcmVnaXN0ZXIgaW9jdGwgCiAqLwpz
dHJ1Y3QgaTJjX3JlZ3ZhbCB7CglpbnQgcmVnOyAvKiBSZWdpc3RlciBudW1iZXIgKi8KCXVuc2ln
bmVkIGNoYXIgdmFsOyAvKiBWYWx1ZSB0byBzZXQgaXQgdG8gKi8KfTsKCi8qKgogKiBDYXJkIHNw
ZWNpZmljIGNvbnN0YW50cwogKi8KI2RlZmluZSBIUlRfVkVORE9SX0lEICAgICAgICAgMHgwMDA0
CiNkZWZpbmUgSFJUX0RFVklDRV9JRF9HUkFZICAgIDB4MDQwNAojZGVmaW5lIEhSVF9ERVZJQ0Vf
SURfQ09MT1IgICAweDA0MDgKCiNkZWZpbmUgSFJUX0NPTlRST0xfUkVHICAgICAgIDB4MjAwMAoj
ZGVmaW5lIEhSVF9ZX0xPV19SRUcgICAgICAgICAweDIwMDIKI2RlZmluZSBIUlRfWV9ISUdIX1JF
RyAgICAgICAgMHgyMDAzCgovKiBUaGUgdW5pcXVlIEkyQyBidXMgYWRkcmVzcyBvZiB0aGUgU0FB
NzExMCAoQS9EKSBkZXZpY2UgKi8KI2RlZmluZSBIUlRfQURfREVWSUNFX0lEICgxMjgrMTYrOCs0
KQoKLyogTlRTQyA4LWJpdCBncmV5c2NhbGUgKi8KI2RlZmluZSBIUlRfV0lEVEggICAgICAgICAg
ICAgNTEyCiNkZWZpbmUgSFJUX0hFSUdIVCAgICAgICAgICAgIDQ4MAojZGVmaW5lIEhSVF9CWVRF
U19QRVJfUElYRUwgICAyCiNkZWZpbmUgSFJUX0JZVEVTX1BFUl9MSU5FICAgIChIUlRfV0lEVEgg
KiBIUlRfQllURVNfUEVSX1BJWEVMKQojZGVmaW5lIEhSVF9GUkFNRVNJWkUgICAgICAgICAoSFJU
X1dJRFRIICogSFJUX0hFSUdIVCAqIEhSVF9CWVRFU19QRVJfUElYRUwpCgovKiBOdW1iZXIgb2Yg
Ynl0ZXMgb2YgdGhlIGRldmljZSdzIG1lbW9yeSB0aGF0IHdlIGlvcmVtYXAoKSAqLwojZGVmaW5l
IEJZVEVTX05FRURFRCAgICAgICAgICAweDQwMDAKCi8qCiAqIFRoZSBjb21tYW5kcyBmb3IgZnJl
ZXplLCBsaXZlLCBldGMuCiAqLwojZGVmaW5lIEhSVF9GSUVMRF9NQVNLICAgICAgICAweDAxCiNk
ZWZpbmUgSFJUX0xJVkVfQ01EICAgICAgICAgIDB4OTEKI2RlZmluZSBIUlRfRlJFRVpFX0lNTV9D
TUQgICAgMHg1QgojZGVmaW5lIEhSVF9GUkVFWkVfTkVYVF9DTUQgICAweDk5CgovKiBBL0QgcmVn
aXN0ZXJzICovCiNkZWZpbmUgSFJUX0JSSUdIVE5FU1NfUkVHICAgIDB4MTkKI2RlZmluZSBIUlRf
Q09OVFJBU1RfUkVHICAgICAgMHgxMwoKI2RlZmluZSBIUlRfVklEX1RZUEUgICAgICAgICAoVklE
X1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX01PTk9DSFJPTUUpCgovKiBNYXhpbXVtIG51bWJlciBv
ZiBidWZmZXJzIGZvciBzdHJlYW1pbmcgKi8KI2RlZmluZSBNQVhfQ0FQVFVSRV9CVUZGRVJTICAx
NgoKLyogUHJpdmF0ZSBpb2N0bCdzICovCiNkZWZpbmUgSU9DX0hSVF9TRVRfSTJDUkVHICAgX0lP
VygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDMwLCBzdHJ1Y3QgaTJjX3JlZ3ZhbCkKI2RlZmlu
ZSBJT0NfSFJUX0dFVF9JMkNSRUcgICBfSU9SKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgMzEs
IHN0cnVjdCBpMmNfcmVndmFsKQojZGVmaW5lIElPQ19IUlRfU0VUX1dJRFRIICAgIF9JT1coJ3Yn
LCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyAzMiwgaW50KQojZGVmaW5lIElPQ19IUlRfU0VUX0hFSUdI
VCAgIF9JT1coJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyAzMywgaW50KQojZGVmaW5lIElPQ19I
UlRfU0VUX1NUQVJUWCAgIF9JT1coJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyAzNCwgaW50KQoj
ZGVmaW5lIElPQ19IUlRfU0VUX1NUQVJUWSAgIF9JT1coJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUg
KyAzNSwgaW50KQojZGVmaW5lIElPQ19IUlRfU0VUX1JPSSAgICAgIF9JT1coJ3YnLCBCQVNFX1ZJ
RElPQ1BSSVZBVEUgKyAzNiwgc3RydWN0IHN1YndpbmRvdykKI2RlZmluZSBJT0NfSFJUX0dFVF9S
T0kgICAgICBfSU9SKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgMzcsIHN0cnVjdCBzdWJ3aW5k
b3cpCiNkZWZpbmUgSU9DX0hSVF9TRVRfSTJDUkVHUyAgX0lPVygndicsIEJBU0VfVklESU9DUFJJ
VkFURSArIDM4LCBjaGFyICopCg==

--=_c8a30f2e9f29f826029cdf--

