Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Mar 2015 18:38:04 +0100
From:      Svatopluk Kraus <onwahe@gmail.com>
To:        freebsd-arm@freebsd.org
Subject:   Re: interrupt framework
Message-ID:  <CAFHCsPUkcTyEhj7NhmsWtJ7hht8PNAnHnwMPbbjH_SDWJMm0KQ@mail.gmail.com>
In-Reply-To: <CAFHCsPVhRnRXhLF6S-%2BDL5mM22X0CkMmKOkkuo0DOMShkEM=fQ@mail.gmail.com>
References:  <CAFHCsPX5kG_v-F-cjpyMQsT_b386eok=mqWW0%2BEUb_4-_1Otnw@mail.gmail.com> <CAFHCsPVhRnRXhLF6S-%2BDL5mM22X0CkMmKOkkuo0DOMShkEM=fQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=UTF-8

Hi,

I have finished work on new interrupt framework. The state is
reflected in intrng_full_01.diff. ARM_INTRNG define is used in all
files so old and new framework can live together until all controllers
will be reworked.

I have reworked GIC controller and tested it on panda.  I have
reworked AINTC controller and tested it on BBB. As more platforms use
these controllers, I use ARM_INTRNG define as well. The codes are not
clean up yet. The patches are intrng_gic_panda.diff and
intrng_aintc_01.diff.

I have rework TI_GPIO controller and tested it on panda and BBB. Only
panda and BBB use this code so ARM_INTRNG is not used. The patch is
intrng_ti_gpio_panda_bbb_01.diff. The code is not clean up yet too and
moreover there is test module left in diff. For panda, gpio_113 button
is printing some message. For BBB, pin 12 on P9 interface is doing
same.

I have reworked and tested controller for RPI-B, however I want to
rework its gpio controller before I will present it.

As we must decribe interrupts by controller name (due to cascaded
controllers), system tools and MI interrupt code does not work well
with now longer decriptions. The interrupt.h.diff could help a little
bit.

I would appreciate more testing of GIC on platforms I haven't got. And
some feedback would be nice too.

Svatopluk Kraus

--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=US-ASCII; name="intrng_full_01.diff"
Content-Disposition: attachment; filename="intrng_full_01.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i6xu3gw53

SW5kZXg6IHN5cy9hcm0vYXJtL2ludHJuZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2lu
dHJuZy5jCShyZXZpc2lvbiAwKQorKysgc3lzL2FybS9hcm0vaW50cm5nLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IEph
a3ViIFdvamNpZWNoIEtsYW1hIDxqY2VlbEBGcmVlQlNELm9yZz4uCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u
aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkg
dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcmsgQnJpbmljb21iZQorICoJZm9yIHRoZSBOZXRCU0Qg
UHJvamVjdC4KKyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0
aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8q
CisgKglBUk0gSW50ZXJydXB0IEZyYW1ld29yaworICoKKyAqICBUT0RPOiAtIGhvdyB0byB1bm1h
c2sgUFBJIG9uIG90aGVyIENQVXMgaWYgYWxyZWFkeSBzdGFydGVkID8KKyAqICAgICAgICAtIGNv
bXBsZXRlIHRoaW5ncyBmb3IgcmVtb3ZhYmxlIFBJQ3MKKyAqLworCisjaW5jbHVkZSAib3B0X2Rk
Yi5oIgorI2luY2x1ZGUgIm9wdF9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1
ZGUgPHN5cy9zeXNsb2cuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+Cisj
aW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPHN5cy9jb25mLmg+CisjaW5jbHVk
ZSA8c3lzL2NwdXNldC5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L2F0b21pYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUgPG1hY2hpbmUv
Y3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9zbXAuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3N0ZGFy
Zy5oPgorCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncv
b2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisKKyNpbmNsdWRl
IDxkZXYvZmR0L2ZkdF9jb21tb24uaD4KKworI2lmZGVmIEREQgorI2luY2x1ZGUgPGRkYi9kZGIu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSAicGljX2lmLmgiCisKKyNkZWZpbmUJSU5UUk5BTUVfTEVO
CSgyKk1BWENPTUxFTiArIDEpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkZWJ1Z2YoZm10LCBh
cmdzLi4uKSBkbyB7IHByaW50ZigiJXMoKTogIiwgX19mdW5jX18pOwlcCisgICAgcHJpbnRmKGZt
dCwjI2FyZ3MpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdmKGZtdCwgYXJncy4u
LikKKyNlbmRpZgorCitNQUxMT0NfREVDTEFSRShNX0lOVFJORyk7CitNQUxMT0NfREVGSU5FKE1f
SU5UUk5HLCAiaW50cm5nIiwgIkFSTSBpbnRlcnJ1cHQgaGFuZGxpbmciKTsKKworLyogTWFpbiBB
Uk0gaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGZyb20gYXNzZW1ibGVyIC0+ICdoaWRkZW4nIGZv
ciBDIGNvZGUuICovCit2b2lkIGFybV9pcnFfaGFuZGxlcihzdHJ1Y3QgdHJhcGZyYW1lICp0Zik7
CisKKy8qIFJvb3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgc3R1ZmYuICovCitzdGF0aWMgZGV2aWNl
X3QgaXJxX3Jvb3RfZGV2Oworc3RhdGljIGFybV9pcnFfZmlsdGVyX3QgKmlycV9yb290X2ZpbHRl
cjsKK3N0YXRpYyB2b2lkICppcnFfcm9vdF9hcmc7CitzdGF0aWMgdV9pbnQgaXJxX3Jvb3RfaXBp
Y291bnQ7CisKKy8qIEludGVycnVwdCBjb250cm9sbGVyIGRlZmluaXRpb24uICovCitzdHJ1Y3Qg
YXJtX3BpYyB7CisJU0xJU1RfRU5UUlkoYXJtX3BpYykJcGljX25leHQ7CisJaW50cHRyX3QJCXBp
Y194cmVmOwkvKiBoYXJkd2FyZSBpZGVudGlmaWNhdGlvbiAqLworCWRldmljZV90CQlwaWNfZGV2
OworfTsKKworc3RhdGljIHN0cnVjdCBtdHggcGljX2xpc3RfbG9jazsKK3N0YXRpYyBTTElTVF9I
RUFEKCwgYXJtX3BpYykgcGljX2xpc3Q7CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX3BpYyAqcGljX2xv
b2t1cChkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpOworCisvKiBJbnRlcnJ1cHQgc291cmNl
IGRlZmluaXRpb24uICovCisjZGVmaW5lIElTUkNGX1JFR0lTVEVSRUQJMHgwMQkvKiByZWdpc3Rl
cmVkIGluIGEgY29udHJvbGxlciAqLworI2RlZmluZSBJU1JDRl9QRVJDUFUJCTB4MDIJLyogcGVy
IENQVSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVNSQ0ZfQk9VTkQJCTB4MDQJLyogYm91bmQgdG8g
YSBDUFUgKi8KKworc3RhdGljIHN0cnVjdCBtdHggaXNyY190YWJsZV9sb2NrOworc3RhdGljIHN0
cnVjdCBhcm1faXJxc3JjICppcnFfc291cmNlc1tOSVJRXTsKK3VfaW50IGlycV9uZXh0X2ZyZWU7
CisKKyNkZWZpbmUgSVJRX0lOVkFMSUQJbml0ZW1zKGlycV9zb3VyY2VzKQorCisjaWZkZWYgU01Q
CitzdGF0aWMgYm9vbGVhbl90IGlycV9hc3NpZ25fY3B1ID0gRkFMU0U7CisKK3N0YXRpYyBzdHJ1
Y3QgYXJtX2lycXNyYyBpcGlfc291cmNlc1tBUk1fSVBJX0NPVU5UXTsKK3N0YXRpYyB1X2ludCBp
cGlfbmV4dF9udW07CisjZW5kaWYKKworLyoKKyAqIC0gMiBjb3VudGVycyBmb3IgZWFjaCBJL08g
aW50ZXJydXB0LgorICogLSBNQVhDUFUgY291bnRlcnMgZm9yIGVhY2ggSVBJIGNvdW50ZXJzIGZv
ciBTTVAuCisgKi8KKyNpZmRlZiBTTVAKKyNkZWZpbmUgSU5UUkNOVF9DT1VOVCAgIChOSVJRICog
MiArIEFSTV9JUElfQ09VTlQgKiBNQVhDUFUpCisjZWxzZQorI2RlZmluZSBJTlRSQ05UX0NPVU5U
ICAgKE5JUlEgKiAyKQorI2VuZGlmCisKKy8qIERhdGEgZm9yIE1JIHN0YXRpc3RpY3MgcmVwb3J0
aW5nLiAqLwordV9sb25nIGludHJjbnRbSU5UUkNOVF9DT1VOVF07CitjaGFyIGludHJuYW1lc1tJ
TlRSQ05UX0NPVU5UICogSU5UUk5BTUVfTEVOXTsKK3NpemVfdCBzaW50cmNudCA9IHNpemVvZihp
bnRyY250KTsKK3NpemVfdCBzaW50cm5hbWVzID0gc2l6ZW9mKGludHJuYW1lcyk7CitzdGF0aWMg
dV9pbnQgaW50cmNudF9pbmRleDsKKworLyoKKyAqICBJbnRlcnJ1cHQgZnJhbWV3b3JrIGluaXRp
YWxpemF0aW9uIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkCithcm1faXJxX2luaXQodm9pZCAq
ZHVtbXkgX191bnVzZWQpCit7CisKKwlTTElTVF9JTklUKCZwaWNfbGlzdCk7CisJbXR4X2luaXQo
JnBpY19saXN0X2xvY2ssICJhcm0gcGljIGxpc3QiLCBOVUxMLCBNVFhfREVGKTsKKwltdHhfaW5p
dCgmaXNyY190YWJsZV9sb2NrLCAiYXJtIGlzcmMgdGFibGUiLCBOVUxMLCBNVFhfREVGKTsKK30K
K1NZU0lOSVQoYXJtX2lycV9pbml0LCBTSV9TVUJfSU5UUiwgU0lfT1JERVJfRklSU1QsIGFybV9p
cnFfaW5pdCwgTlVMTCk7CisKK3N0YXRpYyB2b2lkCitpbnRyY250X3NldG5hbWUoY29uc3QgY2hh
ciAqbmFtZSwgaW50IGluZGV4KQoreworCisJc25wcmludGYoaW50cm5hbWVzICsgSU5UUk5BTUVf
TEVOICogaW5kZXgsIElOVFJOQU1FX0xFTiwgIiUtKnMiLAorCSAgICBJTlRSTkFNRV9MRU4gLSAx
LCBuYW1lKTsKK30KKworLyoKKyAqICBVcGRhdGUgbmFtZSBmb3IgaW50ZXJydXB0IHNvdXJjZSB3
aXRoIGludGVycnVwdCBldmVudC4KKyAqLworc3RhdGljIHZvaWQKK2ludHJjbnRfdXBkYXRlbmFt
ZShzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKworCS8qIFFRUTogV2hhdCBhYm91dCBzdHJh
eSBjb3VudGVyIG5hbWU/ICovCisJbXR4X2Fzc2VydCgmaXNyY190YWJsZV9sb2NrLCBNQV9PV05F
RCk7CisJaW50cmNudF9zZXRuYW1lKGlzcmMtPmlzcmNfZXZlbnQtPmllX2Z1bGxuYW1lLCBpc3Jj
LT5pc3JjX2luZGV4KTsKK30KKworLyoKKyAqICBWaXJ0dWFsaXphdGlvbiBmb3IgaW50ZXJydXB0
IHNvdXJjZSBpbnRlcnJ1cHQgY291bnRlciBpbmNyZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUg
dm9pZAoraXNyY19pbmNyZW1lbnRfY291bnQoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisK
KwkvKgorCSAqIFhYWCAtIEl0IHNob3VsZCBiZSBhdG9taWMgZm9yIFBQSSBpbnRlcnJ1cHRzLiBJ
dCB3YXMgcHJvdmVuIHRoYXQKKwkgKiAgICAgICBmb3IgdGltZXIgUFBJIGludGVycnVwdHMgdGhl
IGxvc3QgaXMgbWVhc3VyYWJsZSBlYXNpbHkuCisJICovCisJaXNyYy0+aXNyY19jb3VudFswXSsr
OworCS8qYXRvbWljX2FkZF9sb25nKCZpc3JjLT5pc3JjX2NvdW50WzBdLCAxKTsqLworfQorCisv
KgorICogIFZpcnR1YWxpemF0aW9uIGZvciBpbnRlcnJ1cHQgc291cmNlIGludGVycnVwdCBzdHJh
eSBjb3VudGVyIGluY3JlbWVudC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpc3JjX2luY3Jl
bWVudF9zdHJheWNvdW50KHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCisJaXNyYy0+aXNy
Y19jb3VudFsxXSsrOworfQorCisvKgorICogIFZpcnR1YWxpemF0aW9uIGZvciBpbnRlcnJ1cHQg
c291cmNlIGludGVycnVwdCBuYW1lIHVwZGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2lzcmNfdXBk
YXRlX25hbWUoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJ
Y2hhciBzdHJbSU5UUk5BTUVfTEVOXTsKKworCW10eF9hc3NlcnQoJmlzcmNfdGFibGVfbG9jaywg
TUFfT1dORUQpOworCisJaWYgKG5hbWUgIT0gTlVMTCkgeworCQlzbnByaW50ZihzdHIsIElOVFJO
QU1FX0xFTiwgIiVzOiAlcyIsIGlzcmMtPmlzcmNfbmFtZSwgbmFtZSk7CisJCWludHJjbnRfc2V0
bmFtZShzdHIsIGlzcmMtPmlzcmNfaW5kZXgpOworCQlzbnByaW50ZihzdHIsIElOVFJOQU1FX0xF
TiwgInN0cmF5ICVzOiAlcyIsIGlzcmMtPmlzcmNfbmFtZSwKKwkJICAgIG5hbWUpOworCQlpbnRy
Y250X3NldG5hbWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4ICsgMSk7CisJfSBlbHNlIHsKKwkJc25w
cmludGYoc3RyLCBJTlRSTkFNRV9MRU4sICIlczoiLCBpc3JjLT5pc3JjX25hbWUpOworCQlpbnRy
Y250X3NldG5hbWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4KTsKKwkJc25wcmludGYoc3RyLCBJTlRS
TkFNRV9MRU4sICJzdHJheSAlczoiLCBpc3JjLT5pc3JjX25hbWUpOworCQlpbnRyY250X3NldG5h
bWUoc3RyLCBpc3JjLT5pc3JjX2luZGV4ICsgMSk7CisJfQorfQorCisvKgorICogIFZpcnR1YWxp
emF0aW9uIGZvciBpbnRlcnJ1cHQgc291cmNlIGludGVycnVwdCBjb3VudGVycyBzZXR1cC4KKyAq
Lworc3RhdGljIHZvaWQKK2lzcmNfc2V0dXBfY291bnRlcnMoc3RydWN0IGFybV9pcnFzcmMgKmlz
cmMpCit7CisJdV9pbnQgaW5kZXg7CisKKwkvKgorCSAqICBYWFggLSBpdCBkb2VzIG5vdCB3b3Jr
IHdlbGwgd2l0aCByZW1vdmFibGUgY29udHJvbGxlcnMgYW5kCisJICogICAgICAgIGludGVycnVw
dCBzb3VyY2VzICEhIQorCSAqLworCWluZGV4ID0gYXRvbWljX2ZldGNoYWRkX2ludCgmaW50cmNu
dF9pbmRleCwgMik7CisJaXNyYy0+aXNyY19pbmRleCA9IGluZGV4OworCWlzcmMtPmlzcmNfY291
bnQgPSAmaW50cmNudFtpbmRleF07CisJaXNyY191cGRhdGVfbmFtZShpc3JjLCBOVUxMKTsKK30K
KworI2lmZGVmIFNNUAorLyoKKyAqICBWaXJ0dWFsaXphdGlvbiBmb3IgaW50ZXJydXB0IHNvdXJj
ZSBJUEkgY291bnRlciBpbmNyZW1lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNyY19p
bmNyZW1lbnRfaXBpX2NvdW50KHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBjcHUpCit7
CisKKwlpc3JjLT5pc3JjX2NvdW50W2NwdV0rKzsKK30KKworLyoKKyAqICBWaXJ0dWFsaXphdGlv
biBmb3IgaW50ZXJydXB0IHNvdXJjZSBJUEkgY291bnRlcnMgc2V0dXAuCisgKi8KK3N0YXRpYyB2
b2lkCitpc3JjX3NldHVwX2lwaV9jb3VudGVycyhzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29u
c3QgY2hhciAqbmFtZSkKK3sKKwl1X2ludCBpbmRleCwgaTsKKwljaGFyIHN0cltJTlRSTkFNRV9M
RU5dOworCisJaW5kZXggPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZpbnRyY250X2luZGV4LCBNQVhD
UFUpOworCWlzcmMtPmlzcmNfaW5kZXggPSBpbmRleDsKKwlpc3JjLT5pc3JjX2NvdW50ID0gJmlu
dHJjbnRbaW5kZXhdOworCisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKSB7CisJCS8qCisJ
CSAqIFdlIGRvIG5vdCBleHBlY3QgYW55IHJhY2UgaW4gSVBJIGNhc2UgaGVyZSwKKwkJICogc28g
bG9ja2luZyBpcyBub3QgbmVlZGVkLgorCQkgKi8KKwkJc25wcmludGYoc3RyLCBJTlRSTkFNRV9M
RU4sICJjcHUlZDolcyIsIGksIG5hbWUpOworCQlpbnRyY250X3NldG5hbWUoc3RyLCBpbmRleCAr
IGkpOworCX0KK30KKyNlbmRpZgorCisvKgorICogIE1haW4gQVJNIGludGVycnVwdCBkaXNwYXRj
aCBoYW5kbGVyLiBJdCdzIGNhbGxlZCBzdHJhaWdodAorICogIGZyb20gdGhlIGFzc2VtYmxlciwg
d2hlcmUgQ1BVIGludGVycnVwdCBpcyBzZXJ2ZWQuCisgKi8KK3ZvaWQKK2FybV9pcnFfaGFuZGxl
cihzdHJ1Y3QgdHJhcGZyYW1lICp0ZikKK3sKKworCUtBU1NFUlQoaXJxX3Jvb3RfZmlsdGVyICE9
IE5VTEwsICgiJXM6IG5vIGZpbHRlciIsIF9fZnVuY19fKSk7CisKKwlQQ1BVX0lOQyhjbnQudl9p
bnRyKTsKKwlpcnFfcm9vdF9maWx0ZXIoaXJxX3Jvb3RfYXJnLCB0Zik7Cit9CisKKy8qCisgKiAg
QVJNIGludGVycnVwdCBjb250cm9sbGVyIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBpbnRlcnJ1cHRz
LiBJdCBzaG91bGQKKyAqICBiZSBjYWxsZWQgc3RyYWlnaHQgZnJvbSB0aGUgaW50ZXJydXB0IGNv
bnRyb2xsZXIsIHdoZW4gYXNzb2NpYXRlZCBpbnRlcnJ1cHQKKyAqICBzb3VyY2UgaXMgbGVhcm5l
ZC4KKyAqLwordm9pZAorYXJtX2lycV9kaXNwYXRjaChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywg
c3RydWN0IHRyYXBmcmFtZSAqdGYpCit7CisJaW50IGVycm9yOworCisJS0FTU0VSVChpc3JjICE9
IE5VTEwsICgiJXM6IG5vIHNvdXJjZSIsIF9fZnVuY19fKSk7CisKKwlpc3JjX2luY3JlbWVudF9j
b3VudChpc3JjKTsKKworCWlmIChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMKSB7CisJCWVycm9y
ID0gaXNyYy0+aXNyY19maWx0ZXIoaXNyYy0+aXNyY19hcmcsIHRmKTsKKwkJUElDX1BPU1RfRklM
VEVSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsKKwkJaWYgKGVycm9yID09IEZJTFRFUl9IQU5ETEVE
KQorCQkJcmV0dXJuOworCX0gZWxzZSBpZiAoaXNyYy0+aXNyY19ldmVudCAhPSBOVUxMKSB7CisJ
CWlmIChpbnRyX2V2ZW50X2hhbmRsZShpc3JjLT5pc3JjX2V2ZW50LCB0ZikgPT0gMCkKKwkJCXJl
dHVybjsKKwl9CisKKwlpc3JjX2luY3JlbWVudF9zdHJheWNvdW50KGlzcmMpOworCVBJQ19ESVNB
QkxFX1NPVVJDRShpc3JjLT5pc3JjX2RldiwgaXNyYyk7CisKKwlkZXZpY2VfcHJpbnRmKGlzcmMt
PmlzcmNfZGV2LCAic3RyYXkgaXJxIDwlcz4gZGlzYWJsZWQiLAorCSAgICBpc3JjLT5pc3JjX25h
bWUpOworfQorCisvKgorICogIEFsbG9jYXRlIGludGVycnVwdCBzb3VyY2UuCisgKi8KK3N0YXRp
YyBzdHJ1Y3QgYXJtX2lycXNyYyAqCitpc3JjX2FsbG9jKHVfaW50IHR5cGUsIHVfaW50IGV4dHNp
emUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisKKwlpc3JjID0gbWFsbG9jKHNpemVv
ZigqaXNyYykgKyBleHRzaXplLCBNX0lOVFJORywgTV9XQUlUT0sgfCBNX1pFUk8pOworCWlzcmMt
PmlzcmNfaXJxID0gSVJRX0lOVkFMSUQ7CS8qIGp1c3QgdG8gYmUgc2FmZSAqLworCWlzcmMtPmlz
cmNfdHlwZSA9IHR5cGU7CisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05TUENfTk9O
RTsKKwlpc3JjLT5pc3JjX3RyaWcgPSBJTlRSX1RSSUdHRVJfQ09ORk9STTsKKwlpc3JjLT5pc3Jj
X3BvbCA9IElOVFJfUE9MQVJJVFlfQ09ORk9STTsKKwlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUp
OworCXJldHVybiAoaXNyYyk7Cit9CisKKy8qCisgKiAgRnJlZSBpbnRlcnJ1cHQgc291cmNlLgor
ICovCitzdGF0aWMgdm9pZAoraXNyY19mcmVlKHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQorewor
CisJZnJlZShpc3JjLCBNX0lOVFJORyk7Cit9CisKK3ZvaWQKK2FybV9pcnFfc2V0X25hbWUoc3Ry
dWN0IGFybV9pcnFzcmMgKmlzcmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3Qg
YXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c25wcmludGYoaXNyYy0+aXNyY19uYW1lLCBB
Uk1fSVNSQ19OQU1FTEVOLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisvKgorICogIEFs
bG9jIHVuaXF1ZSBpbnRlcnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpIGZvciBpbnRlcnJ1
cHQgc291cmNlLgorICoKKyAqICBUaGVyZSBjb3VsZCBiZSB2YXJpb3VzIHN0cmF0ZWdpZXMgaG93
IHRvIGFsbG9jYXRlIGZyZWUgaW50ZXJydXB0IG51bWJlcgorICogIChyZXNvdXJjZSBoYW5kbGUp
IGZvciBuZXcgaW50ZXJydXB0IHNvdXJjZS4KKyAqCisgKiAgMS4gSGFuZGxlcyBhcmUgYWx3YXlz
IGFsbG9jYXRlZCBmb3J3YXJkLCBzbyBoYW5kbGVzIGFyZSBub3QgcmVjeWNsZWQKKyAqICAgICBp
bW1lZGlhdGVseS4gSG93ZXZlciwgaWYgb25seSBvbmUgZnJlZSBoYW5kbGUgbGVmdCB3aGljaCBp
cyByZXVzZWQKKyAqICAgICBjb25zdGFudGx5Li4uCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNfYWxs
b2NfaXJxX2xvY2tlZChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwl1X2ludCBtYXhpcnFz
LCBpcnE7CisKKwltdHhfYXNzZXJ0KCZpc3JjX3RhYmxlX2xvY2ssIE1BX09XTkVEKTsKKworCW1h
eGlycXMgPSBuaXRlbXMoaXJxX3NvdXJjZXMpOworCWlmIChpcnFfbmV4dF9mcmVlID49IG1heGly
cXMpCisJCXJldHVybiAoRU5PU1BDKTsKKworCWZvciAoaXJxID0gaXJxX25leHRfZnJlZTsgaXJx
IDwgbWF4aXJxczsgaXJxKyspIHsKKwkJaWYgKGlycV9zb3VyY2VzW2lycV0gPT0gTlVMTCkKKwkJ
CWdvdG8gZm91bmQ7CisJfQorCWZvciAoaXJxID0gMDsgaXJxIDwgaXJxX25leHRfZnJlZTsgaXJx
KyspIHsKKwkJaWYgKGlycV9zb3VyY2VzW2lycV0gPT0gTlVMTCkKKwkJCWdvdG8gZm91bmQ7CisJ
fQorCisJaXJxX25leHRfZnJlZSA9IG1heGlycXM7CisJcmV0dXJuIChFTk9TUEMpOworCitmb3Vu
ZDoKKwlpc3JjLT5pc3JjX2lycSA9IGlycTsKKwlpcnFfc291cmNlc1tpcnFdID0gaXNyYzsKKwor
CWFybV9pcnFfc2V0X25hbWUoaXNyYywgImlycSV1IiwgaXJxKTsKKwlpc3JjX3NldHVwX2NvdW50
ZXJzKGlzcmMpOworCisJaXJxX25leHRfZnJlZSA9IGlycSArIDE7CisJaWYgKGlycV9uZXh0X2Zy
ZWUgPj0gbWF4aXJxcykKKwkJaXJxX25leHRfZnJlZSA9IDA7CisJcmV0dXJuICgwKTsKK30KKyNp
ZmRlZiBub3R5ZXQKKy8qCisgKiAgRnJlZSB1bmlxdWUgaW50ZXJydXB0IG51bWJlciAocmVzb3Vy
Y2UgaGFuZGxlKSBmcm9tIGludGVycnVwdCBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNf
ZnJlZV9pcnEoc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJdV9pbnQgbWF4aXJxczsKKwor
CW10eF9hc3NlcnQoJmlzcmNfdGFibGVfbG9jaywgTUFfTk9UT1dORUQpOworCisJbWF4aXJxcyA9
IG5pdGVtcyhpcnFfc291cmNlcyk7CisJaWYgKGlzcmMtPmlzcmNfaXJxID49IG1heGlycXMpCisJ
CXJldHVybiAoRUlOVkFMKTsKKworCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCWlmIChp
cnFfc291cmNlc1tpc3JjLT5pc3JjX2lycV0gIT0gaXNyYykgeworCQltdHhfdW5sb2NrKCZpc3Jj
X3RhYmxlX2xvY2spOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaXJxX3NvdXJjZXNbaXNy
Yy0+aXNyY19pcnFdID0gTlVMTDsKKwlpc3JjLT5pc3JjX2lycSA9IElSUV9JTlZBTElEOwkvKiBq
dXN0IHRvIGJlIHNhZmUgKi8KKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJcmV0
dXJuICgwKTsKK30KKyNlbmRpZgorLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IHNvdXJjZSBieSBp
bnRlcnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpLgorICovCitzdGF0aWMgc3RydWN0IGFy
bV9pcnFzcmMgKgoraXNyY19sb29rdXAodV9pbnQgaXJxKQoreworCisJaWYgKGlycSA8IG5pdGVt
cyhpcnFfc291cmNlcykpCisJCXJldHVybiAoaXJxX3NvdXJjZXNbaXJxXSk7CisJcmV0dXJuIChO
VUxMKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IHNvdXJjZSBieSBuYW1lc3BhY2Ug
ZGF0YS4KKyAqLworc3RhdGljIHN0cnVjdCBhcm1faXJxc3JjICoKK2lzcmNfbmFtZXNwYWNlX2xv
b2t1cChkZXZpY2VfdCBkZXYsIHVpbnQxNl90IHR5cGUsIHVpbnQxNl90IG51bSkKK3sKKwl1X2lu
dCBpcnE7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisKKwltdHhfYXNzZXJ0KCZpc3JjX3Rh
YmxlX2xvY2ssIE1BX09XTkVEKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgbml0ZW1zKGlycV9z
b3VyY2VzKTsgaXJxKyspIHsKKwkJaXNyYyA9IGlycV9zb3VyY2VzW2lycV07CisJCWlmIChpc3Jj
ICE9IE5VTEwgJiYgaXNyYy0+aXNyY19kZXYgPT0gZGV2ICYmCisJCSAgICBpc3JjLT5pc3JjX25z
cGNfdHlwZSA9PSB0eXBlICYmIGlzcmMtPmlzcmNfbnNwY19udW0gPT0gbnVtKQorCQkJcmV0dXJu
IChpc3JjKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqICBNYXAgaW50ZXJydXB0
IHNvdXJjZSBhY2NvcmRpbmcgdG8gbmFtZXNwYWNlIGludG8gZnJhbWV3b3JrLiBJZiBzdWNoIG1h
cHBpbmcKKyAqICBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0LiBSZXR1cm4gdW5pcXVlIGludGVy
cnVwdCBudW1iZXIgKHJlc291cmNlIGhhbmRsZSkKKyAqICBhc3NvY2lhdGVkIHdpdGggbWFwcGVk
IGludGVycnVwdCBzb3VyY2UuCisgKi8KK3VfaW50Cithcm1fbmFtZXNwYWNlX21hcF9pcnEoZGV2
aWNlX3QgZGV2LCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBudW0pCit7CisJc3RydWN0IGFybV9p
cnFzcmMgKmlzcmMsICpuZXdfaXNyYzsKKwlpbnQgZXJyb3I7CisKKwluZXdfaXNyYyA9IGlzcmNf
YWxsb2MoQVJNX0lTUkNUX05BTUVTUEFDRSwgMCk7CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9s
b2NrKTsKKwlpc3JjID0gaXNyY19uYW1lc3BhY2VfbG9va3VwKGRldiwgdHlwZSwgbnVtKTsKKwlp
ZiAoaXNyYyAhPSBOVUxMKSB7CisJCW10eF91bmxvY2soJmlzcmNfdGFibGVfbG9jayk7CisJCWlz
cmNfZnJlZShuZXdfaXNyYyk7CisJCXJldHVybiAoaXNyYy0+aXNyY19pcnEpOwkvKiBhbHJlYWR5
IG1hcHBlZCAqLworCX0KKworCWVycm9yID0gaXNyY19hbGxvY19pcnFfbG9ja2VkKG5ld19pc3Jj
KTsKKwlpZiAoZXJyb3IgIT0gMCkgeworCQltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOwor
CQlpc3JjX2ZyZWUobmV3X2lzcmMpOworCQlyZXR1cm4gKElSUV9JTlZBTElEKTsJCS8qIG5vIHNw
YWNlIGxlZnQgKi8KKwl9CisKKwluZXdfaXNyYy0+aXNyY19kZXYgPSBkZXY7CisJbmV3X2lzcmMt
PmlzcmNfbnNwY190eXBlID0gdHlwZTsKKwluZXdfaXNyYy0+aXNyY19uc3BjX251bSA9IG51bTsK
KwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJcmV0dXJuIChuZXdfaXNyYy0+aXNy
Y19pcnEpOworfQorCisjaWZkZWYgRkRUCisvKgorICogIExvb2t1cCBpbnRlcnJ1cHQgc291cmNl
IGJ5IEZEVCBkYXRhLgorICovCitzdGF0aWMgc3RydWN0IGFybV9pcnFzcmMgKgoraXNyY19mZHRf
bG9va3VwKGludHB0cl90IHhyZWYsIHBjZWxsX3QgKmNlbGxzLCB1X2ludCBuY2VsbHMpCit7CisJ
dV9pbnQgaXJxLCBjZWxsc2l6ZTsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKworCW10eF9h
c3NlcnQoJmlzcmNfdGFibGVfbG9jaywgTUFfT1dORUQpOworCisJY2VsbHNpemUgPSBuY2VsbHMg
KiBzaXplb2YoKmNlbGxzKTsKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5pdGVtcyhpcnFfc291cmNl
cyk7IGlycSsrKSB7CisJCWlzcmMgPSBpcnFfc291cmNlc1tpcnFdOworCQlpZiAoaXNyYyAhPSBO
VUxMICYmIGlzcmMtPmlzcmNfdHlwZSA9PSBBUk1fSVNSQ1RfRkRUICYmCisJCSAgICBpc3JjLT5p
c3JjX3hyZWYgPT0geHJlZiAmJiBpc3JjLT5pc3JjX25jZWxscyA9PSBuY2VsbHMgJiYKKwkJICAg
IG1lbWNtcChpc3JjLT5pc3JjX2NlbGxzLCBjZWxscywgY2VsbHNpemUpID09IDApCisJCQlyZXR1
cm4gKGlzcmMpOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogIE1hcCBpbnRlcnJ1
cHQgc291cmNlIGFjY29yZGluZyB0byBGRFQgZGF0YSBpbnRvIGZyYW1ld29yay4gSWYgc3VjaCBt
YXBwaW5nCisgKiAgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBpdC4gUmV0dXJuIHVuaXF1ZSBpbnRl
cnJ1cHQgbnVtYmVyIChyZXNvdXJjZSBoYW5kbGUpCisgKiAgYXNzb2NpYXRlZCB3aXRoIG1hcHBl
ZCBpbnRlcnJ1cHQgc291cmNlLgorICovCit1X2ludAorYXJtX2ZkdF9tYXBfaXJxKHBoYW5kbGVf
dCBub2RlLCBwY2VsbF90ICpjZWxscywgdV9pbnQgbmNlbGxzKQoreworCXN0cnVjdCBhcm1faXJx
c3JjICppc3JjLCAqbmV3X2lzcmM7CisJdV9pbnQgY2VsbHNpemU7CisJaW50cHRyX3QgeHJlZjsK
KwlpbnQgZXJyb3I7CisKKwl4cmVmID0gKGludHB0cl90KW5vZGU7CS8qIEl0J3Mgc28gc2ltcGxl
IGZvciBub3cuICovCisKKwljZWxsc2l6ZSA9IG5jZWxscyAqIHNpemVvZigqY2VsbHMpOworCW5l
d19pc3JjID0gaXNyY19hbGxvYyhBUk1fSVNSQ1RfRkRULCBjZWxsc2l6ZSk7CisKKwltdHhfbG9j
aygmaXNyY190YWJsZV9sb2NrKTsKKwlpc3JjID0gaXNyY19mZHRfbG9va3VwKHhyZWYsIGNlbGxz
LCBuY2VsbHMpOworCWlmIChpc3JjICE9IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmaXNyY190YWJs
ZV9sb2NrKTsKKwkJaXNyY19mcmVlKG5ld19pc3JjKTsKKwkJcmV0dXJuIChpc3JjLT5pc3JjX2ly
cSk7CS8qIGFscmVhZHkgbWFwcGVkICovCisJfQorCisJZXJyb3IgPSBpc3JjX2FsbG9jX2lycV9s
b2NrZWQobmV3X2lzcmMpOworCWlmIChlcnJvciAhPSAwKSB7CisJCW10eF91bmxvY2soJmlzcmNf
dGFibGVfbG9jayk7CisJCWlzcmNfZnJlZShuZXdfaXNyYyk7CisJCXJldHVybiAoSVJRX0lOVkFM
SUQpOwkJLyogbm8gc3BhY2UgbGVmdCAqLworCX0KKworCW5ld19pc3JjLT5pc3JjX3hyZWYgPSB4
cmVmOworCW5ld19pc3JjLT5pc3JjX25jZWxscyA9IG5jZWxsczsKKwltZW1jcHkobmV3X2lzcmMt
PmlzcmNfY2VsbHMsIGNlbGxzLCBjZWxsc2l6ZSk7CisJbXR4X3VubG9jaygmaXNyY190YWJsZV9s
b2NrKTsKKworCXJldHVybiAobmV3X2lzcmMtPmlzcmNfaXJxKTsKK30KKyNlbmRpZgorCisvKgor
ICogIFJlZ2lzdGVyIGludGVycnVwdCBzb3VyY2UgaW50byBpbnRlcnJ1cHQgY29udHJvbGxlci4K
KyAqLworc3RhdGljIGludAoraXNyY19yZWdpc3RlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykK
K3sKKwlzdHJ1Y3QgYXJtX3BpYyAqcGljOworCWJvb2xlYW5fdCBpc19wZXJjcHU7CisJaW50IGVy
cm9yOworCisJaWYgKGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9SRUdJU1RFUkVEKQorCQlyZXR1
cm4gKDApOworCisJaWYgKGlzcmMtPmlzcmNfZGV2ID09IE5VTEwpIHsKKwkJcGljID0gcGljX2xv
b2t1cChOVUxMLCBpc3JjLT5pc3JjX3hyZWYpOworCQlpZiAocGljID09IE5VTEwgfHwgcGljLT5w
aWNfZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVTUkNIKTsKKwkJaXNyYy0+aXNyY19kZXYgPSBw
aWMtPnBpY19kZXY7CisJfQorCisJZXJyb3IgPSBQSUNfUkVHSVNURVIoaXNyYy0+aXNyY19kZXYs
IGlzcmMsICZpc19wZXJjcHUpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVycm9yKTsK
KworCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCWlzcmMtPmlzcmNfZmxhZ3MgfD0gSVNS
Q0ZfUkVHSVNURVJFRDsKKwlpZiAoaXNfcGVyY3B1KQorCQlpc3JjLT5pc3JjX2ZsYWdzIHw9IElT
UkNGX1BFUkNQVTsKKwlpc3JjX3VwZGF0ZV9uYW1lKGlzcmMsIE5VTEwpOworCW10eF91bmxvY2so
JmlzcmNfdGFibGVfbG9jayk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBTZXR1cCBmaWx0
ZXIgaW50byBpbnRlcnJ1cHQgc291cmNlLgorICovCitzdGF0aWMgaW50Citpc2NyX3NldHVwX2Zp
bHRlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqbmFtZSwKKyAgICBhcm1f
aXJxX2ZpbHRlcl90ICpmaWx0ZXIsIHZvaWQgKmFyZywgdm9pZCAqKmNvb2tpZXApCit7CisKKwlp
ZiAoZmlsdGVyID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCW10eF9sb2NrKCZpc3Jj
X3RhYmxlX2xvY2spOworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IG1peCB0aGUg
dHdvIHdheXMKKwkgKiBob3cgd2UgaGFuZGxlIGludGVycnVwdCBzb3VyY2VzLgorCSAqLworCWlm
IChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMIHx8IGlzcmMtPmlzcmNfZXZlbnQgIT0gTlVMTCkg
eworCQltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCQlyZXR1cm4gKEVCVVNZKTsKKwl9
CisJaXNyYy0+aXNyY19maWx0ZXIgPSBmaWx0ZXI7CisJaXNyYy0+aXNyY19hcmcgPSBhcmc7CisJ
aXNyY191cGRhdGVfbmFtZShpc3JjLCBuYW1lKTsKKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xv
Y2spOworCisJKmNvb2tpZXAgPSBpc3JjOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiAgSW50
ZXJydXB0IHNvdXJjZSBwcmVfaXRocmVhZCBtZXRob2QgZm9yIE1JIGludGVycnVwdCBmcmFtZXdv
cmsuCisgKi8KK3N0YXRpYyB2b2lkCithcm1faXNyY19wcmVfaXRocmVhZCh2b2lkICphcmcpCit7
CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmMgPSBhcmc7CisKKwlQSUNfUFJFX0lUSFJFQUQoaXNy
Yy0+aXNyY19kZXYsIGlzcmMpOworfQorCisvKgorICogIEludGVycnVwdCBzb3VyY2UgcG9zdF9p
dGhyZWFkIG1ldGhvZCBmb3IgTUkgaW50ZXJydXB0IGZyYW1ld29yay4KKyAqLworc3RhdGljIHZv
aWQKK2FybV9pc3JjX3Bvc3RfaXRocmVhZCh2b2lkICphcmcpCit7CisJc3RydWN0IGFybV9pcnFz
cmMgKmlzcmMgPSBhcmc7CisKKwlQSUNfUE9TVF9JVEhSRUFEKGlzcmMtPmlzcmNfZGV2LCBpc3Jj
KTsKK30KKworLyoKKyAqICBJbnRlcnJ1cHQgc291cmNlIHBvc3RfZmlsdGVyIG1ldGhvZCBmb3Ig
TUkgaW50ZXJydXB0IGZyYW1ld29yay4KKyAqLworc3RhdGljIHZvaWQKK2FybV9pc3JjX3Bvc3Rf
ZmlsdGVyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYyA9IGFyZzsKKwor
CVBJQ19QT1NUX0ZJTFRFUihpc3JjLT5pc3JjX2RldiwgaXNyYyk7Cit9CisKKy8qCisgKiAgSW50
ZXJydXB0IHNvdXJjZSBhc3NpZ25fY3B1IG1ldGhvZCBmb3IgTUkgaW50ZXJydXB0IGZyYW1ld29y
ay4KKyAqLworc3RhdGljIGludAorYXJtX2lzcmNfYXNzaWduX2NwdSh2b2lkICphcmcsIGludCBj
cHUpCit7CisjaWZkZWYgU01QCisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmMgPSBhcmc7CisJaW50
IGVycm9yOworCisJaWYgKGlzcmMtPmlzcmNfZGV2ICE9IGlycV9yb290X2RldikKKwkJcmV0dXJu
IChFSU5WQUwpOworCisJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7CisJaWYgKGNwdSA9PSBO
T0NQVSkgeworCQlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUpOworCQlpc3JjLT5pc3JjX2ZsYWdz
ICY9IH5JU1JDRl9CT1VORDsKKwl9IGVsc2UgeworCQlDUFVfU0VUT0YoY3B1LCAmaXNyYy0+aXNy
Y19jcHUpOworCQlpc3JjLT5pc3JjX2ZsYWdzIHw9IElTUkNGX0JPVU5EOworCX0KKworCS8qCisJ
ICogSW4gTk9DUFUgY2FzZSwgaXQncyB1cCB0byBQSUMgdG8gbGVhdmUgSVNSQyBlaXRoZXIgb24g
c2FtZSBDUFUgb3IKKwkgKiByZS1iYWxhbmNlIGl0IHRvIGFub3RoZXIgQ1BVIG9yIGVuYWJsZSBp
dCBvbiBtb3JlIENQVXMuIEhvd2V2ZXIsCisJICogUElDIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBp
c3JjX2NwdSBhcHByb3ByaWF0ZWx5IHRvIGtlZXAgdXMgd2VsbAorCSAqIGluZm9ybWVkIGlmIHRo
ZSBjYWxsIGlzIHN1Y2Nlc3NmdWxsLgorCSAqLworCWlmIChpcnFfYXNzaWduX2NwdSkgeworCQll
cnJvciA9IFBJQ19CSU5EKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsKKwkJaWYgKGVycm9yKSB7CisJ
CQlDUFVfWkVSTygmaXNyYy0+aXNyY19jcHUpOworCQkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s
b2NrKTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJfQorCW10eF91bmxvY2soJmlzcmNfdGFi
bGVfbG9jayk7CisJcmV0dXJuICgwKTsKKyNlbHNlCisJcmV0dXJuIChFT1BOT1RTVVBQKTsKKyNl
bmRpZgorfQorCisvKgorICogIENyZWF0ZSBpbnRlcnJ1cHQgZXZlbnQgZm9yIGludGVycnVwdCBz
b3VyY2UuCisgKi8KK3N0YXRpYyBpbnQKK2lzcmNfZXZlbnRfY3JlYXRlKHN0cnVjdCBhcm1faXJx
c3JjICppc3JjKQoreworCXN0cnVjdCBpbnRyX2V2ZW50ICppZTsKKwlpbnQgZXJyb3I7CisKKwll
cnJvciA9IGludHJfZXZlbnRfY3JlYXRlKCZpZSwgaXNyYywgMCwgaXNyYy0+aXNyY19pcnEsCisJ
ICAgIGFybV9pc3JjX3ByZV9pdGhyZWFkLCBhcm1faXNyY19wb3N0X2l0aHJlYWQsIGFybV9pc3Jj
X3Bvc3RfZmlsdGVyLAorCSAgICBhcm1faXNyY19hc3NpZ25fY3B1LCAiJXM6IiwgaXNyYy0+aXNy
Y19uYW1lKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJbXR4X2xvY2soJmlz
cmNfdGFibGVfbG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbWl4IHRo
ZSB0d28gd2F5cworCSAqIGhvdyB3ZSBoYW5kbGUgaW50ZXJydXB0IHNvdXJjZXMuIExldCBjb250
ZXN0ZWQgZXZlbnQgd2lucy4KKwkgKi8KKwlpZiAoaXNyYy0+aXNyY19maWx0ZXIgIT0gTlVMTCB8
fCBpc3JjLT5pc3JjX2V2ZW50ICE9IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s
b2NrKTsKKwkJaW50cl9ldmVudF9kZXN0cm95KGllKTsKKwkJcmV0dXJuIChpc3JjLT5pc3JjX2V2
ZW50ICE9IE5VTEwgPyBFQlVTWSA6IDApOworCX0KKwlpc3JjLT5pc3JjX2V2ZW50ID0gaWU7CisJ
bXR4X3VubG9jaygmaXNyY190YWJsZV9sb2NrKTsKKworCXJldHVybiAoMCk7Cit9CisjaWZkZWYg
bm90eWV0CisvKgorICogIERlc3Ryb3kgaW50ZXJydXB0IGV2ZW50IGZvciBpbnRlcnJ1cHQgc291
cmNlLgorICovCitzdGF0aWMgdm9pZAoraXNyY19ldmVudF9kZXN0cm95KHN0cnVjdCBhcm1faXJx
c3JjICppc3JjKQoreworCXN0cnVjdCBpbnRyX2V2ZW50ICppZTsKKworCW10eF9sb2NrKCZpc3Jj
X3RhYmxlX2xvY2spOworCWllID0gaXNyYy0+aXNyY19ldmVudDsKKwlpc3JjLT5pc3JjX2V2ZW50
ID0gTlVMTDsKKwltdHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCisJaWYgKGllICE9IE5V
TEwpCisJCWludHJfZXZlbnRfZGVzdHJveShpZSk7Cit9CisjZW5kaWYKKy8qCisgKiAgQWRkIGhh
bmRsZXIgdG8gaW50ZXJydXB0IHNvdXJjZS4KKyAqLworc3RhdGljIGludAoraXNyY19hZGRfaGFu
ZGxlcihzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqbmFtZSwKKyAgICBkcml2
ZXJfZmlsdGVyX3QgZmlsdGVyLCBkcml2ZXJfaW50cl90IGhhbmRsZXIsIHZvaWQgKmFyZywKKyAg
ICBlbnVtIGludHJfdHlwZSBmbGFncywgdm9pZCAqKmNvb2tpZXApCit7CisJaW50IGVycm9yOwor
CisJaWYgKGlzcmMtPmlzcmNfZXZlbnQgPT0gTlVMTCkgeworCQllcnJvciA9IGlzcmNfZXZlbnRf
Y3JlYXRlKGlzcmMpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsKKwl9CisKKwll
cnJvciA9IGludHJfZXZlbnRfYWRkX2hhbmRsZXIoaXNyYy0+aXNyY19ldmVudCwgbmFtZSwgZmls
dGVyLCBoYW5kbGVyLAorCSAgICBhcmcsIGludHJfcHJpb3JpdHkoZmxhZ3MpLCBmbGFncywgY29v
a2llcCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7
CisJCWludHJjbnRfdXBkYXRlbmFtZShpc3JjKTsKKwkJbXR4X3VubG9jaygmaXNyY190YWJsZV9s
b2NrKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJy
dXB0IGNvbnRyb2xsZXIgbG9ja2VkLgorICovCitzdGF0aWMgc3RydWN0IGFybV9waWMgKgorcGlj
X2xvb2t1cF9sb2NrZWQoZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKQoreworCXN0cnVjdCBh
cm1fcGljICpwaWM7CisKKwltdHhfYXNzZXJ0KCZwaWNfbGlzdF9sb2NrLCBNQV9PV05FRCk7CisK
KwlTTElTVF9GT1JFQUNIKHBpYywgJnBpY19saXN0LCBwaWNfbmV4dCkgeworCQlpZiAocGljLT5w
aWNfeHJlZiAhPSB4cmVmKQorCQkJY29udGludWU7CisJCWlmIChwaWMtPnBpY194cmVmICE9IDAg
fHwgcGljLT5waWNfZGV2ID09IGRldikKKwkJCXJldHVybiAocGljKTsKKwl9CisJcmV0dXJuIChO
VUxMKTsKK30KKworLyoKKyAqICBMb29rdXAgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgKi8KK3N0
YXRpYyBzdHJ1Y3QgYXJtX3BpYyAqCitwaWNfbG9va3VwKGRldmljZV90IGRldiwgaW50cHRyX3Qg
eHJlZikKK3sKKwlzdHJ1Y3QgYXJtX3BpYyAqcGljOworCisJbXR4X2xvY2soJnBpY19saXN0X2xv
Y2spOworCXBpYyA9IHBpY19sb29rdXBfbG9ja2VkKGRldiwgeHJlZik7CisJbXR4X3VubG9jaygm
cGljX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gKHBpYyk7Cit9CisKKy8qCisgKiAgQ3JlYXRlIGlu
dGVycnVwdCBjb250cm9sbGVyLgorICovCitzdGF0aWMgc3RydWN0IGFybV9waWMgKgorcGljX2Ny
ZWF0ZShkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpCit7CisJc3RydWN0IGFybV9waWMgKnBp
YzsKKworCW10eF9sb2NrKCZwaWNfbGlzdF9sb2NrKTsKKwlwaWMgPSBwaWNfbG9va3VwX2xvY2tl
ZChkZXYsIHhyZWYpOworCWlmIChwaWMgIT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZwaWNfbGlz
dF9sb2NrKTsKKwkJcmV0dXJuIChwaWMpOworCX0KKwlwaWMgPSBtYWxsb2Moc2l6ZW9mKCpwaWMp
LCBNX0lOVFJORywgTV9OT1dBSVQgfCBNX1pFUk8pOworCXBpYy0+cGljX3hyZWYgPSB4cmVmOwor
CXBpYy0+cGljX2RldiA9IGRldjsKKwlTTElTVF9JTlNFUlRfSEVBRCgmcGljX2xpc3QsIHBpYywg
cGljX25leHQpOworCW10eF91bmxvY2soJnBpY19saXN0X2xvY2spOworCisJcmV0dXJuIChwaWMp
OworfQorI2lmZGVmIG5vdHlldAorLyoKKyAqICBEZXN0cm95IGludGVycnVwdCBjb250cm9sbGVy
LgorICovCitzdGF0aWMgdm9pZAorcGljX2Rlc3Ryb3koZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4
cmVmKQoreworCXN0cnVjdCBhcm1fcGljICpwaWM7CisKKwltdHhfbG9jaygmcGljX2xpc3RfbG9j
ayk7CisJcGljID0gcGljX2xvb2t1cF9sb2NrZWQoZGV2LCB4cmVmKTsKKwlpZiAocGljID09IE5V
TEwpIHsKKwkJbXR4X3VubG9jaygmcGljX2xpc3RfbG9jayk7CisJCXJldHVybjsKKwl9CisJU0xJ
U1RfUkVNT1ZFKCZwaWNfbGlzdCwgcGljLCBhcm1fcGljLCBwaWNfbmV4dCk7CisJbXR4X3VubG9j
aygmcGljX2xpc3RfbG9jayk7CisKKwlmcmVlKHBpYywgTV9JTlRSTkcpOworfQorI2VuZGlmCisv
KgorICogIFJlZ2lzdGVyIGludGVycnVwdCBjb250cm9sbGVyLgorICovCitpbnQKK2FybV9waWNf
cmVnaXN0ZXIoZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKQoreworCXN0cnVjdCBhcm1fcGlj
ICpwaWM7CisKKwlwaWMgPSBwaWNfY3JlYXRlKGRldiwgeHJlZik7CisJaWYgKHBpYyA9PSBOVUxM
KQorCQlyZXR1cm4gKEVOT01FTSk7CisJaWYgKHBpYy0+cGljX2RldiAhPSBkZXYpCisJCXJldHVy
biAoRUlOVkFMKTsJLyogWFhYIGl0IGNvdWxkIGJlIG1hbnkgdGhpbmdzLiAqLworCisJZGVidWdm
KCJQSUMgJXAgcmVnaXN0ZXJlZCBmb3IgJXMgPHhyZWYgJXg+XG4iLCBwaWMsCisJICAgIGRldmlj
ZV9nZXRfbmFtZXVuaXQoZGV2KSwgeHJlZik7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBV
bnJlZ2lzdGVyIGludGVycnVwdCBjb250cm9sbGVyLgorICovCitpbnQKK2FybV9waWNfdW5yZWdp
c3RlcihkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYpCit7CisKKwlwYW5pYygiJXM6IG5vdCBp
bXBsZW1lbnRlZCIsIF9fZnVuY19fKTsKK30KKworLyoKKyAqICBNYXJrIGludGVycnVwdCBjb250
cm9sbGVyIChpdHNlbGYpIGFzIGEgcm9vdCBvbmUuCisgKgorICogIE5vdGUgdGhhdCBvbmx5IGFu
IGludGVycnVwdCBjb250cm9sbGVyIGNhbiByZWFsbHkga25vdyBpdHMgcG9zaXRpb24KKyAqICBp
biBpbnRlcnJ1cHQgY29udHJvbGxlcidzIHRyZWUuIFNvIHJvb3QgUElDIG11c3QgY2xhaW0gaXRz
ZWxmIGFzIGEgcm9vdC4KKyAqCisgKiAgSW4gRkRUIGNhc2UsIGFjY29yZGluZyB0byBlUEFQUiBh
cHByb3ZlZCB2ZXJzaW9uIDEuMSBmcm9tIDA4IEFwcmlsIDIwMTEsCisgKiAgcGFnZSAzMDoKKyAq
ICAgICJUaGUgcm9vdCBvZiB0aGUgaW50ZXJydXB0IHRyZWUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRy
YXZlcnNhbAorICogICAgIG9mIHRoZSBpbnRlcnJ1cHQgdHJlZSByZWFjaGVzIGFuIGludGVycnVw
dCBjb250cm9sbGVyIG5vZGUgd2l0aG91dAorICogICAgIGFuIGludGVycnVwdHMgcHJvcGVydHkg
YW5kIHRodXMgbm8gZXhwbGljaXQgaW50ZXJydXB0IHBhcmVudC4iCisgKi8KK2ludAorYXJtX3Bp
Y19jbGFpbV9yb290KGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZiwgYXJtX2lycV9maWx0ZXJf
dCAqZmlsdGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgaXBpY291bnQpCit7CisKKwlpZiAocGlj
X2xvb2t1cChkZXYsIHhyZWYpID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJub3Qg
cmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYgKGZpbHRlciA9PSBO
VUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiZmlsdGVyIG1pc3NpbmdcbiIpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisJfQorCisJLyoKKwkgKiBPbmx5IG9uZSBpbnRlcnJ1cHQgY29udHJvbGxl
cnMgY291bGQgYmUgb24gdGhlIHJvb3QgZm9yIG5vdy4KKwkgKiBGdXJ0aGVyLCB3ZSBzdXBwb3Nl
IHRoYXQgdGhlcmUgaXMgbm90IHRocmVhZGVkIGludGVycnVwdAorCSAqIHJvdXRpbmUgKGhhbmRs
ZXIpIG9uIHRoZSByb290LiBTZWUgYXJtX2lycV9oYW5kbGVyKCkuCisJICovCisJaWYgKGlycV9y
b290X2RldiAhPSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiYW5vdGhlciByb290IGFs
cmVhZHkgc2V0XG4iKTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJaXJxX3Jvb3RfZGV2ID0g
ZGV2OworCWlycV9yb290X2ZpbHRlciA9IGZpbHRlcjsKKwlpcnFfcm9vdF9hcmcgPSBhcmc7CisJ
aXJxX3Jvb3RfaXBpY291bnQgPSBpcGljb3VudDsKKworCWRlYnVnZigiaXJxIHJvb3Qgc2V0IHRv
ICVzXG4iLCBkZXZpY2VfZ2V0X25hbWV1bml0KGRldikpOworCXJldHVybiAoMCk7Cit9CisKK2lu
dAorYXJtX2lycV9hZGRfaGFuZGxlcihkZXZpY2VfdCBkZXYsIGRyaXZlcl9maWx0ZXJfdCBmaWx0
LCBkcml2ZXJfaW50cl90IGhhbmQsCisgICAgdm9pZCAqYXJnLCB1X2ludCBpcnEsIGludCBmbGFn
cywgdm9pZCAqKmNvb2tpZXApCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgYXJtX2ly
cXNyYyAqaXNyYzsKKwlpbnQgZXJyb3I7CisKKwluYW1lID0gZGV2aWNlX2dldF9uYW1ldW5pdChk
ZXYpOworCisJLyoKKwkgKiBTdGFuZGFyZCBoYW5kbGluZyBpcyBkb25lIHRocnUgTUkgaW50ZXJy
dXB0IGZyYW1ld29yay4gSG93ZXZlciwKKwkgKiBzb21lIGludGVycnVwdHMgY291bGQgcmVxdWVz
dCBzb2xlbHkgb3duIHNwZWNpYWwgaGFuZGxpbmcuIFRoaXMKKwkgKiBub24gc3RhbmRhcmQgaGFu
ZGxpbmcgY2FuIGJlIHVzZWQgZm9yIGludGVycnVwdCBjb250cm9sbGVycyB3aXRob3V0CisJICog
aGFuZGxlciAoZmlsdGVyIG9ubHkpLCBzbyBpbiBjYXNlIHRoYXQgaW50ZXJydXB0IGNvbnRyb2xs
ZXJzIGFyZQorCSAqIGNoYWluZWQsIE1JIGludGVycnVwdCBmcmFtZXdvcmsgaXMgY2FsbGVkIG9u
bHkgaW4gbGVhZiBjb250cm9sbGVyLgorCSAqCisJICogTm90ZSB0aGF0IHJvb3QgaW50ZXJydXB0
IGNvbnRyb2xsZXIgcm91dGluZSBpcyBzZXJ2ZWQgYXMgd2VsbCwKKwkgKiBob3dldmVyIGluIG1h
aW4gc3lzdGVtIGRpc3BhdGNoIHJvdXRpbmUuCisJICovCisJaWYgKGZsYWdzICYgSU5UUl9TT0xP
ICYmIGhhbmQgIT0gTlVMTCkgeworCQlkZWJ1Z2YoImlycSAldSBjYW5ub3Qgc29sbyBvbiAlc1xu
IiwgaXJxLCBuYW1lKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCWlzcmMgPSBpc3JjX2xv
b2t1cChpcnEpOworCWlmIChpc3JjID09IE5VTEwpIHsKKwkJZGVidWdmKCJpcnEgJXUgd2l0aG91
dCBzb3VyY2Ugb24gJXNcbiIsIGlycSwgbmFtZSk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisK
KwllcnJvciA9IGlzcmNfcmVnaXN0ZXIoaXNyYyk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJZGVi
dWdmKCJpcnEgJXUgbWFwIGVycm9yICVkIG9uICVzXG4iLCBpcnEsIGVycm9yLCBuYW1lKTsKKwkJ
cmV0dXJuIChlcnJvcik7CisJfQorCisJaWYgKGZsYWdzICYgSU5UUl9TT0xPKSB7CisJCWVycm9y
ID0gaXNjcl9zZXR1cF9maWx0ZXIoaXNyYywgbmFtZSwgKGFybV9pcnFfZmlsdGVyX3QgKilmaWx0
LAorCQkgICAgYXJnLCBjb29raWVwKTsKKwkJZGVidWdmKCJpcnEgJXUgc2V0dXAgZmlsdGVyIGVy
cm9yICVkIG9uICVzXG4iLCBpcnEsIGVycm9yLAorCQkgICAgbmFtZSk7CisJfSBlbHNlIHsKKwkJ
ZXJyb3IgPSBpc3JjX2FkZF9oYW5kbGVyKGlzcmMsIG5hbWUsIGZpbHQsIGhhbmQsIGFyZywgZmxh
Z3MsCisJCSAgICBjb29raWVwKTsKKwkJZGVidWdmKCJpcnEgJXUgYWRkIGhhbmRsZXIgZXJyb3Ig
JWQgb24gJXNcbiIsIGlycSwgZXJyb3IsIG5hbWUpOworCX0KKwlpZiAoZXJyb3IgIT0gMCkKKwkJ
cmV0dXJuIChlcnJvcik7CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9sb2NrKTsKKwlpc3JjLT5p
c3JjX2hhbmRsZXJzKys7CisJaWYgKGlzcmMtPmlzcmNfaGFuZGxlcnMgPT0gMSkgeworCQlQSUNf
RU5BQkxFX0lOVFIoaXNyYy0+aXNyY19kZXYsIGlzcmMpOworCQlQSUNfRU5BQkxFX1NPVVJDRShp
c3JjLT5pc3JjX2RldiwgaXNyYyk7CisJfQorCW10eF91bmxvY2soJmlzcmNfdGFibGVfbG9jayk7
CisJcmV0dXJuICgwKTsKK30KKworaW50Cithcm1faXJxX3JlbW92ZV9oYW5kbGVyKGRldmljZV90
IGRldiwgdV9pbnQgaXJxLCB2b2lkICpjb29raWUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlz
cmM7CisJaW50IGVycm9yOworCisJaXNyYyA9IGlzcmNfbG9va3VwKGlycSk7CisJaWYgKGlzcmMg
PT0gTlVMTCB8fCBpc3JjLT5pc3JjX2hhbmRsZXJzID09IDApCisJCXJldHVybiAoRUlOVkFMKTsK
KworCWlmIChpc3JjLT5pc3JjX2ZpbHRlciAhPSBOVUxMKSB7CisJCWlmIChpc3JjICE9IGNvb2tp
ZSkKKwkJCXJldHVybiAoRUlOVkFMKTsKKworCQltdHhfbG9jaygmaXNyY190YWJsZV9sb2NrKTsK
KwkJaXNyYy0+aXNyY19maWx0ZXIgPSBOVUxMOworCQlpc3JjLT5pc3JjX2FyZyA9IE5VTEw7CisJ
CWlzcmMtPmlzcmNfaGFuZGxlcnMgPSAwOworCQlQSUNfRElTQUJMRV9TT1VSQ0UoaXNyYy0+aXNy
Y19kZXYsIGlzcmMpOworCQlQSUNfRElTQUJMRV9JTlRSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsK
KwkJaXNyY191cGRhdGVfbmFtZShpc3JjLCBOVUxMKTsKKwkJbXR4X3VubG9jaygmaXNyY190YWJs
ZV9sb2NrKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoaXNyYyAhPSBpbnRyX2hhbmRsZXJf
c291cmNlKGNvb2tpZSkpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVycm9yID0gaW50cl9ldmVu
dF9yZW1vdmVfaGFuZGxlcihjb29raWUpOworCWlmIChlcnJvciA9PSAwKSB7CisJCW10eF9sb2Nr
KCZpc3JjX3RhYmxlX2xvY2spOworCQlpc3JjLT5pc3JjX2hhbmRsZXJzLS07CisJCWlmIChpc3Jj
LT5pc3JjX2hhbmRsZXJzID09IDApIHsKKwkJCVBJQ19ESVNBQkxFX1NPVVJDRShpc3JjLT5pc3Jj
X2RldiwgaXNyYyk7CisJCQlQSUNfRElTQUJMRV9JTlRSKGlzcmMtPmlzcmNfZGV2LCBpc3JjKTsK
KwkJfQorCQlpbnRyY250X3VwZGF0ZW5hbWUoaXNyYyk7CisJCW10eF91bmxvY2soJmlzcmNfdGFi
bGVfbG9jayk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK2FybV9pcnFfY29uZmln
KHVfaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywgZW51bSBpbnRyX3BvbGFyaXR5IHBv
bCkKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKworCWlzcmMgPSBpc3JjX2xvb2t1cChp
cnEpOworCWlmIChpc3JjID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmIChpc3Jj
LT5pc3JjX2hhbmRsZXJzICE9IDApCisJCXJldHVybiAoRUJVU1kpOwkvKiBpbnRlcnJydXB0IGlz
IGVuYWJsZWQgKGFjdGl2ZSkgKi8KKworCS8qCisJICogT25jZSBhbiBpbnRlcnJ1cHQgaXMgZW5h
YmxlZCwgd2UgZG8gbm90IGNoYW5nZSBpdHMgY29uZmlndXJhdGlvbi4KKwkgKiBBIGNvbnRyb2xs
ZXIgUElDX0VOQUJMRV9JTlRSKCkgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGludGVycnVwdAor
CSAqIGlzIGdvaW50IHRvIGJlIGVuYWJsZWQuIEluIHRoaXMgbWV0aG9kLCBhIGNvbnRyb2xsZXIg
c2hvdWxkIHNldHVwCisJICogdGhlIGludGVycnVwdCBhY2NvcmRpbmcgdG8gc2F2ZWQgY29uZmln
dXJhdGlvbiBwYXJhbWV0ZXJzLgorCSAqLworCWlzcmMtPmlzcmNfdHJpZyA9IHRyaWc7CisJaXNy
Yy0+aXNyY19wb2wgPSBwb2w7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2FybV9pcnFfZGVz
Y3JpYmUodV9pbnQgaXJxLCB2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKmRlc2NyKQoreworCXN0
cnVjdCBhcm1faXJxc3JjICppc3JjOworCWludCBlcnJvcjsKKworCWlzcmMgPSBpc3JjX2xvb2t1
cChpcnEpOworCWlmIChpc3JjID09IE5VTEwgfHwgaXNyYy0+aXNyY19oYW5kbGVycyA9PSAwKQor
CQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoaXNyYy0+aXNyY19maWx0ZXIgIT0gTlVMTCkgewor
CQlpZiAoaXNyYyAhPSBjb29raWUpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkJbXR4X2xvY2so
JmlzcmNfdGFibGVfbG9jayk7CisJCWlzcmNfdXBkYXRlX25hbWUoaXNyYywgZGVzY3IpOworCQlt
dHhfdW5sb2NrKCZpc3JjX3RhYmxlX2xvY2spOworCQlyZXR1cm4gKDApOworCX0KKworCWVycm9y
ID0gaW50cl9ldmVudF9kZXNjcmliZV9oYW5kbGVyKGlzcmMtPmlzcmNfZXZlbnQsIGNvb2tpZSwg
ZGVzY3IpOworCWlmIChlcnJvciA9PSAwKSB7CisJCW10eF9sb2NrKCZpc3JjX3RhYmxlX2xvY2sp
OworCQlpbnRyY250X3VwZGF0ZW5hbWUoaXNyYyk7CisJCW10eF91bmxvY2soJmlzcmNfdGFibGVf
bG9jayk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisjaWZkZWYgU01QCitpbnQKK2FybV9p
cnFfYmluZCh1X2ludCBpcnEsIGludCBjcHUpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7
CisKKwlpc3JjID0gaXNyY19sb29rdXAoaXJxKTsKKwlpZiAoaXNyYyA9PSBOVUxMIHx8IGlzcmMt
PmlzcmNfaGFuZGxlcnMgPT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJaWYgKGlzcmMtPmlz
cmNfZmlsdGVyICE9IE5VTEwpCisJCXJldHVybiAoYXJtX2lzcmNfYXNzaWduX2NwdShpc3JjLCBj
cHUpKTsKKworCXJldHVybiAoaW50cl9ldmVudF9iaW5kKGlzcmMtPmlzcmNfZXZlbnQsIGNwdSkp
OworfQorCisvKgorICogUmV0dXJuIHRoZSBDUFUgdGhhdCB0aGUgbmV4dCBpbnRlcnJ1cHQgc291
cmNlIHNob3VsZCB1c2UuCisgKiBGb3Igbm93IGp1c3QgcmV0dXJucyB0aGUgbmV4dCBDUFUgYWNj
b3JkaW5nIHRvIHJvdW5kLXJvYmluLgorICovCit1X2ludAorYXJtX2lycV9uZXh0X2NwdSh1X2lu
dCBsYXN0X2NwdSwgY3B1c2V0X3QgKmNwdW1hc2spCit7CisKKwlpZiAoIWlycV9hc3NpZ25fY3B1
IHx8IG1wX25jcHVzID09IDEpCisJCXJldHVybiAoUENQVV9HRVQoY3B1aWQpKTsKKworCWRvIHsK
KwkJbGFzdF9jcHUrKzsKKwkJaWYgKGxhc3RfY3B1ID4gbXBfbWF4aWQpCisJCQlsYXN0X2NwdSA9
IDA7CisJfSB3aGlsZSAoIUNQVV9JU1NFVChsYXN0X2NwdSwgY3B1bWFzaykpOworCXJldHVybiAo
bGFzdF9jcHUpOworfQorCisvKgorICogIERpc3RyaWJ1dGUgYWxsIHRoZSBpbnRlcnJ1cHQgc291
cmNlcyBhbW9uZyB0aGUgYXZhaWxhYmxlCisgKiAgQ1BVcyBvbmNlIHRoZSBBUCdzIGhhdmUgYmVl
biBsYXVuY2hlZC4KKyAqLworc3RhdGljIHZvaWQKK2FybV9pcnFfc2h1ZmZsZSh2b2lkICphcmcg
X191bnVzZWQpCit7CisJc3RydWN0IGFybV9pcnFzcmMgKmlzcmM7CisJdV9pbnQgaTsKKworCWlm
IChtcF9uY3B1cyA9PSAxKQorCQlyZXR1cm47CisKKwltdHhfbG9jaygmaXNyY190YWJsZV9sb2Nr
KTsKKwlpcnFfYXNzaWduX2NwdSA9IFRSVUU7CisJZm9yIChpID0gMDsgaSA8IE5JUlE7IGkrKykg
eworCQlpc3JjID0gaXJxX3NvdXJjZXNbaV07CisJCWlmIChpc3JjID09IE5VTEwgfHwgaXNyYy0+
aXNyY19oYW5kbGVycyA9PSAwIHx8CisJCSAgICBpc3JjLT5pc3JjX2ZsYWdzICYgSVNSQ0ZfUEVS
Q1BVKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzcmMtPmlzcmNfZXZlbnQgIT0gTlVMTCAmJiBp
c3JjLT5pc3JjX2ZsYWdzICYgSVNSQ0ZfQk9VTkQgJiYKKwkJICAgIGlzcmMtPmlzcmNfZXZlbnQt
PmllX2NwdSAhPSBDUFVfRkZTKCZpc3JjLT5pc3JjX2NwdSkgLSAxKQorCQkJcGFuaWMoIiVzOiBD
UFUgaW5jb25zaXN0ZW5jeSIsIF9fZnVuY19fKTsKKworCQlpZiAoKGlzcmMtPmlzcmNfZmxhZ3Mg
JiBJU1JDRl9CT1VORCkgPT0gMCkKKwkJCUNQVV9aRVJPKCZpc3JjLT5pc3JjX2NwdSk7IC8qIHN0
YXJ0IGFnYWluICovCisKKwkJLyoKKwkJICogV2UgYXJlIGluIHdpY2tlZCBwb3NpdGlvbiBoZXJl
IGlmIHRoZSBmb2xsb3dpbmcgY2FsbCBmYWlscworCQkgKiBmb3IgYm91bmQgSVNSQy4gVGhlIGJl
c3QgdGhpbmcgd2UgY2FuIGRvIGlzIHRvIGNsZWFyCisJCSAqIGlzcmNfY3B1IHNvIGluY29uc2lz
dGVuY3kgd2l0aCBpZV9jcHUgd2lsbCBiZSBkZXRlY3RhYmxlLgorCQkgKi8KKwkJaWYgKFBJQ19C
SU5EKGlzcmMtPmlzcmNfZGV2LCBpc3JjKSAhPSAwKQorCQkJQ1BVX1pFUk8oJmlzcmMtPmlzcmNf
Y3B1KTsKKwl9CisJbXR4X3VubG9jaygmaXNyY190YWJsZV9sb2NrKTsKK30KK1NZU0lOSVQoYXJt
X2lycV9zaHVmZmxlLCBTSV9TVUJfU01QLCBTSV9PUkRFUl9TRUNPTkQsIGFybV9pcnFfc2h1ZmZs
ZSwgTlVMTCk7CisKKyNlbHNlCit1X2ludAorYXJtX2lycV9uZXh0X2NwdSh1X2ludCBjdXJyZW50
X2NwdSwgY3B1c2V0X3QgKmNwdW1hc2spCit7CisKKwlyZXR1cm4gKFBDUFVfR0VUKGNwdWlkKSk7
Cit9CisjZW5kaWYKKworI2lmZGVmIEZEVAorLyoKKyAqICBEZXNjcmliZSBpbnRlcnJ1cHQgc291
cmNlIGZvciBGRFQuCisgKi8KK2ludAorZmR0X2Rlc2NyaWJlX2lycShjaGFyICpidWYsIHVfaW50
IGxlbiwgdV9pbnQgaXJxKQoreworCXN0cnVjdCBhcm1faXJxc3JjICppc3JjOworCWludCBydjsK
KworCWlzcmMgPSBpc3JjX2xvb2t1cChpcnEpOworCWlmIChpc3JjID09IE5VTEwpIHsKKwkJcmV0
dXJuIChzbnByaW50ZihidWYsIGxlbiwgIm5vIGlycSBzb3VyY2UiKSk7CisJfQorCisJKHZvaWQp
aXNyY19yZWdpc3Rlcihpc3JjKTsKKwlpZiAoKGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9SRUdJ
U1RFUkVEKSA9PSAwKSB7CisJCXJ2ID0gc25wcmludGYoYnVmLCBsZW4sICJpcnEldShub3QgbWFw
cGVkKSIsIGlycSk7CisJfSBlbHNlIHsKKwkJcnYgPSBzbnByaW50ZihidWYsIGxlbiwgImlycSV1
KCVzKSIsIGlycSwgaXNyYy0+aXNyY19uYW1lKTsKKwl9CisJcmV0dXJuIChydik7Cit9CisjZW5k
aWYKKwordm9pZCBkb3NvZnRpbnRzKHZvaWQpOwordm9pZAorZG9zb2Z0aW50cyh2b2lkKQorewor
fQorCisvKgorICogYXJtX2lycV9tZW1vcnlfYmFycmllcigpCisgKgorICogRW5zdXJlIGFsbCB3
cml0ZXMgdG8gZGV2aWNlIG1lbW9yeSBoYXZlIHJlYWNoZWQgZGV2aWNlcyBiZWZvcmUgcHJvY2Vl
ZGluZy4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBwb3N0
LWZpbHRlciBhbmQgcG9zdC10aHJlYWQgcm91dGluZXMKKyAqIG9mIGFuIGludGVycnVwdCBjb250
cm9sbGVyIGltcGxlbWVudGF0aW9uLiAgQSBwZXJpcGhlcmFsIGRldmljZSBkcml2ZXIgc2hvdWxk
CisgKiB1c2UgYnVzX3NwYWNlX2JhcnJpZXIoKSBpZiBpdCBuZWVkcyB0byBlbnN1cmUgYSB3cml0
ZSBoYXMgcmVhY2hlZCB0aGUKKyAqIGhhcmR3YXJlIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFu
IGNsZWFyaW5nIGludGVycnVwdCBjb25kaXRpb25zLgorICoKKyAqIFRoZSBuZWVkIGZvciB0aGlz
IGZ1bmN0aW9uIGFyaXNlcyBmcm9tIHRoZSBBUk0gd2VhayBtZW1vcnkgb3JkZXJpbmcgbW9kZWwu
CisgKiBXcml0ZXMgdG8gbG9jYXRpb25zIG1hcHBlZCB3aXRoIHRoZSBEZXZpY2UgYXR0cmlidXRl
IGJ5cGFzcyBhbnkgY2FjaGVzLCBidXQKKyAqIGFyZSBidWZmZXJlZC4gIE11bHRpcGxlIHdyaXRl
cyB0byB0aGUgc2FtZSBkZXZpY2Ugd2lsbCBiZSBvYnNlcnZlZCBieSB0aGF0CisgKiBkZXZpY2Ug
aW4gdGhlIG9yZGVyIGlzc3VlZCBieSB0aGUgY3B1LiAgV3JpdGVzIHRvIGRpZmZlcmVudCBkZXZp
Y2VzIG1heQorICogYXBwZWFyIGF0IHRob3NlIGRldmljZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIg
dGhhbiBpc3N1ZWQgYnkgdGhlIGNwdS4gIFRoYXQKKyAqIGlzLCBpZiB0aGUgY3B1IHdyaXRlcyB0
byBkZXZpY2UgQSB0aGVuIGRldmljZSBCLCB0aGUgd3JpdGUgdG8gZGV2aWNlIEIgY291bGQKKyAq
IGNvbXBsZXRlIGJlZm9yZSB0aGUgd3JpdGUgdG8gZGV2aWNlIEEuCisgKgorICogQ29uc2lkZXIg
YSB0eXBpY2FsIGRldmljZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGljaCBzZXJ2aWNlcyB0aGUgaW50
ZXJydXB0IGFuZAorICogd3JpdGVzIHRvIGEgZGV2aWNlIHN0YXR1cy1hY2tub3dsZWRnZSByZWdp
c3RlciB0byBjbGVhciB0aGUgaW50ZXJydXB0IGJlZm9yZQorICogcmV0dXJuaW5nLiAgVGhhdCB3
cml0ZSBpcyBwb3N0ZWQgdG8gdGhlIEwyIGNvbnRyb2xsZXIgd2hpY2ggImltbWVkaWF0ZWx5Igor
ICogcGxhY2VzIGl0IGluIGEgc3RvcmUgYnVmZmVyIGFuZCBhdXRvbWF0aWNhbGx5IGRyYWlucyB0
aGF0IGJ1ZmZlci4gIFRoaXMgY2FuCisgKiBiZSBsZXNzIGltbWVkaWF0ZSB0aGFuIHlvdSdkIHRo
aW5rLi4uIFRoZXJlIG1heSBiZSBubyBmcmVlIHNsb3RzIGluIHRoZSBzdG9yZQorICogYnVmZmVy
cywgc28gYW4gZXhpc3RpbmcgYnVmZmVyIGhhcyB0byBiZSBkcmFpbmVkIGZpcnN0IHRvIG1ha2Ug
cm9vbS4gIFRoZQorICogdGFyZ2V0IGJ1cyBtYXkgYmUgYnVzeSB3aXRoIG90aGVyIHRyYWZmaWMg
KHN1Y2ggYXMgRE1BIGZvciB2YXJpb3VzIGRldmljZXMpLAorICogZGVsYXlpbmcgdGhlIGRyYWlu
IG9mIHRoZSBzdG9yZSBidWZmZXIgZm9yIHNvbWUgaW5kZXRlcm1pbmF0ZSB0aW1lLiAgV2hpbGUK
KyAqIGFsbCB0aGlzIGRlbGF5IGlzIGhhcHBlbmluZywgZXhlY3V0aW9uIHByb2NlZWRzIG9uIHRo
ZSBDUFUsIHVud2luZGluZyBpdHMgd2F5CisgKiBvdXQgb2YgdGhlIGludGVycnVwdCBjYWxsIHN0
YWNrIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgaW50ZXJydXB0IGRyaXZlciBjb2RlCisgKiBpcyBy
ZWFkeSB0byBFT0kgYW5kIHVubWFzayB0aGUgaW50ZXJydXB0LiAgVGhlIGludGVycnVwdCBjb250
cm9sbGVyIG1heSBiZQorICogYWNjZXNzZWQgdmlhIGEgZmFzdGVyIGJ1cyB0aGFuIHRoZSBoYXJk
d2FyZSB3aG9zZSBoYW5kbGVyIGp1c3QgcmFuOyB0aGUgd3JpdGUKKyAqIHRvIHVubWFzayBhbmQg
RU9JIHRoZSBpbnRlcnJ1cHQgbWF5IGNvbXBsZXRlIHF1aWNrbHkgd2hpbGUgdGhlIGRldmljZSB3
cml0ZQorICogdG8gYWNrIGFuZCBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZSBpcyBzdGlsbCBs
aW5nZXJpbmcgaW4gYSBzdG9yZSBidWZmZXIKKyAqIHdhaXRpbmcgZm9yIGFjY2VzcyB0byBhIHNs
b3dlciBidXMuICBXaXRoIHRoZSBpbnRlcnJ1cHQgdW5tYXNrZWQgYXQgdGhlCisgKiBpbnRlcnJ1
cHQgY29udHJvbGxlciBidXQgc3RpbGwgYWN0aXZlIGF0IHRoZSBkZXZpY2UsIGFzIHNvb24gYXMg
aW50ZXJydXB0cworICogYXJlIGVuYWJsZWQgb24gdGhlIGNvcmUgdGhlIGRldmljZSByZS1pbnRl
cnJ1cHRzIGltbWVkaWF0ZWx5OiBub3cgeW91J3ZlIGdvdAorICogYSBzcHVyaW91cyBpbnRlcnJ1
cHQgb24geW91ciBoYW5kcy4KKyAqCisgKiBUaGUgcmlnaHQgd2F5IHRvIGZpeCB0aGlzIHByb2Js
ZW0gaXMgZm9yIGV2ZXJ5IGRldmljZSBkcml2ZXIgdG8gdXNlIHRoZQorICogcHJvcGVyIGJ1c19z
cGFjZV9iYXJyaWVyKCkgY2FsbHMgaW4gaXRzIGludGVycnVwdCBoYW5kbGVyLiAgRm9yIEFSTSBh
IHNpbmdsZQorICogYmFycmllciBjYWxsIGF0IHRoZSBlbmQgb2YgdGhlIGhhbmRsZXIgd291bGQg
d29yay4gIFRoaXMgd291bGQgaGF2ZSB0byBiZQorICogZG9uZSB0byBldmVyeSBkcml2ZXIgaW4g
dGhlIHN5c3RlbSwgbm90IGp1c3QgYXJtLXNwZWNpZmljIGRyaXZlcnMuCisgKgorICogQW5vdGhl
ciBwb3RlbnRpYWwgZml4IGlzIHRvIG1hcCBhbGwgZGV2aWNlIG1lbW9yeSBhcyBTdHJvbmdseS1P
cmRlcmVkIHJhdGhlcgorICogdGhhbiBEZXZpY2UgbWVtb3J5LCB3aGljaCB0YWtlcyB0aGUgc3Rv
cmUgYnVmZmVycyBvdXQgb2YgdGhlIHBpY3R1cmUuICBUaGlzCisgKiBoYXMgYSBwcmV0dHkgYmln
IGltcGFjdCBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgYmVjYXVzZSBlYWNoIHN0cm9u
Z2x5CisgKiBvcmRlcmVkIG1lbW9yeSBhY2Nlc3MgY2F1c2VzIGFsbCBMMiBzdG9yZSBidWZmZXJz
IHRvIGJlIGRyYWluZWQuCisgKgorICogQSBjb21wcm9taXNlIHNvbHV0aW9uIGlzIHRvIGhhdmUg
dGhlIGludGVycnVwdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9uIGNhbGwKKyAqIHRoaXMgZnVu
Y3Rpb24gdG8gZXN0YWJsaXNoIGEgYmFycmllciBiZXR3ZWVuIHdyaXRlcyB0byB0aGUgaW50ZXJy
dXB0LXNvdXJjZQorICogZGV2aWNlIGFuZCB3cml0ZXMgdG8gdGhlIGludGVycnVwdCBjb250cm9s
bGVyIGRldmljZS4KKyAqCisgKiBUaGlzIHRha2VzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFzIGFu
IGFyZ3VtZW50LCBhbmQgY3VycmVudGx5IGRvZXNuJ3QgdXNlIGl0LgorICogVGhlIHBsYW4gaXMg
dGhhdCBtYXliZSBzb21lIGRheSB0aGVyZSBpcyBhIHdheSB0byBmbGFnIGNlcnRhaW4gaW50ZXJy
dXB0cyBhcworICogIm1lbW9yeSBiYXJyaWVyIHNhZmUiIGFuZCB3ZSBjYW4gYXZvaWQgdGhpcyBv
dmVyaGVhZCB3aXRoIHRoZW0uCisgKi8KK3ZvaWQKK2FybV9pcnFfbWVtb3J5X2JhcnJpZXIodWlu
dHB0cl90IGlycSkKK3sKKworCWRzYigpOworCWNwdV9sMmNhY2hlX2RyYWluX3dyaXRlYnVmKCk7
Cit9CisKKyNpZmRlZiBTTVAKKy8qCisgKiAgTG9va3VwIElQSSBzb3VyY2UuCisgKi8KK3N0YXRp
YyBzdHJ1Y3QgYXJtX2lycXNyYyAqCithcm1faXBpX2xvb2t1cCh1X2ludCBpcGkpCit7CisKKwlp
ZiAoaXBpID49IEFSTV9JUElfQ09VTlQpCisJCXBhbmljKCIlczogbm8gc3VjaCBJUEkgJXUiLCBf
X2Z1bmNfXywgaXBpKTsKKworCXJldHVybiAoJmlwaV9zb3VyY2VzW2lwaV0pOworfQorCisvKgor
ICogIEFSTSBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgSVBJcy4g
SXQgc2hvdWxkCisgKiAgYmUgY2FsbGVkIHN0cmFpZ2h0IGZyb20gdGhlIGludGVycnVwdCBjb250
cm9sbGVyLCB3aGVuIGFzc29jaWF0ZWQKKyAqICBpbnRlcnJ1cHQgc291cmNlIGlzIGxlYXJuZWQu
IE9yIGZyb20gYW55Ym9keSB3aG8gaGFzIGFhbiBpbnRlcnJ1cHQKKyAqICBzb3VyY2UgbWFwcGVk
LgorICovCit2b2lkCithcm1faXBpX2Rpc3BhdGNoKHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCBz
dHJ1Y3QgdHJhcGZyYW1lICp0ZikKK3sKKwl2b2lkICphcmc7CisKKwlLQVNTRVJUKGlzcmMgIT0g
TlVMTCwgKCIlczogbm8gc291cmNlIiwgX19mdW5jX18pKTsKKworCWlzcmNfaW5jcmVtZW50X2lw
aV9jb3VudChpc3JjLCBQQ1BVX0dFVChjcHVpZCkpOworCisJLyoKKwkgKiBTdXBwbHkgaXBpIGZp
bHRlciB3aXRoIHRyYXBmcmFtZSBhcmd1bWVudAorCSAqIGlmIG5vbmUgaXMgcmVnaXN0ZXJlZC4K
KwkgKi8KKwlhcmcgPSBpc3JjLT5pc3JjX2FyZyAhPSBOVUxMID8gaXNyYy0+aXNyY19hcmcgOiB0
ZjsKKwlpc3JjLT5pc3JjX2lwaWZpbHRlcihhcmcpOworfQorCisvKgorICogIE1hcCBJUEkgaW50
byBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAqCisgKiAgTm90IFNNUCBjb2hlcmVudC4KKyAqLwor
c3RhdGljIGludAoraXBpX21hcChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgdV9pbnQgaXBpKQor
eworCWJvb2xlYW5fdCBpc19wZXJjcHU7CisJaW50IGVycm9yOworCisJaWYgKGlwaSA+PSBBUk1f
SVBJX0NPVU5UKQorCQlwYW5pYygiJXM6IG5vIHN1Y2ggSVBJICV1IiwgX19mdW5jX18sIGlwaSk7
CisKKwlLQVNTRVJUKGlycV9yb290X2RldiAhPSBOVUxMLCAoIiVzOiBubyByb290IGF0dGFjaGVk
IiwgX19mdW5jX18pKTsKKworCWlzcmMtPmlzcmNfdHlwZSA9IEFSTV9JU1JDVF9OQU1FU1BBQ0U7
CisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05TUENfSVBJOworCWlzcmMtPmlzcmNf
bnNwY19udW0gPSBpcGlfbmV4dF9udW07CisKKwllcnJvciA9IFBJQ19SRUdJU1RFUihpcnFfcm9v
dF9kZXYsIGlzcmMsICZpc19wZXJjcHUpOworCisJZGVidWdmKCJpcGkgJXUgbWFwcGVkIHRvICV1
IG9uICVzIC0gZXJyb3IgJWRcbiIsIGlwaSwgaXBpX25leHRfbnVtLAorCSAgICBkZXZpY2VfZ2V0
X25hbWV1bml0KGlycV9yb290X2RldiksIGVycm9yKTsKKworCWlmIChlcnJvciA9PSAwKQorCQlp
cGlfbmV4dF9udW0rKzsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAqICBTZXR1cCBJUEkg
aGFuZGxlciB0byBpbnRlcnJ1cHQgc291cmNlLgorICoKKyAqICBOb3RlIHRoYXQgdGhlcmUgY291
bGQgYmUgbW9yZSB3YXlzIGhvdyB0byBzZW5kIGFuZCByZWNlaXZlIElQSXMKKyAqICBvbiBhIHBs
YXRmb3JtIGxpa2UgZmFzdCBpbnRlcnJ1cHRzIGZvciBleGFtcGxlLiBJbiB0aGF0IGNhc2UsCisg
KiAgb25lIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBBU0lGX05PQUxMT0MgZmxhZyBzZXQg
YW5kIHRoZW4KKyAqICBjYWxsIGFybV9pcGlfZGlzcGF0Y2goKSB3aGVuIGFwcHJvcHJpYXRlLgor
ICoKKyAqICBOb3QgU01QIGNvaGVyZW50LgorICovCitpbnQKK2FybV9pcGlfc2V0X2hhbmRsZXIo
dV9pbnQgaXBpLCBjb25zdCBjaGFyICpuYW1lLCBhcm1faXBpX2ZpbHRlcl90ICpmaWx0ZXIsCisg
ICAgdm9pZCAqYXJnLCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsK
KwlpbnQgZXJyb3I7CisKKwlpZiAoZmlsdGVyID09IE5VTEwpCisJCXJldHVybihFSU5WQUwpOwor
CisJaXNyYyA9IGFybV9pcGlfbG9va3VwKGlwaSk7CisJaWYgKGlzcmMtPmlzcmNfaXBpZmlsdGVy
ICE9IE5VTEwpCisJCXJldHVybiAoRUVYSVNUKTsKKworCWlmICgoZmxhZ3MgJiBBSVNIRl9OT0FM
TE9DKSA9PSAwKSB7CisJCWVycm9yID0gaXBpX21hcChpc3JjLCBpcGkpOworCQlpZiAoZXJyb3Ig
IT0gMCkKKwkJCXJldHVybiAoZXJyb3IpOworCX0KKworCWlzcmMtPmlzcmNfaXBpZmlsdGVyID0g
ZmlsdGVyOworCWlzcmMtPmlzcmNfYXJnID0gYXJnOworCisJaXNyY19zZXR1cF9pcGlfY291bnRl
cnMoaXNyYywgbmFtZSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqICBTZW5kIElQSSB0aHJ1
IGludGVycnVwdCBjb250cm9sbGVyLgorICovCit2b2lkCitwaWNfaXBpX3NlbmQoY3B1c2V0X3Qg
Y3B1cywgdV9pbnQgaXBpKQoreworCXN0cnVjdCBhcm1faXJxc3JjICppc3JjOworCisJaXNyYyA9
IGFybV9pcGlfbG9va3VwKGlwaSk7CisKKwlLQVNTRVJUKGlycV9yb290X2RldiAhPSBOVUxMLCAo
IiVzOiBubyByb290IGF0dGFjaGVkIiwgX19mdW5jX18pKTsKKwlQSUNfSVBJX1NFTkQoaXJxX3Jv
b3RfZGV2LCBpc3JjLCBjcHVzKTsKK30KKworLyoKKyAqICBJbml0IGludGVycnVwdCBjb250cm9s
bGVyIG9uIGFub3RoZXIgQ1BVLgorICovCit2b2lkCithcm1fcGljX2luaXRfc2Vjb25kYXJ5KHZv
aWQpCit7CisKKwkvKgorCSAqIFFRUTogT25seSByb290IFBJQyBpcyBhd2FyZSBvZiBvdGhlciBD
UFVzID8/PworCSAqLworCUtBU1NFUlQoaXJxX3Jvb3RfZGV2ICE9IE5VTEwsICgiJXM6IG5vIHJv
b3QgYXR0YWNoZWQiLCBfX2Z1bmNfXykpOworCisJbXR4X2xvY2soJmlzcmNfdGFibGVfbG9jayk7
CisJUElDX0lOSVRfU0VDT05EQVJZKGlycV9yb290X2Rldik7CisJbXR4X3VubG9jaygmaXNyY190
YWJsZV9sb2NrKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRERCCitEQl9TSE9XX0NPTU1BTkQoaXJx
LCBkYl9zaG93X2lycSkKK3sKKwl1X2ludCBpLCBpcnFzdW07CisJc3RydWN0IGFybV9pcnFzcmMg
KmlzcmM7CisKKyNpZmRlZiBTTVAKKwlmb3IgKGkgPSAwOyBpIDw9IG1wX21heGlkOyBpKyspIHsK
KwkJc3RydWN0IHBjcHUgKnBjOworCQl1X2ludCBpcGksIGlwaXN1bTsKKworCQlwYyA9IHBjcHVf
ZmluZChpKTsKKwkJaWYgKHBjICE9IE5VTEwpIHsKKwkJCWZvciAoaXBpc3VtID0gMCwgaXBpID0g
MDsgaXBpIDwgQVJNX0lQSV9DT1VOVDsgaXBpKyspIHsKKwkJCQlpc3JjID0gYXJtX2lwaV9sb29r
dXAoaXBpKTsKKwkJCQlpZiAoaXNyYy0+aXNyY19jb3VudCAhPSBOVUxMKQorCQkJCQlpcGlzdW0g
Kz0gaXNyYy0+aXNyY19jb3VudFtpXTsKKwkJCX0KKwkJCXByaW50ZiAoImNwdSV1OiB0b3RhbCAl
dSBpcGlzICV1XG4iLCBpLAorCQkJICAgIHBjLT5wY19jbnQudl9pbnRyLCBpcGlzdW0pOworICAg
IAkJfQorCX0KKwlkYl9wcmludGYoIlxuIik7CisjZW5kaWYKKworCWZvciAoaXJxc3VtID0gMCwg
aSA9IDA7IGkgPCBOSVJROyBpKyspIHsKKwkJaXNyYyA9IGlycV9zb3VyY2VzW2ldOworCQlpZiAo
aXNyYyA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJZGJfcHJpbnRmKCJpcnElLTN1IDwlcz46
IGNwdSAlMDJseCVzIGNudCAlbHVcbiIsIGksCisJCSAgICBpc3JjLT5pc3JjX25hbWUsIGlzcmMt
PmlzcmNfY3B1Ll9fYml0c1swXSwKKwkJICAgIGlzcmMtPmlzcmNfZmxhZ3MgJiBJU1JDRl9CT1VO
RCA/ICIgKGJvdW5kKSIgOiAiIiwKKwkJICAgIGlzcmMtPmlzcmNfY291bnRbMF0pOworCQlpcnFz
dW0gKz0gaXNyYy0+aXNyY19jb3VudFswXTsKKwl9CisJZGJfcHJpbnRmKCJpcnEgdG90YWwgJXVc
biIsIGlycXN1bSk7CisKK30KKyNlbmRpZgpJbmRleDogc3lzL2FybS9hcm0vbXBfbWFjaGRlcC5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL21wX21hY2hkZXAuYwkocmV2aXNpb24gMjc5Njg1
KQorKysgc3lzL2FybS9hcm0vbXBfbWFjaGRlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3
Myw5IEBACiAvKiBTZXQgdG8gMSBvbmNlIHdlJ3JlIHJlYWR5IHRvIGxldCB0aGUgQVBzIG91dCBv
ZiB0aGUgcGVuLiAqLwogdm9sYXRpbGUgaW50IGFwc19yZWFkeSA9IDA7CiAKKyNpZm5kZWYgQVJN
X0lOVFJORwogc3RhdGljIGludCBpcGlfaGFuZGxlcih2b2lkICphcmcpOworI2VuZGlmCiB2b2lk
IHNldF9zdGFja3B0cnMoaW50IGNwdSk7CiAKIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgZm9yIGlu
aXRfc2Vjb25kYXJ5KCkgICovCkBAIC0xMzMsNyArMTM1LDYgQEAKIAllbHNlCiAJCWZvciAoaSA9
IDE7IGkgPCBtcF9uY3B1czsgaSsrKQogCQkJQ1BVX1NFVChpLCAmYWxsX2NwdXMpOwotCiB9CiAK
IC8qIEludHJvZHVjZSByZXN0IG9mIGNvcmVzIHRvIHRoZSB3b3JsZCAqLwpAQCAtMTQ5LDcgKzE1
MCw2IEBACiB7CiAJc3RydWN0IHBjcHUgKnBjOwogCXVpbnQzMl90IGxvb3BfY291bnRlcjsKLQlp
bnQgc3RhcnQgPSAwLCBlbmQgPSAwOwogCiAJY3B1X3NldHVwKE5VTEwpOwogCXNldHR0YihwbWFw
X3BhKTsKQEAgLTE5OSwxOCArMTk5LDYgQEAKIAogCW10eF91bmxvY2tfc3BpbigmYXBfYm9vdF9t
dHgpOwogCi0JLyogRW5hYmxlIGlwaSAqLwotI2lmZGVmIElQSV9JUlFfU1RBUlQKLQlzdGFydCA9
IElQSV9JUlFfU1RBUlQ7Ci0jaWZkZWYgSVBJX0lSUV9FTkQKLSAgCWVuZCA9IElQSV9JUlFfRU5E
OwotI2Vsc2UKLQllbmQgPSBJUElfSVJRX1NUQVJUOwotI2VuZGlmCi0jZW5kaWYKLQkJCQkKLQlm
b3IgKGludCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspCi0JCWFybV91bm1hc2tfaXJxKGkpOwog
CWVuYWJsZV9pbnRlcnJ1cHRzKFBTUl9JKTsKIAogCWxvb3BfY291bnRlciA9IDA7CkBAIC0yMzMs
NiArMjIxLDEwOCBAQAogCS8qIE5PVFJFQUNIRUQgKi8KIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcK
K3N0YXRpYyB2b2lkCitpcGlfcmVuZGV6dm91cyh2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKwor
CUNUUjAoS1RSX1NNUCwgIklQSV9SRU5ERVpWT1VTIik7CisJc21wX3JlbmRlenZvdXNfYWN0aW9u
KCk7Cit9CisKK3N0YXRpYyB2b2lkCitpcGlfYXN0KHZvaWQgKmR1bW15IF9fdW51c2VkKQorewor
CisJQ1RSMChLVFJfU01QLCAiSVBJX0FTVCIpOworfQorCitzdGF0aWMgdm9pZAoraXBpX3N0b3Ao
dm9pZCAqZHVtbXkgX191bnVzZWQpCit7CisJdV9pbnQgY3B1OworCisJLyoKKwkgKiBJUElfU1RP
UF9IQVJEIGlzIG1hcHBlZCB0byBJUElfU1RPUC4KKwkgKi8KKwlDVFIwKEtUUl9TTVAsICJJUElf
U1RPUCBvciBJUElfU1RPUF9IQVJEIik7CisKKwljcHUgPSBQQ1BVX0dFVChjcHVpZCk7CisJc2F2
ZWN0eCgmc3RvcHBjYnNbY3B1XSk7CisKKwkvKgorCSAqIENQVXMgYXJlIHN0b3BwZWQgd2hlbiBl
bnRlcmluZyB0aGUgZGVidWdnZXIgYW5kIGF0CisJICogc3lzdGVtIHNodXRkb3duLCBib3RoIGV2
ZW50cyB3aGljaCBjYW4gcHJlY2VkZSBhCisJICogcGFuaWMgZHVtcC4gIEZvciB0aGUgZHVtcCB0
byBiZSBjb3JyZWN0LCBhbGwgY2FjaGVzCisJICogbXVzdCBiZSBmbHVzaGVkIGFuZCBpbnZhbGlk
YXRlZCwgYnV0IG9uIEFSTSB0aGVyZSdzCisJICogbm8gd2F5IHRvIGJyb2FkY2FzdCBhIHdiaW52
X2FsbCB0byBvdGhlciBjb3Jlcy4KKwkgKiBJbnN0ZWFkLCB3ZSBoYXZlIGVhY2ggY29yZSBkbyB0
aGUgbG9jYWwgd2JpbnZfYWxsIGFzCisJICogcGFydCBvZiBzdG9wcGluZyB0aGUgY29yZS4gIFRo
ZSBjb3JlIHJlcXVlc3RpbmcgdGhlCisJICogc3RvcCB3aWxsIGRvIHRoZSBsMiBjYWNoZSBmbHVz
aCBhZnRlciBhbGwgb3RoZXIgY29yZXMKKwkgKiBoYXZlIGRvbmUgdGhlaXIgbDEgZmx1c2hlcyBh
bmQgc3RvcHBlZC4KKwkgKi8KKwljcHVfaWRjYWNoZV93Ymludl9hbGwoKTsKKworCS8qIEluZGlj
YXRlIHdlIGFyZSBzdG9wcGVkICovCisJQ1BVX1NFVF9BVE9NSUMoY3B1LCAmc3RvcHBlZF9jcHVz
KTsKKworCS8qIFdhaXQgZm9yIHJlc3RhcnQgKi8KKwl3aGlsZSAoIUNQVV9JU1NFVChjcHUsICZz
dGFydGVkX2NwdXMpKQorCQljcHVfc3BpbndhaXQoKTsKKworCUNQVV9DTFJfQVRPTUlDKGNwdSwg
JnN0YXJ0ZWRfY3B1cyk7CisJQ1BVX0NMUl9BVE9NSUMoY3B1LCAmc3RvcHBlZF9jcHVzKTsKKwlD
VFIwKEtUUl9TTVAsICJJUElfU1RPUCAocmVzdGFydCkiKTsKK30KKworc3RhdGljIHZvaWQKK2lw
aV9wcmVlbXB0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdHJhcGZyYW1lICpvbGRmcmFtZTsKKwlz
dHJ1Y3QgdGhyZWFkICp0ZDsKKworCWNyaXRpY2FsX2VudGVyKCk7CisJdGQgPSBjdXJ0aHJlYWQ7
CisJdGQtPnRkX2ludHJfbmVzdGluZ19sZXZlbCsrOworCW9sZGZyYW1lID0gdGQtPnRkX2ludHJf
ZnJhbWU7CisJdGQtPnRkX2ludHJfZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsKKwor
CUNUUjEoS1RSX1NNUCwgIiVzOiBJUElfUFJFRU1QVCIsIF9fZnVuY19fKTsKKwlzY2hlZF9wcmVl
bXB0KHRkKTsKKworCXRkLT50ZF9pbnRyX2ZyYW1lID0gb2xkZnJhbWU7CisJdGQtPnRkX2ludHJf
bmVzdGluZ19sZXZlbC0tOworCWNyaXRpY2FsX2V4aXQoKTsKK30KKworc3RhdGljIHZvaWQKK2lw
aV9oYXJkY2xvY2sodm9pZCAqYXJnKQoreworCXN0cnVjdCB0cmFwZnJhbWUgKm9sZGZyYW1lOwor
CXN0cnVjdCB0aHJlYWQgKnRkOworCisJY3JpdGljYWxfZW50ZXIoKTsKKwl0ZCA9IGN1cnRocmVh
ZDsKKwl0ZC0+dGRfaW50cl9uZXN0aW5nX2xldmVsKys7CisJb2xkZnJhbWUgPSB0ZC0+dGRfaW50
cl9mcmFtZTsKKwl0ZC0+dGRfaW50cl9mcmFtZSA9IChzdHJ1Y3QgdHJhcGZyYW1lICopYXJnOwor
CisJQ1RSMShLVFJfU01QLCAiJXM6IElQSV9IQVJEQ0xPQ0siLCBfX2Z1bmNfXyk7CisJaGFyZGNs
b2NraW50cigpOworCisJdGQtPnRkX2ludHJfZnJhbWUgPSBvbGRmcmFtZTsKKwl0ZC0+dGRfaW50
cl9uZXN0aW5nX2xldmVsLS07CisJY3JpdGljYWxfZXhpdCgpOworfQorCitzdGF0aWMgdm9pZAor
aXBpX3RsYih2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKworCUNUUjEoS1RSX1NNUCwgIiVzOiBJ
UElfVExCIiwgX19mdW5jX18pOworCWNwdWZ1bmNzLmNmX3RsYl9mbHVzaElEKCk7Cit9CisjZWxz
ZQogc3RhdGljIGludAogaXBpX2hhbmRsZXIodm9pZCAqYXJnKQogewpAQCAtMzA4LDE1ICszOTgs
MjggQEAKIAogCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2
b2lkCiByZWxlYXNlX2Fwcyh2b2lkICpkdW1teSBfX3VudXNlZCkKIHsKIAl1aW50MzJfdCBsb29w
X2NvdW50ZXI7CisjaWZuZGVmIEFSTV9JTlRSTkcKIAlpbnQgc3RhcnQgPSAwLCBlbmQgPSAwOwor
I2VuZGlmCiAKIAlpZiAobXBfbmNwdXMgPT0gMSkKIAkJcmV0dXJuOworCisjaWZkZWYgQVJNX0lO
VFJORworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1JFTkRFWlZPVVMsICJyZW5kZXp2b3VzIiwg
aXBpX3JlbmRlenZvdXMsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX0FTVCwg
ImFzdCIsIGlwaV9hc3QsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1NUT1As
ICJzdG9wIiwgaXBpX3N0b3AsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1BS
RUVNUFQsICJwcmVlbXB0IiwgaXBpX3ByZWVtcHQsIE5VTEwsIDApOworCWFybV9pcGlfc2V0X2hh
bmRsZXIoSVBJX0hBUkRDTE9DSywgImhhcmRjbG9jayIsIGlwaV9oYXJkY2xvY2ssIE5VTEwsIDAp
OworCWFybV9pcGlfc2V0X2hhbmRsZXIoSVBJX1RMQiwgInRsYiIsIGlwaV90bGIsIE5VTEwsIDAp
OworCisjZWxzZQogI2lmZGVmIElQSV9JUlFfU1RBUlQKIAlzdGFydCA9IElQSV9JUlFfU1RBUlQ7
CiAjaWZkZWYgSVBJX0lSUV9FTkQKQEAgLTM0MSw2ICs0NDQsNyBAQAogCQkvKiBFbmFibGUgaXBp
ICovCiAJCWFybV91bm1hc2tfaXJxKGkpOwogCX0KKyNlbmRpZgogCWF0b21pY19zdG9yZV9yZWxf
aW50KCZhcHNfcmVhZHksIDEpOwogCiAJcHJpbnRmKCJSZWxlYXNlIEFQc1xuIik7CkluZGV4OiBz
eXMvYXJtL2FybS9uZXh1cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL25leHVzLmMJKHJl
dmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vYXJtL25leHVzLmMJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDggKzg1LDEzIEBACiAgICAgdV9sb25nLCB1X2xvbmcsIHVfbG9uZywgdV9pbnQpOwogc3Rh
dGljCWludCBuZXh1c19hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwg
aW50LAogICAgIHN0cnVjdCByZXNvdXJjZSAqKTsKKyNpZmRlZiBTTVAKK3N0YXRpYwlpbnQgbmV4
dXNfYmluZF9pbnRyKGRldmljZV90LCBkZXZpY2VfdCwgc3RydWN0IHJlc291cmNlICosIGludCk7
CisjZW5kaWYKIHN0YXRpYyBpbnQgbmV4dXNfY29uZmlnX2ludHIoZGV2aWNlX3QgZGV2LCBpbnQg
aXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLAogICAgIGVudW0gaW50cl9wb2xhcml0eSBwb2wp
Oworc3RhdGljCWludCBuZXh1c19kZXNjcmliZV9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3Qg
Y2hpbGQsCisgICAgc3RydWN0IHJlc291cmNlICppcnEsIHZvaWQgKmNvb2tpZSwgY29uc3QgY2hh
ciAqZGVzY3IpOwogc3RhdGljCWludCBuZXh1c19kZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90
LCBkZXZpY2VfdCwgaW50LCBpbnQsCiAgICAgc3RydWN0IHJlc291cmNlICopOwogc3RhdGljIGlu
dCBuZXh1c19yZWxlYXNlX3Jlc291cmNlKGRldmljZV90LCBkZXZpY2VfdCwgaW50LCBpbnQsCkBA
IC0xMTUsNiArMTIwLDEyIEBACiAJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAluZXh1
c19yZWxlYXNlX3Jlc291cmNlKSwKIAlERVZNRVRIT0QoYnVzX3NldHVwX2ludHIsCW5leHVzX3Nl
dHVwX2ludHIpLAogCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwJbmV4dXNfdGVhcmRvd25f
aW50ciksCisjaWZkZWYgQVJNX0lOVFJORworCURFVk1FVEhPRChidXNfZGVzY3JpYmVfaW50ciwJ
bmV4dXNfZGVzY3JpYmVfaW50ciksCisjaWZkZWYgU01QCisJREVWTUVUSE9EKGJ1c19iaW5kX2lu
dHIsCW5leHVzX2JpbmRfaW50ciksCisjZW5kaWYKKyNlbmRpZgogI2lmZGVmIEZEVAogCURFVk1F
VEhPRChvZndfYnVzX21hcF9pbnRyLAluZXh1c19vZndfbWFwX2ludHIpLAogI2VuZGlmCkBAIC0y
NTEsOSArMjYyLDEyIEBACiB7CiAJaW50IHJldCA9IEVOT0RFVjsKIAorI2lmZGVmIEFSTV9JTlRS
TkcKKwlyZXQgPSBhcm1faXJxX2NvbmZpZyhpcnEsIHRyaWcsIHBvbCk7CisjZWxzZQogCWlmIChh
cm1fY29uZmlnX2lycSkKIAkJcmV0ID0gKCphcm1fY29uZmlnX2lycSkoaXJxLCB0cmlnLCBwb2wp
OwotCisjZW5kaWYKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTI2Nyw5ICsyODEsMTQgQEAKIAkJ
ZmxhZ3MgfD0gSU5UUl9FWENMOwogCiAJZm9yIChpcnEgPSBybWFuX2dldF9zdGFydChyZXMpOyBp
cnEgPD0gcm1hbl9nZXRfZW5kKHJlcyk7IGlycSsrKSB7CisjaWYgZGVmaW5lZChBUk1fSU5UUk5H
KQorCQlhcm1faXJxX2FkZF9oYW5kbGVyKGNoaWxkLCBmaWx0LCBpbnRyLCBhcmcsIGlycSwgZmxh
Z3MsCisJCSAgICBjb29raWVwKTsKKyNlbHNlCiAJCWFybV9zZXR1cF9pcnFoYW5kbGVyKGRldmlj
ZV9nZXRfbmFtZXVuaXQoY2hpbGQpLAogCQkgICAgZmlsdCwgaW50ciwgYXJnLCBpcnEsIGZsYWdz
LCBjb29raWVwKTsKIAkJYXJtX3VubWFza19pcnEoaXJxKTsKKyNlbmRpZgogCX0KIAlyZXR1cm4g
KDApOwogfQpAQCAtMjc4LDExICsyOTcsMzMgQEAKIG5leHVzX3RlYXJkb3duX2ludHIoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHJlc291cmNlICpyLCB2b2lkICppaCkKIHsK
IAorI2lmIGRlZmluZWQoQVJNX0lOVFJORykKKwlyZXR1cm4gKGFybV9pcnFfcmVtb3ZlX2hhbmRs
ZXIoY2hpbGQsIHJtYW5fZ2V0X3N0YXJ0KHIpLCBpaCkpOworI2Vsc2UKIAlyZXR1cm4gKGFybV9y
ZW1vdmVfaXJxaGFuZGxlcihybWFuX2dldF9zdGFydChyKSwgaWgpKTsKKyNlbmRpZgogfQogCisj
aWZkZWYgQVJNX0lOVFJORworc3RhdGljIGludAorbmV4dXNfZGVzY3JpYmVfaW50cihkZXZpY2Vf
dCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlycSwKKyAgICB2b2lkICpj
b29raWUsIGNvbnN0IGNoYXIgKmRlc2NyKQorewogCisJcmV0dXJuIChhcm1faXJxX2Rlc2NyaWJl
KHJtYW5fZ2V0X3N0YXJ0KGlycSksIGNvb2tpZSwgZGVzY3IpKTsKK30KKworI2lmZGVmIFNNUAog
c3RhdGljIGludAorbmV4dXNfYmluZF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQs
IHN0cnVjdCByZXNvdXJjZSAqaXJxLCBpbnQgY3B1KQoreworCisJcmV0dXJuIChhcm1faXJxX2Jp
bmQocm1hbl9nZXRfc3RhcnQoaXJxKSwgY3B1KSk7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0
aWMgaW50CiBuZXh1c19hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNo
aWxkLCBpbnQgdHlwZSwgaW50IHJpZCwKICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCiB7CkluZGV4
OiBzeXMvYXJtL2FybS9waWNfaWYubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2FybS9waWNfaWYu
bQkocmV2aXNpb24gMCkKKysrIHN5cy9hcm0vYXJtL3BpY19pZi5tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI2IEBACisjLQorIyBDb3B5cmlnaHQgKGMpIDIwMTIgSmFrdWIgV29qY2llY2gg
S2xhbWEgPGpjZWVsQEZyZWVCU0Qub3JnPgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworIyAkRnJlZUJTRCQKKyMKKworI2luY2x1ZGUg
Im9wdF9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9j
cHVzZXQuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCitJTlRFUkZBQ0UgcGljOwor
CitDT0RFIHsKKwlzdGF0aWMgaW50IG51bGxfcGljX2JpbmQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3Qg
YXJtX2lycXNyYyAqaXNyYykKKwl7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCisJc3Rh
dGljIHZvaWQgbnVsbF9waWNfZGlzYWJsZV9pbnRyKGRldmljZV90IGRldiwgIHN0cnVjdCBhcm1f
aXJxc3JjICppc3JjKQorCXsKKwkJcmV0dXJuOworCX0KKworCXN0YXRpYyB2b2lkIG51bGxfcGlj
X2VuYWJsZV9pbnRyKGRldmljZV90IGRldiwgIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQorCXsK
KwkJcmV0dXJuOworCX0KKworCXN0YXRpYyB2b2lkIG51bGxfcGljX2luaXRfc2Vjb25kYXJ5KGRl
dmljZV90IGRldikKKwl7CisJCXJldHVybjsKKwl9CisKKwlzdGF0aWMgdm9pZCBudWxsX3BpY19p
cGlfc2VuZChkZXZpY2VfdCBkZXYsIGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSkKKwl7CisJCXJl
dHVybjsKKwl9Cit9OworCitNRVRIT0QgaW50IHJlZ2lzdGVyIHsKKwlkZXZpY2VfdAkJZGV2Owor
CXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworCWJvb2xlYW5fdAkJKmlzX3BlcmNwdTsKK307CisK
K01FVEhPRCBpbnQgdW5yZWdpc3RlciB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2ly
cXNyYwkqaXNyYzsKK307CisKK01FVEhPRCB2b2lkIGRpc2FibGVfaW50ciB7CisJZGV2aWNlX3QJ
CWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK30gREVGQVVMVCBudWxsX3BpY19kaXNh
YmxlX2ludHI7CisKK01FVEhPRCB2b2lkIGRpc2FibGVfc291cmNlIHsKKwlkZXZpY2VfdAkJZGV2
OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworfTsKKworTUVUSE9EIHZvaWQgZW5hYmxlX3Nv
dXJjZSB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK307CisK
K01FVEhPRCB2b2lkIGVuYWJsZV9pbnRyIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1f
aXJxc3JjCSppc3JjOworfSBERUZBVUxUIG51bGxfcGljX2VuYWJsZV9pbnRyOworCitNRVRIT0Qg
dm9pZCBwcmVfaXRocmVhZCB7CisJZGV2aWNlX3QJCWRldjsKKwlzdHJ1Y3QgYXJtX2lycXNyYwkq
aXNyYzsKK307CisKK01FVEhPRCB2b2lkIHBvc3RfaXRocmVhZCB7CisJZGV2aWNlX3QJCWRldjsK
KwlzdHJ1Y3QgYXJtX2lycXNyYwkqaXNyYzsKK307CisKK01FVEhPRCB2b2lkIHBvc3RfZmlsdGVy
IHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOworfTsKKworTUVU
SE9EIGludCBiaW5kIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJxc3JjCSppc3Jj
OworfSBERUZBVUxUIG51bGxfcGljX2JpbmQ7CisKK01FVEhPRCB2b2lkIGluaXRfc2Vjb25kYXJ5
IHsKKwlkZXZpY2VfdAlkZXY7Cit9IERFRkFVTFQgbnVsbF9waWNfaW5pdF9zZWNvbmRhcnk7CisK
K01FVEhPRCB2b2lkIGlwaV9zZW5kIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0cnVjdCBhcm1faXJx
c3JjCSppc3JjOworCWNwdXNldF90CQljcHVzOworfSBERUZBVUxUIG51bGxfcGljX2lwaV9zZW5k
OworCkluZGV4OiBzeXMvYXJtL2luY2x1ZGUvZmR0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9p
bmNsdWRlL2ZkdC5oCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2luY2x1ZGUvZmR0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZm5kZWYgX01BQ0hJTkVfRkRUX0hf
CiAjZGVmaW5lIF9NQUNISU5FX0ZEVF9IXwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCiAj
aW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgogCiAjaW5jbHVkZSA8dm0vdm0uaD4KQEAgLTQw
LDEyICs0MSwyNCBAQAogI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiAjaW5jbHVkZSA8bWFjaGlu
ZS9pbnRyLmg+CiAKKyNpZmRlZiBBUk1fSU5UUk5HCisKIC8qIE1heCBpbnRlcnJ1cHQgbnVtYmVy
ICovCisjZGVmaW5lCUZEVF9JTlRSX01BWAkoMHhmZmZmKQorCisvKiBNYXAgcGhhbmRsZS9pbnRw
aW4gcGFpciB0byBnbG9iYWwgSVJRIG51bWJlciAqLworI2RlZmluZQlGRFRfTUFQX0lSUShub2Rl
LCBwaW4pCShhcm1fZmR0X21hcF9pcnEobm9kZSwgcGluKSkKKworI2Vsc2UKKworLyogTWF4IGlu
dGVycnVwdCBudW1iZXIgKi8KICNkZWZpbmUgRkRUX0lOVFJfTUFYCU5JUlEKIAogLyogTWFwIHBo
YW5kbGUvaW50cGluIHBhaXIgdG8gZ2xvYmFsIElSUSBudW1iZXIgKi8KICNkZWZpbmUJRkRUX01B
UF9JUlEobm9kZSwgcGluKQkocGluKQogCisjZW5kaWYgLyogQVJNX0lOVFJORyAqLworCiAvKgog
ICogQnVzIHNwYWNlIHRhZy4gWFhYIGVuZGlhbmVzcyBpbmZvIG5lZWRzIHRvIGJlIGRlcml2ZWQg
ZnJvbSB0aGUgYmxvYi4KICAqLwpJbmRleDogc3lzL2FybS9pbmNsdWRlL2ludHIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvaW50ci5oCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMv
YXJtL2luY2x1ZGUvaW50ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5NCBAQAogI2lu
Y2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KICNlbmRpZgogCisjaWZkZWYgQVJNX0lOVFJORwor
CisjaWZuZGVmIE5JUlEKKyNkZWZpbmUJTklSUQkJMTAyNAkvKiBYWFggLSBJdCBzaG91bGQgYmUg
YW4gb3B0aW9uLiAqLworI2VuZGlmCisKKyNkZWZpbmUJSU5UUl9TT0xPCUlOVFJfTUQxCisKKyNk
ZWZpbmUgQVJNX0lTUkNfTkFNRUxFTgkoTUFYQ09NTEVOICsgMSkKKwordHlwZWRlZiBpbnQgYXJt
X2lycV9maWx0ZXJfdCh2b2lkICphcmcsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKTsKK3R5cGVkZWYg
dm9pZCBhcm1faXBpX2ZpbHRlcl90KHZvaWQgKmFyZyk7CisKK2VudW0gYXJtX2lzcmNfdHlwZSB7
CisJQVJNX0lTUkNUX05BTUVTUEFDRSwKKwlBUk1fSVNSQ1RfRkRUCit9OworCisvKiBJbnRlcnJ1
cHQgc291cmNlIGRlZmluaXRpb24uICovCitzdHJ1Y3QgYXJtX2lycXNyYyB7CisJZGV2aWNlX3QJ
CWlzcmNfZGV2OwkvKiB3aGVyZSBpc3JjIGlzIG1hcHBlZCAqLworCWludHB0cl90CQlpc3JjX3hy
ZWY7CS8qIGRldmljZSByZWZlcmVuY2Uga2V5ICovCisJdm9pZCAqCQkJaXNyY19kYXRhOwkvKiBk
ZXZpY2UgZGF0YSBmb3IgaXNyYyAqLworCXVfaW50CQkJaXNyY19pcnE7CS8qIHVuaXF1ZSBpZGVu
dGlmaWNhdG9yICovCisJZW51bSBhcm1faXNyY190eXBlCWlzcmNfdHlwZTsJLyogaG93IGlzIGlz
cmMgZGVjcmliZWQgKi8KKwl1X2ludAkJCWlzcmNfZmxhZ3M7CisJY2hhcgkJCWlzcmNfbmFtZVtB
Uk1fSVNSQ19OQU1FTEVOXTsKKwl1aW50MTZfdAkJaXNyY19uc3BjX3R5cGU7CisJdWludDE2X3QJ
CWlzcmNfbnNwY19udW07CisJZW51bSBpbnRyX3RyaWdnZXIJaXNyY190cmlnOworCWVudW0gaW50
cl9wb2xhcml0eQlpc3JjX3BvbDsKKwljcHVzZXRfdAkJaXNyY19jcHU7CS8qIG9uIHdoaWNoIENQ
VXMgaXMgZW5hYmxlZCAqLworCXVfaW50CQkJaXNyY19pbmRleDsKKwl1X2xvbmcgKgkJaXNyY19j
b3VudDsKKwl1X2ludAkJCWlzcmNfaGFuZGxlcnM7CisJc3RydWN0IGludHJfZXZlbnQgKglpc3Jj
X2V2ZW50OworCWFybV9pcnFfZmlsdGVyX3QgKglpc3JjX2ZpbHRlcjsKKwlhcm1faXBpX2ZpbHRl
cl90ICoJaXNyY19pcGlmaWx0ZXI7CisJdm9pZCAqCQkJaXNyY19hcmc7CisjaWZkZWYgRkRUCisJ
dV9pbnQJCQlpc3JjX25jZWxsczsKKwlwY2VsbF90CQkJaXNyY19jZWxsc1tdOwkvKiBsZWF2ZSBp
dCBsYXN0ICovCisjZW5kaWYKK307CisKK3ZvaWQgYXJtX2lycV9zZXRfbmFtZShzdHJ1Y3QgYXJt
X2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgX19wcmludGZsaWtlKDIs
IDMpOworCit2b2lkIGFybV9pcnFfZGlzcGF0Y2goc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIHN0
cnVjdCB0cmFwZnJhbWUgKnRmKTsKKworI2RlZmluZSBBUk1fSVJRX05TUENfTk9ORQkwCisjZGVm
aW5lIEFSTV9JUlFfTlNQQ19QTEFJTgkxCisjZGVmaW5lIEFSTV9JUlFfTlNQQ19JUlEJMgorI2Rl
ZmluZSBBUk1fSVJRX05TUENfSVBJCTMKKwordV9pbnQgYXJtX25hbWVzcGFjZV9tYXBfaXJxKGRl
dmljZV90IGRldiwgdWludDE2X3QgdHlwZSwgdWludDE2X3QgbnVtKTsKKyNpZmRlZiBGRFQKK3Vf
aW50IGFybV9mZHRfbWFwX2lycShwaGFuZGxlX3QsIHBjZWxsX3QgKiwgdV9pbnQpOworI2VuZGlm
CisKK2ludCBhcm1fcGljX3JlZ2lzdGVyKGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZik7Citp
bnQgYXJtX3BpY191bnJlZ2lzdGVyKGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZik7CitpbnQg
YXJtX3BpY19jbGFpbV9yb290KGRldmljZV90IGRldiwgaW50cHRyX3QgeHJlZiwgYXJtX2lycV9m
aWx0ZXJfdCAqZmlsdGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgaXBpY291bnQpOworCitpbnQg
YXJtX2lycV9hZGRfaGFuZGxlcihkZXZpY2VfdCBkZXYsIGRyaXZlcl9maWx0ZXJfdCwgZHJpdmVy
X2ludHJfdCwgdm9pZCAqLAorICAgIHVfaW50LCBpbnQsIHZvaWQgKiopOworaW50IGFybV9pcnFf
cmVtb3ZlX2hhbmRsZXIoZGV2aWNlX3QgZGV2LCB1X2ludCwgdm9pZCAqKTsKK2ludCBhcm1faXJx
X2NvbmZpZyh1X2ludCwgZW51bSBpbnRyX3RyaWdnZXIsIGVudW0gaW50cl9wb2xhcml0eSk7Citp
bnQgYXJtX2lycV9kZXNjcmliZSh1X2ludCwgdm9pZCAqLCBjb25zdCBjaGFyICopOworCit1X2lu
dCBhcm1faXJxX25leHRfY3B1KHVfaW50IGN1cnJlbnRfY3B1LCBjcHVzZXRfdCAqY3B1bWFzayk7
CisKKyNpZmRlZiBTTVAKK2ludCBhcm1faXJxX2JpbmQodV9pbnQsIGludCk7CisKK3ZvaWQgYXJt
X2lwaV9kaXNwYXRjaChzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgc3RydWN0IHRyYXBmcmFtZSAq
dGYpOworCisjZGVmaW5lIEFJU0hGX05PQUxMT0MJMHgwMDAxCisKK2ludCBhcm1faXBpX3NldF9o
YW5kbGVyKHVfaW50IGlwaSwgY29uc3QgY2hhciAqbmFtZSwgYXJtX2lwaV9maWx0ZXJfdCAqZmls
dGVyLAorICAgIHZvaWQgKmFyZywgdV9pbnQgZmxhZ3MpOworICAgIAordm9pZCBhcm1fcGljX2lu
aXRfc2Vjb25kYXJ5KHZvaWQpOworI2VuZGlmCisKKyNlbHNlIC8qIEFSTV9JTlRSTkcgKi8KKwog
LyogWFhYIG1vdmUgdG8gc3RkLiogZmlsZXM/ICovCiAjaWZkZWYgQ1BVX1hTQ0FMRV84MTM0Mgog
I2RlZmluZSBOSVJRCQkxMjgKQEAgLTcxLDcgKzE1OSw2IEBACiAjZGVmaW5lIE5JUlEJCTMyCiAj
ZW5kaWYKIAotCiBpbnQgYXJtX2dldF9uZXh0X2lycShpbnQpOwogdm9pZCBhcm1fbWFza19pcnEo
dWludHB0cl90KTsKIHZvaWQgYXJtX3VubWFza19pcnEodWludHB0cl90KTsKQEAgLTgzLDggKzE3
MCw2IEBACiBleHRlcm4gaW50ICgqYXJtX2NvbmZpZ19pcnEpKGludCBpcnEsIGVudW0gaW50cl90
cmlnZ2VyIHRyaWcsCiAgICAgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCk7CiAKLXZvaWQgYXJtX2ly
cV9tZW1vcnlfYmFycmllcih1aW50cHRyX3QpOwotCiB2b2lkIGFybV9pbml0X3NlY29uZGFyeV9p
Yyh2b2lkKTsKIGludCAgZ2ljX2RlY29kZV9mZHQodWludDMyX3QgaXBhcmVudG5vZGUsIHVpbnQz
Ml90ICppbnRyY2VsbHMsIGludCAqaW50ZXJydXB0LAogICAgIGludCAqdHJpZywgaW50ICpwb2wp
OwpAQCAtOTMsNCArMTc4LDggQEAKIGludCBhcm1fZmR0X21hcF9pcnEocGhhbmRsZV90LCBwY2Vs
bF90ICosIGludCk7CiAjZW5kaWYKIAorI2VuZGlmIC8qIEFSTV9JTlRSTkcgKi8KKwordm9pZCBh
cm1faXJxX21lbW9yeV9iYXJyaWVyKHVpbnRwdHJfdCk7CisKICNlbmRpZgkvKiBfTUFDSElORV9J
TlRSX0ggKi8KSW5kZXg6IHN5cy9hcm0vaW5jbHVkZS9zbXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
YXJtL2luY2x1ZGUvc21wLmgJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vaW5jbHVkZS9z
bXAuaAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDE4IEBACiAjaW5jbHVkZSA8c3lzL19jcHVz
ZXQuaD4KICNpbmNsdWRlIDxtYWNoaW5lL3BjYi5oPgogCisjaWZkZWYgQVJNX0lOVFJORworZW51
bSB7CisJSVBJX0FTVCwKKwlJUElfUFJFRU1QVCwKKwlJUElfUkVOREVaVk9VUywKKwlJUElfU1RP
UCwKKwlJUElfU1RPUF9IQVJEID0gSVBJX1NUT1AsIC8qIFRoZXNlIGFyZSBzeW5vbnltcyBvbiBh
cm0uICovCisJSVBJX0hBUkRDTE9DSywKKwlJUElfVExCLAorCUFSTV9JUElfQ09VTlQKK307Cisj
ZWxzZQogI2RlZmluZSBJUElfQVNUCQkwCiAjZGVmaW5lIElQSV9QUkVFTVBUCTIKICNkZWZpbmUg
SVBJX1JFTkRFWlZPVVMJMwpAQCAtMTMsNiArMjUsNyBAQAogI2RlZmluZSBJUElfU1RPUF9IQVJE
CTQKICNkZWZpbmUgSVBJX0hBUkRDTE9DSwk2CiAjZGVmaW5lIElQSV9UTEIJCTcKKyNlbmRpZgog
CiB2b2lkCWluaXRfc2Vjb25kYXJ5KGludCBjcHUpOwogdm9pZAltcGVudHJ5KHZvaWQpOwpAQCAt
MjMsOCArMzYsMTAgQEAKIAogLyogUElDIGludGVyZmFjZSAqLwogdm9pZAlwaWNfaXBpX3NlbmQo
Y3B1c2V0X3QgY3B1cywgdV9pbnQgaXBpKTsKKyNpZm5kZWYgQVJNX0lOVFJORwogdm9pZAlwaWNf
aXBpX2NsZWFyKGludCBpcGkpOwogaW50CXBpY19pcGlfcmVhZChpbnQgYXJnKTsKKyNlbmRpZgog
CiAvKiBQbGF0Zm9ybSBpbnRlcmZhY2UgKi8KIHZvaWQJcGxhdGZvcm1fbXBfc2V0bWF4aWQodm9p
ZCk7CkluZGV4OiBzeXMvY29uZi9maWxlcy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2NvbmYvZmls
ZXMuYXJtCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvY29uZi9maWxlcy5hcm0JKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDggQEAKIGFybS9hcm0vaWRlbnRjcHUuYwkJc3RhbmRhcmQKIGFy
bS9hcm0vaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CiBhcm0vYXJtL2luX2Nrc3Vt
X2FybS5TCQlvcHRpb25hbAlpbmV0IHwgaW5ldDYKLWFybS9hcm0vaW50ci5jCQkJc3RhbmRhcmQK
K2FybS9hcm0vaW50ci5jCQkJb3B0aW9uYWwJIWFybV9pbnRybmcKK2FybS9hcm0vaW50cm5nLmMJ
CW9wdGlvbmFsCWFybV9pbnRybmcKIGFybS9hcm0vbG9jb3JlLlMJCXN0YW5kYXJkCW5vLW9iagog
YXJtL2FybS9tYWNoZGVwLmMJCXN0YW5kYXJkCiBhcm0vYXJtL21lbS5jCQkJb3B0aW9uYWwJbWVt
CkBAIC0zNyw2ICszOCw3IEBACiBhcm0vYXJtL21wX21hY2hkZXAuYwkJb3B0aW9uYWwJc21wCiBh
cm0vYXJtL25leHVzLmMJCQlzdGFuZGFyZAogYXJtL2FybS9waHlzbWVtLmMJCXN0YW5kYXJkCith
cm0vYXJtL3BpY19pZi5tCQlvcHRpb25hbAlhcm1faW50cm5nCiBhcm0vYXJtL3BsMTkwLmMJCQlv
cHRpb25hbAlwbDE5MAogYXJtL2FybS9wbDMxMC5jCQkJb3B0aW9uYWwJcGwzMTAKIGFybS9hcm0v
cGxhdGZvcm0uYwkJb3B0aW9uYWwJcGxhdGZvcm0KSW5kZXg6IHN5cy9jb25mL29wdGlvbnMuYXJt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHN5cy9jb25mL29wdGlvbnMuYXJtCShyZXZpc2lvbiAyNzk2ODUpCisr
KyBzeXMvY29uZi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIEFS
TTlfQ0FDSEVfV1JJVEVfVEhST1VHSAlvcHRfZ2xvYmFsLmgKIEFSTVY2CQkJb3B0X2dsb2JhbC5o
CiBBUk1fQ0FDSEVfTE9DS19FTkFCTEUJb3B0X2dsb2JhbC5oCitBUk1fSU5UUk5HCQlvcHRfZ2xv
YmFsLmgKIEFSTV9LRVJOX0RJUkVDVE1BUAlvcHRfdm0uaAogQVJNX0wyX1BJUFQJCW9wdF9nbG9i
YWwuaAogQVJNX01BTllfQk9BUkQJCW9wdF9nbG9iYWwuaApJbmRleDogc3lzL2Rldi9mZHQvZmR0
X2NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvZmR0L2ZkdF9jb21tb24uaAkocmV2aXNp
b24gMjc5Njg1KQorKysgc3lzL2Rldi9mZHQvZmR0X2NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw3IEBACiBpbnQgZmR0X2FkZHJzaXplX2NlbGxzKHBoYW5kbGVfdCwgaW50ICos
IGludCAqKTsKIHVfbG9uZyBmZHRfZGF0YV9nZXQodm9pZCAqLCBpbnQpOwogaW50IGZkdF9kYXRh
X3RvX3JlcyhwY2VsbF90ICosIGludCwgaW50LCB1X2xvbmcgKiwgdV9sb25nICopOworaW50IGZk
dF9kZXNjcmliZV9pcnEoY2hhciAqLCB1X2ludCwgdV9pbnQpOwogcGhhbmRsZV90IGZkdF9maW5k
X2NvbXBhdGlibGUocGhhbmRsZV90LCBjb25zdCBjaGFyICosIGludCk7CiBwaGFuZGxlX3QgZmR0
X2RlcHRoX3NlYXJjaF9jb21wYXRpYmxlKHBoYW5kbGVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwog
aW50IGZkdF9nZXRfbWVtX3JlZ2lvbnMoc3RydWN0IG1lbV9yZWdpb24gKiwgaW50ICosIHVpbnQz
Ml90ICopOwpJbmRleDogc3lzL2Rldi9mZHQvc2ltcGxlYnVzLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L2Rldi9mZHQvc2ltcGxlYnVzLmMJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9kZXYvZmR0L3Np
bXBsZWJ1cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8ZGV2
L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KIAorI2lu
Y2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgogI2luY2x1ZGUgPGRldi9mZHQvc2ltcGxlYnVz
Lmg+CiAKIC8qCkBAIC00OSw2ICs1MCw5IEBACiAgICAgaW50ICosIHVfbG9uZywgdV9sb25nLCB1
X2xvbmcsIHVfaW50KTsKIHN0YXRpYyB2b2lkCQlzaW1wbGVidXNfcHJvYmVfbm9tYXRjaChkZXZp
Y2VfdCBidXMsIGRldmljZV90IGNoaWxkKTsKIHN0YXRpYyBpbnQJCXNpbXBsZWJ1c19wcmludF9j
aGlsZChkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkKTsKKyNpZmRlZiBBUk1fSU5UUk5HCitz
dGF0aWMgaW50CQlzaW1wbGVidXNfcHJpbnRfaXJxcyhzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwp
OworI2VuZGlmCiAKIC8qCiAgKiBvZndfYnVzIGludGVyZmFjZQpAQCAtMzIzLDcgKzMyNywxMSBA
QAogCiAJcnYgPSAwOwogCXJ2ICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZSgmZGktPnJsLCAi
bWVtIiwgU1lTX1JFU19NRU1PUlksICIlI2x4Iik7CisjaWZkZWYgQVJNX0lOVFJORworCXJ2ICs9
IHNpbXBsZWJ1c19wcmludF9pcnFzKCZkaS0+cmwpOworI2Vsc2UKIAlydiArPSByZXNvdXJjZV9s
aXN0X3ByaW50X3R5cGUoJmRpLT5ybCwgImlycSIsIFNZU19SRVNfSVJRLCAiJWxkIik7CisjZW5k
aWYKIAlyZXR1cm4gKHJ2KTsKIH0KIApAQCAtMzYyLDMgKzM3MCwzMCBAQAogCXJ2ICs9IGJ1c19w
cmludF9jaGlsZF9mb290ZXIoYnVzLCBjaGlsZCk7CiAJcmV0dXJuIChydik7CiB9CisKKyNpZmRl
ZiBBUk1fSU5UUk5HCitzdGF0aWMgaW50CitzaW1wbGVidXNfcHJpbnRfaXJxcyhzdHJ1Y3QgcmVz
b3VyY2VfbGlzdCAqcmwpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKwlp
bnQgZXJyLCBwcmludGVkLCByZXR2YWw7CisJY2hhciBidWZbMzJdOworCisJcHJpbnRlZCA9IDA7
CisJcmV0dmFsID0gMDsKKworCVNUQUlMUV9GT1JFQUNIKHJsZSwgcmwsIGxpbmspIHsKKwkJaWYg
KHJsZS0+dHlwZSAhPSBTWVNfUkVTX0lSUSkKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IGZkdF9k
ZXNjcmliZV9pcnEoYnVmLCBzaXplb2YoYnVmKSwgcmxlLT5zdGFydCk7CisJCWlmIChlcnIgPCAw
KQorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIj8/PyIpOworCisJCXJldHZhbCArPSBw
cmludGYoIiVzJXMiLCBwcmludGVkID8gIiwiIDogIiBpcnEgIiwgYnVmKTsKKwkJcHJpbnRlZCsr
OworCX0KKworCXJldHVybiAocmV0dmFsKTsKK30KKyNlbmRpZgo=
--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=US-ASCII; name="intrng_gic_panda_01.diff"
Content-Disposition: attachment; filename="intrng_gic_panda_01.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i6xu3s494

SW5kZXg6IHN5cy9hcm0vYXJtL2dpYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2dpYy5j
CShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2FybS9naWMuYwkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVl
QlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRlIDxzeXMvcGFy
YW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CkBAIC00
MCw2ICs0Miw3IEBACiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9rdHIu
aD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL3BjcHUuaD4KICNpbmNsdWRlIDxzeXMv
cHJvYy5oPgpAQCAtNDYsNiArNDksNyBAQAogI2luY2x1ZGUgPHN5cy9jcHVzZXQuaD4KICNpbmNs
dWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9z
bXAuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5o
PgogI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CkBAIC01NSw2ICs1OSwxMSBAQAogI2luY2x1ZGUg
PGRldi9vZncvb2Z3X2J1cy5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CiAK
KyNpZmRlZiBBUk1fSU5UUk5HCisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVkZSAicGlj
X2lmLmgiCisjZW5kaWYKKwogLyogV2UgYXJlIHVzaW5nIEdJQ3YyIHJlZ2lzdGVyIG5hbWluZyAq
LwogCiAvKiBEaXN0cmlidXRvciBSZWdpc3RlcnMgKi8KQEAgLTgzLDggKzkyLDggQEAKICNkZWZp
bmUgR0lDQ19BQlBSCQkweDAwMUMJCQkvKiB2MSBJQ0NBQlBSICovCiAjZGVmaW5lIEdJQ0NfSUlE
UgkJMHgwMEZDCQkJLyogdjEgSUNDSUlEUiovCiAKLSNkZWZpbmUJR0lDX0ZJUlNUX0lQSQkJIDAJ
LyogSXJxcyAwLTE1IGFyZSBTR0lzL0lQSXMuICovCi0jZGVmaW5lCUdJQ19MQVNUX0lQSQkJMTUK
KyNkZWZpbmUJR0lDX0ZJUlNUX1NHSQkJIDAJLyogSXJxcyAwLTE1IGFyZSBTR0lzL0lQSXMuICov
CisjZGVmaW5lCUdJQ19MQVNUX1NHSQkJMTUKICNkZWZpbmUJR0lDX0ZJUlNUX1BQSQkJMTYJLyog
SXJxcyAxNi0zMSBhcmUgcHJpdmF0ZSAocGVyICovCiAjZGVmaW5lCUdJQ19MQVNUX1BQSQkJMzEJ
LyogY29yZSkgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzLiAqLwogI2RlZmluZQlHSUNfRklSU1RfU1BJ
CQkzMgkvKiBJcnFzIDMyKyBhcmUgc2hhcmVkIHBlcmlwaGVyYWxzLiAqLwpAQCAtOTgsOCArMTA3
LDE3IEBACiAjZGVmaW5lIEdJQ0RfSUNGR1JfVFJJR19FREdFCSgxIDw8IDEpCiAjZGVmaW5lIEdJ
Q0RfSUNGR1JfVFJJR19NQVNLCTB4MgogCisjaWZkZWYgQVJNX0lOVFJORworc3RhdGljIHVfaW50
IGdpY19pcnFfY3B1Oworc3RhdGljIGludCBhcm1fZ2ljX2ludHIodm9pZCAqLCBzdHJ1Y3QgdHJh
cGZyYW1lICopOworI2VuZGlmCisKIHN0cnVjdCBhcm1fZ2ljX3NvZnRjIHsKIAlkZXZpY2VfdAkJ
Z2ljX2RldjsKKyNpZmRlZiBBUk1fSU5UUk5HCisJdm9pZCAqCQkJZ2ljX2ludHJoYW5kOworCXN0
cnVjdCBhcm1faXJxc3JjICoqCWdpY19pcnFzOworI2VuZGlmCiAJc3RydWN0IHJlc291cmNlICoJ
Z2ljX3Jlc1szXTsKIAlidXNfc3BhY2VfdGFnX3QJCWdpY19jX2JzdDsKIAlidXNfc3BhY2VfdGFn
X3QJCWdpY19kX2JzdDsKQEAgLTExMywxMCArMTMxLDEzIEBACiBzdGF0aWMgc3RydWN0IHJlc291
cmNlX3NwZWMgYXJtX2dpY19zcGVjW10gPSB7CiAJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZfQUNU
SVZFIH0sCS8qIERpc3RyaWJ1dG9yIHJlZ2lzdGVycyAqLwogCXsgU1lTX1JFU19NRU1PUlksCTEs
CVJGX0FDVElWRSB9LAkvKiBDUFUgSW50ZXJydXB0IEludGYuIHJlZ2lzdGVycyAqLworI2lmZGVm
IEFSTV9JTlRSTkcKKwl7IFNZU19SRVNfSVJRLAkgIDAsIFJGX0FDVElWRSB8IFJGX09QVElPTkFM
IH0sIC8qIFBhcmVudCBpbnRlcnJ1cHQgKi8KKyNlbmRpZgogCXsgLTEsIDAgfQogfTsKIAotc3Rh
dGljIHN0cnVjdCBhcm1fZ2ljX3NvZnRjICphcm1fZ2ljX3NjID0gTlVMTDsKK3N0YXRpYyBzdHJ1
Y3QgYXJtX2dpY19zb2Z0YyAqZ2ljX3NjID0gTlVMTDsKIAogI2RlZmluZQlnaWNfY19yZWFkXzQo
X3NjLCBfcmVnKQkJXAogICAgIGJ1c19zcGFjZV9yZWFkXzQoKF9zYyktPmdpY19jX2JzdCwgKF9z
YyktPmdpY19jX2JzaCwgKF9yZWcpKQpAQCAtMTI3LDkgKzE0OCwxMSBAQAogI2RlZmluZQlnaWNf
ZF93cml0ZV80KF9zYywgX3JlZywgX3ZhbCkJCVwKICAgICBidXNfc3BhY2Vfd3JpdGVfNCgoX3Nj
KS0+Z2ljX2RfYnN0LCAoX3NjKS0+Z2ljX2RfYnNoLCAoX3JlZyksIChfdmFsKSkKIAorI2lmbmRl
ZiBBUk1fSU5UUk5HCiBzdGF0aWMgaW50IGdpY19jb25maWdfaXJxKGludCBpcnEsIGVudW0gaW50
cl90cmlnZ2VyIHRyaWcsCiAgICAgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCk7CiBzdGF0aWMgdm9p
ZCBnaWNfcG9zdF9maWx0ZXIodm9pZCAqKTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9md19j
b21wYXRfZGF0YSBjb21wYXRfZGF0YVtdID0gewogCXsiYXJtLGdpYyIsCQl0cnVlfSwJLyogTm9u
LXN0YW5kYXJkLCB1c2VkIGluIEZyZWVCU0QgZHRzLiAqLwpAQCAtMTU1LDEwICsxNzgsNjIgQEAK
IAlyZXR1cm4gKEJVU19QUk9CRV9ERUZBVUxUKTsKIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcKK3N0
YXRpYyBpbmxpbmUgdm9pZAorZ2ljX2lycV91bm1hc2soc3RydWN0IGFybV9naWNfc29mdGMgKnNj
LCB1X2ludCBpcnEpCit7CisKKwlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lTRU5BQkxFUihpcnEg
Pj4gNSksICgxVUwgPDwgKGlycSAmIDB4MUYpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor
Z2ljX2lycV9tYXNrKHN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgdV9pbnQgaXJxKQoreworCisJ
Z2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEg
JiAweDFGKSkpOworfQorI2VuZGlmCisKKyNpZmRlZiBTTVAKKyNpZmRlZiBBUk1fSU5UUk5HCiBz
dGF0aWMgdm9pZAogYXJtX2dpY19pbml0X3NlY29uZGFyeShkZXZpY2VfdCBkZXYpCiB7CiAJc3Ry
dWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBh
cm1faXJxc3JjICppc3JjOworCXVfaW50IGlycTsKKworCWZvciAoaXJxID0gMDsgaXJxIDwgc2Mt
Pm5pcnFzOyBpcnEgKz0gNCkKKwkJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JUFJJT1JJVFlSKGly
cSA+PiAyKSwgMCk7CisKKwkvKiBTZXQgYWxsIHRoZSBpbnRlcnJ1cHRzIHRvIGJlIGluIEdyb3Vw
IDAgKHNlY3VyZSkgKi8KKwlmb3IgKGlycSA9IDA7IGlycSA8IHNjLT5uaXJxczsgaXJxICs9IDMy
KSB7CisJCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSUdST1VQUihpcnEgPj4gNSksIDApOworCX0K
KworCS8qIEVuYWJsZSBDUFUgaW50ZXJmYWNlICovCisJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19D
VExSLCAxKTsKKworCS8qIFNldCBwcmlvcml0eSBtYXNrIHJlZ2lzdGVyLiAqLworCWdpY19jX3dy
aXRlXzQoc2MsIEdJQ0NfUE1SLCAweGZmKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHQgZGlzdHJp
YnV0aW9uICovCisJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9DVExSLCAweDAxKTsKKworCS8qIFVu
bWFzayBhdHRhY2hlZCBQUEkgaW50ZXJydXB0cy4gKi8KKwlmb3IgKGlycSA9IEdJQ19GSVJTVF9Q
UEk7IGlycSA8PSBHSUNfTEFTVF9QUEk7IGlycSsrKSB7CisJCWlzcmMgPSBzYy0+Z2ljX2lycXNb
aXJxXTsKKwkJaWYgKGlzcmMgIT0gTlVMTCkgeworCQkJQ1BVX1NFVChQQ1BVX0dFVChjcHVpZCks
ICZpc3JjLT5pc3JjX2NwdSk7CisJCQlnaWNfaXJxX3VubWFzayhzYywgaXJxKTsKKwkJfQorCX0K
K30KKyNlbHNlCitzdGF0aWMgdm9pZAorYXJtX2dpY19pbml0X3NlY29uZGFyeShkZXZpY2VfdCBk
ZXYpCit7CisJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNjLT5uaXJxczsgaSArPSA0KQpAQCAtMTg1
LDcgKzI2MCwxMCBAQAogCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSVNFTkFCTEVSKDI5ID4+IDUp
LCAoMVVMIDw8ICgyOSAmIDB4MUYpKSk7CiAJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJM
RVIoMzAgPj4gNSksICgxVUwgPDwgKDMwICYgMHgxRikpKTsKIH0KKyNlbmRpZiAvKiBBUk1fSU5U
Uk5HICovCisjZW5kaWYgLyogU01QICovCiAKKyNpZm5kZWYgQVJNX0lOVFJORwogaW50CiBnaWNf
ZGVjb2RlX2ZkdCh1aW50MzJfdCBpcGFyZW50LCB1aW50MzJfdCAqaW50ciwgaW50ICppbnRlcnJ1
cHQsCiAgICAgaW50ICp0cmlnLCBpbnQgKnBvbCkKQEAgLTIzMCw3ICszMDgsMTggQEAKIAl9CiAJ
cmV0dXJuICgwKTsKIH0KKyNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludHB0cl90CitnaWNfeHJl
ZihkZXZpY2VfdCBkZXYpCit7CisjaWZkZWYgRkRUCisJcmV0dXJuIChPRl94cmVmX2Zyb21fbm9k
ZShvZndfYnVzX2dldF9ub2RlKGRldikpKTsKKyNlbHNlCisJcmV0dXJuICgwKTsKKyNlbmRpZgor
fQorCiBzdGF0aWMgaW50CiBhcm1fZ2ljX2F0dGFjaChkZXZpY2VfdCBkZXYpCiB7CkBAIC0yMzcs
OCArMzI2LDExIEBACiAJc3RydWN0CQlhcm1fZ2ljX3NvZnRjICpzYzsKIAlpbnQJCWk7CiAJdWlu
dDMyX3QJaWNjaWlkcjsKKyNpZmRlZiBBUk1fSU5UUk5HCisJaW50cHRyX3QJeHJlZiA9IGdpY194
cmVmKGRldik7CisjZW5kaWYKIAotCWlmIChhcm1fZ2ljX3NjKQorCWlmIChnaWNfc2MpCiAJCXJl
dHVybiAoRU5YSU8pOwogCiAJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CkBAIC0yNDksNyAr
MzQxLDcgQEAKIAl9CiAKIAlzYy0+Z2ljX2RldiA9IGRldjsKLQlhcm1fZ2ljX3NjID0gc2M7CisJ
Z2ljX3NjID0gc2M7CiAKIAkvKiBJbml0aWFsaXplIG11dGV4ICovCiAJbXR4X2luaXQoJnNjLT5t
dXRleCwgIkdJQyBsb2NrIiwgIiIsIE1UWF9TUElOKTsKQEAgLTI2OSw5ICszNjEsMTQgQEAKIAlz
Yy0+bmlycXMgPSBnaWNfZF9yZWFkXzQoc2MsIEdJQ0RfVFlQRVIpOwogCXNjLT5uaXJxcyA9IDMy
ICogKChzYy0+bmlycXMgJiAweDFmKSArIDEpOwogCisjaWZkZWYgQVJNX0lOVFJORworCXNjLT5n
aWNfaXJxcyA9IG1hbGxvYyhzYy0+bmlycXMgKiBzaXplb2YgKCpzYy0+Z2ljX2lycXMpLCBNX0RF
VkJVRiwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8pOworI2Vsc2UKIAkvKiBTZXQgdXAgZnVuY3Rp
b24gcG9pbnRlcnMgKi8KIAlhcm1fcG9zdF9maWx0ZXIgPSBnaWNfcG9zdF9maWx0ZXI7CiAJYXJt
X2NvbmZpZ19pcnEgPSBnaWNfY29uZmlnX2lycTsKKyNlbmRpZgogCiAJaWNjaWlkciA9IGdpY19j
X3JlYWRfNChzYywgR0lDQ19JSURSKTsKIAlkZXZpY2VfcHJpbnRmKGRldiwicG4gMHgleCwgYXJj
aCAweCV4LCByZXYgMHgleCwgaW1wbGVtZW50ZXIgMHgleCBpcnFzICV1XG4iLApAQCAtMzA3LDEx
ICs0MDQsNDYzIEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiAqLwogCWdp
Y19kX3dyaXRlXzQoc2MsIEdJQ0RfQ1RMUiwgMHgwMSk7CisjaWZuZGVmIEFSTV9JTlRSTkcKKwly
ZXR1cm4gKDApOworI2Vsc2UKKwkvKgorCSAqIE5vdywgd2hlbiBldmVyeXRoaW5nIGlzIGluaXRp
YWxpemVkLCBpdCdzIHJpZ2h0IHRpbWUgdG8KKwkgKiByZWdpc3RlciBpbnRlcnJ1cHQgY29udHJv
bGxlciB0byBpbnRlcnJ1cHQgZnJhbWVmb3JrLgorCSAqLworCWlmIChhcm1fcGljX3JlZ2lzdGVy
KGRldiwgeHJlZikgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCByZWdp
c3RlciBQSUNcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQogCisJaWYgKHNjLT5naWNfcmVzWzJd
ID09IE5VTEwpIHsKKwkJaWYgKGFybV9waWNfY2xhaW1fcm9vdChkZXYsIHhyZWYsIGFybV9naWNf
aW50ciwgc2MsCisJCSAgICBHSUNfTEFTVF9TR0kgLSBHSUNfRklSU1RfU0dJICsgMSkgIT0gMCkg
eworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3Qgc2V0IFBJQyBhcyBhIHJvb3RcbiIp
OworCQkJYXJtX3BpY191bnJlZ2lzdGVyKGRldiwgeHJlZik7CisJCQlnb3RvIGNsZWFudXA7CisJ
CX0KKwl9IGVsc2UgeworCQlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+Z2ljX3Jlc1syXSwg
SU5UUl9UWVBFX01JU0MgfAorCQkgICAgSU5UUl9TT0xPLCAodm9pZCopYXJtX2dpY19pbnRyLCBO
VUxMLCBzYywKKwkJICAgICZzYy0+Z2ljX2ludHJoYW5kKSkgeworCQkJZGV2aWNlX3ByaW50Zihk
ZXYsICJjb3VsZCBub3Qgc2V0dXAgaXJxIGhhbmRsZXJcbiIpOworCQkJYXJtX3BpY191bnJlZ2lz
dGVyKGRldiwgeHJlZik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKIAlyZXR1cm4gKDAp
OworCitjbGVhbnVwOgorCS8qCisJICogWFhYIC0gbm90IGltcGxlbWVudGVkIGFybV9naWNfZGV0
YWNoKCkgc2hvdWxkIGJlIGNhbGxlZCAhCisJICovCisJaWYgKHNjLT5naWNfaXJxcyAhPSBOVUxM
KQorCQlmcmVlKHNjLT5naWNfaXJxcywgTV9ERVZCVUYpOworCWJ1c19yZWxlYXNlX3Jlc291cmNl
cyhkZXYsIGFybV9naWNfc3BlYywgc2MtPmdpY19yZXMpOworCXJldHVybihFTlhJTyk7CisjZW5k
aWYKIH0KIAorI2lmZGVmIEFSTV9JTlRSTkcKIHN0YXRpYyBpbnQKK2FybV9naWNfaW50cih2b2lk
ICphcmcsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpz
YyA9IGFyZzsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKwl1aW50MzJfdCBpcnFfYWN0aXZl
X3JlZywgaXJxOworCisJaXJxX2FjdGl2ZV9yZWcgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0NfSUFS
KTsKKwlpcnEgPSBpcnFfYWN0aXZlX3JlZyAmIDB4M0ZGOworCisJLyoKKwkgKiAxLiBXZSBkbyBF
T0kgaGVyZSBiZWNhdXNlIHJlY2VudCByZWFkIHZhbHVlIGZyb20gYWN0aXZlIGludGVycnVwdAor
CSAqICAgIHJlZ2lzdGVyIG11c3QgYmUgdXNlZCBmb3IgaXQuIEFub3RoZXIgYXBwcm9hY2ggaXMg
dG8gc2F2ZSB0aGlzCisJICogICAgdmFsdWUgaW50byBhc3NvY2lhdGVkIGludGVycnVwdCBzb3Vy
Y2UuCisJICogMi4gRU9JIG11c3QgYmUgZG9uZSBvbiBzYW1lIENQVSB3aGVyZSBpbnRlcnJ1cHQg
aGFzIGZpcmVkLiBUaHVzCisJICogICAgd2UgbXVzdCBlbnN1cmUgdGhhdCBpbnRlcnJ1cHRlZCB0
aHJlYWQgZG9lcyBub3QgbWlncmF0ZSB0bworCSAqICAgIGFub3RoZXIgQ1BVLgorCSAqIDMuIEVP
SSBjYW5ub3QgYmUgZGVsYXllZCBieSBhbnkgcHJlZW1wdGlvbiB3aGljaCBjb3VsZCBoYXBwZW4g
b24KKwkgKiAgICBjcml0aWNhbF9leGl0KCkgdXNlZCBpbiBNSSBpbnRyIGNvZGUsIHdoZW4gaW50
ZXJydXB0IHRocmVhZCBpcworCSAqICAgIHNjaGVkdWxlZC4gU2VlIG5leHQgcG9pbnQuCisJICog
NC4gSVBJX1JFTkRFWlZPVVMgYXNzdW1lcyB0aGF0IG5vIHByZWVtcHRpb24gaXMgcGVybWl0dGVk
IGR1cmluZworCSAqICAgIGFuIGFjdGlvbiBhbmQgYW55IHVzZSBvZiBjcml0aWNhbF9leGl0KCkg
Y291bGQgYnJlYWsgdGhpcworCSAqICAgIGFzc3VtcHRpb24uIFNlZSBjb21tZW50cyB3aXRoaW4g
c21wX3JlbmRlenZvdXNfYWN0aW9uKCkuCisJICogNS4gV2UgYWx3YXlzIHJldHVybiBGSUxURVJf
SEFORExFRCBhcyB0aGlzIGlzIGFuIGludGVycnVwdAorCSAqICAgIGNvbnRyb2xsZXIgZGlzcGF0
Y2ggZnVuY3Rpb24uIE90aGVyd2lzZSwgaW4gY2FzY2FkZWQgaW50ZXJydXB0CisJICogICAgY2Fz
ZSwgdGhlIHdob2xlIGludGVycnVwdCBzdWJ0cmVlIHdvdWxkIGJlIG1hc2tlZC4KKwkgKi8KKwor
CWlmIChpcnEgPj0gc2MtPm5pcnFzKSB7CisJCWRldmljZV9wcmludGYoc2MtPmdpY19kZXYsICJT
cHVyaW91cyBpbnRlcnJ1cHQgZGV0ZWN0ZWRcbiIpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUND
X0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJcmV0dXJuIChGSUxURVJfSEFORExFRCk7CisJfQor
CitkaXNwYXRjaF9pcnE6CisJaXNyYyA9IHNjLT5naWNfaXJxc1tpcnFdOworCWlmIChpc3JjID09
IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+Z2ljX2RldiwgIlN0cmF5IGludGVycnVwdCAl
dSBkZXRlY3RlZFxuIiwgaXJxKTsKKwkJZ2ljX2lycV9tYXNrKHNjLCBpcnEpOworCQlnaWNfY193
cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJZ290byBuZXh0X2lycTsK
Kwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCBHSUNfRklSU1RfU0dJIGlzIHplcm8gYW5kIGlzIG5v
dCB1c2VkIGluICdpZicgc3RhdGVtZW50CisJICogYXMgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQg
Y29tcGFyaW5nIHVfaW50ID49IDAgaXMgYWx3YXlzIHRydWUuCisJICovCisJaWYgKGlycSA8PSBH
SUNfTEFTVF9TR0kpIHsKKyNpZmRlZiBTTVAKKwkJLyogQ2FsbCBFT0kgZm9yIGFsbCBJUEkgYmVm
b3JlIGRpc3BhdGNoLiAqLworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3Rp
dmVfcmVnKTsKKwkJYXJtX2lwaV9kaXNwYXRjaChpc3JjLCB0Zik7CisJCWdvdG8gbmV4dF9pcnE7
CisjZWxzZQorCQlwcmludGYoIlNHSSAldSBvbiBVUCBzeXN0ZW0gZGV0ZWN0ZWRcbiIsIGlycSAt
IEdJQ19GSVJTVF9TR0kpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3Rp
dmVfcmVnKTsKKwkJZ290byBuZXh0X2lycTsKKyNlbmRpZgorCX0KKworCWlmIChpc3JjLT5pc3Jj
X3RyaWcgPT0gSU5UUl9UUklHR0VSX0xFVkVMKSB7CisJCWNyaXRpY2FsX2VudGVyKCk7CisJCWFy
bV9pcnFfZGlzcGF0Y2goaXNyYywgdGYpOworCQlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIs
IGlycV9hY3RpdmVfcmVnKTsKKwkJY3JpdGljYWxfZXhpdCgpOworCX0gZWxzZSB7CisJCWdpY19j
X3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxX2FjdGl2ZV9yZWcpOworCQlhcm1faXJxX2Rpc3Bh
dGNoKGlzcmMsIHRmKTsKKwl9CisKK25leHRfaXJxOgorCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIo
aXJxKTsgLyogWFhYICovCisJaXJxX2FjdGl2ZV9yZWcgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0Nf
SUFSKTsKKwlpcnEgPSBpcnFfYWN0aXZlX3JlZyAmIDB4M0ZGOworCWlmIChpcnEgPCBzYy0+bmly
cXMpCisJCWdvdG8gZGlzcGF0Y2hfaXJxOworCisJcmV0dXJuIChGSUxURVJfSEFORExFRCk7Cit9
CisKK3N0YXRpYyBpbnQKK2dpY19hdHRhY2hfaXNyYyhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2Ms
IHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBpcnEpCit7CisJY29uc3QgY2hhciAqbmFt
ZTsKKworCS8qCisJICogMS4gVGhlIGxpbmsgYmV0d2VlbiBJU1JDIGFuZCBjb250cm9sbGVyIG11
c3QgYmUgc2V0IGF0b21pY2FsbHkuCisJICogMi4gSnVzdCBkbyB0aGluZ3Mgb25seSBvbmNlIGlu
IHJhcmUgY2FzZSB3aGVuIGNvbnN1bWVycworCSAqICAgIG9mIHNoYXJlZCBpbnRlcnJ1cHQgY2Ft
ZSBoZXJlIGF0IHRoZSBzYW1lIG1vbWVudC4KKwkgKi8KKwltdHhfbG9ja19zcGluKCZzYy0+bXV0
ZXgpOworCWlmIChzYy0+Z2ljX2lycXNbaXJxXSAhPSBOVUxMKSB7CisJCW10eF91bmxvY2tfc3Bp
bigmc2MtPm11dGV4KTsKKwkJcmV0dXJuIChzYy0+Z2ljX2lycXNbaXJxXSA9PSBpc3JjID8gMCA6
IEVFWElTVCk7CisJfQorCXNjLT5naWNfaXJxc1tpcnFdID0gaXNyYzsKKwlpc3JjLT5pc3JjX2Rh
dGEgPSAodm9pZCAqKWlycTsKKwltdHhfdW5sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisKKwluYW1l
ID0gZGV2aWNlX2dldF9uYW1ldW5pdChzYy0+Z2ljX2Rldik7CisJaWYgKGlycSA8PSBHSUNfTEFT
VF9TR0kpCisJCWFybV9pcnFfc2V0X25hbWUoaXNyYywgIiVzLGkldSIsIG5hbWUsIGlycSAtIEdJ
Q19GSVJTVF9TR0kpOworCWVsc2UgaWYgKGlycSA8PSBHSUNfTEFTVF9QUEkpCisJCWFybV9pcnFf
c2V0X25hbWUoaXNyYywgIiVzLHAldSIsIG5hbWUsIGlycSAtIEdJQ19GSVJTVF9QUEkpOworCWVs
c2UKKwkJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiJXMscyV1IiwgbmFtZSwgaXJxIC0gR0lDX0ZJ
UlNUX1NQSSk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2RldGFjaF9pc3Jj
KHN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsIHVfaW50
IGlycSkKK3sKKworCW10eF9sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisJaWYgKHNjLT5naWNfaXJx
c1tpcnFdICE9IGlzcmMpIHsKKwkJbXR4X3VubG9ja19zcGluKCZzYy0+bXV0ZXgpOworCQlyZXR1
cm4gKHNjLT5naWNfaXJxc1tpcnFdID09IE5VTEwgPyAwIDogRUlOVkFMKTsKKwl9CisJc2MtPmdp
Y19pcnFzW2lycV0gPSBOVUxMOworCWlzcmMtPmlzcmNfZGF0YSA9IE5VTEw7CisJbXR4X3VubG9j
a19zcGluKCZzYy0+bXV0ZXgpOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CisJcmV0
dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2dpY19jb25maWcoc3RydWN0IGFybV9naWNfc29m
dGMgKnNjLCB1X2ludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsCisgICAgZW51bSBpbnRy
X3BvbGFyaXR5IHBvbCkKK3sKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3QgbWFzazsKKworCWlm
IChpcnEgPCBHSUNfRklSU1RfU1BJKQorCQlyZXR1cm47CisKKwltdHhfbG9ja19zcGluKCZzYy0+
bXV0ZXgpOworCisJcmVnID0gZ2ljX2RfcmVhZF80KHNjLCBHSUNEX0lDRkdSKGlycSA+PiA0KSk7
CisJbWFzayA9IChyZWcgPj4gMiooaXJxICUgMTYpKSAmIDB4MzsKKworCWlmIChwb2wgPT0gSU5U
Ul9QT0xBUklUWV9MT1cpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9QT0xfTUFTSzsKKwkJbWFz
ayB8PSBHSUNEX0lDRkdSX1BPTF9MT1c7CisJfSBlbHNlIGlmIChwb2wgPT0gSU5UUl9QT0xBUklU
WV9ISUdIKSB7CisJCW1hc2sgJj0gfkdJQ0RfSUNGR1JfUE9MX01BU0s7CisJCW1hc2sgfD0gR0lD
RF9JQ0ZHUl9QT0xfSElHSDsKKwl9CisKKwlpZiAodHJpZyA9PSBJTlRSX1RSSUdHRVJfTEVWRUwp
IHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sgfD0gR0lDRF9JQ0ZH
Ul9UUklHX0xWTDsKKwl9IGVsc2UgaWYgKHRyaWcgPT0gSU5UUl9UUklHR0VSX0VER0UpIHsKKwkJ
bWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sgfD0gR0lDRF9JQ0ZHUl9UUklH
X0VER0U7CisJfQorCisJLyogU2V0IG1hc2sgKi8KKwlyZWcgPSByZWcgJiB+KDB4MyA8PCAyKihp
cnEgJSAxNikpOworCXJlZyA9IHJlZyB8IChtYXNrIDw8IDIqKGlycSAlIDE2KSk7CisJZ2ljX2Rf
d3JpdGVfNChzYywgR0lDRF9JQ0ZHUihpcnEgPj4gNCksIHJlZyk7CisKKwltdHhfdW5sb2NrX3Nw
aW4oJnNjLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQKK2dpY19iaW5kKHN0cnVjdCBhcm1fZ2lj
X3NvZnRjICpzYywgdV9pbnQgaXJxLCBjcHVzZXRfdCAqY3B1cykKK3sKKwl1aW50MzJfdCBjcHUs
IGVuZCwgbWFzaywgcmVnOworCisJZW5kID0gbWluKG1wX25jcHVzLCA4KTsKKwlmb3IgKGNwdSA9
IGVuZDsgY3B1IDwgTUFYQ1BVOyBjcHUrKykKKwkJaWYgKENQVV9JU1NFVChjcHUsIGNwdXMpKQor
CQkJcmV0dXJuIChFSU5WQUwpOworCisJZm9yIChtYXNrID0gMCwgY3B1ID0gMDsgY3B1IDwgZW5k
OyBjcHUrKykKKwkJaWYgKENQVV9JU1NFVChjcHUsIGNwdXMpKQorCQkJbWFzayB8PSAxIDw8IGNw
dTsKKworCW10eF9sb2NrX3NwaW4oJnNjLT5tdXRleCk7CisJcmVnID0gZ2ljX2RfcmVhZF80KHNj
LCBHSUNEX0lUQVJHRVRTUihpcnEgLyA0KSk7CisJcmVnICY9IH4oMHhGRiA8PCAoOCAqIChpcnEg
JSA0KSkpOworCXJlZyB8PSBtYXNrIDw8ICg4ICogKGlycSAlIDQpKTsKKwlnaWNfZF93cml0ZV80
KHNjLCBHSUNEX0lUQVJHRVRTUihpcnEgLyA0KSwgcmVnKTsKKwltdHhfdW5sb2NrX3NwaW4oJnNj
LT5tdXRleCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2lycV9mcm9tX25z
cGMoc3RydWN0IGFybV9naWNfc29mdGMgKnNjLCB1X2ludCB0eXBlLCB1X2ludCBudW0sIHVfaW50
ICppcnFwKQoreworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBUk1fSVJRX05TUENfUExBSU46
CisJCSppcnFwID0gbnVtOworCQlyZXR1cm4gKCppcnFwIDwgc2MtPm5pcnFzID8gMCA6IEVJTlZB
TCk7CisKKwljYXNlIEFSTV9JUlFfTlNQQ19JUlE6CisJCSppcnFwID0gbnVtICsgR0lDX0ZJUlNU
X1BQSTsKKwkJcmV0dXJuICgqaXJxcCA8IHNjLT5uaXJxcyA/IDAgOiBFSU5WQUwpOworCisJY2Fz
ZSBBUk1fSVJRX05TUENfSVBJOgorCQkqaXJxcCA9IG51bSArIEdJQ19GSVJTVF9TR0k7CisJCXJl
dHVybiAoKmlycXAgPCBHSUNfTEFTVF9TR0kgPyAwIDogRUlOVkFMKTsKKworCWRlZmF1bHQ6CisJ
CXJldHVybiAoRUlOVkFMKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2dpY19tYXBfbnNwYyhzdHJ1
Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCAqaXJx
cCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdpY19pcnFfZnJvbV9uc3BjKHNjLCBpc3Jj
LT5pc3JjX25zcGNfdHlwZSwgaXNyYy0+aXNyY19uc3BjX251bSwKKwkgICAgaXJxcCk7CisJaWYg
KGVycm9yICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCXJldHVybiAoZ2ljX2F0dGFjaF9pc3Jj
KHNjLCBpc3JjLCAqaXJxcCkpOworfQorCisjaWZkZWYgRkRUCitzdGF0aWMgaW50CitnaWNfbWFw
X2ZkdChzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCB1
X2ludCAqaXJxcCkKK3sKKwl1X2ludCBpcnEsIHRyaXBvbDsKKwllbnVtIGludHJfdHJpZ2dlciB0
cmlnOworCWVudW0gaW50cl9wb2xhcml0eSBwb2w7CisJaW50IGVycm9yOworCisJaWYgKGlzcmMt
PmlzcmNfbmNlbGxzID09IDEpIHsKKwkJaXJxID0gaXNyYy0+aXNyY19jZWxsc1swXTsKKwkJcG9s
ID0gSU5UUl9QT0xBUklUWV9DT05GT1JNOworCQl0cmlnID0gSU5UUl9UUklHR0VSX0NPTkZPUk07
CisJfSBlbHNlIGlmIChpc3JjLT5pc3JjX25jZWxscyA9PSAzKSB7CisJCWlmIChpc3JjLT5pc3Jj
X2NlbGxzWzBdID09IDApCisJCQlpcnEgPSBpc3JjLT5pc3JjX2NlbGxzWzFdICsgR0lDX0ZJUlNU
X1BQSTsKKwkJZWxzZQorCQkJaXJxID0gaXNyYy0+aXNyY19jZWxsc1sxXSArIEdJQ19GSVJTVF9T
UEk7CisKKwkJLyoKKwkJICogSW4gaW50clsyXSwgYml0c1szOjBdIGFyZSB0cmlnZ2VyIHR5cGUg
YW5kIGxldmVsIGZsYWdzLgorCQkgKiAgIDEgPSBsb3ctdG8taGlnaCBlZGdlIHRyaWdnZXJlZAor
CQkgKiAgIDIgPSBoaWdoLXRvLWxvdyBlZGdlIHRyaWdnZXJlZAorCQkgKiAgIDQgPSBhY3RpdmUg
aGlnaCBsZXZlbC1zZW5zaXRpdmUKKwkJICogICA4ID0gYWN0aXZlIGxvdyBsZXZlbC1zZW5zaXRp
dmUKKwkJICogVGhlIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgYWN0aXZlLWhpZ2gtbGV2ZWwgb3Ig
cmlzaW5nLWVkZ2UuCisJCSAqLworCQl0cmlwb2wgPSBpc3JjLT5pc3JjX2NlbGxzWzJdOworCQlp
ZiAodHJpcG9sICYgMHgwYSkgeworCQkJcHJpbnRmKCJ1bnN1cHBvcnRlZCB0cmlnZ2VyL3BvbGFy
aXR5IGNvbmZpZ3VyYXRpb24gIgorCQkJICAgICIweCUyeFxuIiwgdHJpcG9sICYgMHgwZik7CisJ
CQlyZXR1cm4gKEVOT1RTVVApOworCQl9CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfQ09ORk9STTsK
KwkJaWYgKHRyaXBvbCAmIDB4MDEpCisJCQl0cmlnID0gSU5UUl9UUklHR0VSX0VER0U7CisJCWVs
c2UKKwkJCXRyaWcgPSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJfSBlbHNlCisJCXJldHVybiAoRUlO
VkFMKTsKKworCWlmIChpcnEgPj0gc2MtPm5pcnFzKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwll
cnJvciA9IGdpY19hdHRhY2hfaXNyYyhzYywgaXNyYywgaXJxKTsKKwlpZiAoZXJyb3IgIT0gMCkK
KwkJcmV0dXJuIChlcnJvcik7CisKKwlpc3JjLT5pc3JjX25zcGNfdHlwZSA9IEFSTV9JUlFfTlNQ
Q19QTEFJTjsKKwlpc3JjLT5pc3JjX25zcGNfbnVtID0gaXJxOworCWlzcmMtPmlzcmNfdHJpZyA9
IHRyaWc7CisJaXNyYy0+aXNyY19wb2wgPSBwb2w7CisKKwkqaXJxcCA9IGlycTsKKwlyZXR1cm4g
KDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2FybV9naWNfcmVnaXN0ZXIoZGV2aWNlX3Qg
ZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgYm9vbGVhbl90ICppc19wZXJjcHUpCit7CisJ
c3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50
IGlycTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoaXNyYy0+aXNyY190eXBlID09IEFSTV9JU1JDVF9O
QU1FU1BBQ0UpCisJCWVycm9yID0gZ2ljX21hcF9uc3BjKHNjLCBpc3JjLCAmaXJxKTsKKyNpZmRl
ZiBGRFQKKwllbHNlIGlmIChpc3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX0ZEVCkKKwkJZXJy
b3IgPSBnaWNfbWFwX2ZkdChzYywgaXNyYywgJmlycSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVy
biAoRUlOVkFMKTsKKworCWlmIChlcnJvciA9PSAwKQorCQkqaXNfcGVyY3B1ID0gaXJxIDwgR0lD
X0ZJUlNUX1NQSSA/IFRSVUUgOiBGQUxTRTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj
IHZvaWQKK2FybV9naWNfZW5hYmxlX2ludHIoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNy
YyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpc3Jj
LT5pc3JjX3RyaWcgPT0gSU5UUl9UUklHR0VSX0NPTkZPUk0pCisJCWlzcmMtPmlzcmNfdHJpZyA9
IElOVFJfVFJJR0dFUl9MRVZFTDsKKworCWdpY19jb25maWcoc2MsIGlycSwgaXNyYy0+aXNyY190
cmlnLCBpc3JjLT5pc3JjX3BvbCk7CisKKwlpZiAoQ1BVX0VNUFRZKCZpc3JjLT5pc3JjX2NwdSkp
IHsKKwkJZ2ljX2lycV9jcHUgPSBhcm1faXJxX25leHRfY3B1KGdpY19pcnFfY3B1LCAmYWxsX2Nw
dXMpOworCQlDUFVfU0VUT0YoZ2ljX2lycV9jcHUsICZpc3JjLT5pc3JjX2NwdSk7CisJfQorCWlm
IChnaWNfYmluZChzYywgaXJxLCAmaXNyYy0+aXNyY19jcHUpICE9IDApCisJCUNQVV9aRVJPKCZp
c3JjLT5pc3JjX2NwdSk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2VuYWJsZV9zb3VyY2Uo
ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dp
Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50
KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpcnEgPD0gR0lDX0xBU1RfU0dJKQorCQlyZXR1cm47
IC8qIHYyIElNUExFTUVOVEFUSU9OIERFRklORUQgKi8KKworCWFybV9pcnFfbWVtb3J5X2JhcnJp
ZXIoaXJxKTsKKwlnaWNfaXJxX3VubWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2Fy
bV9naWNfZGlzYWJsZV9zb3VyY2UoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNy
YykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKworCWlmIChpcnEgPD0gR0lD
X0xBU1RfU0dJKQorCQlyZXR1cm47IC8qIHYyIElNUExFTUVOVEFUSU9OIERFRklORUQgKi8KKwor
CWdpY19pcnFfbWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2FybV9naWNfZGlzYWJs
ZV9pbnRyKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7Cit9CisKK3N0
YXRpYyBpbnQKK2FybV9naWNfdW5yZWdpc3RlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJx
c3JjICppc3JjKQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJcmV0dXJu
IChnaWNfZGV0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSkpOworfQorCitzdGF0aWMgdm9pZAorYXJt
X2dpY19wcmVfaXRocmVhZChkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQor
eworCisJYXJtX2dpY19kaXNhYmxlX3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0aWMgdm9p
ZAorYXJtX2dpY19wb3N0X2l0aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAq
aXNyYykKK3sKKworCWFybV9naWNfZW5hYmxlX3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0
aWMgdm9pZAorYXJtX2dpY19wb3N0X2ZpbHRlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJx
c3JjICppc3JjKQoreworCisJLyogRU9JIG11c3QgYmUgZG9uZSBpbiBjb250cm9sbGVyJ3MgaW50
ZXJydXB0IHJvdXRpbmUuICovCit9CisKKyNpZmRlZiBTTVAKK3N0YXRpYyBpbnQKK2FybV9naWNf
YmluZChkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCXN0cnVjdCBh
cm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1aW50MzJfdCBpcnEg
PSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJaWYgKGlycSA8IEdJQ19GSVJTVF9TUEkpCisJ
CXJldHVybiAoRUlOVkFMKTsKKworCWlmIChDUFVfRU1QVFkoJmlzcmMtPmlzcmNfY3B1KSkgewor
CQlnaWNfaXJxX2NwdSA9IGFybV9pcnFfbmV4dF9jcHUoZ2ljX2lycV9jcHUsICZhbGxfY3B1cyk7
CisJCUNQVV9TRVRPRihnaWNfaXJxX2NwdSwgJmlzcmMtPmlzcmNfY3B1KTsKKwl9CisJcmV0dXJu
IChnaWNfYmluZChzYywgaXJxLCAmaXNyYy0+aXNyY19jcHUpKTsKK30KKworc3RhdGljIHZvaWQK
K2FybV9naWNfaXBpX3NlbmQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywg
Y3B1c2V0X3QgY3B1cykKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7CisJdWludDMyX3QgaXJxLCB2YWwgPSAwLCBpOworCisJaXJxID0gKHVfaW50
KWlzcmMtPmlzcmNfZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykKKwkJaWYg
KENQVV9JU1NFVChpLCAmY3B1cykpCisJCQl2YWwgfD0gMSA8PCAoMTYgKyBpKTsKKworCWdpY19k
X3dyaXRlXzQoc2MsIEdJQ0RfU0dJUigwKSwgdmFsIHwgaXJxKTsKK30KKyNlbmRpZgorI2Vsc2UK
K3N0YXRpYyBpbnQKIGFybV9naWNfbmV4dF9pcnEoc3RydWN0IGFybV9naWNfc29mdGMgKnNjLCBp
bnQgbGFzdF9pcnEpCiB7CiAJdWludDMyX3QgYWN0aXZlX2lycTsKQEAgLTMyMyw3ICs4NzIsNyBA
QAogCSAqIGJpdHMgKGllIENQVSBudW1iZXIpLCBub3QganVzdCB0aGUgSVJRIG51bWJlciwgYW5k
IHdlIGRvIG5vdAogCSAqIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBsYXRlci4KIAkgKi8KLQlpZiAo
KGFjdGl2ZV9pcnEgJiAweDNmZikgPD0gR0lDX0xBU1RfSVBJKQorCWlmICgoYWN0aXZlX2lycSAm
IDB4M2ZmKSA8PSBHSUNfTEFTVF9TR0kpCiAJCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwg
YWN0aXZlX2lycSk7CiAJYWN0aXZlX2lycSAmPSAweDNGRjsKIApAQCAtMzk2LDcgKzk0NSw3IEBA
CiAJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCiAJ
Z2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JQ0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEg
JiAweDFGKSkpOwotCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxKTsKKwlnaWNfY193
cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycSk7IC8qIFhYWCAtIG5vdCBhbGxvd2VkICovCiB9CiAK
IHN0YXRpYyB2b2lkCkBAIC00MDQsNyArOTUzLDcgQEAKIHsKIAlzdHJ1Y3QgYXJtX2dpY19zb2Z0
YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKLQlpZiAoaXJxID4gR0lDX0xBU1RfSVBJ
KQorCWlmIChpcnEgPiBHSUNfTEFTVF9TR0kpCiAJCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJx
KTsKIAogCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfSVNFTkFCTEVSKGlycSA+PiA1KSwgKDFVTCA8
PCAoaXJxICYgMHgxRikpKTsKQEAgLTQ1MSwxMCArMTAwMCwxMCBAQAogc3RhdGljIHZvaWQKIGdp
Y19wb3N0X2ZpbHRlcih2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0g
YXJtX2dpY19zYzsKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBnaWNfc2M7CiAJdWludHB0
cl90IGlycSA9ICh1aW50cHRyX3QpIGFyZzsKIAotCWlmIChpcnEgPiBHSUNfTEFTVF9JUEkpCisJ
aWYgKGlycSA+IEdJQ19MQVNUX1NHSSkKIAkJYXJtX2lycV9tZW1vcnlfYmFycmllcihpcnEpOwog
CWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxKTsKIH0KQEAgLTQ2Myw3ICsxMDEyLDcg
QEAKIGdpY19jb25maWdfaXJxKGludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsIGVudW0g
aW50cl9wb2xhcml0eSBwb2wpCiB7CiAKLQlyZXR1cm4gKGFybV9naWNfY29uZmlnKGFybV9naWNf
c2MtPmdpY19kZXYsIGlycSwgdHJpZywgcG9sKSk7CisJcmV0dXJuIChhcm1fZ2ljX2NvbmZpZyhn
aWNfc2MtPmdpY19kZXYsIGlycSwgdHJpZywgcG9sKSk7CiB9CiAKIHZvaWQKQEAgLTQ3MCw3ICsx
MDE5LDcgQEAKIGFybV9tYXNrX2lycSh1aW50cHRyX3QgbmIpCiB7CiAKLQlhcm1fZ2ljX21hc2so
YXJtX2dpY19zYy0+Z2ljX2RldiwgbmIpOworCWFybV9naWNfbWFzayhnaWNfc2MtPmdpY19kZXYs
IG5iKTsKIH0KIAogdm9pZApAQCAtNDc3LDcgKzEwMjYsNyBAQAogYXJtX3VubWFza19pcnEodWlu
dHB0cl90IG5iKQogewogCi0JYXJtX2dpY191bm1hc2soYXJtX2dpY19zYy0+Z2ljX2RldiwgbmIp
OworCWFybV9naWNfdW5tYXNrKGdpY19zYy0+Z2ljX2RldiwgbmIpOwogfQogCiBpbnQKQEAgLTQ4
NCw3ICsxMDMzLDcgQEAKIGFybV9nZXRfbmV4dF9pcnEoaW50IGxhc3RfaXJxKQogewogCi0JcmV0
dXJuIChhcm1fZ2ljX25leHRfaXJxKGFybV9naWNfc2MsIGxhc3RfaXJxKSk7CisJcmV0dXJuIChh
cm1fZ2ljX25leHRfaXJxKGdpY19zYywgbGFzdF9pcnEpKTsKIH0KIAogdm9pZApAQCAtNDkxLDcg
KzEwNDAsNyBAQAogYXJtX2luaXRfc2Vjb25kYXJ5X2ljKHZvaWQpCiB7CiAKLQlhcm1fZ2ljX2lu
aXRfc2Vjb25kYXJ5KGFybV9naWNfc2MtPmdpY19kZXYpOworCWFybV9naWNfaW5pdF9zZWNvbmRh
cnkoZ2ljX3NjLT5naWNfZGV2KTsKIH0KIAogI2lmZGVmIFNNUApAQCAtNDk5LDcgKzEwNDgsNyBA
QAogcGljX2lwaV9zZW5kKGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSkKIHsKIAotCWFybV9naWNf
aXBpX3NlbmQoYXJtX2dpY19zYy0+Z2ljX2RldiwgY3B1cywgaXBpKTsKKwlhcm1fZ2ljX2lwaV9z
ZW5kKGdpY19zYy0+Z2ljX2RldiwgY3B1cywgaXBpKTsKIH0KIAogaW50CkBAIC01MDYsNyArMTA1
NSw3IEBACiBwaWNfaXBpX3JlYWQoaW50IGkpCiB7CiAKLQlyZXR1cm4gKGFybV9naWNfaXBpX3Jl
YWQoYXJtX2dpY19zYy0+Z2ljX2RldiwgaSkpOworCXJldHVybiAoYXJtX2dpY19pcGlfcmVhZChn
aWNfc2MtPmdpY19kZXYsIGkpKTsKIH0KIAogdm9pZApAQCAtNTEzLDE0ICsxMDYyLDMyIEBACiBw
aWNfaXBpX2NsZWFyKGludCBpcGkpCiB7CiAKLQlhcm1fZ2ljX2lwaV9jbGVhcihhcm1fZ2ljX3Nj
LT5naWNfZGV2LCBpcGkpOworCWFybV9naWNfaXBpX2NsZWFyKGdpY19zYy0+Z2ljX2RldiwgaXBp
KTsKIH0KICNlbmRpZgorI2VuZGlmIC8qIEFSTV9JTlRSTkcgKi8KIAogc3RhdGljIGRldmljZV9t
ZXRob2RfdCBhcm1fZ2ljX21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNlICovCiAJ
REVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWFybV9naWNfcHJvYmUpLAogCURFVk1FVEhPRChkZXZp
Y2VfYXR0YWNoLAlhcm1fZ2ljX2F0dGFjaCksCisjaWZkZWYgQVJNX0lOVFJORworCS8qIEludGVy
cnVwdCBjb250cm9sbGVyIGludGVyZmFjZSAqLworCURFVk1FVEhPRChwaWNfZGlzYWJsZV9pbnRy
LAlhcm1fZ2ljX2Rpc2FibGVfaW50ciksCisJREVWTUVUSE9EKHBpY19kaXNhYmxlX3NvdXJjZSwJ
YXJtX2dpY19kaXNhYmxlX3NvdXJjZSksCisJREVWTUVUSE9EKHBpY19lbmFibGVfaW50ciwJYXJt
X2dpY19lbmFibGVfaW50ciksCisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAlhcm1fZ2lj
X2VuYWJsZV9zb3VyY2UpLAorCURFVk1FVEhPRChwaWNfcG9zdF9maWx0ZXIsCWFybV9naWNfcG9z
dF9maWx0ZXIpLAorCURFVk1FVEhPRChwaWNfcG9zdF9pdGhyZWFkLAlhcm1fZ2ljX3Bvc3RfaXRo
cmVhZCksCisJREVWTUVUSE9EKHBpY19wcmVfaXRocmVhZCwJYXJtX2dpY19wcmVfaXRocmVhZCks
CisJREVWTUVUSE9EKHBpY19yZWdpc3RlciwJCWFybV9naWNfcmVnaXN0ZXIpLAorCURFVk1FVEhP
RChwaWNfdW5yZWdpc3RlciwJYXJtX2dpY191bnJlZ2lzdGVyKSwKKyNpZmRlZiBTTVAKKwlERVZN
RVRIT0QocGljX2JpbmQsCQlhcm1fZ2ljX2JpbmQpLAorCURFVk1FVEhPRChwaWNfaW5pdF9zZWNv
bmRhcnksCWFybV9naWNfaW5pdF9zZWNvbmRhcnkpLAorCURFVk1FVEhPRChwaWNfaXBpX3NlbmQs
CQlhcm1fZ2ljX2lwaV9zZW5kKSwKKyNlbmRpZgorI2VuZGlmCiAJeyAwLCAwIH0KIH07CiAKSW5k
ZXg6IHN5cy9hcm0vY29uZi9QQU5EQUJPQVJECj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vY29uZi9Q
QU5EQUJPQVJECShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2NvbmYvUEFOREFCT0FSRAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogbWFrZW9wdGlvbnMJTU9EVUxFU19PVkVS
UklERT0iIgogbWFrZW9wdGlvbnMJV0lUSE9VVF9NT0RVTEVTPSJhaGMiCiAKK29wdGlvbnMJCUFS
TV9JTlRSTkcJCSMgbmV3IGludGVycnVwdCBmcmFtZXdvcmsKKwogb3B0aW9ucyAJSFo9MTAwCiBv
cHRpb25zIAlTQ0hFRF9VTEUJCSMgVUxFIHNjaGVkdWxlcgogb3B0aW9ucyAJUFJFRU1QVElPTgkJ
IyBFbmFibGUga2VybmVsIHRocmVhZCBwcmVlbXB0aW9uCkluZGV4OiBzeXMvYXJtL3RpL29tYXA0
L29tYXA0X21wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS90aS9vbWFwNC9vbWFwNF9tcC5jCShy
ZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL3RpL29tYXA0L29tYXA0X21wLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDggQEAKIHZvaWQKIHBsYXRmb3JtX21wX2luaXRfc2Vjb25kYXJ5
KHZvaWQpCiB7Ci0JYXJtX2luaXRfc2Vjb25kYXJ5X2ljKCk7CisKKwlhcm1fcGljX2luaXRfc2Vj
b25kYXJ5KCk7CiB9CiAKIHZvaWQKSW5kZXg6IHN5cy9hcm0vdGkvb21hcDQvc3RkLm9tYXA0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHN5cy9hcm0vdGkvb21hcDQvc3RkLm9tYXA0CShyZXZpc2lvbiAyNzk2ODUp
CisrKyBzeXMvYXJtL3RpL29tYXA0L3N0ZC5vbWFwNAkod29ya2luZyBjb3B5KQpAQCAtMTcsNyAr
MTcsMyBAQAogb3B0aW9ucwkJU09DX09NQVA0CiAKIG9wdGlvbnMJCUFSTV9MMl9QSVBUCi0KLW9w
dGlvbnMJCUlQSV9JUlFfU1RBUlQ9MAotb3B0aW9ucwkJSVBJX0lSUV9FTkQ9MTUKLQo=
--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=US-ASCII; name="intrng_aintc_01.diff"
Content-Disposition: attachment; filename="intrng_aintc_01.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i6xu3yn25

SW5kZXg6IHN5cy9hcm0vY29uZi9CRUFHTEVCT05FCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vY29u
Zi9CRUFHTEVCT05FCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL2NvbmYvQkVBR0xFQk9O
RQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogbWFrZW9wdGlvbnMgICAgICAgICBX
SVRIX0NURj0xCiBtYWtlb3B0aW9ucyAgICAgTU9EVUxFU19PVkVSUklERT0ib3BlbnNvbGFyaXMg
ZHRyYWNlIGR0cmFjZS9sb2Nrc3RhdCBkdHJhY2UvcHJvZmlsZSBkdHJhY2UvZmJ0IgoKK29wdGlv
bnMJCUFSTV9JTlRSTkcKKwogb3B0aW9ucyAJSFo9MTAwCiBvcHRpb25zIAlTQ0hFRF80QlNECQkj
IDRCU0Qgc2NoZWR1bGVyCiBvcHRpb25zIAlQUkVFTVBUSU9OCQkjIEVuYWJsZSBrZXJuZWwgdGhy
ZWFkIHByZWVtcHRpb24KSW5kZXg6IHN5cy9hcm0vdGkvYWludGMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
eXMvYXJtL3RpL2FpbnRjLmMJKHJldmlzaW9uIDI3OTY4NSkKKysrIHN5cy9hcm0vdGkvYWludGMu
Ywkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDExIEBACiAgKiBTVUNIIERBTUFHRS4KICAq
LwoKLQogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVlQlNEJCIpOwoKKyNp
bmNsdWRlICJvcHRfcGxhdGZvcm0uaCIKKwogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1
ZGUgPHN5cy9zeXN0bS5oPgogI2luY2x1ZGUgPHN5cy9idXMuaD4KQEAgLTQ1LDYgKzQ2LDEwIEBA
CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVz
X3N1YnIuaD4KCisjaWZkZWYgQVJNX0lOVFJORworI2luY2x1ZGUgInBpY19pZi5oIgorI2VuZGlm
CisKICNkZWZpbmUgSU5UQ19SRVZJU0lPTgkJMHgwMAogI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkJ
MHgxMAogI2RlZmluZSBJTlRDX1NZU1NUQVRVUwkJMHgxNApAQCAtNTYsOCArNjEsMTcgQEAKICNk
ZWZpbmUgSU5UQ19JU1JfU0VUKHgpCQkoMHg5MCArICgoeCkgKiAweDIwKSkKICNkZWZpbmUgSU5U
Q19JU1JfQ0xFQVIoeCkJKDB4OTQgKyAoKHgpICogMHgyMCkpCgorI2lmZGVmIEFSTV9JTlRSTkcK
K3N0YXRpYyBpbnQgdGlfYWludGNfaW50cih2b2lkICosIHN0cnVjdCB0cmFwZnJhbWUgKik7Cisj
ZW5kaWYKKwogc3RydWN0IHRpX2FpbnRjX3NvZnRjIHsKLQlkZXZpY2VfdAkJc2NfZGV2OworCWRl
dmljZV90CQlhaW50Y19kZXY7CisjaWZkZWYgQVJNX0lOVFJORworCXN0cnVjdCBhcm1faXJxc3Jj
ICoqCWFpbnRjX2lycXM7CisJdWludDMyX3QJCWFpbnRjX25pcnFzOworCXZvaWQgKgkJCWFpbnRj
X2ludHJoYW5kOworI2VuZGlmCiAJc3RydWN0IHJlc291cmNlICoJYWludGNfcmVzWzNdOwogCWJ1
c19zcGFjZV90YWdfdAkJYWludGNfYnN0OwogCWJ1c19zcGFjZV9oYW5kbGVfdAlhaW50Y19ic2g7
CkBAIC02NiwxMCArODAsMTIgQEAKCiBzdGF0aWMgc3RydWN0IHJlc291cmNlX3NwZWMgdGlfYWlu
dGNfc3BlY1tdID0gewogCXsgU1lTX1JFU19NRU1PUlksCTAsCVJGX0FDVElWRSB9LAorI2lmZGVm
IEFSTV9JTlRSTkcKKwl7IFNZU19SRVNfSVJRLAkgIDAsIFJGX0FDVElWRSB8IFJGX09QVElPTkFM
IH0sIC8qIFBhcmVudCBpbnRlcnJ1cHQgKi8KKyNlbmRpZgogCXsgLTEsIDAgfQogfTsKCi0KIHN0
YXRpYyBzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnRpX2FpbnRjX3NjID0gTlVMTDsKCiAjZGVmaW5l
CWFpbnRjX3JlYWRfNChfc2MsIHJlZykJCVwKQEAgLTc3LDggKzkzLDIxNyBAQAogI2RlZmluZQlh
aW50Y193cml0ZV80KF9zYywgcmVnLCB2YWwpCQlcCiAgICAgYnVzX3NwYWNlX3dyaXRlXzQoKF9z
YyktPmFpbnRjX2JzdCwgKF9zYyktPmFpbnRjX2JzaCwgKHJlZyksICh2YWwpKQoKKyNpZmRlZiBB
Uk1fSU5UUk5HCitzdGF0aWMgaW5saW5lIHZvaWQKK3RpX2FpbnRjX2lycV9lb2koc3RydWN0IHRp
X2FpbnRjX3NvZnRjICpzYykKK3sKCisJYWludGNfd3JpdGVfNChzYywgSU5UQ19DT05UUk9MLCAx
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aV9haW50Y19pcnFfbWFzayhzdHJ1Y3QgdGlf
YWludGNfc29mdGMgKnNjLCB1X2ludCBpcnEpCit7CisKKwlhaW50Y193cml0ZV80KHNjLCBJTlRD
X01JUl9TRVQoaXJxID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFGKSkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQKK3RpX2FpbnRjX2lycV91bm1hc2soc3RydWN0IHRpX2FpbnRjX3NvZnRjICpz
YywgdV9pbnQgaXJxKQoreworCisJYWludGNfd3JpdGVfNChzYywgSU5UQ19NSVJfQ0xFQVIoaXJx
ID4+IDUpLCAoMVVMIDw8IChpcnEgJiAweDFGKSkpOworfQorCiBzdGF0aWMgaW50Cit0aV9haW50
Y19pbnRyKHZvaWQgKmFyZywgc3RydWN0IHRyYXBmcmFtZSAqdGYpCit7CisJc3RydWN0IHRpX2Fp
bnRjX3NvZnRjICpzYyA9IGFyZzsKKwlzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYzsKKwl1aW50MzJf
dCBhY3RpdmVfaXJxLCBsYXN0X2lycTsKKworCS8qIEdldCBhY3RpdmUgaW50ZXJydXB0ICovCisJ
YWN0aXZlX2lycSA9IGFpbnRjX3JlYWRfNChzYywgSU5UQ19TSVJfSVJRKTsKKworCS8qIENoZWNr
IGZvciBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KKwlpZiAoKGFjdGl2ZV9pcnEgJiAweGZmZmZmZjgw
KSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5haW50Y19kZXYsCisJCSAgICAiU3B1cmlvdXMgaW50
ZXJydXB0IGRldGVjdGVkICgweCUwOHgpXG4iLCBhY3RpdmVfaXJxKTsKKwkJYWludGNfd3JpdGVf
NChzYywgSU5UQ19TSVJfSVJRLCAwKTsgLyogUVFRICovCisJCXJldHVybiAoRklMVEVSX0hBTkRM
RUQpOworCX0KKworZGlzcGF0Y2hfaXJxOgorCS8qIENoZWNrIGZvciByZWdpc3RlcmVkIHNvdXJj
ZSAqLworCWlzcmMgPSBzYy0+YWludGNfaXJxc1thY3RpdmVfaXJxXTsKKwlpZiAoaXNyYyA9PSBO
VUxMKSB7CisJCWRldmljZV9wcmludGYoc2MtPmFpbnRjX2RldiwgIlN0cmF5IGludGVycnVwdCAl
dSBkZXRlY3RlZFxuIiwKKwkJICAgIGFjdGl2ZV9pcnEpOworCQl0aV9haW50Y19pcnFfbWFzayhz
YywgYWN0aXZlX2lycSk7CisJCXRpX2FpbnRjX2lycV9lb2koc2MpOworCQlnb3RvIG5leHRfaXJx
OworCX0KKworCS8qIE9ubHkgbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdHMgZGV0ZWN0aW9uIGlz
IHN1cHBvcnRlZC4gKi8KKwlhcm1faXJxX2Rpc3BhdGNoKGlzcmMsIHRmKTsKKworbmV4dF9pcnE6
CisJYXJtX2lycV9tZW1vcnlfYmFycmllcihhY3RpdmVfaXJxKTsgLyogWFhYICovCisJbGFzdF9p
cnEgPSBhY3RpdmVfaXJxOworCWFjdGl2ZV9pcnEgPSBhaW50Y19yZWFkXzQoc2MsIElOVENfU0lS
X0lSUSk7CisJaWYgKCgoYWN0aXZlX2lycSAmIDB4ZmZmZmZmODApID09IDApICYmIChsYXN0X2ly
cSAhPSBhY3RpdmVfaXJxKSkKKwkJZ290byBkaXNwYXRjaF9pcnE7CisKKwlyZXR1cm4gKEZJTFRF
Ul9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAordGlfYWludGNfYXR0YWNoX2lzcmMoc3RydWN0
IHRpX2FpbnRjX3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgdV9pbnQg
aXJxKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKgorCSAqIDEuIFRoZSBsaW5rIGJldHdl
ZW4gSVNSQyBhbmQgY29udHJvbGxlciBtdXN0IGJlIHNldCBhdG9taWNhbGx5LgorCSAqIDIuIEp1
c3QgZG8gdGhpbmdzIG9ubHkgb25jZSBpbiByYXJlIGNhc2Ugd2hlbiBjb25zdW1lcnMKKwkgKiAg
ICBvZiBzaGFyZWQgaW50ZXJydXB0IGNhbWUgaGVyZSBhdCB0aGUgc2FtZSBtb21lbnQuCisJICov
CisJaWYgKCFhdG9taWNfY21wc2V0X2FjcV9wdHIoKHZvaWQgKikmc2MtPmFpbnRjX2lycXNbaXJx
XSwgMCwKKwkgICAgKGludHB0cl90KWlzcmMpKQorCQlyZXR1cm4gKHNjLT5haW50Y19pcnFzW2ly
cV0gPT0gaXNyYyA/IDAgOiBFRVhJU1QpOworCWlzcmMtPmlzcmNfZGF0YSA9ICh2b2lkICopaXJx
OworCisJbmFtZSA9IGRldmljZV9nZXRfbmFtZXVuaXQoc2MtPmFpbnRjX2Rldik7CisJYXJtX2ly
cV9zZXRfbmFtZShpc3JjLCAiJXMscyV1IiwgbmFtZSwgaXJxKTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50Cit0aV9haW50Y19kZXRhY2hfaXNyYyhzdHJ1Y3QgdGlfYWludGNfc29mdGMg
KnNjLCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywKKyAgICB1X2ludCBpcnEpCit7CisKKwlpZiAo
IWF0b21pY19jbXBzZXRfYWNxX3B0cigodm9pZCAqKSZzYy0+YWludGNfaXJxc1tpcnFdLAorCSAg
ICAoaW50cHRyX3QpaXNyYywgMCkpCisJCXJldHVybiAoRUlOVkFMKTsKKwlpc3JjLT5pc3JjX2Rh
dGEgPSBOVUxMOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIGludAordGlfYWludGNfbWFwX25zcGMoc3RydWN0IHRpX2FpbnRjX3NvZnRj
ICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJdV9pbnQgaXJxOworCisJaWYgKGlz
cmMtPmlzcmNfbnNwY190eXBlICE9IEFSTV9JUlFfTlNQQ19QTEFJTiAmJgorCSAgICBpc3JjLT5p
c3JjX25zcGNfdHlwZSAhPSBBUk1fSVJRX05TUENfSVJRKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwlpcnEgPSBpc3JjLT5pc3JjX25zcGNfbnVtOworCWlmIChpcnEgPj0gc2MtPmFpbnRjX25pcnFz
KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKHRpX2FpbnRjX2F0dGFjaF9pc3JjKHNj
LCBpc3JjLCBpcnEpKTsKK30KKworI2lmZGVmIEZEVAorc3RhdGljIGludAordGlfYWludGNfbWFw
X2ZkdChzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNjLCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykK
K3sKKwl1X2ludCBpcnE7CisJaW50IGVycm9yOworCisJaWYgKGlzcmMtPmlzcmNfbmNlbGxzICE9
IDEpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlycSA9IGlzcmMtPmlzcmNfY2VsbHNbMF07CisJ
aWYgKGlycSA+PSBzYy0+YWludGNfbmlycXMpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWVycm9y
ID0gdGlfYWludGNfYXR0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSk7CisJaWYgKGVycm9yICE9IDAp
CisJCXJldHVybiAoZXJyb3IpOworCisJaXNyYy0+aXNyY19uc3BjX3R5cGUgPSBBUk1fSVJRX05T
UENfUExBSU47CisJaXNyYy0+aXNyY19uc3BjX251bSA9IGlycTsKKwlyZXR1cm4gKDApOworfQor
I2VuZGlmCisKK3N0YXRpYyBpbnQKK3RpX2FpbnRjX3JlZ2lzdGVyKGRldmljZV90IGRldiwgc3Ry
dWN0IGFybV9pcnFzcmMgKmlzcmMsIGJvb2xlYW5fdCAqaXNfcGVyY3B1KQoreworCXN0cnVjdCB0
aV9haW50Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwkqaXNfcGVyY3B1
ID0gRkFMU0U7CisKKwlpZiAoaXNyYy0+aXNyY190eXBlID09IEFSTV9JU1JDVF9OQU1FU1BBQ0Up
CisJCXJldHVybiAodGlfYWludGNfbWFwX25zcGMoc2MsIGlzcmMpKTsKKyNpZmRlZiBGRFQKKwll
bHNlIGlmIChpc3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX0ZEVCkKKwkJcmV0dXJuICh0aV9h
aW50Y19tYXBfZmR0KHNjLCBpc3JjKSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiAoRUlOVkFM
KTsKK30KKworc3RhdGljIHZvaWQKK3RpX2FpbnRjX2VuYWJsZV9zb3VyY2UoZGV2aWNlX3QgZGV2
LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNj
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3Jj
X2RhdGE7CisKKwlhcm1faXJxX21lbW9yeV9iYXJyaWVyKGlycSk7CisJdGlfYWludGNfaXJxX3Vu
bWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK3RpX2FpbnRjX2Rpc2FibGVfc291cmNl
KGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2Fp
bnRjX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9p
bnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfYWludGNfaXJxX21hc2soc2MsIGlycSk7Cit9CisK
K3N0YXRpYyBpbnQKK3RpX2FpbnRjX3VucmVnaXN0ZXIoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJt
X2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfYWludGNfc29mdGMgKnNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CisKKwly
ZXR1cm4gKHRpX2FpbnRjX2RldGFjaF9pc3JjKHNjLCBpc3JjLCBpcnEpKTsKK30KKworc3RhdGlj
IHZvaWQKK3RpX2FpbnRjX3ByZV9pdGhyZWFkKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFz
cmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2FpbnRjX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKwl1X2ludCBpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfYWlu
dGNfaXJxX21hc2soc2MsIGlycSk7CisJdGlfYWludGNfaXJxX2VvaShzYyk7Cit9CisKK3N0YXRp
YyB2b2lkCit0aV9haW50Y19wb3N0X2l0aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2ly
cXNyYyAqaXNyYykKK3sKKworCXRpX2FpbnRjX2VuYWJsZV9zb3VyY2UoZGV2LCBpc3JjKTsKK30K
Kworc3RhdGljIHZvaWQKK3RpX2FpbnRjX3Bvc3RfZmlsdGVyKGRldmljZV90IGRldiwgc3RydWN0
IGFybV9pcnFzcmMgKmlzcmMpCit7CisJc3RydWN0IHRpX2FpbnRjX3NvZnRjICpzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsKKworCXRpX2FpbnRjX2lycV9lb2koc2MpOworfQorI2VuZGlmCisK
K3N0YXRpYyBpbnQKIHRpX2FpbnRjX3Byb2JlKGRldmljZV90IGRldikKIHsKIAlpZiAoIW9md19i
dXNfc3RhdHVzX29rYXkoZGV2KSkKQEAgLTkxLDEzICszMTYsMjYgQEAKIAlyZXR1cm4gKEJVU19Q
Uk9CRV9ERUZBVUxUKTsKIH0KCitzdGF0aWMgaW5saW5lIGludHB0cl90Cit0aV9haW50Y194cmVm
KGRldmljZV90IGRldikKK3sKKyNpZmRlZiBGRFQKKwlyZXR1cm4gKE9GX3hyZWZfZnJvbV9ub2Rl
KG9md19idXNfZ2V0X25vZGUoZGV2KSkpOworI2Vsc2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9
CisKIHN0YXRpYyBpbnQKIHRpX2FpbnRjX2F0dGFjaChkZXZpY2VfdCBkZXYpCiB7CiAJc3RydWN0
CQl0aV9haW50Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAJdWludDMyX3Qg
eDsKKyNpZmRlZiBBUk1fSU5UUk5HCisJaW50cHRyX3QJeHJlZiA9IHRpX2FpbnRjX3hyZWYoZGV2
KTsKKyNlbmRpZgoKLQlzYy0+c2NfZGV2ID0gZGV2OworCXNjLT5haW50Y19kZXYgPSBkZXY7Cgog
CWlmICh0aV9haW50Y19zYykKIAkJcmV0dXJuIChFTlhJTyk7CkBAIC0xMTAsNiArMzQ4LDExIEBA
CiAJc2MtPmFpbnRjX2JzdCA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+YWludGNfcmVzWzBdKTsKIAlz
Yy0+YWludGNfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5haW50Y19yZXNbMF0pOwoKKyNp
ZmRlZiBBUk1fSU5UUk5HCisJc2MtPmFpbnRjX25pcnFzID0gMTI4OworCXNjLT5haW50Y19pcnFz
ID0gbWFsbG9jKHNjLT5haW50Y19uaXJxcyAqIHNpemVvZiAoKnNjLT5haW50Y19pcnFzKSwKKwkg
ICAgTV9ERVZCVUYsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKyNlbmRpZgogCXRpX2FpbnRjX3NjID0g
c2M7CgogCXggPSBhaW50Y19yZWFkXzQoc2MsIElOVENfUkVWSVNJT04pOwpAQCAtMTI0LDEyICsz
NjcsNjAgQEAKIAkvKlNldCBQcmlvcml0eSBUaHJlc2hvbGQgKi8KIAlhaW50Y193cml0ZV80KHNj
LCBJTlRDX1RIUkVTSE9MRCwgMHhGRik7CgorI2lmbmRlZiBBUk1fSU5UUk5HCiAJcmV0dXJuICgw
KTsKKyNlbHNlCisJLyoKKwkgKiBOb3csIHdoZW4gZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwg
aXQncyByaWdodCB0aW1lIHRvCisJICogcmVnaXN0ZXIgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8g
aW50ZXJydXB0IGZyYW1lZm9yay4KKwkgKi8KKwlpZiAoYXJtX3BpY19yZWdpc3RlcihkZXYsIHhy
ZWYpICE9IDApIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgUElD
XG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChzYy0+YWludGNfcmVzWzFdID09IE5V
TEwpIHsKKwkJaWYgKGFybV9waWNfY2xhaW1fcm9vdChkZXYsIHhyZWYsIHRpX2FpbnRjX2ludHIs
IHNjLCAwKSAhPSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXQgUElD
IGFzIGEgcm9vdFxuIik7CisJCQlhcm1fcGljX3VucmVnaXN0ZXIoZGV2LCB4cmVmKTsKKwkJCWdv
dG8gY2xlYW51cDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNj
LT5haW50Y19yZXNbMV0sIElOVFJfVFlQRV9NSVNDIHwKKwkJICAgIElOVFJfU09MTywgKHZvaWQq
KXRpX2FpbnRjX2ludHIsIE5VTEwsIHNjLAorCQkgICAgJnNjLT5haW50Y19pbnRyaGFuZCkpIHsK
KwkJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldHVwIGlycSBoYW5kbGVyXG4iKTsK
KwkJCWFybV9waWNfdW5yZWdpc3RlcihkZXYsIHhyZWYpOworCQkJZ290byBjbGVhbnVwOworCQl9
CisJfQorCisJcmV0dXJuICgwKTsKKworY2xlYW51cDoKKwkvKgorCSAqIFhYWCAtIG5vdCBpbXBs
ZW1lbnRlZCB0aV9haW50Y19kZXRhY2goKSBzaG91bGQgYmUgY2FsbGVkICEKKwkgKi8KKwlpZiAo
c2MtPmFpbnRjX2lycXMgIT0gTlVMTCkKKwkJZnJlZShzYy0+YWludGNfaXJxcywgTV9ERVZCVUYp
OworCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHRpX2FpbnRjX3NwZWMsIHNjLT5haW50Y19y
ZXMpOworCXJldHVybihFTlhJTyk7CisjZW5kaWYKIH0KCiBzdGF0aWMgZGV2aWNlX21ldGhvZF90
IHRpX2FpbnRjX21ldGhvZHNbXSA9IHsKIAlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJdGlfYWlu
dGNfcHJvYmUpLAogCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl0aV9haW50Y19hdHRhY2gpLAor
I2lmZGVmIEFSTV9JTlRSTkcKKwkvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBpbnRlcmZhY2UgKi8K
KwlERVZNRVRIT0QocGljX2Rpc2FibGVfc291cmNlLAl0aV9haW50Y19kaXNhYmxlX3NvdXJjZSks
CisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAl0aV9haW50Y19lbmFibGVfc291cmNlKSwK
KwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAl0aV9haW50Y19wb3N0X2ZpbHRlciksCisJREVW
TUVUSE9EKHBpY19wb3N0X2l0aHJlYWQsCXRpX2FpbnRjX3Bvc3RfaXRocmVhZCksCisJREVWTUVU
SE9EKHBpY19wcmVfaXRocmVhZCwJdGlfYWludGNfcHJlX2l0aHJlYWQpLAorCURFVk1FVEhPRChw
aWNfcmVnaXN0ZXIsCQl0aV9haW50Y19yZWdpc3RlciksCisJREVWTUVUSE9EKHBpY191bnJlZ2lz
dGVyLAl0aV9haW50Y191bnJlZ2lzdGVyKSwKKyNlbmRpZgogCXsgMCwgMCB9CiB9OwoKQEAgLTE0
Myw2ICs0MzQsNyBAQAoKIERSSVZFUl9NT0RVTEUoYWludGMsIHNpbXBsZWJ1cywgdGlfYWludGNf
ZHJpdmVyLCB0aV9haW50Y19kZXZjbGFzcywgMCwgMCk7CgorI2lmbmRlZiBBUk1fSU5UUk5HCiBp
bnQKIGFybV9nZXRfbmV4dF9pcnEoaW50IGxhc3RfaXJxKQogewpAQCAtMTYwLDcgKzQ1Miw3IEBA
CgogCS8qIENoZWNrIGZvciBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KIAlpZiAoKGFjdGl2ZV9pcnEg
JiAweGZmZmZmZjgwKSkgewotCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsCisJCWRldmljZV9w
cmludGYoc2MtPmFpbnRjX2RldiwKIAkJICAgICJTcHVyaW91cyBpbnRlcnJ1cHQgZGV0ZWN0ZWQg
KDB4JTA4eClcbiIsIGFjdGl2ZV9pcnEpOwogCQlhaW50Y193cml0ZV80KHNjLCBJTlRDX1NJUl9J
UlEsIDApOwogCQlyZXR1cm4gLTE7CkBAIC0xODgsMyArNDgwLDQgQEAKIAlhcm1faXJxX21lbW9y
eV9iYXJyaWVyKG5iKTsKIAlhaW50Y193cml0ZV80KHNjLCBJTlRDX01JUl9DTEVBUihuYiA+PiA1
KSwgKDFVTCA8PCAobmIgJiAweDFGKSkpOwogfQorI2VuZGlmCg==
--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=US-ASCII; name="intrng_ti_gpio_panda_bbb_01.diff"
Content-Disposition: attachment; filename="intrng_ti_gpio_panda_bbb_01.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i6xu4d896

SW5kZXg6IHN5cy9hcm0vdGkvdGlfZ3Bpby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vdGkvdGlf
Z3Bpby5jCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYXJtL3RpL3RpX2dwaW8uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNE
SUQoIiRGcmVlQlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRl
IDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVz
Lmg+CkBAIC00Nyw2ICs0OSw3IEBACiAKICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1
ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KIAogI2lu
Y2x1ZGUgPGFybS90aS90aV9jcHVpZC5oPgogI2luY2x1ZGUgPGFybS90aS90aV9ncGlvLmg+CkBA
IC01OSw2ICs2Miw3IEBACiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8
ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KIAorI2luY2x1ZGUgInBpY19pZi5oIgogI2luY2x1ZGUg
ImdwaW9faWYuaCIKICNpbmNsdWRlICJ0aV9ncGlvX2lmLmgiCiAKQEAgLTEzMyw2ICsxMzcsMjIg
QEAKIH0KIAogc3RhdGljIHVfaW50Cit0aV9pbnRyX3Blcl9iYW5rKHZvaWQpCit7CisJc3dpdGNo
KHRpX2NoaXAoKSkgeworI2lmZGVmIFNPQ19PTUFQNAorCWNhc2UgQ0hJUF9PTUFQXzQ6CisJCXJl
dHVybiAoT01BUDRfSU5UUl9QRVJfQkFOSyk7CisjZW5kaWYKKyNpZmRlZiBTT0NfVElfQU0zMzVY
CisJY2FzZSBDSElQX0FNMzM1WDoKKwkJcmV0dXJuIChBTTMzNVhfSU5UUl9QRVJfQkFOSyk7Cisj
ZW5kaWYKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVfaW50CiB0aV9tYXhfZ3Bpb19p
bnRycyh2b2lkKQogewogCXN3aXRjaCh0aV9jaGlwKCkpIHsKQEAgLTI2Nyw2ICsyODcsMjggQEAK
IH0KIAogc3RhdGljIGlubGluZSB2b2lkCit0aV9ncGlvX2NmZ19pbnRyX3NldChzdHJ1Y3QgdGlf
Z3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1aW50MzJfdCByZWcsCisgICAgdWlu
dDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSB0aV9ncGlvX3JlYWRfNChz
YywgYmFuaywgcmVnKTsKKwl2YWwgfD0gbWFzazsKKwl0aV9ncGlvX3dyaXRlXzQoc2MsIGJhbmss
IHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aV9ncGlvX2NmZ19pbnRyX2Ns
cihzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1aW50MzJfdCBy
ZWcsCisgICAgdWludDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSB0aV9n
cGlvX3JlYWRfNChzYywgYmFuaywgcmVnKTsKKwl2YWwgJj0gfm1hc2s7CisJdGlfZ3Bpb193cml0
ZV80KHNjLCBiYW5rLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAogdGlfZ3Bp
b19pbnRyX2NscihzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBiYW5rLCB1
aW50MzJfdCBtYXNrKQogewogCkBAIC00OTYsNyArNTM4LDcgQEAKIAkJb2UgJj0gflRJX0dQSU9f
TUFTSyhwaW4pOwogCXRpX2dwaW9fd3JpdGVfNChzYywgVElfR1BJT19CQU5LKHBpbiksIFRJX0dQ
SU9fT0UsIG9lKTsKIAlUSV9HUElPX1VOTE9DSyhzYyk7Ci0JCisKIAlyZXR1cm4gKDApOwogfQog
CkBAIC01NjEsNyArNjAzLDcgQEAKIAkJcmV0dXJuIChFSU5WQUwpOwogCiAJLyoKLQkgKiBSZXR1
cm4gZGF0YSBmcm9tIG91dHB1dCBsYXRjaCB3aGVuIHNldCBhcyBvdXRwdXQgYW5kIGZyb20gdGhl
IAorCSAqIFJldHVybiBkYXRhIGZyb20gb3V0cHV0IGxhdGNoIHdoZW4gc2V0IGFzIG91dHB1dCBh
bmQgZnJvbSB0aGUKIAkgKiBpbnB1dCByZWdpc3RlciBvdGhlcndpc2UuCiAJICovCiAJVElfR1BJ
T19MT0NLKHNjKTsKQEAgLTYyMSwzNCArNjYzLDUyIEBACiAgKgogICovCiBzdGF0aWMgaW50Ci10
aV9ncGlvX2ludHIodm9pZCAqYXJnKQordGlfZ3Bpb19pbnRyKHZvaWQgKmFyZywgIHN0cnVjdCB0
cmFwZnJhbWUgKnRmKQogewotCWludCBiYW5rX2xhc3QsIGlycTsKLQlzdHJ1Y3QgaW50cl9ldmVu
dCAqZXZlbnQ7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXVpbnQzMl90IHJlZzsKKwlz
dHJ1Y3QgdGlfZ3Bpb19pcnFfYXJnICppYSA9IGFyZzsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAq
c2MgPSBpYS0+aWFfc2M7CisJdV9pbnQgcmVnLCBiaXQsIGlycSwgbWFzazsKKwlzdHJ1Y3QgYXJt
X2lycXNyYyAqaXNyYzsKIAotCXNjID0gKHN0cnVjdCB0aV9ncGlvX3NvZnRjICopYXJnOwotCWJh
bmtfbGFzdCA9IC0xOwotCXJlZyA9IDA7IC8qIHNxdWVsY2ggYm9ndXMgZ2NjIHdhcm5pbmcgKi8K
LQlmb3IgKGlycSA9IDA7IGlycSA8IHNjLT5zY19tYXhwaW47IGlycSsrKSB7CisJcmVnID0gdGlf
Z3Bpb19pbnRyX3N0YXR1cyhzYywgaWEtPmlhX2JhbmspOworCWlmIChyZWcgPT0gMCkgeworCQkv
KgorCQkgKiBJdCBjb3VsZCBoYXBwZW4gZXNwZWNpYWxseSBmb3IgYWN0aXZlIGhpZ2ggaW50ZXJy
dXB0cworCQkgKiB3aGljaCBjb3VsZCBkcm9wIGxldmVsIGJlZm9yZSBzdGF0dXMgaXMgcmVhZCBo
ZXJlLgorCQkgKiBJbiBvdGhlciB3b3JkcywgaXQncyBHUElPIGFuZCBpbnRlcnJ1cHQgc291cmNl
cyBjb3VsZCBiZQorCQkgKiB2ZXJ5IGlycmVndWxhciBsaWtlIGh1bWFuIGRyaXZlbiBpbnRlcmZh
Y2UuCisJCSAqLworCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJTcHVyaW91cyBpbnRlcnJ1
cHQgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKKwl9CiAKLQkJLyog
UmVhZCBpbnRlcnJ1cHQgc3RhdHVzIG9ubHkgb25jZSBmb3IgZWFjaCBiYW5rLiAqLwotCQlpZiAo
VElfR1BJT19CQU5LKGlycSkgIT0gYmFua19sYXN0KSB7Ci0JCQlyZWcgPSB0aV9ncGlvX2ludHJf
c3RhdHVzKHNjLCBUSV9HUElPX0JBTksoaXJxKSk7Ci0JCQliYW5rX2xhc3QgPSBUSV9HUElPX0JB
TksoaXJxKTsKK2Rpc3BhdGNoX2lycToKKwlkbyB7CisJCWJpdCA9IGZmcyhyZWcpIC0gMTsKKwkJ
bWFzayA9ICgxIDw8IGJpdCk7CisKKwkJaXJxID0gaWEtPmlhX2JhbmsgKiBQSU5TX1BFUl9CQU5L
ICsgYml0OworCisJCS8qIENoZWNrIGZvciByZWdpc3RlcmVkIHNvdXJjZSAqLworCQlpc3JjID0g
c2MtPnNjX2lycXNbaXJxXTsKKwkJaWYgKGlzcmMgIT0gTlVMTCkgeworCQkJaWYgKGlzcmMtPmlz
cmNfdHJpZyAhPSBJTlRSX1RSSUdHRVJfTEVWRUwpCisJCQkJIHRpX2dwaW9faW50cl9hY2soc2Ms
IGlhLT5pYV9iYW5rLCBtYXNrKTsKKwkJCWFybV9pcnFfZGlzcGF0Y2goaXNyYywgdGYpOworCQl9
IGVsc2UgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+c2NfZGV2LAorCQkJICAgICJTdHJheSBpbnRl
cnJ1cHQgJXUgZGV0ZWN0ZWRcbiIsIGlycSk7CisJCQl0aV9ncGlvX2ludHJfY2xyKHNjLCBpYS0+
aWFfYmFuaywgbWFzayk7CisJCQl0aV9ncGlvX2ludHJfYWNrKHNjLCBpYS0+aWFfYmFuaywgbWFz
ayk7CiAJCX0KLQkJaWYgKChyZWcgJiBUSV9HUElPX01BU0soaXJxKSkgPT0gMCkKLQkJCWNvbnRp
bnVlOwotCQlldmVudCA9IHNjLT5zY19ldmVudHNbaXJxXTsKLQkJaWYgKGV2ZW50ICE9IE5VTEwg
JiYgIVRBSUxRX0VNUFRZKCZldmVudC0+aWVfaGFuZGxlcnMpKQotCQkJaW50cl9ldmVudF9oYW5k
bGUoZXZlbnQsIE5VTEwpOwotCQllbHNlCi0JCQlkZXZpY2VfcHJpbnRmKHNjLT5zY19kZXYsICJT
dHJheSBJUlEgJWRcbiIsIGlycSk7Ci0JCS8qIEFjayB0aGUgSVJRIFN0YXR1cyBiaXQuICovCi0J
CXRpX2dwaW9faW50cl9hY2soc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBUSV9HUElPX01BU0soaXJx
KSk7Ci0JfQogCisJCXJlZyAmPSB+bWFzazsKKwl9IHdoaWxlIChyZWcgIT0gMCk7CisKKwlyZWcg
PSB0aV9ncGlvX2ludHJfc3RhdHVzKHNjLCBpYS0+aWFfYmFuayk7CisJaWYgKHJlZyAhPSAwKQor
CQlnb3RvIGRpc3BhdGNoX2lycTsKKwogCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOwogfQogCkBA
IC02NTUsMjAgKzcxNSwzMCBAQAogc3RhdGljIGludAogdGlfZ3Bpb19hdHRhY2hfaW50cihkZXZp
Y2VfdCBkZXYpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOworCXVfaW50
IGksIGJhbmssIGlkeDsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwkvKgorCSAqIFByZXBh
cmUgYXJndW1lbnRzIGZvciBvdXIgaW50ZXJydXB0IHJvdXRpbmVzLgorCSAqLworCWZvciAoaSA9
IDAsIGJhbmsgPSAwOyBiYW5rIDwgdGlfbWF4X2dwaW9fYmFua3MoKTsgYmFuaysrKSB7CisJCWZv
ciAoaWR4ID0gMDsgaWR4IDwgdGlfaW50cl9wZXJfYmFuaygpOyBpZHgrKywgaSsrKSB7CisJCQlz
Yy0+c2NfaXJxX2FyZ1tpXS5pYV9zYyA9IHNjOworCQkJc2MtPnNjX2lycV9hcmdbaV0uaWFfYmFu
ayA9IGJhbms7CisJCQlzYy0+c2NfaXJxX2FyZ1tpXS5pYV9pZHggPSBpZHg7CisJCX0KKwl9CisK
KwkvKgorCSAqIFJlZ2lzdGVyIG91ciBpbnRlcnJ1cHQgcm91dGluZSBmb3IgZWFjaCBvZiB0aGUg
SVJRIHJlc291cmNlcy4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdGlfbWF4X2dwaW9faW50cnMo
KTsgaSsrKSB7CiAJCWlmIChzYy0+c2NfaXJxX3Jlc1tpXSA9PSBOVUxMKQogCQkJYnJlYWs7CiAK
LQkJLyoKLQkJICogUmVnaXN0ZXIgb3VyIGludGVycnVwdCBmaWx0ZXIgZm9yIGVhY2ggb2YgdGhl
IElSUSByZXNvdXJjZXMuCi0JCSAqLwotCQlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+c2Nf
aXJxX3Jlc1tpXSwKLQkJICAgIElOVFJfVFlQRV9NSVNDIHwgSU5UUl9NUFNBRkUsIHRpX2dwaW9f
aW50ciwgTlVMTCwgc2MsCi0JCSAgICAmc2MtPnNjX2lycV9oZGxbaV0pICE9IDApIHsKKwkJaWYg
KGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX2lycV9yZXNbaV0sIElOVFJfVFlQRV9NSVNDIHwK
KwkJICAgIElOVFJfTVBTQUZFIHwgSU5UUl9TT0xPLCAodm9pZCAqKXRpX2dwaW9faW50ciwgTlVM
TCwKKwkJICAgICZzYy0+c2NfaXJxX2FyZ1tpXSwgJnNjLT5zY19pcnFfaGRsW2ldKSAhPSAwKSB7
CiAJCQlkZXZpY2VfcHJpbnRmKGRldiwKIAkJCSAgICAiV0FSTklORzogdW5hYmxlIHRvIHJlZ2lz
dGVyIGludGVycnVwdCBmaWx0ZXJcbiIpOwogCQkJcmV0dXJuICgtMSk7CkBAIC03NDAsNiArODEw
LDE2IEBACiAJcmV0dXJuICgwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnRwdHJfdAordGlfZ3Bp
b194cmVmKGRldmljZV90IGRldikKK3sKKyNpZmRlZiBGRFQKKwlyZXR1cm4gKE9GX3hyZWZfZnJv
bV9ub2RlKG9md19idXNfZ2V0X25vZGUoZGV2KSkpOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOwor
I2VuZGlmCit9CisKIC8qKgogICoJdGlfZ3Bpb19hdHRhY2ggLSBhdHRhY2ggZnVuY3Rpb24gZm9y
IHRoZSBkcml2ZXIKICAqCUBkZXY6IGdwaW8gZGV2aWNlIGhhbmRsZQpAQCAtNzg2LDM1ICs4NjYs
MTAgQEAKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCi0JLyogU2V0dXAgdGhlIElSUSByZXNvdXJj
ZXMgKi8KLQlpZiAodGlfZ3Bpb19hdHRhY2hfaW50cihkZXYpICE9IDApIHsKLQkJZGV2aWNlX3By
aW50ZihkZXYsICJFcnJvcjogY291bGQgbm90IHNldHVwIGlycSBoYW5kbGVyc1xuIik7Ci0JCXRp
X2dwaW9fZGV0YWNoKGRldik7Ci0JCXJldHVybiAoRU5YSU8pOwotCX0KLQotCS8qCi0JICogSW5p
dGlhbGl6ZSB0aGUgaW50ZXJydXB0IHNldHRpbmdzLiAgVGhlIGRlZmF1bHQgaXMgYWN0aXZlLWxv
dwotCSAqIGludGVycnVwdHMuCi0JICovCi0Jc2MtPnNjX2lycV90cmlnZ2VyID0gbWFsbG9jKAot
CSAgICBzaXplb2YoKnNjLT5zY19pcnFfdHJpZ2dlcikgKiBzYy0+c2NfbWF4cGluLAotCSAgICBN
X0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCXNjLT5zY19pcnFfcG9sYXJpdHkgPSBtYWxs
b2MoCi0JICAgIHNpemVvZigqc2MtPnNjX2lycV9wb2xhcml0eSkgKiBzYy0+c2NfbWF4cGluLAot
CSAgICBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCWZvciAoaSA9IDA7IGkgPCBzYy0+
c2NfbWF4cGluOyBpKyspIHsKLQkJc2MtPnNjX2lycV90cmlnZ2VyW2ldID0gSU5UUl9UUklHR0VS
X0xFVkVMOwotCQlzYy0+c2NfaXJxX3BvbGFyaXR5W2ldID0gSU5UUl9QT0xBUklUWV9MT1c7Ci0J
fQotCi0Jc2MtPnNjX2V2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGludHJfZXZlbnQgKikg
KiBzYy0+c2NfbWF4cGluLAotCSAgICBNX0RFVkJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOwotCiAJ
LyogV2UgbmVlZCB0byBnbyB0aHJvdWdoIGVhY2ggYmxvY2sgYW5kIGVuc3VyZSB0aGUgY2xvY2tz
IGFyZSBydW5uaW5nIGFuZAogCSAqIHRoZSBtb2R1bGUgaXMgZW5hYmxlZC4gIEl0IG1pZ2h0IGJl
IGJldHRlciB0byBkbyB0aGlzIG9ubHkgd2hlbiB0aGUKIAkgKiBwaW5zIGFyZSBjb25maWd1cmVk
IHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBsZXNzIHBvd2VyIHVzZWQgaWYgdGhlIEdQSU8KLQkgKiBw
aW5zIHdlcmVuJ3QgdXNlZCAuLi4gCisJICogcGlucyB3ZXJlbid0IHVzZWQgLi4uCiAJICovCiAJ
Zm9yIChpID0gMDsgaSA8IHRpX21heF9ncGlvX2JhbmtzKCk7IGkrKykgewogCQlpZiAoc2MtPnNj
X21lbV9yZXNbaV0gIT0gTlVMTCkgewpAQCAtODMyLDYgKzg4NywyNCBAQAogCQlyZXR1cm4gKEVO
WElPKTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHN0dWZmIGZvciBpbnRlcnJ1cHQgY29udHJvbGxl
ci4qLworCXNjLT5zY19pcnFzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXJtX2lycXNyYyAqKSAq
IHNjLT5zY19tYXhwaW4sCisJICAgIE1fREVWQlVGLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisKKwkv
KiBTZXR1cCB0aGUgSVJRIHJlc291cmNlcyAqLworCWlmICh0aV9ncGlvX2F0dGFjaF9pbnRyKGRl
dikgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkVycm9yOiBjb3VsZCBub3Qgc2V0dXAg
aXJxIGhhbmRsZXJzXG4iKTsKKwkJdGlfZ3Bpb19kZXRhY2goZGV2KTsKKwkJcmV0dXJuIChFTlhJ
Tyk7CisJfQorCisJLyogUmVnaXN0ZXIgdXMgYXMgaW50ZXJydXB0IGNvbnRyb2xsZXIuKi8KKwlp
ZiAoYXJtX3BpY19yZWdpc3RlcihkZXYsIHRpX2dwaW9feHJlZihkZXYpKSAhPSAwKSB7CisJCWRl
dmljZV9wcmludGYoZGV2LCAiRXJyb3I6IGNvdWxkIG5vdCByZWdpc3RlciBQSUNcbiIpOworCQl0
aV9ncGlvX2RldGFjaChkZXYpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKIAlyZXR1cm4gKDAp
OwogfQogCkBAIC04NjIsMTQgKzkzNSwxMiBAQAogCQkJdGlfZ3Bpb19pbnRyX2NscihzYywgaSwg
MHhmZmZmZmZmZik7CiAJfQogCWdwaW9idXNfZGV0YWNoX2J1cyhkZXYpOwotCWlmIChzYy0+c2Nf
ZXZlbnRzKQotCQlmcmVlKHNjLT5zY19ldmVudHMsIE1fREVWQlVGKTsKLQlpZiAoc2MtPnNjX2ly
cV9wb2xhcml0eSkKLQkJZnJlZShzYy0+c2NfaXJxX3BvbGFyaXR5LCBNX0RFVkJVRik7Ci0JaWYg
KHNjLT5zY19pcnFfdHJpZ2dlcikKLQkJZnJlZShzYy0+c2NfaXJxX3RyaWdnZXIsIE1fREVWQlVG
KTsKKwkvKiBDbGVhbiB1cCBpbnRlcnJ1cHQgY29udHJvbGxlciBzdHVmZi4gKi8KKwl0aV9ncGlv
X2RldGFjaF9pbnRyKGRldik7CisJYXJtX3BpY191bnJlZ2lzdGVyKGRldiwgdGlfZ3Bpb194cmVm
KGRldikpOworCWlmIChzYy0+c2NfaXJxcykKKwkJZnJlZShzYy0+c2NfaXJxcywgTV9ERVZCVUYp
OwogCS8qIFJlbGVhc2UgdGhlIG1lbW9yeSBhbmQgSVJRIHJlc291cmNlcy4gKi8KLQl0aV9ncGlv
X2RldGFjaF9pbnRyKGRldik7CiAJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwgdGlfZ3Bpb19p
cnFfc3BlYywgc2MtPnNjX2lycV9yZXMpOwogCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIHRp
X2dwaW9fbWVtX3NwZWMsIHNjLT5zY19tZW1fcmVzKTsKIAlUSV9HUElPX0xPQ0tfREVTVFJPWShz
Yyk7CkBAIC04NzcsMTkzICs5NDgsMzEwIEBACiAJcmV0dXJuICgwKTsKIH0KIAotc3RhdGljIHVp
bnQzMl90Ci10aV9ncGlvX2ludHJfcmVnKHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgaW50IGly
cSkKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK3RpX2dwaW9faXJxX2NvbmZpZ19yZWcoZW51bSBp
bnRyX3RyaWdnZXIgdHJpZywgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCkKIHsKIAotCWlmICh0aV9n
cGlvX3ZhbGlkX3BpbihzYywgaXJxKSAhPSAwKQotCQlyZXR1cm4gKDApOwotCi0JaWYgKHNjLT5z
Y19pcnFfdHJpZ2dlcltpcnFdID09IElOVFJfVFJJR0dFUl9MRVZFTCkgewotCQlpZiAoc2MtPnNj
X2lycV9wb2xhcml0eVtpcnFdID09IElOVFJfUE9MQVJJVFlfTE9XKQorCWlmICh0cmlnID09IElO
VFJfVFJJR0dFUl9MRVZFTCkgeworCQlpZiAocG9sID09IElOVFJfUE9MQVJJVFlfTE9XKQogCQkJ
cmV0dXJuIChUSV9HUElPX0xFVkVMREVURUNUMCk7Ci0JCWVsc2UgaWYgKHNjLT5zY19pcnFfcG9s
YXJpdHlbaXJxXSA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCisJCWVsc2UgaWYgKHBvbCA9PSBJTlRS
X1BPTEFSSVRZX0hJR0gpCiAJCQlyZXR1cm4gKFRJX0dQSU9fTEVWRUxERVRFQ1QxKTsKLQl9IGVs
c2UgaWYgKHNjLT5zY19pcnFfdHJpZ2dlcltpcnFdID09IElOVFJfVFJJR0dFUl9FREdFKSB7Ci0J
CWlmIChzYy0+c2NfaXJxX3BvbGFyaXR5W2lycV0gPT0gSU5UUl9QT0xBUklUWV9MT1cpCisJfSBl
bHNlIGlmICh0cmlnID09IElOVFJfVFJJR0dFUl9FREdFKSB7CisJCWlmIChwb2wgPT0gSU5UUl9Q
T0xBUklUWV9MT1cpCiAJCQlyZXR1cm4gKFRJX0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCWVsc2Ug
aWYgKHNjLT5zY19pcnFfcG9sYXJpdHlbaXJxXSA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCisJCWVs
c2UgaWYgKHBvbCA9PSBJTlRSX1BPTEFSSVRZX0hJR0gpCiAJCQlyZXR1cm4gKFRJX0dQSU9fUklT
SU5HREVURUNUKTsKIAl9Ci0KIAlyZXR1cm4gKDApOwogfQogCiBzdGF0aWMgdm9pZAotdGlfZ3Bp
b19tYXNrX2lycSh2b2lkICpzb3VyY2UpCit0aV9ncGlvX2lycV9jb25maWcoc3RydWN0IHRpX2dw
aW9fc29mdGMgKnNjLCB1X2ludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsCisgICAgZW51
bSBpbnRyX3BvbGFyaXR5IHBvbCkKIHsKLQlpbnQgaXJxOwotCXVpbnQzMl90IHJlZywgdmFsOwor
CXVpbnQzMl90IHJlZywgYmFuaywgbWFzazsKIAotCWlycSA9IChpbnQpc291cmNlOwotCWlmICh0
aV9ncGlvX3ZhbGlkX3Bpbih0aV9ncGlvX3NjLCBpcnEpICE9IDApCisJaWYgKHRpX2dwaW9fdmFs
aWRfcGluKHNjLCBpcnEpICE9IDApCiAJCXJldHVybjsKIAotCVRJX0dQSU9fTE9DSyh0aV9ncGlv
X3NjKTsKLQl0aV9ncGlvX2ludHJfY2xyKHRpX2dwaW9fc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBU
SV9HUElPX01BU0soaXJxKSk7Ci0JcmVnID0gdGlfZ3Bpb19pbnRyX3JlZyh0aV9ncGlvX3NjLCBp
cnEpOwotCWlmIChyZWcgIT0gMCkgewotCQl2YWwgPSB0aV9ncGlvX3JlYWRfNCh0aV9ncGlvX3Nj
LCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsKLQkJdmFsICY9IH5USV9HUElPX01BU0soaXJxKTsK
LQkJdGlfZ3Bpb193cml0ZV80KHRpX2dwaW9fc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCByZWcsIHZh
bCk7Ci0JfQorCWlmICgocmVnID0gdGlfZ3Bpb19pcnFfY29uZmlnX3JlZyh0cmlnLCBwb2wpKSA9
PSAwKQorCQlyZXR1cm47CisKKwliYW5rID0gVElfR1BJT19CQU5LKGlycSk7CisJbWFzayA9IFRJ
X0dQSU9fTUFTSyhpcnEpOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBpcyBu
b3QgYWxsb3dlZCBieSBpbnRlcnJ1cHQgZnJhbWV3b3JrIG5vdworCSAqIGlmIHRoZSBpbnRlcnJ1
cHQgaXMgZW5hYmxlZC4gVGh1cyBubyBpbnRlcnJ1cHQgY291bGQgYmUgbWlzc2VkIGhlcmUKKwkg
KiBkdXJpbmcgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlUSV9HUElPX0xPQ0soc2MpOworCXRpX2dw
aW9fY2ZnX2ludHJfY2xyKHNjLCBiYW5rLCBUSV9HUElPX0xFVkVMREVURUNUMCwgbWFzayk7CisJ
dGlfZ3Bpb19jZmdfaW50cl9jbHIoc2MsIGJhbmssIFRJX0dQSU9fTEVWRUxERVRFQ1QxLCBtYXNr
KTsKKwl0aV9ncGlvX2NmZ19pbnRyX2NscihzYywgYmFuaywgVElfR1BJT19GQUxMSU5HREVURUNU
LCBtYXNrKTsKKwl0aV9ncGlvX2NmZ19pbnRyX2NscihzYywgYmFuaywgVElfR1BJT19SSVNJTkdE
RVRFQ1QsIG1hc2spOworCisJdGlfZ3Bpb19jZmdfaW50cl9zZXQoc2MsIGJhbmssIHJlZywgbWFz
ayk7CiAJVElfR1BJT19VTkxPQ0sodGlfZ3Bpb19zYyk7CiB9CiAKIHN0YXRpYyB2b2lkCi10aV9n
cGlvX3VubWFza19pcnEodm9pZCAqc291cmNlKQordGlfZ3Bpb19pcnFfbWFzayhzdHJ1Y3QgdGlf
Z3Bpb19zb2Z0YyAqc2MsIHVfaW50IGlycSwgYm9vbGVhbl90IGRvX2VvaSkKIHsKLQlpbnQgaXJx
OwotCXVpbnQzMl90IHJlZywgdmFsOworCXVfaW50IGJhbmssIG1hc2s7CiAKLQlpcnEgPSAoaW50
KXNvdXJjZTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4odGlfZ3Bpb19zYywgaXJxKSAhPSAwKQor
CWlmICh0aV9ncGlvX3ZhbGlkX3BpbihzYywgaXJxKSAhPSAwKQogCQlyZXR1cm47CiAKLQlUSV9H
UElPX0xPQ0sodGlfZ3Bpb19zYyk7Ci0JcmVnID0gdGlfZ3Bpb19pbnRyX3JlZyh0aV9ncGlvX3Nj
LCBpcnEpOwotCWlmIChyZWcgIT0gMCkgewotCQl2YWwgPSB0aV9ncGlvX3JlYWRfNCh0aV9ncGlv
X3NjLCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsKLQkJdmFsIHw9IFRJX0dQSU9fTUFTSyhpcnEp
OwotCQl0aV9ncGlvX3dyaXRlXzQodGlfZ3Bpb19zYywgVElfR1BJT19CQU5LKGlycSksIHJlZywg
dmFsKTsKLQkJdGlfZ3Bpb19pbnRyX3NldCh0aV9ncGlvX3NjLCBUSV9HUElPX0JBTksoaXJxKSwK
LQkJICAgIFRJX0dQSU9fTUFTSyhpcnEpKTsKLQl9CisJYmFuayA9IFRJX0dQSU9fQkFOSyhpcnEp
OworCW1hc2sgPSBUSV9HUElPX01BU0soaXJxKTsKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJdGlf
Z3Bpb19pbnRyX2NscihzYywgYmFuaywgbWFzayk7CisJaWYgKGRvX2VvaSkKKwkJdGlfZ3Bpb19p
bnRyX2FjayhzYywgYmFuaywgbWFzayk7CisJVElfR1BJT19VTkxPQ0soc2MpOworfQorCitzdGF0
aWMgdm9pZAordGlfZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgdV9p
bnQgaXJxKQoreworCisJaWYgKHRpX2dwaW9fdmFsaWRfcGluKHNjLCBpcnEpICE9IDApCisJCXJl
dHVybjsKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJdGlfZ3Bpb19pbnRyX3NldChzYywgVElfR1BJ
T19CQU5LKGlycSksIFRJX0dQSU9fTUFTSyhpcnEpKTsKIAlUSV9HUElPX1VOTE9DSyh0aV9ncGlv
X3NjKTsKIH0KIAorc3RhdGljIHZvaWQKK3RpX2dwaW9faXJxX2VvaShzdHJ1Y3QgdGlfZ3Bpb19z
b2Z0YyAqc2MsIHVfaW50IGlycSkKK3sKKworCWlmICh0aV9ncGlvX3ZhbGlkX3BpbihzYywgaXJx
KSAhPSAwKQorCQlyZXR1cm47CisKKwlUSV9HUElPX0xPQ0soc2MpOworCXRpX2dwaW9faW50cl9h
Y2soc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBUSV9HUElPX01BU0soaXJxKSk7CisJVElfR1BJT19V
TkxPQ0sodGlfZ3Bpb19zYyk7Cit9CisKIHN0YXRpYyBpbnQKLXRpX2dwaW9fYWN0aXZhdGVfcmVz
b3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsCi0J
c3RydWN0IHJlc291cmNlICpyZXMpCit0aV9ncGlvX2F0dGFjaF9pc3JjKHN0cnVjdCB0aV9ncGlv
X3NvZnRjICpzYywgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgdV9pbnQgaXJxKQogewot
CWludCBwaW47CiAKLQlpZiAodHlwZSAhPSBTWVNfUkVTX0lSUSkKLQkJcmV0dXJuIChFTlhJTyk7
CisJLyoKKwkgKiAxLiBUaGUgbGluayBiZXR3ZWVuIElTUkMgYW5kIGNvbnRyb2xsZXIgbXVzdCBi
ZSBzZXQgYXRvbWljYWxseS4KKwkgKiAyLiBKdXN0IGRvIHRoaW5ncyBvbmx5IG9uY2UgaW4gcmFy
ZSBjYXNlIHdoZW4gY29uc3VtZXJzCisJICogICAgb2Ygc2hhcmVkIGludGVycnVwdCBjYW1lIGhl
cmUgYXQgdGhlIHNhbWUgbW9tZW50LgorCSAqLworCVRJX0dQSU9fTE9DSyhzYyk7CisJaWYgKHNj
LT5zY19pcnFzW2lycV0gIT0gTlVMTCkgeworCQlUSV9HUElPX1VOTE9DSyhzYyk7CisJCXJldHVy
biAoc2MtPnNjX2lycXNbaXJxXSA9PSBpc3JjID8gMCA6IEVFWElTVCk7CisJfQorCXNjLT5zY19p
cnFzW2lycV0gPSBpc3JjOworCWlzcmMtPmlzcmNfZGF0YSA9ICh2b2lkICopaXJxOworCVRJX0dQ
SU9fVU5MT0NLKHNjKTsKIAotCS8qIFVubWFzayB0aGUgaW50ZXJydXB0LiAqLwotCXBpbiA9IHJt
YW5fZ2V0X3N0YXJ0KHJlcyk7Ci0JdGlfZ3Bpb191bm1hc2tfaXJxKCh2b2lkICopKHVpbnRwdHJf
dClwaW4pOworCWFybV9pcnFfc2V0X25hbWUoaXNyYywgIiVzLHMldSIsIGRldmljZV9nZXRfbmFt
ZXVuaXQoc2MtPnNjX2RldiksIGlycSk7CisJcmV0dXJuICgwKTsKK30KIAorc3RhdGljIGludAor
dGlfZ3Bpb19kZXRhY2hfaXNyYyhzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHN0cnVjdCBhcm1f
aXJxc3JjICppc3JjLAorICAgIHVfaW50IGlycSkKK3sKKworCVRJX0dQSU9fTE9DSyhzYyk7CisJ
aWYgKHNjLT5zY19pcnFzW2lycV0gIT0gaXNyYykgeworCQlUSV9HUElPX1VOTE9DSyhzYyk7CisJ
CXJldHVybiAoc2MtPnNjX2lycXNbaXJxXSA9PSBOVUxMID8gMCA6IEVJTlZBTCk7CisJfQorCXNj
LT5zY19pcnFzW2lycV0gPSBOVUxMOworCWlzcmMtPmlzcmNfZGF0YSA9IE5VTEw7CisJVElfR1BJ
T19VTkxPQ0soc2MpOworCisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CiAJcmV0dXJuICgw
KTsKIH0KIAogc3RhdGljIGludAotdGlfZ3Bpb19kZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90
IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgcmlkLAotCXN0cnVjdCByZXNvdXJj
ZSAqcmVzKQordGlfZ3Bpb19tYXBfbnNwYyhzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MsIHN0cnVj
dCBhcm1faXJxc3JjICppc3JjKQogewotCWludCBwaW47CisJdV9pbnQgaXJxOwogCi0JaWYgKHR5
cGUgIT0gU1lTX1JFU19JUlEpCi0JCXJldHVybiAoRU5YSU8pOworCWlmIChpc3JjLT5pc3JjX25z
cGNfdHlwZSAhPSBBUk1fSVJRX05TUENfUExBSU4gJiYKKwkgICAgaXNyYy0+aXNyY19uc3BjX3R5
cGUgIT0gQVJNX0lSUV9OU1BDX0lSUSkKKwkJcmV0dXJuIChFSU5WQUwpOwogCi0JLyogTWFzayB0
aGUgaW50ZXJydXB0LiAqLwotCXBpbiA9IHJtYW5fZ2V0X3N0YXJ0KHJlcyk7Ci0JdGlfZ3Bpb19t
YXNrX2lycSgodm9pZCAqKSh1aW50cHRyX3QpcGluKTsKKwlpcnEgPSBpc3JjLT5pc3JjX25zcGNf
bnVtOworCWlmIChpcnEgPj0gc2MtPnNjX21heHBpbikKKwkJcmV0dXJuIChFSU5WQUwpOwogCi0J
cmV0dXJuICgwKTsKKwlyZXR1cm4gKHRpX2dwaW9fYXR0YWNoX2lzcmMoc2MsIGlzcmMsIGlycSkp
OwogfQogCisjaWZkZWYgRkRUCiBzdGF0aWMgaW50Ci10aV9ncGlvX2NvbmZpZ19pbnRyKGRldmlj
ZV90IGRldiwgaW50IGlycSwgZW51bSBpbnRyX3RyaWdnZXIgdHJpZywKLQllbnVtIGludHJfcG9s
YXJpdHkgcG9sKQordGlfZ3Bpb19tYXBfZmR0KHN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYywgc3Ry
dWN0IGFybV9pcnFzcmMgKmlzcmMpCiB7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXVp
bnQzMl90IG9sZHJlZywgcmVnLCB2YWw7CisJdV9pbnQgaXJxOworCWVudW0gaW50cl90cmlnZ2Vy
IHRyaWc7CisJZW51bSBpbnRyX3BvbGFyaXR5IHBvbDsKKwlpbnQgZXJyb3I7CiAKLQlzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4oc2MsIGlycSkgIT0g
MCkKKwkvKiBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgaW50ZXJydXB0IG51bWJlci4KKwkgKiBUaGUg
c2Vjb25kIGNlbGwgaXMgdXNlZCB0byBzcGVjaWZ5IGZsYWdzOgorCSAqCWJpdHNbMzowXSB0cmln
Z2VyIHR5cGUgYW5kIGxldmVsIGZsYWdzOgorCSAqCQkxID0gbG93LXRvLWhpZ2ggZWRnZSB0cmln
Z2VyZWQuCisJICoJCTIgPSBoaWdoLXRvLWxvdyBlZGdlIHRyaWdnZXJlZC4KKwkgKgkJNCA9IGFj
dGl2ZSBoaWdoIGxldmVsLXNlbnNpdGl2ZS4KKwkgKgkJOCA9IGFjdGl2ZSBsb3cgbGV2ZWwtc2Vu
c2l0aXZlLgorCSAqLworCWlmIChpc3JjLT5pc3JjX25jZWxscyAhPSAyKQogCQlyZXR1cm4gKEVJ
TlZBTCk7CiAKLQkvKiBUaGVyZSBpcyBubyBzdGFuZGFyZCB0cmlnZ2VyIG9yIHBvbGFyaXR5LiAq
LwotCWlmICh0cmlnID09IElOVFJfVFJJR0dFUl9DT05GT1JNIHx8IHBvbCA9PSBJTlRSX1BPTEFS
SVRZX0NPTkZPUk0pCisJaXJxID0gaXNyYy0+aXNyY19jZWxsc1swXTsKKwlpZiAoaXJxID49IHNj
LT5zY19tYXhwaW4pCiAJCXJldHVybiAoRUlOVkFMKTsKIAotCVRJX0dQSU9fTE9DSyhzYyk7CiAJ
LyoKLQkgKiBUUk0gcmVjb21tZW5kcyBhZGQgdGhlIG5ldyBldmVudCBiZWZvcmUgcmVtb3ZlIHRo
ZSBvbGQgb25lIHRvCi0JICogYXZvaWQgbG9zaW5nIGludGVycnVwdHMuCisJICogQWxsIGludGVy
cnVwdCB0eXBlcyBjb3VsZCBiZSBzZXQgZm9yIGFuIGludGVycnVwdCBhdCBvbmUgbW9tZW50CisJ
ICogaW4gdGhpcyBjb250cm9sbGVyLiBBdCBsZWFzdCwgdGhlIGNvbWJpbmF0aW9uIG9mICdsb3ct
dG8taGlnaCcgYW5kCisJICogJ2hpZ2gtdG8tbG93JyBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHQg
dHlwZXMgY2FuIG1ha2UgYSBzZW5zZS4KKwkgKiBIb3dldmVyIGl0J3Mgbm90IHBvc3NpYmxlIGR1
ZSB0byB0aGUgd2F5IGhvdyBpbnRyX3RyaWdnZXIgYW5kCisJICogaW50cl9wb2xhcml0eSBlbnVt
cyBhcmUgZGVmaW5lZC4KKwkgKgorCSAqIEFueWhvdywgd2UgY291bGQgaW1wbGVtZW50ZWQgaXQg
aW50ZXJuYWxseSBpbiBGRFQgY2FzZSBpZiBuZWVkZWQuCiAJICovCi0Jb2xkcmVnID0gdGlfZ3Bp
b19pbnRyX3JlZyhzYywgaXJxKTsKLQlzYy0+c2NfaXJxX3RyaWdnZXJbaXJxXSA9IHRyaWc7Ci0J
c2MtPnNjX2lycV9wb2xhcml0eVtpcnFdID0gcG9sOwotCXJlZyA9IHRpX2dwaW9faW50cl9yZWco
c2MsIGlycSk7Ci0JaWYgKHJlZyAhPSAwKSB7Ci0JCS8qIEFwcGx5IHRoZSBuZXcgc2V0dGluZ3Mu
ICovCi0JCXZhbCA9IHRpX2dwaW9fcmVhZF80KHNjLCBUSV9HUElPX0JBTksoaXJxKSwgcmVnKTsK
LQkJdmFsIHw9IFRJX0dQSU9fTUFTSyhpcnEpOwotCQl0aV9ncGlvX3dyaXRlXzQoc2MsIFRJX0dQ
SU9fQkFOSyhpcnEpLCByZWcsIHZhbCk7CisJc3dpdGNoIChpc3JjLT5pc3JjX2NlbGxzWzFdKSB7
CisJY2FzZSAxOgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0VER0U7CisJCXBvbCA9IElOVFJfUE9M
QVJJVFlfSElHSDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0VE
R0U7CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfTE9XOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRy
aWcgPSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJCXBvbCA9IElOVFJfUE9MQVJJVFlfSElHSDsKKwkJ
YnJlYWs7CisJY2FzZSA4OgorCQl0cmlnID0gSU5UUl9UUklHR0VSX0xFVkVMOworCQlwb2wgPSBJ
TlRSX1BPTEFSSVRZX0xPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChFSU5WQUwp
OwogCX0KLQlpZiAocmVnICE9IG9sZHJlZyAmJiBvbGRyZWcgIT0gMCkgewotCQkvKiBSZW1vdmUg
dGhlIG9sZCBzZXR0aW5ncy4gKi8KLQkJdmFsID0gdGlfZ3Bpb19yZWFkXzQoc2MsIFRJX0dQSU9f
QkFOSyhpcnEpLCBvbGRyZWcpOwotCQl2YWwgJj0gflRJX0dQSU9fTUFTSyhpcnEpOwotCQl0aV9n
cGlvX3dyaXRlXzQoc2MsIFRJX0dQSU9fQkFOSyhpcnEpLCBvbGRyZWcsIHZhbCk7Ci0JfQotCVRJ
X0dQSU9fVU5MT0NLKHNjKTsKIAorCWVycm9yID0gdGlfZ3Bpb19hdHRhY2hfaXNyYyhzYywgaXNy
YywgaXJxKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpc3JjLT5p
c3JjX25zcGNfdHlwZSA9IEFSTV9JUlFfTlNQQ19QTEFJTjsKKwlpc3JjLT5pc3JjX25zcGNfbnVt
ID0gaXJxOworCWlzcmMtPmlzcmNfdHJpZyA9IHRyaWc7CisJaXNyYy0+aXNyY19wb2wgPSBwb2w7
CisKIAlyZXR1cm4gKDApOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQKLXRpX2dwaW9fc2V0dXBf
aW50cihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMs
Ci0JaW50IGZsYWdzLCBkcml2ZXJfZmlsdGVyX3QgKmZpbHQsIGRyaXZlcl9pbnRyX3QgKmhhbmRs
ZXIsCi0Jdm9pZCAqYXJnLCB2b2lkICoqY29va2llcCkKK3RpX2dwaW9fcGljX3JlZ2lzdGVyKGRl
dmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMsCisgICAgYm9vbGVhbl90ICppc19w
ZXJjcHUpCiB7Ci0Jc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjOwotCXN0cnVjdCBpbnRyX2V2ZW50
ICpldmVudDsKLQlpbnQgcGluLCBlcnJvcjsKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLQlw
aW4gPSBybWFuX2dldF9zdGFydChpcmVzKTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4oc2MsIHBp
bikgIT0gMCkKLQkJcGFuaWMoIiVzOiBiYWQgcGluICVkIiwgX19mdW5jX18sIHBpbik7CisJKmlz
X3BlcmNwdSA9IEZBTFNFOwogCi0JZXZlbnQgPSBzYy0+c2NfZXZlbnRzW3Bpbl07Ci0JaWYgKGV2
ZW50ID09IE5VTEwpIHsKLQkJZXJyb3IgPSBpbnRyX2V2ZW50X2NyZWF0ZSgmZXZlbnQsICh2b2lk
ICopKHVpbnRwdHJfdClwaW4sIDAsCi0JCSAgICBwaW4sIHRpX2dwaW9fbWFza19pcnEsIHRpX2dw
aW9fdW5tYXNrX2lycSwgTlVMTCwgTlVMTCwKLQkJICAgICJncGlvJWQgcGluJWQ6IiwgZGV2aWNl
X2dldF91bml0KGRldiksIHBpbik7Ci0JCWlmIChlcnJvciAhPSAwKQotCQkJcmV0dXJuIChlcnJv
cik7Ci0JCXNjLT5zY19ldmVudHNbcGluXSA9IGV2ZW50OwotCX0KLQlpbnRyX2V2ZW50X2FkZF9o
YW5kbGVyKGV2ZW50LCBkZXZpY2VfZ2V0X25hbWV1bml0KGNoaWxkKSwgZmlsdCwKLQkgICAgaGFu
ZGxlciwgYXJnLCBpbnRyX3ByaW9yaXR5KGZsYWdzKSwgZmxhZ3MsIGNvb2tpZXApOworCWlmIChp
c3JjLT5pc3JjX3R5cGUgPT0gQVJNX0lTUkNUX05BTUVTUEFDRSkKKwkJcmV0dXJuICh0aV9ncGlv
X21hcF9uc3BjKHNjLCBpc3JjKSk7CisjaWZkZWYgRkRUCisJZWxzZSBpZiAoaXNyYy0+aXNyY190
eXBlID09IEFSTV9JU1JDVF9GRFQpCisJCXJldHVybiAodGlfZ3Bpb19tYXBfZmR0KHNjLCBpc3Jj
KSk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiAoRUlOVkFMKTsKK30KIAotCXJldHVybiAoMCk7
CitzdGF0aWMgdm9pZAordGlfZ3Bpb19waWNfZW5hYmxlX2ludHIoZGV2aWNlX3QgZGV2LCBzdHJ1
Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsK
KworCS8qIFRoZSBkZWZhdWx0IGlzIGFjdGl2ZS1sb3cgaW50ZXJydXB0cy4gKi8KKwlpZiAoaXNy
Yy0+aXNyY190cmlnID09IElOVFJfVFJJR0dFUl9DT05GT1JNKQorCQlpc3JjLT5pc3JjX3RyaWcg
PSBJTlRSX1RSSUdHRVJfTEVWRUw7CisJaWYgKGlzcmMtPmlzcmNfcG9sID09IElOVFJfUE9MQVJJ
VFlfQ09ORk9STSkKKwkJaXNyYy0+aXNyY19wb2wgPSBJTlRSX1BPTEFSSVRZX0xPVzsKKworCXRp
X2dwaW9faXJxX2NvbmZpZyhzYywgaXJxLCBpc3JjLT5pc3JjX3RyaWcsIGlzcmMtPmlzcmNfcG9s
KTsKIH0KIAorc3RhdGljIHZvaWQKK3RpX2dwaW9fcGljX2VuYWJsZV9zb3VyY2UoZGV2aWNlX3Qg
ZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAq
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlz
cmNfZGF0YTsKKworCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJxKTsKKwl0aV9ncGlvX2lycV91
bm1hc2soc2MsIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCit0aV9ncGlvX3BpY19kaXNhYmxlX3Nv
dXJjZShkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCXN0cnVjdCB0
aV9ncGlvX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnEgPSAo
dV9pbnQpaXNyYy0+aXNyY19kYXRhOworCisJdGlfZ3Bpb19pcnFfbWFzayhzYywgaXJxLCBGQUxT
RSk7Cit9CisKIHN0YXRpYyBpbnQKLXRpX2dwaW9fdGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYs
IGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMsCi0Jdm9pZCAqY29va2llKQor
dGlfZ3Bpb19waWNfdW5yZWdpc3RlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICpp
c3JjKQogewotCXN0cnVjdCB0aV9ncGlvX3NvZnRjICpzYzsKLQlpbnQgcGluLCBlcnI7CisJc3Ry
dWN0IHRpX2dwaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVfaW50IGly
cSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CiAKLQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKLQlwaW4gPSBybWFuX2dldF9zdGFydChpcmVzKTsKLQlpZiAodGlfZ3Bpb192YWxpZF9waW4o
c2MsIHBpbikgIT0gMCkKLQkJcGFuaWMoIiVzOiBiYWQgcGluICVkIiwgX19mdW5jX18sIHBpbik7
Ci0JaWYgKHNjLT5zY19ldmVudHNbcGluXSA9PSBOVUxMKQotCQlwYW5pYygiVHJ5aW5nIHRvIHRl
YXJkb3duIHVub2NjdXBpZWQgSVJRIik7Ci0JZXJyID0gaW50cl9ldmVudF9yZW1vdmVfaGFuZGxl
cihjb29raWUpOwotCWlmICghZXJyKQotCQlzYy0+c2NfZXZlbnRzW3Bpbl0gPSBOVUxMOworCXJl
dHVybiAodGlfZ3Bpb19kZXRhY2hfaXNyYyhzYywgaXNyYywgaXJxKSk7Cit9CiAKLQlyZXR1cm4g
KGVycik7CitzdGF0aWMgdm9pZAordGlfZ3Bpb19waWNfcHJlX2l0aHJlYWQoZGV2aWNlX3QgZGV2
LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgdGlfZ3Bpb19zb2Z0YyAqc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxID0gKHVfaW50KWlzcmMtPmlzcmNf
ZGF0YTsKKworCWlmIChpc3JjLT5pc3JjX3RyaWcgPT0gSU5UUl9UUklHR0VSX0xFVkVMKQorCQl0
aV9ncGlvX2lycV9tYXNrKHNjLCBpcnEsIFRSVUUpOworCWVsc2UKKwkJdGlfZ3Bpb19pcnFfbWFz
ayhzYywgaXJxLCBGQUxTRSk7CiB9CiAKK3N0YXRpYyB2b2lkCit0aV9ncGlvX3BpY19wb3N0X2l0
aHJlYWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKworCXRpX2dw
aW9fcGljX2VuYWJsZV9zb3VyY2UoZGV2LCBpc3JjKTsKK30KKworc3RhdGljIHZvaWQKK3RpX2dw
aW9fcGljX3Bvc3RfZmlsdGVyKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMp
Cit7CisJc3RydWN0IHRpX2dwaW9fc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor
CXVfaW50IGlycSA9ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CisKKwlpZiAoaXNyYy0+aXNyY190
cmlnID09IElOVFJfVFJJR0dFUl9MRVZFTCkKKwkJdGlfZ3Bpb19pcnFfZW9pKHNjLCBpcnEpOwor
fQorCiBzdGF0aWMgcGhhbmRsZV90CiB0aV9ncGlvX2dldF9ub2RlKGRldmljZV90IGJ1cywgZGV2
aWNlX3QgZGV2KQogewpAQCAtMTA4NywxMiArMTI3NSwxOSBAQAogCURFVk1FVEhPRChncGlvX3Bp
bl9zZXQsIHRpX2dwaW9fcGluX3NldCksCiAJREVWTUVUSE9EKGdwaW9fcGluX3RvZ2dsZSwgdGlf
Z3Bpb19waW5fdG9nZ2xlKSwKIAorCS8qIEludGVycnVwdCBjb250cm9sbGVyIGludGVyZmFjZSAq
LworCURFVk1FVEhPRChwaWNfZGlzYWJsZV9zb3VyY2UsCXRpX2dwaW9fcGljX2Rpc2FibGVfc291
cmNlKSwKKwlERVZNRVRIT0QocGljX2VuYWJsZV9pbnRyLAl0aV9ncGlvX3BpY19lbmFibGVfaW50
ciksCisJREVWTUVUSE9EKHBpY19lbmFibGVfc291cmNlLAl0aV9ncGlvX3BpY19lbmFibGVfc291
cmNlKSwKKwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAl0aV9ncGlvX3BpY19wb3N0X2ZpbHRl
ciksCisJREVWTUVUSE9EKHBpY19wb3N0X2l0aHJlYWQsCXRpX2dwaW9fcGljX3Bvc3RfaXRocmVh
ZCksCisJREVWTUVUSE9EKHBpY19wcmVfaXRocmVhZCwJdGlfZ3Bpb19waWNfcHJlX2l0aHJlYWQp
LAorCURFVk1FVEhPRChwaWNfcmVnaXN0ZXIsCQl0aV9ncGlvX3BpY19yZWdpc3RlciksCisJREVW
TUVUSE9EKHBpY191bnJlZ2lzdGVyLAl0aV9ncGlvX3BpY191bnJlZ2lzdGVyKSwKKwogCS8qIEJ1
cyBpbnRlcmZhY2UgKi8KLQlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLCB0aV9ncGlv
X2FjdGl2YXRlX3Jlc291cmNlKSwKLQlERVZNRVRIT0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2Us
IHRpX2dwaW9fZGVhY3RpdmF0ZV9yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1c19jb25maWdfaW50
ciwgdGlfZ3Bpb19jb25maWdfaW50ciksCi0JREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLCB0aV9n
cGlvX3NldHVwX2ludHIpLAotCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwgdGlfZ3Bpb190
ZWFyZG93bl9pbnRyKSwKKwlERVZNRVRIT0QoYnVzX3NldHVwX2ludHIsIGJ1c19nZW5lcmljX3Nl
dHVwX2ludHIpLAorCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwgYnVzX2dlbmVyaWNfdGVh
cmRvd25faW50ciksCiAKIAkvKiBvZndfYnVzIGludGVyZmFjZSAqLwogCURFVk1FVEhPRChvZndf
YnVzX2dldF9ub2RlLCB0aV9ncGlvX2dldF9ub2RlKSwKQEAgLTExMDUsMyArMTMwMCw5NiBAQAog
CXRpX2dwaW9fbWV0aG9kcywKIAlzaXplb2Yoc3RydWN0IHRpX2dwaW9fc29mdGMpLAogfTsKKwor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICAgICBURVNUIE1PRFVMRQorICoKKyAqIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0cnVjdCB0ZXN0X2dwaW9fc29mdGMgeworCXN0cnVjdCBy
ZXNvdXJjZQkqc2NfaXJxX3JlczsKKwl2b2lkCQkqc2NfaXJxX2hkbDsKK307CisKK3N0YXRpYyBp
bnQKK3Rlc3RfZ3Bpb19pbnRyKHZvaWQgKmFyZykKK3sKKwkvL3N0cnVjdCB0ZXN0X2dwaW9fc29m
dGMgKnNjID0gYXJnOworCisJcHJpbnRmKCIlczogZ290IGludGVycnVwdFxuIiwgX19mdW5jX18p
OworCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2dwaW9f
cHJvYmUoZGV2aWNlX3QgZGV2KQoreworCWlmICghb2Z3X2J1c19pc19jb21wYXRpYmxlKGRldiwg
ImdwaW8tdGVzdCIpKQorCQlyZXR1cm4gKEVOWElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYs
ICJUZXN0IEdQSU8gTW9kdWxlIik7CisJcmV0dXJuKEJVU19QUk9CRV9ERUZBVUxUKTsKK30KKwor
c3RhdGljIGludAordGVzdF9ncGlvX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IHRl
c3RfZ3Bpb19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaW50IHJpZCwgZXJy
OworCisJcmlkID0gMDsKKwlzYy0+c2NfaXJxX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnko
ZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2ly
cV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0
ZSBpcnFcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKyNpZiAwCisjaWZkZWYgU09DX1RJ
X0FNMzM1WAorCWVyciA9IEJVU19DT05GSUdfSU5UUihkZXYsIHJtYW5fZ2V0X3N0YXJ0KHNjLT5z
Y19pcnFfcmVzKSwKKwkgICAgSU5UUl9UUklHR0VSX0xFVkVMLCBJTlRSX1BPTEFSSVRZX0hJR0gp
OworCWlmIChlcnIpCisJCWRldmljZV9wcmludGYoZGV2LCAiQ291bGQgbm90IGNvbmZpZyBpcnEs
ICVkXG4iLCBlcnIpOworI2VuZGlmCisjaWZkZWYgU09DX09NQVA0CisJZXJyID0gQlVTX0NPTkZJ
R19JTlRSKGRldiwgcm1hbl9nZXRfc3RhcnQoc2MtPnNjX2lycV9yZXMpLAorCSAgICBJTlRSX1RS
SUdHRVJfRURHRSwgSU5UUl9QT0xBUklUWV9MT1cpOworCWlmIChlcnIpCisJCWRldmljZV9wcmlu
dGYoZGV2LCAiQ291bGQgbm90IGNvbmZpZyBpcnEsICVkXG4iLCBlcnIpOworI2VuZGlmCisjZW5k
aWYKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5zY19pcnFfcmVzLCBJTlRSX1RZUEVf
TUlTQyB8IElOVFJfTVBTQUZFLAorCSAgICB0ZXN0X2dwaW9faW50ciwgTlVMTCwgc2MsICZzYy0+
c2NfaXJxX2hkbCk7CisJaWYgKGVycikgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5v
dCBzZXR1cCBpcnEsICVkXG4iLCBlcnIpOworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ
U19SRVNfSVJRLCAwLCBzYy0+c2NfaXJxX3Jlcyk7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor
CWVyciA9IGJ1c19kZXNjcmliZV9pbnRyKGRldiwgc2MtPnNjX2lycV9yZXMsIHNjLT5zY19pcnFf
aGRsLCAiWFgiKTsKKwlpZiAoZXJyKQorCQlkZXZpY2VfcHJpbnRmKGRldiwgIkNvdWxkIG5vdCBk
ZXNjcmliZSBpcnEsICVkXG4iLCBlcnIpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRl
dmljZV9tZXRob2RfdCB0ZXN0X2dwaW9fbWV0aG9kc1tdID0geworCS8qIGJ1cyBpbnRlcmZhY2Ug
Ki8KKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCB0ZXN0X2dwaW9fcHJvYmUpLAorCURFVk1FVEhP
RChkZXZpY2VfYXR0YWNoLCB0ZXN0X2dwaW9fYXR0YWNoKSwKKworCXswLCAwfSwKK307CisKK2Ry
aXZlcl90IHRlc3RfZ3Bpb19kcml2ZXIgPSB7CisJInRlc3RfZ3BpbyIsCisJdGVzdF9ncGlvX21l
dGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB0ZXN0X2dwaW9fc29mdGMpLAorfTsKKworc3RhdGljIGRl
dmNsYXNzX3QgdGVzdF9ncGlvX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRlc3RfZ3Bpbywg
c2ltcGxlYnVzLCB0ZXN0X2dwaW9fZHJpdmVyLCB0ZXN0X2dwaW9fZGV2Y2xhc3MsCisgICAgMCwg
MCk7CkluZGV4OiBzeXMvYXJtL3RpL3RpX2dwaW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL3Rp
L3RpX2dwaW8uaAkocmV2aXNpb24gMjc5Njg1KQorKysgc3lzL2FybS90aS90aV9ncGlvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEyIEBACiAgKi8KICNkZWZpbmUJTUFYX0dQSU9fSU5U
UlMJCQk4CiAKK3N0cnVjdCB0aV9ncGlvX2lycV9hcmcgeworCXN0cnVjdCB0aV9ncGlvX3NvZnRj
CSppYV9zYzsKKwl1aW50MTZfdAkJaWFfYmFuazsJLyogR1BJTyBiYW5rICovCisJdWludDE2X3QJ
CWlhX2lkeDsJCS8qIGlycSBvbiB0aGUgYmFuayAqLworfTsKKwogLyoqCiAgKglTdHJ1Y3R1cmUg
dGhhdCBzdG9yZXMgdGhlIGRyaXZlciBjb250ZXh0LgogICoKQEAgLTQ4LDEwICs1NCw2IEBACiAJ
ZGV2aWNlX3QJCXNjX2RldjsKIAlkZXZpY2VfdAkJc2NfYnVzZGV2OwogCi0JLyogSW50ZXJydXB0
IHRyaWdnZXIgdHlwZSBhbmQgbGV2ZWwuICovCi0JZW51bSBpbnRyX3RyaWdnZXIJKnNjX2lycV90
cmlnZ2VyOwotCWVudW0gaW50cl9wb2xhcml0eQkqc2NfaXJxX3BvbGFyaXR5OwotCiAJaW50CQkJ
c2NfbWF4cGluOwogCXN0cnVjdCBtdHgJCXNjX210eDsKIApAQCAtNjMsMTAgKzY1LDExIEBACiAJ
c3RydWN0IHJlc291cmNlCQkqc2NfbWVtX3Jlc1tNQVhfR1BJT19CQU5LU107CiAJc3RydWN0IHJl
c291cmNlCQkqc2NfaXJxX3Jlc1tNQVhfR1BJT19JTlRSU107CiAKLQkvKiBJbnRlcnJ1cHQgZXZl
bnRzLiAqLwotCXN0cnVjdCBpbnRyX2V2ZW50CSoqc2NfZXZlbnRzOworCS8qIEludGVycnVwdCBz
b3VyY2VzIHJlZ2lzdGVyZWQgaW4gaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCisJc3RydWN0IGFy
bV9pcnFzcmMJKipzY19pcnFzOwogCi0JLyogVGhlIGhhbmRsZSBmb3IgdGhlIHJlZ2lzdGVyIElS
USBoYW5kbGVycy4gKi8KKwkvKiBUaGUgaGFuZGxlIGFuZCBhcmd1bWVudCBmb3IgdGhlIHJlZ2lz
dGVyIElSUSBoYW5kbGVycy4gKi8KKwlzdHJ1Y3QgdGlfZ3Bpb19pcnFfYXJnCXNjX2lycV9hcmdb
TUFYX0dQSU9fSU5UUlNdOwogCXZvaWQJCQkqc2NfaXJxX2hkbFtNQVhfR1BJT19JTlRSU107CiB9
OwogCkluZGV4OiBzeXMvYm9vdC9mZHQvZHRzL2FybS9hbTMzNXguZHRzaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBzeXMvYm9vdC9mZHQvZHRzL2FybS9hbTMzNXguZHRzaQkocmV2aXNpb24gMjc5Njg1KQorKysg
c3lzL2Jvb3QvZmR0L2R0cy9hcm0vYW0zMzV4LmR0c2kJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0gg
REFNQUdFLgotICogCisgKgogICogJEZyZWVCU0QkCiAgKi8KIApAQCAtMTAwLDcgKzEwMCw3IEBA
CiAJCQlpbnRlcnJ1cHRzID0gPDkxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JkFJTlRDPjsK
IAkJfTsKLSAJCQorCiAJCUdQSU86IGdwaW8gewogCQkJI2dwaW8tY2VsbHMgPSA8Mz47CiAJCQlj
b21wYXRpYmxlID0gInRpLGdwaW8iOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCQlpbnRlcnJ1cHRz
ID0gPCA5NiA5NyA5OCA5OSAzMiAzMyA2MiA2MyA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwm
QUlOVEM+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0g
PDE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQl1YXJ0MDogc2VyaWFs
QDQ0RTA5MDAwIHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwg
NDgwMDAwMDAgPjsKIAkJCXVhcnQtZGV2aWNlLWlkID0gPCAwID47CiAgCQl9OwotIAkJCisKICAJ
CXVhcnQxOiBzZXJpYWxANDgwMjIwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7
CiAgCQkJcmVnID0gPDB4NDgwMjIwMDAgMHgxMDAwPjsKQEAgLTEzMSwxMSArMTMxLDExIEBACiAg
CQkJcmVnLXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDczID47CiAgCQkJaW50ZXJy
dXB0LXBhcmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAg
PjsgCisgCQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2Ut
aWQgPSA8IDEgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAkJCisKICAJCXVh
cnQyOiBzZXJpYWxANDgwMjQwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7CiAg
CQkJcmVnID0gPDB4NDgwMjQwMDAgMHgxMDAwPjsKQEAgLTE0MiwxMSArMTQyLDExIEBACiAgCQkJ
cmVnLXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDc0ID47CiAgCQkJaW50ZXJydXB0
LXBhcmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsg
CisgCQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQg
PSA8IDIgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAkJCisKICAJCXVhcnQz
OiBzZXJpYWxANDgxYTYwMDAgewogIAkJCWNvbXBhdGlibGUgPSAidGksbnMxNjU1MCI7CiAgCQkJ
cmVnID0gPDB4NDgxQTYwMDAgMHgxMDAwPjsKQEAgLTE1MywxMSArMTUzLDExIEBACiAgCQkJcmVn
LXNoaWZ0ID0gPDI+OwogIAkJCWludGVycnVwdHMgPSA8IDQ0ID47CiAgCQkJaW50ZXJydXB0LXBh
cmVudCA9IDwmQUlOVEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsgCisg
CQkJY2xvY2stZnJlcXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQgPSA8
IDMgPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAgCQl9OwotIAorCiAgCQl1YXJ0NDogc2Vy
aWFsQDQ4MWE4MDAwIHsKICAJCQljb21wYXRpYmxlID0gInRpLG5zMTY1NTAiOwogIAkJCXJlZyA9
IDwweDQ4MUE4MDAwIDB4MTAwMD47CkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogIAkJCXJlZy1zaGlm
dCA9IDwyPjsKICAJCQlpbnRlcnJ1cHRzID0gPCA0NSA+OwogIAkJCWludGVycnVwdC1wYXJlbnQg
PSA8JkFJTlRDPjsKLSAJCQljbG9jay1mcmVxdWVuY3kgPSA8IDQ4MDAwMDAwID47IAorIAkJCWNs
b2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsKIAkJCXVhcnQtZGV2aWNlLWlkID0gPCA0ID47
CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogIAkJfTsKLSAKKwogIAkJdWFydDU6IHNlcmlhbEA0
ODFhYTAwMCB7CiAgCQkJY29tcGF0aWJsZSA9ICJ0aSxuczE2NTUwIjsKICAJCQlyZWcgPSA8MHg0
ODFBQTAwMCAweDEwMDA+OwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgCQkJcmVnLXNoaWZ0ID0gPDI+
OwogIAkJCWludGVycnVwdHMgPSA8IDQ2ID47CiAgCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQUlO
VEM+OwotIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwgNDgwMDAwMDAgPjsgCisgCQkJY2xvY2stZnJl
cXVlbmN5ID0gPCA0ODAwMDAwMCA+OwogCQkJdWFydC1kZXZpY2UtaWQgPSA8IDUgPjsKIAkJCXN0
YXR1cyA9ICJkaXNhYmxlZCI7CiAgIAkJfTsKSW5kZXg6IHN5cy9ib290L2ZkdC9kdHMvYXJtL2Jl
YWdsZWJvbmUtYmxhY2suZHRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9ib290L2ZkdC9kdHMvYXJtL2Jl
YWdsZWJvbmUtYmxhY2suZHRzCShyZXZpc2lvbiAyNzk2ODUpCisrKyBzeXMvYm9vdC9mZHQvZHRz
L2FybS9iZWFnbGVib25lLWJsYWNrLmR0cwkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0Uu
Ci0gKiAKKyAqCiAgKiAkRnJlZUJTRCQKICAqLwogCkBAIC0xMTAsMTQgKzExMCwxNCBAQAogCQkJ
CSJHUE1DX0JFbjEiLCAiZ3BpbzFfMjgiLCAiaW5wdXRfcHVsbGRvd24iLAogCQkJCSJHUE1DX0NT
bjAiLCAiZ3BpbzFfMjkiLCAiaW5wdXRfcHVsbGRvd24iLAogCQkJCSJHUE1DX0NMSyIsICJncGlv
Ml8xIiwgImlucHV0X3B1bGxkb3duIiwKLQkJCQkiTENEX0RBVEEwIiwgImdwaW8yXzYiLCAiaW5w
dXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RBVEExIiwgImdwaW8yXzciLCAiaW5wdXRfcHVsbGRv
d24iLCAKLQkJCQkiTENEX0RBVEEyIiwgImdwaW8yXzgiLCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJ
CQkiTENEX0RBVEEzIiwgImdwaW8yXzkiLCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RB
VEE0IiwgImdwaW8yXzEwIiwgImlucHV0X3B1bGxkb3duIiwgCi0JCQkJIkxDRF9EQVRBNSIsICJn
cGlvMl8xMSIsICJpbnB1dF9wdWxsZG93biIsIAotCQkJCSJMQ0RfREFUQTYiLCAiZ3BpbzJfMTIi
LCAiaW5wdXRfcHVsbGRvd24iLCAKLQkJCQkiTENEX0RBVEE3IiwgImdwaW8yXzEzIiwgImlucHV0
X3B1bGxkb3duIiwgCisJCQkJIkxDRF9EQVRBMCIsICJncGlvMl82IiwgImlucHV0X3B1bGxkb3du
IiwKKwkJCQkiTENEX0RBVEExIiwgImdwaW8yXzciLCAiaW5wdXRfcHVsbGRvd24iLAorCQkJCSJM
Q0RfREFUQTIiLCAiZ3BpbzJfOCIsICJpbnB1dF9wdWxsZG93biIsCisJCQkJIkxDRF9EQVRBMyIs
ICJncGlvMl85IiwgImlucHV0X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE0IiwgImdwaW8yXzEw
IiwgImlucHV0X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE1IiwgImdwaW8yXzExIiwgImlucHV0
X3B1bGxkb3duIiwKKwkJCQkiTENEX0RBVEE2IiwgImdwaW8yXzEyIiwgImlucHV0X3B1bGxkb3du
IiwKKwkJCQkiTENEX0RBVEE3IiwgImdwaW8yXzEzIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQki
TENEX1ZTWU5DIiwgImdwaW8yXzIyIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQkiTENEX0hTWU5D
IiwgImdwaW8yXzIzIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQkiTENEX1BDTEsiLCAiZ3BpbzJf
MjQiLCAiaW5wdXRfcHVsbGRvd24iLApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQlzdGF0dXMgPSAi
b2theSI7CiAJCQlub24tcmVtb3ZhYmxlOwogCQl9OwotIAorCiAJCWkyY0A0NGUwYjAwMCB7CiAJ
CQlwbWljQDQ4IHsKIAkJCQljb21wYXRpYmxlID0gInRpLGFtMzM1eC1wbWljIjsKQEAgLTE1MSw2
ICsxNTEsMTMgQEAKIAkJCQlyZWcgPSA8MHg0OD47CiAJCQl9OwogCQl9OworCisJCXRlc3RAMCB7
CisJCQljb21wYXRpYmxlID0gImdwaW8tdGVzdCI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWludGVy
cnVwdC1wYXJlbnQgPSA8JkdQSU8+OworCQkJaW50ZXJydXB0cyA9IDw2MCAweDQ+OworCQl9Owog
CX07CiAKIAlsZWRzIHsKSW5kZXg6IHN5cy9ib290L2ZkdC9kdHMvYXJtL3BhbmRhYm9hcmQuZHRz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHN5cy9ib290L2ZkdC9kdHMvYXJtL3BhbmRhYm9hcmQuZHRzCShyZXZp
c2lvbiAyNzk2ODUpCisrKyBzeXMvYm9vdC9mZHQvZHRzL2FybS9wYW5kYWJvYXJkLmR0cwkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCi0gKiAKKyAqCiAgKiAkRnJlZUJTRCQKICAqLwog
CkBAIC03MCw3ICs3MCw3IEBACiAJCQkgICAgMHg0YTAwNDAwMCAweDEwMDAKIAkJCSAgICAweDRh
MDA4MDAwIDB4ODAwMD47CiAJCX07Ci0JCQkJICAgICAKKwogCQlwbDMxMEA0ODI0MjAwMCB7CiAJ
CQljb21wYXRpYmxlID0gImFybSxwbDMxMCI7CiAJCQlyZWcgPSA8IDB4NDgyNDIwMDAgMHgxMDAw
ID47CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAidGksc2NtIjsKIAkJCXJl
ZyA9CTwgMHg0YTEwMDAwMCAweDEwMDAgPjsKIAkJCS8qIFNldCBvZiB0cmlwbGV0cyA8IHBhZG5h
bWUsIG11eG5hbWUsIHBhZHN0YXRlPiAqLwotCQkJc2NtLXBhZC1jb25maWcgPSAKKwkJCXNjbS1w
YWQtY29uZmlnID0KIAkJCQkiYWcxOSIsICJ1c2JiMV91bHBpcGh5X3N0cCIsICJvdXRwdXQiLAog
CQkJCSJhZTE4IiwgInVzYmIxX3VscGlwaHlfY2xrIiwgImlucHV0X3B1bGxkb3duIiwKIAkJCQki
YWYxOSIsICJ1c2JiMV91bHBpcGh5X2RpciIsICJpbnB1dF9wdWxsZG93biIsCkBAIC0xMTMsNyAr
MTEzLDggQEAKIAkJCQkiYWgxNyIsICJ1c2JiMV91bHBpcGh5X2RhdDQiLCAiaW5wdXRfcHVsbGRv
d24iLAogCQkJCSJhZTE2IiwgInVzYmIxX3VscGlwaHlfZGF0NSIsICJpbnB1dF9wdWxsZG93biIs
CiAJCQkJImFmMTYiLCAidXNiYjFfdWxwaXBoeV9kYXQ2IiwgImlucHV0X3B1bGxkb3duIiwKLQkJ
CQkiYWcxNiIsICJ1c2JiMV91bHBpcGh5X2RhdDciLCAiaW5wdXRfcHVsbGRvd24iOworCQkJCSJh
ZzE2IiwgInVzYmIxX3VscGlwaHlfZGF0NyIsICJpbnB1dF9wdWxsZG93biIsCisJCQkJImFjMjgi
LCAiZ3Bpb18xMTMiLCAiaW5wdXRfcHVsbHVwIjsKIAkJfTsKIAogCQlHUElPOiBncGlvIHsKQEAg
LTEyOCwxMSArMTI5LDEzIEBACiAJCQkJMHg0ODA1ZDAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0
cyA9IDw2MSA2MiA2MyA2NCA2NSA2Nj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZHSUM+Owor
CQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQl9
OwogCiAJCWVoY2kgewogCQkJY29tcGF0aWJsZSA9ICJ0aSx1c2ItZWhjaSIsICJ1c2ItZWhjaSI7
Ci0JCQkvKiAKKwkJCS8qCiAJCQkgKiBVU0IgcG9ydCBQSFkgY29uZmlndXJhdGlvbiBpcyBhIHR1
cGxlOiA8bW9kZSwgcmVzZXQsIGdwaW9fcGluPgogCQkJICogbW9kZSBpcyBvbmUgb2YgdGhlIGZv
bGxvd2luZyB2YWx1ZXM6CiAJCQkgKiAgIDAgLSB1bmtub3duCkBAIC0xNDAsNyArMTQzLDcgQEAK
IAkJCSAqICAgMiAtIFRMTAogCQkJICogICAzIC0gSFNJQwogCQkJICoKLQkJCSAqIHJlc2V0IGlu
ZGljYXRlcyAoaWYgbm9uLXplcm8pIGlmIHBvcnQgcmVzZXQgaXMgcmVxdWlyZWQgCisJCQkgKiBy
ZXNldCBpbmRpY2F0ZXMgKGlmIG5vbi16ZXJvKSBpZiBwb3J0IHJlc2V0IGlzIHJlcXVpcmVkCiAJ
CQkgKiBncGlvX3BpbiAtIEdQSU8gcGluIHRoYXQgaXMgdXNlZCB0byBwZXJmb3JtIHJlc2V0CiAJ
CQkgKi8KIAkJCXBoeS1jb25maWcgPSA8ICAxIDAgMApAQCAtMTc3LDggKzE4MCwxNSBAQAogCQkJ
bm9uLXJlbW92YWJsZTsgLyogWFhYIG5lZWQgcmVhbCBzb2x1dGlvbiAqLwogCQl9OwogCisJCXRl
c3RAMCB7CisJCQljb21wYXRpYmxlID0gImdwaW8tdGVzdCI7CisJCQlyZWcgPSA8MHgwPjsKKwkJ
CWludGVycnVwdC1wYXJlbnQgPSA8JkdQSU8+OworCQkJaW50ZXJydXB0cyA9IDwxMTMgMHgyPjsK
IAl9OwogCisJfTsKKwogCWNob3NlbiB7CiAJCXN0ZGluID0gInVhcnQzIjsKIAkJc3Rkb3V0ID0g
InVhcnQzIjsK
--20cf30223fb18e26520510a22522
Content-Type: text/plain; charset=US-ASCII; name="interrupt.h.diff"
Content-Disposition: attachment; filename="interrupt.h.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i6xu4hn47

SW5kZXg6IHN5cy9zeXMvaW50ZXJydXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL3N5cy9pbnRlcnJ1
cHQuaAkocmV2aXNpb24gMjc5Njg1KQorKysgc3lzL3N5cy9pbnRlcnJ1cHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJVEFJTFFfRU5UUlkoaW50cl9ldmVudCkgaWVfbGlz
dDsKIAlUQUlMUV9IRUFEKCwgaW50cl9oYW5kbGVyKSBpZV9oYW5kbGVyczsgLyogSW50ZXJydXB0
IGhhbmRsZXJzLiAqLwogCWNoYXIJCWllX25hbWVbTUFYQ09NTEVOICsgMV07IC8qIEluZGl2aWR1
YWwgZXZlbnQgbmFtZS4gKi8KLQljaGFyCQlpZV9mdWxsbmFtZVtNQVhDT01MRU4gKyAxXTsKKwlj
aGFyCQlpZV9mdWxsbmFtZVsyKk1BWENPTUxFTiArIDFdOwogCXN0cnVjdCBtdHgJaWVfbG9jazsK
IAl2b2lkCQkqaWVfc291cmNlOwkvKiBDb29raWUgdXNlZCBieSBNRCBjb2RlLiAqLwogCXN0cnVj
dCBpbnRyX3RocmVhZCAqaWVfdGhyZWFkOwkvKiBUaHJlYWQgd2UgYXJlIGNvbm5lY3RlZCB0by4g
Ki8K
--20cf30223fb18e26520510a22522--



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