Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Apr 2007 16:04:23 +0800
From:      "Howard Su" <howard0su@gmail.com>
To:        current@freebsd.org
Cc:        alfred@freebsd.org, Robert Watson <rwatson@freebsd.org>
Subject:   Re: [Review] Remove procfs dependency of truss
Message-ID:  <f126fae00704060104w1fd4b060w35f2073eced93f57@mail.gmail.com>
In-Reply-To: <f126fae00704040118w25a7b291xdcf1b6300bab1ceb@mail.gmail.com>
References:  <f126fae00704040118w25a7b291xdcf1b6300bab1ceb@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_3006_3639545.1175846663809
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Thanks to Robert to point out that my original patch didn't work
against a threaded application. I fixed that. Please try the new
patch.

I tested this patch under i386 box only with libthr and libpthread.

Howard

On 4/4/07, Howard Su <howard0su@gmail.com> wrote:
> Following the suggestion in idea page, I proposed the attached patch.
> I didn't change any kernel part because I think PTRACE(2) is
> functional although man page didn't document it.
>
> I tested the patch under i386 and amd64 box. The help on testing and
> code review will be appreciated.
>
> To test, please try the following commands:
> 1. truss ps
> basic stuff
> 2. truss -o output ps
> output the result to file
> 3. truss -f -o output sh -c "ps"
> test follow fork
> 4. start TOP(1) in another session, the
> truss -p <pid_of_top>
>
> --
> -Howard
>
>


-- 
-Howard

------=_Part_3006_3639545.1175846663809
Content-Type: text/plain; name=truss_patch.diff; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_f06cp13a
Content-Disposition: attachment; filename="truss_patch.diff"

PT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL01ha2VmaWxlIzkg
KHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvTWFr
ZWZpbGUjMSAodGV4dCtrbykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVl
YnNkL3NyYy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM2ICh0ZXh0K2tvKSAtIC8vZGVwb3Qv
dXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM1ICh0ZXh0K2tv
KSA9PT09IGNvbnRlbnQKQEAgLTQzLDggKzQzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgor
I2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5j
bHVkZSA8bWFjaGluZS9yZWcuaD4KQEAgLTYzLDcgKzYyLDYgQEAKICNpbmNsdWRlICJzeXNjYWxs
LmgiCiAjaW5jbHVkZSAiZXh0ZXJuLmgiCiAKLXN0YXRpYyBpbnQgZmQgPSAtMTsKIHN0YXRpYyBp
bnQgY3BpZCA9IC0xOwogCiAjaW5jbHVkZSAic3lzY2FsbHMuaCIKQEAgLTExMywyNSArMTExLDE2
IEBACiAKIHZvaWQKIGFtZDY0X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3Np
bmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAg
IGludCBzeXNjYWxsX251bTsKICAgaW50IGksIHJlZzsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwog
Ci0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50
ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3Blbihi
dWYsIE9fUkRXUik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5m
by0+b3V0ZmlsZSwgIi0tIENBTk5PVCBPUEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1
c3NpbmZvLT5jdXJ0aHJlYWQtPnRpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBM
LCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdz
KSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8
IDApCisgIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFE
IFJFR0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0xNjMsNyArMTUyLDcgQEAK
ICAgICB8fCAhc3RyY21wKGZzYy5uYW1lLCAicmZvcmsiKQogICAgIHx8ICFzdHJjbXAoZnNjLm5h
bWUsICJ2Zm9yayIpKSkpCiAgIHsKLSAgICB0cnVzc2luZm8tPmluX2ZvcmsgPSAxOworICAgIHRy
dXNzaW5mby0+Y3VydGhyZWFkLT5pbl9mb3JrID0gMTsKICAgfQogCiAgIGlmIChuYXJncyA9PSAw
KQpAQCAtMTgxLDggKzE3MCwxMyBAQAogICAgIH0KICAgfQogICBpZiAobmFyZ3MgPiBpKSB7Ci0g
ICAgbHNlZWsoUHJvY2ZkLCByZWdzLnJfcnNwICsgc2l6ZW9mKHJlZ2lzdGVyX3QpLCBTRUVLX1NF
VCk7Ci0gICAgaWYgKHJlYWQoUHJvY2ZkLCAmZnNjLmFyZ3NbaV0sIChuYXJncy1pKSAqIHNpemVv
ZihyZWdpc3Rlcl90KSkgPT0gLTEpCisgICAgc3RydWN0IHB0cmFjZV9pb19kZXNjIGlvcmVxdWVz
dDsKKyAgICBpb3JlcXVlc3QucGlvZF9vcCA9IFBJT0RfUkVBRF9EOworICAgIGlvcmVxdWVzdC5w
aW9kX29mZnMgPSAodm9pZCAqKShyZWdzLnJfcnNwICsgc2l6ZW9mKHJlZ2lzdGVyX3QpKTsKKyAg
ICBpb3JlcXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdzW2ldOworICAgIGlvcmVxdWVzdC5waW9k
X2xlbiA9IChuYXJncyAtIGkpICogc2l6ZW9mKHJlZ2lzdGVyX3QpOworICAgIHB0cmFjZShQVF9J
TywgY3BpZCwgKGNhZGRyX3QpJmlvcmVxdWVzdCwgMCk7CisgICAgaWYgKGlvcmVxdWVzdC5waW9k
X2xlbiA9PSAwKQogICAgICAgcmV0dXJuOwogICB9CiAKQEAgLTIyMyw3ICsyMTcsNyBAQAogCSAg
ICAgIGkgPCAoZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAiIik7CiAjZW5kaWYKICAgICAgIGlmIChz
YyAmJiAhKHNjLT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7Ci0JZnNjLnNfYXJnc1tpXSA9IHByaW50
X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNzaW5mbyk7CisJZnNj
LnNfYXJnc1tpXSA9IHByaW50X2FyZygmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2lu
Zm8pOwogICAgICAgfQogICAgIH0KICNpZiBERUJVRwpAQCAtMjc5LDI1ICsyNzMsMTYgQEAKIGxv
bmcKIGFtZDY0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8sIGludCBz
eXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJl
Z3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9ycDsKICAgc3RydWN0IHN5
c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7
Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAg
IGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZw
cmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4i
KTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7
Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+Y3VydGhyZWFkLT50aWQ7CiAKLSAgbHNlZWsoZmQs
IDBMLCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihy
ZWdzKSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAw
KSA8IDApCisgIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBS
RUFEIFJFR0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KQEAgLTMyOCw3ICsz
MTMsNyBAQAogCWlmIChlcnJvcnApCiAJICBhc3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFy
Z3Nbc2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9j
ZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAg
PSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwog
CWZzYy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAgICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRv
ci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL2V4dGVybi5oIzEwICh0ZXh0K2tvKSAtIC8vZGVw
b3QvdXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2V4dGVybi5oIzMgKHRleHQra28p
ID09PT0gY29udGVudApAQCAtMzIsOCArMzIsOSBAQAogICovCiAKIGV4dGVybiBpbnQgc2V0dXBf
YW5kX3dhaXQoY2hhciAqKik7Ci1leHRlcm4gaW50IHN0YXJ0X3RyYWNpbmcoaW50LCBpbnQsIGlu
dCwgaW50KTsKK2V4dGVybiBpbnQgc3RhcnRfdHJhY2luZyhpbnQpOwogZXh0ZXJuIHZvaWQgcmVz
dG9yZV9wcm9jKGludCk7CitleHRlcm4gdm9pZCB3YWl0ZXZlbnQoc3RydWN0IHRydXNzaW5mbyAq
KTsKIGV4dGVybiBjb25zdCBjaGFyICppb2N0bG5hbWUocmVnaXN0ZXJfdCB2YWwpOwogZXh0ZXJu
IGNoYXIgKnN0cnNpZyhpbnQgc2lnKTsKICNpZmRlZiBfX2FscGhhX18KQEAgLTYzLDQgKzY0LDMg
QEAKIGV4dGVybiBsb25nIHNwYXJjNjRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cnVzc2luZm8gKiwg
aW50KTsKICNlbmRpZgogCi1leHRlcm4gaW50IFByb2NmZDsKPT09PSAvL2RlcG90L3ZlbmRvci9m
cmVlYnNkL3NyYy91c3IuYmluL3RydXNzL2kzODYtZmJzZC5jIzE3ICh0ZXh0K2tvKSAtIC8vZGVw
b3QvdXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2kzODYtZmJzZC5jIzQgKHRleHQr
a28pID09PT0gY29udGVudApAQCAtNDMsOSArNDMsOCBAQAogICovCiAKICNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxzeXMvcGlvY3RsLmg+
CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAKICNp
bmNsdWRlIDxtYWNoaW5lL3JlZy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcHNsLmg+CkBAIC02Myw3
ICs2Miw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5oIgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1z
dGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50IGNwaWQgPSAtMTsKIAogI2luY2x1ZGUgInN5
c2NhbGxzLmgiCkBAIC0xMTMsMjYgKzExMSwxOCBAQAogCiB2b2lkCiBpMzg2X3N5c2NhbGxfZW50
cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZb
MzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsKICAgaW50IGk7CiAg
IHVuc2lnbmVkIGludCBwYXJtX29mZnNldDsKICAgc3RydWN0IHN5c2NhbGwgKnNjID0gTlVMTDsK
KyAgc3RydWN0IHB0cmFjZV9pb19kZXNjIGlvcmVxdWVzdDsKKyAgY3BpZCA9IHRydXNzaW5mby0+
Y3VydGhyZWFkLT50aWQ7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNw
aWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7
Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAg
IGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0t
XG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwot
ICB9Ci0KICAgY2xlYXJfZnNjKCk7Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZk
LCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgCisgIGlmIChwdHJh
Y2UoUFRfR0VUUkVHUywgY3BpZCwgKGNhZGRyX3QpJnJlZ3MsIDApIDwgMCkKKyAgewogICAgIGZw
cmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIFJFQUQgUkVHSVNURVJTIC0tXG4i
KTsKICAgICByZXR1cm47CiAgIH0KQEAgLTE0NiwxMyArMTM2LDExIEBACiAgIHN5c2NhbGxfbnVt
ID0gcmVncy5yX2VheDsKICAgc3dpdGNoIChzeXNjYWxsX251bSkgewogICBjYXNlIFNZU19zeXNj
YWxsOgotICAgIGxzZWVrKFByb2NmZCwgcGFybV9vZmZzZXQsIFNFRUtfU0VUKTsKLSAgICByZWFk
KFByb2NmZCwgJnN5c2NhbGxfbnVtLCBzaXplb2YoaW50KSk7CisgICAgc3lzY2FsbF9udW0gPSBw
dHJhY2UoUFRfUkVBRF9ELCBjcGlkLCAoY2FkZHJfdClwYXJtX29mZnNldCwgMCk7CiAgICAgcGFy
bV9vZmZzZXQgKz0gc2l6ZW9mKGludCk7CiAgICAgYnJlYWs7CiAgIGNhc2UgU1lTX19fc3lzY2Fs
bDoKLSAgICBsc2VlayhQcm9jZmQsIHBhcm1fb2Zmc2V0LCBTRUVLX1NFVCk7Ci0gICAgcmVhZChQ
cm9jZmQsICZzeXNjYWxsX251bSwgc2l6ZW9mKGludCkpOworICAgIHN5c2NhbGxfbnVtID0gcHRy
YWNlKFBUX1JFQURfRCwgY3BpZCwgKGNhZGRyX3QpcGFybV9vZmZzZXQsIDApOwogICAgIHBhcm1f
b2Zmc2V0ICs9IHNpemVvZihxdWFkX3QpOwogICAgIGJyZWFrOwogICB9CkBAIC0xNjksMTUgKzE1
NywxOSBAQAogICAgIHx8ICFzdHJjbXAoZnNjLm5hbWUsICJyZm9yayIpCiAgICAgfHwgIXN0cmNt
cChmc2MubmFtZSwgInZmb3JrIikpKSkKICAgewotICAgIHRydXNzaW5mby0+aW5fZm9yayA9IDE7
CisgICAgdHJ1c3NpbmZvLT5jdXJ0aHJlYWQtPmluX2ZvcmsgPSAxOwogICB9CiAKICAgaWYgKG5h
cmdzID09IDApCiAgICAgcmV0dXJuOwogCiAgIGZzYy5hcmdzID0gbWFsbG9jKCgxK25hcmdzKSAq
IHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0gIGxzZWVrKFByb2NmZCwgcGFybV9vZmZzZXQsIFNF
RUtfU0VUKTsKLSAgaWYgKHJlYWQoUHJvY2ZkLCBmc2MuYXJncywgbmFyZ3MgKiBzaXplb2YodW5z
aWduZWQgbG9uZykpID09IC0xKQorICBpb3JlcXVlc3QucGlvZF9vcCA9IFBJT0RfUkVBRF9EOwor
ICBpb3JlcXVlc3QucGlvZF9vZmZzID0gKHZvaWQgKilwYXJtX29mZnNldDsKKyAgaW9yZXF1ZXN0
LnBpb2RfYWRkciA9IGZzYy5hcmdzOworICBpb3JlcXVlc3QucGlvZF9sZW4gPSBuYXJncyAqIHNp
emVvZih1bnNpZ25lZCBsb25nKTsKKyAgcHRyYWNlKFBUX0lPLCBjcGlkLCAoY2FkZHJfdCkmaW9y
ZXF1ZXN0LCAwKTsKKyAgaWYgKGlvcmVxdWVzdC5waW9kX2xlbiA9PSAwKQogICAgIHJldHVybjsK
IAogICBpZiAoZnNjLm5hbWUpCkBAIC0yMTgsNyArMjEwLDcgQEAKIAkgICAgICBpIDwgKGZzYy5u
YXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2MgJiYgIShzYy0+YXJn
c1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoUHJvY2ZkLCAm
c2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5zX2FyZ3NbaV0gPSBw
cmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKICAgICAgIH0K
ICAgICB9CiAjaWYgREVCVUcKQEAgLTI3NCwyOCArMjY2LDIwIEBACiBsb25nCiBpMzg2X3N5c2Nh
bGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8sIGludCBzeXNjYWxsX251bSBfX3Vu
dXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0
dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9ycDsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0g
IGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50Zihi
dWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYs
IE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZv
LT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVy
biAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9
IHRydXNzaW5mby0+Y3VydGhyZWFkLT50aWQ7CiAKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYg
KHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICBpZiAo
cHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDApCisgIHsKICAg
ICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lTVEVSUyAt
LVxuIik7CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KKyAgCiAgIHJldHZhbCA9IHJlZ3Mucl9lYXg7
CiAgIGVycm9ycCA9ICEhKHJlZ3Mucl9lZmxhZ3MgJiBQU0xfQyk7CiAKQEAgLTMyMyw3ICszMDcs
NyBAQAogCWlmIChlcnJvcnApCiAJICBhc3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nb
c2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQs
ICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBw
cmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZz
Yy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAgICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9m
cmVlYnNkL3NyYy91c3IuYmluL3RydXNzL2kzODYtbGludXguYyMxNiAodGV4dCtrbykgLSAvL2Rl
cG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2LWxpbnV4LmMjNCAodGV4
dCtrbykgPT09PSBjb250ZW50CkBAIC00MSw4ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwu
aD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgog
I2luY2x1ZGUgPG1hY2hpbmUvcHNsLmg+CkBAIC02MCw3ICs1OSw2IEBACiAjaW5jbHVkZSAic3lz
Y2FsbC5oIgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0
aWMgaW50IGNwaWQgPSAtMTsKIAogI2luY2x1ZGUgImxpbnV4X3N5c2NhbGxzLmgiCkBAIC0xMDgs
MjggKzEwNiwyMCBAQAogCiB2b2lkCiBpMzg2X2xpbnV4X3N5c2NhbGxfZW50cnkoc3RydWN0IHRy
dXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1
Y3QgcmVnIHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsKICAgaW50IGk7CiAgIHN0cnVjdCBzeXNj
YWxsICpzYzsKIAotICBpZiAoZmQgPT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkgewot
ICAgIHNwcmludGYoYnVmLCAiL3Byb2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAgICBm
ZCA9IG9wZW4oYnVmLCBPX1JEV1IpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnByaW50
Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAg
Y3BpZCA9IHRydXNzaW5mby0+Y3VydGhyZWFkLT50aWQ7CiAKICAgY2xlYXJfZnNjKCk7Ci0gIGxz
ZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBz
aXplb2YocmVncykpIHsKKyAgCisgIGlmIChwdHJhY2UoUFRfR0VUUkVHUywgY3BpZCwgKGNhZGRy
X3QpJnJlZ3MsIDApIDwgMCkKKyAgewogICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAi
LS0gQ0FOTk9UIFJFQUQgUkVHSVNURVJTIC0tXG4iKTsKICAgICByZXR1cm47Ci0gIH0KKyAgfSAK
ICAgc3lzY2FsbF9udW0gPSByZWdzLnJfZWF4OwogCiAgIGZzYy5udW1iZXIgPSBzeXNjYWxsX251
bTsKQEAgLTE0Myw3ICsxMzMsNyBAQAogICAgJiYgKCghc3RyY21wKGZzYy5uYW1lLCAibGludXhf
Zm9yayIpCiAgICAgfHwgIXN0cmNtcChmc2MubmFtZSwgImxpbnV4X3Zmb3JrIikpKSkKICAgewot
ICAgIHRydXNzaW5mby0+aW5fZm9yayA9IDE7CisgICAgdHJ1c3NpbmZvLT5jdXJ0aHJlYWQtPmlu
X2ZvcmsgPSAxOwogICB9CiAKICAgaWYgKG5hcmdzID09IDApCkBAIC0yMDAsNyArMTkwLDcgQEAK
IAkgICAgICBpIDwgKGZzYy5uYXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBp
ZiAoc2MgJiYgIShzYy0+YXJnc1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBw
cmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOwor
CWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1
c3NpbmZvKTsKICAgICAgIH0KICAgICB9CiAjaWYgREVCVUcKQEAgLTI2NCwyOCArMjU0LDE5IEBA
CiBsb25nCiBpMzg2X2xpbnV4X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2lu
Zm8sIGludCBzeXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1
Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9ycDsKICAg
c3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAh
PSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5w
aWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsK
LSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNU
RVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3Np
bmZvLT5waWQ7CisgIGNwaWQgPSB0cnVzc2luZm8tPmN1cnRocmVhZC0+dGlkOworICBpZiAocHRy
YWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDApCisgIHsKKyAgICBm
cHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lTVEVSUyAtLVxu
Iik7CisgICAgcmV0dXJuICgtMSk7CiAgIH0KIAotICBsc2VlayhmZCwgMEwsIDApOwotICBpZiAo
cmVhZChmZCwgJnJlZ3MsIHNpemVvZihyZWdzKSkgIT0gc2l6ZW9mKHJlZ3MpKSB7Ci0gICAgZnBy
aW50Zih0cnVzc2luZm8tPm91dGZpbGUsICJcbiIpOwotICAgIHJldHVybiAoLTEpOwotICB9CiAg
IHJldHZhbCA9IHJlZ3Mucl9lYXg7CiAgIGVycm9ycCA9ICEhKHJlZ3Mucl9lZmxhZ3MgJiBQU0xf
Qyk7CiAKQEAgLTMxMyw3ICsyOTQsNyBAQAogCWlmIChlcnJvcnApCiAJICBhc3ByaW50ZigmdGVt
cCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJZWxzZQotCSAgdGVt
cCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1
c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgcmV0
dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAgICAgfQogICAgIH0K
PT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL2kzODYuY29uZiMx
ICh0ZXh0K2tvKSAtIC8vZGVwb3QvdXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2kz
ODYuY29uZiMxICh0ZXh0K2tvKSA9PT09IGlkZW50aWNhbAo9PT09IC8vZGVwb3QvdmVuZG9yL2Zy
ZWVic2Qvc3JjL3Vzci5iaW4vdHJ1c3MvaTM4NmxpbnV4LmNvbmYjMSAodGV4dCtrbykgLSAvL2Rl
cG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2bGludXguY29uZiMxICh0
ZXh0K2tvKSA9PT09IGlkZW50aWNhbAo9PT09IC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vz
ci5iaW4vdHJ1c3MvaWE2NC1mYnNkLmMjOSAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJk
c3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pYTY0LWZic2QuYyMzICh0ZXh0K2tvKSA9PT09IGNvbnRl
bnQKQEAgLTQzLDggKzQzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5j
bHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1ZGUgPHN5
cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5jbHVkZSA8bWFjaGlu
ZS9yZWcuaD4KQEAgLTYyLDcgKzYxLDYgQEAKICNpbmNsdWRlICJzeXNjYWxsLmgiCiAjaW5jbHVk
ZSAiZXh0ZXJuLmgiCiAKLXN0YXRpYyBpbnQgZmQgPSAtMTsKIHN0YXRpYyBpbnQgY3BpZCA9IC0x
OwogCiAjaW5jbHVkZSAic3lzY2FsbHMuaCIKQEAgLTExMiwyNiArMTEwLDE2IEBACiAKIHZvaWQK
IGlhNjRfc3lzY2FsbF9lbnRyeShzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8sIGludCBuYXJn
cykgewotICBjaGFyIGJ1ZlszMl07CiAgIHN0cnVjdCByZWcgcmVnczsKICAgaW50IHN5c2NhbGxf
bnVtOwogICBpbnQgaTsKICAgdW5zaWduZWQgbG9uZyAqcGFybV9vZmZzZXQ7CiAgIHN0cnVjdCBz
eXNjYWxsICpzYzsKIAotICBpZiAoZmQgPT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkg
ewotICAgIHNwcmludGYoYnVmLCAiL3Byb2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAg
ICBmZCA9IG9wZW4oYnVmLCBPX1JEV1IpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnBy
aW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIp
OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0K
KyAgY3BpZCA9IHRydXNzaW5mby0+Y3VydGhyZWFkLT5pZDsKIAogICBjbGVhcl9mc2MoKTsKLSAg
bHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9
IHNpemVvZihyZWdzKSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90
KSZyZWdzLCAwKSA8IDApIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENB
Tk5PVCBSRUFEIFJFR0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0xNTgsNyAr
MTQ2LDcgQEAKICAgICB8fCAhc3RyY21wKGZzYy5uYW1lLCAicmZvcmsiKQogICAgIHx8ICFzdHJj
bXAoZnNjLm5hbWUsICJ2Zm9yayIpKSkpCiAgIHsKLSAgICB0cnVzc2luZm8tPmluX2ZvcmsgPSAx
OworICAgIHRydXNzaW5mby0+Y3VydGhyZWFkLT5pbl9mb3JrID0gMTsKICAgfQogCiAgIGlmIChu
YXJncyA9PSAwKQpAQCAtMjA0LDcgKzE5Miw3IEBACiAJICAgICAgaSA8IChmc2MubmFyZ3MgLSAx
KSA/ICIsIiA6ICIiKTsKICNlbmRpZgogICAgICAgaWYgKHNjICYmICEoc2MtPmFyZ3NbaV0udHlw
ZSAmIE9VVCkpIHsKLQlmc2Muc19hcmdzW2ldID0gcHJpbnRfYXJnKFByb2NmZCwgJnNjLT5hcmdz
W2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKKwlmc2Muc19hcmdzW2ldID0gcHJpbnRfYXJn
KCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNzaW5mbyk7CiAgICAgICB9CiAgICAgfQog
I2lmIERFQlVHCkBAIC0yNjAsMjUgKzI0OCwxNSBAQAogbG9uZwogaWE2NF9zeXNjYWxsX2V4aXQo
c3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgc3lzY2FsbF9udW0gX191bnVzZWQpCiB7
Ci0gIGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBsb25nIHJldHZhbDsKICAg
aW50IGk7CiAgIGludCBlcnJvcnA7CiAgIHN0cnVjdCBzeXNjYWxsICpzYzsKIAotICBpZiAoZmQg
PT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkgewotICAgIHNwcmludGYoYnVmLCAiL3By
b2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAgICBmZCA9IG9wZW4oYnVmLCBPX1JET05M
WSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0Zmls
ZSwgIi0tIENBTk5PVCBPUEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1cm4gKC0xKTsK
LSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNwaWQgPSB0cnVzc2lu
Zm8tPmN1cnRocmVhZC0+dGlkOwogCi0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZk
LCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYgKHB0cmFjZShQ
VF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAgICAgZnByaW50Zih0
cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwogICAg
IHJldHVybiAoLTEpOwogICB9CkBAIC0zMDksNyArMjg3LDcgQEAKIAlpZiAoZXJyb3JwKQogCSAg
YXNwcmludGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwog
CWVsc2UKLQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdz
LCByZXR2YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwg
ZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAg
ICAgIH0KICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVz
cy9tYWluLmMjMjQgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5i
aW4vdHJ1c3MvbWFpbi5jIzYgKHRleHQra28pID09PT0gY29udGVudApAQCAtMzksMTEgKzM5LDEw
IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5o
PgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNs
dWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5
cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJyLmg+CkBAIC01
OSwxMyArNTgsOCBAQAogI2luY2x1ZGUgInRydXNzLmgiCiAjaW5jbHVkZSAiZXh0ZXJuLmgiCiAK
LS8qCi0gKiBJdCdzIGRpZmZpY3VsdCB0byBwYXJhbWV0ZXJpemUgdGhpcyBiZWNhdXNlIGl0IG11
c3QgYmUKLSAqIGFjY2Vzc2libGUgaW4gYSBzaWduYWwgaGFuZGxlci4KLSAqLworI2RlZmluZSBN
QVhBUkdTIDUKIAotaW50IFByb2NmZDsKLQogc3RhdGljIHZvaWQKIHVzYWdlKHZvaWQpCiB7CkBA
IC0xMTksMTggKzExMywxOSBAQAogc2V0X2V0eXBlKHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5m
bykKIHsKIAlzdHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWNoYXIgZXR5cGVbMjRdOwogCWNoYXIg
cHJvZ3RbMzJdOwotCWludCBmZDsKKwkKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHByb2d0KTsKKwlp
bnQgbWliWzRdOworCWludCBlcnJvcjsKIAotCXNwcmludGYoZXR5cGUsICIvcHJvYy8lZC9ldHlw
ZSIsIHRydXNzaW5mby0+cGlkKTsKLQlpZiAoKGZkID0gb3BlbihldHlwZSwgT19SRE9OTFkpKSA9
PSAtMSkgewotCQlzdHJjcHkocHJvZ3QsICJGcmVlQlNEIGEub3V0Iik7Ci0JfSBlbHNlIHsKLQkJ
aW50IGxlbiA9IHJlYWQoZmQsIHByb2d0LCBzaXplb2YocHJvZ3QpKTsKLQkJcHJvZ3RbbGVuLTFd
ID0gJ1wwJzsKLQkJY2xvc2UoZmQpOwotCX0KKwltaWJbMF0gPSBDVExfS0VSTjsKKwltaWJbMV0g
PSBLRVJOX1BST0M7CisJbWliWzJdID0gS0VSTl9QUk9DX1NWX05BTUU7CisJbWliWzNdID0gdHJ1
c3NpbmZvLT5waWQ7CisJZXJyb3IgPSBzeXNjdGwobWliLCA0LCBwcm9ndCwgJmxlbiwgTlVMTCwg
MCk7CisJaWYgKGVycm9yICE9IDApCisJCWVycigyLCAiY2FuIG5vdCBnZXQgZXR5cGUiKTsKIAog
CWZvciAoZnVuY3MgPSBleF90eXBlczsgZnVuY3MtPnR5cGU7IGZ1bmNzKyspCiAJCWlmICghc3Ry
Y21wKGZ1bmNzLT50eXBlLCBwcm9ndCkpCkBAIC0xNjcsMTQgKzE2MiwxMiBAQAogCWludCBjOwog
CWludCBpOwogCWNoYXIgKipjb21tYW5kOwotCXN0cnVjdCBwcm9jZnNfc3RhdHVzIHBmczsKIAlz
dHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWludCBpbl9leGVjLCBzaWdleGl0LCBpbml0aWFsX29w
ZW47CisJaW50IHNpZ2V4aXQsIGluaXRpYWxfb3BlbjsKIAljaGFyICpmbmFtZTsKIAlzdHJ1Y3Qg
dHJ1c3NpbmZvICp0cnVzc2luZm87CiAJY2hhciAqc2lnbmFtZTsKIAotCWluX2V4ZWMgPSAwOwog
CXNpZ2V4aXQgPSAwOwogCWZuYW1lID0gTlVMTDsKIAlpbml0aWFsX29wZW4gPSAxOwpAQCAtMTg0
LDkgKzE3NywxMiBAQAogCWlmICh0cnVzc2luZm8gPT0gTlVMTCkKIAkJZXJyeCgxLCAibWFsbG9j
KCkgZmFpbGVkIik7CiAJYnplcm8odHJ1c3NpbmZvLCBzaXplb2Yoc3RydWN0IHRydXNzaW5mbykp
OworCQogCXRydXNzaW5mby0+b3V0ZmlsZSA9IHN0ZGVycjsKIAl0cnVzc2luZm8tPnN0cnNpemUg
PSAzMjsKLQorCXRydXNzaW5mby0+cHJfd2h5ID0gU19OT05FOworCXRydXNzaW5mby0+Y3VydGhy
ZWFkID0gTlVMTDsKKwlTTElTVF9JTklUKCZ0cnVzc2luZm8tPnRocmVhZGxpc3QpOwogCXdoaWxl
ICgoYyA9IGdldG9wdChhYywgYXYsICJwOm86ZmFlZERzOlMiKSkgIT0gLTEpIHsKIAkJc3dpdGNo
IChjKSB7CiAJCWNhc2UgJ3AnOgkvKiBzcGVjaWZpZWQgcGlkICovCkBAIC0yNDUsNiArMjQxLDcg
QEAKIAkJc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOwogCQlzaWduYWwoU0lHUVVJVCwgU0lHX0lH
Tik7CiAJfSBlbHNlIHsKKwkJc3RhcnRfdHJhY2luZyh0cnVzc2luZm8tPnBpZCk7CiAJCXNpZ25h
bChTSUdJTlQsIHJlc3RvcmVfcHJvYyk7CiAJCXNpZ25hbChTSUdURVJNLCByZXN0b3JlX3Byb2Mp
OwogCQlzaWduYWwoU0lHUVVJVCwgcmVzdG9yZV9wcm9jKTsKQEAgLTI1NywxOCArMjU0LDkgQEAK
IAkgKi8KIAogU1RBUlRfVFJBQ0U6Ci0JUHJvY2ZkID0gc3RhcnRfdHJhY2luZygKLQkgICAgdHJ1
c3NpbmZvLT5waWQsIGluaXRpYWxfb3BlbiwKLQkgICAgU19FWEVDIHwgU19TQ0UgfCBTX1NDWCB8
IFNfQ09SRSB8IFNfRVhJVCB8Ci0JICAgICgodHJ1c3NpbmZvLT5mbGFncyAmIE5PU0lHUykgPyAw
IDogU19TSUcpLAotCSAgICAoKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykgPyBQRl9G
T1JLIDogMCkpOworCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7CisKIAlpbml0aWFsX29w
ZW4gPSAwOwotCWlmIChQcm9jZmQgPT0gLTEpCi0JCXJldHVybiAoMCk7Ci0KLQlwZnMud2h5ID0g
MDsKLQotCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7CiAJLyoKIAkgKiBBdCB0aGlzIHBv
aW50LCBpdCdzIGEgc2ltcGxlIGxvb3AsIHdhaXRpbmcgZm9yIHRoZSBwcm9jZXNzIHRvCiAJICog
c3RvcCwgZmluZGluZyBvdXQgd2h5LCBwcmludGluZyBvdXQgd2h5LCBhbmQgdGhlbiBjb250aW51
aW5nIGl0LgpAQCAtMjc4LDExOCArMjY2LDkyIEBACiAJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFM
VElNRSwgJnRydXNzaW5mby0+c3RhcnRfdGltZSk7CiAKIAlkbyB7Ci0JCWludCB2YWwgPSAwOwog
CQlzdHJ1Y3QgdGltZXNwZWMgdGltZWRpZmY7CisJCXdhaXRldmVudCh0cnVzc2luZm8pOwogCi0J
CWlmIChpb2N0bChQcm9jZmQsIFBJT0NXQUlULCAmcGZzKSA9PSAtMSkKLQkJCXdhcm4oIlBJT0NX
QUlUIHRvcCBvZiBsb29wIik7Ci0JCWVsc2UgewotCQkJc3dpdGNoKGkgPSBwZnMud2h5KSB7Ci0J
CQljYXNlIFNfU0NFOgotCQkJCWZ1bmNzLT5lbnRlcl9zeXNjYWxsKHRydXNzaW5mbywgcGZzLnZh
bCk7Ci0JCQkJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKLQkJCQkgICAgJnRydXNzaW5m
by0+YmVmb3JlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU19TQ1g6Ci0JCQkJY2xvY2tfZ2V0dGlt
ZShDTE9DS19SRUFMVElNRSwKLQkJCQkgICAgJnRydXNzaW5mby0+YWZ0ZXIpOwotCQkJCS8qCi0J
CQkJICogVGhpcyBpcyBzbyB3ZSBkb24ndCBnZXQgdHdvIG1lc3NhZ2VzIGZvcgotCQkJCSAqIGFu
IGV4ZWMgLS0gb25lIGZvciB0aGUgU19FWEVDLCBhbmQgb25lIGZvcgotCQkJCSAqIHRoZSBzeXNj
YWxsIGV4aXQuICBJdCBhbHNvLCBjb252ZW5pZW50bHksCi0JCQkJICogZW5zdXJlcyB0aGF0IHRo
ZSBmaXJzdCBtZXNzYWdlIHByaW50ZWQgb3V0Ci0JCQkJICogaXNuJ3QgdGhlIHJldHVybi1mcm9t
LXN5c2NhbGwgdXNlZCB0bwotCQkJCSAqIGNyZWF0ZSB0aGUgcHJvY2Vzcy4KLQkJCQkgKi8KLQkJ
CQlpZiAoaW5fZXhlYykgewotCQkJCQlpbl9leGVjID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQor
CQlzd2l0Y2goaSA9IHRydXNzaW5mby0+cHJfd2h5KSB7CisJCWNhc2UgU19TQ0U6CisJCQlmdW5j
cy0+ZW50ZXJfc3lzY2FsbCh0cnVzc2luZm8sIE1BWEFSR1MpOworCQkJY2xvY2tfZ2V0dGltZShD
TE9DS19SRUFMVElNRSwKKwkJCSAgICAmdHJ1c3NpbmZvLT5iZWZvcmUpOworCQkJYnJlYWs7CisJ
CWNhc2UgU19TQ1g6CisJCQljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLAorCQkJICAgICZ0
cnVzc2luZm8tPmFmdGVyKTsKIAotCQkJCWlmICh0cnVzc2luZm8tPmluX2ZvcmsgJiYKLQkJCQkg
ICAgKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykpIHsKLQkJCQkJaW50IGNoaWxkcGlk
OworCQkJaWYgKHRydXNzaW5mby0+Y3VydGhyZWFkLT5pbl9mb3JrICYmCisJCQkgICAgKHRydXNz
aW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykpIHsKKwkJCQlpbnQgY2hpbGRwaWQ7CiAKLQkJCQkJ
dHJ1c3NpbmZvLT5pbl9mb3JrID0gMDsKLQkJCQkJY2hpbGRwaWQgPQotCQkJCQkgICAgZnVuY3Mt
PmV4aXRfc3lzY2FsbCh0cnVzc2luZm8sCi0JCQkJCQlwZnMudmFsKTsKKwkJCQl0cnVzc2luZm8t
PmN1cnRocmVhZC0+aW5fZm9yayA9IDA7CisJCQkJY2hpbGRwaWQgPQorCQkJCSAgICBmdW5jcy0+
ZXhpdF9zeXNjYWxsKHRydXNzaW5mbywKKwkJCQkJdHJ1c3NpbmZvLT5wcl9kYXRhKTsKIAotCQkJ
CQkvKgotCQkJCQkgKiBGb3JrIGEgbmV3IGNvcHkgb2Ygb3Vyc2VsZiB0byB0cmFjZQotCQkJCQkg
KiB0aGUgY2hpbGQgb2YgdGhlIG9yaWdpbmFsIHRyYWNlZAotCQkJCQkgKiBwcm9jZXNzLgotCQkJ
CQkgKi8KLQkJCQkJaWYgKGZvcmsoKSA9PSAwKSB7Ci0JCQkJCQl0cnVzc2luZm8tPnBpZCA9IGNo
aWxkcGlkOwotCQkJCQkJZ290byBTVEFSVF9UUkFDRTsKLQkJCQkJfQotCQkJCQlicmVhazsKKwkJ
CQkvKgorCQkJCSAqIEZvcmsgYSBuZXcgY29weSBvZiBvdXJzZWxmIHRvIHRyYWNlCisJCQkJICog
dGhlIGNoaWxkIG9mIHRoZSBvcmlnaW5hbCB0cmFjZWQKKwkJCQkgKiBwcm9jZXNzLgorCQkJCSAq
LworCQkJCWlmIChmb3JrKCkgPT0gMCkgeworCQkJCQl0cnVzc2luZm8tPnBpZCA9IGNoaWxkcGlk
OworCQkJCQlzdGFydF90cmFjaW5nKHRydXNzaW5mby0+cGlkKTsKKwkJCQkJZ290byBTVEFSVF9U
UkFDRTsKIAkJCQl9Ci0JCQkJZnVuY3MtPmV4aXRfc3lzY2FsbCh0cnVzc2luZm8sIHBmcy52YWwp
OwogCQkJCWJyZWFrOwotCQkJY2FzZSBTX1NJRzoKLQkJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAm
IEZPTExPV0ZPUktTKQotCQkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiU1ZDogIiwK
LQkJCQkJICAgIHRydXNzaW5mby0+cGlkKTsKLQkJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIEFC
U09MVVRFVElNRVNUQU1QUykgewotCQkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+YWZ0ZXIs
Ci0JCQkJCSAgICAmdHJ1c3NpbmZvLT5zdGFydF90aW1lLCAmdGltZWRpZmYpOwotCQkJCQlmcHJp
bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAotCQkJCQkgICAgKGxvbmcpdGlt
ZWRpZmYudHZfc2VjLAotCQkJCQkgICAgdGltZWRpZmYudHZfbnNlYyk7Ci0JCQkJfQotCQkJCWlm
ICh0cnVzc2luZm8tPmZsYWdzICYgUkVMQVRJVkVUSU1FU1RBTVBTKSB7Ci0JCQkJCXRpbWVzcGVj
c3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKLQkJCQkJICAgICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRp
bWVkaWZmKTsKLQkJCQkJZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwK
LQkJCQkJICAgIChsb25nKXRpbWVkaWZmLnR2X3NlYywKLQkJCQkJICAgIHRpbWVkaWZmLnR2X25z
ZWMpOwotCQkJCX0KLQkJCQlzaWduYW1lID0gc3Ryc2lnKHBmcy52YWwpOwotCQkJCWZwcmludGYo
dHJ1c3NpbmZvLT5vdXRmaWxlLAotCQkJCSAgICAiU0lHTkFMICVsdSAoJXMpXG4iLCBwZnMudmFs
LAotCQkJCSAgICBzaWduYW1lID09IE5VTEwgPyAiPyIgOiBzaWduYW1lKTsKLQkJCQlmcmVlKHNp
Z25hbWUpOwotCQkJCXNpZ2V4aXQgPSBwZnMudmFsOworCQkJfQorCQkJZnVuY3MtPmV4aXRfc3lz
Y2FsbCh0cnVzc2luZm8sIE1BWEFSR1MpOworCQkJYnJlYWs7CisJCWNhc2UgU19TSUc6CisJCQlp
ZiAodHJ1c3NpbmZvLT5mbGFncyAmIE5PU0lHUykKIAkJCQlicmVhazsKLQkJCWNhc2UgU19FWElU
OgotCQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgRk9MTE9XRk9SS1MpCi0JCQkJCWZwcmludGYo
dHJ1c3NpbmZvLT5vdXRmaWxlLCAiJTVkOiAiLAotCQkJCQkgICAgdHJ1c3NpbmZvLT5waWQpOwot
CQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgQUJTT0xVVEVUSU1FU1RBTVBTKSB7Ci0JCQkJCXRp
bWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKLQkJCQkJICAgICZ0cnVzc2luZm8tPnN0YXJ0
X3RpbWUsICZ0aW1lZGlmZik7Ci0JCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJWxk
LiUwOWxkICIsCi0JCQkJCSAgICAobG9uZyl0aW1lZGlmZi50dl9zZWMsCi0JCQkJCSAgICB0aW1l
ZGlmZi50dl9uc2VjKTsKLQkJCQl9Ci0JCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBSRUxBVElW
RVRJTUVTVEFNUFMpIHsKLQkJCQkgIHRpbWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKLQkJ
CQkgICAgICAmdHJ1c3NpbmZvLT5iZWZvcmUsICZ0aW1lZGlmZik7Ci0JCQkJICBmcHJpbnRmKHRy
dXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAotCQkJCSAgICAobG9uZyl0aW1lZGlmZi50
dl9zZWMsIHRpbWVkaWZmLnR2X25zZWMpOwotCQkJCX0KLQkJCQlmcHJpbnRmKHRydXNzaW5mby0+
b3V0ZmlsZSwKLQkJCQkgICAgInByb2Nlc3MgZXhpdCwgcnZhbCA9ICVsdVxuIiwgcGZzLnZhbCk7
Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNfRVhFQzoKLQkJCQlmdW5jcyA9IHNldF9ldHlwZSh0cnVz
c2luZm8pOwotCQkJCWluX2V4ZWMgPSAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlm
cHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwKLQkJCQkgICAgIlByb2Nlc3Mgc3RvcHBlZCBiZWNh
dXNlIG9mOiAgJWRcbiIsIGkpOwotCQkJCWJyZWFrOworCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3Mg
JiBGT0xMT1dGT1JLUykKKwkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiU1ZDogIiwK
KwkJCQkgICAgdHJ1c3NpbmZvLT5waWQpOworCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBBQlNP
TFVURVRJTUVTVEFNUFMpIHsKKwkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+YWZ0ZXIsCisJ
CQkJICAgICZ0cnVzc2luZm8tPnN0YXJ0X3RpbWUsICZ0aW1lZGlmZik7CisJCQkJZnByaW50Zih0
cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCQkgICAgKGxvbmcpdGltZWRpZmYu
dHZfc2VjLAorCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKKwkJCX0KKwkJCWlmICh0cnVzc2lu
Zm8tPmZsYWdzICYgUkVMQVRJVkVUSU1FU1RBTVBTKSB7CisJCQkJdGltZXNwZWNzdWJ0KCZ0cnVz
c2luZm8tPmFmdGVyLAorCQkJCSAgICAmdHJ1c3NpbmZvLT5iZWZvcmUsICZ0aW1lZGlmZik7CisJ
CQkJZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCQkgICAgKGxv
bmcpdGltZWRpZmYudHZfc2VjLAorCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKKwkJCX0KKwkJ
CXNpZ25hbWUgPSBzdHJzaWcodHJ1c3NpbmZvLT5wcl9kYXRhKTsKKwkJCWZwcmludGYodHJ1c3Np
bmZvLT5vdXRmaWxlLAorCQkJICAgICJTSUdOQUwgJXUgKCVzKVxuIiwgdHJ1c3NpbmZvLT5wcl9k
YXRhLAorCQkJICAgIHNpZ25hbWUgPT0gTlVMTCA/ICI/IiA6IHNpZ25hbWUpOworCQkJZnJlZShz
aWduYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIFNfRVhJVDoKKwkJCWlmICh0cnVzc2luZm8tPmZs
YWdzICYgRk9MTE9XRk9SS1MpCisJCQkJZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlNWQ6
ICIsCisJCQkJICAgIHRydXNzaW5mby0+cGlkKTsKKwkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYg
QUJTT0xVVEVUSU1FU1RBTVBTKSB7CisJCQkJdGltZXNwZWNzdWJ0KCZ0cnVzc2luZm8tPmFmdGVy
LAorCQkJCSAgICAmdHJ1c3NpbmZvLT5zdGFydF90aW1lLCAmdGltZWRpZmYpOworCQkJCWZwcmlu
dGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCisJCQkJICAgIChsb25nKXRpbWVk
aWZmLnR2X3NlYywKKwkJCQkgICAgdGltZWRpZmYudHZfbnNlYyk7CisJCQl9CisJCQlpZiAodHJ1
c3NpbmZvLT5mbGFncyAmIFJFTEFUSVZFVElNRVNUQU1QUykgeworCQkJICB0aW1lc3BlY3N1YnQo
JnRydXNzaW5mby0+YWZ0ZXIsCisJCQkgICAgICAmdHJ1c3NpbmZvLT5iZWZvcmUsICZ0aW1lZGlm
Zik7CisJCQkgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCisJCQkg
ICAgKGxvbmcpdGltZWRpZmYudHZfc2VjLCB0aW1lZGlmZi50dl9uc2VjKTsKIAkJCX0KKwkJCWZw
cmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLAorCQkJICAgICJwcm9jZXNzIGV4aXQsIHJ2YWwgPSAl
dVxuIiwgdHJ1c3NpbmZvLT5wcl9kYXRhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJl
YWs7CiAJCX0KLQkJaWYgKGlvY3RsKFByb2NmZCwgUElPQ0NPTlQsIHZhbCkgPT0gLTEpIHsKLQkJ
CWlmIChraWxsKHRydXNzaW5mby0+cGlkLCAwKSA9PSAtMSAmJiBlcnJubyA9PSBFU1JDSCkKLQkJ
CQlicmVhazsKLQkJCWVsc2UKLQkJCQl3YXJuKCJQSU9DQ09OVCIpOwotCQl9Ci0JfSB3aGlsZSAo
cGZzLndoeSAhPSBTX0VYSVQpOworCX0gd2hpbGUgKHRydXNzaW5mby0+cHJfd2h5ICE9IFNfRVhJ
VCk7CiAJZmZsdXNoKHRydXNzaW5mby0+b3V0ZmlsZSk7CiAJaWYgKHNpZ2V4aXQpIHsKIAkJc3Ry
dWN0IHJsaW1pdCBybHA7CkBAIC00MDAsNSArMzYyLDYgQEAKIAkJKHZvaWQpIHNpZ25hbChzaWdl
eGl0LCBTSUdfREZMKTsKIAkJKHZvaWQpIGtpbGwoZ2V0cGlkKCksIHNpZ2V4aXQpOwogCX0KKwkK
IAlyZXR1cm4gKDApOwogfQo9PT09IC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vzci5iaW4v
dHJ1c3MvcG93ZXJwYy1mYnNkLmMjMSAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3Uv
dHJ1c3MvdXNyLmJpbi90cnVzcy9wb3dlcnBjLWZic2QuYyM0ICh0ZXh0K2tvKSA9PT09IGNvbnRl
bnQKQEAgLTQxLDggKzQxLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5j
bHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1ZGUgPHN5
cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5jbHVkZSA8bWFjaGlu
ZS9yZWcuaD4KQEAgLTYyLDcgKzYxLDYgQEAKICNpbmNsdWRlICJzeXNjYWxsLmgiCiAjaW5jbHVk
ZSAiZXh0ZXJuLmgiCiAKLXN0YXRpYyBpbnQgZmQgPSAtMTsKIHN0YXRpYyBpbnQgY3BpZCA9IC0x
OwogCiAjaW5jbHVkZSAic3lzY2FsbHMuaCIKQEAgLTEyMCwxOSArMTE4LDEwIEBACiAgIHVuc2ln
bmVkIGludCByZWdhcmdzOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAKLSAgaWYgKGZkID09IC0x
IHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVk
L3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAg
ICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0g
Q0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNwaWQgPSB0cnVzc2luZm8tPmN1cnRocmVh
ZC0+dGlkOwogCiAgIGNsZWFyX2ZzYygpOwotICBsc2VlayhmZCwgMEwsIDApOwotICBpZiAocmVh
ZChmZCwgJnJlZ3MsIHNpemVvZihyZWdzKSkgIT0gc2l6ZW9mKHJlZ3MpKSB7CisgIGlmIChwdHJh
Y2UoUFRfR0VUUkVHUywgY3BpZCwgKGNhZGRyX3QpJnJlZ3MsIDApIDwgMCkgewogICAgIGZwcmlu
dGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIFJFQUQgUkVHSVNURVJTIC0tXG4iKTsK
ICAgICByZXR1cm47CiAgIH0KQEAgLTE2Nyw3ICsxNTYsNyBAQAogICAgIHx8ICFzdHJjbXAoZnNj
Lm5hbWUsICJyZm9yayIpCiAgICAgfHwgIXN0cmNtcChmc2MubmFtZSwgInZmb3JrIikpKSkKICAg
ewotICAgIHRydXNzaW5mby0+aW5fZm9yayA9IDE7CisgICAgdHJ1c3NpbmZvLT5jdXJ0aHJlYWQt
PmluX2ZvcmsgPSAxOwogICB9CiAKICAgaWYgKG5hcmdzID09IDApCkBAIC0xNzYsOSArMTY1LDE2
IEBACiAgIGZzYy5hcmdzID0gbWFsbG9jKCgxK25hcmdzKSAqIHNpemVvZih1bnNpZ25lZCBsb25n
KSk7CiAKICAgaWYgKG5hcmdzID4gcmVnYXJncykgeworICAgIHN0cnVjdCBwdHJhY2VfaW9fZGVz
YyBpb3JlcXVlc3Q7CiAgICAgbWVtbW92ZSgmZnNjLmFyZ3NbMF0sIGFyZ3MsIHJlZ2FyZ3MgKiBz
aXplb2YoZnNjLmFyZ3NbMF0pKTsKLSAgICBsc2VlayhQcm9jZmQsIHJlZ3MuZml4cmVnWzFdICsg
OCwgU0VFS19TRVQpOwotICAgIHJlYWQoUHJvY2ZkLCAmZnNjLmFyZ3NbcmVnYXJnc10sIChuYXJn
cyAtIHJlZ2FyZ3MpICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CisKKyAgICBpb3JlcXVlc3QucGlv
ZF9vcCA9IFBJT0RfUkVBRF9EOworICAgIGlvcmVxdWVzdC5waW9kX29mZnMgPSAodm9pZCAqKShy
ZWdzLmZpeHJlZ1sxXSArIDgpOworICAgIGlvcmVxdWVzdC5waW9kX2FkZHIgPSAmZnNjLmFyZ3Nb
cmVnYXJnc107CisgICAgaW9yZXF1ZXN0LnBpb2RfbGVuID0gKG5hcmdzIC0gcmVnYXJncykgKiBz
aXplb2YoZnNjLmFyZ3NbMF0pOworICAgIHB0cmFjZShQVF9JTywgY3BpZCwgKGNhZGRyX3QpJmlv
cmVxdWVzdCwgMCk7CisgICAgaWYgKGlvcmVxdWVzdC5waW9kX2xlbiA9PSAwKQorICAgICAgIHJl
dHVybjsKICAgfSBlbHNlIHsKICAgICBtZW1tb3ZlKCZmc2MuYXJnc1swXSwgYXJncywgbmFyZ3Mg
KiBzaXplb2YoZnNjLmFyZ3NbMF0pKTsKICAgfQpAQCAtMjIwLDcgKzIxNiw3IEBACiAJICAgICAg
aSA8IChmc2MubmFyZ3MgLSAxKSA/ICIsIiA6ICIiKTsKICNlbmRpZgogICAgICAgaWYgKHNjICYm
ICEoc2MtPmFyZ3NbaV0udHlwZSAmIE9VVCkpIHsKLQlmc2Muc19hcmdzW2ldID0gcHJpbnRfYXJn
KFByb2NmZCwgJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKKwlmc2Muc19h
cmdzW2ldID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNzaW5mbyk7
CiAgICAgICB9CiAgICAgfQogI2lmIERFQlVHCkBAIC0yNzUsMjUgKzI3MSwxNSBAQAogbG9uZwog
cG93ZXJwY19zeXNjYWxsX2V4aXQoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgc3lz
Y2FsbF9udW0gX191bnVzZWQpCiB7Ci0gIGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdz
OwogICBsb25nIHJldHZhbDsKICAgaW50IGk7CiAgIGludCBlcnJvcnA7CiAgIHN0cnVjdCBzeXNj
YWxsICpzYzsKIAotICBpZiAoZmQgPT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkgewot
ICAgIHNwcmludGYoYnVmLCAiL3Byb2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAgICBm
ZCA9IG9wZW4oYnVmLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICBmcHJp
bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBPUEVOIFJFR0lTVEVSUyAtLVxuIik7
Ci0gICAgICByZXR1cm4gKC0xKTsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwot
ICB9CisgIGNwaWQgPSB0cnVzc2luZm8tPmN1cnRocmVhZC0+dGlkOwogCi0gIGxzZWVrKGZkLCAw
TCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVn
cykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkg
PCAwKSB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICJcbiIpOwogICAgIHJldHVy
biAoLTEpOwogICB9CkBAIC0zMzIsNyArMzE4LDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmlu
dGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UK
LQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2
YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFy
Z3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0K
ICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9zZXR1
cC5jIzExICh0ZXh0K2tvKSAtIC8vZGVwb3QvdXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3Ry
dXNzL3NldHVwLmMjNyAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC0zOCwxMSArMzgsMTIgQEAK
ICAqLwogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0j
aW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHNpZ25h
bC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC01MSwxMCArNTIsMTIgQEAKICNpbmNsdWRlIDx0
aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgor
CiAjaW5jbHVkZSAidHJ1c3MuaCIKICNpbmNsdWRlICJleHRlcm4uaCIKIAotc3RhdGljIGludCBl
dmZsYWdzID0gMDsKK3N0YXRpYyBpbnQgY2hpbGRfcGlkOwogCiAvKgogICogc2V0dXBfYW5kX3dh
aXQoKSBpcyBjYWxsZWQgdG8gc3RhcnQgYSBwcm9jZXNzLiAgQWxsIGl0IHJlYWxseSBkb2VzCkBA
IC02Niw3NSArNjksMjggQEAKIGludAogc2V0dXBfYW5kX3dhaXQoY2hhciAqY29tbWFuZFtdKQog
ewotCXN0cnVjdCBwcm9jZnNfc3RhdHVzIHBmczsKLQljaGFyIGJ1ZlszMl07Ci0JaW50IGZkOwog
CWludCBwaWQ7Ci0JaW50IGZsYWdzOwotCWludCBsb29wOworCWludCB3YWl0dmFsOwogCi0JcGlk
ID0gZm9yaygpOworCXBpZCA9IHZmb3JrKCk7CiAJaWYgKHBpZCA9PSAtMSkgewogCQllcnIoMSwg
ImZvcmsgZmFpbGVkIik7CiAJfQogCWlmIChwaWQgPT0gMCkgewkvKiBDaGlsZCAqLwotCQlpbnQg
bWFzayA9IFNfRVhFQyB8IFNfRVhJVDsKLQkJZmQgPSBvcGVuKCIvcHJvYy9jdXJwcm9jL21lbSIs
IE9fV1JPTkxZKTsKLQkJaWYgKGZkID09IC0xKQotCQkJZXJyKDIsICJjYW5ub3Qgb3BlbiAvcHJv
Yy9jdXJwcm9jL21lbSIpOwotCQlmY250bChmZCwgRl9TRVRGRCwgMSk7Ci0JCWlmIChpb2N0bChm
ZCwgUElPQ0JJUywgbWFzaykgPT0gLTEpCi0JCQllcnIoMywgIlBJT0NCSVMiKTsKLQkJZmxhZ3Mg
PSBQRl9MSU5HRVI7Ci0JCS8qCi0JCSAqIFRoZSBQRl9MSU5HRVIgZmxhZyB0ZWxscyBwcm9jZnMg
bm90IHRvIHdha2UgdXAgdGhlCi0JCSAqIHByb2Nlc3Mgb24gbGFzdCBjbG9zZTsgbm9ybWFsbHks
IHRoaXMgaXMgdGhlIGJlaGF2aW91cgotCQkgKiB3ZSB3YW50LgotCQkgKi8KLQkJaWYgKGlvY3Rs
KGZkLCBQSU9DU0ZMLCBmbGFncykgPT0gLTEpCi0JCQl3YXJuKCJjYW5ub3Qgc2V0IFBGX0xJTkdF
UiIpOworCQlwdHJhY2UoUFRfVFJBQ0VfTUUsIDAsIDAsIDApOworCQlzZXRwZ2lkICgwLCAwKTsg
CiAJCWV4ZWN2cChjb21tYW5kWzBdLCBjb21tYW5kKTsKLQkJbWFzayA9IH4wOwotCQlpb2N0bChm
ZCwgUElPQ0JJQywgfjApOwotCQllcnIoNCwgImV4ZWN2cCAlcyIsIGNvbW1hbmRbMF0pOworCQll
cnIoMSwgImV4ZWN2cCAlcyIsIGNvbW1hbmRbMF0pOwogCX0KKwkKIAkvKiBPbmx5IGluIHRoZSBw
YXJlbnQgaGVyZSAqLwotCi0JaWYgKHdhaXRwaWQocGlkLCBOVUxMLCBXTk9IQU5HKSAhPSAwKSB7
Ci0JCS8qCi0JCSAqIFByb2Nlc3MgZXhpdGVkIGJlZm9yZSBpdCBnb3QgdG8gdXMgLS0gbWVhbmlu
ZyB0aGUgZXhlYyBmYWlsZWQKLQkJICogbWlzZXJhYmx5IC0tIHNvIHdlIGp1c3QgcXVpZXRseSBl
eGl0LgotCQkgKi8KLQkJZXhpdCgxKTsKKwlpZiAod2FpdHBpZChwaWQsICZ3YWl0dmFsLCAwKSA8
IC0xKSB7CisJCWVycigxLCAidW5leHBlY3Qgc3RvcCBpbiB3YWl0cGlkIik7CisJCXJldHVybiAw
OwogCX0KIAotCXNwcmludGYoYnVmLCAiL3Byb2MvJWQvbWVtIiwgcGlkKTsKLQotCS8qIFRyeSA2
IHRpbWVzIHRvIHRyYWNlIG91ciBjaGlsZCwgd2FpdGluZyAxLzIgc2Vjb25kIGVhY2ggdGltZSAq
LwotCWZvciAobG9vcD02IDs7IGxvb3AtLSkgewotCQlpZiAobG9vcCAhPSA2KQotCQkJdXNsZWVw
KDUwMDAwMCk7Ci0JCWlmICgoZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKSkgPT0gLTEpIHsKLQkJCWlm
IChsb29wID4gMCkKLQkJCQljb250aW51ZTsKLQkJCWVsc2UKLQkJCQllcnIoNSwgImNhbm5vdCBv
cGVuMSAlcyIsIGJ1Zik7Ci0JCX0KLQkJaWYgKGlvY3RsKGZkLCBQSU9DV0FJVCwgJnBmcykgPT0g
LTEpIHsKLQkJCWlmIChsb29wID49IDApCi0JCQkJY29udGludWU7Ci0JCQllbHNlCi0JCQkJZXJy
KDYsICJQSU9DV0FJVCIpOwotCQl9Ci0JCWlmIChwZnMud2h5ID09IFNfRVhJVCkgewotCQkJd2Fy
bngoInByb2Nlc3MgZXhpdGVkIGJlZm9yZSBleGVjJ2luZyIpOwotCQkJaW9jdGwoZmQsIFBJT0ND
T05ULCAwKTsKLQkJCXdhaXQoMCk7Ci0JCQlleGl0KDcpOwotCQl9IGVsc2UKLQkJCWJyZWFrOwot
CX0KLQljbG9zZShmZCk7CisJY2hpbGRfcGlkID0gcGlkOworCQogCXJldHVybiAocGlkKTsKIH0K
IApAQCAtMTQ1LDQ1ICsxMDEsMjQgQEAKICAqLwogCiBpbnQKLXN0YXJ0X3RyYWNpbmcoaW50IHBp
ZCwgaW50IGZhaWxpc2ZhdGFsLCBpbnQgZXZlbnRmbGFncywgaW50IGZsYWdzKQorc3RhcnRfdHJh
Y2luZyhpbnQgcGlkKQogewotCWludCBmZDsKLQljaGFyIGJ1ZlszMl07Ci0Jc3RydWN0IHByb2Nm
c19zdGF0dXMgdG1wOworCWludCB3YWl0dmFsOworCWludCByZXQ7CisJaW50IHJldHJ5ID0gMTA7
CiAKLQlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL21lbSIsIHBpZCk7Ci0JLyogdXNsZWVwKDUwMDAw
MCk7ICovCisJZG8geworCQlyZXQgPSBwdHJhY2UoUFRfQVRUQUNILCBwaWQsIE5VTEwsIDApOwor
CQl1c2xlZXAoMjAwKTsKKwl9IHdoaWxlKHJldCAmJiByZXRyeS0tID4gMCk7CisJaWYgKHJldCkK
KwkJZXJyKDEsICJjYW4gbm90IGF0dGFjaCB0byB0YXJnZXQgcHJvY2VzcyIpOwogCi0JZmQgPSBv
cGVuKGJ1ZiwgT19SRFdSKTsKLQlpZiAoZmQgPT0gLTEpIHsKLQkJLyoKLQkJICogVGhlIHByb2Nl
c3MgbWF5IGhhdmUgcnVuIGF3YXkgYmVmb3JlIHdlIGNvdWxkIHN0YXJ0IC0tIHRoaXMKLQkJICog
aGFwcGVucyB3aXRoIFNVR0lEIHByb2dyYW1zLiAgU28gd2UgbmVlZCB0byBzZWUgaWYgaXQgc3Rp
bGwKLQkJICogZXhpc3RzIGJlZm9yZSB3ZSBjb21wbGFpbiBiaXR0ZXJseS4KLQkJICovCi0JCWlm
ICghZmFpbGlzZmF0YWwgJiYga2lsbChwaWQsIDApID09IC0xKQotCQkJcmV0dXJuICgtMSk7Ci0J
CWVycig4LCAiY2Fubm90IG9wZW4yICVzIiwgYnVmKTsKLQl9CisJY2hpbGRfcGlkID0gcGlkOwkK
KwlpZiAod2FpdHBpZChwaWQsICZ3YWl0dmFsLCAwKSA8IC0xKSAKKwkJZXJyKDEsICJVbmV4cGVj
dCBzdG9wIGluIHdhaXRwaWQiKTsKIAotCWlmIChpb2N0bChmZCwgUElPQ1NUQVRVUywgJnRtcCkg
PT0gLTEpIHsKLQkJZXJyKDEwLCAiY2Fubm90IGdldCBwcm9jZnMgc3RhdHVzIHN0cnVjdCIpOwot
CX0KLQlldmZsYWdzID0gdG1wLmV2ZW50czsKLQotCWlmIChpb2N0bChmZCwgUElPQ0JJUywgZXZl
bnRmbGFncykgPT0gLTEpCi0JCWVycig5LCAiY2Fubm90IHNldCBwcm9jZnMgZXZlbnQgYml0IG1h
c2siKTsKLQotCS8qCi0JICogVGhpcyBjbGVhcnMgdGhlIFBGX0xJTkdFUiBzZXQgYWJvdmUgaW4g
c2V0dXBfYW5kX3dhaXQoKTsKLQkgKiBpZiB0cnVzcyBoYXBwZW5zIHRvIGRpZSBiZWZvcmUgdGhp
cywgdGhlbiB0aGUgcHJvY2VzcwotCSAqIG5lZWRzIHRvIGJlIHdva2VuIHVwIHZpYSBwcm9jY3Rs
LgotCSAqLwotCi0JaWYgKGlvY3RsKGZkLCBQSU9DU0ZMLCBmbGFncykgPT0gLTEpCi0JCXdhcm4o
ImNhbm5vdCBjbGVhciBQRl9MSU5HRVIiKTsKLQotCXJldHVybiAoZmQpOworCXJldHVybiAoMCk7
CiB9CiAKIC8qCkBAIC0xOTMsMTAgKzEyOCw3NCBAQAogICogcHJvY2Vzcy4KICAqLwogdm9pZAot
cmVzdG9yZV9wcm9jKGludCBzaWdubyBfX3VudXNlZCkgeworcmVzdG9yZV9wcm9jKGludCBzaWdu
byBfX3VudXNlZCkKK3sKKwlpbnQgd2FpdHZhbDsKKwkKKwlraWxsKGNoaWxkX3BpZCwgU0lHU1RP
UCk7CisJaWYgKHdhaXRwaWQoY2hpbGRfcGlkLCAmd2FpdHZhbCwgMCkgPCAtMSkKKwkJZXJyKDEs
ICJVbmV4cGVjdGVkIHN0b3AgaW4gd2FpdHBpZCIpOwogCi0JaW9jdGwoUHJvY2ZkLCBQSU9DQklD
LCB+MCk7Ci0JaWYgKGV2ZmxhZ3MpCi0JCWlvY3RsKFByb2NmZCwgUElPQ0JJUywgZXZmbGFncyk7
CisJaWYgKHB0cmFjZShQVF9ERVRBQ0gsIGNoaWxkX3BpZCwgKGNhZGRyX3QpMSwgMCkgPCAwKQor
CQllcnIoMSwgIkNhbiBub3QgZGV0YWNoIHRoZSBwcm9jZXNzIik7CisJCisJa2lsbChjaGlsZF9w
aWQsIFNJR0NPTlQpOwogCWV4aXQoMCk7CiB9CisKK3ZvaWQgZmluZF90aHJlYWQoc3RydWN0IHRy
dXNzaW5mbyAqaW5mbywgbHdwaWRfdCBsd3BpZCkKK3sKKwlpbmZvLT5jdXJ0aHJlYWQgPSBOVUxM
OworCXN0cnVjdCB0aHJlYWRpbmZvICpucDsKKwlTTElTVF9GT1JFQUNIKG5wLCAmaW5mby0+dGhy
ZWFkbGlzdCwgZW50cmllcykgeworCWlmIChucC0+dGlkID09IGx3cGlkKSB7CisJCWluZm8tPmN1
cnRocmVhZCA9IG5wOworCQlyZXR1cm47CisJCX0KKwl9CisKKwlucCA9IChzdHJ1Y3QgdGhyZWFk
aW5mbyAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZGluZm8pKTsKKwlpZiAobnAgPT0gTlVM
TCkKKwkJZXJyeCgxLCAibWFsbG9jKCkgZmFpbGVkIik7CisJbnAtPnRpZCA9IGx3cGlkOworCW5w
LT5pbl9mb3JrID0gMDsKKwlucC0+aW5fc3lzY2FsbCA9IDA7CisJU0xJU1RfSU5TRVJUX0hFQUQo
JmluZm8tPnRocmVhZGxpc3QsIG5wLCBlbnRyaWVzKTsKKwlpbmZvLT5jdXJ0aHJlYWQgPSBucDsK
K30KKwordm9pZCB3YWl0ZXZlbnQoc3RydWN0IHRydXNzaW5mbyAqaW5mbykKK3sKKwlpbnQgd2Fp
dHZhbDsKKwkKKwlwdHJhY2UoUFRfU1lTQ0FMTCwgaW5mby0+cGlkLCAoY2FkZHJfdCkxLCAwKTsK
KworCWlmICh3YWl0cGlkKGluZm8tPnBpZCwgJndhaXR2YWwsIDApIDwgLTEpIHsKKwkJZXJyKDEs
ICJVbmV4cGVjdGVkIHN0b3AgaW4gd2FpdHBpZCIpOworCX0KKwkKKwlpZiAoV0lGQ09OVElOVUVE
KHdhaXR2YWwpKSB7CisJCWluZm8tPnByX3doeSA9IFNfTk9ORTsKKwkJcmV0dXJuOworCX0KKwlp
ZiAoV0lGRVhJVEVEKHdhaXR2YWwpKSB7CisJCWluZm8tPnByX3doeSA9IFNfRVhJVDsKKwkJaW5m
by0+cHJfZGF0YSA9IFdFWElUU1RBVFVTKHdhaXR2YWwpOworCQlyZXR1cm47CisJfQorCWlmIChX
SUZTVE9QUEVEKHdhaXR2YWwpIHx8IChXSUZTSUdOQUxFRCh3YWl0dmFsKSkpIHsKKwkJc3RydWN0
IHB0cmFjZV9sd3BpbmZvIGx3cGluZm87CisJCXB0cmFjZShQVF9MV1BJTkZPLCBpbmZvLT5waWQs
IChjYWRkcl90KSZsd3BpbmZvLCBzaXplb2YobHdwaW5mbykpOwkKKwkJZmluZF90aHJlYWQoaW5m
bywgbHdwaW5mby5wbF9sd3BpZCk7CisJCXN3aXRjaChXU1RPUFNJRyh3YWl0dmFsKSkgeworCQlj
YXNlIFNJR1RSQVA6CisJCQlpbmZvLT5wcl93aHkgPSBpbmZvLT5jdXJ0aHJlYWQtPmluX3N5c2Nh
bGw/U19TQ1g6U19TQ0U7CisJCQlpbmZvLT5jdXJ0aHJlYWQtPmluX3N5c2NhbGwgPSAxIC0gaW5m
by0+Y3VydGhyZWFkLT5pbl9zeXNjYWxsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZv
LT5wcl93aHkgPSBTX1NJRzsKKwkJCWluZm8tPnByX2RhdGEgPSBXU1RPUFNJRyh3YWl0dmFsKTsK
KwkJCWJyZWFrOworCQl9CisJfQorfQo9PT09IC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vz
ci5iaW4vdHJ1c3Mvc3BhcmM2NC1mYnNkLmMjOSAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93
YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9zcGFyYzY0LWZic2QuYyMzICh0ZXh0K2tvKSA9PT09
IGNvbnRlbnQKQEAgLTQ1LDggKzQ1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1
ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5jbHVkZSA8
bWFjaGluZS9mcmFtZS5oPgpAQCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUgInN5c2NhbGwuaCIK
ICNpbmNsdWRlICJleHRlcm4uaCIKIAotc3RhdGljIGludCBmZCA9IC0xOwogc3RhdGljIGludCBj
cGlkID0gLTE7CiAKICNpbmNsdWRlICJzeXNjYWxscy5oIgpAQCAtMTE4LDI2ICsxMTYsMTggQEAK
IAogdm9pZAogc3BhcmM2NF9zeXNjYWxsX2VudHJ5KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5m
bywgaW50IG5hcmdzKSB7Ci0gIGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBp
bnQgc3lzY2FsbF9udW07CiAgIGludCBpOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAgIGludCBp
bmRpciA9IDA7CS8qIGluZGlyZWN0IHN5c3RlbSBjYWxsICovCisgIHN0cnVjdCBwdHJhY2VfaW9f
ZGVzYyBpb3JlcXVlc3Q7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNw
aWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7
Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAg
IGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0t
XG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwot
ICB9CisgIGNwaWQgPSB0cnVzc2luZm8tPmN1cnRocmVhZC0+dGlkOwogCiAgIGNsZWFyX2ZzYygp
OwotICBsc2VlayhmZCwgMEwsIDApOwotICBpZiAocmVhZChmZCwgJnJlZ3MsIHNpemVvZihyZWdz
KSkgIT0gc2l6ZW9mKHJlZ3MpKSB7CisgIAorICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQs
IChjYWRkcl90KSZyZWdzLCAwKSA8IDApIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0Zmls
ZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwogICB9CkBA
IC0xNjUsNyArMTU1LDcgQEAKICAgICB8fCAhc3RyY21wKGZzYy5uYW1lLCAicmZvcmsiKQogICAg
IHx8ICFzdHJjbXAoZnNjLm5hbWUsICJ2Zm9yayIpKSkpCiAgIHsKLSAgICB0cnVzc2luZm8tPmlu
X2ZvcmsgPSAxOworICAgIHRydXNzaW5mby0+Y3VydGhyZWFkLT5pbl9mb3JrID0gMTsKICAgfQog
CiAgIGlmIChuYXJncyA9PSAwKQpAQCAtMTg2LDkgKzE3NiwxNCBAQAogCSAqIG9uIHRoZSBzdGFj
aywgYXMgaXMgbm9ybWFsIGZvciBvdGhlciBwcm9jZXNzb3JzLgogCSAqIFRoZSBmYWxsLXRocm91
Z2ggZm9yIGFsbCBvZiB0aGVzZSBpcyBkZWxpYmVyYXRlISEhCiAJICovCi0JbHNlZWsoUHJvY2Zk
LCByZWdzLnJfb3V0WzZdICsgU1BPRkYgKwotCSAgICBvZmZzZXRvZihzdHJ1Y3QgZnJhbWUsIGZy
X3BhZFs2XSksIFNFRUtfU0VUKTsKLQlyZWFkKGZkLCAmZnNjLmFyZ3NbNl0sIChuYXJncyAtIDYp
ICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CisJaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9EX1JFQURf
RDsKKwlpb3JlcXVlc3QucGlvZF9vZmZzID0gKHZvaWQgKikocmVncy5yX291dFs2XSArIFNQT0ZG
ICsKKyAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBmcmFtZSwgZnJfcGFkWzZdKTsKKwlpb3Jl
cXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdzWzZdOworCWlvcmVxdWVzdC5waW9kX2xlbiA9IChu
YXJncyAtIDYpICogc2l6ZW9mKGZzYy5hcmdzWzBdKTsKKwlwdHJhY2UoUFRfSU8sIGNwaWQsIChj
YWRkcl90KSZpb3JlcXVlc3QsIDApOworCWlmIChpb3JlcXVlc3QucGlvZF9sZW4gPT0gMCkgcmV0
dXJuOworCiAgIGNhc2UgNjoJZnNjLmFyZ3NbNV0gPSByZWdzLnJfb3V0WzVdOwogICBjYXNlIDU6
CWZzYy5hcmdzWzRdID0gcmVncy5yX291dFs0XTsKICAgY2FzZSA0Oglmc2MuYXJnc1szXSA9IHJl
Z3Mucl9vdXRbM107CkBAIC0yNDAsNyArMjM1LDcgQEAKIAkgICAgICBpIDwgKGZzYy5uYXJncyAt
IDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2MgJiYgIShzYy0+YXJnc1tpXS50
eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFy
Z3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9h
cmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKICAgICAgIH0KICAgICB9
CiAjaWYgREVCVUcKQEAgLTMwMiwxOCArMjk3LDkgQEAKICAgaW50IGVycm9ycDsKICAgc3RydWN0
IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlk
KSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwot
ICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAg
IGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0t
XG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5w
aWQ7Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+Y3VydGhyZWFkLT50aWQ7CiAKLSAgbHNlZWso
ZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVv
ZihyZWdzKSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdz
LCAwKSA8IDApIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIlxuIik7CiAgICAg
cmV0dXJuICgtMSk7CiAgIH0KQEAgLTM0NCw3ICszMzAsNyBAQAogCWlmIChlcnJvcnApCiAJICBh
c3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJ
ZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3Ms
IHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBm
c2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAg
ICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNz
L3N5c2NhbGwuaCMxMiAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNy
LmJpbi90cnVzcy9zeXNjYWxsLmgjMiAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC02MSw3ICs2
MSw3IEBACiAKIHN0cnVjdCBzeXNjYWxsICpnZXRfc3lzY2FsbChjb25zdCBjaGFyKik7CiBjaGFy
ICpnZXRfc3RyaW5nKGludCwgdm9pZCosIGludCk7Ci1jaGFyICpwcmludF9hcmcoaW50LCBzdHJ1
Y3Qgc3lzY2FsbF9hcmdzICosIHVuc2lnbmVkIGxvbmcqLCBsb25nLCBzdHJ1Y3QgdHJ1c3NpbmZv
ICopOworY2hhciAqcHJpbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2FyZ3MgKiwgdW5zaWduZWQgbG9u
ZyosIGxvbmcsIHN0cnVjdCB0cnVzc2luZm8gKik7CiB2b2lkIHByaW50X3N5c2NhbGwoc3RydWN0
IHRydXNzaW5mbyAqLCBjb25zdCBjaGFyICosIGludCwgY2hhciAqKik7CiB2b2lkIHByaW50X3N5
c2NhbGxfcmV0KHN0cnVjdCB0cnVzc2luZm8gKiwgY29uc3QgY2hhciAqLCBpbnQsIGNoYXIgKios
IGludCwKICAgICBsb25nKTsKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmlu
L3RydXNzL3N5c2NhbGxzLmMjMzggKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3Ry
dXNzL3Vzci5iaW4vdHJ1c3Mvc3lzY2FsbHMuYyMyICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAg
LTQxLDYgKzQxLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
ICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy91bi5oPgpAQCAtNDA4LDkgKzQw
OSwxMyBAQAogICovCiAKIHN0YXRpYyBpbnQKLWdldF9zdHJ1Y3QoaW50IHByb2NmZCwgdm9pZCAq
b2Zmc2V0LCB2b2lkICpidWYsIGludCBsZW4pIHsKLQotCWlmIChwcmVhZChwcm9jZmQsIGJ1Ziwg
bGVuLCAodWludHB0cl90KW9mZnNldCkgIT0gbGVuKQorZ2V0X3N0cnVjdChpbnQgcGlkLCB2b2lk
ICpvZmZzZXQsIHZvaWQgKmJ1ZiwgaW50IGxlbikgeworCXN0cnVjdCBwdHJhY2VfaW9fZGVzYyBp
b3JlcXVlc3Q7CisJaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9EX1JFQURfRDsKKwlpb3JlcXVlc3Qu
cGlvZF9vZmZzID0gb2Zmc2V0OworCWlvcmVxdWVzdC5waW9kX2FkZHIgPSBidWY7CisJaW9yZXF1
ZXN0LnBpb2RfbGVuID0gbGVuOworCWlmIChwdHJhY2UoUFRfSU8sIHBpZCwgKGNhZGRyX3QpJmlv
cmVxdWVzdCwgMCkgIT0gbGVuKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC00MjMs
MzcgKzQyOCwyMSBAQAogICovCiAKIGNoYXIgKgotZ2V0X3N0cmluZyhpbnQgcHJvY2ZkLCB2b2lk
ICpvZmZzZXQsIGludCBtYXgpIHsKK2dldF9zdHJpbmcoaW50IHBpZCwgdm9pZCAqb2Zmc2V0LCBp
bnQgbWF4KSB7CiAJY2hhciAqYnVmOwotCWludCBzaXplLCBsZW4sIGMsIGZkOwotCUZJTEUgKnA7
CisJc3RydWN0IHB0cmFjZV9pb19kZXNjIGlvcmVxdWVzdDsKKwlpZiAobWF4ID4gMTAyNCB8fCBt
YXggPD0gMCkKKwkJbWF4ID0gMTAyNDsKKworCWJ1ZiA9IG1hbGxvYyhtYXgpOworCWlmIChidWYg
PT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9EX1JFQURfRDsK
Kwlpb3JlcXVlc3QucGlvZF9vZmZzID0gb2Zmc2V0OworCWlvcmVxdWVzdC5waW9kX2FkZHIgPSBi
dWY7CisJaW9yZXF1ZXN0LnBpb2RfbGVuID0gbWF4OworCXB0cmFjZShQVF9JTywgcGlkLCAoY2Fk
ZHJfdCkmaW9yZXF1ZXN0LCAwKTsKKwlidWZbbWF4IC0gMV0gPSAnXDAnOwogCi0JaWYgKChmZCA9
IGR1cChwcm9jZmQpKSA9PSAtMSkKLQkJZXJyKDEsICJkdXAiKTsKLQlpZiAoKHAgPSBmZG9wZW4o
ZmQsICJyIikpID09IE5VTEwpCi0JCWVycigxLCAiZmRvcGVuIik7Ci0JYnVmID0gbWFsbG9jKCBz
aXplID0gKG1heCA/IG1heCArIDEgOiA2NCApICk7Ci0JbGVuID0gMDsKLQlidWZbMF0gPSAwOwot
CWlmIChmc2Vla28ocCwgKHVpbnRwdHJfdClvZmZzZXQsIFNFRUtfU0VUKSA9PSAwKSB7Ci0JCXdo
aWxlICgoYyA9IGZnZXRjKHApKSAhPSBFT0YpIHsKLQkJCWJ1ZltsZW4rK10gPSBjOwotCQkJaWYg
KGMgPT0gMCB8fCBsZW4gPT0gbWF4KQotCQkJCWJyZWFrOwotCQkJaWYgKGxlbiA9PSBzaXplKSB7
Ci0JCQkJY2hhciAqdG1wOwotCQkJCXRtcCA9IHJlYWxsb2MoYnVmLCBzaXplKzY0KTsKLQkJCQlp
ZiAodG1wID09IE5VTEwpIHsKLQkJCQkJYnVmW2xlbl0gPSAwOwotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQkJc2l6ZSArPSA2NDsKLQkJCQlidWYgPSB0bXA7Ci0JCQl9Ci0JCX0KLQkJYnVmW2xlbl0g
PSAwOwotCX0KLQlmY2xvc2UocCk7CiAJcmV0dXJuIChidWYpOwogfQogCkBAIC00NjksOSArNDU4
LDkgQEAKICAqLwogCiBjaGFyICoKLXByaW50X2FyZyhpbnQgZmQsIHN0cnVjdCBzeXNjYWxsX2Fy
Z3MgKnNjLCB1bnNpZ25lZCBsb25nICphcmdzLCBsb25nIHJldHZhbCwgc3RydWN0IHRydXNzaW5m
byAqdHJ1c3NpbmZvKSB7CitwcmludF9hcmcoc3RydWN0IHN5c2NhbGxfYXJncyAqc2MsIHVuc2ln
bmVkIGxvbmcgKmFyZ3MsIGxvbmcgcmV0dmFsLCBzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8p
IHsKICAgY2hhciAqdG1wID0gTlVMTDsKLQorICBpbnQgcGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAg
IHN3aXRjaCAoc2MtPnR5cGUgJiBBUkdfTUFTSykgewogICBjYXNlIEhleDoKICAgICBhc3ByaW50
ZigmdG1wLCAiMHglbHgiLCBhcmdzW3NjLT5vZmZzZXRdKTsKQEAgLTQ4Niw3ICs0NzUsNyBAQAog
ICAgIHsKICAgICAgIC8qIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuICovCiAgICAgICBjaGFyICp0
bXAyOwotICAgICAgdG1wMiA9IGdldF9zdHJpbmcoZmQsICh2b2lkKilhcmdzW3NjLT5vZmZzZXRd
LCAwKTsKKyAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQqKWFyZ3Nbc2MtPm9mZnNl
dF0sIDApOwogICAgICAgYXNwcmludGYoJnRtcCwgIlwiJXNcIiIsIHRtcDIpOwogICAgICAgZnJl
ZSh0bXAyKTsKICAgICB9CkBAIC01MTQsNyArNTAzLDcgQEAKICAgICAgICAgbGVuID0gbWF4X3N0
cmluZzsKICAgICAgICAgdHJ1bmNhdGVkID0gMTsKICAgICAgIH0KLSAgICAgIGlmIChsZW4gJiYg
Z2V0X3N0cnVjdChmZCwgKHZvaWQqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0bXAyLCBsZW4pICE9IC0x
KSB7CisgICAgICBpZiAobGVuICYmIGdldF9zdHJ1Y3QocGlkLCAodm9pZCopYXJnc1tzYy0+b2Zm
c2V0XSwgJnRtcDIsIGxlbikgIT0gLTEpIHsKICAgICAgICAgdG1wMyA9IG1hbGxvYyhsZW4gKiA0
ICsgMSk7CiAgICAgICAgIHdoaWxlIChsZW4pIHsKICAgICAgICAgICBpZiAoc3RydmlzeCh0bXAz
LCB0bXAyLCBsZW4sIFZJU19DU1RZTEV8VklTX1RBQnxWSVNfTkwpIDw9IG1heF9zdHJpbmcpCkBA
IC01MzUsNyArNTI0LDcgQEAKICAgICAgIGNoYXIgKnN0cmluZzsKICAgICAgIGNoYXIgKnN0cmFy
cmF5WzEwMF07CS8qIFhYWCBUaGlzIGlzIHVnbHkuICovCiAKLSAgICAgIGlmIChnZXRfc3RydWN0
KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICopJnN0cmFycmF5LAorICAgICAg
aWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICopJnN0
cmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cmFycmF5KSkgPT0gLTEpIHsK
IAllcnIoMSwgImdldF9zdHJ1Y3QgJXAiLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0pOwogICAg
ICAgfQpAQCAtNTQ0LDcgKzUzMyw3IEBACiAKICAgICAgIC8qIEZpbmQgb3V0IGhvdyBsYXJnZSBv
ZiBhIGJ1ZmZlciB3ZSdsbCBuZWVkLiAqLwogICAgICAgd2hpbGUgKHN0cmFycmF5W251bV0gIT0g
TlVMTCkgewotCXN0cmluZyA9IGdldF9zdHJpbmcoZmQsICh2b2lkKilzdHJhcnJheVtudW1dLCAw
KTsKKwlzdHJpbmcgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQqKXN0cmFycmF5W251bV0sIDApOwog
ICAgICAgICBzaXplICs9IHN0cmxlbihzdHJpbmcpOwogCWZyZWUoc3RyaW5nKTsKIAludW0rKzsK
QEAgLTU1NSw3ICs1NDQsNyBAQAogCiAgICAgICB0bXAyICs9IHNwcmludGYodG1wMiwgIiBbIik7
CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQlzdHJpbmcgPSBnZXRfc3RyaW5n
KGZkLCAodm9pZCopc3RyYXJyYXlbaV0sIDApOworCXN0cmluZyA9IGdldF9zdHJpbmcocGlkLCAo
dm9pZCopc3RyYXJyYXlbaV0sIDApOwogICAgICAgICB0bXAyICs9IHNwcmludGYodG1wMiwgIiBc
IiVzXCIlYyIsIHN0cmluZywgKGkrMSA9PSBudW0pID8gJyAnIDogJywnKTsKIAlmcmVlKHN0cmlu
Zyk7CiAgICAgICB9CkBAIC01ODUsNyArNTc0LDcgQEAKIAl0bXAgPSBzdHJkdXAoIiIpOwogCWJy
ZWFrOwogICAgICAgfQotICAgICAgdG1wMiA9IGdldF9zdHJpbmcoZmQsICh2b2lkKilhcmdzW3Nj
LT5vZmZzZXRdLCByZXR2YWwpOworICAgICAgdG1wMiA9IGdldF9zdHJpbmcocGlkLCAodm9pZCop
YXJnc1tzYy0+b2Zmc2V0XSwgcmV0dmFsKTsKICAgICAgIGFzcHJpbnRmKCZ0bXAsICJcIiVzXCIi
LCB0bXAyKTsKICAgICAgIGZyZWUodG1wMik7CiAgICAgfQpAQCAtNjA4LDcgKzU5Nyw3IEBACiAg
IGNhc2UgVW10eDoKICAgICB7CiAgICAgICBzdHJ1Y3QgdW10eCB1bXR4OwotICAgICAgaWYgKGdl
dF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnVtdHgsIHNpemVvZih1bXR4
KSkgIT0gLTEpCisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zm
c2V0XSwgJnVtdHgsIHNpemVvZih1bXR4KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInsweCVs
eH0iLCAobG9uZyl1bXR4LnVfb3duZXIpOwogICAgICAgZWxzZQogCWFzcHJpbnRmKCZ0bXAsICIw
eCVseCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtNjE3LDcgKzYwNiw3IEBACiAgIGNhc2UgVGlt
ZXNwZWM6CiAgICAgewogICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwotICAgICAgaWYgKGdldF9z
dHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnRzLCBzaXplb2YodHMpKSAhPSAt
MSkKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAm
dHMsIHNpemVvZih0cykpICE9IC0xKQogCWFzcHJpbnRmKCZ0bXAsICJ7JWxkLiUwOWxkfSIsIChs
b25nKXRzLnR2X3NlYywgdHMudHZfbnNlYyk7CiAgICAgICBlbHNlCiAJYXNwcmludGYoJnRtcCwg
IjB4JWx4IiwgYXJnc1tzYy0+b2Zmc2V0XSk7CkBAIC02MjYsNyArNjE1LDcgQEAKICAgY2FzZSBU
aW1ldmFsOgogICAgIHsKICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgaWYgKGdldF9z
dHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnR2LCBzaXplb2YodHYpKSAhPSAt
MSkKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAm
dHYsIHNpemVvZih0dikpICE9IC0xKQogCWFzcHJpbnRmKCZ0bXAsICJ7JWxkLiUwNmxkfSIsIChs
b25nKXR2LnR2X3NlYywgdHYudHZfdXNlYyk7CiAgICAgICBlbHNlCiAJYXNwcmludGYoJnRtcCwg
IjB4JWx4IiwgYXJnc1tzYy0+b2Zmc2V0XSk7CkBAIC02MzUsNyArNjI0LDcgQEAKICAgY2FzZSBU
aW1ldmFsMjoKICAgICB7CiAgICAgICBzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKLSAgICAgIGlmIChn
ZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0diwgc2l6ZW9mKHR2KSkg
IT0gLTEpCisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0
XSwgJnR2LCBzaXplb2YodHYpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAieyVsZC4lMDZsZCwg
JWxkLiUwNmxkfSIsCiAJICAobG9uZyl0dlswXS50dl9zZWMsIHR2WzBdLnR2X3VzZWMsCiAJICAo
bG9uZyl0dlsxXS50dl9zZWMsIHR2WzFdLnR2X3VzZWMpOwpAQCAtNjQ2LDcgKzYzNSw3IEBACiAg
IGNhc2UgSXRpbWVydmFsOgogICAgIHsKICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgaXR2OwotICAg
ICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJml0diwgc2l6
ZW9mKGl0dikpICE9IC0xKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nb
c2MtPm9mZnNldF0sICZpdHYsIHNpemVvZihpdHYpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAi
eyVsZC4lMDZsZCwgJWxkLiUwNmxkfSIsCiAJICAgIChsb25nKWl0di5pdF9pbnRlcnZhbC50dl9z
ZWMsCiAJICAgIGl0di5pdF9pbnRlcnZhbC50dl91c2VjLApAQCAtNjcwLDcgKzY1OSw3IEBACiAK
ICAgICAgIGlmICgocGZkID0gbWFsbG9jKGJ5dGVzKSkgPT0gTlVMTCkKIAllcnIoMSwgIkNhbm5v
dCBtYWxsb2MgJWQgYnl0ZXMgZm9yIHBvbGxmZCBhcnJheSIsIGJ5dGVzKTsKLSAgICAgIGlmIChn
ZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sIHBmZCwgYnl0ZXMpICE9IC0x
KSB7CisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwg
cGZkLCBieXRlcykgIT0gLTEpIHsKIAogCXVzZWQgPSAwOwogCXRtcHNpemUgPSAxICsgcGVyX2Zk
ICogbnVtZmRzICsgMjsKQEAgLTcwOSw3ICs2OTgsNyBAQAogCiAgICAgICBpZiAoKGZkcyA9IG1h
bGxvYyhieXRlcykpID09IE5VTEwpCiAJZXJyKDEsICJDYW5ub3QgbWFsbG9jICVkIGJ5dGVzIGZv
ciBmZF9zZXQgYXJyYXkiLCBieXRlcyk7Ci0gICAgICBpZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQg
KilhcmdzW3NjLT5vZmZzZXRdLCBmZHMsIGJ5dGVzKSAhPSAtMSkgeworICAgICAgaWYgKGdldF9z
dHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sIGZkcywgYnl0ZXMpICE9IC0xKSB7
CiAJdXNlZCA9IDA7CiAJdG1wc2l6ZSA9IDEgKyBudW1mZHMgKiBwZXJfZmQgKyAyOwogCWlmICgo
dG1wID0gbWFsbG9jKHRtcHNpemUpKSA9PSBOVUxMKQpAQCAtNzQ5LDcgKzczOCw3IEBACiAgICAg
ICBpbnQgaSwgdXNlZDsKIAogICAgICAgc2lnID0gYXJnc1tzYy0+b2Zmc2V0XTsKLSAgICAgIGlm
IChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICopJnNzLAor
ICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lk
ICopJnNzLAogICAgICAgICAgIHNpemVvZihzcykpID09IC0xKQogICAgICAgewogCWFzcHJpbnRm
KCZ0bXAsICIweCVseCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtODUzLDcgKzg0Miw3IEBACiAg
ICAgICB9CiAKICAgICAgIC8qIHl1Y2s6IGdldCBzc19sZW4gKi8KLSAgICAgIGlmIChnZXRfc3Ry
dWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICopJnNzLAorICAgICAgaWYg
KGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICopJnNzLAog
CXNpemVvZihzcy5zc19sZW4pICsgc2l6ZW9mKHNzLnNzX2ZhbWlseSkpID09IC0xKQogCWVycigx
LCAiZ2V0X3N0cnVjdCAlcCIsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSk7CiAgICAgICAvKgpA
QCAtODc0LDcgKzg2Myw3IEBACiAJCSAgICAgIGJyZWFrOwogCSAgICAgIH0KICAgICAgIH0KLSAg
ICAgIGlmIChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICh2b2lkICop
JnNzLCBzcy5zc19sZW4pCisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tz
Yy0+b2Zmc2V0XSwgKHZvaWQgKikmc3MsIHNzLnNzX2xlbikKIAkgID09IC0xKSB7CiAJICBlcnIo
MiwgImdldF9zdHJ1Y3QgJXAiLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0pOwogICAgICAgfQpA
QCAtOTEzLDcgKzkwMiw3IEBACiAgICAgICBjaGFyICpoYW5kOwogICAgICAgY29uc3QgY2hhciAq
aDsKIAotICAgICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwg
JnNhLCBzaXplb2Yoc2EpKSAhPSAtMSkgeworICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9p
ZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZzYSwgc2l6ZW9mKHNhKSkgIT0gLTEpIHsKIAogCWFzcHJp
bnRmKCZoYW5kLCAiJXAiLCBzYS5zYV9oYW5kbGVyKTsKIAlpZiAoc2Euc2FfaGFuZGxlciA9PSBT
SUdfREZMKQpAQCAtOTU2LDcgKzk0NSw3IEBACiAgICAgICAJYnl0ZXMgPSBzaXplb2Yoc3RydWN0
IGtldmVudCkgKiBudW1ldmVudHM7CiAgICAgICBpZiAoKGtlID0gbWFsbG9jKGJ5dGVzKSkgPT0g
TlVMTCkKICAgICAgICAgZXJyKDEsICJDYW5ub3QgbWFsbG9jICVkIGJ5dGVzIGZvciBrZXZlbnQg
YXJyYXkiLCBieXRlcyk7Ci0gICAgICBpZiAobnVtZXZlbnRzID49IDAgJiYgZ2V0X3N0cnVjdChm
ZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCBrZSwgYnl0ZXMpICE9IC0xKSB7CisgICAgICBp
ZiAobnVtZXZlbnRzID49IDAgJiYgZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zm
c2V0XSwga2UsIGJ5dGVzKSAhPSAtMSkgewogCXVzZWQgPSAwOwogCXRtcHNpemUgPSAxICsgcGVy
X2tlICogbnVtZXZlbnRzICsgMjsKIAlpZiAoKHRtcCA9IG1hbGxvYyh0bXBzaXplKSkgPT0gTlVM
TCkKQEAgLTk4Niw3ICs5NzUsNyBAQAogICBjYXNlIFN0YXQ6CiAgICAgewogICAgICAgc3RydWN0
IHN0YXQgc3Q7Ci0gICAgICBpZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZz
ZXRdLCAmc3QsIHNpemVvZihzdCkpICE9IC0xKSB7CisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQs
ICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnN0LCBzaXplb2Yoc3QpKSAhPSAtMSkgewogCWNo
YXIgbW9kZVsxMl07CiAJc3RybW9kZShzdC5zdF9tb2RlLCBtb2RlKTsKIAlhc3ByaW50ZigmdG1w
LCAie21vZGU9JXMsaW5vZGU9JWpkLHNpemU9JWpkLGJsa3NpemU9JWxkfSIsCkBAIC05OTksNyAr
OTg4LDcgQEAKICAgY2FzZSBSdXNhZ2U6CiAgICAgewogICAgICAgc3RydWN0IHJ1c2FnZSBydTsK
LSAgICAgIGlmIChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZydSwg
c2l6ZW9mKHJ1KSkgIT0gLTEpCisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJn
c1tzYy0+b2Zmc2V0XSwgJnJ1LCBzaXplb2YocnUpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAi
e3U9JWxkLiUwNmxkLHM9JWxkLiUwNmxkLGluPSVsZCxvdXQ9JWxkfSIsCiAJICAobG9uZylydS5y
dV91dGltZS50dl9zZWMsIHJ1LnJ1X3V0aW1lLnR2X3VzZWMsCiAJICAobG9uZylydS5ydV9zdGlt
ZS50dl9zZWMsIHJ1LnJ1X3N0aW1lLnR2X3VzZWMsCkBAIC0xMDExLDcgKzEwMDAsNyBAQAogICBj
YXNlIFJsaW1pdDoKICAgICB7CiAgICAgICBzdHJ1Y3QgcmxpbWl0IHJsOwotICAgICAgaWYgKGdl
dF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnJsLCBzaXplb2YocmwpKSAh
PSAtMSkKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRd
LCAmcmwsIHNpemVvZihybCkpICE9IC0xKQogCWFzcHJpbnRmKCZ0bXAsICJ7Y3VyPSVqdSxtYXg9
JWp1fSIsCiAJICBybC5ybGltX2N1ciwgcmwucmxpbV9tYXgpOwogICAgICAgZWxzZQo9PT09IC8v
ZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vzci5iaW4vdHJ1c3MvdHJ1c3MuMSMxMiAodGV4dCtr
bykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy90cnVzcy4xIzMg
KHRleHQra28pID09PT0gY29udGVudApAQCAtMjMsNyArMjMsNyBAQAogdXRpbGl0eSB0cmFjZXMg
dGhlIHN5c3RlbSBjYWxscyBjYWxsZWQgYnkgdGhlIHNwZWNpZmllZCBwcm9jZXNzIG9yIHByb2dy
YW0uCiBPdXRwdXQgaXMgdG8gdGhlIHNwZWNpZmllZCBvdXRwdXQgZmlsZSwgb3Igc3RhbmRhcmQg
ZXJyb3IgYnkgZGVmYXVsdC4KIEl0IGRvZXMgdGhpcyBieSBzdG9wcGluZyBhbmQgcmVzdGFydGlu
ZyB0aGUgcHJvY2VzcyBiZWluZyBtb25pdG9yZWQgdmlhCi0uWHIgcHJvY2ZzIDUgLgorLlhyIHB0
cmFjZSAyIC4KIC5QcAogVGhlIG9wdGlvbnMgYXJlIGFzIGZvbGxvd3M6CiAuQmwgLXRhZyAtd2lk
dGggaW5kZW50CkBAIC03OSwxMyArNzksNiBAQAogLkFyIGNvbW1hbmQKIG9wdGlvbnMgYXJlIG11
dHVhbGx5IGV4Y2x1c2l2ZS4pCiAuRWwKLS5QcAotVGhlCi0uWHIgcHJvY2N0bCA4Ci11dGlsaXR5
IGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRyYWNlcG9pbnRzIGluIGEgc3R1Y2sgcHJvY2VzcwotbGVm
dCBiZWhpbmQgaWYKLS5ObQotdGVybWluYXRlcyBhYm5vcm1hbGx5LgogLlNoIEVYQU1QTEVTCiAj
IEZvbGxvdyB0aGUgc3lzdGVtIGNhbGxzIHVzZWQgaW4gZWNob2luZyAiaGVsbG8iCiAuRGwgJCB0
cnVzcyAvYmluL2VjaG8gaGVsbG8KQEAgLTk2LDggKzg5LDcgQEAKIC5TaCBTRUUgQUxTTwogLlhy
IGtkdW1wIDEgLAogLlhyIGt0cmFjZSAxICwKLS5YciBwcm9jZnMgNSAsCi0uWHIgcHJvY2N0bCA4
CisuWHIgcHRyYWNlIDIgMiAKIC5TaCBISVNUT1JZCiBUaGUKIC5ObQo9PT09IC8vZGVwb3QvdmVu
ZG9yL2ZyZWVic2Qvc3JjL3Vzci5iaW4vdHJ1c3MvdHJ1c3MuaCM1ICh0ZXh0K2tvKSAtIC8vZGVw
b3QvdXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL3RydXNzLmgjNCAodGV4dCtrbykg
PT09PSBjb250ZW50CkBAIC0yNSw2ICsyNSw4IEBACiAgKiAkRnJlZUJTRDogc3JjL3Vzci5iaW4v
dHJ1c3MvdHJ1c3MuaCx2IDEuNyAyMDA2LzA1LzE1IDIxOjE4OjI4IHBhdiBFeHAgJAogICovCiAK
KyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKwogI2RlZmluZSBGT0xMT1dGT1JLUyAgICAgICAgMHgw
MDAwMDAwMQogI2RlZmluZSBSRUxBVElWRVRJTUVTVEFNUFMgMHgwMDAwMDAwMgogI2RlZmluZSBB
QlNPTFVURVRJTUVTVEFNUFMgMHgwMDAwMDAwNApAQCAtMzIsMTcgKzM0LDMwIEBACiAjZGVmaW5l
IEVYRUNWRUFSR1MgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIEVYRUNWRUVOVlMgICAgICAg
ICAweDAwMDAwMDIwCiAKK3N0cnVjdCB0aHJlYWRpbmZvCit7CisJU0xJU1RfRU5UUlkodGhyZWFk
aW5mbykgZW50cmllczsKKwlsd3BpZF90IHRpZDsKKwlpbnQgaW5fc3lzY2FsbDsKKwlpbnQgaW5f
Zm9yazsKK307CisKIHN0cnVjdCB0cnVzc2luZm8KIHsKIAlpbnQgcGlkOwogCWludCBmbGFnczsK
LQlpbnQgaW5fZm9yazsKKwlpbnQgcHJfd2h5OworCWludCBwcl9kYXRhOwogCWludCBzdHJzaXpl
OwogCUZJTEUgKm91dGZpbGU7CiAKIAlzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKIAlzdHJ1
Y3QgdGltZXNwZWMgYmVmb3JlOwogCXN0cnVjdCB0aW1lc3BlYyBhZnRlcjsKKworCXN0cnVjdCB0
aHJlYWRpbmZvICpjdXJ0aHJlYWQ7CisJCisJU0xJU1RfSEVBRCgsIHRocmVhZGluZm8pIHRocmVh
ZGxpc3Q7CiB9OwogCiAjZGVmaW5lIHRpbWVzcGVjc3VidCh0dnAsIHV2cCwgdnZwKQkJCQkJXApA
QCAtNTQsMyArNjksMTAgQEAKIAkJCSh2dnApLT50dl9uc2VjICs9IDEwMDAwMDAwMDA7CQkJXAog
CQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNfTk9ORSAgMAorI2RlZmluZSBT
X1NDRSAgIDEKKyNkZWZpbmUgU19TQ1ggICAyCisjZGVmaW5lIFNfRVhJVCAgMworI2RlZmluZSBT
X1NJRyAgIDQKKyNkZWZpbmUgU19FWEVDICA1Cg==
------=_Part_3006_3639545.1175846663809--



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