From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 3/3] drm/msm: Add A6XX device support Date: Mon, 4 Jun 2018 10:55:14 -0600 Message-ID: <20180604165514.1226-4-jcrouse@codeaurora.org> References: <20180604165514.1226-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180604165514.1226-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBBNlhYIGZhbWlseSBvZiBBZHJlbm8gR1BVcy4gVGhlIGJpZ2dl c3QgYWRkaXRpb24KaXMgdGhlIEdNVSAoR3JhcGhpY3MgTWFuYWdlbWVudCBVbml0KSB3aGljaCB0 YWtlcyBvdmVyIG1vc3Qgb2YgdGhlCnBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIEdQVSBpdHNlbGYg YnV0IGluIGEgaXJvbmljIHR3aXN0IG9mIGZhdGUKbmVlZHMgYSBnb29kbHkgYW1vdW50IG9mIG1h bmFnZW1lbnQgaXRzZWxmLiAgQWRkIHN1cHBvcnQgZm9yIHRoZQpBNlhYIGNvcmUgY29kZSwgdGhl IEdNVSBhbmQgdGhlIEhGSSAoaGFyZHdhcmUgZmlybXdhcmUgaW50ZXJmYWNlKQpxdWV1ZSB0aGF0 IHRoZSBDUFUgdXNlcyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBHTVUuCgpTaWduZWQtb2ZmLWJ5 OiBKb3JkYW4gQ3JvdXNlIDxqY3JvdXNlQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDMgKwogZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTZ4eF9nbXUuYyAgICAgIHwgMTE3NCArKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaCAgICAgIHwgIDE2MiArKysKIGRy aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMgICAgICB8ICA4MDcgKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmggICAgICB8ICAgNjAg KwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuYyAgICAgIHwgIDQzNSArKysr KysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuaCAgICAgIHwgIDEyNyAr KysKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19kZXZpY2UuYyB8ICAgMTIgKwog ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jICAgIHwgICAgMiArLQogZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oICAgIHwgICAgNCArCiBkcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9ncHUuYyAgICAgICAgICAgICAgfCAgICAyICstCiAxMSBmaWxlcyBj aGFuZ2VkLCAyNzg2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20v TWFrZWZpbGUKaW5kZXggY2Q0MGMwNTBiMmQ3Li40YWZmYzY2NWMwZGUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZQpAQCAtMTAsNiArMTAsOSBAQCBtc20teSA6PSBcCiAJYWRyZW5vL2E1eHhfZ3B1Lm8gXAog CWFkcmVuby9hNXh4X3Bvd2VyLm8gXAogCWFkcmVuby9hNXh4X3ByZWVtcHQubyBcCisJYWRyZW5v L2E2eHhfZ3B1Lm8gXAorCWFkcmVuby9hNnh4X2dtdS5vIFwKKwlhZHJlbm8vYTZ4eF9oZmkubyBc CiAJaGRtaS9oZG1pLm8gXAogCWhkbWkvaGRtaV9hdWRpby5vIFwKIAloZG1pL2hkbWlfYnJpZGdl Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZDgzNWMzN2ExMTIKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jCkBAIC0wLDAgKzEsMTE3NCBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAx Ny0yMDE4IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLworCisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVk ZSA8bGludXgvcG1fb3BwLmg+CisjaW5jbHVkZSA8c29jL3Fjb20vY21kLWRiLmg+CisKKyNpbmNs dWRlICJhNnh4X2dwdS5oIgorI2luY2x1ZGUgImE2eHhfZ211LnhtbC5oIgorCitzdGF0aWMgaXJx cmV0dXJuX3QgYTZ4eF9nbXVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGE2 eHhfZ211ICpnbXUgPSBkYXRhOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBnbXVfcmVhZChn bXUsIFJFR19BNlhYX0dNVV9BT19IT1NUX0lOVEVSUlVQVF9TVEFUVVMpOworCWdtdV93cml0ZShn bXUsIFJFR19BNlhYX0dNVV9BT19IT1NUX0lOVEVSUlVQVF9DTFIsIHN0YXR1cyk7CisKKwlpZiAo c3RhdHVzICYgQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVTX1dET0dfQklURSkgewor CQlkZXZfZXJyX3JhdGVsaW1pdGVkKGdtdS0+ZGV2LCAiR01VIHdhdGNoZG9nIGV4cGlyZWRcbiIp OworCisJCS8qIFRlbXBvcmFyeSB1bnRpbCB3ZSBjYW4gcmVjb3ZlciBzYWZlbHkgKi8KKwkJQlVH KCk7CisJfQorCisJaWYgKHN0YXR1cyAmICBBNlhYX0dNVV9BT19IT1NUX0lOVEVSUlVQVF9TVEFU VVNfSE9TVF9BSEJfQlVTX0VSUk9SKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGdtdS0+ZGV2LCAi R01VIEFIQiBidXMgZXJyb3JcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfR01VX0FPX0hPU1Rf SU5URVJSVVBUX1NUQVRVU19GRU5DRV9FUlIpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZ211LT5k ZXYsICJHTVUgZmVuY2UgZXJyb3I6IDB4JXhcbiIsCisJCQlnbXVfcmVhZChnbXUsIFJFR19BNlhY X0dNVV9BSEJfRkVOQ0VfU1RBVFVTKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0 YXRpYyBpcnFyZXR1cm5fdCBhNnh4X2hmaV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9IGRhdGE7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGdt dV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GTyk7CisJZ211X3dyaXRl KGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfQ0xSLCBzdGF0dXMpOworCisJaWYgKHN0 YXR1cyAmIEE2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GT19NU0dRKQorCQl0YXNrbGV0X3NjaGVk dWxlKCZnbXUtPmhmaV90YXNrbGV0KTsKKworCWlmIChzdGF0dXMgJiBBNlhYX0dNVV9HTVUySE9T VF9JTlRSX0lORk9fQ00zX0ZBVUxUKSB7CisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZ211LT5kZXYs ICJHTVUgZmlybXdhcmUgZmF1bHRcbiIpOworCisJCS8qIFRlbXBvcmFyeSB1bnRpbCB3ZSBjYW4g cmVjb3ZlciBzYWZlbHkgKi8KKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOwor fQorCisvKiBDaGVjayB0byBzZWUgaWYgdGhlIEdYIHJhaWwgaXMgc3RpbGwgcG93ZXJlZCAqLwor c3RhdGljIGJvb2wgYTZ4eF9nbXVfZ3hfaXNfb24oc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJ dTMyIHZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFU VVMpOworCisJcmV0dXJuICEodmFsICYKKwkJKEE2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFU VVNfR1hfSE1fR0RTQ19QT1dFUl9PRkYgfAorCQlBNlhYX0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RB VFVTX0dYX0hNX0NMS19PRkYpKTsKK30KKworc3RhdGljIGJvb2wgYTZ4eF9nbXVfY2hlY2tfaWRs ZV9sZXZlbChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1MzIgdmFsOworCWludCBsb2NhbCA9 IGdtdS0+aWRsZV9sZXZlbDsKKworCS8qIFNQVFAgYW5kIElGUEMgYm90aCByZXBvcnQgYXMgSUZQ QyAqLworCWlmIChnbXUtPmlkbGVfbGV2ZWwgPT0gR01VX0lETEVfU1RBVEVfU1BUUCkKKwkJbG9j YWwgPSBHTVVfSURMRV9TVEFURV9JRlBDOworCisJdmFsID0gZ211X3JlYWQoZ211LCBSRUdfQTZY WF9HUFVfR01VX0NYX0dNVV9SUE1IX1BPV0VSX1NUQVRFKTsKKworCWlmICh2YWwgPT0gbG9jYWwp IHsKKwkJaWYgKGdtdS0+aWRsZV9sZXZlbCAhPSBHTVVfSURMRV9TVEFURV9JRlBDIHx8CisJCQkh YTZ4eF9nbXVfZ3hfaXNfb24oZ211KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyogV2FpdCBmb3IgdGhlIEdNVSB0byBnZXQgdG8gaXRzIG1vc3QgaWRsZSBz dGF0ZSAqLworaW50IGE2eHhfZ211X3dhaXRfZm9yX2lkbGUoc3RydWN0IGE2eHhfZ3B1ICphNnh4 X2dwdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZhNnh4X2dwdS0+Z211OworCisJcmV0 dXJuIHNwaW5fdW50aWwoYTZ4eF9nbXVfY2hlY2tfaWRsZV9sZXZlbChnbXUpKTsKK30KKworc3Rh dGljIGludCBhNnh4X2dtdV9zdGFydChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgcmV0 OworCXUzMiB2YWw7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQ00zX1NZU1JFU0VU LCAxKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQ00zX1NZU1JFU0VULCAwKTsKKwor CXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HTVVfQ00zX0ZXX0lOSVRfUkVT VUxULCB2YWwsCisJCXZhbCA9PSAweGJhYmVmYWNlLCAxMDAsIDEwMDAwKTsKKworCWlmIChyZXQp CisJCWRldl9lcnIoZ211LT5kZXYsICJHTVUgZmlybXdhcmUgaW5pdGFsaXphdGlvbiB0aW1lZCBv dXRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9oZmlfc3Rh cnQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJZ211 X3JtdyhnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX01BU0ssCisJCUE2WFhfR01VX0dN VTJIT1NUX0lOVFJfSU5GT19NU0dRLCAwKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dN VV9IRklfQ1RSTF9JTklULCAxKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdf QTZYWF9HTVVfSEZJX0NUUkxfU1RBVFVTLCB2YWwsCisJCXZhbCAmIDEsIDEwMCwgMTAwMDApOwor CWlmIChyZXQpCisJCWRldl9lcnIoZ211LT5kZXYsICJVbmFibGUgdG8gc3RhcnQgdGhlIEhGSSBx dWV1ZXNcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVHJpZ2dlciBhIE9PQiAob3V0IG9m IGJhbmQpIHJlcXVlc3QgdG8gdGhlIEdNVSAqLworaW50IGE2eHhfZ211X3NldF9vb2Ioc3RydWN0 IGE2eHhfZ211ICpnbXUsIGVudW0gYTZ4eF9nbXVfb29iX3N0YXRlIHN0YXRlKQoreworCWludCBy ZXQ7CisJdTMyIHZhbDsKKwlpbnQgcmVxdWVzdCwgYWNrOworCWNvbnN0IGNoYXIgKm5hbWU7CisK Kwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBHTVVfT09CX0dQVV9TRVQ6CisJCXJlcXVlc3QgPSBH TVVfT09CX0dQVV9TRVRfUkVRVUVTVDsKKwkJYWNrID0gR01VX09PQl9HUFVfU0VUX0FDSzsKKwkJ bmFtZSA9ICJHUFVfU0VUIjsKKwkJYnJlYWs7CisJY2FzZSBHTVVfT09CX0JPT1RfU0xVTUJFUjoK KwkJcmVxdWVzdCA9IEdNVV9PT0JfQk9PVF9TTFVNQkVSX1JFUVVFU1Q7CisJCWFjayA9IEdNVV9P T0JfQk9PVF9TTFVNQkVSX0FDSzsKKwkJbmFtZSA9ICJCT09UX1NMVU1CRVIiOworCQlicmVhazsK KwljYXNlIEdNVV9PT0JfRENWU19TRVQ6CisJCXJlcXVlc3QgPSBHTVVfT09CX0RDVlNfUkVRVUVT VDsKKwkJYWNrID0gR01VX09PQl9EQ1ZTX0FDSzsKKwkJbmFtZSA9ICJHUFVfRENWUyI7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRyaWdnZXIgdGhl IGVxdWVzdGVkIE9PQiBvcGVyYXRpb24gKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVf SE9TVDJHTVVfSU5UUl9TRVQsIDEgPDwgcmVxdWVzdCk7CisKKwkvKiBXYWl0IGZvciB0aGUgYWNr bm93bGVkZ2UgaW50ZXJydXB0ICovCisJcmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19B NlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk8sIHZhbCwKKwkJdmFsICYgKDEgPDwgYWNrKSwgMTAw LCAxMDAwMCk7CisKKwlpZiAocmV0KQorCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJIlRpbWVvdXQg d2FpdGluZyBmb3IgR01VIE9PQiBzZXQgJXM6IDB4JXhcbiIsCisJCQkJbmFtZSwKKwkJCQlnbXVf cmVhZChnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk8pKTsKKworCS8qIENsZWFy IHRoZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9H TVVfR01VMkhPU1RfSU5UUl9DTFIsIDEgPDwgYWNrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q IENsZWFyIGEgcGVuZGluZyBPT0Igc3RhdGUgaW4gdGhlIEdNVSAqLwordm9pZCBhNnh4X2dtdV9j bGVhcl9vb2Ioc3RydWN0IGE2eHhfZ211ICpnbXUsIGVudW0gYTZ4eF9nbXVfb29iX3N0YXRlIHN0 YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEdNVV9PT0JfR1BVX1NFVDoKKwkJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0hPU1QyR01VX0lOVFJfU0VULAorCQkJMSA8PCBHTVVf T09CX0dQVV9TRVRfQ0xFQVIpOworCQlicmVhazsKKwljYXNlIEdNVV9PT0JfQk9PVF9TTFVNQkVS OgorCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSE9TVDJHTVVfSU5UUl9TRVQsCisJCQkx IDw8IEdNVV9PT0JfQk9PVF9TTFVNQkVSX0NMRUFSKTsKKwkJYnJlYWs7CisJY2FzZSBHTVVfT09C X0RDVlNfU0VUOgorCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSE9TVDJHTVVfSU5UUl9T RVQsCisJCQkxIDw8IEdNVV9PT0JfRENWU19DTEVBUik7CisJCWJyZWFrOworCX0KK30KKworLyog RW5hYmxlIENQVSBjb250cm9sIG9mIFNQVFAgcG93ZXIgcG93ZXIgY29sbGFwc2UgKi8KK3N0YXRp YyBpbnQgYTZ4eF9zcHRwcmFjX2VuYWJsZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQg cmV0OworCXUzMiB2YWw7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfR1hfU1BUUFJB Q19QT1dFUl9DT05UUk9MLCAweDc3ODAwMCk7CisKKwlyZXQgPSBnbXVfcG9sbF90aW1lb3V0KGdt dSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMsIHZhbCwKKwkJKHZhbCAmIDB4 MzgpID09IDB4MjgsIDEsIDEwMCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ211LT5kZXYs ICJVbmFibGUgdG8gcG93ZXIgb24gU1BUUFJBQzogMHgleFxuIiwKKwkJCWdtdV9yZWFkKGdtdSwg UkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpKTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworLyogRGlzYWJsZSBDUFUgY29udHJvbCBvZiBTUFRQIHBvd2VyIHBvd2VyIGNvbGxhcHNl ICovCitzdGF0aWMgdm9pZCBhNnh4X3NwdHByYWNfZGlzYWJsZShzdHJ1Y3QgYTZ4eF9nbXUgKmdt dSkKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgcmV0ZW50aW9uIGlz IG9uICovCisJZ211X3JtdyhnbXUsIFJFR19BNlhYX0dQVV9DQ19HWF9HRFNDUiwgMCwgKDEgPDwg MTEpKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9HWF9TUFRQUkFDX1BPV0VSX0NP TlRST0wsIDB4Nzc4MDAxKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZY WF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRVUywgdmFsLAorCQkodmFsICYgMHgwNCksIDEwMCwg MTAwMDApOworCisJaWYgKHJldCkKKwkJZGV2X2VycihnbXUtPmRldiwgImZhaWxlZCB0byBwb3dl ciBvZmYgU1BUUFJBQzogMHgleFxuIiwKKwkJCWdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX1NQ VFBSQUNfUFdSX0NMS19TVEFUVVMpKTsKK30KKworLyogTGV0IHRoZSBHTVUga25vdyB3ZSBhcmUg c3RhcnRpbmcgYSBib290IHNlcXVlbmNlICovCitzdGF0aWMgaW50IGE2eHhfZ211X2dmeF9yYWls X29uKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCXUzMiB2b3RlOworCisJLyogTGV0IHRoZSBH TVUga25vdyB3ZSBhcmUgZ2V0dGluZyByZWFkeSBmb3IgYm9vdCAqLworCWdtdV93cml0ZShnbXUs IFJFR19BNlhYX0dNVV9CT09UX1NMVU1CRVJfT1BUSU9OLCAwKTsKKworCS8qIENob29zZSB0aGUg ImRlZmF1bHQiIHBvd2VyIGxldmVsIGFzIHRoZSBoaWdoZXN0IGF2YWlsYWJsZSAqLworCXZvdGUg PSBnbXUtPmd4X2FyY192b3Rlc1tnbXUtPm5yX2dwdV9mcmVxcyAtIDFdOworCisJZ211X3dyaXRl KGdtdSwgUkVHX0E2WFhfR01VX0dYX1ZPVEVfSURYLCB2b3RlICYgMHhmZik7CisJZ211X3dyaXRl KGdtdSwgUkVHX0E2WFhfR01VX01YX1ZPVEVfSURYLCAodm90ZSA+PiA4KSAmIDB4ZmYpOworCisJ LyogTGV0IHRoZSBHTVUga25vdyB0aGUgYm9vdCBzZXF1ZW5jZSBoYXMgc3RhcnRlZCAqLworCXJl dHVybiBhNnh4X2dtdV9zZXRfb29iKGdtdSwgR01VX09PQl9CT09UX1NMVU1CRVIpOworfQorCisv KiBMZXQgdGhlIEdNVSBrbm93IHRoYXQgd2UgYXJlIGFib3V0IHRvIGdvIGludG8gc2x1bWJlciAq Lworc3RhdGljIGludCBhNnh4X2dtdV9ub3RpZnlfc2x1bWJlcihzdHJ1Y3QgYTZ4eF9nbXUgKmdt dSkKK3sKKwlpbnQgcmV0OworCisJLyogRGlzYWJsZSB0aGUgcG93ZXIgY291bnRlciBzbyB0aGUg R01VIGlzbid0IGJ1c3kgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQ1hfR01VX1BP V0VSX0NPVU5URVJfRU5BQkxFLCAwKTsKKworCS8qIERpc2FibGUgU1BUUF9QQyBpZiB0aGUgQ1BV IGlzIHJlc3BvbnNpYmxlIGZvciBpdCAqLworCWlmIChnbXUtPmlkbGVfbGV2ZWwgPCBHTVVfSURM RV9TVEFURV9TUFRQKQorCQlhNnh4X3NwdHByYWNfZGlzYWJsZShnbXUpOworCisJLyogVGVsbCB0 aGUgR01VIHRvIGdldCByZWFkeSB0byBzbHVtYmVyICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfR01VX0JPT1RfU0xVTUJFUl9PUFRJT04sIDEpOworCisJcmV0ID0gYTZ4eF9nbXVfc2V0X29v YihnbXUsIEdNVV9PT0JfQk9PVF9TTFVNQkVSKTsKKwlhNnh4X2dtdV9jbGVhcl9vb2IoZ211LCBH TVVfT09CX0JPT1RfU0xVTUJFUik7CisKKwlpZiAoIXJldCkgeworCQkvKiBDaGVjayB0byBzZWUg aWYgdGhlIEdNVSByZWFsbHkgZGlkIHNsdW1iZXIgKi8KKwkJaWYgKGdtdV9yZWFkKGdtdSwgUkVH X0E2WFhfR1BVX0dNVV9DWF9HTVVfUlBNSF9QT1dFUl9TVEFURSkKKwkJCSE9IDB4MGYpIHsKKwkJ CWRldl9lcnIoZ211LT5kZXYsICJUaGUgR01VIGRpZCBub3QgZ28gaW50byBzbHVtYmVyXG4iKTsK KwkJCXJldCA9IC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwkvKiBQdXQgZmVuY2UgaW50byBhbGxv dyBtb2RlICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0FPX0FIQl9GRU5DRV9DVFJM LCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGE2eHhfcnBtaF9zdGFydChzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgcmV0OworCXUzMiB2YWw7CisKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfUlNDQ19DT05UUk9MX1JFUSwgMSA8PCAxKTsKKwkvKiBXYWl0IGZv ciB0aGUgcmVnaXN0ZXIgdG8gZmluaXNoIHBvc3RpbmcgKi8KKwl3bWIoKTsKKworCXJldCA9IGdt dV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HTVVfUlNDQ19DT05UUk9MX0FDSywgdmFsLAor CQl2YWwgJiAoMSA8PCAxKSwgMTAwLCAxMDAwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGdt dS0+ZGV2LCAiVW5hYmxlIHRvIHBvd2VyIG9uIHRoZSBHUFUgUlNDXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSBnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2WFhfUlNDQ19TRVFf QlVTWV9EUlYwLCB2YWwsCisJCSF2YWwsIDEwMCwgMTAwMDApOworCisJaWYgKCFyZXQpIHsKKwkJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1JTQ0NfQ09OVFJPTF9SRVEsIDApOworCisJCS8q IFJlLWVuYWJsZSB0aGUgcG93ZXIgY291bnRlciAqLworCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfRU5BQkxFLCAxKTsKKwkJcmV0dXJuIDA7CisJfQor CisJZGV2X2VycihnbXUtPmRldiwgIkdQVSBSU0Mgc2VxdWVuY2Ugc3R1Y2sgd2hpbGUgd2FraW5n IHVwIHRoZSBHUFVcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfcnBt aF9zdG9wKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQ7CisJdTMyIHZhbDsKKwor CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9SU0NDX0NPTlRST0xfUkVRLCAxKTsKKworCXJl dCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HUFVfUlNDQ19SU0NfU1RBVFVTMF9E UlYwLAorCQl2YWwsIHZhbCAmICgxIDw8IDE2KSwgMTAwLCAxMDAwMCk7CisJaWYgKHJldCkKKwkJ ZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBwb3dlciBvZmYgdGhlIEdQVSBSU0NcbiIpOwor CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1JTQ0NfQ09OVFJPTF9SRVEsIDApOworfQor CitzdGF0aWMgdm9pZCBhNnh4X2dtdV9ycG1oX2luaXQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7 CisJLyogRGlzYWJsZSBTREUgY2xvY2sgZ2F0aW5nICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfR1BVX1JTQ0NfUlNDX1NUQVRVUzBfRFJWMCwgQklUKDI0KSk7CisKKwkvKiBTZXR1cCBSU0Mg UERDIGhhbmRzaGFrZSBmb3Igc2xlZXAgYW5kIHdha2V1cCAqLworCWdtdV93cml0ZShnbXUsIFJF R19BNlhYX1JTQ0NfUERDX1NMQVZFX0lEX0RSVjAsIDEpOworCWdtdV93cml0ZShnbXUsIFJFR19B NlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0RBVEEsIDApOworCWdtdV93cml0ZShnbXUsIFJFR19B NlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0FERFIsIDApOworCWdtdV93cml0ZShnbXUsIFJFR19B NlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0RBVEEgKyAyLCAwKTsKKwlnbXVfd3JpdGUoZ211LCBS RUdfQTZYWF9SU0NDX0hJRERFTl9UQ1NfQ01EMF9BRERSICsgMiwgMCk7CisJZ211X3dyaXRlKGdt dSwgUkVHX0E2WFhfUlNDQ19ISURERU5fVENTX0NNRDBfREFUQSArIDQsIDB4ODAwMDAwMDApOwor CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0FERFIgKyA0LCAw KTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0NDX09WRVJSSURFX1NUQVJUX0FERFIsIDAp OworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERDX1NFUV9TVEFSVF9BRERSLCAweDQ1 MjApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERDX01BVENIX1ZBTFVFX0xPLCAw eDQ1MTApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERDX01BVENIX1ZBTFVFX0hJ LCAweDQ1MTQpOworCisJLyogTG9hZCBSU0Mgc2VxdWVuY2VyIHVDb2RlIGZvciBzbGVlcCBhbmQg d2FrZXVwICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19TRVFfTUVNXzBfRFJWMCwg MHhhN2E1MDZhMCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19TRVFfTUVNXzBfRFJW MCArIDEsIDB4YTFlNmE2ZTcpOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfU0VRX01F TV8wX0RSVjAgKyAyLCAweGEyZTA4MWUxKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0ND X1NFUV9NRU1fMF9EUlYwICsgMywgMHhlOWE5ODJlMik7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2 WFhfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDQsIDB4MDAyMGU4YTgpOworCisJLyogTG9hZCBQREMg c2VxdWVuY2VyIHVDb2RlIGZvciBwb3dlciB1cCBhbmQgcG93ZXIgZG93biBzZXF1ZW5jZSAqLwor CXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfU0VRX01FTV8wLCAweGZlYmVhMWUxKTsK KwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1NFUV9NRU1fMCArIDEsIDB4YTVhNGEz YTIpOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfU0VRX01FTV8wICsgMiwgMHg4 MzgyYTZlMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9TRVFfTUVNXzAgKyAz LCAweGJjZTNlMjg0KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1NFUV9NRU1f MCArIDQsIDB4MDAyMDgxZmMpOworCisJLyogU2V0IFRDUyBjb21tYW5kcyB1c2VkIGJ5IFBEQyBz ZXF1ZW5jZSBmb3IgbG93IHBvd2VyIG1vZGVzICovCisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhf UERDX0dQVV9UQ1MxX0NNRF9FTkFCTEVfQkFOSywgNyk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2 WFhfUERDX0dQVV9UQ1MxX0NNRF9XQUlUX0ZPUl9DTVBMX0JBTkssIDApOworCXBkY193cml0ZShn bXUsIFJFR19BNlhYX1BEQ19HUFVfVENTMV9DT05UUk9MLCAwKTsKKwlwZGNfd3JpdGUoZ211LCBS RUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9NU0dJRCwgMHgxMDEwOCk7CisJcGRjX3dyaXRlKGdt dSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfQUREUiwgMHgzMDAxMCk7CisJcGRjX3dyaXRl KGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfREFUQSwgMSk7CisJcGRjX3dyaXRlKGdt dSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfTVNHSUQgKyA0LCAweDEwMTA4KTsKKwlwZGNf d3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9BRERSICsgNCwgMHgzMDAwMCk7 CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfREFUQSArIDQsIDB4 MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfTVNHSUQgKyA4 LCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9B RERSICsgOCwgMHgzMDA4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1Mx X0NNRDBfREFUQSArIDgsIDB4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9U Q1MzX0NNRF9FTkFCTEVfQkFOSywgNyk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQ VV9UQ1MzX0NNRF9XQUlUX0ZPUl9DTVBMX0JBTkssIDApOworCXBkY193cml0ZShnbXUsIFJFR19B NlhYX1BEQ19HUFVfVENTM19DT05UUk9MLCAwKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9Q RENfR1BVX1RDUzNfQ01EMF9NU0dJRCwgMHgxMDEwOCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2 WFhfUERDX0dQVV9UQ1MzX0NNRDBfQUREUiwgMHgzMDAxMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVH X0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfREFUQSwgMik7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2 WFhfUERDX0dQVV9UQ1MzX0NNRDBfTVNHSUQgKyA0LCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211 LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9BRERSICsgNCwgMHgzMDAwMCk7CisJcGRjX3dy aXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfREFUQSArIDQsIDB4Myk7CisJcGRj X3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfTVNHSUQgKyA4LCAweDEwMTA4 KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9BRERSICsgOCwg MHgzMDA4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfREFU QSArIDgsIDB4Myk7CisKKwkvKiBTZXR1cCBHUFUgUERDICovCisJcGRjX3dyaXRlKGdtdSwgUkVH X0E2WFhfUERDX0dQVV9TRVFfU1RBUlRfQUREUiwgMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2 WFhfUERDX0dQVV9FTkFCTEVfUERDLCAweDgwMDAwMDAxKTsKKworCS8qIGVuc3VyZSBubyB3cml0 ZXMgaGFwcGVuIGJlZm9yZSB0aGUgdUNvZGUgaXMgZnVsbHkgd3JpdHRlbiAqLworCXdtYigpOwor fQorCisvKgorICogVGhlIGxvd2VzdCAxNiBiaXRzIG9mIHRoaXMgdmFsdWUgYXJlIHRoZSBudW1i ZXIgb2YgWE8gY2xvY2sgY3ljbGVzIGZvciBtYWluCisgKiBoeXN0ZXJlc2lzIHdoaWNoIGlzIHNl dCBhdCAweDE2ODAgY3ljbGVzICgzMDAgdXMpLiAgVGhlIGhpZ2hlciAxNiBiaXRzIGFyZQorICog Zm9yIHRoZSBzaG9ydGVyIGh5c3RlcmVzaXMgdGhhdCBoYXBwZW5zIGFmdGVyIG1haW4gLSB0aGlz IGlzIDB4YSAoLjUgdXMpCisgKi8KKworI2RlZmluZSBHTVVfUFdSX0NPTF9IWVNUIDB4MDAwYTE2 ODAKKworLyogU2V0IHVwIHRoZSBpZGxlIHN0YXRlIGZvciB0aGUgR01VICovCitzdGF0aWMgdm9p ZCBhNnh4X2dtdV9wb3dlcl9jb25maWcoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJLyogRGlz YWJsZSBHTVUgV0IvUkIgYnVmZmVyICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1NZ U19CVVNfQ09ORklHLCAweDEpOworCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1BXUl9D T0xfSU5URVJfRlJBTUVfQ1RSTCwgMHg5YzQwNDAwKTsKKworCXN3aXRjaCAoZ211LT5pZGxlX2xl dmVsKSB7CisJY2FzZSBHTVVfSURMRV9TVEFURV9JRlBDOgorCQlnbXVfd3JpdGUoZ211LCBSRUdf QTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9IWVNULAorCQkJR01VX1BXUl9DT0xfSFlTVCk7 CisJCWdtdV9ybXcoZ211LCBSRUdfQTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9DVFJMLCAw LAorCQkJQTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9DVFJMX0lGUENfRU5BQkxFIHwKKwkJ CUE2WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTF9ITV9QT1dFUl9DT0xMQVBTRV9FTkFC TEUpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIEdNVV9JRExFX1NUQVRFX1NQVFA6CisJ CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9QV1JfQ09MX1NQVFBSQUNfSFlTVCwKKwkJCUdN VV9QV1JfQ09MX0hZU1QpOworCQlnbXVfcm13KGdtdSwgUkVHX0E2WFhfR01VX1BXUl9DT0xfSU5U RVJfRlJBTUVfQ1RSTCwgMCwKKwkJCUE2WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTF9J RlBDX0VOQUJMRSB8CisJCQlBNlhYX0dNVV9QV1JfQ09MX0lOVEVSX0ZSQU1FX0NUUkxfU1BUUFJB Q19QT1dFUl9DT05UUk9MX0VOQUJMRSk7CisJfQorCisJLyogRW5hYmxlIFJQTWggR1BVIGNsaWVu dCAqLworCWdtdV9ybXcoZ211LCBSRUdfQTZYWF9HTVVfUlBNSF9DVFJMLCAwLAorCQlBNlhYX0dN VV9SUE1IX0NUUkxfUlBNSF9JTlRFUkZBQ0VfRU5BQkxFIHwKKwkJQTZYWF9HTVVfUlBNSF9DVFJM X0xMQ19WT1RFX0VOQUJMRSB8CisJCUE2WFhfR01VX1JQTUhfQ1RSTF9ERFJfVk9URV9FTkFCTEUg fAorCQlBNlhYX0dNVV9SUE1IX0NUUkxfTVhfVk9URV9FTkFCTEUgfAorCQlBNlhYX0dNVV9SUE1I X0NUUkxfQ1hfVk9URV9FTkFCTEUgfAorCQlBNlhYX0dNVV9SUE1IX0NUUkxfR0ZYX1ZPVEVfRU5B QkxFKTsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9md19zdGFydChzdHJ1Y3QgYTZ4eF9nbXUg KmdtdSwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXN0YXRpYyBib29sIHJwbWhfaW5pdDsKKwlz dHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gY29udGFpbmVyX29mKGdtdSwgc3RydWN0IGE2eHhf Z3B1LCBnbXUpOworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gJmE2eHhfZ3B1LT5i YXNlOworCWludCBpLCByZXQ7CisJdTMyIGNoaXBpZDsKKwl1MzIgKmltYWdlOworCisJaWYgKHN0 YXRlID09IEdNVV9XQVJNX0JPT1QpIHsKKwkJcmV0ID0gYTZ4eF9ycG1oX3N0YXJ0KGdtdSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIExvYWQgdGhlIGZpcm13 YXJlIGluIGNhc2UgaXQgaGFzbid0IGJlZW4gZG9uZSB5ZXQgKi8KKwkJcmV0ID0gYWRyZW5vX2xv YWRfZncoYWRyZW5vX2dwdSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIFNh bml0eSBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgZmlybXdhcmUgdGhhdCB3YXMgbG9hZGVkICovCisJ CWlmIChhZHJlbm9fZ3B1LT5md1tBRFJFTk9fRldfR01VXS0+c2l6ZSA+IDB4ODAwMCkgeworCQkJ ZGV2X2VycihnbXUtPmRldiwKKwkJCQkiR01VIGZpcm13YXJlIGlzIGJpZ2dlciB0aGFuIHRoZSBh dmFpbGFibGUgcmVnaW9uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogVHVy biBvbiByZWdpc3RlciByZXRlbnRpb24gKi8KKwkJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01V X0dFTkVSQUxfNywgMSk7CisKKwkJLyogV2Ugb25seSBuZWVkIHRvIGxvYWQgdGhlIFJQTWggbWlj cm9jb2RlIG9uY2UgKi8KKwkJaWYgKCFycG1oX2luaXQpIHsKKwkJCWE2eHhfZ211X3JwbWhfaW5p dChnbXUpOworCQkJcnBtaF9pbml0ID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChzdGF0ZSAhPSBHTVVf UkVTRVQpIHsKKwkJCXJldCA9IGE2eHhfcnBtaF9zdGFydChnbXUpOworCQkJaWYgKHJldCkKKwkJ CQlyZXR1cm4gcmV0OworCQl9CisKKwkJaW1hZ2UgPSAodTMyICopIGFkcmVub19ncHUtPmZ3W0FE UkVOT19GV19HTVVdLT5kYXRhOworCisJCWZvciAoaSA9IDA7IGkgPCBhZHJlbm9fZ3B1LT5md1tB RFJFTk9fRldfR01VXS0+c2l6ZSA+PiAyOyBpKyspCisJCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfQ00zX0lUQ01fU1RBUlQgKyBpLAorCQkJCWltYWdlW2ldKTsKKwl9CisKKwlnbXVfd3Jp dGUoZ211LCBSRUdfQTZYWF9HTVVfQ00zX0ZXX0lOSVRfUkVTVUxULCAwKTsKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfQ00zX0JPT1RfQ09ORklHLCAweDAyKTsKKworCS8qIFdyaXRlIHRo ZSBpb3ZhIG9mIHRoZSBIRkkgdGFibGUgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVf SEZJX1FUQkxfQUREUiwgZ211LT5oZmktPmlvdmEpOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhY X0dNVV9IRklfUVRCTF9JTkZPLCAxKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9B SEJfRkVOQ0VfUkFOR0VfMCwKKwkJKDEgPDwgMzEpIHwgKDB4YSA8PCAxOCkgfCAoMHhhMCkpOwor CisJY2hpcGlkID0gYWRyZW5vX2dwdS0+cmV2LmNvcmUgPDwgMjQ7CisJY2hpcGlkIHw9IGFkcmVu b19ncHUtPnJldi5tYWpvciA8PCAxNjsKKwljaGlwaWQgfD0gYWRyZW5vX2dwdS0+cmV2Lm1pbm9y IDw8IDEyOworCWNoaXBpZCB8PSBhZHJlbm9fZ3B1LT5yZXYucGF0Y2hpZCA8PCA4OworCisJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0hGSV9TRlJfQUREUiwgY2hpcGlkKTsKKworCS8qIFNl dCB1cCB0aGUgbG93ZXN0IGlkbGUgbGV2ZWwgb24gdGhlIEdNVSAqLworCWE2eHhfZ211X3Bvd2Vy X2NvbmZpZyhnbXUpOworCisJcmV0ID0gYTZ4eF9nbXVfc3RhcnQoZ211KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gYTZ4eF9nbXVfZ2Z4X3JhaWxfb24oZ211KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIFNQVFBfUEMgaWYgdGhlIENQVSBpcyBy ZXNwb25zaWJsZSBmb3IgaXQgKi8KKwlpZiAoZ211LT5pZGxlX2xldmVsIDwgR01VX0lETEVfU1RB VEVfU1BUUCkgeworCQlyZXQgPSBhNnh4X3NwdHByYWNfZW5hYmxlKGdtdSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGE2eHhfZ211X2hmaV9zdGFydChnbXUpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0aGlzIHdt YigpIGhlcmU/ICovCisJd21iKCk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBNlhYX0hG SV9JUlFfTUFTSyBcCisJKEE2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GT19NU0dRIHwgXAorCSBB NlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk9fQ00zX0ZBVUxUKQorCisjZGVmaW5lIEE2WFhfR01V X0lSUV9NQVNLIFwKKwkoQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVTX1dET0dfQklU RSB8IFwKKwkgQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVTX0hPU1RfQUhCX0JVU19F UlJPUiB8IFwKKwkgQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVTX0ZFTkNFX0VSUikK Kworc3RhdGljIHZvaWQgYTZ4eF9nbXVfaXJxX2VuYWJsZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkK K3sKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfQ0xSLCB+ MCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfQ0xSLCB+MCk7 CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfTUFTSywK KwkJfkE2WFhfR01VX0lSUV9NQVNLKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfR01V MkhPU1RfSU5UUl9NQVNLLAorCQl+QTZYWF9IRklfSVJRX01BU0spOworCisJZW5hYmxlX2lycShn bXUtPmdtdV9pcnEpOworCWVuYWJsZV9pcnEoZ211LT5oZmlfaXJxKTsKK30KKworc3RhdGljIHZv aWQgYTZ4eF9nbXVfaXJxX2Rpc2FibGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJZGlzYWJs ZV9pcnEoZ211LT5nbXVfaXJxKTsKKwlkaXNhYmxlX2lycShnbXUtPmhmaV9pcnEpOworCisJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX01BU0ssIH4wKTsKKwln bXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfR01VMkhPU1RfSU5UUl9NQVNLLCB+MCk7Cit9CisK K2ludCBhNnh4X2dtdV9yZXNldChzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1KQoreworCXN0cnVj dCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJaW50IHJldDsKKwl1MzIgdmFsOwor CisJLyogRmx1c2ggYWxsIHRoZSBxdWV1ZXMgKi8KKwlhNnh4X2hmaV9zdG9wKGdtdSk7CisKKwkv KiBTdG9wIHRoZSBpbnRlcnJ1cHRzICovCisJYTZ4eF9nbXVfaXJxX2Rpc2FibGUoZ211KTsKKwor CS8qIEZvcmNlIG9mZiBTUFRQIGluIGNhc2UgdGhlIEdNVSBpcyBtYW5hZ2luZyBpdCAqLworCWE2 eHhfc3B0cHJhY19kaXNhYmxlKGdtdSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG91 dHN0YW5kaW5nIFJQTWggdm90ZXMgKi8KKwlnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2WFhf UlNDQ19UQ1MwX0RSVjBfU1RBVFVTLCB2YWwsCisJCSh2YWwgJiAxKSwgMTAwLCAxMDAwMCk7CisJ Z211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX1JTQ0NfVENTMV9EUlYwX1NUQVRVUywgdmFs LAorCQkodmFsICYgMSksIDEwMCwgMTAwMDApOworCWdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdf QTZYWF9SU0NDX1RDUzJfRFJWMF9TVEFUVVMsIHZhbCwKKwkJKHZhbCAmIDEpLCAxMDAsIDEwMDAw KTsKKwlnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2WFhfUlNDQ19UQ1MzX0RSVjBfU1RBVFVT LCB2YWwsCisJCSh2YWwgJiAxKSwgMTAwLCAxMDAwKTsKKworCS8qIEZvcmNlIG9mZiB0aGUgR1gg R1NEQyAqLworCXJlZ3VsYXRvcl9mb3JjZV9kaXNhYmxlKGdtdS0+Z3gpOworCisJLyogRGlzYWJs ZSB0aGUgcmVzb3VyY2VzICovCisJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoZ211LT5ucl9j bG9ja3MsIGdtdS0+Y2xvY2tzKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGdtdS0+ZGV2KTsKKwor CS8qIFJlLWVuYWJsZSB0aGUgcmVzb3VyY2VzICovCisJcG1fcnVudGltZV9nZXRfc3luYyhnbXUt PmRldik7CisKKwkvKiBVc2UgYSBrbm93biByYXRlIHRvIGJyaW5nIHVwIHRoZSBHTVUgKi8KKwlj bGtfc2V0X3JhdGUoZ211LT5jb3JlX2NsaywgMjAwMDAwMDAwKTsKKwljbGtfYnVsa19wcmVwYXJl X2VuYWJsZShnbXUtPm5yX2Nsb2NrcywgZ211LT5jbG9ja3MpOworCisJYTZ4eF9nbXVfaXJxX2Vu YWJsZShnbXUpOworCisJcmV0ID0gYTZ4eF9nbXVfZndfc3RhcnQoZ211LCBHTVVfUkVTRVQpOwor CWlmICghcmV0KQorCQlyZXQgPSBhNnh4X2hmaV9zdGFydChnbXUsIEdNVV9DT0xEX0JPT1QpOwor CisJaWYgKHJldCkKKwkJYTZ4eF9nbXVfY2xlYXJfb29iKGdtdSwgR01VX09PQl9CT09UX1NMVU1C RVIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGE2eHhfZ211X3Jlc3VtZShzdHJ1Y3QgYTZ4 eF9ncHUgKmE2eHhfZ3B1KQoreworCXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5n bXU7CisJaW50IHN0YXR1cywgcmV0OworCisJaWYgKFdBUk4oIWdtdS0+bW1pbywgIlRoZSBHTVUg aXMgbm90IHNldCB1cCB5ZXRcbiIpKQorCQlyZXR1cm4gMDsKKworCS8qIFR1cm4gb24gdGhlIHJl c291cmNlcyAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZ211LT5kZXYpOworCisJLyogVXNlIGEg a25vd24gcmF0ZSB0byBicmluZyB1cCB0aGUgR01VICovCisJY2xrX3NldF9yYXRlKGdtdS0+Y29y ZV9jbGssIDIwMDAwMDAwMCk7CisJY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoZ211LT5ucl9jbG9j a3MsIGdtdS0+Y2xvY2tzKTsKKworCWE2eHhfZ211X2lycV9lbmFibGUoZ211KTsKKworCS8qIENo ZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZG9pbmcgYSBjb2xkIG9yIHdhcm0gYm9vdCAqLworCXN0YXR1 cyA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX0dFTkVSQUxfNykgPT0gMSA/CisJCUdNVV9X QVJNX0JPT1QgOiBHTVVfQ09MRF9CT09UOworCisJcmV0ID0gYTZ4eF9nbXVfZndfc3RhcnQoZ211 LCBzdGF0dXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gYTZ4eF9oZmlfc3Rh cnQoZ211LCBzdGF0dXMpOworCitvdXQ6CisJLyogTWFrZSBzdXJlIHRvIHR1cm4gb2ZmIHRoZSBi b290IE9PQiByZXF1ZXN0IG9uIGVycm9yICovCisJaWYgKHJldCkKKwkJYTZ4eF9nbXVfY2xlYXJf b29iKGdtdSwgR01VX09PQl9CT09UX1NMVU1CRVIpOworCisJcmV0dXJuIHJldDsKK30KKworYm9v bCBhNnh4X2dtdV9pc2lkbGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJdTMyIHJlZzsKKwor CWlmICghZ211LT5tbWlvKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJlZyA9IGdtdV9yZWFkKGdtdSwg UkVHX0E2WFhfR1BVX0dNVV9BT19HUFVfQ1hfQlVTWV9TVEFUVVMpOworCisJaWYgKHJlZyAmICBB NlhYX0dQVV9HTVVfQU9fR1BVX0NYX0JVU1lfU1RBVFVTX0dQVUJVU1lJR05BSEIpCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitpbnQgYTZ4eF9nbXVfc3RvcChzdHJ1Y3Qg YTZ4eF9ncHUgKmE2eHhfZ3B1KQoreworCXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1 LT5nbXU7CisJdTMyIHZhbDsKKworCS8qCisJICogVGhlIEdNVSBtYXkgc3RpbGwgYmUgaW4gc2x1 bWJlciB1bmxlc3MgdGhlIEdQVSBzdGFydGVkIHNvIGNoZWNrIGFuZAorCSAqIHNraXAgcHV0dGlu ZyBpdCBiYWNrIGludG8gc2x1bWJlciBpZiBzbworCSAqLworCXZhbCA9IGdtdV9yZWFkKGdtdSwg UkVHX0E2WFhfR1BVX0dNVV9DWF9HTVVfUlBNSF9QT1dFUl9TVEFURSk7CisKKwlpZiAodmFsICE9 IDB4ZikgeworCQlpbnQgcmV0ID0gYTZ4eF9nbXVfd2FpdF9mb3JfaWRsZShhNnh4X2dwdSk7CisK KwkJLyogVGVtcG9yYXJ5IHVudGlsIHdlIGNhbiByZWNvdmVyIHNhZmVseSAqLworCQlCVUdfT04o cmV0KTsKKworCQkvKiB0ZWxsIHRoZSBHTVUgd2Ugd2FudCB0byBzbHVtYmVyICovCisJCWE2eHhf Z211X25vdGlmeV9zbHVtYmVyKGdtdSk7CisKKwkJcmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUs CisJCQlSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX1NUQVRVUywgdmFsLAorCQkJISh2 YWwgJiBBNlhYX0dQVV9HTVVfQU9fR1BVX0NYX0JVU1lfU1RBVFVTX0dQVUJVU1lJR05BSEIpLAor CQkJMTAwLCAxMDAwMCk7CisKKwkJLyoKKwkJICogTGV0IHRoZSB1c2VyIGtub3cgd2UgZmFpbGVk IHRvIHNsdW1iZXIgYnV0IGRvbid0IHdvcnJ5IHRvbworCQkgKiBtdWNoIGJlY2F1c2Ugd2UgYXJl IHBvd2VyaW5nIGRvd24gYW55d2F5CisJCSAqLworCisJCWlmIChyZXQpCisJCQlkZXZfZXJyKGdt dS0+ZGV2LAorCQkJCSJVbmFibGUgdG8gc2x1bWJlciBHTVU6IHN0YXR1cyA9IDAleC8wJXhcbiIs CisJCQkJZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX1NUQVRV UyksCisJCQkJZ211X3JlYWQoZ211LCBSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX1NU QVRVUzIpKTsKKwl9CisKKwkvKiBUdXJuIG9mZiBIRkkgKi8KKwlhNnh4X2hmaV9zdG9wKGdtdSk7 CisKKwkvKiBTdG9wIHRoZSBpbnRlcnJ1cHRzIGFuZCBtYXNrIHRoZSBoYXJkd2FyZSAqLworCWE2 eHhfZ211X2lycV9kaXNhYmxlKGdtdSk7CisKKwkvKiBUZWxsIFJQTWggdG8gcG93ZXIgb2ZmIHRo ZSBHUFUgKi8KKwlhNnh4X3JwbWhfc3RvcChnbXUpOworCisJY2xrX2J1bGtfZGlzYWJsZV91bnBy ZXBhcmUoZ211LT5ucl9jbG9ja3MsIGdtdS0+Y2xvY2tzKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5 bmMoZ211LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZ211X21l bW9yeV9mcmVlKHN0cnVjdCBhNnh4X2dtdSAqZ211LCBzdHJ1Y3QgYTZ4eF9nbXVfYm8gKmJvKQor eworCWludCBjb3VudCwgaTsKKwl1NjQgaW92YTsKKworCWlmIChJU19FUlJfT1JfTlVMTChibykp CisJCXJldHVybjsKKworCWNvdW50ID0gYm8tPnNpemUgPj4gUEFHRV9TSElGVDsKKwlpb3ZhID0g Ym8tPmlvdmE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgaW92YSArPSBQQUdFX1NJ WkUpIHsKKwkJaW9tbXVfdW5tYXAoZ211LT5kb21haW4sIGlvdmEsIFBBR0VfU0laRSk7CisJCV9f ZnJlZV9wYWdlcyhiby0+cGFnZXNbaV0sIDApOworCX0KKworCWtmcmVlKGJvLT5wYWdlcyk7CisJ a2ZyZWUoYm8pOworfQorCitzdGF0aWMgc3RydWN0IGE2eHhfZ211X2JvICphNnh4X2dtdV9tZW1v cnlfYWxsb2Moc3RydWN0IGE2eHhfZ211ICpnbXUsCisJCXNpemVfdCBzaXplKQoreworCXN0cnVj dCBhNnh4X2dtdV9ibyAqYm87CisJaW50IHJldCwgY291bnQsIGk7CisKKwlibyA9IGt6YWxsb2Mo c2l6ZW9mKCpibyksIEdGUF9LRVJORUwpOworCWlmICghYm8pCisJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOworCisJYm8tPnNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJY291bnQgPSBiby0+ c2l6ZSA+PiBQQUdFX1NISUZUOworCisJYm8tPnBhZ2VzID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9m KHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvLT5wYWdlcykgeworCQlrZnJl ZShibyk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7CisJCWJvLT5wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7 CisJCWlmICghYm8tPnBhZ2VzW2ldKQorCQkJZ290byBlcnI7CisJfQorCisJYm8tPmlvdmEgPSBn bXUtPnVuY2FjaGVkX2lvdmFfYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7 CisJCXJldCA9IGlvbW11X21hcChnbXUtPmRvbWFpbiwKKwkJCWJvLT5pb3ZhICsgKFBBR0VfU0la RSAqIGkpLAorCQkJcGFnZV90b19waHlzKGJvLT5wYWdlc1tpXSksIFBBR0VfU0laRSwKKwkJCUlP TU1VX1JFQUQgfCBJT01NVV9XUklURSk7CisKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihnbXUt PmRldiwgIlVuYWJsZSB0byBtYXAgR01VIGJ1ZmZlciBvYmplY3RcbiIpOworCisJCQlmb3IgKGkg PSBpIC0gMSA7IGkgPj0gMDsgaS0tKQorCQkJCWlvbW11X3VubWFwKGdtdS0+ZG9tYWluLAorCQkJ CQliby0+aW92YSArIChQQUdFX1NJWkUgKiBpKSwKKwkJCQkJUEFHRV9TSVpFKTsKKworCQkJZ290 byBlcnI7CisJCX0KKwl9CisKKwliby0+dmlydCA9IHZtYXAoYm8tPnBhZ2VzLCBjb3VudCwgVk1f SU9SRU1BUCwKKwkJcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOworCWlmICghYm8t PnZpcnQpCisJCWdvdG8gZXJyOworCisJLyogQWxpZ24gZnV0dXJlIElPVkEgYWRkcmVzc2VzIG9u IDFNQiBib3VuZGFyaWVzICovCisJZ211LT51bmNhY2hlZF9pb3ZhX2Jhc2UgKz0gQUxJR04oc2l6 ZSwgU1pfMU0pOworCisJcmV0dXJuIGJvOworCitlcnI6CisJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKKwkJaWYgKGJvLT5wYWdlc1tpXSkKKwkJCV9fZnJlZV9wYWdlcyhiby0+cGFnZXNb aV0sIDApOworCX0KKworCWtmcmVlKGJvLT5wYWdlcyk7CisJa2ZyZWUoYm8pOworCisJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfbWVtb3J5X3Byb2Jl KHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFRoZSBHTVUg YWRkcmVzcyBzcGFjZSBpcyBoYXJkY29kZWQgdG8gdHJlYXQgdGhlIHJhbmdlCisJICogMHg2MDAw MDAwMCAtIDB4ODAwMDAwMDAgYXMgdW4tY2FjaGVkIG1lbW9yeS4gQWxsIGJ1ZmZlcnMgc2hhcmVk CisJICogYmV0d2VlbiB0aGUgR01VIGFuZCB0aGUgQ1BVIHdpbGwgbGl2ZSBpbiB0aGlzIHNwYWNl CisJICovCisJZ211LT51bmNhY2hlZF9pb3ZhX2Jhc2UgPSAweDYwMDAwMDAwOworCisKKwlnbXUt PmRvbWFpbiA9IGlvbW11X2RvbWFpbl9hbGxvYygmcGxhdGZvcm1fYnVzX3R5cGUpOworCWlmICgh Z211LT5kb21haW4pCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW9tbXVfYXR0YWNoX2Rl dmljZShnbXUtPmRvbWFpbiwgZ211LT5kZXYpOworCisJaWYgKHJldCkgeworCQlpb21tdV9kb21h aW5fZnJlZShnbXUtPmRvbWFpbik7CisJCWdtdS0+ZG9tYWluID0gTlVMTDsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCisvKiBHZXQgdGhlIGxpc3Qgb2YgUlBNaCB2b2x0YWdlIGxldmVscyBmcm9t IGNtZC1kYiAqLworc3RhdGljIGludCBhNnh4X2dtdV9ycG1oX2FyY19jbWRzKGNvbnN0IGNoYXIg KmlkLCB2b2lkICp2YWxzLCBpbnQgc2l6ZSkKK3sKKwl1MzIgbGVuID0gY21kX2RiX3JlYWRfYXV4 X2RhdGFfbGVuKGlkKTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChXQVJOX09O KGxlbiA+IHNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNtZF9kYl9yZWFkX2F1eF9kYXRh KGlkLCB2YWxzLCBsZW4pOworCisJLyoKKwkgKiBUaGUgZGF0YSBjb21lcyBiYWNrIGFzIGFuIGFy cmF5IG9mIHVuc2lnbmVkIHNob3J0cyBzbyBhZGp1c3QgdGhlCisJICogY291bnQgYWNjb3JkaW5n bHkKKwkgKi8KKwlyZXR1cm4gbGVuID4+IDE7Cit9CisKKy8qIFJldHVybiB0aGUgJ2FyYy1sZXZl bCcgZm9yIHRoZSBnaXZlbiBmcmVxdWVuY3kgKi8KK3N0YXRpYyB1MzIgYTZ4eF9nbXVfZ2V0X2Fy Y19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3sKKwlzdHJ1 Y3QgZGV2X3BtX29wcCAqb3BwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIHZhbCA9 IDA7CisKKwlpZiAoIWZyZXEpCisJCXJldHVybiAwOworCisJb3BwICA9IGRldl9wbV9vcHBfZmlu ZF9mcmVxX2V4YWN0KGRldiwgZnJlcSwgdHJ1ZSk7CisJaWYgKElTX0VSUihvcHApKQorCQlyZXR1 cm4gMDsKKworCW5wID0gZGV2X3BtX29wcF9nZXRfb2Zfbm9kZShvcHApOworCisJaWYgKG5wKSB7 CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicWNvbSxsZXZlbCIsICZ2YWwpOworCQlvZl9u b2RlX3B1dChucCk7CisJfQorCisJZGV2X3BtX29wcF9wdXQob3BwKTsKKworCXJldHVybiB2YWw7 Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfcnBtaF9hcmNfdm90ZXNfaW5pdChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHUzMiAqdm90ZXMsCisJCXVuc2lnbmVkIGxvbmcgKmZyZXFzLCBpbnQgZnJlcXNf Y291bnQsCisJCXUxNiAqcHJpLCBpbnQgcHJpX2NvdW50LAorCQl1MTYgKnNlYywgaW50IHNlY19j b3VudCkKK3sKKwlpbnQgaSwgajsKKworCS8qIENvbnN0cnVjdCBhIHZvdGUgZm9yIGVhY2ggZnJl cXVlbmN5ICovCisJZm9yIChpID0gMDsgaSA8IGZyZXFzX2NvdW50OyBpKyspIHsKKwkJdTggcGlu ZGV4ID0gMCwgc2luZGV4ID0gMDsKKwkJdTMyIGxldmVsID0gYTZ4eF9nbXVfZ2V0X2FyY19sZXZl bChkZXYsIGZyZXFzW2ldKTsKKworCQkvKiBHZXQgdGhlIHByaW1hcnkgaW5kZXggdGhhdCBtYXRj aGVzIHRoZSBhcmMgbGV2ZWwgKi8KKwkJZm9yIChqID0gMDsgaiA8IHByaV9jb3VudDsgaisrKSB7 CisJCQlpZiAocHJpW2pdID49IGxldmVsKSB7CisJCQkJcGluZGV4ID0gajsKKwkJCQlicmVhazsK KwkJCX0KKwkJfQorCisJCWlmIChqID09IHByaV9jb3VudCkgeworCQkJZGV2X2VycihkZXYsCisJ CQkJIkxldmVsICV1IG5vdCBmb3VuZCBpbiBpbiB0aGUgUlBNaCBsaXN0XG4iLAorCQkJCQlsZXZl bCk7CisJCQlkZXZfZXJyKGRldiwgIkF2YWlsYWJsZSBsZXZlbHM6XG4iKTsKKwkJCWZvciAoaiA9 IDA7IGogPCBwcmlfY291bnQ7IGorKykKKwkJCQlkZXZfZXJyKGRldiwgIiAgJXVcbiIsIHByaVtq XSk7CisKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICogTG9vayBmb3IgYSBs ZXZlbCBpbiBpbiB0aGUgc2Vjb25kYXJ5IGxpc3QgdGhhdCBtYXRjaGVzLiBJZgorCQkgKiBub3Ro aW5nIGZpdHMsIHVzZSB0aGUgbWF4aW11bQorCQkgKi8KKwkJc2luZGV4ID0gc2VjX2NvdW50IC0g MTsKKworCQlmb3IgKGogPSAwOyBqIDwgc2VjX2NvdW50IC0gMTsgaisrKSB7CisJCQlpZiAoc2Vj W2pdID49IGxldmVsKSB7CisJCQkJc2luZGV4ID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CisJCS8qIENvbnN0cnVjdCB0aGUgdm90ZSAqLworCQl2b3Rlc1tpXSA9ICgocHJpW3BpbmRleF0g JiAweGZmZmYpIDw8IDE2KSB8CisJCQkoc2luZGV4IDw8IDgpIHwgcGluZGV4OworCX0KKworCXJl dHVybiAwOworfQorCisvKgorICogVGhlIEdNVSB2b3RlcyB3aXRoIHRoZSBSUE1oIGZvciBpdHNl bGYgYW5kIG9uIGJlaGFsZiBvZiB0aGUgR1BVIGJ1dCB3ZSBuZWVkCisgKiB0byBjb25zdHJ1Y3Qg dGhlIGxpc3Qgb2Ygdm90ZXMgb24gdGhlIENQVSBhbmQgc2VuZCBpdCBvdmVyLiBRdWVyeSB0aGUg UlBNaAorICogdm9sdGFnZSBsZXZlbHMgYW5kIGJ1aWxkIHRoZSB2b3RlcworICovCisKK3N0YXRp YyBpbnQgYTZ4eF9nbXVfcnBtaF92b3Rlc19pbml0KHN0cnVjdCBhNnh4X2dtdSAqZ211KQorewor CXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSBjb250YWluZXJfb2YoZ211LCBzdHJ1Y3QgYTZ4 eF9ncHUsIGdtdSk7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSAmYTZ4eF9ncHUt PmJhc2U7CisJc3RydWN0IG1zbV9ncHUgKmdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCisJdTE2 IGd4WzE2XSwgY3hbMTZdLCBteFsxNl07CisJdTMyIGd4Y291bnQsIGN4Y291bnQsIG14Y291bnQ7 CisJaW50IHJldDsKKworCS8qIEdldCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdm9sdGFnZSBsZXZl bHMgZm9yIGVhY2ggY29tcG9uZW50ICovCisJZ3hjb3VudCA9IGE2eHhfZ211X3JwbWhfYXJjX2Nt ZHMoImdmeC5sdmwiLCBneCwgc2l6ZW9mKGd4KSk7CisJY3hjb3VudCA9IGE2eHhfZ211X3JwbWhf YXJjX2NtZHMoImN4Lmx2bCIsIGN4LCBzaXplb2YoY3gpKTsKKwlteGNvdW50ID0gYTZ4eF9nbXVf cnBtaF9hcmNfY21kcygibXgubHZsIiwgbXgsIHNpemVvZihteCkpOworCisJLyogQnVpbGQgdGhl IEdYIHZvdGVzICovCisJcmV0ID0gYTZ4eF9nbXVfcnBtaF9hcmNfdm90ZXNfaW5pdCgmZ3B1LT5w ZGV2LT5kZXYsIGdtdS0+Z3hfYXJjX3ZvdGVzLAorCQlnbXUtPmdwdV9mcmVxcywgZ211LT5ucl9n cHVfZnJlcXMsCisJCWd4LCBneGNvdW50LCBteCwgbXhjb3VudCk7CisKKwkvKiBCdWlsZCB0aGUg Q1ggdm90ZXMgKi8KKwlyZXQgfD0gYTZ4eF9nbXVfcnBtaF9hcmNfdm90ZXNfaW5pdChnbXUtPmRl diwgZ211LT5jeF9hcmNfdm90ZXMsCisJCWdtdS0+Z211X2ZyZXFzLCBnbXUtPm5yX2dtdV9mcmVx cywKKwkJY3gsIGN4Y291bnQsIG14LCBteGNvdW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgYTZ4eF9nbXVfYnVpbGRfZnJlcV90YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVu c2lnbmVkIGxvbmcgKmZyZXFzLAorCQl1MzIgc2l6ZSkKK3sKKwlpbnQgY291bnQgPSBkZXZfcG1f b3BwX2dldF9vcHBfY291bnQoZGV2KTsKKwlzdHJ1Y3QgZGV2X3BtX29wcCAqb3BwOworCWludCBp LCBpbmRleCA9IDA7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gMTsKKworCS8qCisJICogVGhlIE9Q UCB0YWJsZSBkb2Vzbid0IGNvbnRhaW4gdGhlICJvZmYiIGZyZXF1ZW5jeSBsZXZlbCBzbyB3ZSBu ZWVkIHRvCisJICogYWRkIDEgdG8gdGhlIHRhYmxlIHNpemUgdG8gYWNjb3VudCBmb3IgaXQKKwkg Ki8KKworCWlmIChXQVJOKGNvdW50ICsgMSA+IHNpemUsCisJCSJUaGUgR01VIGZyZXF1ZW5jeSB0 YWJsZSBpcyBiZWluZyB0cnVuY2F0ZWRcbiIpKQorCQljb3VudCA9IHNpemUgLSAxOworCisJLyog U2V0IHRoZSAib2ZmIiBmcmVxdWVuY3kgKi8KKwlmcmVxc1tpbmRleCsrXSA9IDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlvcHAgPSBkZXZfcG1fb3BwX2ZpbmRfZnJlcV9j ZWlsKGRldiwgJmZyZXEpOworCQlpZiAoSVNfRVJSKG9wcCkpCisJCQlicmVhazsKKworCQlkZXZf cG1fb3BwX3B1dChvcHApOworCQlmcmVxc1tpbmRleCsrXSA9IGZyZXErKzsKKwl9CisKKwlyZXR1 cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfcHdybGV2ZWxzX3Byb2JlKHN0cnVj dCBhNnh4X2dtdSAqZ211KQoreworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSBjb250YWlu ZXJfb2YoZ211LCBzdHJ1Y3QgYTZ4eF9ncHUsIGdtdSk7CisJc3RydWN0IGFkcmVub19ncHUgKmFk cmVub19ncHUgPSAmYTZ4eF9ncHUtPmJhc2U7CisJc3RydWN0IG1zbV9ncHUgKmdwdSA9ICZhZHJl bm9fZ3B1LT5iYXNlOworCisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIFRoZSBHTVUgaGFuZGxl cyBpdHMgb3duIGZyZXF1ZW5jeSBzd2l0Y2hpbmcgc28gYnVpbGQgYSBsaXN0IG9mCisJICogYXZh aWxhYmxlIGZyZXF1ZW5jaWVzIHRvIHNlbmQgZHVyaW5nIGluaXRhbGl6YXRpb24KKwkgKi8KKwly ZXQgPSBkZXZfcG1fb3BwX29mX2FkZF90YWJsZShnbXUtPmRldik7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGdtdS0+ZGV2LCAiVW5hYmxlIHRvIHNldCB0aGUgT1BQIHRhYmxlIGZvciB0aGUgR01V XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlnbXUtPm5yX2dtdV9mcmVxcyA9IGE2eHhfZ211 X2J1aWxkX2ZyZXFfdGFibGUoZ211LT5kZXYsCisJCWdtdS0+Z211X2ZyZXFzLCBBUlJBWV9TSVpF KGdtdS0+Z211X2ZyZXFzKSk7CisKKwkvKgorCSAqIFRoZSBHTVUgYWxzbyBoYW5kbGVzIEdQVSBm cmVxdWVuY3kgc3dpdGNoaW5nIHNvIGJ1aWxkIGEgbGlzdAorCSAqIGZyb20gdGhlIEdQVSBPUFAg dGFibGUKKwkgKi8KKwlnbXUtPm5yX2dwdV9mcmVxcyA9IGE2eHhfZ211X2J1aWxkX2ZyZXFfdGFi bGUoJmdwdS0+cGRldi0+ZGV2LAorCQlnbXUtPmdwdV9mcmVxcywgQVJSQVlfU0laRShnbXUtPmdw dV9mcmVxcykpOworCisJLyogQnVpbGQgdGhlIGxpc3Qgb2YgUlBNaCB2b3RlcyB0aGF0IHdlJ2xs IHNlbmQgdG8gdGhlIEdNVSAqLworCXJldHVybiBhNnh4X2dtdV9ycG1oX3ZvdGVzX2luaXQoZ211 KTsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9jbG9ja3NfcHJvYmUoc3RydWN0IGE2eHhfZ211 ICpnbXUpCit7CisJaW50IHJldCA9IG1zbV9jbGtfYnVsa19nZXQoZ211LT5kZXYsICZnbXUtPmNs b2Nrcyk7CisKKwlpZiAocmV0IDwgMSkKKwkJcmV0dXJuIHJldDsKKworCWdtdS0+bnJfY2xvY2tz ID0gcmV0OworCisJZ211LT5jb3JlX2NsayA9IG1zbV9jbGtfYnVsa19nZXRfY2xvY2soZ211LT5j bG9ja3MsCisJCWdtdS0+bnJfY2xvY2tzLCAiZ211Iik7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgX19pb21lbSAqYTZ4eF9nbXVfZ2V0X21taW8oc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKKwkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJldDsKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwK KwkJCUlPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgIlVuYWJsZSB0byBmaW5kIHRoZSAlcyByZWdpc3RlcnNcbiIsIG5hbWUpOworCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXQgPSBkZXZtX2lvcmVtYXAoJnBkZXYt PmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXJldCkgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gbWFwIHRoZSAlcyByZWdpc3RlcnNcbiIsIG5h bWUpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGE2eHhfZ211X2dldF9pcnEoc3RydWN0IGE2eHhfZ211ICpnbXUsIHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWNvbnN0IGNoYXIgKm5hbWUsIGlycV9oYW5kbGVy X3QgaGFuZGxlcikKK3sKKwlpbnQgaXJxLCByZXQ7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJx X2J5bmFtZShwZGV2LCBuYW1lKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRl diwgaXJxLCBoYW5kbGVyLCBJUlFGX1RSSUdHRVJfSElHSCwKKwkJbmFtZSwgZ211KTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0ICVz XG4iLCBuYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkaXNhYmxlX2lycShpcnEpOworCisJ cmV0dXJuIGlycTsKK30KKwordm9pZCBhNnh4X2dtdV9yZW1vdmUoc3RydWN0IGE2eHhfZ3B1ICph Nnh4X2dwdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZhNnh4X2dwdS0+Z211OworCisJ aWYgKElTX0VSUl9PUl9OVUxMKGdtdS0+bW1pbykpCisJCXJldHVybjsKKworCXBtX3J1bnRpbWVf ZGlzYWJsZShnbXUtPmRldik7CisJYTZ4eF9nbXVfc3RvcChhNnh4X2dwdSk7CisKKwlhNnh4X2dt dV9pcnFfZGlzYWJsZShnbXUpOworCWE2eHhfZ211X21lbW9yeV9mcmVlKGdtdSwgZ211LT5oZmkp OworCisJaW9tbXVfZGV0YWNoX2RldmljZShnbXUtPmRvbWFpbiwgZ211LT5kZXYpOworCisJaW9t bXVfZG9tYWluX2ZyZWUoZ211LT5kb21haW4pOworfQorCitpbnQgYTZ4eF9nbXVfcHJvYmUoc3Ry dWN0IGE2eHhfZ3B1ICphNnh4X2dwdSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXN0 cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobm9kZSk7CisJaW50IHJldDsKKwor CWlmICghcGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnbXUtPmRldiA9ICZwZGV2LT5kZXY7 CisKKwlvZl9kbWFfY29uZmlndXJlKGdtdS0+ZGV2LCBub2RlKTsKKworCS8qIEZvdyBub3csIGRv bid0IGRvIGFueXRoaW5nIGZhbmN5IHVudGlsIHdlIGdldCBvdXIgZmVldCB1bmRlciB1cyAqLwor CWdtdS0+aWRsZV9sZXZlbCA9IEdNVV9JRExFX1NUQVRFX0FDVElWRTsKKworCXBtX3J1bnRpbWVf ZW5hYmxlKGdtdS0+ZGV2KTsKKwlnbXUtPmd4ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGdtdS0+ZGV2 LCAidmRkIik7CisKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgY2xvY2tzICovCisJcmV0ID0gYTZ4eF9n bXVfY2xvY2tzX3Byb2JlKGdtdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNl dCB1cCB0aGUgSU9NTVUgY29udGV4dCBiYW5rICovCisJcmV0ID0gYTZ4eF9nbXVfbWVtb3J5X3By b2JlKGdtdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEFsbG9jYXRlIG1lbW9y eSBmb3IgZm9yIHRoZSBIRkkgcXVldWVzICovCisJZ211LT5oZmkgPSBhNnh4X2dtdV9tZW1vcnlf YWxsb2MoZ211LCBTWl8xNkspOworCWlmIChJU19FUlIoZ211LT5oZmkpKQorCQlnb3RvIGVycjsK KworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIEdNVSBkZWJ1ZyByZWdpb24gKi8KKwlnbXUt PmRlYnVnID0gYTZ4eF9nbXVfbWVtb3J5X2FsbG9jKGdtdSwgU1pfMTZLKTsKKwlpZiAoSVNfRVJS KGdtdS0+ZGVidWcpKQorCQlnb3RvIGVycjsKKworCS8qIE1hcCB0aGUgR01VIHJlZ2lzdGVycyAq LworCWdtdS0+bW1pbyA9IGE2eHhfZ211X2dldF9tbWlvKHBkZXYsICJnbXUiKTsKKworCS8qIE1h cCB0aGUgR1BVIHBvd2VyIGRvbWFpbiBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCWdtdS0+cGRj X21taW8gPSBhNnh4X2dtdV9nZXRfbW1pbyhwZGV2LCAiZ211X3BkYyIpOworCisJaWYgKElTX0VS UihnbXUtPm1taW8pIHx8IElTX0VSUihnbXUtPnBkY19tbWlvKSkKKwkJZ290byBlcnI7CisKKwkv KiBHZXQgdGhlIEhGSSBhbmQgR01VIGludGVycnVwdHMgKi8KKwlnbXUtPmhmaV9pcnEgPSBhNnh4 X2dtdV9nZXRfaXJxKGdtdSwgcGRldiwgImhmaSIsIGE2eHhfaGZpX2lycSk7CisJZ211LT5nbXVf aXJxID0gYTZ4eF9nbXVfZ2V0X2lycShnbXUsIHBkZXYsICJnbXUiLCBhNnh4X2dtdV9pcnEpOwor CisJaWYgKGdtdS0+aGZpX2lycSA8IDAgfHwgZ211LT5nbXVfaXJxIDwgMCkKKwkJZ290byBlcnI7 CisKKwkvKiBTZXQgdXAgYSB0YXNrbGV0IHRvIGhhbmRsZSBHTVUgSEZJIHJlc3BvbnNlcyAqLwor CXRhc2tsZXRfaW5pdCgmZ211LT5oZmlfdGFza2xldCwgYTZ4eF9oZmlfdGFzaywgKHVuc2lnbmVk IGxvbmcpIGdtdSk7CisKKwkvKiBHZXQgdGhlIHBvd2VyIGxldmVscyBmb3IgdGhlIEdNVSBhbmQg R1BVICovCisJYTZ4eF9nbXVfcHdybGV2ZWxzX3Byb2JlKGdtdSk7CisKKwkvKiBTZXQgdXAgdGhl IEhGSSBxdWV1ZXMgKi8KKwlhNnh4X2hmaV9pbml0KGdtdSk7CisKKwlyZXR1cm4gMDsKK2VycjoK KwlhNnh4X2dtdV9tZW1vcnlfZnJlZShnbXUsIGdtdS0+aGZpKTsKKworCWlmIChnbXUtPmRvbWFp bikgeworCQlpb21tdV9kZXRhY2hfZGV2aWNlKGdtdS0+ZG9tYWluLCBnbXUtPmRldik7CisKKwkJ aW9tbXVfZG9tYWluX2ZyZWUoZ211LT5kb21haW4pOworCX0KKworCXJldHVybiAtRU5PREVWOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5kOWEzODZjMTg3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oCkBAIC0wLDAgKzEsMTYyIEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IChjKSAyMDE3 IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLworCisjaWZuZGVm IF9BNlhYX0dNVV9IXworI2RlZmluZSBfQTZYWF9HTVVfSF8KKworI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgIm1zbV9kcnYuaCIKKyNpbmNsdWRlICJhNnh4X2hmaS5oIgor CitzdHJ1Y3QgYTZ4eF9nbXVfYm8geworCXZvaWQgKnZpcnQ7CisJc2l6ZV90IHNpemU7CisJdTY0 IGlvdmE7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKK307CisKKy8qCisgKiBUaGVzZSBkZWZpbmUg dGhlIGRpZmZlcmVudCBHTVUgd2FrZSB1cCBvcHRpb25zIC0gdGhlc2UgZGVmaW5lIGhvdyBib3Ro IHRoZQorICogQ1BVIGFuZCB0aGUgR01VIGJyaW5nIHVwIHRoZSBoYXJkd2FyZQorICovCisKKy8q IFRIZSBHTVUgaGFzIGFscmVhZHkgYmVlbiBib290ZWQgYW5kIHRoZSByZW50ZW50aW9uIHJlZ2lz dGVycyBhcmUgYWN0aXZlICovCisjZGVmaW5lIEdNVV9XQVJNX0JPT1QgMAorCisvKiB0aGUgR01V IGlzIGNvbWluZyB1cCBmb3IgdGhlIGZpcnN0IHRpbWUgb3IgYmFjayBmcm9tIGEgcG93ZXIgY29s bGFwc2UgKi8KKyNkZWZpbmUgR01VX0NPTERfQk9PVCAxCisKKy8qIFRoZSBHTVUgaXMgYmVpbmcg c29mdCByZXNldCBhZnRlciBhIGZhdWx0ICovCisjZGVmaW5lIEdNVV9SRVNFVCAyCisKKy8qCisg KiBUaGVzZSBkZWZpbmUgdGhlIGxldmVsIG9mIGNvbnRyb2wgdGhhdCB0aGUgR01VIGhhcyAtIHRo ZSBoaWdoZXIgdGhlIG51bWJlcgorICogdGhlIG1vcmUgdGhpbmdzIHRoYXQgdGhlIEdNVSBoYXJk d2FyZSBjb250cm9scyBvbiBpdHMgb3duLgorICovCisKKy8qIFRoZSBHTVUgZG9lcyBub3QgZG8g YW55IGlkbGUgc3RhdGUgbWFuYWdlbWVudCAqLworI2RlZmluZSBHTVVfSURMRV9TVEFURV9BQ1RJ VkUgMAorCisvKiBUaGUgR01VIG1hbmFnZXMgU1BUUCBwb3dlciBjb2xsYXBzZSAqLworI2RlZmlu ZSBHTVVfSURMRV9TVEFURV9TUFRQIDIKKworLyogVGhlIEdNVSBkb2VzIGF1dG9tYXRpYyBJRlBD IChpbnRyYS1mcmFtZSBwb3dlciBjb2xsYXBzZSkgKi8KKyNkZWZpbmUgR01VX0lETEVfU1RBVEVf SUZQQyAzCisKK3N0cnVjdCBhNnh4X2dtdSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJdm9p ZCAqIF9faW9tZW0gbW1pbzsKKwl2b2lkICogX19pb21lbSBwZGNfbW1pbzsKKworCWludCBoZmlf aXJxOworCWludCBnbXVfaXJxOworCisJc3RydWN0IHJlZ3VsYXRvciAqZ3g7CisKKwlzdHJ1Y3Qg aW9tbXVfZG9tYWluICpkb21haW47CisJdTY0IHVuY2FjaGVkX2lvdmFfYmFzZTsKKworCWludCBp ZGxlX2xldmVsOworCisJc3RydWN0IGE2eHhfZ211X2JvICpoZmk7CisJc3RydWN0IGE2eHhfZ211 X2JvICpkZWJ1ZzsKKworCWludCBucl9jbG9ja3M7CisJc3RydWN0IGNsa19idWxrX2RhdGEgKmNs b2NrczsKKwlzdHJ1Y3QgY2xrICpjb3JlX2NsazsKKworCWludCBucl9ncHVfZnJlcXM7CisJdW5z aWduZWQgbG9uZyBncHVfZnJlcXNbMTZdOworCXUzMiBneF9hcmNfdm90ZXNbMTZdOworCisJaW50 IG5yX2dtdV9mcmVxczsKKwl1bnNpZ25lZCBsb25nIGdtdV9mcmVxc1s0XTsKKwl1MzIgY3hfYXJj X3ZvdGVzWzRdOworCisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlIHF1ZXVlc1syXTsKKworCXN0cnVj dCB0YXNrbGV0X3N0cnVjdCBoZmlfdGFza2xldDsKK307CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdt dV9yZWFkKHN0cnVjdCBhNnh4X2dtdSAqZ211LCB1MzIgb2Zmc2V0KQoreworCXJldHVybiBtc21f cmVhZGwoZ211LT5tbWlvICsgKG9mZnNldCA8PCAyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBnbXVfd3JpdGUoc3RydWN0IGE2eHhfZ211ICpnbXUsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkK K3sKKwlyZXR1cm4gbXNtX3dyaXRlbCh2YWx1ZSwgZ211LT5tbWlvICsgKG9mZnNldCA8PCAyKSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZGNfd3JpdGUoc3RydWN0IGE2eHhfZ211ICpnbXUs IHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gbXNtX3dyaXRlbCh2YWx1ZSwgZ211 LT5wZGNfbW1pbyArIChvZmZzZXQgPDwgMikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ211 X3JtdyhzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBvcikKK3sK Kwl1MzIgdmFsID0gZ211X3JlYWQoZ211LCByZWcpOworCisJdmFsICY9IH5tYXNrOworCisJZ211 X3dyaXRlKGdtdSwgcmVnLCB2YWwgfCBvcik7Cit9CisKKyNkZWZpbmUgZ211X3BvbGxfdGltZW91 dChnbXUsIGFkZHIsIHZhbCwgY29uZCwgaW50ZXJ2YWwsIHRpbWVvdXQpIFwKKwlyZWFkbF9wb2xs X3RpbWVvdXQoKGdtdSktPm1taW8gKyAoKGFkZHIpIDw8IDIpLCB2YWwsIGNvbmQsIFwKKwkJaW50 ZXJ2YWwsIHRpbWVvdXQpCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGF2YWlsYWJsZSBPT0IgKG91 dCBvZiBiYW5kIHJlcXVlc3RzKSB0byB0aGUgR01VIHdoZXJlICJvdXQgb2YKKyAqIGJhbmQiIG1l YW5zIHRoYXQgdGhlIENQVSB0YWxrcyB0byB0aGUgR01VIGRpcmVjdGx5IGFuZCBub3QgdGhyb3Vn aCBIRkkuCisgKiBOb3JtYWxseSB0aGlzIHdvcmtzIGJ5IHdyaXRpbmcgYSBJVENNL0RUQ00gcmVn aXN0ZXIgYW5kIHRoZW4gdHJpZ2dlcmluZyBhCisgKiBpbnRlcnJ1cHQgKHRoZSAicmVxdWVzdCIg Yml0KSBhbmQgd2FpdGluZyBmb3IgYW4gYWNrbm93bGVkZ21lbnQgKHRoZSAiYWNrIgorICogYml0 KS4gVGhlIHN0YXRlIGlzIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgImNsZWFyJyBiaXQgdG8gdGhl IEdNVSBpbnRlcnJ1cHQuCisgKgorICogVGhlc2UgYXJlIHVzZWQgdG8gZm9yY2UgdGhlIEdNVS9H UFUgdG8gc3RheSBvbiBkdXJpbmcgYSBjcml0aWNhbCBzZXF1ZW5jZSBvcgorICogZm9yIGhhcmR3 YXJlIHdvcmthcm91bmRzLgorICovCisKK2VudW0gYTZ4eF9nbXVfb29iX3N0YXRlIHsKKwlHTVVf T09CX0JPT1RfU0xVTUJFUiA9IDAsCisJR01VX09PQl9HUFVfU0VULAorCUdNVV9PT0JfRENWU19T RVQsCit9OworCisvKiBUaGVzZSBhcmUgdGhlIGludGVycnVwdCAvIGFjayBiaXRzIGZvciBlYWNo IE9PQiByZXF1ZXN0IHRoYXQgYXJlIHNldAorICogaW4gYTZ4eF9nbXVfc2V0X29vYiBhbmQgYTZ4 eF9jbGVhcl9vb2IKKyAqLworCisvKgorICogTGV0IHRoZSBHTVUga25vdyB0aGF0IGEgYm9vdCBv ciBzbHVtYmVyIG9wZXJhdGlvbiBoYXMgc3RhcnRlZC4gVGhlIHZhbHVlIGluCisgKiBSRUdfQTZY WF9HTVVfQk9PVF9TTFVNQkVSX09QVElPTiBsZXRzIHRoZSBHTVUga25vdyB3aGljaCBvcGVyYXRp b24gd2UgYXJlCisgKiBkb2luZworICovCisjZGVmaW5lIEdNVV9PT0JfQk9PVF9TTFVNQkVSX1JF UVVFU1QJMjIKKyNkZWZpbmUgR01VX09PQl9CT09UX1NMVU1CRVJfQUNLCTMwCisjZGVmaW5lIEdN VV9PT0JfQk9PVF9TTFVNQkVSX0NMRUFSCTMwCisKKy8qCisgKiBTZXQgYSBuZXcgcG93ZXIgbGV2 ZWwgZm9yIHRoZSBHUFUgd2hlbiB0aGUgQ1BVIGlzIGRvaW5nIGZyZXF1ZW5jeSBzY2FsaW5nCisg Ki8KKyNkZWZpbmUgR01VX09PQl9EQ1ZTX1JFUVVFU1QJMjMKKyNkZWZpbmUgR01VX09PQl9EQ1ZT X0FDSwkzMQorI2RlZmluZSBHTVVfT09CX0RDVlNfQ0xFQVIJMzEKKworLyoKKyAqIExldCB0aGUg R01VIGtub3cgdG8gbm90IHR1cm4gb2ZmIGFueSBHUFUgcmVnaXN0ZXJzIHdoaWxlIHRoZSBDUFUg aXMgaW4gYQorICogY3JpdGljYWwgc2VjdGlvbgorICovCisjZGVmaW5lIEdNVV9PT0JfR1BVX1NF VF9SRVFVRVNUCTE2CisjZGVmaW5lIEdNVV9PT0JfR1BVX1NFVF9BQ0sJMjQKKyNkZWZpbmUgR01V X09PQl9HUFVfU0VUX0NMRUFSCTI0CisKKwordm9pZCBhNnh4X2hmaV9pbml0KHN0cnVjdCBhNnh4 X2dtdSAqZ211KTsKK2ludCBhNnh4X2hmaV9zdGFydChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgaW50 IGJvb3Rfc3RhdGUpOwordm9pZCBhNnh4X2hmaV9zdG9wKHN0cnVjdCBhNnh4X2dtdSAqZ211KTsK Kwordm9pZCBhNnh4X2hmaV90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5iM2I4NWViY2U4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5jCkBAIC0wLDAgKzEsODA3IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTggVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKworI2luY2x1ZGUg Im1zbV9nZW0uaCIKKyNpbmNsdWRlICJtc21fbW11LmgiCisjaW5jbHVkZSAiYTZ4eF9ncHUuaCIK KyNpbmNsdWRlICJhNnh4X2dtdS54bWwuaCIKKworc3RhdGljIGlubGluZSBib29sIF9hNnh4X2No ZWNrX2lkbGUoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRy ZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1 ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBHTVUgaXMg aWRsZSAqLworCWlmICghYTZ4eF9nbXVfaXNpZGxlKCZhNnh4X2dwdS0+Z211KSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyogQ2hlY2sgdGhhIHRoZSBDWCBtYXN0ZXIgaXMgaWRsZSAqLworCWlmIChn cHVfcmVhZChncHUsIFJFR19BNlhYX1JCQk1fU1RBVFVTKSAmCisJCQl+QTZYWF9SQkJNX1NUQVRV U19DUF9BSEJfQlVTWV9DWF9NQVNURVIpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhKGdw dV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9JTlRfMF9TVEFUVVMpICYKKwkJQTZYWF9SQkJNX0lO VF8wX01BU0tfUkJCTV9IQU5HX0RFVEVDVCk7Cit9CisKK2Jvb2wgYTZ4eF9pZGxlKHN0cnVjdCBt c21fZ3B1ICpncHUsIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKK3sKKwkvKiB3YWl0IGZv ciBDUCB0byBkcmFpbiByaW5nYnVmZmVyOiAqLworCWlmICghYWRyZW5vX2lkbGUoZ3B1LCByaW5n KSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNwaW5fdW50aWwoX2E2eHhfY2hlY2tfaWRsZShn cHUpKSkgeworCQlEUk1fRVJST1IoIiVzOiAlcHM6IHRpbWVvdXQgd2FpdGluZyBmb3IgR1BVIHRv IGlkbGU6IHN0YXR1cyAlOC44WCBpcnEgJTguOFggcnB0ci93cHRyICVkLyVkXG4iLAorCQkJZ3B1 LT5uYW1lLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksCisJCQlncHVfcmVhZChncHUsIFJF R19BNlhYX1JCQk1fU1RBVFVTKSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9JTlRf MF9TVEFUVVMpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9SQl9SUFRSKSwKKwkJCWdw dV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfUkJfV1BUUikpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZmx1c2goc3RydWN0IG1zbV9n cHUgKmdwdSwgc3RydWN0IG1zbV9yaW5nYnVmZmVyICpyaW5nKQoreworCXVpbnQzMl90IHdwdHI7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2Nr LCBmbGFncyk7CisKKwkvKiBDb3B5IHRoZSBzaGFkb3cgdG8gdGhlIGFjdHVhbCByZWdpc3RlciAq LworCXJpbmctPmN1ciA9IHJpbmctPm5leHQ7CisKKwkvKiBNYWtlIHN1cmUgdG8gd3JhcCB3cHRy IGlmIHdlIG5lZWQgdG8gKi8KKwl3cHRyID0gZ2V0X3dwdHIocmluZyk7CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisKKwkvKiBNYWtlIHN1cmUgZXZlcnl0 aGluZyBpcyBwb3N0ZWQgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uICovCisJbWIoKTsKKworCWdw dV93cml0ZShncHUsIFJFR19BNlhYX0NQX1JCX1dQVFIsIHdwdHIpOworfQorCitzdGF0aWMgdm9p ZCBhNnh4X3N1Ym1pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQg KnN1Ym1pdCwKKwlzdHJ1Y3QgbXNtX2ZpbGVfcHJpdmF0ZSAqY3R4KQoreworCXN0cnVjdCBtc21f ZHJtX3ByaXZhdGUgKnByaXYgPSBncHUtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1zbV9y aW5nYnVmZmVyICpyaW5nID0gc3VibWl0LT5yaW5nOworCXVuc2lnbmVkIGludCBpOworCisJLyog SW52YWxpZGF0ZSBDQ1UgZGVwdGggYW5kIGNvbG9yICovCisJT1VUX1BLVDcocmluZywgQ1BfRVZF TlRfV1JJVEUsIDEpOworCU9VVF9SSU5HKHJpbmcsIFBDX0NDVV9JTlZBTElEQVRFX0RFUFRIKTsK KworCU9VVF9QS1Q3KHJpbmcsIENQX0VWRU5UX1dSSVRFLCAxKTsKKwlPVVRfUklORyhyaW5nLCBQ Q19DQ1VfSU5WQUxJREFURV9DT0xPUik7CisKKwkvKiBTdWJtaXQgdGhlIGNvbW1hbmRzICovCisJ Zm9yIChpID0gMDsgaSA8IHN1Ym1pdC0+bnJfY21kczsgaSsrKSB7CisJCXN3aXRjaCAoc3VibWl0 LT5jbWRbaV0udHlwZSkgeworCQljYXNlIE1TTV9TVUJNSVRfQ01EX0lCX1RBUkdFVF9CVUY6CisJ CQlicmVhazsKKwkJY2FzZSBNU01fU1VCTUlUX0NNRF9DVFhfUkVTVE9SRV9CVUY6CisJCQlpZiAo cHJpdi0+bGFzdGN0eCA9PSBjdHgpCisJCQkJYnJlYWs7CisJCWNhc2UgTVNNX1NVQk1JVF9DTURf QlVGOgorCQkJT1VUX1BLVDcocmluZywgQ1BfSU5ESVJFQ1RfQlVGRkVSX1BGRSwgMyk7CisJCQlP VVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRzKHN1Ym1pdC0+Y21kW2ldLmlvdmEpKTsKKwkJCU9V VF9SSU5HKHJpbmcsIHVwcGVyXzMyX2JpdHMoc3VibWl0LT5jbWRbaV0uaW92YSkpOworCQkJT1VU X1JJTkcocmluZywgc3VibWl0LT5jbWRbaV0uc2l6ZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwor CS8qIFdyaXRlIHRoZSBmZW5jZSB0byB0aGUgc2NyYXRjaCByZWdpc3RlciAqLworCU9VVF9QS1Q0 KHJpbmcsIFJFR19BNlhYX0NQX1NDUkFUQ0hfUkVHKDIpLCAxKTsKKwlPVVRfUklORyhyaW5nLCBz dWJtaXQtPnNlcW5vKTsKKworCS8qCisJICogRXhlY3V0ZSBhIENBQ0hFX0ZMVVNIX1RTIGV2ZW50 LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlCisJICogdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8g dGhlIG1lbW9yeSBhbmQgdGhlbiB0cmlnZ2VycyB0aGUgaW50ZXJydXB0CisJICovCisJT1VUX1BL VDcocmluZywgQ1BfRVZFTlRfV1JJVEUsIDQpOworCU9VVF9SSU5HKHJpbmcsIENBQ0hFX0ZMVVNI X1RTIHwgKDEgPDwgMzEpKTsKKwlPVVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRzKHJibWVtcHRy KHJpbmcsIGZlbmNlKSkpOworCU9VVF9SSU5HKHJpbmcsIHVwcGVyXzMyX2JpdHMocmJtZW1wdHIo cmluZywgZmVuY2UpKSk7CisJT1VUX1JJTkcocmluZywgc3VibWl0LT5zZXFubyk7CisKKwlhNnh4 X2ZsdXNoKGdwdSwgcmluZyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiBvZmZz ZXQ7CisJdTMyIHZhbHVlOworfSBhNnh4X2h3Y2dbXSA9IHsKKwl7UkVHX0E2WFhfUkJCTV9DTE9D S19DTlRMX1NQMCwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9TUDEs IDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfU1AyLCAweDIyMjIyMjIy fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1NQMywgMHgyMjIyMjIyMn0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTDJfU1AwLCAweDAyMDIyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19DTlRMMl9TUDEsIDB4MDIwMjIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwy X1NQMiwgMHgwMjAyMjIyMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfU1AzLCAweDAy MDIyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9TUDAsIDB4MDAwMDAwODB9LAor CXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1NQMSwgMHgwMDAwMDA4MH0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfREVMQVlfU1AyLCAweDAwMDAwMDgwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9D S19ERUxBWV9TUDMsIDB4MDAwMDAwODB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfU1Aw LCAweDAwMDBmM2NmfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1NQMSwgMHgwMDAwZjNj Zn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9TUDIsIDB4MDAwMGYzY2Z9LAorCXtSRUdf QTZYWF9SQkJNX0NMT0NLX0hZU1RfU1AzLCAweDAwMDBmM2NmfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19DTlRMX1RQMCwgMHgwMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9U UDEsIDB4MDIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfVFAyLCAweDAyMjIy MjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1RQMywgMHgwMjIyMjIyMn0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfVFAwLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19DTlRMMl9UUDEsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NO VEwyX1RQMiwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfVFAzLCAw eDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMM19UUDAsIDB4MjIyMjIyMjJ9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwzX1RQMSwgMHgyMjIyMjIyMn0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTDNfVFAyLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19DTlRMM19UUDMsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEw0 X1RQMCwgMHgwMDAyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDRfVFAxLCAweDAw MDIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMNF9UUDIsIDB4MDAwMjIyMjJ9LAor CXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEw0X1RQMywgMHgwMDAyMjIyMn0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfSFlTVF9UUDAsIDB4Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0hZU1RfVFAxLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1RQMiwg MHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9UUDMsIDB4Nzc3Nzc3Nzd9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1QyX1RQMCwgMHg3Nzc3Nzc3N30sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfSFlTVDJfVFAxLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19IWVNUMl9UUDIsIDB4Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1Qy X1RQMywgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDNfVFAwLCAweDc3 Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUM19UUDEsIDB4Nzc3Nzc3Nzd9LAor CXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1QzX1RQMiwgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfSFlTVDNfVFAzLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9D S19IWVNUNF9UUDAsIDB4MDAwNzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1Q0X1RQ MSwgMHgwMDA3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDRfVFAyLCAweDAwMDc3 Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUNF9UUDMsIDB4MDAwNzc3Nzd9LAorCXtS RUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RQMCwgMHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JC Qk1fQ0xPQ0tfREVMQVlfVFAxLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19E RUxBWV9UUDIsIDB4MTExMTExMTF9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RQMywg MHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkyX1RQMCwgMHgxMTExMTEx MX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkyX1RQMSwgMHgxMTExMTExMX0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkyX1RQMiwgMHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JC Qk1fQ0xPQ0tfREVMQVkyX1RQMywgMHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tf REVMQVkzX1RQMCwgMHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkzX1RQ MSwgMHgxMTExMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkzX1RQMiwgMHgxMTEx MTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVkzX1RQMywgMHgxMTExMTExMX0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVk0X1RQMCwgMHgwMDAxMTExMX0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfREVMQVk0X1RQMSwgMHgwMDAxMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xP Q0tfREVMQVk0X1RQMiwgMHgwMDAxMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVk0 X1RQMywgMHgwMDAxMTExMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9VQ0hFLCAweDIy MjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9VQ0hFLCAweDIyMjIyMjIyfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMM19VQ0hFLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMNF9VQ0hFLCAweDAwMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19IWVNUX1VDSEUsIDB4MDAwMDAwMDR9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZ X1VDSEUsIDB4MDAwMDAwMDJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfUkIwLCAweDIy MjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1JCMSwgMHgyMjIyMjIyMn0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9SQjIsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9S QkJNX0NMT0NLX0NOVExfUkIzLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19D TlRMMl9SQjAsIDB4MDAwMDIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1JCMSwg MHgwMDAwMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfUkIyLCAweDAwMDAyMjIy fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9SQjMsIDB4MDAwMDIyMjJ9LAorCXtSRUdf QTZYWF9SQkJNX0NMT0NLX0NOVExfQ0NVMCwgMHgwMDAwMjIyMH0sCisJe1JFR19BNlhYX1JCQk1f Q0xPQ0tfQ05UTF9DQ1UxLCAweDAwMDAyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRM X0NDVTIsIDB4MDAwMDIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfQ0NVMywgMHgw MDAwMjIyMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9SQl9DQ1UwLCAweDAwMDQwZjAw fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1JCX0NDVTEsIDB4MDAwNDBmMDB9LAorCXtS RUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfUkJfQ0NVMiwgMHgwMDA0MGYwMH0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfSFlTVF9SQl9DQ1UzLCAweDAwMDQwZjAwfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19DTlRMX1JBQywgMHgwNTAyMjAyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJf UkFDLCAweDAwMDA1NTU1fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9SQUMsIDB4MDAw MDAwMTF9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfUkFDLCAweDAwNDQ1MDQ0fSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1RTRV9SQVNfUkJCTSwgMHgwNDIyMjIyMn0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfTU9ERV9HUEMsIDB4MDAyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJN X0NMT0NLX01PREVfVkZELCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNU X1RTRV9SQVNfUkJCTSwgMHgwMDAwMDAwMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9H UEMsIDB4MDQxMDQwMDR9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVkZELCAweDAwMDAw MDAwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9ITFNRLCAweDAwMDAwMDAwfSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9UU0VfUkFTX1JCQk0sIDB4MDAwMDQwMDB9LAorCXtS RUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX0dQQywgMHgwMDAwMDIwMH0sCisJe1JFR19BNlhYX1JC Qk1fQ0xPQ0tfREVMQVlfVkZELCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19E RUxBWV9ITFNRXzIsIDB4MDAwMDAwMDJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX01PREVfSExT USwgMHgwMDAwMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9HTVVfR1gsIDB4MDAw MDAyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX0dNVV9HWCwgMHgwMDAwMDExMX0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9HTVVfR1gsIDB4MDAwMDA1NTV9Cit9OworCitz dGF0aWMgdm9pZCBhNnh4X3NldF9od2NnKHN0cnVjdCBtc21fZ3B1ICpncHUsIGJvb2wgc3RhdGUp Cit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7 CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOwor CXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJdW5zaWduZWQgaW50IGk7 CisJdTMyIHZhbDsKKworCXZhbCA9IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9DTE9DS19D TlRMKTsKKworCS8qIERvbid0IHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyBpZiB0aGV5IGFyZSBh bHJlYWR5IGNvcnJlY3QgKi8KKwlpZiAoKCFzdGF0ZSAmJiAhdmFsKSB8fCAoc3RhdGUgJiYgKHZh bCA9PSAweDhhYThhYTAyKSkpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgU1AgY2xvY2sgYmVm b3JlIHByb2dyYW1taW5nIEhXQ0cgcmVnaXN0ZXJzICovCisJZ211X3JtdyhnbXUsIFJFR19BNlhY X0dQVV9HTVVfR1hfU1BUUFJBQ19DTE9DS19DT05UUk9MLCAxLCAwKTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGE2eHhfaHdjZyk7IGkrKykKKwkJZ3B1X3dyaXRlKGdwdSwgYTZ4eF9o d2NnW2ldLm9mZnNldCwKKwkJCXN0YXRlID8gYTZ4eF9od2NnW2ldLnZhbHVlIDogMCk7CisKKwkv KiBFbmFibGUgU1AgY2xvY2sgKi8KKwlnbXVfcm13KGdtdSwgUkVHX0E2WFhfR1BVX0dNVV9HWF9T UFRQUkFDX0NMT0NLX0NPTlRST0wsIDAsIDEpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf UkJCTV9DTE9DS19DTlRMLCBzdGF0ZSA/IDB4OGFhOGFhMDIgOiAwKTsKK30KKworc3RhdGljIGlu dCBhNnh4X2NwX2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgbXNtX3Jpbmdi dWZmZXIgKnJpbmcgPSBncHUtPnJiWzBdOworCisJT1VUX1BLVDcocmluZywgQ1BfTUVfSU5JVCwg OCk7CisKKwlPVVRfUklORyhyaW5nLCAweDAwMDAwMDJmKTsKKworCS8qIEVuYWJsZSBtdWx0aXBs ZSBoYXJkd2FyZSBjb250ZXh0cyAqLworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDMpOworCisJ LyogRW5hYmxlIGVycm9yIGRldGVjdGlvbiAqLworCU9VVF9SSU5HKHJpbmcsIDB4MjAwMDAwMDAp OworCisJLyogRG9uJ3QgZW5hYmxlIGhlYWRlciBkdW1wICovCisJT1VUX1JJTkcocmluZywgMHgw MDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisKKwkvKiBObyB3b3JrYXJv dW5kcyBlbmFibGVkICovCisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisKKwkvKiBQYWQg cmVzdCBvZiB0aGUgY21kcyB3aXRoIDAncyAqLworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDAp OworCU9VVF9SSU5HKHJpbmcsIDB4MDAwMDAwMDApOworCisJYTZ4eF9mbHVzaChncHUsIHJpbmcp OworCXJldHVybiBhNnh4X2lkbGUoZ3B1LCByaW5nKSA/IDAgOiAtRUlOVkFMOworfQorCitzdGF0 aWMgaW50IGE2eHhfdWNvZGVfaW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBh ZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4 X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWlmICghYTZ4eF9n cHUtPnNxZV9ibykgeworCQlhNnh4X2dwdS0+c3FlX2JvID0gYWRyZW5vX2Z3X2NyZWF0ZV9ibyhn cHUsCisJCQlhZHJlbm9fZ3B1LT5md1tBRFJFTk9fRldfU1FFXSwgJmE2eHhfZ3B1LT5zcWVfaW92 YSk7CisKKwkJaWYgKElTX0VSUihhNnh4X2dwdS0+c3FlX2JvKSkgeworCQkJaW50IHJldCA9IFBU Ul9FUlIoYTZ4eF9ncHUtPnNxZV9ibyk7CisKKwkJCWE2eHhfZ3B1LT5zcWVfYm8gPSBOVUxMOwor CQkJRFJNX0RFVl9FUlJPUigmZ3B1LT5wZGV2LT5kZXYsCisJCQkJIkNvdWxkIG5vdCBhbGxvY2F0 ZSBTUUUgdWNvZGU6ICVkXG4iLCByZXQpOworCisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJ Z3B1X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9DUF9TUUVfSU5TVFJfQkFTRV9MTywKKwkJUkVHX0E2 WFhfQ1BfU1FFX0lOU1RSX0JBU0VfSEksIGE2eHhfZ3B1LT5zcWVfaW92YSk7CisKKwlyZXR1cm4g MDsKK30KKworI2RlZmluZSBBNlhYX0lOVF9NQVNLIChBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9B SEJfRVJST1IgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0FUQl9BU1lOQ0ZJRk9f T1ZFUkZMT1cgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9IV19FUlJPUiB8IFwKKwkg IEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX0lCMiB8IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNL X0NQX0lCMSB8IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX1JCIHwgXAorCSAgQTZYWF9S QkJNX0lOVF8wX01BU0tfQ1BfQ0FDSEVfRkxVU0hfVFMgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBf TUFTS19SQkJNX0FUQl9CVVNfT1ZFUkZMT1cgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19S QkJNX0hBTkdfREVURUNUIHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfVUNIRV9PT0JfQUND RVNTIHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfVUNIRV9UUkFQX0lOVFIpCisKK3N0YXRp YyBpbnQgYTZ4eF9od19pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVu b19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1 ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCWludCByZXQ7CisKKwkvKiBN YWtlIHN1cmUgdGhlIEdNVSBrZWVwcyB0aGUgR1BVIG9uIHdoaWxlIHdlIHNldCBpdCB1cCAqLwor CWE2eHhfZ211X3NldF9vb2IoJmE2eHhfZ3B1LT5nbXUsIEdNVV9PT0JfR1BVX1NFVCk7CisKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfQ05UTCwgMCk7CisKKwkvKgor CSAqIERpc2FibGUgdGhlIHRydXN0ZWQgbWVtb3J5IHJhbmdlIC0gd2UgZG9uJ3QgYWN0dWFsbHkg c3VwcG9ydGVkIHNlY3VyZQorCSAqIG1lbW9yeSByZW5kZXJpbmcgYXQgdGhpcyBwb2ludCBpbiB0 aW1lIGFuZCB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIG9mZgorCSAqIHBhcnQgb2YgdGhlIHZpcnR1 YWwgbWVtb3J5IHNwYWNlLgorCSAqLworCWdwdV93cml0ZTY0KGdwdSwgUkVHX0E2WFhfUkJCTV9T RUNWSURfVFNCX1RSVVNURURfQkFTRV9MTywKKwkJUkVHX0E2WFhfUkJCTV9TRUNWSURfVFNCX1RS VVNURURfQkFTRV9ISSwgMHgwMDAwMDAwMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfUkJC TV9TRUNWSURfVFNCX1RSVVNURURfU0laRSwgMHgwMDAwMDAwMCk7CisKKwkvKiBlbmFibGUgaGFy ZHdhcmUgY2xvY2tnYXRpbmcgKi8KKwlhNnh4X3NldF9od2NnKGdwdSwgdHJ1ZSk7CisKKwkvKiBW QklGIHN0YXJ0ICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9HQVRFX09GRl9XUlJF UV9FTiwgMHgwMDAwMDAwOSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfUkJCTV9WQklGX0NM SUVOVF9RT1NfQ05UTCwgMHgzKTsKKworCS8qIE1ha2UgYWxsIGJsb2NrcyBjb250cmlidXRlIHRv IHRoZSBHUFUgQlVTWSBwZXJmIGNvdW50ZXIgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9S QkJNX1BFUkZDVFJfR1BVX0JVU1lfTUFTS0VELCAweGZmZmZmZmZmKTsKKworCS8qIERpc2FibGUg TDIgYnlwYXNzIGluIHRoZSBVQ0hFICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9X UklURV9SQU5HRV9NQVhfTE8sIDB4ZmZmZmZmYzApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhY X1VDSEVfV1JJVEVfUkFOR0VfTUFYX0hJLCAweDAwMDFmZmZmKTsKKwlncHVfd3JpdGUoZ3B1LCBS RUdfQTZYWF9VQ0hFX1RSQVBfQkFTRV9MTywgMHhmZmZmZjAwMCk7CisJZ3B1X3dyaXRlKGdwdSwg UkVHX0E2WFhfVUNIRV9UUkFQX0JBU0VfSEksIDB4MDAwMWZmZmYpOworCWdwdV93cml0ZShncHUs IFJFR19BNlhYX1VDSEVfV1JJVEVfVEhSVV9CQVNFX0xPLCAweGZmZmZmMDAwKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX1dSSVRFX1RIUlVfQkFTRV9ISSwgMHgwMDAxZmZmZik7CisK KwkvKiBTZXQgdGhlIEdNRU0gVkEgcmFuZ2UgWzB4MTAwMDAwOjB4MTAwMDAwICsgZ3B1LT5nbWVt IC0gMV0gKi8KKwlncHVfd3JpdGU2NChncHUsIFJFR19BNlhYX1VDSEVfR01FTV9SQU5HRV9NSU5f TE8sCisJCVJFR19BNlhYX1VDSEVfR01FTV9SQU5HRV9NSU5fSEksIDB4MDAxMDAwMDApOworCisJ Z3B1X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9VQ0hFX0dNRU1fUkFOR0VfTUFYX0xPLAorCQlSRUdf QTZYWF9VQ0hFX0dNRU1fUkFOR0VfTUFYX0hJLAorCQkweDAwMTAwMDAwICsgYWRyZW5vX2dwdS0+ Z21lbSAtIDEpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9GSUxURVJfQ05UTCwg MHg4MDQpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfQ0FDSEVfV0FZUywgMHg0KTsK KworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1JPUV9USFJFU0hPTERTXzIsIDB4MDEwMDAw YzApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1JPUV9USFJFU0hPTERTXzEsIDB4ODA0 MDM2MmMpOworCisJLyogU2V0dGluZyB0aGUgbWVtIHBvb2wgc2l6ZSAqLworCWdwdV93cml0ZShn cHUsIFJFR19BNlhYX0NQX01FTV9QT09MX1NJWkUsIDEyOCk7CisKKwkvKiBTZXR0aW5nIHRoZSBw cmltRmlmbyB0aHJlc2hvbGRzIGRlZmF1bHQgdmFsdWVzICovCisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfUENfREJHX0VDT19DTlRMLCAoMHgzMDAgPDwgMTEpKTsKKworCS8qIFNldCB0aGUgQUhC IGRlZmF1bHQgc2xhdmUgcmVzcG9uc2UgdG8gIkVSUk9SIiAqLworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0NQX0FIQl9DTlRMLCAweDEpOworCisJLyogVHVybiBvbiBwZXJmb3JtYW5jZSBjb3Vu dGVycyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fUEVSRkNUUl9DTlRMLCAweDEp OworCisJLyogU2VsZWN0IENQMCB0byBhbHdheXMgY291bnQgY3ljbGVzICovCisJZ3B1X3dyaXRl KGdwdSwgUkVHX0E2WFhfQ1BfUEVSRkNUUl9DUF9TRUxfMCwgUEVSRl9DUF9BTFdBWVNfQ09VTlQp OworCisJLyogRklYTUU6IG5vdCBzdXJlIGlmIHRoaXMgc2hvdWxkIGxpdmUgaGVyZSBvciBpbiBh Nnh4X2dtdS5jICovCisJZ211X3dyaXRlKCZhNnh4X2dwdS0+Z211LCAgUkVHX0E2WFhfR1BVX0dN VV9BT19HUFVfQ1hfQlVTWV9NQVNLLAorCQkweGZmMDAwMDAwKTsKKwlnbXVfcm13KCZhNnh4X2dw dS0+Z211LCBSRUdfQTZYWF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfU0VMRUNUXzAsCisJCTB4 ZmYsIDB4MjApOworCWdtdV93cml0ZSgmYTZ4eF9ncHUtPmdtdSwgUkVHX0E2WFhfR01VX0NYX0dN VV9QT1dFUl9DT1VOVEVSX0VOQUJMRSwKKwkJMHgwMSk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdf QTZYWF9SQl9OQ19NT0RFX0NOVEwsIDIgPDwgMSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf VFBMMV9OQ19NT0RFX0NOVEwsIDIgPDwgMSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfU1Bf TkNfTU9ERV9DTlRMLCAyIDw8IDEpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfTU9E RV9DTlRMLCAyIDw8IDIxKTsKKworCS8qIEVuYWJsZSBmYXVsdCBkZXRlY3Rpb24gKi8KKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX0lOVEVSRkFDRV9IQU5HX0lOVF9DTlRMLAorCQkoMSA8 PCAzMCkgfCAweDFmZmZmZik7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX0NMSUVO VF9QRiwgMSk7CisKKwkvKiBQcm90ZWN0IHJlZ2lzdGVycyBmcm9tIHRoZSBDUCAqLworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1RfQ05UTCwgMHgwMDAwMDAwMyk7CisKKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDApLAorCQlBNlhYX1BST1RFQ1RfUkRPTkxZ KDB4NjAwLCAweDUxKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgxKSwg QTZYWF9QUk9URUNUX1JXKDB4YWU1MCwgMHgyKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUFJPVEVDVCgyKSwgQTZYWF9QUk9URUNUX1JXKDB4OTYyNCwgMHgxMykpOworCWdwdV93cml0 ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMyksIEE2WFhfUFJPVEVDVF9SVygweDg2MzAsIDB4 OCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoNCksIEE2WFhfUFJPVEVD VF9SVygweDllNzAsIDB4MSkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1Qo NSksIEE2WFhfUFJPVEVDVF9SVygweDllNzgsIDB4MTg3KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfQ1BfUFJPVEVDVCg2KSwgQTZYWF9QUk9URUNUX1JXKDB4ZjAwMCwgMHg4MTApKTsKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDcpLAorCQlBNlhYX1BST1RFQ1RfUkRP TkxZKDB4ZmMwMCwgMHgzKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCg4 KSwgQTZYWF9QUk9URUNUX1JXKDB4NTBlLCAweDApKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZY WF9DUF9QUk9URUNUKDkpLCBBNlhYX1BST1RFQ1RfUkRPTkxZKDB4NTBmLCAweDApKTsKKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDEwKSwgQTZYWF9QUk9URUNUX1JXKDB4NTEw LCAweDApKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDExKSwKKwkJQTZY WF9QUk9URUNUX1JET05MWSgweDAsIDB4NGY5KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUFJPVEVDVCgxMiksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg1MDEsIDB4YSkpOworCWdw dV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMTMpLAorCQlBNlhYX1BST1RFQ1RfUkRP TkxZKDB4NTExLCAweDQ0KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgx NCksIEE2WFhfUFJPVEVDVF9SVygweGUwMCwgMHhlKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2 WFhfQ1BfUFJPVEVDVCgxNSksIEE2WFhfUFJPVEVDVF9SVygweDhlMDAsIDB4MCkpOworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMTYpLCBBNlhYX1BST1RFQ1RfUlcoMHg4ZTUw LCAweGYpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE3KSwgQTZYWF9Q Uk9URUNUX1JXKDB4YmUwMiwgMHgwKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJP VEVDVCgxOCksCisJCUE2WFhfUFJPVEVDVF9SVygweGJlMjAsIDB4MTFmMykpOworCWdwdV93cml0 ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMTkpLCBBNlhYX1BST1RFQ1RfUlcoMHg4MDAsIDB4 ODIpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDIwKSwgQTZYWF9QUk9U RUNUX1JXKDB4OGEwLCAweDgpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNU KDIxKSwgQTZYWF9QUk9URUNUX1JXKDB4OGFiLCAweDE5KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfQ1BfUFJPVEVDVCgyMiksIEE2WFhfUFJPVEVDVF9SVygweDkwMCwgMHg0ZCkpOworCWdw dV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjMpLCBBNlhYX1BST1RFQ1RfUlcoMHg5 OGQsIDB4NzYpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDI0KSwKKwkJ CUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg4ZDAsIDB4MjMpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdf QTZYWF9DUF9QUk9URUNUKDI1KSwKKwkJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg5ODAsIDB4NCkp OworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjYpLCBBNlhYX1BST1RFQ1Rf UlcoMHhhNjMwLCAweDApKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJZ3B1X3dyaXRl KGdwdSwgUkVHX0E2WFhfUkJCTV9JTlRfMF9NQVNLLCBBNlhYX0lOVF9NQVNLKTsKKworCXJldCA9 IGFkcmVub19od19pbml0KGdwdSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBh Nnh4X3Vjb2RlX2luaXQoZ3B1KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIEFsd2F5 cyBjb21lIHVwIG9uIHJiIDAgKi8KKwlhNnh4X2dwdS0+Y3VyX3JpbmcgPSBncHUtPnJiWzBdOwor CisJLyogRW5hYmxlIHRoZSBTUUVfdG8gc3RhcnQgdGhlIENQIGVuZ2luZSAqLworCWdwdV93cml0 ZShncHUsIFJFR19BNlhYX0NQX1NRRV9DTlRMLCAxKTsKKworCXJldCA9IGE2eHhfY3BfaW5pdChn cHUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf UkJCTV9TRUNWSURfVFJVU1RfQ05UTCwgMHgwKTsKKworb3V0OgorCS8qCisJICogVGVsbCB0aGUg R01VIHRoYXQgd2UgYXJlIGRvbmUgdG91Y2hpbmcgdGhlIEdQVSBhbmQgaXQgY2FuIHN0YXJ0IHBv d2VyCisJICogbWFuYWdlbWVudAorCSAqLworCWE2eHhfZ211X2NsZWFyX29vYigmYTZ4eF9ncHUt PmdtdSwgR01VX09PQl9HUFVfU0VUKTsKKworCS8qIFRha2UgdGhlIEdNVSBvdXQgb2YgaXRzIHNw ZWNpYWwgYm9vdCBtb2RlICovCisJYTZ4eF9nbXVfY2xlYXJfb29iKCZhNnh4X2dwdS0+Z211LCBH TVVfT09CX0JPT1RfU0xVTUJFUik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBh Nnh4X2R1bXAoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlkZXZfaW5mbygmZ3B1LT5wZGV2LT5k ZXYsICJzdGF0dXM6ICAgJTA4eFxuIiwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9T VEFUVVMpKTsKKwlhZHJlbm9fZHVtcChncHUpOworfQorCisjZGVmaW5lIFZCSUZfUkVTRVRfQUNL X1RJTUVPVVQJMTAwCisjZGVmaW5lIFZCSUZfUkVTRVRfQUNLX01BU0sJMHgwMGYwCisKK3N0YXRp YyB2b2lkIGE2eHhfcmVjb3ZlcihzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCWludCBpOworCisJ YWRyZW5vX2R1bXBfaW5mbyhncHUpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGV2 X2luZm8oJmdwdS0+cGRldi0+ZGV2LCAiQ1BfU0NSQVRDSF9SRUclZDogJXVcbiIsIGksCisJCQln cHVfcmVhZChncHUsIFJFR19BNlhYX0NQX1NDUkFUQ0hfUkVHKGkpKSk7CisKKwlpZiAoaGFuZ19k ZWJ1ZykKKwkJYTZ4eF9kdW1wKGdwdSk7CisKKwlncHUtPmZ1bmNzLT5wbV9zdXNwZW5kKGdwdSk7 CisJZ3B1LT5mdW5jcy0+cG1fcmVzdW1lKGdwdSk7CisKKwltc21fZ3B1X2h3X2luaXQoZ3B1KTsK K30KKworc3RhdGljIGludCBhNnh4X2ZhdWx0X2hhbmRsZXIodm9pZCAqYXJnLCB1bnNpZ25lZCBs b25nIGlvdmEsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbXNtX2dwdSAqZ3B1ID0gYXJnOworCisJ cHJfd2Fybl9yYXRlbGltaXRlZCgiKioqIGdwdSBmYXVsdDogaW92YT0lMDhseCwgZmxhZ3M9JWQg KCV1LCV1LCV1LCV1KVxuIiwKKwkJCWlvdmEsIGZsYWdzLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdf QTZYWF9DUF9TQ1JBVENIX1JFRyg0KSksCisJCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX1ND UkFUQ0hfUkVHKDUpKSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfU0NSQVRDSF9SRUco NikpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9TQ1JBVENIX1JFRyg3KSkpOworCisJ cmV0dXJuIC1FRkFVTFQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfY3BfaHdfZXJyX2lycShzdHJ1 Y3QgbXNtX2dwdSAqZ3B1KQoreworCXUzMiBzdGF0dXMgPSBncHVfcmVhZChncHUsIFJFR19BNlhY X0NQX0lOVEVSUlVQVF9TVEFUVVMpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfQ1BfSU5UX0NQX09Q Q09ERV9FUlJPUikgeworCQl1MzIgdmFsOworCisJCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQ X1NRRV9TVEFUX0FERFIsIDEpOworCQl2YWwgPSBncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX1NR RV9TVEFUX0RBVEEpOworCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwKKwkJ CSJDUCB8IG9wY29kZSBlcnJvciB8IHBvc3NpYmxlIG9wY29kZT0weCU4LjhYXG4iLAorCQkJdmFs KTsKKwl9CisKKwlpZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1BfVUNPREVfRVJST1IpCisJCWRl dl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LAorCQkJIkNQIHVjb2RlIGVycm9yIGlu dGVycnVwdFxuIik7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1BfSFdfRkFVTFRfRVJS T1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAiQ1AgfCBIVyBmYXVs dCB8IHN0YXR1cz0weCU4LjhYXG4iLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9IV19G QVVMVCkpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfQ1BfSU5UX0NQX1JFR0lTVEVSX1BST1RFQ1RJ T05fRVJST1IpIHsKKwkJdTMyIHZhbCA9IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVD VF9TVEFUVVMpOworCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LAorCQkJ IkNQIHwgcHJvdGVjdGVkIG1vZGUgZXJyb3IgfCAlcyB8IGFkZHI9MHglOC44WCB8IHN0YXR1cz0w eCU4LjhYXG4iLAorCQkJdmFsICYgKDEgPDwgMjApID8gIlJFQUQiIDogIldSSVRFIiwKKwkJCSh2 YWwgJiAweDNmZmZmKSwgdmFsKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1Bf QUhCX0VSUk9SKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIkNQIEFI QiBlcnJvciBpbnRlcnJ1cHRcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfQ1BfSU5UX0NQX1ZT RF9QQVJJVFlfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAi Q1AgVlNEIGRlY29kZXIgcGFyaXR5IGVycm9yXG4iKTsKKworCWlmIChzdGF0dXMgJiBBNlhYX0NQ X0lOVF9DUF9JTExFR0FMX0lOU1RSX0VSUk9SKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUt PnBkZXYtPmRldiwgIkNQIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gZXJyb3JcbiIpOworCit9CisKK3N0 YXRpYyB2b2lkIGE2eHhfZmF1bHRfZGV0ZWN0X2lycShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQorewor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHUtPmRldjsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2 YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJp bmcgPSBncHUtPmZ1bmNzLT5hY3RpdmVfcmluZyhncHUpOworCisJRFJNX0RFVl9FUlJPUigmZ3B1 LT5wZGV2LT5kZXYsCisJCSJncHUgZmF1bHQgcmluZyAlZCBmZW5jZSAleCBzdGF0dXMgJTguOFgg cmIgJTQuNHgvJTQuNHggaWIxICUxNi4xNmxsWC8lNC40eCBpYjIgJTE2LjE2bGxYLyU0LjR4XG4i LAorCQlyaW5nID8gcmluZy0+aWQgOiAtMSwgcmluZyA/IHJpbmctPnNlcW5vIDogMCwKKwkJZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NUQVRVUyksCisJCWdwdV9yZWFkKGdwdSwgUkVHX0E2 WFhfQ1BfUkJfUlBUUiksCisJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfUkJfV1BUUiksCisJ CWdwdV9yZWFkNjQoZ3B1LCBSRUdfQTZYWF9DUF9JQjFfQkFTRSwgUkVHX0E2WFhfQ1BfSUIxX0JB U0VfSEkpLAorCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX0lCMV9SRU1fU0laRSksCisJCWdw dV9yZWFkNjQoZ3B1LCBSRUdfQTZYWF9DUF9JQjJfQkFTRSwgUkVHX0E2WFhfQ1BfSUIyX0JBU0Vf SEkpLAorCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX0lCMl9SRU1fU0laRSkpOworCisJLyog VHVybiBvZmYgdGhlIGhhbmdjaGVjayB0aW1lciB0byBrZWVwIGl0IGZyb20gYm90aGVyaW5nIHVz ICovCisJZGVsX3RpbWVyKCZncHUtPmhhbmdjaGVja190aW1lcik7CisKKwlxdWV1ZV93b3JrKHBy aXYtPndxLCAmZ3B1LT5yZWNvdmVyX3dvcmspOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYTZ4 eF9pcnEoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwl1MzIgc3RhdHVzID0gZ3B1X3JlYWQoZ3B1 LCBSRUdfQTZYWF9SQkJNX0lOVF8wX1NUQVRVUyk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZY WF9SQkJNX0lOVF9DTEVBUl9DTUQsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJN X0lOVF8wX01BU0tfUkJCTV9IQU5HX0RFVEVDVCkKKwkJYTZ4eF9mYXVsdF9kZXRlY3RfaXJxKGdw dSk7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQUhCX0VSUk9SKQor CQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIkNQIHwgQUhCIGJ1cyBlcnJv clxuIik7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSFdfRVJST1Ip CisJCWE2eHhfY3BfaHdfZXJyX2lycShncHUpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9J TlRfMF9NQVNLX1JCQk1fQVRCX0FTWU5DRklGT19PVkVSRkxPVykKKwkJZGV2X2Vycl9yYXRlbGlt aXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJSQkJNIHwgQVRCIEFTWU5DIG92ZXJmbG93XG4iKTsKKwor CWlmIChzdGF0dXMgJiBBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0FUQl9CVVNfT1ZFUkZMT1cp CisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAiUkJCTSB8IEFUQiBidXMg b3ZlcmZsb3dcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1VDSEVf T09CX0FDQ0VTUykKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJVQ0hF IHwgT3V0IG9mIGJvdW5kcyBhY2Nlc3NcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9J TlRfMF9NQVNLX0NQX0NBQ0hFX0ZMVVNIX1RTKQorCQltc21fZ3B1X3JldGlyZShncHUpOworCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJf b2Zmc2V0c1tSRUdfQURSRU5PX1JFR0lTVEVSX01BWF0gPSB7CisJUkVHX0FEUkVOT19ERUZJTkUo UkVHX0FEUkVOT19DUF9SQl9CQVNFLCBSRUdfQTZYWF9DUF9SQl9CQVNFKSwKKwlSRUdfQURSRU5P X0RFRklORShSRUdfQURSRU5PX0NQX1JCX0JBU0VfSEksIFJFR19BNlhYX0NQX1JCX0JBU0VfSEkp LAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfUlBUUl9BRERSLAorCQlSRUdf QTZYWF9DUF9SQl9SUFRSX0FERFJfTE8pLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9f Q1BfUkJfUlBUUl9BRERSX0hJLAorCQlSRUdfQTZYWF9DUF9SQl9SUFRSX0FERFJfSEkpLAorCVJF R19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfUlBUUiwgUkVHX0E2WFhfQ1BfUkJfUlBU UiksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9XUFRSLCBSRUdfQTZYWF9D UF9SQl9XUFRSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX0NOVEwsIFJF R19BNlhYX0NQX1JCX0NOVEwpLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3JlZ2lzdGVy c1tdID0geworCTB4MDAwMCwgMHgwMDAyLCAweDAwMTAsIDB4MDAxMCwgMHgwMDEyLCAweDAwMTIs IDB4MDAxOCwgMHgwMDFiLAorCTB4MDAxZSwgMHgwMDMyLCAweDAwMzgsIDB4MDAzYywgMHgwMDQy LCAweDAwNDIsIDB4MDA0NCwgMHgwMDQ0LAorCTB4MDA0NywgMHgwMDQ3LCAweDAwNTYsIDB4MDA1 NiwgMHgwMGFkLCAweDAwYWUsIDB4MDBiMCwgMHgwMGZiLAorCTB4MDEwMCwgMHgwMTFkLCAweDAy MDAsIDB4MDIwZCwgMHgwMjEwLCAweDAyMTMsIDB4MDIxOCwgMHgwMjNkLAorCTB4MDQwMCwgMHgw NGY5LCAweDA1MDAsIDB4MDUwMCwgMHgwNTA1LCAweDA1MGIsIDB4MDUwZSwgMHgwNTExLAorCTB4 MDUzMywgMHgwNTMzLCAweDA1NDAsIDB4MDU1NSwgMHgwODAwLCAweDA4MDgsIDB4MDgxMCwgMHgw ODEzLAorCTB4MDgyMCwgMHgwODIxLCAweDA4MjMsIDB4MDgyNywgMHgwODMwLCAweDA4MzMsIDB4 MDg0MCwgMHgwODQzLAorCTB4MDg0ZiwgMHgwODZmLCAweDA4ODAsIDB4MDg4YSwgMHgwOGEwLCAw eDA4YWIsIDB4MDhjMCwgMHgwOGM0LAorCTB4MDhkMCwgMHgwOGRkLCAweDA4ZjAsIDB4MDhmMywg MHgwOTAwLCAweDA5MDMsIDB4MDkwOCwgMHgwOTExLAorCTB4MDkyOCwgMHgwOTNlLCAweDA5NDIs IDB4MDk0ZCwgMHgwOTgwLCAweDA5ODQsIDB4MDk4ZCwgMHgwOTk2LAorCTB4MDk5OCwgMHgwOTll LCAweDA5YTAsIDB4MDlhNiwgMHgwOWE4LCAweDA5YWUsIDB4MDliMCwgMHgwOWIxLAorCTB4MDlj MiwgMHgwOWM4LCAweDBhMDAsIDB4MGEwMywgMHgwYzAwLCAweDBjMDQsIDB4MGMwNiwgMHgwYzA2 LAorCTB4MGMxMCwgMHgwY2Q5LCAweDBlMDAsIDB4MGUwZSwgMHgwZTEwLCAweDBlMTMsIDB4MGUx NywgMHgwZTE5LAorCTB4MGUxYywgMHgwZTJiLCAweDBlMzAsIDB4MGUzMiwgMHgwZTM4LCAweDBl MzksIDB4ODYwMCwgMHg4NjAxLAorCTB4ODYxMCwgMHg4NjFiLCAweDg2MjAsIDB4ODYyMCwgMHg4 NjI4LCAweDg2MmIsIDB4ODYzMCwgMHg4NjM3LAorCTB4OGUwMSwgMHg4ZTAxLCAweDhlMDQsIDB4 OGUwNSwgMHg4ZTA3LCAweDhlMDgsIDB4OGUwYywgMHg4ZTBjLAorCTB4OGUxMCwgMHg4ZTFjLCAw eDhlMjAsIDB4OGUyNSwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyYywgMHg4ZTJmLAorCTB4OGUzYiwg MHg4ZTNlLCAweDhlNDAsIDB4OGU0MywgMHg4ZTUwLCAweDhlNWUsIDB4OGU3MCwgMHg4ZTc3LAor CTB4OTYwMCwgMHg5NjA0LCAweDk2MjQsIDB4OTYzNywgMHg5ZTAwLCAweDllMDEsIDB4OWUwMywg MHg5ZTBlLAorCTB4OWUxMSwgMHg5ZTE2LCAweDllMTksIDB4OWUxOSwgMHg5ZTFjLCAweDllMWMs IDB4OWUyMCwgMHg5ZTIzLAorCTB4OWUzMCwgMHg5ZTMxLCAweDllMzQsIDB4OWUzNCwgMHg5ZTcw LCAweDllNzIsIDB4OWU3OCwgMHg5ZTc5LAorCTB4OWU4MCwgMHg5ZmZmLCAweGE2MDAsIDB4YTYw MSwgMHhhNjAzLCAweGE2MDMsIDB4YTYwYSwgMHhhNjBhLAorCTB4YTYxMCwgMHhhNjE3LCAweGE2 MzAsIDB4YTYzMCwKKwl+MAorfTsKKworc3RhdGljIGludCBhNnh4X3BtX3Jlc3VtZShzdHJ1Y3Qg bXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRy ZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShh ZHJlbm9fZ3B1KTsKKwlpbnQgcmV0OworCisJcmV0ID0gYTZ4eF9nbXVfcmVzdW1lKGE2eHhfZ3B1 KTsKKworCWdwdS0+bmVlZHNfaHdfaW5pdCA9IHRydWU7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IGE2eHhfcG1fc3VzcGVuZChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCS8qCisJICog TWFrZSBzdXJlIHRoZSBHTVUgaXMgaWRsZSBiZWZvcmUgY29udGludWluZyAoYmVjYXVzZSBzb21l IHRyYW5zaXRpb25zCisJICogbWF5IHVzZSBWQklGCisJICovCisJYTZ4eF9nbXVfd2FpdF9mb3Jf aWRsZShhNnh4X2dwdSk7CisKKwkvKiBDbGVhciB0aGUgVkJJRiBwaXBlIGJlZm9yZSBzaHV0dGlu ZyBkb3duICovCisJLyogRklYTUU6IFRoaXMgYWNjZXNzZXMgdGhlIEdQVSAtIGRvIHdlIG5lZWQg dG8gbWFrZSBzdXJlIGl0IGlzIG9uPyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZf WElOX0hBTFRfQ1RSTDAsIDB4Zik7CisJc3Bpbl91bnRpbCgoZ3B1X3JlYWQoZ3B1LCBSRUdfQTZY WF9WQklGX1hJTl9IQUxUX0NUUkwxKSAmIDB4ZikgPT0gMHhmKTsKKwlncHVfd3JpdGUoZ3B1LCBS RUdfQTZYWF9WQklGX1hJTl9IQUxUX0NUUkwwLCAwKTsKKworCXJldHVybiBhNnh4X2dtdV9zdG9w KGE2eHhfZ3B1KTsKK30KKworc3RhdGljIGludCBhNnh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1z bV9ncHUgKmdwdSwgdWludDY0X3QgKnZhbHVlKQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJl bm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUg PSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCS8qIEZvcmNlIHRoZSBHUFUgcG93ZXIgb24g c28gd2UgY2FuIHJlYWQgdGhpcyByZWdpc3RlciAqLworCWE2eHhfZ211X3NldF9vb2IoJmE2eHhf Z3B1LT5nbXUsIEdNVV9PT0JfR1BVX1NFVCk7CisKKwkqdmFsdWUgPSBncHVfcmVhZDY0KGdwdSwg UkVHX0E2WFhfUkJCTV9QRVJGQ1RSX0NQXzBfTE8sCisJCVJFR19BNlhYX1JCQk1fUEVSRkNUUl9D UF8wX0hJKTsKKworCWE2eHhfZ211X2NsZWFyX29vYigmYTZ4eF9ncHUtPmdtdSwgR01VX09PQl9H UFVfU0VUKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGlj IHZvaWQgYTZ4eF9zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBzZXFfZmlsZSAqbSkK K3sKKwlncHUtPmZ1bmNzLT5wbV9yZXN1bWUoZ3B1KTsKKworCXNlcV9wcmludGYobSwgInN0YXR1 czogICAlMDh4XG4iLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NUQVRVUykpOwor CWdwdS0+ZnVuY3MtPnBtX3N1c3BlbmQoZ3B1KTsKKworCWFkcmVub19zaG93KGdwdSwgbSk7Cit9 CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqYTZ4eF9hY3RpdmVfcmlu ZyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1 ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19h Nnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCXJldHVybiBhNnh4X2dwdS0+Y3VyX3Jpbmc7Cit9CisK K3N0YXRpYyB2b2lkIGE2eHhfZGVzdHJveShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWlmIChhNnh4 X2dwdS0+c3FlX2JvKSB7CisJCWlmIChhNnh4X2dwdS0+c3FlX2lvdmEpCisJCQltc21fZ2VtX3B1 dF9pb3ZhKGE2eHhfZ3B1LT5zcWVfYm8sIGdwdS0+YXNwYWNlKTsKKwkJZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2VfdW5sb2NrZWQoYTZ4eF9ncHUtPnNxZV9ibyk7CisJfQorCisJYTZ4eF9nbXVf cmVtb3ZlKGE2eHhfZ3B1KTsKKworCWFkcmVub19ncHVfY2xlYW51cChhZHJlbm9fZ3B1KTsKKwlr ZnJlZShhNnh4X2dwdSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5j cyBmdW5jcyA9IHsKKwkuYmFzZSA9IHsKKwkJLmdldF9wYXJhbSA9IGFkcmVub19nZXRfcGFyYW0s CisJCS5od19pbml0ID0gYTZ4eF9od19pbml0LAorCQkucG1fc3VzcGVuZCA9IGE2eHhfcG1fc3Vz cGVuZCwKKwkJLnBtX3Jlc3VtZSA9IGE2eHhfcG1fcmVzdW1lLAorCQkucmVjb3ZlciA9IGE2eHhf cmVjb3ZlciwKKwkJLnN1Ym1pdCA9IGE2eHhfc3VibWl0LAorCQkuZmx1c2ggPSBhNnh4X2ZsdXNo LAorCQkuYWN0aXZlX3JpbmcgPSBhNnh4X2FjdGl2ZV9yaW5nLAorCQkuaXJxID0gYTZ4eF9pcnEs CisJCS5kZXN0cm95ID0gYTZ4eF9kZXN0cm95LAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCQku c2hvdyA9IGE2eHhfc2hvdywKKyNlbmRpZgorCX0sCisJLmdldF90aW1lc3RhbXAgPSBhNnh4X2dl dF90aW1lc3RhbXAsCit9OworCitzdHJ1Y3QgbXNtX2dwdSAqYTZ4eF9ncHVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwcml2LT5ncHVf cGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4 X2dwdTsKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdTsKKwlzdHJ1Y3QgbXNtX2dwdSAq Z3B1OworCWludCByZXQ7CisKKwlhNnh4X2dwdSA9IGt6YWxsb2Moc2l6ZW9mKCphNnh4X2dwdSks IEdGUF9LRVJORUwpOworCWlmICghYTZ4eF9ncHUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJYWRyZW5vX2dwdSA9ICZhNnh4X2dwdS0+YmFzZTsKKwlncHUgPSAmYWRyZW5vX2dwdS0+ YmFzZTsKKworCWFkcmVub19ncHUtPnJlZ2lzdGVycyA9IGE2eHhfcmVnaXN0ZXJzOworCWFkcmVu b19ncHUtPnJlZ19vZmZzZXRzID0gYTZ4eF9yZWdpc3Rlcl9vZmZzZXRzOworCisJcmV0ID0gYWRy ZW5vX2dwdV9pbml0KGRldiwgcGRldiwgYWRyZW5vX2dwdSwgJmZ1bmNzLCAxKTsKKwlpZiAocmV0 KSB7CisJCWE2eHhfZGVzdHJveSgmKGE2eHhfZ3B1LT5iYXNlLmJhc2UpKTsKKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhIEdNVSBwaGFuZGxlIGFu ZCBzZXQgaXQgdXAgKi8KKwlub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9k ZSwgImdtdSIsIDApOworCisJLyogRklYTUU6IEhvdyBkbyB3ZSBncmFjZWZ1bGx5IGhhbmRsZSB0 aGlzPyAqLworCUJVR19PTighbm9kZSk7CisKKwlyZXQgPSBhNnh4X2dtdV9wcm9iZShhNnh4X2dw dSwgbm9kZSk7CisJaWYgKHJldCkgeworCQlhNnh4X2Rlc3Ryb3koJihhNnh4X2dwdS0+YmFzZS5i YXNlKSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJaWYgKGdwdS0+YXNwYWNlKQor CQltc21fbW11X3NldF9mYXVsdF9oYW5kbGVyKGdwdS0+YXNwYWNlLT5tbXUsIGdwdSwKKwkJCQlh Nnh4X2ZhdWx0X2hhbmRsZXIpOworCisJcmV0dXJuIGdwdTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hNnh4X2dwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u ZGQ2OWU1YjBlNjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJl bm8vYTZ4eF9ncHUuaApAQCAtMCwwICsxLDYwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLworCisjaWZuZGVmIF9fQTZYWF9HUFVfSF9fCisjZGVm aW5lIF9fQTZYWF9HUFVfSF9fCisKKworI2luY2x1ZGUgImFkcmVub19ncHUuaCIKKyNpbmNsdWRl ICJhNnh4LnhtbC5oIgorCisjaW5jbHVkZSAiYTZ4eF9nbXUuaCIKKworZXh0ZXJuIGJvb2wgaGFu Z19kZWJ1ZzsKKworc3RydWN0IGE2eHhfZ3B1IHsKKwlzdHJ1Y3QgYWRyZW5vX2dwdSBiYXNlOwor CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpzcWVfYm87CisJdWludDY0X3Qgc3FlX2lvdmE7CisK KwlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKmN1cl9yaW5nOworCisJc3RydWN0IGE2eHhfZ211IGdt dTsKK307CisKKyNkZWZpbmUgdG9fYTZ4eF9ncHUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBh Nnh4X2dwdSwgYmFzZSkKKworLyoKKyAqIEdpdmVuIGEgcmVnaXN0ZXIgYW5kIGEgY291bnQsIHJl dHVybiBhIHZhbHVlIHRvIHByb2dyYW0gaW50bworICogUkVHX0NQX1BST1RFQ1RfUkVHKG4pIC0g dGhpcyB3aWxsIGJsb2NrIGJvdGggcmVhZHMgYW5kIHdyaXRlcyBmb3IgX2xlbgorICogcmVnaXN0 ZXJzIHN0YXJ0aW5nIGF0IF9yZWcuCisgKi8KKyNkZWZpbmUgQTZYWF9QUk9URUNUX1JXKF9yZWcs IF9sZW4pIFwKKwkoKDEgPDwgMzEpIHwgXAorCSgoKF9sZW4pICYgMHgzRkZGKSA8PCAxOCkgfCAo KF9yZWcpICYgMHgzRkZGRikpCisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgYWxsb3cgcmVh ZHMgb3ZlciB0aGUgcmFuZ2UuIEZvciBhcmVhcyBvZiBtaXhlZCB1c2UgKHN1Y2gKKyAqIGFzIHBl cmZvcm1hbmNlIGNvdW50ZXJzKSB0aGlzIGFsbG93cyB1cyB0byBwcm90ZWN0IGEgbXVjaCBsYXJn ZXIgcmFuZ2Ugd2l0aCBhCisgKiBzaW5nbGUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBBNlhYX1BS T1RFQ1RfUkRPTkxZKF9yZWcsIF9sZW4pIFwKKwkoKCgoX2xlbikgJiAweDNGRkYpIDw8IDE4KSB8 ICgoX3JlZykgJiAweDNGRkZGKSkKKworCitpbnQgYTZ4eF9nbXVfcmVzdW1lKHN0cnVjdCBhNnh4 X2dwdSAqZ3B1KTsKK2ludCBhNnh4X2dtdV9zdG9wKHN0cnVjdCBhNnh4X2dwdSAqZ3B1KTsKKwor aW50IGE2eHhfZ211X3dhaXRfZm9yX2lkbGUoc3RydWN0IGE2eHhfZ3B1ICpncHUpOworCitpbnQg YTZ4eF9nbXVfcmVzZXQoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSk7Citib29sIGE2eHhfZ211 X2lzaWRsZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSk7CisKK2ludCBhNnh4X2dtdV9zZXRfb29iKHN0 cnVjdCBhNnh4X2dtdSAqZ211LCBlbnVtIGE2eHhfZ211X29vYl9zdGF0ZSBzdGF0ZSk7Cit2b2lk IGE2eHhfZ211X2NsZWFyX29vYihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgZW51bSBhNnh4X2dtdV9v b2Jfc3RhdGUgc3RhdGUpOworCitpbnQgYTZ4eF9nbXVfcHJvYmUoc3RydWN0IGE2eHhfZ3B1ICph Nnh4X2dwdSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKK3ZvaWQgYTZ4eF9nbXVfcmVtb3Zl KHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpOworCisjZW5kaWYgLyogX19BNlhYX0dQVV9IX18g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMjIxZWFhZmM4YjVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuYwpAQCAtMCwwICsxLDQzNSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qIENvcHlyaWdodCAoYykgMjAxNy0y MDE4IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLworCisjaW5j bHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+Cisj aW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAiYTZ4eF9nbXUuaCIKKyNpbmNsdWRl ICJhNnh4X2dtdS54bWwuaCIKKworI2RlZmluZSBIRklfTVNHX0lEKHZhbCkgW3ZhbF0gPSAjdmFs CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYTZ4eF9oZmlfbXNnX2lkW10gPSB7CisJSEZJ X01TR19JRChIRklfSDJGX01TR19JTklUKSwKKwlIRklfTVNHX0lEKEhGSV9IMkZfTVNHX0ZXX1ZF UlNJT04pLAorCUhGSV9NU0dfSUQoSEZJX0gyRl9NU0dfQldfVEFCTEUpLAorCUhGSV9NU0dfSUQo SEZJX0gyRl9NU0dfUEVSRl9UQUJMRSksCisJSEZJX01TR19JRChIRklfSDJGX01TR19URVNUKSwK K307CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfcXVldWVfcmVhZChzdHJ1Y3QgYTZ4eF9oZmlfcXVl dWUgKnF1ZXVlLCB1MzIgKmRhdGEsCisJCXUzMiBkd29yZHMpCit7CisJc3RydWN0IGE2eHhfaGZp X3F1ZXVlX2hlYWRlciAqaGVhZGVyID0gcXVldWUtPmhlYWRlcjsKKwl1MzIgaSwgaGRyLCBpbmRl eCA9IGhlYWRlci0+cmVhZF9pbmRleDsKKworCWlmIChoZWFkZXItPnJlYWRfaW5kZXggPT0gaGVh ZGVyLT53cml0ZV9pbmRleCkgeworCQloZWFkZXItPnJ4X3JlcXVlc3QgPSAxOworCQlyZXR1cm4g MDsKKwl9CisKKwloZHIgPSBxdWV1ZS0+ZGF0YVtpbmRleF07CisKKwkvKgorCSAqIElmIHdlIGFy ZSB0byBhc3N1bWUgdGhhdCB0aGUgR01VIGZpcm13YXJlIGlzIGluIGZhY3QgYSByYXRpb25hbCBh Y3RvcgorCSAqIGFuZCBpcyBwcm9ncmFtbWVkIHRvIG5vdCBzZW5kIHVzIGEgbGFyZ2VyIHJlc3Bv bnNlIHRoYW4gd2UgZXhwZWN0CisJICogdGhlbiB3ZSBjYW4gYWxzbyBhc3N1bWUgdGhhdCBpZiB0 aGUgaGVhZGVyIHNpemUgaXMgdW5leHBlY3RlZGx5IGxhcmdlCisJICogdGhhdCBpdCBpcyBkdWUg dG8gbWVtb3J5IGNvcnJ1cHRpb24gYW5kL29yIGhhcmR3YXJlIGZhaWx1cmUuIEluIHRoaXMKKwkg KiBjYXNlIHRoZSBvbmx5IHJlYXNvbmFibGUgY291cnNlIG9mIGFjdGlvbiBpcyB0byBCVUcoKSB0 byBoZWxwIGhhcmRlbgorCSAqIHRoZSBmYWlsdXJlLgorCSAqLworCisJQlVHX09OKEhGSV9IRUFE RVJfU0laRShoZHIpID4gZHdvcmRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBIRklfSEVBREVSX1NJ WkUoaGRyKTsgaSsrKSB7CisJCWRhdGFbaV0gPSBxdWV1ZS0+ZGF0YVtpbmRleF07CisJCWluZGV4 ID0gKGluZGV4ICsgMSkgJSBoZWFkZXItPnNpemU7CisJfQorCisJaGVhZGVyLT5yZWFkX2luZGV4 ID0gaW5kZXg7CisJcmV0dXJuIEhGSV9IRUFERVJfU0laRShoZHIpOworfQorCitzdGF0aWMgaW50 IGE2eHhfaGZpX3F1ZXVlX3dyaXRlKHN0cnVjdCBhNnh4X2dtdSAqZ211LAorCXN0cnVjdCBhNnh4 X2hmaV9xdWV1ZSAqcXVldWUsIHUzMiAqZGF0YSwgdTMyIGR3b3JkcykKK3sKKwlzdHJ1Y3QgYTZ4 eF9oZmlfcXVldWVfaGVhZGVyICpoZWFkZXIgPSBxdWV1ZS0+aGVhZGVyOworCXUzMiBpLCBzcGFj ZSwgaW5kZXggPSBoZWFkZXItPndyaXRlX2luZGV4OworCisJc3Bpbl9sb2NrKCZxdWV1ZS0+bG9j ayk7CisKKwlzcGFjZSA9IENJUkNfU1BBQ0UoaGVhZGVyLT53cml0ZV9pbmRleCwgaGVhZGVyLT5y ZWFkX2luZGV4LAorCQloZWFkZXItPnNpemUpOworCWlmIChzcGFjZSA8IGR3b3JkcykgeworCQlo ZWFkZXItPmRyb3BwZWQrKzsKKwkJc3Bpbl91bmxvY2soJnF1ZXVlLT5sb2NrKTsKKwkJcmV0dXJu IC1FTk9TUEM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGR3b3JkczsgaSsrKSB7CisJCXF1ZXVl LT5kYXRhW2luZGV4XSA9IGRhdGFbaV07CisJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBoZWFkZXIt PnNpemU7CisJfQorCisJaGVhZGVyLT53cml0ZV9pbmRleCA9IGluZGV4OworCXNwaW5fdW5sb2Nr KCZxdWV1ZS0+bG9jayk7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSE9TVDJHTVVf SU5UUl9TRVQsIDB4MDEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYTZ4eF9oZmlfcmVzcG9u c2UgeworCXUzMiBpZDsKKwl1MzIgc2VxbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlz dHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKKworCXUzMiBlcnJvcjsKKwl1MzIgcGF5bG9hZFsx Nl07Cit9OworCisvKgorICogSW5jb21pbmcgSEZJIGFjayBtZXNzYWdlcyBjYW4gY29tZSBpbiBv dXQgb2Ygb3JkZXIgc28gd2UgbmVlZCB0byBzdG9yZSBhbGwKKyAqIHRoZSBwZW5kaW5nIG1lc3Nh Z2VzIG9uIGEgbGlzdCB1bnRpbCB0aGV5IGFyZSBoYW5kbGVkLgorICovCitzdGF0aWMgc3Bpbmxv Y2tfdCBoZmlfYWNrX2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChtZXNzYWdlX2xvY2spOwor c3RhdGljIExJU1RfSEVBRChoZmlfYWNrX2xpc3QpOworCitzdGF0aWMgdm9pZCBhNnh4X2hmaV9o YW5kbGVfYWNrKHN0cnVjdCBhNnh4X2dtdSAqZ211LAorCQlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX3Jl c3BvbnNlICptc2cpCit7CisJc3RydWN0IGE2eHhfaGZpX3Jlc3BvbnNlICpyZXNwOworCXUzMiBp ZCwgc2VxbnVtOworCisJLyogbXNnLT5yZXRfaGVhZGVyIGNvbnRhaW5zIHRoZSBoZWFkZXIgb2Yg dGhlIG1lc3NhZ2UgYmVpbmcgYWNrZWQgKi8KKwlpZCA9IEhGSV9IRUFERVJfSUQobXNnLT5yZXRf aGVhZGVyKTsKKwlzZXFudW0gPSBIRklfSEVBREVSX1NFUU5VTShtc2ctPnJldF9oZWFkZXIpOwor CisJc3Bpbl9sb2NrKCZoZmlfYWNrX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzcCwg JmhmaV9hY2tfbGlzdCwgbm9kZSkgeworCQlpZiAocmVzcC0+aWQgPT0gaWQgJiYgcmVzcC0+c2Vx bnVtID09IHNlcW51bSkgeworCQkJcmVzcC0+ZXJyb3IgPSBtc2ctPmVycm9yOworCQkJbWVtY3B5 KHJlc3AtPnBheWxvYWQsIG1zZy0+cGF5bG9hZCwKKwkJCQlzaXplb2YocmVzcC0+cGF5bG9hZCkp OworCisJCQljb21wbGV0ZSgmcmVzcC0+Y29tcGxldGUpOworCQkJc3Bpbl91bmxvY2soJmhmaV9h Y2tfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmhmaV9hY2tfbG9j ayk7CisKKwlkZXZfZXJyKGdtdS0+ZGV2LCAiTm9ib2R5IHdhcyB3YWl0aW5nIGZvciBIRkkgbWVz c2FnZSAlZFxuIiwgc2VxbnVtKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9oZmlfaGFuZGxlX2Vy cm9yKHN0cnVjdCBhNnh4X2dtdSAqZ211LAorCQlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX3Jlc3BvbnNl ICptc2cpCit7CisJc3RydWN0IGE2eHhfaGZpX21zZ19lcnJvciAqZXJyb3IgPSAoc3RydWN0IGE2 eHhfaGZpX21zZ19lcnJvciAqKSBtc2c7CisKKwlkZXZfZXJyKGdtdS0+ZGV2LCAiR01VIGZpcm13 YXJlIGVycm9yICVkXG4iLCBlcnJvci0+Y29kZSk7Cit9CisKK3ZvaWQgYTZ4eF9oZmlfdGFzayh1 bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGE2eHhfZ211ICpnbXUgPSAoc3RydWN0IGE2 eHhfZ211ICopIGRhdGE7CisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSA9ICZnbXUtPnF1 ZXVlc1tIRklfUkVTUE9OU0VfUVVFVUVdOworCXN0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2Ug cmVzcDsKKworCWZvciAoOzspIHsKKwkJdTMyIGlkOworCQlpbnQgcmV0ID0gYTZ4eF9oZmlfcXVl dWVfcmVhZChxdWV1ZSwgKHUzMiAqKSAmcmVzcCwKKwkJCXNpemVvZihyZXNwKSA+PiAyKTsKKwor CQkvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIG9yIG5lZ2F0aXZlIG9uIGVy cm9yICovCisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKHJldCA8IDApCisJCQkJZGV2X2Vycihn bXUtPmRldiwKKwkJCQkJIlVuYWJsZSB0byByZWFkIHRoZSBIRkkgbWVzc2FnZSBxdWV1ZVxuIik7 CisJCQlicmVhazsKKwkJfQorCisJCWlkID0gSEZJX0hFQURFUl9JRChyZXNwLmhlYWRlcik7CisK KwkJaWYgKGlkID09IEhGSV9GMkhfTVNHX0FDSykKKwkJCWE2eHhfaGZpX2hhbmRsZV9hY2soZ211 LCAmcmVzcCk7CisJCWVsc2UgaWYgKGlkID09IEhGSV9GMkhfTVNHX0VSUk9SKQorCQkJYTZ4eF9o ZmlfaGFuZGxlX2Vycm9yKGdtdSwgJnJlc3ApOworCX0KK30KKworc3RhdGljIGludCBhNnh4X2hm aV9zZW5kX21zZyhzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgaW50IGlkLAorCQl2b2lkICpkYXRhLCB1 MzIgc2l6ZSwgdTMyICpwYXlsb2FkLCB1MzIgcGF5bG9hZF9zaXplKQoreworCXN0cnVjdCBhNnh4 X2hmaV9xdWV1ZSAqcXVldWUgPSAmZ211LT5xdWV1ZXNbSEZJX0NPTU1BTkRfUVVFVUVdOworCXN0 cnVjdCBhNnh4X2hmaV9yZXNwb25zZSByZXNwID0geyAwIH07CisJaW50IHJldCwgZHdvcmRzID0g c2l6ZSA+PiAyOworCXUzMiBzZXFudW07CisKKwlzZXFudW0gPSBhdG9taWNfaW5jX3JldHVybigm cXVldWUtPnNlcW51bSkgJSAweGZmZjsKKworCS8qIEZpcnN0IGR3b3JkIG9mIHRoZSBtZXNzYWdl IGlzIHRoZSBtZXNzYWdlIGhlYWRlciAtIGZpbGwgaXQgaW4gKi8KKwkqKCh1MzIgKikgZGF0YSkg PSAoc2VxbnVtIDw8IDIwKSB8IChIRklfTVNHX0NNRCA8PCAxNikgfAorCQkoZHdvcmRzIDw8IDgp IHwgaWQ7CisKKwlpbml0X2NvbXBsZXRpb24oJnJlc3AuY29tcGxldGUpOworCXJlc3AuaWQgPSBp ZDsKKwlyZXNwLnNlcW51bSA9IHNlcW51bTsKKworCXNwaW5fbG9ja19iaCgmaGZpX2Fja19sb2Nr KTsKKwlsaXN0X2FkZF90YWlsKCZyZXNwLm5vZGUsICZoZmlfYWNrX2xpc3QpOworCXNwaW5fdW5s b2NrX2JoKCZoZmlfYWNrX2xvY2spOworCisJcmV0ID0gYTZ4eF9oZmlfcXVldWVfd3JpdGUoZ211 LCBxdWV1ZSwgZGF0YSwgZHdvcmRzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ211LT5kZXYs ICJVbmFibGUgdG8gc2VuZCBtZXNzYWdlICVzIGlkICVkXG4iLAorCQkJYTZ4eF9oZmlfbXNnX2lk W2lkXSwgc2VxbnVtKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogV2FpdCB1cCB0byA1IHNlY29u ZHMgZm9yIHRoZSByZXNwb25zZSAqLworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91 dCgmcmVzcC5jb21wbGV0ZSwKKwkJbXNlY3NfdG9famlmZmllcyg1MDAwKSk7CisJaWYgKCFyZXQp IHsKKwkJZGV2X2VycihnbXUtPmRldiwKKwkJCSJNZXNzYWdlICVzIGlkICVkIHRpbWVkIG91dCB3 YWl0aW5nIGZvciByZXNwb25zZVxuIiwKKwkJCWE2eHhfaGZpX21zZ19pZFtpZF0sIHNlcW51bSk7 CisJCXJldCA9IC1FVElNRURPVVQ7CisJfSBlbHNlCisJCXJldCA9IDA7CisKK291dDoKKwlzcGlu X2xvY2tfYmgoJmhmaV9hY2tfbG9jayk7CisJbGlzdF9kZWwoJnJlc3Aubm9kZSk7CisJc3Bpbl91 bmxvY2tfYmgoJmhmaV9hY2tfbG9jayk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ aWYgKHJlc3AuZXJyb3IpIHsKKwkJZGV2X2VycihnbXUtPmRldiwgIk1lc3NhZ2UgJXMgaWQgJWQg cmV0dXJuZWQgZXJyb3IgJWRcbiIsCisJCQlhNnh4X2hmaV9tc2dfaWRbaWRdLCBzZXFudW0sIHJl c3AuZXJyb3IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGF5bG9hZCAmJiBwYXls b2FkX3NpemUpIHsKKwkJaW50IGNvcHkgPSBtaW5fdCh1MzIsIHBheWxvYWRfc2l6ZSwgc2l6ZW9m KHJlc3AucGF5bG9hZCkpOworCisJCW1lbWNweShwYXlsb2FkLCByZXNwLnBheWxvYWQsIGNvcHkp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGE2eHhfaGZpX3NlbmRfZ211X2lu aXQoc3RydWN0IGE2eHhfZ211ICpnbXUsIGludCBib290X3N0YXRlKQoreworCXN0cnVjdCBhNnh4 X2hmaV9tc2dfZ211X2luaXRfY21kIG1zZyA9IHsgMCB9OworCisJbXNnLmRiZ19idWZmZXJfYWRk ciA9ICh1MzIpIGdtdS0+ZGVidWctPmlvdmE7CisJbXNnLmRiZ19idWZmZXJfc2l6ZSA9ICh1MzIp IGdtdS0+ZGVidWctPnNpemU7CisJbXNnLmJvb3Rfc3RhdGUgPSBib290X3N0YXRlOworCisJcmV0 dXJuIGE2eHhfaGZpX3NlbmRfbXNnKGdtdSwgSEZJX0gyRl9NU0dfSU5JVCwgJm1zZywgc2l6ZW9m KG1zZyksCisJCU5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGE2eHhfaGZpX2dldF9md192ZXJz aW9uKHN0cnVjdCBhNnh4X2dtdSAqZ211LCB1MzIgKnZlcnNpb24pCit7CisJc3RydWN0IGE2eHhf aGZpX21zZ19md192ZXJzaW9uIG1zZyA9IHsgMCB9OworCisJLyogQ3VycmVudGx5IHN1cHBvcnRp bmcgdmVyc2lvbiAxLjEgKi8KKwltc2cuc3VwcG9ydGVkX3ZlcnNpb24gPSAoMSA8PCAyOCkgfCAo MSA8PCAxNik7CisKKwlyZXR1cm4gYTZ4eF9oZmlfc2VuZF9tc2coZ211LCBIRklfSDJGX01TR19G V19WRVJTSU9OLCAmbXNnLCBzaXplb2YobXNnKSwKKwkJdmVyc2lvbiwgc2l6ZW9mKCp2ZXJzaW9u KSk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfc2VuZF9wZXJmX3RhYmxlKHN0cnVjdCBhNnh4 X2dtdSAqZ211KQoreworCXN0cnVjdCBhNnh4X2hmaV9tc2dfcGVyZl90YWJsZSBtc2cgPSB7IDAg fTsKKwlpbnQgaTsKKworCW1zZy5udW1fZ3B1X2xldmVscyA9IGdtdS0+bnJfZ3B1X2ZyZXFzOwor CW1zZy5udW1fZ211X2xldmVscyA9IGdtdS0+bnJfZ211X2ZyZXFzOworCisJZm9yIChpID0gMDsg aSA8IGdtdS0+bnJfZ3B1X2ZyZXFzOyBpKyspIHsKKwkJbXNnLmd4X3ZvdGVzW2ldLnZvdGUgPSBn bXUtPmd4X2FyY192b3Rlc1tpXTsKKwkJbXNnLmd4X3ZvdGVzW2ldLnZvdGUgPSBnbXUtPmdwdV9m cmVxc1tpXSAvIDEwMDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGdtdS0+bnJfZ211X2ZyZXFz OyBpKyspIHsKKwkJbXNnLmN4X3ZvdGVzW2ldLnZvdGUgPSBnbXUtPmN4X2FyY192b3Rlc1tpXTsK KwkJbXNnLmN4X3ZvdGVzW2ldLnZvdGUgPSBnbXUtPmdtdV9mcmVxc1tpXSAvIDEwMDA7CisJfQor CisJcmV0dXJuIGE2eHhfaGZpX3NlbmRfbXNnKGdtdSwgSEZJX0gyRl9NU0dfUEVSRl9UQUJMRSwg Jm1zZywgc2l6ZW9mKG1zZyksCisJCU5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGE2eHhfaGZp X3NlbmRfYndfdGFibGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2eHhfaGZp X21zZ19id190YWJsZSBtc2cgPSB7IDAgfTsKKworCS8qCisJICogVGhlIHNkbTg0NSBHTVUgZG9l c24ndCBkbyBidXMgZnJlcXVlbmN5IHNjYWxpbmcgb24gaXRzIG93biBidXQgaXQKKwkgKiBkb2Vz IG5lZWQgYXQgbGVhc3Qgb25lIGVudHJ5IGluIHRoZSBsaXN0IGJlY2F1c2UgaXQgbWlnaHQgYmUg YWNjZXNzZWQKKwkgKiB3aGVuIHRoZSBHTVUgaXMgc2h1dHRpbmcgZG93bi4gU2VuZCBhIHNpbmds ZSAib2ZmIiBlbnRyeS4KKwkgKi8KKworCW1zZy5id19sZXZlbF9udW0gPSAxOworCisJbXNnLmRk cl9jbWRzX251bSA9IDM7CisJbXNnLmRkcl93YWl0X2JpdG1hc2sgPSAweDA3OworCisJbXNnLmRk cl9jbWRzX2FkZHJzWzBdID0gMHg1MDAwMDsKKwltc2cuZGRyX2NtZHNfYWRkcnNbMV0gPSAweDUw MDVjOworCW1zZy5kZHJfY21kc19hZGRyc1syXSA9IDB4NTAwMGM7CisKKwltc2cuZGRyX2NtZHNf ZGF0YVswXVswXSA9ICAweDQwMDAwMDAwOworCW1zZy5kZHJfY21kc19kYXRhWzBdWzFdID0gIDB4 NDAwMDAwMDA7CisJbXNnLmRkcl9jbWRzX2RhdGFbMF1bMl0gPSAgMHg0MDAwMDAwMDsKKworCS8q CisJICogVGhlc2UgYXJlIHRoZSBDWCAoQ05PQykgdm90ZXMuICBUaGlzIGlzIHVzZWQgYnV0IHRo ZSB2YWx1ZXMgZm9yIHRoZQorCSAqIHNkbTg0NSBHTVUgYXJlIGtub3duIGFuZCBmaXhlZCBzbyB3 ZSBjYW4gaGFyZCBjb2RlIHRoZW0uCisJICovCisKKwltc2cuY25vY19jbWRzX251bSA9IDM7CisJ bXNnLmNub2Nfd2FpdF9iaXRtYXNrID0gMHgwNTsKKworCW1zZy5jbm9jX2NtZHNfYWRkcnNbMF0g PSAweDUwMDM0OworCW1zZy5jbm9jX2NtZHNfYWRkcnNbMV0gPSAweDUwMDdjOworCW1zZy5jbm9j X2NtZHNfYWRkcnNbMl0gPSAweDUwMDRjOworCisJbXNnLmNub2NfY21kc19kYXRhWzBdWzBdID0g IDB4NDAwMDAwMDA7CisJbXNnLmNub2NfY21kc19kYXRhWzBdWzFdID0gIDB4MDAwMDAwMDA7CisJ bXNnLmNub2NfY21kc19kYXRhWzBdWzJdID0gIDB4NDAwMDAwMDA7CisKKwltc2cuY25vY19jbWRz X2RhdGFbMV1bMF0gPSAgMHg2MDAwMDAwMTsKKwltc2cuY25vY19jbWRzX2RhdGFbMV1bMV0gPSAg MHgyMDAwMDAwMTsKKwltc2cuY25vY19jbWRzX2RhdGFbMV1bMl0gPSAgMHg2MDAwMDAwMTsKKwor CXJldHVybiBhNnh4X2hmaV9zZW5kX21zZyhnbXUsIEhGSV9IMkZfTVNHX0JXX1RBQkxFLCAmbXNn LCBzaXplb2YobXNnKSwKKwkJTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfc2Vu ZF90ZXN0KHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCXN0cnVjdCBhNnh4X2hmaV9tc2dfdGVz dCBtc2cgPSB7IDAgfTsKKworCXJldHVybiBhNnh4X2hmaV9zZW5kX21zZyhnbXUsIEhGSV9IMkZf TVNHX1RFU1QsICZtc2csIHNpemVvZihtc2cpLAorCQlOVUxMLCAwKTsKK30KKworaW50IGE2eHhf aGZpX3N0YXJ0KHN0cnVjdCBhNnh4X2dtdSAqZ211LCBpbnQgYm9vdF9zdGF0ZSkKK3sKKwlpbnQg cmV0OworCisJcmV0ID0gYTZ4eF9oZmlfc2VuZF9nbXVfaW5pdChnbXUsIGJvb3Rfc3RhdGUpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhNnh4X2hmaV9nZXRfZndfdmVyc2lv bihnbXUsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFdlIGhh dmUgdG8gZ2V0IGV4Y2hhbmdlIHZlcnNpb24gbnVtYmVycyBwZXIgdGhlIHNlcXVlbmNlIGJ1dCBh dCB0aGlzCisJICogcG9pbnQgdGgga2VybmVsIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8ga25vdyB0 aGUgZXhhY3QgdmVyc2lvbiBvZgorCSAqIHRoZSBHTVUgZmlybXdhcmUKKwkgKi8KKworCXJldCA9 IGE2eHhfaGZpX3NlbmRfcGVyZl90YWJsZShnbXUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBhNnh4X2hmaV9zZW5kX2J3X3RhYmxlKGdtdSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCS8qCisJICogTGV0IHRoZSBHTVUga25vdyB0aGF0IHRoZXJlIHdvbid0IGJl IGFueSBtb3JlIEhGSSBtZXNzYWdlcyB1bnRpbCBuZXh0CisJICogYm9vdAorCSAqLworCWE2eHhf aGZpX3NlbmRfdGVzdChnbXUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYTZ4eF9oZmlfc3Rv cChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGdtdS0+cXVldWVzKTsgaSsrKSB7CisJCXN0cnVjdCBhNnh4X2hmaV9xdWV1ZSAq cXVldWUgPSAmZ211LT5xdWV1ZXNbaV07CisKKwkJaWYgKCFxdWV1ZS0+aGVhZGVyKQorCQkJY29u dGludWU7CisKKwkJaWYgKHF1ZXVlLT5oZWFkZXItPnJlYWRfaW5kZXggIT0gcXVldWUtPmhlYWRl ci0+d3JpdGVfaW5kZXgpCisJCQlkZXZfZXJyKGdtdS0+ZGV2LCAiSEZJIHF1ZXVlICVkIGlzIG5v dCBlbXB0eVxuIiwgaSk7CisKKwkJcXVldWUtPmhlYWRlci0+cmVhZF9pbmRleCA9IDA7CisJCXF1 ZXVlLT5oZWFkZXItPndyaXRlX2luZGV4ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhf aGZpX3F1ZXVlX2luaXQoc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSwKKwkJc3RydWN0IGE2 eHhfaGZpX3F1ZXVlX2hlYWRlciAqaGVhZGVyLCB2b2lkICp2aXJ0LCB1NjQgaW92YSwKKwkJdTMy IGlkKQoreworCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+bG9jayk7CisJcXVldWUtPmhlYWRlciA9 IGhlYWRlcjsKKwlxdWV1ZS0+ZGF0YSA9IHZpcnQ7CisJYXRvbWljX3NldCgmcXVldWUtPnNlcW51 bSwgMCk7CisKKwkvKiBTZXQgdXAgdGhlIHNoYXJlZCBtZW1vcnkgaGVhZGVyICovCisJaGVhZGVy LT5pb3ZhID0gaW92YTsKKwloZWFkZXItPnR5cGUgPSAgMTAgPDwgOCB8IGlkOworCWhlYWRlci0+ c3RhdHVzID0gMTsKKwloZWFkZXItPnNpemUgPSBTWl80SyA+PiAyOworCWhlYWRlci0+bXNnX3Np emUgPSAwOworCWhlYWRlci0+ZHJvcHBlZCA9IDA7CisJaGVhZGVyLT5yeF93YXRlcm1hcmsgPSAx OworCWhlYWRlci0+dHhfd2F0ZXJtYXJrID0gMTsKKwloZWFkZXItPnJ4X3JlcXVlc3QgPSAxOwor CWhlYWRlci0+dHhfcmVxdWVzdCA9IDA7CisJaGVhZGVyLT5yZWFkX2luZGV4ID0gMDsKKwloZWFk ZXItPndyaXRlX2luZGV4ID0gMDsKK30KKwordm9pZCBhNnh4X2hmaV9pbml0KHN0cnVjdCBhNnh4 X2dtdSAqZ211KQoreworCXN0cnVjdCBhNnh4X2dtdV9ibyAqaGZpID0gZ211LT5oZmk7CisJc3Ry dWN0IGE2eHhfaGZpX3F1ZXVlX3RhYmxlX2hlYWRlciAqdGFibGUgPSBoZmktPnZpcnQ7CisJc3Ry dWN0IGE2eHhfaGZpX3F1ZXVlX2hlYWRlciAqaGVhZGVycyA9IGhmaS0+dmlydCArIHNpemVvZigq dGFibGUpOworCXU2NCBvZmZzZXQ7CisJaW50IHRhYmxlX3NpemU7CisKKwkvKgorCSAqIFRoZSB0 YWJsZSBzaXplIGlzIHRoZSBzaXplIG9mIHRoZSB0YWJsZSBoZWFkZXIgcGx1cyBhbGwgb2YgdGhl IHF1ZXVlCisJICogaGVhZGVycworCSAqLworCXRhYmxlX3NpemUgPSBzaXplb2YoKnRhYmxlKTsK Kwl0YWJsZV9zaXplICs9IChBUlJBWV9TSVpFKGdtdS0+cXVldWVzKSAqCisJCXNpemVvZihzdHJ1 Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyKSk7CisKKwl0YWJsZS0+dmVyc2lvbiA9IDA7CisJdGFi bGUtPnNpemUgPSB0YWJsZV9zaXplOworCS8qIEZpcnN0IHF1ZXVlIGhlYWRlciBpcyBsb2NhdGVk IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0YWJsZSBoZWFkZXIgKi8KKwl0YWJsZS0+cWhkcjBfb2Zm c2V0ID0gc2l6ZW9mKCp0YWJsZSkgPj4gMjsKKwl0YWJsZS0+cWhkcl9zaXplID0gc2l6ZW9mKHN0 cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIpID4+IDI7CisJdGFibGUtPm51bV9xdWV1ZXMgPSBB UlJBWV9TSVpFKGdtdS0+cXVldWVzKTsKKwl0YWJsZS0+YWN0aXZlX3F1ZXVlcyA9IEFSUkFZX1NJ WkUoZ211LT5xdWV1ZXMpOworCisJLyogQ29tbWFuZCBxdWV1ZSAqLworCW9mZnNldCA9IFNaXzRL OworCWE2eHhfaGZpX3F1ZXVlX2luaXQoJmdtdS0+cXVldWVzWzBdLCAmaGVhZGVyc1swXSwgaGZp LT52aXJ0ICsgb2Zmc2V0LAorCQloZmktPmlvdmEgKyBvZmZzZXQsIDApOworCisJLyogR01VIHJl c3BvbnNlIHF1ZXVlICovCisJb2Zmc2V0ICs9IFNaXzRLOworCWE2eHhfaGZpX3F1ZXVlX2luaXQo JmdtdS0+cXVldWVzWzFdLCAmaGVhZGVyc1sxXSwgaGZpLT52aXJ0ICsgb2Zmc2V0LAorCQloZmkt PmlvdmEgKyBvZmZzZXQsIDQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTZ4eF9oZmkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42MGQxMzE5ZmE0NGYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5oCkBA IC0wLDAgKzEsMTI3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor LyogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLiAqLworCisjaWZuZGVmIF9BNlhYX0hGSV9IXworI2RlZmluZSBfQTZYWF9IRklfSF8K Kworc3RydWN0IGE2eHhfaGZpX3F1ZXVlX3RhYmxlX2hlYWRlciB7CisJdTMyIHZlcnNpb247CisJ dTMyIHNpemU7CQkvKiBTaXplIG9mIHRoZSBxdWV1ZSB0YWJsZSBpbiBkd29yZHMgKi8KKwl1MzIg cWhkcjBfb2Zmc2V0OwkvKiBPZmZzZXQgb2YgdGhlIGZpcnN0IHF1ZXVlIGhlYWRlciAqLworCXUz MiBxaGRyX3NpemU7CQkvKiBTaXplIG9mIHRoZSBxdWV1ZSBoZWFkZXJzICovCisJdTMyIG51bV9x dWV1ZXM7CQkvKiBOdW1iZXIgb2YgdG90YWwgcXVldWVzICovCisJdTMyIGFjdGl2ZV9xdWV1ZXM7 CS8qIE51bWJlciBvZiBhY3RpdmUgcXVldWVzICovCit9OworCitzdHJ1Y3QgYTZ4eF9oZmlfcXVl dWVfaGVhZGVyIHsKKwl1MzIgc3RhdHVzOworCXUzMiBpb3ZhOworCXUzMiB0eXBlOworCXUzMiBz aXplOworCXUzMiBtc2dfc2l6ZTsKKwl1MzIgZHJvcHBlZDsKKwl1MzIgcnhfd2F0ZXJtYXJrOwor CXUzMiB0eF93YXRlcm1hcms7CisJdTMyIHJ4X3JlcXVlc3Q7CisJdTMyIHR4X3JlcXVlc3Q7CisJ dTMyIHJlYWRfaW5kZXg7CisJdTMyIHdyaXRlX2luZGV4OworfTsKKworc3RydWN0IGE2eHhfaGZp X3F1ZXVlIHsKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpoZWFkZXI7CisJc3Bpbmxv Y2tfdCBsb2NrOworCXUzMiAqZGF0YTsKKwlhdG9taWNfdCBzZXFudW07Cit9OworCisvKiBUaGlz IGlzIHRoZSBvdXRnb2luZyBxdWV1ZSB0byB0aGUgR01VICovCisjZGVmaW5lIEhGSV9DT01NQU5E X1FVRVVFIDAKKworLyogVEhpcyBpcyB0aGUgaW5jb21pbmcgcmVzcG9uc2UgcXVldWUgZnJvbSB0 aGUgR01VICovCisjZGVmaW5lIEhGSV9SRVNQT05TRV9RVUVVRSAxCisKKyNkZWZpbmUgSEZJX0hF QURFUl9JRChtc2cpICgobXNnKSAmIDB4ZmYpCisjZGVmaW5lIEhGSV9IRUFERVJfU0laRShtc2cp ICgoKG1zZykgPj4gOCkgJiAweGZmKQorI2RlZmluZSBIRklfSEVBREVSX1NFUU5VTShtc2cpICgo KG1zZykgPj4gMjApICYgMHhmZmYpCisKKy8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRoaXMgb3IgY2Fu IHdlIHVzZSBBUlJBWV9TSVpFPyAqLworI2RlZmluZSBIRklfUkVTUE9OU0VfUEFZTE9BRF9TSVpF IDE2CisKKy8qIEhGSSBtZXNzYWdlIHR5cGVzICovCisKKyNkZWZpbmUgSEZJX01TR19DTUQgMAor I2RlZmluZSBIRklfTVNHX0FDSyAyCisKKyNkZWZpbmUgSEZJX0YySF9NU0dfQUNLIDEyNgorCitz dHJ1Y3QgYTZ4eF9oZmlfbXNnX3Jlc3BvbnNlIHsKKwl1MzIgaGVhZGVyOworCXUzMiByZXRfaGVh ZGVyOworCXUzMiBlcnJvcjsKKwl1MzIgcGF5bG9hZFtIRklfUkVTUE9OU0VfUEFZTE9BRF9TSVpF XTsKK307CisKKyNkZWZpbmUgSEZJX0YySF9NU0dfRVJST1IgMTAwCisKK3N0cnVjdCBhNnh4X2hm aV9tc2dfZXJyb3IgeworCXUzMiBoZWFkZXI7CisJdTMyIGNvZGU7CisJdTMyIHBheWxvYWRbMl07 Cit9OworCisjZGVmaW5lIEhGSV9IMkZfTVNHX0lOSVQgMAorCitzdHJ1Y3QgYTZ4eF9oZmlfbXNn X2dtdV9pbml0X2NtZCB7CisJdTMyIGhlYWRlcjsKKwl1MzIgc2VnX2lkOworCXUzMiBkYmdfYnVm ZmVyX2FkZHI7CisJdTMyIGRiZ19idWZmZXJfc2l6ZTsKKwl1MzIgYm9vdF9zdGF0ZTsKK307CisK KyNkZWZpbmUgSEZJX0gyRl9NU0dfRldfVkVSU0lPTiAxCisKK3N0cnVjdCBhNnh4X2hmaV9tc2df ZndfdmVyc2lvbiB7CisJdTMyIGhlYWRlcjsKKwl1MzIgc3VwcG9ydGVkX3ZlcnNpb247Cit9Owor CisjZGVmaW5lIEhGSV9IMkZfTVNHX1BFUkZfVEFCTEUgNAorCitzdHJ1Y3QgcGVyZl9sZXZlbCB7 CisJdTMyIHZvdGU7CisJdTMyIGZyZXE7Cit9OworCitzdHJ1Y3QgYTZ4eF9oZmlfbXNnX3BlcmZf dGFibGUgeworCXUzMiBoZWFkZXI7CisJdTMyIG51bV9ncHVfbGV2ZWxzOworCXUzMiBudW1fZ211 X2xldmVsczsKKworCXN0cnVjdCBwZXJmX2xldmVsIGd4X3ZvdGVzWzE2XTsKKwlzdHJ1Y3QgcGVy Zl9sZXZlbCBjeF92b3Rlc1s0XTsKK307CisKKyNkZWZpbmUgSEZJX0gyRl9NU0dfQldfVEFCTEUg MworCitzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2J3X3RhYmxlIHsKKwl1MzIgaGVhZGVyOworCXUzMiBi d19sZXZlbF9udW07CisJdTMyIGNub2NfY21kc19udW07CisJdTMyIGRkcl9jbWRzX251bTsKKwl1 MzIgY25vY193YWl0X2JpdG1hc2s7CisJdTMyIGRkcl93YWl0X2JpdG1hc2s7CisJdTMyIGNub2Nf Y21kc19hZGRyc1s2XTsKKwl1MzIgY25vY19jbWRzX2RhdGFbMl1bNl07CisJdTMyIGRkcl9jbWRz X2FkZHJzWzhdOworCXUzMiBkZHJfY21kc19kYXRhWzE2XVs4XTsKK307CisKKyNkZWZpbmUgSEZJ X0gyRl9NU0dfVEVTVCA1CisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfdGVzdCB7CisJdTMyIGhlYWRl cjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YWRyZW5vX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2Rldmlj ZS5jCmluZGV4IDBjMGVhYWQ2ODA2NS4uZGNkMmE0N2Y4OTI1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jCkBAIC0xMTEsNiArMTExLDE2IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgYWRyZW5vX2luZm8gZ3B1bGlzdFtdID0gewogCQkJQURSRU5PX1FVSVJLX0ZB VUxUX0RFVEVDVF9NQVNLLAogCQkuaW5pdCA9IGE1eHhfZ3B1X2luaXQsCiAJCS56YXBmdyA9ICJh NTMwX3phcC5tZHQiLAorCX0sIHsKKwkJLnJldiA9IEFEUkVOT19SRVYoNiwgMywgMCwgQU5ZX0lE KSwKKwkJLnJldm4gPSA2MzAsCisJCS5uYW1lID0gIkE2MzAiLAorCQkuZncgPSB7CisJCQlbQURS RU5PX0ZXX1NRRV0gPSAiYTYzMF9zcWUuZnciLAorCQkJW0FEUkVOT19GV19HTVVdID0gImE2MzBf Z211LmJpbiIsCisJCX0sCisJCS5nbWVtID0gU1pfMU0sCisJCS5pbml0ID0gYTZ4eF9ncHVfaW5p dCwKIAl9LAogfTsKIApAQCAtMTI3LDYgKzEzNyw4IEBAIE1PRFVMRV9GSVJNV0FSRSgicWNvbS9h NTMwX3phcC5tZHQiKTsKIE1PRFVMRV9GSVJNV0FSRSgicWNvbS9hNTMwX3phcC5iMDAiKTsKIE1P RFVMRV9GSVJNV0FSRSgicWNvbS9hNTMwX3phcC5iMDEiKTsKIE1PRFVMRV9GSVJNV0FSRSgicWNv bS9hNTMwX3phcC5iMDIiKTsKK01PRFVMRV9GSVJNV0FSRSgicWNvbS9hNjMwX3NxZS5mdyIpOwor TU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E2MzBfZ211LmJpbiIpOwogCiBzdGF0aWMgaW5saW5lIGJv b2wgX3Jldl9tYXRjaCh1aW50OF90IGVudHJ5LCB1aW50OF90IGlkKQogewpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCmluZGV4IGJjYmY5ZjJhMjlmOS4uYWU2OTNjMjhkNjZj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCkBAIC0xMzgsNyArMTM4 LDcgQEAgYWRyZW5vX3JlcXVlc3RfZncoc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUsIGNv bnN0IGNoYXIgKmZ3bmFtZSkKIAlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIH0KIAotc3RhdGlj IGludCBhZHJlbm9fbG9hZF9mdyhzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSkKK2ludCBh ZHJlbm9fbG9hZF9mdyhzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSkKIHsKIAlpbnQgaTsK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oCmluZGV4IGJjOWVjMjdlOWVk OC4uM2UwYzAzZDJlOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h ZHJlbm9fZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5o CkBAIC01MCw3ICs1MCw5IEBAIGVudW0gYWRyZW5vX3JlZ3MgewogCiBlbnVtIHsKIAlBRFJFTk9f RldfUE00ID0gMCwKKwlBRFJFTk9fRldfU1FFID0gMCwgLyogYTZ4eCAqLwogCUFEUkVOT19GV19Q RlAgPSAxLAorCUFEUkVOT19GV19HTVUgPSAxLCAvKiBhNnh4ICovCiAJQURSRU5PX0ZXX0dQTVUg PSAyLAogCUFEUkVOT19GV19NQVgsCiB9OwpAQCAtMjI3LDYgKzIyOSw3IEBAIGludCBhZHJlbm9f Z3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwKIAkJc3RydWN0IGFkcmVub19ncHUgKmdwdSwgY29uc3Qgc3RydWN0IGFkcmVub19ncHVf ZnVuY3MgKmZ1bmNzLAogCQlpbnQgbnJfcmluZ3MpOwogdm9pZCBhZHJlbm9fZ3B1X2NsZWFudXAo c3RydWN0IGFkcmVub19ncHUgKmdwdSk7CitpbnQgYWRyZW5vX2xvYWRfZncoc3RydWN0IGFkcmVu b19ncHUgKmFkcmVub19ncHUpOwogCiAKIC8qIHJpbmdidWZmZXIgaGVscGVycyAodGhlIHBhcnRz IHRoYXQgYXJlIGFkcmVubyBzcGVjaWZpYykgKi8KQEAgLTMyOSw2ICszMzIsNyBAQCBzdGF0aWMg aW5saW5lIHZvaWQgYWRyZW5vX2dwdV93cml0ZShzdHJ1Y3QgYWRyZW5vX2dwdSAqZ3B1LAogc3Ry dWN0IG1zbV9ncHUgKmEzeHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBzdHJ1 Y3QgbXNtX2dwdSAqYTR4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHN0cnVj dCBtc21fZ3B1ICphNXh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RydWN0 IG1zbV9ncHUgKmE2eHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIHN0YXRp YyBpbmxpbmUgdm9pZCBhZHJlbm9fZ3B1X3dyaXRlNjQoc3RydWN0IGFkcmVub19ncHUgKmdwdSwK IAkJZW51bSBhZHJlbm9fcmVncyBsbywgZW51bSBhZHJlbm9fcmVncyBoaSwgdTY0IGRhdGEpCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2dwdS5jCmluZGV4IGQ0ZDVhNjhlNDY4ZC4uYjY2ZDQ1YzQxNDQzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9ncHUuYwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgc3RydWN0IGRldmZyZXFfZGV2 X3Byb2ZpbGUgbXNtX2RldmZyZXFfcHJvZmlsZSA9IHsKIHN0YXRpYyB2b2lkIG1zbV9kZXZmcmVx X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKIHsKIAkvKiBXZSBuZWVkIHRhcmdldCBzdXBwb3J0 IHRvIGRvIGRldmZyZXEgKi8KLQlpZiAoIWdwdS0+ZnVuY3MtPmdwdV9idXN5KQorCWlmICghZ3B1 LT5mdW5jcy0+Z3B1X2J1c3kgfHwgIWdwdS0+Y29yZV9jbGspCiAJCXJldHVybjsKIAogCW1zbV9k ZXZmcmVxX3Byb2ZpbGUuaW5pdGlhbF9mcmVxID0gZ3B1LT5mYXN0X3JhdGU7Ci0tIAoyLjE3LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVu byBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=