Re: Linux 2.5.3-pre1-aia1 (fwd)

Andre Hedrick (andre@linuxdiskcert.org)
Mon, 21 Jan 2002 01:50:26 -0800 (PST)


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.

--1430322656-1514984572-1011606626=:13727
Content-Type: text/plain; charset=us-ascii

Failed to attached the patch.

Andre Hedrick
Linux Disk Certification Project Linux ATA Development

---------- Forwarded message ----------
Date: Mon, 21 Jan 2002 01:48:10 -0800 (PST)
From: Andre Hedrick <andre@linuxdiskcert.org>
To: Jens Axboe <axboe@suse.de>
Cc: Davide Libenzi <davidel@xmailserver.org>,
Anton Altaparmakov <aia21@cam.ac.uk>,
Linus Torvalds <torvalds@transmeta.com>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: Linux 2.5.3-pre1-aia1

On Mon, 21 Jan 2002, Jens Axboe wrote:

> On Mon, Jan 21 2002, Andre Hedrick wrote:
> > > This really sucks, it means we cannot safely use multi mode for a
> > > variety of request sizes. I agree with your earlier comment. Here's what
> > > I think we should be doing: when requesting multi mode, limit to 8
> > > sectors like in your patch. This is by far the most commen multiple,
> > > that's why. When starting a request, use WIN_MULT* only for cases where
> > > (rq->nr_sectors % drive->mult_count) == 0. If that doesn't hold, simply
> > > use WIN_READ or WIN_WRITE.
> > >
> > > Applied the 2.5.3-pre2 sched SMP fix, booting -pre2 and then hacking up
> > > a patch.
> >
> > Why I have already done it, just take and apply.
>
> Cool, where is it?

Attached, and please do not pick and choose.

I moved and added things for a reason as not to loose hard work, because
of writing the ISR's to the purity of the spec, and then we modify ISR's
to fit the kernel and not the other way around. I do have a just reason
to request a MEMPOOL, which would be exclusively used for PIO operations.
Then we get out of the mess we are in and get in to serious compliance to
how the hardware works.

Thus in the offline comments about the creation of an ata_request_struct,
a mempool allocation for PIO is justified. Since the correct solution of
DMA timeouts is to void the request and assume no data down is valid.
Thus PIO is next.

If we look at the overhead in the generation of a new request for each and
every time we do a PIO transfer it is scary. Think about this issue for
more than the time it takes to hit the delete key.

Respectfully,

Andre Hedrick
Linux Disk Certification Project Linux ATA Development

--1430322656-1514984572-1011606626=:13727
Content-Type: text/plain; charset=us-ascii; name="acb-io-2.5.3-p2.01212002.patch"
Content-Transfer-Encoding: base64
Content-ID: <Pine.LNX.4.10.10201210150260.13727@master.linux-ide.org>
Content-Description:
Content-Disposition: attachment; filename="acb-io-2.5.3-p2.01212002.patch"

ZGlmZiAtdXJOIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRl
L2NtZDY0eC5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2NtZDY0eC5j
DQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvY21k
NjR4LmMJU3VuIEphbiAyMCAwMDoyNTo0NCAyMDAyDQorKysgbGludXgtMi41
LjMtcDIvZHJpdmVycy9pZGUvY21kNjR4LmMJU3VuIEphbiAyMCAwMTowMDo1
NSAyMDAyDQpAQCAtNTM4LDYgKzUzOCwxMSBAQA0KIAlpZiAoKHNwZWVkID09
IFhGRVJfVURNQV82KSAmJiAoc2NzYyAmIDB4MzApID09IDB4MDApIHsNCiAJ
CXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OEEsIHNjc2N8MHgwMSk7
DQogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4OEEsICZzY3NjKTsN
CisjaWYgMA0KKwkJLyogaWYgMTMzIGNsb2NrIGZhaWxzLCBzd2l0Y2ggdG8g
MnhidXMgY2xvY2sgKi8NCisJCWlmICghKHNjc2MgJiAweDAxKSkNCisJCQlw
Y2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhBLCBzY3NjfDB4MTApOw0K
KyNlbmRpZg0KIAl9DQogDQogCXN3aXRjaChzcGVlZCkgew0KQEAgLTk3NSw2
ICs5ODAsMTMgQEANCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4
NCwgMHgwMCk7DQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg4QSwg
JnRtcGJ5dGUpOw0KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhB
LCB0bXBieXRlfDB4MDEpOw0KKyNpZiAwDQorCS8qIGlmIDEzMyBjbG9jayBm
YWlscywgc3dpdGNoIHRvIDJ4YnVzIGNsb2NrICovCQ0KKwlpZiAoISh0bXBi
eXRlICYgMHgwMSkpIHsNCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwg
MHg4QSwgJnRtcGJ5dGUpOw0KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRl
diwgMHg4QSwgdG1wYnl0ZXwweDEwKTsJCQ0KKwl9DQorI2VuZGlmDQogCXBj
aV93cml0ZV9jb25maWdfd29yZChkZXYsIDB4QTIsIDB4MzI4QSk7DQogCXBj
aV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweEE0LCAweDMyOEEpOw0KIAlw
Y2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHhBOCwgMHg0MzkyKTsNCmRp
ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9o
cHQzNHguYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9ocHQzNHguYw0K
LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2hwdDM0
eC5jCVR1ZSBOb3YgMjcgMDk6MjM6MjcgMjAwMQ0KKysrIGxpbnV4LTIuNS4z
LXAyL2RyaXZlcnMvaWRlL2hwdDM0eC5jCVN1biBKYW4gMjAgMDA6NDA6MTEg
MjAwMg0KQEAgLTMzNSw5ICszMzUsMjggQEANCiAJCQlkcml2ZS0+d2FpdGlu
Z19mb3JfZG1hID0gMTsNCiAJCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9k
aXNrKQ0KIAkJCQlyZXR1cm4gMDsNCi0JCQlpZGVfc2V0X2hhbmRsZXIoZHJp
dmUsICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsJLyogaXNzdWUg
Y21kIHRvIGRyaXZlICovDQotCQkJT1VUX0JZVEUoKHJlYWRpbmcgPT0gOSkg
PyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVH
KTsNCi0JCQlyZXR1cm4gMDsNCisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUs
ICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCisJCQkvKiBpc3N1
ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQkvKg0KKwkJCSAqIEZJWCBNRSB0byB1
c2Ugb25seSBBQ0IgaWRlX3Rhc2tfdCBhcmdzIFN0cnVjdA0KKwkJCSAqLw0K
KyNpZiAwDQorCQl7DQorCQkJaWRlX3Rhc2tfdCAqYXJncyA9IEhXR1JPVVAo
ZHJpdmUpLT5ycS0+c3BlY2lhbDsNCisJCQlPVVRfQllURShhcmdzLT50ZlJl
Z2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9DT01NQU5EX1JFRyk7
DQorCQl9DQorI2Vsc2UNCisJCQlpZiAoKEhXR1JPVVAoZHJpdmUpLT5ycS0+
ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpICYmDQorCQkJICAgIChkcml2
ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0KKwkJCQlpZGVfdGFza190ICphcmdz
ID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0KKwkJCQlPVVRfQllU
RShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9D
T01NQU5EX1JFRyk7DQorCQkJfSBlbHNlIGlmIChkcml2ZS0+YWRkcmVzc2lu
Zykgew0KKwkJCQlPVVRfQllURSgocmVhZGluZyA9PSA5KSA/IFdJTl9SRUFE
RE1BX0VYVCA6IFdJTl9XUklURURNQV9FWFQsIElERV9DT01NQU5EX1JFRyk7
DQorCQkJfSBlbHNlIHsNCisJCQkJT1VUX0JZVEUoKHJlYWRpbmcgPT0gOSkg
PyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVH
KTsNCisJCQl9DQorI2VuZGlmDQorCQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5k
bWFwcm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJCWNhc2UgaWRlX2Rt
YV9lbmQ6CS8qIHJldHVybnMgMSBvbiBlcnJvciwgMCBvdGhlcndpc2UgKi8N
CiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsNCiAJCQlvdXRiKGlu
YihkbWFfYmFzZSkmfjEsIGRtYV9iYXNlKTsJLyogc3RvcCBETUEgKi8NCmRp
ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9p
Y3NpZGUuYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9pY3NpZGUuYw0K
LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2ljc2lk
ZS5jCVR1ZSBEZWMgMjUgMjE6NDM6MzIgMjAwMQ0KKysrIGxpbnV4LTIuNS4z
LXAyL2RyaXZlcnMvaWRlL2ljc2lkZS5jCVN1biBKYW4gMjAgMDA6NDA6MTEg
MjAwMg0KQEAgLTU0Nyw5ICs1NDcsMjUgQEANCiAJCQlyZXR1cm4gMDsNCiAN
CiAJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmljc2lkZV9kbWFpbnRyLCBX
QUlUX0NNRCwgTlVMTCk7DQotCQlPVVRfQllURShyZWFkaW5nID8gV0lOX1JF
QURETUEgOiBXSU5fV1JJVEVETUEsDQotCQkJIElERV9DT01NQU5EX1JFRyk7
DQotDQorCQkvKg0KKwkJICogRklYIE1FIHRvIHVzZSBvbmx5IEFDQiBpZGVf
dGFza190IGFyZ3MgU3RydWN0DQorCQkgKi8NCisjaWYgMA0KKwl7DQorCQlp
ZGVfdGFza190ICphcmdzID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFs
Ow0KKwkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09NTUFORF9P
RkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOwl9CQkNCisjZWxzZQ0KKwkJaWYg
KChIV0dST1VQKGRyaXZlKS0+cnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tG
SUxFKSAmJg0KKwkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0K
KwkJCWlkZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNw
ZWNpYWw7DQorCQkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09N
TUFORF9PRkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfSBlbHNlIGlm
IChkcml2ZS0+YWRkcmVzc2luZykgew0KKwkJCU9VVF9CWVRFKHJlYWRpbmcg
PyBXSU5fUkVBRERNQV9FWFQgOiBXSU5fV1JJVEVETUFfRVhULCBJREVfQ09N
TUFORF9SRUcpOw0KKwkJfSBlbHNlIHsNCisJCQlPVVRfQllURShyZWFkaW5n
ID8gV0lOX1JFQURETUEgOiBXSU5fV1JJVEVETUEsIElERV9DT01NQU5EX1JF
Ryk7DQorCQl9DQorI2VuZGlmDQorCQlyZXR1cm4gSFdJRihkcml2ZSktPmRt
YXByb2MoaWRlX2RtYV9iZWdpbiwgZHJpdmUpOw0KIAljYXNlIGlkZV9kbWFf
YmVnaW46DQogCQllbmFibGVfZG1hKGh3aWYtPmh3LmRtYSk7DQogCQlyZXR1
cm4gMDsNCmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2
ZXJzL2lkZS9pZGUtZGlzay5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRl
L2lkZS1kaXNrLmMNCi0tLSBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2
ZXJzL2lkZS9pZGUtZGlzay5jCVN1biBKYW4gMjAgMDA6MjU6NDQgMjAwMg0K
KysrIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMJTW9u
IEphbiAyMSAwMDowMToyMCAyMDAyDQpAQCAtMTc3LDcgKzE3Nyw3IEBADQog
CXN0cnVjdCBoZF9kcml2ZV90YXNrX2hkcgl0YXNrZmlsZTsNCiAJc3RydWN0
IGhkX2RyaXZlX2hvYl9oZHIJCWhvYmZpbGU7DQogCWlkZV90YXNrX3QJCQlh
cmdzOw0KLQlpbnQJCQkJc2VjdG9yczsNCisJaW50CQkJCXNlY3RvcnMgPSBy
cS0+bnJfc2VjdG9yczsNCiANCiAJdGFza19pb3JlZ190IGNvbW1hbmQJPSBn
ZXRfY29tbWFuZChkcml2ZSwgcnFfZGF0YV9kaXIocnEpKTsNCiANCkBAIC0x
ODksMTMgKzE4OSwxNCBAQA0KIAltZW1zZXQoJnRhc2tmaWxlLCAwLCBzaXpl
b2YodGFza19zdHJ1Y3RfdCkpOw0KIAltZW1zZXQoJmhvYmZpbGUsIDAsIHNp
emVvZihob2Jfc3RydWN0X3QpKTsNCiANCi0Jc2VjdG9ycyA9IHJxLT5ucl9z
ZWN0b3JzOw0KIAlpZiAoc2VjdG9ycyA9PSAyNTYpDQogCQlzZWN0b3JzID0g
MDsNCi0JaWYgKGNvbW1hbmQgPT0gV0lOX01VTFRXUklURV9FWFQgfHwgY29t
bWFuZCA9PSBXSU5fTVVMVFdSSVRFKSB7DQorCWlmIChjb21tYW5kID09IFdJ
Tl9NVUxUV1JJVEUpIHsNCiAJCXNlY3RvcnMgPSBkcml2ZS0+bXVsdF9jb3Vu
dDsNCiAJCWlmIChzZWN0b3JzID4gcnEtPmN1cnJlbnRfbnJfc2VjdG9ycykN
CiAJCQlzZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsNCisJCWlm
IChzZWN0b3JzICE9IGRyaXZlLT5tdWx0X2NvdW50KQ0KKwkJCWNvbW1hbmQg
PSBXSU5fV1JJVEU7DQogCX0NCiANCiAJdGFza2ZpbGUuc2VjdG9yX2NvdW50
CT0gc2VjdG9yczsNCkBAIC0yMzQsMTcgKzIzNSwxOCBAQA0KIAlzdHJ1Y3Qg
aGRfZHJpdmVfdGFza19oZHIJdGFza2ZpbGU7DQogCXN0cnVjdCBoZF9kcml2
ZV9ob2JfaGRyCQlob2JmaWxlOw0KIAlpZGVfdGFza190CQkJYXJnczsNCi0J
aW50CQkJCXNlY3RvcnM7DQorCWludAkJCQlzZWN0b3JzID0gcnEtPm5yX3Nl
Y3RvcnM7DQogDQogCXRhc2tfaW9yZWdfdCBjb21tYW5kCT0gZ2V0X2NvbW1h
bmQoZHJpdmUsIHJxX2RhdGFfZGlyKHJxKSk7DQogDQotCXNlY3RvcnMgPSBy
cS0+bnJfc2VjdG9yczsNCiAJaWYgKHNlY3RvcnMgPT0gMjU2KQ0KIAkJc2Vj
dG9ycyA9IDA7DQotCWlmIChjb21tYW5kID09IFdJTl9NVUxUV1JJVEVfRVhU
IHx8IGNvbW1hbmQgPT0gV0lOX01VTFRXUklURSkgew0KKwlpZiAoY29tbWFu
ZCA9PSBXSU5fTVVMVFdSSVRFKSB7DQogCQlzZWN0b3JzID0gZHJpdmUtPm11
bHRfY291bnQ7DQogCQlpZiAoc2VjdG9ycyA+IHJxLT5jdXJyZW50X25yX3Nl
Y3RvcnMpDQogCQkJc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7
DQorCQlpZiAoc2VjdG9ycyAhPSBkcml2ZS0+bXVsdF9jb3VudCkNCisJCQlj
b21tYW5kID0gV0lOX1dSSVRFOw0KIAl9DQogDQogCW1lbXNldCgmdGFza2Zp
bGUsIDAsIHNpemVvZih0YXNrX3N0cnVjdF90KSk7DQpAQCAtMjkyLDMwICsy
OTQsMjYgQEANCiAJc3RydWN0IGhkX2RyaXZlX3Rhc2tfaGRyCXRhc2tmaWxl
Ow0KIAlzdHJ1Y3QgaGRfZHJpdmVfaG9iX2hkcgkJaG9iZmlsZTsNCiAJaWRl
X3Rhc2tfdAkJCWFyZ3M7DQotCWludAkJCQlzZWN0b3JzOw0KKwlpbnQJCQkJ
c2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOw0KIA0KIAl0YXNrX2lvcmVnX3Qg
Y29tbWFuZAk9IGdldF9jb21tYW5kKGRyaXZlLCBycV9kYXRhX2RpcihycSkp
Ow0KIA0KIAltZW1zZXQoJnRhc2tmaWxlLCAwLCBzaXplb2YodGFza19zdHJ1
Y3RfdCkpOw0KIAltZW1zZXQoJmhvYmZpbGUsIDAsIHNpemVvZihob2Jfc3Ry
dWN0X3QpKTsNCiANCi0Jc2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOw0KLQlp
ZiAoc2VjdG9ycyA9PSAyNTYpDQorCWlmIChzZWN0b3JzID09IDY1NTM2KQ0K
IAkJc2VjdG9ycyA9IDA7DQotCWlmIChjb21tYW5kID09IFdJTl9NVUxUV1JJ
VEVfRVhUIHx8IGNvbW1hbmQgPT0gV0lOX01VTFRXUklURSkgew0KKw0KKwlp
ZiAoY29tbWFuZCA9PSBXSU5fTVVMVFdSSVRFX0VYVCkgew0KIAkJc2VjdG9y
cyA9IGRyaXZlLT5tdWx0X2NvdW50Ow0KIAkJaWYgKHNlY3RvcnMgPiBycS0+
Y3VycmVudF9ucl9zZWN0b3JzKQ0KIAkJCXNlY3RvcnMgPSBycS0+Y3VycmVu
dF9ucl9zZWN0b3JzOw0KKwkJaWYgKHNlY3RvcnMgIT0gZHJpdmUtPm11bHRf
Y291bnQpDQorCQkJY29tbWFuZCA9IFdJTl9XUklURV9FWFQ7DQogCX0NCiAN
CiAJdGFza2ZpbGUuc2VjdG9yX2NvdW50CT0gc2VjdG9yczsNCiAJaG9iZmls
ZS5zZWN0b3JfY291bnQJPSBzZWN0b3JzID4+IDg7DQotDQotCWlmIChycS0+
bnJfc2VjdG9ycyA9PSA2NTUzNikgew0KLQkJdGFza2ZpbGUuc2VjdG9yX2Nv
dW50CT0gMHgwMDsNCi0JCWhvYmZpbGUuc2VjdG9yX2NvdW50CT0gMHgwMDsN
Ci0JfQ0KLQ0KIAl0YXNrZmlsZS5zZWN0b3JfbnVtYmVyCT0gYmxvY2s7CS8q
IGxvdyBsYmEgKi8NCiAJdGFza2ZpbGUubG93X2N5bGluZGVyCT0gKGJsb2Nr
Pj49OCk7CS8qIG1pZCBsYmEgKi8NCiAJdGFza2ZpbGUuaGlnaF9jeWxpbmRl
cgk9IChibG9jaz4+PTgpOwkvKiBoaSAgbGJhICovDQpAQCAtNjc0LDYgKzY3
Miw4IEBADQogCQlzLT5iLnNldF9tdWx0bW9kZSA9IDA7DQogCQlpZiAoZHJp
dmUtPmlkICYmIGRyaXZlLT5tdWx0X3JlcSA+IGRyaXZlLT5pZC0+bWF4X211
bHRzZWN0KQ0KIAkJCWRyaXZlLT5tdWx0X3JlcSA9IGRyaXZlLT5pZC0+bWF4
X211bHRzZWN0Ow0KKwkJaWYgKGRyaXZlLT5tdWx0X3JlcSA+IDgpDQorCQkJ
ZHJpdmUtPm11bHRfcmVxID0gODsNCiAJCWlmICghSVNfUERDNDAzMF9EUklW
RSkgew0KIAkJCXN0cnVjdCBoZF9kcml2ZV90YXNrX2hkciB0YXNrZmlsZTsN
CiAJCQlzdHJ1Y3QgaGRfZHJpdmVfaG9iX2hkciBob2JmaWxlOw0KQEAgLTEw
NDAsNiArMTA0MCw4IEBADQogCQkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVs
dG1vZGUgPSAxOw0KICNlbmRpZgkvKiBDT05GSUdfSURFRElTS19NVUxUSV9N
T0RFICovDQogCX0NCisJaWYgKGRyaXZlLT5tdWx0X3JlcSA+IDgpDQorCQlk
cml2ZS0+bXVsdF9yZXEgPSA4Ow0KIAlkcml2ZS0+bm9faW9fMzJiaXQgPSBp
ZC0+ZHdvcmRfaW8gPyAxIDogMDsNCiAJaWYgKGRyaXZlLT5pZC0+Y2ZzX2Vu
YWJsZV8yICYgMHgzMDAwKQ0KIAkJd3JpdGVfY2FjaGUoZHJpdmUsIChpZC0+
Y2ZzX2VuYWJsZV8yICYgMHgzMDAwKSk7DQpkaWZmIC11ck4gbGludXgtMi41
LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGxpbnV4LTIu
NS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1kbWEuYw0KLS0tIGxpbnV4LTIuNS4z
LXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwlTdW4gSmFuIDIw
IDAwOjI1OjQ0IDIwMDINCisrKyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lk
ZS9pZGUtZG1hLmMJU3VuIEphbiAyMCAwMDo0MDoxMSAyMDAyDQpAQCAtNjA2
LDE4ICs2MDYsMzggQEANCiAJCWNhc2UgaWRlX2RtYV93cml0ZToNCiAJCQlT
RUxFQ1RfUkVBRF9XUklURShod2lmLGRyaXZlLGZ1bmMpOw0KIAkJCWlmICgh
KGNvdW50ID0gaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBmdW5jKSkpDQot
CQkJCXJldHVybiAxOwkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovDQot
CQkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGRtYV9iYXNlICsgNCk7IC8q
IFBSRCB0YWJsZSAqLw0KLQkJCW91dGIocmVhZGluZywgZG1hX2Jhc2UpOwkJ
CS8qIHNwZWNpZnkgci93ICovDQotCQkJb3V0YihpbmIoZG1hX2Jhc2UrMil8
NiwgZG1hX2Jhc2UrMik7CQkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3Mg
Ki8NCisJCS8qDQorCQkgKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICAgISEh
RklYTUUNCisJCSAqDQorCQkgKiBNYXJrIHRoZSByZXF1ZXN0IGZvciBQSU8g
YW5kIGVuZF9yZXF1ZXN0IHRvIGJlIHF1ZXVlZC4NCisJCSAqIE5vdGluZyB0
aGUgZnV0dXJlIFRJTUVPVVQgbW9kZWwgZG8gdGhlIHNhbWUgbGVzcw0KKwkJ
ICogZGV2aWNlIHJlc2V0LCBuZWVkZWQgdG8gcmVjb3ZlciBkcml2ZSB0byBj
b21tYW5kIG1vZGUuDQorCQkgKi8NCisJCQkJcmV0dXJuIDE7DQorCQkJLyog
UFJEIHRhYmxlICovDQorCQkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGRt
YV9iYXNlICsgNCk7DQorCQkJLyogc3BlY2lmeSByL3cgKi8NCisJCQlvdXRi
KHJlYWRpbmcsIGRtYV9iYXNlKTsNCisJCQkvKiBjbGVhciBJTlRSICYgRVJS
T1IgZmxhZ3MgKi8NCisJCQlvdXRiKGluYihkbWFfYmFzZSsyKXw2LCBkbWFf
YmFzZSsyKTsNCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsNCiAJ
CQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQ0KIAkJCQlyZXR1cm4g
MDsNCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQNCi0J
CQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1hX2ludHIsIDIqV0FJ
VF9DTUQsIE5VTEwpOwkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQlp
ZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1hX2ludHIsIDIqV0FJVF9D
TUQsIE5VTEwpOw0KICNlbHNlIC8qICFDT05GSUdfQkxLX0RFVl9JREVETUFf
VElNRU9VVCAqLw0KLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmlkZV9k
bWFfaW50ciwgV0FJVF9DTUQsIGRtYV90aW1lcl9leHBpcnkpOwkvKiBpc3N1
ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUs
ICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBkbWFfdGltZXJfZXhwaXJ5KTsN
CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQgKi8N
CisJCQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8NCisJCQkvKg0KKwkJCSAq
IEZJWCBNRSB0byB1c2Ugb25seSBBQ0IgaWRlX3Rhc2tfdCBhcmdzIFN0cnVj
dA0KKwkJCSAqLw0KKyNpZiAwDQorCQl7DQorCQkJaWRlX3Rhc2tfdCAqYXJn
cyA9IEhXR1JPVVAoZHJpdmUpLT5ycS0+c3BlY2lhbDsNCisJCQlPVVRfQllU
RShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0sIElERV9D
T01NQU5EX1JFRyk7DQorCQl9DQorI2Vsc2UNCiAJCQlpZiAoKEhXR1JPVVAo
ZHJpdmUpLT5ycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpICYmDQog
CQkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0KIAkJCQlpZGVf
dGFza190ICphcmdzID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0K
QEAgLTYyNyw2ICs2NDcsNyBAQA0KIAkJCX0gZWxzZSB7DQogCQkJCU9VVF9C
WVRFKHJlYWRpbmcgPyBXSU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURF
X0NPTU1BTkRfUkVHKTsNCiAJCQl9DQorI2VuZGlmDQogCQkJcmV0dXJuIEhX
SUYoZHJpdmUpLT5kbWFwcm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJ
CWNhc2UgaWRlX2RtYV9iZWdpbjoNCiAJCQkvKiBOb3RlIHRoYXQgdGhpcyBp
cyBkb25lICphZnRlciogdGhlIGNtZCBoYXMNCkBAIC02MzQsMTUgKzY1NSwy
MSBAQA0KIAkJCSAqIFRoZSBQcm9taXNlIFVsdHJhMzMgZG9lc24ndCB3b3Jr
IGNvcnJlY3RseSB3aGVuDQogCQkJICogd2UgZG8gdGhpcyBwYXJ0IGJlZm9y
ZSBpc3N1aW5nIHRoZSBkcml2ZSBjbWQuDQogCQkJICovDQotCQkJb3V0Yihp
bmIoZG1hX2Jhc2UpfDEsIGRtYV9iYXNlKTsJCS8qIHN0YXJ0IERNQSAqLw0K
KwkJCS8qIHN0YXJ0IERNQSAqLw0KKwkJCW91dGIoaW5iKGRtYV9iYXNlKXwx
LCBkbWFfYmFzZSk7DQogCQkJcmV0dXJuIDA7DQogCQljYXNlIGlkZV9kbWFf
ZW5kOiAvKiByZXR1cm5zIDEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlICovDQog
CQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7DQotCQkJb3V0YihpbmIo
ZG1hX2Jhc2UpJn4xLCBkbWFfYmFzZSk7CS8qIHN0b3AgRE1BICovDQotCQkJ
ZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2UrMik7CQkvKiBnZXQgRE1BIHN0YXR1
cyAqLw0KLQkJCW91dGIoZG1hX3N0YXR8NiwgZG1hX2Jhc2UrMik7CS8qIGNs
ZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLw0KLQkJCWlkZV9kZXN0cm95
X2RtYXRhYmxlKGRyaXZlKTsJLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovDQot
CQkJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9z
dGF0KSA6IDA7CS8qIHZlcmlmeSBnb29kIERNQSBzdGF0dXMgKi8NCisJCQkv
KiBzdG9wIERNQSAqLw0KKwkJCW91dGIoaW5iKGRtYV9iYXNlKSZ+MSwgZG1h
X2Jhc2UpOw0KKwkJCS8qIGdldCBETUEgc3RhdHVzICovDQorCQkJZG1hX3N0
YXQgPSBpbmIoZG1hX2Jhc2UrMik7DQorCQkJLyogY2xlYXIgdGhlIElOVFIg
JiBFUlJPUiBiaXRzICovDQorCQkJb3V0YihkbWFfc3RhdHw2LCBkbWFfYmFz
ZSsyKTsNCisJCQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8NCisJCQlpZGVf
ZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7DQorCQkJLyogdmVyaWZ5IGdvb2Qg
RE1BIHN0YXR1cyAqLw0KKwkJCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0
ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOw0KIAkJY2FzZSBpZGVfZG1hX3Rl
c3RfaXJxOiAvKiByZXR1cm5zIDEgaWYgZG1hIGlycSBpc3N1ZWQsIDAgb3Ro
ZXJ3aXNlICovDQogCQkJZG1hX3N0YXQgPSBpbmIoZG1hX2Jhc2UrMik7DQog
I2lmIDAgIC8qIGRvIG5vdCBzZXQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91
IGFyZSBkb2luZyAqLw0KQEAgLTY1MSwyMSArNjc4LDIyIEBADQogCQkJCW91
dGIoZG1hX2Jhc2UrMiwgZG1hX3N0YXQgJiAweEU0KTsNCiAJCQl9DQogI2Vu
ZGlmDQotCQkJcmV0dXJuIChkbWFfc3RhdCAmIDQpID09IDQ7CS8qIHJldHVy
biAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8NCisJCQkvKiByZXR1cm4gMSBpZiBJ
TlRSIGFzc2VydGVkICovDQorCQkJcmV0dXJuIChkbWFfc3RhdCAmIDQpID09
IDQ7DQogCQljYXNlIGlkZV9kbWFfYmFkX2RyaXZlOg0KIAkJY2FzZSBpZGVf
ZG1hX2dvb2RfZHJpdmU6DQogCQkJcmV0dXJuIGNoZWNrX2RyaXZlX2xpc3Rz
KGRyaXZlLCAoZnVuYyA9PSBpZGVfZG1hX2dvb2RfZHJpdmUpKTsNCiAJCWNh
c2UgaWRlX2RtYV92ZXJib3NlOg0KIAkJCXJldHVybiByZXBvcnRfZHJpdmVf
ZG1haW5nKGRyaXZlKTsNCiAJCWNhc2UgaWRlX2RtYV90aW1lb3V0Og0KLQkJ
CS8vIEZJWE1FOiBNYW55IElERSBjaGlwc2V0cyBkbyBub3QgcGVybWl0IGNv
bW1hbmQgZmlsZSByZWdpc3RlciBhY2Nlc3MNCi0JCQkvLyBGSVhNRTogd2hp
bGUgdGhlIGJ1cy1tYXN0ZXIgZnVuY3Rpb24gaXMgc3RpbGwgYWN0aXZlLg0K
LQkJCS8vIEZJWE1FOiBUbyBwcmV2ZW50IGRlYWRsb2NrIHdpdGggdGhvc2Ug
Y2hpcHNldHMsIHdlIG11c3QgYmUgZXh0cmVtZWx5DQotCQkJLy8gRklYTUU6
IGNhcmVmdWwgaGVyZSAoYW5kIGluIGlkZV9pbnRyKCkgYXMgd2VsbCkgdG8g
Tk9UIGFjY2VzcyBhbnkNCi0JCQkvLyBGSVhNRTogcmVnaXN0ZXJzIGZyb20g
dGhlIDB4MUZ4LzB4MTd4IHNldHMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZQ0K
LQkJCS8vIEZJWE1FOiBidXMtbWFzdGVyIG9wZXJhdGlvbiB2aWEgdGhlIGJ1
cy1tYXN0ZXIgY29udHJvbCByZWcuDQotCQkJLy8gRklYTUU6IE90aGVyd2lz
ZSwgY2hpcHNldCBkZWFkbG9jayB3aWxsIG9jY3VyLCBhbmQgc29tZSBzeXN0
ZW1zIHdpbGwNCi0JCQkvLyBGSVhNRTogbG9jayB1cCBjb21wbGV0ZWx5ISEN
CisJLy8gRklYTUU6IE1hbnkgSURFIGNoaXBzZXRzIGRvIG5vdCBwZXJtaXQg
Y29tbWFuZCBmaWxlIHJlZ2lzdGVyIGFjY2Vzcw0KKwkvLyBGSVhNRTogd2hp
bGUgdGhlIGJ1cy1tYXN0ZXIgZnVuY3Rpb24gaXMgc3RpbGwgYWN0aXZlLg0K
KwkvLyBGSVhNRTogVG8gcHJldmVudCBkZWFkbG9jayB3aXRoIHRob3NlIGNo
aXBzZXRzLCB3ZSBtdXN0IGJlIGV4dHJlbWVseQ0KKwkvLyBGSVhNRTogY2Fy
ZWZ1bCBoZXJlIChhbmQgaW4gaWRlX2ludHIoKSBhcyB3ZWxsKSB0byBOT1Qg
YWNjZXNzIGFueQ0KKwkvLyBGSVhNRTogcmVnaXN0ZXJzIGZyb20gdGhlIDB4
MUZ4LzB4MTd4IHNldHMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZQ0KKwkvLyBG
SVhNRTogYnVzLW1hc3RlciBvcGVyYXRpb24gdmlhIHRoZSBidXMtbWFzdGVy
IGNvbnRyb2wgcmVnLg0KKwkvLyBGSVhNRTogT3RoZXJ3aXNlLCBjaGlwc2V0
IGRlYWRsb2NrIHdpbGwgb2NjdXIsIGFuZCBzb21lIHN5c3RlbXMgd2lsbA0K
KwkvLyBGSVhNRTogbG9jayB1cCBjb21wbGV0ZWx5ISENCiAjaWZkZWYgQ09O
RklHX0JMS19ERVZfSURFRE1BX1RJTUVPVVQNCiAJCQkvKg0KIAkJCSAqIEhh
dmUgdG8gaXNzdWUgYW4gYWJvcnQgYW5kIHJlcXVldWUgdGhlIHJlcXVlc3QN
CmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lk
ZS9pZGUtcG1hYy5jIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1w
bWFjLmMNCi0tLSBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lk
ZS9pZGUtcG1hYy5jCVN1biBKYW4gMjAgMDA6MjU6NDQgMjAwMg0KKysrIGxp
bnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lkZS1wbWFjLmMJU3VuIEphbiAy
MCAwMDo0MDoxMSAyMDAyDQpAQCAtMjE1LDMyICsyMTUsNiBAQA0KICNkZWZp
bmUgU1lTQ0xLX1RJQ0tTKHQpCQkoKCh0KSArIElERV9TWVNDTEtfTlMgLSAx
KSAvIElERV9TWVNDTEtfTlMpDQogI2RlZmluZSBTWVNDTEtfVElDS1NfVURN
QSh0KQkoKCh0KSArIElERV9TWVNDTEtfVUxUUkFfUFMgLSAxKSAvIElERV9T
WVNDTEtfVUxUUkFfUFMpDQogDQotc3RhdGljIF9faW5saW5lX18gaW50DQot
d2FpdF9mb3JfcmVhZHkoaWRlX2RyaXZlX3QgKmRyaXZlKQ0KLXsNCi0JLyog
VGltZW91dCBidW1wZWQgZm9yIHNvbWUgcG93ZXJib29rcyAqLw0KLQlpbnQg
dGltZW91dCA9IDIwMDA7DQotCWJ5dGUgc3RhdDsNCi0NCi0Jd2hpbGUoLS10
aW1lb3V0KSB7DQotCQlzdGF0ID0gR0VUX1NUQVQoKTsNCi0JCWlmKCEoc3Rh
dCAmIEJVU1lfU1RBVCkpIHsNCi0JCQlpZiAoZHJpdmUtPnJlYWR5X3N0YXQg
PT0gMCkNCi0JCQkJYnJlYWs7DQotCQkJZWxzZSBpZigoc3RhdCAmIGRyaXZl
LT5yZWFkeV9zdGF0KSB8fCAoc3RhdCAmIEVSUl9TVEFUKSkNCi0JCQkJYnJl
YWs7DQotCQl9DQotCQltZGVsYXkoMSk7DQotCX0NCi0JaWYoKHN0YXQgJiBF
UlJfU1RBVCkgfHwgdGltZW91dCA8PSAwKSB7DQotCQlpZiAoc3RhdCAmIEVS
Ul9TVEFUKSB7DQotCQkJcHJpbnRrKEtFUk5fRVJSICJpZGVfcG1hYzogd2Fp
dF9mb3JfcmVhZHksIGVycm9yIHN0YXR1czogJXhcbiIsIHN0YXQpOw0KLQkJ
fQ0KLQkJcmV0dXJuIDE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KIC8q
IE5vdGU6IFdlIGRvbid0IHVzZSB0aGUgZ2VuZXJpYyByb3V0aW5lIGhlcmUg
YmVjYXVzZSBzb21lIG9mIEFwcGxlJ3MNCiAgKiBjb250cm9sbGVyIHNlZW0g
dG8gYmUgdmVyeSBzZW5zaXRpdmUgYWJvdXQgaG93IHRoaW5ncyBhcmUgZG9u
ZS4NCiAgKiBXZSBzaG91bGQgcHJvYmFibHkgc2V0IHRoZSBOSUVOIGJpdCwg
YnV0IHRoYXQncyBhbiBleGFtcGxlIG9mIHRoaW5nDQpAQCAtMjYxLDcgKzIz
NSw4IEBADQogCVNFTEVDVF9EUklWRShIV0lGKGRyaXZlKSwgZHJpdmUpOw0K
IAlTRUxFQ1RfTUFTSyhIV0lGKGRyaXZlKSwgZHJpdmUsIDApOw0KIAl1ZGVs
YXkoMSk7DQotCWlmKHdhaXRfZm9yX3JlYWR5KGRyaXZlKSkgew0KKwkvKiBU
aW1lb3V0IGJ1bXBlZCBmb3Igc29tZSBwb3dlcmJvb2tzICovDQorCWlmKHdh
aXRfZm9yX3JlYWR5KGRyaXZlLCAyMDAwKSkgew0KIAkJcHJpbnRrKEtFUk5f
RVJSICJwbWFjX2lkZV9kb19zZXRmZWF0dXJlIGRpc2sgbm90IHJlYWR5IGJl
Zm9yZSBTRVRfRkVBVFVSRSFcbiIpOw0KIAkJZ290byBvdXQ7DQogCX0NCkBA
IC0yNjksNyArMjQ0LDggQEANCiAJT1VUX0JZVEUoY29tbWFuZCwgSURFX05T
RUNUT1JfUkVHKTsNCiAJT1VUX0JZVEUoV0lOX1NFVEZFQVRVUkVTLCBJREVf
Q09NTUFORF9SRUcpOw0KIAl1ZGVsYXkoMSk7DQotCXJlc3VsdCA9IHdhaXRf
Zm9yX3JlYWR5KGRyaXZlKTsNCisJLyogVGltZW91dCBidW1wZWQgZm9yIHNv
bWUgcG93ZXJib29rcyAqLw0KKwlyZXN1bHQgPSB3YWl0X2Zvcl9yZWFkeShk
cml2ZSwgMjAwMCk7DQogCWlmIChyZXN1bHQpDQogCQlwcmludGsoS0VSTl9F
UlIgInBtYWNfaWRlX2RvX3NldGZlYXR1cmUgZGlzayBub3QgcmVhZHkgYWZ0
ZXIgU0VUX0ZFQVRVUkUgIVxuIik7DQogb3V0Og0KQEAgLTk4OCw4ICs5NjQs
MjcgQEANCiAJCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spDQogCQkJ
cmV0dXJuIDA7DQogCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1h
X2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCi0JCU9VVF9CWVRFKGZ1bmM9PWlk
ZV9kbWFfd3JpdGU/IFdJTl9XUklURURNQTogV0lOX1JFQURETUEsDQotCQkJ
IElERV9DT01NQU5EX1JFRyk7DQorCQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUg
Ki8NCisJCS8qDQorCQkgKiBGSVggTUUgdG8gdXNlIG9ubHkgQUNCIGlkZV90
YXNrX3QgYXJncyBTdHJ1Y3QNCisJCSAqLw0KKyNpZiAwDQorCXsNCisJCWlk
ZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNwZWNpYWw7
DQorCQlPVVRfQllURShhcmdzLT50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09G
RlNFVF0sIElERV9DT01NQU5EX1JFRyk7DQorCX0NCisjZWxzZQ0KKwkJaWYg
KChIV0dST1VQKGRyaXZlKS0+cnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tG
SUxFKSAmJg0KKwkJICAgIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSkgew0K
KwkJCWlkZV90YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNw
ZWNpYWw7DQorCQkJT1VUX0JZVEUoYXJncy0+dGZSZWdpc3RlcltJREVfQ09N
TUFORF9PRkZTRVRdLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfSBlbHNlIGlm
IChkcml2ZS0+YWRkcmVzc2luZykgew0KKwkJCU9VVF9CWVRFKChmdW5jPT1p
ZGVfZG1hX3dyaXRlKSA/IFdJTl9XUklURURNQV9FWFQgOiBXSU5fUkVBRERN
QV9FWFQsIElERV9DT01NQU5EX1JFRyk7DQorCQl9IGVsc2Ugew0KKwkJCU9V
VF9CWVRFKChmdW5jPT1pZGVfZG1hX3dyaXRlKSA/IFdJTl9XUklURURNQSA6
IFdJTl9SRUFERE1BLCBJREVfQ09NTUFORF9SRUcpOw0KKwkJfQ0KKyNlbmRp
Zg0KKy8vCQlyZXR1cm4gSFdJRihkcml2ZSktPmRtYXByb2MoaWRlX2RtYV9i
ZWdpbiwgZHJpdmUpOw0KIAljYXNlIGlkZV9kbWFfYmVnaW46DQogCQlvdXRf
bGUzMigmZG1hLT5jb250cm9sLCAoUlVOIDw8IDE2KSB8IFJVTik7DQogCQli
cmVhazsNCmRpZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2
ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJz
L2lkZS9pZGUtdGFza2ZpbGUuYw0KLS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0
aW5lL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVN1biBKYW4gMjAgMDA6
MjU6NDQgMjAwMg0KKysrIGxpbnV4LTIuNS4zLXAyL2RyaXZlcnMvaWRlL2lk
ZS10YXNrZmlsZS5jCVN1biBKYW4gMjAgMDA6NDA6MTEgMjAwMg0KQEAgLTEs
OCArMSwxMSBAQA0KIC8qDQotICogbGludXgvZHJpdmVycy9pZGUvaWRlLXRh
c2tmaWxlLmMJVmVyc2lvbiAwLjIwCU9jdCAxMSwgMjAwMA0KKyAqIGxpbnV4
L2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVZlcnNpb24gMC4yNQlKYW4g
MTcsIDIwMDENCiAgKg0KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAJCU1pY2hh
ZWwgQ29ybndlbGwgPGNvcm53ZWxsQGFjbS5vcmc+DQotICogIENvcHlyaWdo
dCAoQykgMjAwMAkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9y
Zz4NCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIJTWljaGFlbCBDb3Ju
d2VsbCA8Y29ybndlbGxAYWNtLm9yZz4NCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAwLTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4N
CisgKg0KKyAqICBCSU8gR2x1ZSBMYXllciBpbnRvIDIuNS4zLXByZTEscHJl
Mg0KKyAqCQkJCUplbnMgQXhib2UgPGF4Ym9lQGJyaWNrLmtlcm5lbC5kaz4N
CiAgKg0KICAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAg
Kg0KQEAgLTQyLDYgKzQ1LDMzIEBADQogI2RlZmluZSBEVEYoeC4uLikNCiAj
ZW5kaWYNCiANCisvKg0KKyAqDQorICovDQorI2RlZmluZSB0YXNrX3JxX29m
ZnNldChycSkgXA0KKwkoKChycSktPm5yX3NlY3RvcnMgLSAocnEpLT5jdXJy
ZW50X25yX3NlY3RvcnMpICogU0VDVE9SX1NJWkUpDQorDQorLyoNCisgKiBm
b3Igbm93LCB0YXNrZmlsZSByZXF1ZXN0cyBhcmUgc3BlY2lhbCA6Lw0KKyAq
DQorICogSG93ZXZlciwgdXBvbiB0aGUgY3JlYXRpb24gb2YgdGhlIGF0YXBp
IHZlcnNpb24gb2YgcGFja2V0X2NvbW1hbmQNCisgKiBkYXRhLXBoYXNlIElT
UiBwbHVzIGl0IG93biBkaWFnbm9zdGljcyBhbmQgZXh0ZW5zaW9ucyBmb3Ig
ZGlyZWN0IGFjY2Vzcw0KKyAqIChpb2N0bCxyZWFkLHdyaXRlLHJpcCxzdHJl
YW0gLS0gYXRhcGkpLCB0aGUga21hcC9rdW5tYXAgZm9yIFBJTyB3aWxsDQor
ICogY29tZSBsb2NhbGl6ZWQuDQorICovDQoraW5saW5lIGNoYXIgKnRhc2tf
bWFwX3JxIChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxvbmcgKmZs
YWdzKQ0KK3sNCisJaWYgKHJxLT5iaW8pDQorCQlyZXR1cm4gaWRlX21hcF9i
dWZmZXIocnEsIGZsYWdzKTsNCisJcmV0dXJuIHJxLT5idWZmZXIgKyB0YXNr
X3JxX29mZnNldChycSk7DQorfQ0KKw0KK2lubGluZSB2b2lkIHRhc2tfdW5t
YXBfcnEgKHN0cnVjdCByZXF1ZXN0ICpycSwgY2hhciAqYnVmLCB1bnNpZ25l
ZCBsb25nICpmbGFncykNCit7DQorCWlmIChycS0+YmlvKQ0KKwkJaWRlX3Vu
bWFwX2J1ZmZlcihidWYsIGZsYWdzKTsNCit9DQorDQogaW5saW5lIHUzMiB0
YXNrX3JlYWRfMjQgKGlkZV9kcml2ZV90ICpkcml2ZSkNCiB7DQogCXJldHVy
bgkoSU5fQllURShJREVfSENZTF9SRUcpPDwxNikgfA0KQEAgLTI1NSw2ICsy
ODUsMzIgQEANCiAJcmV0dXJuIDE7CQkvKiBkcml2ZSByZWFkeTogKm1pZ2h0
KiBiZSBpbnRlcnJ1cHRpbmcgKi8NCiB9DQogDQorLyoNCisgKiBHbG9iYWwg
Zm9yIEFsbCwgYW5kIHRha2VuIGZyb20gaWRlLXBtYWMuYw0KKyAqLw0KK2lu
dCB3YWl0X2Zvcl9yZWFkeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdGlt
ZW91dCkNCit7DQorCWJ5dGUgc3RhdCA9IDA7DQorDQorCXdoaWxlKC0tdGlt
ZW91dCkgew0KKwkJc3RhdCA9IEdFVF9TVEFUKCk7DQorCQlpZighKHN0YXQg
JiBCVVNZX1NUQVQpKSB7DQorCQkJaWYgKGRyaXZlLT5yZWFkeV9zdGF0ID09
IDApDQorCQkJCWJyZWFrOw0KKwkJCWVsc2UgaWYoKHN0YXQgJiBkcml2ZS0+
cmVhZHlfc3RhdCkgfHwgKHN0YXQgJiBFUlJfU1RBVCkpDQorCQkJCWJyZWFr
Ow0KKwkJfQ0KKwkJbWRlbGF5KDEpOw0KKwl9DQorCWlmKChzdGF0ICYgRVJS
X1NUQVQpIHx8IHRpbWVvdXQgPD0gMCkgew0KKwkJaWYgKHN0YXQgJiBFUlJf
U1RBVCkgew0KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdhaXRfZm9yX3Jl
YWR5LCBlcnJvciBzdGF0dXM6ICV4XG4iLCBkcml2ZS0+bmFtZSwgc3RhdCk7
DQorCQl9DQorCQlyZXR1cm4gMTsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQor
DQogaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlIChpZGVfZHJpdmVf
dCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spDQogew0KIAl0YXNrX3N0cnVj
dF90ICp0YXNrZmlsZSA9ICh0YXNrX3N0cnVjdF90ICopIHRhc2stPnRmUmVn
aXN0ZXI7DQpAQCAtNzM2LDIxICs3OTIsMjUgQEANCiAJCX0NCiAJfQ0KIAlE
VEYoInN0YXQ6ICUwMnhcbiIsIHN0YXQpOw0KLQlwQnVmID0gaWRlX21hcF9y
cShycSwgJmZsYWdzKTsNCisJcEJ1ZiA9IHRhc2tfbWFwX3JxKHJxLCAmZmxh
Z3MpOw0KIAlEVEYoIlJlYWQ6ICVwLCBycS0+Y3VycmVudF9ucl9zZWN0b3Jz
OiAlZFxuIiwgcEJ1ZiwgKGludCkgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7
DQogDQogCWRyaXZlLT5pb18zMmJpdCA9IDA7DQogCXRhc2tmaWxlX2lucHV0
X2RhdGEoZHJpdmUsIHBCdWYsIFNFQ1RPUl9XT1JEUyk7DQotCWlkZV91bm1h
cF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJdGFza191bm1hcF9ycShycSwg
cEJ1ZiwgJmZsYWdzKTsNCiAJZHJpdmUtPmlvXzMyYml0ID0gaW9fMzJiaXQ7
DQogDQogCWlmICgtLXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPD0gMCkgew0K
IAkJLyogKGhzKTogc3dhcHBlZCBuZXh0IDIgbGluZXMgKi8NCiAJCURURigi
UmVxdWVzdCBFbmRlZCBzdGF0OiAlMDJ4XG4iLCBHRVRfU1RBVCgpKTsNCisj
aWYgMAkvKiBvcmlnaW5hbCBkYXRhLXBoYXNlICovDQorCQlpZGVfZW5kX3Jl
cXVlc3QoMSwgSFdHUk9VUChkcml2ZSkpOw0KKyNlbHNlDQogCQlpZiAoaWRl
X2VuZF9yZXF1ZXN0KDEsIEhXR1JPVVAoZHJpdmUpKSkgew0KIAkJCWlkZV9z
ZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfaW5faW50ciwgIFdBSVRfQ01ELCBO
VUxMKTsNCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCQl9DQorI2VuZGlm
DQogCX0gZWxzZSB7DQogCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNr
X2luX2ludHIsICBXQUlUX0NNRCwgTlVMTCk7DQogCQlyZXR1cm4gaWRlX3N0
YXJ0ZWQ7DQpAQCAtODIxLDcgKzg4MSw3IEBADQogCQkJcmV0dXJuIGlkZV9l
cnJvcihkcml2ZSwgInRhc2tfbXVsaW5faW50ciIsIHN0YXQpOw0KIAkJfQ0K
IAkJLyogbm8gZGF0YSB5ZXQsIHNvIHdhaXQgZm9yIGFub3RoZXIgaW50ZXJy
dXB0ICovDQotCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIHRhc2tfbXVsaW5f
aW50ciwgV0FJVF9DTUQsIE5VTEwpOw0KKwkJaWRlX3NldF9oYW5kbGVyKGRy
aXZlLCAmdGFza19tdWxpbl9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQogCQly
ZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCX0NCiANCkBAIC04NDAsMTEgKzkwMCwx
MSBAQA0KIAkJICovDQogCQluc2VjdCA9IDE7DQogCQl3aGlsZSAocnEtPmN1
cnJlbnRfbnJfc2VjdG9ycykgew0KLQkJCXBCdWYgPSBpZGVfbWFwX3JxKHJx
LCAmZmxhZ3MpOw0KKwkJCXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdz
KTsNCiAJCQlEVEYoIk11bHRpcmVhZDogJXAsIG5zZWN0OiAlZCwgcnEtPmN1
cnJlbnRfbnJfc2VjdG9yczogJWxkXG4iLCBwQnVmLCBuc2VjdCwgcnEtPmN1
cnJlbnRfbnJfc2VjdG9ycyk7DQogCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsN
CiAJCQl0YXNrZmlsZV9pbnB1dF9kYXRhKGRyaXZlLCBwQnVmLCBuc2VjdCAq
IFNFQ1RPUl9XT1JEUyk7DQotCQkJaWRlX3VubWFwX3JxKHJxLCBwQnVmLCAm
ZmxhZ3MpOw0KKwkJCXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7
DQogCQkJZHJpdmUtPmlvXzMyYml0ID0gaW9fMzJiaXQ7DQogCQkJcnEtPmVy
cm9ycyA9IDA7DQogCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2Vj
dDsNCkBAIC04NTUsMTggKzkxNSwzNiBAQA0KIAl9DQogI2VuZGlmIC8qIEFM
VFNUQVRfU0NSRVdfVVAgKi8NCiANCisjaWYgMAkvKiBvcmlnaW5hbCBkYXRh
LXBoYXNlICovDQorCW5zZWN0ID0gKHJxLT5jdXJyZW50X25yX3NlY3RvcnMg
PiBtc2VjdCkgPyBtc2VjdCA6IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7DQor
CXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdzKTsNCisJRFRGKCJNdWx0
aXJlYWQ6ICVwLCBuc2VjdDogJWQgLCBycS0+Y3VycmVudF9ucl9zZWN0b3Jz
OiAlbGRcbiIsDQorCQlwQnVmLCBuc2VjdCwgcnEtPmN1cnJlbnRfbnJfc2Vj
dG9ycyk7DQorCWRyaXZlLT5pb18zMmJpdCA9IDA7DQorCXRhc2tmaWxlX2lu
cHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dPUkRTKTsN
CisJdGFza191bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJZHJpdmUt
PmlvXzMyYml0ID0gaW9fMzJiaXQ7DQorCXJxLT5lcnJvcnMgPSAwOw0KKwly
cS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IG5zZWN0Ow0KKwlpZiAocnEtPmN1
cnJlbnRfbnJfc2VjdG9ycyAhPSAwKSB7DQorCQlpZGVfc2V0X2hhbmRsZXIo
ZHJpdmUsICZ0YXNrX211bGluX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsNCisJ
CXJldHVybiBpZGVfc3RhcnRlZDsNCisJfQ0KKwlpZGVfZW5kX3JlcXVlc3Qo
MSwgSFdHUk9VUChkcml2ZSkpOw0KKwlyZXR1cm4gaWRlX3N0b3BwZWQ7DQor
I2Vsc2UNCiAJZG8gew0KIAkJbnNlY3QgPSBycS0+Y3VycmVudF9ucl9zZWN0
b3JzOw0KIAkJaWYgKG5zZWN0ID4gbXNlY3QpDQogCQkJbnNlY3QgPSBtc2Vj
dDsNCiANCi0JCXBCdWYgPSBpZGVfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KKwkJ
cEJ1ZiA9IHRhc2tfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KIA0KIAkJRFRGKCJN
dWx0aXJlYWQ6ICVwLCBuc2VjdDogJWQgLCBycS0+Y3VycmVudF9ucl9zZWN0
b3JzOiAlbGRcbiIsDQogCQkJcEJ1ZiwgbnNlY3QsIHJxLT5jdXJyZW50X25y
X3NlY3RvcnMpOw0KIAkJZHJpdmUtPmlvXzMyYml0ID0gMDsNCiAJCXRhc2tm
aWxlX2lucHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dP
UkRTKTsNCi0JCWlkZV91bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCisJ
CXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7DQogCQlkcml2ZS0+
aW9fMzJiaXQgPSBpb18zMmJpdDsNCiAJCXJxLT5lcnJvcnMgPSAwOw0KIAkJ
cnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsNCkBAIC04NzcsMTIg
Kzk1NSwxMiBAQA0KIAkJfQ0KIAl9IHdoaWxlIChtc2VjdCk7DQogDQotDQog
CS8qDQogCSAqIG1vcmUgZGF0YSBsZWZ0DQogCSAqLw0KLQlpZGVfc2V0X2hh
bmRsZXIoZHJpdmUsIHRhc2tfbXVsaW5faW50ciwgV0FJVF9DTUQsIE5VTEwp
Ow0KKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX211bGluX2ludHIs
IFdBSVRfQ01ELCBOVUxMKTsNCiAJcmV0dXJuIGlkZV9zdGFydGVkOw0KKyNl
bmRpZg0KIH0NCiANCiBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2lu
dHIgKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQ0K
QEAgLTg5OSwxMSArOTc3LDExIEBADQogCWlmICgoYXJncy0+dGZSZWdpc3Rl
cltJREVfQ09NTUFORF9PRkZTRVRdICE9IFdJTl9NVUxUV1JJVEUpICYmDQog
CSAgICAoYXJncy0+dGZSZWdpc3RlcltJREVfQ09NTUFORF9PRkZTRVRdICE9
IFdJTl9NVUxUV1JJVEVfRVhUKSkgew0KIAkJdW5zaWduZWQgbG9uZyBmbGFn
czsNCi0JCWNoYXIgKmJ1ZiA9IGlkZV9tYXBfcnEocnEsICZmbGFncyk7DQor
CQljaGFyICpwQnVmID0gdGFza19tYXBfcnEocnEsICZmbGFncyk7DQogCQkv
KiBGb3IgV3JpdGVfc2VjdG9ycyB3ZSBuZWVkIHRvIHN0dWZmIHRoZSBmaXJz
dCBzZWN0b3IgKi8NCi0JCXRhc2tmaWxlX291dHB1dF9kYXRhKGRyaXZlLCBi
dWYsIFNFQ1RPUl9XT1JEUyk7DQorCQl0YXNrZmlsZV9vdXRwdXRfZGF0YShk
cml2ZSwgcEJ1ZiwgU0VDVE9SX1dPUkRTKTsNCiAJCXJxLT5jdXJyZW50X25y
X3NlY3RvcnMtLTsNCi0JCWlkZV91bm1hcF9ycShycSwgYnVmLCAmZmxhZ3Mp
Ow0KKwkJdGFza191bm1hcF9ycShycSwgcEJ1ZiwgJmZsYWdzKTsNCiAJfSBl
bHNlIHsNCiAJCS8qDQogCQkgKiAoa3MvaHMpOiBTdHVmZiB0aGUgZmlyc3Qg
c2VjdG9yKHMpDQpAQCAtOTQ4LDIxICsxMDI2LDI1IEBADQogDQogCWlmICgo
cnEtPmN1cnJlbnRfbnJfc2VjdG9ycz09MSkgXiAoc3RhdCAmIERSUV9TVEFU
KSkgew0KIAkJcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7DQotCQlwQnVmID0g
aWRlX21hcF9ycShycSwgJmZsYWdzKTsNCisJCXBCdWYgPSB0YXNrX21hcF9y
cShycSwgJmZsYWdzKTsNCiAJCURURigid3JpdGU6ICVwLCBycS0+Y3VycmVu
dF9ucl9zZWN0b3JzOiAlZFxuIiwgcEJ1ZiwgKGludCkgcnEtPmN1cnJlbnRf
bnJfc2VjdG9ycyk7DQogCQlkcml2ZS0+aW9fMzJiaXQgPSAwOw0KIAkJdGFz
a2ZpbGVfb3V0cHV0X2RhdGEoZHJpdmUsIHBCdWYsIFNFQ1RPUl9XT1JEUyk7
DQotCQlpZGVfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFncyk7DQorCQl0YXNr
X3VubWFwX3JxKHJxLCBwQnVmLCAmZmxhZ3MpOw0KIAkJZHJpdmUtPmlvXzMy
Yml0ID0gaW9fMzJiaXQ7DQogCQlycS0+ZXJyb3JzID0gMDsNCiAJCXJxLT5j
dXJyZW50X25yX3NlY3RvcnMtLTsNCiAJfQ0KIA0KIAlpZiAocnEtPmN1cnJl
bnRfbnJfc2VjdG9ycyA8PSAwKSB7DQorI2lmIDAJLyogb3JpZ2luYWwgZGF0
YS1waGFzZSAqLw0KKwkJaWRlX2VuZF9yZXF1ZXN0KDEsIEhXR1JPVVAoZHJp
dmUpKTsNCisjZWxzZQ0KIAkJaWYgKGlkZV9lbmRfcmVxdWVzdCgxLCBIV0dS
T1VQKGRyaXZlKSkpIHsNCiAJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0
YXNrX291dF9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQogCQkJcmV0dXJuIGlk
ZV9zdGFydGVkOw0KIAkJfQ0KKyNlbmRpZg0KIAl9IGVsc2Ugew0KIAkJaWRl
X3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19vdXRfaW50ciwgV0FJVF9DTUQs
IE5VTEwpOw0KIAkJcmV0dXJuIGlkZV9zdGFydGVkOw0KQEAgLTk5OCw3ICsx
MDgwLDYgQEANCiAJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPT0gMCkg
ew0KIAkJaWYgKHN0YXQgJiAoRVJSX1NUQVR8RFJRX1NUQVQpKQ0KIAkJCXJl
dHVybiBpZGVfZXJyb3IoZHJpdmUsICJ0YXNrX211bG91dF9pbnRyIiwgc3Rh
dCk7DQotDQogCQkvKg0KIAkJICogdGhlcmUgbWF5IGJlIG1vcmUsIGlkZV9k
b19yZXF1ZXN0IHdpbGwgcmVzdGFydCBpdCBpZg0KIAkJICogbmVjZXNzYXJ5
DQpAQCAtMTAyOCwxMSArMTEwOSwxMSBAQA0KIAlpZiAoIW1zZWN0KSB7DQog
CQluc2VjdCA9IDE7DQogCQl3aGlsZSAocnEtPmN1cnJlbnRfbnJfc2VjdG9y
cykgew0KLQkJCXBCdWYgPSBpZGVfbWFwX3JxKHJxLCAmZmxhZ3MpOw0KKwkJ
CXBCdWYgPSB0YXNrX21hcF9ycShycSwgJmZsYWdzKTsNCiAJCQlEVEYoIk11
bHRpd3JpdGU6ICVwLCBuc2VjdDogJWQsIHJxLT5jdXJyZW50X25yX3NlY3Rv
cnM6ICVsZFxuIiwgcEJ1ZiwgbnNlY3QsIHJxLT5jdXJyZW50X25yX3NlY3Rv
cnMpOw0KIAkJCWRyaXZlLT5pb18zMmJpdCA9IDA7DQogCQkJdGFza2ZpbGVf
b3V0cHV0X2RhdGEoZHJpdmUsIHBCdWYsIG5zZWN0ICogU0VDVE9SX1dPUkRT
KTsNCi0JCQlpZGVfdW5tYXBfcnEocEJ1ZiwgJmZsYWdzKTsNCisJCQl0YXNr
X3VubWFwX3JxKHBCdWYsICZmbGFncyk7DQogCQkJZHJpdmUtPmlvXzMyYml0
ID0gaW9fMzJiaXQ7DQogCQkJcnEtPmVycm9ycyA9IDA7DQogCQkJcnEtPmN1
cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsNCkBAIC0xMDQzLDE2ICsxMTI0
LDE5IEBADQogCX0NCiAjZW5kaWYgLyogQUxUU1RBVF9TQ1JFV19VUCAqLw0K
IA0KKyNpZiAwCS8qIG9yaWdpbmFsIGRhdGEtcGhhc2UgKi8NCisJbnNlY3Qg
PSAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IG1zZWN0KSA/IG1zZWN0IDog
cnEtPmN1cnJlbnRfbnJfc2VjdG9yczsNCisjZWxzZQ0KIAluc2VjdCA9IHJx
LT5jdXJyZW50X25yX3NlY3RvcnM7DQogCWlmIChuc2VjdCA+IG1zZWN0KQ0K
IAkJbnNlY3QgPSBtc2VjdDsNCi0NCi0JcEJ1ZiA9IGlkZV9tYXBfcnEocnEs
ICZmbGFncyk7DQorI2VuZGlmDQorCXBCdWYgPSB0YXNrX21hcF9ycShycSwg
JmZsYWdzKTsNCiAJRFRGKCJNdWx0aXdyaXRlOiAlcCwgbnNlY3Q6ICVkICwg
cnEtPmN1cnJlbnRfbnJfc2VjdG9yczogJWxkXG4iLA0KIAkJcEJ1ZiwgbnNl
Y3QsIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOw0KIAlkcml2ZS0+aW9fMzJi
aXQgPSAwOw0KIAl0YXNrZmlsZV9vdXRwdXRfZGF0YShkcml2ZSwgcEJ1Ziwg
bnNlY3QgKiBTRUNUT1JfV09SRFMpOw0KLQlpZGVfdW5tYXBfcnEocnEsIHBC
dWYsICZmbGFncyk7DQorCXRhc2tfdW5tYXBfcnEocnEsIHBCdWYsICZmbGFn
cyk7DQogCWRyaXZlLT5pb18zMmJpdCA9IGlvXzMyYml0Ow0KIAlycS0+ZXJy
b3JzID0gMDsNCiAJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAtPSBuc2VjdDsN
CkBAIC0xMzY0LDYgKzE0NDgsNyBAQA0KIAlhcmdzLmNvbW1hbmRfdHlwZSA9
IGlkZV9jbWRfdHlwZV9wYXJzZXIgKCZhcmdzKTsNCiAJaWYgKGFyZ3MuY29t
bWFuZF90eXBlICE9IElERV9EUklWRV9UQVNLX05PX0RBVEEpDQogCQlycS5j
dXJyZW50X25yX3NlY3RvcnMgPSBycS5ucl9zZWN0b3JzID0gKGhvYmZpbGUt
PnNlY3Rvcl9jb3VudCA8PCA4KSB8IHRhc2tmaWxlLT5zZWN0b3JfY291bnQ7
DQorCS8qCXJxLmhhcmRfY3VyX3NlY3RvcnMJKi8NCiANCiAJcnEuYnVmZmVy
ID0gYnVmOw0KIAlycS5zcGVjaWFsID0gJmFyZ3M7DQpAQCAtMTM3OCw2ICsx
NDYzLDcgQEANCiANCiAJaWYgKGFyZ3MtPmNvbW1hbmRfdHlwZSAhPSBJREVf
RFJJVkVfVEFTS19OT19EQVRBKQ0KIAkJcnEuY3VycmVudF9ucl9zZWN0b3Jz
ID0gcnEubnJfc2VjdG9ycyA9IChhcmdzLT5ob2JSZWdpc3RlcltJREVfTlNF
Q1RPUl9PRkZTRVRfSE9CXSA8PCA4KSB8IGFyZ3MtPnRmUmVnaXN0ZXJbSURF
X05TRUNUT1JfT0ZGU0VUXTsNCisJLyoJcnEuaGFyZF9jdXJfc2VjdG9ycwkq
Lw0KIA0KIAlycS5zcGVjaWFsID0gYXJnczsNCiAJcmV0dXJuIGlkZV9kb19k
cml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOw0KQEAgLTE2ODksNiAr
MTc3NSw3IEBADQogfQ0KIA0KIEVYUE9SVF9TWU1CT0woZHJpdmVfaXNfcmVh
ZHkpOw0KK0VYUE9SVF9TWU1CT0wod2FpdF9mb3JfcmVhZHkpOw0KIEVYUE9S
VF9TWU1CT0wodGFza19yZWFkXzI0KTsNCiBFWFBPUlRfU1lNQk9MKGF0YV9p
bnB1dF9kYXRhKTsNCiBFWFBPUlRfU1lNQk9MKGF0YV9vdXRwdXRfZGF0YSk7
DQpkaWZmIC11ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9p
ZGUvcGRjMjAyeHguYyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9wZGMy
MDJ4eC5jDQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9p
ZGUvcGRjMjAyeHguYwlTdW4gSmFuIDIwIDAwOjI1OjQ0IDIwMDINCisrKyBs
aW51eC0yLjUuMy1wMi9kcml2ZXJzL2lkZS9wZGMyMDJ4eC5jCVN1biBKYW4g
MjAgMDA6NDA6MTEgMjAwMg0KQEAgLTkwMCw3ICs5MDAsNyBAQA0KIAkJcmV0
dXJuIGlkZV9kbWFfb2ZmX3F1aWV0bHk7DQogCX0NCiANCi0Jb3V0YihpbmIo
ZG1hX2Jhc2UrMikgJiB+KDE8PCg1K3VuaXQpKSwgZG1hX2Jhc2UrMik7DQor
CU9VVF9CWVRFKElOX0JZVEUoZG1hX2Jhc2UrMikgJiB+KDE8PCg1K3VuaXQp
KSwgZG1hX2Jhc2UrMik7DQogCSh2b2lkKSBod2lmLT5zcGVlZHByb2MoZHJp
dmUsIHNwZWVkKTsNCiANCiAJcmV0dXJuICgoaW50KQkoKGlkLT5kbWFfdWx0
cmEgPj4gMTQpICYgMykgPyBpZGVfZG1hX29uIDoNCkBAIC0xMDg2LDcgKzEw
ODYsNyBAQA0KICNpZiAwDQogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRy
aXZlKTsNCiAJdW5zaWduZWQgbG9uZyBoaWdoXzE2CT0gcGNpX3Jlc291cmNl
X3N0YXJ0KGh3aWYtPnBjaV9kZXYsIDQpOw0KLQlieXRlIHNjMWYJCT0gaW5i
KGhpZ2hfMTYgKyAweDAwMWYpOw0KKwlieXRlIHNjMWYJCT0gSU5fQllURSho
aWdoXzE2ICsgMHgwMDFmKTsNCiANCiAJaWYgKCFod2lmKQ0KIAkJcmV0dXJu
IC1FSU5WQUw7DQpAQCAtMTA5NCw5ICsxMDk0LDkgQEANCiAvLwlod2lmLT5i
dXNfc3RhdGUgPSBzdGF0ZTsNCiANCiAJaWYgKHN0YXRlKSB7DQotCQlvdXRi
KHNjMWYgfCAweDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCisJCU9VVF9CWVRF
KHNjMWYgfCAweDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCiAJfSBlbHNlIHsN
Ci0JCW91dGIoc2MxZiAmIH4weDA4LCBoaWdoXzE2ICsgMHgwMDFmKTsNCisJ
CU9VVF9CWVRFKHNjMWYgJiB+MHgwOCwgaGlnaF8xNiArIDB4MDAxZik7DQog
CX0NCiAjZW5kaWYNCiAJcmV0dXJuIDA7DQpkaWZmIC11ck4gbGludXgtMi41
LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvcGRjNDAzMC5jIGxpbnV4LTIu
NS4zLXAyL2RyaXZlcnMvaWRlL3BkYzQwMzAuYw0KLS0tIGxpbnV4LTIuNS4z
LXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3BkYzQwMzAuYwlTdW4gSmFuIDIw
IDAwOjI1OjQ0IDIwMDINCisrKyBsaW51eC0yLjUuMy1wMi9kcml2ZXJzL2lk
ZS9wZGM0MDMwLmMJU3VuIEphbiAyMCAwMDo0MDoxMSAyMDAyDQpAQCAtNTU0
LDYgKzU1NCwxMyBAQA0KIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQogCWJ5
dGUgc3RhdDsNCiANCisvKiBDaGVjayB0aGF0IGl0J3MgYSByZWd1bGFyIGNv
bW1hbmQuIElmIG5vdCwgYm9tYiBvdXQgZWFybHkuICovDQorCWlmICghKHJx
LT5mbGFncyAmIFJFUV9DTUQpKSB7DQorCQlibGtfZHVtcF9ycV9mbGFncyhy
cSwgInBkYzQwMzAgYmFkIGZsYWdzIik7DQorCQlpZGVfZW5kX3JlcXVlc3Qo
MCwgSFdHUk9VUChkcml2ZSkpOw0KKwkJcmV0dXJuIGlkZV9zdG9wcGVkOw0K
Kwl9DQorDQogCWlmIChJREVfQ09OVFJPTF9SRUcpDQogCQlPVVRfQllURShk
cml2ZS0+Y3RsLCBJREVfQ09OVFJPTF9SRUcpOyAgLyogY2xlYXIgbklFTiAq
Lw0KIAlTRUxFQ1RfTUFTSyhIV0lGKGRyaXZlKSwgZHJpdmUsIDApOw0KQEAg
LTU2OCwxNiArNTc1LDggQEANCiAJT1VUX0JZVEUodGFza2ZpbGUtPmRldmlj
ZV9oZWFkLCBJREVfU0VMRUNUX1JFRyk7DQogCU9VVF9CWVRFKHRhc2tmaWxl
LT5jb21tYW5kLCBJREVfQ09NTUFORF9SRUcpOw0KIA0KLS8qIENoZWNrIHRo
YXQgaXQncyBhIHJlZ3VsYXIgY29tbWFuZC4gSWYgbm90LCBib21iIG91dCBl
YXJseS4gKi8NCi0JaWYgKCEocnEtPmZsYWdzICYgUkVRX0NNRCkpIHsNCi0J
CWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAicGRjNDAzMCBiYWQgZmxhZ3MiKTsN
Ci0JCWlkZV9lbmRfcmVxdWVzdCgwLCBIV0dST1VQKGRyaXZlKSk7DQotCQly
ZXR1cm4gaWRlX3N0b3BwZWQ7DQotCX0NCi0NCiAJc3dpdGNoIChycV9kYXRh
X2RpcihycSkpIHsNCiAJY2FzZSBSRUFEOg0KLQkJT1VUX0JZVEUoUFJPTUlT
RV9SRUFELCBJREVfQ09NTUFORF9SRUcpOw0KIC8qDQogICogVGhlIGNhcmQn
cyBiZWhhdmlvdXIgaXMgb2RkIGF0IHRoaXMgcG9pbnQuIElmIHRoZSBkYXRh
IGlzDQogICogYXZhaWxhYmxlLCBEUlEgd2lsbCBiZSB0cnVlLCBhbmQgbm8g
aW50ZXJydXB0IHdpbGwgYmUNCkBAIC02MTEsOCArNjEwLDYgQEANCiAJCXJl
dHVybiBpZGVfc3RvcHBlZDsNCiANCiAJY2FzZSBXUklURTogew0KLQkJaWRl
X3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsNCi0JCU9VVF9CWVRFKFBST01JU0Vf
V1JJVEUsIElERV9DT01NQU5EX1JFRyk7DQogLyoNCiAgKiBTdHJhdGVneSBv
biB3cml0ZSBpczoNCiAgKglsb29rIGZvciB0aGUgRFJRIHRoYXQgc2hvdWxk
IGhhdmUgYmVlbiBpbW1lZGlhdGVseSBhc3NlcnRlZA0KZGlmZiAtdXJOIGxp
bnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtz
LmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYw0K
LS0tIGxpbnV4LTIuNS4zLXAyLXByaXN0aW5lL2RyaXZlcnMvaWRlL3NlcnZl
cndvcmtzLmMJU3VuIEphbiAyMCAwMDoyNTo0NCAyMDAyDQorKysgbGludXgt
Mi41LjMtcDIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwlTdW4gSmFuIDIw
IDAwOjQwOjExIDIwMDINCkBAIC0zNDksOSArMzQ5LDkgQEANCiAJcGNpX3dy
aXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1NCwgdWx0cmFfZW5hYmxlKTsNCiAJ
DQogCWlmIChzcGVlZCA+IFhGRVJfUElPXzQpDQotCQlvdXRiKGluYihkbWFf
YmFzZSsyKXwoMTw8KDUrdW5pdCkpLCBkbWFfYmFzZSsyKTsNCisJCU9VVF9C
WVRFKElOX0JZVEUoZG1hX2Jhc2UrMil8KDE8PCg1K3VuaXQpKSwgZG1hX2Jh
c2UrMik7DQogCWVsc2UNCi0JCW91dGIoaW5iKGRtYV9iYXNlKzIpICYgfigx
PDwoNSt1bml0KSksIGRtYV9iYXNlKzIpOw0KKwkJT1VUX0JZVEUoSU5fQllU
RShkbWFfYmFzZSsyKSAmIH4oMTw8KDUrdW5pdCkpLCBkbWFfYmFzZSsyKTsN
CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovDQogDQogCWVy
ciA9IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsNCmRp
ZmYgLXVyTiBsaW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS9z
aXM1NTEzLmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvc2lzNTUxMy5j
DQotLS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvc2lz
NTUxMy5jCVR1ZSBOb3YgMjcgMDk6MjM6MjcgMjAwMQ0KKysrIGxpbnV4LTIu
NS4zLXAyL2RyaXZlcnMvaWRlL3NpczU1MTMuYwlTdW4gSmFuIDIwIDAwOjQ2
OjUxIDIwMDINCkBAIC0zNyw4ICszNywxMSBAQA0KICNkZWZpbmUgU0lTNTUx
M19GTEFHX0FUQV8xNgkJMHgwMDAwMDAwMQ0KICNkZWZpbmUgU0lTNTUxM19G
TEFHX0FUQV8zMwkJMHgwMDAwMDAwMg0KICNkZWZpbmUgU0lTNTUxM19GTEFH
X0FUQV82NgkJMHgwMDAwMDAwNA0KKyNkZWZpbmUgU0lTNTUxM19GTEFHX0FU
QV8xMDAJCTB4MDAwMDAwMDgNCiAjZGVmaW5lIFNJUzU1MTNfRkxBR19MQVRF
TkNZCQkweDAwMDAwMDEwDQogDQorc3RhdGljIHVuc2lnbmVkIGludCBjYXBh
YmlsaXRpZXMgPSAweDAwMDAwMDAwOw0KKw0KIHN0YXRpYyBjb25zdCBzdHJ1
Y3Qgew0KIAljb25zdCBjaGFyICpuYW1lOw0KIAl1bnNpZ25lZCBzaG9ydCBo
b3N0X2lkOw0KQEAgLTQ4LDE1ICs1MSwxNSBAQA0KIAl7ICJTaVM1NDAiLAlQ
Q0lfREVWSUNFX0lEX1NJXzU0MCwJU0lTNTUxM19GTEFHX0FUQV82NiwgfSwN
CiAJeyAiU2lTNjIwIiwJUENJX0RFVklDRV9JRF9TSV82MjAsCVNJUzU1MTNf
RkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQogCXsgIlNp
UzYzMCIsCVBDSV9ERVZJQ0VfSURfU0lfNjMwLAlTSVM1NTEzX0ZMQUdfQVRB
XzY2fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KLQl7ICJTaVM2MzUiLAlQ
Q0lfREVWSUNFX0lEX1NJXzYzNSwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1
NTEzX0ZMQUdfTEFURU5DWSwgfSwNCisJeyAiU2lTNjM1IiwJUENJX0RFVklD
RV9JRF9TSV82MzUsCVNJUzU1MTNfRkxBR19BVEFfMTAwfFNJUzU1MTNfRkxB
R19MQVRFTkNZLCB9LA0KIAl7ICJTaVM2NDAiLAlQQ0lfREVWSUNFX0lEX1NJ
XzY0MCwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1NTEzX0ZMQUdfTEFURU5D
WSwgfSwNCi0JeyAiU2lTNjQ1IiwJUENJX0RFVklDRV9JRF9TSV82NDUsCVNJ
UzU1MTNfRkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQot
CXsgIlNpUzY1MCIsCVBDSV9ERVZJQ0VfSURfU0lfNjUwLAlTSVM1NTEzX0ZM
QUdfQVRBXzY2fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KLQl7ICJTaVM3
MzAiLAlQQ0lfREVWSUNFX0lEX1NJXzczMCwJU0lTNTUxM19GTEFHX0FUQV82
NnxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCi0JeyAiU2lTNzM1IiwJUENJ
X0RFVklDRV9JRF9TSV83MzUsCVNJUzU1MTNfRkxBR19BVEFfNjZ8U0lTNTUx
M19GTEFHX0xBVEVOQ1ksIH0sDQotCXsgIlNpUzc0MCIsCVBDSV9ERVZJQ0Vf
SURfU0lfNzQwLAlTSVM1NTEzX0ZMQUdfQVRBXzY2fFNJUzU1MTNfRkxBR19M
QVRFTkNZLCB9LA0KLQl7ICJTaVM3NDUiLAlQQ0lfREVWSUNFX0lEX1NJXzc0
NSwJU0lTNTUxM19GTEFHX0FUQV82NnxTSVM1NTEzX0ZMQUdfTEFURU5DWSwg
fSwNCi0JeyAiU2lTNzUwIiwJUENJX0RFVklDRV9JRF9TSV83NTAsCVNJUzU1
MTNfRkxBR19BVEFfNjZ8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQorCXsg
IlNpUzY0NSIsCVBDSV9ERVZJQ0VfSURfU0lfNjQ1LAlTSVM1NTEzX0ZMQUdf
QVRBXzEwMHxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCisJeyAiU2lTNjUw
IiwJUENJX0RFVklDRV9JRF9TSV82NTAsCVNJUzU1MTNfRkxBR19BVEFfMTAw
fFNJUzU1MTNfRkxBR19MQVRFTkNZLCB9LA0KKwl7ICJTaVM3MzAiLAlQQ0lf
REVWSUNFX0lEX1NJXzczMCwJU0lTNTUxM19GTEFHX0FUQV8xMDB8U0lTNTUx
M19GTEFHX0xBVEVOQ1ksIH0sDQorCXsgIlNpUzczNSIsCVBDSV9ERVZJQ0Vf
SURfU0lfNzM1LAlTSVM1NTEzX0ZMQUdfQVRBXzEwMHxTSVM1NTEzX0ZMQUdf
TEFURU5DWSwgfSwNCisJeyAiU2lTNzQwIiwJUENJX0RFVklDRV9JRF9TSV83
NDAsCVNJUzU1MTNfRkxBR19BVEFfMTAwfFNJUzU1MTNfRkxBR19MQVRFTkNZ
LCB9LA0KKwl7ICJTaVM3NDUiLAlQQ0lfREVWSUNFX0lEX1NJXzc0NSwJU0lT
NTUxM19GTEFHX0FUQV8xMDB8U0lTNTUxM19GTEFHX0xBVEVOQ1ksIH0sDQor
CXsgIlNpUzc1MCIsCVBDSV9ERVZJQ0VfSURfU0lfNzUwLAlTSVM1NTEzX0ZM
QUdfQVRBXzEwMHxTSVM1NTEzX0ZMQUdfTEFURU5DWSwgfSwNCiAJeyAiU2lT
NTU5MSIsCVBDSV9ERVZJQ0VfSURfU0lfNTU5MSwJU0lTNTUxM19GTEFHX0FU
QV8zMywgfSwNCiAJeyAiU2lTNTU5NyIsCVBDSV9ERVZJQ0VfSURfU0lfNTU5
NywJU0lTNTUxM19GTEFHX0FUQV8zMywgfSwNCiAJeyAiU2lTNTYwMCIsCVBD
SV9ERVZJQ0VfSURfU0lfNTYwMCwJU0lTNTUxM19GTEFHX0FUQV8zMywgfSwN
CkBAIC0xNDgsNiArMTUxLDE3IEBADQogCSI2IFBDSUNMSyIsICIxMiBQQ0lD
TEsiDQogfTsNCiANCitzdGF0aWMgY2hhciogY3ljbGVfdGltZV9hdGExMDBb
XSA9IHsNCisJIlJlc2VydmVkIiwgIjIgQ0xLIiwNCisJIjMgQ0xLIiwgIjQg
Q0xLIiwNCisJIjUgQ0xLIiwgIjYgQ0xLIiwNCisJIjcgQ0xLIiwgIjggQ0xL
IiwNCisJIjkgQ0xLIiwgIjEwIENMSyIsDQorCSIxMSBDTEsiLCAiMTIgQ0xL
IiwNCisJIlJlc2VydmVkIiwgIlJlc2VydmVkIiwNCisJIlJlc2VydmVkIiwg
IlJlc2VydmVkIg0KK307DQorDQogc3RhdGljIGludCBzaXNfZ2V0X2luZm8g
KGNoYXIgKmJ1ZmZlciwgY2hhciAqKmFkZHIsIG9mZl90IG9mZnNldCwgaW50
IGNvdW50KQ0KIHsNCiAJaW50IHJjOw0KQEAgLTE4OSwxMSArMjAzLDE5IEBA
DQogCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAgICAgIFVETUEgJXMg
XHQgXHQgXHQgVURNQSAlc1xuIiwNCiAJCSAgICAgKHJlZyAmIDB4ODApICA/
ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIsDQogCQkgICAgIChyZWcxICYgMHg4
MCkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsNCi0JcCArPSBzcHJpbnRm
KHAsICIgICAgICAgICAgICAgICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0
IFVETUEgQ3ljbGUgVGltZSAgICAlc1xuIiwNCi0JCSAgICAgY3ljbGVfdGlt
ZVsocmVnICYgMHg3MCkgPj4gNF0sIGN5Y2xlX3RpbWVbKHJlZzEgJiAweDcw
KSA+PiA0XSk7DQotCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAgICAg
IERhdGEgQWN0aXZlIFRpbWUgICAlcyBcdCBEYXRhIEFjdGl2ZSBUaW1lICAg
JXNcbiIsDQotCQkgICAgIGFjdGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFj
dGl2ZV90aW1lWyhyZWcxICYweDA3KV0gKTsgDQotDQorCWlmIChjYXBhYmls
aXRpZXMgJiYgU0lTNTUxM19GTEFHX0FUQV8xMDApIHsNCisJCXAgKz0gc3By
aW50ZihwLCAiICAgICAgICAgICAgICAgIFVETUEgQ3ljbGUgVGltZSAgICAl
cyBcdCBVRE1BIEN5Y2xlIFRpbWUgICAgJXNcbiIsDQorCQkJICAgICBjeWNs
ZV90aW1lX2F0YTEwMFtyZWcgJiAweDBGXSwgY3ljbGVfdGltZV9hdGExMDBb
cmVnMSAmIDB4MEZdKTsNCisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUo
Ym1pZGVfZGV2LCAweDQwLCAmcmVnKTsNCisJCXJjID0gcGNpX3JlYWRfY29u
ZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQ0LCAmcmVnMSk7DQorCQlwICs9IHNw
cmludGYocCwgIiAgICAgICAgICAgICAgICBEYXRhIEFjdGl2ZSBUaW1lICAg
JXMgXHQgRGF0YSBBY3RpdmUgVGltZSAgICVzXG4iLA0KKwkJCSAgICBhY3Rp
dmVfdGltZVsocmVnICYgMHg3MCkgPj4gNF0sIGFjdGl2ZV90aW1lWyhyZWcx
ICYgMHg3MCkgPj4gNF0pOw0KKwl9IGVsc2Ugew0KKwkJcCArPSBzcHJpbnRm
KHAsICIgICAgICAgICAgICAgICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0
IFVETUEgQ3ljbGUgVGltZSAgICAlc1xuIiwNCisJCQkgICAgIGN5Y2xlX3Rp
bWVbKHJlZyAmIDB4NzApID4+IDRdLCBjeWNsZV90aW1lWyhyZWcxICYgMHg3
MCkgPj4gNF0pOw0KKwkJcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAg
ICAgRGF0YSBBY3RpdmUgVGltZSAgICVzIFx0IERhdGEgQWN0aXZlIFRpbWUg
ICAlc1xuIiwNCisJCQkgICAgIGFjdGl2ZV90aW1lWyhyZWcgJiAweDA3KV0s
IGFjdGl2ZV90aW1lWyhyZWcxICYweDA3KV0gKTsgDQorCX0NCiAJcmMgPSBw
Y2lfcmVhZF9jb25maWdfYnl0ZShibWlkZV9kZXYsIDB4NDAsICZyZWcpOw0K
IAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGJtaWRlX2RldiwgMHg0NCwg
JnJlZzEpOw0KIAlwICs9IHNwcmludGYocCwgIiAgICAgICAgICAgICAgICBE
YXRhIFJlY292ZXJ5IFRpbWUgJXMgXHQgRGF0YSBSZWNvdmVyeSBUaW1lICVz
XG4iLA0KQEAgLTIxMywxMCArMjM1LDE5IEBADQogCXAgKz0gc3ByaW50Zihw
LCAiICAgICAgICAgICAgICAgIFVETUEgJXMgXHQgXHQgXHQgVURNQSAlc1xu
IiwNCiAJCSAgICAgKHJlZyAmIDB4ODApICA/ICJFbmFibGVkIiA6ICJEaXNh
YmxlZCIsDQogCQkgICAgIChyZWcxICYgMHg4MCkgPyAiRW5hYmxlZCIgOiAi
RGlzYWJsZWQiKTsNCi0JcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAg
ICAgVURNQSBDeWNsZSBUaW1lICAgICVzIFx0IFVETUEgQ3ljbGUgVGltZSAg
ICAlc1xuIiwNCi0JCSAgICAgY3ljbGVfdGltZVsocmVnICYgMHg3MCkgPj4g
NF0sIGN5Y2xlX3RpbWVbKHJlZzEgJiAweDcwKSA+PiA0XSk7DQotCXAgKz0g
c3ByaW50ZihwLCAiICAgICAgICAgICAgICAgIERhdGEgQWN0aXZlIFRpbWUg
ICAlcyBcdCBEYXRhIEFjdGl2ZSBUaW1lICAgJXNcbiIsDQotCQkgICAgIGFj
dGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFjdGl2ZV90aW1lWyhyZWcxICYw
eDA3KV0gKTsgDQorCWlmIChjYXBhYmlsaXRpZXMgJiYgU0lTNTUxM19GTEFH
X0FUQV8xMDApIHsNCisJCXAgKz0gc3ByaW50ZihwLCAiICAgICAgICAgICAg
ICAgIFVETUEgQ3ljbGUgVGltZSAgICAlcyBcdCBVRE1BIEN5Y2xlIFRpbWUg
ICAgJXNcbiIsDQorCQkJICAgICBjeWNsZV90aW1lX2F0YTEwMFtyZWcgJiAw
eDBGXSwgY3ljbGVfdGltZV9hdGExMDBbcmVnMSAmIDB4MEZdKTsNCisJCXJj
ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQyLCAmcmVn
KTsNCisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoYm1pZGVfZGV2LCAw
eDQ2LCAmcmVnMSk7DQorCQlwICs9IHNwcmludGYocCwgIiAgICAgICAgICAg
ICAgICBEYXRhIEFjdGl2ZSBUaW1lICAgJXMgXHQgRGF0YSBBY3RpdmUgVGlt
ZSAgICVzXG4iLA0KKwkJCSAgICBhY3RpdmVfdGltZVsocmVnICYgMHg3MCkg
Pj4gNF0sIGFjdGl2ZV90aW1lWyhyZWcxICYgMHg3MCkgPj4gNF0pOw0KKwl9
IGVsc2Ugew0KKwkJcCArPSBzcHJpbnRmKHAsICIgICAgICAgICAgICAgICAg
VURNQSBDeWNsZSBUaW1lICAgICVzIFx0IFVETUEgQ3ljbGUgVGltZSAgICAl
c1xuIiwNCisJCQkgICAgIGN5Y2xlX3RpbWVbKHJlZyAmIDB4NzApID4+IDRd
LCBjeWNsZV90aW1lWyhyZWcxICYgMHg3MCkgPj4gNF0pOw0KKwkJcCArPSBz
cHJpbnRmKHAsICIgICAgICAgICAgICAgICAgRGF0YSBBY3RpdmUgVGltZSAg
ICVzIFx0IERhdGEgQWN0aXZlIFRpbWUgICAlc1xuIiwNCisJCQkgICAgIGFj
dGl2ZV90aW1lWyhyZWcgJiAweDA3KV0sIGFjdGl2ZV90aW1lWyhyZWcxICYw
eDA3KV0gKTsNCisJfQ0KIA0KIAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRl
KGJtaWRlX2RldiwgMHg0MiwgJnJlZyk7DQogCXJjID0gcGNpX3JlYWRfY29u
ZmlnX2J5dGUoYm1pZGVfZGV2LCAweDQ2LCAmcmVnMSk7DQpAQCAtMjI5LDYg
KzI2MCw3IEBADQogYnl0ZSBzaXNfcHJvYyA9IDA7DQogZXh0ZXJuIGNoYXIg
KmlkZV94ZmVyX3ZlcmJvc2UgKGJ5dGUgeGZlcl9yYXRlKTsNCiANCisvKiBF
bmFibGVzIFByZWZldGNoIGFuZCBQb3N0d3JpdGUgb24gZHJpdmUgKi8NCiBz
dGF0aWMgdm9pZCBjb25maWdfZHJpdmVfYXJ0X3J3cCAoaWRlX2RyaXZlX3Qg
KmRyaXZlKQ0KIHsNCiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUp
Ow0KQEAgLTI0Myw4ICsyNzUsMTAgQEANCiAJDQogCWlmICgocmVnNGJoICYg
cndfcHJlZmV0Y2gpICE9IHJ3X3ByZWZldGNoKQ0KIAkJcGNpX3dyaXRlX2Nv
bmZpZ19ieXRlKGRldiwgMHg0YiwgcmVnNGJofHJ3X3ByZWZldGNoKTsNCisJ
cHJpbnRrKCJTSVM1NTEzOiBjb25maWdfZHJpdmVfYXJ0X3J3cCwgZHJpdmUg
JWRcbiIsIGRyaXZlLT5kbik7DQogfQ0KIA0KKy8qIFNldCBhY3RpdmUgYW5k
IHJlY292ZXJ5IHRpbWUgKi8NCiBzdGF0aWMgdm9pZCBjb25maWdfYXJ0X3J3
cF9waW8gKGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSBwaW8pDQogew0KIAlp
ZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7DQpAQCAtMjc0LDYgKzMw
OCw4IEBADQogDQogCXRpbWluZyA9ICh4ZmVyX3BpbyA+PSBwaW8pID8geGZl
cl9waW8gOiBwaW87DQogDQorCXByaW50aygiU0lTNTUxMzogY29uZmlnX2Ry
aXZlX2FydF9yd3BfcGlvLCBkcml2ZSAlZCwgcGlvICVkLCB0aW1pbmcgJWRc
biIsDQorCSAgICAgICBkcml2ZS0+ZG4sIHBpbywgdGltaW5nKTsNCiAvKg0K
ICAqICAgICAgICAgICAgICAgTW9kZSAwICAgICAgIE1vZGUgMSAgICAgTW9k
ZSAyICAgICBNb2RlIDMgICAgIE1vZGUgNA0KICAqIEFjdGl2ZSB0aW1lICAg
IDhUICgyNDBucykgIDZUICgxODBucykgNFQgKDEyMG5zKSAzVCAgKDkwbnMp
IDNUICAoOTBucykNCkBAIC0yOTEsNiArMzI3LDE5IEBADQogCQlkZWZhdWx0
OglyZXR1cm47DQogCX0NCiANCisJaWYgKGNhcGFiaWxpdGllcyAmJiBTSVM1
NTEzX0ZMQUdfQVRBXzEwMCkgew0KKwkJc3dpdGNoKHRpbWluZykgeyAvKiAg
IGFjdGl2ZSAgcmVjb3ZlcnkNCisJCQkJCSAgdiAgICAgdiAqLw0KKwkJY2Fz
ZSA0OgkJdGVzdDEgPSAweDMwfDB4MDE7IGJyZWFrOw0KKwkJY2FzZSAzOgkJ
dGVzdDEgPSAweDMwfDB4MDM7IGJyZWFrOw0KKwkJY2FzZSAyOgkJdGVzdDEg
PSAweDQwfDB4MDQ7IGJyZWFrOw0KKwkJY2FzZSAxOgkJdGVzdDEgPSAweDYw
fDB4MDc7IGJyZWFrOw0KKwkJZGVmYXVsdDoJYnJlYWs7DQorCQl9DQorCQlw
Y2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksIHRlc3QxKTsN
CisJCXJldHVybjsgLyogdGVtcG9yYXJ5IGhhY2sgZm9yIHRlc3RzICovDQor
CX0NCisNCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ks
ICZ0ZXN0MSk7DQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVf
cGNpfDB4MDEsICZ0ZXN0Mik7DQogDQpAQCAtMjk4LDggKzM0Nyw4IEBADQog
CSAqIERvIGEgYmxhbmtldCBjbGVhciBvZiBhY3RpdmUgYW5kIHJlY292ZXJ5
IHRpbWluZ3MuDQogCSAqLw0KIA0KLQl0ZXN0MSAmPSB+MHgwNzsNCi0JdGVz
dDIgJj0gfjB4MEY7DQorCXRlc3QxICY9IH4weDBGOw0KKwl0ZXN0MiAmPSB+
MHgwNzsNCiANCiAJc3dpdGNoKHRpbWluZykgew0KIAkJY2FzZSA0OgkJdGVz
dDEgfD0gMHgwMTsgdGVzdDIgfD0gMHgwMzsgYnJlYWs7DQpAQCAtMzQwLDYg
KzM4OSw5IEBADQogCWJ5dGUJCQlkcml2ZV9wY2ksIHRlc3QxLCB0ZXN0MjsN
CiAJYnl0ZQkJCXVubWFzaywgZm91cl90d28sIG1hc2sgPSAwOw0KIA0KKwlw
cmludGsoIlNJUzU1MTM6IHNpczU1MTNfdHVuZV9jaGlwc2V0LCBkcml2ZSAl
ZCwgc3BlZWQgJWRcbiIsDQorCSAgICAgICBkcml2ZS0+ZG4sIHNwZWVkKTsN
CisNCiAJaWYgKGhvc3RfZGV2KSB7DQogCQlzd2l0Y2goaG9zdF9kZXYtPmRl
dmljZSkgew0KIAkJCWNhc2UgUENJX0RFVklDRV9JRF9TSV81MzA6DQpAQCAt
Mzc5LDYgKzQzMSw3IEBADQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwg
ZHJpdmVfcGNpLCAmdGVzdDEpOw0KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShk
ZXYsIGRyaXZlX3BjaXwweDAxLCAmdGVzdDIpOw0KIA0KKwkvKiBJZiBub3Qg
YW4gVURNQSBtb2RlIHN3aXRjaCBvZmYgdWRtYSBiaXQgKi8NCiAJaWYgKChz
cGVlZCA8PSBYRkVSX01XX0RNQV8yKSAmJiAodGVzdDIgJiAweDgwKSkgew0K
IAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpfDB4MDEs
IHRlc3QyICYgfjB4ODApOw0KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2
LCBkcml2ZV9wY2l8MHgwMSwgJnRlc3QyKTsNCkBAIC0zODYsNyArNDM5LDMx
IEBADQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2l8
MHgwMSwgdGVzdDIgJiB+dW5tYXNrKTsNCiAJfQ0KIA0KLQlzd2l0Y2goc3Bl
ZWQpIHsNCisJaWYgKGNhcGFiaWxpdGllcyAmIFNJUzU1MTNfRkxBR19BVEFf
MTAwKSB7DQorCQlzd2l0Y2goc3BlZWQpIHsNCisjaWZkZWYgQ09ORklHX0JM
S19ERVZfSURFRE1BDQorCQljYXNlIFhGRVJfVURNQV81OiBtYXNrID0gMHgw
MTsgYnJlYWs7DQorCQljYXNlIFhGRVJfVURNQV80OiBtYXNrID0gMHgwMjsg
YnJlYWs7DQorCQljYXNlIFhGRVJfVURNQV8zOiBtYXNrID0gMHgwNDsgYnJl
YWs7DQorCQljYXNlIFhGRVJfVURNQV8yOiBtYXNrID0gMHgwNTsgYnJlYWs7
DQorCQljYXNlIFhGRVJfVURNQV8xOiBtYXNrID0gMHgwNzsgYnJlYWs7DQor
CQljYXNlIFhGRVJfVURNQV8wOiBtYXNrID0gMHgwQjsgYnJlYWs7DQorCQlj
YXNlIFhGRVJfTVdfRE1BXzI6DQorCQljYXNlIFhGRVJfTVdfRE1BXzE6DQor
CQljYXNlIFhGRVJfTVdfRE1BXzA6DQorCQljYXNlIFhGRVJfU1dfRE1BXzI6
DQorCQljYXNlIFhGRVJfU1dfRE1BXzE6DQorCQljYXNlIFhGRVJfU1dfRE1B
XzA6IGJyZWFrOw0KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEg
Ki8NCisJCWNhc2UgWEZFUl9QSU9fNDogcmV0dXJuKChpbnQpIGNvbmZpZ19j
aGlwc2V0X2Zvcl9waW8oZHJpdmUsIDQpKTsNCisJCWNhc2UgWEZFUl9QSU9f
MzogcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUs
IDMpKTsNCisJCWNhc2UgWEZFUl9QSU9fMjogcmV0dXJuKChpbnQpIGNvbmZp
Z19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDIpKTsNCisJCWNhc2UgWEZFUl9Q
SU9fMTogcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJp
dmUsIDEpKTsNCisJCWNhc2UgWEZFUl9QSU9fMDoNCisJCWRlZmF1bHQ6CSBy
ZXR1cm4oKGludCkgY29uZmlnX2NoaXBzZXRfZm9yX3Bpbyhkcml2ZSwgMCkp
Ow0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJc3dpdGNoKHNwZWVkKSB7DQogI2lm
ZGVmIENPTkZJR19CTEtfREVWX0lERURNQQ0KIAkJY2FzZSBYRkVSX1VETUFf
NTogbWFzayA9IDB4ODA7IGJyZWFrOw0KIAkJY2FzZSBYRkVSX1VETUFfNDog
bWFzayA9IDB4OTA7IGJyZWFrOw0KQEAgLTQwNywxMCArNDg0LDE2IEBADQog
CQljYXNlIFhGRVJfUElPXzE6IHJldHVybigoaW50KSBjb25maWdfY2hpcHNl
dF9mb3JfcGlvKGRyaXZlLCAxKSk7DQogCQljYXNlIFhGRVJfUElPXzA6DQog
CQlkZWZhdWx0OgkgcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9w
aW8oZHJpdmUsIDApKTsNCisJCX0NCiAJfQ0KIA0KLQlpZiAoc3BlZWQgPiBY
RkVSX01XX0RNQV8yKQ0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwg
ZHJpdmVfcGNpfDB4MDEsIHRlc3QyfG1hc2spOw0KKwlpZiAoc3BlZWQgPiBY
RkVSX01XX0RNQV8yKSB7DQorCQlpZiAoY2FwYWJpbGl0aWVzICYgU0lTNTUx
M19GTEFHX0FUQV8xMDApIHsNCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUo
ZGV2LCBkcml2ZV9wY2l8MHgwMSwgMHg4MHxtYXNrKTsNCisJCX0gZWxzZSB7
DQorCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpfDB4
MDEsIHRlc3QyfG1hc2spOw0KKwkJfQ0KKwl9DQogDQogCWRyaXZlLT5jdXJy
ZW50X3NwZWVkID0gc3BlZWQ7DQogCXJldHVybiAoKGludCkgaWRlX2NvbmZp
Z19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpKTsNCkBAIC00MzcsNiArNTIw
LDkgQEANCiAJYnl0ZSB1ZG1hXzY2CQk9IGVpZ2h0eV9uaW50eV90aHJlZShk
cml2ZSk7DQogCWJ5dGUgdWx0cmFfMTAwCQk9IDA7DQogDQorCXByaW50aygi
U0lTNTUxMzogY29uZmlnX2NoaXBzZXRfZm9yX2RtYSwgZHJpdmUgJWQsIHVs
dHJhICVkXG4iLA0KKwkgICAgICAgZHJpdmUtPmRuLCB1bHRyYSk7DQorDQog
CWlmIChob3N0X2Rldikgew0KIAkJc3dpdGNoKGhvc3RfZGV2LT5kZXZpY2Up
IHsNCiAJCQljYXNlIFBDSV9ERVZJQ0VfSURfU0lfNjM1Og0KQEAgLTQ4Nyw3
ICs1NzMsNyBAQA0KIAllbHNlDQogCQlyZXR1cm4gKChpbnQpIGlkZV9kbWFf
b2ZmX3F1aWV0bHkpOw0KIA0KLQlvdXRiKGluYihod2lmLT5kbWFfYmFzZSsy
KXwoMTw8KDUrdW5pdCkpLCBod2lmLT5kbWFfYmFzZSsyKTsNCisJT1VUX0JZ
VEUoSU5fQllURShod2lmLT5kbWFfYmFzZSsyKXwoMTw8KDUrdW5pdCkpLCBo
d2lmLT5kbWFfYmFzZSsyKTsNCiANCiAJZXJyID0gc2lzNTUxM190dW5lX2No
aXBzZXQoZHJpdmUsIHNwZWVkKTsNCiANCkBAIC01ODMsNiArNjY5LDcgQEAN
CiAJCQljb250aW51ZTsNCiANCiAJCWhvc3RfZGV2ID0gaG9zdDsNCisJCWNh
cGFiaWxpdGllcyA9IFNpU0hvc3RDaGlwSW5mb1tpXS5mbGFnczsNCiAJCXBy
aW50ayhTaVNIb3N0Q2hpcEluZm9baV0ubmFtZSk7DQogCQlwcmludGsoIlxu
Iik7DQogCQlpZiAoU2lTSG9zdENoaXBJbmZvW2ldLmZsYWdzICYgU0lTNTUx
M19GTEFHX0xBVEVOQ1kpIHsNCkBAIC01OTIsMTIgKzY3OSwyMiBAQA0KIAl9
DQogDQogCWlmIChob3N0X2Rldikgew0KLQkJYnl0ZSByZWc1MmggPSAwOw0K
KwkJaWYgKGNhcGFiaWxpdGllcyAmIFNJUzU1MTNfRkxBR19BVEFfMTAwKSB7
DQorCQkJYnl0ZSByZWc0OWggPSAwOw0KIA0KLQkJcGNpX3JlYWRfY29uZmln
X2J5dGUoZGV2LCAweDUyLCAmcmVnNTJoKTsNCi0JCWlmICghKHJlZzUyaCAm
IDB4MDQpKSB7DQotCQkJLyogc2V0IElERSBjb250cm9sbGVyIHRvIG9wZXJh
dGUgaW4gQ29tcGFiaXRpbGl0eSBtb2RlIG9ubHkgKi8NCi0JCQlwY2lfd3Jp
dGVfY29uZmlnX2J5dGUoZGV2LCAweDUyLCByZWc1Mmh8MHgwNCk7DQorCQkJ
cGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDQ5LCAmcmVnNDloKTsNCisJ
CQlpZiAoIShyZWc0OWggJiAweDAxKSkgew0KKwkJCQkvKiBzZXQgSURFIGNv
bnRyb2xsZXIgdG8gb3BlcmF0ZSBpbiBDb21wYWJpdGlsaXR5IG1vZGUgb25s
eSAqLw0KKwkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ5LCBy
ZWc0OWh8MHgwMSk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlieXRlIHJl
ZzUyaCA9IDA7DQorDQorCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAw
eDUyLCAmcmVnNTJoKTsNCisJCQlpZiAoIShyZWc1MmggJiAweDA0KSkgew0K
KwkJCQkvKiBzZXQgSURFIGNvbnRyb2xsZXIgdG8gb3BlcmF0ZSBpbiBDb21w
YWJpdGlsaXR5IG1vZGUgb25seSAqLw0KKwkJCQlwY2lfd3JpdGVfY29uZmln
X2J5dGUoZGV2LCAweDUyLCByZWc1Mmh8MHgwNCk7DQorCQkJfQ0KIAkJfQ0K
ICNpZiBkZWZpbmVkKERJU1BMQVlfU0lTX1RJTUlOR1MpICYmIGRlZmluZWQo
Q09ORklHX1BST0NfRlMpDQogCQlpZiAoIXNpc19wcm9jKSB7DQpkaWZmIC11
ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvZHJpdmVycy9pZGUvdHJtMjkw
LmMgbGludXgtMi41LjMtcDIvZHJpdmVycy9pZGUvdHJtMjkwLmMNCi0tLSBs
aW51eC0yLjUuMy1wMi1wcmlzdGluZS9kcml2ZXJzL2lkZS90cm0yOTAuYwlU
dWUgSnVuIDIwIDA3OjUyOjM2IDIwMDANCisrKyBsaW51eC0yLjUuMy1wMi9k
cml2ZXJzL2lkZS90cm0yOTAuYwlTdW4gSmFuIDIwIDAwOjQwOjExIDIwMDIN
CkBAIC0xOTUsOCArMTk1LDI2IEBADQogCQkJaWYgKGRyaXZlLT5tZWRpYSAh
PSBpZGVfZGlzaykNCiAJCQkJcmV0dXJuIDA7DQogCQkJaWRlX3NldF9oYW5k
bGVyKGRyaXZlLCAmaWRlX2RtYV9pbnRyLCBXQUlUX0NNRCwgTlVMTCk7DQot
CQkJT1VUX0JZVEUocmVhZGluZyA/IFdJTl9SRUFERE1BIDogV0lOX1dSSVRF
RE1BLCBJREVfQ09NTUFORF9SRUcpOw0KLQkJCXJldHVybiAwOw0KKy8qDQor
ICogRklYIE1FIHRvIHVzZSBvbmx5IEFDQiBpZGVfdGFza190IGFyZ3MgU3Ry
dWN0DQorICovDQorI2lmIDANCisJCXsNCisJCQlpZGVfdGFza190ICphcmdz
ID0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0KKwkJCU9VVF9CWVRF
KGFyZ3MtPnRmUmVnaXN0ZXJbSURFX0NPTU1BTkRfT0ZGU0VUXSwgSURFX0NP
TU1BTkRfUkVHKTsNCisJCX0NCisjZWxzZQ0KKwkJCWlmICgoSFdHUk9VUChk
cml2ZSktPnJxLT5mbGFncyAmIFJFUV9EUklWRV9UQVNLRklMRSkgJiYNCisJ
CQkgICAgKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpKSB7DQorCQkJCWlkZV90
YXNrX3QgKmFyZ3MgPSBIV0dST1VQKGRyaXZlKS0+cnEtPnNwZWNpYWw7DQor
CQkJCU9VVF9CWVRFKGFyZ3MtPnRmUmVnaXN0ZXJbSURFX0NPTU1BTkRfT0ZG
U0VUXSwgSURFX0NPTU1BTkRfUkVHKTsNCisJCQl9IGVsc2UgaWYgKGRyaXZl
LT5hZGRyZXNzaW5nKSB7DQorCQkJCU9VVF9CWVRFKHJlYWRpbmcgPyBXSU5f
UkVBRERNQV9FWFQgOiBXSU5fV1JJVEVETUFfRVhULCBJREVfQ09NTUFORF9S
RUcpOw0KKwkJCX0gZWxzZSB7DQorCQkJCU9VVF9CWVRFKHJlYWRpbmcgPyBX
SU5fUkVBRERNQSA6IFdJTl9XUklURURNQSwgSURFX0NPTU1BTkRfUkVHKTsN
CisJCQl9DQorI2VuZGlmDQorCQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5kbWFw
cm9jKGlkZV9kbWFfYmVnaW4sIGRyaXZlKTsNCiAJCWNhc2UgaWRlX2RtYV9i
ZWdpbjoNCiAJCQlyZXR1cm4gMDsNCiAJCWNhc2UgaWRlX2RtYV9lbmQ6DQpk
aWZmIC11ck4gbGludXgtMi41LjMtcDItcHJpc3RpbmUvaW5jbHVkZS9saW51
eC9pZGUuaCBsaW51eC0yLjUuMy1wMi9pbmNsdWRlL2xpbnV4L2lkZS5oDQot
LS0gbGludXgtMi41LjMtcDItcHJpc3RpbmUvaW5jbHVkZS9saW51eC9pZGUu
aAlTdW4gSmFuIDIwIDAwOjI1OjU5IDIwMDINCisrKyBsaW51eC0yLjUuMy1w
Mi9pbmNsdWRlL2xpbnV4L2lkZS5oCVN1biBKYW4gMjAgMDA6NDA6MTEgMjAw
Mg0KQEAgLTMyOSw5ICszMjksMTEgQEANCiAjaWZkZWYgUkVBTExZX0ZBU1Rf
SU8NCiAjZGVmaW5lIE9VVF9CWVRFKGIscCkgICAgICAgICAgb3V0YigoYiks
KHApKQ0KICNkZWZpbmUgT1VUX1dPUkQodyxwKSAgICAgICAgICBvdXR3KCh3
KSwocCkpDQorI2RlZmluZSBPVVRfTE9ORyhsLHApICAgICAgICAgIG91dGwo
KGwpLChwKSkNCiAjZWxzZQ0KICNkZWZpbmUgT1VUX0JZVEUoYixwKSAgICAg
ICAgICBvdXRiX3AoKGIpLChwKSkNCiAjZGVmaW5lIE9VVF9XT1JEKHcscCkg
ICAgICAgICAgb3V0d19wKCh3KSwocCkpDQorI2RlZmluZSBPVVRfTE9ORyhs
LHApICAgICAgICAgIG91dGxfcCgobCksKHApKQ0KICNlbmRpZg0KICNlbmRp
Zg0KIA0KQEAgLTMzOSw5ICszNDEsMTEgQEANCiAjaWZkZWYgUkVBTExZX0ZB
U1RfSU8NCiAjZGVmaW5lIElOX0JZVEUocCkgICAgICAgICAgICAgKGJ5dGUp
aW5iKHApDQogI2RlZmluZSBJTl9XT1JEKHApICAgICAgICAgICAgIChzaG9y
dClpbncocCkNCisjZGVmaW5lIElOX0xPTkcocCkgICAgICAgICAgICAgKGlu
dClpbmwocCkNCiAjZWxzZQ0KICNkZWZpbmUgSU5fQllURShwKSAgICAgICAg
ICAgICAoYnl0ZSlpbmJfcChwKQ0KICNkZWZpbmUgSU5fV09SRChwKSAgICAg
ICAgICAgICAoc2hvcnQpaW53X3AocCkNCisjZGVmaW5lIElOX0xPTkcocCkg
ICAgICAgICAgICAgKGludClpbmxfcChwKQ0KICNlbmRpZg0KICNlbmRpZg0K
IA0KQEAgLTc4Niw4ICs3OTAsNiBAQA0KIGlubGluZSBpbnQgX19pZGVfZW5k
X3JlcXVlc3QoaWRlX2h3Z3JvdXBfdCAqLCBpbnQsIGludCk7DQogaW50IGlk
ZV9lbmRfcmVxdWVzdChieXRlIHVwdG9kYXRlLCBpZGVfaHdncm91cF90ICpo
d2dyb3VwKTsNCiANCi1pbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90
ICpkcml2ZSk7DQotDQogLyoNCiAgKiBUaGlzIGlzIHVzZWQgb24gZXhpdCBm
cm9tIHRoZSBkcml2ZXIsIHRvIGRlc2lnbmF0ZSB0aGUgbmV4dCBpcnEgaGFu
ZGxlcg0KICAqIGFuZCBhbHNvIHRvIHN0YXJ0IHRoZSBzYWZldHkgdGltZXIu
DQpAQCAtODgyLDEwICs4ODQsOCBAQA0KIC8qDQogICogdGVtcG9yYXJpbHkg
bWFwcGluZyBhIChwb3NzaWJsZSkgaGlnaG1lbSBiaW8gZm9yIFBJTyB0cmFu
c2Zlcg0KICAqLw0KLSNkZWZpbmUgaWRlX3JxX29mZnNldChycSkgKCgocnEp
LT5oYXJkX2N1cl9zZWN0b3JzIC0gKHJxKS0+Y3VycmVudF9ucl9zZWN0b3Jz
KSA8PCA5KQ0KLQ0KLSNkZWZpbmUgdGFza19ycV9vZmZzZXQocnEpIFwNCi0J
KCgocnEpLT5ucl9zZWN0b3JzIC0gKHJxKS0+Y3VycmVudF9ucl9zZWN0b3Jz
KSAqIFNFQ1RPUl9TSVpFKQ0KKyNkZWZpbmUgaWRlX3JxX29mZnNldChycSkg
XA0KKwkoKChycSktPmhhcmRfY3VyX3NlY3RvcnMgLSAocnEpLT5jdXJyZW50
X25yX3NlY3RvcnMpIDw8IDkpDQogDQogZXh0ZXJuIGlubGluZSB2b2lkICpp
ZGVfbWFwX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxv
bmcgKmZsYWdzKQ0KIHsNCkBAIC04OTgsMjQgKzg5OCw2IEBADQogfQ0KIA0K
IC8qDQotICogZm9yIG5vdywgdGFza2ZpbGUgcmVxdWVzdHMgYXJlIHNwZWNp
YWwgOi8NCi0gKi8NCi1leHRlcm4gaW5saW5lIGNoYXIgKmlkZV9tYXBfcnEo
c3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nICpmbGFncykNCi17
DQotCWlmIChycS0+YmlvKQ0KLQkJcmV0dXJuIGlkZV9tYXBfYnVmZmVyKHJx
LCBmbGFncyk7DQotCWVsc2UNCi0JCXJldHVybiBycS0+YnVmZmVyICsgdGFz
a19ycV9vZmZzZXQocnEpOw0KLX0NCi0NCi1leHRlcm4gaW5saW5lIHZvaWQg
aWRlX3VubWFwX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgY2hhciAqYnVmLA0K
LQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykNCi17DQotCWlmIChycS0+Ymlv
KQ0KLQkJaWRlX3VubWFwX2J1ZmZlcihidWYsIGZsYWdzKTsNCi19DQotDQot
LyoNCiAgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIHNwZWNpYWwgSURFIGRl
dmljZSByZXF1ZXN0DQogICogb250byB0aGUgcmVxdWVzdCBxdWV1ZS4NCiAg
Kg0KQEAgLTk3MSwxMiArOTUzLDI1IEBADQogCXVuc2lnbmVkIGxvbmcJCWJs
b2NrOwkJLyogY29weSBvZiBibG9jayAqLw0KIH0gaWRlX3Rhc2tfdDsNCiAN
Cit0eXBlZGVmIHN0cnVjdCBwa3RfdGFza19zIHsNCisJdGFza19pb3JlZ190
CQl0ZlJlZ2lzdGVyWzhdOw0KKwlpbnQJCQlkYXRhX3BoYXNlOw0KKwlpbnQJ
CQljb21tYW5kX3R5cGU7DQorCWlkZV9oYW5kbGVyX3QJCSpoYW5kbGVyOw0K
Kwl2b2lkCQkJKnNwZWNpYWw7DQorCXN0cnVjdCByZXF1ZXN0CQkqcnE7CQkv
KiBjb3B5IG9mIHJlcXVlc3QgKi8NCisJdW5zaWduZWQgbG9uZwkJYmxvY2s7
CQkvKiBjb3B5IG9mIGJsb2NrICovDQorfSBwa3RfdGFza190Ow0KKw0KIHZv
aWQgYXRhX2lucHV0X2RhdGEgKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAq
YnVmZmVyLCB1bnNpZ25lZCBpbnQgd2NvdW50KTsNCiB2b2lkIGF0YV9vdXRw
dXRfZGF0YSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVu
c2lnbmVkIGludCB3Y291bnQpOw0KIHZvaWQgYXRhcGlfaW5wdXRfYnl0ZXMg
KGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBp
bnQgYnl0ZWNvdW50KTsNCiB2b2lkIGF0YXBpX291dHB1dF9ieXRlcyAoaWRl
X2RyaXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCBi
eXRlY291bnQpOw0KIHZvaWQgdGFza2ZpbGVfaW5wdXRfZGF0YSAoaWRlX2Ry
aXZlX3QgKmRyaXZlLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGludCB3Y291
bnQpOw0KIHZvaWQgdGFza2ZpbGVfb3V0cHV0X2RhdGEgKGlkZV9kcml2ZV90
ICpkcml2ZSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgd2NvdW50KTsN
CisNCitpbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90ICpkcml2ZSk7
DQoraW50IHdhaXRfZm9yX3JlYWR5IChpZGVfZHJpdmVfdCAqZHJpdmUsIGlu
dCB0aW1lb3V0KTsNCiANCiAvKg0KICAqIHRhc2tmaWxlIGlvIGZvciBkaXNr
cyBmb3Igbm93Li4uDQo=
--1430322656-1514984572-1011606626=:13727--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/