Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Feb 1999 15:18:26 -0500 (EST)
From:      Larry Lile <lile@stdio.com>
To:        Julian Elischer <julian@whistle.com>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: Why did this panic?
Message-ID:  <Pine.BSF.4.05.9902091456290.14147-200000@heathers.stdio.com>
In-Reply-To: <Pine.BSF.3.95.990209113256.5802E-100000@current1.whistle.com>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-519715650-918591506=:14147
Content-Type: TEXT/PLAIN; charset=US-ASCII


Oops, too much buffer size math, I should add the following between
1248 & 1249:

    mbuf_size -= 2;

I guess that could explain the panic.  I wonder why I don't see it
with smaller mtu's?  I guess I probably wrote off the end of one 
mbuf into the beggining of a mbuf cluster and ate the free list
pointer.

Yes, consider me suitably embarrased, I was in a hurry when I
globbed that 3-way min together.

Thanks for pointing out my math error!  I am not very happy with
all of that code to begin with, do you have any suggestions on 
how to make it more elegant?  I do intend at some point to try just
linking the raw receive buffers to m_ext and setting the free 
routine to a routine in the driver to avoid the unnecesary copies.

Heres a new cut.

Larry Lile
lile@stdio.com


On Tue, 9 Feb 1999, Julian Elischer wrote:

> 
> 
> 
> 
> in line 1248,
> subtract 2 from buf_size as well
> 
>    1245             m0->m_pkthdr.rcvif = &sc->arpcom.ac_if;
>    1246             m0->m_pkthdr.len = ByteCount;
>    1247             m0->m_len = 0;
>    1248             m0->m_data += 2;
>    1249             th = mtod(m0, struct iso88025_header *);
> 
> 
> in 1255  you overwrite what you just calculated the line before..
>  have you already set up the variables used?
> (looks like you have..)
> ah it's a 3 way min()
> 
> use a MIN macro please..
> #define MIN(A,B) (((A) < (B)) ? (A) : (B))
> length = MIN(	frame_len,
> 		MIN(	(RX_BUFFER_LEN - frag_offset),
> 			(mbuf_size - mbuf_offset))
> 

--0-519715650-918591506=:14147
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="if_oltr.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.05.9902091518260.14147@heathers.stdio.com>
Content-Description: 
Content-Disposition: attachment; filename="if_oltr.c"

LyogDQogKiBDb3B5cmlnaHQgKGMpIDE5OTgsIExhcnJ5IExpbGUNCiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogRm9yIGxhdGVzdCBzb3VyY2Vz
IGFuZCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciwgcGxlYXNlDQogKiBn
byB0byBodHRwOi8vYW5hcmNoeS5zdGRpby5jb20uDQogKg0KICogUXVlc3Rp
b25zLCBjb21tZW50cyBvciBzdWdnZXN0aW9ucyBzaG91bGQgYmUgZGlyZWN0
ZWQgdG8NCiAqIExhcnJ5IExpbGUgPGxpbGVAc3RkaW8uY29tPi4NCiAqDQog
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucw0KICogYXJlIG1ldDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQog
KiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMsIGFuZCB0aGUgZm9sbG93aW5nDQogKiAgICBkaXNjbGFpbWVyLg0KICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUNCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKg0K
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMDQogKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUw0KICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQogKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQ0KICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0K
ICogU1VDSCBEQU1BR0UuDQogKg0KICogJElkOiBpZl9vbHRyLmMsdiAxLjE1
IDE5OTkvMDIvMDggMjM6Mzc6NDUgbGlsZSBFeHAgbGlsZSAkDQogKi8NCg0K
DQojaW5jbHVkZSAicGNpLmgiDQojaW5jbHVkZSAib2x0ci5oIg0KI2luY2x1
ZGUgIm9wdF9pbmV0LmgiDQojaW5jbHVkZSAiYnBmaWx0ZXIuaCINCg0KI2lm
IChOT0xUUiArIE5QQ0kpID4gMA0KDQovKiNkZWZpbmUgVFJsbGRJbmxpbmVJ
TyovDQoNCiNkZWZpbmUgSVNBX0FEQVBURVJTICAoT0NfMzExNSB8IE9DXzMx
MTcgfCBPQ18zMTE4KQ0KI2RlZmluZSBQQ0lfQURBUFRFUlMgIChPQ18zMTMz
IHwgT0NfMzEzNiB8IE9DXzMxMzcgfCBcDQogICAgICAgICAgICAgICAgICAg
ICAgIE9DXzMxMzkgfCBPQ18zMTQwIHwgT0NfMzE0MSB8IFwNCiAgICAgICAg
ICAgICAgICAgICAgICAgT0NfMzI1MCB8IE9DXzM1NDAgKQ0KDQojZGVmaW5l
IFBDSV9WRU5ET1JfT0xJQ09NIDB4MTA4RA0KDQpjaGFyICpBZGFwdGVyTmFt
ZVtdID0gew0KICAgLyogIDAgKi8gIk9saWNvbSBYVCBBZGFwdGVyIFt1bnN1
cHBvcnRlZF0iLA0KICAgLyogIDEgKi8gIk9saWNvbSBPQy0zMTE1IiwNCiAg
IC8qICAyICovICJPbGljb20gSVNBIDE2LzQgQWRhcHRlciAoT0MtMzExNyki
LA0KICAgLyogIDMgKi8gIk9saWNvbSBJU0EgMTYvNCBBZGFwdGVyIChPQy0z
MTE4KSIsDQogICAvKiAgNCAqLyAiT2xpY29tIE1DQSAxNi80IEFkYXB0ZXIg
KE9DLTMxMjkpIFt1bnN1cHBvcnRlZF0iLA0KICAgLyogIDUgKi8gIk9saWNv
bSBNQ0EgMTYvNCBBZGFwdGVyIChPQy0zMTI5KSBbdW5zdXBwb3J0ZWRdIiwN
CiAgIC8qICA2ICovICJPbGljb20gTUNBIDE2LzQgQWRhcHRlciAoT0MtMzEy
OSkgW3Vuc3VwcG9ydGVkXSIsDQogICAvKiAgNyAqLyAiT2xpY29tIEVJU0Eg
MTYvNCBBZGFwdGVyIChPQy0zMTMzKSIsDQogICAvKiAgOCAqLyAiT2xpY29t
IEVJU0EgMTYvNCBBZGFwdGVyIChPQy0zMTMzKSIsDQogICAvKiAgOSAqLyAi
T2xpY29tIEVJU0EgMTYvNCBTZXJ2ZXIgQWRhcHRlciAoT0MtMzEzNSkiLA0K
ICAgLyogMTAgKi8gIk9saWNvbSBQQ0kgMTYvNCBBZGFwdGVyIChPQy0zMTM2
KSIsDQogICAvKiAxMSAqLyAiT2xpY29tIFBDSSAxNi80IEFkYXB0ZXIgKE9D
LTMxMzYpIiwNCiAgIC8qIDEyICovICJPbGljb20gUENJL0lJIDE2LzQgQWRh
cHRlciAoT0MtMzEzNykiLA0KICAgLyogMTMgKi8gIk9saWNvbSBQQ0kgMTYv
NCBBZGFwdGVyIChPQy0zMTM5KSIsDQogICAvKiAxNCAqLyAiT2xpY29tIFJh
cGlkRmlyZSAzMTQwIDE2LzQgUENJIEFkYXB0ZXIgKE9DLTMxNDApIiwNCiAg
IC8qIDE1ICovICJPbGljb20gUmFwaWRGaXJlIDMxNDEgRmliZXIgQWRhcHRl
ciAoT0MtMzE0MSkiLA0KICAgLyogMTYgKi8gIk9saWNvbSBQQ01DSUEgMTYv
NCBBZGFwdGVyIChPQy0zMjIwKSBbdW5zdXBwb3J0ZWRdIiwNCiAgIC8qIDE3
ICovICJPbGljb20gUENNQ0lBIDE2LzQgQWRhcHRlciAoT0MtMzEyMSwgT0Mt
MzIzMCwgT0MtMzIzMikgW3Vuc3VwcG9ydGVkXSIsDQogICAvKiAxOCAqLyAi
T2xpY29tIFBDTUNJQSAxNi80IEFkYXB0ZXIgKE9DLTMyNTApIiwNCiAgIC8q
IDE5ICovICJPbGljb20gUmFwaWRGaXJlIDM1NDAgNC8xNi8xMDAgQWRhcHRl
ciAoT0MtMzU0MCkiDQp9Ow0KDQojaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQoj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+DQojaW5jbHVkZSA8c3lzL3Byb2MuaD4N
CiNpbmNsdWRlIDxzeXMvc29ja2lvLmg+DQojaW5jbHVkZSA8c3lzL21hbGxv
Yy5oPg0KI2luY2x1ZGUgPHN5cy9tYnVmLmg+DQojaW5jbHVkZSA8c3lzL3Nv
Y2tldC5oPg0KI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiNpbmNsdWRlIDxz
eXMva2VybmVsLmg+DQojaW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPg0KDQoj
aW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+DQojaW5jbHVkZSA8bmV0L2lmLmg+
DQojaW5jbHVkZSA8bmV0L2lmX2FycC5oPg0KI2luY2x1ZGUgPG5ldC9pc284
ODAyNS5oPg0KI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPg0KDQojaWYgTkJQ
RklMVEVSID4gMA0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCiNlbmRpZg0KIA0K
I2lmIE5QTlAgPiAwDQojaW5jbHVkZSA8aTM4Ni9pc2EvcG5wLmg+DQojZW5k
aWYNCg0KI2luY2x1ZGUgPG1hY2hpbmUvY2xvY2suaD4NCiNpbmNsdWRlIDxt
YWNoaW5lL21kX3Zhci5oPg0KI2luY2x1ZGUgPGkzODYvaXNhL2lzYV9kZXZp
Y2UuaD4NCg0KI2lmIE5QQ0kgPiAwDQojaW5jbHVkZSA8cGNpL3BjaXZhci5o
Pg0KI2luY2x1ZGUgPHBjaS9wY2lyZWcuaD4NCiNlbmRpZg0KDQojaWZuZGVm
IFRSTExEX1NQRUVEX0FVVE8NCiNkZWZpbmUgVFJMTERfU1BFRURfQVVUTyAw
DQojZW5kaWYNCg0KI2RlZmluZSBNSU4oQSxCKSAoKChBKSA8IChCKSkgPyAo
QSkgOiAoQikpDQojZGVmaW5lIE1JTjMoQSxCLEMpIChNSU4oQSwgKE1JTihC
LCBDKSkpKQ0KDQp2b2lkICpvbHRyX21hbGxvYyhzc2l6ZV90LCBUUmxsZEFk
YXB0ZXJDb25maWdfdCAqKTsNCg0KLyoNCiAqIEdsdWUgZnVuY3Rpb25zIHBy
b3RvdHlwZXMgZm9yIFBNVyBraXQgSU8NCiAqLw0KDQojaWZuZGVmIFRSbGxk
SW5saW5lSU8NCnN0YXRpYyB2b2lkIERyaXZlck91dEJ5dGUgICAgICAgICAg
IF9fUCgodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGNoYXIpKTsNCnN0YXRp
YyB2b2lkIERyaXZlck91dFdvcmQgICAgICAgICAgIF9fUCgodW5zaWduZWQg
c2hvcnQsIHVuc2lnbmVkIHNob3J0KSk7DQpzdGF0aWMgdm9pZCBEcml2ZXJP
dXREd29yZCAgICAgICAgICBfX1AoKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25l
ZCBsb25nKSk7DQpzdGF0aWMgdm9pZCBEcml2ZXJSZXBPdXRCeXRlICAgICAg
ICBfX1AoKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyICAqLCBpbnQp
KTsNCnN0YXRpYyB2b2lkIERyaXZlclJlcE91dFdvcmQgICAgICAgIF9fUCgo
dW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0ICosIGludCkpOw0Kc3Rh
dGljIHZvaWQgRHJpdmVyUmVwT3V0RHdvcmQgICAgICAgX19QKCh1bnNpZ25l
ZCBzaG9ydCwgdW5zaWduZWQgbG9uZyAgKiwgaW50KSk7DQpzdGF0aWMgdW5z
aWduZWQgY2hhciAgRHJpdmVySW5CeXRlICBfX1AoKHVuc2lnbmVkIHNob3J0
KSk7DQpzdGF0aWMgdW5zaWduZWQgc2hvcnQgRHJpdmVySW5Xb3JkICBfX1Ao
KHVuc2lnbmVkIHNob3J0KSk7DQpzdGF0aWMgdW5zaWduZWQgbG9uZyAgRHJp
dmVySW5Ed29yZCBfX1AoKHVuc2lnbmVkIHNob3J0KSk7DQpzdGF0aWMgdm9p
ZCBEcml2ZXJSZXBJbkJ5dGUgICAgICAgICBfX1AoKHVuc2lnbmVkIHNob3J0
LCB1bnNpZ25lZCBjaGFyICAqLCBpbnQpKTsNCnN0YXRpYyB2b2lkIERyaXZl
clJlcEluV29yZCAgICAgICAgIF9fUCgodW5zaWduZWQgc2hvcnQsIHVuc2ln
bmVkIHNob3J0ICosIGludCkpOw0Kc3RhdGljIHZvaWQgRHJpdmVyUmVwSW5E
d29yZCAgICAgICAgX19QKCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9u
ZyAgKiwgaW50KSk7DQojZW5kaWYgLypUUmxsZElubGluZUlPKi8NCnN0YXRp
YyB2b2lkIERyaXZlclN1c3BlbmQgICAgICAgICAgICAgICAgX19QKCh1bnNp
Z25lZCBzaG9ydCkpOw0Kc3RhdGljIHZvaWQgRHJpdmVyU3RhdHVzICAgICAg
ICAgICAgICAgICBfX1AoKHZvaWQgKiwgVFJsbGRTdGF0dXNfdCAqKSk7DQpz
dGF0aWMgdm9pZCBEcml2ZXJDbG9zZUNvbXBsZXRlZCAgICAgICAgIF9fUCgo
dm9pZCAqKSk7DQpzdGF0aWMgdm9pZCBEcml2ZXJTdGF0aXN0aWNzICAgICAg
ICAgICAgIF9fUCgodm9pZCAqLCBUUmxsZFN0YXRpc3RpY3NfdCAqKSk7DQpz
dGF0aWMgdm9pZCBEcml2ZXJUcmFuc21pdEZyYW1lQ29tcGxldGVkIF9fUCgo
dm9pZCAqLCB2b2lkICosIGludCkpOw0Kc3RhdGljIHZvaWQgRHJpdmVyUmVj
ZWl2ZUZyYW1lQ29tcGxldGVkICBfX1AoKHZvaWQgKiwgaW50LCBpbnQsIHZv
aWQgKiwgaW50KSk7DQoNCnR5cGVkZWYgc3RydWN0IHR4X2J1ZiB7DQogICAg
aW50IGluZGV4Ow0KICAgIGNoYXIgKmJ1ZjsNCn0gdHhfYnVmX3Q7DQoNCnR5
cGVkZWYgc3RydWN0IHJ4X2J1ZiB7DQogICAgaW50ICAgICAgaW5kZXg7DQog
ICAgY2hhciAgICAgKmJ1ZjsNCn0gcnhfYnVmX3Q7DQoNCiNpZm5kZWYgRVhU
UkFfT0xUUg0KI2lmIE5QQ0kgPiAwDQojZGVmaW5lIEVYVFJBX09MVFIJOA0K
I2Vsc2UgDQojZGVmaW5lIEVYVFJBX09MVFIJMA0KI2VuZGlmIC8qIE5QQ0kg
Ki8NCiNlbmRpZiAvKiBFWFRSQV9PTFRSICovDQoNCiNpZm5kZWYgT0xUUl9Q
Uk9NSVNDX01PREUNCiNkZWZpbmUgT0xUUl9QUk9NSVNDX01PREUgKFRSTExE
X1BST01fTExDKQ0KI2VuZGlmDQoNCiNkZWZpbmUgQUxMX09QVElPTlMgKElG
TV9UT0tfRVRSIHwgSUZNX1RPS19TUkNSVCB8IElGTV9UT0tfQUxMUiB8IElG
TV9UT0tfRFRSIHwgSUZNX1RPS19DTEFTU0lDIHwgSUZNX1RPS19BVVRPKQ0K
DQovKiBMaXN0IHNpemVzIE1VU1QgYmUgYSBwb3dlciBvZiAyICovDQojZGVm
aW5lIFRYX0xJU1RfU0laRSAgICAxNg0KI2RlZmluZSBSWF9MSVNUX1NJWkUg
ICAgMTYgDQojZGVmaW5lIFRYX0xJU1RfTUFTSyAgICAoVFhfTElTVF9TSVpF
IC0gMSkNCiNkZWZpbmUgUlhfTElTVF9NQVNLICAgIChSWF9MSVNUX1NJWkUg
LSAxKQ0KI2RlZmluZSBSWF9CVUZGRVJfTEVOICAgKDgqMTAyNCkNCiNkZWZp
bmUgVFhfQlVGRkVSX0xFTiAgICg4KjEwMjQpDQoNCnN0cnVjdCBvbHRyX3Nv
ZnRjIHsNCiAgICBzdHJ1Y3QgYXJwY29tIGFycGNvbTsNCiAgICBzdHJ1Y3Qg
aWZtZWRpYSBpZm1lZGlhOw0KICAgIFRSbGxkQWRhcHRlckNvbmZpZ190ICpj
b25maWc7DQogICAgVFJsbGRBZGFwdGVyX3QgKlRSbGxkQWRhcHRlcjsNCiAg
ICBpbnQgdW5pdDsNCiAgICB1X3Nob3J0IFByb21pc2NNb2RlOw0KICAgIHVf
c2hvcnQgQWRhcHRlck1vZGU7DQogICAgaW50IGh3X3N0YXRlOw0KI2RlZmlu
ZSBIV19VTktOT1dOICAgICAgMCAgLyogaW5pdGlhbC9hYnNlbnQgc3RhdGUg
Ki8NCiNkZWZpbmUgSFdfRk9VTkQgICAgICAgIDEgIC8qIGZvdW5kLCBub3Qg
aW5pdGlhbGl6ZWQgKi8NCiNkZWZpbmUgSFdfQkFEICAgICAgICAgIDIgIC8q
IGZhdGFsIGVycm9yICovDQojZGVmaW5lIEhXX0ZBSUxFRCAgICAgICAzICAv
KiBjbG9zZWQgZWcuIGJ5IHJlbW92ZSwgYWxsb3cgbWFudWFsIHJlb3BlbiAq
Lw0KI2RlZmluZSBIV19MT0FESU5HICAgICAgNA0KI2RlZmluZSBIV19DTE9T
SU5HICAgICAgNQ0KI2RlZmluZSBIV19DTE9TSU5HMiAgICAgNg0KI2RlZmlu
ZSBIV19DTE9TRUQgICAgICAgNw0KI2RlZmluZSBIV19PUEVOSU5HICAgICAg
OA0KI2RlZmluZSBIV19PUEVOICAgICAgICAgOQ0KI2RlZmluZSBIV19FUlJP
UiAgICAgICAgMTAgLyogdGVtcG9yYXJ5IGVycm9yICovDQoNCiAgICB1X2xv
bmcgR3JvdXBBZGRyZXNzOw0KICAgIHVfbG9uZyBGdW5jdGlvbmFsQWRkcmVz
czsNCiAgICBpbnQgcG9sbF9hZGFwdGVyOyANCg0KICAgIGludCB0eF9uZXh0
Ow0KICAgIGludCB0eF9hdmFpbDsNCiAgICB0eF9idWZfdCB0eF9idWZmZXJb
VFhfTElTVF9TSVpFXTsNCg0KICAgIGludCByeF9uZXh0Ow0KICAgIGludCBy
eF9hdmFpbDsNCiAgICByeF9idWZfdCByeF9idWZmZXJbUlhfTElTVF9TSVpF
XTsNCg0KICAgIHN0cnVjdCBjYWxsb3V0X2hhbmRsZSBvbHRyX2NoOw0KICAg
IHN0cnVjdCBjYWxsb3V0X2hhbmRsZSBwb2xsX2NoOw0KDQp9Ow0KDQpzdGF0
aWMgc3RydWN0IG9sdHJfc29mdGMgb2x0cl9zb2Z0Y1tOT0xUUiArIEVYVFJB
X09MVFJdOw0KDQovKg0KICogRHJpdmVyIGZ1bmN0aW9uIHByb3RvdHlwZXMN
CiAqLw0KDQpzdGF0aWMgaW50ICBvbHRyX3Byb2JlICAgX19QKChzdHJ1Y3Qg
aXNhX2RldmljZSAqKSk7DQpzdGF0aWMgaW50ICBvbHRyX2F0dGFjaCAgX19Q
KChzdHJ1Y3QgaXNhX2RldmljZSAqKSk7ICANCnN0YXRpYyB2b2lkIG9sdHJf
aW5pdCAgICBfX1AoKHN0cnVjdCBvbHRyX3NvZnRjICopKTsNCnN0YXRpYyB2
b2lkIG9sdHJfaW50ciAgICBfX1AoKGludCkpOw0Kc3RhdGljIHZvaWQgb2x0
cl9zdGFydCAgIF9fUCgoc3RydWN0IGlmbmV0ICopKTsNCnN0YXRpYyB2b2lk
IG9sdHJfc3RvcCAgICBfX1AoKHN0cnVjdCBvbHRyX3NvZnRjICopKTsNCnN0
YXRpYyBpbnQgIG9sdHJfaW9jdGwgICBfX1AoKHN0cnVjdCBpZm5ldCAqLCB1
X2xvbmcsIGNhZGRyX3QpKTsNCg0Kc3RhdGljIGludCBvbHRyX2F0dGFjaF9j
b21tb24gICBfX1AoKHN0cnVjdCBvbHRyX3NvZnRjICopKTsNCg0Kdm9pZCBv
bHRyX3RpbWVvdXQgX19QKCh2b2lkICopKTsNCnZvaWQgYWRhcHRlcl9wb2xs
IF9fUCgodm9pZCAqKSk7DQoNCnN0cnVjdCBpc2FfZHJpdmVyIG9sdHJkcml2
ZXIgPSB7DQogICAgb2x0cl9wcm9iZSwNCiAgICBvbHRyX2F0dGFjaCwNCiAg
ICAib2x0ciIsDQogICAgMA0KfTsNCg0KaW50IGlzYV9jYXJkcyA9IDA7DQoN
CiNpZiBOUENJID4gMA0Kc3RhdGljIHVfbG9uZyBvbHRyX2NvdW50ID0gTk9M
VFI7DQpzdGF0aWMgY29uc3QgY2hhciAqb2x0cl9wY2lfcHJvYmUJX19QKChw
Y2ljaV90LCBwY2lkaV90KSk7DQpzdGF0aWMgdm9pZCBvbHRyX3BjaV9hdHRh
Y2gJCV9fUCgocGNpY2lfdCwgaW50KSk7DQpzdGF0aWMgdm9pZCBvbHRyX3Bj
aV9pbnRyICAgIAkJX19QKCh2b2lkICopKTsNCnN0YXRpYyB2b2lkIG9sdHJf
cGNpX3NodXRkb3duCQlfX1AoKGludCwgdm9pZCAqKSk7DQoNCnN0YXRpYyBz
dHJ1Y3QgcGNpX2RldmljZSBvbHRyX2RldmljZSA9IHsNCiAgICAib2x0ciIs
DQogICAgb2x0cl9wY2lfcHJvYmUsDQogICAgb2x0cl9wY2lfYXR0YWNoLA0K
ICAgICZvbHRyX2NvdW50LA0KICAgIE5VTEwNCn07DQoNCkRBVEFfU0VUKHBj
aWRldmljZV9zZXQsIG9sdHJfZGV2aWNlKTsNCmludCBwY2lfY2FyZHMgPSAw
Ow0KI2VuZGlmIC8qIE5QQ0kgKi8NCg0Kc3RhdGljIGludCAgb2x0cl9pZm1l
ZGlhX3VwZAlfX1AoKHN0cnVjdCBpZm5ldCAqKSk7DQpzdGF0aWMgdm9pZCBv
bHRyX2lmbWVkaWFfc3RzICAgIF9fUCgoc3RydWN0IGlmbmV0ICosIHN0cnVj
dCBpZm1lZGlhcmVxICopKTsNCg0Kc3RhdGljIFRSbGxkRHJpdmVyX3Qgb2x0
ckxsZERyaXZlciA9IHsNCiAgICBUUkxMRF9WRVJTSU9OLA0KI2lmbmRlZiBU
UmxsZElubGluZUlPDQogICAgRHJpdmVyT3V0Qnl0ZSwNCiAgICBEcml2ZXJP
dXRXb3JkLA0KICAgIERyaXZlck91dER3b3JkLA0KICAgIERyaXZlclJlcE91
dEJ5dGUsDQogICAgRHJpdmVyUmVwT3V0V29yZCwNCiAgICBEcml2ZXJSZXBP
dXREd29yZCwNCiAgICBEcml2ZXJJbkJ5dGUsDQogICAgRHJpdmVySW5Xb3Jk
LA0KICAgIERyaXZlckluRHdvcmQsDQogICAgRHJpdmVyUmVwSW5CeXRlLA0K
ICAgIERyaXZlclJlcEluV29yZCwNCiAgICBEcml2ZXJSZXBJbkR3b3JkLA0K
I2VuZGlmIC8qVFJsbGRJbmxpbmVJTyovDQogICAgRHJpdmVyU3VzcGVuZCwN
CiAgICBEcml2ZXJTdGF0dXMsDQogICAgRHJpdmVyQ2xvc2VDb21wbGV0ZWQs
DQogICAgRHJpdmVyU3RhdGlzdGljcywNCiAgICBEcml2ZXJUcmFuc21pdEZy
YW1lQ29tcGxldGVkLA0KICAgIERyaXZlclJlY2VpdmVGcmFtZUNvbXBsZXRl
ZCwNCn07DQoNClRSbGxkQWRhcHRlckNvbmZpZ190IG9sdHJfY29uZmlnW05P
TFRSICsgRVhUUkFfT0xUUl07DQoNCnZvaWQgKg0Kb2x0cl9tYWxsb2MoU2l6
ZSwgQWRhcHRlcikNCiAgICBzc2l6ZV90IFNpemU7DQogICAgVFJsbGRBZGFw
dGVyQ29uZmlnX3QgKkFkYXB0ZXI7DQp7DQoNCiAgICAvKiBJZiB0aGUgYWRh
cHRlciBuZWVkcyBtZW1vcnkgYmVsb3cgMTZNIGZvciBETUEgdGhlbiB1c2Ug
Y29udGlnbWFsbG9jICovDQogICAgaWYgKEFkYXB0ZXItPm1vZGUgJiBUUkxM
RF9NT0RFXzE2TSkgIC8qIEFkYXB0ZXIgdXNpbmcgSVNBIERNQSBidWZmZXIg
YmVsb3cgMTZNICovDQogICAgICAgIHJldHVybihjb250aWdtYWxsb2MoU2l6
ZSwgTV9ERVZCVUYsIE1fTk9XQUlULCAwdWwsIDB4ZmZmZmZmdWwsIDF1bCwg
MHgxMDAwMHVsKSk7DQogICAgZWxzZQ0KICAgICAgICByZXR1cm4obWFsbG9j
KFNpemUsIE1fREVWQlVGLCBNX05PV0FJVCkpOw0KfQ0KICAgIA0KLyoNCiAq
IERyaXZlciBGdW5jdGlvbnMgDQogKi8NCg0Kc3RhdGljIGludA0Kb2x0cl9w
cm9iZShpcykNCiAgICBzdHJ1Y3QgaXNhX2RldmljZSAqaXM7DQp7DQogICAg
c3RhdGljIGludCBmaW5kX2NvbXBsZXRlZCA9IDAsIGFzc2lnbmVkW05PTFRS
XTsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1tp
cy0+aWRfdW5pdF07DQogICAgaW50IGk7DQoNCiAgICBwcmludGYoIm9sdHIl
ZDogb2x0cl9wcm9iZVxuIiwgaXMtPmlkX3VuaXQpOw0KDQogICAgLyogTWFr
ZSBsaWZlIGVhc3ksIHVzZSB0aGUgT2xpY29tIHN1cHBsaWVkIGZpbmQgZnVu
Y3Rpb24gb24gdGhlIGZpcnN0IHByb2JlDQogICAgICogdG8gcHJvYmUgYWxs
IG9mIHRoZSBJU0EgYWRhcHRlcnMuICBUaGVuIGdpdmUgdGhlbSB0byBlYWNo
IHVuaXQgYXMgcmVxdWVzdGVkLg0KICAgICAqIFRyeSB0byBtYXRjaCB0aGUg
YWRhcHRlcnMgdG8gdW5pdHMgYmFzZWQgb24gdGhlIGlvYmFzZSwgYnV0IGlm
IGlvYmFzZT8gdGhlbg0KICAgICAqIGp1c3QgZ2l2ZSBvdXQgdGhlIG5leHQg
YXZhaWxhYmxlIGFkYXB0ZXIuDQogICAgICovDQogICAgaWYgKCFmaW5kX2Nv
bXBsZXRlZCkgew0KICAgICAgICBpc2FfY2FyZHMgPSBUUmxsZEZpbmQoJm9s
dHJMbGREcml2ZXIsICZvbHRyX2NvbmZpZ1swXSwgSVNBX0FEQVBURVJTLCBO
T0xUUik7DQogICAgICAgIC8qZm9yIChpID0gMDsgaSA8IGlzYV9jYXJkczsg
aSsrKSB7DQogICAgICAgICAgICBwcmludGYoIlRSbGxkRmluZDogY2FyZCAl
ZCAtICVzIE1BQyAlNkRcbiIsIGkgKyAxLCBBZGFwdGVyTmFtZVtvbHRyX2Nv
bmZpZ1tpXS50eXBlXSwgb2x0cl9jb25maWdbaV0ubWFjYWRkcmVzcywgIjoi
KTsNCiAgICAgICAgfSovDQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBOT0xU
UjsgaSsrKQ0KICAgICAgICAgICAgYXNzaWduZWRbaV0gPSAwOw0KICAgICAg
ICBmaW5kX2NvbXBsZXRlZCA9IDE7DQogICAgfQ0KDQogICAgc2MtPnVuaXQg
PSBpcy0+aWRfdW5pdDsNCiAgICBzYy0+aHdfc3RhdGUgPSBIV19VTktOT1dO
Ow0KDQogICAgaWYgKGZpbmRfY29tcGxldGVkICYmICgoaXNhX2NhcmRzID09
IDApIHx8IChpcy0+aWRfdW5pdCA+IGlzYV9jYXJkcykpKSANCiAgICAgICAg
cmV0dXJuKDApOw0KDQogICAgaWYgKCgoaXMtPmlkX2lvYmFzZSA8IDB4YTAw
KSB8fCAoaXMtPmlkX2lvYmFzZSA+IDB4YmUwKSkgJiYgKGlzLT5pZF9pb2Jh
c2UgIT0gMHhmZmZmZmZmZikpIHsNCiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6
IHBvcnQgYWRkcmVzcyBpbXBvc3NpYmxlICgweCVYKVxuIiwgaXMtPmlkX3Vu
aXQsIGlzLT5pZF9pb2Jhc2UpOw0KICAgICAgICByZXR1cm4oMCk7DQogICAg
fQ0KDQogICAgLyogQXV0byBhc3NpZ24gbG93ZXN0IGF2YWlsYWJsZSBjYXJk
IG5vdCBhbHJlYWR5IGluIHVzZSAqLw0KICAgIGlmIChpcy0+aWRfaW9iYXNl
ID09IDB4ZmZmZmZmZmYpIHsNCiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IGF1
dG8gYXNzaWduaW5nIGNhcmQuXG4iLCBpcy0+aWRfdW5pdCk7DQogICAgICAg
IGZvciAoaSA9IDA7IGFzc2lnbmVkW2ldOyBpKyspOw0KICAgICAgICBhc3Np
Z25lZFtpXSA9IDE7DQogICAgICAgIHNjLT5jb25maWcgPSAmb2x0cl9jb25m
aWdbaV07DQogICAgICAgIGlzLT5pZF9pb2Jhc2UgPSBzYy0+Y29uZmlnLT5p
b2Jhc2UwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsYWltIG91ciBw
b3J0IHNwYWNlICovDQogICAgICAgIGlmICghaXMtPmlkX2lycSkgDQogICAg
ICAgICAgICBpcy0+aWRfaXJxID0gKDEgPDwgc2MtPmNvbmZpZy0+aW50ZXJy
dXB0bGV2ZWwpOyAgICAgICAgIC8qIENsYWltIG91ciBpbnRlcnJ1cHQgKi8N
CiAgICAgICAgaXMtPmlkX2ludHIgPSAoaW50aGFuZDJfdCAqKW9sdHJfaW50
cjsNCiAgICAgICAgcmVnaXN0ZXJfaW50cihmZnMoaXMtPmlkX2lycSkgLSAx
LCBpcy0+aWRfaWQsIGlzLT5pZF9yaV9mbGFncywgaXMtPmlkX2ludHIsICZu
ZXRfaW1hc2ssIGlzLT5pZF91bml0KTsNCiAgICAgICAgaWYgKChpcy0+aWRf
ZHJxID09IDB4ZmZmZmZmZmYpICYmIChzYy0+Y29uZmlnLT5kbWFsZXZlbCAh
PSBUUkxMRF9ETUFfUElPKSkNCiAgICAgICAgICAgIGlzLT5pZF9kcnEgPSBz
Yy0+Y29uZmlnLT5kbWFsZXZlbDsgICAgICAgICAgICAgICAgICAgICAgLyog
Q2xhaW0gb3VyIGRtYSBjaGFubmVsICovDQogICAgICAgIHByaW50Zigib2x0
ciVkOiA8JXM+IFslNkRdXG4iLCBpcy0+aWRfdW5pdCwgQWRhcHRlck5hbWVb
c2MtPmNvbmZpZy0+dHlwZV0sIHNjLT5jb25maWctPm1hY2FkZHJlc3MsICI6
Iik7DQogICAgICAgIHNjLT5od19zdGF0ZSA9IEhXX0ZPVU5EOw0KICAgICAg
ICByZXR1cm4oMSk7DQogICAgfSBlbHNlIHsNCiAgICAvKiBBc3NpZ24gYmFz
ZWQgb24gaW9iYXNlIGFkZHJlc3MgcHJvdmlkZWQgaW4ga2VybmVsIGNvbmZp
ZyAqLw0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTk9MVFI7IGkrKykgew0K
ICAgICAgICAgICAgaWYgKGlzLT5pZF9pb2Jhc2UgPT0gb2x0cl9jb25maWdb
aV0uaW9iYXNlMCkgew0KICAgICAgICAgICAgICAgIGlmIChhc3NpZ25lZFtp
XSkgew0KICAgICAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIlZDogYWRh
cHRlciAoMHglWCkgYWxyZWFkeSBhc3NpZ25lZC5cbiIsIGlzLT5pZF91bml0
LCBpcy0+aWRfaW9iYXNlKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
KDApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBhc3Np
Z25lZFtpXSA9IDE7DQogICAgICAgICAgICAgICAgc2MtPmNvbmZpZyA9ICZv
bHRyX2NvbmZpZ1tpXTsNCiAgICAgICAgICAgICAgICBpZiAoaXMtPmlkX2ly
cSA9PSAwKQ0KICAgICAgICAgICAgICAgICAgICBpcy0+aWRfaXJxID0gKDEg
PDwgc2MtPmNvbmZpZy0+aW50ZXJydXB0bGV2ZWwpOyAgICAgICAgIC8qIENs
YWltIG91ciBpbnRlcnJ1cHQgKi8NCiAgICAgICAgICAgICAgICBpcy0+aWRf
aW50ciA9IChpbnRoYW5kMl90ICopb2x0cl9pbnRyOw0KICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyX2ludHIoZmZzKGlzLT5pZF9pcnEpIC0gMSwgaXMtPmlk
X2lkLCBpcy0+aWRfcmlfZmxhZ3MsIGlzLT5pZF9pbnRyLCAmbmV0X2ltYXNr
LCBpcy0+aWRfdW5pdCk7DQogICAgICAgICAgICAgICAgaWYgKChpcy0+aWRf
ZHJxID09IDB4ZmZmZmZmZmYpICYmIChzYy0+Y29uZmlnLT5kbWFsZXZlbCAh
PSBUUkxMRF9ETUFfUElPKSkNCiAgICAgICAgICAgICAgICAgICAgaXMtPmlk
X2RycSA9IHNjLT5jb25maWctPmRtYWxldmVsOyAgICAgICAgICAgICAgICAg
ICAgICAvKiBDbGFpbSBvdXIgZG1hIGNoYW5uZWwgKi8NCiAgICAgICAgICAg
ICAgICBwcmludGYoIm9sdHIlZDogPCVzPiBbJTZEXVxuIiwgaXMtPmlkX3Vu
aXQsIEFkYXB0ZXJOYW1lW3NjLT5jb25maWctPnR5cGVdLCBzYy0+Y29uZmln
LT5tYWNhZGRyZXNzLCAiOiIpOw0KICAgICAgICAgICAgICAgIHNjLT5od19z
dGF0ZSA9IEhXX0ZPVU5EOw0KICAgICAgICAgICAgICAgIHJldHVybigxKTsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4o
MCk7IC8qIENhcmQgd2FzIG5vdCBmb3VuZCAqLw0KfQ0KDQojaWYgTlBDSSA+
IDANCnN0YXRpYyBjb25zdCBjaGFyICoNCm9sdHJfcGNpX3Byb2JlKGNvbmZp
Z19pZCwgZGV2aWNlX2lkKQ0KICAgIHBjaWNpX3QgY29uZmlnX2lkOw0KICAg
IHBjaWRpX3QgZGV2aWNlX2lkOw0Kew0KICAgIHVfY2hhciBQQ0lDb25maWd1
cmF0aW9uU3BhY2VbNjRdOw0KICAgIHVfbG9uZyBjb21tYW5kOw0KICAgIGlu
dCBpLCBqLCByYzsNCg0KICAgIHByaW50Zigib2x0cjogb2x0cl9wY2lfcHJv
YmVcbiIpOw0KDQogICAgaiA9IE5PTFRSICsgcGNpX2NhcmRzOw0KDQogICAg
aWYgKHBjaV9jYXJkcyA9PSBFWFRSQV9PTFRSKQ0KICAgICAgICByZXR1cm4o
TlVMTCk7DQoNCiAgICBpZiAoKChkZXZpY2VfaWQgJiAweGZmZmYpID09IFBD
SV9WRU5ET1JfT0xJQ09NKSAmJiANCiAgICAgICAgICAoKCgoZGV2aWNlX2lk
ID4+IDE2KSAmIDB4ZmZmZikgPT0gMHgwMDAxKSB8fCANCiAgICAgICAgICAg
KCgoZGV2aWNlX2lkID4+IDE2KSAmIDB4ZmZmZikgPT0gMHgwMDA0KSB8fCAN
CiAgICAgICAgICAgKCgoZGV2aWNlX2lkID4+IDE2KSAmIDB4ZmZmZikgPT0g
MHgwMDA1KSB8fCANCiAgICAgICAgICAgKCgoZGV2aWNlX2lkID4+IDE2KSAm
IDB4ZmZmZikgPT0gMHgwMDA3KSB8fCANCiAgICAgICAgICAgKCgoZGV2aWNl
X2lkID4+IDE2KSAmIDB4ZmZmZikgPT0gMHgwMDA4KSkpIHsNCg0KICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykNCiAgICAgICAgICAgIFBDSUNv
bmZpZ3VyYXRpb25TcGFjZVtpXSA9IHBjaV9jZmdyZWFkKGNvbmZpZ19pZCwg
aSwgLypieXRlcyovMSk7DQoNCiAgICAgICAgcmMgPSBUUmxsZFBDSUNvbmZp
Zygmb2x0ckxsZERyaXZlciwgJm9sdHJfY29uZmlnW2pdLCBQQ0lDb25maWd1
cmF0aW9uU3BhY2UpOw0KDQogICAgICAgIGlmICgocmMgPT0gVFJMTERfUENJ
Q09ORklHX09LKSB8fCAocmMgPT0gVFJMTERfUENJQ09ORklHX1NFVF9DT01N
QU5EKSkgew0KICAgICAgICAgICAgaWYgKHJjID09IFRSTExEX1BDSUNPTkZJ
R19TRVRfQ09NTUFORCkgew0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0
cjogc2V0dGluZyBidXMtbWFzdGVyIG1vZGVcbiIpOw0KICAgICAgICAgICAg
ICAgIGNvbW1hbmQgPSBwY2lfY29uZl9yZWFkKGNvbmZpZ19pZCwgUENJUl9D
T01NQU5EKTsNCiAgICAgICAgICAgICAgICBwY2lfY29uZl93cml0ZShjb25m
aWdfaWQsIFBDSVJfQ09NTUFORCwgKGNvbW1hbmQgfCBQQ0lNX0NNRF9CVVNN
QVNURVJFTikpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcGNpX2Nh
cmRzKys7DQogICAgICAgICAgICByZXR1cm4gKEFkYXB0ZXJOYW1lW29sdHJf
Y29uZmlnW2pdLnR5cGVdKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg
ICAgIGlmIChyYyA9PSBUUkxMRF9QQ0lDT05GSUdfRkFJTCkNCiAgICAgICAg
ICAgICAgICBwcmludGYoIm9sdHI6IFRSbGxkUENJQ29uZmlnIGZhaWxlZCFc
biIpOw0KICAgICAgICAgICAgaWYgKHJjID09IFRSTExEX1BDSUNPTkZJR19W
RVJTSU9OKQ0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0cjogd3Jvbmcg
TExEIHZlcnNpb25cbiIpOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVy
bihOVUxMKTsNCn0NCiNlbmRpZiAvKiBOUENJICovDQoNCnN0YXRpYyBpbnQN
Cm9sdHJfYXR0YWNoKGlzKQ0KICAgIHN0cnVjdCBpc2FfZGV2aWNlICppczsN
CnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1tp
cy0+aWRfdW5pdF07DQogICAgaW50IHJjOw0KDQogICAgc2MtPnVuaXQgPSBp
cy0+aWRfdW5pdDsNCg0KICAgIGlmICghb2x0cl9hdHRhY2hfY29tbW9uKHNj
KSkNCiAgICAgICAgcmV0dXJuKDApOw0KDQogICAgLyogSWYgdGhlIGtlcm5l
bCBjb25maWcgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY2FyZCBjb25m
aWd1cmF0aW9uIHRoZW4NCiAgICAgKiBhZGp1c3QgdGhlIGNhcmQgc2V0dGlu
Z3MgdG8gbWF0Y2ggdGhlIGtlcm5lbC4NCiAgICAgKi8NCiAgICBpZiAoKGZm
cyhpcy0+aWRfaXJxKSAtIDEpICE9IHNjLT5jb25maWctPmludGVycnVwdGxl
dmVsKSB7DQogICAgICAgIHJjID0gVFJsbGRTZXRJbnRlcnJ1cHQoc2MtPlRS
bGxkQWRhcHRlciwgaXMtPmlkX2lycSk7IA0KICAgICAgICBpZiAocmMgIT0g
VFJMTERfQ09ORklHX09LKSB7ICANCiAgICAgICAgICAgIHByaW50Zigib2x0
ciVkOiBVbmFibGUgdG8gY2hhbmdlIGFkYXB0ZXIgaW50ZXJydXB0IGxldmVs
ICgleClcbiIsIHNjLT51bml0LCByYyk7DQogICAgICAgICAgICByZXR1cm4o
MCk7DQogICAgICAgIH0NCiAgICB9ICAgDQogICAgICAgIA0KICAgIC8qIFNl
dCBkbWEgbGV2ZWwsIGZhbGwgYmFjayB0byBwaW8gaWYgcG9zc2libGUuIChm
b2xsb3dpbmcgU0NPIGRyaXZlciBleGFtcGxlKSAqLw0KICAgIGlmIChpcy0+
aWRfZHJxICE9IHNjLT5jb25maWctPmRtYWxldmVsKSB7DQogICAgICAgIHJj
ID0gVFJsbGRTZXRETUEoc2MtPlRSbGxkQWRhcHRlciwgaXMtPmlkX2RycSwg
JnNjLT5jb25maWctPm1vZGUpOw0KICAgICAgICBpZiAocmMgIT0gVFJMTERf
Q09ORklHX09LKSB7DQogICAgICAgICAgICBpZiAoKHNjLT5jb25maWctPmRt
YWxldmVsICE9IFRSTExEX0RNQV9QSU8pICYmDQogICAgICAgICAgICAgICAg
KFRSbGxkU2V0RE1BKHNjLT5UUmxsZEFkYXB0ZXIsIFRSTExEX0RNQV9QSU8s
ICZzYy0+Y29uZmlnLT5tb2RlKSAhPSBUUkxMRF9DT05GSUdfT0spKSB7DQog
ICAgICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IHVuYWJsZSB0byBjaGFu
Z2UgZG1hIGxldmVsIGZyb20gJWQgdG8gJWQgKCV4KVxuIiwgc2MtPnVuaXQs
DQogICAgICAgICAgICAgICAgICAgICAgICBzYy0+Y29uZmlnLT5kbWFsZXZl
bCwgaXMtPmlkX2RycSwgcmMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgcHJpbnRmKCJvbHRyJWQ6IFVuYWJsZSB0byBjaGFuZ2UgYWRhcHRlciBk
bWEgbGV2ZWwsIHVzaW5nIFBJTyBtb2RlICgleClcbiIsIHNjLT51bml0LCBy
Yyk7DQogICAgICAgICAgICBzYy0+Y29uZmlnLT5kbWFsZXZlbCA9IFRSTExE
X0RNQV9QSU87DQogICAgICAgICAgICByYyA9IFRSbGxkU2V0RE1BKHNjLT5U
UmxsZEFkYXB0ZXIsIGlzLT5pZF9kcnEsICZzYy0+Y29uZmlnLT5tb2RlKTsN
CiAgICAgICAgfQ0KICAgICAgICBpcy0+aWRfaXJxID0gc2MtPmNvbmZpZy0+
ZG1hbGV2ZWw7DQogICAgfQ0KICAgIHJldHVybigxKTsNCn0NCg0KI2lmIE5Q
Q0kgPiAwDQpzdGF0aWMgdm9pZA0Kb2x0cl9wY2lfYXR0YWNoKGNvbmZpZ19p
ZCwgdW5pdCkNCiAgICBwY2ljaV90IGNvbmZpZ19pZDsNCiAgICBpbnQgdW5p
dDsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0
Y1t1bml0XTsNCg0KICAgIHNjLT51bml0ID0gdW5pdDsNCiAgICBzYy0+Y29u
ZmlnID0gJm9sdHJfY29uZmlnW3VuaXRdOw0KICAgIHNjLT5od19zdGF0ZSA9
IEhXX0ZPVU5EOw0KDQogICAgcHJpbnRmKCJvbHRyJWQ6IG1hYyBhZGRyZXNz
IFslNkRdXG4iLCBzYy0+dW5pdCwgc2MtPmNvbmZpZy0+bWFjYWRkcmVzcywg
IjoiKTsNCg0KICAgIGlmICghb2x0cl9hdHRhY2hfY29tbW9uKHNjKSkNCiAg
ICAgICAgcmV0dXJuOw0KDQogICAgLyogTWFwIG91ciBpbnRlcnJ1cHQgKi8N
CiAgICBpZiAoIXBjaV9tYXBfaW50KGNvbmZpZ19pZCwgb2x0cl9wY2lfaW50
ciwgc2MsICZuZXRfaW1hc2spKSB7DQogICAgICAgIHByaW50Zigib2x0ciVk
OiBjb3VsZG4ndCBtYXAgaW50ZXJydXB0XG4iLCB1bml0KTsNCiAgICAgICAg
cmV0dXJuOw0KICAgIH0NCn0NCiNlbmRpZiAvKiBOUENJICovDQoNCnN0YXRp
YyBpbnQNCm9sdHJfYXR0YWNoX2NvbW1vbihzYykNCiAgICBzdHJ1Y3Qgb2x0
cl9zb2Z0YyAqc2M7DQp7DQogICAgc3RydWN0IGlmbmV0ICppZnAgPSAmc2Mt
PmFycGNvbS5hY19pZjsNCiAgICB1X2ludCAgYnVmc2l6ZTsNCiAgICBpbnQg
ICAgcmMsIGksIGo7DQogIA0KICAgIC8qcHJpbnRmKCJvbHRyJWQ6IGF0dGFj
aF9jb21tb24gY2FsbGVkXG4iLCBzYy0+dW5pdCk7Ki8NCg0KICAgIC8qIEFs
bG9jYXRlIGFkYXB0ZXIgbWVtb3J5IGJ1ZmZlciAqLw0KICAgIGJ1ZnNpemUg
PSBUUmxsZEFkYXB0ZXJTaXplKCk7DQogICAgc2MtPlRSbGxkQWRhcHRlciA9
IChUUmxsZEFkYXB0ZXJfdCAqKW9sdHJfbWFsbG9jKGJ1ZnNpemUsIHNjLT5j
b25maWcpOw0KICAgIGlmIChzYy0+VFJsbGRBZGFwdGVyID09IE5VTEwpIHsN
CiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBh
ZGFwdGVyIG1lbW9yeSBibG9jayAoJWQgYnl0ZXMpXG4iLCBzYy0+dW5pdCwg
YnVmc2l6ZSk7DQogICAgfSANCiAgICAvKnByaW50Zigib2x0ciVkOiBBZGFw
dGVyIG1lbW9yeSBibG9jayAoJXAgJWQgYnl0ZXMpXG4iLCBzYy0+dW5pdCwg
c2MtPlRSbGxkQWRhcHRlciwgYnVmc2l6ZSk7Ki8NCg0KICAgIC8qIFNldHVw
IHRyYW5zbWl0IHBvb2wgKi8NCiAgICBmb3IgKGkgPSAwOyBpIDwgVFhfTElT
VF9TSVpFOyBpKyspIHsNCiAgICAgICAgc2MtPnR4X2J1ZmZlcltpXS5pbmRl
eCA9IGk7DQogICAgICAgIHNjLT50eF9idWZmZXJbaV0uYnVmID0gKGNoYXIg
KilvbHRyX21hbGxvYyhUWF9CVUZGRVJfTEVOLCBzYy0+Y29uZmlnKTsNCiAg
ICAgICAgLyogSWYgd2UgaGF2ZSBhIGZhaWx1cmUgdGhlbiBmcmVlIGV2ZXJ5
dGhpbmcgYW5kIGdldCBvdXQgKi8NCiAgICAgICAgaWYgKCFzYy0+dHhfYnVm
ZmVyW2ldLmJ1Zikgew0KICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IFVu
YWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBidWZmZXJzLlxuIiwgc2MtPnVu
aXQpOw0KICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykNCiAg
ICAgICAgICAgICAgICBmcmVlKHNjLT50eF9idWZmZXJbal0uYnVmLCBNX0RF
VkJVRik7DQogICAgICAgICAgICByZXR1cm4oMCk7DQogICAgICAgIH0NCiAg
ICB9DQogICAgc2MtPnR4X25leHQgPSAwOw0KICAgIHNjLT50eF9hdmFpbCA9
IFRYX0xJU1RfU0laRTsNCg0KICAgIC8qIFNldHVwIHJlY2VpdmUgcG9vbCAq
Lw0KICAgIGZvciAoaSA9IDA7IGkgPCBSWF9MSVNUX1NJWkU7IGkrKykgew0K
ICAgICAgICBzYy0+cnhfYnVmZmVyW2ldLmluZGV4ID0gaTsNCiAgICAgICAg
c2MtPnJ4X2J1ZmZlcltpXS5idWYgPSAoY2hhciAqKW9sdHJfbWFsbG9jKFJY
X0JVRkZFUl9MRU4sIHNjLT5jb25maWcpOw0KICAgICAgICAvKiBJZiB3ZSBo
YXZlIGEgZmFpbHVyZSB0aGVuIGZyZWUgZXZlcnl0aGluZyBhbmQgZ2V0IG91
dCAqLw0KICAgICAgICBpZiAoIXNjLT5yeF9idWZmZXJbaV0uYnVmKSB7ICAg
ICAgICAgIA0KICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IFVuYWJsZSB0
byBhbGxvY2F0ZSByZWNlaXZlIGJ1ZmZlcnMuXG4iLCBzYy0+dW5pdCk7DQog
ICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQ0KICAgICAgICAg
ICAgICAgIGZyZWUoc2MtPnJ4X2J1ZmZlcltqXS5idWYsIE1fREVWQlVGKTsN
CiAgICAgICAgICAgIHJldHVybigwKTsNCiAgICAgICAgfQ0KICAgIH0gICAN
CiAgICBzYy0+cnhfbmV4dCA9IDA7DQogICAgc2MtPnJ4X2F2YWlsID0gUlhf
TElTVF9TSVpFOyANCiAgICAvKnByaW50Zigib2x0ciVkOiBBbGxvY2F0ZWQg
cmVjZWl2ZSBidWZmZXJzXG4iLCBzYy0+dW5pdCk7ICovDQogICAgDQogICAg
LyogU2V0IHVwIGFkYXB0ZXIgcG9sbGluZyBtZWNoYW5pc20gKi8NCiAgICBz
Yy0+cG9sbF9hZGFwdGVyID0gMTsNCiAgICBjYWxsb3V0X2hhbmRsZV9pbml0
KCZzYy0+cG9sbF9jaCk7DQogICAgc2MtPnBvbGxfY2ggPSB0aW1lb3V0KGFk
YXB0ZXJfcG9sbCwgKHZvaWQgKilzYy0+dW5pdCwgKDEqaHopLzEwMDApOw0K
ICAgIGNhbGxvdXRfaGFuZGxlX2luaXQoJnNjLT5vbHRyX2NoKTsNCg0KICAg
IC8qIEluaXRpYWxpemUgYWRhcHRlciAqLw0KICAgIHJjID0gVFJsbGRBZGFw
dGVySW5pdCgmb2x0ckxsZERyaXZlciwgc2MtPlRSbGxkQWRhcHRlciwga3Z0
b3Aoc2MtPlRSbGxkQWRhcHRlciksIA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAodm9pZCAqKXNjLT51bml0LCBzYy0+Y29uZmlnKTsNCiAgICBpZiAo
cmMgIT0gVFJMTERfSU5JVF9PSykgew0KICAgICAgICBzd2l0Y2ggKHJjKSB7
DQogICAgICAgICAgICBjYXNlIFRSTExEX0lOSVRfTk9UX0ZPVU5EOg0KICAg
ICAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVyIG5vdCBmb3Vu
ZCBvciBtYWxmdW5jdGlvbmluZy5cbiIsIHNjLT51bml0KTsNCiAgICAgICAg
ICAgICAgICBzYy0+aHdfc3RhdGUgPSBIV19CQUQ7DQogICAgICAgICAgICAg
ICAgcmV0dXJuKDApOw0KICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX1VO
U1VQUE9SVEVEOg0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBB
ZGFwdGVyIG5vdCBzdXBwb3J0ZWQgYnkgbG93IGxldmVsIGRyaXZlci5cbiIs
IHNjLT51bml0KTsNCiAgICAgICAgICAgICAgICBzYy0+aHdfc3RhdGUgPSBI
V19VTktOT1dOOw0KICAgICAgICAgICAgICAgIHJldHVybigwKTsNCiAgICAg
ICAgICAgIGNhc2UgVFJMTERfSU5JVF9QSFlTMTY6DQogICAgICAgICAgICAg
ICAgcHJpbnRmKCJvbHRyJWQ6IEFkYXB0ZXIgbWVtb3J5IGJsb2NrIGFib3Zl
IDE2TSwgbXVzdCBiZSBiZWxvdyAxNk0uXG4iLCBzYy0+dW5pdCk7DQogICAg
ICAgICAgICAgICAgcmV0dXJuKDApOw0KICAgICAgICAgICAgY2FzZSBUUkxM
RF9JTklUX1ZFUlNJT046DQogICAgICAgICAgICAgICAgcHJpbnRmKCJvbHRy
JWQ6IExvdyBsZXZlbCBkcml2ZXIgdmVyc2lvbiBtaXNtYXRjaC5cbiIsIHNj
LT51bml0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4oMCk7DQogICAgICAg
ICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVk
OiBVbmtub3duIGluaXRpbGl6YXRpb24gZXJyb3Igb2Njb3VyZWQgKCV4KS5c
biIsIHNjLT51bml0LCByYyk7DQogICAgICAgICAgICAgICAgcmV0dXJuKDAp
Ow0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyogRG93bmxvYWQgQWRhcHRl
ciBNaWNyb2NvZGUgKi8NCiAgICAvKnByaW50Zigib2x0ciVkOiBEb3dubG9h
ZGluZyBhZGFwdGVyIG1pY3JvY29kZS4uLiIsIHNjLT51bml0KTsqLw0KICAg
IHNjLT5od19zdGF0ZSA9IEhXX0xPQURJTkc7DQogICAgc3dpdGNoKHNjLT5j
b25maWctPm1hY3R5cGUpIHsNCiAgICAgICAgY2FzZSBUUkxMRF9NQUNfVE1T
OiAgICAgICAgICAgLyogVE1TIG1pY3JvY29kZSAqLw0KICAgICAgICAgICAg
cmMgPSBUUmxsZERvd25sb2FkKHNjLT5UUmxsZEFkYXB0ZXIsIFRSbGxkTWFj
Q29kZSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBUUkxM
RF9NQUNfSEFXS0VZRTogICAgICAgIC8qIEhhd2tleWUgbWljcm9jb2RlICov
DQogICAgICAgICAgICByYyA9IFRSbGxkRG93bmxvYWQoc2MtPlRSbGxkQWRh
cHRlciwgVFJsbGRIYXdrZXllTWFjKTsNCiAgICAgICAgICAgIGJyZWFrOw0K
ICAgICAgICBjYXNlIFRSTExEX01BQ19CVUxMU0VZRTogICAgICAvKiBCdWxs
c2V5ZSBtaWNyb2NvZGUgKi8NCiAgICAgICAgICAgIHJjID0gVFJsbGREb3du
bG9hZChzYy0+VFJsbGRBZGFwdGVyLCBUUmxsZEJ1bGxzZXllTWFjKTsNCiAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAg
ICAgcHJpbnRmKCJvbHRyJWQ6IHVua25vd24gbWFjdHlwZSAlZFxuIiwgc2Mt
PnVuaXQsIHNjLT5jb25maWctPm1hY3R5cGUpOw0KICAgICAgICAgICAgcmV0
dXJuKDApOw0KICAgIH0NCiAgICAvKmlmIChyYyA9PSBUUkxMRF9ET1dOTE9B
RF9PSykgDQogICAgICAgIHByaW50ZigiZG9uZVxuIik7Ki8NCiAgICBpZiAo
KHJjID09IFRSTExEX0RPV05MT0FEX0VSUk9SKSB8fCAocmMgPT0gVFJMTERf
U1RBVEUpKSB7DQogICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVyIG1p
Y3JvY29kZSBkb3dubG9hZCBmYWlsZWQhIChyYyA9ICV4KVxuIiwgc2MtPnVu
aXQsIHJjKTsNCiAgICAgICAgc2MtPmh3X3N0YXRlID0gSFdfQkFEOw0KICAg
ICAgICByZXR1cm4oMCk7ICAgICANCiAgICB9DQoNCiAgICBUUmxsZFNldFNw
ZWVkKHNjLT5UUmxsZEFkYXB0ZXIsIFRSTExEX1NQRUVEX0FVVE8pOw0KDQog
ICAgc2MtPlByb21pc2NNb2RlID0gMDsNCiAgICBzYy0+QWRhcHRlck1vZGUg
PSAwOw0KDQogICAgLyogRG8gdGhlIGlmbmV0IGluaXRpYWxpemF0aW9uICov
DQogICAgaWZwLT5pZl9zb2Z0YyAgID0gc2M7DQogICAgaWZwLT5pZl91bml0
ICAgID0gc2MtPnVuaXQ7DQogICAgaWZwLT5pZl9uYW1lICAgID0gIm9sdHIi
Ow0KICAgIGlmcC0+aWZfb3V0cHV0ICA9IGlzbzg4MDI1X291dHB1dDsNCiAg
ICBpZnAtPmlmX2luaXQgICAgPSAoaWZfaW5pdF9mX3QgKilvbHRyX2luaXQ7
DQogICAgaWZwLT5pZl9zdGFydCAgID0gb2x0cl9zdGFydDsNCiAgICBpZnAt
PmlmX2lvY3RsICAgPSBvbHRyX2lvY3RsOw0KICAgIGlmcC0+aWZfZmxhZ3Mg
ICA9IElGRl9CUk9BRENBU1QgfCBJRkZfTVVMVElDQVNUIHwgSUZGX1NJTVBM
RVg7DQogICAgYmNvcHkoc2MtPmNvbmZpZy0+bWFjYWRkcmVzcywgc2MtPmFy
cGNvbS5hY19lbmFkZHIsIHNpemVvZihzYy0+Y29uZmlnLT5tYWNhZGRyZXNz
KSk7DQoNCiAgICAvKiBTZXQgdXAgY29tbW9uIGlmbWVkaWEgb3B0aW9ucyAq
Lw0KICAgIGlmbWVkaWFfaW5pdCgmc2MtPmlmbWVkaWEsIDAsIG9sdHJfaWZt
ZWRpYV91cGQsIG9sdHJfaWZtZWRpYV9zdHMpOw0KDQogICAgaWZtZWRpYV9h
ZGQoJnNjLT5pZm1lZGlhLCBJRk1fVE9LRU4gfCBJRk1fQVVUTywgMCAsIE5V
TEwpOw0KICAgIGlmbWVkaWFfYWRkKCZzYy0+aWZtZWRpYSwgSUZNX1RPS0VO
IHwgSUZNX1RPS19VVFA0LCAwICwgTlVMTCk7DQogICAgaWZtZWRpYV9hZGQo
JnNjLT5pZm1lZGlhLCBJRk1fVE9LRU4gfCBJRk1fVE9LX1VUUDE2LCAwICwg
TlVMTCk7DQogICAgDQogICAgaWZtZWRpYV9zZXQoJnNjLT5pZm1lZGlhLCBJ
Rk1fVE9LRU4gfCBJRk1fQVVUTyk7DQoNCiAgICBpZl9hdHRhY2goaWZwKTsN
CiAgICBpc284ODAyNV9pZmF0dGFjaChpZnApOw0KDQojaWYgTkJQRklMVEVS
ID4gMA0KICAgIGJwZmF0dGFjaChpZnAsIERMVF9JRUVFODAyLCBzaXplb2Yo
c3RydWN0IGlzbzg4MDI1X2hlYWRlcikpOw0KI2VuZGlmDQoNCiAgICByZXR1
cm4oMSk7DQp9DQoNCiNpZiBOUENJID4gMA0Kc3RhdGljIHZvaWQNCm9sdHJf
cGNpX3NodXRkb3duKGhvd3RvLCBzYykNCiAgICBpbnQgaG93dG87DQogICAg
dm9pZCAqc2M7DQp7DQogICAgcHJpbnRmKCJvbHRyOiBvbHRyX3BjaV9zaHV0
ZG93biBjYWxsZWRcbiIpOw0KfQ0KI2VuZGlmIC8qIE5QQ0kgKi8NCg0Kc3Rh
dGljIGludA0Kb2x0cl9pZm1lZGlhX3VwZChpZnApDQogICAgc3RydWN0IGlm
bmV0ICppZnA7DQp7DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gaWZw
LT5pZl9zb2Z0YzsNCiAgICBzdHJ1Y3QgaWZtZWRpYSAqaWZtICAgPSAmc2Mt
PmlmbWVkaWE7DQoNCiAgICBpZiAoSUZNX1RZUEUoaWZtLT5pZm1fbWVkaWEp
ICE9IElGTV9UT0tFTikNCiAgICAgICAgcmV0dXJuKEVJTlZBTCk7DQogICAg
DQogICAgc3dpdGNoKElGTV9TVUJUWVBFKGlmbS0+aWZtX21lZGlhKSkgew0K
ICAgICAgICBjYXNlIElGTV9BVVRPOg0KICAgICAgICAgICAgVFJsbGRTZXRT
cGVlZChzYy0+VFJsbGRBZGFwdGVyLCBUUkxMRF9TUEVFRF9BVVRPKTsNCiAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIElGTV9UT0tfVVRQNDoN
CiAgICAgICAgICAgIFRSbGxkU2V0U3BlZWQoc2MtPlRSbGxkQWRhcHRlciwg
VFJMTERfU1BFRURfNE1CUFMpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAg
ICAgIGNhc2UgSUZNX1RPS19VVFAxNjoNCiAgICAgICAgICAgIFRSbGxkU2V0
U3BlZWQoc2MtPlRSbGxkQWRhcHRlciwgVFJMTERfU1BFRURfMTZNQlBTKTsN
CiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAg
ICAgICAgcmV0dXJuKEVJTlZBTCk7DQogICAgfQ0KDQogICAgaWYgKElGTV9U
WVBFX09QVElPTlMoaWZtLT5pZm1fbWVkaWEpICYgSUZNX1RPS19FVFIpDQog
ICAgICAgIHByaW50Zigib2x0ciVkOiBFVFIgbm90IGltcGxlbWVudGVkXG4i
LCBzYy0+dW5pdCk7DQogICAgaWYgKElGTV9UWVBFX09QVElPTlMoaWZtLT5p
Zm1fbWVkaWEpICYgSUZNX1RPS19TUkNSVCkNCiAgICAgICAgcHJpbnRmKCJv
bHRyJWQ6IHNvdXJjZS1yb3V0aW5nIG5vdCBpbXBsZW1lbnRlZFxuIiwgc2Mt
PnVuaXQpOw0KICAgIGlmIChJRk1fVFlQRV9PUFRJT05TKGlmbS0+aWZtX21l
ZGlhKSAmIElGTV9UT0tfQUxMUikNCiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6
IGFsbCBzb3VyY2Ugcm91dGVzIG5vdCBpbXBsZW1lbnRlZFxuIiwgc2MtPnVu
aXQpOw0KICAgIGlmIChJRk1fVFlQRV9PUFRJT05TKGlmbS0+aWZtX21lZGlh
KSAmIElGTV9UT0tfRFRSKSB7DQogICAgICAgIHNjLT5BZGFwdGVyTW9kZSB8
PSBUUkxMRF9NT0RFX0ZPUkNFX1RYSTsNCiAgICAgICAgc2MtPkFkYXB0ZXJN
b2RlICY9IH5UUkxMRF9NT0RFX0ZPUkNFX1RLUDsNCiAgICB9DQogICAgaWYg
KElGTV9UWVBFX09QVElPTlMoaWZtLT5pZm1fbWVkaWEpICYgSUZNX1RPS19D
TEFTU0lDKSB7DQogICAgICAgIHNjLT5BZGFwdGVyTW9kZSB8PSBUUkxMRF9N
T0RFX0ZPUkNFX1RLUDsNCiAgICAgICAgc2MtPkFkYXB0ZXJNb2RlICY9IH5U
UkxMRF9NT0RFX0ZPUkNFX1RYSTsNCiAgICB9DQogICAgaWYgKElGTV9UWVBF
X09QVElPTlMoaWZtLT5pZm1fbWVkaWEpICYgSUZNX1RPS19BVVRPKQ0KICAg
ICAgICBzYy0+QWRhcHRlck1vZGUgJj0gfihUUkxMRF9NT0RFX0ZPUkNFX1RY
SSB8IFRSTExEX01PREVfRk9SQ0VfVEtQKTsNCg0KICAgIGlmIChJRk1fVFlQ
RV9PUFRJT05TKGlmbS0+aWZtX21lZGlhKSAmIH5BTExfT1BUSU9OUykNCiAg
ICAgICAgcmV0dXJuKEVJTlZBTCk7DQoNCiAgICByZXR1cm4oMCk7DQp9DQoN
CnN0YXRpYyB2b2lkDQpvbHRyX2lmbWVkaWFfc3RzKGlmcCwgaWZtcikNCiAg
ICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCiAgICBzdHJ1Y3QgaWZtZWRpYXJlcSAq
aWZtcjsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSBpZnAtPmlm
X3NvZnRjOw0KICAgIHN0cnVjdCBpZm1lZGlhICppZm0gPSAmc2MtPmlmbWVk
aWE7DQoNCiAgICBpZm1yLT5pZm1fYWN0aXZlID0gSUZNX1RZUEUoaWZtLT5p
Zm1fbWVkaWEpfElGTV9TVUJUWVBFKGlmbS0+aWZtX21lZGlhKXxJRk1fVFlQ
RV9PUFRJT05TKGlmbS0+aWZtX21lZGlhKTsNCg0KICAgIHJldHVybjsNCn0N
Cg0Kdm9pZA0Kb2x0cl90aW1lb3V0KHRva2VuKQ0KICAgIHZvaWQgKnRva2Vu
Ow0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9ICZvbHRyX3NvZnRj
WyhpbnQpdG9rZW5dOw0KICAgIGludCB1bml0ID0gKGludCl0b2tlbiwgczsN
Cg0KICAgIHMgPSBzcGxpbXAoKTsNCg0KICAgIHByaW50Zigib2x0ciVkOiBh
ZGFwdGVyIHRpbWVkIG91dCAoJXgpXG4iLCB1bml0LCBzYy0+aHdfc3RhdGUp
Ow0KDQogICAgc3BseChzKTsNCn0NCg0KDQp2b2lkDQphZGFwdGVyX3BvbGwo
dG9rZW4pDQogICAgdm9pZCAqdG9rZW47DQp7DQogICAgaW50IHVuaXQgPSAo
aW50KXRva2VuLCBwb2xsX3RpbWVvdXQgPSAwLCBzOw0KICAgIHN0cnVjdCBv
bHRyX3NvZnRjICpzYyA9ICZvbHRyX3NvZnRjW3VuaXRdOw0KI2lmIDANCiAg
ICBzdGF0aWMgaW50IHJ4X2J1ZmZlcnMgPSAwLCB0eF9idWZmZXJzID0gMCwg
cmM7IA0KI2VuZGlmDQogICAgDQogICAgcyA9IHNwbGltcCgpOw0KDQogICAg
LyogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSBub3QgcG9sbGluZyBhIGRl
YWQgY2FyZCAqLw0KICAgIGlmICgoc2MtPmh3X3N0YXRlID09IEhXX0JBRCkg
fHwgKHNjLT5od19zdGF0ZSA9PSBIV19VTktOT1dOKSkgew0KICAgICAgICBz
Yy0+cG9sbF9hZGFwdGVyID0gLTE7DQogICAgICAgIHNwbHgocyk7DQogICAg
ICAgIHJldHVybjsNCiAgICB9DQoNCiAgICAvKnByaW50Zigib2x0ciVkOiBh
ZGFwdGVyIHBvbGwuXG4iLCB1bml0KTsqLw0KICAgIA0KICAgIC8qIElmIHRo
ZSBhZGFwdGVyIGlzIHRvIGJlIHBvbGxlZCBhZ2FpbiwgdGhlbiBzZXQgdXAN
CiAgICAgKiBuZXh0IHRpbWVvdXQgcG9sbCANCiAgICAgKi8NCiAgICBpZiAo
c2MtPnBvbGxfYWRhcHRlcikgew0KICAgICAgICBwb2xsX3RpbWVvdXQgPSBU
UmxsZFBvbGwoc2MtPlRSbGxkQWRhcHRlcik7DQogICAgICAgIHNjLT5wb2xs
X2NoID0gdGltZW91dChhZGFwdGVyX3BvbGwsICh2b2lkICopdW5pdCwgKHBv
bGxfdGltZW91dCAqIGh6KS8xMDAwKTsNCiAgICB9DQojaWYgMA0KICAgIHJj
ID0gVFJsbGRSZWNlaXZlRnJlZShzYy0+VFJsbGRBZGFwdGVyKTsNCiAgICBp
ZiAocnhfYnVmZmVycyAhPSByYykgew0KICAgICAgICBwcmludGYoIm9sdHIl
ZDogJWQgcmVjZWl2ZSBidWZmZXJzIGF2YWlsYWJsZVxuIiwgc2MtPnVuaXQs
IHJjKTsNCiAgICAgICAgcnhfYnVmZmVycyA9IHJjOw0KICAgIH0gDQogICAg
cmMgPSBUUmxsZFRyYW5zbWl0RnJlZShzYy0+VFJsbGRBZGFwdGVyKTsNCiAg
ICBpZiAodHhfYnVmZmVycyAhPSByYykgew0KICAgICAgICBwcmludGYoIm9s
dHIlZDogJWQgdHJhbnNtaXQgYnVmZmVycyBhdmFpbGFibGVcbiIsIHNjLT51
bml0LCByYyk7DQogICAgICAgIHR4X2J1ZmZlcnMgPSByYzsNCiAgICB9IA0K
I2VuZGlmDQoNCiAgICBzcGx4KHMpOyAgICAgICAgICAgIA0KfQ0KDQpzdGF0
aWMgdm9pZCANCm9sdHJfaW5pdChzYykNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0
YyAqc2M7DQp7DQogICAgc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFycGNv
bS5hY19pZjsNCiAgICBpbnQgaSwgcmM7DQoNCiAgICAvKnByaW50Zigib2x0
ciVkOiBvbHRyX2luaXRcbiIsIHNjLT51bml0KTsqLw0KICAgIA0KICAgIC8q
IA0KICAgICAqIEFkYXB0ZXIgc2hvdWxkIGJlIGZyZXNobHkgZG93bmxvYWRl
ZCBvciBwcmV2aW91c2x5IGNsb3NlZCBiZWZvcmUNCiAgICAgKiBicmluZ2lu
ZyBpdCBiYWNrIG9uIGxpbmUuDQogICAgICovDQogICAgaWYgKChzYy0+aHdf
c3RhdGUgIT0gSFdfQ0xPU0VEKSAmJiAoc2MtPmh3X3N0YXRlICE9IEhXX0xP
QURJTkcpICYmIChzYy0+aHdfc3RhdGUgIT0gSFdfQ0xPU0lORzIpKSB7DQog
ICAgICAgIHByaW50Zigib2x0ciVkOiBhZGFwdGVyIG5vdCByZWFkeSB0byBi
ZSBvcGVuZWQgKCVkKS5cbiIsIHNjLT51bml0LCBzYy0+aHdfc3RhdGUpOw0K
ICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLyogQWxsb2NhdGUgYW5k
IHNldCB1cCB0aGUgRE1BIGNoYW5uZWwgKi8NCiAgICBpZiAoc2MtPmNvbmZp
Zy0+ZG1hbGV2ZWwgIT0gVFJMTERfRE1BX1BJTykgew0KICAgICAgICByYyA9
IGlzYV9kbWFfYWNxdWlyZShzYy0+Y29uZmlnLT5kbWFsZXZlbCk7DQogICAg
ICAgIGlzYV9kbWFjYXNjYWRlKHNjLT5jb25maWctPmRtYWxldmVsKTsNCiAg
ICB9DQoNCiAgICAvKiBPcGVuIHRoZSBhZGFwdGVyICovDQogICAgc2MtPmh3
X3N0YXRlID0gSFdfT1BFTklORzsNCiAgICByYyA9IFRSbGxkT3BlbihzYy0+
VFJsbGRBZGFwdGVyLCBzYy0+YXJwY29tLmFjX2VuYWRkciwgc2MtPkdyb3Vw
QWRkcmVzcywgDQogICAgICAgICAgICAgICAgICAgc2MtPkZ1bmN0aW9uYWxB
ZGRyZXNzLCBpZnAtPmlmX210dSArIDUyLCBzYy0+QWRhcHRlck1vZGUpOw0K
ICAgIGlmIChyYyAhPSBUUkxMRF9PUEVOX09LKSB7DQogICAgICAgIHByaW50
Zigib2x0ciVkOiBBZGFwdGVyIGZhaWxlZCB0byBvcGVuIChyYyA9ICV4KVxu
Iiwgc2MtPnVuaXQsIHJjKTsNCiAgICAgICAgc2MtPmh3X3N0YXRlID0gSFdf
RkFJTEVEOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8qcHJpbnRmKCJvbHRy
JWQ6IGFkYXB0ZXIgb3BlbmluZy4uLlxuIiwgc2MtPnVuaXQpOyovDQogICAg
ICAgIC8qaWZwLT5pZl9mbGFncyB8PSAoSUZGX1VQIHwgSUZGX1JVTk5JTkcp
OyovDQogICAgICAgIGlmcC0+aWZfZmxhZ3MgJj0gfklGRl9PQUNUSVZFOw0K
ICAgIH0NCiAgICBzYy0+b2x0cl9jaCA9IHRpbWVvdXQob2x0cl90aW1lb3V0
LCAodm9pZCAqKXNjLT51bml0LCAzMCpoeik7DQogICAgdHNsZWVwKCh2b2lk
ICopc2MtPnVuaXQsIDEsICJvbHRyb3AiLCAzMCpoeik7DQoNCiAgICAvKiBH
aXZlIHRoZSB0cmFuc21pdCBidWZmZXJzIHRvIHRoZSBhZGFwdGVyICovDQog
ICAgZm9yIChpID0gMDsgaSA8IFJYX0xJU1RfU0laRTsgaSsrKSB7IA0KICAg
ICAgICByYyA9IFRSbGxkUmVjZWl2ZUZyYWdtZW50KHNjLT5UUmxsZEFkYXB0
ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQg
KilzYy0+cnhfYnVmZmVyW3NjLT5yeF9uZXh0ICYgUlhfTElTVF9NQVNLXS5i
dWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Z0b3Ao
c2MtPnJ4X2J1ZmZlcltzYy0+cnhfbmV4dCAmIFJYX0xJU1RfTUFTS10uYnVm
KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSWF9CVUZG
RVJfTEVOLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
b2lkICopc2MtPnJ4X2J1ZmZlcltzYy0+cnhfbmV4dCAmIFJYX0xJU1RfTUFT
S10uaW5kZXgpOw0KICAgICAgICBpZiAocmMgIT0gVFJMTERfUkVDRUlWRV9P
Sykgew0KICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IEFkYXB0ZXIgcmVm
dXNlZCBmcmFnbWVudCAlZCAocmMgPSAlZCkuXG4iLCBzYy0+dW5pdCwgaSwg
cmMpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0gIGVsc2Ugew0K
ICAgICAgICAgICAgc2MtPnJ4X2F2YWlsLS07DQogICAgICAgIH0NCiAgICAg
ICAgc2MtPnJ4X25leHQrKzsNCiAgICB9DQogICAgDQogICAgcmV0dXJuOw0K
fQ0KICAgIA0Kc3RhdGljIHZvaWQNCm9sdHJfaW50cih1bml0KQ0KICAgIGlu
dCB1bml0Ow0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9ICZvbHRy
X3NvZnRjW3VuaXRdOw0KICAgIGludCByYzsNCg0KICAgIC8qcHJpbnRmKCJv
bHRyJWQ6IG9sdHJfaW50clxuIiwgdW5pdCk7Ki8gLyogVG9vIG5vaXN5ICov
DQogICAgcmM9IFRSbGxkSW50ZXJydXB0U2VydmljZShzYy0+VFJsbGRBZGFw
dGVyKTsNCiAgICBpZiAocmMgPT0gVFJMTERfTk9fSU5URVJSVVBUKSANCiAg
ICAgICAgcHJpbnRmKCJvbHRyJWQ6IGludGVycnVwdCBub3Qgc2VydmljZWQu
XG4iLCB1bml0KTsNCn0NCg0KI2lmIE5QQ0kgPiAwDQpzdGF0aWMgdm9pZA0K
b2x0cl9wY2lfaW50cihwc2MpDQogICAgdm9pZCAqcHNjOw0Kew0KICAgIHN0
cnVjdCBvbHRyX3NvZnRjICpzYyA9IChzdHJ1Y3Qgb2x0cl9zb2Z0YyAqKXBz
YzsNCiAgICBpbnQgcmMgPSAwOw0KDQogICAgLypwcmludGYoIm9sdHIlZDog
b2x0cl9wY2lfaW50clxuIiwgc2MtPnVuaXQpOyovIC8qIFRvbyBub2lzeSAq
Lw0KICAgIHJjID0gVFJsbGRJbnRlcnJ1cHRTZXJ2aWNlKHNjLT5UUmxsZEFk
YXB0ZXIpOw0KICAgIGlmIChyYyA9PSBUUkxMRF9OT19JTlRFUlJVUFQpDQog
ICAgICAgIHByaW50Zigib2x0ciVkOiBwY2kgaW50ZXJydXB0IG5vdCBzZXJ2
aWNlZC5cbiIsIHNjLT51bml0KTsNCn0NCiNlbmRpZiAvKiBOUENJICovDQoN
CnN0YXRpYyB2b2lkIA0Kb2x0cl9zdGFydChpZnApDQogICAgc3RydWN0IGlm
bmV0ICppZnA7DQp7DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gJm9s
dHJfc29mdGNbaWZwLT5pZl91bml0XTsNCiAgICBzdHJ1Y3QgbWJ1ZiAqbTAs
ICptOw0KICAgIHN0cnVjdCBpc284ODAyNV9oZWFkZXIgKnRoOw0KICAgIFRS
bGxkVHJhbnNtaXRfdCBmcmFtZTsNCiAgICBpbnQgIGxlbiwgaSwgcmM7DQoN
CiAgICAvKnByaW50Zigib2x0ciVkOiBvbHRyX3N0YXJ0XG4iLCBzYy0+dW5p
dCk7Ki8NCg0Kb3V0bG9vcDoNCg0KICAgIC8qIENoZWNrIHRvIHNlZSBpZiB3
ZSBoYXZlIGVub3VnaCByb29tIHRvIHRyYW5zbWl0ICovDQogICAgaWYgKHNj
LT50eF9hdmFpbCA8PSAwKSB7DQogICAgICAgIC8qIE5vIGZyZWUgYnVmZmVy
cywgaG9sZCBvZmYgdGhlIHVwcGVyIGxheWVycyAqLw0KICAgICAgICAvKnBy
aW50Zigib2x0ciVkOiB0cmFuc21pdCBxdWV1ZSBmdWxsLlxuIiwgc2MtPnVu
aXQpOyovDQogICAgICAgIGlmcC0+aWZfZmxhZ3MgfD0gSUZGX09BQ1RJVkU7
DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgSUZfREVRVUVVRSgmaWZw
LT5pZl9zbmQsIG0pOw0KICAgIGlmIChtID09IDApIHsNCiAgICAgICAgLypw
cmludGYoIm9sdHIlZDogb2x0cl9zdGFydCBOVUxMIHBhY2tldCBkZXF1ZXVl
ZC5cbiIsIHNjLT51bml0KTsqLw0KICAgICAgICBpZnAtPmlmX2ZsYWdzICY9
IH5JRkZfT0FDVElWRTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAg
IHRoID0gbXRvZChtLCBzdHJ1Y3QgaXNvODgwMjVfaGVhZGVyICopOw0KICAg
IHRoLT5hYyA9IDB4MTA7DQogICAgdGgtPmZjID0gMHg0MDsNCiAgICANCiAg
ICAvKiBLZWVwIGEgcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgcGFja2V0
ICovDQogICAgbTAgPSBtOw0KDQogICAgaSA9IChzYy0+dHhfbmV4dCAmIFRY
X0xJU1RfTUFTSyk7IC8qIEp1c3QgdG8gc2hvcnRlbiB0aGluZyB1cCAqLw0K
DQogICAgZm9yIChsZW4gPSAwOyBtICE9IDA7IG0gPSBtLT5tX25leHQpIHsN
CiAgICAgICAgZnJhbWUuVHJhbnNtaXRGcmFnbWVudFswXS5WaXJ0dWFsQWRk
cmVzcyA9IHNjLT50eF9idWZmZXJbaV0uYnVmOw0KICAgICAgICBmcmFtZS5U
cmFuc21pdEZyYWdtZW50WzBdLlBoeXNpY2FsQWRkcmVzcyA9IGt2dG9wKHNj
LT50eF9idWZmZXJbaV0uYnVmKTsNCiAgICAgICAgYmNvcHkobXRvZChtLCBj
YWRkcl90KSwgc2MtPnR4X2J1ZmZlcltpXS5idWYgKyBsZW4sIG0tPm1fbGVu
KTsNCiAgICAgICAgbGVuICs9IG0tPm1fbGVuOw0KICAgIH0NCiAgICBmcmFt
ZS5GcmFnbWVudENvdW50ID0gMTsNCiAgICBmcmFtZS5UcmFuc21pdEZyYWdt
ZW50WzBdLmNvdW50ID0gbGVuOw0KDQogICAgcmMgPSBUUmxsZFRyYW5zbWl0
RnJhbWUoc2MtPlRSbGxkQWRhcHRlciwgJmZyYW1lLCAodm9pZCAqKXNjLT50
eF9idWZmZXJbaV0uaW5kZXgpOw0KICAgIGlmIChyYyAhPSBUUkxMRF9UUkFO
U01JVF9PSykgew0KICAgICAgICBwcmludGYoIm9sdHIlZDogVFJsbGRUcmFu
c21pdEZyYW1lIHJldHVybmVkICgleClcbiIsIHNjLT51bml0LCByYyk7DQog
ICAgICAgIGlmcC0+aWZfb2Vycm9ycysrOw0KICAgICAgICBnb3RvIGJhZDsN
CiAgICB9DQoNCiAgICBzYy0+dHhfbmV4dCsrOw0KICAgIHNjLT50eF9hdmFp
bC0tOw0KDQojaWYgTkJQRklMVEVSID4gMA0KICAgIGlmIChpZnAtPmlmX2Jw
ZikNCiAgICAgICAgYnBmX210YXAoaWZwLCBtMCk7DQojZW5kaWYNCg0KYmFk
Og0KICAgIG1fZnJlZW0obTApOw0KICAgIGdvdG8gb3V0bG9vcDsNCiAgICBy
ZXR1cm47DQp9DQoNCnN0YXRpYyB2b2lkDQpvbHRyX3N0b3Aoc2MpDQogICAg
c3RydWN0IG9sdHJfc29mdGMgKnNjOw0Kew0KICAgIHN0cnVjdCBpZm5ldCAq
aWZwID0gJnNjLT5hcnBjb20uYWNfaWY7DQogICAgcHJpbnRmKCJvbHRyJWQ6
IG90bHJfc3RvcFxuIiwgc2MtPnVuaXQpOw0KICAgIGlmcC0+aWZfZmxhZ3Mg
Jj0gfihJRkZfVVAgfCBJRkZfUlVOTklORyB8IElGRl9PQUNUSVZFKTsNCiAg
ICBzYy0+aHdfc3RhdGUgPSBIV19DTE9TSU5HOw0KICAgIFRSbGxkQ2xvc2Uo
c2MtPlRSbGxkQWRhcHRlciwgMCk7DQogICAgc2MtPm9sdHJfY2ggPSB0aW1l
b3V0KG9sdHJfdGltZW91dCwgKHZvaWQgKilzYy0+dW5pdCwgMzAqaHopOw0K
ICAgIHRzbGVlcCgodm9pZCAqKXNjLT51bml0LCAxLCAib2x0cmNsIiwgMzAq
aHopOw0KfQ0KDQpzdGF0aWMgaW50DQpvbHRyX2lvY3RsKGlmcCwgY21kLCBk
YXRhKQ0KICAgIHN0cnVjdCBpZm5ldCAqaWZwOw0KICAgIHVfbG9uZyBjbWQ7
DQogICAgY2FkZHJfdCBkYXRhOw0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRj
ICpzYyA9ICZvbHRyX3NvZnRjW2lmcC0+aWZfdW5pdF07DQogICAgc3RydWN0
IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICopZGF0YTsNCiAgICBpbnQg
ZXJyb3IgPSAwLCBzOw0KDQogICAgLypwcmludGYoIm9sdHIlZDogb2x0cl9p
b2N0bFxuIiwgaWZwLT5pZl91bml0KTsqLw0KDQogICAgcyA9IHNwbGltcCgp
Ow0KDQogICAgc3dpdGNoIChjbWQpIHsNCiAgIA0KICAgICAgICBjYXNlIFNJ
T0NTSUZBRERSOg0KICAgICAgICBjYXNlIFNJT0NHSUZBRERSOg0KICAgICAg
ICBjYXNlIFNJT0NTSUZNVFU6DQogICAgICAgICAgICBlcnJvciA9IGlzbzg4
MDI1X2lvY3RsKGlmcCwgY21kLCBkYXRhKTsNCiAgICAgICAgICAgIGJyZWFr
Ow0KDQogICAgICAgIGNhc2UgU0lPQ1NJRkZMQUdTOg0KICAgICAgICAgICAg
LyoNCiAgICAgICAgICAgICAqIElmIHRoZSBpbnRlcmZhY2UgaXMgbWFya2Vk
IHVwIGFuZCBzdG9wcGVkLCB0aGVuIHN0YXJ0IGl0Lg0KICAgICAgICAgICAg
ICogSWYgaXQgaXMgbWFya2VkIGRvd24gYW5kIHJ1bm5pbmcsIHRoZW4gc3Rv
cCBpdC4NCiAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgaWYgKGlmcC0+
aWZfZmxhZ3MgJiBJRkZfVVApIHsNCiAgICAgICAgICAgICAgICAgICAgaWYg
KChpZnAtPmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcpID09IDApDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2x0cl9pbml0KHNjKTsNCiAgICAgICAg
ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChpZnAtPmlm
X2ZsYWdzICYgSUZGX1JVTk5JTkcpIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbHRyX3N0b3Aoc2MpOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmcC0+aWZfZmxhZ3MgJj0gfklGRl9SVU5OSU5HOw0KICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg
IGlmICgoaWZwLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSAhPSBzYy0+UHJv
bWlzY01vZGUpIHsNCiAgICAgICAgICAgICAgICBpZiAoaWZwLT5pZl9mbGFn
cyAmIElGRl9QUk9NSVNDKQ0KICAgICAgICAgICAgICAgICAgICBUUmxsZFNl
dFByb21pc2N1b3VzTW9kZShzYy0+VFJsbGRBZGFwdGVyLCBPTFRSX1BST01J
U0NfTU9ERSk7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgICAgICBUUmxsZFNldFByb21pc2N1b3VzTW9kZShzYy0+VFJsbGRBZGFw
dGVyLCAwKTsNCiAgICAgICAgICAgICAgICBzYy0+UHJvbWlzY01vZGUgPSAo
aWZwLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIA0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNh
c2UgU0lPQ0dJRk1FRElBOg0KICAgICAgICBjYXNlIFNJT0NTSUZNRURJQToN
CiAgICAgICAgICAgIGVycm9yID0gaWZtZWRpYV9pb2N0bChpZnAsIGlmciwg
JnNjLT5pZm1lZGlhLCBjbWQpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAg
ICAgIGRlZmF1bHQ6DQogICAgICAgICAgICBlcnJvciA9IEVJTlZBTDsNCiAg
ICB9DQogICAgc3BseChzKTsNCiAgICByZXR1cm4oZXJyb3IpOw0KfQ0KDQov
Kg0KICogUE1XIENhbGxiYWNrIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0K
c3RhdGljIHZvaWQNCkRyaXZlclN1c3BlbmQoTWljcm9TZWNvbmRzKQ0KICAg
IHVuc2lnbmVkIHNob3J0IE1pY3JvU2Vjb25kczsNCnsNCiAgICBERUxBWShN
aWNyb1NlY29uZHMpOw0KfQ0KDQoNCnN0YXRpYyB2b2lkDQpEcml2ZXJTdGF0
dXMoRHJpdmVySGFuZGxlLCBTdGF0dXMpDQogICAgdm9pZCAqRHJpdmVySGFu
ZGxlOw0KICAgIFRSbGxkU3RhdHVzX3QgKlN0YXR1czsNCnsNCiAgICBzdHJ1
Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1soaW50KURyaXZlckhh
bmRsZV07DQogICAgc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFycGNvbS5h
Y19pZjsNCg0KICAgIHN3aXRjaCAoU3RhdHVzLT5UeXBlKSB7DQogICAgICAg
IGNhc2UgVFJMTERfU1RTX09OX1dJUkU6DQogICAgICAgICAgICBpZiAoc2Mt
Pmh3X3N0YXRlID09IEhXX09QRU5JTkcpIHsNCiAgICAgICAgICAgICAgICBz
Yy0+aHdfc3RhdGUgPSBIV19PUEVOOw0KICAgICAgICAgICAgICAgIGlmcC0+
aWZfZmxhZ3MgfD0gKElGRl9VUCB8IElGRl9SVU5OSU5HKTsNCiAgICAgICAg
ICAgICAgICAvKnByaW50Zigib2x0ciVkOiBBZGFwdGVyIGluc2VydGVkLlxu
Iiwgc2MtPnVuaXQpOyovDQogICAgICAgICAgICAgICAgdW50aW1lb3V0KG9s
dHJfdGltZW91dCwgKHZvaWQgKilzYy0+dW5pdCwgc2MtPm9sdHJfY2gpOw0K
ICAgICAgICAgICAgICAgIHdha2V1cF9vbmUoKHZvaWQgKilzYy0+dW5pdCk7
DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAg
Y2FzZSBUUkxMRF9TVFNfU0VMRlRFU1RfU1RBVFVTOg0KICAgICAgICAgICAg
aWYgKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5TZWxmdGVzdFN0YXR1cyA9PSBU
UkxMRF9TVF9PSykgew0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVk
OiBhZGFwdGVyIHN0YXR1cyBnb29kLiAoY2xvc2UgY29tcGxldGVkL3NlbGYt
dGVzdClcbiIsIHNjLT51bml0KTsNCiAgICAgICAgICAgICAgICBpZiAoKHNj
LT5od19zdGF0ZSA9PSBIV19MT0FESU5HKSB8fCAoc2MtPmh3X3N0YXRlID09
IEhXX0NMT1NJTkcpIHx8IChzYy0+aHdfc3RhdGUgPT0gSFdfQ0xPU0lORzIp
KSB7DQogICAgICAgICAgICAgICAgICAgIHNjLT5od19zdGF0ZSA9IEhXX0NM
T1NFRDsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg
ICBwcmludGYoIm9sdHIlZDogU2VsZiB0ZXN0IGZhaWxlZDogIiwgc2MtPnVu
aXQpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoU3RhdHVzLT5TcGVjaWZp
Y2F0aW9uLlNlbGZ0ZXN0U3RhdHVzKSB7DQogICAgICAgICAgICAgICAgICAg
IGNhc2UgVFJMTERfU1RfRVJST1IgKyAwOiBwcmludGYoIkluaXRpYWwgVGVz
dCBFcnJvclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNl
IFRSTExEX1NUX0VSUk9SICsgMTogcHJpbnRmKCJBZGFwdGVyIFNvZnR3YXJl
IENoZWNrc3VtIEVycm9yXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAg
ICAgIGNhc2UgVFJMTERfU1RfRVJST1IgKyAyOiBwcmludGYoIkFkYXB0ZXIg
UkFNIEVycm9yXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNh
c2UgVFJMTERfU1RfRVJST1IgKyA0OiBwcmludGYoIkluc3RydWN0aW9uIFRl
c3QgRXJyb3JcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUUkxMRF9TVF9FUlJPUiArIDU6IHByaW50ZigiUHJvdG9jb2wgSGFuZGxl
ci9SSSBIdyBFcnJvclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRSTExEX1NUX0VSUk9SICsgNjogcHJpbnRmKCJTeXN0ZW0gSW50
ZXJmYWNlIFJlZ2lzdGVyIEVycm9yXG4iKTsgYnJlYWs7DQogICAgICAgICAg
ICAgICAgICAgIGNhc2UgVFJMTERfU1RfVElNRU9VVDogICBwcmludGYoIlNl
bGZ0ZXN0IGRpZCBub3QgY29tcGxldGVcbiIpOyBicmVhazsNCiAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogcHJpbnRmKCJVbmtub3duIGVycm9yICgl
eClcbiIsIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5TZWxmdGVzdFN0YXR1cyk7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgIGNhc2UgVFJMTERfU1RTX0lOSVRfU1RBVFVT
Og0KICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IEFkYXB0ZXIgaW5pdGlh
bGl6YXRpb24gZmFpbGVkOiAiLCBzYy0+dW5pdCk7DQogICAgICAgICAgICBz
d2l0Y2goU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRTdGF0dXMpIHsNCiAg
ICAgICAgICAgICAgICBjYXNlIFRSTExEX0lOSVRfRVJST1IgKyAweDAxOiBw
cmludGYoIkludmFsaWQgaW5pdCBibG9jayAoTExEIGVycm9yKVxuIik7IGJy
ZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfSU5JVF9FUlJPUiAr
IDB4MDI6IHByaW50ZigiSW52YWxpZCBvcHRpb25zIChMTEQgZXJyb3IpXG4i
KTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX0VS
Uk9SICsgMHgwMzogcHJpbnRmKCJJbnZhbGlkIHJjdiBidXJzdCAoTExEIGVy
cm9yKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgVFJMTERf
SU5JVF9FUlJPUiArIDB4MDQ6IHByaW50ZigiSW52YWxpZCB4bXQgYnVyc3Qg
KExMRCBlcnJvcilcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNl
IFRSTExEX0lOSVRfRVJST1IgKyAweDA1OiBwcmludGYoIkludmFsaWQgRE1B
IHRocmVzaG9sZCAoTExEIGVycm9yKVxuIik7IGJyZWFrOw0KICAgICAgICAg
ICAgICAgIGNhc2UgVFJMTERfSU5JVF9FUlJPUiArIDB4MDY6IHByaW50Zigi
SW52YWxpZCBzY2IgYWRkclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAg
IGNhc2UgVFJMTERfSU5JVF9FUlJPUiArIDB4MDc6IHByaW50ZigiSW52YWxp
ZCBzc2IgYWRkclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug
VFJMTERfSU5JVF9FUlJPUiArIDB4MDg6IHByaW50ZigiRElPIHBhcml0eSBl
cnJvciAoSFcgZXJyb3IpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAg
Y2FzZSBUUkxMRF9JTklUX0VSUk9SICsgMHgwOTogcHJpbnRmKCJETUEgdGlt
ZW91dCAoTWF5IGJlIGludGVycnVwdCBmYWlsaW5nIGlmIFBJTyBtb2RlIG9y
IFBDSTIpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxM
RF9JTklUX0VSUk9SICsgMHgwQTogcHJpbnRmKCJETUEgcGFyaXR5IGVycm9y
IChIVyBlcnJvcilcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNl
IFRSTExEX0lOSVRfRVJST1IgKyAweDBCOiBwcmludGYoIkRNQSBidXMgZXJy
b3IgKEhXIGVycm9yKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNh
c2UgVFJMTERfSU5JVF9FUlJPUiArIDB4MEM6IHByaW50ZigiRE1BIGRhdGEg
ZXJyb3JcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExE
X0lOSVRfRVJST1IgKyAweDBEOiBwcmludGYoIkFkYXB0ZXIgQ2hlY2tcbiIp
OyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExEX0lOSVRfVElN
RU9VVDogICAgICBwcmludGYoIkFkYXB0ZXIgaW5pdGlhbGl6YXRpb24gZGlk
IG5vdCBjb21wbGV0ZVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNh
c2UgVFJMTERfSU5JVF9ETUFfRVJST1I6ICAgIHByaW50ZigiQWRhcHRlciBj
YW5ub3QgYWNjZXNzIHN5c3RlbSBtZW1vcnlcbiIpOyBicmVhazsNCiAgICAg
ICAgICAgICAgICBjYXNlIFRSTExEX0lOSVRfSU5UUl9FUlJPUjogICBwcmlu
dGYoIkFkYXB0ZXIgY2Fubm90IGludGVycnVwdFxuIik7IGJyZWFrOw0KICAg
ICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9USU1FT1VUOiAgICAgIHBy
aW50ZigiQWRhcHRlciBkaWQgbm90IGNvbXBsZXRlIG9wZW4gd2l0aGluIDMw
IHNlY29uZHNcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFRS
TExEX09QRU5fRVJST1IgKyAweDAxOiBwcmludGYoIkludmFsaWQgb3BlbiBv
cHRpb25zIChMTEQgZXJyb3IpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAg
ICAgY2FzZSBUUkxMRF9PUEVOX0VSUk9SICsgMHgwNDogcHJpbnRmKCJUeEJ1
ZmZlciBjb3VudCBlcnJvciAoTExEIGVycm9yKVxuIik7IGJyZWFrOw0KICAg
ICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9FUlJPUiArIDB4MTA6IHBy
aW50ZigiQnVmZmVyIHNpemUgZXJyb3IgKExMRCBlcnJvcilcbiIpOyBicmVh
azsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fRVJST1IgKyAw
eDIwOiBwcmludGYoIkxpc3Qgc2l6ZSBlcnJvciAoTExEIGVycm9yKVxuIik7
IGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAg
ICAgICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRTdGF0
dXMgJiAweDcwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChTdGF0dXMtPlNwZWNpZmljYXRpb24uSW5pdFN0YXR1cyAmIDB4NzBGKSB7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVO
X1JFUEVBVCArIDB4MDE6IHByaW50ZigiTG9iZSBtZWRpYSB0ZXN0IC0gIik7
IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFJM
TERfT1BFTl9SRVBFQVQgKyAweDAyOiBwcmludGYoIlBoeXNpY2FsIGluc2Vy
dGlvbiAtICIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHgwMzogcHJpbnRmKCJBZGRy
ZXNzIHZlcmlmaWNhdGlvbiAtICIpOyBicmVhazsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHgwNDog
cHJpbnRmKCJQYXJ0aWNpcGF0aW9uIGluIHJpbmcgcG9sbCAtICIpOyBicmVh
azsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09Q
RU5fUkVQRUFUICsgMHgwNTogcHJpbnRmKCJSZXF1ZXN0IGluaXRpYWxpemF0
aW9uIC0gIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVFJMTERfT1BFTl9SRVBFQVQgKyAweDA5OiBwcmludGYoIlJlcXVl
c3QgcmVnaXN0cmF0aW9uIChUWEkpIC0gIik7IGJyZWFrOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9SRVBFQVQgKyAw
eDBBOiBwcmludGYoIkxvYmUgbWVkaWEgdGVzdCAoVFhJKSAtICIpOyBicmVh
azsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIHBoYXNlICgleCkg
LSAiLCBTdGF0dXMtPlNwZWNpZmljYXRpb24uSW5pdFN0YXR1cyAmIDB4MDBG
KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRT
dGF0dXMgJiAweDdGMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVFJMTERfT1BFTl9SRVBFQVQgKyAweDEwOiBwcmludGYoIkZ1bmN0
aW9uIGZhaWx1cmUgKE5vIGNhYmxlPylcbiIpOyBicmVhazsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsg
MHgyMDogcHJpbnRmKCJTaWduYWwgbG9zc1xuIik7IGJyZWFrOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9SRVBFQVQg
KyAweDUwOiBwcmludGYoIlRpbWVvdXRcbiIpOyBicmVhazsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsg
MHg2MDogcHJpbnRmKCJSaW5nIGZhaWx1cmUgKFRLUCkgLyBQcm90b2NvbCBl
cnJvciAoVFhJKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVFJMTERfT1BFTl9SRVBFQVQgKyAweDcwOiBwcmludGYo
IlJpbmcgYmVhY29uaW5nXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCArIDB4ODA6IHBy
aW50ZigiRHVwbGljYXRlIG5vZGUgYWRkcmVzcyAoVEtQKSAvIEluc2VydCBk
ZW5pZWQgKFRYSSlcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHg5MDogcHJpbnRm
KCJSZXF1ZXN0IGluaXRpYWxpemF0aW9uIChUS1ApXG4iKTsgYnJlYWs7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JF
UEVBVCArIDB4YTA6IHByaW50ZigiUmVtb3ZlIHJlY2VpdmVkXG4iKTsgYnJl
YWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9P
UEVOX1JFUEVBVCArIDB4YjA6IHByaW50ZigiQy1wb3J0IGFkZHJlc3MgY2hh
bmdlZCAoVFhJKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo
IlVua25vd24gdHlwZSAoJXgpXG4iLCBTdGF0dXMtPlNwZWNpZmljYXRpb24u
SW5pdFN0YXR1cyAmIDB4MEYwKTsNCiAgICAgICAgICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBlcnJvciAoJXgpXG4iLCBT
dGF0dXMtPlNwZWNpZmljYXRpb24uSW5pdFN0YXR1cyk7IA0KICAgICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVh
azsNCiAgICAgICAgY2FzZSBUUkxMRF9TVFNfUklOR19TVEFUVVM6DQogICAg
ICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlJpbmdTdGF0dXMg
IT0gMCkgew0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBSaW5n
IHN0YXR1cyBjaGFuZ2U6ICIsIHNjLT51bml0KTsNCiAgICAgICAgICAgICAg
ICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlJpbmdTdGF0dXMgJiBUUkxM
RF9SU19IQVJEX0VSUk9SKSAgICAgICAgIHByaW50ZigiW0hhcmQgZXJyb3Jd
ICIpOw0KICAgICAgICAgICAgICAgIGlmIChTdGF0dXMtPlNwZWNpZmljYXRp
b24uUmluZ1N0YXR1cyAmIFRSTExEX1JTX1NPRlRfRVJST1IpICAgICAgICAg
cHJpbnRmKCJbU29mdCBlcnJvcl0gIik7DQogICAgICAgICAgICAgICAgaWYg
KFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5SaW5nU3RhdHVzICYgVFJMTERfUlNf
VFJBTlNNSVRfQkVBQ09OKSAgICBwcmludGYoIltUcmFuc21pdCBiZWFjb25d
ICIpOw0KICAgICAgICAgICAgICAgIGlmIChTdGF0dXMtPlNwZWNpZmljYXRp
b24uUmluZ1N0YXR1cyAmIFRSTExEX1JTX0xPQkVfV0lSRV9GQVVMVCkgICAg
cHJpbnRmKCJbV2lyZSBmYXVsdF0gIik7DQogICAgICAgICAgICAgICAgaWYg
KFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5SaW5nU3RhdHVzICYgVFJMTERfUlNf
QVVUT19SRU1PVkFMX0VSUk9SKSBwcmludGYoIltBdXRvIHJlbW92YWxdICIp
Ow0KICAgICAgICAgICAgICAgIGlmIChTdGF0dXMtPlNwZWNpZmljYXRpb24u
UmluZ1N0YXR1cyAmIFRSTExEX1JTX1JFTU9WRV9SRUNFSVZFRCkgICAgcHJp
bnRmKCJbUmVtb3ZlIHJlY2VpdmVkXSAiKTsNCiAgICAgICAgICAgICAgICBp
ZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlJpbmdTdGF0dXMgJiBUUkxMRF9S
U19DT1VOVEVSX09WRVJGTE9XKSAgIHByaW50ZigiW0NvdW50ZXIgb3ZlcmZs
b3ddICIpOw0KICAgICAgICAgICAgICAgIGlmIChTdGF0dXMtPlNwZWNpZmlj
YXRpb24uUmluZ1N0YXR1cyAmIFRSTExEX1JTX1NJTkdMRV9TVEFUSU9OKSAg
ICAgcHJpbnRmKCJbU2luZ2xlIHN0YXRpb25dICIpOw0KICAgICAgICAgICAg
ICAgIGlmIChTdGF0dXMtPlNwZWNpZmljYXRpb24uUmluZ1N0YXR1cyAmIFRS
TExEX1JTX1JJTkdfUkVDT1ZFUlkpICAgICAgcHJpbnRmKCJbUmluZyByZWNv
dmVyeV0gIik7DQogICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2Ug
VFJMTERfU1RTX0FEQVBURVJfQ0hFQ0s6DQogICAgICAgICAgICBwcmludGYo
Im9sdHIlZDogQWRhcHRlciBjaGVjayAoJXggJXggJXggJXgpXG4iLCBzYy0+
dW5pdCwgU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkFkYXB0ZXJDaGVja1swXSwg
DQogICAgICAgICAgICAgICAgICAgIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5B
ZGFwdGVyQ2hlY2tbMV0sIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5BZGFwdGVy
Q2hlY2tbMl0sIA0KICAgICAgICAgICAgICAgICAgICBTdGF0dXMtPlNwZWNp
ZmljYXRpb24uQWRhcHRlckNoZWNrWzNdKTsgDQogICAgICAgICAgICBicmVh
azsNCiAgICAgICAgY2FzZSBUUkxMRF9TVFNfUFJPTUlTQ1VPVVNfU1RPUFBF
RDoNCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBQcm9taXNjdW91cyBt
b2RlIHN0b3BwZWQ6ICIsIHNjLT51bml0KTsNCiAgICAgICAgICAgIHN3aXRj
aChTdGF0dXMtPlNwZWNpZmljYXRpb24uUHJvbVJlbW92ZWRDYXVzZSkgew0K
ICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfUFJPTV9SRU1PVkVfUkVDRUlW
RUQ6IHByaW50ZigiUmVtb3ZlIHJlY2VpdmVkXG4iKTsgYnJlYWs7DQogICAg
ICAgICAgICAgICAgY2FzZSBUUkxMRF9QUk9NX1BPTExfRkFJTFVSRTogICAg
cHJpbnRmKCJQb2xsIGZhaWx1cmVcbiIpOyBicmVhazsNCiAgICAgICAgICAg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo
IlVua25vd24gKCV4KVxuIiwgU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlByb21S
ZW1vdmVkQ2F1c2UpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgIGNhc2UgVFJMTERfU1RTX0xMRF9FUlJPUjoNCiAgICAg
ICAgICAgIHByaW50Zigib2x0ciVkOiBMTEQgZXJyb3IgKCV4ICV4ICV4ICV4
KSAiLCBzYy0+dW5pdCwgU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkludGVybmFs
RXJyb3JbMF0sIA0KICAgICAgICAgICAgICAgICAgICBTdGF0dXMtPlNwZWNp
ZmljYXRpb24uSW50ZXJuYWxFcnJvclsxXSwgU3RhdHVzLT5TcGVjaWZpY2F0
aW9uLkludGVybmFsRXJyb3JbMl0sIA0KICAgICAgICAgICAgICAgICAgICBT
dGF0dXMtPlNwZWNpZmljYXRpb24uSW50ZXJuYWxFcnJvclszXSk7DQogICAg
ICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBUUkxMRF9TVFNfQURBUFRF
Ul9USU1FT1VUOg0KICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IEFkYXB0
ZXIgb3BlcmF0aW9uIHRpbWVkIG91dDogIiwgc2MtPnVuaXQpOw0KICAgICAg
ICAgICAgc3dpdGNoKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5BZGFwdGVyVGlt
ZW91dCkgew0KICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfQ09NTUFORF9U
SU1FT1VUOiAgIHByaW50ZigiQ29tbWFuZFxuIik7DQogICAgICAgICAgICAg
ICAgY2FzZSBUUkxMRF9UUkFOU01JVF9USU1FT1VUOiAgcHJpbnRmKCJUcmFu
c21pdFxuIik7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9JTlRFUlJV
UFRfVElNRU9VVDogcHJpbnRmKCJJbnRlcnJ1cHRcbiIpOw0KICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
VW5rbm93biAoJXgpXG4iLCBTdGF0dXMtPlNwZWNpZmljYXRpb24uQWRhcHRl
clRpbWVvdXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICBwcmludGYoIm9sdHIl
ZDogVW5rbm93biBzdGF0dXMgdHlwZSAoJXgpXG4iLCBzYy0+dW5pdCwgU3Rh
dHVzLT5UeXBlKTsNCg0KICAgIH0NCiAgICBpZiAoU3RhdHVzLT5DbG9zZWQp
IHsNCiAgICAgICAgaWYgKHNjLT5od19zdGF0ZSA+IEhXX0JBRCkgew0KICAg
ICAgICAgICAgc2MtPmh3X3N0YXRlID0gSFdfRkFJTEVEOw0KICAgICAgICAg
ICAgcHJpbnRmKCJvbHRyJWQ6IGNsb3NpbmcgYWRhcHRlciBkdWUgdG8gZmFp
bHVyZS5cbiIsIHNjLT51bml0KTsNCiAgICAgICAgICAgIG9sdHJfc3RvcChz
Yyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCnN0YXRpYyB2b2lkDQpEcml2
ZXJDbG9zZUNvbXBsZXRlZChEcml2ZXJIYW5kbGUpDQogICAgdm9pZCAqRHJp
dmVySGFuZGxlOw0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9ICZv
bHRyX3NvZnRjWyhpbnQpRHJpdmVySGFuZGxlXTsNCg0KICAgIHByaW50Zigi
b2x0ciVkOiBEcml2ZXJDbG9zZUNvbXBsZXRlZFxuIiwgc2MtPnVuaXQpOw0K
DQogICAgdW50aW1lb3V0KG9sdHJfdGltZW91dCwgKHZvaWQgKilzYy0+dW5p
dCwgc2MtPm9sdHJfY2gpOw0KICAgIHdha2V1cF9vbmUoKHZvaWQgKilzYy0+
dW5pdCk7DQoNCiAgICBpZiAoKHNjLT5od19zdGF0ZSAhPSBIV19DTE9TSU5H
KSAmJiAoc2MtPmh3X3N0YXRlICE9IEhXX0NMT1NJTkcyKSAmJiAoc2MtPmh3
X3N0YXRlICE9IEhXX0NMT1NFRCkpIHsNCiAgICAgICAgcHJpbnRmKCJvbHRy
JWQ6IGFkYXB0ZXIgY2xvc2UgY29tcGxldGUgY2FsbGVkIGluIHdyb25nIHN0
YXRlICglZClcbiIsIHNjLT51bml0LCBzYy0+aHdfc3RhdGUpOw0KICAgICAg
ICByZXR1cm47DQogICAgfQ0KICAgIHNjLT5od19zdGF0ZSA9IEhXX0NMT1NJ
TkcyOw0KICAgIGlmIChzYy0+Y29uZmlnLT5kbWFsZXZlbCAhPSBUUkxMRF9E
TUFfUElPKQ0KICAgICAgICBpc2FfZG1hX3JlbGVhc2Uoc2MtPmNvbmZpZy0+
ZG1hbGV2ZWwpOw0KICAgIA0KfQ0KDQpzdGF0aWMgdm9pZA0KRHJpdmVyU3Rh
dGlzdGljcyhEcml2ZXJIYW5kbGUsIFN0YXRpc3RpY3MpDQogICAgdm9pZCAq
RHJpdmVySGFuZGxlOw0KICAgIFRSbGxkU3RhdGlzdGljc190ICpTdGF0aXN0
aWNzOw0Kew0KICAgIHByaW50Zigib2x0cjogRHJpdmVyU3RhdGlzdGljc1xu
Iik7DQp9DQoNCnN0YXRpYyB2b2lkDQpEcml2ZXJUcmFuc21pdEZyYW1lQ29t
cGxldGVkKERyaXZlckhhbmRsZSwgRnJhbWVIYW5kbGUsIFRyYW5zbWl0U3Rh
dHVzKQ0KICAgIHZvaWQgKkRyaXZlckhhbmRsZTsNCiAgICB2b2lkICpGcmFt
ZUhhbmRsZTsNCiAgICBpbnQgVHJhbnNtaXRTdGF0dXM7DQp7DQogICAgaW50
IGZyYW1lID0gKGludClGcmFtZUhhbmRsZTsNCiAgICBzdHJ1Y3Qgb2x0cl9z
b2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1soaW50KURyaXZlckhhbmRsZV07DQog
ICAgc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFycGNvbS5hY19pZjsNCg0K
ICAgIGlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX09BQ1RJVkUpDQogICAgICAg
IGlmcC0+aWZfZmxhZ3MgJj0gfihJRkZfT0FDVElWRSk7DQoNCiAgICAvKnBy
aW50Zigib2x0ciVkOiB0cmFuc21pdCBjb21wbGV0ZSBmcmFtZSAlZFxuIiwg
c2MtPnVuaXQsIGZyYW1lKTsqLw0KICAgIGlmIChUcmFuc21pdFN0YXR1cyA9
PSBUUkxMRF9UUkFOU01JVF9PSykgew0KICAgICAgICBpZnAtPmlmX29wYWNr
ZXRzKys7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6
IERyaXZlclRyYW5zbWl0RnJhbWVDb21wbGV0ZWQgKEZyYW1lICVkIHN0YXR1
cyAleClcbiIsIHNjLT51bml0LCBmcmFtZSwgVHJhbnNtaXRTdGF0dXMpOw0K
ICAgICAgICBpZnAtPmlmX29lcnJvcnMrKzsNCiAgICB9DQogICAgaWYgKChm
cmFtZSA8IDApIHx8IChmcmFtZSA+IFRYX0xJU1RfU0laRSkpIHsNCiAgICAg
ICAgcHJpbnRmKCJvbHRyJWQ6IGJvZ3VzIHRyYW5zbWl0IGJ1ZmZlci4gKCVk
KVxuIiwgc2MtPnVuaXQsIGZyYW1lKTsNCiAgICAgICAgcmV0dXJuOw0KICAg
IH0NCg0KICAgIHNjLT50eF9hdmFpbCsrOw0KDQp9DQoNCnN0YXRpYyB2b2lk
DQpEcml2ZXJSZWNlaXZlRnJhbWVDb21wbGV0ZWQoRHJpdmVySGFuZGxlLCBC
eXRlQ291bnQsIEZyYWdtZW50Q291bnQsIEZyYWdtZW50SGFuZGxlLCBSZWNl
aXZlU3RhdHVzKQ0KICAgIHZvaWQgKkRyaXZlckhhbmRsZTsNCiAgICBpbnQg
Qnl0ZUNvdW50Ow0KICAgIGludCBGcmFnbWVudENvdW50Ow0KICAgIHZvaWQg
KkZyYWdtZW50SGFuZGxlOw0KICAgIGludCBSZWNlaXZlU3RhdHVzOw0Kew0K
ICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9ICZvbHRyX3NvZnRjWyhpbnQp
RHJpdmVySGFuZGxlXTsNCiAgICBzdHJ1Y3QgaWZuZXQgKmlmcCA9ICZzYy0+
YXJwY29tLmFjX2lmOw0KICAgIHN0cnVjdCBpc284ODAyNV9oZWFkZXIgKnRo
Ow0KICAgIHN0cnVjdCBtYnVmICptMCwgKm0xLCAqbTsNCiAgICBpbnQgaiA9
IChpbnQpRnJhZ21lbnRIYW5kbGUsIHJjLCBmcmFtZV9sZW4gPSBCeXRlQ291
bnQsIG1hY19oZHJfbGVuOw0KICAgIGludCBtYnVmX29mZnNldCwgbWJ1Zl9z
aXplLCBmcmFnX29mZnNldCwgbGVuZ3RoOw0KICAgIGNoYXIgKmZyYWcgPSBz
Yy0+cnhfYnVmZmVyW2pdLmJ1ZjsNCg0KICAgIC8qcHJpbnRmKCJvbHRyJWQ6
IFJlY2VpdmVGcmFtZUNvbXBsZXRlZCAoU2l6ZSAlZCBDb3VudCAlZCBTdGFy
dCAlZClcbiIsIHNjLT51bml0LCBCeXRlQ291bnQsIEZyYWdtZW50Q291bnQs
IGopOyovDQoNCiAgICBpZiAoc2MtPmh3X3N0YXRlID49ICBIV19PUEVOKSB7
ICAgICAgICAgICAgIC8qIEhhcmR3YXJlIG9wZXJhdGluZyBub3JtYWxseSAq
Lw0KICAgICAgICBpZiAoZnJhZyAhPSBzYy0+cnhfYnVmZmVyW3NjLT5yeF9u
ZXh0ICYgUlhfTElTVF9NQVNLXS5idWYpIHsNCiAgICAgICAgICAgIHByaW50
Zigib2x0ciVkOiByaW5nIGJ1ZmZlciBwb2ludGVyIGJsb3duXG4iLCBzYy0+
dW5pdCk7DQogICAgICAgICAgICBvbHRyX3N0b3Aoc2MpOw0KICAgICAgICAg
ICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGlmIChSZWNlaXZlU3Rh
dHVzID09IFRSTExEX1JDVl9PSykgeyAgICAvKiBSZWNlaXZlIGdvb2QgZnJh
bWUgKi8NCiAgICAgICAgICAgIE1HRVRIRFIobTAsIE1fRE9OVFdBSVQsIE1U
X0RBVEEpOw0KICAgICAgICAgICAgbWJ1Zl9zaXplID0gTUhMRU47DQogICAg
ICAgICAgICBpZiAobTAgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIGlm
cC0+aWZfaWVycm9ycysrOw0KICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKEJ5dGVDb3VudCArIDIg
PiBNSExFTikgew0KICAgICAgICAgICAgICAgIE1DTEdFVChtMCwgTV9ET05U
V0FJVCk7DQogICAgICAgICAgICAgICAgbWJ1Zl9zaXplID0gTUNMQllURVM7
DQogICAgICAgICAgICAgICAgaWYgKChtMC0+bV9mbGFncyAmIE1fRVhUKSA9
PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obTApOw0KICAg
ICAgICAgICAgICAgICAgICBpZnAtPmlmX2llcnJvcnMrKzsNCiAgICAgICAg
ICAgICAgICAgICAgZ290byBvdXQ7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgfQ0KDQogICAgICAgICAgICBtMC0+bV9wa3RoZHIucmN2aWYg
PSAmc2MtPmFycGNvbS5hY19pZjsNCiAgICAgICAgICAgIG0wLT5tX3BrdGhk
ci5sZW4gPSBCeXRlQ291bnQ7DQogICAgICAgICAgICBtMC0+bV9sZW4gPSAw
Ow0KICAgICAgICAgICAgbTAtPm1fZGF0YSArPSAyOw0KICAgICAgICAgICAg
bWJ1Zl9zaXplIC09MjsNCiAgICAgICAgICAgIHRoID0gbXRvZChtMCwgc3Ry
dWN0IGlzbzg4MDI1X2hlYWRlciAqKTsNCg0KICAgICAgICAgICAgbSA9IG0w
OyBtYnVmX29mZnNldCA9IDA7IGZyYWdfb2Zmc2V0ID0gMDsNCiAgICAgICAg
ICAgIHdoaWxlIChmcmFtZV9sZW4gPiAwKSB7DQogICAgICAgICAgICAgICAg
bGVuZ3RoID0gTUlOMyhmcmFtZV9sZW4sIChSWF9CVUZGRVJfTEVOIC0gZnJh
Z19vZmZzZXQpLCAobWJ1Zl9zaXplIC0gbWJ1Zl9vZmZzZXQpKTsNCiAgICAg
ICAgICAgICAgICBiY29weShmcmFnICsgZnJhZ19vZmZzZXQsIG10b2QobSwg
Y2hhciAqKSArIG1idWZfb2Zmc2V0LCBsZW5ndGgpOw0KICAgICAgICAgICAg
ICAgIG0tPm1fbGVuICs9IGxlbmd0aDsNCiAgICAgICAgICAgICAgICBtYnVm
X29mZnNldCArPSBsZW5ndGg7DQogICAgICAgICAgICAgICAgZnJhZ19vZmZz
ZXQgKz0gbGVuZ3RoOw0KICAgICAgICAgICAgICAgIGZyYW1lX2xlbiAtPSBs
ZW5ndGg7DQogICAgICAgICAgICAgICAgaWYgKGZyYWdfb2Zmc2V0ID09IFJY
X0JVRkZFUl9MRU4pIHsNCiAgICAgICAgICAgICAgICAgICAgZnJhZyA9IHNj
LT5yeF9idWZmZXJbKytqXS5idWY7DQogICAgICAgICAgICAgICAgICAgIGZy
YWdfb2Zmc2V0ID0gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgaWYgKChtYnVmX29mZnNldCA9PSBtYnVmX3NpemUpICYmIChmcmFt
ZV9sZW4gPiAwKSkgew0KICAgICAgICAgICAgICAgICAgICBNR0VUKG0xLCBN
X0RPTlRXQUlULCBNVF9EQVRBKTsNCiAgICAgICAgICAgICAgICAgICAgbWJ1
Zl9zaXplID0gTUhMRU47DQogICAgICAgICAgICAgICAgICAgIGlmIChtMSA9
PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZnAtPmlmX2ll
cnJvcnMrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obTAp
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQogICAgICAg
ICAgICAgICAgICAgIH0gIA0KICAgICAgICAgICAgICAgICAgICBpZiAoZnJh
bWVfbGVuID4gTUhMRU4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIE1D
TEdFVChtMSwgTV9ET05UV0FJVCk7DQogICAgICAgICAgICAgICAgICAgICAg
ICBtYnVmX3NpemUgPSBNQ0xCWVRFUzsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgobTEtPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCkgew0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obTApOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obTEpOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmcC0+aWZfaWVycm9ycysrOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgICAgIG0tPm1fbmV4dCA9IG0xOw0KICAgICAgICAgICAgICAgICAg
ICBtID0gbTE7DQogICAgICAgICAgICAgICAgICAgIG1idWZfb2Zmc2V0ID0g
MDsNCiAgICAgICAgICAgICAgICAgICAgbS0+bV9sZW4gPSAwOw0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmcC0+
aWZfaXBhY2tldHMrKzsNCiAgICAgICAgDQojaWYgTkJQRklMVEVSID4gMA0K
ICAgICAgICAgICAgaWYgKGlmcC0+aWZfYnBmKQ0KICAgICAgICAgICAgICAg
IGJwZl9tdGFwKGlmcCwgbTApOw0KI2VuZGlmDQoNCiAgICAgICAgICAgIGlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX1BST01JU0MpDQogICAgICAgICAgICAg
ICAgaWYgKGJjbXAodGgtPmlzbzg4MDI1X2Rob3N0LCBldGhlcmJyb2FkY2Fz
dGFkZHIsIHNpemVvZih0aC0+aXNvODgwMjVfZGhvc3QpKSAhPSAwKSB7DQog
ICAgICAgICAgICAgICAgICAgIGlmICgoKHRoLT5pc284ODAyNV9kaG9zdFsw
XSAmIDB4N2YpICE9IHNjLT5hcnBjb20uYWNfZW5hZGRyWzBdKSB8fA0KICAg
ICAgICAgICAgICAgICAgICAgICAgKGJjbXAodGgtPmlzbzg4MDI1X2Rob3N0
ICsgMSwgc2MtPmFycGNvbS5hY19lbmFkZHIgKyAxLCBJU084ODAyNV9BRERS
X0xFTiAtIDEpKSkgew0KCSAgICAgICAgICAgICAgICBtX2ZyZWVtKG0wKTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KICAgICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIG1h
Y19oZHJfbGVuID0gSVNPODgwMjVfSERSX0xFTjsNCiAgICAgICAgICAgIGlm
ICh0aC0+aXNvODgwMjVfc2hvc3RbMF0gJiAweDgwKSAvKiBDaGVjayBmb3Ig
c291cmNlIHJvdXRpbmcgaW5mbyAqLw0KICAgICAgICAgICAgICAgIG1hY19o
ZHJfbGVuICs9ICAobnRvaHModGgtPnJjZikgJiAweDFmMDApID4+IDg7DQog
ICAgICAgICAgICANCiAgICAgICAgICAgIG0wLT5tX3BrdGhkci5sZW4gLT0g
bWFjX2hkcl9sZW47DQogICAgICAgICAgICBtMC0+bV9sZW4gLT0gbWFjX2hk
cl9sZW47DQogICAgICAgICAgICBtMC0+bV9kYXRhICs9IG1hY19oZHJfbGVu
Ow0KDQogICAgICAgICAgICBpc284ODAyNV9pbnB1dCgmc2MtPmFycGNvbS5h
Y19pZiwgdGgsIG0wKTsNCg0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg
ICAgaWYgKFJlY2VpdmVTdGF0dXMgIT0gVFJMTERfUkNWX05PX0RBVEEpIHsN
CiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIlZDogcmVjZWl2ZSBlcnJv
ci4gKFJlY2VpdmVTdGF0dXM9JWQpXG4iLCBzYy0+dW5pdCwgUmVjZWl2ZVN0
YXR1cyk7DQogICAgICAgICAgICAgICAgaWZwLT5pZl9pZXJyb3JzKys7DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCm91dDoNCiAgICAgICAgd2hpbGUg
KEZyYWdtZW50Q291bnQgPiAwKSB7DQogICAgICAgICAgICByYyA9IFRSbGxk
UmVjZWl2ZUZyYWdtZW50KHNjLT5UUmxsZEFkYXB0ZXIsIA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopc2MtPnJ4X2J1
ZmZlcltzYy0+cnhfbmV4dCAmIFJYX0xJU1RfTUFTS10uYnVmLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2dG9wKHNjLT5yeF9i
dWZmZXJbc2MtPnJ4X25leHQgJiBSWF9MSVNUX01BU0tdLmJ1ZiksDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlhfQlVGRkVSX0xF
TiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9p
ZCAqKXNjLT5yeF9idWZmZXJbc2MtPnJ4X25leHQgJiBSWF9MSVNUX01BU0td
LmluZGV4KTsNCiAgICAgICAgICAgIGlmIChyYyA9PSBUUkxMRF9SRUNFSVZF
X09LKSB7DQogICAgICAgICAgICAgICAgc2MtPnJ4X25leHQrKzsNCiAgICAg
ICAgICAgICAgICBGcmFnbWVudENvdW50LS07DQogICAgICAgICAgICB9IGVs
c2Ugew0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVy
IHJlZnVzZWQgZnJhZ21lbnQgKCVkKS5cbiIsIHNjLT51bml0LCBzYy0+cnhf
bmV4dCAtIDEpOw0KICAgICAgICAgICAgICAgIHNjLT5yeF9hdmFpbCArPSBG
cmFnbWVudENvdW50Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQogICAgfSBlbHNlIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSBiZWluZyBjbG9z
ZWQgKi8NCiAgICAgICAgaWYgKGZyYWcgIT0gc2MtPnJ4X2J1ZmZlcltzYy0+
cnhfbmV4dCsrICYgUlhfTElTVF9NQVNLXS5idWYpIHsNCiAgICAgICAgICAg
IHByaW50Zigib2x0ciVkOiByaW5nIGJ1ZmZlciBwb2ludGVyIGJsb3duXG4i
LCBzYy0+dW5pdCk7ICANCiAgICAgICAgfSAgICAgICAgICAgDQogICAgICAg
IHNjLT5yeF9hdmFpbCArPSBGcmFnbWVudENvdW50Ow0KICAgIH0NCiAgICAN
Cn0NCg0KDQovKg0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
TVcgR2x1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8N
Cg0KI2lmbmRlZiBUUmxsZElubGluZUlPDQoNCnN0YXRpYyB2b2lkIA0KRHJp
dmVyT3V0Qnl0ZShJT0FkZHJlc3MsIHZhbHVlKQ0KICAgIHVuc2lnbmVkIHNo
b3J0IElPQWRkcmVzczsNCiAgICB1bnNpZ25lZCBjaGFyIHZhbHVlOw0Kew0K
ICAgIG91dGIoSU9BZGRyZXNzLCB2YWx1ZSk7DQp9DQoNCnN0YXRpYyB2b2lk
DQpEcml2ZXJPdXRXb3JkKElPQWRkcmVzcywgdmFsdWUpDQogICAgdW5zaWdu
ZWQgc2hvcnQgSU9BZGRyZXNzOw0KICAgIHVuc2lnbmVkIHNob3J0IHZhbHVl
Ow0Kew0KICAgIG91dHcoSU9BZGRyZXNzLCB2YWx1ZSk7DQp9DQoNCnN0YXRp
YyB2b2lkDQpEcml2ZXJPdXREd29yZChJT0FkZHJlc3MsIHZhbHVlKQ0KICAg
IHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCiAgICB1bnNpZ25lZCBsb25n
IHZhbHVlOw0Kew0KICAgIG91dGwoSU9BZGRyZXNzLCB2YWx1ZSk7DQp9DQoN
CnN0YXRpYyB2b2lkDQpEcml2ZXJSZXBPdXRCeXRlKElPQWRkcmVzcywgRGF0
YVBvaW50ZXIsIEJ5dGVDb3VudCkNCiAgICB1bnNpZ25lZCBzaG9ydCBJT0Fk
ZHJlc3M7DQogICAgdW5zaWduZWQgY2hhciAgKkRhdGFQb2ludGVyOw0KICAg
IGludCBCeXRlQ291bnQ7DQp7DQogICAgb3V0c2IoSU9BZGRyZXNzLCAodm9p
ZCAqKURhdGFQb2ludGVyLCBCeXRlQ291bnQpOw0KfQ0KDQpzdGF0aWMgdm9p
ZA0KRHJpdmVyUmVwT3V0V29yZChJT0FkZHJlc3MsIERhdGFQb2ludGVyLCBX
b3JkQ291bnQpDQogICAgdW5zaWduZWQgc2hvcnQgSU9BZGRyZXNzOw0KICAg
IHVuc2lnbmVkIHNob3J0ICpEYXRhUG9pbnRlcjsNCiAgICBpbnQgV29yZENv
dW50Ow0Kew0KICAgIG91dHN3KElPQWRkcmVzcywgKHZvaWQgKilEYXRhUG9p
bnRlciwgV29yZENvdW50KTsNCn0NCg0Kc3RhdGljIHZvaWQNCkRyaXZlclJl
cE91dER3b3JkKElPQWRkcmVzcywgRGF0YVBvaW50ZXIsIERXb3JkQ291bnQp
DQogICAgdW5zaWduZWQgc2hvcnQgSU9BZGRyZXNzOw0KICAgIHVuc2lnbmVk
IGxvbmcgICpEYXRhUG9pbnRlcjsNCiAgICBpbnQgRFdvcmRDb3VudDsNCnsN
CiAgICBvdXRzbChJT0FkZHJlc3MsICh2b2lkICopRGF0YVBvaW50ZXIsIERX
b3JkQ291bnQpOw0KfQ0KDQpzdGF0aWMgdW5zaWduZWQgY2hhcg0KRHJpdmVy
SW5CeXRlKElPQWRkcmVzcykNCiAgICB1bnNpZ25lZCBzaG9ydCBJT0FkZHJl
c3M7DQp7DQogICAgcmV0dXJuKGluYihJT0FkZHJlc3MpKTsNCn0NCg0Kc3Rh
dGljIHVuc2lnbmVkIHNob3J0DQpEcml2ZXJJbldvcmQoSU9BZGRyZXNzKQ0K
ICAgIHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCnsNCiAgIHJldHVybihp
bncoSU9BZGRyZXNzKSk7DQp9DQoNCnN0YXRpYyB1bnNpZ25lZCBsb25nDQpE
cml2ZXJJbkR3b3JkKElPQWRkcmVzcykNCiAgICB1bnNpZ25lZCBzaG9ydCBJ
T0FkZHJlc3M7DQp7DQogICAgcmV0dXJuKGlubChJT0FkZHJlc3MpKTsNCn0N
Cg0Kc3RhdGljIHZvaWQNCkRyaXZlclJlcEluQnl0ZShJT0FkZHJlc3MsIERh
dGFQb2ludGVyLCBCeXRlQ291bnQpDQogICAgdW5zaWduZWQgc2hvcnQgSU9B
ZGRyZXNzOw0KICAgIHVuc2lnbmVkIGNoYXIgICpEYXRhUG9pbnRlcjsNCiAg
ICBpbnQgQnl0ZUNvdW50Ow0Kew0KICAgIGluc2IoSU9BZGRyZXNzLCAodm9p
ZCAqKURhdGFQb2ludGVyLCBCeXRlQ291bnQpOw0KfQ0KDQpzdGF0aWMgdm9p
ZA0KRHJpdmVyUmVwSW5Xb3JkKElPQWRkcmVzcywgRGF0YVBvaW50ZXIsIFdv
cmRDb3VudCkNCiAgICB1bnNpZ25lZCBzaG9ydCBJT0FkZHJlc3M7DQogICAg
dW5zaWduZWQgc2hvcnQgKkRhdGFQb2ludGVyOw0KICAgIGludCBXb3JkQ291
bnQ7DQp7DQogICAgaW5zdyhJT0FkZHJlc3MsICh2b2lkICopRGF0YVBvaW50
ZXIsIFdvcmRDb3VudCk7DQp9DQpzdGF0aWMgdm9pZA0KRHJpdmVyUmVwSW5E
d29yZChJT0FkZHJlc3MsIERhdGFQb2ludGVyLCBEV29yZENvdW50KQ0KICAg
IHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCiAgICB1bnNpZ25lZCBsb25n
ICAqRGF0YVBvaW50ZXI7DQogICAgaW50IERXb3JkQ291bnQ7DQp7DQogICAg
aW5zbChJT0FkZHJlc3MsICh2b2lkICopRGF0YVBvaW50ZXIsIERXb3JkQ291
bnQpOw0KfQ0KI2VuZGlmIC8qIFRSbGxkSW5saW5lSU8gKi8NCg0KI2VuZGlm
IC8qIE5PTFRSICovDQo=
--0-519715650-918591506=:14147--

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9902091456290.14147-200000>