From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 07/17] drm/amdgpu: add graphic pipeline implementation for si v6 Date: Sat, 14 May 2016 15:26:19 -0400 Message-ID: <1463253989-28924-8-git-send-email-alexander.deucher@amd.com> References: <1463253989-28924-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-x243.google.com (mail-qg0-x243.google.com [IPv6:2607:f8b0:400d:c04::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E9196E2D9 for ; Sat, 14 May 2016 19:26:43 +0000 (UTC) Received: by mail-qg0-x243.google.com with SMTP id e35so10623495qge.1 for ; Sat, 14 May 2016 12:26:43 -0700 (PDT) In-Reply-To: <1463253989-28924-1-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Alex Deucher , Ken Wang List-Id: dri-devel@lists.freedesktop.org RnJvbTogS2VuIFdhbmcgPFFpbmdxaW5nLldhbmdAYW1kLmNvbT4KCnY1OiByZWJhc2UgZml4ZXMK djY6IHJlYmFzZSBmaXhlcwoKQWNrZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5r b2VuaWdAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogS2VuIFdhbmcgPFFpbmdxaW5nLldhbmdAYW1k LmNvbT4KU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92Nl8wLmMgfCAzMjgwICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y2XzAuaCB8ICAgMzYgKwogMiBmaWxlcyBjaGFuZ2VkLCAzMzE2IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjZf MC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y2 XzAuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92Nl8wLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjZfMC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2YwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9nZnhfdjZfMC5jCkBAIC0wLDAgKzEsMzI4MCBAQAorLyoKKyAqIENv cHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImFtZGdwdS5o IgorI2luY2x1ZGUgImFtZGdwdV9paC5oIgorI2luY2x1ZGUgImFtZGdwdV9nZnguaCIKKyNpbmNs dWRlICJhbWRncHVfdWNvZGUuaCIKKyNpbmNsdWRlICJzaS9jbGVhcnN0YXRlX3NpLmgiCisjaW5j bHVkZSAic2kvc2lkLmgiCisKKyNkZWZpbmUgR0ZYNl9OVU1fR0ZYX1JJTkdTICAgICAxCisjZGVm aW5lIEdGWDZfTlVNX0NPTVBVVEVfUklOR1MgMgorI2RlZmluZSBTVEFUSUNfUEVSX0NVX1BHX0VO QUJMRSAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRFlOX1BFUl9DVV9QR19F TkFCTEUgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFJMQ19TQVZFX0FO RF9SRVNUT1JFX1NUQVJUSU5HX09GRlNFVCAweDkwCisjZGVmaW5lIFJMQ19DTEVBUl9TVEFURV9E RVNDUklQVE9SX09GRlNFVCAgICAweDNECisKKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfc2V0X3Jp bmdfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOworc3RhdGljIHZvaWQgZ2Z4X3Y2 XzBfc2V0X2lycV9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdGF0aWMgdm9p ZCBnZnhfdjZfMF9nZXRfY3VfaW5mbyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CisKK01P RFVMRV9GSVJNV0FSRSgicmFkZW9uL3RhaGl0aV9wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUo InJhZGVvbi90YWhpdGlfbWUuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi90YWhpdGlf Y2UuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi90YWhpdGlfcmxjLmJpbiIpOworCitN T0RVTEVfRklSTVdBUkUoInJhZGVvbi9waXRjYWlybl9wZnAuYmluIik7CitNT0RVTEVfRklSTVdB UkUoInJhZGVvbi9waXRjYWlybl9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL3Bp dGNhaXJuX2NlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vcGl0Y2Fpcm5fcmxjLmJp biIpOworCitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi92ZXJkZV9wZnAuYmluIik7CitNT0RVTEVf RklSTVdBUkUoInJhZGVvbi92ZXJkZV9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9u L3ZlcmRlX2NlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vdmVyZGVfcmxjLmJpbiIp OworCitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9vbGFuZF9wZnAuYmluIik7CitNT0RVTEVfRklS TVdBUkUoInJhZGVvbi9vbGFuZF9tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL29s YW5kX2NlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vb2xhbmRfcmxjLmJpbiIpOwor CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9oYWluYW5fcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1X QVJFKCJyYWRlb24vaGFpbmFuX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vaGFp bmFuX2NlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vaGFpbmFuX3JsYy5iaW4iKTsK Kworc3RhdGljIHUzMiBnZnhfdjZfMF9nZXRfY3NiX3NpemUoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpOworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfZ2V0X2NzYl9idWZmZXIoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHZvbGF0aWxlIHUzMiAqYnVmZmVyKTsKKy8vc3RhdGljIHZvaWQgZ2Z4 X3Y2XzBfaW5pdF9jcF9wZ190YWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdGF0 aWMgdm9pZCBnZnhfdjZfMF9pbml0X3BnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKKwor CitzdGF0aWMgY29uc3QgdTMyIHZlcmRlX3JsY19zYXZlX3Jlc3RvcmVfcmVnaXN0ZXJfbGlzdFtd ID0KK3sKKwkoMHg4MDAwIDw8IDE2KSB8ICgweDk4ZjQgPj4gMiksCisJMHgwMDAwMDAwMCwKKwko MHg4MDQwIDw8IDE2KSB8ICgweDk4ZjQgPj4gMiksCisJMHgwMDAwMDAwMCwKKwkoMHg4MDAwIDw8 IDE2KSB8ICgweGU4MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwgKDB4 ZTgwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4ODAwMCA8PCAxNikgfCAoMHg4OWJjID4+IDIp LAorCTB4MDAwMDAwMDAsCisJKDB4ODA0MCA8PCAxNikgfCAoMHg4OWJjID4+IDIpLAorCTB4MDAw MDAwMDAsCisJKDB4ODAwMCA8PCAxNikgfCAoMHg4YzFjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJ KDB4ODA0MCA8PCAxNikgfCAoMHg4YzFjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8 PCAxNikgfCAoMHg5OGYwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAo MHhlN2MgPj4gMiksCisJMHgwMDAwMDAwMCwKKwkoMHg4MDAwIDw8IDE2KSB8ICgweDkxNDggPj4g MiksCisJMHgwMDAwMDAwMCwKKwkoMHg4MDQwIDw8IDE2KSB8ICgweDkxNDggPj4gMiksCisJMHgw MDAwMDAwMCwKKwkoMHg5YzAwIDw8IDE2KSB8ICgweDkxNTAgPj4gMiksCisJMHgwMDAwMDAwMCwK KwkoMHg5YzAwIDw8IDE2KSB8ICgweDg5N2MgPj4gMiksCisJMHgwMDAwMDAwMCwKKwkoMHg5YzAw IDw8IDE2KSB8ICgweDhkOGMgPj4gMiksCisJMHgwMDAwMDAwMCwKKwkoMHg5YzAwIDw8IDE2KSB8 ICgweGFjNTQgPj4gMiksCisJMFgwMDAwMDAwMCwKKwkweDMsCisJKDB4OWMwMCA8PCAxNikgfCAo MHg5OGY4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTEwID4+ IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTE0ID4+IDIpLAorCTB4 MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTE4ID4+IDIpLAorCTB4MDAwMDAwMDAs CisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTFjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMw MCA8PCAxNikgfCAoMHg5OTIwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikg fCAoMHg5OTI0ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTI4 ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTJjID4+IDIpLAor CTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTMwID4+IDIpLAorCTB4MDAwMDAw MDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTM0ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4 OWMwMCA8PCAxNikgfCAoMHg5OTM4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAx NikgfCAoMHg5OTNjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5 OTQwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTQ0ID4+IDIp LAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTQ4ID4+IDIpLAorCTB4MDAw MDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTRjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJ KDB4OWMwMCA8PCAxNikgfCAoMHg5OTUwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8 PCAxNikgfCAoMHg5OTU0ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAo MHg5OTU4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTVjID4+ IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTYwID4+IDIpLAorCTB4 MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTY0ID4+IDIpLAorCTB4MDAwMDAwMDAs CisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTY4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMw MCA8PCAxNikgfCAoMHg5OTZjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikg fCAoMHg5OTcwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTc0 ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTc4ID4+IDIpLAor CTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTdjID4+IDIpLAorCTB4MDAwMDAw MDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5OTgwID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4 OWMwMCA8PCAxNikgfCAoMHg5OTg0ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAx NikgfCAoMHg5OTg4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg5 OThjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg4YzAwID4+IDIp LAorCTB4MDAwMDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg4YzE0ID4+IDIpLAorCTB4MDAw MDAwMDAsCisJKDB4OWMwMCA8PCAxNikgfCAoMHg4YzA0ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJ KDB4OWMwMCA8PCAxNikgfCAoMHg4YzA4ID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4ODAwMCA8 PCAxNikgfCAoMHg5YjdjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4ODA0MCA8PCAxNikgfCAo MHg5YjdjID4+IDIpLAorCTB4MDAwMDAwMDAsCisJKDB4ODAwMCA8PCAxNikgfCAoMHhlODQgPj4g MiksCisJMHgwMDAwMDAwMCwKKwkoMHg4MDQwIDw8IDE2KSB8ICgweGU4NCA+PiAyKSwKKwkweDAw MDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4ODljMCA+PiAyKSwKKwkweDAwMDAwMDAwLAor CSgweDgwNDAgPDwgMTYpIHwgKDB4ODljMCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwMDAg PDwgMTYpIHwgKDB4OTE0YyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwg KDB4OTE0YyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OGMyMCA+ PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwgKDB4OGMyMCA+PiAyKSwKKwkw eDAwMDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OTM1NCA+PiAyKSwKKwkweDAwMDAwMDAw LAorCSgweDgwNDAgPDwgMTYpIHwgKDB4OTM1NCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDlj MDAgPDwgMTYpIHwgKDB4OTA2MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYp IHwgKDB4OTM2NCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OTEw MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OTEzYyA+PiAyKSwK KwkweDAwMDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OTBlMCA+PiAyKSwKKwkweDAwMDAw MDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OTBlNCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgw eDgwMDAgPDwgMTYpIHwgKDB4OTBlOCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwg MTYpIHwgKDB4OTBlMCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwgKDB4 OTBlNCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwgKDB4OTBlOCA+PiAy KSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGJjYyA+PiAyKSwKKwkweDAw MDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGIyNCA+PiAyKSwKKwkweDAwMDAwMDAwLAor CSgweDljMDAgPDwgMTYpIHwgKDB4ODhjNCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAg PDwgMTYpIHwgKDB4OGU1MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwg KDB4OGMwYyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGU1OCA+ PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGU1YyA+PiAyKSwKKwkw eDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OTUwOCA+PiAyKSwKKwkweDAwMDAwMDAw LAorCSgweDljMDAgPDwgMTYpIHwgKDB4OTUwYyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDlj MDAgPDwgMTYpIHwgKDB4OTQ5NCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYp IHwgKDB4YWMwYyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4YWMx MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4YWMxNCA+PiAyKSwK KwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4YWUwMCA+PiAyKSwKKwkweDAwMDAw MDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4YWMwOCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgw eDljMDAgPDwgMTYpIHwgKDB4ODhkNCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwg MTYpIHwgKDB4ODhjOCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4 ODhjYyA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4ODliMCA+PiAy KSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGIxMCA+PiAyKSwKKwkweDAw MDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OGExNCA+PiAyKSwKKwkweDAwMDAwMDAwLAor CSgweDljMDAgPDwgMTYpIHwgKDB4OTgzMCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAg PDwgMTYpIHwgKDB4OTgzNCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwg KDB4OTgzOCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDljMDAgPDwgMTYpIHwgKDB4OWExMCA+ PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OTg3MCA+PiAyKSwKKwkw eDAwMDAwMDAwLAorCSgweDgwMDAgPDwgMTYpIHwgKDB4OTg3NCA+PiAyKSwKKwkweDAwMDAwMDAw LAorCSgweDgwMDEgPDwgMTYpIHwgKDB4OTg3MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgw MDEgPDwgMTYpIHwgKDB4OTg3NCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYp IHwgKDB4OTg3MCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDAgPDwgMTYpIHwgKDB4OTg3 NCA+PiAyKSwKKwkweDAwMDAwMDAwLAorCSgweDgwNDEgPDwgMTYpIHwgKDB4OTg3MCA+PiAyKSwK KwkweDAwMDAwMDAwLAorCSgweDgwNDEgPDwgMTYpIHwgKDB4OTg3NCA+PiAyKSwKKwkweDAwMDAw MDAwLAorCTB4MDAwMDAwMDAKK307CisKK3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfaW5pdF9taWNyb2Nv ZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJY29uc3QgY2hhciAqY2hpcF9uYW1l OworCWNoYXIgZndfbmFtZVszMF07CisJaW50IGVycjsKKworCURSTV9ERUJVRygiXG4iKTsKKwor CXN3aXRjaCAoYWRldi0+YXNpY190eXBlKSB7CisJY2FzZSBDSElQX1RBSElUSToKKwkJY2hpcF9u YW1lID0gInRhaGl0aSI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9QSVRDQUlSTjoKKwkJY2hpcF9u YW1lID0gInBpdGNhaXJuIjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1ZFUkRFOgorCQljaGlwX25h bWUgPSAidmVyZGUiOworCQlicmVhazsKKwljYXNlIENISVBfT0xBTkQ6CisJCWNoaXBfbmFtZSA9 ICJvbGFuZCI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9IQUlOQU46CisJCWNoaXBfbmFtZSA9ICJo YWluYW4iOworCQlicmVhazsKKwlkZWZhdWx0OiBCVUcoKTsKKwl9CisKKwlzbnByaW50Zihmd19u YW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfcGZwLmJpbiIsIGNoaXBfbmFtZSk7CisJ ZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYWRldi0+Z2Z4LnBmcF9mdywgZndfbmFtZSwgYWRldi0+ ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwllcnIgPSBhbWRncHVfdWNvZGVfdmFsaWRh dGUoYWRldi0+Z2Z4LnBmcF9mdyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzbnByaW50 Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfbWUuYmluIiwgY2hpcF9uYW1l KTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZhZGV2LT5nZngubWVfZncsIGZ3X25hbWUsIGFk ZXYtPmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJZXJyID0gYW1kZ3B1X3Vjb2RlX3Zh bGlkYXRlKGFkZXYtPmdmeC5tZV9mdyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzbnBy aW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfY2UuYmluIiwgY2hpcF9u YW1lKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZhZGV2LT5nZnguY2VfZncsIGZ3X25hbWUs IGFkZXYtPmRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJZXJyID0gYW1kZ3B1X3Vjb2Rl X3ZhbGlkYXRlKGFkZXYtPmdmeC5jZV9mdyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlz bnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJyYWRlb24vJXNfcmxjLmJpbiIsIGNo aXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYWRldi0+Z2Z4LnJsY19mdywgZndf bmFtZSwgYWRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwllcnIgPSBhbWRncHVf dWNvZGVfdmFsaWRhdGUoYWRldi0+Z2Z4LnJsY19mdyk7CisKK291dDoKKwlpZiAoZXJyKSB7CisJ CXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImdmeDY6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJl IFwiJXNcIlxuIiwKKwkJICAgICAgIGZ3X25hbWUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGFkZXYt PmdmeC5wZnBfZncpOworCQlhZGV2LT5nZngucGZwX2Z3ID0gTlVMTDsKKwkJcmVsZWFzZV9maXJt d2FyZShhZGV2LT5nZngubWVfZncpOworCQlhZGV2LT5nZngubWVfZncgPSBOVUxMOworCQlyZWxl YXNlX2Zpcm13YXJlKGFkZXYtPmdmeC5jZV9mdyk7CisJCWFkZXYtPmdmeC5jZV9mdyA9IE5VTEw7 CisJCXJlbGVhc2VfZmlybXdhcmUoYWRldi0+Z2Z4LnJsY19mdyk7CisJCWFkZXYtPmdmeC5ybGNf ZncgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF90 aWxpbmdfbW9kZV90YWJsZV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWNv bnN0IHUzMiBudW1fdGlsZV9tb2RlX3N0YXRlcyA9IDMyOworCXUzMiByZWdfb2Zmc2V0LCBnYl90 aWxlX21vZGVuLCBzcGxpdF9lcXVhbF90b19yb3dfc2l6ZTsKKworCXN3aXRjaCAoYWRldi0+Z2Z4 LmNvbmZpZy5tZW1fcm93X3NpemVfaW5fa2IpIHsKKwljYXNlIDE6CisJCXNwbGl0X2VxdWFsX3Rv X3Jvd19zaXplID0gQUREUl9TVVJGX1RJTEVfU1BMSVRfMUtCOworCQlicmVhazsKKwljYXNlIDI6 CisJZGVmYXVsdDoKKwkJc3BsaXRfZXF1YWxfdG9fcm93X3NpemUgPSBBRERSX1NVUkZfVElMRV9T UExJVF8yS0I7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJc3BsaXRfZXF1YWxfdG9fcm93X3NpemUg PSBBRERSX1NVUkZfVElMRV9TUExJVF80S0I7CisJCWJyZWFrOworCX0KKworCWlmIChhZGV2LT5h c2ljX3R5cGUgPT0gQ0hJUF9WRVJERSB8fAorCQlhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9PTEFO RCB8fAorCQlhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9IQUlOQU4pIHsKKwkJZm9yIChyZWdfb2Zm c2V0ID0gMDsgcmVnX29mZnNldCA8IG51bV90aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0Kysp IHsKKwkJCXN3aXRjaCAocmVnX29mZnNldCkgeworCQkJY2FzZSAwOgorCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJ TEVfTU9ERShBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05G SUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxF X1NQTElUXzY0QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJ CQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJ R0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1Qo QUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6IAorCQkJ CWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJ CQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8CisJCQkJ CQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFE RFJfU1VSRl9USUxFX1NQTElUXzEyOEIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2 X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJ CQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAorCQkJCQkJIE1BQ1JP X1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAyOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9U SElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfREVQVEhfTUlDUk9fVElM SU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKKwkJCQkJCSBU SUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpIHwKKwkJCQkJCSBOVU1fQkFOS1Mo QUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJ RFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAor CQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkpOworCQkJ CWJyZWFrOworCQkJY2FzZSAzOiAgCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFS UkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9E RVBUSF9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgx NikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMTI4QikgfAorCQkJ CQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQURE Ul9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5L X0hFSUdIVF80KSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FT UEVDVF80KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6ICAKKwkJCQlnYl90aWxlX21vZGVuID0g KEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01P REUoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QNF84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJ VF82NEIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBC QU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChB RERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJf U1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSA1OiAgCisJCQkJZ2Jf dGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkg TUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRf ZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTksp IHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJTEVf QVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSA2 OiAgCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4x KSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcp IHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAorCQkJCQkJIFRJTEVf U1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9T VVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEp IHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJ IE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFr OworCQkJY2FzZSA3OiAgCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJE X1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9N SUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAor CQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJCQkJCSBOVU1f QkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9C QU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRf NCkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkp OworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01P REUoQVJSQVlfTElORUFSX0FMSUdORUQpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9T VVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJG X1A0Xzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzY0Qikg fAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lE VEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VS Rl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01B Q1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDk6ICAKKwkJCQlnYl90aWxlX21v ZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19U SUxFX01PREUoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9D T05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9U SUxFX1NQTElUXzY0QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAor CQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BF Q1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDEwOiAg CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8 CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykg fAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8CisJCQkJCQkgVElMRV9T UExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSB8CisJCQkJCQkgTlVNX0JBTktTKEFERFJf U1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8x KSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJ CSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgMTE6ICAKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlf MkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX0RJU1BM QVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYp IHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpIHwKKwkJCQkJ CSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJf U1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19I RUlHSFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BF Q1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAxMjogIAorCQkJCWdiX3RpbGVfbW9kZW4gPSAo QVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9E RShBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhB RERSX1NVUkZfUDRfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BM SVRfNTEyQikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJ IEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQURE Ul9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDEzOiAgCisJCQkJ Z2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8CisJCQkJ CQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJ IFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERS X1NVUkZfVElMRV9TUExJVF82NEIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JB TkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJ CSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJ TEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2Fz ZSAxNDogIAorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9U SElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfVEhJTl9NSUNST19USUxJ TkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAorCQkJCQkJIFRJ TEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikgfAorCQkJCQkJIE5VTV9CQU5LUyhB RERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lE VEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8CisJ CQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJ YnJlYWs7CisJCQljYXNlIDE1OiAgCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFS UkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9U SElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2 KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSB8CisJCQkJ CQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERS X1NVUkZfQkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktf SEVJR0hUXzIpIHwKKwkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQ RUNUXzIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6ICAKKwkJCQlnYl90aWxlX21vZGVuID0g KEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01P REUoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1A0Xzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElU XzUxMkIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBC QU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChB RERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJf U1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNzogIAorCQkJCWdi X3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJ IE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRf ZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTksp IHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJIE1BQ1JPX1RJTEVf QVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAy MTogIAorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElO MSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcp IHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJ IFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikgfAorCQkJCQkJIE5VTV9CQU5L UyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktf V0lEVEhfMikgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8 CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIDIyOiAgCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VS Rl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8z MngzMl84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZC KSB8CisJCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19X SURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9T VVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZf TUFDUk9fQVNQRUNUXzQpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjM6IAorCQkJCWdiX3RpbGVf bW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JP X1RJTEVfTU9ERShBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NP TkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9T VVJGX1RJTEVfU1BMSVRfMjU2QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFO SykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJ IEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQkgTUFDUk9fVElM RV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNl IDI0OiAKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJ TjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5H KSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJ CSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzUxMkIpIHwKKwkJCQkJCSBOVU1fQkFO S1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5L X1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkg fAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOwor CQkJCWJyZWFrOworCQkJY2FzZSAyNTogCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VS Rl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8z MngzMl84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8xS0Ip IHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykgfAorCQkJCQkJIEJBTktfV0lE VEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VS Rl9CQU5LX0hFSUdIVF8xKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01B Q1JPX0FTUEVDVF8xKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdiX3RpbGVfbW9k ZW4gPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJYWRldi0+Z2Z4LmNvbmZpZy50aWxlX21vZGVf YXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21vZGVuOworCQkJV1JFRzMyKEdCX1RJTEVfTU9E RTAgKyByZWdfb2Zmc2V0LCBnYl90aWxlX21vZGVuKTsKKwkJfQorCX0gZWxzZSBpZiAoKGFkZXYt PmFzaWNfdHlwZSA9PSBDSElQX1RBSElUSSkgfHwgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BJ VENBSVJOKSkgeworCQlmb3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3RpbGVf bW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykgeworCQkJc3dpdGNoIChyZWdfb2Zmc2V0KSB7CisJ CQljYXNlIDA6ICAvKiBub24tQUEgY29tcHJlc3NlZCBkZXB0aCBvciBhbnkgY29tcHJlc3NlZCBz dGVuY2lsICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVE X1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9NSUNST19U SUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAor CQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSB8CisJCQkJCQkgTlVN X0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hU XzQpIHwKKwkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIp KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTogIC8qIDJ4QUEvNHhBQSBjb21wcmVzc2VkIGRlcHRo IG9ubHkgKi8KKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURf VEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJ TElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJ CQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8xMjhCKSB8CisJCQkJCQkgTlVN X0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hU XzQpIHwKKwkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIp KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogIC8qIDh4QUEgY29tcHJlc3NlZCBkZXB0aCBvbmx5 ICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4x KSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcp IHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJ IFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikgfAorCQkJCQkJIE5VTV9CQU5L UyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktf V0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8 CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIDM6ICAvKiAyeEFBLzR4QUEgY29tcHJlc3NlZCBkZXB0aCB3aXRo IHN0ZW5jaWwgKGZvciBkZXB0aCBidWZmZXIpICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJB WV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFE RFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NV UkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BM SVRfMTI4QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJ IEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQURE Ul9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6ICAvKiBNYXBz IHcvIGEgZGltZW5zaW9uIGxlc3MgdGhhbiB0aGUgMkQgbWFjcm8tdGlsZSBkaW1lbnNpb25zIChm b3IgbWlwbWFwcGVkIGRlcHRoIHRleHR1cmVzKSAqLworCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJS QVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShB RERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9T VVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQ TElUXzY0QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJ IEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQURE Ul9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDU6ICAvKiBVbmNv bXByZXNzZWQgMTZicHAgZGVwdGggLSBhbmQgc3RlbmNpbCBidWZmZXIgYWxsb2NhdGVkIHdpdGgg aXQgKi8KKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJ TjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElO RykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJCQkJ CQkgVElMRV9TUExJVChzcGxpdF9lcXVhbF90b19yb3dfc2l6ZSkgfAorCQkJCQkJIE5VTV9CQU5L UyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktf V0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8 CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIDY6ICAvKiBVbmNvbXByZXNzZWQgMzJicHAgZGVwdGggLSBhbmQg c3RlbmNpbCBidWZmZXIgYWxsb2NhdGVkIHdpdGggaXQgKi8KKwkJCQlnYl90aWxlX21vZGVuID0g KEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01P REUoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChzcGxpdF9lcXVhbF90 b19yb3dfc2l6ZSkgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJ CQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJ R0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1Qo QUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6ICAvKiBV bmNvbXByZXNzZWQgOGJwcCBzdGVuY2lsIHdpdGhvdXQgZGVwdGggKGRyaXZlcnMgdHlwaWNhbGx5 IGRvIG5vdCB1c2UpICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJE X1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ERVBUSF9N SUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgx NikgfAorCQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJCQkJ CSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJf U1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19I RUlHSFRfNCkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BF Q1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAgLyogMUQgYW5kIDFEIEFycmF5IFN1cmZh Y2VzICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX0xJTkVBUl9BTElH TkVEKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJ TElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJ CQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF82NEIpIHwKKwkJCQkJCSBOVU1f QkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9C QU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRf MikgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikp OworCQkJCWJyZWFrOworCQkJY2FzZSA5OiAgLyogRGlzcGxheWFibGUgbWFwcy4gKi8KKwkJCQln Yl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKKwkJCQkJ CSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJ CQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQ TElUKEFERFJfU1VSRl9USUxFX1NQTElUXzY0QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NV UkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkg fAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQkg TUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7 CisJCQljYXNlIDEwOiAgLyogRGlzcGxheSA4YnBwLiAqLworCQkJCWdiX3RpbGVfbW9kZW4gPSAo QVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9E RShBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhB RERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJ TEVfU1BMSVRfMjU2QikgfAorCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAor CQkJCQkJIEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BF Q1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDExOiAg LyogRGlzcGxheSAxNmJwcC4gKi8KKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJS QVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX0RJ U1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMy eDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIp IHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJ RFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NV UkZfQkFOS19IRUlHSFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9N QUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAxMjogIC8qIERpc3BsYXkgMzJi cHAuICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RI SU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJ TElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJ CQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF81MTJCKSB8CisJCQkJCQkgTlVN X0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hU XzEpIHwKKwkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEp KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTM6ICAvKiBUaGluLiAqLworCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJ TEVfTU9ERShBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJ RyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJG X1RJTEVfU1BMSVRfNjRCKSB8CisJCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSB8 CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8CisJCQkJCQkgQkFO S19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKKwkJCQkJCSBNQUNST19USUxFX0FT UEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTQ6 ICAvKiBUaGluIDggYnBwLiAqLworCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJB WV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfVEhJ Tl9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJf OHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikgfAor CQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykgfAorCQkJCQkJIEJBTktfV0lEVEgo QUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9C QU5LX0hFSUdIVF80KSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JP X0FTUEVDVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE1OiAgLyogVGhpbiAxNiBicHAuICov CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8 CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAor CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl84eDE2KSB8CisJCQkJCQkgVElM RV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSB8CisJCQkJCQkgTlVNX0JBTktTKEFE RFJfU1VSRl8xNl9CQU5LKSB8CisJCQkJCQkgQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURU SF8xKSB8CisJCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKKwkJ CQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgMTY6ICAvKiBUaGluIDMyIGJwcC4gKi8KKwkJCQlnYl90aWxlX21vZGVu ID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxF X01PREUoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUco QUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9U SUxFX1NQTElUXzUxMkIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwK KwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5L X0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQ RUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNzog IC8qIFRoaW4gNjQgYnBwLiAqLworCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJB WV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERShBRERSX1NVUkZfVEhJ Tl9NSUNST19USUxJTkcpIHwKKwkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJf OHgxNikgfAorCQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpIHwKKwkJ CQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFE RFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFO S19IRUlHSFRfMSkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19B U1BFQ1RfMSkpOworCQkJCWJyZWFrOworCQkJY2FzZSAyMTogIC8qIDggYnBwIFBSVC4gKi8KKwkJ CQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJ CQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJ CQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQ TElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9T VVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzIp IHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAorCQkJCQkJ IE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFr OworCQkJY2FzZSAyMjogIC8qIDE2IGJwcCBQUlQgKi8KKwkJCQlnYl90aWxlX21vZGVuID0gKEFS UkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUo QUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9T VVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQ TElUXzI1NkIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJ CSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdI VChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFE RFJfU1VSRl9NQUNST19BU1BFQ1RfNCkpOworCQkJCWJyZWFrOworCQkJY2FzZSAyMzogIC8qIDMy IGJwcCBQUlQgKi8KKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElM RURfVEhJTjEpIHwKKwkJCQkJCSBNSUNST19USUxFX01PREUoQUREUl9TVVJGX1RISU5fTUlDUk9f VElMSU5HKSB8CisJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwK KwkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpIHwKKwkJCQkJCSBO VU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VS Rl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlH SFRfMikgfAorCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf MikpOworCQkJCWJyZWFrOworCQkJY2FzZSAyNDogIC8qIDY0IGJwcCBQUlQgKi8KKwkJCQlnYl90 aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCSBN SUNST19USUxFX01PREUoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQkgUElQ RV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKKwkJCQkJCSBUSUxFX1NQTElUKEFE RFJfU1VSRl9USUxFX1NQTElUXzUxMkIpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2 X0JBTkspIHwKKwkJCQkJCSBCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJ CQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJIE1BQ1JP X1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAyNTogIC8qIDEyOCBicHAgUFJUICovCisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9N T0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQkgTUlDUk9fVElMRV9NT0RFKEFERFJf U1VSRl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9Q OF8zMngzMl84eDE2KSB8CisJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8x S0IpIHwKKwkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykgfAorCQkJCQkJIEJBTktf V0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJIEJBTktfSEVJR0hUKEFERFJf U1VSRl9CQU5LX0hFSUdIVF8xKSB8CisJCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJG X01BQ1JPX0FTUEVDVF8xKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdiX3RpbGVf bW9kZW4gPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJYWRldi0+Z2Z4LmNvbmZpZy50aWxlX21v ZGVfYXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21vZGVuOworCQkJV1JFRzMyKEdCX1RJTEVf TU9ERTAgKyAocmVnX29mZnNldCAqIDQpLCBnYl90aWxlX21vZGVuKTsKKwkJfQorCX0gZWxzZXsK KworCQlEUk1fRVJST1IoInVua25vd24gYXNpYzogMHgleFxuIiwgYWRldi0+YXNpY190eXBlKTsK Kwl9CisKK30KKwordm9pZCBnZnhfdjZfMF9zZWxlY3Rfc2Vfc2goc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHUzMiBzZV9udW0sIHUzMiBzaF9udW0pCit7CisJdTMyIGRhdGEgPSBJTlNUQU5D RV9CUk9BRENBU1RfV1JJVEVTOworCisJaWYgKChzZV9udW0gPT0gMHhmZmZmZmZmZikgJiYgKHNo X251bSA9PSAweGZmZmZmZmZmKSkKKwkJZGF0YSB8PSBTSF9CUk9BRENBU1RfV1JJVEVTIHwgU0Vf QlJPQURDQVNUX1dSSVRFUzsKKwllbHNlIGlmIChzZV9udW0gPT0gMHhmZmZmZmZmZikKKwkJZGF0 YSB8PSBTRV9CUk9BRENBU1RfV1JJVEVTIHwgU0hfSU5ERVgoc2hfbnVtKTsKKwllbHNlIGlmIChz aF9udW0gPT0gMHhmZmZmZmZmZikKKwkJZGF0YSB8PSBTSF9CUk9BRENBU1RfV1JJVEVTIHwgU0Vf SU5ERVgoc2VfbnVtKTsKKwllbHNlCisJCWRhdGEgfD0gU0hfSU5ERVgoc2hfbnVtKSB8IFNFX0lO REVYKHNlX251bSk7CisJV1JFRzMyKEdSQk1fR0ZYX0lOREVYLCBkYXRhKTsKK30KKworc3RhdGlj IHUzMiBnZnhfdjZfMF9jcmVhdGVfYml0bWFzayh1MzIgYml0X3dpZHRoKQoreworCXUzMiBpLCBt YXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBiaXRfd2lkdGg7IGkrKykgeworCQltYXNrIDw8 PSAxOworCQltYXNrIHw9IDE7CisJfQorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdTMyIGdm eF92Nl8wX2dldF9yYl9kaXNhYmxlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkg ICAgdTMyIG1heF9yYl9udW1fcGVyX3NlLAorCQkJCSAgICB1MzIgc2hfcGVyX3NlKQoreworCXUz MiBkYXRhLCBtYXNrOworCisJZGF0YSA9IFJSRUczMihDQ19SQl9CQUNLRU5EX0RJU0FCTEUpOwor CWRhdGEgJj0gQkFDS0VORF9ESVNBQkxFX01BU0s7CisJZGF0YSB8PSBSUkVHMzIoR0NfVVNFUl9S Ql9CQUNLRU5EX0RJU0FCTEUpOworCisJZGF0YSA+Pj0gQkFDS0VORF9ESVNBQkxFX1NISUZUOwor CisJbWFzayA9IGdmeF92Nl8wX2NyZWF0ZV9iaXRtYXNrKG1heF9yYl9udW1fcGVyX3NlIC8gc2hf cGVyX3NlKTsKKworCXJldHVybiBkYXRhICYgbWFzazsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2 XzBfc2V0dXBfcmIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgICB1MzIgc2Vf bnVtLCB1MzIgc2hfcGVyX3NlLAorCQkJICAgICAgdTMyIG1heF9yYl9udW1fcGVyX3NlKQorewor CWludCBpLCBqOworCXUzMiBkYXRhLCBtYXNrOworCXUzMiBkaXNhYmxlZF9yYnMgPSAwOworCXUz MiBlbmFibGVkX3JicyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VfbnVtOyBpKyspIHsKKwkJ Zm9yIChqID0gMDsgaiA8IHNoX3Blcl9zZTsgaisrKSB7CisJCQlnZnhfdjZfMF9zZWxlY3Rfc2Vf c2goYWRldiwgaSwgaik7CisJCQlkYXRhID0gZ2Z4X3Y2XzBfZ2V0X3JiX2Rpc2FibGVkKGFkZXYs IG1heF9yYl9udW1fcGVyX3NlLCBzaF9wZXJfc2UpOworCQkJZGlzYWJsZWRfcmJzIHw9IGRhdGEg PDwgKChpICogc2hfcGVyX3NlICsgaikgKiBUQUhJVElfUkJfQklUTUFQX1dJRFRIX1BFUl9TSCk7 CisJCX0KKwl9CisJZ2Z4X3Y2XzBfc2VsZWN0X3NlX3NoKGFkZXYsIDB4ZmZmZmZmZmYsIDB4ZmZm ZmZmZmYpOworCisJbWFzayA9IDE7CisJZm9yIChpID0gMDsgaSA8IG1heF9yYl9udW1fcGVyX3Nl ICogc2VfbnVtOyBpKyspIHsKKwkJaWYgKCEoZGlzYWJsZWRfcmJzICYgbWFzaykpCisJCQllbmFi bGVkX3JicyB8PSBtYXNrOworCQltYXNrIDw8PSAxOworCX0KKworCWFkZXYtPmdmeC5jb25maWcu YmFja2VuZF9lbmFibGVfbWFzayA9IGVuYWJsZWRfcmJzOworCURSTV9JTkZPKCJhbWRncHU6IGVu YWJsZWRfcmJzICVkIFxuIiwgZW5hYmxlZF9yYnMpOworCisJZm9yIChpID0gMDsgaSA8IHNlX251 bTsgaSsrKSB7CisJCWdmeF92Nl8wX3NlbGVjdF9zZV9zaChhZGV2LCBpLCAweGZmZmZmZmZmKTsK KwkJZGF0YSA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBzaF9wZXJfc2U7IGorKykgeworCQkJc3dp dGNoIChlbmFibGVkX3JicyAmIDMpIHsKKwkJCWNhc2UgMToKKwkJCQlkYXRhIHw9IChSQVNURVJf Q09ORklHX1JCX01BUF8wIDw8IChpICogc2hfcGVyX3NlICsgaikgKiAyKTsKKwkJCQlicmVhazsK KwkJCWNhc2UgMjoKKwkJCQlkYXRhIHw9IChSQVNURVJfQ09ORklHX1JCX01BUF8zIDw8IChpICog c2hfcGVyX3NlICsgaikgKiAyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCWRlZmF1bHQ6 CisJCQkJZGF0YSB8PSAoUkFTVEVSX0NPTkZJR19SQl9NQVBfMiA8PCAoaSAqIHNoX3Blcl9zZSAr IGopICogMik7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbmFibGVkX3JicyA+Pj0gMjsKKwkJfQor CQlXUkVHMzIoUEFfU0NfUkFTVEVSX0NPTkZJRywgZGF0YSk7CisJfQorCWdmeF92Nl8wX3NlbGVj dF9zZV9zaChhZGV2LCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKK30KKy8qCitzdGF0aWMgdm9p ZCBnbWNfdjZfMF9pbml0X2NvbXB1dGVfdm1pZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK K3sKK30KKyovCisKK3N0YXRpYyB1MzIgZ2Z4X3Y2XzBfZ2V0X2N1X2VuYWJsZWQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsIHUzMiBjdV9wZXJfc2gpCit7CisJdTMyIGRhdGEsIG1hc2s7CisK KwlkYXRhID0gUlJFRzMyKENDX0dDX1NIQURFUl9BUlJBWV9DT05GSUcpOworCWRhdGEgJj0gSU5B Q1RJVkVfQ1VTX01BU0s7CisJZGF0YSB8PSBSUkVHMzIoR0NfVVNFUl9TSEFERVJfQVJSQVlfQ09O RklHKTsKKworCWRhdGEgPj49IElOQUNUSVZFX0NVU19TSElGVDsKKworCW1hc2sgPSBnZnhfdjZf MF9jcmVhdGVfYml0bWFzayhjdV9wZXJfc2gpOworCisJcmV0dXJuIH5kYXRhICYgbWFzazsKK30K KworCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9zZXR1cF9zcGkoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCisJCQkgdTMyIHNlX251bSwgdTMyIHNoX3Blcl9zZSwKKwkJCSB1MzIgY3VfcGVyX3No KQoreworCWludCBpLCBqLCBrOworCXUzMiBkYXRhLCBtYXNrOworCXUzMiBhY3RpdmVfY3UgPSAw OworCisJZm9yIChpID0gMDsgaSA8IHNlX251bTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBz aF9wZXJfc2U7IGorKykgeworCQkJZ2Z4X3Y2XzBfc2VsZWN0X3NlX3NoKGFkZXYsIGksIGopOwor CQkJZGF0YSA9IFJSRUczMihTUElfU1RBVElDX1RIUkVBRF9NR01UXzMpOworCQkJYWN0aXZlX2N1 ID0gZ2Z4X3Y2XzBfZ2V0X2N1X2VuYWJsZWQoYWRldiwgY3VfcGVyX3NoKTsKKworCQkJbWFzayA9 IDE7CisJCQlmb3IgKGsgPSAwOyBrIDwgMTY7IGsrKykgeworCQkJCW1hc2sgPDw9IGs7CisJCQkJ aWYgKGFjdGl2ZV9jdSAmIG1hc2spIHsKKwkJCQkJZGF0YSAmPSB+bWFzazsKKwkJCQkJV1JFRzMy KFNQSV9TVEFUSUNfVEhSRUFEX01HTVRfMywgZGF0YSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKwkJfQorCX0KKwlEUk1fSU5GTygiYW1kZ3B1OiBzZXR1cF9zcGktLWFjdGl2ZV9jdSAlZCBc biIsIGFjdGl2ZV9jdSk7CisJZ2Z4X3Y2XzBfc2VsZWN0X3NlX3NoKGFkZXYsIDB4ZmZmZmZmZmYs IDB4ZmZmZmZmZmYpOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9ncHVfaW5pdChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1MzIgZ2JfYWRkcl9jb25maWcgPSAwOworCXUzMiBt Y19zaGFyZWRfY2htYXAsIG1jX2FyYl9yYW1jZmc7CisJdTMyIHN4X2RlYnVnXzE7CisJdTMyIGhk cF9ob3N0X3BhdGhfY250bDsKKwl1MzIgdG1wOworCisJc3dpdGNoIChhZGV2LT5hc2ljX3R5cGUp IHsKKwljYXNlIENISVBfVEFISVRJOgorCQlhZGV2LT5nZnguY29uZmlnLm1heF9zaGFkZXJfZW5n aW5lcyA9IDI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X3RpbGVfcGlwZXMgPSAxMjsKKwkJYWRl di0+Z2Z4LmNvbmZpZy5tYXhfY3VfcGVyX3NoID0gODsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhf c2hfcGVyX3NlID0gMjsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfYmFja2VuZHNfcGVyX3NlID0g NDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfdGV4dHVyZV9jaGFubmVsX2NhY2hlcyA9IDEyOwor CQlhZGV2LT5nZnguY29uZmlnLm1heF9ncHJzID0gMjU2OworCQlhZGV2LT5nZnguY29uZmlnLm1h eF9nc190aHJlYWRzID0gMzI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2h3X2NvbnRleHRzID0g ODsKKworCQlhZGV2LT5nZnguY29uZmlnLnNjX3ByaW1fZmlmb19zaXplX2Zyb250ZW5kID0gMHgy MDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5zY19wcmltX2ZpZm9fc2l6ZV9iYWNrZW5kID0gMHgxMDA7 CisJCWFkZXYtPmdmeC5jb25maWcuc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJYWRl di0+Z2Z4LmNvbmZpZy5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJZ2JfYWRk cl9jb25maWcgPSBUQUhJVElfR0JfQUREUl9DT05GSUdfR09MREVOOworCQlicmVhazsKKwljYXNl IENISVBfUElUQ0FJUk46CisJCWFkZXYtPmdmeC5jb25maWcubWF4X3NoYWRlcl9lbmdpbmVzID0g MjsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfdGlsZV9waXBlcyA9IDg7CisJCWFkZXYtPmdmeC5j b25maWcubWF4X2N1X3Blcl9zaCA9IDU7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X3NoX3Blcl9z ZSA9IDI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2JhY2tlbmRzX3Blcl9zZSA9IDQ7CisJCWFk ZXYtPmdmeC5jb25maWcubWF4X3RleHR1cmVfY2hhbm5lbF9jYWNoZXMgPSA4OworCQlhZGV2LT5n ZnguY29uZmlnLm1heF9ncHJzID0gMjU2OworCQlhZGV2LT5nZnguY29uZmlnLm1heF9nc190aHJl YWRzID0gMzI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2h3X2NvbnRleHRzID0gODsKKworCQlh ZGV2LT5nZnguY29uZmlnLnNjX3ByaW1fZmlmb19zaXplX2Zyb250ZW5kID0gMHgyMDsKKwkJYWRl di0+Z2Z4LmNvbmZpZy5zY19wcmltX2ZpZm9fc2l6ZV9iYWNrZW5kID0gMHgxMDA7CisJCWFkZXYt PmdmeC5jb25maWcuc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJYWRldi0+Z2Z4LmNv bmZpZy5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJZ2JfYWRkcl9jb25maWcg PSBUQUhJVElfR0JfQUREUl9DT05GSUdfR09MREVOOworCQlicmVhazsKKworCWNhc2UgQ0hJUF9W RVJERToKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfc2hhZGVyX2VuZ2luZXMgPSAxOworCQlhZGV2 LT5nZnguY29uZmlnLm1heF90aWxlX3BpcGVzID0gNDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhf Y3VfcGVyX3NoID0gNTsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfc2hfcGVyX3NlID0gMjsKKwkJ YWRldi0+Z2Z4LmNvbmZpZy5tYXhfYmFja2VuZHNfcGVyX3NlID0gNDsKKwkJYWRldi0+Z2Z4LmNv bmZpZy5tYXhfdGV4dHVyZV9jaGFubmVsX2NhY2hlcyA9IDQ7CisJCWFkZXYtPmdmeC5jb25maWcu bWF4X2dwcnMgPSAyNTY7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2dzX3RocmVhZHMgPSAzMjsK KwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfaHdfY29udGV4dHMgPSA4OworCisJCWFkZXYtPmdmeC5j b25maWcuc2NfcHJpbV9maWZvX3NpemVfZnJvbnRlbmQgPSAweDIwOworCQlhZGV2LT5nZnguY29u ZmlnLnNjX3ByaW1fZmlmb19zaXplX2JhY2tlbmQgPSAweDQwOworCQlhZGV2LT5nZnguY29uZmln LnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCWFkZXYtPmdmeC5jb25maWcuc2NfZWFy bHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7CisJCWdiX2FkZHJfY29uZmlnID0gVkVSREVfR0Jf QUREUl9DT05GSUdfR09MREVOOworCQlicmVhazsKKwljYXNlIENISVBfT0xBTkQ6CisJCWFkZXYt PmdmeC5jb25maWcubWF4X3NoYWRlcl9lbmdpbmVzID0gMTsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5t YXhfdGlsZV9waXBlcyA9IDQ7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2N1X3Blcl9zaCA9IDY7 CisJCWFkZXYtPmdmeC5jb25maWcubWF4X3NoX3Blcl9zZSA9IDE7CisJCWFkZXYtPmdmeC5jb25m aWcubWF4X2JhY2tlbmRzX3Blcl9zZSA9IDI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X3RleHR1 cmVfY2hhbm5lbF9jYWNoZXMgPSA0OworCQlhZGV2LT5nZnguY29uZmlnLm1heF9ncHJzID0gMjU2 OworCQlhZGV2LT5nZnguY29uZmlnLm1heF9nc190aHJlYWRzID0gMTY7CisJCWFkZXYtPmdmeC5j b25maWcubWF4X2h3X2NvbnRleHRzID0gODsKKworCQlhZGV2LT5nZnguY29uZmlnLnNjX3ByaW1f Zmlmb19zaXplX2Zyb250ZW5kID0gMHgyMDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5zY19wcmltX2Zp Zm9fc2l6ZV9iYWNrZW5kID0gMHg0MDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5zY19oaXpfdGlsZV9m aWZvX3NpemUgPSAweDMwOworCQlhZGV2LT5nZnguY29uZmlnLnNjX2Vhcmx5el90aWxlX2ZpZm9f c2l6ZSA9IDB4MTMwOworCQlnYl9hZGRyX2NvbmZpZyA9IFZFUkRFX0dCX0FERFJfQ09ORklHX0dP TERFTjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0hBSU5BTjoKKwkJYWRldi0+Z2Z4LmNvbmZpZy5t YXhfc2hhZGVyX2VuZ2luZXMgPSAxOworCQlhZGV2LT5nZnguY29uZmlnLm1heF90aWxlX3BpcGVz ID0gNDsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfY3VfcGVyX3NoID0gNTsKKwkJYWRldi0+Z2Z4 LmNvbmZpZy5tYXhfc2hfcGVyX3NlID0gMTsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfYmFja2Vu ZHNfcGVyX3NlID0gMTsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfdGV4dHVyZV9jaGFubmVsX2Nh Y2hlcyA9IDI7CisJCWFkZXYtPmdmeC5jb25maWcubWF4X2dwcnMgPSAyNTY7CisJCWFkZXYtPmdm eC5jb25maWcubWF4X2dzX3RocmVhZHMgPSAxNjsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfaHdf Y29udGV4dHMgPSA4OworCisJCWFkZXYtPmdmeC5jb25maWcuc2NfcHJpbV9maWZvX3NpemVfZnJv bnRlbmQgPSAweDIwOworCQlhZGV2LT5nZnguY29uZmlnLnNjX3ByaW1fZmlmb19zaXplX2JhY2tl bmQgPSAweDQwOworCQlhZGV2LT5nZnguY29uZmlnLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4 MzA7CisJCWFkZXYtPmdmeC5jb25maWcuc2NfZWFybHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7 CisJCWdiX2FkZHJfY29uZmlnID0gSEFJTkFOX0dCX0FERFJfQ09ORklHX0dPTERFTjsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKworCVdSRUczMihHUkJNX0NO VEwsIEdSQk1fUkVBRF9USU1FT1VUKDB4ZmYpKTsKKwlXUkVHMzIoU1JCTV9JTlRfQ05UTCwgMSk7 CisJV1JFRzMyKFNSQk1fSU5UX0FDSywgMSk7CisKKwlXUkVHMzIoQklGX0ZCX0VOLCBGQl9SRUFE X0VOIHwgRkJfV1JJVEVfRU4pOworCisJbWNfc2hhcmVkX2NobWFwID0gUlJFRzMyKE1DX1NIQVJF RF9DSE1BUCk7CisJbWNfYXJiX3JhbWNmZyA9IFJSRUczMihNQ19BUkJfUkFNQ0ZHKTsKKworCWFk ZXYtPmdmeC5jb25maWcubnVtX3RpbGVfcGlwZXMgPSBhZGV2LT5nZnguY29uZmlnLm1heF90aWxl X3BpcGVzOworCWFkZXYtPmdmeC5jb25maWcubWVtX21heF9idXJzdF9sZW5ndGhfYnl0ZXMgPSAy NTY7CisJdG1wID0gKG1jX2FyYl9yYW1jZmcgJiBOT09GQ09MU19NQVNLKSA+PiBOT09GQ09MU19T SElGVDsKKwlhZGV2LT5nZnguY29uZmlnLm1lbV9yb3dfc2l6ZV9pbl9rYiA9ICg0ICogKDEgPDwg KDggKyB0bXApKSkgLyAxMDI0OworCWlmIChhZGV2LT5nZnguY29uZmlnLm1lbV9yb3dfc2l6ZV9p bl9rYiA+IDQpCisJCWFkZXYtPmdmeC5jb25maWcubWVtX3Jvd19zaXplX2luX2tiID0gNDsKKwlh ZGV2LT5nZnguY29uZmlnLnNoYWRlcl9lbmdpbmVfdGlsZV9zaXplID0gMzI7CisJYWRldi0+Z2Z4 LmNvbmZpZy5udW1fZ3B1cyA9IDE7CisJYWRldi0+Z2Z4LmNvbmZpZy5tdWx0aV9ncHVfdGlsZV9z aXplID0gNjQ7CisKKwlnYl9hZGRyX2NvbmZpZyAmPSB+Uk9XX1NJWkVfTUFTSzsKKwlzd2l0Y2gg KGFkZXYtPmdmeC5jb25maWcubWVtX3Jvd19zaXplX2luX2tiKSB7CisJY2FzZSAxOgorCWRlZmF1 bHQ6CisJCWdiX2FkZHJfY29uZmlnIHw9IFJPV19TSVpFKDApOworCQlicmVhazsKKwljYXNlIDI6 CisJCWdiX2FkZHJfY29uZmlnIHw9IFJPV19TSVpFKDEpOworCQlicmVhazsKKwljYXNlIDQ6CisJ CWdiX2FkZHJfY29uZmlnIHw9IFJPV19TSVpFKDIpOworCQlicmVhazsKKwl9CisJYWRldi0+Z2Z4 LmNvbmZpZy5nYl9hZGRyX2NvbmZpZyA9IGdiX2FkZHJfY29uZmlnOworCisJV1JFRzMyKEdCX0FE RFJfQ09ORklHLCBnYl9hZGRyX2NvbmZpZyk7CisJV1JFRzMyKERNSUZfQUREUl9DT05GSUcsIGdi X2FkZHJfY29uZmlnKTsKKwlXUkVHMzIoRE1JRl9BRERSX0NBTEMsIGdiX2FkZHJfY29uZmlnKTsK KwlXUkVHMzIoSERQX0FERFJfQ09ORklHLCBnYl9hZGRyX2NvbmZpZyk7CisJV1JFRzMyKERNQV9U SUxJTkdfQ09ORklHICsgRE1BMF9SRUdJU1RFUl9PRkZTRVQsIGdiX2FkZHJfY29uZmlnKTsKKwlX UkVHMzIoRE1BX1RJTElOR19DT05GSUcgKyBETUExX1JFR0lTVEVSX09GRlNFVCwgZ2JfYWRkcl9j b25maWcpOworI2lmIDAKKwlpZiAoYWRldi0+aGFzX3V2ZCkgeworCQlXUkVHMzIoVVZEX1VERUNf QUREUl9DT05GSUcsIGdiX2FkZHJfY29uZmlnKTsKKwkJV1JFRzMyKFVWRF9VREVDX0RCX0FERFJf Q09ORklHLCBnYl9hZGRyX2NvbmZpZyk7CisJCVdSRUczMihVVkRfVURFQ19EQldfQUREUl9DT05G SUcsIGdiX2FkZHJfY29uZmlnKTsKKwl9CisjZW5kaWYKKwlnZnhfdjZfMF90aWxpbmdfbW9kZV90 YWJsZV9pbml0KGFkZXYpOworCisJZ2Z4X3Y2XzBfc2V0dXBfcmIoYWRldiwgYWRldi0+Z2Z4LmNv bmZpZy5tYXhfc2hhZGVyX2VuZ2luZXMsCisJCSAgICBhZGV2LT5nZnguY29uZmlnLm1heF9zaF9w ZXJfc2UsCisJCSAgICBhZGV2LT5nZnguY29uZmlnLm1heF9iYWNrZW5kc19wZXJfc2UpOworCisJ Z2Z4X3Y2XzBfc2V0dXBfc3BpKGFkZXYsIGFkZXYtPmdmeC5jb25maWcubWF4X3NoYWRlcl9lbmdp bmVzLAorCQkgICAgIGFkZXYtPmdmeC5jb25maWcubWF4X3NoX3Blcl9zZSwKKwkJICAgICBhZGV2 LT5nZnguY29uZmlnLm1heF9jdV9wZXJfc2gpOworCisJZ2Z4X3Y2XzBfZ2V0X2N1X2luZm8oYWRl dik7CisKKwlXUkVHMzIoQ1BfUVVFVUVfVEhSRVNIT0xEUywgKFJPUV9JQjFfU1RBUlQoMHgxNikg fAorCQkJCSAgICAgUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCVdSRUczMihDUF9NRVFfVEhSRVNI T0xEUywgTUVRMV9TVEFSVCgweDMwKSB8IE1FUTJfU1RBUlQoMHg2MCkpOworCisJc3hfZGVidWdf MSA9IFJSRUczMihTWF9ERUJVR18xKTsKKwlXUkVHMzIoU1hfREVCVUdfMSwgc3hfZGVidWdfMSk7 CisKKwlXUkVHMzIoU1BJX0NPTkZJR19DTlRMXzEsIFZUWF9ET05FX0RFTEFZKDQpKTsKKworCVdS RUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19GUk9OVEVORF9QUklNX0ZJRk9fU0laRShhZGV2LT5n ZnguY29uZmlnLnNjX3ByaW1fZmlmb19zaXplX2Zyb250ZW5kKSB8CisJCQkJIFNDX0JBQ0tFTkRf UFJJTV9GSUZPX1NJWkUoYWRldi0+Z2Z4LmNvbmZpZy5zY19wcmltX2ZpZm9fc2l6ZV9iYWNrZW5k KSB8CisJCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShhZGV2LT5nZnguY29uZmlnLnNjX2hpel90 aWxlX2ZpZm9fc2l6ZSkgfAorCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUoYWRldi0+Z2Z4 LmNvbmZpZy5zY19lYXJseXpfdGlsZV9maWZvX3NpemUpKSk7CisKKwlXUkVHMzIoVkdUX05VTV9J TlNUQU5DRVMsIDEpOworCisJV1JFRzMyKENQX1BFUkZNT05fQ05UTCwgMCk7CisKKwlXUkVHMzIo U1FfQ09ORklHLCAwKTsKKworCVdSRUczMihQQV9TQ19GT1JDRV9FT1ZfTUFYX0NOVFMsIChGT1JD RV9FT1ZfTUFYX0NMS19DTlQoNDA5NSkgfAorCQkJCQkgIEZPUkNFX0VPVl9NQVhfUkVaX0NOVCgy NTUpKSk7CisKKwlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFU SU9OKFZDX0FORF9UQykgfAorCSAgICAgICBBVVRPX0lOVkxEX0VOKEVTX0FORF9HU19BVVRPKSk7 CisKKwlXUkVHMzIoVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVdSRUczMihQQV9TQ19MSU5F X1NUSVBQTEVfU1RBVEUsIDApOworCisJV1JFRzMyKENCX1BFUkZDT1VOVEVSMF9TRUxFQ1QwLCAw KTsKKwlXUkVHMzIoQ0JfUEVSRkNPVU5URVIwX1NFTEVDVDEsIDApOworCVdSRUczMihDQl9QRVJG Q09VTlRFUjFfU0VMRUNUMCwgMCk7CisJV1JFRzMyKENCX1BFUkZDT1VOVEVSMV9TRUxFQ1QxLCAw KTsKKwlXUkVHMzIoQ0JfUEVSRkNPVU5URVIyX1NFTEVDVDAsIDApOworCVdSRUczMihDQl9QRVJG Q09VTlRFUjJfU0VMRUNUMSwgMCk7CisJV1JFRzMyKENCX1BFUkZDT1VOVEVSM19TRUxFQ1QwLCAw KTsKKwlXUkVHMzIoQ0JfUEVSRkNPVU5URVIzX1NFTEVDVDEsIDApOworCisJaGRwX2hvc3RfcGF0 aF9jbnRsID0gUlJFRzMyKEhEUF9IT1NUX1BBVEhfQ05UTCk7CisJV1JFRzMyKEhEUF9IT1NUX1BB VEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCVdSRUczMihQQV9DTF9FTkhBTkNFLCBD TElQX1ZUWF9SRU9SREVSX0VOQSB8IE5VTV9DTElQX1NFUSgzKSk7CisKKwl1ZGVsYXkoNTApOwor Cit9CisKKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfc2NyYXRjaF9pbml0KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQoreworCWludCBpOworCisJYWRldi0+Z2Z4LnNjcmF0Y2gubnVtX3JlZyA9 IDc7CisJYWRldi0+Z2Z4LnNjcmF0Y2gucmVnX2Jhc2UgPSBTQ1JBVENIX1JFRzA7CisJZm9yIChp ID0gMDsgaSA8IGFkZXYtPmdmeC5zY3JhdGNoLm51bV9yZWc7IGkrKykgeworCQlhZGV2LT5nZngu c2NyYXRjaC5mcmVlW2ldID0gdHJ1ZTsKKwkJYWRldi0+Z2Z4LnNjcmF0Y2gucmVnW2ldID0gYWRl di0+Z2Z4LnNjcmF0Y2gucmVnX2Jhc2UgKyBpOworCX0KK30KKworc3RhdGljIGludCBnZnhfdjZf MF9yaW5nX3Rlc3RfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXVpbnQzMl90IHNjcmF0Y2g7CisJdWlu dDMyX3QgdG1wID0gMDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJciA9IGFtZGdwdV9nZnhf c2NyYXRjaF9nZXQoYWRldiwgJnNjcmF0Y2gpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiYW1k Z3B1OiBjcCBmYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCByKTsKKwkJcmV0dXJu IHI7CisJfQorCVdSRUczMihzY3JhdGNoLCAweENBRkVERUFEKTsKKworCXIgPSBhbWRncHVfcmlu Z19hbGxvYyhyaW5nLCAzKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImFtZGdwdTogY3AgZmFp bGVkIHRvIGxvY2sgcmluZyAlZCAoJWQpLlxuIiwgcmluZy0+aWR4LCByKTsKKwkJYW1kZ3B1X2dm eF9zY3JhdGNoX2ZyZWUoYWRldiwgc2NyYXRjaCk7CisJCXJldHVybiByOworCX0KKwlEUk1fSU5G TygiYW1kZ3B1OiBzY3JhdGNoICV4IFxuIiwgc2NyYXRjaCk7CisJRFJNX0lORk8oImFtZGdwdTog UkVHX1NUQVJUICV4IFxuIiwgUEFDS0VUM19TRVRfQ09ORklHX1JFR19TVEFSVCk7CisJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgKHNjcmF0Y2ggLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVH X1NUQVJUKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhERUFEQkVFRik7CisJYW1kZ3B1 X3JpbmdfY29tbWl0KHJpbmcpOworCisJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91 dDsgaSsrKSB7CisJCXRtcCA9IFJSRUczMihzY3JhdGNoKTsKKwkJaWYgKHRtcCA9PSAweERFQURC RUVGKQorCQkJYnJlYWs7CisJCURSTV9VREVMQVkoMSk7CisJfQorCWlmIChpIDwgYWRldi0+dXNl Y190aW1lb3V0KSB7CisJCURSTV9JTkZPKCJyaW5nIHRlc3Qgb24gJWQgc3VjY2VlZGVkIGluICVk IHVzZWNzXG4iLCByaW5nLT5pZHgsIGkpOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigiYW1kZ3B1 OiByaW5nICVkIHRlc3QgZmFpbGVkIChzY3JhdGNoKDB4JTA0WCk9MHglMDhYKVxuIiwKKwkJCSAg cmluZy0+aWR4LCBzY3JhdGNoLCB0bXApOworCQlyID0gLUVJTlZBTDsKKwl9CisJYW1kZ3B1X2dm eF9zY3JhdGNoX2ZyZWUoYWRldiwgc2NyYXRjaCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2 b2lkIGdmeF92Nl8wX3JpbmdfZW1pdF9oZHBfZmx1c2goc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n KQoreworCS8qIGZsdXNoIGhkcCBjYWNoZSAqLworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBB Q0tFVDMoUEFDS0VUM19XUklURV9EQVRBLCAzKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg KFdSSVRFX0RBVEFfRU5HSU5FX1NFTCgxKSB8CisJCQkJIFdSSVRFX0RBVEFfRFNUX1NFTCgwKSkp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIEhEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcs IDB4MSk7Cit9CisKKy8qKgorICogZ2Z4X3Y2XzBfcmluZ19lbWl0X2hkcF9pbnZhbGlkYXRlIC0g ZW1pdCBhbiBoZHAgaW52YWxpZGF0ZSBvbiB0aGUgY3AKKyAqCisgKiBAYWRldjogYW1kZ3B1X2Rl dmljZSBwb2ludGVyCisgKiBAcmlkeDogYW1kZ3B1IHJpbmcgaW5kZXgKKyAqCisgKiBFbWl0cyBh biBoZHAgaW52YWxpZGF0ZSBvbiB0aGUgY3AuCisgKi8KK3N0YXRpYyB2b2lkIGdmeF92Nl8wX3Jp bmdfZW1pdF9oZHBfaW52YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1dSSVRFX0RBVEEsIDMpKTsKKwlh bWRncHVfcmluZ193cml0ZShyaW5nLCAoV1JJVEVfREFUQV9FTkdJTkVfU0VMKDEpIHwKKwkJCQkg V1JJVEVfREFUQV9EU1RfU0VMKDApKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgSERQX0RF QlVHMCk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHgxKTsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfcmluZ19lbWl0X2ZlbmNlX2dm eChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHU2NCBhZGRyLAorCQkJCQkgdTY0IHNlcSwgdW5z aWduZWQgZmxhZ3MpCit7CisJYm9vbCB3cml0ZTY0Yml0ID0gZmxhZ3MgJiBBTURHUFVfRkVOQ0Vf RkxBR182NEJJVDsKKwlib29sIGludF9zZWwgPSBmbGFncyAmIEFNREdQVV9GRU5DRV9GTEFHX0lO VDsKKwkvKiBmbHVzaCByZWFkIGNhY2hlIG92ZXIgZ2FydCAqLworCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIChDUF9DT0hFUl9DTlRMMiAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RB UlQpKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLCBQQUNLRVQzKFBBQ0tFVDNfU1VSRkFDRV9TWU5DLCAzKSk7CisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywgUEFDS0VUM19UQ0wxX0FDVElPTl9FTkEgfAorCQkJICBQQUNLRVQzX1RDX0FDVElP Tl9FTkEgfAorCQkJICBQQUNLRVQzX1NIX0tDQUNIRV9BQ1RJT05fRU5BIHwKKwkJCSAgUEFDS0VU M19TSF9JQ0FDSEVfQUNUSU9OX0VOQSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhGRkZG RkZGRik7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMTApOyAvKiBwb2xsIGludGVydmFsICovCisJLyogRVZFTlRfV1JJVEVfRU9QIC0gZmx1 c2ggY2FjaGVzLCBzZW5kIGludCAqLworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMo UEFDS0VUM19FVkVOVF9XUklURV9FT1AsIDQpKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBF VkVOVF9UWVBFKENBQ0hFX0ZMVVNIX0FORF9JTlZfVFNfRVZFTlQpIHwgRVZFTlRfSU5ERVgoNSkp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGFkZHIgJiAweGZmZmZmZmZjKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCAodXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmZmZikgfAorCQkJCURB VEFfU0VMKHdyaXRlNjRiaXQgPyAyIDogMSkgfCBJTlRfU0VMKGludF9zZWwgPyAyIDogMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoc2VxKSk7CisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhzZXEpKTsKK30KKworc3RhdGljIHZvaWQgZ2Z4 X3Y2XzBfcmluZ19lbWl0X2ZlbmNlX2NvbXB1dGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAor CQkJCQkgICAgIHU2NCBhZGRyLCB1NjQgc2VxLAorCQkJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQor eworCWdmeF92Nl8wX3JpbmdfZW1pdF9mZW5jZV9nZngocmluZywgYWRkciwgc2VxLCBmbGFncyk7 Cit9CisKKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfcmluZ19lbWl0X2liX2dmeChzdHJ1Y3QgYW1k Z3B1X3JpbmcgKnJpbmcsCisJCQkJICAgICAgc3RydWN0IGFtZGdwdV9pYiAqaWIsCisJCQkJICAg ICAgdW5zaWduZWQgdm1faWQsIGJvb2wgY3R4X3N3aXRjaCkKK3sKKwl1MzIgaGVhZGVyLCBjb250 cm9sID0gMDsKKwl1MzIgbmV4dF9ycHRyID0gcmluZy0+d3B0ciArIDU7CisKKwlpZiAoY3R4X3N3 aXRjaCkKKwkJbmV4dF9ycHRyICs9IDI7CisKKwluZXh0X3JwdHIgKz0gNDsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfV1JJVEVfREFUQSwgMykpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsICgxIDw8IDgpKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCByaW5n LT5uZXh0X3JwdHJfZ3B1X2FkZHIgJiAweGZmZmZmZmZjKTsKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLCB1cHBlcl8zMl9iaXRzKHJpbmctPm5leHRfcnB0cl9ncHVfYWRkcikpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIG5leHRfcnB0cik7CisKKwkvKiBpbnNlcnQgU1dJVENIX0JVRkZFUiBw YWNrZXQgYmVmb3JlIGZpcnN0IElCIGluIHRoZSByaW5nIGZyYW1lICovCisJaWYgKGN0eF9zd2l0 Y2gpIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1NXSVRDSF9C VUZGRVIsIDApKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisJfQorCisJaWYgKGli LT5mbGFncyAmIEFNREdQVV9JQl9GTEFHX0NFKQorCQloZWFkZXIgPSBQQUNLRVQzKFBBQ0tFVDNf SU5ESVJFQ1RfQlVGRkVSX0NPTlNULCAyKTsKKwllbHNlCisJCWhlYWRlciA9IFBBQ0tFVDMoUEFD S0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpOworCisJY29udHJvbCB8PSBpYi0+bGVuZ3RoX2R3IHwg KHZtX2lkIDw8IDI0KTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGhlYWRlcik7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMCkg fAorI2VuZGlmCisJCQkgIChpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7CisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpICYgMHhGRkZGKTsKKwlh bWRncHVfcmluZ193cml0ZShyaW5nLCBjb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2 XzBfcmluZ19lbWl0X2liX2NvbXB1dGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAorCQkJCQkg IHN0cnVjdCBhbWRncHVfaWIgKmliLAorCQkJCQkgIHVuc2lnbmVkIHZtX2lkLCBib29sIGN0eF9z d2l0Y2gpCit7CisJZ2Z4X3Y2XzBfcmluZ19lbWl0X2liX2dmeChyaW5nLCBpYiwgdm1faWQsIGN0 eF9zd2l0Y2gpOworfQorCitzdGF0aWMgaW50IGdmeF92Nl8wX3JpbmdfdGVzdF9pYihzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmlu Zy0+YWRldjsKKwlzdHJ1Y3QgYW1kZ3B1X2liIGliOworCXN0cnVjdCBmZW5jZSAqZiA9IE5VTEw7 CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJfdCB0bXAgPSAwOworCXVuc2lnbmVkIGk7CisJ aW50IHI7CisKKwlyID0gYW1kZ3B1X2dmeF9zY3JhdGNoX2dldChhZGV2LCAmc2NyYXRjaCk7CisJ aWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHU6IGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWcg KCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJV1JFRzMyKHNjcmF0Y2gsIDB4Q0FGRURF QUQpOworCW1lbXNldCgmaWIsIDAsIHNpemVvZihpYikpOworCXIgPSBhbWRncHVfaWJfZ2V0KGFk ZXYsIE5VTEwsIDI1NiwgJmliKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImFtZGdwdTogZmFp bGVkIHRvIGdldCBpYiAoJWQpLlxuIiwgcik7CisJCWdvdG8gZXJyMTsKKwl9CisJaWIucHRyWzBd ID0gUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKTsKKwlpYi5wdHJbMV0gPSAoKHNj cmF0Y2ggLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSk7CisJaWIucHRyWzJdID0gMHhE RUFEQkVFRjsKKwlpYi5sZW5ndGhfZHcgPSAzOworCisJciA9IGFtZGdwdV9pYl9zY2hlZHVsZShy aW5nLCAxLCAmaWIsIE5VTEwsIE5VTEwsICZmKTsKKwlpZiAocikKKwkJZ290byBlcnIyOworCisJ ciA9IGZlbmNlX3dhaXQoZiwgZmFsc2UpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigiYW1kZ3B1 OiBmZW5jZSB3YWl0IGZhaWxlZCAoJWQpLlxuIiwgcik7CisJCWdvdG8gZXJyMjsKKwl9CisJZm9y IChpID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXRtcCA9IFJSRUczMihz Y3JhdGNoKTsKKwkJaWYgKHRtcCA9PSAweERFQURCRUVGKQorCQkJYnJlYWs7CisJCURSTV9VREVM QVkoMSk7CisJfQorCWlmIChpIDwgYWRldi0+dXNlY190aW1lb3V0KSB7CisJCURSTV9JTkZPKCJp YiB0ZXN0IG9uIHJpbmcgJWQgc3VjY2VlZGVkIGluICV1IHVzZWNzXG4iLAorCQkJIHJpbmctPmlk eCwgaSk7CisJCWdvdG8gZXJyMjsKKwl9IGVsc2UgeworCQlEUk1fRVJST1IoImFtZGdwdTogaWIg dGVzdCBmYWlsZWQgKHNjcmF0Y2goMHglMDRYKT0weCUwOFgpXG4iLAorCQkJICBzY3JhdGNoLCB0 bXApOworCQlyID0gLUVJTlZBTDsKKwl9CisKK2VycjI6CisJZmVuY2VfcHV0KGYpOworCWFtZGdw dV9pYl9mcmVlKGFkZXYsICZpYiwgTlVMTCk7CisJZmVuY2VfcHV0KGYpOworZXJyMToKKwlhbWRn cHVfZ2Z4X3NjcmF0Y2hfZnJlZShhZGV2LCBzY3JhdGNoKTsKKwlyZXR1cm4gcjsKK30KKworc3Rh dGljIHZvaWQgZ2Z4X3Y2XzBfY3BfZ2Z4X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgYm9vbCBlbmFibGUpCit7CisJaW50IGk7CisJaWYgKGVuYWJsZSkKKwkJV1JFRzMyKENQX01F X0NOVEwsIDApOworCWVsc2UgeworCQlXUkVHMzIoQ1BfTUVfQ05UTCwgKENQX01FX0hBTFQgfCBD UF9QRlBfSEFMVCB8IENQX0NFX0hBTFQpKTsKKwkJV1JFRzMyKFNDUkFUQ0hfVU1TSywgMCk7CisJ CWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2dmeF9yaW5nczsgaSsrKQorCQkJYWRldi0+ Z2Z4LmdmeF9yaW5nW2ldLnJlYWR5ID0gZmFsc2U7CisJfQorCXVkZWxheSg1MCk7Cit9CisKK3N0 YXRpYyBpbnQgZ2Z4X3Y2XzBfY3BfZ2Z4X2xvYWRfbWljcm9jb2RlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQoreworCXVuc2lnbmVkIGk7CisJY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9o ZWFkZXJfdjFfMCAqcGZwX2hkcjsKKwljb25zdCBzdHJ1Y3QgZ2Z4X2Zpcm13YXJlX2hlYWRlcl92 MV8wICpjZV9oZHI7CisJY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9oZWFkZXJfdjFfMCAqbWVf aGRyOworCWNvbnN0IF9fbGUzMiAqZndfZGF0YTsKKwl1MzIgZndfc2l6ZTsKKworCWlmICghYWRl di0+Z2Z4Lm1lX2Z3IHx8ICFhZGV2LT5nZngucGZwX2Z3IHx8ICFhZGV2LT5nZnguY2VfZncpCisJ CXJldHVybiAtRUlOVkFMOworCisJZ2Z4X3Y2XzBfY3BfZ2Z4X2VuYWJsZShhZGV2LCBmYWxzZSk7 CisJcGZwX2hkciA9IChjb25zdCBzdHJ1Y3QgZ2Z4X2Zpcm13YXJlX2hlYWRlcl92MV8wICopYWRl di0+Z2Z4LnBmcF9mdy0+ZGF0YTsKKwljZV9oZHIgPSAoY29uc3Qgc3RydWN0IGdmeF9maXJtd2Fy ZV9oZWFkZXJfdjFfMCAqKWFkZXYtPmdmeC5jZV9mdy0+ZGF0YTsKKwltZV9oZHIgPSAoY29uc3Qg c3RydWN0IGdmeF9maXJtd2FyZV9oZWFkZXJfdjFfMCAqKWFkZXYtPmdmeC5tZV9mdy0+ZGF0YTsK KworCWFtZGdwdV91Y29kZV9wcmludF9nZnhfaGRyKCZwZnBfaGRyLT5oZWFkZXIpOworCWFtZGdw dV91Y29kZV9wcmludF9nZnhfaGRyKCZjZV9oZHItPmhlYWRlcik7CisJYW1kZ3B1X3Vjb2RlX3By aW50X2dmeF9oZHIoJm1lX2hkci0+aGVhZGVyKTsKKworCS8qIFBGUCAqLworCWZ3X2RhdGEgPSAo Y29uc3QgX19sZTMyICopCisJCShhZGV2LT5nZngucGZwX2Z3LT5kYXRhICsgbGUzMl90b19jcHUo cGZwX2hkci0+aGVhZGVyLnVjb2RlX2FycmF5X29mZnNldF9ieXRlcykpOworCWZ3X3NpemUgPSBs ZTMyX3RvX2NwdShwZnBfaGRyLT5oZWFkZXIudWNvZGVfc2l6ZV9ieXRlcykgLyA0OworCVdSRUcz MihDUF9QRlBfVUNPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IGZ3X3NpemU7IGkrKykK KwkJV1JFRzMyKENQX1BGUF9VQ09ERV9EQVRBLCBsZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisJ V1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKworCS8qIENFICovCisJZndfZGF0YSA9IChj b25zdCBfX2xlMzIgKikKKwkJKGFkZXYtPmdmeC5jZV9mdy0+ZGF0YSArIGxlMzJfdG9fY3B1KGNl X2hkci0+aGVhZGVyLnVjb2RlX2FycmF5X29mZnNldF9ieXRlcykpOworCWZ3X3NpemUgPSBsZTMy X3RvX2NwdShjZV9oZHItPmhlYWRlci51Y29kZV9zaXplX2J5dGVzKSAvIDQ7CisJV1JFRzMyKENQ X0NFX1VDT0RFX0FERFIsIDApOworCWZvciAoaSA9IDA7IGkgPCBmd19zaXplOyBpKyspCisJCVdS RUczMihDUF9DRV9VQ09ERV9EQVRBLCBsZTMyX3RvX2NwdXAoZndfZGF0YSsrKSk7CisJV1JFRzMy KENQX0NFX1VDT0RFX0FERFIsIDApOworCisJLyogTUUgKi8KKwlmd19kYXRhID0gKGNvbnN0IF9f YmUzMiAqKQorCQkoYWRldi0+Z2Z4Lm1lX2Z3LT5kYXRhICsgbGUzMl90b19jcHUobWVfaGRyLT5o ZWFkZXIudWNvZGVfYXJyYXlfb2Zmc2V0X2J5dGVzKSk7CisJZndfc2l6ZSA9IGxlMzJfdG9fY3B1 KG1lX2hkci0+aGVhZGVyLnVjb2RlX3NpemVfYnl0ZXMpIC8gNDsKKwlXUkVHMzIoQ1BfTUVfUkFN X1dBRERSLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgZndfc2l6ZTsgaSsrKQorCQlXUkVHMzIoQ1Bf TUVfUkFNX0RBVEEsIGxlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKwlXUkVHMzIoQ1BfTUVfUkFN X1dBRERSLCAwKTsKKworCisJV1JFRzMyKENQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwlXUkVHMzIo Q1BfQ0VfVUNPREVfQUREUiwgMCk7CisJV1JFRzMyKENQX01FX1JBTV9XQUREUiwgMCk7CisJV1JF RzMyKENQX01FX1JBTV9SQUREUiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4 X3Y2XzBfY3BfZ2Z4X3N0YXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWNvbnN0 IHN0cnVjdCBjc19zZWN0aW9uX2RlZiAqc2VjdCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGNzX2V4 dGVudF9kZWYgKmV4dCA9IE5VTEw7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYt PmdmeC5nZnhfcmluZ1swXTsKKwlpbnQgciwgaTsKKworCXIgPSBhbWRncHVfcmluZ19hbGxvYyhy aW5nLCA3ICsgNCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHU6IGNwIGZhaWxlZCB0 byBsb2NrIHJpbmcgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX01FX0lOSVRJQUxJWkUsIDUpKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCAweDEpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MCk7CisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgYWRldi0+Z2Z4LmNvbmZpZy5tYXhfaHdfY29udGV4dHMg LSAxKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVQzX01FX0lOSVRJQUxJWkVfREVW SUNFX0lEKDEpKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCAwKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VU M19TRVRfQkFTRSwgMikpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDNfQkFTRV9J TkRFWChDRV9QQVJUSVRJT05fQkFTRSkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4YzAw MCk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhlMDAwKTsKKwlhbWRncHVfcmluZ19jb21t aXQocmluZyk7CisKKwlnZnhfdjZfMF9jcF9nZnhfZW5hYmxlKGFkZXYsIHRydWUpOworCisJciA9 IGFtZGdwdV9yaW5nX2FsbG9jKHJpbmcsIGdmeF92Nl8wX2dldF9jc2Jfc2l6ZShhZGV2KSArIDEw KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImFtZGdwdTogY3AgZmFpbGVkIHRvIGxvY2sgcmlu ZyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKworCWFtZGdwdV9yaW5nX3dyaXRlKHJp bmcsIFBBQ0tFVDMoUEFDS0VUM19QUkVBTUJMRV9DTlRMLCAwKSk7CisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywgUEFDS0VUM19QUkVBTUJMRV9CRUdJTl9DTEVBUl9TVEFURSk7CisKKwlmb3IgKHNl Y3QgPSBhZGV2LT5nZngucmxjLmNzX2RhdGE7IHNlY3QtPnNlY3Rpb24gIT0gTlVMTDsgKytzZWN0 KSB7CisJCWZvciAoZXh0ID0gc2VjdC0+c2VjdGlvbjsgZXh0LT5leHRlbnQgIT0gTlVMTDsgKytl eHQpIHsKKwkJCWlmIChzZWN0LT5pZCA9PSBTRUNUX0NPTlRFWFQpIHsKKwkJCQlhbWRncHVfcmlu Z193cml0ZShyaW5nLAorCQkJCQkJICBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHLCBl eHQtPnJlZ19jb3VudCkpOworCQkJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGV4dC0+cmVnX2lu ZGV4IC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfU1RBUlQpOworCQkJCWZvciAoaSA9IDA7IGkg PCBleHQtPnJlZ19jb3VudDsgaSsrKQorCQkJCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBleHQt PmV4dGVudFtpXSk7CisJCQl9CisJCX0KKwl9CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQ QUNLRVQzKFBBQ0tFVDNfUFJFQU1CTEVfQ05UTCwgMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJp bmcsIFBBQ0tFVDNfUFJFQU1CTEVfRU5EX0NMRUFSX1NUQVRFKTsKKworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19DTEVBUl9TVEFURSwgMCkpOworCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIDApOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNL RVQzX1NFVF9DT05URVhUX1JFRywgMikpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MDAw MDAzMTYpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MDAwMDAwMGUpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIDB4MDAwMDAwMTApOworCisJYW1kZ3B1X3JpbmdfY29tbWl0KHJpbmcp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfY3BfZ2Z4X3Jlc3VtZShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmc7 CisJdTMyIHRtcDsKKwl1MzIgcmJfYnVmc3o7CisJaW50IHI7CisJdTY0IHJwdHJfYWRkcjsKKwor CVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHgwKTsKKwlXUkVHMzIoQ1BfU0VNX0lOQ09NUExF VEVfVElNRVJfQ05UTCwgMHgwKTsKKworCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAq LworCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKKworCVdSRUczMihDUF9ERUJVRywgMCk7 CisJV1JFRzMyKFNDUkFUQ0hfQUREUiwgMCk7CisKKwkvKiByaW5nIDAgLSBjb21wdXRlIGFuZCBn ZnggKi8KKwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworCXJpbmcgPSAmYWRldi0+Z2Z4Lmdm eF9yaW5nWzBdOworCXJiX2J1ZnN6ID0gb3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSAvIDgp OworCXRtcCA9IChvcmRlcl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUvOCkgPDwgOCkgfCBy Yl9idWZzejsKKworI2lmZGVmIF9fQklHX0VORElBTgorCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsK KyNlbmRpZgorCVdSRUczMihDUF9SQjBfQ05UTCwgdG1wKTsKKworCS8qIEluaXRpYWxpemUgdGhl IHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwlXUkVHMzIoQ1BfUkIw X0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKKwlyaW5nLT53cHRyID0gMDsKKwlXUkVHMzIo Q1BfUkIwX1dQVFIsIHJpbmctPndwdHIpOworCisJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdoZXRo ZXIgaXQncyBlbmFibGVkIG9yIG5vdCAqLworCXJwdHJfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRy ICsgKHJpbmctPnJwdHJfb2ZmcyAqIDQpOworCVdSRUczMihDUF9SQjBfUlBUUl9BRERSLCBsb3dl cl8zMl9iaXRzKHJwdHJfYWRkcikpOworCVdSRUczMihDUF9SQjBfUlBUUl9BRERSX0hJLCB1cHBl cl8zMl9iaXRzKHJwdHJfYWRkcikgJiAweEZGKTsKKworCVdSRUczMihTQ1JBVENIX1VNU0ssIDAp OworCisJbWRlbGF5KDEpOworCVdSRUczMihDUF9SQjBfQ05UTCwgdG1wKTsKKworCVdSRUczMihD UF9SQjBfQkFTRSwgcmluZy0+Z3B1X2FkZHIgPj4gOCk7CisKKwkvKiBzdGFydCB0aGUgcmluZ3Mg Ki8KKwlnZnhfdjZfMF9jcF9nZnhfc3RhcnQoYWRldik7CisJcmluZy0+cmVhZHkgPSB0cnVlOwor CXIgPSBhbWRncHVfcmluZ190ZXN0X3JpbmcocmluZyk7CisJaWYgKHIpIHsKKwkJcmluZy0+cmVh ZHkgPSBmYWxzZTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1 MzIgZ2Z4X3Y2XzBfcmluZ19nZXRfcnB0cl9nZngoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQor eworCXUzMiBycHRyOworCisJcnB0ciA9IHJpbmctPmFkZXYtPndiLndiW3JpbmctPnJwdHJfb2Zm c107CisKKwlyZXR1cm4gcnB0cjsKK30KKworc3RhdGljIHUzMiBnZnhfdjZfMF9yaW5nX2dldF93 cHRyX2dmeChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSByaW5nLT5hZGV2OworCXUzMiB3cHRyOworCisJd3B0ciA9IFJSRUczMihDUF9S QjBfV1BUUik7CisKKwlyZXR1cm4gd3B0cjsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfcmlu Z19zZXRfd3B0cl9nZngoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKworCVdSRUczMihDUF9SQjBfV1BUUiwgcmlu Zy0+d3B0cik7CisJKHZvaWQpUlJFRzMyKENQX1JCMF9XUFRSKTsKK30KKworc3RhdGljIHUzMiBn ZnhfdjZfMF9yaW5nX2dldF9ycHRyX2NvbXB1dGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQor eworCXUzMiBycHRyID0gcmluZy0+YWRldi0+d2Iud2JbcmluZy0+cnB0cl9vZmZzXTsKKworCXJl dHVybiBycHRyOworfQorCitzdGF0aWMgdTMyIGdmeF92Nl8wX3JpbmdfZ2V0X3dwdHJfY29tcHV0 ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSByaW5nLT5hZGV2OworCXUzMiB3cHRyOworCisJaWYgKHJpbmcgPT0gJmFkZXYtPmdmeC5j b21wdXRlX3JpbmdbMF0pIHsKKwkJd3B0ciA9IFJSRUczMihDUF9SQjFfV1BUUik7CisJfSBlbHNl IGlmIChyaW5nID09ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nWzFdKSB7CisJCXdwdHIgPSBSUkVH MzIoQ1BfUkIyX1dQVFIpOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCXJldHVybiB3cHRy OworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9yaW5nX3NldF93cHRyX2NvbXB1dGUoc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmlu Zy0+YWRldjsKKworCWlmIChyaW5nID09ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nWzBdKSB7CisJ CVdSRUczMihDUF9SQjFfV1BUUiwgcmluZy0+d3B0cik7CisJCSh2b2lkKVJSRUczMihDUF9SQjFf V1BUUik7CisJfSBlbHNlIGlmIChyaW5nID09ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nWzFdKSB7 CisJCVdSRUczMihDUF9SQjJfV1BUUiwgcmluZy0+d3B0cik7CisJCSh2b2lkKVJSRUczMihDUF9S QjJfV1BUUik7CisJfSBlbHNlIHsKKwkJQlVHKCk7CisJfQorCit9CisKKworc3RhdGljIHZvaWQg Z2Z4X3Y2XzBfY3BfY29tcHV0ZV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQorewor CWludCBpLCByOworCisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5n czsgaSsrKSB7CisJCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2LT5nZnguY29tcHV0 ZV9yaW5nW2ldOworCisJCWlmIChyaW5nLT5tcWRfb2JqKSB7CisJCQlyID0gYW1kZ3B1X2JvX3Jl c2VydmUocmluZy0+bXFkX29iaiwgZmFsc2UpOworCQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJ CQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSByZXNlcnZlIE1RRCBibyBmYWlsZWRcbiIsIHIp OworCisJCQlhbWRncHVfYm9fdW5waW4ocmluZy0+bXFkX29iaik7CisJCQlhbWRncHVfYm9fdW5y ZXNlcnZlKHJpbmctPm1xZF9vYmopOworCisJCQlhbWRncHVfYm9fdW5yZWYoJnJpbmctPm1xZF9v YmopOworCQkJcmluZy0+bXFkX29iaiA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQg Z2Z4X3Y2XzBfY3BfY29tcHV0ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7 CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOworCXUzMiB0bXA7CisJdTMyIHJiX2J1ZnN6Owor CWludCByOworCXU2NCBycHRyX2FkZHI7CisKKwkvKiByaW5nMSAgLSBjb21wdXRlIG9ubHkgKi8K KwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworCisJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0 ZV9yaW5nWzBdOworCXJiX2J1ZnN6ID0gb3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSAvIDgp OworCXRtcCA9IChvcmRlcl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUvOCkgPDwgOCkgfCBy Yl9idWZzejsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl0bXAgfD0gQlVGX1NXQVBfMzJCSVQ7Cisj ZW5kaWYKKwlXUkVHMzIoQ1BfUkIxX0NOVEwsIHRtcCk7CisKKwlXUkVHMzIoQ1BfUkIxX0NOVEws IHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKKwlyaW5nLT53cHRyID0gMDsKKwlXUkVHMzIoQ1BfUkIx X1dQVFIsIHJpbmctPndwdHIpOworCisKKwlycHRyX2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciAr IChyaW5nLT5ycHRyX29mZnMgKiA0KTsKKwlXUkVHMzIoQ1BfUkIxX1JQVFJfQUREUiwgbG93ZXJf MzJfYml0cyhycHRyX2FkZHIpKTsKKwlXUkVHMzIoQ1BfUkIxX1JQVFJfQUREUl9ISSwgdXBwZXJf MzJfYml0cyhycHRyX2FkZHIpICYgMHhGRik7CisKKwltZGVsYXkoMSk7CisJV1JFRzMyKENQX1JC MV9DTlRMLCB0bXApOworCisJV1JFRzMyKENQX1JCMV9CQVNFLCByaW5nLT5ncHVfYWRkciA+PiA4 KTsKKworCXJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1sxXTsKKwlyYl9idWZzeiA9IG9y ZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSAob3JkZXJfYmFzZV8yKEFN REdQVV9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CisjaWZkZWYgX19CSUdfRU5E SUFOCisJdG1wIHw9IEJVRl9TV0FQXzMyQklUOworI2VuZGlmCisJV1JFRzMyKENQX1JCMl9DTlRM LCB0bXApOworCisJV1JFRzMyKENQX1JCMl9DTlRMLCB0bXAgfCBSQl9SUFRSX1dSX0VOQSk7CisJ cmluZy0+d3B0ciA9IDA7CisJV1JFRzMyKENQX1JCMl9XUFRSLCByaW5nLT53cHRyKTsKKwlycHRy X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciArIChyaW5nLT5ycHRyX29mZnMgKiA0KTsKKwlXUkVH MzIoQ1BfUkIyX1JQVFJfQUREUiwgbG93ZXJfMzJfYml0cyhycHRyX2FkZHIpKTsKKwlXUkVHMzIo Q1BfUkIyX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhycHRyX2FkZHIpICYgMHhGRik7CisK KwltZGVsYXkoMSk7CisJV1JFRzMyKENQX1JCMl9DTlRMLCB0bXApOworCisJV1JFRzMyKENQX1JC Ml9CQVNFLCByaW5nLT5ncHVfYWRkciA+PiA4KTsKKworCWFkZXYtPmdmeC5jb21wdXRlX3Jpbmdb MF0ucmVhZHkgPSB0cnVlOworCWFkZXYtPmdmeC5jb21wdXRlX3JpbmdbMV0ucmVhZHkgPSB0cnVl OworCisJciA9IGFtZGdwdV9yaW5nX3Rlc3RfcmluZygmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1sw XSk7CisJaWYgKHIpIHsKKwkJYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1swXS5yZWFkeSA9IGZhbHNl OworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gYW1kZ3B1X3JpbmdfdGVzdF9yaW5nKCZhZGV2LT5n ZnguY29tcHV0ZV9yaW5nWzFdKTsKKwlpZiAocikgeworCQlhZGV2LT5nZnguY29tcHV0ZV9yaW5n WzFdLnJlYWR5ID0gZmFsc2U7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBnZnhfdjZfMF9jcF9lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs IGJvb2wgZW5hYmxlKQoreworCWdmeF92Nl8wX2NwX2dmeF9lbmFibGUoYWRldiwgZW5hYmxlKTsK K30KKworc3RhdGljIGludCBnZnhfdjZfMF9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKK3sKKwlpbnQgcjsKKworCXIgPSBnZnhfdjZfMF9jcF9nZnhfbG9hZF9t aWNyb2NvZGUoYWRldik7CisKKwlyZXR1cm4gcjsKKworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZf MF9lbmFibGVfZ3VpX2lkbGVfaW50ZXJydXB0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAor CQkJCQkgICAgICAgYm9vbCBlbmFibGUpCit7CQorCXUzMiB0bXAgPSBSUkVHMzIoQ1BfSU5UX0NO VExfUklORzApOworCXUzMiBtYXNrOworCWludCBpOworCisJaWYgKGVuYWJsZSkKKwkJdG1wIHw9 IChDTlRYX0JVU1lfSU5UX0VOQUJMRSB8IENOVFhfRU1QVFlfSU5UX0VOQUJMRSk7CisJZWxzZQor CQl0bXAgJj0gfihDTlRYX0JVU1lfSU5UX0VOQUJMRSB8IENOVFhfRU1QVFlfSU5UX0VOQUJMRSk7 CisJV1JFRzMyKENQX0lOVF9DTlRMX1JJTkcwLCB0bXApOworCisJaWYgKCFlbmFibGUpIHsKKwkJ LyogcmVhZCBhIGdmeCByZWdpc3RlciAqLworCQl0bXAgPSBSUkVHMzIoREJfREVQVEhfSU5GTyk7 CisKKwkJbWFzayA9IFJMQ19CVVNZX1NUQVRVUyB8IEdGWF9QT1dFUl9TVEFUVVMgfCBHRlhfQ0xP Q0tfU1RBVFVTIHwgR0ZYX0xTX1NUQVRVUzsKKwkJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVzZWNf dGltZW91dDsgaSsrKSB7CisJCQlpZiAoKFJSRUczMihSTENfU1RBVCkgJiBtYXNrKSA9PSAoR0ZY X0NMT0NLX1NUQVRVUyB8IEdGWF9QT1dFUl9TVEFUVVMpKQorCQkJCWJyZWFrOworCQkJdWRlbGF5 KDEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGdmeF92Nl8wX2NwX3Jlc3VtZShzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpbnQgcjsKKworCWdmeF92Nl8wX2VuYWJsZV9ndWlf aWRsZV9pbnRlcnJ1cHQoYWRldiwgZmFsc2UpOworCisJciA9IGdmeF92Nl8wX2NwX2xvYWRfbWlj cm9jb2RlKGFkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBnZnhfdjZfMF9jcF9n ZnhfcmVzdW1lKGFkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gZ2Z4X3Y2XzBfY3Bf Y29tcHV0ZV9yZXN1bWUoYWRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZ2Z4X3Y2XzBf ZW5hYmxlX2d1aV9pZGxlX2ludGVycnVwdChhZGV2LCB0cnVlKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBnZnhfdjZfMF9yaW5nX2VtaXRfcGlwZWxpbmVfc3luYyhzdHJ1Y3QgYW1k Z3B1X3JpbmcgKnJpbmcpCit7CisJaW50IHVzZXBmcCA9IChyaW5nLT50eXBlID09IEFNREdQVV9S SU5HX1RZUEVfR0ZYKTsKKwl1aW50MzJfdCBzZXEgPSByaW5nLT5mZW5jZV9kcnYuc3luY19zZXE7 CisJdWludDY0X3QgYWRkciA9IHJpbmctPmZlbmNlX2Rydi5ncHVfYWRkcjsKKworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19XQUlUX1JFR19NRU0sIDUpKTsKKwlhbWRn cHVfcmluZ193cml0ZShyaW5nLCAoV0FJVF9SRUdfTUVNX01FTV9TUEFDRSgxKSB8IC8qIG1lbW9y eSAqLworCQkJCSBXQUlUX1JFR19NRU1fRlVOQ1RJT04oMykgfCAvKiBlcXVhbCAqLworCQkJCSBX QUlUX1JFR19NRU1fRU5HSU5FKHVzZXBmcCkpKTsgICAvKiBwZnAgb3IgbWUgKi8KKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCBhZGRyICYgMHhmZmZmZmZmYyk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgdXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmZmZmZmZmYpOworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIHNlcSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHhmZmZmZmZmZik7CisJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgNCk7IC8qIHBvbGwgaW50ZXJ2YWwgKi8KKworCWlmICh1 c2VwZnApIHsKKwkJLyogc3luY2UgQ0Ugd2l0aCBNRSB0byBwcmV2ZW50IENFIGZldGNoIENFSUIg YmVmb3JlIGNvbnRleHQgc3dpdGNoIGRvbmUgKi8KKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg UEFDS0VUMyhQQUNLRVQzX1NXSVRDSF9CVUZGRVIsIDApKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMCk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19TV0lU Q0hfQlVGRkVSLCAwKSk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCX0KK30KKwor c3RhdGljIHZvaWQgZ2Z4X3Y2XzBfcmluZ19lbWl0X3ZtX2ZsdXNoKHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywKKwkJCQkJdW5zaWduZWQgdm1faWQsIHVpbnQ2NF90IHBkX2FkZHIpCit7CisJaW50 IHVzZXBmcCA9IChyaW5nLT50eXBlID09IEFNREdQVV9SSU5HX1RZUEVfR0ZYKTsKKworCS8qIHdy aXRlIG5ldyBiYXNlIGFkZHJlc3MgKi8KKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVQz KFBBQ0tFVDNfV1JJVEVfREFUQSwgMykpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIChXUklU RV9EQVRBX0VOR0lORV9TRUwoMSkgfAorCQkJCSBXUklURV9EQVRBX0RTVF9TRUwoMCkpKTsKKwlp ZiAodm1faWQgPCA4KSB7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIChWTV9DT05URVhUMF9Q QUdFX1RBQkxFX0JBU0VfQUREUiArIHZtX2lkICkpOworCX0gZWxzZSB7CisJCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIChWTV9DT05URVhUOF9QQUdFX1RBQkxFX0JBU0VfQUREUiArICh2bV9pZCAt IDgpKSk7CisJfQorCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIHBkX2FkZHIgPj4gMTIpOworCisJLyogYml0cyAwLTE1IGFyZSB0aGUgVk0gY29u dGV4dHMwLTE1ICovCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1dS SVRFX0RBVEEsIDMpKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAoV1JJVEVfREFUQV9FTkdJ TkVfU0VMKDEpIHwKKwkJCQkgV1JJVEVfREFUQV9EU1RfU0VMKDApKSk7CisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywgVk1fSU5WQUxJREFURV9SRVFVRVNUKTsKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLCAwKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAxIDw8IHZtX2lkKTsKKworCS8qIHdh aXQgZm9yIHRoZSBpbnZhbGlkYXRlIHRvIGNvbXBsZXRlICovCisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgUEFDS0VUMyhQQUNLRVQzX1dBSVRfUkVHX01FTSwgNSkpOworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIChXQUlUX1JFR19NRU1fRlVOQ1RJT04oMCkgfCAgLyogYWx3YXlzICovCisJCQkJ IFdBSVRfUkVHX01FTV9FTkdJTkUoMCkpKTsgLyogbWUgKi8KKwlhbWRncHVfcmluZ193cml0ZShy aW5nLCBWTV9JTlZBTElEQVRFX1JFUVVFU1QpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDAp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOyAvKiByZWYgKi8KKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCAwKTsgLyogbWFzayAqLworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MjAp OyAvKiBwb2xsIGludGVydmFsICovCisKKwlpZiAodXNlcGZwKSB7CisJCS8qIHN5bmMgUEZQIHRv IE1FLCBvdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQgUEZQIHJlYWRzICovCisJCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19QRlBfU1lOQ19NRSwgMCkpOworCQlh bWRncHVfcmluZ193cml0ZShyaW5nLCAweDApOworCisJCS8qIHN5bmNlIENFIHdpdGggTUUgdG8g cHJldmVudCBDRSBmZXRjaCBDRUlCIGJlZm9yZSBjb250ZXh0IHN3aXRjaCBkb25lICovCisJCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19TV0lUQ0hfQlVGRkVSLCAwKSk7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworCQlhbWRncHVfcmluZ193cml0ZShyaW5n LCBQQUNLRVQzKFBBQ0tFVDNfU1dJVENIX0JVRkZFUiwgMCkpOworCQlhbWRncHVfcmluZ193cml0 ZShyaW5nLCAwKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfcmxjX2Zpbmkoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IHI7CisKKwlpZiAoYWRldi0+Z2Z4LnJs Yy5zYXZlX3Jlc3RvcmVfb2JqKSB7CisJCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShhZGV2LT5nZngu cmxjLnNhdmVfcmVzdG9yZV9vYmosIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJ CQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIHJlc2VydmUgUkxDIHNyIGJvIGZhaWxlZFxuIiwg cik7CisJCWFtZGdwdV9ib191bnBpbihhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9vYmopOwor CQlhbWRncHVfYm9fdW5yZXNlcnZlKGFkZXYtPmdmeC5ybGMuc2F2ZV9yZXN0b3JlX29iaik7CisK KwkJYW1kZ3B1X2JvX3VucmVmKCZhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9vYmopOworCQlh ZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9vYmogPSBOVUxMOworCX0KKworCWlmIChhZGV2LT5n ZngucmxjLmNsZWFyX3N0YXRlX29iaikgeworCQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUoYWRldi0+ Z2Z4LnJsYy5jbGVhcl9zdGF0ZV9vYmosIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHIgIT0gMCkp CisJCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIHJlc2VydmUgUkxDIGMgYm8gZmFpbGVkXG4i LCByKTsKKwkJYW1kZ3B1X2JvX3VucGluKGFkZXYtPmdmeC5ybGMuY2xlYXJfc3RhdGVfb2JqKTsK KwkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX29iaik7CisK KwkJYW1kZ3B1X2JvX3VucmVmKCZhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX29iaik7CisJCWFk ZXYtPmdmeC5ybGMuY2xlYXJfc3RhdGVfb2JqID0gTlVMTDsKKwl9CisKKwlpZiAoYWRldi0+Z2Z4 LnJsYy5jcF90YWJsZV9vYmopIHsKKwkJciA9IGFtZGdwdV9ib19yZXNlcnZlKGFkZXYtPmdmeC5y bGMuY3BfdGFibGVfb2JqLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyICE9IDApKQorCQkJZGV2 X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSByZXNlcnZlIFJMQyBjcCB0YWJsZSBibyBmYWlsZWRcbiIs IHIpOworCQlhbWRncHVfYm9fdW5waW4oYWRldi0+Z2Z4LnJsYy5jcF90YWJsZV9vYmopOworCQlh bWRncHVfYm9fdW5yZXNlcnZlKGFkZXYtPmdmeC5ybGMuY3BfdGFibGVfb2JqKTsKKworCQlhbWRn cHVfYm9fdW5yZWYoJmFkZXYtPmdmeC5ybGMuY3BfdGFibGVfb2JqKTsKKwkJYWRldi0+Z2Z4LnJs Yy5jcF90YWJsZV9vYmogPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBnZnhfdjZfMF9ybGNf aW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwljb25zdCB1MzIgKnNyY19wdHI7 CisJdm9sYXRpbGUgdTMyICpkc3RfcHRyOworCXUzMiBkd3MsIGk7CisJdTY0IHJlZ19saXN0X21j X2FkZHI7CisJY29uc3Qgc3RydWN0IGNzX3NlY3Rpb25fZGVmICpjc19kYXRhOworCWludCByOwor CisJYWRldi0+Z2Z4LnJsYy5yZWdfbGlzdCA9IHZlcmRlX3JsY19zYXZlX3Jlc3RvcmVfcmVnaXN0 ZXJfbGlzdDsKKwlhZGV2LT5nZngucmxjLnJlZ19saXN0X3NpemUgPQorCQkJKHUzMilBUlJBWV9T SVpFKHZlcmRlX3JsY19zYXZlX3Jlc3RvcmVfcmVnaXN0ZXJfbGlzdCk7CisKKwlhZGV2LT5nZngu cmxjLmNzX2RhdGEgPSBzaV9jc19kYXRhOworCXNyY19wdHIgPSBhZGV2LT5nZngucmxjLnJlZ19s aXN0OworCWR3cyA9IGFkZXYtPmdmeC5ybGMucmVnX2xpc3Rfc2l6ZTsKKwljc19kYXRhID0gYWRl di0+Z2Z4LnJsYy5jc19kYXRhOworCisJaWYgKHNyY19wdHIpIHsKKwkJLyogc2F2ZSByZXN0b3Jl IGJsb2NrICovCisJCWlmIChhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9vYmogPT0gTlVMTCkg eworCisJCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LCBkd3MgKiA0LCBQQUdFX1NJWkUsIHRy dWUsCisJCQkJCSAgICAgQU1ER1BVX0dFTV9ET01BSU5fVlJBTSwKKwkJCQkJICAgICBBTURHUFVf R0VNX0NSRUFURV9DUFVfQUNDRVNTX1JFUVVJUkVELAorCQkJCQkgICAgIE5VTEwsIE5VTEwsCisJ CQkJCSAgICAgJmFkZXYtPmdmeC5ybGMuc2F2ZV9yZXN0b3JlX29iaik7CisKKwkJCWlmIChyKSB7 CisJCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgUkxDIHNyIGJvIGZhaWxlZFxu Iiwgcik7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KKworCQlyID0gYW1kZ3B1X2JvX3Jlc2Vy dmUoYWRldi0+Z2Z4LnJsYy5zYXZlX3Jlc3RvcmVfb2JqLCBmYWxzZSk7CisJCWlmICh1bmxpa2Vs eShyICE9IDApKSB7CisJCQlnZnhfdjZfMF9ybGNfZmluaShhZGV2KTsKKwkJCXJldHVybiByOwor CQl9CisJCXIgPSBhbWRncHVfYm9fcGluKGFkZXYtPmdmeC5ybGMuc2F2ZV9yZXN0b3JlX29iaiwg QU1ER1BVX0dFTV9ET01BSU5fVlJBTSwKKwkJCQkgICZhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9y ZV9ncHVfYWRkcik7CisJCWlmIChyKSB7CisJCQlhbWRncHVfYm9fdW5yZXNlcnZlKGFkZXYtPmdm eC5ybGMuc2F2ZV9yZXN0b3JlX29iaik7CisJCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIHBp biBSTEMgc3IgYm8gZmFpbGVkXG4iLCByKTsKKwkJCWdmeF92Nl8wX3JsY19maW5pKGFkZXYpOwor CQkJcmV0dXJuIHI7CisJCX0KKworCQlyID0gYW1kZ3B1X2JvX2ttYXAoYWRldi0+Z2Z4LnJsYy5z YXZlX3Jlc3RvcmVfb2JqLCAodm9pZCAqKikmYWRldi0+Z2Z4LnJsYy5zcl9wdHIpOworCQlpZiAo cikgeworCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAgUkxDIHNyIGJvIGZhaWxlZFxu Iiwgcik7CisJCQlnZnhfdjZfMF9ybGNfZmluaShhZGV2KTsKKwkJCXJldHVybiByOworCQl9CisJ CS8qIHdyaXRlIHRoZSBzciBidWZmZXIgKi8KKwkJZHN0X3B0ciA9IGFkZXYtPmdmeC5ybGMuc3Jf cHRyOworCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4LnJsYy5yZWdfbGlzdF9zaXplOyBpKysp CisJCQlkc3RfcHRyW2ldID0gY3B1X3RvX2xlMzIoc3JjX3B0cltpXSk7CisJCWFtZGdwdV9ib19r dW5tYXAoYWRldi0+Z2Z4LnJsYy5zYXZlX3Jlc3RvcmVfb2JqKTsKKwkJYW1kZ3B1X2JvX3VucmVz ZXJ2ZShhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9vYmopOworCX0KKworCWlmIChjc19kYXRh KSB7CisJCS8qIGNsZWFyIHN0YXRlIGJsb2NrICovCisJCWFkZXYtPmdmeC5ybGMuY2xlYXJfc3Rh dGVfc2l6ZSA9IGdmeF92Nl8wX2dldF9jc2Jfc2l6ZShhZGV2KTsKKwkJZHdzID0gYWRldi0+Z2Z4 LnJsYy5jbGVhcl9zdGF0ZV9zaXplICsgKDI1NiAvIDQpOworCisJCWlmIChhZGV2LT5nZngucmxj LmNsZWFyX3N0YXRlX29iaiA9PSBOVUxMKSB7CisJCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2 LCBkd3MgKiA0LCBQQUdFX1NJWkUsIHRydWUsCisJCQkJCSAgICAgQU1ER1BVX0dFTV9ET01BSU5f VlJBTSwKKwkJCQkJICAgICBBTURHUFVfR0VNX0NSRUFURV9DUFVfQUNDRVNTX1JFUVVJUkVELAor CQkJCQkgICAgIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgJmFkZXYtPmdmeC5ybGMuY2xlYXJfc3Rh dGVfb2JqKTsKKworCQkJaWYgKHIpIHsKKwkJCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIGNy ZWF0ZSBSTEMgYyBibyBmYWlsZWRcbiIsIHIpOworCQkJCWdmeF92Nl8wX3JsY19maW5pKGFkZXYp OworCQkJCXJldHVybiByOworCQkJfQorCQl9CisJCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShhZGV2 LT5nZngucmxjLmNsZWFyX3N0YXRlX29iaiwgZmFsc2UpOworCQlpZiAodW5saWtlbHkociAhPSAw KSkgeworCQkJZ2Z4X3Y2XzBfcmxjX2ZpbmkoYWRldik7CisJCQlyZXR1cm4gcjsKKwkJfQorCQly ID0gYW1kZ3B1X2JvX3BpbihhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX29iaiwgQU1ER1BVX0dF TV9ET01BSU5fVlJBTSwKKwkJCQkgICZhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX2dwdV9hZGRy KTsKKwkJaWYgKHIpIHsKKwkJCWFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4LnJsYy5jbGVh cl9zdGF0ZV9vYmopOworCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBwaW4gUkxDIGMgYm8g ZmFpbGVkXG4iLCByKTsKKwkJCWdmeF92Nl8wX3JsY19maW5pKGFkZXYpOworCQkJcmV0dXJuIHI7 CisJCX0KKworCQlyID0gYW1kZ3B1X2JvX2ttYXAoYWRldi0+Z2Z4LnJsYy5jbGVhcl9zdGF0ZV9v YmosICh2b2lkICoqKSZhZGV2LT5nZngucmxjLmNzX3B0cik7CisJCWlmIChyKSB7CisJCQlkZXZf d2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBSTEMgYyBibyBmYWlsZWRcbiIsIHIpOworCQkJZ2Z4 X3Y2XzBfcmxjX2ZpbmkoYWRldik7CisJCQlyZXR1cm4gcjsKKwkJfQorCQkvKiBzZXQgdXAgdGhl IGNzIGJ1ZmZlciAqLworCQlkc3RfcHRyID0gYWRldi0+Z2Z4LnJsYy5jc19wdHI7CisJCXJlZ19s aXN0X21jX2FkZHIgPSBhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX2dwdV9hZGRyICsgMjU2Owor CQlkc3RfcHRyWzBdID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhyZWdfbGlzdF9tY19hZGRy KSk7CisJCWRzdF9wdHJbMV0gPSBjcHVfdG9fbGUzMihsb3dlcl8zMl9iaXRzKHJlZ19saXN0X21j X2FkZHIpKTsKKwkJZHN0X3B0clsyXSA9IGNwdV90b19sZTMyKGFkZXYtPmdmeC5ybGMuY2xlYXJf c3RhdGVfc2l6ZSk7CisJCWdmeF92Nl8wX2dldF9jc2JfYnVmZmVyKGFkZXYsICZkc3RfcHRyWygy NTYvNCldKTsKKwkJYW1kZ3B1X2JvX2t1bm1hcChhZGV2LT5nZngucmxjLmNsZWFyX3N0YXRlX29i aik7CisJCWFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4LnJsYy5jbGVhcl9zdGF0ZV9vYmop OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9lbmFibGVfbGJw dyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCit7CisJdTMyIHRtcDsK KworCXRtcCA9IFJSRUczMihSTENfTEJfQ05UTCk7CisJaWYgKGVuYWJsZSkKKwkJdG1wIHw9IExP QURfQkFMQU5DRV9FTkFCTEU7CisJZWxzZQorCQl0bXAgJj0gfkxPQURfQkFMQU5DRV9FTkFCTEU7 CisJV1JFRzMyKFJMQ19MQl9DTlRMLCB0bXApOworCisJaWYgKCFlbmFibGUpIHsKKwkJZ2Z4X3Y2 XzBfc2VsZWN0X3NlX3NoKGFkZXYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOworCQlXUkVHMzIo U1BJX0xCX0NVX01BU0ssIDB4MDBmZik7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8w X3dhaXRfZm9yX3JsY19zZXJkZXMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJaWYg KFJSRUczMihSTENfU0VSREVTX01BU1RFUl9CVVNZXzApID09IDApCisJCQlicmVhazsKKwkJdWRl bGF5KDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykg eworCQlpZiAoUlJFRzMyKFJMQ19TRVJERVNfTUFTVEVSX0JVU1lfMSkgPT0gMCkKKwkJCWJyZWFr OworCQl1ZGVsYXkoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF91cGRhdGVfcmxj KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgcmxjKQoreworCXUzMiB0bXA7CisKKwl0 bXAgPSBSUkVHMzIoUkxDX0NOVEwpOworCWlmICh0bXAgIT0gcmxjKQorCQlXUkVHMzIoUkxDX0NO VEwsIHJsYyk7Cit9CisKK3N0YXRpYyB1MzIgZ2Z4X3Y2XzBfaGFsdF9ybGMoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpCit7CisJdTMyIGRhdGEsIG9yaWc7CisKKwlvcmlnID0gZGF0YSA9IFJS RUczMihSTENfQ05UTCk7CisKKwlpZiAoZGF0YSAmIFJMQ19FTkFCTEUpIHsKKwkJZGF0YSAmPSB+ UkxDX0VOQUJMRTsKKwkJV1JFRzMyKFJMQ19DTlRMLCBkYXRhKTsKKworCQlnZnhfdjZfMF93YWl0 X2Zvcl9ybGNfc2VyZGVzKGFkZXYpOworCX0KKworCXJldHVybiBvcmlnOworfQorCit2b2lkIGdm eF92Nl8wX2VudGVyX3JsY19zYWZlX21vZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7 Cit9CisKK3ZvaWQgZ2Z4X3Y2XzBfZXhpdF9ybGNfc2FmZV9tb2RlKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KQoreworfQorCit2b2lkIGdmeF92Nl8wX3JsY19zdG9wKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQoreworCVdSRUczMihSTENfQ05UTCwgMCk7CisKKwlnZnhfdjZfMF9lbmFi bGVfZ3VpX2lkbGVfaW50ZXJydXB0KGFkZXYsIGZhbHNlKTsKKworCWdmeF92Nl8wX3dhaXRfZm9y X3JsY19zZXJkZXMoYWRldik7Cit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8wX3JsY19zdGFydChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlXUkVHMzIoUkxDX0NOVEwsIFJMQ19FTkFC TEUpOworCisJZ2Z4X3Y2XzBfZW5hYmxlX2d1aV9pZGxlX2ludGVycnVwdChhZGV2LCB0cnVlKTsK KworCXVkZWxheSg1MCk7Cit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8wX3JsY19yZXNldChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1MzIgdG1wID0gUlJFRzMyKEdSQk1fU09GVF9S RVNFVCk7CisKKwl0bXAgfD0gU09GVF9SRVNFVF9STEM7CisJV1JFRzMyKEdSQk1fU09GVF9SRVNF VCwgdG1wKTsKKwl1ZGVsYXkoNTApOworCXRtcCAmPSB+U09GVF9SRVNFVF9STEM7CisJV1JFRzMy KEdSQk1fU09GVF9SRVNFVCwgdG1wKTsKKwl1ZGVsYXkoNTApOworfQorCitzdGF0aWMgYm9vbCBn ZnhfdjZfMF9sYnB3X3N1cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1 MzIgdG1wOworCisJLyogRW5hYmxlIExCUFcgb25seSBmb3IgRERSMyAqLworCXRtcCA9IFJSRUcz MihNQ19TRVFfTUlTQzApOworCWlmICgodG1wICYgMHhGMDAwMDAwMCkgPT0gMHhCMDAwMDAwMCkK KwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorc3RhdGljIHZvaWQgZ2Z4X3Y2XzBf aW5pdF9jZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKK30KKworc3RhdGljIGludCBn ZnhfdjZfMF9ybGNfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXUzMiBp OworCWNvbnN0IHN0cnVjdCBybGNfZmlybXdhcmVfaGVhZGVyX3YxXzAgKmhkcjsKKwljb25zdCBf X2xlMzIgKmZ3X2RhdGE7CisJdTMyIGZ3X3NpemU7CisKKworCWlmICghYWRldi0+Z2Z4LnJsY19m dykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnZnhfdjZfMF9ybGNfc3RvcChhZGV2KTsKKworCWdm eF92Nl8wX3JsY19yZXNldChhZGV2KTsKKworCWdmeF92Nl8wX2luaXRfcGcoYWRldik7CisKKwln ZnhfdjZfMF9pbml0X2NnKGFkZXYpOworCisJV1JFRzMyKFJMQ19STF9CQVNFLCAwKTsKKwlXUkVH MzIoUkxDX1JMX1NJWkUsIDApOworCVdSRUczMihSTENfTEJfQ05UTCwgMCk7CisJV1JFRzMyKFJM Q19MQl9DTlRSX01BWCwgMHhmZmZmZmZmZik7CisJV1JFRzMyKFJMQ19MQl9DTlRSX0lOSVQsIDAp OworCVdSRUczMihSTENfTEJfSU5JVF9DVV9NQVNLLCAweGZmZmZmZmZmKTsKKworCVdSRUczMihS TENfTUNfQ05UTCwgMCk7CisJV1JFRzMyKFJMQ19VQ09ERV9DTlRMLCAwKTsKKworCWhkciA9IChj b25zdCBzdHJ1Y3QgcmxjX2Zpcm13YXJlX2hlYWRlcl92MV8wICopYWRldi0+Z2Z4LnJsY19mdy0+ ZGF0YTsKKwlmd19zaXplID0gbGUzMl90b19jcHUoaGRyLT5oZWFkZXIudWNvZGVfc2l6ZV9ieXRl cykgLyA0OworCWZ3X2RhdGEgPSAoY29uc3QgX19sZTMyICopCisJCShhZGV2LT5nZngucmxjX2Z3 LT5kYXRhICsgbGUzMl90b19jcHUoaGRyLT5oZWFkZXIudWNvZGVfYXJyYXlfb2Zmc2V0X2J5dGVz KSk7CisKKwlhbWRncHVfdWNvZGVfcHJpbnRfcmxjX2hkcigmaGRyLT5oZWFkZXIpOworCisJZm9y IChpID0gMDsgaSA8IGZ3X3NpemU7IGkrKykgeworCQlXUkVHMzIoUkxDX1VDT0RFX0FERFIsIGkp OworCQlXUkVHMzIoUkxDX1VDT0RFX0RBVEEsIGxlMzJfdG9fY3B1cChmd19kYXRhKyspKTsKKwl9 CisJV1JFRzMyKFJMQ19VQ09ERV9BRERSLCAwKTsKKworCWdmeF92Nl8wX2VuYWJsZV9sYnB3KGFk ZXYsIGdmeF92Nl8wX2xicHdfc3VwcG9ydGVkKGFkZXYpKTsKKworCWdmeF92Nl8wX3JsY19zdGFy dChhZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9lbmFibGVf Y2djZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgYm9vbCBlbmFibGUpCit7CisJdTMyIGRh dGEsIG9yaWcsIHRtcDsKKworCW9yaWcgPSBkYXRhID0gUlJFRzMyKFJMQ19DR0NHX0NHTFNfQ1RS TCk7CisKKwlpZiAoZW5hYmxlICYmIChhZGV2LT5jZ19mbGFncyAmIEFNRF9DR19TVVBQT1JUX0dG WF9DR0NHKSkgeworCQlnZnhfdjZfMF9lbmFibGVfZ3VpX2lkbGVfaW50ZXJydXB0KGFkZXYsIHRy dWUpOworCisJCVdSRUczMihSTENfR0NQTV9HRU5FUkFMXzMsIDB4MDAwMDAwODApOworCisJCXRt cCA9IGdmeF92Nl8wX2hhbHRfcmxjKGFkZXYpOworCisJCVdSRUczMihSTENfU0VSREVTX1dSX01B U1RFUl9NQVNLXzAsIDB4ZmZmZmZmZmYpOworCQlXUkVHMzIoUkxDX1NFUkRFU19XUl9NQVNURVJf TUFTS18xLCAweGZmZmZmZmZmKTsKKwkJV1JFRzMyKFJMQ19TRVJERVNfV1JfQ1RSTCwgMHgwMGIw MDBmZik7CisKKwkJZ2Z4X3Y2XzBfd2FpdF9mb3JfcmxjX3NlcmRlcyhhZGV2KTsKKworCQlnZnhf djZfMF91cGRhdGVfcmxjKGFkZXYsIHRtcCk7CisKKwkJV1JFRzMyKFJMQ19TRVJERVNfV1JfQ1RS TCwgMHgwMDcwMDBmZik7CisKKwkJZGF0YSB8PSBDR0NHX0VOIHwgQ0dMU19FTjsKKwl9IGVsc2Ug eworCQlnZnhfdjZfMF9lbmFibGVfZ3VpX2lkbGVfaW50ZXJydXB0KGFkZXYsIGZhbHNlKTsKKwor CQlSUkVHMzIoQ0JfQ0dUVF9TQ0xLX0NUUkwpOworCQlSUkVHMzIoQ0JfQ0dUVF9TQ0xLX0NUUkwp OworCQlSUkVHMzIoQ0JfQ0dUVF9TQ0xLX0NUUkwpOworCQlSUkVHMzIoQ0JfQ0dUVF9TQ0xLX0NU UkwpOworCisJCWRhdGEgJj0gfihDR0NHX0VOIHwgQ0dMU19FTik7CisJfQorCisJaWYgKG9yaWcg IT0gZGF0YSkKKwkJV1JFRzMyKFJMQ19DR0NHX0NHTFNfQ1RSTCwgZGF0YSk7CisKK30KKworc3Rh dGljIHZvaWQgZ2Z4X3Y2XzBfZW5hYmxlX21nY2coc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs IGJvb2wgZW5hYmxlKQoreworCisJdTMyIGRhdGEsIG9yaWcsIHRtcCA9IDA7CisKKwlpZiAoZW5h YmxlICYmIChhZGV2LT5jZ19mbGFncyAmIEFNRF9DR19TVVBQT1JUX0dGWF9NR0NHKSkgeworCQlv cmlnID0gZGF0YSA9IFJSRUczMihDR1RTX1NNX0NUUkxfUkVHKTsKKwkJZGF0YSA9IDB4OTY5NDAy MDA7CisJCWlmIChvcmlnICE9IGRhdGEpCisJCQlXUkVHMzIoQ0dUU19TTV9DVFJMX1JFRywgZGF0 YSk7CisKKwkJaWYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfR0ZYX0NQX0xTKSB7 CisJCQlvcmlnID0gZGF0YSA9IFJSRUczMihDUF9NRU1fU0xQX0NOVEwpOworCQkJZGF0YSB8PSBD UF9NRU1fTFNfRU47CisJCQlpZiAob3JpZyAhPSBkYXRhKQorCQkJCVdSRUczMihDUF9NRU1fU0xQ X0NOVEwsIGRhdGEpOworCQl9CisKKwkJb3JpZyA9IGRhdGEgPSBSUkVHMzIoUkxDX0NHVFRfTUdD R19PVkVSUklERSk7CisJCWRhdGEgJj0gMHhmZmZmZmZjMDsKKwkJaWYgKG9yaWcgIT0gZGF0YSkK KwkJCVdSRUczMihSTENfQ0dUVF9NR0NHX09WRVJSSURFLCBkYXRhKTsKKworCQl0bXAgPSBnZnhf djZfMF9oYWx0X3JsYyhhZGV2KTsKKworCQlXUkVHMzIoUkxDX1NFUkRFU19XUl9NQVNURVJfTUFT S18wLCAweGZmZmZmZmZmKTsKKwkJV1JFRzMyKFJMQ19TRVJERVNfV1JfTUFTVEVSX01BU0tfMSwg MHhmZmZmZmZmZik7CisJCVdSRUczMihSTENfU0VSREVTX1dSX0NUUkwsIDB4MDBkMDAwZmYpOwor CisJCWdmeF92Nl8wX3VwZGF0ZV9ybGMoYWRldiwgdG1wKTsKKwl9IGVsc2UgeworCQlvcmlnID0g ZGF0YSA9IFJSRUczMihSTENfQ0dUVF9NR0NHX09WRVJSSURFKTsKKwkJZGF0YSB8PSAweDAwMDAw MDAzOworCQlpZiAob3JpZyAhPSBkYXRhKQorCQkJV1JFRzMyKFJMQ19DR1RUX01HQ0dfT1ZFUlJJ REUsIGRhdGEpOworCisJCWRhdGEgPSBSUkVHMzIoQ1BfTUVNX1NMUF9DTlRMKTsKKwkJaWYgKGRh dGEgJiBDUF9NRU1fTFNfRU4pIHsKKwkJCWRhdGEgJj0gfkNQX01FTV9MU19FTjsKKwkJCVdSRUcz MihDUF9NRU1fU0xQX0NOVEwsIGRhdGEpOworCQl9CisJCW9yaWcgPSBkYXRhID0gUlJFRzMyKENH VFNfU01fQ1RSTF9SRUcpOworCQlkYXRhIHw9IExTX09WRVJSSURFIHwgT1ZFUlJJREU7CisJCWlm IChvcmlnICE9IGRhdGEpCisJCQlXUkVHMzIoQ0dUU19TTV9DVFJMX1JFRywgZGF0YSk7CisKKwkJ dG1wID0gZ2Z4X3Y2XzBfaGFsdF9ybGMoYWRldik7CisKKwkJV1JFRzMyKFJMQ19TRVJERVNfV1Jf TUFTVEVSX01BU0tfMCwgMHhmZmZmZmZmZik7CisJCVdSRUczMihSTENfU0VSREVTX1dSX01BU1RF Ul9NQVNLXzEsIDB4ZmZmZmZmZmYpOworCQlXUkVHMzIoUkxDX1NFUkRFU19XUl9DVFJMLCAweDAw ZTAwMGZmKTsKKworCQlnZnhfdjZfMF91cGRhdGVfcmxjKGFkZXYsIHRtcCk7CisJfQorfQorLyoK K3N0YXRpYyB2b2lkIGdmeF92Nl8wX3VwZGF0ZV9jZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwKKwkJCSAgICAgICBib29sIGVuYWJsZSkKK3sKKwlnZnhfdjZfMF9lbmFibGVfZ3VpX2lkbGVf aW50ZXJydXB0KGFkZXYsIGZhbHNlKTsKKwlpZiAoZW5hYmxlKSB7CisJCWdmeF92Nl8wX2VuYWJs ZV9tZ2NnKGFkZXYsIHRydWUpOworCQlnZnhfdjZfMF9lbmFibGVfY2djZyhhZGV2LCB0cnVlKTsK Kwl9IGVsc2UgeworCQlnZnhfdjZfMF9lbmFibGVfY2djZyhhZGV2LCBmYWxzZSk7CisJCWdmeF92 Nl8wX2VuYWJsZV9tZ2NnKGFkZXYsIGZhbHNlKTsKKwl9CisJZ2Z4X3Y2XzBfZW5hYmxlX2d1aV9p ZGxlX2ludGVycnVwdChhZGV2LCB0cnVlKTsKK30KKyovCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9l bmFibGVfc2Nsa19zbG93ZG93bl9vbl9wdShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJ CQkJCWJvb2wgZW5hYmxlKQoreworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9lbmFibGVfc2Ns a19zbG93ZG93bl9vbl9wZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCWJvb2wg ZW5hYmxlKQoreworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9lbmFibGVfY3BfcGcoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgZW5hYmxlKQoreworCXUzMiBkYXRhLCBvcmlnOwor CisJb3JpZyA9IGRhdGEgPSBSUkVHMzIoUkxDX1BHX0NOVEwpOworCWlmIChlbmFibGUgJiYgKGFk ZXYtPnBnX2ZsYWdzICYgQU1EX1BHX1NVUFBPUlRfQ1ApKQorCQlkYXRhICY9IH4weDgwMDA7CisJ ZWxzZQorCQlkYXRhIHw9IDB4ODAwMDsKKwlpZiAob3JpZyAhPSBkYXRhKQorCQlXUkVHMzIoUkxD X1BHX0NOVEwsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBnZnhfdjZfMF9lbmFibGVfZ2RzX3Bn KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29sIGVuYWJsZSkKK3sKK30KKy8qCitzdGF0 aWMgdm9pZCBnZnhfdjZfMF9pbml0X2NwX3BnX3RhYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQoreworCWNvbnN0IF9fbGUzMiAqZndfZGF0YTsKKwl2b2xhdGlsZSB1MzIgKmRzdF9wdHI7 CisJaW50IG1lLCBpLCBtYXhfbWUgPSA0OworCXUzMiBib19vZmZzZXQgPSAwOworCXUzMiB0YWJs ZV9vZmZzZXQsIHRhYmxlX3NpemU7CisKKwlpZiAoYWRldi0+YXNpY190eXBlID09IENISVBfS0FW RVJJKQorCQltYXhfbWUgPSA1OworCisJaWYgKGFkZXYtPmdmeC5ybGMuY3BfdGFibGVfcHRyID09 IE5VTEwpCisJCXJldHVybjsKKworCWRzdF9wdHIgPSBhZGV2LT5nZngucmxjLmNwX3RhYmxlX3B0 cjsKKwlmb3IgKG1lID0gMDsgbWUgPCBtYXhfbWU7IG1lKyspIHsKKwkJaWYgKG1lID09IDApIHsK KwkJCWNvbnN0IHN0cnVjdCBnZnhfZmlybXdhcmVfaGVhZGVyX3YxXzAgKmhkciA9CisJCQkJKGNv bnN0IHN0cnVjdCBnZnhfZmlybXdhcmVfaGVhZGVyX3YxXzAgKilhZGV2LT5nZnguY2VfZnctPmRh dGE7CisJCQlmd19kYXRhID0gKGNvbnN0IF9fbGUzMiAqKQorCQkJCShhZGV2LT5nZnguY2VfZnct PmRhdGEgKworCQkJCSBsZTMyX3RvX2NwdShoZHItPmhlYWRlci51Y29kZV9hcnJheV9vZmZzZXRf Ynl0ZXMpKTsKKwkJCXRhYmxlX29mZnNldCA9IGxlMzJfdG9fY3B1KGhkci0+anRfb2Zmc2V0KTsK KwkJCXRhYmxlX3NpemUgPSBsZTMyX3RvX2NwdShoZHItPmp0X3NpemUpOworCQl9IGVsc2UgaWYg KG1lID09IDEpIHsKKwkJCWNvbnN0IHN0cnVjdCBnZnhfZmlybXdhcmVfaGVhZGVyX3YxXzAgKmhk ciA9CisJCQkJKGNvbnN0IHN0cnVjdCBnZnhfZmlybXdhcmVfaGVhZGVyX3YxXzAgKilhZGV2LT5n ZngucGZwX2Z3LT5kYXRhOworCQkJZndfZGF0YSA9IChjb25zdCBfX2xlMzIgKikKKwkJCQkoYWRl di0+Z2Z4LnBmcF9mdy0+ZGF0YSArCisJCQkJIGxlMzJfdG9fY3B1KGhkci0+aGVhZGVyLnVjb2Rl X2FycmF5X29mZnNldF9ieXRlcykpOworCQkJdGFibGVfb2Zmc2V0ID0gbGUzMl90b19jcHUoaGRy LT5qdF9vZmZzZXQpOworCQkJdGFibGVfc2l6ZSA9IGxlMzJfdG9fY3B1KGhkci0+anRfc2l6ZSk7 CisJCX0gZWxzZSBpZiAobWUgPT0gMikgeworCQkJY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9o ZWFkZXJfdjFfMCAqaGRyID0KKwkJCQkoY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9oZWFkZXJf djFfMCAqKWFkZXYtPmdmeC5tZV9mdy0+ZGF0YTsKKwkJCWZ3X2RhdGEgPSAoY29uc3QgX19sZTMy ICopCisJCQkJKGFkZXYtPmdmeC5tZV9mdy0+ZGF0YSArCisJCQkJIGxlMzJfdG9fY3B1KGhkci0+ aGVhZGVyLnVjb2RlX2FycmF5X29mZnNldF9ieXRlcykpOworCQkJdGFibGVfb2Zmc2V0ID0gbGUz Ml90b19jcHUoaGRyLT5qdF9vZmZzZXQpOworCQkJdGFibGVfc2l6ZSA9IGxlMzJfdG9fY3B1KGhk ci0+anRfc2l6ZSk7CisJCX0gZWxzZSBpZiAobWUgPT0gMykgeworCQkJY29uc3Qgc3RydWN0IGdm eF9maXJtd2FyZV9oZWFkZXJfdjFfMCAqaGRyID0KKwkJCQkoY29uc3Qgc3RydWN0IGdmeF9maXJt d2FyZV9oZWFkZXJfdjFfMCAqKWFkZXYtPmdmeC5tZWNfZnctPmRhdGE7CisJCQlmd19kYXRhID0g KGNvbnN0IF9fbGUzMiAqKQorCQkJCShhZGV2LT5nZngubWVjX2Z3LT5kYXRhICsKKwkJCQkgbGUz Ml90b19jcHUoaGRyLT5oZWFkZXIudWNvZGVfYXJyYXlfb2Zmc2V0X2J5dGVzKSk7CisJCQl0YWJs ZV9vZmZzZXQgPSBsZTMyX3RvX2NwdShoZHItPmp0X29mZnNldCk7CisJCQl0YWJsZV9zaXplID0g bGUzMl90b19jcHUoaGRyLT5qdF9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IHN0cnVjdCBn ZnhfZmlybXdhcmVfaGVhZGVyX3YxXzAgKmhkciA9CisJCQkJKGNvbnN0IHN0cnVjdCBnZnhfZmly bXdhcmVfaGVhZGVyX3YxXzAgKilhZGV2LT5nZngubWVjMl9mdy0+ZGF0YTsKKwkJCWZ3X2RhdGEg PSAoY29uc3QgX19sZTMyICopCisJCQkJKGFkZXYtPmdmeC5tZWMyX2Z3LT5kYXRhICsKKwkJCQkg bGUzMl90b19jcHUoaGRyLT5oZWFkZXIudWNvZGVfYXJyYXlfb2Zmc2V0X2J5dGVzKSk7CisJCQl0 YWJsZV9vZmZzZXQgPSBsZTMyX3RvX2NwdShoZHItPmp0X29mZnNldCk7CisJCQl0YWJsZV9zaXpl ID0gbGUzMl90b19jcHUoaGRyLT5qdF9zaXplKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCB0 YWJsZV9zaXplOyBpICsrKSB7CisJCQlkc3RfcHRyW2JvX29mZnNldCArIGldID0KKwkJCQljcHVf dG9fbGUzMihsZTMyX3RvX2NwdShmd19kYXRhW3RhYmxlX29mZnNldCArIGldKSk7CisJCX0KKwor CQlib19vZmZzZXQgKz0gdGFibGVfc2l6ZTsKKwl9Cit9CisqLworc3RhdGljIHZvaWQgZ2Z4X3Y2 XzBfZW5hYmxlX2dmeF9jZ3BnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAg Ym9vbCBlbmFibGUpCit7CisKKwl1MzIgdG1wOworCisJaWYgKGVuYWJsZSAmJiAoYWRldi0+cGdf ZmxhZ3MgJiBBTURfUEdfU1VQUE9SVF9HRlhfUEcpKSB7CisJCXRtcCA9IFJMQ19QVUQoMHgxMCkg fCBSTENfUEREKDB4MTApIHwgUkxDX1RUUEQoMHgxMCkgfCBSTENfTVNEKDB4MTApOworCQlXUkVH MzIoUkxDX1RUT1BfRCwgdG1wKTsKKworCQl0bXAgPSBSUkVHMzIoUkxDX1BHX0NOVEwpOworCQl0 bXAgfD0gR0ZYX1BHX0VOQUJMRTsKKwkJV1JFRzMyKFJMQ19QR19DTlRMLCB0bXApOworCisJCXRt cCA9IFJSRUczMihSTENfQVVUT19QR19DVFJMKTsKKwkJdG1wIHw9IEFVVE9fUEdfRU47CisJCVdS RUczMihSTENfQVVUT19QR19DVFJMLCB0bXApOworCX0gZWxzZSB7CisJCXRtcCA9IFJSRUczMihS TENfQVVUT19QR19DVFJMKTsKKwkJdG1wICY9IH5BVVRPX1BHX0VOOworCQlXUkVHMzIoUkxDX0FV VE9fUEdfQ1RSTCwgdG1wKTsKKworCQl0bXAgPSBSUkVHMzIoREJfUkVOREVSX0NPTlRST0wpOwor CX0KK30KKworc3RhdGljIHUzMiBnZnhfdjZfMF9nZXRfY3VfYWN0aXZlX2JpdG1hcChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJIHUzMiBzZSwgdTMyIHNoKQoreworCisJdTMyIG1h c2sgPSAwLCB0bXAsIHRtcDE7CisJaW50IGk7CisKKwlnZnhfdjZfMF9zZWxlY3Rfc2Vfc2goYWRl diwgc2UsIHNoKTsKKwl0bXAgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX0FSUkFZX0NPTkZJRyk7CisJ dG1wMSA9IFJSRUczMihHQ19VU0VSX1NIQURFUl9BUlJBWV9DT05GSUcpOworCWdmeF92Nl8wX3Nl bGVjdF9zZV9zaChhZGV2LCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKKworCXRtcCAmPSAweGZm ZmYwMDAwOworCisJdG1wIHw9IHRtcDE7CisJdG1wID4+PSAxNjsKKworCWZvciAoaSA9IDA7IGkg PCBhZGV2LT5nZnguY29uZmlnLm1heF9jdV9wZXJfc2g7IGkgKyspIHsKKwkJbWFzayA8PD0gMTsK KwkJbWFzayB8PSAxOworCX0KKworCXJldHVybiAofnRtcCkgJiBtYXNrOworfQorCitzdGF0aWMg dm9pZCBnZnhfdjZfMF9pbml0X2FvX2N1X21hc2soc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp Cit7CisJdTMyIGksIGosIGssIGFjdGl2ZV9jdV9udW1iZXIgPSAwOworCisJdTMyIG1hc2ssIGNv dW50ZXIsIGN1X2JpdG1hcDsKKwl1MzIgdG1wID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGV2 LT5nZnguY29uZmlnLm1heF9zaGFkZXJfZW5naW5lczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGog PCBhZGV2LT5nZnguY29uZmlnLm1heF9zaF9wZXJfc2U7IGorKykgeworCQkJbWFzayA9IDE7CisJ CQljdV9iaXRtYXAgPSAwOworCQkJY291bnRlciAgPSAwOworCQkJZm9yIChrID0gMDsgayA8IGFk ZXYtPmdmeC5jb25maWcubWF4X2N1X3Blcl9zaDsgaysrKSB7CisJCQkJaWYgKGdmeF92Nl8wX2dl dF9jdV9hY3RpdmVfYml0bWFwKGFkZXYsIGksIGopICYgbWFzaykgeworCQkJCQlpZiAoY291bnRl ciA8IDIpCisJCQkJCQljdV9iaXRtYXAgfD0gbWFzazsKKwkJCQkJY291bnRlcisrOworCQkJCX0K KwkJCQltYXNrIDw8PSAxOworCQkJfQorCisJCQlhY3RpdmVfY3VfbnVtYmVyICs9IGNvdW50ZXI7 CisJCQl0bXAgfD0gKGN1X2JpdG1hcCA8PCAoaSAqIDE2ICsgaiAqIDgpKTsKKwkJfQorCX0KKwor CVdSRUczMihSTENfUEdfQU9fQ1VfTUFTSywgdG1wKTsKKworCXRtcCA9IFJSRUczMihSTENfTUFY X1BHX0NVKTsKKwl0bXAgJj0gfk1BWF9QVV9DVV9NQVNLOworCXRtcCB8PSBNQVhfUFVfQ1UoYWN0 aXZlX2N1X251bWJlcik7CisJV1JFRzMyKFJMQ19NQVhfUEdfQ1UsIHRtcCk7Cit9CisKK3N0YXRp YyB2b2lkIGdmeF92Nl8wX2VuYWJsZV9nZnhfc3RhdGljX21ncGcoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCisJCQkJCSAgICBib29sIGVuYWJsZSkKK3sKKwl1MzIgZGF0YSwgb3JpZzsKKwor CW9yaWcgPSBkYXRhID0gUlJFRzMyKFJMQ19QR19DTlRMKTsKKwlpZiAoZW5hYmxlICYmIChhZGV2 LT5wZ19mbGFncyAmIEFNRF9QR19TVVBQT1JUX0dGWF9TTUcpKQorCQlkYXRhIHw9IFNUQVRJQ19Q RVJfQ1VfUEdfRU5BQkxFOworCWVsc2UKKwkJZGF0YSAmPSB+U1RBVElDX1BFUl9DVV9QR19FTkFC TEU7CisJaWYgKG9yaWcgIT0gZGF0YSkKKwkJV1JFRzMyKFJMQ19QR19DTlRMLCBkYXRhKTsKK30K Kworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfZW5hYmxlX2dmeF9keW5hbWljX21ncGcoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgICAgYm9vbCBlbmFibGUpCit7CisJdTMyIGRhdGEs IG9yaWc7CisKKwlvcmlnID0gZGF0YSA9IFJSRUczMihSTENfUEdfQ05UTCk7CisJaWYgKGVuYWJs ZSAmJiAoYWRldi0+cGdfZmxhZ3MgJiBBTURfUEdfU1VQUE9SVF9HRlhfRE1HKSkKKwkJZGF0YSB8 PSBEWU5fUEVSX0NVX1BHX0VOQUJMRTsKKwllbHNlCisJCWRhdGEgJj0gfkRZTl9QRVJfQ1VfUEdf RU5BQkxFOworCWlmIChvcmlnICE9IGRhdGEpCisJCVdSRUczMihSTENfUEdfQ05UTCwgZGF0YSk7 Cit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8wX2luaXRfZ2Z4X2NncGcoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCit7CisJdTMyIHRtcDsKKworCVdSRUczMihSTENfU0FWRV9BTkRfUkVTVE9S RV9CQVNFLCBhZGV2LT5nZngucmxjLnNhdmVfcmVzdG9yZV9ncHVfYWRkciA+PiA4KTsKKworCXRt cCA9IFJSRUczMihSTENfUEdfQ05UTCk7CisJdG1wIHw9IEdGWF9QR19TUkM7CisJV1JFRzMyKFJM Q19QR19DTlRMLCB0bXApOworCisJV1JFRzMyKFJMQ19DTEVBUl9TVEFURV9SRVNUT1JFX0JBU0Us IGFkZXYtPmdmeC5ybGMuY2xlYXJfc3RhdGVfZ3B1X2FkZHIgPj4gOCk7CisKKwl0bXAgPSBSUkVH MzIoUkxDX0FVVE9fUEdfQ1RSTCk7CisKKwl0bXAgJj0gfkdSQk1fUkVHX1NHSVRfTUFTSzsKKwl0 bXAgfD0gR1JCTV9SRUdfU0dJVCgweDcwMCk7CisJdG1wICY9IH5QR19BRlRFUl9HUkJNX1JFR19T VF9NQVNLOworCVdSRUczMihSTENfQVVUT19QR19DVFJMLCB0bXApOworfQorCitzdGF0aWMgdm9p ZCBnZnhfdjZfMF91cGRhdGVfZ2Z4X3BnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBib29s IGVuYWJsZSkKK3sKKwlnZnhfdjZfMF9lbmFibGVfZ2Z4X2NncGcoYWRldiwgZW5hYmxlKTsKKwln ZnhfdjZfMF9lbmFibGVfZ2Z4X3N0YXRpY19tZ3BnKGFkZXYsIGVuYWJsZSk7CisJZ2Z4X3Y2XzBf ZW5hYmxlX2dmeF9keW5hbWljX21ncGcoYWRldiwgZW5hYmxlKTsKK30KKworc3RhdGljIHUzMiBn ZnhfdjZfMF9nZXRfY3NiX3NpemUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJdTMy IGNvdW50ID0gMDsKKwljb25zdCBzdHJ1Y3QgY3Nfc2VjdGlvbl9kZWYgKnNlY3QgPSBOVUxMOwor CWNvbnN0IHN0cnVjdCBjc19leHRlbnRfZGVmICpleHQgPSBOVUxMOworCisJaWYgKGFkZXYtPmdm eC5ybGMuY3NfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIGJlZ2luIGNsZWFyIHN0 YXRlICovCisJY291bnQgKz0gMjsKKwkvKiBjb250ZXh0IGNvbnRyb2wgc3RhdGUgKi8KKwljb3Vu dCArPSAzOworCisJZm9yIChzZWN0ID0gYWRldi0+Z2Z4LnJsYy5jc19kYXRhOyBzZWN0LT5zZWN0 aW9uICE9IE5VTEw7ICsrc2VjdCkgeworCQlmb3IgKGV4dCA9IHNlY3QtPnNlY3Rpb247IGV4dC0+ ZXh0ZW50ICE9IE5VTEw7ICsrZXh0KSB7CisJCQlpZiAoc2VjdC0+aWQgPT0gU0VDVF9DT05URVhU KQorCQkJCWNvdW50ICs9IDIgKyBleHQtPnJlZ19jb3VudDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4g MDsKKwkJfQorCX0KKwkvKiBwYV9zY19yYXN0ZXJfY29uZmlnICovCisJY291bnQgKz0gMzsKKwkv KiBlbmQgY2xlYXIgc3RhdGUgKi8KKwljb3VudCArPSAyOworCS8qIGNsZWFyIHN0YXRlICovCisJ Y291bnQgKz0gMjsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBf Z2V0X2NzYl9idWZmZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIHZvbGF0 aWxlIHUzMiAqYnVmZmVyKQoreworCXUzMiBjb3VudCA9IDAsIGk7CisJY29uc3Qgc3RydWN0IGNz X3NlY3Rpb25fZGVmICpzZWN0ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgY3NfZXh0ZW50X2RlZiAq ZXh0ID0gTlVMTDsKKworCWlmIChhZGV2LT5nZngucmxjLmNzX2RhdGEgPT0gTlVMTCkKKwkJcmV0 dXJuOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJYnVmZmVyW2NvdW50Kytd ID0gY3B1X3RvX2xlMzIoUEFDS0VUMyhQQUNLRVQzX1BSRUFNQkxFX0NOVEwsIDApKTsKKwlidWZm ZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMihQQUNLRVQzX1BSRUFNQkxFX0JFR0lOX0NMRUFSX1NU QVRFKTsKKworCWJ1ZmZlcltjb3VudCsrXSA9IGNwdV90b19sZTMyKFBBQ0tFVDMoUEFDS0VUM19D T05URVhUX0NPTlRST0wsIDEpKTsKKwlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMigweDgw MDAwMDAwKTsKKwlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwKTsKKwor CWZvciAoc2VjdCA9IGFkZXYtPmdmeC5ybGMuY3NfZGF0YTsgc2VjdC0+c2VjdGlvbiAhPSBOVUxM OyArK3NlY3QpIHsKKwkJZm9yIChleHQgPSBzZWN0LT5zZWN0aW9uOyBleHQtPmV4dGVudCAhPSBO VUxMOyArK2V4dCkgeworCQkJaWYgKHNlY3QtPmlkID09IFNFQ1RfQ09OVEVYVCkgeworCQkJCWJ1 ZmZlcltjb3VudCsrXSA9CisJCQkJCWNwdV90b19sZTMyKFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09O VEVYVF9SRUcsIGV4dC0+cmVnX2NvdW50KSk7CisJCQkJYnVmZmVyW2NvdW50KytdID0gY3B1X3Rv X2xlMzIoZXh0LT5yZWdfaW5kZXggLSAweGEwMDApOworCQkJCWZvciAoaSA9IDA7IGkgPCBleHQt PnJlZ19jb3VudDsgaSsrKQorCQkJCQlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMihleHQt PmV4dGVudFtpXSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwor CWJ1ZmZlcltjb3VudCsrXSA9IGNwdV90b19sZTMyKFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVY VF9SRUcsIDEpKTsKKwlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMihQQV9TQ19SQVNURVJf Q09ORklHIC0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfU1RBUlQpOworCisJc3dpdGNoIChhZGV2 LT5hc2ljX3R5cGUpIHsKKwljYXNlIENISVBfVEFISVRJOgorCWNhc2UgQ0hJUF9QSVRDQUlSTjoK KwkJYnVmZmVyW2NvdW50KytdID0gY3B1X3RvX2xlMzIoMHgyYTAwMTI2YSk7CisJCWJyZWFrOwor CWNhc2UgQ0hJUF9WRVJERToKKwkJYnVmZmVyW2NvdW50KytdID0gY3B1X3RvX2xlMzIoMHgwMDAw MTI0YSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9PTEFORDoKKwkJYnVmZmVyW2NvdW50KytdID0g Y3B1X3RvX2xlMzIoMHgwMDAwMDA4Mik7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9IQUlOQU46CisJ CWJ1ZmZlcltjb3VudCsrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKKwkJ YnJlYWs7CisJfQorCisJYnVmZmVyW2NvdW50KytdID0gY3B1X3RvX2xlMzIoUEFDS0VUMyhQQUNL RVQzX1BSRUFNQkxFX0NOVEwsIDApKTsKKwlidWZmZXJbY291bnQrK10gPSBjcHVfdG9fbGUzMihQ QUNLRVQzX1BSRUFNQkxFX0VORF9DTEVBUl9TVEFURSk7CisKKwlidWZmZXJbY291bnQrK10gPSBj cHVfdG9fbGUzMihQQUNLRVQzKFBBQ0tFVDNfQ0xFQVJfU1RBVEUsIDApKTsKKwlidWZmZXJbY291 bnQrK10gPSBjcHVfdG9fbGUzMigwKTsKK30KKworc3RhdGljIHZvaWQgZ2Z4X3Y2XzBfaW5pdF9w ZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpZiAoYWRldi0+cGdfZmxhZ3MgJiAo QU1EX1BHX1NVUFBPUlRfR0ZYX1BHIHwKKwkJCSAgICAgIEFNRF9QR19TVVBQT1JUX0dGWF9TTUcg fAorCQkJICAgICAgQU1EX1BHX1NVUFBPUlRfR0ZYX0RNRyB8CisJCQkgICAgICBBTURfUEdfU1VQ UE9SVF9DUCB8CisJCQkgICAgICBBTURfUEdfU1VQUE9SVF9HRFMgfAorCQkJICAgICAgQU1EX1BH X1NVUFBPUlRfUkxDX1NNVV9IUykpIHsKKwkJZ2Z4X3Y2XzBfZW5hYmxlX3NjbGtfc2xvd2Rvd25f b25fcHUoYWRldiwgdHJ1ZSk7CisJCWdmeF92Nl8wX2VuYWJsZV9zY2xrX3Nsb3dkb3duX29uX3Bk KGFkZXYsIHRydWUpOworCQlpZiAoYWRldi0+cGdfZmxhZ3MgJiBBTURfUEdfU1VQUE9SVF9HRlhf UEcpIHsKKwkJCWdmeF92Nl8wX2luaXRfZ2Z4X2NncGcoYWRldik7CisJCQlnZnhfdjZfMF9lbmFi bGVfY3BfcGcoYWRldiwgdHJ1ZSk7CisJCQlnZnhfdjZfMF9lbmFibGVfZ2RzX3BnKGFkZXYsIHRy dWUpOworCQl9IGVsc2UgeworCQkJV1JFRzMyKFJMQ19TQVZFX0FORF9SRVNUT1JFX0JBU0UsIGFk ZXYtPmdmeC5ybGMuc2F2ZV9yZXN0b3JlX2dwdV9hZGRyID4+IDgpOworCQkJV1JFRzMyKFJMQ19D TEVBUl9TVEFURV9SRVNUT1JFX0JBU0UsIGFkZXYtPmdmeC5ybGMuY2xlYXJfc3RhdGVfZ3B1X2Fk ZHIgPj4gOCk7CisKKwkJfQorCQlnZnhfdjZfMF9pbml0X2FvX2N1X21hc2soYWRldik7CisJCWdm eF92Nl8wX3VwZGF0ZV9nZnhfcGcoYWRldiwgdHJ1ZSk7CisJfSBlbHNlIHsKKworCQlXUkVHMzIo UkxDX1NBVkVfQU5EX1JFU1RPUkVfQkFTRSwgYWRldi0+Z2Z4LnJsYy5zYXZlX3Jlc3RvcmVfZ3B1 X2FkZHIgPj4gOCk7CisJCVdSRUczMihSTENfQ0xFQVJfU1RBVEVfUkVTVE9SRV9CQVNFLCBhZGV2 LT5nZngucmxjLmNsZWFyX3N0YXRlX2dwdV9hZGRyID4+IDgpOworCX0KK30KKworc3RhdGljIHZv aWQgZ2Z4X3Y2XzBfZmluaV9wZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpZiAo YWRldi0+cGdfZmxhZ3MgJiAoQU1EX1BHX1NVUFBPUlRfR0ZYX1BHIHwKKwkJCSAgICAgIEFNRF9Q R19TVVBQT1JUX0dGWF9TTUcgfAorCQkJICAgICAgQU1EX1BHX1NVUFBPUlRfR0ZYX0RNRyB8CisJ CQkgICAgICBBTURfUEdfU1VQUE9SVF9DUCB8CisJCQkgICAgICBBTURfUEdfU1VQUE9SVF9HRFMg fAorCQkJICAgICAgQU1EX1BHX1NVUFBPUlRfUkxDX1NNVV9IUykpIHsKKwkJZ2Z4X3Y2XzBfdXBk YXRlX2dmeF9wZyhhZGV2LCBmYWxzZSk7CisJCWlmIChhZGV2LT5wZ19mbGFncyAmIEFNRF9QR19T VVBQT1JUX0dGWF9QRykgeworCQkJZ2Z4X3Y2XzBfZW5hYmxlX2NwX3BnKGFkZXYsIGZhbHNlKTsK KwkJCWdmeF92Nl8wX2VuYWJsZV9nZHNfcGcoYWRldiwgZmFsc2UpOworCQl9CisJfQorfQorCit1 aW50NjRfdCBnZnhfdjZfMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCit7CisJdWludDY0X3QgY2xvY2s7CisKKwltdXRleF9sb2NrKCZhZGV2LT5nZngu Z3B1X2Nsb2NrX211dGV4KTsKKwlXUkVHMzIoUkxDX0NBUFRVUkVfR1BVX0NMT0NLX0NPVU5ULCAx KTsKKwljbG9jayA9ICh1aW50NjRfdClSUkVHMzIoUkxDX0dQVV9DTE9DS19DT1VOVF9MU0IpIHwK KwkgICAgICAgICgodWludDY0X3QpUlJFRzMyKFJMQ19HUFVfQ0xPQ0tfQ09VTlRfTVNCKSA8PCAz MlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZhZGV2LT5nZnguZ3B1X2Nsb2NrX211dGV4KTsKKwlyZXR1 cm4gY2xvY2s7Cit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8wX3JpbmdfZW1pdF9nZHNfc3dpdGNo KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJCQkJICB1aW50MzJfdCB2bWlkLAorCQkJCQkg IHVpbnQzMl90IGdkc19iYXNlLCB1aW50MzJfdCBnZHNfc2l6ZSwKKwkJCQkJICB1aW50MzJfdCBn d3NfYmFzZSwgdWludDMyX3QgZ3dzX3NpemUsCisJCQkJCSAgdWludDMyX3Qgb2FfYmFzZSwgdWlu dDMyX3Qgb2Ffc2l6ZSkKK3sKK30KKworc3RhdGljIGludCBnZnhfdjZfMF9lYXJseV9pbml0KHZv aWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqKWhhbmRsZTsKKworCWFkZXYtPmdmeC5udW1fZ2Z4X3JpbmdzID0gR0ZYNl9O VU1fR0ZYX1JJTkdTOworCWFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEdGWDZfTlVNX0NP TVBVVEVfUklOR1M7CisJZ2Z4X3Y2XzBfc2V0X3JpbmdfZnVuY3MoYWRldik7CisJZ2Z4X3Y2XzBf c2V0X2lycV9mdW5jcyhhZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmeF92 Nl8wX3N3X2luaXQodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsK KwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhh bmRsZTsKKwlpbnQgaSwgcjsKKworCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCAxODEsICZh ZGV2LT5nZnguZW9wX2lycSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IGFtZGdwdV9p cnFfYWRkX2lkKGFkZXYsIDE4NCwgJmFkZXYtPmdmeC5wcml2X3JlZ19pcnEpOworCWlmIChyKQor CQlyZXR1cm4gcjsKKworCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCAxODUsICZhZGV2LT5n ZngucHJpdl9pbnN0X2lycSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZ2Z4X3Y2XzBfc2Ny YXRjaF9pbml0KGFkZXYpOworCisJciA9IGdmeF92Nl8wX2luaXRfbWljcm9jb2RlKGFkZXYpOwor CWlmIChyKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxvYWQgZ2Z4IGZpcm13YXJlIVxuIik7 CisJCXJldHVybiByOworCX0KKworCXIgPSBnZnhfdjZfMF9ybGNfaW5pdChhZGV2KTsKKwlpZiAo cikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0IHJsYyBCT3MhXG4iKTsKKwkJcmV0dXJu IHI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fZ2Z4X3JpbmdzOyBpKysp IHsKKwkJcmluZyA9ICZhZGV2LT5nZnguZ2Z4X3JpbmdbaV07CisJCXJpbmctPnJpbmdfb2JqID0g TlVMTDsKKwkJc3ByaW50ZihyaW5nLT5uYW1lLCAiZ2Z4Iik7CisJCXIgPSBhbWRncHVfcmluZ19p bml0KGFkZXYsIHJpbmcsIDEwMjQgKiAxMDI0LAorCQkJCSAgICAgMHg4MDAwMDAwMCwgMHhmLAor CQkJCSAgICAgJmFkZXYtPmdmeC5lb3BfaXJxLCBBTURHUFVfQ1BfSVJRX0dGWF9FT1AsCisJCQkJ ICAgICBBTURHUFVfUklOR19UWVBFX0dGWCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQor CisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7CisJ CXVuc2lnbmVkIGlycV90eXBlOworCisJCWlmICgoaSA+PSAzMikgfHwgKGkgPj0gQU1ER1BVX01B WF9DT01QVVRFX1JJTkdTKSkgeworCQkJRFJNX0VSUk9SKCJUb28gbWFueSAoJWQpIGNvbXB1dGUg cmluZ3MhXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisJCXJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1 dGVfcmluZ1tpXTsKKwkJcmluZy0+cmluZ19vYmogPSBOVUxMOworCQlyaW5nLT51c2VfZG9vcmJl bGwgPSBmYWxzZTsKKwkJcmluZy0+ZG9vcmJlbGxfaW5kZXggPSAwOworCQlyaW5nLT5tZSA9IDE7 CisJCXJpbmctPnBpcGUgPSBpOworCQlyaW5nLT5xdWV1ZSA9IGk7CisJCXNwcmludGYocmluZy0+ bmFtZSwgImNvbXAgJWQuJWQuJWQiLCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmluZy0+cXVldWUp OworCQlpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9NRUMxX1BJUEUwX0VPUCArIHJp bmctPnBpcGU7CisJCXIgPSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDEwMjQgKiAxMDI0 LAorCQkJCSAgICAgMHg4MDAwMDAwMCwgMHhmLAorCQkJCSAgICAgJmFkZXYtPmdmeC5lb3BfaXJx LCBpcnFfdHlwZSwKKwkJCQkgICAgIEFNREdQVV9SSU5HX1RZUEVfQ09NUFVURSk7CisJCWlmIChy KQorCQkJcmV0dXJuIHI7CisJfQorCisJRFJNX0lORk8oImFtZGdwdTogZ2Z4X3Y2X3N3X2luaXRf ZW5kIFxuIik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfc3dfZmluaSh2 b2lkICpoYW5kbGUpCit7CisJaW50IGk7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlhbWRncHVfYm9fdW5yZWYoJmFkZXYt Pmdkcy5vYV9nZnhfYm8pOworCWFtZGdwdV9ib191bnJlZigmYWRldi0+Z2RzLmd3c19nZnhfYm8p OworCWFtZGdwdV9ib191bnJlZigmYWRldi0+Z2RzLmdkc19nZnhfYm8pOworCisJZm9yIChpID0g MDsgaSA8IGFkZXYtPmdmeC5udW1fZ2Z4X3JpbmdzOyBpKyspCisJCWFtZGdwdV9yaW5nX2Zpbmko JmFkZXYtPmdmeC5nZnhfcmluZ1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1f Y29tcHV0ZV9yaW5nczsgaSsrKQorCQlhbWRncHVfcmluZ19maW5pKCZhZGV2LT5nZnguY29tcHV0 ZV9yaW5nW2ldKTsKKworCWdmeF92Nl8wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKKwlnZnhfdjZf MF9ybGNfZmluaShhZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmeF92Nl8w X2h3X2luaXQodm9pZCAqaGFuZGxlKQoreworCWludCByOworCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJZ2Z4X3Y2XzBfZ3B1 X2luaXQoYWRldik7CisKKwlyID0gZ2Z4X3Y2XzBfcmxjX3Jlc3VtZShhZGV2KTsKKwlpZiAocikK KwkJcmV0dXJuIHI7CisKKwlyID0gZ2Z4X3Y2XzBfY3BfcmVzdW1lKGFkZXYpOworCWlmIChyKQor CQlyZXR1cm4gcjsKKworCWFkZXYtPmdmeC5jZV9yYW1fc2l6ZSA9IDB4ODAwMDsKKworCXJldHVy biByOworfQorCitzdGF0aWMgaW50IGdmeF92Nl8wX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQorewor CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFu ZGxlOworCisJZ2Z4X3Y2XzBfY3BfZW5hYmxlKGFkZXYsIGZhbHNlKTsKKwlnZnhfdjZfMF9ybGNf c3RvcChhZGV2KTsKKwlnZnhfdjZfMF9maW5pX3BnKGFkZXYpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfc3VzcGVuZCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwly ZXR1cm4gZ2Z4X3Y2XzBfaHdfZmluaShhZGV2KTsKK30KKworc3RhdGljIGludCBnZnhfdjZfMF9y ZXN1bWUodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0 cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJcmV0dXJuIGdmeF92Nl8wX2h3X2luaXQo YWRldik7Cit9CisKK3N0YXRpYyBib29sIGdmeF92Nl8wX2lzX2lkbGUodm9pZCAqaGFuZGxlKQor eworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICop aGFuZGxlOworCisJaWYgKFJSRUczMihHUkJNX1NUQVRVUykgJiBHUkJNX1NUQVRVU19fR1VJX0FD VElWRV9NQVNLKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGludCBnZnhfdjZfMF93YWl0X2Zvcl9pZGxlKHZvaWQgKmhhbmRsZSkKK3sKKwl1bnNp Z25lZCBpOworCXUzMiB0bXA7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190 aW1lb3V0OyBpKyspIHsKKwkJdG1wID0gUlJFRzMyKEdSQk1fU1RBVFVTKSAmIEdSQk1fU1RBVFVT X19HVUlfQUNUSVZFX01BU0s7CisKKwkJaWYgKCF0bXApCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5 KDEpOworCX0KKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBnZnhfdjZfMF9z b2Z0X3Jlc2V0KHZvaWQgKmhhbmRsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg Z2Z4X3Y2XzBfc2V0X2dmeF9lb3BfaW50ZXJydXB0X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAorCQkJCQkJIGVudW0gYW1kZ3B1X2ludGVycnVwdF9zdGF0ZSBzdGF0ZSkKK3sKKwl1 MzIgY3BfaW50X2NudGw7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBBTURHUFVfSVJRX1NU QVRFX0RJU0FCTEU6CisJCWNwX2ludF9jbnRsID0gUlJFRzMyKENQX0lOVF9DTlRMX1JJTkcwKTsK KwkJY3BfaW50X2NudGwgJj0gfkNQX0lOVF9DTlRMX1JJTkdfX1RJTUVfU1RBTVBfSU5UX0VOQUJM RV9NQVNLOworCQlXUkVHMzIoQ1BfSU5UX0NOVExfUklORzAsIGNwX2ludF9jbnRsKTsKKwkJYnJl YWs7CisJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJMRToKKwkJY3BfaW50X2NudGwgPSBSUkVH MzIoQ1BfSU5UX0NOVExfUklORzApOworCQljcF9pbnRfY250bCB8PSBDUF9JTlRfQ05UTF9SSU5H X19USU1FX1NUQU1QX0lOVF9FTkFCTEVfTUFTSzsKKwkJV1JFRzMyKENQX0lOVF9DTlRMX1JJTkcw LCBjcF9pbnRfY250bCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwor c3RhdGljIHZvaWQgZ2Z4X3Y2XzBfc2V0X2NvbXB1dGVfZW9wX2ludGVycnVwdF9zdGF0ZShzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJCSAgICAgaW50IHJpbmcsCisJCQkJCQkgICAg IGVudW0gYW1kZ3B1X2ludGVycnVwdF9zdGF0ZSBzdGF0ZSkKK3sKKwl1MzIgY3BfaW50X2NudGw7 CisJc3dpdGNoIChzdGF0ZSl7CisJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0RJU0FCTEU6CisJCWlm IChyaW5nID09IDApIHsKKwkJCWNwX2ludF9jbnRsID0gUlJFRzMyKENQX0lOVF9DTlRMX1JJTkcx KTsKKwkJCWNwX2ludF9jbnRsICY9IH5DUF9JTlRfQ05UTF9SSU5HX19USU1FX1NUQU1QX0lOVF9F TkFCTEVfTUFTSzsKKwkJCVdSRUczMihDUF9JTlRfQ05UTF9SSU5HMSwgY3BfaW50X2NudGwpOwor CQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQljcF9pbnRfY250bCA9IFJSRUczMihDUF9JTlRfQ05U TF9SSU5HMik7CisJCQljcF9pbnRfY250bCAmPSB+Q1BfSU5UX0NOVExfUklOR19fVElNRV9TVEFN UF9JTlRfRU5BQkxFX01BU0s7CisJCQlXUkVHMzIoQ1BfSU5UX0NOVExfUklORzIsIGNwX2ludF9j bnRsKTsKKwkJCWJyZWFrOworCisJCX0KKwljYXNlIEFNREdQVV9JUlFfU1RBVEVfRU5BQkxFOgor CQlpZiAocmluZyA9PSAwKSB7CisJCQljcF9pbnRfY250bCA9IFJSRUczMihDUF9JTlRfQ05UTF9S SU5HMSk7CisJCQljcF9pbnRfY250bCB8PSBDUF9JTlRfQ05UTF9SSU5HX19USU1FX1NUQU1QX0lO VF9FTkFCTEVfTUFTSzsKKwkJCVdSRUczMihDUF9JTlRfQ05UTF9SSU5HMSwgY3BfaW50X2NudGwp OworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQljcF9pbnRfY250bCA9IFJSRUczMihDUF9JTlRf Q05UTF9SSU5HMik7CisJCQljcF9pbnRfY250bCB8PSBDUF9JTlRfQ05UTF9SSU5HX19USU1FX1NU QU1QX0lOVF9FTkFCTEVfTUFTSzsKKwkJCVdSRUczMihDUF9JTlRfQ05UTF9SSU5HMiwgY3BfaW50 X2NudGwpOworCQkJYnJlYWs7CisKKwkJfQorCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFr OworCisJfQorfQorCitzdGF0aWMgaW50IGdmeF92Nl8wX3NldF9wcml2X3JlZ19mYXVsdF9zdGF0 ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X2ly cV9zcmMgKnNyYywKKwkJCQkJICAgICB1bnNpZ25lZCB0eXBlLAorCQkJCQkgICAgIGVudW0gYW1k Z3B1X2ludGVycnVwdF9zdGF0ZSBzdGF0ZSkKK3sKKwl1MzIgY3BfaW50X2NudGw7CisKKwlzd2l0 Y2ggKHN0YXRlKSB7CisJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0RJU0FCTEU6CisJCWNwX2ludF9j bnRsID0gUlJFRzMyKENQX0lOVF9DTlRMX1JJTkcwKTsKKwkJY3BfaW50X2NudGwgJj0gfkNQX0lO VF9DTlRMX1JJTkcwX19QUklWX1JFR19JTlRfRU5BQkxFX01BU0s7CisJCVdSRUczMihDUF9JTlRf Q05UTF9SSU5HMCwgY3BfaW50X2NudGwpOworCQlicmVhazsKKwljYXNlIEFNREdQVV9JUlFfU1RB VEVfRU5BQkxFOgorCQljcF9pbnRfY250bCA9IFJSRUczMihDUF9JTlRfQ05UTF9SSU5HMCk7CisJ CWNwX2ludF9jbnRsIHw9IENQX0lOVF9DTlRMX1JJTkcwX19QUklWX1JFR19JTlRfRU5BQkxFX01B U0s7CisJCVdSRUczMihDUF9JTlRfQ05UTF9SSU5HMCwgY3BfaW50X2NudGwpOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBn ZnhfdjZfMF9zZXRfcHJpdl9pbnN0X2ZhdWx0X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNyYywKKwkJCQkJICAgICAg dW5zaWduZWQgdHlwZSwKKwkJCQkJICAgICAgZW51bSBhbWRncHVfaW50ZXJydXB0X3N0YXRlIHN0 YXRlKQoreworCXUzMiBjcF9pbnRfY250bDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEFN REdQVV9JUlFfU1RBVEVfRElTQUJMRToKKwkJY3BfaW50X2NudGwgPSBSUkVHMzIoQ1BfSU5UX0NO VExfUklORzApOworCQljcF9pbnRfY250bCAmPSB+Q1BfSU5UX0NOVExfUklORzBfX1BSSVZfSU5T VFJfSU5UX0VOQUJMRV9NQVNLOworCQlXUkVHMzIoQ1BfSU5UX0NOVExfUklORzAsIGNwX2ludF9j bnRsKTsKKwkJYnJlYWs7CisJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJMRToKKwkJY3BfaW50 X2NudGwgPSBSUkVHMzIoQ1BfSU5UX0NOVExfUklORzApOworCQljcF9pbnRfY250bCB8PSBDUF9J TlRfQ05UTF9SSU5HMF9fUFJJVl9JTlNUUl9JTlRfRU5BQkxFX01BU0s7CisJCVdSRUczMihDUF9J TlRfQ05UTF9SSU5HMCwgY3BfaW50X2NudGwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVh azsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZnhfdjZfMF9zZXRfZW9wX2lu dGVycnVwdF9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgIHN0cnVj dCBhbWRncHVfaXJxX3NyYyAqc3JjLAorCQkJCQkgICAgdW5zaWduZWQgdHlwZSwKKwkJCQkJICAg IGVudW0gYW1kZ3B1X2ludGVycnVwdF9zdGF0ZSBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsK KwljYXNlIEFNREdQVV9DUF9JUlFfR0ZYX0VPUDoKKwkJZ2Z4X3Y2XzBfc2V0X2dmeF9lb3BfaW50 ZXJydXB0X3N0YXRlKGFkZXYsIHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBBTURHUFVfQ1BfSVJR X0NPTVBVVEVfTUVDMV9QSVBFMF9FT1A6CisJCWdmeF92Nl8wX3NldF9jb21wdXRlX2VvcF9pbnRl cnJ1cHRfc3RhdGUoYWRldiwgMCwgc3RhdGUpOworCQlicmVhazsKKwljYXNlIEFNREdQVV9DUF9J UlFfQ09NUFVURV9NRUMxX1BJUEUxX0VPUDoKKwkJZ2Z4X3Y2XzBfc2V0X2NvbXB1dGVfZW9wX2lu dGVycnVwdF9zdGF0ZShhZGV2LCAxLCBzdGF0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJy ZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZnhfdjZfMF9lb3BfaXJxKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJICAgIHN0cnVjdCBhbWRncHVfaXJxX3NyYyAq c291cmNlLAorCQkJICAgIHN0cnVjdCBhbWRncHVfaXZfZW50cnkgKmVudHJ5KQoreworCURSTV9J TkZPKCJJSDogQ1AgRU9QIHJpbmcgJWRcbiIsIGVudHJ5LT5yaW5nX2lkKTsKKworCXN3aXRjaCAo ZW50cnktPnJpbmdfaWQpIHsKKwljYXNlIDA6CisJCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2 LT5nZnguZ2Z4X3JpbmdbMF0pOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlhbWRn cHVfZmVuY2VfcHJvY2VzcygmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tlbnRyeS0+cmluZ19pZCAt MV0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfcHJpdl9yZWdfaXJxKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAorCQkJCSBzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNvdXJjZSwKKwkJCQkgc3RydWN0IGFt ZGdwdV9pdl9lbnRyeSAqZW50cnkpCit7CisJRFJNX0VSUk9SKCJJbGxlZ2FsIHJlZ2lzdGVyIGFj Y2VzcyBpbiBjb21tYW5kIHN0cmVhbVxuIik7CisJc2NoZWR1bGVfd29yaygmYWRldi0+cmVzZXRf d29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y2XzBfcHJpdl9pbnN0X2ly cShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgIHN0cnVjdCBhbWRncHVfaXJxX3Ny YyAqc291cmNlLAorCQkJCSAgc3RydWN0IGFtZGdwdV9pdl9lbnRyeSAqZW50cnkpCit7CisJRFJN X0VSUk9SKCJJbGxlZ2FsIGluc3RydWN0aW9uIGluIGNvbW1hbmQgc3RyZWFtXG4iKTsKKwlzY2hl ZHVsZV93b3JrKCZhZGV2LT5yZXNldF93b3JrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBnZnhfdjZfMF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAorCQkJCQkgIGVu dW0gYW1kX2Nsb2NrZ2F0aW5nX3N0YXRlIHN0YXRlKQoreworCWJvb2wgZ2F0ZSA9IGZhbHNlOwor CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFu ZGxlOworCisJaWYgKHN0YXRlID09IEFNRF9DR19TVEFURV9HQVRFKQorCQlnYXRlID0gdHJ1ZTsK KworCWdmeF92Nl8wX2VuYWJsZV9ndWlfaWRsZV9pbnRlcnJ1cHQoYWRldiwgZmFsc2UpOworCWlm IChnYXRlKSB7CisJCWdmeF92Nl8wX2VuYWJsZV9tZ2NnKGFkZXYsIHRydWUpOworCQlnZnhfdjZf MF9lbmFibGVfY2djZyhhZGV2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlnZnhfdjZfMF9lbmFibGVf Y2djZyhhZGV2LCBmYWxzZSk7CisJCWdmeF92Nl8wX2VuYWJsZV9tZ2NnKGFkZXYsIGZhbHNlKTsK Kwl9CisJZ2Z4X3Y2XzBfZW5hYmxlX2d1aV9pZGxlX2ludGVycnVwdChhZGV2LCB0cnVlKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmeF92Nl8wX3NldF9wb3dlcmdhdGluZ19zdGF0 ZSh2b2lkICpoYW5kbGUsCisJCQkJCSAgZW51bSBhbWRfcG93ZXJnYXRpbmdfc3RhdGUgc3RhdGUp Cit7CisJYm9vbCBnYXRlID0gZmFsc2U7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlpZiAoc3RhdGUgPT0gQU1EX1BHX1NU QVRFX0dBVEUpCisJCWdhdGUgPSB0cnVlOworCisJaWYgKGFkZXYtPnBnX2ZsYWdzICYgKEFNRF9Q R19TVVBQT1JUX0dGWF9QRyB8CisJCQkgICAgICBBTURfUEdfU1VQUE9SVF9HRlhfU01HIHwKKwkJ CSAgICAgIEFNRF9QR19TVVBQT1JUX0dGWF9ETUcgfAorCQkJICAgICAgQU1EX1BHX1NVUFBPUlRf Q1AgfAorCQkJICAgICAgQU1EX1BHX1NVUFBPUlRfR0RTIHwKKwkJCSAgICAgIEFNRF9QR19TVVBQ T1JUX1JMQ19TTVVfSFMpKSB7CisJCWdmeF92Nl8wX3VwZGF0ZV9nZnhfcGcoYWRldiwgZ2F0ZSk7 CisJCWlmIChhZGV2LT5wZ19mbGFncyAmIEFNRF9QR19TVVBQT1JUX0dGWF9QRykgeworCQkJZ2Z4 X3Y2XzBfZW5hYmxlX2NwX3BnKGFkZXYsIGdhdGUpOworCQkJZ2Z4X3Y2XzBfZW5hYmxlX2dkc19w ZyhhZGV2LCBnYXRlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qg YW1kX2lwX2Z1bmNzIGdmeF92Nl8wX2lwX2Z1bmNzID0geworCS5uYW1lID0gImdmeF92Nl8wIiwK KwkuZWFybHlfaW5pdCA9IGdmeF92Nl8wX2Vhcmx5X2luaXQsCisJLmxhdGVfaW5pdCA9IE5VTEws CisJLnN3X2luaXQgPSBnZnhfdjZfMF9zd19pbml0LAorCS5zd19maW5pID0gZ2Z4X3Y2XzBfc3df ZmluaSwKKwkuaHdfaW5pdCA9IGdmeF92Nl8wX2h3X2luaXQsCisJLmh3X2ZpbmkgPSBnZnhfdjZf MF9od19maW5pLAorCS5zdXNwZW5kID0gZ2Z4X3Y2XzBfc3VzcGVuZCwKKwkucmVzdW1lID0gZ2Z4 X3Y2XzBfcmVzdW1lLAorCS5pc19pZGxlID0gZ2Z4X3Y2XzBfaXNfaWRsZSwKKwkud2FpdF9mb3Jf aWRsZSA9IGdmeF92Nl8wX3dhaXRfZm9yX2lkbGUsCisJLnNvZnRfcmVzZXQgPSBnZnhfdjZfMF9z b2Z0X3Jlc2V0LAorCS5zZXRfY2xvY2tnYXRpbmdfc3RhdGUgPSBnZnhfdjZfMF9zZXRfY2xvY2tn YXRpbmdfc3RhdGUsCisJLnNldF9wb3dlcmdhdGluZ19zdGF0ZSA9IGdmeF92Nl8wX3NldF9wb3dl cmdhdGluZ19zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X3JpbmdfZnVu Y3MgZ2Z4X3Y2XzBfcmluZ19mdW5jc19nZnggPSB7CisJLmdldF9ycHRyID0gZ2Z4X3Y2XzBfcmlu Z19nZXRfcnB0cl9nZngsCisJLmdldF93cHRyID0gZ2Z4X3Y2XzBfcmluZ19nZXRfd3B0cl9nZngs CisJLnNldF93cHRyID0gZ2Z4X3Y2XzBfcmluZ19zZXRfd3B0cl9nZngsCisJLnBhcnNlX2NzID0g TlVMTCwKKwkuZW1pdF9pYiA9IGdmeF92Nl8wX3JpbmdfZW1pdF9pYl9nZngsCisJLmVtaXRfZmVu Y2UgPSBnZnhfdjZfMF9yaW5nX2VtaXRfZmVuY2VfZ2Z4LAorCS5lbWl0X3BpcGVsaW5lX3N5bmMg PSBnZnhfdjZfMF9yaW5nX2VtaXRfcGlwZWxpbmVfc3luYywKKwkuZW1pdF92bV9mbHVzaCA9IGdm eF92Nl8wX3JpbmdfZW1pdF92bV9mbHVzaCwKKwkuZW1pdF9nZHNfc3dpdGNoID0gZ2Z4X3Y2XzBf cmluZ19lbWl0X2dkc19zd2l0Y2gsCisJLmVtaXRfaGRwX2ZsdXNoID0gZ2Z4X3Y2XzBfcmluZ19l bWl0X2hkcF9mbHVzaCwKKwkuZW1pdF9oZHBfaW52YWxpZGF0ZSA9IGdmeF92Nl8wX3JpbmdfZW1p dF9oZHBfaW52YWxpZGF0ZSwKKwkudGVzdF9yaW5nID0gZ2Z4X3Y2XzBfcmluZ190ZXN0X3Jpbmcs CisJLnRlc3RfaWIgPSBnZnhfdjZfMF9yaW5nX3Rlc3RfaWIsCisJLmluc2VydF9ub3AgPSBhbWRn cHVfcmluZ19pbnNlcnRfbm9wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmlu Z19mdW5jcyBnZnhfdjZfMF9yaW5nX2Z1bmNzX2NvbXB1dGUgPSB7CisJLmdldF9ycHRyID0gZ2Z4 X3Y2XzBfcmluZ19nZXRfcnB0cl9jb21wdXRlLAorCS5nZXRfd3B0ciA9IGdmeF92Nl8wX3Jpbmdf Z2V0X3dwdHJfY29tcHV0ZSwKKwkuc2V0X3dwdHIgPSBnZnhfdjZfMF9yaW5nX3NldF93cHRyX2Nv bXB1dGUsCisJLnBhcnNlX2NzID0gTlVMTCwKKwkuZW1pdF9pYiA9IGdmeF92Nl8wX3JpbmdfZW1p dF9pYl9jb21wdXRlLAorCS5lbWl0X2ZlbmNlID0gZ2Z4X3Y2XzBfcmluZ19lbWl0X2ZlbmNlX2Nv bXB1dGUsCisJLmVtaXRfcGlwZWxpbmVfc3luYyA9IGdmeF92Nl8wX3JpbmdfZW1pdF9waXBlbGlu ZV9zeW5jLAorCS5lbWl0X3ZtX2ZsdXNoID0gZ2Z4X3Y2XzBfcmluZ19lbWl0X3ZtX2ZsdXNoLAor CS5lbWl0X2dkc19zd2l0Y2ggPSBnZnhfdjZfMF9yaW5nX2VtaXRfZ2RzX3N3aXRjaCwKKwkuZW1p dF9oZHBfZmx1c2ggPSBnZnhfdjZfMF9yaW5nX2VtaXRfaGRwX2ZsdXNoLAorCS5lbWl0X2hkcF9p bnZhbGlkYXRlID0gZ2Z4X3Y2XzBfcmluZ19lbWl0X2hkcF9pbnZhbGlkYXRlLAorCS50ZXN0X3Jp bmcgPSBnZnhfdjZfMF9yaW5nX3Rlc3RfcmluZywKKwkudGVzdF9pYiA9IGdmeF92Nl8wX3Jpbmdf dGVzdF9pYiwKKwkuaW5zZXJ0X25vcCA9IGFtZGdwdV9yaW5nX2luc2VydF9ub3AsCit9OworCitz dGF0aWMgdm9pZCBnZnhfdjZfMF9zZXRfcmluZ19mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2dmeF9y aW5nczsgaSsrKQorCQlhZGV2LT5nZnguZ2Z4X3JpbmdbaV0uZnVuY3MgPSAmZ2Z4X3Y2XzBfcmlu Z19mdW5jc19nZng7CisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5n czsgaSsrKQorCQlhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldLmZ1bmNzID0gJmdmeF92Nl8wX3Jp bmdfZnVuY3NfY29tcHV0ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfaXJxX3Ny Y19mdW5jcyBnZnhfdjZfMF9lb3BfaXJxX2Z1bmNzID0geworCS5zZXQgPSBnZnhfdjZfMF9zZXRf ZW9wX2ludGVycnVwdF9zdGF0ZSwKKwkucHJvY2VzcyA9IGdmeF92Nl8wX2VvcF9pcnEsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3JjX2Z1bmNzIGdmeF92Nl8wX3ByaXZf cmVnX2lycV9mdW5jcyA9IHsKKwkuc2V0ID0gZ2Z4X3Y2XzBfc2V0X3ByaXZfcmVnX2ZhdWx0X3N0 YXRlLAorCS5wcm9jZXNzID0gZ2Z4X3Y2XzBfcHJpdl9yZWdfaXJxLAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBhbWRncHVfaXJxX3NyY19mdW5jcyBnZnhfdjZfMF9wcml2X2luc3RfaXJxX2Z1 bmNzID0geworCS5zZXQgPSBnZnhfdjZfMF9zZXRfcHJpdl9pbnN0X2ZhdWx0X3N0YXRlLAorCS5w cm9jZXNzID0gZ2Z4X3Y2XzBfcHJpdl9pbnN0X2lycSwKK307CisKK3N0YXRpYyB2b2lkIGdmeF92 Nl8wX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJYWRldi0+ Z2Z4LmVvcF9pcnEubnVtX3R5cGVzID0gQU1ER1BVX0NQX0lSUV9MQVNUOworCWFkZXYtPmdmeC5l b3BfaXJxLmZ1bmNzID0gJmdmeF92Nl8wX2VvcF9pcnFfZnVuY3M7CisKKwlhZGV2LT5nZngucHJp dl9yZWdfaXJxLm51bV90eXBlcyA9IDE7CisJYWRldi0+Z2Z4LnByaXZfcmVnX2lycS5mdW5jcyA9 ICZnZnhfdjZfMF9wcml2X3JlZ19pcnFfZnVuY3M7CisKKwlhZGV2LT5nZngucHJpdl9pbnN0X2ly cS5udW1fdHlwZXMgPSAxOworCWFkZXYtPmdmeC5wcml2X2luc3RfaXJxLmZ1bmNzID0gJmdmeF92 Nl8wX3ByaXZfaW5zdF9pcnFfZnVuY3M7Cit9CisKK3N0YXRpYyB2b2lkIGdmeF92Nl8wX2dldF9j dV9pbmZvKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWludCBpLCBqLCBrLCBjb3Vu dGVyLCBhY3RpdmVfY3VfbnVtYmVyID0gMDsKKwl1MzIgbWFzaywgYml0bWFwLCBhb19iaXRtYXAs IGFvX2N1X21hc2sgPSAwOworCXN0cnVjdCBhbWRncHVfY3VfaW5mbyAqY3VfaW5mbyA9ICZhZGV2 LT5nZnguY3VfaW5mbzsKKworCW1lbXNldChjdV9pbmZvLCAwLCBzaXplb2YoKmN1X2luZm8pKTsK KworCW11dGV4X2xvY2soJmFkZXYtPmdyYm1faWR4X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwg YWRldi0+Z2Z4LmNvbmZpZy5tYXhfc2hhZGVyX2VuZ2luZXM7IGkrKykgeworCQlmb3IgKGogPSAw OyBqIDwgYWRldi0+Z2Z4LmNvbmZpZy5tYXhfc2hfcGVyX3NlOyBqKyspIHsKKwkJCW1hc2sgPSAx OworCQkJYW9fYml0bWFwID0gMDsKKwkJCWNvdW50ZXIgPSAwOworCQkJZ2Z4X3Y2XzBfc2VsZWN0 X3NlX3NoKGFkZXYsIGksIGopOworCQkJYml0bWFwID0gZ2Z4X3Y2XzBfZ2V0X2N1X2FjdGl2ZV9i aXRtYXAoYWRldiwgaSwgaik7CisJCQljdV9pbmZvLT5iaXRtYXBbaV1bal0gPSBiaXRtYXA7CisK KwkJCWZvciAoayA9IDA7IGsgPCBhZGV2LT5nZnguY29uZmlnLm1heF9jdV9wZXJfc2g7IGsgKysp IHsKKwkJCQlpZiAoYml0bWFwICYgbWFzaykgeworCQkJCQlpZiAoY291bnRlciA8IDIpCisJCQkJ CQlhb19iaXRtYXAgfD0gbWFzazsKKwkJCQkJY291bnRlciArKzsKKwkJCQl9CisJCQkJbWFzayA8 PD0gMTsKKwkJCX0KKwkJCWFjdGl2ZV9jdV9udW1iZXIgKz0gY291bnRlcjsKKwkJCWFvX2N1X21h c2sgfD0gKGFvX2JpdG1hcCA8PCAoaSAqIDE2ICsgaiAqIDgpKTsKKwkJfQorCX0KKwlnZnhfdjZf MF9zZWxlY3Rfc2Vfc2goYWRldiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZik7CisJbXV0ZXhfdW5s b2NrKCZhZGV2LT5ncmJtX2lkeF9tdXRleCk7CisKKwljdV9pbmZvLT5udW1iZXIgPSBhY3RpdmVf Y3VfbnVtYmVyOworCWN1X2luZm8tPmFvX2N1X21hc2sgPSBhb19jdV9tYXNrOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y2XzAuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2dmeF92Nl8wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjk0YjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2dmeF92Nl8wLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lm bmRlZiBfX0dGWF9WNl8wX0hfXworI2RlZmluZSBfX0dGWF9WNl8wX0hfXworCitleHRlcm4gY29u c3Qgc3RydWN0IGFtZF9pcF9mdW5jcyBnZnhfdjZfMF9pcF9mdW5jczsKKworLyogWFhYIHRoZXNl IHNob3VsZG4ndCBiZSBleHBvcnRlZCAqLwordm9pZCBnZnhfdjZfMF9lbnRlcl9ybGNfc2FmZV9t b2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3ZvaWQgZ2Z4X3Y2XzBfZXhpdF9ybGNf c2FmZV9tb2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3ZvaWQgZ2Z4X3Y2XzBfcmxj X3N0b3Aoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwordWludDY0X3QgZ2Z4X3Y2XzBfZ2V0 X2dwdV9jbG9ja19jb3VudGVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3ZvaWQgZ2Z4 X3Y2XzBfc2VsZWN0X3NlX3NoKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgc2VfbnVt LCB1MzIgc2hfbnVtKTsKKworI2VuZGlmCi0tIAoyLjUuNQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==