Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Apr 2005 12:55:45 -0500
From:      "Conrad J. Sabatier" <conrads@cox.net>
To:        Andre Guibert de Bruet <andy@siliconlandmark.com>
Cc:        Mathew Kanner <mat@cnd.mcgill.ca>
Subject:   Latest MIDI patchset from Mat
Message-ID:  <20050425125545.0dcbf4ec@dolphin.local.net>
In-Reply-To: <20050423161839.P68772@lexi.siliconlandmark.com>
References:  <20050418232455.2d530890@dolphin.local.net> <5265.1113888748@critter.freebsd.dk> <20050419130048.6e545269@dolphin.local.net> <20050423023605.A68772@lexi.siliconlandmark.com> <20050423135112.63c74617@dolphin.local.net> <20050423161839.P68772@lexi.siliconlandmark.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Sat, 23 Apr 2005 16:40:44 -0400 (EDT), Andre Guibert de Bruet
<andy@siliconlandmark.com> wrote:
>
> I have an emu10k1, so I guess I could give it a spin. Any ideas for
> the  whereabout of these patches?
> 
> My synth is an S08.

I've attached the latest patchset Mat sent me.  They *should* apply
cleanly to STABLE, but will yield a couple of failed hunks when applied
to CURRENT, which are quite simple to fix by hand.

Just do the following:

cd /usr/src
patch -p0 < /path/to/midi2-RELENG_5-mar05.diff

Let us know if you need any help.  And also, do be sure to let us know
if you're successful with these!  :-)

Thanks!

-- 
Conrad J. Sabatier <conrads@cox.net> -- "In Unix veritas"

--Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY
Content-Type: application/octet-stream; name=midi2-RELENG_5-mar05.diff
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=midi2-RELENG_5-mar05.diff

SW5kZXg6IHN5cy9jb25mL2ttb2QubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9z
cmMvc3lzL2NvbmYva21vZC5tayx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjYuMi4xCmRpZmYg
LXUgLXIxLjE2Ni4yLjEga21vZC5tawotLS0gc3lzL2NvbmYva21vZC5tawkyNSBGZWIgMjAwNSAy
MTo0NTo1NSAtMDAwMAkxLjE2Ni4yLjEKKysrIHN5cy9jb25mL2ttb2QubWsJNSBNYXIgMjAwNSAx
NjoyOToxNCAtMDAwMApAQCAtMjk5LDcgKzI5OSw4IEBACiAJZGV2L3VzYi91c2JfaWYubSBpc2Ev
aXNhX2lmLm0gXAogCWtlcm4vYnVzX2lmLm0ga2Vybi9jcHVmcmVxX2lmLm0ga2Vybi9kZXZpY2Vf
aWYubSBcCiAJbGlia2Vybi9pY29udl9jb252ZXJ0ZXJfaWYubSBvcGVuY3J5cHRvL2NyeXB0b19p
Zi5tIFwKLQlwYzk4L3BjOTgvY2FuYnVzX2lmLm0gcGNpL2FncF9pZi5tIHNwYXJjNjQvcGNpL29m
d19wY2lfaWYubQorCXBjOTgvcGM5OC9jYW5idXNfaWYubSBwY2kvYWdwX2lmLm0gc3BhcmM2NC9w
Y2kvb2Z3X3BjaV9pZi5tIFwKKyAJZGV2L3NvdW5kL21pZGkvbXB1X2lmLm0gZGV2L3NvdW5kL21p
ZGkvbXB1Zm9pX2lmLm0gZGV2L3NvdW5kL21pZGkvc3ludGhfaWYubQogCiAuZm9yIF9zcmNzcmMg
aW4gJHtNRklMRVN9CiAuZm9yIF9leHQgaW4gYyBoCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkv
bWlkaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9taWRpLmMKZGlm
ZiAtTiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaS5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9zb3VuZC9taWRpL21pZGkuYwk1IE1hciAyMDA1IDE3
OjA3OjM5IC0wMDAwCkBAIC0wLDAgKzEsMTUxNCBAQAorLyoKKyAqIChjKSAyMDAzIE1hdGhldyBL
YW5uZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZl
ZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICog
YnkgTGVubmFydCBBdWd1c3Rzc29uIChhdWd1c3Rzc0BuZXRic2Qub3JnKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug
b2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93
bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl
bG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBj
b250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRh
dGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElO
Qy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworIC8qCisgICogUGFydHMgb2YgdGhpcyBmaWxlIHN0YXJ0ZWQgb3V0IGFzIE5l
dEJTRDogbWlkaS5jIDEuMzEKKyAgKiBUaGV5IGFyZSBtb3N0bHkgZ29uZS4gIFN0aWxsIHRoZSBt
b3N0IG9idmlvdXMgd2lsbCBiZSB0aGUgc3RhdGUKKyAgKiBtYWNoaW5lIG1pZGlfaW4KKyAgKi8K
KworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2luY2x1
ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9t
dXRleC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbHZhci5o
PgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKyNpbmNs
dWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lz
L21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5o
PgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy9wb2xs
Lmg+CisjaW5jbHVkZSA8c3lzL3NidWYuaD4KKyNpbmNsdWRlIDxzeXMva29iai5oPgorI2luY2x1
ZGUgPHN5cy9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGkuaD4KKyNp
bmNsdWRlICJtcHVfaWYuaCIKKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGlxLmg+Cisj
aW5jbHVkZSAic3ludGhfaWYuaCIKK01BTExPQ19ERUZJTkUoTV9NSURJLCAibWlkaSBidWZmZXJz
IiwgIk1pZGkgZGF0YSBhbGxvY2F0aW9uIGFyZWEiKTsKKworCisjZGVmaW5lIFBDTU1LTUlOT1Io
dSwgZCwgYykgKCgoKGMpICYgMHhmZikgPDwgMTYpIHwgKCgodSkgJiAweDBmKSA8PCA0KSB8ICgo
ZCkgJiAweDBmKSkKKyNkZWZpbmUgTUlESU1LTUlOT1IodSwgZCwgYykgUENNTUtNSU5PUih1LCBk
LCBjKQorCisjZGVmaW5lIE1JRElfREVWX1JBVwkyCisjZGVmaW5lIE1JRElfREVWX01JRElDVEwg
MTIKKworZW51bSBtaWRpX3N0YXRlcyB7CisJTUlESV9JTl9TVEFSVCwgTUlESV9JTl9TWVNFWCwg
TUlESV9JTl9EQVRBCit9OworCisvKgorICogVGhlIE1QVSBpbnRlcmZhY2UgY3VycmVudCBoYXMg
aW5pdCgpIHVuaW5pdCgpIGlucXNpemUoKCBvdXRxc2l6ZSgpCisgKiBjYWxsYmFjaygpIDogZmlk
ZGxlIHdpdGggdGhlIHR4fHJ4IHN0YXR1cy4KKyAqLworCisjaW5jbHVkZSAibXB1X2lmLmgiCisK
Ky8qCisgKiAvZGV2L3JtaWRpCVN0cnVjdHVyZSBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUg
TUlESV9OQU1FTEVOICAgMTYKK3N0cnVjdCBzbmRfbWlkaSB7CisJS09CSl9GSUVMRFM7CisJc3Ry
dWN0IG10eCAgICAgIGxvY2s7CS8qIFByb3RlY3RzIGFsbCBidXQgcXVldWVzICovCisJdm9pZCAg
ICAgICAgICAgKmNvb2tpZTsKKworCWludCAgICAgICAgICAgICB1bml0OwkvKiBTaG91bGQgb25s
eSBiZSB1c2VkIGluIG1pZGlzdGF0ICovCisJaW50ICAgICAgICAgICAgIGNoYW5uZWw7LyogU2hv
dWxkIG9ubHkgYmUgdXNlZCBpbiBtaWRpc3RhdCAqLworCisJaW50ICAgICAgICAgICAgIGJ1c3k7
CisJaW50ICAgICAgICAgICAgIGZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJY2hhciAgICAgICAg
ICAgIG5hbWVbTUlESV9OQU1FTEVOXTsKKwlzdHJ1Y3QgbXR4ICAgICAgcWxvY2s7CS8qIFByb3Rl
Y3RzIGlucSwgb3V0cSBhbmQgZmxhZ3MgKi8KKwkgICAgICAgICAgICAgICAgTUlESVFfSEVBRCgs
IGNoYXIpaW5xLCBvdXRxOworCWludCAgICAgICAgICAgICByY2hhbiwgd2NoYW47CisJc3RydWN0
IHNlbGluZm8gIHJzZWwsIHdzZWw7CisJaW50ICAgICAgICAgICAgIGhpd2F0OwkvKiBRTEVOKG91
dHEpPkhpZ2gtd2F0ZXIgLT4gZGlzYWJsZSB3cml0ZXMKKwkJICAgICAqIGZyb20gdXNlcmxhbmQg
Ki8KKwllbnVtIG1pZGlfc3RhdGVzIGlucV9zdGF0ZTsKKwlpbnQgICAgICAgICAgICAgaW5xX3N0
YXR1cywgaW5xX2xlZnQ7CS8qIFZhcmlhYmxlcyBmb3IgdGhlIHN0YXRlCisJCQkgICAgICogbWFj
aGluZSBpbiBNaWRpX2luLCB0aGlzCisJCQkgICAgICogaXMgdG8gcHJvdmlkZSB0aGF0IHNpZ25h
bHMKKwkJCSAgICAgKiBvbmx5IGdldCBpc3N1ZWQgb25seQorCQkJICAgICAqIGNvbXBsZXRlIGNv
bW1hbmQgcGFja2V0cy4gKi8KKwlzdHJ1Y3QgcHJvYyAgICAqYXN5bmM7CisJc3RydWN0IGNkZXYg
ICAgKmRldjsKKwlzdHJ1Y3Qgc3ludGhfbWlkaSAqc3ludGg7CisJaW50CQlzeW50aF9mbGFnczsK
KwlUQUlMUV9FTlRSWShzbmRfbWlkaSkgbGluazsKK307CisKK3N0cnVjdCBzeW50aF9taWRpIHsK
KyAgICBLT0JKX0ZJRUxEUzsKKyAgICBzdHJ1Y3Qgc25kX21pZGkgKm07Cit9OworCitzdGF0aWMg
c3ludGhfb3Blbl90IG1pZGlzeW50aF9vcGVuOworc3RhdGljIHN5bnRoX2Nsb3NlX3QgbWlkaXN5
bnRoX2Nsb3NlOworc3RhdGljIHN5bnRoX3dyaXRlcmF3X3QgbWlkaXN5bnRoX3dyaXRlcmF3Owor
c3RhdGljIHN5bnRoX2tpbGxub3RlX3QgbWlkaXN5bnRoX2tpbGxub3RlOworc3RhdGljIHN5bnRo
X3N0YXJ0bm90ZV90IG1pZGlzeW50aF9zdGFydG5vdGU7CitzdGF0aWMgc3ludGhfc2V0aW5zdHJf
dCBtaWRpc3ludGhfc2V0aW5zdHI7CitzdGF0aWMgc3ludGhfYWxsb2NfdCBtaWRpc3ludGhfYWxs
b2M7CitzdGF0aWMgc3ludGhfY29udHJvbGxlcl90IG1pZGlzeW50aF9jb250cm9sbGVyOworc3Rh
dGljIHN5bnRoX2JlbmRlcl90IG1pZGlzeW50aF9iZW5kZXI7CisKKworc3RhdGljIGtvYmpfbWV0
aG9kX3QgbWlkaXN5bnRoX21ldGhvZHNbXSA9IHsKKyAgICAgICAgICAgIEtPQkpNRVRIT0Qoc3lu
dGhfb3BlbixtaWRpc3ludGhfb3BlbiksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX2Ns
b3NlLG1pZGlzeW50aF9jbG9zZSksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX3dyaXRl
cmF3LG1pZGlzeW50aF93cml0ZXJhdyksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRoX3Nl
dGluc3RyLG1pZGlzeW50aF9zZXRpbnN0ciksCisgICAgICAgICAgICBLT0JKTUVUSE9EKHN5bnRo
X3N0YXJ0bm90ZSxtaWRpc3ludGhfc3RhcnRub3RlKSwKKyAgICAgICAgICAgIEtPQkpNRVRIT0Qo
c3ludGhfa2lsbG5vdGUsbWlkaXN5bnRoX2tpbGxub3RlKSwKKwkgICAgS09CSk1FVEhPRChzeW50
aF9hbGxvYywgbWlkaXN5bnRoX2FsbG9jKSwKKwkgICAgS09CSk1FVEhPRChzeW50aF9jb250cm9s
bGVyLCBtaWRpc3ludGhfY29udHJvbGxlciksCisJICAgIEtPQkpNRVRIT0Qoc3ludGhfYmVuZGVy
LCBtaWRpc3ludGhfYmVuZGVyKSwKKyAgICAgICAgICAgIHsgMCwgMCB9Cit9OworCitERUZJTkVf
Q0xBU1MobWlkaXN5bnRoLCBtaWRpc3ludGhfbWV0aG9kcywgMCk7CisKKy8qCisgKiBNb2R1bGUg
RXhwb3J0cyAmIEludGVyZmFjZQorICogCisgKiBzdHJ1Y3QgbWlkaV9jaGFuICptaWRpX2luaXQo
TVBVX0NMQVNTIGNscywgaW50IHVuaXQsIGludCBjaGFuKSBpbnQKKyAqIG1pZGlfdW5pbml0KHN0
cnVjdCBzbmRfbWlkaSAqKSAwID09IG5vIGVycm9yIEVCVVNZIG9yIG90aGVyIGVycm9yIGludAor
ICogTWlkaV9pbihzdHJ1Y3QgbWlkaV9jaGFuICosIGNoYXIgKmJ1ZiwgaW50IGNvdW50KSBpbnQg
TWlkaV9vdXQoc3RydWN0CisgKiBtaWRpX2NoYW4gKiwgY2hhciAqYnVmLCBpbnQgY291bnQpCisg
KiAKKyAqIG1pZGlfe2luLG91dH0gcmV0dXJuIGFjdHVhbCBzaXplIHRyYW5zZmVyZWQKKyAqIAor
ICovCisKKworLyoKKyAqIG1pZGlfZGV2cyB0YWlscSwgaG9sZGVyIG9mIGFsbCBybWlkaSBpbnN0
YW5jZXMgcHJvdGVjdGVkIGJ5IG1pZGlzdGF0X2xvY2sKKyAqLworCitUQUlMUV9IRUFEKCwgc25k
X21pZGkpIG1pZGlfZGV2czsKKworLyoKKyAqIC9kZXYvbWlkaXN0YXQgdmFyaWFibGVzIGFuZCBk
ZWNsYXJhdGlvbnMsIHByb3RlY3RlZCBieSBtaWRpc3RhdF9sb2NrCisgKi8KKworc3RhdGljIHN0
cnVjdCBtdHggbWlkaXN0YXRfbG9jazsKK3N0YXRpYyBpbnQgICAgICBtaWRpc3RhdF9pc29wZW4g
PSAwOworc3RhdGljIHN0cnVjdCBzYnVmIG1pZGlzdGF0X3NidWY7CitzdGF0aWMgaW50ICAgICAg
bWlkaXN0YXRfYnVmcHRyOworc3RhdGljIHN0cnVjdCBjZGV2ICptaWRpc3RhdF9kZXY7CisKKy8q
CisgKiAvZGV2L21pZGlzdGF0CWRldl90IGRlY2xhcmF0aW9ucworICovCisKK3N0YXRpYyBkX29w
ZW5fdCBtaWRpc3RhdF9vcGVuOworc3RhdGljIGRfY2xvc2VfdCBtaWRpc3RhdF9jbG9zZTsKK3N0
YXRpYyBkX3JlYWRfdCBtaWRpc3RhdF9yZWFkOworCisjZGVmaW5lIE1JRElfTUFKT1IgMzAKKwor
c3RhdGljIHN0cnVjdCBjZGV2c3cgbWlkaXN0YXRfY2RldnN3ID0geworCS5kX3ZlcnNpb24gPSBE
X1ZFUlNJT04sCisJLmRfb3BlbiA9IG1pZGlzdGF0X29wZW4sCisJLmRfY2xvc2UgPSBtaWRpc3Rh
dF9jbG9zZSwKKwkuZF9yZWFkID0gbWlkaXN0YXRfcmVhZCwKKwkuZF9uYW1lID0gIm1pZGlzdGF0
IiwKKwkuZF9tYWogPSBNSURJX01BSk9SLAorfTsKKworCisvKgorICogL2Rldi9ybWlkaSBkZXZf
dCBkZWNsYXJhdGlvbnMsIHN0cnVjdCB2YXJpYWJsZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5Cisg
KiBsb2NrcyBjb250YWluZWQgd2l0aGluIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIGRf
b3Blbl90IG1pZGlfb3BlbjsKK3N0YXRpYyBkX2Nsb3NlX3QgbWlkaV9jbG9zZTsKK3N0YXRpYyBk
X2lvY3RsX3QgbWlkaV9pb2N0bDsKK3N0YXRpYyBkX3JlYWRfdCBtaWRpX3JlYWQ7CitzdGF0aWMg
ZF93cml0ZV90IG1pZGlfd3JpdGU7CitzdGF0aWMgZF9wb2xsX3QgbWlkaV9wb2xsOworCitzdGF0
aWMgc3RydWN0IGNkZXZzdyBtaWRpX2NkZXZzdyA9IHsKKwkuZF92ZXJzaW9uID0gRF9WRVJTSU9O
LAorCS5kX29wZW4gPSBtaWRpX29wZW4sCisJLmRfY2xvc2UgPSBtaWRpX2Nsb3NlLAorCS5kX3Jl
YWQgPSBtaWRpX3JlYWQsCisJLmRfd3JpdGUgPSBtaWRpX3dyaXRlLAorCS5kX2lvY3RsID0gbWlk
aV9pb2N0bCwKKwkuZF9wb2xsID0gbWlkaV9wb2xsLAorCS5kX25hbWUgPSAicm1pZGkiLAorCS5k
X21haiA9IE1JRElfTUFKT1IsCit9OworCisvKgorICogUHJvdG90eXBlcyBvZiBsaWJyYXJ5IGZ1
bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgICAgICBtaWRpX2Rlc3Ryb3koc3RydWN0IHNuZF9t
aWRpICosIGludCk7CitzdGF0aWMgaW50ICAgICAgbWlkaXN0YXRfcHJlcGFyZShzdHJ1Y3Qgc2J1
ZiAqIHMpOworc3RhdGljIGludCAgICAgIG1pZGlfbG9hZCh2b2lkKTsKK3N0YXRpYyBpbnQgICAg
ICBtaWRpX3VubG9hZCh2b2lkKTsKKworLyoKKyAqIE1pc2MgZGVjbHIuCisgKi8KK1NZU0NUTF9O
T0RFKF9odywgT0lEX0FVVE8sIG1pZGksIENUTEZMQUdfUkQsIDAsICJNaWRpIGRyaXZlciIpOwor
U1lTQ1RMX05PREUoX2h3X21pZGksIE9JRF9BVVRPLCBzdGF0LCBDVExGTEFHX1JELCAwLCAiU3Rh
dHVzIGRldmljZSIpOworCitpbnQgICAgICAgICAgICAgbWlkaV9kZWJ1ZzsKK1NZU0NUTF9JTlQo
X2h3X21pZGksIE9JRF9BVVRPLCBkZWJ1ZywgQ1RMRkxBR19SVywgJm1pZGlfZGVidWcsIDAsICIi
KTsKKworaW50ICAgICAgICAgICAgIG1pZGlfZHVtcHJhdzsKK1NZU0NUTF9JTlQoX2h3X21pZGks
IE9JRF9BVVRPLCBkdW1wcmF3LCBDVExGTEFHX1JXLCAmbWlkaV9kdW1wcmF3LCAwLCAiIik7CisK
K2ludCAgICAgICAgICAgICBtaWRpX2luc3Ryb2ZmOworU1lTQ1RMX0lOVChfaHdfbWlkaSwgT0lE
X0FVVE8sIGluc3Ryb2ZmLCBDVExGTEFHX1JXLCAmbWlkaV9pbnN0cm9mZiwgMCwgIiIpOworCitp
bnQgICAgICAgICAgICAgbWlkaXN0YXRfdmVyYm9zZTsKK1NZU0NUTF9JTlQoX2h3X21pZGlfc3Rh
dCwgT0lEX0FVVE8sIHZlcmJvc2UsIENUTEZMQUdfUlcsIAorCSZtaWRpc3RhdF92ZXJib3NlLCAw
LCAiIik7CisKKyNkZWZpbmUgTUlESV9ERUJVRyhsLGEpCWlmKG1pZGlfZGVidWc+PWwpIGEKKy8q
CisgKiBDT0RFIFNUQVJUCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyIGEgbmV3IHJtaWRpIGRldmlj
ZS4gY2xzIG1pZGlfaWYgaW50ZXJmYWNlIHVuaXQgPT0gMCBtZWFucworICogYXV0by1hc3NpZ24g
bmV3IHVuaXQgbnVtYmVyIHVuaXQgIT0gMCBhbHJlYWR5IGFzc2lnbmVkIGEgdW5pdCBudW1iZXIs
IGVnLgorICogbm90IHRoZSBmaXJzdCBjaGFubmVsIHByb3ZpZGVkIGJ5IHRoaXMgZGV2aWNlLiBj
aGFubmVsLAlzdWItdW5pdAorICogY29va2llIGlzIHBhc3NlZCBiYWNrIG9uIE1QVSBjYWxscyBU
eXBpY2FsIGRldmljZSBkcml2ZXJzIHdpbGwgY2FsbCB3aXRoCisgKiB1bml0PTAsIGNoYW5uZWw9
MS4uKG51bWJlciBvZiBjaGFubmVscykgYW5kIGNvb2tpZT1zb2Z0X2MgYW5kIHdvbid0IGNhcmUK
KyAqIHdoYXQgdW5pdCBudW1iZXIgaXMgdXNlZC4KKyAqIAorICogSXQgaXMgYW4gZXJyb3IgdG8g
Y2FsbCBtaWRpX2luaXQgd2l0aCBhbiBhbHJlYWR5IHVzZWQgdW5pdC9jaGFubmVsIGNvbWJvLgor
ICogCisgKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IKKyAqIAorICovCitzdHJ1Y3Qgc25kX21pZGkg
KgorbWlkaV9pbml0KGtvYmpfY2xhc3NfdCBjbHMsIGludCB1bml0LCBpbnQgY2hhbm5lbCwgdm9p
ZCAqY29va2llKQoreworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKwlpbnQgICAgICAgICAgICAgaTsK
KwlpbnQgICAgICAgICAgICAgaW5xc2l6ZSwgb3V0cXNpemU7CisJTUlESV9UWVBFICAgICAgKmJ1
ZjsKKworCU1JRElfREVCVUcoMSxwcmludGYoIm1pZGlpbml0OiB1bml0ICVkLyVkLlxuIiwgdW5p
dCwgY2hhbm5lbCkpOworCW10eF9sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwkvKgorCSAqIFByb3Rl
Y3QgYWdhaW5zdCBjYWxsIHdpdGggZXhpc3RpbmcgdW5pdC9jaGFubmVsIG9yIGF1dG8tYWxsb2Nh
dGUgYQorCSAqIG5ldyB1bml0IG51bWJlci4KKwkgKi8KKwlpID0gLTE7CisJVEFJTFFfRk9SRUFD
SChtLCAmbWlkaV9kZXZzLCBsaW5rKSB7CisJICAgIG10eF9sb2NrKCZtLT5sb2NrKTsKKwkgICAg
aWYgKHVuaXQgIT0gMCkgeworCSAgICBpZiAobS0+dW5pdCA9PSB1bml0ICYmIG0tPmNoYW5uZWwg
PT0gY2hhbm5lbCkgeworCSAgICAgICAgbXR4X3VubG9jaygmbS0+bG9jayk7CisJCWdvdG8gZXJy
MDsKKwkJfQorCSAgICB9IGVsc2UgeworCS8qCisJICogRmluZCBhIGJldHRlciB1bml0IG51bWJl
cgorCSAqLworCSAgICBpZiAobS0+dW5pdCA+IGkpCisJCWkgPSBtLT51bml0OworCSAgICB9CisJ
ICAgIG10eF91bmxvY2soJm0tPmxvY2spOworCX0KKworCWlmICh1bml0ID09IDApCisJICAgIHVu
aXQgPSBpICsgMTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpaW5pdCAjMjogdW5pdCAl
ZC8lZC5cbiIsIHVuaXQsIGNoYW5uZWwpKTsKKwltID0gbWFsbG9jKHNpemVvZigqbSksIE1fTUlE
SSwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChtID09IE5VTEwpCisJICAgIGdvdG8gZXJyMDsK
KworCW0tPnN5bnRoID0gbWFsbG9jKHNpemVvZigqbS0+c3ludGgpLCBNX01JREksIE1fTk9XQUlU
IHwgTV9aRVJPKTsKKwlrb2JqX2luaXQoKGtvYmpfdCltLT5zeW50aCwgJm1pZGlzeW50aF9jbGFz
cyk7CisJbS0+c3ludGgtPm0gPSBtOworCWtvYmpfaW5pdCgoa29ial90KW0sIGNscyk7CisJaW5x
c2l6ZSA9IE1QVV9JTlFTSVpFKG0sIGNvb2tpZSk7CisJb3V0cXNpemUgPSBNUFVfT1VUUVNJWkUo
bSwgY29va2llKTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpaW5pdCBxdWV1ZXMgJWQv
JWQuXG4iLCBpbnFzaXplLCBvdXRxc2l6ZSkpOworCWlmICghaW5xc2l6ZSAmJiAhb3V0cXNpemUp
CisJICAgIGdvdG8gZXJyMTsKKworCW10eF9pbml0KCZtLT5sb2NrLCAicmF3IG1pZGkiLCAwLCAw
KTsKKwltdHhfaW5pdCgmbS0+cWxvY2ssICJxIHJhdyBtaWRpIiwgMCwgMCk7CisKKwltdHhfbG9j
aygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKworCWlmIChpbnFzaXplKQorCSAg
ICBidWYgPSBtYWxsb2Moc2l6ZW9mKE1JRElfVFlQRSkgKiBpbnFzaXplLCBNX01JREksIE1fTk9X
QUlUKTsKKwllbHNlCisJICAgIGJ1ZiA9IE5VTEw7CisKKwlNSURJUV9JTklUKG0tPmlucSwgYnVm
LCBpbnFzaXplKTsKKworCWlmIChvdXRxc2l6ZSkKKwkgICAgYnVmID0gbWFsbG9jKHNpemVvZihN
SURJX1RZUEUpICogb3V0cXNpemUsIE1fTUlESSwgTV9OT1dBSVQpOworCWVsc2UKKwkgICAgYnVm
ID0gTlVMTDsKKwltLT5oaXdhdCA9IG91dHFzaXplIC8gMjsKKworCU1JRElRX0lOSVQobS0+b3V0
cSwgYnVmLCBvdXRxc2l6ZSk7CisKKwlpZiAoKGlucXNpemUgJiYgIU1JRElRX0JVRihtLT5pbnEp
KSB8fAorCSAgICAob3V0cXNpemUgJiYgIU1JRElRX0JVRihtLT5vdXRxKSkpCisJICAgIGdvdG8g
ZXJyMjsKKworCisJbS0+YnVzeSA9IDA7CisJbS0+ZmxhZ3MgPSAwOworCW0tPnVuaXQgPSB1bml0
OworCW0tPmNoYW5uZWwgPSBjaGFubmVsOworCW0tPmNvb2tpZSA9IGNvb2tpZTsKKworCWlmIChN
UFVfSU5JVChtLCBjb29raWUpKQorCSAgICBnb3RvIGVycjI7CisKKwltdHhfdW5sb2NrKCZtLT5s
b2NrKTsKKwltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisKKwlUQUlMUV9JTlNFUlRfVEFJTCgmbWlk
aV9kZXZzLCBtLCBsaW5rKTsKKworCW10eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCisJbS0+
ZGV2ID0gbWFrZV9kZXYoJm1pZGlfY2RldnN3LAorCQkJTUlESU1LTUlOT1IodW5pdCwgTUlESV9E
RVZfUkFXLCBjaGFubmVsKSwKKwkgICAgICAgICAJVUlEX1JPT1QsIEdJRF9XSEVFTCwgMDY2Niwg
Im1pZGklZC4lZCIsIHVuaXQsIGNoYW5uZWwpOworCW0tPmRldi0+c2lfZHJ2MSA9IG07CisKKwly
ZXR1cm4gbTsKKworZXJyMjoJbXR4X2Rlc3Ryb3koJm0tPnFsb2NrKTsKKwltdHhfZGVzdHJveSgm
bS0+bG9jayk7CisKKwlpZiAoTUlESVFfQlVGKG0tPmlucSkpCisJICAgIGZyZWUoTUlESVFfQlVG
KG0tPmlucSksIE1fTUlESSk7CisJaWYgKE1JRElRX0JVRihtLT5vdXRxKSkKKwkgICAgZnJlZShN
SURJUV9CVUYobS0+b3V0cSksIE1fTUlESSk7CitlcnIxOglmcmVlKG0sIE1fTUlESSk7CitlcnIw
OgltdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwlNSURJX0RFQlVHKDEsIHByaW50ZigibWlk
aV9pbml0IGVuZGVkIGluIGVycm9yXG4iKSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBt
aWRpX3VuaW5pdCBkb2VzIG5vdCBjYWxsIE1JRElfVU5JTklULCBhcyBzaW5jZSB0aGlzIGlzIHRo
ZSBpbXBsZW1lbnRvcnMKKyAqIGVudHJ5IHBvaW50LiBtaWRpX3VuaW50IGlmIGZhY3QsIGRvZXMg
bm90IHNlbmQgYW55IG1ldGhvZHMuIEEgY2FsbCB0bworICogbWlkaV91bmluaXQgaXMgYSBkZWZh
Y3RvIHByb21pc2UgdGhhdCB5b3Ugd29uJ3QgbWFuaXB1bGF0ZSBjaCBhbnltb3JlCisgKiAKKyAq
LworCitpbnQKK21pZGlfdW5pbml0KHN0cnVjdCBzbmRfbWlkaSAqIG0pCit7CisJaW50ICAgICAg
ICAgICAgIGVycjsKKworCWVyciA9IEVOWElPOworCW10eF9sb2NrKCZtaWRpc3RhdF9sb2NrKTsK
KwltdHhfbG9jaygmbS0+bG9jayk7CisJaWYgKG0tPmJ1c3kpIHsKKwkgICAgaWYgKCEobS0+cmNo
YW4gfHwgbS0+d2NoYW4pKQorCQlnb3RvIGVycjsKKworCSAgICBpZiAobS0+cmNoYW4pIHsKKwkJ
d2FrZXVwKCZtLT5yY2hhbik7CisJCW0tPnJjaGFuID0gMDsKKwkgICAgfQorCSAgICBpZiAobS0+
d2NoYW4pIHsKKwkJd2FrZXVwKCZtLT53Y2hhbik7CisJCW0tPndjaGFuID0gMDsKKwkgICAgfQor
CX0KKwllcnIgPSBtaWRpX2Rlc3Ryb3kobSwgMCk7CisJaWYoIWVycikKKwkJZ290byBleGl0Owor
CitlcnI6CW10eF91bmxvY2soJm0tPmxvY2spOworZXhpdDoJbXR4X3VubG9jaygmbWlkaXN0YXRf
bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIG1pZGlfaW46IHByb2Nlc3MgYWxsIGRh
dGEgdW50aWwgdGhlIHF1ZXVlIGlzIGZ1bGwsIHRoZW4gZGlzY2FyZHMgdGhlIHJlc3QuCisgKiBT
aW5jZSBtaWRpX2luIGlzIGEgc3RhdGUgbWFjaGluZSwgZGF0YSBkaXNjYXJkcyBjYW4gY2F1c2Ug
aXQgdG8gZ2V0IG91dCBvZgorICogd2hhY2suICBQcm9jZXNzIGFzIG11Y2ggYXMgcG9zc2libGUu
ICBJdCBjYWxscywgd2FrZXVwLCBzZWxub3RpZnkgYW5kCisgKiBwc2lnbmFsIGF0IG1vc3Qgb25j
ZS4KKyAqLworCisjaWYgbm90ZGVmCitzdGF0aWMgaW50ICAgICAgbWlkaV9sZW5ndGhzW10gPSB7
MiwgMiwgMiwgMiwgMSwgMSwgMiwgMH07CisjZW5kaWYgLyogbm90ZGVmICovCisvKiBOdW1iZXIg
b2YgYnl0ZXMgaW4gYSBNSURJIGNvbW1hbmQgKi8KKyNkZWZpbmUgTUlESV9MRU5HVEgoZCkgKG1p
ZGlfbGVuZ3Roc1soKGQpID4+IDQpICYgN10pCisjZGVmaW5lIE1JRElfQUNLCTB4ZmUKKyNkZWZp
bmUgTUlESV9JU19TVEFUVVMoZCkgKChkKSA+PSAweDgwKQorI2RlZmluZSBNSURJX0lTX0NPTU1P
TihkKSAoKGQpID49IDB4ZjApCisKKyNkZWZpbmUgTUlESV9TWVNFWF9TVEFSVAkweEYwCisjZGVm
aW5lIE1JRElfU1lTRVhfRU5ECSAgICAweEY3CisKKworaW50CittaWRpX2luKHN0cnVjdCBzbmRf
bWlkaSAqIG0sIE1JRElfVFlQRSAqIGJ1ZiwgaW50IHNpemUpCit7CisJLyogaW50ICAgICAgICAg
ICAgIGksIHNpZywgZW5xOyAqLworCWludCAgICAgICAgICAgICB1c2VkOworCS8qIE1JRElfVFlQ
RSAgICAgICBkYXRhOyAqLworCU1JRElfREVCVUcoNSwgcHJpbnRmKCJtaWRpX2luOiBtPSVwIHNp
emU9JWRcbiIsIG0sIHNpemUpKTsKKworLyoKKyAqIFhYWDogbG9ja2luZyBmbHViCisgKi8KKwlp
ZiAoIShtLT5mbGFncyAmIE1fUlgpKQorCSAgICByZXR1cm4gc2l6ZTsKKworCXVzZWQgPSAwOwor
CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKyNpZiAwCisJLyoKKwkgKiBEb24ndCBib3RoZXIgcXVl
dWluZyBpZiBub3QgaW4gcmVhZCBtb2RlLiAgRGlzY2FyZCBldmVyeXRoaW5nIGFuZAorCSAqIHJl
dHVybiBzaXplIHNvIHRoZSBjYWxsZXIgZG9lc24ndCBmcmVhayBvdXQuCisJICovCisKKwlpZiAo
IShtLT5mbGFncyAmIE1fUlgpKQorCSAgICByZXR1cm4gc2l6ZTsKKworCWZvciAoaSA9IHNpZyA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKworCSAgICBkYXRhID0gYnVmW2ldOworCSAgICBlbnEgPSAw
OworCSAgICBpZiAoZGF0YSA9PSBNSURJX0FDSykKKwkJY29udGludWU7CisKKwkgICAgc3dpdGNo
IChtLT5pbnFfc3RhdGUpIHsKKwkgICAgY2FzZSBNSURJX0lOX1NUQVJUOgorCQlpZiAoTUlESV9J
U19TVEFUVVMoZGF0YSkpIHsKKwkJICAgIHN3aXRjaCAoZGF0YSkgeworCQkgICAgY2FzZSAweGYw
OgkvKiBTeXNleCAqLworCQkJbS0+aW5xX3N0YXRlID0gTUlESV9JTl9TWVNFWDsKKwkJCWJyZWFr
OworCQkgICAgY2FzZSAweGYxOgkvKiBNVEMgcXVhcnRlciBmcmFtZSAqLworCQkgICAgY2FzZSAw
eGYzOgkvKiBTb25nIHNlbGVjdCAqLworCQkJbS0+aW5xX3N0YXRlID0gTUlESV9JTl9EQVRBOwor
CQkJZW5xID0gMTsKKwkJCW0tPmlucV9sZWZ0ID0gMTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAw
eGYyOgkvKiBTb25nIHBvc2l0aW9uIHBvaW50ZXIgKi8KKwkJCW0tPmlucV9zdGF0ZSA9IE1JRElf
SU5fREFUQTsKKwkJCWVucSA9IDE7CisJCQltLT5pbnFfbGVmdCA9IDI7CisJCQlicmVhazsKKwkJ
ICAgIGRlZmF1bHQ6CisJCQlpZiAoTUlESV9JU19DT01NT04oZGF0YSkpIHsKKwkJCSAgICBlbnEg
PSAxOworCQkJICAgIHNpZyA9IDE7CisJCQl9IGVsc2UgeworCQkJICAgIG0tPmlucV9zdGF0ZSA9
IE1JRElfSU5fREFUQTsKKwkJCSAgICBlbnEgPSAxOworCQkJICAgIG0tPmlucV9zdGF0dXMgPSBk
YXRhOworCQkJICAgIG0tPmlucV9sZWZ0ID0gTUlESV9MRU5HVEgoZGF0YSk7CisJCQl9CisJCQli
cmVhazsKKwkJICAgIH0KKwkJfSBlbHNlIGlmIChNSURJX0lTX1NUQVRVUyhtLT5pbnFfc3RhdHVz
KSkgeworCQkgICAgbS0+aW5xX3N0YXRlID0gTUlESV9JTl9EQVRBOworCQkgICAgaWYgKCFNSURJ
UV9GVUxMKG0tPmlucSkpIHsKKwkJCXVzZWQrKzsKKwkJCU1JRElRX0VOUShtLT5pbnEsICZtLT5p
bnFfc3RhdHVzLCAxKTsKKwkJICAgIH0KKwkJICAgIGVucSA9IDE7CisJCSAgICBtLT5pbnFfbGVm
dCA9IE1JRElfTEVOR1RIKG0tPmlucV9zdGF0dXMpIC0gMTsKKwkJfQorCQlicmVhazsKKwkJLyoK
KwkJICogRW5kIG9mIGNhc2UgTUlESV9JTl9TVEFSVDoKKwkJICovCisKKwkgICAgY2FzZSBNSURJ
X0lOX0RBVEE6CisJCWVucSA9IDE7CisJCWlmICgtLW0tPmlucV9sZWZ0IDw9IDApCisJCSAgICBz
aWcgPSAxOwkvKiBkZWxpdmVyIGRhdGEgKi8KKwkJYnJlYWs7CisJICAgIGNhc2UgTUlESV9JTl9T
WVNFWDoKKwkJaWYgKGRhdGEgPT0gTUlESV9TWVNFWF9FTkQpCisJCSAgICBtLT5pbnFfc3RhdGUg
PSBNSURJX0lOX1NUQVJUOworCQlicmVhazsKKwkgICAgfQorCisJICAgIGlmIChlbnEpCisJCWlm
ICghTUlESVFfRlVMTChtLT5pbnEpKSB7CisJCSAgICBNSURJUV9FTlEobS0+aW5xLCAmZGF0YSwg
MSk7CisJCSAgICB1c2VkKys7CisJCX0KKwkgICAgLyoKKwkgICAgICogRW5kIG9mIHRoZSBzdGF0
ZSBtYWNoaW5lcyBtYWluICJmb3IgbG9vcCIKKwkgICAgICovCisJfQorCWlmIChzaWcpIHsKKyNl
bmRpZgorCU1JRElfREVCVUcoNiwgcHJpbnRmKCJtaWRpX2luOiBsZW4gJWpkIGF2YWlsICVqZFxu
IiwgKGludG1heF90KU1JRElRX0xFTihtLT5pbnEpLCAoaW50bWF4X3QpTUlESVFfQVZBSUwobS0+
aW5xKSkpIDsKKwlpZiAoTUlESVFfQVZBSUwobS0+aW5xKSA+IHNpemUpIHsKKwkJdXNlZD1zaXpl
OworCQlNSURJUV9FTlEobS0+aW5xLCBidWYsIHNpemUpOworCX0gZWxzZSB7CisJCU1JRElfREVC
VUcoNCxwcmludGYoIm1pZGlfaW46IERpc2NhcmRpbmcgZGF0YSBxdVxuIikpOworCQltdHhfdW5s
b2NrKCZtLT5xbG9jayk7CisJCXJldHVybiAwOworCX0KKwkgICAgaWYgKG0tPnJjaGFuKSB7CisJ
CXdha2V1cCgmbS0+cmNoYW4pOworCQltLT5yY2hhbiA9IDA7CisJICAgIH0KKwkgICAgc2Vsd2Fr
ZXVwKCZtLT5yc2VsKTsKKwkgICAgaWYgKG0tPmFzeW5jKSB7CisJCVBST0NfTE9DSyhtLT5hc3lu
Yyk7CisJCXBzaWduYWwobS0+YXN5bmMsIFNJR0lPKTsKKwkJUFJPQ19VTkxPQ0sobS0+YXN5bmMp
OworCSAgICB9CisjaWYgMAorCX0KKyNlbmRpZgorCW10eF91bmxvY2soJm0tPnFsb2NrKTsKKwly
ZXR1cm4gdXNlZDsKK30KKworLyoKKyAqIG1pZGlfb3V0OiBUaGUgb25seSBjbGVhcmVyIG9mIHRo
ZSBNX1RYRU4gZmxhZy4KKyAqLworaW50CittaWRpX291dChzdHJ1Y3Qgc25kX21pZGkgKiBtLCBN
SURJX1RZUEUgKiBidWYsIGludCBzaXplKQoreworCWludCAgICAgICAgICAgICB1c2VkOworCisv
KgorICogWFhYOiBsb2NraW5nIGZsdWIKKyAqLworCWlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkK
KwkJcmV0dXJuIDA7CisKKwlNSURJX0RFQlVHKDIsIHByaW50ZigibWlkaV9vdXQ6ICVwXG4iLCBt
KSk7IAorCW10eF9sb2NrKCZtLT5xbG9jayk7CisJdXNlZCA9IE1JTihzaXplLCBNSURJUV9MRU4o
bS0+b3V0cSkpOworCU1JRElfREVCVUcoMywgcHJpbnRmKCJtaWRpX291dDogdXNlZCAlZFxuIiwg
dXNlZCkpOworCWlmICh1c2VkKQorCSAgICBNSURJUV9ERVEobS0+b3V0cSwgYnVmLCB1c2VkKTsK
KwlpZiAoTUlESVFfRU1QVFkobS0+b3V0cSkpIHsKKwkgICAgbS0+ZmxhZ3MgJj0gfk1fVFhFTjsK
KwkgICAgTVBVX0NBTExCQUNLUChtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwl9CisJaWYgKHVz
ZWQgJiYgTUlESVFfQVZBSUwobS0+b3V0cSkgPiBtLT5oaXdhdCApIHsKKwkJaWYgKG0tPndjaGFu
KSB7CisJCQl3YWtldXAoJm0tPndjaGFuKTsKKwkJCW0tPndjaGFuID0gMDsKKwkJfQorCQlzZWx3
YWtldXAoJm0tPndzZWwpOworCQkgaWYgKG0tPmFzeW5jKSB7CisJCQlQUk9DX0xPQ0sobS0+YXN5
bmMpOworCQkJcHNpZ25hbChtLT5hc3luYywgU0lHSU8pOworCQkJUFJPQ19VTkxPQ0sobS0+YXN5
bmMpOworCQl9CisJfQorCW10eF91bmxvY2soJm0tPnFsb2NrKTsKKwlyZXR1cm4gdXNlZDsKK30K
KworCisvKgorICogL2Rldi9ybWlkaSMuIwlkZXZpY2UgYWNjZXNzIGZ1bmN0aW9ucworICovCitp
bnQKK21pZGlfb3BlbihzdHJ1Y3QgY2RldiAqaV9kZXYsIGludCBmbGFncywgaW50IG1vZGUsIHN0
cnVjdCB0aHJlYWQgKiB0ZCkKK3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+c2lfZHJ2
MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCisJTUlESV9ERUJVRygxLHByaW50ZigibWlk
aW9wZW4gJXAgJXMgJXNcbiIsIHRkLAorCQlmbGFncyAmIEZSRUFEPyJNX1JYIjoiIiwgZmxhZ3Mg
JiBGV1JJVEU/Ik1fVFgiOiIiKSk7CisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElP
OworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwlyZXR2
YWwgPSAwOworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgaWYgKE1JRElRX1NJWkUobS0+
aW5xKSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBN
X1JYKQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJ
fQorCWlmIChmbGFncyAmIEZXUklURSkgeworCSAgICBpZiAoTUlESVFfU0laRShtLT5vdXRxKSA9
PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBNX1RYKQor
CQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJfQorCW0t
PmJ1c3krKzsKKworCW0tPnJjaGFuID0gMDsKKwltLT53Y2hhbiA9IDA7CisJbS0+YXN5bmMgPSAw
OworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgbS0+ZmxhZ3MgfD0gTV9SWCB8IE1fUlhF
TjsKKwkgICAgLyoKKwkgICAgICogT25seSBjbGVhciB0aGUgaW5xLCB0aGUgb3V0cSBtaWdodCBz
dGlsbCBoYXZlIGRhdGEgdG8gZHJhaW4gZnJvbQorCSAgICAgKiBhIHByZXZpb3VzIHNlc3Npb24K
KwkgICAgICovCisJICAgIE1JRElRX0NMRUFSKG0tPmlucSk7CisJfTsKKworCWlmIChmbGFncyAm
IEZXUklURSkKKwkgICAgbS0+ZmxhZ3MgfD0gTV9UWDsKKworCU1QVV9DQUxMQkFDSyhtLCBtLT5j
b29raWUsIG0tPmZsYWdzKTsKKworCU1JRElfREVCVUcoMiwgcHJpbnRmKCJtaWRpX29wZW46IG9w
ZW5lZC5cbiIpKTsKKworZXJyOgltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisJbXR4X3VubG9jaygm
bS0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50CittaWRpX2Nsb3NlKHN0cnVjdCBj
ZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0IHRocmVhZCAqIHRkKQorewor
CXN0cnVjdCBzbmRfbWlkaSAqbSA9IGlfZGV2LT5zaV9kcnYxOworCWludCAgICAgICAgICAgICBy
ZXR2YWw7CisJaW50CQlvbGRmbGFnczsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpX2Ns
b3NlICVwICVzICVzXG4iLCB0ZCwKKwkJZmxhZ3MgJiBGUkVBRD8iTV9SWCI6IiIsIGZsYWdzICYg
RldSSVRFPyJNX1RYIjoiIikpOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuICAgICAg
ICAgICBFTlhJTzsKKworCW10eF9sb2NrKCZtLT5sb2NrKTsKKwltdHhfbG9jaygmbS0+cWxvY2sp
OworCisJaWYgKCAoZmxhZ3MgJiBGUkVBRCAmJiAhKG0tPmZsYWdzICYgTV9SWCkpIHx8IAorCSAg
ICAgKGZsYWdzICYgRldSSVRFICYmICEobS0+ZmxhZ3MgJiBNX1RYKSkgKSB7CisJICAgIHJldHZh
bCA9IEVOWElPOworCSAgICBnb3RvIGVycjsKKwl9CisKKwltLT5idXN5LS07CisKKwlvbGRmbGFn
cyA9IG0tPmZsYWdzOworCisJaWYgKGZsYWdzICYgRlJFQUQpCisJICAgIG0tPmZsYWdzICY9IH4o
TV9SWCB8IE1fUlhFTik7CisJaWYgKGZsYWdzICYgRldSSVRFKQorCSAgICBtLT5mbGFncyAmPSB+
TV9UWDsKKworCWlmKCAobS0+ZmxhZ3MgJiAoTV9UWEVOIHwgTV9SWEVOKSkgIT0gKG9sZGZsYWdz
ICYgKE1fUlhFTiB8IE1fVFhFTikpICkKKwkJTVBVX0NBTExCQUNLKG0sIG0tPmNvb2tpZSwgbS0+
ZmxhZ3MpOworCisJTUlESV9ERUJVRygxLCBwcmludGYoIm1pZGlfY2xvc2U6IGNsb3NlZCwgYnVz
eSA9ICVkLlxuIiwgbS0+YnVzeSkpOworCisJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91
bmxvY2soJm0tPmxvY2spOworCXJldHZhbCA9IDA7CitlcnI6CXJldHVybiByZXR2YWw7Cit9Cisv
KgorICogVE9ETzogbWlkaV9yZWFkLCBwZXIgb3NzIHByb2dyYW1tZXIncyBndWlkZSBwZy4gNDIg
c2hvdWxkIHJldHVybiBhcyBzb29uIGFzIGRhdGEgaXMgYXZhaWxhYmxlLgorICovCitpbnQKK21p
ZGlfcmVhZChzdHJ1Y3QgY2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKiB1aW8sIGludCBpb2ZsYWcp
Cit7CisjZGVmaW5lIE1JRElfUlNJWkUgMzIKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+
c2lfZHJ2MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludCAgICAgICAgICAgICB1c2Vk
OworCWNoYXIgICAgICAgICAgICBidWZbTUlESV9SU0laRV07CisKKwlNSURJX0RFQlVHKDUsIHBy
aW50ZigibWlkaXJlYWQ6IGNvdW50PSVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpdWlvLT51aW9fcmVz
aWQpKTsKKworCXJldHZhbCA9IEVJTzsKKworCWlmIChtID09IE5VTEwpCisJICAgIGdvdG8gZXJy
MDsKKworCW10eF9sb2NrKCZtLT5sb2NrKTsKKwltdHhfbG9jaygmbS0+cWxvY2spOworCisJaWYg
KCEobS0+ZmxhZ3MgJiBNX1JYKSkKKwkgICAgZ290byBlcnIxOworCisJd2hpbGUgKHVpby0+dWlv
X3Jlc2lkID4gMCkgeworCSAgICB3aGlsZSAoTUlESVFfRU1QVFkobS0+aW5xKSkgeworCQlyZXR2
YWwgPSBFV09VTERCTE9DSzsKKwkJaWYgKGlvZmxhZyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3Rv
IGVycjE7CisJCW10eF91bmxvY2soJm0tPmxvY2spOworCQltLT5yY2hhbiA9IDE7CisJCXJldHZh
bCA9IG1zbGVlcCgmbS0+cmNoYW4sICZtLT5xbG9jaywKKwkJCVBDQVRDSCB8IFBEUk9QLCAibWlk
aSBSWCIsIDApOworCQkvKgorCQkgKiBXZSBzbGVwdCwgbWF5YmUgdGhpbmdzIGhhdmUgY2hhbmdl
ZCBzaW5jZSBsYXN0CisJCSAqIGR5aW5nIGNoZWNrCisJCSAqLworCQlpZiAocmV0dmFsID09IEVJ
TlRSKQorCQkgICAgZ290byBlcnIwOworCQlpZiAobSAhPSBpX2Rldi0+c2lfZHJ2MSkKKwkJICAg
IHJldHZhbCA9IEVOWElPOworCQkvKiBpZiAocmV0dmFsICYmIHJldHZhbCAhPSBFUkVTVEFSVCkg
Ki8KKwkJaWYgKHJldHZhbCkKKwkJICAgIGdvdG8gZXJyMDsKKwkJbXR4X2xvY2soJm0tPmxvY2sp
OworCQltdHhfbG9jaygmbS0+cWxvY2spOworCQltLT5yY2hhbiA9IDA7CisJCWlmICghbS0+YnVz
eSkKKwkJICAgIGdvdG8gZXJyMTsKKwkgICAgfQorCQlNSURJX0RFQlVHKDYsIHByaW50ZigibWlk
aV9yZWFkIHN0YXJ0XG4iKSk7CisJICAgIC8qCisJICAgICAqIEF0IHRoaXMgcG9pbnQsIGl0IGlz
IGNlcnRhaW4gdGhhdCBtLT5pbnEgaGFzIGRhdGEKKwkgICAgICovCisKKwkgICAgdXNlZCA9IE1J
TihNSURJUV9MRU4obS0+aW5xKSwgdWlvLT51aW9fcmVzaWQpOworCSAgICB1c2VkID0gTUlOKHVz
ZWQsIE1JRElfUlNJWkUpOworCisJICAgIE1JRElfREVCVUcoNixwcmludGYoIm1pZGlyZWFkOiB1
aW9tb3ZlIGNjPSVkXG4iLCB1c2VkKSk7CisJICAgIE1JRElRX0RFUShtLT5pbnEsIGJ1ZiwgdXNl
ZCk7CisJICAgIHJldHZhbCA9IHVpb21vdmUoYnVmLCB1c2VkLCB1aW8pOworCSAgICBpZiAocmV0
dmFsKQorCQlnb3RvIGVycjE7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBNYWRlIGl0IGhlcmUgdGhl
biB0cmFuc2ZlciBpcyBnb29kCisJICovCisJcmV0dmFsID0gMDsKK2VycjE6CW10eF91bmxvY2so
Jm0tPnFsb2NrKTsKKwltdHhfdW5sb2NrKCZtLT5sb2NrKTsKK2VycjA6CU1JRElfREVCVUcoNCwg
cHJpbnRmKCJtaWRpX3JlYWQ6IHJldCAlZFxuIixyZXR2YWwpKTsKKwlyZXR1cm4gcmV0dmFsOwor
fQorCisvKgorICogbWlkaV93cml0ZTogVGhlIG9ubHkgc2V0dGVyIG9mIE1fVFhFTgorICovCisK
K2ludAorbWlkaV93cml0ZShzdHJ1Y3QgY2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKiB1aW8sIGlu
dCBpb2ZsYWcpCit7CisjZGVmaW5lIE1JRElfV1NJWkUgMzIKKwlzdHJ1Y3Qgc25kX21pZGkgKm0g
PSBpX2Rldi0+c2lfZHJ2MTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludCAgICAgICAg
ICAgICB1c2VkOworCWNoYXIgICAgICAgICAgICBidWZbTUlESV9XU0laRV07CisKKworCU1JRElf
REVCVUcoNCwgcHJpbnRmKCJtaWRpX3dyaXRlXG4iKSk7IAorCXJldHZhbCA9IDA7CisJaWYgKG0g
PT0gTlVMTCkKKwkgICAgZ290byBlcnIwOworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9s
b2NrKCZtLT5xbG9jayk7CisKKwlpZiAoIShtLT5mbGFncyAmIE1fVFgpKQorCSAgICBnb3RvIGVy
cjE7CisKKwl3aGlsZSAodWlvLT51aW9fcmVzaWQgPiAwKSB7CisJICAgIHdoaWxlIChNSURJUV9B
VkFJTChtLT5vdXRxKSA9PSAwKSB7CisJCXJldHZhbCA9IEVXT1VMREJMT0NLOworCQlpZiAoaW9m
bGFnICYgT19OT05CTE9DSykKKwkJICAgIGdvdG8gZXJyMTsKKwkJbXR4X3VubG9jaygmbS0+bG9j
ayk7CisJCW0tPndjaGFuID0gMTsKKwkJTUlESV9ERUJVRygzLHByaW50ZigibWlkaV93cml0ZSBt
c2xlZXBcbiIpKTsKKwkJcmV0dmFsID0gbXNsZWVwKCZtLT53Y2hhbiwgJm0tPnFsb2NrLAorCQkJ
UENBVENIIHwgUERST1AsICJtaWRpIFRYIiwgMCk7CisJCS8qCisJCSAqIFdlIHNsZXB0LCBtYXli
ZSB0aGluZ3MgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxhc3QKKwkJICogZHlpbmcgY2hlY2sKKwkJICov
CisJCWlmIChyZXR2YWwgPT0gRUlOVFIpCisJCSAgICBnb3RvIGVycjA7CisJCWlmIChtICE9IGlf
ZGV2LT5zaV9kcnYxKQorCQkgICAgcmV0dmFsID0gRU5YSU87CisJCWlmIChyZXR2YWwpCisJCSAg
ICBnb3RvIGVycjA7CisJCW10eF9sb2NrKCZtLT5sb2NrKTsKKwkJbXR4X2xvY2soJm0tPnFsb2Nr
KTsKKwkJbS0+d2NoYW4gPSAwOworCQlpZiAoIW0tPmJ1c3kpCisJCSAgICBnb3RvIGVycjE7CisJ
ICAgIH0KKworCSAgICAvKgorCSAgICAgKiBXZSBhcmUgY2VydGFpbiB0aGFuIGRhdGEgY2FuIGJl
IHBsYWNlZCBvbiB0aGUgcXVldWUKKwkgICAgICovCisKKwkgICAgdXNlZCA9IE1JTihNSURJUV9B
VkFJTChtLT5vdXRxKSwgdWlvLT51aW9fcmVzaWQpOworCSAgICB1c2VkID0gTUlOKHVzZWQsIE1J
RElfV1NJWkUpOworCQlNSURJX0RFQlVHKDUscHJpbnRmKCJtaWRpb3V0OiByZXNpZCAlZCBsZW4g
JWpkIGF2YWlsICVqZFxuIiwgdWlvLT51aW9fcmVzaWQsIChpbnRtYXhfdClNSURJUV9MRU4obS0+
b3V0cSksIChpbnRtYXhfdClNSURJUV9BVkFJTChtLT5vdXRxKSkpOworCisKKwkgICAgTUlESV9E
RUJVRyg1LHByaW50ZigibWlkaV93cml0ZTogdWlvbW92ZSBjYz0lZFxuIiwgdXNlZCkpOworCSAg
ICByZXR2YWwgPSB1aW9tb3ZlKGJ1ZiwgdXNlZCwgdWlvKTsKKwkgICAgaWYgKHJldHZhbCkKKwkJ
Z290byBlcnIxOworCSAgICBNSURJUV9FTlEobS0+b3V0cSwgYnVmLCB1c2VkKTsKKwkgICAgLyoK
KwkgICAgICogSW5mb3JtIHRoZSBib3R0b20gaGFsZiB0aGF0IGRhdGEgY2FuIGJlIHdyaXR0ZW4K
KwkgICAgICovCisJICAgIGlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkgeworCQltLT5mbGFncyB8
PSBNX1RYRU47CisJCU1QVV9DQUxMQkFDSyhtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwkgICAg
fQorCX0KKwkvKgorCSAqIElmIHdlIE1hZGUgaXQgaGVyZSB0aGVuIHRyYW5zZmVyIGlzIGdvb2QK
KwkgKi8KKwlyZXR2YWwgPSAwOworZXJyMToJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91
bmxvY2soJm0tPmxvY2spOworZXJyMDoJcmV0dXJuIHJldHZhbDsKK30KKworaW50CittaWRpX2lv
Y3RsKHN0cnVjdCBjZGV2ICppX2RldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBhcmcsIGludCBtb2Rl
LCBzdHJ1Y3QgdGhyZWFkICogdGQpCit7CisJcmV0dXJuIEVOWElPOworfQorCitpbnQKK21pZGlf
cG9sbChzdHJ1Y3QgY2RldiAqaV9kZXYsIGludCBldmVudHMsIHN0cnVjdCB0aHJlYWQgKiB0ZCkK
K3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm0gPSBpX2Rldi0+c2lfZHJ2MTsKKwlpbnQgICAgICAgICAg
ICAgcmV2ZW50czsKKworCWlmIChtID09IE5VTEwpCisJICAgIHJldHVybiAwOworCisJcmV2ZW50
cyA9IDA7CisKKwltdHhfbG9jaygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKwor
CWlmIChldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJICAgIGlmICghTUlESVFfRU1Q
VFkobS0+aW5xKSkKKwkJZXZlbnRzIHw9IGV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsK
KworCWlmIChldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0pKQorCSAgICBpZiAoTUlESVFf
QVZBSUwobS0+b3V0cSkgPCBtLT5oaXdhdCkKKwkJZXZlbnRzIHw9IGV2ZW50cyAmIChQT0xMT1VU
IHwgUE9MTFdSTk9STSk7CisKKwlpZiAocmV2ZW50cyA9PSAwKSB7CisJICAgIGlmIChldmVudHMg
JiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJCXNlbHJlY29yZCh0ZCwgJm0tPnJzZWwpOworCisJ
ICAgIGlmIChldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0pKQorCQlzZWxyZWNvcmQodGQs
ICZtLT53c2VsKTsKKwl9CisJbXR4X3VubG9jaygmbS0+bG9jayk7CisJbXR4X3VubG9jaygmbS0+
cWxvY2spOworCisJcmV0dXJuIChyZXZlbnRzKTsKK30KKworLyoKKyAqIC9kZXYvbWlkaXN0YXQg
ZGV2aWNlIGZ1bmN0aW9ucworICogCisgKi8KK3N0YXRpYyBpbnQKK21pZGlzdGF0X29wZW4oc3Ry
dWN0IGNkZXYgKmlfZGV2LCBpbnQgZmxhZ3MsIGludCBtb2RlLCBzdHJ1Y3QgdGhyZWFkICogdGQp
Cit7CisJaW50ICAgICAgICAgICAgIGVycm9yOworCisKKwlNSURJX0RFQlVHKDEscHJpbnRmKCJt
aWRpc3RhdF9vcGVuXG4iKSk7CisJbXR4X2xvY2soJm1pZGlzdGF0X2xvY2spOworCisJaWYgKG1p
ZGlzdGF0X2lzb3BlbikgeworCSAgICBtdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwkgICAg
cmV0dXJuIEVCVVNZOworCX0KKwltaWRpc3RhdF9pc29wZW4gPSAxOworCisJaWYgKHNidWZfbmV3
KCZtaWRpc3RhdF9zYnVmLCBOVUxMLCA0MDk2LCAwKSA9PSBOVUxMKSB7CisJICAgIGVycm9yID0g
RU5YSU87CisJICAgIGdvdG8gb3V0OworCX0KKwltaWRpc3RhdF9idWZwdHIgPSAwOworCWVycm9y
ID0gKG1pZGlzdGF0X3ByZXBhcmUoJm1pZGlzdGF0X3NidWYpID4gMCkgPyAwIDogRU5PTUVNOwor
CitvdXQ6CWlmIChlcnJvcikKKwkgICAgbWlkaXN0YXRfaXNvcGVuID0gMDsKKwltdHhfdW5sb2Nr
KCZtaWRpc3RhdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK21pZGlz
dGF0X2Nsb3NlKHN0cnVjdCBjZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0
IHRocmVhZCAqIHRkKQoreworCWludHJtYXNrX3QgICAgICBzOworCisJTUlESV9ERUJVRygxLHBy
aW50ZigibWlkaXN0YXRfY2xvc2VcbiIpKTsKKwltdHhfbG9jaygmbWlkaXN0YXRfbG9jayk7CisJ
aWYgKCFtaWRpc3RhdF9pc29wZW4pIHsKKwkgICAgbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7
CisJICAgIHJldHVybiBFQkFERjsKKwl9CisJc2J1Zl9kZWxldGUoJm1pZGlzdGF0X3NidWYpOwor
CW1pZGlzdGF0X2lzb3BlbiA9IDA7CisKKwltdHhfdW5sb2NrKCZtaWRpc3RhdF9sb2NrKTsKKwlz
cGx4KHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittaWRpc3RhdF9yZWFkKHN0cnVj
dCBjZGV2ICppX2Rldiwgc3RydWN0IHVpbyAqIGJ1ZiwgaW50IGZsYWcpCit7CisJaW50ICAgICAg
ICAgICAgIGwsIGVycjsKKworCU1JRElfREVCVUcoNCxwcmludGYoIm1pZGlzdGF0X3JlYWRcbiIp
KTsKKwltdHhfbG9jaygmbWlkaXN0YXRfbG9jayk7CisJaWYgKCFtaWRpc3RhdF9pc29wZW4pIHsK
KwkgICAgbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7CisJICAgIHJldHVybiAgICAgICAgICAg
RUJBREY7CisJfQorCWwgPSBtaW4oYnVmLT51aW9fcmVzaWQsIHNidWZfbGVuKCZtaWRpc3RhdF9z
YnVmKSAtIG1pZGlzdGF0X2J1ZnB0cik7CisJZXJyID0gMDsKKwlpZiAobCA+IDApCisJICAgIGVy
ciA9IHVpb21vdmUoc2J1Zl9kYXRhKCZtaWRpc3RhdF9zYnVmKSArIG1pZGlzdGF0X2J1ZnB0ciwg
bCwgYnVmKTsKKwllbHNlCisJICAgIGwgPSAwOworCW1pZGlzdGF0X2J1ZnB0ciArPSBsOworCW10
eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBNb2R1
bGUgbGlicmFyeSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50CittaWRpc3RhdF9wcmVwYXJl
KHN0cnVjdCBzYnVmICogcykKK3sKKwlzdHJ1Y3Qgc25kX21pZGkgKm07CisKKwltdHhfYXNzZXJ0
KCZtaWRpc3RhdF9sb2NrLCBNQV9PV05FRCk7CisKKwlzYnVmX3ByaW50ZihzLCAiRnJlZUJTRCBN
aWRpIERyaXZlciAobWlkaTIpXG4iKTsKKwlpZiAoVEFJTFFfRU1QVFkoJm1pZGlfZGV2cykpIHsK
KwkgICAgc2J1Zl9wcmludGYocywgIk5vIGRldmljZXMgaW5zdGFsbGVkLlxuIik7CisJICAgIHNi
dWZfZmluaXNoKHMpOworCSAgICByZXR1cm4gc2J1Zl9sZW4ocyk7CisJfQorCXNidWZfcHJpbnRm
KHMsICJJbnN0YWxsZWQgZGV2aWNlczpcbiIpOworCisJVEFJTFFfRk9SRUFDSChtLCAmbWlkaV9k
ZXZzLCBsaW5rKSB7CisJICAgIG10eF9sb2NrKCZtLT5sb2NrKTsKKwkgICAgc2J1Zl9wcmludGYo
cywgIiVzIFslZC8lZDolc10iLCBtLT5uYW1lLCBtLT51bml0LCBtLT5jaGFubmVsLAorCQkgICAg
TVBVX1BST1ZJREVSKG0sIG0tPmNvb2tpZSkpOworCSAgICBzYnVmX3ByaW50ZihzLCAiJXMiLCBN
UFVfREVTQ1IobSwgbS0+Y29va2llLCBtaWRpc3RhdF92ZXJib3NlKSk7CisJICAgIHNidWZfcHJp
bnRmKHMsICJcbiIpOworCSAgICBtdHhfdW5sb2NrKCZtLT5sb2NrKTsKKwl9CisKKwlzYnVmX2Zp
bmlzaChzKTsKKwlyZXR1cm4gc2J1Zl9sZW4ocyk7Cit9CisKKyNpZiBub3RkZWYKKy8qCisgKiBD
b252ZXJ0IElPQ1RMIGNvbW1hbmQgdG8gc3RyaW5nIGZvciBkZWJ1Z2dpbmcKKyAqLworCitzdGF0
aWMgY2hhciAgICAqCittaWRpX2NtZG5hbWUoaW50IGNtZCkKK3sKKwlzdGF0aWMgc3RydWN0IHsK
KwkgICAgaW50ICAgICAgICAgICAgIGNtZDsKKwkgICAgY2hhciAgICAgICAgICAgKm5hbWU7CisJ
fSAgICAgICAgICAgICAgKnRhYiwgY21kdGFiX21pZGlpb2N0bFtdID0geworI2RlZmluZSBBKHgp
CXt4LCAjIyB4fQorCSAgICAvKgorCSAgICAgKiBPbmNlIHdlIGhhdmUgc29tZSByZWFsIElPQ1RM
cyBkZWZpbmUsIHRoZSBmb2xsb3dpbmcgd2lsbAorCSAgICAgKiBiZSByZWxhdmFudC4KKwkgICAg
ICogCisJICAgICAqIEEoU05EQ1RMX01JRElfUFJFVElNRSksIEEoU05EQ1RMX01JRElfTVBVTU9E
RSksCisJICAgICAqIEEoU05EQ1RMX01JRElfTVBVQ01EKSwgQShTTkRDVExfU1lOVEhfSU5GTyks
CisJICAgICAqIEEoU05EQ1RMX01JRElfSU5GTyksIEEoU05EQ1RMX1NZTlRIX01FTUFWTCksCisJ
ICAgICAqIEEoU05EQ1RMX0ZNX0xPQURfSU5TVFIpLCBBKFNORENUTF9GTV80T1BfRU5BQkxFKSwK
KwkgICAgICogQShNSU9TUEFTU1RIUlUpLCBBKE1JT0dQQVNTVEhSVSksIEEoQUlPTldSSVRFKSwK
KwkgICAgICogQShBSU9HU0laRSksIEEoQUlPU1NJWkUpLCBBKEFJT0dGTVQpLCBBKEFJT1NGTVQp
LAorCSAgICAgKiBBKEFJT0dNSVgpLCBBKEFJT1NNSVgpLCBBKEFJT1NUT1ApLCBBKEFJT1NZTkMp
LAorCSAgICAgKiBBKEFJT0dDQVApLAorCSAgICAgKi8KKyN1bmRlZiBBCisJICAgIHsKKwkJLTEs
ICJ1bmtub3duIgorCSAgICB9LAorCX07CisKKwlmb3IgKHRhYiA9IGNtZHRhYl9taWRpaW9jdGw7
IHRhYi0+Y21kICE9IGNtZCAmJiB0YWItPmNtZCAhPSAtMTsgdGFiKyspCisJICAgIDsKKwlyZXR1
cm4gdGFiLT5uYW1lOworfQorI2VuZGlmIC8qIG5vdGRlZiAqLworCisvKgorICogbWlkaXN5bnRo
CisgKi8KKworCitpbnQKK21pZGlzeW50aF9vcGVuKHZvaWQgKm4sIHZvaWQgKmFyZywgaW50IGZs
YWdzKQoreworCXN0cnVjdCBzbmRfbWlkaSAqbSA9ICgoc3RydWN0IHN5bnRoX21pZGkgKiApIG4p
LT5tOworCWludCAgICAgICAgICAgICByZXR2YWw7CisKKwlNSURJX0RFQlVHKDEscHJpbnRmKCJt
aWRpc3ludGhfb3BlbiAlcyAlc1xuIiwKKwkJZmxhZ3MgJiBGUkVBRD8iTV9SWCI6IiIsIGZsYWdz
ICYgRldSSVRFPyJNX1RYIjoiIikpOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVO
WElPOworCisJbXR4X2xvY2soJm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwly
ZXR2YWwgPSAwOworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgaWYgKE1JRElRX1NJWkUo
bS0+aW5xKSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3Mg
JiBNX1JYKQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7
CisJfQorCWlmIChmbGFncyAmIEZXUklURSkgeworCSAgICBpZiAoTUlESVFfU0laRShtLT5vdXRx
KSA9PSAwKQorCQlyZXR2YWwgPSBFTlhJTzsKKwkgICAgZWxzZSBpZiAobS0+ZmxhZ3MgJiBNX1RY
KQorCQlyZXR2YWwgPSBFQlVTWTsKKwkgICAgaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJfQor
CW0tPmJ1c3krKzsKKworCS8qCisJICogVE9ETzogQ29uc2lkZXIgbS0+YXN5bmMgPSAwOworCSAq
LworCisJaWYgKGZsYWdzICYgRlJFQUQpIHsKKwkgICAgbS0+ZmxhZ3MgfD0gTV9SWCB8IE1fUlhF
TjsKKwkgICAgLyoKKwkgICAgICogT25seSBjbGVhciB0aGUgaW5xLCB0aGUgb3V0cSBtaWdodCBz
dGlsbCBoYXZlIGRhdGEgdG8gZHJhaW4gZnJvbQorCSAgICAgKiBhIHByZXZpb3VzIHNlc3Npb24K
KwkgICAgICovCisJICAgIE1JRElRX0NMRUFSKG0tPmlucSk7CisJICAgIG0tPnJjaGFuID0gMDsK
Kwl9OworCisJaWYgKGZsYWdzICYgRldSSVRFKSB7CisJICAgIG0tPmZsYWdzIHw9IE1fVFg7CisJ
ICAgIG0tPndjaGFuID0gMDsKKwl9CisKKwltLT5zeW50aF9mbGFncyA9IGZsYWdzICYgKEZSRUFE
IHwgRldSSVRFKTsKKwkKKwlNUFVfQ0FMTEJBQ0sobSwgbS0+Y29va2llLCBtLT5mbGFncyk7CisK
KworZXJyOgltdHhfdW5sb2NrKCZtLT5xbG9jayk7CisJbXR4X3VubG9jaygmbS0+bG9jayk7CisJ
TUlESV9ERUJVRygyLCBwcmludGYoIm1pZGlzeW50aF9vcGVuOiByZXR1cm4gJWQuXG4iLCByZXR2
YWwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQKK21pZGlzeW50aF9jbG9zZSh2b2lkICpu
KQoreworCXN0cnVjdCBzbmRfbWlkaSAqbSA9ICgoc3RydWN0IHN5bnRoX21pZGkgKiluKS0+bTsK
KwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCWludAkJb2xkZmxhZ3M7CisKKwlNSURJX0RFQlVH
KDEsIHByaW50ZigibWlkaXN5bnRoX2Nsb3NlICVzICVzXG4iLAorCQltLT5zeW50aF9mbGFncyAm
IEZSRUFEID8gIk1fUlgiIDogIiIsIAorCQltLT5zeW50aF9mbGFncyAmIEZXUklURSA/ICJNX1RY
IiA6ICIiKSk7CisKKwlpZiAobSA9PSBOVUxMKQorCSAgICByZXR1cm4gRU5YSU87CisKKwltdHhf
bG9jaygmbS0+bG9jayk7CisJbXR4X2xvY2soJm0tPnFsb2NrKTsKKworCWlmICggKG0tPnN5bnRo
X2ZsYWdzICYgRlJFQUQgJiYgIShtLT5mbGFncyAmIE1fUlgpKSB8fCAKKwkgICAgIChtLT5zeW50
aF9mbGFncyAmIEZXUklURSAmJiAhKG0tPmZsYWdzICYgTV9UWCkpICkgeworCSAgICByZXR2YWwg
PSBFTlhJTzsKKwkgICAgZ290byBlcnI7CisJfQorCisJbS0+YnVzeS0tOworCisJb2xkZmxhZ3Mg
PSBtLT5mbGFnczsKKworCWlmIChtLT5zeW50aF9mbGFncyAmIEZSRUFEKQorCSAgICBtLT5mbGFn
cyAmPSB+KE1fUlggfCBNX1JYRU4pOworCWlmIChtLT5zeW50aF9mbGFncyAmIEZXUklURSkKKwkg
ICAgbS0+ZmxhZ3MgJj0gfk1fVFg7CisKKwlpZiggKG0tPmZsYWdzICYgKE1fVFhFTiB8IE1fUlhF
TikpICE9IChvbGRmbGFncyAmIChNX1JYRU4gfCBNX1RYRU4pKSApCisJCU1QVV9DQUxMQkFDSyht
LCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKworCU1JRElfREVCVUcoMSwgcHJpbnRmKCJtaWRpX2Ns
b3NlOiBjbG9zZWQsIGJ1c3kgPSAlZC5cbiIsIG0tPmJ1c3kpKTsKKworCW10eF91bmxvY2soJm0t
PnFsb2NrKTsKKwltdHhfdW5sb2NrKCZtLT5sb2NrKTsKKwlyZXR2YWwgPSAwOworZXJyOglyZXR1
cm4gcmV0dmFsOworfQorCisvKgorICogQWx3YXlzIGJsb2NraW5nLgorICovCisKK2ludAorbWlk
aXN5bnRoX3dyaXRlcmF3KHZvaWQgKm4sIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlz
dHJ1Y3Qgc25kX21pZGkJKm0gPSAoKHN0cnVjdCBzeW50aF9taWRpICopbiktPm07CisJaW50ICAg
ICAgICAgICAgIHJldHZhbDsKKwlpbnQgICAgICAgICAgICAgdXNlZDsKKwlpbnQgaTsKKworCU1J
RElfREVCVUcoNCwgcHJpbnRmKCJtaWRpc3ludGhfd3JpdGVyYXdcbiIpKTsgCisKKwlyZXR2YWwg
PSAwOworCisJaWYgKG0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOworCisJbXR4X2xvY2so
Jm0tPmxvY2spOworCW10eF9sb2NrKCZtLT5xbG9jayk7CisKKwlpZiAoIShtLT5mbGFncyAmIE1f
VFgpKQorCSAgICBnb3RvIGVycjE7CisKKwlpZiAobWlkaV9kdW1wcmF3KQorCSAgICBwcmludGYo
Im1pZGkgZHVtcDogIik7CisKKwl3aGlsZSAobGVuID4gMCkgeworCSAgICB3aGlsZSAoTUlESVFf
QVZBSUwobS0+b3V0cSkgPT0gMCkgeworCSAgICBpZiAoIShtLT5mbGFncyAmIE1fVFhFTikpIHsK
KwkJbS0+ZmxhZ3MgfD0gTV9UWEVOOworCQlNUFVfQ0FMTEJBQ0sobSwgbS0+Y29va2llLCBtLT5m
bGFncyk7CisJICAgIH0KKwkJbXR4X3VubG9jaygmbS0+bG9jayk7CisJCW0tPndjaGFuID0gMTsK
KwkJTUlESV9ERUJVRygzLHByaW50ZigibWlkaXN5bnRoX3dyaXRlcmF3IG1zbGVlcFxuIikpOwor
CQlyZXR2YWwgPSBtc2xlZXAoJm0tPndjaGFuLCAmbS0+cWxvY2ssCisJCQlQQ0FUQ0ggfCBQRFJP
UCwgIm1pZGkgVFgiLCAwKTsKKwkJLyoKKwkJICogV2Ugc2xlcHQsIG1heWJlIHRoaW5ncyBoYXZl
IGNoYW5nZWQgc2luY2UgbGFzdAorCQkgKiBkeWluZyBjaGVjaworCQkgKi8KKwkJaWYgKHJldHZh
bCA9PSBFSU5UUikKKwkJICAgIGdvdG8gZXJyMDsKKworCQlpZiAocmV0dmFsKQorCQkgICAgZ290
byBlcnIwOworCQltdHhfbG9jaygmbS0+bG9jayk7CisJCW10eF9sb2NrKCZtLT5xbG9jayk7CisJ
CW0tPndjaGFuID0gMDsKKwkJaWYgKCFtLT5idXN5KQorCQkgICAgZ290byBlcnIxOworCSAgICB9
CisKKwkgICAgLyoKKwkgICAgICogV2UgYXJlIGNlcnRhaW4gdGhhbiBkYXRhIGNhbiBiZSBwbGFj
ZWQgb24gdGhlIHF1ZXVlCisJICAgICAqLworCisJICAgIHVzZWQgPSBNSU4oTUlESVFfQVZBSUwo
bS0+b3V0cSksIGxlbik7CisJICAgIHVzZWQgPSBNSU4odXNlZCwgTUlESV9XU0laRSk7CisJICAg
IE1JRElfREVCVUcoNSxwcmludGYoIm1pZGlfc3ludGg6IHJlc2lkICVkIGxlbiAlamQgYXZhaWwg
JWpkXG4iLCAKKwkJCWxlbiwgKGludG1heF90KU1JRElRX0xFTihtLT5vdXRxKSwgCisJCQkoaW50
bWF4X3QpTUlESVFfQVZBSUwobS0+b3V0cSkpKTsKKworCSAgICBpZiAobWlkaV9kdW1wcmF3KQor
CQlmb3IoaT0wO2k8dXNlZDtpKyspIHByaW50ZigiJXggIiwgYnVmW2ldKTsKKworCSAgICBNSURJ
UV9FTlEobS0+b3V0cSwgYnVmLCB1c2VkKTsKKwkgICAgbGVuIC09IHVzZWQ7CisKKwkgICAgLyoK
KwkgICAgICogSW5mb3JtIHRoZSBib3R0b20gaGFsZiB0aGF0IGRhdGEgY2FuIGJlIHdyaXR0ZW4K
KwkgICAgICovCisJICAgIGlmICghKG0tPmZsYWdzICYgTV9UWEVOKSkgeworCQltLT5mbGFncyB8
PSBNX1RYRU47CisJCU1QVV9DQUxMQkFDSyhtLCBtLT5jb29raWUsIG0tPmZsYWdzKTsKKwkgICAg
fQorCX0KKwkvKgorCSAqIElmIHdlIE1hZGUgaXQgaGVyZSB0aGVuIHRyYW5zZmVyIGlzIGdvb2QK
KwkgKi8KKwlpZiAobWlkaV9kdW1wcmF3KQorCSAgICBwcmludGYoIlxuIik7CisKKwlyZXR2YWwg
PSAwOworZXJyMToJbXR4X3VubG9jaygmbS0+cWxvY2spOworCW10eF91bmxvY2soJm0tPmxvY2sp
OworZXJyMDoJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2tpbGxu
b3RlKHZvaWQgKm4sIHVpbnQ4X3QgY2huLCB1aW50OF90IG5vdGUsIHVpbnQ4X3QgdmVsKQorewor
CXVfY2hhciBjWzNdOworCisKKwlpZiAobm90ZSA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJaWYgKHZlbCA+IDEyNykKKwkgICAgdmVsID0gMTI3OworCisJaWYgKHZl
bCA9PSA2NCkgeworCQljWzBdID0gMHg5MCB8IChjaG4gJiAweDBmKTsgLyogTm90ZSBvbi4gKi8K
KwkJY1sxXSA9ICh1X2NoYXIpbm90ZTsKKwkJY1syXSA9IDA7CisJfSBlbHNlIHsKKwkJY1swXSA9
IDB4ODAgfCAoY2huICYgMHgwZik7IC8qIE5vdGUgb2ZmLiAqLworCQljWzFdID0gKHVfY2hhcilu
b3RlOworCQljWzJdID0gKHVfY2hhcil2ZWw7CisJfQorCisJcmV0dXJuIG1pZGlzeW50aF93cml0
ZXJhdyhuLCBjLCAzKTsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX3NldGluc3RyKHZvaWQg
Km4sIHVpbnQ4X3QgY2huLCB1aW50MTZfdCBpbnN0cikKK3sKKwl1X2NoYXIgY1syXTsKKworCWlm
IChpbnN0ciA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWNbMF0gPSAw
eGMwIHwgKGNobiAmIDB4MGYpOyAvKiBQcm9nYW1tZSBjaGFuZ2UuICovCisJY1sxXSA9IGluc3Ry
ICsgbWlkaV9pbnN0cm9mZjsKKworCXJldHVybiBtaWRpc3ludGhfd3JpdGVyYXcobiwgYywgMik7
Cit9CisKK3N0YXRpYyBpbnQKK21pZGlzeW50aF9zdGFydG5vdGUodm9pZCAqbiwgdWludDhfdCBj
aG4sIHVpbnQ4X3Qgbm90ZSwgdWludDhfdCB2ZWwpCit7CisJdV9jaGFyIGNbM107CisKKwlpZiAo
bm90ZSA+IDEyNyB8fCBjaG4gPiAxNSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmICh2ZWwgPiAx
MjcpCisJICAgIHZlbCA9IDEyNzsKKworCWNbMF0gPSAweDkwIHwgKGNobiAmIDB4MGYpOyAvKiBO
b3RlIG9uLiAqLworCWNbMV0gPSAodV9jaGFyKW5vdGU7CisJY1syXSA9ICh1X2NoYXIpdmVsOwor
CisJcmV0dXJuIG1pZGlzeW50aF93cml0ZXJhdyhuLCBjLCAzKTsKK30KK3N0YXRpYyBpbnQKK21p
ZGlzeW50aF9hbGxvYyh2b2lkICpuLCB1aW50OF90IGNoYW4sIHVpbnQ4X3Qgbm90ZSkKK3sKKwly
ZXR1cm4gY2hhbjsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2NvbnRyb2xsZXIodm9pZCAq
biwgdWludDhfdCBjaG4sIHVpbnQ4X3QgY3RybG51bSwgdWludDE2X3QgdmFsKQoreworCXVfY2hh
ciBjWzNdOworCisJaWYgKGN0cmxudW0gPiAxMjcgfHwgY2huID4gMTUpCisJICAgIHJldHVybiBF
SU5WQUw7CisKKwljWzBdID0gMHhiMCB8IChjaG4gJiAweDBmKTsgLyogQ29udHJvbCBNZXNzYWdl
LiAqLworCWNbMV0gPSBjdHJsbnVtOworCWNbMl0gPSB2YWw7CisJcmV0dXJuIG1pZGlzeW50aF93
cml0ZXJhdyhuLCBjLCAzKTsKK30KKworc3RhdGljIGludAorbWlkaXN5bnRoX2JlbmRlcih2b2lk
ICpuLCB1aW50OF90IGNobiwgdWludDE2X3QgdmFsKQoreworCXVfY2hhciBjWzNdOworCisKKwlp
ZiAodmFsID4gMTYzODMgfHwgY2huID4gMTUpCisJCXJldHVybiAgRUlOVkFMOworCisJY1swXSA9
IDB4ZTAgfCAoY2huICYgMHgwZik7IC8qIFBpdGNoIGJlbmQuICovCisJY1sxXSA9ICh1X2NoYXIp
dmFsICYgMHg3ZjsKKwljWzJdID0gKHVfY2hhcikodmFsID4+IDcpICYgMHg3ZjsKKworCXJldHVy
biBtaWRpc3ludGhfd3JpdGVyYXcobiwgYywgMyk7Cit9CisKKy8qCisgKiBTaW5nbGUgcG9pbnQg
b2YgbWlkaSBkZXN0cnVjdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK21pZGlfZGVzdHJveShzdHJ1
Y3Qgc25kX21pZGkgKiBtLCBpbnQgbWlkaXVuaW5pdCkKK3sKKworCW10eF9hc3NlcnQoJm1pZGlz
dGF0X2xvY2ssIE1BX09XTkVEKTsKKwltdHhfYXNzZXJ0KCZtLT5sb2NrLCBNQV9PV05FRCk7CisK
KwlNSURJX0RFQlVHKDMscHJpbnRmKCJtaWRpX2Rlc3Ryb3lcbiIpKTsKKwltLT5kZXYtPnNpX2Ry
djEgPSBOVUxMOworCWRlc3Ryb3lfZGV2KG0tPmRldik7CisJVEFJTFFfUkVNT1ZFKCZtaWRpX2Rl
dnMsIG0sIGxpbmspOworCWlmIChtaWRpdW5pbml0KQorCSAgICBNUFVfVU5JTklUKG0sIG0tPmNv
b2tpZSk7CisJZnJlZShNSURJUV9CVUYobS0+aW5xKSwgTV9NSURJKTsKKwlmcmVlKE1JRElRX0JV
RihtLT5vdXRxKSwgTV9NSURJKTsKKwltdHhfZGVzdHJveSgmbS0+cWxvY2spOworCW10eF9kZXN0
cm95KCZtLT5sb2NrKTsKKwlmcmVlKG0sIE1fTUlESSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisg
KiBMb2FkIGFuZCB1bmxvYWQgZnVuY3Rpb25zLCBjcmVhdGVzIHRoZSAvZGV2L21pZGlzdGF0IGRl
dmljZQorICovCisKK3N0YXRpYyBpbnQKK21pZGlfbG9hZCgpCit7CisJbXR4X2luaXQoJm1pZGlz
dGF0X2xvY2ssICJtaWRpc3RhdCBsb2NrIiwgMCwgMCk7CisJVEFJTFFfSU5JVCgmbWlkaV9kZXZz
KTsJLyogSW5pdGlhbGl6ZSB0aGUgcXVldWUuICovCisKKwltaWRpc3RhdF9kZXYgPSBtYWtlX2Rl
digmbWlkaXN0YXRfY2RldnN3LAorCQkgICAgTUlESU1LTUlOT1IoMCwgTUlESV9ERVZfTUlESUNU
TCwgMCksCisJCSAgICBVSURfUk9PVCwgR0lEX1dIRUVMLCAwNjY2LCAibWlkaXN0YXQiKTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittaWRpX3VubG9hZCgpCit7CisJc3RydWN0IHNu
ZF9taWRpICptOworCWludCAgICAgICAgICAgICByZXR2YWw7CisKKwlNSURJX0RFQlVHKDEscHJp
bnRmKCJtaWRpX3VubG9hZCgpXG4iKSk7CisJcmV0dmFsID0gRUJVU1k7CisJbXR4X2xvY2soJm1p
ZGlzdGF0X2xvY2spOworCWlmIChtaWRpc3RhdF9pc29wZW4pCisJICAgIGdvdG8gZXhpdDA7CisK
KwlUQUlMUV9GT1JFQUNIKG0sICZtaWRpX2RldnMsIGxpbmspIHsKKwkgICAgbXR4X2xvY2soJm0t
PmxvY2spOworCSAgICBpZiAobS0+YnVzeSkKKwkJcmV0dmFsID0gRUJVU1k7CisJICAgIGVsc2UK
KwkJcmV0dmFsID0gbWlkaV9kZXN0cm95KG0sIDEpOworCSAgICBpZiAocmV0dmFsKQorCQlnb3Rv
IGV4aXQxOworCX0KKworCWRlc3Ryb3lfZGV2KG1pZGlzdGF0X2Rldik7CisJLyoKKwkgKiBNYWRl
IGl0IGhlcmUgdGhlbiB1bmxvYWQgaXMgY29tcGxldGUKKwkgKi8KKwltdHhfZGVzdHJveSgmbWlk
aXN0YXRfbG9jayk7CisJcmV0dXJuIDA7CisKK2V4aXQxOgorCW10eF91bmxvY2soJm0tPmxvY2sp
OworZXhpdDA6CisJbXR4X3VubG9jaygmbWlkaXN0YXRfbG9jayk7CisJaWYocmV0dmFsKSBNSURJ
X0RFQlVHKDIscHJpbnRmKCJtaWRpX3VubG9hZDogZmFpbGVkXG4iKSk7CisJcmV0dXJuIHJldHZh
bDsKK30KKworZXh0ZXJuIGludCBzZXFfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBpbnQgdHlwZSwg
dm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbnQKK21pZGlfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBp
bnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICAgcmV0dmFsOworCisJcmV0
dmFsID0gMDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTU9EX0xPQUQ6CisJICAgIHJldHZh
bCA9IG1pZGlfbG9hZCgpOworCSAgICBpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHNlcV9t
b2RldmVudChtb2QsIHR5cGUsIGRhdGEpOworCSAgICBicmVhazsKKworCWNhc2UgTU9EX1VOTE9B
RDoKKwkgICAgcmV0dmFsID0gbWlkaV91bmxvYWQoKTsKKwkgICAgaWYgKHJldHZhbCA9PSAwKQor
CQlyZXR2YWwgPSBzZXFfbW9kZXZlbnQobW9kLCB0eXBlLCBkYXRhKTsKKwkgICAgYnJlYWs7CisK
KwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitrb2Jq
X3QKK21pZGltYXBwZXJfYWRkc2VxKHZvaWQgKmFyZzEsIGludCAqdW5pdCwgdm9pZCAqKmNvb2tp
ZSkKK3sKKwl1bml0ID0gMDsKKworCXJldHVybiAoa29ial90KSBhcmcxOworfQorCitpbnQKK21p
ZGltYXBwZXJfb3Blbih2b2lkICphcmcxLCB2b2lkICoqY29va2llKQoreworCWludCByZXR2YWwg
PSAwOworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKworICAgICAgICBtdHhfbG9jaygmbWlkaXN0YXRf
bG9jayk7CisKKyAgICAgICAgVEFJTFFfRk9SRUFDSChtLCAmbWlkaV9kZXZzLCBsaW5rKSB7CisJ
ICAgIHJldHZhbCsrOworCSAgICAgICAgfQorCisgICAgICAgIG10eF91bmxvY2soJm1pZGlzdGF0
X2xvY2spOworICAgICAgICByZXR1cm4gcmV0dmFsOworfQorCitpbnQKK21pZGltYXBwZXJfY2xv
c2Uodm9pZCAqYXJnMSwgdm9pZCAqY29va2llKQoreworCXJldHVybiAwOworfQorCitrb2JqX3QK
K21pZGltYXBwZXJfZmV0Y2hfc3ludGgodm9pZCAqYXJnLCB2b2lkICpjb29raWUsIGludCB1bml0
KQoreworCXN0cnVjdCBzbmRfbWlkaSAqbTsKKwlpbnQgcmV0dmFsID0gMDsKKworCW10eF9sb2Nr
KCZtaWRpc3RhdF9sb2NrKTsKKworCVRBSUxRX0ZPUkVBQ0gobSwgJm1pZGlfZGV2cywgbGluaykg
eworCSAgIGlmICh1bml0ID09IHJldHZhbCkgeworCSAgICAgICBtdHhfdW5sb2NrKCZtaWRpc3Rh
dF9sb2NrKTsKKwkgICAgICAgcmV0dXJuIChrb2JqX3QpbS0+c3ludGg7CisJICAgfQorCSAgIHJl
dHZhbCsrOworCX0KKworCW10eF91bmxvY2soJm1pZGlzdGF0X2xvY2spOworCXJldHVybiBOVUxM
OworfQorCitERVZfTU9EVUxFKG1pZGksIG1pZGlfbW9kZXZlbnQsIE5VTEwpOworTU9EVUxFX1ZF
UlNJT04obWlkaSwgMSk7CkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9taWRpLmgKZGlmZiAtTiBzeXMvZGV2L3Nv
dW5kL21pZGkvbWlkaS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysgc3lzL2Rldi9zb3VuZC9taWRpL21pZGkuaAk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiAoYykgMjAwMyBNYXRoZXcgS2FubmVyCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAyLgor
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE1JRElf
SAorI2RlZmluZSBNSURJX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5
cy9tYWxsb2MuaD4KKworTUFMTE9DX0RFQ0xBUkUoTV9NSURJKTsKKworI2RlZmluZSBNX1JYCQkw
eDAxCisjZGVmaW5lIE1fVFgJCTB4MDIKKyNkZWZpbmUgTV9SWEVOCQkweDA0CisjZGVmaW5lIE1f
VFhFTgkJMHgwOAorCisjZGVmaW5lIE1JRElfVFlQRSB1bnNpZ25lZCBjaGFyCisKK3N0cnVjdCBz
bmRfbWlkaTsKKworc3RydWN0IHNuZF9taWRpICptaWRpX2luaXQoa29ial9jbGFzc190IF9tcHVf
Y2xzLCBpbnQgX3VuaXQsIGludCBfY2hhbm5lbCwgCisJCQl2b2lkICpjb29raWUpOworaW50IG1p
ZGlfdW5pbml0KHN0cnVjdCBzbmRfbWlkaSAqIF9tKTsKK2ludCBtaWRpX291dChzdHJ1Y3Qgc25k
X21pZGkgKiBfbSwgTUlESV9UWVBFICogX2J1ZiwgaW50IF9zaXplKTsKK2ludCBtaWRpX2luKHN0
cnVjdCBzbmRfbWlkaSAqIF9tLCBNSURJX1RZUEUgKiBfYnVmLCBpbnQgX3NpemUpOworCitrb2Jq
X3QgbWlkaW1hcHBlcl9hZGRzZXEodm9pZCAqYXJnMSwgaW50ICp1bml0LCB2b2lkICoqY29va2ll
KTsKK2ludCBtaWRpbWFwcGVyX29wZW4odm9pZCAqYXJnMSwgdm9pZCAqKmNvb2tpZSk7CitpbnQg
bWlkaW1hcHBlcl9jbG9zZSh2b2lkICphcmcxLCB2b2lkICpjb29raWUpOwora29ial90IG1pZGlt
YXBwZXJfZmV0Y2hfc3ludGgodm9pZCAqYXJnLCB2b2lkICpjb29raWUsIGludCB1bml0KTsKKwor
I2VuZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaXEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiBzeXMvZGV2L3NvdW5kL21pZGkvbWlkaXEuaApkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlk
aS9taWRpcS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lz
L2Rldi9zb3VuZC9taWRpL21pZGlxLmgJNSBNYXIgMjAwNSAxNzowNjo0MSAtMDAwMApAQCAtMCww
ICsxLDEwMyBAQAorCisvKgorICogKGMpIDIwMDMgTWF0aGV3IEthbm5lcgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KKyAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBNSURJUV9I
CisKKyNkZWZpbmUgTUlESVFfTU9WRShhLGIsYykgYmNvcHkoYixhLGMpCisKKyNkZWZpbmUgTUlE
SVFfSEVBRChuYW1lLCB0eXBlKSAgICAgICAgICBcCitzdHJ1Y3QgbmFtZSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgaCwgdCwgczsgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgdHlwZSAqIGI7ICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAKKworI2Rl
ZmluZSBNSURJUV9JTklUKGhlYWQsIGJ1Ziwgc2l6ZSkgZG8geyAgICAgICAgICAgICAgICBcCisg
ICAgICAgIChoZWFkKS5oPShoZWFkKS50PTA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIChoZWFkKS5zPXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAoaGVhZCkuYj1idWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfRU1QVFkoaGVhZCkgICAgICAgKChoZWFkKS5o
ID09IChoZWFkKS50ICkKKworI2RlZmluZSBNSURJUV9MRU5CQVNFKGhlYWQpICAgICAgICAgKCho
ZWFkKS5oIC0gKGhlYWQpLnQgPCAwID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChoZWFkKS5oIC0gKGhlYWQpLnQgKyAoaGVhZCkucyA6IFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVhZCkuaCAtIChoZWFkKS50KQorCisjZGVm
aW5lIE1JRElRX0ZVTEwoaGVhZCkgICAgICAgICgoaGVhZCkuaCA9PSAtMSkKKyNkZWZpbmUgTUlE
SVFfQVZBSUwoaGVhZCkgICAgICAgKE1JRElRX0ZVTEwoaGVhZCkgPyAwIDogKGhlYWQpLnMgLSBN
SURJUV9MRU5CQVNFKGhlYWQpKQorI2RlZmluZSBNSURJUV9MRU4oaGVhZCkJCSgoaGVhZCkucyAt
IE1JRElRX0FWQUlMKGhlYWQpKQorI2RlZmluZSBNSURJUV9ERUJVRyAwCisvKgorICogTm8gcHJv
dGVjdGlvbiBhZ2FpbnN0IG92ZXJmbG93LCB1bmRlcmZsb3cKKyAqLworI2RlZmluZSBNSURJUV9F
TlEoaGVhZCwgYnVmLCBzaXplKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmKE1JRElRX0RFQlVHKVwKKyAg
ICAgICAgICAgICAgICAJcHJpbnRmKCIjMSAlcCAlcCBieXRlcyBjb3BpZWQgJWpkIHRyYW4gcmVx
IHMgJWQgaCAlZCB0ICVkXG4iLCAgICAgICAgICAgIFwKKwkJCSAgICAgICAmKGhlYWQpLmJbKGhl
YWQpLmhdLCAoYnVmKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
CQkJICAgICAgIChpbnRtYXhfdCkoc2l6ZW9mKCooaGVhZCkuYikgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisJCQkJCSAgTUlOKCAoc2l6ZSksIChoZWFkKS5zIC0gKGhl
YWQpLmgpICksICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICAgICAoc2l6ZSksIChoZWFkKS5o
LCAoaGVhZCkudCk7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIE1JRElRX01PVkUo
JihoZWFkKS5iWyhoZWFkKS5oXSwgKGJ1ZiksIHNpemVvZigqKGhlYWQpLmIpICogTUlOKChzaXpl
KSwgKGhlYWQpLnMgLSAoaGVhZCkuaCkpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGlmKCAoaGVhZCkucyAtIChoZWFkKS5oIDwgKHNpemUpICkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlpZihNSURJUV9E
RUJVRykgXAorICAgICAgICAgICAgICAgICAgICAgICAgCXByaW50ZigiIzIgJXAgJXAgYnl0ZXMg
Y29waWVkICVqZFxuIiwgIChoZWFkKS5iLCAoYnVmKSArIChoZWFkKS5zIC0gKGhlYWQpLmgsIChp
bnRtYXhfdClzaXplb2YoKihoZWFkKS5iKSAqICgoc2l6ZSkgLSAoaGVhZCkucyArIChoZWFkKS5o
KSApOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1JRElRX01PVkUoKGhlYWQpLmIs
IChidWYpICsgKGhlYWQpLnMgLSAoaGVhZCkuaCwgc2l6ZW9mKCooaGVhZCkuYikgKiAoKHNpemUp
IC0gKGhlYWQpLnMgKyAoaGVhZCkuaCkgKTsgICAgICBcCisJCX0gXAorICAgICAgICAgICAgICAg
IChoZWFkKS5oKz0oc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoaGVh
ZCkuaCU9KGhlYWQpLnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZihNSURJUV9FTVBUWShoZWFkKSkgKGhl
YWQpLmg9LTE7IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAgICAgIAlwcmludGYo
IiNFIGggJWQgdCAlZFxuIiwgKGhlYWQpLmgsIChoZWFkKS50KTsgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfREVRX0koaGVhZCwgYnVmLCBzaXpl
LCBtb3ZlLCB1cGRhdGUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYoTUlESVFfRlVMTChoZWFkKSkgKGhl
YWQpLmg9KGhlYWQpLnQ7IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAgICAgIAlw
cmludGYoIiMxICVwICVwIGJ5dGVzIGNvcGllZCAlamQgdHJhbiByZXEgcyAlZCBoICVkIHQgJWRc
biIsICYoaGVhZCkuYlsoaGVhZCkudF0sIChidWYpLCAoaW50bWF4X3Qpc2l6ZW9mKCooaGVhZCku
YikgKiBNSU4oKHNpemUpLCAoaGVhZCkucyAtIChoZWFkKS50KSwgKHNpemUpLCAoaGVhZCkuaCwg
KGhlYWQpLnQpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICht
b3ZlKSBNSURJUV9NT1ZFKChidWYpLCAmKGhlYWQpLmJbKGhlYWQpLnRdLCBzaXplb2YoKihoZWFk
KS5iKSAqIE1JTigoc2l6ZSksIChoZWFkKS5zIC0gKGhlYWQpLnQpKTsgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiggKGhlYWQpLnMgLSAoaGVhZCkudCA8IChzaXpl
KSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCQkJaWYoTUlESVFfREVCVUcpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIAlwcmludGYo
IiMyICVwICVwIGJ5dGVzIGNvcGllZCAlamRcbiIsICAoaGVhZCkuYiwgKGJ1ZikgKyAoaGVhZCku
cyAtIChoZWFkKS50LCAoaW50bWF4X3Qpc2l6ZW9mKCooaGVhZCkuYikgKiAoKHNpemUpIC0gKGhl
YWQpLnMgKyAoaGVhZCkudCkgKTsgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bW92ZSkgTUlESVFfTU9WRSgoYnVmKSArIChoZWFkKS5zIC0gKGhlYWQpLnQsIChoZWFkKS5iLCBz
aXplb2YoKihoZWFkKS5iKSAqICgoc2l6ZSkgLSAoaGVhZCkucyArIChoZWFkKS50KSApOyAgICAg
IFwKKwkJfSBcCisJCWlmICh1cGRhdGUpIHsgXAorICAgICAgICAgICAgICAgIChoZWFkKS50Kz0o
c2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoaGVhZCkudCU9KGhlYWQp
LnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorCQl9IGVsc2UgeyBcCisJCSAgaWYgKE1JRElRX0VNUFRZKGhlYWQp
KSAoaGVhZCkuaD0tMTsgXAorCQl9IFwKKwkJaWYoTUlESVFfREVCVUcpXAorICAgICAgICAgICAg
ICAgIAlwcmludGYoIiNFIGggJWQgdCAlZFxuIiwgKGhlYWQpLmgsIChoZWFkKS50KTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTUlESVFfU0laRShoZWFk
KSAoKGhlYWQpLnMpCisjZGVmaW5lIE1JRElRX0NMRUFSKGhlYWQpICgoaGVhZCkuaCA9IChoZWFk
KS50ID0gMCkKKyNkZWZpbmUgTUlESVFfQlVGKGhlYWQpICgoaGVhZCkuYikKKyNkZWZpbmUgTUlE
SVFfREVRKGhlYWQsIGJ1Ziwgc2l6ZSkgTUlESVFfREVRX0koaGVhZCwgYnVmLCBzaXplLCAxLCAx
KQorI2RlZmluZSBNSURJUV9QRUVLKGhlYWQsIGJ1Ziwgc2l6ZSkgTUlESVFfREVRX0koaGVhZCwg
YnVmLCBzaXplLCAxLCAwKQorI2RlZmluZSBNSURJUV9QT1AoaGVhZCwgc2l6ZSkgTUlESVFfREVR
X0koaGVhZCwgJmhlYWQsIHNpemUsIDAsIDEpCisKKyNlbmRpZgpJbmRleDogc3lzL2Rldi9zb3Vu
ZC9taWRpL21wdTQwMS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9t
cHU0MDEuYwpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuYwotLS0gL2Rldi9udWxs
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEu
Ywk1IE1hciAyMDA1IDE2OjU1OjU4IC0wMDAwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogKGMp
IDIwMDMgTWF0aGV3IEthbm5lcgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgor
I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUg
PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Rt
Lmg+CisjaW5jbHVkZSA8c3lzL2tvYmouaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5j
bHVkZSA8c3lzL2J1cy5oPiAvKiB0byBnZXQgZHJpdmVyX2ludHJfdCAqLworCisjaW5jbHVkZSA8
ZGV2L3NvdW5kL21pZGkvbXB1NDAxLmg+CisjaW5jbHVkZSA8ZGV2L3NvdW5kL21pZGkvbWlkaS5o
PgorCisjaW5jbHVkZSAibXB1X2lmLmgiCisjaW5jbHVkZSAibXB1Zm9pX2lmLmgiCisKKyNkZWZp
bmUgTVBVX0RBVEFQT1JUICAgMAorI2RlZmluZSBNUFVfQ01EUE9SVCAgICAxCisjZGVmaW5lIE1Q
VV9TVEFUUE9SVCAgIDEKKyNkZWZpbmUgTVBVX1JFU0VUICAgICAgMHhmZgorI2RlZmluZSBNUFVf
VUFSVCAgICAgICAweDNmCisjZGVmaW5lIE1QVV9BQ0sgICAgICAgIDB4ZmUKKyNkZWZpbmUgTVBV
X1NUQVRNQVNLICAgMHhjMAorI2RlZmluZSBNUFVfT1VUUFVUQlVTWSAweDQwCisjZGVmaW5lIE1Q
VV9JTlBVVEJVU1kgIDB4ODAKKyNkZWZpbmUgTVBVX1RSWURBVEEgNTAKKyNkZWZpbmUgTVBVX0RF
TEFZICAgMjUwMAorCisjZGVmaW5lIENNRChtLGQpCU1QVUZPSV9XUklURShtLCBtLT5jb29raWUs
IE1QVV9DTURQT1JULGQpCisjZGVmaW5lIFNUQVRVUyhtKQlNUFVGT0lfUkVBRChtLCBtLT5jb29r
aWUsIE1QVV9TVEFUUE9SVCkKKyNkZWZpbmUgUkVBRChtKQkJTVBVRk9JX1JFQUQobSwgbS0+Y29v
a2llLCBNUFVfREFUQVBPUlQpCisjZGVmaW5lIFdSSVRFKG0sZCkJTVBVRk9JX1dSSVRFKG0sIG0t
PmNvb2tpZSwgTVBVX0RBVEFQT1JULGQpCisKK3N0cnVjdCBtcHU0MDEgeworCUtPQkpfRklFTERT
OworCXN0cnVjdCBzbmRfbWlkaSAqbWlkOworCWludCBmbGFnczsKKwlkcml2ZXJfaW50cl90ICpz
aTsKKwl2b2lkICpjb29raWU7CisJc3RydWN0IGNhbGxvdXQgdGltZXI7Cit9OworCitzdGF0aWMg
dm9pZCBtcHU0MDFfdGltZW91dCh2b2lkICptKSA7CitzdGF0aWMgbXB1NDAxX2ludHJfdCBtcHU0
MDFfaW50cjsKKworc3RhdGljIGludCBtcHU0MDFfbWluaXQoa29ial90IG9iaiwgc3RydWN0IG1w
dTQwMSAqbSk7CitzdGF0aWMgaW50IG1wdTQwMV9tdW5pbml0KGtvYmpfdCBvYmosIHN0cnVjdCBt
cHU0MDEgKm0pOworc3RhdGljIGludCBtcHU0MDFfbWlucXNpemUoa29ial90IG9iaiwgc3RydWN0
IG1wdTQwMSAqbSk7CitzdGF0aWMgaW50IG1wdTQwMV9tb3V0cXNpemUoa29ial90IG9iaiwgc3Ry
dWN0IG1wdTQwMSAqbSk7CitzdGF0aWMgdm9pZCBtcHU0MDFfbWNhbGxiYWNrKGtvYmpfdCBvYmos
IHN0cnVjdCBtcHU0MDEgKm0sIGludCBmbGFncyk7CitzdGF0aWMgdm9pZCBtcHU0MDFfbWNhbGxi
YWNrcChrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptLCBpbnQgZmxhZ3MpOworc3RhdGljIGNv
bnN0IGNoYXIgKm1wdTQwMV9tZGVzY3Ioa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSwgaW50
IHZlcmJvc2l0eSk7CitzdGF0aWMgY29uc3QgY2hhciAqbXB1NDAxX21wcm92aWRlcihrb2JqX3Qg
b2JqLCBzdHJ1Y3QgbXB1NDAxICptKTsKKworc3RhdGljIGtvYmpfbWV0aG9kX3QgbXB1NDAxX21l
dGhvZHNbXSA9IHsKKwlLT0JKTUVUSE9EKG1wdV9pbml0LG1wdTQwMV9taW5pdCksCisJS09CSk1F
VEhPRChtcHVfdW5pbml0LG1wdTQwMV9tdW5pbml0KSwKKwlLT0JKTUVUSE9EKG1wdV9pbnFzaXpl
LG1wdTQwMV9taW5xc2l6ZSksCisJS09CSk1FVEhPRChtcHVfb3V0cXNpemUsbXB1NDAxX21vdXRx
c2l6ZSksCisJS09CSk1FVEhPRChtcHVfY2FsbGJhY2ssbXB1NDAxX21jYWxsYmFjayksCisJS09C
Sk1FVEhPRChtcHVfY2FsbGJhY2twLG1wdTQwMV9tY2FsbGJhY2twKSwKKwlLT0JKTUVUSE9EKG1w
dV9kZXNjcixtcHU0MDFfbWRlc2NyKSwKKwlLT0JKTUVUSE9EKG1wdV9wcm92aWRlcixtcHU0MDFf
bXByb3ZpZGVyKSwKKyAgICAgICAgeyAwLCAwIH0KK307CisKK0RFRklORV9DTEFTUyhtcHU0MDEs
IG1wdTQwMV9tZXRob2RzLCAwKTsKKwordm9pZAorbXB1NDAxX3RpbWVvdXQodm9pZCAqYSkgCit7
CXN0cnVjdCBtcHU0MDEgKm09KHN0cnVjdCBtcHU0MDEgKilhOworCisJaWYgKG0tPnNpKQorCQko
bS0+c2kpKG0tPmNvb2tpZSk7CisKK30KK3N0YXRpYyBpbnQKK21wdTQwMV9pbnRyKHN0cnVjdCBt
cHU0MDEgKm0pCit7CisjZGVmaW5lIE1QVV9JTlRSX0JVRgkxNgorCU1JRElfVFlQRSBiW01QVV9J
TlRSX0JVRl07CisJaW50IGk7CisJaW50IHM7CisvKgorCXByaW50ZigibXB1NDAxX2ludHJcbiIp
OworKi8KKyNkZWZpbmUgUlhSRFkobSkgKCAoU1RBVFVTKG0pICYgTVBVX0lOUFVUQlVTWSkgPT0g
MCkKKyNkZWZpbmUgVFhSRFkobSkgKCAoU1RBVFVTKG0pICYgTVBVX09VVFBVVEJVU1kpID09IDAp
CisjaWYgMAorI2RlZmluZSBEKHgsbCkgcHJpbnRmKCJtcHU0MDFfaW50ciAlZCAleCAlcyAlc1xu
IixsLCB4LCB4Jk1QVV9JTlBVVEJVU1k/IlJYIjoiIiwgeCZNUFVfT1VUUFVUQlVTWT8iVFgiOiIi
KQorI2Vsc2UKKyNkZWZpbmUgRCh4LGwpCisjZW5kaWYKKwlpPTA7CisJcyA9IFNUQVRVUyhtKTsK
KwlEKHMsMSk7CisJd2hpbGUgKCAocyZNUFVfSU5QVVRCVVNZKSA9PSAwICYmIGk8TVBVX0lOVFJf
QlVGKSB7CisJCWJbaV09UkVBRChtKTsKKy8qCisJCXByaW50ZigibXB1NDAxX2ludHIgaW4gaSAl
ZCBkICVkXG4iLCBpLCBiW2ldKTsKKyovCisJCWkrKzsKKwlzID0gU1RBVFVTKG0pOworCX0KKwlp
ZiAoaSkgbWlkaV9pbihtLT5taWQsIGIsIGkpOworCWk9MDsKKwl3aGlsZSAoICEocyZNUFVfT1VU
UFVUQlVTWSkgJiYgaTxNUFVfSU5UUl9CVUYpIHsKKwkJaWYobWlkaV9vdXQobS0+bWlkLCBiLCAx
KSkgeyAKKy8qCisJCQlwcmludGYoIm1wdTQwMV9pbnRyIG91dCBpICVkIGQgJWRcbiIsIGksIGJb
MF0pOworKi8KKwkKKwkJCVdSSVRFKG0sICpiKTsKKwkJfQorCQllbHNlIHsKKy8qCisJCQlwcmlu
dGYoIm1wdTQwMV9pbnRyIHdyaXRlOiBubyBvdXRwdXRcbiIpOworKi8KKwkJCXJldHVybiAwOwor
CQl9CisJCWkrKzsKKwkvKiBERUxBWSgxMDApOyAqLworCXMgPSBTVEFUVVMobSk7CisJfQorCisJ
aWYgKChtLT5mbGFncyAmIE1fVFhFTikgJiYgKG0tPnNpKSApIHsKKwkgICAgY2FsbG91dF9yZXNl
dCgmbS0+dGltZXIsIDEsIG1wdTQwMV90aW1lb3V0LCBtKTsKKwl9CisKKwlyZXR1cm4gKG0tPmZs
YWdzICYgTV9UWEVOKSA9PSBNX1RYRU47Cit9CisKK3N0cnVjdCBtcHU0MDEgKgorbXB1NDAxX2lu
aXQoa29ial9jbGFzc190IGNscywgdm9pZCAqY29va2llLGRyaXZlcl9pbnRyX3Qgc29mdGludHIs
IG1wdTQwMV9pbnRyX3QgKipjYikKK3sKKwlzdHJ1Y3QgbXB1NDAxICptOworCisJKmNiID0gTlVM
TDsKKwltID0gbWFsbG9jKHNpemVvZigqbSksIE1fTUlESSwgTV9OT1dBSVQgfCBNX1pFUk8pOwor
CisJaWYoIW0pCisJCXJldHVybiBOVUxMOworCisJa29ial9pbml0KChrb2JqX3QpbSwgY2xzKTsK
KworCWNhbGxvdXRfaW5pdCgmbS0+dGltZXIsIDEpOworCisJbS0+c2kgPSBzb2Z0aW50cjsKKwlt
LT5jb29raWUgPSBjb29raWU7CisJbS0+ZmxhZ3MgPSAwOworCisJbS0+bWlkID0gbWlkaV9pbml0
KCZtcHU0MDFfY2xhc3MsMCwwLG0pOworCWlmICghbS0+bWlkKQorCQlnb3RvIGVycjsKKwkqY2Ig
PSBtcHU0MDFfaW50cjsKKwlyZXR1cm4gbTsKK2VycjoKKwlwcmludGYoIm1wdTQwMV9pbml0IGVy
cm9yXG4iKTsKKwlmcmVlKG0sIE1fTUlESSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludAorbXB1
NDAxX3VuaW5pdChzdHJ1Y3QgbXB1NDAxICptKQoreworCWludCByZXR2YWw7CisKKwlDTUQobSwg
TVBVX1JFU0VUKTsKKwlyZXR2YWwgPSBtaWRpX3VuaW5pdChtLT5taWQpOworCWlmIChyZXR2YWwp
CisJCXJldHVybiByZXR2YWw7CisJZnJlZShtLCBNX01JREkpOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50CittcHU0MDFfbWluaXQoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sK
KwlpbnQgaTsKKworCUNNRChtLCBNUFVfUkVTRVQpOworCUNNRChtLCBNUFVfVUFSVCk7CisJcmV0
dXJuIDA7CisJaT0wOworCXdoaWxlKCsraTwyMDAwKSB7CisJCWlmKFJYUkRZKG0pKQorCQkJaWYo
UkVBRChtKSA9PSBNUFVfQUNLKQorCQkJCWJyZWFrOworCX0KKworCWlmKCBpIDwgMjAwMCApIHsK
KwkJQ01EKG0sIE1QVV9VQVJUKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ZigibXB1NDAxX21p
bml0IGZhaWxlZCBhY3RpdmUgc2Vuc2luZ1xuIik7CisJcmV0dXJuIDE7Cit9CisKKworaW50Citt
cHU0MDFfbXVuaW5pdChrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptKQoreworCisJcmV0dXJu
IE1QVUZPSV9VTklOSVQobSwgbS0+Y29va2llKTsKK30KKworaW50CittcHU0MDFfbWlucXNpemUo
a29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sKKwlyZXR1cm4gMTI4OworfQorCitpbnQK
K21wdTQwMV9tb3V0cXNpemUoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAqbSkKK3sKKwlyZXR1
cm4gMTI4OworfQorCitzdGF0aWMgdm9pZAorbXB1NDAxX21jYWxsYmFjayhrb2JqX3Qgb2JqLCBz
dHJ1Y3QgbXB1NDAxICptLCBpbnQgZmxhZ3MpCit7CisjaWYgMAorCXByaW50ZigibXB1NDAxX2Nh
bGxiYWNrICVzICVzICVzICVzXG4iLCAKKwkJZmxhZ3MgJiBNX1JYID8gIk1fUlgiIDogIiIsCisJ
CWZsYWdzICYgTV9UWCA/ICJNX1RYIiA6ICIiLAorCQlmbGFncyAmIE1fUlhFTiA/ICJNX1JYRU4i
IDogIiIsCisJCWZsYWdzICYgTV9UWEVOID8gIk1fVFhFTiIgOiAiIiApOworI2VuZGlmCisJaWYg
KGZsYWdzICYgTV9UWEVOICYmIG0tPnNpKSB7CisJCWNhbGxvdXRfcmVzZXQoJm0tPnRpbWVyLCAx
LCBtcHU0MDFfdGltZW91dCwgbSk7CisJfQorCisJbS0+ZmxhZ3MgPSBmbGFnczsKK30KKworc3Rh
dGljIHZvaWQKK21wdTQwMV9tY2FsbGJhY2twKGtvYmpfdCBvYmosIHN0cnVjdCBtcHU0MDEgKm0s
IGludCBmbGFncykKK3sKKy8qCXByaW50ZigibXB1NDAxX2NhbGxiYWNrcFxuIik7ICovCisJbXB1
NDAxX21jYWxsYmFjayhvYmosIG0sIGZsYWdzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor
bXB1NDAxX21kZXNjcihrb2JqX3Qgb2JqLCBzdHJ1Y3QgbXB1NDAxICptLCBpbnQgdmVyYm9zaXR5
KQoreworCisJcmV0dXJuICJkZXNjciBtcHU0MDEiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAq
CittcHU0MDFfbXByb3ZpZGVyKGtvYmpfdCBvYmosIHN0cnVjdCBtcHU0MDEgKm0pCit7CisJcmV0
dXJuICJwcm92aWRlciBtcHU0MDEiOworfQpJbmRleDogc3lzL2Rldi9zb3VuZC9taWRpL21wdTQw
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaApkaWZm
IC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHU0MDEuaAk1IE1hciAyMDA1
IDE2OjI3OjA3IC0wMDAwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAoYykgMjAwMyBNYXRoZXcg
S2FubmVyCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAyLgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
bgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisjaWZuZGVmIE1QVTQwMV9ICisjZGVmaW5lIE1QVTQwMV9ICisKK3N0cnVjdCBtcHU0MDE7
CisKK3R5cGVkZWYgaW50IG1wdTQwMV9pbnRyX3Qoc3RydWN0IG1wdTQwMSAqIF9vYmopOworCitl
eHRlcm4gc3RydWN0IG1wdTQwMSAqbXB1NDAxX2luaXQoa29ial9jbGFzc190IF9jbHMsIHZvaWQg
KmNvb2tpZSwgCisJCQlkcml2ZXJfaW50cl90ICpfc29mdGludHIsbXB1NDAxX2ludHJfdCAqKl9j
Yik7CitleHRlcm4gaW50IG1wdTQwMV91bmluaXQoc3RydWN0IG1wdTQwMSAqIF9vYmopOworI2Vu
ZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkvbXB1X2lmLm0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogc3lzL2Rldi9zb3VuZC9taWRpL21wdV9pZi5tCmRpZmYgLU4gc3lzL2Rldi9zb3VuZC9taWRp
L21wdV9pZi5tCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lz
L2Rldi9zb3VuZC9taWRpL21wdV9pZi5tCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAgLTAs
MCArMSw0NiBAQAorI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGkuaD4KKworSU5URVJGQUNF
IG1wdTsKKworTUVUSE9EIGludCBpbnFzaXpleworCXN0cnVjdCBzbmRfbWlkaSAqIF9rb2JqOwor
CXZvaWQgKl9jb29raWU7Cit9OworCitNRVRIT0QgaW50IG91dHFzaXplIHsKKwlzdHJ1Y3Qgc25k
X21pZGkgKiBfa29iajsKKwl2b2lkICpfY29va2llOworfTsKKworTUVUSE9EIGludCBpbml0IHsK
KwlzdHJ1Y3Qgc25kX21pZGkgKiBfa29iajsKKwl2b2lkICpfY29va2llOworfTsKKworTUVUSE9E
IHZvaWQgY2FsbGJhY2twIHsKKwlzdHJ1Y3Qgc25kX21pZGkgKiBfa29iajsKKwl2b2lkICpfY29v
a2llOworCWludCBfZmxhZ3M7Cit9OworCitNRVRIT0Qgdm9pZCBjYWxsYmFjayB7IAorCXN0cnVj
dCBzbmRfbWlkaSAqIF9rb2JqOworCXZvaWQgKl9jb29raWU7CisJaW50IF9mbGFnczsKK307CisK
K01FVEhPRCBjb25zdCBjaGFyICogcHJvdmlkZXJ7CisJc3RydWN0IHNuZF9taWRpICogX2tvYmo7
CisJdm9pZCAqX2Nvb2tpZTsKK307CisKK01FVEhPRCBjb25zdCBjaGFyICogZGVzY3IgeyAKKwlz
dHJ1Y3Qgc25kX21pZGkgKiBfa29iajsgCisJdm9pZCAqX2Nvb2tpZTsKKwlpbnQgX3ZlcmJvc2l0
eTsKK307CisKK01FVEhPRCBpbnQgdW5pbml0IHsgCisJc3RydWN0IHNuZF9taWRpICogX2tvYmo7
IAorCXZvaWQgKl9jb29raWU7Cit9OwpJbmRleDogc3lzL2Rldi9zb3VuZC9taWRpL21wdWZvaV9p
Zi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQpk
aWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQotLS0gL2Rldi9udWxsCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9tcHVmb2lfaWYubQk1
IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlIDxzeXMv
YnVzLmg+CisjaW5jbHVkZSA8ZGV2L3NvdW5kL21pZGkvbXB1NDAxLmg+CisKK0lOVEVSRkFDRSBt
cHVmb2k7CisKK01FVEhPRCB1bnNpZ25lZCBjaGFyIHJlYWQgeworCXN0cnVjdCBtcHU0MDEgKl9r
b2JqOworCXZvaWQgKl9jb29raWU7CisJaW50IF9yZWc7Cit9OworCitNRVRIT0Qgdm9pZCB3cml0
ZSB7CisJc3RydWN0IG1wdTQwMSAqX2tvYmo7CisJdm9pZCAqX2Nvb2tpZTsKKwlpbnQgX3JlZzsK
Kwl1bnNpZ25lZCBjaGFyIF9kOworfTsKKworTUVUSE9EIGludCB1bmluaXQgeworCXN0cnVjdCBt
cHU0MDEgKl9rb2JqOworCXZvaWQgKl9jb29raWU7Cit9OwpJbmRleDogc3lzL2Rldi9zb3VuZC9t
aWRpL3NlcXVlbmNlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5cy9kZXYvc291bmQvbWlkaS9z
ZXF1ZW5jZXIuYwpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9zZXF1ZW5jZXIuYwotLS0gL2Rl
di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHN5cy9kZXYvc291bmQvbWlkaS9z
ZXF1ZW5jZXIuYwk1IE1hciAyMDA1IDE2OjU3OjQ4IC0wMDAwCkBAIC0wLDAgKzEsMjA0NiBAQAor
LyoKKyAqIFRoZSBzZXF1ZW5jZXIgcGVyc29uYWxpdHkgbWFuYWdlci4KKyAqIChjKSAyMDAzIE1h
dGhldyBLYW5uZXIKKyAqIENvcHlyaWdodCBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMKKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6IDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IDIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNy
Yy9zeXMvZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmMsdiAxLjE1IDIwMDMvMDMvMDMgMTI6MTU6
NDYgcGhrIEV4cCAkCisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl
IDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvaW9jY29tLmg+CisKKyNpbmNsdWRlIDxzeXMv
ZmlsaW8uaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4K
KyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHR5Lmg+CisjaW5jbHVkZSA8
c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxzeXMva2Vy
bmVsLmg+IC8qIGZvciBEQVRBX1NFVCAqLworCisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu
Y2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMv
dWlvLmg+CisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorI2luY2x1ZGUgPHN5cy9lcnJuby5oPgor
I2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8
bWFjaGluZS9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzX21lbWlvLmg+CisjaW5j
bHVkZSA8bWFjaGluZS9idXNfcGlvLmg+CisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL2Nsb2NrLmg+ICAgICAgLyogZm9yIERFTEFZICovCisjaW5jbHVkZSA8c3lz
L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL21tYW4u
aD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1
ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxz
eXMvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3NlbGluZm8uaD4KKworCisjaW5jbHVkZSA8ZGV2
L3NvdW5kL21pZGkvbWlkaS5oPgorI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL21pZGlxLmg+Cisj
aW5jbHVkZSAic3ludGhfaWYuaCIKKworI2luY2x1ZGUgPGRldi9zb3VuZC9taWRpL3NlcXVlbmNl
ci5oPgorCisjZGVmaW5lIFRNUl9USU1FUkJBU0UgMTMKKworI2RlZmluZSBTTkRfREVWX1NFUQkx
CS8qIFNlcXVlbmNlciBvdXRwdXQgL2Rldi9zZXF1ZW5jZXIgKEZNCisJCQkJICAgc3ludGhlc2l6
ZXIgYW5kIE1JREkgb3V0cHV0KSAqLworI2RlZmluZSBTTkRfREVWX01VU0lDCTgJLyogL2Rldi9t
dXNpYywgbGV2ZWwgMiBpbnRlcmZhY2UgKi8KKworLyogTGVuZ3RoIG9mIGEgc2VxdWVuY2VyIGV2
ZW50LiAqLworI2RlZmluZSBFVl9TWiA4CisjZGVmaW5lIElFVl9TWiA4CisKKy8qIExvb2t1cCBt
b2RlcyAqLworI2RlZmluZSBMT09LVVBfRVhJU1QJKDApCisjZGVmaW5lIExPT0tVUF9PUEVOCSgx
KQorI2RlZmluZSBMT09LVVBfQ0xPU0UJKDIpCisKKyNkZWZpbmUgUENNTUtNSU5PUih1LCBkLCBj
KSBcCisJICAgICgoKChjKSAmIDB4ZmYpIDw8IDE2KSB8ICgoKHUpICYgMHgwZikgPDwgNCkgfCAo
KGQpICYgMHgwZikpCisjZGVmaW5lIE1JRElNS01JTk9SKHUsIGQsIGMpIFBDTU1LTUlOT1IodSwg
ZCwgYykKKyNkZWZpbmUgTUlESVVOSVQoeSkgKChtaW5vcih5KSA+PiA0KSAmIDB4MGYpCisjZGVm
aW5lIE1JRElERVYoeSkgKG1pbm9yKHkpICYgMHgwZikKKworLyogVGhlc2UgYXJlIHRoZSBlbnRy
aWVzIHRvIHRoZSBzZXF1ZW5jZXIgZHJpdmVyLiAqLworc3RhdGljIGRfb3Blbl90IHNlcV9vcGVu
Oworc3RhdGljIGRfY2xvc2VfdCBzZXFfY2xvc2U7CitzdGF0aWMgZF9pb2N0bF90IHNlcV9pb2N0
bDsKK3N0YXRpYyBkX3JlYWRfdCBzZXFfcmVhZDsKK3N0YXRpYyBkX3dyaXRlX3Qgc2VxX3dyaXRl
Oworc3RhdGljIGRfcG9sbF90IHNlcV9wb2xsOworI2RlZmluZSBNSURJX01BSk9SIDMwCisKK3N0
YXRpYyBzdHJ1Y3QgY2RldnN3IHNlcV9jZGV2c3cgPSB7CisJLmRfdmVyc2lvbiA9IERfVkVSU0lP
TiwKKwkuZF9vcGVuID0Jc2VxX29wZW4sCisJLmRfY2xvc2UgPQlzZXFfY2xvc2UsCisJLmRfcmVh
ZCA9CXNlcV9yZWFkLAorCS5kX3dyaXRlID0Jc2VxX3dyaXRlLAorCS5kX2lvY3RsID0Jc2VxX2lv
Y3RsLAorCS5kX3BvbGwgPQlzZXFfcG9sbCwKKwkuZF9uYW1lID0JInNlcXVlbmNlciIsCisJLmRf
bWFqID0JTUlESV9NQUpPUiwKK307CisKK3N0cnVjdCBzZXFfc29mdGMgeworCUtPQkpfRklFTERT
OworCisJc3RydWN0IG10eCBzZXFfbG9jaywgcV9sb2NrOworCXN0cnVjdCBjdiBlbXB0eV9jdiwg
cmVzZXRfY3YsIGluX2N2LCBvdXRfY3YsIHN0YXRlX2N2LCB0aF9jdjsKKworCU1JRElRX0hFQUQo
LCB1X2NoYXIpIGluX3EsIG91dF9xOworCisJdV9sb25nICBmbGFnczsKKwkvKiBGbGFncyAocHJv
dGVjdGVkIGJ5IGZsYWdfbXR4IG9mIG1pZGlkZXZfaW5mbykgKi8KKwlpbnQJCWZmbGFnczsJCSAg
LyogQWNjZXNzIG1vZGUgKi8KKwlpbnQJCW11c2ljOworCisJaW50CQlvdXRfd2F0ZXI7CS8qIFNl
cXVlbmNlIG91dHB1dCB0aHJlc2hvdWxkICovCisJc25kX3N5bmNfcGFybQlzeW5jX3Bhcm07CQkv
KiBBSU9TWU5DIHBhcmFtZXRlciBzZXQgKi8KKwlzdHJ1Y3QgdGhyZWFkCSpzeW5jX3RocmVhZDsJ
CS8qIEFJT1NZTkNpbmcgdGhyZWFkICovCisJc3RydWN0IHNlbGluZm8gaW5fc2VsLCBvdXRfc2Vs
OworCWludCBtaWRpX251bWJlcjsKKwlzdHJ1Y3QgY2RldiAqc2VxZGV2LCAqbXVzaWNkZXY7CisJ
aW50IHVuaXQ7CisJaW50IG1heHVuaXRzOworCWtvYmpfdCAqbWlkaXM7CisJaW50ICptaWRpX2Zs
YWdzOworCWtvYmpfdCBtYXBwZXI7CisJdm9pZCAqbWFwcGVyX2Nvb2tpZTsKKwlzdHJ1Y3QgdGlt
ZXZhbCB0aW1lcnN0b3AsIHRpbWVyc3ViOworCWludCB0aW1lcmJhc2UsIHRlbXBvOworCWludCB0
aW1lcnJ1bjsKKwlpbnQgZG9uZTsKKwlpbnQgcGxheWluZzsKKwlpbnQgcmVjb3JkaW5nOworCWlu
dCBidXN5OworCWludCBwcmVfZXZlbnRfdGltZW91dDsKKwlpbnQgd2FpdGluZzsKK307CisKKy8q
CisgKiBNb2R1bGUgc3BlY2lmaWMgc3R1ZmYsIGluY2x1ZGluZyBob3cgbWFueSBzZXF1ZWNlcnMK
KyAqIHdlIGN1cnJlbnRseSBvd24uCisgKi8KKworU1lTQ1RMX05PREUoX2h3X21pZGksIE9JRF9B
VVRPLCBzZXEsIENUTEZMQUdfUkQsIDAsICJNaWRpIHNlcXVlbmNlciIpOworCitpbnQJCQkJCXNl
cV9kZWJ1ZzsKK1NZU0NUTF9JTlQoX2h3X21pZGlfc2VxLCBPSURfQVVUTywgZGVidWcsIENUTEZM
QUdfUlcsICZzZXFfZGVidWcsIDAsICIiKTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3NlcWV2ZW50
W10gPSB7CisJe1NFUV9OT1RFT0ZGLAkJIlNFUV9OT1RFT0ZGIn0sCisJe1NFUV9OT1RFT04sCQki
U0VRX05PVEVPTiJ9LAorCXtTRVFfV0FJVCwJCSJTRVFfV0FJVCJ9LAorCXtTRVFfUEdNQ0hBTkdF
LAkJIlNFUV9QR01DSEFOR0UifSwKKwl7U0VRX1NZTkNUSU1FUiwJCSJTRVFfU1lOQ1RJTUVSIn0s
CisJe1NFUV9NSURJUFVUQywJCSJTRVFfTUlESVBVVEMifSwKKwl7U0VRX0RSVU1PTiwJCSJTRVFf
RFJVTU9OIn0sCisJe1NFUV9EUlVNT0ZGLAkJIlNFUV9EUlVNT0ZGIn0sCisJe1NFUV9FQ0hPLAkJ
IlNFUV9FQ0hPIn0sCisJe1NFUV9BRlRFUlRPVUNILAkiU0VRX0FGVEVSVE9VQ0gifSwKKwl7U0VR
X0NPTlRST0xMRVIsCSJTRVFfQ09OVFJPTExFUiJ9LAorCXtTRVFfQkFMQU5DRSwJCSJTRVFfQkFM
QU5DRSJ9LAorCXtTRVFfVk9MTU9ERSwJCSJTRVFfVk9MTU9ERSJ9LAorCXtTRVFfRlVMTFNJWkUs
CQkiU0VRX0ZVTExTSVpFIn0sCisJe1NFUV9QUklWQVRFLAkJIlNFUV9QUklWQVRFIn0sCisJe1NF
UV9FWFRFTkRFRCwJCSJTRVFfRVhURU5ERUQifSwKKwl7RVZfU0VRX0xPQ0FMLAkJIkVWX1NFUV9M
T0NBTCJ9LAorCXtFVl9USU1JTkcsCQkiRVZfVElNSU5HIn0sCisJe0VWX0NITl9DT01NT04sCQki
RVZfQ0hOX0NPTU1PTiJ9LAorCXtFVl9DSE5fVk9JQ0UsCQkiRVZfQ0hOX1ZPSUNFIn0sCisJe0VW
X1NZU0VYLAkJIkVWX1NZU0VYIn0sCisJey0xLAkJCU5VTEx9LAorfTsKKworbWlkaV9jbWR0YWIJ
Y21kdGFiX3NlcWlvY3RsW10gPSB7CisJe1NORENUTF9TRVFfUkVTRVQsCSJTTkRDVExfU0VRX1JF
U0VUIn0sCisJe1NORENUTF9TRVFfU1lOQywJIlNORENUTF9TRVFfU1lOQyJ9LAorCXtTTkRDVExf
U1lOVEhfSU5GTywJIlNORENUTF9TWU5USF9JTkZPIn0sCisJe1NORENUTF9TRVFfQ1RSTFJBVEUs
CSJTTkRDVExfU0VRX0NUUkxSQVRFIn0sCisJe1NORENUTF9TRVFfR0VUT1VUQ09VTlQsCSJTTkRD
VExfU0VRX0dFVE9VVENPVU5UIn0sCisJe1NORENUTF9TRVFfR0VUSU5DT1VOVCwJIlNORENUTF9T
RVFfR0VUSU5DT1VOVCJ9LAorCXtTTkRDVExfU0VRX1BFUkNNT0RFLAkiU05EQ1RMX1NFUV9QRVJD
TU9ERSJ9LAorCXtTTkRDVExfRk1fTE9BRF9JTlNUUiwJIlNORENUTF9GTV9MT0FEX0lOU1RSIn0s
CisJe1NORENUTF9TRVFfVEVTVE1JREksCSJTTkRDVExfU0VRX1RFU1RNSURJIn0sCisJe1NORENU
TF9TRVFfUkVTRVRTQU1QTEVTLAkiU05EQ1RMX1NFUV9SRVNFVFNBTVBMRVMifSwKKwl7U05EQ1RM
X1NFUV9OUlNZTlRIUywJIlNORENUTF9TRVFfTlJTWU5USFMifSwKKwl7U05EQ1RMX1NFUV9OUk1J
RElTLAkiU05EQ1RMX1NFUV9OUk1JRElTIn0sCisJe1NORENUTF9TRVFfR0VUVElNRSwJIlNORENU
TF9TRVFfR0VUVElNRSJ9LAorCXtTTkRDVExfTUlESV9JTkZPLAkiU05EQ1RMX01JRElfSU5GTyJ9
LAorCXtTTkRDVExfU0VRX1RIUkVTSE9MRCwJIlNORENUTF9TRVFfVEhSRVNIT0xEIn0sCisJe1NO
RENUTF9TWU5USF9NRU1BVkwsCSJTTkRDVExfU1lOVEhfTUVNQVZMIn0sCisJe1NORENUTF9GTV80
T1BfRU5BQkxFLAkiU05EQ1RMX0ZNXzRPUF9FTkFCTEUifSwKKwl7U05EQ1RMX1BNR1JfQUNDRVNT
LAkiU05EQ1RMX1BNR1JfQUNDRVNTIn0sCisJe1NORENUTF9TRVFfUEFOSUMsCSJTTkRDVExfU0VR
X1BBTklDIn0sCisJe1NORENUTF9TRVFfT1VUT0ZCQU5ELAkiU05EQ1RMX1NFUV9PVVRPRkJBTkQi
fSwKKwl7U05EQ1RMX1RNUl9USU1FQkFTRSwJIlNORENUTF9UTVJfVElNRUJBU0UifSwKKwl7U05E
Q1RMX1RNUl9TVEFSVCwJIlNORENUTF9UTVJfU1RBUlQifSwKKwl7U05EQ1RMX1RNUl9TVE9QLAki
U05EQ1RMX1RNUl9TVE9QIn0sCisJe1NORENUTF9UTVJfQ09OVElOVUUsCSJTTkRDVExfVE1SX0NP
TlRJTlVFIn0sCisJe1NORENUTF9UTVJfVEVNUE8sCSJTTkRDVExfVE1SX1RFTVBPIn0sCisJe1NO
RENUTF9UTVJfU09VUkNFLAkiU05EQ1RMX1RNUl9TT1VSQ0UifSwKKwl7U05EQ1RMX1RNUl9NRVRS
T05PTUUsCSJTTkRDVExfVE1SX01FVFJPTk9NRSJ9LAorCXtTTkRDVExfVE1SX1NFTEVDVCwJIlNO
RENUTF9UTVJfU0VMRUNUIn0sCisJe1NORENUTF9NSURJX1BSRVRJTUUsCSJTTkRDVExfTUlESV9Q
UkVUSU1FIn0sCisJe0FJT05XUklURSwJCSJBSU9OV1JJVEUifSwKKwl7QUlPR1NJWkUsCQkiQUlP
R1NJWkUifSwKKwl7QUlPU1NJWkUsCQkiQUlPU1NJWkUifSwKKwl7QUlPR0ZNVCwJCSJBSU9HRk1U
In0sCisJe0FJT1NGTVQsCQkiQUlPU0ZNVCJ9LAorCXtBSU9HTUlYLAkJIkFJT0dNSVgifSwKKwl7
QUlPU01JWCwJCSJBSU9TTUlYIn0sCisJe0FJT1NUT1AsCQkiQUlPU1RPUCJ9LAorCXtBSU9TWU5D
LAkJIkFJT1NZTkMifSwKKwl7QUlPR0NBUCwJCSJBSU9HQ0FQIn0sCisJey0xLAkJCU5VTEx9LAor
fTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3RpbWVyW10gPSB7CisJe1RNUl9XQUlUX1JFTCwJIlRN
Ul9XQUlUX1JFTCJ9LAorCXtUTVJfV0FJVF9BQlMsCSJUTVJfV0FJVF9BQlMifSwKKwl7VE1SX1NU
T1AsCSJUTVJfU1RPUCJ9LAorCXtUTVJfU1RBUlQsCSJUTVJfU1RBUlQifSwKKwl7VE1SX0NPTlRJ
TlVFLAkiVE1SX0NPTlRJTlVFIn0sCisJe1RNUl9URU1QTywJIlRNUl9URU1QTyJ9LAorCXtUTVJf
RUNITywJIlRNUl9FQ0hPIn0sCisJe1RNUl9DTE9DSywJIlRNUl9DTE9DSyJ9LAorCXtUTVJfU1BQ
LAkiVE1SX1NQUCJ9LAorCXtUTVJfVElNRVNJRywJIlRNUl9USU1FU0lHIn0sCisJey0xLAkJTlVM
TH0sCit9OworCittaWRpX2NtZHRhYgljbWR0YWJfc2VxY3ZbXSA9IHsKKwl7TUlESV9OT1RFT0ZG
LAkJIk1JRElfTk9URU9GRiJ9LAorCXtNSURJX05PVEVPTiwJCSJNSURJX05PVEVPTiJ9LAorCXtN
SURJX0tFWV9QUkVTU1VSRSwJIk1JRElfS0VZX1BSRVNTVVJFIn0sCisJey0xLAkJCU5VTEx9LAor
fTsKKworbWlkaV9jbWR0YWIJY21kdGFiX3NlcWNjbW5bXSA9IHsKKwl7TUlESV9DVExfQ0hBTkdF
LAkiTUlESV9DVExfQ0hBTkdFIn0sCisJe01JRElfUEdNX0NIQU5HRSwJIk1JRElfUEdNX0NIQU5H
RSJ9LAorCXtNSURJX0NITl9QUkVTU1VSRSwJIk1JRElfQ0hOX1BSRVNTVVJFIn0sCisJe01JRElf
UElUQ0hfQkVORCwJIk1JRElfUElUQ0hfQkVORCJ9LAorCXtNSURJX1NZU1RFTV9QUkVGSVgsCSJN
SURJX1NZU1RFTV9QUkVGSVgifSwKKwl7LTEsCQkJTlVMTH0sCit9OworCisvKgorICogc3RhdGlj
IGNvbnN0IGNoYXIgKm1wdTQwMV9tcHJvdmlkZXIoa29ial90IG9iaiwgc3RydWN0IG1wdTQwMSAq
bSk7CisgKi8KKworc3RhdGljIGtvYmpfbWV0aG9kX3Qgc2VxX21ldGhvZHNbXSA9IHsKKwkvKiBL
T0JKTUVUSE9EKG1wdV9wcm92aWRlcixtcHU0MDFfbXByb3ZpZGVyKSwgKi8KKyAgICAgICAgeyAw
LCAwIH0KK307CitERUZJTkVfQ0xBU1Moc2VxdWVuY2VyLCBzZXFfbWV0aG9kcywgMCk7CisKKy8q
IFRoZSBmb2xsb3dpbmdzIGFyZSB0aGUgbG9jYWwgZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHNl
cV9jb252ZXJ0b2xkKHVfY2hhciAqZXZlbnQsIHVfY2hhciAqb3V0KTsKKy8qCisgKiBzdGF0aWMg
dm9pZCBzZXFfbWlkaWlucHV0KHN0cnVjdCBzZXFfc29mdGMgKiBzY3AsIHZvaWQgKm1kKTsKKyAq
Lworc3RhdGljIHZvaWQgc2VxX3Jlc2V0KHN0cnVjdCBzZXFfc29mdGMgKiBzY3ApOworc3RhdGlj
IGludCBzZXFfc3luYyhzdHJ1Y3Qgc2VxX3NvZnRjICogc2NwKTsKKworc3RhdGljIGludCBzZXFf
cHJvY2Vzc2V2ZW50KHN0cnVjdCBzZXFfc29mdGMgKiBzY3AsIHVfY2hhciAqZXZlbnQpOworCitz
dGF0aWMgaW50IHNlcV90aW1pbmcoc3RydWN0IHNlcV9zb2Z0YyAqIHNjcCwgdV9jaGFyICpldmVu
dCk7CitzdGF0aWMgaW50IHNlcV9sb2NhbChzdHJ1Y3Qgc2VxX3NvZnRjICogc2NwLCB1X2NoYXIg
KmV2ZW50KTsKKworc3RhdGljIGludCBzZXFfY2hudm9pY2Uoc3RydWN0IHNlcV9zb2Z0YyAqIHNj
cCwga29ial90IG1kLCB1X2NoYXIgKmV2ZW50KTsKK3N0YXRpYyBpbnQgc2VxX2NobmNvbW1vbihz
dHJ1Y3Qgc2VxX3NvZnRjICogc2NwLCBrb2JqX3QgbWQsIHVfY2hhciAqZXZlbnQpOworc3RhdGlj
IGludCBzZXFfc3lzZXgoc3RydWN0IHNlcV9zb2Z0YyAqIHNjcCwga29ial90IG1kLCB1X2NoYXIg
KmV2ZW50KTsKKworc3RhdGljIGludCBzZXFfZmV0Y2hfbWlkKHN0cnVjdCBzZXFfc29mdGMgKnNj
cCwgaW50IHVuaXQsIGtvYmpfdCAqbWQpOwordm9pZCBzZXFfY29weXRvaW5wdXQoc3RydWN0IHNl
cV9zb2Z0YyAqc2NwLCB1X2NoYXIgKmV2ZW50LCBpbnQgbGVuKTsKK2ludCBzZXFfbW9kZXZlbnQo
bW9kdWxlX3QgbW9kLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7CitzdHJ1Y3Qgc2VxX3NvZnRjICpz
ZXFzWzEwXTsKK3N0YXRpYyBzdHJ1Y3QgbXR4CQkJc2VxaW5mb19tdHg7CitzdGF0aWMgdV9sb25n
CQkJCW5zZXEgPSAwOworCitzdGF0aWMgdm9pZCB0aW1lcl9zdGFydChzdHJ1Y3Qgc2VxX3NvZnRj
ICp0KTsKK3N0YXRpYyB2b2lkIHRpbWVyX3N0b3Aoc3RydWN0IHNlcV9zb2Z0YyAqdCk7CitzdGF0
aWMgdm9pZCB0aW1lcl9zZXR2YWxzKHN0cnVjdCBzZXFfc29mdGMgKnQsIGludCB0ZW1wbywgaW50
IHRpbWVyYmFzZSk7CitzdGF0aWMgdm9pZCB0aW1lcl93YWl0KHN0cnVjdCBzZXFfc29mdGMgKnQs
IGludCB0aWNrcywgaW50IHdhaXRfYWJzKTsKK3N0YXRpYyBpbnQgdGltZXJfbm93KHN0cnVjdCBz
ZXFfc29mdGMgKnQpOworCisKK3N0YXRpYyB2b2lkCit0aW1lcl9zdGFydChzdHJ1Y3Qgc2VxX3Nv
ZnRjICp0KQoreworCXQtPnRpbWVycnVuID0gMTsKKwlnZXRtaWNyb3RpbWUoJnQtPnRpbWVyc3Vi
KTsKK30KKworc3RhdGljIHZvaWQKK3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBzZXFfc29mdGMgKnQp
Cit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJaWYgKHQtPnRpbWVycnVuID09IDEpCisJICAg
IHJldHVybjsKKwl0LT50aW1lcnJ1biA9IDE7CisJZ2V0bWljcm90aW1lKCZub3cpOworCXRpbWV2
YWxzdWIoJm5vdywgJnQtPnRpbWVyc3RvcCk7CisJdGltZXZhbGFkZCgmdC0+dGltZXJzdWIsICZu
b3cpOworfQorCitzdGF0aWMgdm9pZAordGltZXJfc3RvcChzdHJ1Y3Qgc2VxX3NvZnRjICp0KQor
eworCXQtPnRpbWVycnVuID0gMDsKKwlnZXRtaWNyb3RpbWUoJnQtPnRpbWVyc3RvcCk7Cit9CisK
K3N0YXRpYyB2b2lkCit0aW1lcl9zZXR2YWxzKHN0cnVjdCBzZXFfc29mdGMgKnQsIGludCB0ZW1w
bywgaW50IHRpbWVyYmFzZSkKK3sKKwl0LT50ZW1wbyA9IHRlbXBvOworCXQtPnRpbWVyYmFzZSA9
IHRpbWVyYmFzZTsKK30KKworc3RhdGljIHZvaWQKK3RpbWVyX3dhaXQoc3RydWN0IHNlcV9zb2Z0
YyAqdCwgaW50IHRpY2tzLCBpbnQgd2FpdF9hYnMpCit7CisJc3RydWN0IHRpbWV2YWwgbm93LCB3
aGVuOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGk7CisKKwl3aGlsZSAodC0+dGlt
ZXJydW4gPT0gMCkgeworCSAgICBTRVFfREVCVUcoMixwcmludGYoIlRpbWVyIHdhaXQgd2hlbiB0
aW1lciBpc24ndCBydW5uaW5nXG4iKSk7CisJICAgIC8qCisJICAgICAqIFRoZSBvbGQgc2VxdWVu
Y2VyIHVzZWQgdGltZW91dHMgdGhhdCBvbmx5IGluY3JlYXNlZAorCSAgICAgKiB0aGUgdGltZXIg
d2hlbiB0aGUgdGltZXIgd2FzIHJ1bm5pbmcuCisJICAgICAqIEhlbmNlIHRoZSBzZXF1ZW5jZXIg
d291bGQgc3RpY2sgKD8pIGlmIHRoZQorCSAgICAgKiB0aW1lciB3YXMgZGlzYWJsZWQuCisJICAg
ICAqLworCSAgICBjdl93YWl0KCZ0LT5yZXNldF9jdiwgJnQtPnNlcV9sb2NrKTsKKwkgICAgaWYg
KHQtPnBsYXlpbmcgPT0gMCkKKwkJcmV0dXJuOworCX0KKworCWkgPSB0aWNrcyAqIDYwdWxsICog
MTAwMDAwMHVsbCAvICh0LT50ZW1wbyAqIHQtPnRpbWVyYmFzZSk7CisKKwl3aGVuLnR2X3NlYyA9
IGkgLyAxMDAwMDAwOworCXdoZW4udHZfdXNlYyA9IGkgJSAxMDAwMDAwOworCisjaWYgMAorCXBy
aW50ZigidGltZXJfd2FpdCB0ZW1wbyAlZCB0aW1lcmJhc2UgJWQgdGlja3MgJWQgYWJzICVkIHVf
c2VjICVsbHVcbiIsIHQtPnRlbXBvLCB0LT50aW1lcmJhc2UsIHRpY2tzLCB3YWl0X2FicywgaSk7
CisjZW5kaWYKKworCWlmICh3YWl0X2FicyAhPSAwKSB7CisJICAgIGdldG1pY3JvdGltZSgmbm93
KTsKKwkgICAgdGltZXZhbHN1Yigmbm93LCAmdC0+dGltZXJzdWIpOworCSAgICB0aW1ldmFsc3Vi
KCZ3aGVuLCAmbm93KTsKKwl9CisKKwlpZiAod2hlbi50dl9zZWMgPCAwIHx8IHdoZW4udHZfdXNl
YyA8IDApIHsKKwkgICAgU0VRX0RFQlVHKDMscHJpbnRmKCJzZXFfdGltZXIgZXJyb3IgbmVnYXRp
dmUgdGltZSAlbGQuJTA2bGRcbiIsIAorCQkgICAgd2hlbi50dl9zZWMsd2hlbi50dl91c2VjKSk7
CisJICAgIHJldHVybjsKKwl9CisKKwlpID0gd2hlbi50dl9zZWMgKiAxMDAwMDAwdWxsOworCWkg
Kz0gd2hlbi50dl91c2VjOworCWkgKj0gaHo7CisJaSAvPSAxMDAwMDAwdWxsOworI2lmIDAKKwlw
cmludGYoInNlcV90aW1lciB1c2VjICVsbHUgdGlja3MgJWxsdVxuIiwgd2hlbi50dl9zZWMgKiAx
MDAwMDAwdWxsICsgd2hlbi50dl91c2VjLCBpKTsKKyNlbmRpZgorCXQtPndhaXRpbmcgPSAxOwor
CXJldCA9IGN2X3RpbWVkd2FpdCgmdC0+cmVzZXRfY3YsICZ0LT5zZXFfbG9jaywgaSArIDEpOwor
CXQtPndhaXRpbmcgPSAwOworCisJaWYgKHJldCAhPSBFV09VTERCTE9DSykKKwkgICAgU0VRX0RF
QlVHKDMscHJpbnRmKCJzZXFfdGltZXIgZGlkbid0IHRpbWVvdXRcbiIpKTsKKworfQorCitzdGF0
aWMgaW50Cit0aW1lcl9ub3coc3RydWN0IHNlcV9zb2Z0YyAqdCkKK3sKKwlzdHJ1Y3QgdGltZXZh
bCBub3c7CisJdW5zaWduZWQgbG9uZyBsb25nIGk7CisJaW50IHJldDsKKworCWlmICh0LT50aW1l
cnJ1biA9PSAwKQorCSAgICBub3cgPSB0LT50aW1lcnN0b3A7CisJZWxzZQorCSAgICBnZXRtaWNy
b3RpbWUoJm5vdyk7CisKKwl0aW1ldmFsc3ViKCZub3csICZ0LT50aW1lcnN1Yik7CisKKwlpID0g
bm93LnR2X3NlYyAqIDEwMDAwMDB1bGw7CisJaSArPSBub3cudHZfdXNlYzsKKwlpICo9IHQtPnRp
bWVyYmFzZTsKKy8qCWkgLz0gdC0+dGVtcG87ICovCisJaSAvPSAxMDAwMDAwdWxsOworCisJcmV0
ID0gaTsKKwkvKgorCSAqIHByaW50ZigidGltZXJfbm93OiAlbGx1ICVkXG4iLCBpLCByZXQpOwor
CSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3NlcV9ldmVudHRocmVhZCh2
b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gYXJnOworCWNoYXIgZXZlbnRb
RVZfU1pdOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCXByaW50Zigic2VxX2V2ZW50
dGhyZWFkIHN0YXJ0ZWRcbiIpOworCXdoaWxlKHNjcC0+ZG9uZSA9PSAwKSB7CityZXN0YXJ0Ogor
CSAgICB3aGlsZSAoc2NwLT5wbGF5aW5nID09IDApIHsKKwkJY3Zfd2FpdCgmc2NwLT5zdGF0ZV9j
diwgJnNjcC0+c2VxX2xvY2spOworCQkgICAgaWYgKHNjcC0+ZG9uZSkKKwkJCWdvdG8gZG9uZTsK
KwkgICAgfQorCisJICAgIHdoaWxlIChNSURJUV9FTVBUWShzY3AtPm91dF9xKSkgeworCQljdl9i
cm9hZGNhc3QoJnNjcC0+ZW1wdHlfY3YpOworCQljdl93YWl0KCZzY3AtPm91dF9jdiwgJnNjcC0+
c2VxX2xvY2spOworCQlpZiAoc2NwLT5wbGF5aW5nID09IDApCisJCSAgICBnb3RvIHJlc3RhcnQ7
CisJCWlmIChzY3AtPmRvbmUpCisJCSAgICBnb3RvIGRvbmU7CisJICAgIH0KKworCSAgICBNSURJ
UV9ERVEoc2NwLT5vdXRfcSwgZXZlbnQsIEVWX1NaKTsKKworCSAgICBpZiAoTUlESVFfQVZBSUwo
c2NwLT5vdXRfcSkgPCBzY3AtPm91dF93YXRlcikgeworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0
X2N2KTsKKwkJc2Vsd2FrZXVwKCZzY3AtPm91dF9zZWwpOworCSAgICB9CisKKwkgICAgc2VxX3By
b2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwl9CisKK2RvbmU6CisJY3ZfYnJvYWRjYXN0KCZzY3At
PnRoX2N2KTsKKwltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwltdHhfbG9jaygmR2lhbnQp
OworCXByaW50Zigic2VxX2V2ZW50dGhyZWFkIGZpbmlzaGVkXG4iKTsKKwlrdGhyZWFkX2V4aXQo
MCk7Cit9CisKKy8qCisgKiBzZXFfcHJvY2Vzc2V2ZW50OiAgVGhpcyBtYXliZSBjYWxsZWQgYnkg
dGhlIGV2ZW50IHRocmVhZCBvciB0aGUgSU9DVEwKKyAqIGhhbmRsZXIgZm9yIHF1ZXVlZCBhbmQg
b3V0IG9mIGJhbmQgZXZlbnRzIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGludAorc2VxX3By
b2Nlc3NldmVudChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIHVfY2hhciAqZXZlbnQpCit7CisJaW50
IHJldDsKKwlrb2JqX3QgbTsKKworCXJldCA9IDA7CisKKwlpZiAoZXZlbnRbMF0gPT0gRVZfU0VR
X0xPQ0FMKQorCQlyZXQgPSBzZXFfbG9jYWwoc2NwLCBldmVudCk7CisJZWxzZSBpZiAoZXZlbnRb
MF0gPT0gRVZfVElNSU5HKQorCQlyZXQgPSBzZXFfdGltaW5nKHNjcCwgZXZlbnQpOworCWVsc2Ug
aWYgKGV2ZW50WzBdICE9IEVWX0NITl9WT0lDRSAmJgorCQkJZXZlbnRbMF0gIT0gRVZfQ0hOX0NP
TU1PTiAmJgorCQkJZXZlbnRbMF0gIT0gRVZfU1lTRVggJiYKKwkJCWV2ZW50WzBdICE9IFNFUV9N
SURJUFVUQykgeworCQlyZXQgPSAxOworCQlTRVFfREVCVUcoMixwcmludGYoInNlcV9wcm9jZXNz
ZXZlbnQgbm90IGtub3duICVkXG4iLCBldmVudFswXSkpOworCX0gZWxzZSBpZiAoc2VxX2ZldGNo
X21pZChzY3AsIGV2ZW50WzFdLCAmbSkgIT0gMCkgeworCQlyZXQgPSAxOworCQlTRVFfREVCVUco
MixwcmludGYoInNlcV9wcm9jZXNzZXZlbnQgbWlkaSB1bml0IG5vdCBmb3VuZCAlZFxuIiwgZXZl
bnRbMV0pKTsKKwl9IGVsc2Ugc3dpdGNoKGV2ZW50WzBdKSB7CisJCWNhc2UgRVZfQ0hOX1ZPSUNF
OiAKKwkJCXJldCA9IHNlcV9jaG52b2ljZShzY3AsIG0sIGV2ZW50KTsKKwkJCWJyZWFrOworCQlj
YXNlIEVWX0NITl9DT01NT046CisJCQlyZXQgPSBzZXFfY2huY29tbW9uKHNjcCwgbSwgZXZlbnQp
OworCQkJYnJlYWs7CisJCWNhc2UgRVZfU1lTRVg6CisJCQlyZXQgPSBzZXFfc3lzZXgoc2NwLCBt
LCBldmVudCk7CisJCQlicmVhazsKKwkJY2FzZSBTRVFfTUlESVBVVEM6CisJCQltdHhfdW5sb2Nr
KCZzY3AtPnNlcV9sb2NrKTsKKwkJCXJldCA9IFNZTlRIX1dSSVRFUkFXKG0sICZldmVudFsyXSwg
MSk7CisJCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQlicmVhazsKKwl9CisJcmV0dXJu
IHJldDsKK30KKworc3RhdGljIGludAorc2VxX2FkZHVuaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc2Vx
X3NvZnRjICpzY3A7CisJaW50IHJldDsKKwl1X2NoYXIgKmJ1ZjsKKworCS8qIEFsbG9jYXRlIHRo
ZSBzb2Z0Yy4gKi8KKwlyZXQgPSBFTk9NRU07CisJc2NwID0gbWFsbG9jKHNpemVvZigqc2NwKSwg
TV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAoc2NwID09IE5VTEwpIHsKKwkJU0VR
X0RFQlVHKDEscHJpbnRmKCJzZXFfYWRkdW5pdDogc29mdGMgYWxsb2NhdGlvbiBmYWlsZWQuXG4i
KSk7CisJCWdvdG8gZXJyOworCX0KKwlrb2JqX2luaXQoKGtvYmpfdCkgc2NwLCAmc2VxdWVuY2Vy
X2NsYXNzKTsKKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikgKiBFVl9TWiAqIDEwMjQsIE1f
VEVNUCwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChidWYgPT0gTlVMTCkKKwkgICAgZ290byBl
cnI7CisJTUlESVFfSU5JVChzY3AtPmluX3EsIGJ1ZiwgRVZfU1ogKiAxMDI0KTsKKwlidWYgPSBt
YWxsb2Moc2l6ZW9mKCpidWYpICogRVZfU1ogKiAxMDI0LCBNX1RFTVAsIE1fTk9XQUlUIHwgTV9a
RVJPKTsKKwlpZiAoYnVmID09IE5VTEwpCisJICAgIGdvdG8gZXJyOworCU1JRElRX0lOSVQoc2Nw
LT5vdXRfcSwgYnVmLCBFVl9TWiAqIDEwMjQpOworCXJldCA9IEVJTlZBTDsKKworCXNjcC0+bWlk
aXMgPSBtYWxsb2Moc2l6ZW9mKGtvYmpfdCkgKiAzMiwgTV9URU1QLCBNX05PV0FJVCB8IE1fWkVS
Tyk7CisJc2NwLT5taWRpX2ZsYWdzID0gbWFsbG9jKHNpemVvZigqc2NwLT5taWRpX2ZsYWdzKSAq
IDMyLCBNX1RFTVAsCisJCU1fTk9XQUlUIHwgTV9aRVJPKTsKKworCWlmICggc2NwLT5taWRpcyA9
PSBOVUxMIHx8IHNjcC0+bWlkaV9mbGFncyA9PSBOVUxMKQorCSAgICBnb3RvIGVycjsKKworCXNj
cC0+ZmxhZ3MgPSAwOworCisJbXR4X2luaXQoJnNjcC0+c2VxX2xvY2ssICJzZXFmbHEiLCAwLCAw
KTsKKwljdl9pbml0KCZzY3AtPnN0YXRlX2N2LCAic2Vxc3RhdGUiKTsKKwljdl9pbml0KCZzY3At
PmVtcHR5X2N2LCAic2VxZW1wdHkiKTsKKwljdl9pbml0KCZzY3AtPnJlc2V0X2N2LCAic2VxdGlt
ZXIiKTsKKwljdl9pbml0KCZzY3AtPm91dF9jdiwgInNlcXFvdXQiKTsKKwljdl9pbml0KCZzY3At
PmluX2N2LCAic2VxcWluIik7CisJY3ZfaW5pdCgmc2NwLT50aF9jdiwgInNlcXN0YXJ0Iik7CisK
KwkvKgorCSAqIEluaXQgdGhlIGRhbW4gdGltZXIKKwkgKi8KKworCXNjcC0+bWFwcGVyID0gbWlk
aW1hcHBlcl9hZGRzZXEoc2NwLCAmc2NwLT51bml0LCAmc2NwLT5tYXBwZXJfY29va2llKTsKKwlp
ZiAoc2NwLT5tYXBwZXIgPT0gTlVMTCkKKwkgICAgZ290byBlcnI7CisKKwlzY3AtPnNlcWRldiA9
IG1ha2VfZGV2KCZzZXFfY2RldnN3LAorCQlNSURJTUtNSU5PUihzY3AtPnVuaXQsIFNORF9ERVZf
U0VRLDApLCBVSURfUk9PVCwgCisJCUdJRF9XSEVFTCwgMDY2NiwgInNlcXVlbmNlciVkIiwgc2Nw
LT51bml0KTsKKworCXNjcC0+bXVzaWNkZXYgPSBtYWtlX2Rldigmc2VxX2NkZXZzdywKKwkJTUlE
SU1LTUlOT1Ioc2NwLT51bml0LCBTTkRfREVWX01VU0lDLDApLCBVSURfUk9PVCwgCisJCUdJRF9X
SEVFTCwgMDY2NiwgIm11c2ljJWQiLCBzY3AtPnVuaXQpOworCisJaWYgKHNjcC0+c2VxZGV2ID09
IE5VTEwgfHwgc2NwLT5tdXNpY2RldiA9PSBOVUxMKQorCSAgICBnb3RvIGVycjsKKwkvKgorCSAq
IFRPRE86IEFkZCB0byBsaXN0IG9mIHNlcXVlbmNlcnMgdGhpcyBtb2R1bGUgcHJvdmlkZXMKKwkg
Ki8KKworCXJldCA9IGt0aHJlYWRfY3JlYXRlKHNlcV9ldmVudHRocmVhZCwgc2NwLCBOVUxMLCBS
RkhJR0hQSUQsIDAsICJzZXF1ZW5jZXIgJTAyZCIsIHNjcC0+dW5pdCk7CisKKwlpZiAocmV0KQor
CSAgICBnb3RvIGVycjsKKworCXNjcC0+c2VxZGV2LT5zaV9kcnYxID0gc2NwLT5tdXNpY2Rldi0+
c2lfZHJ2MSA9IHNjcDsKKworCXByaW50Zigic2VxdWVuY2VyICVkIGNyZWF0ZWQgc2NwICVwXG4i
LCBzY3AtPnVuaXQsIHNjcCk7CisKKwlyZXQgPSAwOworCisJbXR4X2xvY2soJnNlcWluZm9fbXR4
KTsKKwlzZXFzW25zZXErK109c2NwOworCW10eF91bmxvY2soJnNlcWluZm9fbXR4KTsKKworCWdv
dG8gb2s7CisKK2VycjoKKwlpZiAoc2NwICE9IE5VTEwpIHsKKwkgICAgaWYgKHNjcC0+c2VxZGV2
ICE9IE5VTEwpCisJCWRlc3Ryb3lfZGV2KHNjcC0+c2VxZGV2KTsKKwkgICAgaWYgKHNjcC0+bXVz
aWNkZXYgIT0gTlVMTCkKKwkJZGVzdHJveV9kZXYoc2NwLT5tdXNpY2Rldik7CisJICAgIC8qCisJ
ICAgICAqIFRPRE86IERlc3Ryb3kgbXV0ZXggYW5kIGN2CisJICAgICAqLworCSAgICBpZiAoc2Nw
LT5taWRpcyAhPSBOVUxMKQorCQlmcmVlKHNjcC0+bWlkaXMsIE1fVEVNUCk7CisJICAgIGlmIChz
Y3AtPm1pZGlfZmxhZ3MgIT0gTlVMTCkKKwkJZnJlZShzY3AtPm1pZGlfZmxhZ3MsIE1fVEVNUCk7
CisJICAgIGlmIChzY3AtPm91dF9xLmIpCisJCWZyZWUoc2NwLT5vdXRfcS5iLCBNX1RFTVApOwor
CSAgICBpZiAoc2NwLT5pbl9xLmIpCisJCWZyZWUoc2NwLT5pbl9xLmIsIE1fVEVNUCk7CisJICAg
IGZyZWUoc2NwLCBNX0RFVkJVRik7CisJfQorb2s6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj
IGludAorc2VxX2RlbHVuaXQoaW50IHVuaXQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0g
c2Vxc1t1bml0XTsKKwlpbnQgaTsKKworCS8vU0VRX0RFQlVHKDQscHJpbnRmKCJzZXFfZGVsdW5p
dDogJWRcbiIsIHVuaXQpKTsKKwlwcmludGYoInNlcV9kZWx1bml0OiAxIFxuIik7CisJbXR4X2xv
Y2soJnNjcC0+c2VxX2xvY2spOworCisJc2NwLT5wbGF5aW5nID0gMDsKKwlzY3AtPmRvbmUgPSAx
OworCWN2X2Jyb2FkY2FzdCgmc2NwLT5vdXRfY3YpOworCWN2X2Jyb2FkY2FzdCgmc2NwLT5zdGF0
ZV9jdik7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnJlc2V0X2N2KTsKKwlwcmludGYoInNlcV9kZWx1
bml0OiAyIFxuIik7CisJY3Zfd2FpdCgmc2NwLT50aF9jdiwgJnNjcC0+c2VxX2xvY2spOworCXBy
aW50Zigic2VxX2RlbHVuaXQ6IDMuMCBcbiIpOworCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2sp
OworCXByaW50Zigic2VxX2RlbHVuaXQ6IDMuMSBcbiIpOworCisJY3ZfZGVzdHJveSgmc2NwLT5z
dGF0ZV9jdik7CisJcHJpbnRmKCJzZXFfZGVsdW5pdDogNCBcbiIpOworCWN2X2Rlc3Ryb3koJnNj
cC0+ZW1wdHlfY3YpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDUgXG4iKTsKKwljdl9kZXN0cm95
KCZzY3AtPnJlc2V0X2N2KTsKKwlwcmludGYoInNlcV9kZWx1bml0OiA2IFxuIik7CisJY3ZfZGVz
dHJveSgmc2NwLT5vdXRfY3YpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDcgXG4iKTsKKwljdl9k
ZXN0cm95KCZzY3AtPmluX2N2KTsKKwlwcmludGYoInNlcV9kZWx1bml0OiA4IFxuIik7CisJY3Zf
ZGVzdHJveSgmc2NwLT50aF9jdik7CisKKwlwcmludGYoInNlcV9kZWx1bml0OiAxMCBcbiIpOwor
CWlmIChzY3AtPnNlcWRldikKKwkgICAgZGVzdHJveV9kZXYoc2NwLT5zZXFkZXYpOworCXByaW50
Zigic2VxX2RlbHVuaXQ6IDExIFxuIik7CisJaWYgKHNjcC0+bXVzaWNkZXYpCisJICAgIGRlc3Ry
b3lfZGV2KHNjcC0+bXVzaWNkZXYpOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDEyIFxuIik7CisJ
c2NwLT5zZXFkZXYgPSBzY3AtPm11c2ljZGV2ID0gTlVMTDsKKwlpZiAoc2NwLT5taWRpcyAhPSBO
VUxMKQorCSAgICBmcmVlKHNjcC0+bWlkaXMsIE1fVEVNUCk7CisJcHJpbnRmKCJzZXFfZGVsdW5p
dDogMTMgXG4iKTsKKwlpZiAoc2NwLT5taWRpX2ZsYWdzICE9IE5VTEwpCisJICAgIGZyZWUoc2Nw
LT5taWRpX2ZsYWdzLCBNX1RFTVApOworCXByaW50Zigic2VxX2RlbHVuaXQ6IDE0IFxuIik7CisJ
ZnJlZShzY3AtPm91dF9xLmIsIE1fVEVNUCk7CisJcHJpbnRmKCJzZXFfZGVsdW5pdDogMTUgXG4i
KTsKKwlmcmVlKHNjcC0+aW5fcS5iLCBNX1RFTVApOworCisJcHJpbnRmKCJzZXFfZGVsdW5pdDog
MTYgXG4iKTsKKworCW10eF9kZXN0cm95KCZzY3AtPnNlcV9sb2NrKTsKKwlwcmludGYoInNlcV9k
ZWx1bml0OiAxNyBcbiIpOworCWZyZWUoc2NwLCBNX0RFVkJVRik7CisKKwltdHhfbG9jaygmc2Vx
aW5mb19tdHgpOworCWZvciAoIGkgPSB1bml0IDsgaSA8IChuc2VxIC0gMSkgOyBpKysgKQorCSAg
ICBzZXFzW2ldID0gc2Vxc1tpKzFdOworCW5zZXEtLTsKKwltdHhfdW5sb2NrKCZzZXFpbmZvX210
eCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitzZXFfbW9kZXZlbnQobW9kdWxlX3QgbW9kLCBp
bnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsLCByOworCisJcmV0dmFsID0gMDsK
KworCXN3aXRjaCAodHlwZSkgeworCSAgICBjYXNlIE1PRF9MT0FEOgorCQltdHhfaW5pdCgmc2Vx
aW5mb19tdHgsICJzZXFtb2QiLCAwLCAwKTsKKwkJcmV0dmFsID0gc2VxX2FkZHVuaXQoKTsKKwkJ
YnJlYWs7CisKKwkgICAgY2FzZSBNT0RfVU5MT0FEOgorCQl3aGlsZSAobnNlcSkgeworCQkJcj1z
ZXFfZGVsdW5pdChuc2VxLTEpOworCQkJaWYgKHIpIHsKKwkJCQlyZXR2YWwgPSByOworCQkJCWJy
ZWFrOworCQkJfQorCQl9CisJCWlmKG5zZXEgPT0gMCkgeworCQkJcmV0dmFsID0gMDsKKwkJCW10
eF9kZXN0cm95KCZzZXFpbmZvX210eCk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoK
KwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorc2VxX2Zl
dGNoX21pZChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIGludCB1bml0LCBrb2JqX3QgKm1kKQorewor
CisJaWYgKHVuaXQgPiBzY3AtPm1pZGlfbnVtYmVyIHx8IHVuaXQgPCAwKQorCSAgICByZXR1cm4g
RUlOVkFMOworCisJKm1kID0gc2NwLT5taWRpc1t1bml0XTsKKworCXJldHVybiAwOworfQorCitp
bnQKK3NlcV9vcGVuKHN0cnVjdCBjZGV2ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3Ry
dWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2Ry
djE7CisJaW50IGk7CisKKwlpZiAoc2NwID09IE5VTEwpCisJICAgIHJldHVybiBFTlhJTzsKKwor
CVNFUV9ERUJVRygzLHByaW50Zigic2VxX29wZW46IHNjcCAlcCB1bml0ICVkLCBmbGFncyAweCV4
LlxuIiwKKwkJICAgIHNjcCwgc2NwLT51bml0LCBmbGFncykpOworCisJLyoKKwkgKiBNYXJrIHRo
aXMgZGV2aWNlIGJ1c3kuIAorCSAqLworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCWlm
IChzY3AtPmJ1c3kpIHsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJV
RygyLHByaW50Zigic2VxX29wZW46IHVuaXQgJWQgaXMgYnVzeS5cbiIsIHNjcC0+dW5pdCkpOwor
CQlyZXR1cm4gRUJVU1k7CisJfQorCXNjcC0+ZmZsYWdzID0gZmxhZ3M7CisJLyoKKwlpZiAoKHNj
cC0+ZmZsYWdzICYgT19OT05CTE9DSykgIT0gMCkKKwkJc2NwLT5mbGFncyB8PSBTRVFfRl9OQklP
OworCQkqLworCXNjcC0+bXVzaWMgPSBNSURJREVWKGlfZGV2KSA9PSBTTkRfREVWX01VU0lDOwor
CisJLyoKKwkgKiBFbnVtZXJhdGUgdGhlIGF2YWlsYWJsZSBtaWRpIGRldmljZXMKKwkgKi8KKwlz
Y3AtPm1pZGlfbnVtYmVyID0gMDsKKwlzY3AtPm1heHVuaXRzID0gbWlkaW1hcHBlcl9vcGVuKHNj
cC0+bWFwcGVyLCAmc2NwLT5tYXBwZXJfY29va2llKTsKKworCWlmIChzY3AtPm1heHVuaXRzID09
IDApCisJICAgIFNFUV9ERUJVRygyLHByaW50Zigic2VxX29wZW46IG5vIG1pZGkgZGV2aWNlc1xu
IikpOworCisJZm9yIChpID0gMCA7IGkgPCBzY3AtPm1heHVuaXRzOyBpKyspIHsKKwkgICAgc2Nw
LT5taWRpc1tzY3AtPm1pZGlfbnVtYmVyXSA9CisJCW1pZGltYXBwZXJfZmV0Y2hfc3ludGgoc2Nw
LT5tYXBwZXIsIHNjcC0+bWFwcGVyX2Nvb2tpZSwgaSk7CisJICAgIGlmIChzY3AtPm1pZGlzW3Nj
cC0+bWlkaV9udW1iZXJdKSB7CisJCWlmICggU1lOVEhfT1BFTihzY3AtPm1pZGlzW3NjcC0+bWlk
aV9udW1iZXJdLCBzY3AsIHNjcC0+ZmZsYWdzKQorCQkJIT0gMCApCisJCSAgICBzY3AtPm1pZGlz
W3NjcC0+bWlkaV9udW1iZXJdID0gTlVMTDsKKwkJZWxzZSB7CisJCSAgICBzY3AtPm1pZGlfZmxh
Z3Nbc2NwLT5taWRpX251bWJlcl0gPQorCQkJU1lOVEhfUVVFUlkoc2NwLT5taWRpc1tzY3AtPm1p
ZGlfbnVtYmVyXSk7CisJCSAgICBzY3AtPm1pZGlfbnVtYmVyKys7CisJCX0KKwkgICAgfQorCX0K
KworCXRpbWVyX3NldHZhbHMoc2NwLCA2MCwgMTAwKTsKKworCXRpbWVyX3N0YXJ0KHNjcCk7CisJ
dGltZXJfc3RvcChzY3ApOworCS8qCisJICogYWN0dWFsbHksIGlmIHdlJ3JlIGluIHJkb25seSBt
b2RlLCB3ZSBzaG91bGQgc3RhcnQgdGhlIHRpbWVyCisJICovCisJLyoKKwkgKiBUT0RPOiBIYW5k
bGUgcmVjb3JkaW5nIG5vdworCSAqLworCisJc2NwLT5vdXRfd2F0ZXIgPSBNSURJUV9TSVpFKHNj
cC0+b3V0X3EpIC8gMjsKKworCXNjcC0+YnVzeSA9IDE7CisJbXR4X3VubG9jaygmc2NwLT5zZXFf
bG9jayk7CisKKwlTRVFfREVCVUcoMixwcmludGYoInNlcV9vcGVuOiBvcGVuZWQsIG1vZGUgJXMu
XG4iLAorCQkgICAgc2NwLT5tdXNpYyA/ICJtdXNpYyIgOiAic2VxdWVuY2VyIikpOworCVNFUV9E
RUJVRygyLHByaW50ZigiU2VxdWVuY2VyICVkICVwIG9wZW5lZCBtYXh1bml0cyAlZCBtaWRpX251
bWJlciAlZDpcbiIsIHNjcC0+dW5pdCwgc2NwLCBzY3AtPm1heHVuaXRzLCBzY3AtPm1pZGlfbnVt
YmVyKSk7CisJZm9yIChpPTA7aTxzY3AtPm1pZGlfbnVtYmVyO2krKykKKwkJU0VRX0RFQlVHKDMs
cHJpbnRmKCIgIG1pZGkgJWQgJXBcbiIsIGksIHNjcC0+bWlkaXNbaV0pKTsKKworCXJldHVybiAw
OworfQorCisvKgorICogc2VxX2Nsb3NlCisgKi8KK2ludAorc2VxX2Nsb3NlKHN0cnVjdCBjZGV2
ICppX2RldiwgaW50IGZsYWdzLCBpbnQgbW9kZSwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJaW50
IGk7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisJaW50IHJldDsK
KworCWlmIChzY3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOworCisJU0VRX0RFQlVHKDIs
cHJpbnRmKCJzZXFfY2xvc2U6IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpKTsKKworCW10eF9sb2Nr
KCZzY3AtPnNlcV9sb2NrKTsKKworCXJldCA9IEVOWElPOworCWlmIChzY3AtPmJ1c3kgPT0gMCkK
KwkgICAgZ290byBlcnI7CisKKwlzZXFfcmVzZXQoc2NwKTsKKwlzZXFfc3luYyhzY3ApOworCisJ
Zm9yIChpID0gMCA7IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBpKyspCisJICAgIGlmIChzY3AtPm1p
ZGlzW2ldKQorCQlTWU5USF9DTE9TRShzY3AtPm1pZGlzW2ldKTsKKworCW1pZGltYXBwZXJfY2xv
c2Uoc2NwLT5tYXBwZXIsIHNjcC0+bWFwcGVyX2Nvb2tpZSk7CisKKwl0aW1lcl9zdG9wKHNjcCk7
CisKKwlzY3AtPmJ1c3kgPSAwOworCXJldCA9IDA7CisKK2VycjoKKwlTRVFfREVCVUcoMyxwcmlu
dGYoInNlcV9jbG9zZTogY2xvc2VkIHJldCA9ICVkLlxuIiwgcmV0KSk7CisJbXR4X3VubG9jaygm
c2NwLT5zZXFfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitzZXFfcmVhZChzdHJ1Y3Qg
Y2RldiAqaV9kZXYsIHN0cnVjdCB1aW8gKnVpbywgaW50IGlvZmxhZykKK3sKKwlpbnQgcmV0dmFs
LCB1c2VkOworCXN0cnVjdCBzZXFfc29mdGMgKnNjcCA9IGlfZGV2LT5zaV9kcnYxOworI2RlZmlu
ZSBTRVFfUlNJWkUgMzIKKwl1X2NoYXIgYnVmW1NFUV9SU0laRV07CisKKwlpZiAoc2NwID09IE5V
TEwpCisJICAgIHJldHVybiBFTlhJTzsKKworCVNFUV9ERUJVRyg3LHByaW50Zigic2VxX3JlYWQ6
IHVuaXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHNjcC0+dW5pdCwgdWlvLT51aW9fcmVzaWQp
KTsKKworCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlpZiAoKHNjcC0+ZmZsYWdzICYgRlJF
QUQpID09IDApIHsKKwkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfcmVhZDogdW5pdCAlZCBp
cyBub3QgZm9yIHJlYWRpbmcuXG4iLAorCQkJc2NwLT51bml0KSk7CisJICAgIHJldHZhbCA9IEVJ
TzsKKwkgICAgZ290byBlcnIxOworCX0KKworCS8qCisJICogQmVnaW4gcmVjb3JkaW5nLgorCSAq
LworCS8qCisJICogaWYgKChzY3AtPmZsYWdzICYgU0VRX0ZfUkVBRElORykgPT0gMCkKKwkgKi8K
KwkvKgorCSAqIFRPRE8sIHN0YXJ0IHJlY29yZGluZyBpZiBub3QgYWxyZWFkCisJICovCisKKwkv
KgorCSAqIEkgdGhpbmsgdGhlIHNlbWFudGljcyBhcmUgdG8gcmV0dXJuIGFzIHNvb24KKwkgKiBh
cyBwb3NzaWJsZS4KKwkgKiBTZWNvbmQgdGhvdWdodCwgaXQgZG9lbnMndCBzZWVtIGxpa2UgbWlk
aW1vdXRhaW4KKwkgKiBleHBlY3RzIHRoYXQgYXQgYWxsLgorCSAqIFRPRE86IExvb2sgdXAgaW4g
c29tZSBzb3J0IG9mIHNwZWMKKwkgKi8KKworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsK
KwkgICAgd2hpbGUgKE1JRElRX0VNUFRZKHNjcC0+aW5fcSkpIHsKKwkJcmV0dmFsID0gRVdPVUxE
QkxPQ0s7CisJCS8qCisJCSAqIEkgd2lzaCBJIGtuZXcgd2hpY2ggb25lIHRvIGNhcmUgYWJvdXQK
KwkJICovCisKKwkJaWYgKHNjcC0+ZmZsYWdzICYgT19OT05CTE9DSykKKwkJICAgIGdvdG8gZXJy
MTsKKwkJaWYgKGlvZmxhZyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3RvIGVycjE7CisKKwkJcmV0
dmFsID0gY3Zfd2FpdF9zaWcoJnNjcC0+aW5fY3YsICZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHJl
dHZhbCA9PSBFSU5UUikKKwkJICAgIGdvdG8gZXJyMTsKKwkgICAgfQorCisJICAgIHVzZWQgPSBN
SU4oTUlESVFfTEVOKHNjcC0+aW5fcSksIHVpby0+dWlvX3Jlc2lkKTsKKwkgICAgdXNlZCA9IE1J
Tih1c2VkLCBTRVFfUlNJWkUpOworCisJICAgIFNFUV9ERUJVRyg4LHByaW50ZigibWlkaXJlYWQ6
IHVpb21vdmUgY2M9JWRcbiIsIHVzZWQpKTsKKwkgICAgTUlESVFfREVRKHNjcC0+aW5fcSwgYnVm
LCB1c2VkKTsKKwkgICAgcmV0dmFsID0gdWlvbW92ZShidWYsIHVzZWQsIHVpbyk7CisJICAgIGlm
IChyZXR2YWwpCisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR2YWwgPSAwOworZXJyMToKKwltdHhf
dW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlTRVFfREVCVUcoNixwcmludGYoInNlcV9yZWFkOiBy
ZXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHJldHZhbCwgdWlvLT51aW9fcmVzaWQpKTsKKwor
CXJldHVybiByZXR2YWw7Cit9CisKK2ludAorc2VxX3dyaXRlKHN0cnVjdCBjZGV2ICppX2Rldiwg
c3RydWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQoreworCXVfY2hhciBldmVudFtFVl9TWl0sIG5l
d2V2ZW50W0VWX1NaXSwgZXZfY29kZTsKKwlzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AgPSBpX2Rldi0+
c2lfZHJ2MTsKKwlpbnQgcmV0dmFsOworCWludCB1c2VkOworCisJU0VRX0RFQlVHKDcscHJpbnRm
KCJzZXFfd3JpdGU6IHVuaXQgJWQsIHJlc2lkICVkLlxuIiwKKwkJICAgIHNjcC0+dW5pdCwgdWlv
LT51aW9fcmVzaWQpKTsKKworCWlmIChzY3AgPT0gTlVMTCkKKwkgICAgcmV0dXJuIEVOWElPOwor
CisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCisJaWYgKChzY3AtPmZmbGFncyAmIEZXUklU
RSkgPT0gMCkgeworCSAgICBTRVFfREVCVUcoMixwcmludGYoInNlcV93cml0ZTogdW5pdCAlZCBp
cyBub3QgZm9yIHdyaXRpbmcuXG4iLAorCQkJc2NwLT51bml0KSk7CisJICAgIHJldHZhbCA9IEVJ
TzsKKwkgICAgZ290byBlcnIwOworCX0KKworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsK
KwkgICAgd2hpbGUgKE1JRElRX0FWQUlMKHNjcC0+b3V0X3EpID09IDApIHsKKwkJcmV0dmFsID0g
RVdPVUxEQkxPQ0s7CisJCWlmIChzY3AtPmZmbGFncyAmIE9fTk9OQkxPQ0spCisJCSAgICBnb3Rv
IGVycjA7CisJCWlmIChpb2ZsYWcgJiBPX05PTkJMT0NLKQorCQkgICAgZ290byBlcnIwOworCQlT
RVFfREVCVUcoOCxwcmludGYoInNlcV93cml0ZSBjdndhaXRcbiIpKTsKKworCQlzY3AtPnBsYXlp
bmcgPSAxOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwkJY3ZfYnJvYWRjYXN0KCZz
Y3AtPnN0YXRlX2N2KTsKKworCQlyZXR2YWwgPSBjdl93YWl0X3NpZygmc2NwLT5vdXRfY3YsICZz
Y3AtPnNlcV9sb2NrKTsKKwkJICAgIC8qCisJCSAgICAgKiBXZSBzbGVwdCwgbWF5YmUgdGhpbmdz
IGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0CisJCSAgICAgKiBkeWluZyBjaGVjaworCQkgICAgICov
CisJCWlmIChyZXR2YWwgPT0gRUlOVFIpCisJCSAgICBnb3RvIGVycjA7CisjaWYgMAorCQkgICAg
LyoKKwkJICAgICAqIFVzZWxlc3MgdGVzdAorCQkgICAgICovCisJCWlmIChzY3AgIT0gaV9kZXYt
PnNpX2RydjEpCisJCSAgICByZXR2YWwgPSBFTlhJTzsKKyNlbmRpZgorCSAgICB9CisKKwkgICAg
dXNlZCA9IE1JTih1aW8tPnVpb19yZXNpZCwgNCk7CisKKwkgICAgU0VRX0RFQlVHKDgscHJpbnRm
KCJzZXFvdXQ6IHJlc2lkICVkIGxlbiAlamQgYXZhaWwgJWpkXG4iLAorCQkJdWlvLT51aW9fcmVz
aWQsIChpbnRtYXhfdClNSURJUV9MRU4oc2NwLT5vdXRfcSksCisJCQkoaW50bWF4X3QpTUlESVFf
QVZBSUwoc2NwLT5vdXRfcSkpKTsKKworCSAgICBpZiAodXNlZCAhPSA0KSB7CisJCXJldHZhbCA9
IEVOWElPOworCQlnb3RvIGVycjA7CisJICAgIH0KKworCSAgICByZXR2YWwgPSB1aW9tb3ZlKGV2
ZW50LCB1c2VkLCB1aW8pOworCSAgICBpZiAocmV0dmFsKQorCQlnb3RvIGVycjA7CisKKwkgICAg
ZXZfY29kZSA9IGV2ZW50WzBdOworCSAgICBTRVFfREVCVUcoOCxwcmludGYoInNlcV93cml0ZTog
dW5pdCAlZCwgZXZlbnQgJXMuXG4iLAorCQkJc2NwLT51bml0LCBtaWRpX2NtZG5hbWUoZXZfY29k
ZSwgY21kdGFiX3NlcWV2ZW50KSkpOworCisJICAgIC8qIEhhdmUgYSBsb29rIGF0IHRoZSBldmVu
dCBjb2RlLiAqLworCSAgICBpZiAoZXZfY29kZSA9PSBTRVFfRlVMTFNJWkUpIHsKKworCQkvKgor
CQkgKiBUT0RPOiByZXN0b3JlIGNvZGUgZm9yIFNFUV9GVUxMU0laRQorCQkgKi8KKyNpZiAwCisJ
CS8qIEEgbG9uZyBldmVudCwgdGhlc2UgYXJlIHRoZSBwYXRjaGVzL3NhbXBsZXMgZm9yIGEgc3lu
dGhlc2l6ZXIuICovCisJCW1pZGl1bml0ID0gKih1X3Nob3J0ICopJmV2ZW50WzJdOworCQltdHhf
bG9jaygmc2QtPnNlcV9sb2NrKTsKKwkJcmV0ID0gbG9va3VwX21pZGlkZXYoc2NwLCBtaWRpdW5p
dCwgTE9PS1VQX09QRU4sICZtZCk7CisJCW10eF91bmxvY2soJnNkLT5zZXFfbG9jayk7CisJCWlm
IChyZXQgIT0gMCkKKwkJICAgIHJldHVybiAocmV0KTsKKworCQlTRVFfREVCVUcocHJpbnRmKCJz
ZXFfd3JpdGU6IGxvYWRpbmcgYSBwYXRjaCB0byB0aGUgdW5pdCAlZC5cbiIsIG1pZGl1bml0KSk7
CisKKwkJcmV0ID0gbWQtPnN5bnRoLmxvYWRwYXRjaChtZCwgKihzaG9ydCAqKSZldmVudFswXSwg
YnVmLCBwICsgNCwgY291bnQsIDApOworCQlyZXR1cm4gKHJldCk7CisjZWxzZQorCQkvKgorCQkg
KiBGb3Igbm93LCBqdXN0IGZsdXNoIHRoZSBkYXJuIGJ1ZmZlcgorCQkgKi8KKwkJU0VRX0RFQlVH
KDIscHJpbnRmKCJzZXFfd3JpdGU6IFNFUV9GVUxMU0laRSBmbHVzaW5nIGJ1ZmZlci5cbiIpKTsK
KwkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCkgeworCQkgICAgcmV0dmFsID0gdWlvbW92ZShl
dmVudCwgRVZfU1osIHVpbyk7CisJCSAgICBpZiAocmV0dmFsKQorCQkJZ290byBlcnIwOworCisJ
CX0KKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnIwOworI2VuZGlmCisJICAgIH0KKworCSAgICBy
ZXR2YWwgPSBFSU5WQUw7CisJICAgIGlmIChldl9jb2RlID49IDEyOCkgeworCisJCS8qCisJCSAq
IFNvbWUgc29ydCBvZiBhbiBleHRlbmRlZCBldmVudC4gVGhlIHNpemUgaXMgZWlnaHQgYnl0ZXMu
CisJCSAqIHNjb29wIGV4dHJhIGluZm8uCisJCSAqLworCQlpZiAoc2NwLT5tdXNpYyAmJiBldl9j
b2RlID09IFNFUV9FWFRFTkRFRCkgeworCQkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfd3Jp
dGU6IGludmFsaWQgbGV2ZWwgdHdvIGV2ZW50ICV4LlxuIiwgZXZfY29kZSkpOworCQkgICAgZ290
byBlcnIwOworCQl9CisJCWlmICh1aW9tb3ZlKChjYWRkcl90KSZldmVudFs0XSwgNCwgdWlvKSkg
eworCQkgICAgU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfd3JpdGU6IHVzZXIgbWVtb3J5IG1hbmds
ZWQ/XG4iKSk7CisJCSAgICBnb3RvIGVycjA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJLyoKKwkJ
ICogU2l6ZSBmb3VyIGV2ZW50LgorCQkgKi8KKwkJaWYgKHNjcC0+bXVzaWMpIHsKKwkJICAgIFNF
UV9ERUJVRygyLHByaW50Zigic2VxX3dyaXRlOiBmb3VyIGJ5dGUgZXZlbnQgaW4gbXVzaWMgbW9k
ZS5cbiIpKTsKKwkJICAgIGdvdG8gZXJyMDsKKwkJfQorCSAgICB9CisJICAgIGlmIChldl9jb2Rl
ID09IFNFUV9NSURJUFVUQykgeworCQkvKgorCQkgKiBUT0RPOiBldmVudFsyXSBpcyB1bml0IG51
bWJlciB0byByZWNlaXZlIGNoYXIuICBSYW5nZSBjaGVjaworCQkgKiBpdAorCQkgKi8KKwkgICAg
fQorCisJICAgIGlmIChzY3AtPm11c2ljKSB7CisjaWYgbm90X2V2ZXJfZXZlcgorCQlpZiAoZXZl
bnRbMF0gPT0gRVZfVElNSU5HICYmIAorCQkJKGV2ZW50WzFdID09IFRNUl9TVEFSVCB8fCBldmVu
dFsxXSA9PSBUTVJfU1RPUCkgKSB7CisJCSAgICAvKgorCQkgICAgICogRm9yIG5vdywgdHJ5IHRv
IG1ha2UgbWlkaW1vdXRhaW4gd29yayBieQorCQkgICAgICogZm9yY2luZyB0aGVzZSBldmVudHMg
dG8gYmUgcHJvY2Vzc2VkIGltbWVkaWF0bHkKKwkJICAgICAqLworCQkgICAgc2VxX3Byb2Nlc3Nl
dmVudChzY3AsIGV2ZW50KTsKKwkJfQorCQllbHNlCisJCSAgICBNSURJUV9FTlEoc2NwLT5vdXRf
cSwgZXZlbnQsIEVWX1NaKTsKKyNlbHNlCisJCU1JRElRX0VOUShzY3AtPm91dF9xLCBldmVudCwg
RVZfU1opOworI2VuZGlmCisJICAgIH0gZWxzZSB7CisJCWlmIChzZXFfY29udmVydG9sZChldmVu
dCwgbmV3ZXZlbnQpID4gMCkKKwkJICAgIE1JRElRX0VOUShzY3AtPm91dF9xLCBuZXdldmVudCwg
RVZfU1opOworI2lmIDAKKwkJZWxzZQorCQkgICAgZ290byBlcnIwOworI2VuZGlmCisJICAgIH0K
KworCX0KKworCXNjcC0+cGxheWluZyA9IDE7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2
KTsKKwljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKworCXJldHZhbCA9IDA7CisKK2VycjA6
CisJU0VRX0RFQlVHKDYscHJpbnRmKCJzZXFfd3JpdGUgZG9uZTogbGVmdG92ZXIgYnVmZmVyIGxl
bmd0aCAlZCByZXR2YWwgJWRcbiIsCisJCSAgICB1aW8tPnVpb19yZXNpZCwgcmV0dmFsKSk7CisJ
bXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50Citz
ZXFfaW9jdGwoc3RydWN0IGNkZXYgKmlfZGV2LCB1X2xvbmcgY21kLCBjYWRkcl90IGFyZywgaW50
IG1vZGUsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBtaWRpdW5pdCwgcmV0LCB0bXA7CisJ
c3RydWN0IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisJc3RydWN0IHN5bnRoX2lu
Zm8gKnN5bnRoaW5mbzsKKwlzdHJ1Y3QgbWlkaV9pbmZvICptaWRpaW5mbzsKKwl1X2NoYXIgZXZl
bnRbRVZfU1pdOworCXVfY2hhciBuZXdldmVudFtFVl9TWl07CisKKwlrb2JqX3QgbWQ7CisJLyoK
KwkgKiBzdHJ1Y3Qgc25kX3NpemUgKnNuZHNpemU7CisJICovCisKKwlpZiAoc2NwID09IE5VTEwp
CisJICAgIHJldHVybiBFTlhJTzsKKworCVNFUV9ERUJVRyg2LHByaW50Zigic2VxX2lvY3RsOiB1
bml0ICVkLCBjbWQgJXMuXG4iLAorCQkgICAgc2NwLT51bml0LCBtaWRpX2NtZG5hbWUoY21kLCBj
bWR0YWJfc2VxaW9jdGwpKSk7CisKKwlyZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwkgICAg
Y2FzZSBTTkRDVExfU0VRX0dFVFRJTUU6CisJCS8qCisJCSAqIGlvY3RsIG5lZWRlZCBieSBsaWJ0
c2UKKwkJICovCisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJKihpbnQgKilhcmcgPSB0
aW1lcl9ub3coc2NwKTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJV
Ryg2LHByaW50Zigic2VxX2lvY3RsOiBnZXR0aW1lICVkLlxuIiwgKihpbnQgKilhcmcpKTsKKwkJ
cmV0ID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2UgU05EQ1RMX1RNUl9NRVRST05PTUU6CisJCS8q
IGZhbGx0aHJvdWdoICovCisJICAgIGNhc2UgU05EQ1RMX1RNUl9TT1VSQ0U6CisJCS8qCisJCSAq
IE5vdCBpbXBsZW1lbnRlZAorCQkgKi8KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2Ug
U05EQ1RMX1RNUl9URU1QTzoKKwkJZXZlbnRbMV0gPSBUTVJfVEVNUE87CisJCWdvdG8gdGltZXJl
dmVudDsKKwkgICAgY2FzZSBTTkRDVExfVE1SX1RJTUVCQVNFOgorCQlldmVudFsxXSA9IFRNUl9U
SU1FUkJBU0U7CisJCWdvdG8gdGltZXJldmVudDsKKwkgICAgY2FzZSBTTkRDVExfVE1SX1NUQVJU
OgorCQlldmVudFsxXSA9IFRNUl9TVEFSVDsKKwkJZ290byB0aW1lcmV2ZW50OworCSAgICBjYXNl
IFNORENUTF9UTVJfU1RPUDoKKwkJZXZlbnRbMV0gPSBUTVJfU1RPUDsKKwkJZ290byB0aW1lcmV2
ZW50OworCSAgICBjYXNlIFNORENUTF9UTVJfQ09OVElOVUU6CisJCWV2ZW50WzFdID0gVE1SX0NP
TlRJTlVFOworCSAgICB0aW1lcmV2ZW50OgorCQlldmVudFswXSA9IEVWX1RJTUlORzsKKwkJZXZl
bnRbNF0gPSAqKGludCAqKWFyZyAmIDB4RkY7CisJCWV2ZW50WzVdID0gKCooaW50ICopYXJnID4+
IDgpICYgMHhGRjsKKwkJZXZlbnRbNl0gPSAoKihpbnQgKilhcmcgPj4gMTYpICYgMHhGRjsKKwkJ
ZXZlbnRbN10gPSAoKihpbnQgKilhcmcgPj4gMjQpICYgMHhGRjsKKwkJbXR4X2xvY2soJnNjcC0+
c2VxX2xvY2spOworCQlpZiAoIXNjcC0+bXVzaWMpIHsKKwkJICAgIHJldCA9IEVJTlZBTDsKKwkJ
ICAgIG10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkgICAgYnJlYWs7CisJCX0KKwkJc2Vx
X3Byb2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7
CisJCWJyZWFrOworCSAgICBjYXNlIFNORENUTF9UTVJfU0VMRUNUOgorCQlTRVFfREVCVUcoMixw
cmludGYoInNlcV9pb2N0bDogU05EQ1RMX1RNUl9TRUxFQ1Qgbm90IHN1cHBvcnRlZFxuIikpOwor
CQlyZXQgPSBFSU5WQUw7CisJCWJyZWFrOworCSAgICBjYXNlIFNORENUTF9TRVFfU1lOQzoKKwkJ
aWYgKG1vZGUgPT0gT19SRE9OTFkpIHsKKwkJICAgIHJldCA9IDA7CisJCSAgICBicmVhazsKKwkJ
fQorCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCXJldCA9IHNlcV9zeW5jKHNjcCk7CisJ
CW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExf
U0VRX1BBTklDOgorCQkvKiBmYWxsdGhyb3VnaCAqLworCSAgICBjYXNlIFNORENUTF9TRVFfUkVT
RVQ6CisJCS8qCisJCSAqIFNORENUTF9TRVFfUEFOSUMgPT0gU05EQ1RMX1NFUV9SRVNFVAorCQkg
Ki8KKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQlzZXFfcmVzZXQoc2NwKTsKKwkJbXR4
X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNl
IFNORENUTF9TRVFfVEVTVE1JREk6CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJLyoK
KwkJICogVE9ETzogU05EQ1RMX1NFUV9URVNUTUlESSBub3cgbWVhbnMgImNhbiBJIHdyaXRlIHRv
IHRoZQorCQkgKiBkZXZpY2U/Ii4KKwkJICovCisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2sp
OworCQlicmVhazsKKyNpZiAwCisJICAgIGNhc2UgU05EQ1RMX1NFUV9HRVRJTkNPVU5UOgorCQlp
ZiAobW9kZSA9PSBPX1dST05MWSkKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxzZSB7CisJ
CSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCSAgICAqKGludCAqKWFyZyA9IHNjcC0+
aW5fcS5ybDsKKwkJICAgIG10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkgICAgU0VRX0RF
QlVHKHByaW50Zigic2VxX2lvY3RsOiBpbmNvdW50ICVkLlxuIiwgKihpbnQgKilhcmcpKTsKKwkJ
fQorCQlyZXQgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExfU0VRX0dFVE9VVENPVU5U
OgorCQlpZiAobW9kZSA9PSBPX1JET05MWSkKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxz
ZSB7CisJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCSAgICAqKGludCAqKWFyZyA9
IHNjcC0+b3V0X3EuZmw7CisJCSAgICBtdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJICAg
IFNFUV9ERUJVRyhwcmludGYoInNlcV9pb2N0bDogb3V0Y291bnQgJWQuXG4iLCAqKGludCAqKWFy
ZykpOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgU05EQ1RM
X1NFUV9DVFJMUkFURToKKwkJaWYgKCooaW50ICopYXJnICE9IDApIHsKKwkJICAgIHJldCA9IEVJ
TlZBTDsKKwkJICAgIGJyZWFrOworCQl9CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJ
KihpbnQgKilhcmcgPSBzY3AtPnRpbWVyYmFzZTsKKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9j
ayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2VxX2lvY3RsOiBjdHJscmF0ZSAlZC5cbiIsICoo
aW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCQkvKgorCQkgKiBUT0RPOiBpb2N0
bCBTTkRDVExfU0VRX1JFU0VUU0FNUExFUworCQkgKi8KKyNpZiAwCisJICAgIGNhc2UgU05EQ1RM
X1NFUV9SRVNFVFNBTVBMRVM6CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJcmV0ID0g
bG9va3VwX21pZGlkZXYoc2NwLCAqKGludCAqKWFyZywgTE9PS1VQX09QRU4sICZtZCk7CisJCW10
eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlpZiAocmV0ICE9IDApCisJCSAgICBicmVhazsK
KwkJcmV0ID0gbWlkaV9pb2N0bChNSURJTUtERVYobWFqb3IoaV9kZXYpLCAqKGludCAqKWFyZywg
U05EX0RFVl9NSURJTiksIGNtZCwgYXJnLCBtb2RlLCB0ZCk7CisJCWJyZWFrOworI2VuZGlmCisJ
ICAgIGNhc2UgU05EQ1RMX1NFUV9OUlNZTlRIUzoKKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2sp
OworCQkgICAgKihpbnQgKilhcmcgPSBzY3AtPm1pZGlfbnVtYmVyOworCQltdHhfdW5sb2NrKCZz
Y3AtPnNlcV9sb2NrKTsKKwkJU0VRX0RFQlVHKDMscHJpbnRmKCJzZXFfaW9jdGw6IHN5bnRocyAl
ZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlIFNO
RENUTF9TRVFfTlJNSURJUzoKKwkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQlpZiAoc2Nw
LT5tdXNpYykKKwkJICAgICooaW50ICopYXJnID0gMDsKKwkJZWxzZSB7CisJCSAgICAvKgorCQkg
ICAgICogVE9ETzogY291bnQgdGhlIG51bWJkZXIgb2YgZGV2aWNlcyB0aGF0IGNhbiBXUklURVJB
VworCQkgICAgICovCisJCSAgICAqKGludCAqKWFyZyA9IHNjcC0+bWlkaV9udW1iZXI7CisJCX0K
KwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2Vx
X2lvY3RsOiBtaWRpcyAlZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFr
OworCQkvKgorCQkgKiBUT0RPOiBpb2N0bCBTTkRDVExfU1lOVEhfTUVNQVZMCisJCSAqLworI2lm
IDAKKwkgICAgY2FzZSBTTkRDVExfU1lOVEhfTUVNQVZMOgorCQltdHhfbG9jaygmc2NwLT5zZXFf
bG9jayk7CisJCXJldCA9IGxvb2t1cF9taWRpZGV2KHNjcCwgKihpbnQgKilhcmcsIExPT0tVUF9P
UEVOLCAmbWQpOworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHJldCAhPSAw
KQorCQkgICAgYnJlYWs7CisJCXJldCA9IG1pZGlfaW9jdGwoTUlESU1LREVWKG1ham9yKGlfZGV2
KSwgKihpbnQgKilhcmcsIFNORF9ERVZfTUlESU4pLCBjbWQsIGFyZywgbW9kZSwgdGQpOworCQli
cmVhazsKKyNlbmRpZgorCSAgICBjYXNlIFNORENUTF9TRVFfT1VUT0ZCQU5EOgorCQlmb3IgKHJl
dCA9IDA7IHJldCA8IEVWX1NaOyByZXQrKykKKwkJICAgIGV2ZW50W3JldF0gPSAodV9jaGFyKWFy
Z1swXTsKKworCQltdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCWlmIChzY3AtPm11c2ljKQor
CQkgICAgcmV0ID0gc2VxX3Byb2Nlc3NldmVudChzY3AsIGV2ZW50KTsKKwkJZWxzZSB7CisJCSAg
ICBpZiAoc2VxX2NvbnZlcnRvbGQoZXZlbnQsIG5ld2V2ZW50KSA+IDApCisJCQlyZXQgPSBzZXFf
cHJvY2Vzc2V2ZW50KHNjcCwgbmV3ZXZlbnQpOworCQkgICAgZWxzZSByZXQgPSBFSU5WQUw7CisJ
CX0KKwkJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJCWJyZWFrOworCSAgICBjYXNlIFNO
RENUTF9TWU5USF9JTkZPOgorCQlzeW50aGluZm8gPSAoc3RydWN0IHN5bnRoX2luZm8gKilhcmc7
CisJCW1pZGl1bml0ID0gc3ludGhpbmZvLT5kZXZpY2U7CisJCW10eF9sb2NrKCZzY3AtPnNlcV9s
b2NrKTsKKwkJaWYgKHNlcV9mZXRjaF9taWQoc2NwLCBtaWRpdW5pdCwgJm1kKSA9PSAwKSB7CisJ
CSAgICBiemVybyhzeW50aGluZm8sIHNpemVvZigqc3ludGhpbmZvKSk7CisJCSAgICBzeW50aGlu
Zm8tPm5hbWVbMF0gPSAnZic7CisJCSAgICBzeW50aGluZm8tPm5hbWVbMV0gPSAnYSc7CisJCSAg
ICBzeW50aGluZm8tPm5hbWVbMl0gPSAnayc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbM10gPSAn
ZSc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbNF0gPSAncyc7CisJCSAgICBzeW50aGluZm8tPm5h
bWVbNV0gPSAneSc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbNl0gPSAnbic7CisJCSAgICBzeW50
aGluZm8tPm5hbWVbN10gPSAndCc7CisJCSAgICBzeW50aGluZm8tPm5hbWVbOF0gPSAnaCc7CisJ
CSAgICBzeW50aGluZm8tPmRldmljZSA9IG1pZGl1bml0OworCQkgICAgc3ludGhpbmZvLT5zeW50
aF90eXBlID0gU1lOVEhfVFlQRV9NSURJOworCQkgICAgc3ludGhpbmZvLT5jYXBhYmlsaXRpZXMg
PSBzY3AtPm1pZGlfZmxhZ3NbbWlkaXVuaXRdOworCQkgICAgcmV0ID0gMDsKKwkJfSBlbHNlCisJ
CSAgICByZXQgPSBFSU5WQUw7CisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQlicmVh
azsKKwkgICAgY2FzZSBTTkRDVExfTUlESV9JTkZPOgorCQltaWRpaW5mbyA9IChzdHJ1Y3QgbWlk
aV9pbmZvICopYXJnOworCQltaWRpdW5pdCA9IG1pZGlpbmZvLT5kZXZpY2U7CisJCW10eF9sb2Nr
KCZzY3AtPnNlcV9sb2NrKTsKKwkJaWYgKHNlcV9mZXRjaF9taWQoc2NwLCBtaWRpdW5pdCwgJm1k
KSA9PSAwKSB7CisJCSAgICBiemVybyhtaWRpaW5mbywgc2l6ZW9mKCptaWRpaW5mbykpOworCQkg
ICAgbWlkaWluZm8tPm5hbWVbMF0gPSAnZic7CisJCSAgICBtaWRpaW5mby0+bmFtZVsxXSA9ICdh
JzsKKwkJICAgIG1pZGlpbmZvLT5uYW1lWzJdID0gJ2snOworCQkgICAgbWlkaWluZm8tPm5hbWVb
M10gPSAnZSc7CisJCSAgICBtaWRpaW5mby0+bmFtZVs0XSA9ICdtJzsKKwkJICAgIG1pZGlpbmZv
LT5uYW1lWzVdID0gJ2knOworCQkgICAgbWlkaWluZm8tPm5hbWVbNl0gPSAnZCc7CisJCSAgICBt
aWRpaW5mby0+bmFtZVs3XSA9ICdpJzsKKwkJICAgIG1pZGlpbmZvLT5kZXZpY2UgPSBtaWRpdW5p
dDsKKwkJICAgIG1pZGlpbmZvLT5jYXBhYmlsaXRpZXMgPSBzY3AtPm1pZGlfZmxhZ3NbbWlkaXVu
aXRdOworCQkgICAgLyoKKwkJICAgICAqIFRPRE86IFdoYXQgZGV2dHlwZT8KKwkJICAgICAqLwor
CQkgICAgbWlkaWluZm8tPmRldl90eXBlID0gMHgwMTsKKwkJICAgIHJldCA9IDA7CisJCX0gZWxz
ZQorCQkgICAgcmV0ID0gRUlOVkFMOworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJ
YnJlYWs7CisJICAgIGNhc2UgU05EQ1RMX1NFUV9USFJFU0hPTEQ6CisJCW10eF9sb2NrKCZzY3At
PnNlcV9sb2NrKTsKKwkJUkFOR0UoKihpbnQgKilhcmcsIDEsIE1JRElRX1NJWkUoc2NwLT5vdXRf
cSkgLSAxKTsKKwkJc2NwLT5vdXRfd2F0ZXIgPSAqKGludCAqKWFyZzsKKwkJbXR4X3VubG9jaygm
c2NwLT5zZXFfbG9jayk7CisJCVNFUV9ERUJVRygzLHByaW50Zigic2VxX2lvY3RsOiB3YXRlciAl
ZC5cbiIsICooaW50ICopYXJnKSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlIFNO
RENUTF9NSURJX1BSRVRJTUU6CisJCXRtcCA9ICooaW50ICopYXJnOworCQlpZiAodG1wIDwgMCkK
KwkJICAgIHRtcCA9IDA7CisJCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJc2NwLT5wcmVf
ZXZlbnRfdGltZW91dCA9IChoeiAqIHRtcCkgLyAxMDsKKwkJKihpbnQgKilhcmcgPSBzY3AtPnBy
ZV9ldmVudF90aW1lb3V0OworCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJU0VRX0RF
QlVHKDMscHJpbnRmKCJzZXFfaW9jdGw6IHByZXRpbWUgJWQuXG4iLCAqKGludCAqKWFyZykpOwor
CQlyZXQgPSAwOworCQlicmVhazsKKwkgICAgY2FzZSBTTkRDVExfRk1fNE9QX0VOQUJMRToKKwkg
ICAgY2FzZSBTTkRDVExfUE1HUl9JRkFDRToKKwkgICAgY2FzZSBTTkRDVExfUE1HUl9BQ0NFU1M6
CisJCS8qCisJCSAqIFBhdGNoIG1hbmFnZXIgYW5kIGZtIGFyZSBkZWQsIGRlZCwgZGVkLgorCQkg
Ki8KKwkJLyogZmFsbHRocm91Z2ggKi8KKwkgICAgZGVmYXVsdDoKKwkJLyoKKwkJICogVE9ETzog
Q29uc2lkZXIgaW9jdGwgZGVmYXVsdCBjYXNlLgorCQkgKiBPbGQgY29kZSB1c2VkIHRvCisJCSAq
IGlmICgoc2NwLT5mZmxhZ3MgJiBPX0FDQ01PREUpID09IEZSRUFEKSB7CisJCSAqCXJldCA9IEVJ
TzsKKwkJICoJYnJlYWs7CisJCSAqIH0KKwkJICogVGhlbiBwYXNzIG9uIHRoZSBpb2N0bCB0byBk
ZXZpY2UgMAorCQkgKi8KKwkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfaW9jdGw6IHVuc3VwcG9y
dGVkIElPQ1RMICVsZC5cbiIsIGNtZCkpOworCQlyZXQgPSBFSU5WQUw7CisJCWJyZWFrOworCX0K
KworCXJldHVybiByZXQ7Cit9CisKK2ludAorc2VxX3BvbGwoc3RydWN0IGNkZXYgKmlfZGV2LCBp
bnQgZXZlbnRzLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgcmV0LCBsaW07CisJc3RydWN0
IHNlcV9zb2Z0YyAqc2NwID0gaV9kZXYtPnNpX2RydjE7CisKKwlTRVFfREVCVUcoMywgcHJpbnRm
KCJzZXFfcG9sbDogdW5pdCAlZC5cbiIsIHNjcC0+dW5pdCkpOworCXByaW50Zigic2VxX3BvbGw6
IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOwor
CisJcmV0ID0gMDsKKworCS8qIExvb2sgdXAgdGhlIGFwcm9wcmlhdGUgcXVldWUgYW5kIHNlbGVj
dCBpdC4gKi8KKwlpZiAoKGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSkpICE9IDApIHsK
KwkgICAgLyogU3RhcnQgcGxheWluZy4gKi8KKwkgICAgc2NwLT5wbGF5aW5nID0gMTsKKwkgICAg
Y3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2KTsKKwkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPm91
dF9jdik7CisKKwkgICAgbGltID0gc2NwLT5vdXRfd2F0ZXI7CisKKwkgICAgaWYgKE1JRElRX0FW
QUlMKHNjcC0+b3V0X3EpIDwgbGltKQorCQkvKiBObyBlbm91Z2ggc3BhY2UsIHJlY29yZCBzZWxl
Y3QuICovCisJCXNlbHJlY29yZCh0ZCwgJnNjcC0+b3V0X3NlbCk7CisJICAgIGVsc2UKKwkJLyog
V2UgY2FuIHdyaXRlIG5vdy4gKi8KKwkJcmV0IHw9IGV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdS
Tk9STSk7CisJfQorCisJaWYgKChldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpICE9IDAp
IHsKKwkgICAgLyogVE9ETzogU3RhcnQgcmVjb3JkaW5nLiAqLworCisJICAgIC8qIEZpbmQgb3V0
IHRoZSBib3VuZGFyeS4gKi8KKwkgICAgbGltID0gMTsKKwkgICAgaWYgKE1JRElRX0xFTihzY3At
PmluX3EpIDwgbGltKQorCQkvKiBObyBkYXRhIHJlYWR5LCByZWNvcmQgc2VsZWN0LiAqLworCQlz
ZWxyZWNvcmQodGQsICZzY3AtPmluX3NlbCk7CisJICAgIGVsc2UKKwkJLyogV2UgY2FuIHJlYWQg
bm93LiAqLworCQlyZXQgfD0gZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pOworCX0KKwor
CW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCisJcmV0dXJuIChyZXQpOworfQorI2lmIDAK
K3N0YXRpYyB2b2lkCitzZWluX3F0cih2b2lkICpwLCB2b2lkIC8qIG1pZGlkZXZfaW5mbyAqLyAq
bWQpCit7CisJc3RydWN0IHNlcV9zb2Z0YyAqc2NwOworCisJc2NwID0gKHN0cnVjdCBzZXFfc29m
dGMgKilwOworCisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCisJLyogUmVzdGFydCBwbGF5
aW5nIGlmIHdlIGhhdmUgdGhlIGRhdGEgdG8gb3V0cHV0LiAqLworCWlmIChzY3AtPnF1ZXVlb3V0
X3BlbmRpbmcpCisJCXNlcV9jYWxsYmFjayhzY3AsIFNFUV9DQl9TVEFSVCB8IFNFUV9DQl9XUik7
CisJLyogQ2hlY2sgdGhlIG1pZGkgZGV2aWNlIGlmIHdlIGFyZSByZWFkaW5nLiAqLworCWlmICgo
c2NwLT5mbGFncyAmIFNFUV9GX1JFQURJTkcpICE9IDApCisJCXNlcV9taWRpaW5wdXQoc2NwLCBt
ZCk7CisKKwltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKK30KKyNlbmRpZgorLyoKKyAqIHNl
cV9jb252ZXJ0b2xkCisgKiBXYXMgdGhlIG9sZCBwbGF5ZXZlbnQuICBVc2UgdGhpcyB0byBjb252
ZXJ0IGFuZCBvbGQKKyAqIHN0eWxlIC9kZXYvc2VxdWVuY2VyIGV2ZW50IHRvIGEgL2Rldi9tdXNp
YyBldmVudCAKKyAqLworc3RhdGljIGludAorc2VxX2NvbnZlcnRvbGQodV9jaGFyICpldmVudCwg
dV9jaGFyICpvdXQpCit7CisJaW50IHVzZWQ7CisJdV9jaGFyIGRldiwgY2huLCBub3RlLCB2ZWw7
CisKKwlvdXRbMF0gPSBvdXRbMV0gPSBvdXRbMl0gPSBvdXRbM10gPSBvdXRbNF0gID0gb3V0WzVd
ICA9IG91dFs2XSAgPSBvdXRbN10gICA9IDA7CisKKwlkZXYgPSAwOworCWNobiA9IGV2ZW50WzFd
OworCW5vdGUgPSBldmVudFsyXTsKKwl2ZWwgPSBldmVudFszXTsKKworCXVzZWQgPSAwOworCity
ZXN0YXJ0OgorCS8qCisJICogVE9ETzogRGVidWcgc3RhdGVtZW50CisJICovCisJc3dpdGNoKGV2
ZW50WzBdKSB7CisJICAgIGNhc2UgRVZfVElNSU5HOgorCSAgICBjYXNlIEVWX0NITl9WT0lDRToK
KwkgICAgY2FzZSBFVl9DSE5fQ09NTU9OOgorY2FzZSBFVl9TWVNFWDoKK2Nhc2UgRVZfU0VRX0xP
Q0FMOgorCQlvdXRbMF0gPSBldmVudFswXTsKKwkJb3V0WzFdID0gZXZlbnRbMV07CisJCW91dFsy
XSA9IGV2ZW50WzJdOworCQlvdXRbM10gPSBldmVudFszXTsKKwkJb3V0WzRdID0gZXZlbnRbNF07
CisJCW91dFs1XSA9IGV2ZW50WzVdOworCQlvdXRbNl0gPSBldmVudFs2XTsKKwkJb3V0WzddID0g
ZXZlbnRbN107CisJCXVzZWQgKz0gODsKKwkJYnJlYWs7CisJICAgIGNhc2UgU0VRX05PVEVPRkY6
CisJCW91dFswXSA9IEVWX0NITl9WT0lDRTsKKwkJb3V0WzFdID0gZGV2OworCQlvdXRbMl0gPSBN
SURJX05PVEVPRkY7CisJCW91dFszXSA9IGNobjsKKwkJb3V0WzRdID0gbm90ZTsKKwkJb3V0WzVd
ID0gMjU1OworCXVzZWQgKz0gNDsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTRVFfTk9URU9OOgor
CQlvdXRbMF0gPSBFVl9DSE5fVk9JQ0U7CisJCW91dFsxXSA9IGRldjsKKwkJb3V0WzJdID0gTUlE
SV9OT1RFT047CisJCW91dFszXSA9IGNobjsKKwkJb3V0WzRdID0gbm90ZTsKKwkJb3V0WzVdID0g
dmVsOworCXVzZWQgKz0gNDsKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogd2FpdCBkZWxheSA9IChl
dmVudFsyXSA8PCAxNikgKyAoZXZlbnRbM10gPDwgOCkgKyBldmVudFs0XQorCQkgKi8KKworCSAg
ICBjYXNlIFNFUV9QR01DSEFOR0U6CisJCW91dFswXSA9IEVWX0NITl9DT01NT047CisJCW91dFsx
XSA9IGRldjsKKwkJb3V0WzJdID0gTUlESV9QR01fQ0hBTkdFOworCQlvdXRbM10gPSBjaG47CisJ
CW91dFs0XSA9IG5vdGU7CisJCW91dFs1XSA9IHZlbDsKKwl1c2VkICs9IDQ7CisJCWJyZWFrOwor
LyoKKwkJb3V0WzBdID0gRVZfVElNSU5HOworCQlvdXRbMV0gPSBkZXY7CisJCW91dFsyXSA9IE1J
RElfUEdNX0NIQU5HRTsKKwkJb3V0WzNdID0gY2huOworCQlvdXRbNF0gPSBub3RlOworCQlvdXRb
NV0gPSB2ZWw7CisJCVNFUV9ERUJVRyg0LHByaW50Zigic2VxX3BsYXlldmVudDogc3luY3RpbWVy
XG4iKSk7CisJCWJyZWFrOworKi8KKworCSAgICBjYXNlIFNFUV9NSURJUFVUQzoKKwkJU0VRX0RF
QlVHKDQscHJpbnRmKCJzZXFfcGxheWV2ZW50OiBwdXQgZGF0YSAweCUwMngsIHVuaXQgJWQuXG4i
LAorCQkJICAgIGV2ZW50WzFdLCBldmVudFsyXSkpOworCQkvKgorCQkgKiBQYXNzIHRocm91Z2gg
dG8gdGhlIG1pZGkgZGV2aWNlLgorCQkgKiBkZXZpY2UgPSBldmVudFsyXQorCQkgKiBkYXRhID0g
ZXZlbnRbMV0KKwkJICovCisJCW91dFswXSA9IFNFUV9NSURJUFVUQzsKKwkJb3V0WzFdID0gZGV2
OworCQlvdXRbMl0gPSBjaG47CisJdXNlZCArPSA0OworCQlicmVhazsKKyNpZiBub3R5ZXQKKwkg
ICAgY2FzZSBTRVFfRUNITzoKKwkJLyoKKwkJICogVGhpcyBpc24ndCBoYW5kbGVkIGhlcmUgeWV0
IGJlY2F1c2UgSSBkb24ndCBrbm93IGlmIEkgY2FuCisJCSAqIGp1c3QgdXNlIGZvdXIgYnl0ZXMg
ZXZlbnRzLiAgVGhlcmUgbWlnaHQgYmUgY29uc2VxdWVuY2VzIAorCQkgKiBpbiB0aGUgX3JlYWQg
cm91dGluZworCQkgKi8KKwkJaWYgKHNlcV9jb3B5dG9pbnB1dChzY3AsIGV2ZW50LCA0KSA9PSBF
QUdBSU4pIHsKKwkJICAgIHJldCA9IFFVRVVFRlVMTDsKKwkJICAgIGJyZWFrOworCQl9CisJCXJl
dCA9IE1PUkU7CisJCWJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgU0VRX0VYVEVOREVEOgorCQlz
d2l0Y2ggKGV2ZW50WzFdKSB7CisJCSAgICBjYXNlIFNFUV9OT1RFT0ZGOgorCQkgICAgY2FzZSBT
RVFfTk9URU9OOgorCQkgICAgY2FzZSBTRVFfUEdNQ0hBTkdFOgorCQkJZXZlbnQrKzsKKwkJCXVz
ZWQgPSA0OworCQkJZ290byByZXN0YXJ0OworCQkJYnJlYWs7CisJCSAgICBjYXNlIFNFUV9BRlRF
UlRPVUNIOgorCQkJLyoKKwkJCSAqIFNZTlRIX0FGVEVSVE9VQ0gobWQsIGV2ZW50WzNdLCBldmVu
dFs0XSkKKwkJCSAqLworCQkgICAgY2FzZSBTRVFfQkFMQU5DRToKKwkJCS8qCisJCQkgKiBTWU5U
SF9QQU5OSU5HKG1kLCBldmVudFszXSwgKGNoYXIpZXZlbnRbNF0pCisJCQkgKi8KKwkJICAgIGNh
c2UgU0VRX0NPTlRST0xMRVI6CisJCQkvKgorCQkJICogU1lOVEhfQ09OVFJPTExFUihtZCwgZXZl
bnRbM10sIGV2ZW50WzRdLCAqKHNob3J0ICopJmV2ZW50WzVdKQorCQkJICovCisJCSAgICBjYXNl
IFNFUV9WT0xNT0RFOgorCQkJLyoKKwkJCSAqIFNZTlRIX1ZPTFVNRU1FVEhPRChtZCwgZXZlbnRb
M10pIAorCQkJICovCisJCSAgICBkZWZhdWx0OgorCQkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFf
Y29udmVydG9sZDogU0VRX0VYVEVOREVEIHR5cGUgJWQiCisJCQkJIm5vdCBoYW5kbGVkXG4iLCBl
dmVudFsxXSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgU0VRX1dBSVQ6
CisJCW91dFswXSA9IEVWX1RJTUlORzsKKwkJb3V0WzFdID0gVE1SX1dBSVRfUkVMOworCQlvdXRb
NF0gPSBldmVudFsyXTsKKwkJb3V0WzVdID0gZXZlbnRbM107CisJCW91dFs2XSA9IGV2ZW50WzRd
OworCisJCVNFUV9ERUJVRyg1LHByaW50ZigiU0VRX1dBSVQgJWQiLCBldmVudFsyXSArIChldmVu
dFszXSA8PCA4KSArIChldmVudFs0XSA8PCAyNCkpKTsKKworCQl1c2VkKz0gNDsKKwkJYnJlYWs7
CisKKwkgICAgY2FzZSBTRVFfRUNITzoKKwkgICAgY2FzZSBTRVFfU1lOQ1RJTUVSOgorCSAgICBj
YXNlIFNFUV9QUklWQVRFOgorCSAgICBkZWZhdWx0OgorCQlTRVFfREVCVUcoMixwcmludGYoInNl
cV9jb252ZXJ0b2xkOiBldmVudCB0eXBlICVkIG5vdCBoYW5kbGVkICVkICVkICVkXG4iLCBldmVu
dFswXSwgZXZlbnRbMV0sIGV2ZW50WzJdLCBldmVudFszXSkpOworCQlicmVhazsKKwl9CisJcmV0
dXJuIHVzZWQ7Cit9CisKKy8qCisgKiBXcml0dGluZyB0byB0aGUgc2VxdWVuY2VyIGJ1ZmZlciBu
ZXZlciBibG9ja3MgYW5kIGRyb3BzCisgKiBpbnB1dCB3aGljaCBjYW5ub3QgYmUgcXVldWVkCisg
Ki8KK3ZvaWQKK3NlcV9jb3B5dG9pbnB1dChzdHJ1Y3Qgc2VxX3NvZnRjICpzY3AsIHVfY2hhciAq
ZXZlbnQsIGludCBsZW4pCit7CisKKwltdHhfYXNzZXJ0KCZzY3AtPnNlcV9sb2NrLCBNQV9PV05F
RCk7CisKKwlpZiAoTUlESVFfQVZBSUwoc2NwLT5pbl9xKSA8IGxlbikgeworCSAgICAvKgorCSAg
ICAgKiBFTk9ST09NPyAgRUlOUFVURFJPUFBFRD8gRVRPVUdITFVDSz8KKwkgICAgICovCisJICBT
RVFfREVCVUcoMixwcmludGYoInNlcV9jb3B5dG9pbnB1dDogcXVldWUgZnVsbFxuIikpOworCX0g
ZWxzZSB7CisJICAgIE1JRElRX0VOUShzY3AtPmluX3EsIGV2ZW50LCBsZW4pOworCSAgICBzZWx3
YWtldXAoJnNjcC0+aW5fc2VsKTsKKwkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPmluX2N2KTsKKwl9
CisKK30KKworc3RhdGljIGludAorc2VxX2NobnZvaWNlKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwg
a29ial90IG1kLCB1X2NoYXIgKmV2ZW50KQoreworCWludCByZXQsIHZvaWNlOworCXVfY2hhciBj
bWQsIGNobiwgbm90ZSwgcGFybTsKKworCXJldCA9IDA7CisJY21kID0gZXZlbnRbMl07CisJY2hu
ID0gZXZlbnRbM107CisJbm90ZSA9IGV2ZW50WzRdOworCXBhcm0gPSBldmVudFs1XTsKKworCW10
eF9hc3NlcnQoJnNjcC0+c2VxX2xvY2ssIE1BX09XTkVEKTsKKworCVNFUV9ERUJVRyg1LHByaW50
Zigic2VxX2NobnZvaWNlOiB1bml0ICVkLCBkZXYgJWQsIGNtZCAlcywiCisJCSAgICIgY2huICVk
LCBub3RlICVkLCBwYXJtICVkLlxuIiwgc2NwLT51bml0LCBldmVudFsxXSwgCisJCSAgIG1pZGlf
Y21kbmFtZShjbWQsIGNtZHRhYl9zZXFjdiksIGNobiwgbm90ZSwgcGFybSkpOworCisJdm9pY2Ug
PSBTWU5USF9BTExPQyhtZCwgY2huLCBub3RlKTsKKworCW10eF91bmxvY2soJnNjcC0+c2VxX2xv
Y2spOworCisJc3dpdGNoIChjbWQpIHsKKwkgICAgY2FzZSBNSURJX05PVEVPTjoKKwkJaWYgKG5v
dGUgPCAxMjggfHwgbm90ZSA9PSAyNTUpIHsKKyNpZiAwCisJCSAgICBpZiAoc2NwLT5tdXNpYyAm
JiBjaG4gPT0gOSkgeworCQkJLyoKKwkJCSAqIFRoaXMgY2hhbm5lbCBpcyBhIHBlcmN1c3Npb24u
IFRoZSBub3RlIG51bWJlciBpcyB0aGUKKwkJCSAqIHBhdGNoIG51bWJlci4gCisJCQkgKi8KKwkJ
CS8qCisJCQltdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJCWlmIChTWU5USF9TRVRJTlNU
UihtZCwgdm9pY2UsIDEyOCArIG5vdGUpID09IEVBR0FJTikgeworCQkJICAgIG10eF9sb2NrKCZz
Y3AtPnNlcV9sb2NrKTsKKwkJCSAgICByZXR1cm4gKFFVRVVFRlVMTCk7CisJCQl9CisJCQltdHhf
bG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQkqLworCQkJbm90ZSA9IDYwOyAvKiBNaWRkbGUgQy4g
Ki8KKwkJICAgIH0KKyNlbmRpZgorCQkgICAgaWYgKHNjcC0+bXVzaWMpIHsKKwkJCS8qCisJCQlt
dHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkJCWlmIChTWU5USF9TRVRVUFZPSUNFKG1kLCB2
b2ljZSwgY2huKSA9PSBFQUdBSU4pIHsKKwkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7
CisJCQkgICAgcmV0dXJuIChRVUVVRUZVTEwpOworCQkJfQorCQkJbXR4X2xvY2soJnNjcC0+c2Vx
X2xvY2spOworCQkJKi8KKwkJICAgIH0KKwkJICAgIFNZTlRIX1NUQVJUTk9URShtZCwgdm9pY2Us
IG5vdGUsIHBhcm0pOworCQl9CisJCWJyZWFrOworCWNhc2UgTUlESV9OT1RFT0ZGOgorCQlTWU5U
SF9LSUxMTk9URShtZCwgdm9pY2UsIG5vdGUsIHBhcm0pOworCQlicmVhazsKKwljYXNlIE1JRElf
S0VZX1BSRVNTVVJFOgorCQlTWU5USF9BRlRFUlRPVUNIKG1kLCB2b2ljZSwgcGFybSk7CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDE7CisJCVNFUV9ERUJVRygyLHByaW50Zigic2VxX2No
bnZvaWNlIGV2ZW50IHR5cGUgJWQgbm90IGhhbmRsZWRcbiIsIGV2ZW50WzFdKSk7CisJCWJyZWFr
OworCX0KKworCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitz
dGF0aWMgaW50CitzZXFfY2huY29tbW9uKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwga29ial90IG1k
LCB1X2NoYXIgKmV2ZW50KQoreworCWludCByZXQ7CisJdV9zaG9ydCB3MTQ7CisJdV9jaGFyIGNt
ZCwgY2huLCBwMTsKKworCXJldCA9IDA7CisJY21kID0gZXZlbnRbMl07CisJY2huID0gZXZlbnRb
M107CisJcDEgPSBldmVudFs0XTsKKwl3MTQgPSAqKHVfc2hvcnQgKikmZXZlbnRbNl07CisKKwlT
RVFfREVCVUcoNSxwcmludGYoInNlcV9jaG5jb21tb246IHVuaXQgJWQsIGRldiAlZCwgY21kICVz
LCBjaG4gJWQsIgorCQkgICAgIiBwMSAlZCwgdzE0ICVkLlxuIiwgc2NwLT51bml0LCBldmVudFsx
XSwKKwkJICAgIG1pZGlfY21kbmFtZShjbWQsIGNtZHRhYl9zZXFjY21uKSwgY2huLCBwMSwgdzE0
KSk7CisJbXR4X3VubG9jaygmc2NwLT5zZXFfbG9jayk7CisJc3dpdGNoIChjbWQpIHsKKwkgICAg
Y2FzZSBNSURJX1BHTV9DSEFOR0U6CisJCSAgICBTRVFfREVCVUcoNCxwcmludGYoInNlcV9jaG5j
b21tb24gcGdtY2huIGNobiAlZCBwZyAlZFxuIiwKKwkJCQljaG4sIHAxKSk7CisJCSAgICBTWU5U
SF9TRVRJTlNUUihtZCwgY2huLCBwMSk7CisJCWJyZWFrOworCSAgICBjYXNlIE1JRElfQ1RMX0NI
QU5HRToKKwkJU0VRX0RFQlVHKDQscHJpbnRmKCJzZXFfY2huY29tbW9uIGN0bGNoIGNobiAlZCBw
ZyAlZCAlZFxuIiwKKwkJCSAgICBjaG4sIHAxLCB3MTQpKTsKKwkJU1lOVEhfQ09OVFJPTExFUiht
ZCwgY2huLCBwMSwgdzE0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTUlESV9QSVRDSF9CRU5EOgor
CQlpZiAoc2NwLT5tdXNpYykgeworCQkgICAgLyoKKwkJICAgICAqIFRPRE86IE1JRElfUElUQ0hf
QkVORAorCQkgICAgICovCisjaWYgMAorCQkgICAgbXR4X2xvY2soJm1kLT5zeW50aC52Y19tdHgp
OworCQkgICAgbWQtPnN5bnRoLmNobl9pbmZvW2Nobl0uYmVuZGVyX3ZhbHVlID0gdzE0OworCQkg
ICAgaWYgKG1kLT5taWRpdW5pdCA+PSAwKSB7CisJCQkvKiBIYW5kbGUgYWxsIG9mIHRoZSBub3Rl
cyBwbGF5aW5nIG9uIHRoaXMgY2hhbm5lbC4gKi8KKwkJCWtleSA9ICgoaW50KWNobiA8PCA4KTsK
KwkJCWZvciAoaSA9IDAgOyBpIDwgbWQtPnN5bnRoLmFsbG9jLm1heF92b2ljZSA7IGkrKykKKwkJ
CSAgICBpZiAoKG1kLT5zeW50aC5hbGxvYy5tYXBbaV0gJiAweGZmMDApID09IGtleSkgeworCQkJ
CW10eF91bmxvY2soJm1kLT5zeW50aC52Y19tdHgpOworCQkJCW10eF91bmxvY2soJnNjcC0+c2Vx
X2xvY2spOworCQkJCWlmIChtZC0+c3ludGguYmVuZGVyKG1kLCBpLCB3MTQpID09IEVBR0FJTikg
eworCQkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJCQkJICAgIHJldHVybiAoUVVF
VUVGVUxMKTsKKwkJCQl9CisJCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQkJICAgIH0K
KwkJICAgIH0gZWxzZSB7CisJCQltdHhfdW5sb2NrKCZtZC0+c3ludGgudmNfbXR4KTsKKwkJCW10
eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCQkJaWYgKG1kLT5zeW50aC5iZW5kZXIobWQsIGNo
biwgdzE0KSA9PSBFQUdBSU4pIHsKKwkJCSAgICBtdHhfbG9jaygmc2NwLT5zZXFfbG9jayk7CisJ
CQkgICAgcmV0dXJuIChRVUVVRUZVTEwpOworCQkJfQorCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xv
Y2spOworCQkgICAgfQorI2VuZGlmCisJCX0gZWxzZQorCQkgICAgU1lOVEhfQkVOREVSKG1kLCBj
aG4sIHcxNCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlyZXQgPSAxOworCQlTRVFfREVC
VUcoMixwcmludGYoInNlcV9jaG5jb21tb24gZXZlbnQgdHlwZSAlZCBub3QgaGFuZGxlZC5cbiIs
IGV2ZW50WzFdKSk7CisJCWJyZWFrOworCisJfQorCW10eF9sb2NrKCZzY3AtPnNlcV9sb2NrKTsK
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzZXFfdGltaW5nKHN0cnVjdCBzZXFfc29m
dGMgKnNjcCwgdV9jaGFyICpldmVudCkKK3sKKwlpbnQgcGFyYW07CisJaW50IHJldDsKKworCXJl
dCA9IDA7CisJcGFyYW0gPSBldmVudFs0XSArIChldmVudFs1XSA8PCA4KSArCisJICAgIChldmVu
dFs2XSA8PCAxNikgKyAoZXZlbnRbN10gPDwgMjQpOworCisJU0VRX0RFQlVHKDUscHJpbnRmKCJz
ZXFfdGltaW5nOiB1bml0ICVkLCBjbWQgJWQsIHBhcmFtICVkLlxuIiwKKwkJICAgIHNjcC0+dW5p
dCwgZXZlbnRbMV0sIHBhcmFtKSk7CisJc3dpdGNoIChldmVudFsxXSkgeworCWNhc2UgVE1SX1dB
SVRfUkVMOgorCSAgICB0aW1lcl93YWl0KHNjcCwgcGFyYW0sIDApOworCQlicmVhazsKKwljYXNl
IFRNUl9XQUlUX0FCUzoKKwkgICAgdGltZXJfd2FpdChzY3AsIHBhcmFtLCAxKTsKKwkJYnJlYWs7
CisJY2FzZSBUTVJfU1RBUlQ6CisJCXRpbWVyX3N0YXJ0KHNjcCk7CisJCWN2X2Jyb2FkY2FzdCgm
c2NwLT5yZXNldF9jdik7CisJCWJyZWFrOworCWNhc2UgVE1SX1NUT1A6CisJCXRpbWVyX3N0b3Ao
c2NwKTsKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBjdl9icm9hZGNhc3QgaXNuJ3QgbmVlZGVk
IHNpbmNlIHdlIG9ubHkKKwkJICogd2FpdCBmb3IgMC0+MSB0cmFuc2l0aW9ucy4gIEl0IHByb2Jh
Ymx5IHdvbid0IGh1cnQKKwkJICovCisJCWN2X2Jyb2FkY2FzdCgmc2NwLT5yZXNldF9jdik7CisJ
CWJyZWFrOworCWNhc2UgVE1SX0NPTlRJTlVFOgorCQl0aW1lcl9jb250aW51ZShzY3ApOworCQlj
dl9icm9hZGNhc3QoJnNjcC0+cmVzZXRfY3YpOworCQlicmVhazsKKwljYXNlIFRNUl9URU1QTzoK
KwkJaWYgKHBhcmFtIDwgOCkKKwkJICAgIHBhcmFtID0gODsKKwkJaWYgKHBhcmFtID4gMzYwKQor
CQkgICAgcGFyYW0gPSAzNjA7CisJCVNFUV9ERUJVRyg0LHByaW50ZigiVGltZXIgc2V0IHRlbXBv
ICVkXG4iLCBwYXJhbSkpOworCQl0aW1lcl9zZXR2YWxzKHNjcCwgcGFyYW0sIHNjcC0+dGltZXJi
YXNlKTsKKwkJYnJlYWs7CisJY2FzZSBUTVJfVElNRVJCQVNFOgorCQlpZiAocGFyYW0gPCAxKQor
CQkgICAgcGFyYW0gPSAxOworCQlpZiAocGFyYW0gPiAxMDAwKQorCQkgICAgcGFyYW0gPSAxMDAw
OworCQlTRVFfREVCVUcoNCxwcmludGYoIlRpbWVyIHNldCB0aW1lcmJhc2UgJWRcbiIsIHBhcmFt
KSk7CisJCXRpbWVyX3NldHZhbHMoc2NwLCBzY3AtPnRlbXBvLCBwYXJhbSk7CisJCWJyZWFrOwor
CWNhc2UgVE1SX0VDSE86CisJCS8qCisJCSAqIFRPRE86IENvbnNpZGVyIG1ha2luZyA0LWJ5dGUg
ZXZlbnRzIGZvciAvZGV2L3NlcXVlbmNlcgorCQkgKiBQUk86IE1heWJlIG5lZWRlZCBieSBsZWdh
Y3kgYXBwcworCQkgKiBDT046IHNvdW5kY2FyZC5oIGhhcyBiZWVuIHdhcm5pbmcgZm9yIGEgd2hp
bGUgbWFueSB5ZWFycworCQkgKiB0byBleHBlY3QgOCBieXRlIGV2ZW50cy4KKwkJICovCisjaWYg
MAorCQlpZiAoc2NwLT5tdXNpYykKKwkJCXNlcV9jb3B5dG9pbnB1dChzY3AsIGV2ZW50LCA4KTsK
KwkJZWxzZSB7CisJCQlwYXJhbSA9IChwYXJhbSA8PCA4IHwgU0VRX0VDSE8pOworCQkJc2VxX2Nv
cHl0b2lucHV0KHNjcCwgKHVfY2hhciAqKSZwYXJhbSwgNCk7CisJCX0KKyNlbHNlCisJCXNlcV9j
b3B5dG9pbnB1dChzY3AsIGV2ZW50LCA4KTsKKyNlbmRpZgorCQlicmVhazsKKwkgICAgZGVmYXVs
dDoKKwkJU0VRX0RFQlVHKDIscHJpbnRmKCJzZXFfdGltaW5nIGV2ZW50IHR5cGUgJWQgbm90IGhh
bmRsZWQuXG4iLCBldmVudFsxXSkpOworCQlyZXQgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJu
IHJldDsKK30KKworc3RhdGljIGludAorc2VxX2xvY2FsKHN0cnVjdCBzZXFfc29mdGMgKnNjcCwg
dV9jaGFyICpldmVudCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKwltdHhfYXNzZXJ0KCZz
Y3AtPnNlcV9sb2NrLCBNQV9PV05FRCk7CisKKwlTRVFfREVCVUcoNSxwcmludGYoInNlcV9sb2Nh
bDogdW5pdCAlZCwgY21kICVkXG4iLCBzY3AtPnVuaXQsIGV2ZW50WzFdKSk7CisJc3dpdGNoIChl
dmVudFsxXSkgeworCSAgICBkZWZhdWx0OgorCQlwcmludGYoInNlcV9sb2NhbCBldmVudCB0eXBl
ICVkIG5vdCBoYW5kbGVkXG4iLCBldmVudFsxXSk7CisJCXJldCA9IDE7CisJCWJyZWFrOworCX0K
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzZXFfc3lzZXgoc3RydWN0IHNlcV9zb2Z0
YyAqc2NwLCBrb2JqX3QgbWQsIHVfY2hhciAqZXZlbnQpCit7CisJaW50IGksIGw7CisKKwltdHhf
YXNzZXJ0KCZzY3AtPnNlcV9sb2NrLCBNQV9PV05FRCk7CisJU0VRX0RFQlVHKDUscHJpbnRmKCJz
ZXFfc3lzZXg6IHVuaXQgJWQgZGV2aWNlICVkXG4iLCBzY3AtPnVuaXQsIGV2ZW50WzFdKSk7CisJ
bCA9IDA7CisJZm9yIChpID0gMCA7IGkgPCA2ICYmIGV2ZW50W2kgKyAyXSAhPSAweGZmIDsgaSsr
KQorCQlsID0gaSArIDE7CisJaWYgKGwgPiAwKSB7CisJCW10eF91bmxvY2soJnNjcC0+c2VxX2xv
Y2spOworCQlpZiAoU1lOVEhfU0VORFNZU0VYKG1kLCAmZXZlbnRbMl0sIGwpID09IEVBR0FJTikg
eworCQkJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbXR4
X2xvY2soJnNjcC0+c2VxX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlc2V0
IG5vIGxvbmdlciBjbG9zZXMgdGhlIHJhdyBkZXZpY2VzIG5vciBzZXFfc3luYydzCisgKiBDYWxs
ZXJzIGFyZSBJT0NUTCBhbmQgc2VxX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkCitzZXFfcmVzZXQo
c3RydWN0IHNlcV9zb2Z0YyAqc2NwKQoreworCWludCBjaG4sICBpOworCWtvYmpfdCBtOworCisJ
bXR4X2Fzc2VydCgmc2NwLT5zZXFfbG9jaywgTUFfT1dORUQpOworCisJU0VRX0RFQlVHKDUscHJp
bnRmKCJzZXFfcmVzZXQ6IHVuaXQgJWQuXG4iLCBzY3AtPnVuaXQpKTsKKworCS8qCisJICogU3Rv
cCByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqLworCisJLyogc2NwLT5yZWNvcmRpbmcgPSAwOyAq
LworCXNjcC0+cGxheWluZyA9IDA7CisJY3ZfYnJvYWRjYXN0KCZzY3AtPnN0YXRlX2N2KTsKKwlj
dl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwljdl9icm9hZGNhc3QoJnNjcC0+cmVzZXRfY3Yp
OworCisJLyoKKwkgKiBGb3Igbm93LCBkb24ndCByZXNldCB0aGUgdGltZXJzLgorCSAqLworCU1J
RElRX0NMRUFSKHNjcC0+aW5fcSk7CisJTUlESVFfQ0xFQVIoc2NwLT5vdXRfcSk7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgc2NwLT5taWRpX251bWJlcjsgaSsrKSB7CisJICAgIG0gPSBzY3AtPm1pZGlz
W2ldOworCSAgICBtdHhfdW5sb2NrKCZzY3AtPnNlcV9sb2NrKTsKKwkgICAgU1lOVEhfUkVTRVQo
bSk7CisJICAgIGZvciAoY2huID0gMCA7IGNobiA8IDE2IDsgY2huKyspIHsKKwkJU1lOVEhfQ09O
VFJPTExFUihtLCBjaG4sIDEyMywgMCkgOworCQlTWU5USF9DT05UUk9MTEVSKG0sIGNobiwgMTIx
LCAwKTsKKwkJU1lOVEhfQkVOREVSKG0sIGNobiwgMSA8PCAxMyk7CisJICAgIH0KKwkgICAgbXR4
X2xvY2soJnNjcC0+c2VxX2xvY2spOworCX0KK30KKworLyoKKyAqIHNlcV9zeW5jCisgKiAqcmVh
bGx5KiBmbHVzaCB0aGUgb3V0cHV0IHF1ZXVlCisgKiBmbHVzaCB0aGUgZXZlbnQgcXVldWUsIHRo
ZW4gZmx1c2ggdGhlIHN5bnRoc2lzZXJzLgorICogQ2FsbGVycyBhcmUgSU9DVEwgYW5kIGNsb3Nl
CisgKi8KKworI2RlZmluZSBTRVFfU1lOQ19USU1FT1VUIDgKK3N0YXRpYyBpbnQKK3NlcV9zeW5j
KHN0cnVjdCBzZXFfc29mdGMgKnNjcCkKK3sKKwlpbnQgaSwgcmwsIHN5bmNbMTZdLCBkb25lOwor
CisJbXR4X2Fzc2VydCgmc2NwLT5zZXFfbG9jaywgTUFfT1dORUQpOworCisJU0VRX0RFQlVHKDQs
cHJpbnRmKCJzZXFfc3luYzogdW5pdCAlZC5cbiIsIHNjcC0+dW5pdCkpOworCisJLyoKKwkgKiBX
YWl0IHVudGlsIG91dHB1dCBxdWV1ZSBpcyBlbXB0eS4gIENoZWNrIGV2ZXJ5IHNvIG9mdGVuIHRv
IHNlZSBpZgorCSAqIHRoZSBxdWV1ZSBpcyBtb3ZpbmcgYWxvbmcuICBJZiBpdCBpc24ndCBqdXN0
IGFib3J0LgorCSAqLworCXdoaWxlICghTUlESVFfRU1QVFkoc2NwLT5vdXRfcSkpIHsKKworCSAg
ICBpZiAoIXNjcC0+cGxheWluZykgeworCQlzY3AtPnBsYXlpbmcgPSAxOworCQljdl9icm9hZGNh
c3QoJnNjcC0+c3RhdGVfY3YpOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsKKwkgICAg
fQorCisJICAgIHJsID0gTUlESVFfTEVOKHNjcC0+b3V0X3EpOworCisJICAgIGkgPSBjdl90aW1l
ZHdhaXRfc2lnKCZzY3AtPm91dF9jdiwgCisJCSAgICAmc2NwLT5zZXFfbG9jaywgU0VRX1NZTkNf
VElNRU9VVCAqIGh6KTsKKworCSAgICBpZiAoaSA9PSBFSU5UUiB8fCBpID09IEVSRVNUQVJUKSB7
CisJCWlmIChpID09IEVJTlRSKSB7CisJCSAgICAvKgorCQkgICAgICogWFhYOiBJIGRvbid0IGtu
b3cgd2h5IHdlIHN0b3AgcGxheWluZworCQkgICAgICovCisJCSAgICBzY3AtPnBsYXlpbmcgPSAw
OworCQkgICAgY3ZfYnJvYWRjYXN0KCZzY3AtPm91dF9jdik7CisJCX0KKwkJcmV0dXJuIGk7CisJ
ICAgIH0KKworCSAgICBpZiAoaSA9PSBFV09VTERCTE9DSyAmJiBybCA9PSBNSURJUV9MRU4oc2Nw
LT5vdXRfcSkgJiYKKwkJICAgIHNjcC0+d2FpdGluZyA9PSAwKSB7CisJCS8qCisJCSAqIEEgcXVl
dWUgc2VlbXMgdG8gYmUgc3R1Y2sgdXAuIEdpdmUgdXAgYW5kIGNsZWFyIHF1ZXVlcy4KKwkJICov
CisJCU1JRElRX0NMRUFSKHNjcC0+b3V0X3EpOworCQlzY3AtPnBsYXlpbmcgPSAwOworCQljdl9i
cm9hZGNhc3QoJnNjcC0+c3RhdGVfY3YpOworCQljdl9icm9hZGNhc3QoJnNjcC0+b3V0X2N2KTsK
KwkJY3ZfYnJvYWRjYXN0KCZzY3AtPnJlc2V0X2N2KTsKKworCQkvKgorCQkgKiBUT0RPOiBDb25z
aWRlciBpZiB0aGUgcmF3IGRldmljZXMgbmVlZCB0byBiZSBmbHVzaGVkCisJCSAqLworCisJCVNF
UV9ERUJVRygxLHByaW50Zigic2VxX3N5bmMgcXVldWUgc3R1Y2ssIGFib3J0aW5nXG4iKSk7CisK
KwkJcmV0dXJuIGk7CisJICAgIH0KKwl9CisKKwlzY3AtPnBsYXlpbmcgPSAwOworCS8qCisJICog
U2luY2Ugc3luY2luZyBhIG1pZGkgZGV2aWNlIG1pZ2h0IGJsb2NrLCB1bmxvY2sgc2NwLT5zZXFf
bG9jay4KKwkgKi8KKworCW10eF91bmxvY2soJnNjcC0+c2VxX2xvY2spOworCWZvcihpID0gMCA7
IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBpKyspCisJICAgIHN5bmNbaV0gPSAxOworCisJZG8gewor
CSAgICBkb25lID0gMTsKKwkgICAgZm9yIChpID0gMCA7IGkgPCBzY3AtPm1pZGlfbnVtYmVyOyBp
KyspCisJCWlmIChzeW5jW2ldKSB7CisJCSAgICBpZiAoU1lOVEhfSU5TWU5DKHNjcC0+bWlkaXNb
aV0pID09IDApCisJCQlzeW5jW2ldID0gMDsKKwkJICAgIGVsc2UKKwkJCWRvbmUgPSAwOworCQl9
CisKKwkgICBpZiAoIWRvbmUpCisJCURFTEFZKDUwMDApOworCisJfSB3aGlsZSAoIWRvbmUpOwor
CisJbXR4X2xvY2soJnNjcC0+c2VxX2xvY2spOworCXJldHVybiAwOworfQorCitjaGFyICoKK21p
ZGlfY21kbmFtZShpbnQgY21kLCBtaWRpX2NtZHRhYiAqdGFiKQoreworCXdoaWxlICh0YWItPm5h
bWUgIT0gTlVMTCkgeworCQlpZiAoY21kID09IHRhYi0+Y21kKQorCQkJcmV0dXJuICh0YWItPm5h
bWUpOworCQl0YWIrKzsKKwl9CisKKwlyZXR1cm4gKCJ1bmtub3duIik7Cit9CkluZGV4OiBzeXMv
ZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogc3lzL2Rldi9z
b3VuZC9taWRpL3NlcXVlbmNlci5oCmRpZmYgLU4gc3lzL2Rldi9zb3VuZC9taWRpL3NlcXVlbmNl
ci5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9z
b3VuZC9taWRpL3NlcXVlbmNlci5oCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIEluY2x1ZGUgZmlsZSBmb3IgbWlkaSBzZXF1ZW5jZXIgZHJpdmVyLgor
ICogKGMpIDIwMDMgTWF0aGV3IEthbm5lcgorICogQ29weXJpZ2h0IGJ5IFNlaWdvIFRhbmltdXJh
IDE5OTkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9zeXMvZGV2L3NvdW5kL21pZGkvc2VxdWVuY2VyLmgs
diAxLjUgMjAwMi8wMS8wNCAwMToxMzo0NyB0YW5pbXVyYSBFeHAgJAorICoKKyAqLworCisjaWZu
ZGVmIF9TRVFVRU5DRVJfSF8KKyNkZWZpbmUgX1NFUVVFTkNFUl9IXworCisKKyNkZWZpbmUgU0VR
X0NERVZfTUFKT1IgTUlESV9DREVWX01BSk9SCisKKyNkZWZpbmUgTlNFUV9NQVgJMTYKKworLyoK
KyAqIG1hbnkgdmFyaWFibGVzIHNob3VsZCBiZSByZWR1Y2VkIHRvIGEgcmFuZ2UuIEhlcmUgZGVm
aW5lIGEgbWFjcm8KKyAqLworCisjZGVmaW5lIFJBTkdFKHZhciwgbG93LCBoaWdoKSAodmFyKSA9
IFwKKygodmFyKTwobG93KT8obG93KSA6ICh2YXIpPihoaWdoKT8oaGlnaCkgOiAodmFyKSkKKwor
I2lmZGVmIF9LRVJORUwKKwordm9pZAlzZXFfdGltZXIodm9pZCAqYXJnKTsKKworU1lTQ1RMX0RF
Q0woX2h3X21pZGlfc2VxKTsKKworZXh0ZXJuIGludAlzZXFfZGVidWc7CisjZGVmaW5lIFNFUV9E
RUJVRyh5LCB4KQkJCVwKKwlkbyB7CQkJCVwKKwkJaWYgKHNlcV9kZWJ1ZyA+PSB5KSB7CVwKKwkJ
CSh4KTsJCVwKKwkJfQkJCVwKKwl9IHdoaWxlKDApCisKK1NZU0NUTF9ERUNMKF9od19taWRpKTsK
KworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2RlZmluZSBTWU5USFBST1BfTUlESQkJMQorI2Rl
ZmluZSBTWU5USFBST1BfU1lOVEgJCTIKKyNkZWZpbmUgU1lOVEhQUk9QX1JYCQk0CisjZGVmaW5l
IFNZTlRIUFJPUF9UWAkJOAorCitzdHJ1Y3QgX21pZGlfY21kdGFiIHsKKyAgICBpbnQgICAgIGNt
ZDsKKyAgICBjaGFyICogIG5hbWU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX21pZGlfY21kdGFiICAg
ICAgbWlkaV9jbWR0YWI7CitleHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWV2ZW50W107Citl
eHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWlvY3RsW107CitleHRlcm4gbWlkaV9jbWR0YWIg
Y21kdGFiX3RpbWVyW107CitleHRlcm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWN2W107CitleHRl
cm4gbWlkaV9jbWR0YWIgY21kdGFiX3NlcWNjbW5bXTsKKworY2hhciAgICAgKm1pZGlfY21kbmFt
ZShpbnQgY21kLCBtaWRpX2NtZHRhYiAqdGFiKTsKKworZW51bSB7CisJTU9SRSwKKwlUSU1FUkFS
TUVELAorCVFVRVVFRlVMTAorfTsKKworI2VuZGlmCkluZGV4OiBzeXMvZGV2L3NvdW5kL21pZGkv
c3ludGhfaWYubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBzeXMvZGV2L3NvdW5kL21pZGkvc3ludGhf
aWYubQpkaWZmIC1OIHN5cy9kZXYvc291bmQvbWlkaS9zeW50aF9pZi5tCi0tLSAvZGV2L251bGwJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3lzL2Rldi9zb3VuZC9taWRpL3N5bnRoX2lm
Lm0JNSBNYXIgMjAwNSAxNjoyNzowNyAtMDAwMApAQCAtMCwwICsxLDI4NSBAQAorSU5URVJGQUNF
IHN5bnRoOworCisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKK0NPREUgeworCitzeW50aF9raWxs
bm90ZV90IG5va2lsbG5vdGU7CitzeW50aF9zdGFydG5vdGVfdCBub3N0YXJ0bm90ZTsKK3N5bnRo
X3NldGluc3RyX3Qgbm9zZXRpbnN0cjsKK3N5bnRoX2h3Y29udHJvbF90IG5vaHdjb250cm9sOwor
c3ludGhfYWZ0ZXJ0b3VjaF90IG5vYWZ0ZXJ0b3VjaDsKK3N5bnRoX3Bhbm5pbmdfdCBub3Bhbm5p
bmc7CitzeW50aF9jb250cm9sbGVyX3Qgbm9jb250cm9sbGVyOworc3ludGhfdm9sdW1lbWV0aG9k
X3Qgbm92b2x1bWVtZXRob2Q7CitzeW50aF9iZW5kZXJfdCBub2JlbmRlcjsKK3N5bnRoX3NldHVw
dm9pY2VfdCBub3NldHVwdm9pY2U7CitzeW50aF9zZW5kc3lzZXhfdCBub3NlbmRzeXNleDsKK3N5
bnRoX2FsbG9jdm9pY2VfdCBub2FsbG9jdm9pY2U7CitzeW50aF93cml0ZXJhd190IG5vd3JpdGVy
YXc7CitzeW50aF9yZXNldF90IG5vcmVzZXQ7CitzeW50aF9zaG9ydG5hbWVfdCBub3Nob3J0bmFt
ZTsKK3N5bnRoX29wZW5fdCBub29wZW47CitzeW50aF9jbG9zZV90IG5vY2xvc2U7CitzeW50aF9x
dWVyeV90IG5vcXVlcnk7CitzeW50aF9pbnN5bmNfdCBub2luc3luYzsKK3N5bnRoX2FsbG9jX3Qg
bm9hbGxvYzsKKworICAgIGludAorCW5va2lsbG5vdGUodm9pZCAqX2tvYmosIHVpbnQ4X3QgX2No
biwgdWludDhfdCBfbm90ZSwgdWludDhfdCBfdmVsKQorCXsKKwkgICAgcHJpbnRmKCJub2tpbGxu
b3RlXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9vcGVuKHZvaWQgKl9r
b2JqLCB2b2lkICpfYXJnLCBpbnQgbW9kZSkKKwl7CisJICAgIHByaW50Zigibm9vcGVuXG4iKTsK
KwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9xdWVyeSh2b2lkICpfa2JvaikKKwl7
CisJICAgIHByaW50Zigibm9xdWVyeVxuIik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGlu
dAorCW5vc3RhcnRub3RlKHZvaWQgKl9rYiwgdWludDhfdCBfdm9pY2UsIHVpbnQ4X3QgX25vdGUs
IHVpbnQ4X3QgX3Bhcm0pCisJeworCSAgICBwcmludGYoIm5vc3RhcnRub3RlXG4iKTsKKwkgICAg
cmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9zZXRpbnN0cih2b2lkICpfa2IsIHVpbnQ4X3Qg
X2NobiwgdWludDE2X3QgX3BhdGNobm8pCisJeworCSAgICBwcmludGYoIm5vc2V0aW5zdHJcbiIp
OworCSAgICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQKKwlub2h3Y29udHJvbCh2b2lkICpfa2Is
IHVpbnQ4X3QgKl9ldmVudCkKKwl7CisJICAgIHByaW50Zigibm9od2NvbnRyb2xcbiIpOworCSAg
ICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQgCisJbm9hZnRlcnRvdWNoICggdm9pZCAvKiBYICov
ICogX2tvYmosIHVpbnQ4X3QgX3gxLCB1aW50OF90IF94MikKKwl7CisJICAgIHByaW50Zigibm9h
ZnRlcnRvdWNoXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50CisJbm9wYW5uaW5n
ICggdm9pZCAvKiBYICovICogX2tvYmosIHVpbnQ4X3QgX3gxLCB1aW50OF90IF94MikKKwl7CisJ
ICAgIHByaW50Zigibm9wYW5uaW5nXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50
IAorCW5vY29udHJvbGxlciAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF94MSwgdWlu
dDhfdCBfeDIsIHVpbnQxNl90IF94MykKKwl7CisJICAgIHByaW50Zigibm9jb250cm9sbGVyXG4i
KTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50IAorCW5vdm9sdW1lbWV0aG9kICgKKwkJ
dm9pZCAvKiBYICovICogX2tvYmosCisJCXVpbnQ4X3QgX3gxKQorCXsKKwkgICAgcHJpbnRmKCJu
b3ZvbHVtZW1ldGhvZFxuIik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGludCAKKwlub2Jl
bmRlciAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF92b2ljZSwgdWludDE2X3QgX2Jl
bmQpCisJeworCSAgICBwcmludGYoIm5vYmVuZGVyXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQor
CisgICAgaW50IAorCW5vc2V0dXB2b2ljZSAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90
IF92b2ljZSwgdWludDhfdCBfY2huKQorCXsKKworCSAgICBwcmludGYoIm5vc2V0dXB2b2ljZVxu
Iik7CisJICAgIHJldHVybiAwOworCX0KKworICAgIGludCAKKwlub3NlbmRzeXNleCAoIHZvaWQg
LyogWCAqLyAqIF9rb2JqLCB2b2lkICogX2J1Ziwgc2l6ZV90IF9sZW4pCisJeworCSAgICBwcmlu
dGYoIm5vc2VuZHN5c2V4XG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisgICAgaW50IAorCW5v
YWxsb2N2b2ljZSAoIHZvaWQgLyogWCAqLyAqIF9rb2JqLCB1aW50OF90IF9jaG4sIHVpbnQ4X3Qg
X25vdGUsIHZvaWQgKl94KQorCXsKKwkgICAgcHJpbnRmKCJub2FsbG9jdm9pY2VcbiIpOworCSAg
ICByZXR1cm4gMDsKKwl9CisKKyAgICBpbnQgCisJbm93cml0ZXJhdyAoIHZvaWQgLyogWCAqLyAq
IF9rb2JqdCwgdWludDhfdCAqIF9idWYsIHNpemVfdCBfbGVuKQorCXsKKwkgICAgcHJpbnRmKCJu
b3dyaXRlcmF3XG4iKTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisgICAgaW50IAorCW5vcmVzZXQg
KCB2b2lkIC8qIFggKi8gKiBfa29ianQpCisJeworCisJICAgIHByaW50Zigibm9yZXNldFxuIik7
CisJICAgIHJldHVybiAwOworCX0KKworICAgIGNoYXIgKgorCW5vc2hvcnRuYW1lICh2b2lkIC8q
IFggKi8gKiBfa29ianQpCisJeworCSAgICBwcmludGYoIm5vc2hvcnRuYW1lXG4iKTsKKwkgICAg
cmV0dXJuICJub3Nob3J0bmFtZSI7CisJfQorCisgICAgaW50IAorCW5vY2xvc2UgKCB2b2lkIC8q
IFggKi8gKiBfa29ianQpCisJeworCisJICAgIHByaW50Zigibm9jbG9zZVxuIik7CisJICAgIHJl
dHVybiAwOworCX0KKworICAgIGludAorCW5vaW5zeW5jICh2b2lkIC8qIFggKi8gKiBfa29ianQp
CisJeworCisJICAgIHByaW50Zigibm9pbnN5bmNcbiIpOworCSAgICByZXR1cm4gMDsKKwl9CisK
KyAgICBpbnQgCisJbm9hbGxvYyAoIHZvaWQgLyogeCAqLyAqIF9rYm9qdCwgdWludDhfdCBfY2hu
LCB1aW50OF90IF9ub3RlKQorCXsKKwkgICAgcHJpbnRmKCJub2FsbG9jXG4iKTsKKwkgICAgcmV0
dXJuIDA7CisJfQorfQorCitNRVRIT0QgaW50IGtpbGxub3RlIHsKKyAgICB2b2lkIC8qIFggKi8g
KiBfa29iajsKKyAgICB1aW50OF90IF9jaGFuOworICAgIHVpbnQ4X3QgX25vdGU7CisgICAgdWlu
dDhfdCBfdmVsOworfSBERUZBVUxUIG5va2lsbG5vdGU7CisKK01FVEhPRCBpbnQgc3RhcnRub3Rl
IHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAgICB1aW50OF90IF92b2ljZTsKKyAgICB1
aW50OF90IF9ub3RlOworICAgIHVpbnQ4X3QgX3Bhcm07Cit9IERFRkFVTFQgbm9zdGFydG5vdGU7
CisKK01FVEhPRCBpbnQgc2V0aW5zdHIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAg
IHVpbnQ4X3QgX2NobjsKKyAgICB1aW50MTZfdCBfcGF0Y2hubzsKK30gREVGQVVMVCBub3NldGlu
c3RyOworCitNRVRIT0QgaW50IGh3Y29udHJvbCB7CisgICAgdm9pZCAvKiBYICovICogX2tvYmo7
CisgICAgdWludDhfdCAqX2V2ZW50OworfSBERUZBVUxUIG5vaHdjb250cm9sOworCitNRVRIT0Qg
aW50IGFmdGVydG91Y2ggeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4X3Qg
X3gxOworICAgIHVpbnQ4X3QgX3gyOworfSBERUZBVUxUIG5vYWZ0ZXJ0b3VjaDsKKworTUVUSE9E
IGludCBwYW5uaW5nIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAgICB1aW50OF90IF94
MTsKKyAgICAgICAgdWludDhfdCBfeDI7Cit9IERFRkFVTFQgbm9wYW5uaW5nOworCitNRVRIT0Qg
aW50IGNvbnRyb2xsZXIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4X3Qg
X3gxOworICAgIHVpbnQ4X3QgX3gyOworICAgIHVpbnQxNl90IF94MzsKK30gREVGQVVMVCBub2Nv
bnRyb2xsZXI7CisKK01FVEhPRCBpbnQgdm9sdW1lbWV0aG9kIHsKKyAgICB2b2lkIC8qIFggKi8g
KiBfa29iajsKKyAgICB1aW50OF90IF94MTsKK30gREVGQVVMVCBub3ZvbHVtZW1ldGhvZDsKKwor
TUVUSE9EIGludCBiZW5kZXIgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVpbnQ4
X3QgX3ZvaWNlOworICAgIHVpbnQxNl90IF9iZW5kOworfSBERUZBVUxUIG5vYmVuZGVyOworCitN
RVRIT0QgaW50IHNldHVwdm9pY2UgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqOworICAgIHVp
bnQ4X3QgX3ZvaWNlOworICAgIHVpbnQ4X3QgX2NobjsKK30gREVGQVVMVCBub3NldHVwdm9pY2U7
CisKK01FVEhPRCBpbnQgc2VuZHN5c2V4IHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAg
ICB2b2lkICogX2J1ZjsKKyAgICBzaXplX3QgX2xlbjsKK30gREVGQVVMVCBub3NlbmRzeXNleDsK
KworTUVUSE9EIGludCBhbGxvY3ZvaWNlIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29iajsKKyAg
ICB1aW50OF90IF9jaG47CisgICAgdWludDhfdCBfbm90ZTsKKyAgICB2b2lkICpfeDsKK30gREVG
QVVMVCBub2FsbG9jdm9pY2U7CisKK01FVEhPRCBpbnQgd3JpdGVyYXcgeworICAgIHZvaWQgLyog
WCAqLyAqIF9rb2JqdDsKKyAgICB1aW50OF90ICogX2J1ZjsKKyAgICBzaXplX3QgX2xlbjsKK30g
REVGQVVMVCBub3dyaXRlcmF3OworCitNRVRIT0QgaW50IHJlc2V0IHsKKyAgICB2b2lkIC8qIFgg
Ki8gKiBfa29ianQ7Cit9IERFRkFVTFQgbm9yZXNldDsKKworTUVUSE9EIGNoYXIgKiBzaG9ydG5h
bWUgeworICAgIHZvaWQgLyogWCAqLyAqIF9rb2JqdDsKK30gREVGQVVMVCBub3Nob3J0bmFtZTsK
KworTUVUSE9EIGludCBvcGVuIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29ianQ7CisgICAgdm9p
ZCAqIF9zeXRobjsKKyAgICBpbnQgX21vZGU7Cit9IERFRkFVTFQgbm9vcGVuOworCitNRVRIT0Qg
aW50IGNsb3NlIHsKKyAgICB2b2lkIC8qIFggKi8gKiBfa29ianQ7Cit9IERFRkFVTFQgbm9jbG9z
ZTsKKworTUVUSE9EIGludCBxdWVyeSB7CisgICAgdm9pZCAvKiBYICovICogX2tvYmp0OworfSBE
RUZBVUxUIG5vcXVlcnk7CisKK01FVEhPRCBpbnQgaW5zeW5jIHsKKyAgICB2b2lkIC8qIFggKi8g
KiBfa29ianQ7Cit9IERFRkFVTFQgbm9pbnN5bmM7CisKK01FVEhPRCBpbnQgYWxsb2MgeworICAg
IHZvaWQgLyogeCAqLyAqIF9rYm9qdDsKKyAgICB1aW50OF90IF9jaG47CisgICAgdWludDhfdCBf
bm90ZTsKK30gREVGQVVMVCBub2FsbG9jOwpJbmRleDogc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2Rldi9zb3VuZC9wY2kvY21p
LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkuMi4xCmRpZmYgLXUgLXIxLjI5LjIuMSBjbWku
YwotLS0gc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMJMzAgSmFuIDIwMDUgMDE6MDA6MDMgLTAwMDAJ
MS4yOS4yLjEKKysrIHN5cy9kZXYvc291bmQvcGNpL2NtaS5jCTUgTWFyIDIwMDUgMTY6Mjc6MDcg
LTAwMDAKQEAgLTQ4LDggKzQ4LDEwIEBACiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KIAog
I2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxkZXYvc291bmQvbWlkaS9tcHU0MDEu
aD4KIAogI2luY2x1ZGUgIm1peGVyX2lmLmgiCisjaW5jbHVkZSAibXB1Zm9pX2lmLmgiCiAKIFNO
RF9ERUNMQVJFX0ZJTEUoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9zb3VuZC9wY2kvY21pLmMsdiAx
LjI5LjIuMSAyMDA1LzAxLzMwIDAxOjAwOjAzIGltcCBFeHAgJCIpOwogCkBAIC0xMTIsNiArMTE0
LDEzIEBACiAJaW50CQkJc3BkaWZfZW5hYmxlZDsKIAl1bnNpZ25lZCBpbnQJCWJ1ZnN6OwogCXN0
cnVjdCBzY19jaGluZm8gCXBjaCwgcmNoOworCisJc3RydWN0IG1wdTQwMQkqbXB1OworCW1wdTQw
MV9pbnRyX3QJCSptcHVfaW50cjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1wdV9yZWc7CisJaW50IG1w
dV9yZWdpZDsKKwlidXNfc3BhY2VfdGFnX3QJbXB1X2J0OworCWJ1c19zcGFjZV9oYW5kbGVfdAlt
cHVfYmg7CiB9OwogCiAvKiBDaGFubmVsIGNhcHMgKi8KQEAgLTU1MSw2ICs1NjAsOSBAQAogCiAJ
CX0KIAl9CisJaWYoc2MtPm1wdV9pbnRyKSB7CisJCShzYy0+bXB1X2ludHIpKHNjLT5tcHUpOwor
CX0KIAlzbmRfbXR4dW5sb2NrKHNjLT5sb2NrKTsKIAlyZXR1cm47CiB9CkBAIC03NDcsNiArNzU5
LDc0IEBACiB9OwogTUlYRVJfREVDTEFSRShjbWlfbWl4ZXIpOwogCisvKgorICogbXB1NDAxIGZ1
bmN0aW9ucworICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitjbWlfbXJlYWQodm9pZCAqYXJn
LCBzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCByZWcpCit7CQorCXVuc2lnbmVkIGludCBkOworCisJ
CWQgPSBidXNfc3BhY2VfcmVhZF8xKDAsMCwgMHgzMzAgKyByZWcpOyAKKwkvKglwcmludGYoImNt
aV9tcmVhZDogcmVnICV4ICV4XG4iLHJlZywgZCk7CisJKi8KKwlyZXR1cm4gZDsKK30KKworc3Rh
dGljIHZvaWQKK2NtaV9td3JpdGUodm9pZCAqYXJnLCBzdHJ1Y3Qgc2NfaW5mbyAqc2MsIGludCBy
ZWcsIHVuc2lnbmVkIGNoYXIgYikKK3sKKworCWJ1c19zcGFjZV93cml0ZV8xKDAsMCwweDMzMCAr
IHJlZyAsIGIpOworfQorCitzdGF0aWMgaW50CitjbWlfbXVuaW5pdCh2b2lkICphcmcsIHN0cnVj
dCBzY19pbmZvICpzYykKK3sKKworCXNuZF9tdHhsb2NrKHNjLT5sb2NrKTsKKwlzYy0+bXB1X2lu
dHIgPSAwOworCXNjLT5tcHUgPSAwOworCXNuZF9tdHh1bmxvY2soc2MtPmxvY2spOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBrb2JqX21ldGhvZF90IGNtaV9tcHVfbWV0aG9kc1tdID0gewor
ICAgIAlLT0JKTUVUSE9EKG1wdWZvaV9yZWFkLAkJY21pX21yZWFkKSwKKyAgICAJS09CSk1FVEhP
RChtcHVmb2lfd3JpdGUsCWNtaV9td3JpdGUpLAorICAgIAlLT0JKTUVUSE9EKG1wdWZvaV91bmlu
aXQsCWNtaV9tdW5pbml0KSwKKwl7IDAsIDAgfQorfTsKKworREVGSU5FX0NMQVNTKGNtaV9tcHUs
IGNtaV9tcHVfbWV0aG9kcywgMCk7CisKK3N0YXRpYyB2b2lkCitjbWlfbWlkaWF0dGFjaChzdHJ1
Y3Qgc2NfaW5mbyAqc2MpIHsKKy8qCisJY29uc3Qgc3RydWN0IHsKKwkJaW50IHBvcnQsYml0czsK
Kwl9ICpwLCBwb3J0c1tdID0geyAKKwkJezB4MzMwLDB9LCAKKwkJezB4MzIwLDF9LCAKKwkJezB4
MzEwLDJ9LCAKKwkJezB4MzAwLDN9LCAKKwkJezAsMH0gfSA7CisJTm90ZXMsIENNUENJX1JFR19W
TVBVU0VMIHNldHMgdGhlIGlvIHBvcnQgZm9yIHRoZSBtcHUuICBEb2VzCisJYW55b25lIGtub3cg
aG93IHRvIGJ1c19zcGFjZSB0YWc/CisqLworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfRlVOQ18x
LCBDTVBDSV9SRUdfVUFSVF9FTkFCTEUpOworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfTEVHQUNZ
X0NUUkwsIAorCQkJQ01QQ0lfUkVHX1ZNUFVTRUxfTUFTSyA8PCBDTVBDSV9SRUdfVk1QVVNFTF9T
SElGVCk7CisJY21pX3NldDQoc2MsIENNUENJX1JFR19MRUdBQ1lfQ1RSTCwgCisJCQkwIDw8IENN
UENJX1JFR19WTVBVU0VMX1NISUZUICk7CisJY21pX3NldDQoc2MsIENNUENJX1JFR19GVU5DXzEs
IENNUENJX1JFR19VQVJUX0VOQUJMRSk7CisJc2MtPm1wdSA9IG1wdTQwMV9pbml0KCZjbWlfbXB1
X2NsYXNzLCBzYywgY21pX2ludHIsICZzYy0+bXB1X2ludHIpOworfQorCisKKwogLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwogLyogUG93ZXIgYW5kIHJlc2V0ICovCiAKQEAgLTgwMiw2ICs4ODIsMTAg
QEAKIAkJIENNUENJX1JFR19URE1BX0lOVFJfRU5BQkxFKTsKIAljbWlfY2xyNChzYywgQ01QQ0lf
UkVHX0ZVTkNfMCwKIAkJIENNUENJX1JFR19DSDBfRU5BQkxFIHwgQ01QQ0lfUkVHX0NIMV9FTkFC
TEUpOworCWNtaV9jbHI0KHNjLCBDTVBDSV9SRUdfRlVOQ18xLCBDTVBDSV9SRUdfVUFSVF9FTkFC
TEUpOworCisJaWYoIHNjLT5tcHUgKQorCQlzYy0+bXB1X2ludHIgPSAwOwogfQogCiAvKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCkBAIC04NTksNiArOTQzLDggQEAKIAlzYy0+c3QgPSBybWFuX2dldF9i
dXN0YWcoc2MtPnJlZyk7CiAJc2MtPnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5yZWcpOwog
CisJY21pX21pZGlhdHRhY2goc2MpOworCiAJc2MtPmlycWlkID0gMDsKIAlzYy0+aXJxICAgPSBi
dXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZzYy0+aXJxaWQsCiAJCQkJ
CSAgIFJGX0FDVElWRSB8IFJGX1NIQVJFQUJMRSk7CkBAIC05MzgsNyArMTAyNCwxMiBAQAogCWJ1
c19kbWFfdGFnX2Rlc3Ryb3koc2MtPnBhcmVudF9kbWF0KTsKIAlidXNfdGVhcmRvd25faW50cihk
ZXYsIHNjLT5pcnEsIHNjLT5paCk7CiAJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVT
X0lSUSwgc2MtPmlycWlkLCBzYy0+aXJxKTsKKwlpZihzYy0+bXB1KQorCQltcHU0MDFfdW5pbml0
KHNjLT5tcHUpOwogCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsIHNj
LT5yZWdpZCwgc2MtPnJlZyk7CisJaWYgKHNjLT5tcHVfcmVnKQorCSAgICBidXNfcmVsZWFzZV9y
ZXNvdXJjZShkZXYsIFNZU19SRVNfSU9QT1JULCBzYy0+bXB1X3JlZ2lkLCBzYy0+bXB1X3JlZyk7
CisKIAlzbmRfbXR4ZnJlZShzYy0+bG9jayk7CiAJZnJlZShzYywgTV9ERVZCVUYpOwogCkBAIC0x
MDA5LDQgKzExMDAsNSBAQAogCiBEUklWRVJfTU9EVUxFKHNuZF9jbWksIHBjaSwgY21pX2RyaXZl
ciwgcGNtX2RldmNsYXNzLCAwLCAwKTsKIE1PRFVMRV9ERVBFTkQoc25kX2NtaSwgc291bmQsIFNP
VU5EX01JTlZFUiwgU09VTkRfUFJFRlZFUiwgU09VTkRfTUFYVkVSKTsKK01PRFVMRV9ERVBFTkQo
c25kX2NtaSwgbWlkaSwgMSwxLDEpOwogTU9EVUxFX1ZFUlNJT04oc25kX2NtaSwgMSk7CkluZGV4
OiBzeXMvZGV2L3NvdW5kL3BjaS9lbXUxMGsxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
bmN2cy9zcmMvc3lzL2Rldi9zb3VuZC9wY2kvZW11MTBrMS5jLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjUyLjIuMgpkaWZmIC11IC1yMS41Mi4yLjIgZW11MTBrMS5jCi0tLSBzeXMvZGV2L3NvdW5k
L3BjaS9lbXUxMGsxLmMJMzAgSmFuIDIwMDUgMDE6MDA6MDQgLTAwMDAJMS41Mi4yLjIKKysrIHN5
cy9kZXYvc291bmQvcGNpL2VtdTEwazEuYwk1IE1hciAyMDA1IDE2OjMyOjQwIC0wMDAwCkBAIC0z
NSw2ICszNSwxMCBAQAogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+CiAjaW5jbHVkZSA8c3lz
L3F1ZXVlLmg+CiAKKyNpbmNsdWRlIDxkZXYvc291bmQvbWlkaS9tcHU0MDEuaD4KKyNpbmNsdWRl
ICJtcHVmb2lfaWYuaCIKKworCiBTTkRfREVDTEFSRV9GSUxFKCIkRnJlZUJTRDogc3JjL3N5cy9k
ZXYvc291bmQvcGNpL2VtdTEwazEuYyx2IDEuNTIuMi4yIDIwMDUvMDEvMzAgMDE6MDA6MDQgaW1w
IEV4cCAkIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzYsNiArMTQwLDkgQEAKIAlzdHJ1
Y3QgZW11X3ZvaWNlIHZvaWNlWzY0XTsKIAlzdHJ1Y3Qgc2NfcGNoaW5mbyBwY2hbRU1VX01BWF9D
SEFOU107CiAJc3RydWN0IHNjX3JjaGluZm8gcmNoWzNdOworCXN0cnVjdCBtcHU0MDEgICAqbXB1
OworCW1wdTQwMV9pbnRyX3QgICAgICAgICAgICptcHVfaW50cjsKKwlpbnQgbXB1dHg7CiB9Owog
CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTA1OCw4ICsxMDY1LDY1IEBACiB9OwogQ0hBTk5FTF9E
RUNMQVJFKGVtdXJjaGFuKTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIKK2VtdV9tcmVhZCh2b2lk
ICphcmcsIHN0cnVjdCBzY19pbmZvICpzYywgaW50IHJlZykKK3sJCisJdW5zaWduZWQgaW50IGQ7
CisKKwlkID0gZW11X3JkKHNjLCAweDE4ICsgcmVnLCAxKTsgCisJcmV0dXJuIGQ7Cit9CisKK3N0
YXRpYyB2b2lkCitlbXVfbXdyaXRlKHZvaWQgKmFyZywgc3RydWN0IHNjX2luZm8gKnNjLCBpbnQg
cmVnLCB1bnNpZ25lZCBjaGFyIGIpCit7CisKKwllbXVfd3Ioc2MsIDB4MTggKyByZWcsIGIsIDEp
OworfQorCitzdGF0aWMgaW50CitlbXVfbXVuaW5pdCh2b2lkICphcmcsIHN0cnVjdCBzY19pbmZv
ICpzYykKK3sKKworCXNuZF9tdHhsb2NrKHNjLT5sb2NrKTsKKwlzYy0+bXB1X2ludHIgPSAwOwor
CXNuZF9tdHh1bmxvY2soc2MtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBrb2Jq
X21ldGhvZF90IGVtdV9tcHVfbWV0aG9kc1tdID0geworICAgIAlLT0JKTUVUSE9EKG1wdWZvaV9y
ZWFkLAkJZW11X21yZWFkKSwKKyAgICAJS09CSk1FVEhPRChtcHVmb2lfd3JpdGUsCWVtdV9td3Jp
dGUpLAorICAgIAlLT0JKTUVUSE9EKG1wdWZvaV91bmluaXQsCWVtdV9tdW5pbml0KSwKKwl7IDAs
IDAgfQorfTsKKworREVGSU5FX0NMQVNTKGVtdV9tcHUsIGVtdV9tcHVfbWV0aG9kcywgMCk7CisK
K3N0YXRpYyB2b2lkCitlbXVfaW50cjIodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc2NfaW5mbyAqc2Mg
PSAoc3RydWN0IHNjX2luZm8gKilwOworCisJaWYgKHNjLT5tcHVfaW50cikKKwkgICAgKHNjLT5t
cHVfaW50cikoc2MtPm1wdSk7Cit9CisKK3N0YXRpYyB2b2lkCitlbXVfbWlkaWF0dGFjaChzdHJ1
Y3Qgc2NfaW5mbyAqc2MpCit7CisJaW50IGk7CisKKwlpID0gZW11X3JkKHNjLCBJTlRFLCA0KTsK
KwlpIHw9IElOVEVfTUlESVJYRU5BQkxFOworCWVtdV93cihzYywgSU5URSwgaSwgNCk7CisKKwlz
Yy0+bXB1ID0gbXB1NDAxX2luaXQoJmVtdV9tcHVfY2xhc3MsIHNjLCBlbXVfaW50cjIsICZzYy0+
bXB1X2ludHIpOworfQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxl
ciAqLworCiBzdGF0aWMgdm9pZAogZW11X2ludHIodm9pZCAqZGF0YSkKIHsKQEAgLTEwOTksNiAr
MTE2MywxMSBAQAogI2VuZGlmCiAJCX0KIAorCSAgICBpZiAoc3RhdCAmIElQUl9NSURJUkVDVkJV
RkVNUFRZKQorCQlpZiAoc2MtPm1wdV9pbnRyKSB7CisJCSAgICAoc2MtPm1wdV9pbnRyKShzYy0+
bXB1KTsKKwkJICAgIGFjayB8PSBJUFJfTUlESVJFQ1ZCVUZFTVBUWSB8IElQUl9NSURJVFJBTlNC
VUZFTVBUWTsKKyAJCX0KIAkJaWYgKHN0YXQgJiB+YWNrKQogCQkJZGV2aWNlX3ByaW50ZihzYy0+
ZGV2LCAiZG9kZ3kgaXJxOiAleCAoaGFybWxlc3MpXG4iLAogCQkJICAgIHN0YXQgJiB+YWNrKTsK
QEAgLTE4MTgsNyArMTg4Nyw2IEBACiAJCQl9CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApA
QCAtMTg3MCw2ICsxOTM4LDggQEAKIAllbXVfZnJlZShzYywgc2MtPm1lbS5wdGJfcGFnZXMpOwog
CWVtdV9mcmVlKHNjLCBzYy0+bWVtLnNpbGVudF9wYWdlKTsKIAorCWlmKHNjLT5tcHUpCisJICAg
IG1wdTQwMV91bmluaXQoc2MtPm1wdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NTgsNiArMjAy
OCw4IEBACiAJZ290bWljID0gKGFjOTdfZ2V0Y2Fwcyhjb2RlYykgJiBBQzk3X0NBUF9NSUNDSEFO
TkVMKSA/IDEgOiAwOwogCWlmIChtaXhlcl9pbml0KGRldiwgYWM5N19nZXRtaXhlcmNsYXNzKCks
IGNvZGVjKSA9PSAtMSkgZ290byBiYWQ7CiAKKwllbXVfbWlkaWF0dGFjaChzYyk7CisKIAlpID0g
MDsKIAlzYy0+aXJxID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAm
aSwKIAkgICAgUkZfQUNUSVZFIHwgUkZfU0hBUkVBQkxFKTsKQEAgLTIwMzUsNiArMjEwNyw3IEBA
CiBEUklWRVJfTU9EVUxFKHNuZF9lbXUxMGsxLCBwY2ksIGVtdV9kcml2ZXIsIHBjbV9kZXZjbGFz
cywgMCwgMCk7CiBNT0RVTEVfREVQRU5EKHNuZF9lbXUxMGsxLCBzb3VuZCwgU09VTkRfTUlOVkVS
LCBTT1VORF9QUkVGVkVSLCBTT1VORF9NQVhWRVIpOwogTU9EVUxFX1ZFUlNJT04oc25kX2VtdTEw
azEsIDEpOworTU9EVUxFX0RFUEVORChzbmRfZW11MTBrMSwgbWlkaSwgMSwgMSwgMSk7CiAKIC8q
IGR1bW15IGRyaXZlciB0byBzaWxlbmNlIHRoZSBqb3lzdGljayBkZXZpY2UgKi8KIHN0YXRpYyBp
bnQKSW5kZXg6IHN5cy9tb2R1bGVzL3NvdW5kL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL25jdnMvc3JjL3N5cy9tb2R1bGVzL3NvdW5kL01ha2VmaWxlLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjIKZGlmZiAtdSAtcjEuMiBNYWtlZmlsZQotLS0gc3lzL21vZHVsZXMvc291bmQv
TWFrZWZpbGUJMTYgSnVsIDIwMDQgMDM6NTg6NDYgLTAwMDAJMS4yCisrKyBzeXMvbW9kdWxlcy9z
b3VuZC9NYWtlZmlsZQk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAwCkBAIC0zLDUgKzMsNiBAQAog
U1VCRElSID0KIFNVQkRJUiArPSBzb3VuZAogU1VCRElSICs9IGRyaXZlcgorU1VCRElSICs9IG1p
ZGkKIAogLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+CkluZGV4OiBzeXMvbW9kdWxlcy9zb3VuZC9k
cml2ZXIvY21pL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5
cy9tb2R1bGVzL3NvdW5kL2RyaXZlci9jbWkvTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMwpkaWZmIC11IC1yMS4zIE1ha2VmaWxlCi0tLSBzeXMvbW9kdWxlcy9zb3VuZC9kcml2ZXIv
Y21pL01ha2VmaWxlCTcgRmViIDIwMDMgMTM6NTY6MzEgLTAwMDAJMS4zCisrKyBzeXMvbW9kdWxl
cy9zb3VuZC9kcml2ZXIvY21pL01ha2VmaWxlCTUgTWFyIDIwMDUgMTY6Mjc6MDcgLTAwMDAKQEAg
LTQsNiArNCw3IEBACiAKIEtNT0Q9CXNuZF9jbWkKIFNSQ1M9CWRldmljZV9pZi5oIGJ1c19pZi5o
IHBjaV9pZi5oCitTUkNTKz0gbXB1Zm9pX2lmLmgKIFNSQ1MrPQljbWkuYwogCiAuaW5jbHVkZSA8
YnNkLmttb2QubWs+CkluZGV4OiBzeXMvbW9kdWxlcy9zb3VuZC9kcml2ZXIvZW11MTBrMS9NYWtl
ZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMvbW9kdWxlcy9zb3Vu
ZC9kcml2ZXIvZW11MTBrMS9NYWtlZmlsZSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYg
LXUgLXIxLjQgTWFrZWZpbGUKLS0tIHN5cy9tb2R1bGVzL3NvdW5kL2RyaXZlci9lbXUxMGsxL01h
a2VmaWxlCTExIEphbiAyMDA0IDEwOjMwOjU2IC0wMDAwCTEuNAorKysgc3lzL21vZHVsZXMvc291
bmQvZHJpdmVyL2VtdTEwazEvTWFrZWZpbGUJNSBNYXIgMjAwNSAxNjoyNzowNyAtMDAwMApAQCAt
NSw2ICs1LDcgQEAKIAogS01PRD0Jc25kX2VtdTEwazEKIFNSQ1M9CWRldmljZV9pZi5oIGJ1c19p
Zi5oIHBjaV9pZi5oIGVtdTEwazEtYWxzYSVkaWtlZC5oCitTUkNTKz0gbXB1Zm9pX2lmLmgKIFNS
Q1MrPQllbXUxMGsxLmMKIAogQ0xFQU5GSUxFUys9IGVtdTEwazEtYWxzYSVkaWtlZC5oCkluZGV4
OiBzeXMvbW9kdWxlcy9zb3VuZC9taWRpL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHN5
cy9tb2R1bGVzL3NvdW5kL21pZGkvTWFrZWZpbGUKZGlmZiAtTiBzeXMvbW9kdWxlcy9zb3VuZC9t
aWRpL01ha2VmaWxlCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
c3lzL21vZHVsZXMvc291bmQvbWlkaS9NYWtlZmlsZQk1IE1hciAyMDA1IDE2OjI3OjA3IC0wMDAw
CkBAIC0wLDAgKzEsMTMgQEAKKyMgJEZyZWVCU0QkCisKKy5QQVRIOiAkey5DVVJESVJ9Ly4uLy4u
Ly4uL2Rldi9zb3VuZC9taWRpCisKK0tNT0Q9CW1pZGkKKworU1JDUz0JbWlkaS5jIG1wdTQwMS5j
IHNlcXVlbmNlci5jCitTUkNTKz0JZGV2aWNlX2lmLmggYnVzX2lmLmggbXB1X2lmLmggbXB1Zm9p
X2lmLmggc3ludGhfaWYuaAorU1JDUys9CW1wdV9pZi5jIG1wdWZvaV9pZi5jIHN5bnRoX2lmLmMK
KworRVhQT1JUX1NZTVM9CVlFUwkjIFhYWCBldmFsdWF0ZQorCisuaW5jbHVkZSA8YnNkLmttb2Qu
bWs+Cg==

--Multipart_Mon__25_Apr_2005_12_55_45_-0500_nfjSn6y19Y+G31aY--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050425125545.0dcbf4ec>