Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jul 1998 00:26:18 -0700
From:      Amancio Hasty <hasty@rah.star-gate.com>
To:        Kevin Day <toasty@home.dragondata.com>
Cc:        multimedia@FreeBSD.ORG
Subject:   Re: bt848 driver will be checked in this Friday 
Message-ID:  <199807100726.AAA10706@rah.star-gate.com>
In-Reply-To: Your message of "Fri, 10 Jul 1998 02:15:39 CDT." <199807100715.CAA16725@home.dragondata.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multipart MIME message.

--==_Exmh_-12741814920
Content-Type: text/plain; charset=us-ascii

Please mail me the output of ./eeprom 0 128 which is available from
http://www.freebsd.org/~ahasty/Bt848.html

The Bt878 is an upgrade to the Bt848.

Please recompile fxtv-0.47 with this tvcapture.c the problem is that your
model has one extra MUX which Hauppauge uses for video input.

	Tnks,
	Amancio
	
> > Download the latest driver from my ftp and it looks like you have a Bt878.
> > 
> > ftp://rah.star-gate.com/pub/bt848.tar.gz
> > 
> > 	Have Fun,
> > 	Amancio
> > 
> 
> I've already got the latest from there.... Still no go.
> 
> Yeah, looking now... the picture of the card on the box shows a bt848... the
> box says it's a bt848, but the chip itself has writing too smudged to read
> what it really is....
> 
> Are bt878's compatible?
> 
> Kevin


--==_Exmh_-12741814920
Content-Type: text/plain ; name="tvcapture.c"; charset=us-ascii
Content-Description: tvcapture.c
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tvcapture.c"

LyoKICogdHZjYXB0dXJlLmMKICoKICogQVBJIGZvciBjb250cm9sbGluZyB0aGUgY2FwdHVy
ZSBjYXJkIGF0dHJpYnV0ZXMgYW5kIHN0YXRlLgogKgogKiAoQykgMTk5NyBSYW5kYWxsIEhv
cHBlcgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6IDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uCiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQogKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKICogRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgogKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKgogKi8KCi8qICAgICAg
KioqKioqKioqKioqKioqKioqKiogSW5jbHVkZSBGaWxlcyAgICAgICAgICAgICAgICAqKioq
KioqKioqKioqKiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPGVycm5v
Lmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8bWFjaGluZS9pb2N0bF9idDg0
OC5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlICJ0dmRlZmluZXMuaCIKI2luY2x1
ZGUgInR2dHlwZXMuaCIKI2luY2x1ZGUgInR2Y2FwdHVyZS5oIgojaW5jbHVkZSAiYXBwX3Jz
cmMuaCIKI2luY2x1ZGUgImdsb2IuaCIKCi8qICAgICAgKioqKioqKioqKioqKioqKioqKiog
TG9jYWwgZGVmaW5lcyAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKiAqLwoKLyogIEZv
ciBGeHR2IDAuNDEvYmt0ciBkcml2ZXIgTGludXggcG9ydCAtLSByZW1vdmUgd2hlbiB0aGUg
bGF0ZXN0IGlzIHBvcnRlZCAqLwojaWZkZWYgT0xEX1RVTkVSX0lGQUNFCiMgIGRlZmluZSBC
VDg0OFNGTVQgTUVURU9SU0ZNVAojZW5kaWYKCiNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQoj
ICBkZWZpbmUgREVWX0JUODQ4ICAgIi9kZXYvYmt0ciVkIgojICBkZWZpbmUgREVWX1RVTkVS
ICAgIi9kZXYvdHVuZXIlZCIKI2VsaWYgZGVmaW5lZChsaW51eCkKIyAgd2FybmluZyBGSVhN
RTogRG9lcy9ob3cgZG9lcyBMaW51eCBuYW1lIG11bHRpcGxlIGRldmljZXMgb2YgdGhlIHNh
bWUgdHlwZQojICB3YXJuaW5nICAgICAgICBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcG9saWN5
IGFzIGluIEZyZWVCU0Q/CiMgIGRlZmluZSBERVZfQlQ4NDggICAiL2Rldi9idDg0OCIKIyAg
ZGVmaW5lIERFVl9UVU5FUiAgICIvZGV2L2J0ODQ4dCIKI2VuZGlmCgovKiAgTWFjcm9zICAq
LwojZGVmaW5lIERPX0lPQ1RMX0dFUlIoc3RyKSAgICAgZnByaW50ZihzdGRlcnIsICJpb2N0
bCglcykgZmFpbGVkOiAlc1xuIiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIsIHN0cmVycm9yKGVycm5vKSApCiNkZWZpbmUgRE9fSU9DVExfU0VSUihz
dHIsYXJnKSBmcHJpbnRmKHN0ZGVyciwgImlvY3RsKCVzLCAlbGQpIGZhaWxlZDogJXNcbiIs
XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIChsb25nKWFy
Zywgc3RyZXJyb3IoZXJybm8pICkKCiNkZWZpbmUgSFVFX01JTiAgICAgICAgICAgIEJUODQ4
X0hVRU1JTgojZGVmaW5lIEhVRV9NQVggICAgICAgICAgICAoQlQ4NDhfSFVFTUlOICsgQlQ4
NDhfSFVFUkFOR0UpCiNkZWZpbmUgSFVFX1JBTkdFICAgICAgICAgIEJUODQ4X0hVRVJBTkdF
CiNkZWZpbmUgSFVFX0RSVl9NSU4gICAgICAgIEJUODQ4X0hVRVJFR01JTgojZGVmaW5lIEhV
RV9EUlZfUkFOR0UgICAgICAoQlQ4NDhfSFVFUkVHTUFYIC0gQlQ4NDhfSFVFUkVHTUlOICsg
MSkKCiNkZWZpbmUgQlJJR0hUX01JTiAgICAgICAgIEJUODQ4X0JSSUdIVE1JTgojZGVmaW5l
IEJSSUdIVF9NQVggICAgICAgICAoQlQ4NDhfQlJJR0hUTUlOICsgQlQ4NDhfQlJJR0hUUkFO
R0UpCiNkZWZpbmUgQlJJR0hUX1JBTkdFICAgICAgIEJUODQ4X0JSSUdIVFJBTkdFCiNkZWZp
bmUgQlJJR0hUX0RSVl9NSU4gICAgIEJUODQ4X0JSSUdIVFJFR01JTgojZGVmaW5lIEJSSUdI
VF9EUlZfUkFOR0UgICAoQlQ4NDhfQlJJR0hUUkVHTUFYIC0gQlQ4NDhfQlJJR0hUUkVHTUlO
ICsgMSkKIAojZGVmaW5lIENPTlRSX01JTiAgICAgICAgICBCVDg0OF9DT05UUkFTVE1JTgoj
ZGVmaW5lIENPTlRSX01BWCAgICAgICAgICAoQlQ4NDhfQ09OVFJBU1RNSU4gKyBCVDg0OF9D
T05UUkFTVFJBTkdFKQojZGVmaW5lIENPTlRSX1JBTkdFICAgICAgICBCVDg0OF9DT05UUkFT
VFJBTkdFCiNkZWZpbmUgQ09OVFJfRFJWX01JTiAgICAgIEJUODQ4X0NPTlRSQVNUUkVHTUlO
CiNkZWZpbmUgQ09OVFJfRFJWX1JBTkdFICAgIChCVDg0OF9DT05UUkFTVFJFR01BWCAtIEJU
ODQ4X0NPTlRSQVNUUkVHTUlOICsgMSkKCiNkZWZpbmUgU0FUVV9NSU4gICAgICAgICAgICBC
VDg0OF9TQVRVTUlOCiNkZWZpbmUgU0FUVV9NQVggICAgICAgICAgICAoQlQ4NDhfU0FUVU1J
TiArIEJUODQ4X1NBVFVSQU5HRSkKI2RlZmluZSBTQVRVX1JBTkdFICAgICAgICAgIEJUODQ4
X1NBVFVSQU5HRQojZGVmaW5lIFNBVFVfRFJWX01JTiAgICAgICAgQlQ4NDhfU0FUVVJFR01J
TgojZGVmaW5lIFNBVFVfRFJWX1JBTkdFICAgICAgKEJUODQ4X1NBVFVSRUdNQVggLSBCVDg0
OF9TQVRVUkVHTUlOICsgMSkKCiNkZWZpbmUgU0FUVl9NSU4gICAgICAgICAgICBCVDg0OF9T
QVRWTUlOCiNkZWZpbmUgU0FUVl9NQVggICAgICAgICAgICAoQlQ4NDhfU0FUVk1JTiArIEJU
ODQ4X1NBVFZSQU5HRSkKI2RlZmluZSBTQVRWX1JBTkdFICAgICAgICAgIEJUODQ4X1NBVFZS
QU5HRQojZGVmaW5lIFNBVFZfRFJWX01JTiAgICAgICAgQlQ4NDhfU0FUVlJFR01JTgojZGVm
aW5lIFNBVFZfRFJWX1JBTkdFICAgICAgKEJUODQ4X1NBVFZSRUdNQVggLSBCVDg0OF9TQVRW
UkVHTUlOICsgMSkKCiNkZWZpbmUgTlRTQ19ESU1fWCAgICAgICAgICA2NDAKI2RlZmluZSBO
VFNDX0RJTV9ZICAgICAgICAgIDQ4MAojZGVmaW5lIE5UU0NfRlBTICAgICAgICAgICAgMzAK
I2RlZmluZSBQQUxfRElNX1ggICAgICAgICAgIDc2OAojZGVmaW5lIFBBTF9ESU1fWSAgICAg
ICAgICAgNTc2CiNkZWZpbmUgUEFMX0ZQUyAgICAgICAgICAgICAyNQoKLyogIE1heCBTaW5n
bGUgRnJhbWUgU2l6ZSAoaW4gYnl0ZXMpIGZvciBOVFNDICYgUEFMICg0QnBwIG1heCkgICov
CiNkZWZpbmUgTUFYX01NQVBfQlVGX1NJWkUgICAoIE1BWCggTlRTQ19ESU1fWCxQQUxfRElN
X1ggKSAqIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKCBOVFNDX0RJTV9Z
LFBBTF9ESU1fWSApICogNCApCgojZGVmaW5lIEZSQU1FX1RJTUVSX0RFTEFZX01TKGZwcykg
KDEwMDAvKGZwcykpCgovKiAgICAgICoqKioqKioqKioqKioqKioqKioqIFByaXZhdGUgdmFy
aWFibGVzICAgICAgICAgICAgKioqKioqKioqKioqKiogKi8KCnN0YXRpYyBUVl9JTlQzMiAg
ICAgU19mcmFtZV9kb25lX2NvdW50ID0gMDsKCnN0YXRpYyBYdEludGVydmFsSWQgU19mcmFt
ZV90aW1lcjsKc3RhdGljIFRWX0JPT0wgICAgICBTX2ZyYW1lX3RpbWVyX3NldCA9IEZhbHNl
OwoKCi8qICAgICAgKioqKioqKioqKioqKioqKioqKiogRm9yd2FyZCBkZWNsYXJhdGlvbnMg
ICAgICAgICAqKioqKioqKioqKioqKiAqLwovKiAgICAgICoqKioqKioqKioqKioqKioqKioq
IEZ1bmN0aW9uIERlZmluaXRpb25zICAgICAgICAgKioqKioqKioqKioqKiogKi8KCi8qKkBC
RUdJTkZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgoKICAgIFByb3RvdHlwZSAgOiBzdGF0aWMgdm9pZCBUVkNBUFRV
UkVEZXN0cm95KCkKCiAgICBQdXJwb3NlICAgIDogQ2xlYW5zIHVwIGNhcHR1cmUgYXR0cmli
dXRlcyAoc3RvcHMgY2FwdHVyZSwgY2xvc2VzIGZpbGVzLAogICAgICAgICAgICAgICAgIGZy
ZWVzIG1lbSwgZXRjLgoKICAgIFByb2dyYW1tZXIgOiAwNy1NYXItOTcgIFJhbmRhbGwgSG9w
cGVyCgogICAgUGFyYW1ldGVycyA6IE5vbmUuCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgog
ICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3RhdGlj
IHZvaWQgVFZDQVBUVVJFRGVzdHJveSgpCnsKICAgIFRWX0NBUFRVUkUgICAqYyA9ICZHX2ds
b2IuY2FwdHVyZTsKCiAgICBpZiAoIGMtPmZkID49IDAgKSB7CiAgICAgICAgaWYgKCBjLT5j
b250aW5fb24gKQogICAgICAgICAgICBUVkNBUFRVUkVTdG9wKCBjICk7CgogICAgICAgIGNs
b3NlKCBjLT5mZCApOwogICAgfQogICAgaWYgKCBjLT50ZmQgPj0gMCApCiAgICAgICAgY2xv
c2UoIGMtPnRmZCApOwp9CgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBl
ICA6IHN0YXRpYyB2b2lkIFRWQ0FQVFVSRUZyYW1lRG9uZVNpZ0hkbHIoKQoKICAgIFB1cnBv
c2UgICAgOiBDYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGZpbmlzaGVzIGNhcHR1cmluZyBhIGZy
YW1lLgoKICAgIFByb2dyYW1tZXIgOiAwNy1NYXItOTcgIFJhbmRhbGwgSG9wcGVyCgogICAg
UGFyYW1ldGVycyA6IE5vbmUuCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFs
cyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3RhdGljIHZvaWQgVFZD
QVBUVVJFRnJhbWVEb25lU2lnSGRscigpCnsKICAgIFNfZnJhbWVfZG9uZV9jb3VudCsrOwoj
aWZkZWYgbGludXgKIyAgd2FybmluZyBIdWg/ICBEbyBzaWduYWwgaGFuZGxlcnMgZ2V0IHVu
cmVnaXN0ZXJlZCBpbiBMaW51eCBhZnRlciBkZWxpdmVyeT8KICAgIHNpZ25hbCggU0lHVVNS
MSwgVFZDQVBUVVJFRnJhbWVEb25lU2lnSGRsciApOwojZW5kaWYKfQoKLyoqQEJFR0lORlVO
QyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHZvaWQgVFZDQVBUVVJFV29ya1Byb2MoKQoK
ICAgIFB1cnBvc2UgICAgOiBYdCB3b3JrIHByb2Mgc2xhdmUgcm91dGluZSBpbnZva2VkIHRv
IGluaXRpYXRlIGJlaGF2aW9ycyAKICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGgg
Y2FwdHVyaW5nIGZyYW1lcy4KCiAgICBQcm9ncmFtbWVyIDogMDctTWFyLTk3ICBSYW5kYWxs
IEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBOb25lLgoKICAgIFJldHVybnMgICAgOiBOb25l
LgoKICAgIEdsb2JhbHMgICAgOiBOb25lLgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnZv
aWQgVFZDQVBUVVJFV29ya1Byb2MoKQp7CiAgICBzdGF0aWMgVFZfQ0FQVFVSRSAgICpjID0g
JkdfZ2xvYi5jYXB0dXJlOwogICAgVFZfSU1BR0UgICAgICAgICAgICAgaW1nOwoKICAgIGlm
ICgoIFNfZnJhbWVfZG9uZV9jb3VudCA9PSAwICkgfHwgKCBjLT5mcmFtZV9kb25lX2NiID09
IE5VTEwgKSkKICAgICAgICByZXR1cm47CgovKiAgaWYgKCBTX2ZyYW1lX2RvbmVfY291bnQg
PiAwICkKICAgICAgICBEUlZQUklOVEYoKCAiJWQgZnJhbWVzIGJlaGluZFxuIiwgU19mcmFt
ZV9kb25lX2NvdW50ICkpOwoqLwogICAgU19mcmFtZV9kb25lX2NvdW50LS07CgogICAgaW1n
LmJ1ZiA9IGMtPmRydl9idWY7CiAgICBtZW1jcHkoICZpbWcuZ2VvbSwgJmMtPmdlb20sIHNp
emVvZiggaW1nLmdlb20gKSApOwogICAgbWVtY3B5KCAmaW1nLnBpeF9nZW9tLCAmYy0+cGl4
X2dlb21fbGlzdFsgYy0+cGl4X2dlb21faWR4IF0sCiAgICAgICAgICAgIHNpemVvZiggaW1n
LnBpeF9nZW9tICkgKTsKICAgIGMtPmZyYW1lX2RvbmVfY2IoICZpbWcgKTsKfQoKLyogIFRW
Q0FQVFVSRUNsZWFyUGVuZGluZ0ZyYW1lczogIFJlc2V0L2lnbm9yZSBhbnkgb3V0c3RhbmRp
bmcgZnJhbWVzLiAgKi8Kdm9pZCBUVkNBUFRVUkVDbGVhclBlbmRpbmdGcmFtZXMoKQp7CiAg
ICBTX2ZyYW1lX2RvbmVfY291bnQgPSAwOwp9CgovKiAgVFZDQVBUVVJFR2V0UGVuZGluZ0Zy
YW1lIC0gR2V0IHBlbmRpbmcgZnJhbWUgJiByZXQgVCAocmV0IEYgaWYgbm9uZSkgICovClRW
X0JPT0wgVFZDQVBUVVJFR2V0UGVuZGluZ0ZyYW1lKCBUVl9JTUFHRSAqKmltZyApCnsKICAg
IGlmICggU19mcmFtZV9kb25lX2NvdW50ID4gMCApIHsKICAgICAgICAvKiAgRklYTUU6ICBT
aGFyZSB0aGlzIGdsb2IgLS0gaXQncyB0aGUgV29ya1Byb2MgYWJvdmUgdy9vIENCICAqLwog
ICAgICAgIHN0YXRpYyBUVl9DQVBUVVJFICAgKmMgPSAmR19nbG9iLmNhcHR1cmU7CiAgICAg
ICAgc3RhdGljIFRWX0lNQUdFICAgICAgaW1hZ2U7CgogICAgICAgIGlmICgoIFNfZnJhbWVf
ZG9uZV9jb3VudCA9PSAwICkgfHwgKCBjLT5mcmFtZV9kb25lX2NiID09IE5VTEwgKSkKICAg
ICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoIFNfZnJhbWVfZG9uZV9jb3VudC0tID4g
MCApCiAgICAgICAgICAgIERSVlBSSU5URigoICIlZCBmcmFtZXMgYmVoaW5kXG4iLCBTX2Zy
YW1lX2RvbmVfY291bnQgKSk7CgogICAgICAgIGltYWdlLmJ1ZiA9IGMtPmRydl9idWY7CiAg
ICAgICAgbWVtY3B5KCAmaW1hZ2UuZ2VvbSwgJmMtPmdlb20sIHNpemVvZiggaW1hZ2UuZ2Vv
bSApICk7CiAgICAgICAgbWVtY3B5KCAmaW1hZ2UucGl4X2dlb20sICZjLT5waXhfZ2VvbV9s
aXN0WyBjLT5waXhfZ2VvbV9pZHggXSwKICAgICAgICAgICAgICAgIHNpemVvZiggaW1hZ2Uu
cGl4X2dlb20gKSApOwogICAgICAgICppbWcgPSAmaW1hZ2U7CiAgICAgICAgcmV0dXJuIFRS
VUU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAqaW1nID0gTlVMTDsKICAgICAgICByZXR1
cm4gRmFsc2U7CiAgICB9Cn0KCgojaWZkZWYgT0xEX0FMV0FZU19VU0VfU0lHTkFMU19OT1cK
LyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHN0YXRpYyB2b2lkIFRW
Q0FQVFVSRUZyYW1lVGltZW91dENCKAogICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy
ICAgICAgICAgIGNsX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBYdEludGVydmFsSWQg
ICAgICAqdGltZXIgKQoKICAgIFB1cnBvc2UgICAgOiBJbnZva2VkIGR1cmluZyBjb250aW51
b3VzIGNhcHR1cmUgdG8gbGV0IHVzIGtpY2sgaW4KICAgICAgICAgICAgICAgICBmcmFtZSBk
b25lIGNhbGxiYWNrIHBlcmlvZGljYWxseSAoc2luY2Ugc2lnbmFscyBhcmVuJ3QKICAgICAg
ICAgICAgICAgICBpc3N1ZWQgYnkgdGhlIGRyaXZlciBmb3IgZnJhbWUgY29tcGxldGVzIHdo
ZW4gaW4gCiAgICAgICAgICAgICAgICAgY29udGludW91cyBtb2RlKS4KCiAgICBQcm9ncmFt
bWVyIDogMDgtTWFyLTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBjbF9k
YXRhIC0gSTogbm90IHVzZWQKICAgICAgICAgICAgICAgICB0aW1lciAgIC0gSTogbm90IHVz
ZWQKCiAgICBSZXR1cm5zICAgIDoKCiAgICBHbG9iYWxzICAgIDogTm9uZS4KCiAqKkBFTkRG
VU5DKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCgpzdGF0aWMgdm9pZCBUVkNBUFRVUkVGcmFtZVRpbWVvdXRDQigK
ICAgICAgICAgWHRQb2ludGVyICAgICAgICAgIGNsX2RhdGEsCiAgICAgICAgIFh0SW50ZXJ2
YWxJZCAgICAgICp0aW1lciApCnsgICAgICAgIAogICAgVFZfQ0FQVFVSRSAgICpjID0gJkdf
Z2xvYi5jYXB0dXJlOwogICAgVFZfSU1BR0UgICAgICBpbWc7CgogICAgLyogIEludm9rZSB1
c2VyLWRlZmluZWQgZnJhbWUgY29tcGxldGlvbiBjYWxsYmFjayAgKi8KICAgIGlmICggYy0+
ZnJhbWVfZG9uZV9jYiAhPSBOVUxMICkgewogICAgICAgIGltZy5idWYgPSBjLT5kcnZfYnVm
OwogICAgICAgIG1lbWNweSggJmltZy5nZW9tLCAmYy0+Z2VvbSwgc2l6ZW9mKCBpbWcuZ2Vv
bSApICk7CiAgICAgICAgbWVtY3B5KCAmaW1nLnBpeF9nZW9tLCAmYy0+cGl4X2dlb21fbGlz
dFsgYy0+cGl4X2dlb21faWR4IF0sCiAgICAgICAgICAgICAgICBzaXplb2YoIGltZy5waXhf
Z2VvbSApICk7CiAgICAgICAgYy0+ZnJhbWVfZG9uZV9jYiggJmltZyApOwogICAgfQoKICAg
IC8qICBBbmQgcmVzdGFydCB0aW1lciBmb3IgYW5vdGhlciAiZnJhbWUiICAqLwogICAgU19m
cmFtZV90aW1lciA9IFh0QXBwQWRkVGltZU91dCggVFZBUFBDVFgsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRlJBTUVfVElNRVJfREVMQVlfTVMoYy0+ZnBzX21h
eCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVkNBUFRVUkVGcmFt
ZVRpbWVvdXRDQiwgTlVMTCApOwp9CiNlbmRpZgoKCnZvaWQgVFZDQVBUVVJFU2V0QnJpZ2h0
bmVzcyggVFZfQ0FQVFVSRSAqYywgZG91YmxlIGJyaWdodG5lc3MgKQp7CiAgICBUVl9JTlQz
MiBsYXJnOwoKICAgIGJyaWdodG5lc3MgPSBNQVgoIEJSSUdIVF9NSU4sIE1JTiggQlJJR0hU
X01BWCwgYnJpZ2h0bmVzcyApICk7CgogICAgbGFyZyA9IChicmlnaHRuZXNzIC0gQlJJR0hU
X01JTikgLyAoQlJJR0hUX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogQlJJR0hUX0RSVl9SQU5HRSArIEJSSUdIVF9EUlZfTUlOOwogICAg
bGFyZyA9IE1BWCggQlJJR0hUX0RSVl9NSU4sIAogICAgICAgICAgICAgICAgTUlOKCBCUklH
SFRfRFJWX01JTitCUklHSFRfRFJWX1JBTkdFLTEsIGxhcmcgKSk7CgogICAgaWYgKCBpb2N0
bCggYy0+dGZkLCBCVDg0OF9TQlJJRywgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9D
VExfU0VSUiggIkJUODQ4X1NCUklHIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmJyaWdodG5lc3MgPSBicmln
aHRuZXNzOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRDb250cmFzdCggVFZfQ0FQVFVSRSAqYywg
ZG91YmxlIGNvbnRyYXN0ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAogICAgY29udHJh
c3QgID0gTUlOKCBDT05UUl9NQVgsIE1BWCggQ09OVFJfTUlOLCBjb250cmFzdCApICk7Cgog
ICAgbGFyZyA9IChjb250cmFzdCAtIENPTlRSX01JTikgLyAoQ09OVFJfUkFOR0UgKyAwLjAx
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDT05UUl9EUlZfUkFOR0Ug
KyBDT05UUl9EUlZfTUlOOwogICAgbGFyZyA9IE1BWCggQ09OVFJfRFJWX01JTiwgCiAgICAg
ICAgICAgICAgICBNSU4oIENPTlRSX0RSVl9NSU4rQ09OVFJfRFJWX1JBTkdFLTEsIGxhcmcg
KSApOwoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfU0NPTlQsICZsYXJnICkgPCAw
ICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoICJCVDg0OF9TQ09OVCIsIGxhcmcgKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgLyogIEZJWE1FOiBEZWFkIGNvZGUgICovCiAgICBj
LT5jb250cmFzdCA9IGNvbnRyYXN0Owp9CgoKdm9pZCBUVkNBUFRVUkVTZXRIdWUoIFRWX0NB
UFRVUkUgKmMsIGRvdWJsZSBodWUgKQp7CiAgICBUVl9JTlQzMiBsYXJnOwoKICAgIGh1ZSAg
PSBNSU4oIEhVRV9NQVgsIE1BWCggSFVFX01JTiwgaHVlICkgKTsKICAgIGxhcmcgPSAoaHVl
IC0gSFVFX01JTikgLyAoSFVFX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBIVUVfRFJWX1JBTkdFICsgSFVFX0RSVl9NSU47CiAgICBsYXJnID0gTUFYKCBI
VUVfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBNSU4oIEhVRV9EUlZfTUlOK0hVRV9EUlZf
UkFOR0UtMSwgbGFyZyApKTsKCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X1NIVUUs
ICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoICJCVDg0OF9TSFVFIiwg
bGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiAgRklYTUU6IERlYWQgY29k
ZSAgKi8KICAgIGMtPmh1ZSA9IGh1ZTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0U2F0VSggVFZf
Q0FQVFVSRSAqYywgZG91YmxlIHNhdF91ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAog
ICAgc2F0X3UgID0gTUlOKCBTQVRVX01BWCwgTUFYKCBTQVRVX01JTiwgc2F0X3UgKSApOwog
ICAgbGFyZyA9IChzYXRfdSAtIFNBVFVfTUlOKSAvIChTQVRVX1JBTkdFICsgMC4wMSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTQVRVX0RSVl9SQU5HRSArIFNBVFVfRFJW
X01JTjsKICAgIGxhcmcgPSBNQVgoIFNBVFVfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBN
SU4oIFNBVFVfRFJWX01JTitTQVRVX0RSVl9SQU5HRS0xLCBsYXJnICkgKTsKCiAgICBpZiAo
IGlvY3RsKCBjLT50ZmQsIEJUODQ4X1NVU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBE
T19JT0NUTF9TRVJSKCAiQlQ4NDhfU1VTQVQiLCBsYXJnICk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIC8qICBGSVhNRTogRGVhZCBjb2RlICAqLwogICAgYy0+c2F0X3UgPSBzYXRf
dTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0U2F0ViggVFZfQ0FQVFVSRSAqYywgZG91YmxlIHNh
dF92ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAogICAgc2F0X3YgID0gTUlOKCBTQVRW
X01BWCwgTUFYKCBTQVRWX01JTiwgc2F0X3YgKSApOwogICAgbGFyZyA9IChzYXRfdiAtIFNB
VFZfTUlOKSAvIChTQVRWX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBTQVRWX0RSVl9SQU5HRSArIFNBVFZfRFJWX01JTjsKICAgIGxhcmcgPSBNQVgo
IFNBVFZfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBNSU4oIFNBVFZfRFJWX01JTitTQVRW
X0RSVl9SQU5HRS0xLCBsYXJnICkgKTsKCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4
X1NWU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiQlQ4NDhf
U1ZTQVQiLCBsYXJnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBGSVhNRTog
RGVhZCBjb2RlICAqLwogICAgYy0+c2F0X3YgPSBzYXRfdjsKfQoKdm9pZCBUVkNBUFRVUkVT
ZXRBcHBlYXJhbmNlUGFyYW0oIFRWX0NBUFRVUkUgKmMsIFRWX0RSSVZFUl9QQVJBTSBwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbCApCnsKICAgIHN3
aXRjaCAoIHAgKSB7CiAgICAgICAgY2FzZSBUVl9QQVJBTV9IVUUgICAgICA6ICBUVkNBUFRV
UkVTZXRIdWUgICAgICAgKCBjLCB2YWwgKTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfUEFS
QU1fQlJJR0hUICAgOiAgVFZDQVBUVVJFU2V0QnJpZ2h0bmVzcyggYywgdmFsICk7ICBicmVh
azsKICAgICAgICBjYXNlIFRWX1BBUkFNX0NPTlRSQVNUIDogIFRWQ0FQVFVSRVNldENvbnRy
YXN0ICAoIGMsIHZhbCApOyAgYnJlYWs7CiAgICAgICAgY2FzZSBUVl9QQVJBTV9TQVRVICAg
ICA6ICBUVkNBUFRVUkVTZXRTYXRVICAgICAgKCBjLCB2YWwgKTsgIGJyZWFrOwogICAgICAg
IGNhc2UgVFZfUEFSQU1fU0FUViAgICAgOiAgVFZDQVBUVVJFU2V0U2F0ViAgICAgICggYywg
dmFsICk7ICBicmVhazsKICAgICAgICBkZWZhdWx0IDoKICAgICAgICAgICAgZnByaW50Zigg
c3RkZXJyLCAKICAgICAgICAgICAgICAgIlRWQ0FQVFVSRVNldEFwcGVhcmFuY2VQYXJhbTog
VW5zdXBwb3J0ZWQgcGFyYW0gJWRcbiIsIHAgKTsKICAgICAgICAgICAgZXhpdCgxKTsKICAg
IH0KfQoKdm9pZCBUVkNBUFRVUkVTZXRJbnB1dEZvcm1hdCggVFZfQ0FQVFVSRSAqYywgVFZf
SU5QVVRfRk9STUFUIGZvcm1hdCApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgc3dpdGNo
ICggZm9ybWF0ICkgewogICAgICAgIGNhc2UgVFZfSU5QVVRfTlRTQ00gICAgOiBsYXJnID0g
QlQ4NDhfSUZPUk1fRl9OVFNDTSAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRf
TlRTQ0ogICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9OVFNDSiAgIDsgIGJyZWFrOwogICAg
ICAgIGNhc2UgVFZfSU5QVVRfUEFMQkRHSEkgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9QQUxC
REdISTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTSAgICAgOiBsYXJnID0g
QlQ4NDhfSUZPUk1fRl9QQUxNICAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRf
UEFMTiAgICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9QQUxOICAgIDsgIGJyZWFrOwogICAg
ICAgIGNhc2UgVFZfSU5QVVRfU0VDQU0gICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9TRUNB
TSAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTkNPTUIgOiBsYXJnID0g
QlQ4NDhfSUZPUk1fRl9SU1ZEICAgIDsgIGJyZWFrOwogICAgICAgIGRlZmF1bHQgICAgICAg
ICAgICAgICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfQVVUTyAgICAgOgogICAgICAgICAg
ICBmcHJpbnRmKCBzdGRlcnIsIAogICAgICAgICAgICAgICAiVFZDQVBUVVJFU2V0SW5wdXRG
b3JtYXQ6IFVuc3VwcG9ydGVkIGZvcm1hdCAlZFxuIiwgZm9ybWF0ICk7CiAgICAgICAgICAg
IGV4aXQoMSk7CiAgICB9CiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgQlQ4NDhTRk1ULCAmbGFy
ZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiQlQ4NDhTRk1UIiwgbGFyZyAp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiAgVXBkYXRlIG1heCBjYXB0dXJlIHNp
emUgYmFzZWQgb24gZHJpdmVyIGZvcm1hdCAgKi8KICAgIC8qICBGSVhNRTogVGhlc2UgYmVs
b25nIGluIHRoZSBkcml2ZXIvZHJpdmVyIGluY2x1ZGUgZmlsZSAgKi8KICAgIHN3aXRjaCAo
IGZvcm1hdCApIHsKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NNIDoKICAgICAgICBjYXNl
IFRWX0lOUFVUX05UU0NKIDoKICAgICAgICBjYXNlIFRWX0lOUFVUX1BBTE0gIDoKICAgICAg
ICAgICAgYy0+d2lkdGhfbWF4ICA9IE5UU0NfRElNX1g7CiAgICAgICAgICAgIGMtPmhlaWdo
dF9tYXggPSBOVFNDX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4ICAgID0gTlRTQ19G
UFM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMQkRHSEkg
OgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTiAgICAgOgogICAgICAgIGNhc2UgVFZfSU5Q
VVRfU0VDQU0gICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTkNPTUIgOgogICAgICAg
ICAgICBjLT53aWR0aF9tYXggID0gUEFMX0RJTV9YOwogICAgICAgICAgICBjLT5oZWlnaHRf
bWF4ID0gUEFMX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4ICAgID0gUEFMX0ZQUzsK
ICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8K
ICAgIGMtPmlucHV0X2Zvcm1hdCA9IGZvcm1hdDsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0SW5w
dXREZXZpY2UoIFRWX0NBUFRVUkUgKmMsIFRWX0lOUFVUX0RFVklDRSBkZXYgKQp7CiAgICBp
bnQgYXJnLAogICAgICAgIG9sZF9hdWRpbzsKCiAgICAvKiAgRklYTUU6ICBNb3ZlIGFsbCBk
cml2ZXIgc2V0IGNhbGxzIG91dCBvZiBTdGFydCgpIGludG8gdGhlc2UgICovCiAgICAvKiAg
ICBzZXQgY2FsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovCiAgICBpZiAoIGMtPmNvbnRpbl9vbiApIHsKICAgICAgICBmcHJpbnRmKCBz
dGRlcnIsIAogICAgICAgICAgICAgICAgICJUVkNBUFRVUkVTZXRJbnB1dERldmljZSgpOiBD
YWxsZWQgd2hlbiBjYXB0dXJlIGlzIG9uXG4iICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgdG8gZ2V0IGFyb3VuZCBkcml2ZXIgdW5tdXRp
bmcgYXVkaW8gYWNyb3NzICAqLwogICAgLyogICAgY2hhbm5lbCwgZnJlcSwgYW5kIGlucHV0
IGRldmljZSBjaGFuZ2VzLiAgICAgICAgICAgICAgICAgICAgICovCiAgICBpZiAoIGlvY3Rs
KCBjLT50ZmQsIEJUODQ4X0dBVURJTywgJm9sZF9hdWRpbyApIDwgMCApIHsKICAgICAgICBE
T19JT0NUTF9HRVJSKCAiQlQ4NDhfR0FVRElPIiApOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBzd2l0Y2ggKCBkZXYgKSB7CiAgICAgICAgY2FzZSBUVl9ERVZJQ0VfVFVORVIgOiBh
cmcgPSBNRVRFT1JfREVWMTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfREVWSUNFX1ZJREVP
ICA6IGFyZyA9IE1FVEVPUl9JTlBVVF9ERVYzOyAgYnJlYWs7CiAgICAgICAgY2FzZSBUVl9E
RVZJQ0VfU1ZJREVPIDogYXJnID0gTUVURU9SX0RFVjI7ICBicmVhazsKICAgICAgICBkZWZh
dWx0IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVNldElucHV0
RGV2aWNlKCk6IEJhZCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGRldiAp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1F
VEVPUlNJTlBVVCwgJmFyZyApIDwgMCApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJp
b2N0bChNRVRFT1JTSU5QVVQsICVkKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAgICAgICAgICAg
ICBhcmcsIHN0cmVycm9yKGVycm5vKSApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAv
KiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmlucHV0X2RldiAgICAgICAgID0gYXJn
OwoKICAgIC8qICBXaGVuIHdlIGRpZCB0aGF0IGxhc3QgU0lOUFVULCB0aGUgZHJpdmVyIGF1
dG8tc2VsZWN0ZWQgdGhlICAqLwogICAgLyogICAgYXVkaW8gaW5wdXQgY29ycmVjdCBmb3Ig
dGhhdCB2aWRlbyBpbnB1dC4gIE92ZXJyaWRlIGl0ICAgICovCiAgICAvKiAgICBpZiB0aGUg
dXNlciBoYXMgcmVxdWVzdGVkIHRoaXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
ICAgIGlmICggYy0+YXVkaW9faW5wdXRfZGV2ICE9IFRWX0FVRElPX0lOUFVUX0FVVE8gKSB7
CiAgICAgICAgc3dpdGNoICggYy0+YXVkaW9faW5wdXRfZGV2ICkgewogICAgICAgICAgICBk
ZWZhdWx0ICAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgIGNhc2UgVFZfQVVESU9f
SU5QVVRfVFVORVIgIDogYXJnID0gQVVESU9fVFVORVI7ICAgYnJlYWs7CiAgICAgICAgICAg
IGNhc2UgVFZfQVVESU9fSU5QVVRfRVhURVJOIDogYXJnID0gQVVESU9fRVhURVJOOyAgYnJl
YWs7CiAgICAgICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfSU5URVJOIDogYXJnID0gQVVE
SU9fSU5URVJOOyAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmICggaW9jdGwoIGMtPnRm
ZCwgQlQ4NDhfU0FVRElPLCAmYXJnICkgPCAwICkgewogICAgICAgICAgICBmcHJpbnRmKCBz
dGRlcnIsICJpb2N0bChCVDg0OF9TQVVESU8sICVkKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAg
ICAgICAgICAgICAgICAgYXJnLCBzdHJlcnJvcihlcnJubykgKTsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAvKiAgUmVzdG9yZSB0aGUgb2xkIG11dGUgc2V0
dGluZyAgKi8KICAgIG9sZF9hdWRpbyAmPSBBVURJT19NVVRFOwogICAgaWYgKCBvbGRfYXVk
aW8gKSAKICAgICAgICBUVkNBUFRVUkVTZXRBdWRpb011dGUoIGMsIFRSVUUgKTsKfQoKCnZv
aWQgVFZDQVBUVVJFU2V0QXVkaW9JbnB1dERldmljZSggVFZfQ0FQVFVSRSAqYywgVFZfQVVE
SU9fSU5QVVRfREVWSUNFIGRldiApCnsKICAgIGludCBhcmc7CgogICAgLyogIEZJWE1FOiAg
TW92ZSBhbGwgZHJpdmVyIHNldCBjYWxscyBvdXQgb2YgU3RhcnQoKSBpbnRvIHRoZXNlICAq
LwogICAgLyogICAgc2V0IGNhbGxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLwogICAgaWYgKCBjLT5jb250aW5fb24gKSB7CiAgICAgICAg
ZnByaW50Ziggc3RkZXJyLCAKICAgICAgICAgICAgICAgICAiVFZDQVBUVVJFU2V0QXVkaW9J
bnB1dERldmljZSgpOiAiCiAgICAgICAgICAgICAgICAgIkNhbGxlZCB3aGVuIGNhcHR1cmUg
aXMgb25cbiIgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3dpdGNoICggZGV2ICkg
ewogICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfQVVUTyAgIDogYnJlYWs7CiAgICAgICAg
Y2FzZSBUVl9BVURJT19JTlBVVF9UVU5FUiAgOiBhcmcgPSBBVURJT19UVU5FUjsgICBicmVh
azsKICAgICAgICBjYXNlIFRWX0FVRElPX0lOUFVUX0VYVEVSTiA6IGFyZyA9IEFVRElPX0VY
VEVSTjsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfSU5URVJOIDogYXJn
ID0gQVVESU9fSU5URVJOOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdCA6CiAgICAgICAgICAg
ICBmcHJpbnRmKCBzdGRlcnIsICJUVkNBUFRVUkVTZXRBdWRpb0lucHV0RGV2aWNlKCk6IEJh
ZCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGRldiApOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBOT1RFOiAgQVVUTyBtZWFucyB3ZSBkb24ndCBt
b25rZXkgd2l0aCB0aGUgZGVmYXVsdHMgc2VsZWN0ZWQgYnkgICovCiAgICAvKiAgICB0aGUg
ZHJpdmVyLiAgT3RoZXIgdmFsdWVzIG1lYW4gd2UgYWx3YXlzIG92ZXJyaWRlIHRoZSBkcml2
ZXIgICAqLwogICAgLyogICAgdG8ga2VlcCB0aGF0IHNldHRpbmcgd2hlbmV2ZXIgaXQgd2Fu
dHMgdG8gY2hhbmdlIHRoZSBzZXR0aW5nLiAgKi8KICAgIGlmICggZGV2ICE9IFRWX0FVRElP
X0lOUFVUX0FVVE8gKSB7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9TQVVE
SU8sICZhcmcgKSA8IDAgKSB7CiAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgImlvY3Rs
KEJUODQ4X1NBVURJTywgJWQpIGZhaWxlZDogJXNcbiIsIAogICAgICAgICAgICAgICAgICAg
ICBhcmcsIHN0cmVycm9yKGVycm5vKSApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAg
fQogICAgICAgIGMtPmF1ZGlvX2lucHV0X2RldiA9IGRldjsKICAgIH0KICAgIGVsc2Ugewog
ICAgICAgIFRWX0RSSVZFUl9TVEFURSAgczsKCiAgICAgICAgYy0+YXVkaW9faW5wdXRfZGV2
ID0gZGV2OwoKICAgICAgICAvKiAgRm9yY2UgZHJpdmVyIHRvIHJlc2V0IGF1ZGlvIGlucHV0
IGJhY2sgdG8gaXRzIGRlZmF1bHQgICovCiAgICAgICAgaWYgKCAhVFZDQVBUVVJFUXVlcnlE
cml2ZXJTdGF0ZSggYywgJnMgKSApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAi
VFZDQVBUVVJFUXVlcnlEcml2ZXJTdGF0ZSgpIGZhaWxlZFxuIiApOwogICAgICAgICAgICBl
eGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgLyogIFRoaXMgZnVubnkgYnVzaW5lc3Mgc28g
dGhlIGRyaXZlciB3aWxsIGFjdHVhbGx5IHJlc2V0IHRoZSBpbnB1dCAqLwogICAgICAgIFRW
Q0FQVFVSRVNldElucHV0RGV2aWNlKCBjLCBUVl9ERVZJQ0VfVFVORVIgKTsKICAgICAgICBU
VkNBUFRVUkVTZXRJbnB1dERldmljZSggYywgVFZfREVWSUNFX1ZJREVPICk7CiAgICAgICAg
VFZDQVBUVVJFU2V0SW5wdXREZXZpY2UoIGMsIHMuaW5wdXRfZGV2ICk7CiAgICB9Cn0KCgp2
b2lkIFRWQ0FQVFVSRVNldFR1bmVyQ2hhbm5lbCggVFZfQ0FQVFVSRSAqYywgVFZfSU5UMzIg
Y2hhbl9udW0gKQp7CiAgICBUVl9JTlQzMiBsYXJnID0gY2hhbl9udW07CiAgICBpbnQgICBv
bGRfYXVkaW87CgogICAgLyogIERyaXZlciBGSVhNRTogSGFjayB0byBnZXQgYXJvdW5kIGRy
aXZlciB1bm11dGluZyBhdWRpbyBhY3Jvc3MgICovCiAgICAvKiAgICBjaGFubmVsLCBmcmVx
LCBhbmQgaW5wdXQgZGV2aWNlIGNoYW5nZXMuICAgICAgICAgICAgICAgICAgICAgKi8KICAg
IGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0FVRElPLCAmb2xkX2F1ZGlvICkgPCAwICkg
ewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQVVESU8iICk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9TRVRDSE5MLCAm
bGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiVFZUVU5FUl9TRVRDSE5M
IiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPnR1bmVyX2NoYW5fYWN0
aXZlID0gVFJVRTsKCiAgICBvbGRfYXVkaW8gJj0gQVVESU9fTVVURTsKICAgIGlmICggb2xk
X2F1ZGlvICkgCiAgICAgICAgVFZDQVBUVVJFU2V0QXVkaW9NdXRlKCBjLCBUUlVFICk7Cn0K
Cgp2b2lkIFRWQ0FQVFVSRVNldFR1bmVyRnJlcSggVFZfQ0FQVFVSRSAqYywgZG91YmxlIGZy
ZXEgKQp7CiAgICBUVl9JTlQzMiBsYXJnID0gZnJlcSAqIEZSRVFGQUNUT1I7CiAgICBpbnQg
ICAgICBvbGRfYXVkaW87CgogICAgLyogIERyaXZlciBGSVhNRTogSGFjayB0byBnZXQgYXJv
dW5kIGRyaXZlciB1bm11dGluZyBhdWRpbyBhY3Jvc3MgICovCiAgICAvKiAgICBjaGFubmVs
LCBmcmVxLCBhbmQgaW5wdXQgZGV2aWNlIGNoYW5nZXMuICAgICAgICAgICAgICAgICAgICAg
Ki8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0FVRElPLCAmb2xkX2F1ZGlvICkg
PCAwICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQVVESU8iICk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9TRVRG
UkVRLCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiVFZUVU5FUl9T
RVRGUkVRIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPnR1bmVyX2No
YW5fYWN0aXZlID0gRkFMU0U7CgogICAgb2xkX2F1ZGlvICY9IEFVRElPX01VVEU7CiAgICBp
ZiAoIG9sZF9hdWRpbyApIAogICAgICAgIFRWQ0FQVFVSRVNldEF1ZGlvTXV0ZSggYywgVFJV
RSApOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRUdW5lckZyZXFTZXQoIFRWX0NBUFRVUkUgKmMs
IFRWX0ZSRVFfU0VUIHNldCApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgc3dpdGNoICgg
c2V0ICkgewogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfTkFCQ1NUICAgOiBsYXJnID0gQ0hO
TFNFVF9OQUJDU1QgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfQ0FCTEVJ
UkMgOiBsYXJnID0gQ0hOTFNFVF9DQUJMRUlSQzsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZf
RlJFUV9TRVRfQ0FCTEVIUkMgOiBsYXJnID0gQ0hOTFNFVF9DQUJMRUhSQzsgIGJyZWFrOwog
ICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfV0VVUk9QRSAgOiBsYXJnID0gQ0hOTFNFVF9XRVVS
T1BFIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfSlBOQkNTVCAgOiBsYXJn
ID0gQ0hOTFNFVF9KUE5CQ1NUIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRf
SlBOQ0FCTEUgOiBsYXJnID0gQ0hOTFNFVF9KUE5DQUJMRTsgIGJyZWFrOwogICAgICAgIGRl
ZmF1bHQgOgogICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLAogICAgICAgICAgICAgICAg
ICAgICAgIlRWQ0FQVFVSRVNldFR1bmVyRnJlcVNldCgpOiBCYWQgZnJlcSBzZXQgJWRcbiIs
IHNldCApOyAKICAgICAgICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKCBpb2N0
bCggYy0+dGZkLCBUVlRVTkVSX1NFVFRZUEUsICZsYXJnICkgPCAwICkgewogICAgICAgIERP
X0lPQ1RMX1NFUlIoICJUVlRVTkVSX1NFVFRZUEUiLCBsYXJnICk7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIC8qICBGSVhNRTogIEhhY2sgdG8gZm9yY2UgYSBjaGFubmVsIGZyZXEg
cmVjb21wdXRlIGluIHRoZSBkcml2ZXIgICovCiAgICAvKiAgICB3aGVuIHdlIGNoYW5nZSBt
b2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgewog
ICAgICAgIFRWX0RSSVZFUl9TVEFURSAgczsKICAgICAgICBpZiAoICFUVkNBUFRVUkVRdWVy
eURyaXZlclN0YXRlKCBjLCAmcyApICkgewogICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIs
ICJUVkNBUFRVUkVRdWVyeURyaXZlclN0YXRlKCkgZmFpbGVkXG4iICk7CiAgICAgICAgICAg
IGV4aXQoMSk7CiAgICAgICAgfQogICAgICAgIFRWQ0FQVFVSRVNldFR1bmVyQ2hhbm5lbCgg
Yywgcy50dW5lcl9jaGFuICk7CiAgICB9Cn0KCnZvaWQgVFZDQVBUVVJFU2V0QWZjKCBUVl9D
QVBUVVJFICpjLCBUVl9CT09MIGFmYyApCnsKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZU
VU5FUl9TRVRBRkMsICZhZmMgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfU0VSUiggIlRW
VFVORVJfU0VUQUZDIiwgYWZjICk7CiAgICAgICAgcmV0dXJuOwogICAgfQp9Cgp2b2lkIFRW
Q0FQVFVSRVNldEF1ZGlvTXV0ZSggVFZfQ0FQVFVSRSAqYywgVFZfQk9PTCBtdXRlICkKewog
ICAgaW50IGFyZyA9ICggbXV0ZSA/IEFVRElPX01VVEUgOiBBVURJT19VTk1VVEUgKTsKCiAg
ICAvKiAgSWYgYXVkaW8gaXMgZGlzYWJsZWQsIGRvbid0IGV2ZXIgdW5tdXRlICAqLwogICAg
aWYgKCAhQXBwX3Jlcy5kb19hdWRpbyApCiAgICAgICAgYXJnID0gQVVESU9fTVVURTsKCiAg
ICAvKiAgRG9uJ3QgY2hhbmdlIGF1ZGlvIHNvdXJjZTsganVzdCBtdXRlIGl0ICAqLwogICAg
aWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9TQVVESU8sICZhcmcgKSA8IDAgKSB7CiAgICAg
ICAgRE9fSU9DVExfU0VSUiggIkJUODQ4X1NBVURJTyIsIGFyZyApOwogICAgICAgIHJldHVy
bjsKICAgIH0KfQoKdm9pZCBUVkNBUFRVUkVTZXRDb2xvcmJhcnMgICAoIFRWX0NBUFRVUkUg
KmMsIFRWX0JPT0wgY29sb3JiYXJzICkKewogICAgaW50ICAgaW9jdGxfbnVtID0gKCBjb2xv
cmJhcnMgPyAgQlQ4NDhfU0NCQVJTICA6ICBCVDg0OF9DQ0JBUlMgICk7CiAgICBjaGFyICpp
b2N0bF9zdHIgPSAoIGNvbG9yYmFycyA/ICJCVDg0OF9TQ0JBUlMiIDogIkJUODQ4X0NDQkFS
UyIgKTsKICAgIGludCAgIGR1bW15OwoKICAgIC8qICBEb24ndCBjaGFuZ2UgYXVkaW8gc291
cmNlOyBqdXN0IG11dGUgaXQgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIGlvY3RsX251
bSwgJmR1bW15ICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoIGlvY3RsX3N0ciwg
ZHVtbXkgKTsKICAgICAgICByZXR1cm47CiAgICB9Cn0KCnZvaWQgVFZDQVBUVVJFU2V0RlBT
ICAgICAgICggVFZfQ0FQVFVSRSAqYywgVFZfVUlOVDMyIGZwcyApCnsKICAgIFRWX1VJTlQx
NiB1c2FyZyA9IE1BWCggMCwgTUlOKCBjLT5mcHNfbWF4LCBmcHMgKSApOwoKICAgIGlmICgg
aW9jdGwoIGMtPmZkLCBNRVRFT1JTRlBTLCAmdXNhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9f
SU9DVExfU0VSUiggIk1FVEVPUlNGUFMiLCB1c2FyZyApOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmZwcyA9IHVzYXJnOwp9
CgoKdm9pZCBUVkNBUFRVUkVTZXRGcmFtZURvbmVDQkVuYWJsZWQoIFRWX0NBUFRVUkUgKmMs
IFRWX0JPT0wgZW5hYmxlICkKewogICAgYy0+ZnJhbWVfY2JfZW5hYmxlZCA9IGVuYWJsZTsK
fQoKCnZvaWQgVFZDQVBUVVJFR2V0RlBTTWF4KCBUVl9DQVBUVVJFICpjLCBUVl9VSU5UMzIg
KmZwc19tYXggKQp7CiAgICAqZnBzX21heCA9IGMtPmZwc19tYXg7Cn0KCgovKipAQkVHSU5G
VU5DKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKCiAgICBQcm90b3R5cGUgIDogVFZfQk9PTCBUVkNBUFRVUkVRdWVyeURy
aXZlclN0YXRlKAogICAgICAgICAgICAgICAgICAgICAgVFZfQ0FQVFVSRSAqYywKICAgICAg
ICAgICAgICAgICAgICAgIFRWX0RSSVZFUl9TVEFURSAqcyApCgogICAgUHVycG9zZSAgICA6
IFF1ZXJpZXMgdGhlIGRyaXZlciBmb3IgYWxsIG9mIGl0cyBjdXJyZW50IHBhcmFtZXRlcnMu
CgogICAgUHJvZ3JhbW1lciA6IDE2LU1hci05NyAgUmFuZGFsbCBIb3BwZXIKCiAgICBQYXJh
bWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgZGV2aWNlIHN0cnVjdAogICAgICAgICAgICAgICAg
IHMgLSBPOiBkcml2ZXIgc3RhdGUKCiAgICBSZXR1cm5zICAgIDogTm9uZS4KCiAgICBHbG9i
YWxzICAgIDogTm9uZS4KCiAqKkBFTkRGVU5DKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpUVl9CT09MIFRWQ0FQ
VFVSRVF1ZXJ5RHJpdmVyU3RhdGUoIFRWX0NBUFRVUkUgKmMsIFRWX0RSSVZFUl9TVEFURSAq
cyApCnsKICAgIFRWX0lOVDMyICAgICBsYXJnOwogICAgVFZfVUlOVDE2ICAgIHVzYXJnOwoj
aWZkZWYgTk9UX05FRURFRAogICAgc3RydWN0IG1ldGVvcl9jb3VudHMgY291bnRzOwogICAg
c3RydWN0IG1ldGVvcl92aWRlbyAgdmlkZW87CiNlbmRpZgoKICAgIG1lbXNldCggcywgJ1ww
Jywgc2l6ZW9mKCAqcyApICk7CgogICAgLyogIElOUFVUIERFVklDRSAgKi8KICAgIGlmICgg
aW9jdGwoIGMtPmZkLCBNRVRFT1JHSU5QVVQsICZsYXJnICkgPCAwICkgewogICAgICAgIERP
X0lPQ1RMX0dFUlIoICJNRVRFT1JHSU5QVVQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwog
ICAgfQoKICAgIHN3aXRjaCAoIGxhcmcgKSB7CiAgICAgICAgY2FzZSBNRVRFT1JfREVWMDoK
ICAgICAgICBjYXNlIE1FVEVPUl9JTlBVVF9ERVYzIDogcy0+aW5wdXRfZGV2ID0gVFZfREVW
SUNFX1ZJREVPIDsgIGJyZWFrOwogICAgICAgIGNhc2UgTUVURU9SX0RFVjEgOiBzLT5pbnB1
dF9kZXYgPSBUVl9ERVZJQ0VfVFVORVIgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBNRVRFT1Jf
REVWMiA6IHMtPmlucHV0X2RldiA9IFRWX0RFVklDRV9TVklERU87ICBicmVhazsKICAgICAg
ICBkZWZhdWx0IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVF1
ZXJ5RHJpdmVyU3RhdGUoKTogQmFkIElOUFVUICVkXG4iLAogICAgICAgICAgICAgICAgICAg
ICAgbGFyZyApOwogICAgICAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQoKICAgIC8qICBJ
TlBVVCBGT1JNQVQgICovCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgQlQ4NDhHRk1ULCAmbGFy
ZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhHRk1UIiApOwogICAg
ICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHN3aXRjaCAoIGxhcmcgKSB7CiAgICAgICAg
Y2FzZSBCVDg0OF9JRk9STV9GX0FVVE8gICAgOiBzLT5pbnB1dF9mbXQgPSBUVl9JTlBVVF9B
VVRPICAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgQlQ4NDhfSUZPUk1fRl9OVFNDTSAgIDog
cy0+aW5wdXRfZm10ID0gVFZfSU5QVVRfTlRTQ00gICA7ICBicmVhazsKICAgICAgICBjYXNl
IEJUODQ4X0lGT1JNX0ZfTlRTQ0ogICA6IHMtPmlucHV0X2ZtdCA9IFRWX0lOUFVUX05UU0NK
ICAgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBCVDg0OF9JRk9STV9GX1BBTEJER0hJOiBzLT5p
bnB1dF9mbXQgPSBUVl9JTlBVVF9QQUxCREdISTsgIGJyZWFrOwogICAgICAgIGNhc2UgQlQ4
NDhfSUZPUk1fRl9QQUxNICAgIDogcy0+aW5wdXRfZm10ID0gVFZfSU5QVVRfUEFMTSAgICA7
ICBicmVhazsKICAgICAgICBjYXNlIEJUODQ4X0lGT1JNX0ZfUEFMTiAgICA6IHMtPmlucHV0
X2ZtdCA9IFRWX0lOUFVUX1BBTE4gICAgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBCVDg0OF9J
Rk9STV9GX1NFQ0FNICAgOiBzLT5pbnB1dF9mbXQgPSBUVl9JTlBVVF9TRUNBTSAgIDsgIGJy
ZWFrOwogICAgICAgIGNhc2UgQlQ4NDhfSUZPUk1fRl9SU1ZEICAgIDogcy0+aW5wdXRfZm10
ID0gVFZfSU5QVVRfUEFMTkNPTUI7ICBicmVhazsKICAgICAgICBkZWZhdWx0IDoKICAgICAg
ICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVF1ZXJ5RHJpdmVyU3RhdGUoKTog
QmFkIEZNVCAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGxhcmcgKTsKICAgICAgICAg
ICAgIHJldHVybiBGYWxzZTsKICAgIH0KCiAgICAvKiAgQ0FQVFVSRSBERVNUSU5BVElPTiAg
Ki8KI2lmZGVmIE5PVF9ORUVERUQKICAgIGlmICggaW9jdGwoIGMtPmZkLCBNRVRFT1JfR1ZJ
REVPLCAmdmlkZW8gKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIk1FVEVPUl9H
VklERU8iICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQojZW5kaWYKCiAgICAvKiAg
RlJBTUVTIFBFUiBTRUMgICovCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SR0ZQUywg
JnVzYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJNRVRFT1JHRlBTIiAp
OwogICAgICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHMtPmZwcyA9IHVzYXJnOwoKICAg
IC8qICBTSUdOQUwgICovCiNpZmRlZiBOT1RfTkVFREVECiAgICBpZiAoIGlvY3RsKCBjLT5m
ZCwgTUVURU9SX0dTSUdOQUwsICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX0dF
UlIoICJNRVRFT1JfR1NJR05BTCIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAg
ICBzLT5zaWduYWwgPSBsYXJnOwojZW5kaWYKCiAgICAvKiAgQ0FQVFVSRSBTVEFUSVNUSUNT
ICAqLwojaWZkZWYgTk9UX05FRURFRAogICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUl9H
Q09VTlQsICZjb3VudHMgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIk1FVEVP
Ul9HQ09VTlQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQogICAgcy0+c3RhdHMu
ZnJhbWVzX2NhcHR1cmVkID0gY291bnRzLmZyYW1lc19jYXB0dXJlZDsKI2VuZGlmCgogICAg
LyogIEhVRSAgKi8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0hVRSwgJmxhcmcg
KSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIkJUODQ4X0dIVUUiICk7CiAgICAg
ICAgcmV0dXJuIEZhbHNlOwogICAgfQoKICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgbmVl
ZGVkIHNpbmNlIDk3MDMyMiBkcml2ZXIgaXMgdXNpbmcgYW4gaW50LCBidXQgKi8KICAgIC8q
ICAgIGlzbid0IHJldHVybmluZyAtMTI4LTEyNyByYW5nZSBhcyBpbiBTSFVFLCBidXQgcmF0
aGVyIDAuLjI1NS4gICAgKi8KICAgIGlmICggbGFyZyA+PSAxMjggKQogICAgICAgIGxhcmcg
LT0gMjU2OwoKICAgIHMtPmh1ZSA9ICgoZG91YmxlKWxhcmcgLSBIVUVfRFJWX01JTikgLyBI
VUVfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqIEhVRV9SQU5HRSArIEhVRV9NSU47CgogICAgLyogIEJSSUdIVE5FU1MgICovCiAgICBp
ZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X0dCUklHLCAmbGFyZyApIDwgMCApIHsKICAgICAg
ICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfR0JSSUciICk7CiAgICAgICAgcmV0dXJuIEZhbHNl
OwogICAgfQoKICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgbmVlZGVkIHNpbmNlIDk3MDMy
MiBkcml2ZXIgaXMgdXNpbmcgYW4gaW50LCBidXQgICovCiAgICAvKiAgICBpc24ndCByZXR1
cm5pbmcgLTEyOC0xMjcgcmFuZ2UgYXMgaW4gU0hVRSwgYnV0IHJhdGhlciAwLi4yNTUuICAg
ICAqLwogICAgaWYgKCBsYXJnID49IDEyOCApCiAgICAgICAgbGFyZyAtPSAyNTY7CgogICAg
cy0+YnJpZ2h0bmVzcyA9ICgoZG91YmxlKWxhcmcgLSBCUklHSFRfRFJWX01JTikgLyBCUklH
SFRfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBCUklHSFRfUkFOR0UgKyBCUklHSFRfTUlOOwoKICAgIC8qICBDT05UUkFT
VCAgKi8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0NPTlQsICZsYXJnICkgPCAw
ICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQ09OVCIgKTsKICAgICAgICBy
ZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT5jb250cmFzdCA9ICgoZG91YmxlKWxhcmcgLSBD
T05UUl9EUlZfTUlOKSAvIENPTlRSX0RSVl9SQU5HRSAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ09OVFJfUkFOR0UgKyBDT05UUl9NSU47
CgogICAgLyogIENIUk9NQSBVIFNBVFVSQVRJT04gICovCiAgICBpZiAoIGlvY3RsKCBjLT50
ZmQsIEJUODQ4X0dVU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9HRVJS
KCAiQlQ4NDhfR1VTQVQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQogICAgcy0+
c2F0X3UgPSAoKGRvdWJsZSlsYXJnIC0gU0FUVV9EUlZfTUlOKSAvIFNBVFVfRFJWX1JBTkdF
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTQVRV
X1JBTkdFICsgU0FUVV9NSU47CgogICAgLyogIENIUk9NQSBWIFNBVFVSQVRJT04gICovCiAg
ICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X0dWU0FULCAmbGFyZyApIDwgMCApIHsKICAg
ICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfR1ZTQVQiICk7CiAgICAgICAgcmV0dXJuIEZh
bHNlOwogICAgfQogICAgcy0+c2F0X3YgPSAoKGRvdWJsZSlsYXJnIC0gU0FUVl9EUlZfTUlO
KSAvIFNBVFZfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKiBTQVRWX1JBTkdFICsgU0FUVl9NSU47CgogICAgLyogIFRVTkVSIFRZ
UEUgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIFRWVFVORVJfR0VUVFlQRSwgJmxhcmcg
KSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIlRWVFVORVJfR0VUVFlQRSIgKTsK
ICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzd2l0Y2ggKCBsYXJnICkgewogICAg
ICAgIGNhc2UgQ0hOTFNFVF9OQUJDU1QgICA6IHMtPnR1bmVyX2ZyZXFfc2V0ID0gVFZfRlJF
UV9TRVRfTkFCQ1NUICA7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICBjYXNlIENITkxTRVRfQ0FCTEVJUkMgOiBzLT50dW5lcl9mcmVxX3NldCA9
IFRWX0ZSRVFfU0VUX0NBQkxFSVJDOyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSE5MU0VUX0NBQkxFSFJDIDogcy0+dHVuZXJfZnJl
cV9zZXQgPSBUVl9GUkVRX1NFVF9DQUJMRUhSQzsgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENITkxTRVRfV0VVUk9QRSAgOiBzLT50
dW5lcl9mcmVxX3NldCA9IFRWX0ZSRVFfU0VUX1dFVVJPUEUgOyAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSE5MU0VUX0pQTkJDU1Qg
IDogcy0+dHVuZXJfZnJlcV9zZXQgPSBUVl9GUkVRX1NFVF9KUE5CQ1NUIDsgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ0hOTFNFVF9K
UE5DQUJMRSA6IHMtPnR1bmVyX2ZyZXFfc2V0ID0gVFZfRlJFUV9TRVRfSlBOQ0FCTEU7ICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0
IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAg
ICJUVkNBUFRVUkVRdWVyeURyaXZlclN0YXRlKCk6IEJhZCBDSE5MU0VUICVkXG4iLCAKICAg
ICAgICAgICAgICAgICAgICAgIGxhcmcgKTsKICAgICAgICAgICAgIHJldHVybiBGYWxzZTsK
ICAgIH0KCiAgICAvKiAgRklYTUU6ICBUaGlzIGlzIGEgaGFjayBiZWNhdXNlIHdlIGNhbid0
IHF1ZXJ5IHRoaXMgaW5mbyAgKi8KICAgIC8qICAgIGZyb20gdGhlIGRyaXZlci4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgcy0+dHVuZXJfY2hhbl9h
Y3RpdmUgPSBjLT50dW5lcl9jaGFuX2FjdGl2ZTsKCiAgICAvKiAgVFVORVIgQ0hBTk5FTCAg
Ki8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9HRVRDSE5MLCAmbGFyZyApIDwg
MCApIHsKICAgICAgICBET19JT0NUTF9HRVJSKCAiVFZUVU5FUl9HRVRDSE5MIiApOwogICAg
ICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHMtPnR1bmVyX2NoYW4gPSBsYXJnOwoKICAg
IC8qICBUVU5FUiBGUkVRVUVOQ1kgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIFRWVFVO
RVJfR0VURlJFUSwgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIlRW
VFVORVJfR0VURlJFUSIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT50
dW5lcl9mcmVxID0gKGRvdWJsZSlsYXJnIC8gRlJFUUZBQ1RPUjsKCiAgICAvKiAgQVVESU8g
TVVURSBBTkQgSU5QVVQgU1RBVEUgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4
X0dBVURJTywgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIkJUODQ4
X0dBVURJTyIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT5hdWRpb19t
dXRlID0gKGxhcmcgJiBBVURJT19NVVRFKSAhPSAwOwogICAgc3dpdGNoICggbGFyZyAmIH5B
VURJT19NVVRFICkgewogICAgICAgIGRlZmF1bHQgICAgICAgICAgIDoKICAgICAgICBjYXNl
IEFVRElPX1RVTkVSICA6IHMtPmF1ZGlvX2lucHV0X2RldiA9IFRWX0FVRElPX0lOUFVUX1RV
TkVSIDsgIGJyZWFrOwogICAgICAgIGNhc2UgQVVESU9fRVhURVJOIDogcy0+YXVkaW9faW5w
dXRfZGV2ID0gVFZfQVVESU9fSU5QVVRfRVhURVJOOyAgYnJlYWs7CiAgICAgICAgY2FzZSBB
VURJT19JTlRFUk4gOiBzLT5hdWRpb19pbnB1dF9kZXYgPSBUVl9BVURJT19JTlBVVF9JTlRF
Uk47ICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gVHJ1ZTsKfQoKCnZvaWQgVFZDQVBUVVJF
UXVlcnlQYXJhbUxpbWl0cyggVFZfQ0FQVFVSRSAqYywgVFZfRFJJVkVSX1BBUkFNIHAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxpbVsyXSApCnsKICAgIHN0
YXRpYyBzdHJ1Y3QgewogICAgICAgIFRWX0RSSVZFUl9QQVJBTSBwOwogICAgICAgIGRvdWJs
ZSAgICAgICAgICBsaW1bMl07CiAgICB9IFNfcGFyYW1fbGltW10gPSB7CiAgICAgICAgeyBU
Vl9QQVJBTV9IVUUgICAgICwgeyBIVUVfTUlOICAgLCBIVUVfTUFYICAgIH0gfSwKICAgICAg
ICB7IFRWX1BBUkFNX0JSSUdIVCAgLCB7IEJSSUdIVF9NSU4sIEJSSUdIVF9NQVggfSB9LAog
ICAgICAgIHsgVFZfUEFSQU1fQ09OVFJBU1QsIHsgQ09OVFJfTUlOICwgQ09OVFJfTUFYICB9
IH0sCiAgICAgICAgeyBUVl9QQVJBTV9TQVRVICAgICwgeyBTQVRVX01JTiAgLCBTQVRVX01B
WCAgIH0gfSwKICAgICAgICB7IFRWX1BBUkFNX1NBVFYgICAgLCB7IFNBVFZfTUlOICAsIFNB
VFZfTUFYICAgfSB9CiAgICB9OwoKICAgIFRWX0lOVDMyIGk7CgogICAgZm9yICggaSA9IDA7
IGkgPCBYdE51bWJlciggU19wYXJhbV9saW0gKTsgaSsrICkKICAgICAgICBpZiAoIFNfcGFy
YW1fbGltW2ldLnAgPT0gcCApCiAgICAgICAgICAgIGJyZWFrOwoKICAgIGlmICggaSA+PSBY
dE51bWJlciggU19wYXJhbV9saW0gKSApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsIAog
ICAgICAgICAgICAgICAiVFZDQVBUVVJFUXVlcnlQYXJhbUxpbWl0czogVW5zdXBwb3J0ZWQg
ZHJpdmVyIHBhcmFtICglZCkiLCBwICk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBt
ZW1jcHkoIGxpbSwgU19wYXJhbV9saW1baV0ubGltLCBzaXplb2YoIFNfcGFyYW1fbGltW2ld
LmxpbSApICk7Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBQcm90b3R5cGUgIDog
dm9pZCBUVkNBUFRVUkVRdWVyeVBpeGVsRm9ybWF0cygKICAgICAgICAgICAgICAgICAgICAg
IFRWX0NBUFRVUkUgICAgICpjLAogICAgICAgICAgICAgICAgICAgICAgVFZfUElYRUxfR0VP
TSAqKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBUVl9VSU5UMzIgICAgICAqbGlzdF9z
aXplICkKCiAgICBQdXJwb3NlICAgIDogUXVlcnkgYWxsIHRoZSBzdXBwb3J0IFJHQiBwaXhl
bCBmb3JtYXRzIGZyb20gdGhlIGNhcHR1cmUgCiAgICAgICAgICAgICAgICBkcml2ZXIgYW5k
IHN0b3JlIHRoZW0gaW4gYSBsb2NhbCBsaXN0IGZvciBmYXN0IGFjY2Vzcy4KCiAgICBQcm9n
cmFtbWVyIDogMjAtQXByLTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBj
ICAgICAgICAgLSBJOiBjYXB0dXJlIGRlZmluaXRpb24gc3RydWN0dXJlCiAgICAgICAgICAg
ICAgICAgbGlzdCAgICAgIC0gTzogYWxsb2NhdGVkL2ZpbGxlZCBpbiBsaXN0IG9mIHBpeGVs
IGZvcm1hdHMKICAgICAgICAgICAgICAgICBsaXN0X3NpemUgLSBPOiByZXN1bHRpbmcgc2l6
ZSBvZiBsaXN0CgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5v
bmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVRdWVyeVBpeGVs
Rm9ybWF0cyggVFZfQ0FQVFVSRSAgICAgKmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRWX1BJWEVMX0dFT00gKipsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUVl9VSU5UMzIgICAgICAqbGlzdF9zaXplICkKewogICAgLyogIEZJWE1FOiAg
VGhpcyBiZWxvbmdzIGluIHRoZSBkcml2ZXIgd2hlcmUgd2UgY2FuIHF1ZXJ5IGl0IHVzaW5n
ICAqLwogICAgLyogICAgdGhlIHBpeG1hcCBmb3JtYXRzIGludGVyZmFjZS4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgc3RhdGljIFRWX1BJWEVMX0dFT00gCiAg
ICAgICAgWVVWX2g0MjJfdjExMSA9CiAgICAgICAgICAgICB7IC0xLFRWX1BJWEVMVFlQRV9Z
VVYsMCx7fSwwLDAsCiAgICAgICAgICAgICAgIHs4LDgsOH0sezEsMiwyfSx7MSwxLDF9LFRW
X0ZSQU1FX1BMQU5BUiwiWVVWIiwxLDEsMCB9LAogICAgICAgIFlVVl9oNDIyX3Y0MjIgPQog
ICAgICAgICAgICAgeyAtMSxUVl9QSVhFTFRZUEVfWVVWLDAse30sMCwwLAogICAgICAgICAg
ICAgICB7OCw4LDh9LHsxLDIsMn0sezEsMiwyfSxUVl9GUkFNRV9QTEFOQVIsIllVViIsMSwx
LDAgfTsKCiAgICBzdHJ1Y3QgbWV0ZW9yX3BpeGZtdCBwZjsKICAgIFRWX1VJTlQzMiAgICAg
ICAgICAgIGk7CiAgICBUVl9QSVhFTF9HRU9NICAgICAgICpwZzsKCiAgICAqbGlzdCAgICAg
ID0gTlVMTDsKICAgICpsaXN0X3NpemUgPSAwOwoKICAgIGZvciAoIGkgPSAwOyA7IGkrKyAp
IHsKICAgICAgICBwZi5pbmRleCA9IGk7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1F
VEVPUkdTVVBQSVhGTVQsICZwZiApIDwgMCApIHsKICAgICAgICAgICAgaWYgKCBlcnJubyA9
PSBFSU5WQUwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIERPX0lPQ1RM
X0dFUlIoICJNRVRFT1JHU1VQUElYRk1UIiApOwogICAgICAgIH0KCiAgICAgICAgLyogIEV4
cGFuZCBsaXN0ICAqLwogICAgICAgICgqbGlzdF9zaXplKSsrOwogICAgICAgICpsaXN0ID0g
cmVhbGxvYyggKmxpc3QsICpsaXN0X3NpemUgKiBzaXplb2YoICgqbGlzdClbMF0gKSApOwog
ICAgICAgIGlmICggKmxpc3QgPT0gTlVMTCApCiAgICAgICAgICAgIFRWVVRJTE91dE9mTWVt
b3J5KCk7CgogICAgICAgIC8qICBTdG9yZSBuZXcgcmVjb3JkICAqLwogICAgICAgIHBnID0g
JigqbGlzdClbICpsaXN0X3NpemUgLSAxIF07CiAgICAgICAgbWVtc2V0KCBwZywgJ1wwJywg
c2l6ZW9mKCAqcGcgKSApOwoKICAgICAgICBpZiAoIHBmLnR5cGUgPT0gTUVURU9SX1BJWFRZ
UEVfUkdCICkgewogICAgICAgICAgICBwZy0+dHlwZSAgICAgICAgPSBUVl9QSVhFTFRZUEVf
UkdCOwogICAgICAgICAgICBwZy0+QnBwICAgICAgICAgPSBwZi5CcHA7CiAgICAgICAgICAg
IHBnLT5tYXNrWzBdICAgICA9IHBmLm1hc2tzWzBdOwogICAgICAgICAgICBwZy0+bWFza1sx
XSAgICAgPSBwZi5tYXNrc1sxXTsKICAgICAgICAgICAgcGctPm1hc2tbMl0gICAgID0gcGYu
bWFza3NbMl07CiAgICAgICAgICAgIHBnLT5zd2FwX2J5dGVzICA9IHBmLnN3YXBfYnl0ZXM7
CiAgICAgICAgICAgIHBnLT5zd2FwX3Nob3J0cyA9IHBmLnN3YXBfc2hvcnRzOwogICAgICAg
IH0KCiAgICAgICAgLyogIEZJWE1FOiAgVGhlc2Ugc2hvdWxkIGJlIHBhcmFtZXRlcml6ZWQg
c3VidHlwZXMgb2YgWVVWIGluICAqLwogICAgICAgIC8qICAgIHRoZSBkcml2ZXIsIG5vdCBz
ZXBhcmF0ZSB0eXBlcy4gIFRoaXMgd291bGQgZWxpbWluYXRlICAgKi8KICAgICAgICAvKiAg
ICBjb25mdXNpb24gZHVlIHRvIHRoZXNlIGxlZ2FjeSBuYW1lcywgYW5kIG1ha2UgdXMgICAg
ICAgICovCiAgICAgICAgLyogICAgbW9yZSBpbmRlcGVuZGVudCBvZiB0aGUgY2FwYWJpbGl0
aWVzIG9mIHRoZSBkcml2ZXIuICAgICAqLwogICAgICAgIC8qICBGSVhNRTogIEV4dGVuZCB0
aGUgZHJpdmVyIGludGVyZmFjZSB0byBwYXNzIHVzIHRoZXNlIFlVViAgKi8KICAgICAgICAv
KiAgICAgICAgICBwYXJtcyBmb3IgZWFjaCBZVVYgc3VidHlwZSAgICAgICAgICAgICAgICAg
ICAgICAgICovCiAgICAgICAgZWxzZSBpZiAoKCBwZi50eXBlID09IE1FVEVPUl9QSVhUWVBF
X1lVViAgICAgICAgKSB8fAogICAgICAgICAgICAgICAgICggcGYudHlwZSA9PSBNRVRFT1Jf
UElYVFlQRV9ZVVZfUEFDS0VEICkgfHwKICAgICAgICAgICAgICAgICAoIHBmLnR5cGUgPT0g
TUVURU9SX1BJWFRZUEVfWVVWXzEyICAgICApKSB7CgogICAgICAgICAgICBwZy0+dHlwZSA9
IFRWX1BJWEVMVFlQRV9ZVVY7CgogICAgICAgICAgICBzd2l0Y2ggKCBwZi50eXBlICkgewoK
ICAgICAgICAgICAgICAgIGNhc2UgTUVURU9SX1BJWFRZUEVfWVVWICAgICAgICA6CiAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KCBwZywgJllVVl9oNDIyX3YxMTEsIHNpemVvZigqcGcp
ICk7CiAgICAgICAgICAgICAgICAgICAgcGctPmZyYW1lX3BhY2tpbmcgPSBUVl9GUkFNRV9Q
TEFOQVI7CiAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCBwZy0+Y29tcF9vcmRlciwgIllV
ViIgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNl
IE1FVEVPUl9QSVhUWVBFX1lVVl9QQUNLRUQgOiAgICAvKiAgNENDIENvZGU6IFlVWTIgICov
CiAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCBwZywgJllVVl9oNDIyX3YxMTEsIHNpemVv
ZigqcGcpICk7CiAgICAgICAgICAgICAgICAgICAgcGctPmZyYW1lX3BhY2tpbmcgPSBUVl9G
UkFNRV9QQUNLRUQ7CiAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCBwZy0+Y29tcF9vcmRl
ciwgIllVWVYiICk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgIGNhc2UgTUVURU9SX1BJWFRZUEVfWVVWXzEyICAgICA6ICAg
IC8qICA0Q0MgQ29kZTogSVlVVi9JNDIwICAqLwogICAgICAgICAgICAgICAgICAgIG1lbWNw
eSggcGcsICZZVVZfaDQyMl92NDIyLCBzaXplb2YoKnBnKSApOwogICAgICAgICAgICAgICAg
ICAgIHBnLT5mcmFtZV9wYWNraW5nID0gVFZfRlJBTUVfUExBTkFSOwogICAgICAgICAgICAg
ICAgICAgIHN0cmNweSggcGctPmNvbXBfb3JkZXIsICJZVVYiICk7CiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlVuc3VwcG9ydGVkIHBpeGVsIHR5cGU6ICVk
XG4iLCBwZy0+dHlwZSApOwogICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAg
ICAgcGctPmluZGV4ICAgICAgID0gcGYuaW5kZXg7CiAgICB9Cn0KCi8qKkBCRUdJTkZVTkMq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldE51bVBpeEZtdHMo
CiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjLAogICAgICAgICAgICAgICAg
ICAgICAgVFZfVUlOVDMyICpudW0gKQoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVS
RUdldE50aFBpeEZtdCAoCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjLAog
ICAgICAgICAgICAgICAgICAgICAgVFZfVUlOVDMyIGluZGV4LAogICAgICAgICAgICAgICAg
ICAgICAgVFZfUElYRUxfR0VPTSAqZ2VvbSApCiAgICAgICAgICAgICAgICAgICAgICAKICAg
IFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5RHJpdmVySGFuZGxlKAog
ICAgICAgICAgICAgICAgICAgICAgVFZfQ0FQVFVSRSAqYywKICAgICAgICAgICAgICAgICAg
ICAgIFRWX1VJTlQzMiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICBUVl9JTlQzMiAq
aW5kZXggKQoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4
R2VvbSgKICAgICAgICAgICAgICAgICAgICAgIFRWX0NBUFRVUkUgKmMsCiAgICAgICAgICAg
ICAgICAgICAgICBUVl9QSVhFTF9HRU9NICpnZW9tLAogICAgICAgICAgICAgICAgICAgICAg
VFZfSU5UMzIgKmluZGV4ICkKCiAgICBQdXJwb3NlICAgIDogUXVlcnkgQVBJIGZvciB0aGUg
cGl4ZWwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgb3V0IGNhcHR1cmUKICAgICAgICAgICAgICAg
ICBkZXZpY2UuCgogICAgUHJvZ3JhbW1lciA6IDIwLUFwci05NyAgUmFuZGFsbCBIb3BwZXIK
CiAgICBQYXJhbWV0ZXJzIDogYyAgICAgIC0gSTogY2FwdHVyZSBzdHJ1Y3QKICAgICAgICAg
ICAgICAgICBudW0gICAgLSBPOiBudW0gcGl4ZWwgZm9ybWF0cwogICAgICAgICAgICAgICAg
IGluZGV4ICAtIEk6IGluZGV4IGludG8gcGl4ZWwgZm9ybWF0cyBsaXN0CiAgICAgICAgICAg
ICAgICAgaGFuZGxlIC0gSTogZHJpdmVyIGhhbmRsZSBmb3IgcGl4ZWwgZm9ybWF0CiAgICAg
ICAgICAgICAgICAgZ2VvbSAgIC0gTzogbnRoIHBpeGVsIGZvcm1hdCBkZWZpbml0aW9uCgog
ICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5E
RlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVHZXROdW1QaXhGbXRzKCBUVl9DQVBU
VVJFICpjLCBUVl9VSU5UMzIgKm51bSApCnsKICAgICpudW0gPSBjLT5waXhfZ2VvbV9saXN0
X2xlbjsKfQoKdm9pZCBUVkNBUFRVUkVHZXROdGhQaXhGbXQgKCBUVl9DQVBUVVJFICpjLCBU
Vl9VSU5UMzIgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZfUElYRUxf
R0VPTSAqZ2VvbSApCnsKICAgIGlmICggaW5kZXggPj0gYy0+cGl4X2dlb21fbGlzdF9sZW4g
KSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiVFZDQVBUVVJFR2V0TnRoUGl4Rm10OiBJ
bmRleCBvdXQgb2YgcmFuZ2VcbiIgKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgKmdl
b20gPSBjLT5waXhfZ2VvbV9saXN0WyBpbmRleCBdOwp9Cgp2b2lkIFRWQ0FQVFVSRUdldFBp
eEZtdEJ5RHJpdmVySGFuZGxlKCBUVl9DQVBUVVJFICpjLCBUVl9VSU5UMzIgaGFuZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVl9JTlQzMiAqaW5kZXgg
KQp7CiAgICBUVl9VSU5UMzIgaTsKCiAgICBmb3IgKCBpID0gMDsgaSA8IGMtPnBpeF9nZW9t
X2xpc3RfbGVuOyBpKysgKQogICAgICAgIGlmICggaGFuZGxlID09IGMtPnBpeF9nZW9tX2xp
c3RbaV0uaW5kZXggKQogICAgICAgICAgICBicmVhazsKICAgIAogICAgKmluZGV4ID0gKCBp
ID49IGMtPnBpeF9nZW9tX2xpc3RfbGVuICkgPyAtMSA6IGk7Cn0KCnN0YXRpYyBUVl9CT09M
IFRWQ0FQVFVSRU1hc2tJc2FCeXRlICggVFZfVUlOVDMyIG1hc2sgKQp7CiAgICBUVl9CT09M
ICBpc2FfYnl0ZSA9IEZBTFNFOwogICAgVFZfSU5UMzIgaTsKCiAgICBmb3IgKCBpID0gMDsg
aSA8IHNpemVvZiggbWFzayApOyBpKyssIG1hc2sgPj49IDggKQogICAgICAgIGlmICggbWFz
ayAmIDB4ZmYgKSB7CiAgICAgICAgICAgIGlmICgoIChtYXNrICYgMHhmZikgPT0gMHhmZiAp
ICYmICggKG1hc2sgPj4gOCkgPT0gMCApKQogICAgICAgICAgICAgICAgaXNhX2J5dGUgPSBU
UlVFOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICByZXR1cm4gaXNhX2J5dGU7
Cn0KCgp2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4R2VvbSggVFZfQ0FQVFVSRSAqYywg
VFZfUElYRUxfR0VPTSAqZ2VvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRWX0lOVDMyICppbmRleCApCnsKICAgIHN0YXRpYyAgICBUVl9CT09MIFNfcmVjdXJzaXZl
X2xvY2sgPSBGQUxTRTsKICAgIFRWX1VJTlQzMiBpOwoKICAgIGZvciAoIGkgPSAwOyBpIDwg
Yy0+cGl4X2dlb21fbGlzdF9sZW47IGkrKyApCiAgICAgICAgaWYgKCggZ2VvbS0+dHlwZSA9
PSBjLT5waXhfZ2VvbV9saXN0W2ldLnR5cGUgKSAmJgogICAgICAgICAgICAoIGdlb20tPkJw
cCAgPT0gYy0+cGl4X2dlb21fbGlzdFtpXS5CcHAgICkgJiYKICAgICAgICAgICAgIW1lbWNt
cCggZ2VvbS0+bWFzaywgYy0+cGl4X2dlb21fbGlzdFtpXS5tYXNrLAogICAgICAgICAgICAg
ICAgICAgICBzaXplb2YoIGdlb20tPm1hc2sgKSApICYmCiAgICAgICAgICAgICggZ2VvbS0+
c3dhcF9ieXRlcyA9PSBjLT5waXhfZ2VvbV9saXN0W2ldLnN3YXBfYnl0ZXMgICApICYmCiAg
ICAgICAgICAgICggZ2VvbS0+c3dhcF9zaG9ydHMgPT0gYy0+cGl4X2dlb21fbGlzdFtpXS5z
d2FwX3Nob3J0cyApKQogICAgICAgICAgICBicmVhazsKCiAgICAvKiAgSGFuZGxlIGEgZmV3
IG9mIHRoZSBzdHJhbmdlIGJ5dGUtc3dhcHBlZCBjb21iaW5hdGlvbnMgZm9yICAqLwogICAg
LyogICAgMyBhbmQgNCBicHAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KICAgIC8qICAgIFRoaXMgbGV0cyB1cyBkZWFsIHdpdGggdmlzdWFscyB0
aGF0IHJldHVybiBtYXNrcyBsaWtlICAgICovCiAgICAvKiAgICB0aGUgTWFjaDY0IHdoaWNo
IGlzIFJHQkEgZnJhbWUgYnVmZmVyICh3aXRoIHBpeG1hcCAgICAgICAqLwogICAgLyogICAg
ZGVwdGggb2YgMzIgd2l0aCB2aXN1YWwgbWFza3Mgb2YgZmYsZmYwMCxmZjAwMDApICAgICAg
ICAgKi8KICAgIGlmICggKCBpID49IGMtPnBpeF9nZW9tX2xpc3RfbGVuICkgJiYKICAgICAg
ICAgKCggZ2VvbS0+QnBwID09IDMgKSB8fCAoIGdlb20tPkJwcCA9PSA0ICkpICYmCiAgICAg
ICAgIFRWQ0FQVFVSRU1hc2tJc2FCeXRlKCBnZW9tLT5tYXNrWzBdICkgJiYKICAgICAgICAg
VFZDQVBUVVJFTWFza0lzYUJ5dGUoIGdlb20tPm1hc2tbMV0gKSAmJgogICAgICAgICBUVkNB
UFRVUkVNYXNrSXNhQnl0ZSggZ2VvbS0+bWFza1syXSApICkgewoKICAgICAgICBUVl9QSVhF
TF9HRU9NIGcgPSAqZ2VvbTsKCiAgICAgICAgZy5tYXNrWzBdID0gZ2VvbS0+bWFza1syXSwK
ICAgICAgICBnLm1hc2tbMl0gPSBnZW9tLT5tYXNrWzBdOwogICAgICAgIGcuc3dhcF9ieXRl
cyA9ICFnLnN3YXBfYnl0ZXM7CiAgICAgICAgaWYgKCBnLkJwcCA9PSA0ICkKICAgICAgICAg
ICAgZy5zd2FwX3Nob3J0cyA9ICFnLnN3YXBfc2hvcnRzOwogICAgfQogICAgCiAgICAqaW5k
ZXggPSAoIGkgPj0gYy0+cGl4X2dlb21fbGlzdF9sZW4gKSA/IC0xIDogaTsKfQoKCnZvaWQg
VFZDQVBUVVJFUHJpbnRQaXhlbEZvcm1hdHMoIFRWX0NBUFRVUkUgKmMgKQp7CiAgICBUVl9J
TlQzMiAgICAgICBpLAogICAgICAgICAgICAgICAgICAgaiwKICAgICAgICAgICAgICAgICAg
IGJwcCwKICAgICAgICAgICAgICAgICAgIHN3YXA7CiAgICBUVl9VSU5UMzIgICAgICBtYXNr
OwogICAgVFZfUElYRUxfR0VPTSAqcGc7CgogICAgLyogIER1bXAgY2FwdHVyZSBwaXhlbCBm
b3JtYXRzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgICovCgoKICAgIC8qICBQUklOVCBSR0Ig
Rk9STUFUUyAgKi8KICAgIFNVUFJJTlRGKCggIlxuU3VwcG9ydGVkIFJHQiBDYXB0dXJlIFBp
eGVsIEZvcm1hdHM6XG4iCiAgICAgICAiICAgYnBwICBCcHAgIFJHQiBNYXNrcyAgICAgICAg
ICAgICAgICAgICAgIFN3YXBcbiIKICAgICAgICIgICAtLS0gIC0tLSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAgLS0tLVxuIiApKTsKCiAgICBmb3IgKCBpID0gMDsgaSA8IGMt
PnBpeF9nZW9tX2xpc3RfbGVuOyBpKysgKSB7CiAgICAgICAgY2hhciAgICAgICAgICBzd2Fw
X2NoYXJzWzVdOwogICAgICAgIFRWX0lOVDMyICAgICAgajsKICAgICAgICBUVl9QSVhFTF9H
RU9NIHNjcmF0Y2g7CiAgICAgICAgVFZfQk9PTCAgICAgICBwcmludGl0ID0gVFJVRTsKCiAg
ICAgICAgcGcgPSAmYy0+cGl4X2dlb21fbGlzdFsgaSBdOwoKICAgICAgICBpZiAoIHBnLT50
eXBlICE9IFRWX1BJWEVMVFlQRV9SR0IgKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAKICAgICAgICAvKiAgQnJvd3NlIGxpc3QgYW5kIHNlZSBpZiB3ZSd2ZSBnb3Qgb3RoZXIg
cGl4ZWwgZm9ybWF0cyAgICAgICAgICAgKi8KICAgICAgICAvKiAgICB3aXRoIHRoZSBzYW1l
IHR5cGUvQnBwL21hc2sgYnV0IGRpZmZlcmVudCBzd2FwIHBlcm11dGF0aW9ucyAgKi8KICAg
ICAgICBtZW1zZXQoIHN3YXBfY2hhcnMsICcgJywgc2l6ZW9mKCBzd2FwX2NoYXJzICkgKTsK
ICAgICAgICBzd2FwX2NoYXJzWzRdID0gJ1wwJzsKCiAgICAgICAgZm9yICggc3dhcCA9IDA7
IHN3YXAgPCA0OyBzd2FwKysgKSB7CiAgICAgICAgICAgIHNjcmF0Y2ggICAgICAgICAgICAg
PSAqcGc7CiAgICAgICAgICAgIHNjcmF0Y2guc3dhcF9ieXRlcyAgPSAoc3dhcCAmIDB4MDEp
ICE9IDA7CiAgICAgICAgICAgIHNjcmF0Y2guc3dhcF9zaG9ydHMgPSAoc3dhcCAmIDB4MDIp
ICE9IDA7CgogICAgICAgICAgICBUVkNBUFRVUkVHZXRQaXhGbXRCeVBpeEdlb20oIGMsICZz
Y3JhdGNoLCAmaiApOwogICAgICAgICAgICBpZiAoIGogPCAwICkKICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIGogPCBpICkgewogICAgICAgICAgICAgICAg
cHJpbnRpdCA9IEZBTFNFOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgc3dhcF9jaGFyc1sgc3dhcCBdID0gIk5CV2IiWyBzd2FwIF07CiAgICAg
ICAgfQogICAgICAgIGlmICggIXByaW50aXQgKQogICAgICAgICAgICBjb250aW51ZTsKCiAg
ICAgICAgLyogIENhbGN1bGF0ZSBicHAgZnJvbSBtYXNrcyAgKi8KICAgICAgICBtYXNrID0g
cGctPm1hc2tbMF0gfCBwZy0+bWFza1sxXSB8IHBnLT5tYXNrWzJdOwogICAgICAgIGJwcCAg
PSAwOwogICAgICAgIHdoaWxlICggbWFzayAhPSAwICkgewogICAgICAgICAgICBpZiAoIG1h
c2sgJiAweDAxICkKICAgICAgICAgICAgICAgIGJwcCsrOwogICAgICAgICAgICBtYXNrID4+
PSAxOwogICAgICAgIH0KCiAgICAgICAgU1VQUklOVEYoKCAKICAgICAgICAgICAgIiAgICAl
MmQgICUyZCAgICUuOHgsICUuOHgsICUuOHggICVzXG4iLAogICAgICAgICAgICBicHAsIHBn
LT5CcHAsIHBnLT5tYXNrWzBdLCBwZy0+bWFza1sxXSwgcGctPm1hc2tbMl0sIAogICAgICAg
ICAgICBzd2FwX2NoYXJzICkpOwogICAgfQoKICAgIC8qICBQUklOVCBZVVYgRk9STUFUUyAg
Ki8KICAgIFNVUFJJTlRGKCggIlxuU3VwcG9ydGVkIFlVViBDYXB0dXJlIFBpeGVsIEZvcm1h
dHM6XG4iCiAgICAgICAiICAgWVVWU2l6ZSAgSFNhbXAgIFZTYW1wICBQYWNrICAgIENvbXBP
cmRlciAgVC0+QiAgTC0+UiAgWVRyYW5zXG4iCiAgICAgICAiICAgLS0tLS0tLSAgLS0tLS0g
IC0tLS0tICAtLS0tLS0gIC0tLS0tLS0tLSAgLS0tLSAgLS0tLSAgLS0tLS0tXG4iICkpOwoK
ICAgIGZvciAoIGkgPSAwOyBpIDwgYy0+cGl4X2dlb21fbGlzdF9sZW47IGkrKyApIHsKICAg
ICAgICBjaGFyICAgICAgICAgIHN3YXBfY2hhcnNbNV07CiAgICAgICAgVFZfSU5UMzIgICAg
ICBqOwogICAgICAgIFRWX1BJWEVMX0dFT00gc2NyYXRjaDsKICAgICAgICBUVl9CT09MICAg
ICAgIHByaW50aXQgPSBUUlVFOwoKICAgICAgICBwZyA9ICZjLT5waXhfZ2VvbV9saXN0WyBp
IF07CgogICAgICAgIGlmICggcGctPnR5cGUgIT0gVFZfUElYRUxUWVBFX1lVViApCiAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgIAogICAgICAgIFNVUFJJTlRGKCggCiAgICAgICAg
ICAiICAgICVkLCVkLCVkICAgJWQsJWQsJWQgICVkLCVkLCVkICAlLTdzICUtMTBzICAlLTVz
ICUtNnMgJXNcbiIsCiAgICAgICAgICBwZy0+c2FtcF9zaXplIFswXSwgcGctPnNhbXBfc2l6
ZSBbMV0sIHBnLT5zYW1wX3NpemUgWzJdLAogICAgICAgICAgcGctPnNhbXBfaW50X2hbMF0s
IHBnLT5zYW1wX2ludF9oWzFdLCBwZy0+c2FtcF9pbnRfaFsyXSwKICAgICAgICAgIHBnLT5z
YW1wX2ludF92WzBdLCBwZy0+c2FtcF9pbnRfdlsxXSwgcGctPnNhbXBfaW50X3ZbMl0sCiAg
ICAgICAgICAocGctPmZyYW1lX3BhY2tpbmcgPT0gVFZfRlJBTUVfUExBTkFSID8gIlBMQU5B
UiIgOiAiUEFDS0VEIiksCiAgICAgICAgICBwZy0+Y29tcF9vcmRlciwgCiAgICAgICAgICAo
cGctPm9yZGVyX3RfdG9fYiA/ICJZIiA6ICJOIiksIChwZy0+b3JkZXJfbF90b19yID8gIlki
IDogIk4iKSwKICAgICAgICAgIChwZy0+eV90cmFucyA/ICJZIiA6ICJOIikgKSk7CiAgICB9
CgogICAgU1VQUklOVEYoKCAiXG4iICkpOwp9CgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgog
ICAgUHJvdG90eXBlICA6IHN0YXRpYyB2b2lkIFRWQ0FQVFVSRUR1bXBDYXB0dXJlQ2FyZElu
Zm8oCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjICkKCiAgICBQdXJwb3Nl
ICAgIDogRHVtcCB1c2VmdWwgaW5mbyBhYm91dCB0aGUgY2FwdHVyZSBjYXJkIHRoYXQgY2Fu
IGJlCiAgICAgICAgICAgICAgICAgdXNlZCBieSBkZXZlbG9wZXJzIGZvciBkZWJ1Z2dpbmcu
CgogICAgUHJvZ3JhbW1lciA6IDA5LU1hci05OCAgUmFuZGFsbCBIb3BwZXIKCiAgICBQYXJh
bWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgZGVmaW5pdGlvbiBzdHJ1Y3QgCiAgICAgICAgICAg
ICAgICAgICAgICAgICh3aXRoIG9wZW4gaGFuZGxlcyB0byB0dW5lciBhbmQgY2FwdHVyZSBk
ZXZpY2VzKQoKICAgIFJldHVybnMgICAgOiBOb25lLgoKICAgIEdsb2JhbHMgICAgOiBOb25l
LgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KCnN0YXRpYyB2b2lkIFRWQ0FQVFVSRUR1bXBD
YXB0dXJlQ2FyZEluZm8oIFRWX0NBUFRVUkUgKmMgKQp7CiAgICBzdHJ1Y3QgZWVQcm9tICAg
ZWVwcm9tOwogICAgdV9jaGFyICAgICAgICAgKnA7CiAgICBpbnQgICAgICAgICAgICAgeDsK
ICAgIGludCAgICAgICAgICAgICBjbnQ7CiAgICBUVl9JTlQzMiAgICAgICAgZWVwcm9tX3Np
emU7CiAgICBGSUxFICAgICAgICAgICAqZnA7CiAgICBjaGFyICAgICAgICAgICAgbGluZWJ1
ZlsxMjhdOwoKICAgIC8qICBHcmFiIHRoZSBwZXJ0aW5lbnQgZG1lc2cgb3V0cHV0ICAqLwog
ICAgcHJpbnRmKCAiREVURUNURUQgQ0FQVFVSRSBDQVJEKFMpIFtEUklWRVIgUFJPQkVTXTpc
biIgKTsKICAgIGlmICggKGZwID0gcG9wZW4oICJkbWVzZyIsICJyIiApKSA9PSBOVUxMICkK
ICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIgICAgRmFpbGVkIHRvIGR1bXAgZG1lc2cgb3V0
cHV0LlxuIiApOwogICAgZWxzZSB7CiAgICAgICAgLyogIEZJWE1FOiAgUGFyc2luZyBib290
LXVwcyBpcyBCQUQuICBNYWtlIHRoZSBkcml2ZXIgcmV0dXJuIHRoaXMgICovCiAgICAgICAg
LyogICAgICAgICAgdmlhIGlvY3RsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCiAgICAgICAgd2hpbGUgKCAhZmVvZihmcCkgKSB7CiAgICAgICAg
ICAgIGlmICggZmdldHMoIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCApID09IE5V
TEwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGlmICggc3RybmNtcCgg
bGluZWJ1ZiwgImJrdHIiLCA0ICkgPT0gMCApIHsKICAgICAgICAgICAgICAgIHByaW50Zigg
IiAgICAlcyIsIGxpbmVidWYgKTsKICAgICAgICAgICAgICAgIGlmICggZmdldHMoIGxpbmVi
dWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCkgIT0gTlVMTCApCiAgICAgICAgICAgICAgICAg
ICAgcHJpbnRmKCAiICAgICVzIiwgbGluZWJ1ZiApOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICAgIHBjbG9zZShmcCk7CiAgICB9CgogICAgLyogIER1bXAgdGhlIHJlbGV2ZW50
IGJrdHIgZHJpdmVyIHN5c2N0bCB2YWx1ZXMgKGlmIHByZXNlbnQpICAqLwogICAgcHJpbnRm
KCAiXG5TWVNDVEwgTUlCIFZBTFVFUzpcbiIgKTsKICAgIGlmICggKGZwID0gcG9wZW4oICJz
eXNjdGwga2Vybi52ZXJzaW9uIGh3LmJ0ODQ4IiwgInIiICkpID09IE5VTEwgKQogICAgICAg
IGZwcmludGYoIHN0ZGVyciwgIiAgICBGYWlsZWQgdG8gZHVtcCBzeXNjdGwgb3V0cHV0Llxu
IiApOwogICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKCAhZmVvZihmcCkgKSB7CiAgICAgICAg
ICAgIGlmICggZmdldHMoIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCApID09IE5V
TEwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHByaW50ZiggIiAgICAl
cyIsIGxpbmVidWYgKTsKICAgICAgICB9CiAgICAgICAgcGNsb3NlKGZwKTsKICAgIH0KICAg
IAoKICAgIC8qICBSZWFkIHRoZSBjYXJkIHNpZ25hdHVyZSAgKi8KICAgIGVlcHJvbS5vZmZz
ZXQgPSAweDAxOwogICAgZWVwcm9tLmNvdW50ICA9IDEyODsKCiAgICBpZiAoIGlvY3RsKCBj
LT50ZmQsIEJUODQ4X1NJR05BVFVSRSwgJmVlcHJvbSApIDwgMCApCiAgICAgICAgRE9fSU9D
VExfR0VSUiggIkJUODQ4X1NJR05BVFVSRSIgKTsKICAgIGVsc2UgewogICAgICAgIHByaW50
ZiggIlxuVFVORVIgU0lHTkFUVVJFICgweCUwMnggLSAweCUwMngpOlxuIiwKICAgICAgICAg
ICAgICAgIGVlcHJvbS5vZmZzZXQsCiAgICAgICAgICAgICAgICAoMiAqICgoZWVwcm9tLm9m
ZnNldCAtIDEpICsgZWVwcm9tLmNvdW50KSkgLSAxICk7CiAgICAgICAgZm9yICggcCA9ICZl
ZXByb20uYnl0ZXNbIDAgXSwgeCA9IDA7IHggPCAxNjsgKyt4ICkgewogICAgICAgICAgICBp
ZiAoICh4ICUgMTYpID09IDAgKQogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgICAiLCAo
KHggPiAwKSA/ICJcbiIgOiAiIikgKTsKICAgICAgICAgICAgcHJpbnRmKCAiICUwMngiLCBw
WyB4IF0gKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICAKICAgICAg
ICBwcmludGYoICJcblRVTkVSIEkyQyBERVZJQ0VTIEZPVU5EIEFUOlxuICAgIiApOwogICAg
ICAgIGNudCA9IDA7CiAgICAgICAgZm9yICggcCA9ICZlZXByb20uYnl0ZXNbIDAgXSwgeCA9
IDA7IHggPCAxMjg7ICsreCApCiAgICAgICAgICAgIGlmICggcFsgeCAvIDggXSAmICgxIDw8
ICh4ICUgOCkpICkgewogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgMHglMDJ4IiwgKChj
bnQgPiAwKSA/ICIsIiA6ICIiKSwgeCAqIDIgKTsKICAgICAgICAgICAgICAgIGNudCsrOwog
ICAgICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICB9CgogICAgLyogIFJl
YWQgdGhlIEVFUFJPTSAgKi8KICAgIC8qICAgIEZJWE1FOiAgVGhlcmUncyBubyB3YXkgdG8g
cXVlcnkgdGhlIHNpemUgb2YgdGhlIEVFUFJPTSBmcm9tIHRoZSAgICovCiAgICAvKiAgICBh
cHAsIGFuZCB0aGUgZHJpdmVyIGJhaWxzIGlmIHRoZSByZXF1ZXN0IGlzIHRvbyBiaWcuICBN
b2RpZnkgdGhlICAqLwogICAgLyogICAgZHJpdmVyIHRvIHJldHVybiB0aGUgRUVQUk9NIHNp
emUuICBGb3Igbm93LCB1c2UgYSBoZXVyaXN0aWMuICAgICAgKi8KICAgIGVlcHJvbS5vZmZz
ZXQgPSAwOwogICAgZWVwcm9tLmNvdW50ICA9IDI1NjsKICAgIGlmICggaW9jdGwoIGMtPnRm
ZCwgQlQ4NDhfUkVFUFJPTSwgJmVlcHJvbSApIDwgMCApIHsKICAgICAgICBlZXByb20uY291
bnQgPSAxMjg7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9SRUVQUk9NLCAm
ZWVwcm9tICkgPCAwICkgewogICAgICAgICAgICBlZXByb20uY291bnQgPSAwOwogICAgICAg
ICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfUkVFUFJPTSIgKTsKICAgICAgICB9CiAgICB9
CiAgICBwcmludGYoICJcbkNBUFRVUkUgQ0FSRCBFRVBST00gQ09OVEVOVFM6XG4iCiAgICAg
ICAgICAgICIgICBSZWFkICVkIEVFUFJPTSBieXRlcyAiLCBlZXByb20uY291bnQgKTsKICAg
IGlmICggZWVwcm9tLmNvdW50ID09IDAgKQogICAgICAgIHByaW50ZiggIlxuIiApOwogICAg
ZWxzZSB7CiAgICAgICAgcHJpbnRmKCAiKDB4MDAgLSAweCUuMngpXG4iLCBlZXByb20uY291
bnQtMSApOwoKICAgICAgICBmb3IgKCBwID0gJmVlcHJvbS5ieXRlc1sgMCBdLCB4ID0gMDsg
eCA8IGVlcHJvbS5jb3VudDsgKyt4ICkgewogICAgICAgICAgICBpZiAoICh4ICUgMTYpID09
IDAgKQogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgICAiLCAoKHggPiAwKSA/ICJcbiIg
OiAiIikgKTsKICAgICAgICAgICAgcHJpbnRmKCAiICUwMngiLCBwWyB4IF0gKTsKICAgICAg
ICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICB9CgogICAgLyogIEl0J2QgYWxzbyBi
ZSBoZWxwZnVsIHRvIGJlIGFibGUgdG8gcHJpbnQgdGhlIGJrdHIgZHJpdmVyIHZlcnNpb24g
ICovCn0KCiAgICAgICAgICAgIAoKCi8qKkBCRUdJTkZVTkMqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIFByb3Rv
dHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUluaXQoCiAgICAgICAgICAgICAgICAgICAgICBUVl9D
QVBUVVJFICpjICkKCiAgICBQdXJwb3NlICAgIDogSW5pdGlhbGl6ZSB0aGUgY2FwdHVyZSBh
dHRyaWJ1dGVzLgoKICAgIFByb2dyYW1tZXIgOiAwMy1NYXItOTcgIFJhbmRhbGwgSG9wcGVy
CgogICAgUGFyYW1ldGVycyA6IGMgICAgICAgLSBJL086IENhcHR1cmUgZGVmaW5pdGlvbiBz
dHJ1Y3R1cmUgCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IEdf
dHZjYXB0dXJlCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVJbml0
KCBUVl9DQVBUVVJFICpjICkKewogICAgY2hhciBkZXZfY2FwdHVyZVs4MF0sCiAgICAgICAg
IGRldl90dW5lciAgWzgwXTsKCiAgICAvKiAgQnVpbGQgbmFtZXMgb2YgY2FwdHVyZSBhbmQg
dHVuZXIgZGV2aWNlcyAgKi8KICAgIHNwcmludGYoIGRldl9jYXB0dXJlLCBERVZfQlQ4NDgs
IEFwcF9yZXMuZGV2aWNlX251bWJlciApOwogICAgc3ByaW50ZiggZGV2X3R1bmVyICAsIERF
Vl9UVU5FUiwgQXBwX3Jlcy5kZXZpY2VfbnVtYmVyICk7CgogICAgYy0+ZmQgPSBvcGVuKCBk
ZXZfY2FwdHVyZSwgT19SRE9OTFkgKTsKICAgIGlmICggYy0+ZmQgPCAwICkgewogICAgICAg
IGZwcmludGYoIHN0ZGVyciwgIm9wZW4oXCIlc1wiKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAg
ICAgICAgICAgICBkZXZfY2FwdHVyZSwgc3RyZXJyb3IoZXJybm8pICk7CiAgICAgICAgZXhp
dCgxKTsKICAgIH0KICAgIGMtPnRmZCA9IG9wZW4oIGRldl90dW5lciwgT19SRE9OTFkgKTsK
ICAgIGlmICggYy0+dGZkIDwgMCApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJvcGVu
KFwiJXNcIikgZmFpbGVkOiAlc1xuIiwgCiAgICAgICAgICAgICAgICAgZGV2X3R1bmVyICAs
IHN0cmVycm9yKGVycm5vKSApOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgLyogIER1
bXAgZGVidWcgaW5mbyBvbiBjYXB0dXJlIGNhcmQgICovCiAgICBpZiAoIEdfZGVidWcgJiBE
RUJVR19TVEFSVFVQICkKICAgICAgICBUVkNBUFRVUkVEdW1wQ2FwdHVyZUNhcmRJbmZvKCBj
ICk7CgogICAgLyogIE11dGUgdGhlIGF1ZGlvIHVudGlsIHN1Y2ggdGltZSBhcyB3ZSdyZSBy
ZWFkeSB0byBkaXNwbGF5ICAqLwogICAgVFZDQVBUVVJFU2V0QXVkaW9NdXRlKCBjLCBUUlVF
ICk7CgogICAgLyogIEp1c3QgbW1hcCB0aGUgYmlnZ2VzdCBidWZmZXIgd2UnbGwgbmVlZCBh
bmQgYmUgZG9uZSB3aXRoIGl0LiAgKi8KICAgIC8qICAgIChCdWZmZXIgdXNlZCBmb3Igbm9u
LWRpcmVjdHZpZGVvIGNhcHR1cmVzKSAgICAgICAgICAgICAgICAgICovCiAgICBjLT5kcnZf
YnVmID0gKFRWX1VJTlQ4ICopIG1tYXAoIChjYWRkcl90KTAsIE1BWF9NTUFQX0JVRl9TSVpF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIE1BUF9T
SEFSRUQsIGMtPmZkLCAob2ZmX3QpMCApOwogICAgaWYgKCBjLT5kcnZfYnVmID09IChUVl9V
SU5UOCAqKSAtMSApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJtbWFwIG9mIGRyaXZl
ciBidWZmZXIgZmFpbGVkOiAlc1xuIiwgCiAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJy
bm8pICk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBjLT5pbnB1dF9mb3JtYXQgICAg
PSBUVl9JTlBVVF9OVFNDTTsKICAgIGMtPmlucHV0X2RldiAgICAgICA9IE1FVEVPUl9JTlBV
VF9ERVYwOwogICAgYy0+YXVkaW9faW5wdXRfZGV2ID0gVFZfQVVESU9fSU5QVVRfQVVUTzsK
CiAgICBjLT5icHBfZm9ybWF0ICAgICAgPSBNRVRFT1JfR0VPX1JHQjE2OwogICAgYy0+Y2Fw
X21vZGUgICAgICAgID0gVFZfQ0FQVFVSRV9DT05USU5VT1VTOwogICAgYy0+eGZlcl9tb2Rl
ICAgICAgID0gVFZfVFJBTlNGRVJfRElSRUNUOwoKICAgIFRWQ0FQVFVSRVF1ZXJ5UGl4ZWxG
b3JtYXRzKCBjLCAmYy0+cGl4X2dlb21fbGlzdCwgJmMtPnBpeF9nZW9tX2xpc3RfbGVuKTsK
ICAgIGlmICggYy0+cGl4X2dlb21fbGlzdF9sZW4gPT0gMCApIHsKICAgICAgICBmcHJpbnRm
KCBzdGRlcnIsICJjYXB0dXJlIGRldmljZSBzdXBwb3J0cyAwIHBpeGVsIGZvcm1hdHNcbiIg
KTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgYy0+cGl4X2dlb21faWR4ID0gMDsKCiAg
ICAvKiAgRklYTUU6IFRoaXMgaXMgYSBoYWNrIC0tIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBx
dWVyeSB3aGV0aGVyIHRoZSAgKi8KICAgIC8qICAgIHRoZSB0dW5lciBpcyBzZXQgdG8gYSBz
cGVjaWZpYyBjaGFubmVsIG51bWJlciBvciB3aGV0aGVyIGFuICAgICAqLwogICAgLyogICAg
b2ZmLWNoYW5uZWwgZnJlcXVlbmN5IG92ZXJyaWRlIGlzIGluLXBsYWNlLiAgICAgICAgICAg
ICAgICAgICAgICovCiAgICBjLT50dW5lcl9jaGFuX2FjdGl2ZSA9IFRSVUU7CgogICAgVFZD
QVBUVVJFUHJpbnRQaXhlbEZvcm1hdHMoIGMgKTsKCiAgICBjLT5maWVsZF90YXJnWzBdID0g
VFZfRklFTERfRElTUExBWTsKICAgIGMtPmZpZWxkX3RhcmdbMV0gPSBUVl9GSUVMRF9ESVNQ
TEFZOwogICAgYy0+aHVlICAgICAgICAgICA9ICAgMC4wOyAvKiAlICovCiAgICBjLT5icmln
aHRuZXNzICAgID0gKzIwLjA7IC8qICUgKi8KICAgIGMtPmNvbnRyYXN0ICAgICAgPSAgNzAu
MDsgLyogJSAqLwogICAgYy0+c2F0X3UgICAgICAgICA9ICAxMDAuMDsgLyogJSAqLwogICAg
Yy0+c2F0X3YgICAgICAgICA9ICAxMDAuMDsgLyogJSAqLwogICAgYy0+YWRkciAgICAgICAg
ICA9IE5VTEw7CiAgICAvKiAgZ2VvbSAtLSBzZWUgYmVsb3cgKi8KCiAgICBjLT5mcmFtZV9k
b25lX2NiICAgID0gTlVMTDsKICAgIGMtPmZyYW1lX2NiX2VuYWJsZWQgPSBGQUxTRTsKCiAg
ICAvKiAgRklYTUU6IFRoZXNlIGJlbG9uZyBpbiB0aGUgZHJpdmVyL2RyaXZlciBpbmNsdWRl
IGZpbGUgICovCiAgICBjLT53aWR0aF9taW4gID0gMjsKICAgIGMtPndpZHRoX3JlcyAgPSAy
OwogICAgYy0+aGVpZ2h0X21pbiA9IDI7CiAgICBjLT5oZWlnaHRfcmVzID0gMjsKICAgIHN3
aXRjaCAoIGMtPmlucHV0X2Zvcm1hdCApIHsKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NN
IDoKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NKIDoKICAgICAgICBjYXNlIFRWX0lOUFVU
X1BBTE0gIDoKICAgICAgICAgICAgYy0+d2lkdGhfbWF4ICA9IE5UU0NfRElNX1g7CiAgICAg
ICAgICAgIGMtPmhlaWdodF9tYXggPSBOVFNDX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNf
bWF4ICAgID0gTlRTQ19GUFM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVFZf
SU5QVVRfUEFMQkRHSEkgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTiAgICAgOgogICAg
ICAgIGNhc2UgVFZfSU5QVVRfU0VDQU0gICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFM
TkNPTUIgOgogICAgICAgICAgICBjLT53aWR0aF9tYXggID0gUEFMX0RJTV9YOwogICAgICAg
ICAgICBjLT5oZWlnaHRfbWF4ID0gUEFMX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4
ICAgID0gUEFMX0ZQUzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdCAgICAg
ICAgICAgICAgICA6CiAgICAgICAgY2FzZSBUVl9JTlBVVF9BVVRPICAgICA6CiAgICAgICAg
ICAgIGZwcmludGYoIHN0ZGVyciwgCiAgICAgICAgICAgICAiVFZDQVBUVVJFSW5pdDogVW5z
dXBwb3J0ZWQgaW5wdXQgZm9ybWF0ICVkXG4iLCBjLT5pbnB1dF9mb3JtYXQgKTsKICAgICAg
ICAgICAgZXhpdCgxKTsKICAgIH0KICAgIGMtPmZwcyAgICAgICAgICAgPSBjLT5mcHNfbWF4
OwogICAgCiAgICBjLT5nZW9tLnggPSBjLT5nZW9tLnkgPSAwOyAvKiAgVW51c2VkICAqLwog
ICAgYy0+Z2VvbS53ID0gYy0+d2lkdGhfbWF4IDsKICAgIGMtPmdlb20uaCA9IGMtPmhlaWdo
dF9tYXg7CgogICAgYy0+Y29udGluX29uICAgICA9IEZhbHNlOwoKICAgIHNpZ25hbCggU0lH
VVNSMSwgVFZDQVBUVVJFRnJhbWVEb25lU2lnSGRsciApOwogICAgYXRleGl0KCBUVkNBUFRV
UkVEZXN0cm95ICk7Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBQcm90b3R5cGUg
IDogdm9pZCBUVkNBUFRVUkVTZXRDYXB0dXJlTW9kZSgKICAgIFByb3RvdHlwZSAgOiB2b2lk
IFRWQ0FQVFVSRVNldFRyYW5zZmVyTW9kZSgKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQ
VFVSRVNldFJlZ2lvbkdlb20oCiAgICBQcm90b3R5cGUgIDogdm9pZCBUVkNBUFRVUkVTZXRQ
aXhlbEdlb20oCgogICAgUHVycG9zZSAgICA6IFJvdXRpbmVzIHdoaWNoIHNldCB0aGUgY29y
ZSBjYXB0dXJlIHBhcmFtZXRlcnMuCgogICAgICAgICAgICAgICAgIEl0IHdvdWxkIGJlIGdv
b2QgcG9saWN5IHRvIHNldCBhbGwgdGhlc2UgYmVmb3JlIGV2ZXJ5CiAgICAgICAgICAgICAg
ICAgY2FwdHVyZS4KCiAgICBQcm9ncmFtbWVyIDogMDYtSnVuLTk3ICBSYW5kYWxsIEhvcHBl
cgoKICAgIFBhcmFtZXRlcnMgOiBjICAgICAgICAgLSBJOiBjYXB0dXJlIGRlZmluaXRpb24K
ICAgICAgICAgICAgICAgICBjYXBfbW9kZSAgLSBJOiBuZXcgY2FwdHVyZS90cmFuc2ZlciBt
b2RlcyAoc2luZ2xlL2NvbnRpbikKICAgICAgICAgICAgICAgICB4ZmVyX21vZGUgLSBJOiBp
bWFnZXMgKGRyaXZlciBidWYpIG9yIGRpcmVjdCB2aWRlbwogICAgICAgICAgICAgICAgIHJl
Z19nZW9tICAtIEk6IGltYWdlIHJlcyAoJiBvcmlnaW4sIGZvciBkaXJlY3QgdmlkZW8pCiAg
ICAgICAgICAgICAgICAgcGl4X2dlb20gIC0gSTogY2FwdHVyZWQgcGl4ZWwgZ2VvbWV0cnkg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlcyBvbmx5OyBpZ25vcmVk
IGZvciB4ZmVyX21vZGUgPSBESVJFQ1QpCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAg
R2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNB
UFRVUkVTZXRDYXB0dXJlTW9kZSggCiAgICAgICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAg
ICAgICAgVFZfQ0FQVFVSRV9NT0RFICBjYXBfbW9kZSApCnsKICAgIGlmICggYy0+Y29udGlu
X29uID09IFRSVUUgKSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU2V0Q2FwdHVyZU1v
ZGUgY2FsbGVkIHdoZW4gY29udGluIHJ1bm5pbmdcbiIgKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICBjLT5jYXBfbW9kZSA9IGNhcF9tb2RlOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRU
cmFuc2Zlck1vZGUoIAogICAgICAgICBUVl9DQVBUVVJFICAgICAgICpjLAogICAgICAgICBU
Vl9UUkFOU0ZFUl9NT0RFICB4ZmVyX21vZGUgKQp7CiAgICBpZiAoIGMtPmNvbnRpbl9vbiA9
PSBUUlVFICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlNldFRyYW5zZmVyTW9kZSBj
YWxsZWQgd2hlbiBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0K
ICAgIGMtPnhmZXJfbW9kZSA9IHhmZXJfbW9kZTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0UmVn
aW9uR2VvbSggCiAgICAgICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAgICAgICAgVFZfR0VP
TSAgICAgICAgICpyZWdfZ2VvbSApCnsKICAgIGlmICggYy0+Y29udGluX29uID09IFRSVUUg
KSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU2V0UmVnaW9uR2VvbSBjYWxsZWQgd2hl
biBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPmdl
b20gPSAqcmVnX2dlb207Cn0KCgp2b2lkIFRWQ0FQVFVSRVNldFBpeGVsR2VvbSggCiAgICAg
ICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAgICAgICAgVFZfUElYRUxfR0VPTSAgICpwaXhf
Z2VvbSApCnsKICAgIFRWX0lOVDMyIGlkeDsKCiAgICBpZiAoIGMtPmNvbnRpbl9vbiA9PSBU
UlVFICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlNldFBpeGVsR2VvbSBjYWxsZWQg
d2hlbiBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBU
VkNBUFRVUkVHZXRQaXhGbXRCeURyaXZlckhhbmRsZSggYywgcGl4X2dlb20tPmluZGV4LCAm
aWR4ICk7CiAgICBpZiAoKCBpZHggPCAwICkgfHwgKCBpZHggPj0gYy0+cGl4X2dlb21fbGlz
dF9sZW4gKSkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRUNvbmZpZ3Vy
ZTogQmFkIHBpeGVsIGZvcm1hdCBpbmRleFxuIiApOwogICAgICAgIGV4aXQoMSk7CiAgICB9
CiAgICBjLT5waXhfZ2VvbV9pZHggID0gaWR4Owp9CgovKiAgVFZDQVBUVVJFVmFsaWRSZWdp
b25HZW9tICAtICBWYWxpZGF0ZXMgY2FwdHVyZSByZXNvbHV0aW9uICAqLwpUVl9CT09MIFRW
Q0FQVFVSRVZhbGlkUmVnaW9uR2VvbSgKICAgICAgICAgICAgVFZfQ0FQVFVSRSAgICAgICpj
LAogICAgICAgICAgICBUVl9HRU9NICAgICAgICAgKnJlZ19nZW9tICkKewogICAgVFZfSU5U
MzIgdywgaDsKCiAgICB3ID0gcmVnX2dlb20tPncgLyBjLT53aWR0aF9yZXMgICogYy0+d2lk
dGhfcmVzOwogICAgaCA9IHJlZ19nZW9tLT5oIC8gYy0+aGVpZ2h0X3JlcyAqIGMtPmhlaWdo
dF9yZXM7CgogICAgdyA9IE1BWCggYy0+d2lkdGhfbWluICwgTUlOKCBjLT53aWR0aF9tYXgg
LCB3ICkgKTsKICAgIGggPSBNQVgoIGMtPmhlaWdodF9taW4sIE1JTiggYy0+aGVpZ2h0X21h
eCwgaCApICk7CgogICAgcmV0dXJuICgoIHcgPT0gcmVnX2dlb20tPncgKSB8fCAoIGggPT0g
cmVnX2dlb20tPmggKSk7Cn0KCgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90
eXBlICA6IFRWX0JPT0wgVFZDQVBUVVJFQ29uZmlndXJlKAogICAgICAgICAgICAgICAgICAg
ICAgVFZfQ0FQVFVSRSAgICAgICAqYywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAg
ICAgICAgICAqKmZhaWxfcmVhc29uICkKCiAgICBQdXJwb3NlICAgIDogTG9va3MgYXQgdGhl
IHJlcXVlc3RlZCBjYXB0dXJlIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMKICAgICAgICAg
ICAgICAgICB3aGV0aGVyIGNhcHR1cmUgY2FuIGJlIHN0YXJ0ZWQgdXNpbmcgdGhlIGN1cnJl
bnQgc2V0dGluZ3MuCiAgICAgICAgICAgICAgICAgCiAgICBQcm9ncmFtbWVyIDogMDMtTWFy
LTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBjICAgICAgICAgICAtIEk6
IGNhcHR1cmUgZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIGZhaWxfcmVhc29uIC0gTzog
aWYgY29uZmlndXJlIGZhaWxlZCwgcmVhc29uIHdoeSAoc3RyaW5nKQoKICAgIFJldHVybnMg
ICAgOiBUID0gUGFyYW1zIE9LIC0gY2FwdHVyZSBhd2F5OyBGID0gTm9wZSwgdHdlYWsgc29t
ZXRoaW4nCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwoKVFZfQk9PTCBUVkNBUFRVUkVDb25maWd1cmUoIFRWX0NBUFRVUkUgICAgICAgKmMsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICoqZmFpbF9yZWFz
b24gKQp7CiAgICBzdGF0aWMgY2hhciBTX2Vycl9tc2dbIDEyOCBdOwoKICAgIFRWX0JPT0wg
ICAgICAgICAgIG9rID0gRkFMU0U7CiAgICBUVl9YU0NSRUVOICAgICAgICp4ID0gJkdfZ2xv
Yi54OwogICAgVFZfRElTUExBWSAgICAgICAqZCA9ICZHX2dsb2IuZGlzcGxheTsKICAgIFRW
X0dFT00gICAgICAgICAgIGc7CiAgICBUVl9VSU5UMzIgICAgICAgICBhZGRyOwogICAgVFZf
SU5UMzIgICAgICAgICAgQnBwLAogICAgICAgICAgICAgICAgICAgICAgaWR4OwoKICAgIGlm
ICggYy0+Y29udGluX29uID09IFRSVUUgKSB7CiAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2cs
ICJDb250aW51b3VzIGlzIHJ1bm5pbmciICk7CiAgICAgICAgZ290byBSRVRVUk47CiAgICB9
CgogICAgaWYgKCBjLT5mcmFtZV9jYl9lbmFibGVkICYmICFjLT5mcmFtZV9kb25lX2NiICkg
ewogICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAiRnJhbWUgZG9uZSBjYWxsYmFjayBvbiwg
YnV0IG5vIGZyYW1lIGhhbmRsZXIiICk7CiAgICAgICAgZ290byBSRVRVUk47CiAgICB9Cgog
ICAgaWYgKCggYy0+eGZlcl9tb2RlID09IFRWX1RSQU5TRkVSX0RJUkVDVCApICYmICggZC0+
d2luID09IE5vbmUgKSkgewogICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAiTm8gWCBXaW5k
b3cgc2V0IGZvciB2aWRlbyIgKTsKICAgICAgICBnb3RvIFJFVFVSTjsKICAgIH0KCiAgICBp
ZiAoIGMtPnhmZXJfbW9kZSA9PSBUVl9UUkFOU0ZFUl9ESVJFQ1QgKQogICAgICAgIGlmICgg
ISggeC0+dmlzdWFsX21vZGVzWyB4LT5hY3RpdmVfdmlzdWFsIF0gJiBUVl9UUkFOU0ZFUl9E
SVJFQ1QgKSkgewogICAgICAgICAgICBzdHJjcHkoIFNfZXJyX21zZywgIkFjdGl2ZSB2aXN1
YWwgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3QgdmlkZW8iKTsKICAgICAgICAgICAgZ290byBS
RVRVUk47CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCAhZC0+ZW5hYmxlZCApIHsKICAg
ICAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2csICJEaXJlY3QgdHJhbnNmZXIgb25seSBzdXBw
b3J0ZWQgZm9yIHZpZGVvIiApOwogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9
CgogICAgLyogIEdldCBjYXB0dXJlIGdlb21ldHJ5ICAqLwogICAgaWYgKCBjLT54ZmVyX21v
ZGUgPT0gVFZfVFJBTlNGRVJfRElSRUNUICkgewogICAgICAgIFRWU0NSRUVOVXBkYXRlV2lu
R2VvbWV0cnkoKTsKICAgICAgICBUVlNDUkVFTkdldFZpZGVvV2luR2VvbSggJmcgKTsKICAg
ICAgICBnLncgPSBnLncgLyBjLT53aWR0aF9yZXMgICogYy0+d2lkdGhfcmVzOwogICAgICAg
IGcuaCA9IGcuaCAvIGMtPmhlaWdodF9yZXMgKiBjLT5oZWlnaHRfcmVzOwogICAgfQogICAg
ZWxzZQogICAgICAgIGcgPSBjLT5nZW9tOwogICAgCiAgICAvKiAgVmVyaWZ5IHJlcyBsaW1p
dHMgYW5kIHByZWNpc2lvbiAoYWxsIG1vZGVzKSAgKi8KICAgIGlmICgoIGcudyAhPSBnLncg
LyBjLT53aWR0aF9yZXMgICogYy0+d2lkdGhfcmVzICApIHx8CiAgICAgICAgKCBnLmggIT0g
Zy5oIC8gYy0+aGVpZ2h0X3JlcyAqIGMtPmhlaWdodF9yZXMgKSkgewogICAgICAgIHNwcmlu
dGYoIFNfZXJyX21zZywgIkNhcHR1cmUgZ2VvbWV0cnkgbXVzdCBiZSBhIG11bHRpcGxlIG9m
ICVkeCVkIiwKICAgICAgICAgICAgICAgICBjLT53aWR0aF9yZXMsIGMtPmhlaWdodF9yZXMg
KTsKICAgICAgICBnb3RvIFJFVFVSTjsKICAgIH0KCiAgICBpZiAoKCBnLncgPCBjLT53aWR0
aF9taW4gICkgfHwgKCBnLncgPiBjLT53aWR0aF9tYXggICApIHx8CiAgICAgICAgKCBnLmgg
PCBjLT5oZWlnaHRfbWluICkgfHwgKCBnLmggPiBjLT5oZWlnaHRfbWF4ICApKSB7CiAgICAg
ICAgc3RyY3B5KCBTX2Vycl9tc2csIAogICAgICAgICAgICAgICAgIlJlc29sdXRpb24gYmV5
b25kIGhhcmR3YXJlIG9yIGRyaXZlciBjYXBhYmlsaXRpZXMiICk7CiAgICAgICAgZ290byBS
RVRVUk47CiAgICB9CgogICAgLyogIERpcmVjdC12aWRlbyBtb2RlIHNwZWNpZmljIGNoZWNr
cyAgKi8KICAgIGlmICggYy0+eGZlcl9tb2RlID09IFRWX1RSQU5TRkVSX0RJUkVDVCApIHsK
CiAgICAgICAgaWYgKCAhKHgtPnZpc3VhbF9tb2Rlc1sgeC0+YWN0aXZlX3Zpc3VhbCBdICYg
VFZfVFJBTlNGRVJfRElSRUNUKSApIHsKICAgICAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2cs
IAogICAgICAgICAgICAgICAgICAgICJBY3RpdmUgWCBWaXN1YWwgZG9lcyBub3Qgc3VwcG9y
dCBkaXJlY3QgdmlkZW8iICk7CiAgICAgICAgICAgIGdvdG8gUkVUVVJOOwogICAgICAgIH0K
ICAgICAgICBpZiAoIHgtPnZpc3VhbFsgeC0+YWN0aXZlX3Zpc3VhbCBdLnZpc3VhbGlkICE9
IAogICAgICAgICAgICAgICB4LT5mYl92aXN1YWwtPnZpc3VhbGlkICkgewogICAgICAgICAg
ICBzdHJjcHkoIFNfZXJyX21zZywgCiAgICAgICAgICAgICAgICAgICAgIkFjdGl2ZSBYIFZp
c3VhbCBpcyBub3QgdGhlIGRlZmF1bHQgdmlzdWFsIiApOwogICAgICAgICAgICBnb3RvIFJF
VFVSTjsKICAgICAgICB9CiAgICAgICAgaWYgKCBkLT53aW4gPT0gTm9uZSApIHsKICAgICAg
ICAgICAgc3RyY3B5KCBTX2Vycl9tc2csIAogICAgICAgICAgICAgICAgICAgICJEaXJlY3Qg
dmlkZW8gYXR0ZW1wdGVkIHdpdGggbm8gd2luZG93IHNldCIgKTsKICAgICAgICAgICAgZ290
byBSRVRVUk47CiAgICAgICAgfQoKICAgICAgICAvKiAgTWFrZSBzdXJlIGNhcHR1cmUgcmVn
aW9uIGxpZXMgZW50aXJlbHkgd2l0aGluIHZpZGVvIG1lbW9yeSAgKi8KICAgICAgICAvKiAg
ICAod2UgZG9uJ3QgaGF2ZSBjb21wbGV4IGNhcHR1cmUgY2xpcHBpbmcgc3VwcG9ydCBpbiB0
aGUgICAgKi8KICAgICAgICAvKiAgICBkcml2ZXIgeWV0LCBidXQgd2hlbiB3ZSBkbywgdXBk
YXRlIHRoaXMpLiAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgWFVUSUxHZXRWaXN1YWxC
cHAoIFRWRElTUExBWSwgeC0+ZmJfdmlzdWFsLCBOVUxMLCAmQnBwICk7CiAgICAgICAgYWRk
ciA9IHgtPmJhc2VfYWRkciArIChnLnkgKiB4LT5waXRjaCArIGcueCkgKiBCcHA7CgogICAg
ICAgIGlmICgoIGcueCA8IDAgKSB8fCAoIGcueSA8IDAgKSB8fAogICAgICAgICAgICAoICgg
Zy54K2cudy0xICkgPj0gRGlzcGxheVdpZHRoICggVFZESVNQTEFZLCBUVlNDUkVFTiApICkg
fHwKICAgICAgICAgICAgKCAoIGcueStnLmgtMSApID49IERpc3BsYXlIZWlnaHQoIFRWRElT
UExBWSwgVFZTQ1JFRU4gKSApKSB7CiAgICAgICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAK
ICAgICAgICAgICAgICAgICAgICAiRGlyZWN0IHZpZGVvIHJlZ2lvbiBvdXRzaWRlIGJvdW5k
cyBvZiBkaXNwbGF5IiApOwogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9CiAg
ICAgICAgZWxzZSBpZiAoIGFkZHIgKyAoIChnLmgtMSkgKiB4LT5waXRjaCArIGcudyApICog
QnBwCiAgICAgICAgICAgICAgICAgICAgICAgPj0geC0+YmFzZV9hZGRyICsgeC0+YmFua19z
aXplICkgewogICAgICAgICAgICBzdHJjcHkoIFNfZXJyX21zZywgCiAgICAgICAgICAgICAg
ICAgICAgIkRpcmVjdCB2aWRlbyByZWdpb24gb3V0c2lkZSBib3VuZHMgb2YgZGlzcGxheSIg
KTsKICAgICAgICAgICAgZ290byBSRVRVUk47CiAgICAgICAgfQogICAgfQoKICAgIG9rID0g
VFJVRTsKCiBSRVRVUk46CiAgICBpZiAoIGZhaWxfcmVhc29uICE9IE5VTEwgKQogICAgICAg
ICpmYWlsX3JlYXNvbiA9IG9rID8gTlVMTCA6IFNfZXJyX21zZzsKICAgIHJldHVybiBvazsK
fQoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHZvaWQgVFZDQVBU
VVJFU3RhcnQoCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjICkKCiAgICBQ
dXJwb3NlICAgIDogSW5pdGlhdGVzIGNhcHR1cmUgdXNpbmcgdGhlIG1vZGUvZ2VvbS9ldGMu
IHBhcmFtZXRlcnMKICAgICAgICAgICAgICAgICBzZXQgdXAgcHJldmlvdXNseS4gIAogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vdGU6ICBBTFdBWVMgY2FsbCBUVkNB
UFRVUkVTdGFydCBiZWZvcmUgY2FsbGluZyB0aGlzCiAgICAgICAgICAgICAgICAgZnVuY3Rp
b24uCgogICAgUHJvZ3JhbW1lciA6IDA4LU1hci05NyAgUmFuZGFsbCBIb3BwZXIKCiAgICBQ
YXJhbWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgc3RhdGUgc3RydWN0CgogICAgUmV0dXJucyAg
ICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwoKdm9pZCBUVkNBUFRVUkVTdGFydCggVFZfQ0FQVFVSRSAqYyApCnsKICAgIHN0YXRp
YyBUVl9CT09MIFNfZG9uZV9hX3NpbmdsZSA9IEZhbHNlOwoKICAgIFRWX0RJU1BMQVkgICAg
ICAgICAgKmQgPSAmR19nbG9iLmRpc3BsYXk7CiAgICBUVl9YU0NSRUVOICAgICAgICAgICp4
ID0gJkdfZ2xvYi54OwogICAgVFZfSU5UMzIgICAgICAgICAgICAgbGFyZzsKICAgIHN0cnVj
dCBtZXRlb3JfdmlkZW8gIHZpZGVvOwogICAgc3RydWN0IG1ldGVvcl9nZW9tZXQgZ2VvbTsK
ICAgIFRWX0dFT00gICAgICAgICAgICAgIGc7CiAgICBUVl9QSVhFTF9HRU9NICAgICAgICBw
aXhfZ2VvbTsKICAgIFRWX0lOVDMyICAgICAgICAgICAgIEJwcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkeDsKICAgIGNoYXIgICAgICAgICAgICAgICAgKmNmZ19mYWlsX21zZzsK
ICAgIFRWX0JPT0wgICAgICAgICAgICAgIGF1ZGlvX211dGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBmbHVzaF9idWY7CgogICAgRFJWUFJJTlRGKCggIlx0Q0FQVFVSRSBTdGFydCAl
c1xuIiwKICAgICAgICAgICAgICAgYy0+Y2FwX21vZGUgPT0gVFZfQ0FQVFVSRV9DT05USU5V
T1VTID8gIkNvbnRpbnVvdXMiOiJTaW5nbGUiKSk7CgogICAgLyogIEZJWE1FOiAgQWxzbyBs
b2NrIG91dCBzdGFydCB3aGVuIHNpbmdsZSBjYXB0dXJlcyBpbiBwcm9ncmVzcyAgKi8KICAg
IGlmICggYy0+Y29udGluX29uICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQ
VFVSRVN0YXJ0IHdoZW4gYWxyZWFkeSBydW5uaW5nLi4uaWdub3JlZFxuIiApOwogICAgICAg
IHJldHVybjsKICAgIH0KICAgIAogICAgLyogIERvdWJsZS1jaGVjayBwYXJhbWV0ZXJzICh0
aGUgY2FsbGVyIHNob3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGlzKSAgKi8KICAgIGlmICgg
IVRWQ0FQVFVSRUNvbmZpZ3VyZSggYywgJmNmZ19mYWlsX21zZyApICkgewogICAgICAgIGZw
cmludGYoIHN0ZGVyciwgCiAgICAgICAgICAgICAgICAgIlRWQ0FQVFVSRUNvbmZpZ3VyZSgp
IGluIFRWQ0FQVFVSRVN0YXJ0KCkgZmFpbGVkOiAlc1xuIiwKICAgICAgICAgICAgICAgICBj
ZmdfZmFpbF9tc2cgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8qLS0gU2V0
IGRlc3RpbmF0aW9uIGF0dHJpYnV0ZXMgJiBnZW9tZXRyeSAtLSovCiAgICBnID0gYy0+Z2Vv
bTsKCiAgICBnZW9tLmNvbHVtbnMgPSBnLnc7CiAgICBnZW9tLnJvd3MgICAgPSBnLmg7CiAg
ICBnZW9tLmZyYW1lcyAgPSAxOwogICAgZmx1c2hfYnVmICAgID0gRkFMU0U7CgogICAgaWYg
KCBjLT54ZmVyX21vZGUgPT0gVFZfVFJBTlNGRVJfRElSRUNUICkgewogICAgICAgIFRWX0JP
T0wgIHN3YXBfYiwgCiAgICAgICAgICAgICAgICAgc3dhcF9zOwoKICAgICAgICBYVVRJTEdl
dFZpc3VhbEJwcCggVFZESVNQTEFZLCB4LT5mYl92aXN1YWwsIE5VTEwsICZCcHAgKTsKCiAg
ICAgICAgdmlkZW8uYWRkciAgICAgID0geC0+YmFzZV9hZGRyICsgKGcueSAqIHgtPnBpdGNo
ICsgZy54KSAqIEJwcDsKICAgICAgICAvKnByaW50ZiggIlxuXHRiYXNlICsgKHkgKiBwaXRj
aCArIHgpICogQnBwID0gIgogICAgICAgICAgICAgICAgICAiMHgleCArICglZCAqICVkICsg
JWQpICogJWRcbiIsCiAgICAgICAgICAgICAgICAgIHgtPmJhc2VfYWRkciwgZy55LCB4LT5w
aXRjaCwgZy54LCBCcHAgKTsqLwogICAgICAgIHZpZGVvLndpZHRoICAgICA9IHgtPnBpdGNo
ICogQnBwOwogICAgICAgIHZpZGVvLmJhbmtzaXplICA9IHgtPmJhbmtfc2l6ZTsKICAgICAg
ICB2aWRlby5yYW1zaXplICAgPSB4LT5yYW1fc2l6ZSAvIDEwMjQ7CgogICAgICAgIG1lbXNl
dCggJnBpeF9nZW9tLCAnXDAnLCBzaXplb2YoIHBpeF9nZW9tICkgKTsKICAgICAgICBwaXhf
Z2VvbS50eXBlICAgICA9IFRWX1BJWEVMVFlQRV9SR0I7CiAgICAgICAgcGl4X2dlb20uQnBw
ICAgICAgPSBCcHA7CiAgICAgICAgcGl4X2dlb20ubWFza1swXSAgPSB4LT5mYl92aXN1YWwt
PnJlZF9tYXNrOwogICAgICAgIHBpeF9nZW9tLm1hc2tbMV0gID0geC0+ZmJfdmlzdWFsLT5n
cmVlbl9tYXNrOwogICAgICAgIHBpeF9nZW9tLm1hc2tbMl0gID0geC0+ZmJfdmlzdWFsLT5i
bHVlX21hc2s7CgogICAgICAgIFhVVElMR2V0VmlzdWFsU3dhcHMoIFRWRElTUExBWSwgeC0+
ZmJfdmlzdWFsLCAmc3dhcF9iLCAmc3dhcF9zICk7CiAgICAgICAgcGl4X2dlb20uc3dhcF9i
eXRlcyAgPSBzd2FwX2I7CiAgICAgICAgcGl4X2dlb20uc3dhcF9zaG9ydHMgPSBzd2FwX3M7
CgogICAgICAgIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4R2VvbSggYywgJnBpeF9nZW9tLCAm
aWR4ICk7CiAgICAgICAgaWYgKCBpZHggPCAwICkgewogICAgICAgICAgICBmcHJpbnRmKCBz
dGRlcnIsICJUVkNBUFRVUkVTdGFydDogVmlzdWFsIHBpeGVsIGZvcm1hdCBub3QgZGlyZWN0
ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlkZW8gY2FwYWJsZVxuIiApOwog
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGMtPnBpeF9nZW9tX2lkeCA9
IGlkeDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHZpZGVvLmFkZHIgICAgID0gMCwKICAg
ICAgICB2aWRlby53aWR0aCAgICA9IDAsCiAgICAgICAgdmlkZW8uYmFua3NpemUgPSAwLAog
ICAgICAgIHZpZGVvLnJhbXNpemUgID0gMDsKCiAgICAgICAgLyogIElmIFRERUMgaXMgb24s
IG1heSBiZSBhIHdoaWxlIGJlZm9yZSBvbGQgdHJhc2ggZ2V0cyB3cml0dGVuIG9uLiAgKi8K
ICAgICAgICAvKiAgICBTbyB0ZWxsIHRoZSBkcml2ZXIgdG8gZmx1c2ggdGhlIGZyYW1lIGJ1
ZmZlciBiZWZvcmUgc3RhcnRpbmcgICAqLwogICAgICAgIC8qICAgIGNhcHR1cmUuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAg
ICAgICAgaWYgKCBjLT5mcHMgIT0gYy0+ZnBzX21heCApCiAgICAgICAgICAgIGZsdXNoX2J1
ZiA9IFRSVUU7CiAgICB9CiAgICBtZW1jcHkoICZwaXhfZ2VvbSwgJmMtPnBpeF9nZW9tX2xp
c3RbIGMtPnBpeF9nZW9tX2lkeCBdLCAKICAgICAgICAgICAgc2l6ZW9mKCBwaXhfZ2VvbSAp
ICk7CgogICAgZ2VvbS5vZm9ybWF0ID0gYy0+YnBwX2Zvcm1hdDsKICAgIGlmICggZ2VvbS5y
b3dzIDw9IGMtPmhlaWdodF9tYXggLyAyICkKICAgICAgICBnZW9tLm9mb3JtYXQgfD0gTUVU
RU9SX0dFT19PRERfT05MWTsKCiAgICBjLT5hZGRyID0gKFRWX1VJTlQzMikgdmlkZW8uYWRk
cjsKCiAgICAvKnByaW50ZiggIlZJREVPICAgICAgPSB7IGFkZHIgMHglLjh4LCB3aWR0aCAl
ZCwgYmFua3NpemUgJWQsIHJhbXNpemUgJWQgfVxuIiwKICAgICAgICAgICAgdmlkZW8uYWRk
ciwgdmlkZW8ud2lkdGgsIHZpZGVvLmJhbmtzaXplLCB2aWRlby5yYW1zaXplICk7Ki8KICAg
IGlmICggaW9jdGwoIGMtPmZkLCBNRVRFT1JTVklERU8sICZ2aWRlbyApIDwgMCApIHsKICAg
ICAgICBET19JT0NUTF9TRVJSKCAiTUVURU9SU1ZJREVPIiwgJnZpZGVvICk7CiAgICAgICAg
cmV0dXJuOwogICAgfQogICAgLypwcmludGYoICJHRU9NICAgICAgID0geyAlZHglZCwgZnJh
bWVzICVkLCBvZm9ybWF0IDB4JS44eCB9XG4iLAogICAgICAgICAgICBnZW9tLmNvbHVtbnMs
IGdlb20ucm93cywgZ2VvbS5mcmFtZXMsIGdlb20ub2Zvcm1hdCApOyovCiAgICBpZiAoIGlv
Y3RsKCBjLT5mZCwgTUVURU9SU0VUR0VPLCAmZ2VvbSApIDwgMCApIHsKICAgICAgICBET19J
T0NUTF9TRVJSKCAiTUVURU9SU0VUR0VPIiwgJmdlb20gKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICAvKnByaW50ZiggIlNBQ1RQSVhGTVQgPSB7IGlkeCAlZCwgQnBwICVkLCBtYXNr
cyB7ICV4LCV4LCV4IH0sICIKCQkJICAgInN3YXBiL3MgJWQsJWQgfVxuIiwKICAgICAgICAg
ICAgcGl4X2dlb20uaW5kZXgsIHBpeF9nZW9tLkJwcCwgcGl4X2dlb20ubWFza1swXSwKCSAg
ICBwaXhfZ2VvbS5tYXNrWzFdLCBwaXhfZ2VvbS5tYXNrWzJdLCBwaXhfZ2VvbS5zd2FwX2J5
dGVzLAoJICAgIHBpeF9nZW9tLnN3YXBfc2hvcnRzICk7Ki8KICAgIGlmICggaW9jdGwoIGMt
PmZkLCBNRVRFT1JTQUNUUElYRk1ULCAmcGl4X2dlb20uaW5kZXggKSA8IDAgKSB7CiAgICAg
ICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUlNBQ1RQSVhGTVQiLCAmZ2VvbSApOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBsYXJnID0gZmx1c2hfYnVmOwogICAgaWYgKCBpb2N0bCgg
Yy0+ZmQsIEJUODQ4U0NCVUYsICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NF
UlIoICJCVDg0OFNDQlVGIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAv
KiAgSWYgdXNlciB3YW50cyB0byBrbm93IHdoZW5ldmVyIGEvdGhlIGZyYW1lIGlzIGNvbXBs
ZXRlLCAgICAgICAgICAgICovCiAgICAvKiAgICBhZGQgaW4gYSBzaWduYWwgaGFuZGxlciBm
b3IgdGhpcyBmb3Igc2luZ2xlIGNhcHR1cmVzLCBvciBhbiBYdCAgICovCiAgICAvKiAgICB0
aW1lciBmb3IgY29udGludW91cyBjYXB0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCiAgICAvKiAgICBOT1RFOiAgRG9uZSBjYWxsYmFjayBtYWtlcyBubyBz
ZW5zZSBmb3IgZGlyZWN0IHZpZGVvIHRyYW5zZmVycy4gICovCiAgICBsYXJnID0gTUVURU9S
X1NJR19NT0RFX01BU0s7CgojaWZkZWYgT0xEX19BTFdBWVNfVVNFX1NJR05BTFNfTk9XCiAg
ICBpZiAoIGMtPmZyYW1lX2RvbmVfY2IgJiYgYy0+ZnJhbWVfY2JfZW5hYmxlZCApCiAgICAg
ICAgaWYgKCBjLT5jYXBfbW9kZSA9PSBUVl9DQVBUVVJFX1NJTkdMRSApCiAgICAgICAgICAg
IGxhcmcgPSBTSUdVU1IxOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBTX2ZyYW1lX3Rp
bWVyID0gWHRBcHBBZGRUaW1lT3V0KCBUVkFQUENUWCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZSQU1FX1RJTUVSX0RFTEFZX01TKGMtPmZwc19t
YXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVkNB
UFRVUkVGcmFtZVRpbWVvdXRDQiwgTlVMTCApOwogICAgICAgICAgICBTX2ZyYW1lX3RpbWVy
X3NldCA9IFRydWU7CiAgICAgICAgfQojZWxzZQogICAgaWYgKCBjLT5mcmFtZV9kb25lX2Ni
ICYmIGMtPmZyYW1lX2NiX2VuYWJsZWQgKQogICAgICAgIGxhcmcgPSBTSUdVU1IxOwojZW5k
aWYKCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SU1NJR05BTCwgJmxhcmcgKSA8IDAg
KSB7CiAgICAgICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUlNTSUdOQUwiLCBsYXJnICk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBWZXJpZnkgYXVkaW8gbXV0ZSBzdGF0ZSBp
cyBpbiBzeW5jIChpbiBjYXNlIGl0IGRpZG4ndCBnZXQgc3RhcnRlZCAgKi8KICAgIC8qICAg
IG9uIHRoZSBpbml0aWFsIG1hcCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KICAgIFRWQVVESU9HZXRNdXRlU3RhdGUoICZhdWRpb19tdXRlICk7
CiAgICBUVkNBUFRVUkVTZXRBdWRpb011dGUoIGMsIGF1ZGlvX211dGUgKTsKCiAgICAvKiAg
T0ssIE5PVyBGSVJFIElUIFVQICAqLwoKICAgIGlmICggYy0+Y2FwX21vZGUgPT0gVFZfQ0FQ
VFVSRV9DT05USU5VT1VTICkgewoKICAgICAgICAvKiAgUXVldWUgdXAgYSBDQVBfU0lOR0xF
IC0tIHR1cm5zIG9uIGF1ZGlvIG9uIFdpbmNhc3QgYm9hcmQgICovCiAgICAgICAgLyogIEZJ
WE1FOiAgV2UgbWF5IG5vdCBuZWVkIHRvIGRvIHRoaXMgYW55bW9yZSAgKi8KICAgICAgICBp
ZiAoICFTX2RvbmVfYV9zaW5nbGUgKSB7CiAgICAgICAgICAgIGxhcmcgPSBNRVRFT1JfQ0FQ
X1NJTkdMRTsKICAgICAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwg
JmxhcmcgKSA8IDAgKSB7CiAgICAgICAgICAgICAgICBET19JT0NUTF9TRVJSKCAiTUVURU9S
X0NBUF9TSU5HTEUiLCAwICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgU19kb25lX2Ffc2luZ2xlID0gVHJ1ZTsKICAgICAgICB9CgogICAg
ICAgIC8qICBGSVhNRTogIEZpeCBzcGVsbGluZyBvZiAiY29udGludW91cyIgaW4gdGhlIGRy
aXZlciBzb21ldGltZSAgKi8KICAgICAgICBsYXJnID0gTUVURU9SX0NBUF9DT05USU5PVVM7
CiAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwgJmxhcmcgKSA8IDAg
KSB7CiAgICAgICAgICAgIERPX0lPQ1RMX1NFUlIoICJNRVRFT1JfQ0FQX0NPTlRJTlVPVVMi
LCAwICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYy0+Y29udGlu
X29uID0gVHJ1ZTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGxhcmcgPSBNRVRFT1JfQ0FQ
X1NJTkdMRTsKICAgICAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SQ0FQVFVSLCAmbGFy
ZyApIDwgMCApIHsKICAgICAgICAgICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUl9DQVBfU0lO
R0xFIiwgMCApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFNfZG9u
ZV9hX3NpbmdsZSA9IFRydWU7CiAgICB9Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAg
ICBQcm90b3R5cGUgIDogdm9pZCBUVkNBUFRVUkVTdG9wKAogICAgICAgICAgICAgICAgICAg
ICAgVFZfQ0FQVFVSRSAqYyApCgogICAgUHVycG9zZSAgICA6IFN0b3AgYSBjb250aW51b3Vz
IGNhcHR1cmUsIGlmIG9uZSBpcyBydW5uaW5nLgoKICAgIFByb2dyYW1tZXIgOiAwOC1NYXIt
OTcgIFJhbmRhbGwgSG9wcGVyCgogICAgUGFyYW1ldGVycyA6IGMgLSBJOiBjYXB0dXJlIHN0
YXRlIHN0cnVjdAoKICAgIFJldHVybnMgICAgOiBOb25lLgoKICAgIEdsb2JhbHMgICAgOiBO
b25lLgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnZvaWQgVFZDQVBUVVJFU3RvcCggVFZf
Q0FQVFVSRSAqYyApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgRFJWUFJJTlRGKCggIlx0
Q0FQVFVSRSBTdG9wXG4iICkpOwoKICAgIGlmICggIWMtPmNvbnRpbl9vbiApIHsKICAgICAg
ICBmcHJpbnRmKCBzdGRlcnIsICJUVkNBUFRVUkVTdG9wIGNhbGxlZCB3aGVuIG5vdCBydW5u
aW5nLi4uaWdub3JlZFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggU19m
cmFtZV90aW1lcl9zZXQgKSB7CiAgICAgICAgWHRSZW1vdmVUaW1lT3V0KCBTX2ZyYW1lX3Rp
bWVyICk7CiAgICAgICAgU19mcmFtZV90aW1lcl9zZXQgPSBGYWxzZTsKICAgIH0KCiAgICAv
KiAgUmVzZXQgZHJpdmVyJ3Mgc2lnbmFsIHNvIHdlIGRvbid0IGtlZXAgZ2V0dGluZyBpbnRl
cnJ1cHRlZCAgKi8KICAgIGxhcmcgPSBNRVRFT1JfU0lHX01PREVfTUFTSzsKICAgIGlmICgg
aW9jdGwoIGMtPmZkLCBNRVRFT1JTU0lHTkFMLCAmbGFyZyApIDwgMCApIHsKICAgICAgICBE
T19JT0NUTF9TRVJSKCAiTUVURU9SU1NJR05BTCIsIGxhcmcgKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgbGFyZyA9IE1FVEVPUl9DQVBfU1RPUF9DT05UOwogICAgaWYgKCBpb2N0
bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9D
VExfU0VSUiggIk1FVEVPUl9DQVBfU1RPUF9DT05UIiwgMCApOwogICAgICAgIHJldHVybjsK
ICAgIH0KICAgIGMtPmNvbnRpbl9vbiA9IEZhbHNlOwoKCiAgICBUVkNBUFRVUkVDbGVhclBl
bmRpbmdGcmFtZXMoKTsKfQoK

--==_Exmh_-12741814920--



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-multimedia" in the body of the message



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