From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 17/17] drm/i915/gt: Extract GT runtime power management from intel_pm.c Date: Tue, 30 Jul 2019 14:30:35 +0100 Message-ID: <20190730133035.1977-18-chris@chris-wilson.co.uk> References: <20190730133035.1977-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1C996E50C for ; Tue, 30 Jul 2019 13:30:55 +0000 (UTC) In-Reply-To: <20190730133035.1977-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlIEdUIHBvd2Vyd2VsbHMgYW5kIHBvd2VybWFuYWdlbWVudCBpcyBHVCBjZW50cmljIGFuZCBz aG91bGQgYmUKbWFuYWdlZCBmcm9tIHdpdGhpbiB0aGUgaW50ZWxfZ3QuIENhcnZlIG91dCB0aGUg cnBzIHdvcmtlciwgcnBzIHNldHVwLApyYzYgc2V0dXAsIGxsYyBzZXR1cCBmcm9tIG91dCBvZiBp bnRlbF9wbS5jIChhbmQgc3Vycm91bmRzKSBhbmQgY3JlYXRlIGEKbmV3IGhvbWUgZm9yIHRoZW0g aW4gZ3QvCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBE YW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDcg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8ICAgIDgg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jICAgICAgICB8ICAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfYnJlYWRjcnVtYnMuYyAgIHwgICAgOCAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMgICAgIHwgICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jICAgICAgICAgICAgfCAgIDUyICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5oICAgICAgICAgICAgfCAgICA5ICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYyAgICAgICAgfCAgNDU2ICsr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmggICAgICAgIHwgICA0NCAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jICAgICAgICAgfCAgIDYwICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oICAgICAgICAgfCAgICAyICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtX2lycS5jICAgICB8ICAxMDkgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmggICAgIHwgICAyMiArCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oICAgICAgfCAgIDExICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAgfCAgMTIwICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5oICAgICAgICAgICB8ICAgMTUgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjX3R5cGVzLmggICAgIHwgICAxMyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuYyAgICAgICAgICAgfCAgNjY1ICsrKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5oICAgICAgICAgICB8ICAgMjQgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2X3R5cGVzLmggICAgIHwgICAyNiArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMgICAgfCAgIDE0ICstCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyAgICAgICAgICAgfCAxODcwICsrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5oICAgICAgICAgICB8ICAgMzcg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmggICAgIHwgICA5MyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYyAgICAgICAgfCAgIDg3ICsK IC4uLi9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyB8ICAgIDQgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAxMDkgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgMjIgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAxMTEgLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICAzOCArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAgICAgICAgICAgIHwgMTExMSArLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmggICAgICAgICAgICAgICB8ICAgNjQg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgICAgICAgICAgICAgICB8ICAgMjIg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICAgIDcg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYyAgICAgICAgICAgICB8ICAgNzgg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICAgICAgICB8IDMwMTQg KystLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmggICAgICAg ICAgICAgICB8ICAgMjUgLQogLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2 aWNlLmMgIHwgICAgMiArLQogMzggZmlsZXMgY2hhbmdlZCwgNDExNyBpbnNlcnRpb25zKCspLCA0 MjQ0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0X2lycS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfaXJxLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9ndF9wbV9pcnEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtX2lycS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2xsY190eXBlcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNl90eXBlcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQppbmRleCBmZjY4NjkxMGJiMDIuLmIwNmM1OTk1ZDljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK QEAgLTc2LDEzICs3NiwxOCBAQCBndC15ICs9IFwKIAlndC9pbnRlbF9lbmdpbmVfcG0ubyBcCiAJ Z3QvaW50ZWxfZW5naW5lX3VzZXIubyBcCiAJZ3QvaW50ZWxfZ3QubyBcCisJZ3QvaW50ZWxfZ3Rf aXJxLm8gXAogCWd0L2ludGVsX2d0X3BtLm8gXAorCWd0L2ludGVsX2d0X3BtX2lycS5vIFwKIAln dC9pbnRlbF9oYW5nY2hlY2subyBcCisJZ3QvaW50ZWxfbGxjLm8gXAogCWd0L2ludGVsX2xyYy5v IFwKKwlndC9pbnRlbF9tb2NzLm8gXAorCWd0L2ludGVsX3JjNi5vIFwKIAlndC9pbnRlbF9yZW5k ZXJzdGF0ZS5vIFwKIAlndC9pbnRlbF9yZXNldC5vIFwKIAlndC9pbnRlbF9yaW5nYnVmZmVyLm8g XAotCWd0L2ludGVsX21vY3MubyBcCisJZ3QvaW50ZWxfcnBzLm8gXAogCWd0L2ludGVsX3NzZXUu byBcCiAJZ3QvaW50ZWxfdGltZWxpbmUubyBcCiAJZ3QvaW50ZWxfd29ya2Fyb3VuZHMubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ZTRlZTI5 ZmQwZmMuLjlkNzlmNDcxNjEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKQEAgLTU2LDYgKzU2LDggQEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVs X3R2LmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF92ZHNjLmgiCiAKKyNpbmNsdWRlICJndC9p bnRlbF9ycHMuaCIKKwogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV90cmFj ZS5oIgogI2luY2x1ZGUgImludGVsX2FjcGkuaCIKQEAgLTE0MjUwLDcgKzE0MjUyLDcgQEAgc3Rh dGljIGludCBkb19ycHNfYm9vc3Qoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKl93YWl0LAogCSAq IHZibGFuayB3aXRob3V0IG91ciBpbnRlcnZlbnRpb24sIHNvIGxlYXZlIFJQUyBhbG9uZS4KIAkg Ki8KIAlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKLQkJZ2VuNl9ycHNfYm9vc3QocnEp OworCQlpbnRlbF9ycHNfYm9vc3QocnEpOwogCWk5MTVfcmVxdWVzdF9wdXQocnEpOwogCiAJZHJt X2NydGNfdmJsYW5rX3B1dCh3YWl0LT5jcnRjKTsKQEAgLTE0NDQ5LDcgKzE0NDUxLDcgQEAgaW50 ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkgKiBtYXhpbXVt IGNsb2NrcyBmb2xsb3dpbmcgYSB2YmxhbmsgbWlzcyAoc2VlIGRvX3Jwc19ib29zdCgpKS4KIAkg Ki8KIAlpZiAoIWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUpIHsKLQkJaW50ZWxfcnBzX21h cmtfaW50ZXJhY3RpdmUoZGV2X3ByaXYsIHRydWUpOworCQlpbnRlbF9ycHNfbWFya19pbnRlcmFj dGl2ZSgmZGV2X3ByaXYtPmd0LnJwcywgdHJ1ZSk7CiAJCWludGVsX3N0YXRlLT5ycHNfaW50ZXJh Y3RpdmUgPSB0cnVlOwogCX0KIApAQCAtMTQ0NzQsNyArMTQ0NzYsNyBAQCBpbnRlbF9jbGVhbnVw X3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmRldik7CiAKIAlpZiAoaW50ZWxfc3RhdGUt PnJwc19pbnRlcmFjdGl2ZSkgewotCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJp diwgZmFsc2UpOworCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZSgmZGV2X3ByaXYtPmd0LnJw cywgZmFsc2UpOwogCQlpbnRlbF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlID0gZmFsc2U7CiAJfQog CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jCmluZGV4IGI1NTYxY2JkYzVlYS4u ZTI3MTY0ZTNmYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYwpAQCAt MTM4LDYgKzEzOCw3IEBAIHN0YXRpYyBib29sIHN3aXRjaF90b19rZXJuZWxfY29udGV4dF9zeW5j KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAKIGJvb2wgaTkxNV9nZW1fbG9hZF9wb3dlcl9jb250ZXh0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogeworCWludGVsX2d0X3BtX2VuYWJsZSgm aTkxNS0+Z3QpOwogCXJldHVybiBzd2l0Y2hfdG9fa2VybmVsX2NvbnRleHRfc3luYygmaTkxNS0+ Z3QpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9icmVh ZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfYnJlYWRjcnVtYnMuYwpp bmRleCBjMDkyYmRmNWYwYmYuLmVlYTg2OGYxNjU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfYnJlYWRjcnVtYnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9icmVhZGNydW1icy5jCkBAIC0zNCw5ICszNCw5IEBAIHN0YXRpYyB2b2lkIGly cV9lbmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCQlyZXR1cm47CiAKIAkv KiBDYWxsZXIgZGlzYWJsZXMgaW50ZXJydXB0cyAqLwotCXNwaW5fbG9jaygmZW5naW5lLT5pOTE1 LT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrKCZlbmdpbmUtPmd0LT5pcnFfbG9jayk7CiAJZW5naW5l LT5pcnFfZW5hYmxlKGVuZ2luZSk7Ci0Jc3Bpbl91bmxvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xv Y2spOworCXNwaW5fdW5sb2NrKCZlbmdpbmUtPmd0LT5pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyB2 b2lkIGlycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKQEAgLTQ1LDkg KzQ1LDkgQEAgc3RhdGljIHZvaWQgaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogCQlyZXR1cm47CiAKIAkvKiBDYWxsZXIgZGlzYWJsZXMgaW50ZXJydXB0cyAqLwot CXNwaW5fbG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrKCZlbmdpbmUt Pmd0LT5pcnFfbG9jayk7CiAJZW5naW5lLT5pcnFfZGlzYWJsZShlbmdpbmUpOwotCXNwaW5fdW5s b2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKKwlzcGluX3VubG9jaygmZW5naW5lLT5ndC0+ aXJxX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FybV9p cnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9lbmdpbmVfcG0uYwppbmRleCBjZTU0MDkyNDc1ZGEuLjgxNGQ0NGQ2MTFmNyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMKQEAgLTEwLDYgKzEwLDcgQEAK ICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKICNpbmNsdWRlICJpbnRlbF9ndC5oIgogI2lu Y2x1ZGUgImludGVsX2d0X3BtLmgiCisjaW5jbHVkZSAiaW50ZWxfcmM2LmgiCiAKIHN0YXRpYyBp bnQgX19lbmdpbmVfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikKIHsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9ndC5jCmluZGV4IGRlMGQ2YWQ1ZjkzYy4uM2FiODVmZjgzYzg1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKQEAgLTcsNiArNyw4IEBACiAKICNpbmNsdWRlICJp bnRlbF9ndC5oIgogI2luY2x1ZGUgImludGVsX2d0X3BtLmgiCisjaW5jbHVkZSAiaW50ZWxfcmM2 LmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAK IHZvaWQgaW50ZWxfZ3RfaW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSkKQEAgLTE0LDkgKzE2LDExIEBAIHZvaWQgaW50ZWxfZ3RfaW5p dF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKIAlndC0+aTkxNSA9IGk5MTU7CiAJZ3QtPnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CiAKKwlz cGluX2xvY2tfaW5pdCgmZ3QtPmlycV9sb2NrKTsKKwogCUlOSVRfTElTVF9IRUFEKCZndC0+YWN0 aXZlX3JpbmdzKTsKLQlJTklUX0xJU1RfSEVBRCgmZ3QtPmNsb3NlZF92bWEpOwogCisJSU5JVF9M SVNUX0hFQUQoJmd0LT5jbG9zZWRfdm1hKTsKIAlzcGluX2xvY2tfaW5pdCgmZ3QtPmNsb3NlZF9s b2NrKTsKIAogCWludGVsX2d0X2luaXRfaGFuZ2NoZWNrKGd0KTsKQEAgLTI3LDYgKzMxLDkgQEAg dm9pZCBpbnRlbF9ndF9pbml0X2Vhcmx5KHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogdm9pZCBpbnRlbF9ndF9pbml0X2h3KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQogewogCWk5MTUtPmd0LmdndHQgPSAmaTkxNS0+Z2d0dDsKKworCS8q IEJJT1Mgb2Z0ZW4gbGVhdmVzIFJDNiBlbmFibGVkLCBidXQgZGlzYWJsZSBpdCBmb3IgaHcgaW5p dCAqLworCWludGVsX2d0X3BtX2Rpc2FibGUoJmk5MTUtPmd0KTsKIH0KIAogc3RhdGljIHZvaWQg cm13X3NldChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsIGk5MTVfcmVnX3QgcmVnLCB1MzIg c2V0KQpAQCAtMjA2LDcgKzIxMywxMiBAQCB2b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1c2goc3Ry dWN0IGludGVsX2d0ICpndCkKIAkJaW50ZWxfZ3R0X2NoaXBzZXRfZmx1c2goKTsKIH0KIAotaW50 IGludGVsX2d0X2luaXRfc2NyYXRjaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1bnNpZ25lZCBpbnQg c2l6ZSkKK3ZvaWQgaW50ZWxfZ3RfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp Cit7CisJaW50ZWxfcnBzX2RyaXZlcl9yZWdpc3RlcigmZ3QtPnJwcyk7Cit9CisKK3N0YXRpYyBp bnQgaW50ZWxfZ3RfaW5pdF9zY3JhdGNoKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHVuc2lnbmVkIGlu dCBzaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7CiAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKQEAgLTI0MCwxMiArMjUyLDQ2IEBAIGlu dCBpbnRlbF9ndF9pbml0X3NjcmF0Y2goc3RydWN0IGludGVsX2d0ICpndCwgdW5zaWduZWQgaW50 IHNpemUpCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBpbnRlbF9ndF9maW5pX3NjcmF0Y2goc3Ry dWN0IGludGVsX2d0ICpndCkKK3N0YXRpYyB2b2lkIGludGVsX2d0X2Zpbmlfc2NyYXRjaChzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KQogewogCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZndC0+c2Ny YXRjaCwgMCk7CiB9CiAKK2ludCBpbnRlbF9ndF9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCit7 CisJaW50IGVycjsKKworCWVyciA9IGludGVsX2d0X2luaXRfc2NyYXRjaChndCwgSVNfR0VOKGd0 LT5pOTE1LCAyKSA/IFNaXzI1NksgOiBTWl80Syk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsK KworCWludGVsX3JjNl9pbml0KCZndC0+cmM2KTsKKwlpbnRlbF9ycHNfaW5pdCgmZ3QtPnJwcyk7 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCit7CisJR0VNX0JVR19PTihndC0+YXdha2UpOworCWludGVsX2d0X3BtX2Rp c2FibGUoZ3QpOworfQorCit2b2lkIGludGVsX2d0X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCit7CisJaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVyKCZndC0+cnBzKTsK K30KKwogdm9pZCBpbnRlbF9ndF9jbGVhbnVwX2Vhcmx5KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7 CiAJaW50ZWxfZ3RfZmluaV9yZXNldChndCk7CiB9CisKK3ZvaWQgaW50ZWxfZ3RfZHJpdmVyX3Jl bGVhc2Uoc3RydWN0IGludGVsX2d0ICpndCkKK3sKKwkvKiBQYXJhbm9pYTogbWFrZSBzdXJlIHdl IGhhdmUgZGlzYWJsZWQgZXZlcnl0aGluZyBiZWZvcmUgd2UgZXhpdC4gKi8KKwlpbnRlbF9ndF9w bV9kaXNhYmxlKGd0KTsKKworCWludGVsX3JjNl9maW5pKCZndC0+cmM2KTsKKwlpbnRlbF9ndF9m aW5pX3NjcmF0Y2goZ3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmgKaW5kZXggNjQw YmIwNTMxZjViLi40MGQzM2RmN2ExNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuaApA QCAtMjksNiArMjksMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZ3QgKmh1Y190b19n dChzdHJ1Y3QgaW50ZWxfaHVjICpodWMpCiAKIHZvaWQgaW50ZWxfZ3RfaW5pdF9lYXJseShzdHJ1 Y3QgaW50ZWxfZ3QgKmd0LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CiB2b2lkIGlu dGVsX2d0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworaW50IGludGVs X2d0X2luaXQoc3RydWN0IGludGVsX2d0ICpndCk7Cit2b2lkIGludGVsX2d0X2RyaXZlcl9yZWdp c3RlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKKwordm9pZCBpbnRlbF9ndF9kcml2ZXJfdW5yZWdp c3RlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgaW50ZWxfZ3RfZHJpdmVyX3JlbW92ZShz dHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgaW50ZWxfZ3RfZHJpdmVyX3JlbGVhc2Uoc3RydWN0 IGludGVsX2d0ICpndCk7CiAKIHZvaWQgaW50ZWxfZ3RfY2xlYW51cF9lYXJseShzdHJ1Y3QgaW50 ZWxfZ3QgKmd0KTsKIApAQCAtNDEsOSArNDcsNiBAQCB2b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1 c2goc3RydWN0IGludGVsX2d0ICpndCk7CiAKIHZvaWQgaW50ZWxfZ3RfaW5pdF9oYW5nY2hlY2so c3RydWN0IGludGVsX2d0ICpndCk7CiAKLWludCBpbnRlbF9ndF9pbml0X3NjcmF0Y2goc3RydWN0 IGludGVsX2d0ICpndCwgdW5zaWduZWQgaW50IHNpemUpOwotdm9pZCBpbnRlbF9ndF9maW5pX3Nj cmF0Y2goc3RydWN0IGludGVsX2d0ICpndCk7Ci0KIHN0YXRpYyBpbmxpbmUgdTMyIGludGVsX2d0 X3NjcmF0Y2hfb2Zmc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9ndCAqZ3QsCiAJCQkJCSAgZW51bSBp bnRlbF9ndF9zY3JhdGNoX2ZpZWxkIGZpZWxkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM4N2Ex Nzc3YmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X2lycS5jCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L3NjaGVkL2Nsb2NrLmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5o IgorI2luY2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCisjaW5j bHVkZSAiaW50ZWxfdW5jb3JlLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCisKK3N0YXRpYyB2 b2lkIGd1Y19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUxNiBpaXIpCit7CisJ aWYgKGlpciAmIEdVQ19JTlRSX0dVQzJIT1NUKQorCQlpbnRlbF9ndWNfdG9faG9zdF9ldmVudF9o YW5kbGVyKGd1Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitjc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBpaXIpCit7CisJYm9vbCB0YXNrbGV0ID0gZmFsc2U7 CisKKwlpZiAoaWlyICYgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUKQorCQl0YXNrbGV0ID0g dHJ1ZTsKKworCWlmIChpaXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpIHsKKwkJaW50ZWxf ZW5naW5lX2JyZWFkY3J1bWJzX2lycShlbmdpbmUpOworCQl0YXNrbGV0IHw9IGludGVsX2VuZ2lu ZV9uZWVkc19icmVhZGNydW1iX3Rhc2tsZXQoZW5naW5lKTsKKwl9CisKKwlpZiAodGFza2xldCkK KwkJdGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Cit9CisK K3N0YXRpYyB1MzIKK2dlbjExX2d0X2VuZ2luZV9pZGVudGl0eShzdHJ1Y3QgaW50ZWxfZ3QgKmd0 LAorCQkJIGNvbnN0IHVuc2lnbmVkIGludCBiYW5rLCBjb25zdCB1bnNpZ25lZCBpbnQgYml0KQor eworCXZvaWQgX19pb21lbSAqIGNvbnN0IHJlZ3MgPSBndC0+dW5jb3JlLT5yZWdzOworCXUzMiB0 aW1lb3V0X3RzOworCXUzMiBpZGVudDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFf bG9jayk7CisKKwlyYXdfcmVnX3dyaXRlKHJlZ3MsIEdFTjExX0lJUl9SRUdfU0VMRUNUT1IoYmFu ayksIEJJVChiaXQpKTsKKworCS8qCisJICogTkI6IFNwZWNzIGRvIG5vdCBzcGVjaWZ5IGhvdyBs b25nIHRvIHNwaW4gd2FpdCwKKwkgKiBzbyB3ZSBkbyB+MTAwdXMgYXMgYW4gZWR1Y2F0ZWQgZ3Vl c3MuCisJICovCisJdGltZW91dF90cyA9IChsb2NhbF9jbG9jaygpID4+IDEwKSArIDEwMDsKKwlk byB7CisJCWlkZW50ID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjExX0lOVFJfSURFTlRJVFlfUkVH KGJhbmspKTsKKwl9IHdoaWxlICghKGlkZW50ICYgR0VOMTFfSU5UUl9EQVRBX1ZBTElEKSAmJgor CQkgIXRpbWVfYWZ0ZXIzMihsb2NhbF9jbG9jaygpID4+IDEwLCB0aW1lb3V0X3RzKSk7CisKKwlp ZiAodW5saWtlbHkoIShpZGVudCAmIEdFTjExX0lOVFJfREFUQV9WQUxJRCkpKSB7CisJCURSTV9F UlJPUigiSU5UUl9JREVOVElUWV9SRUcldToldSAweCUwOHggbm90IHZhbGlkIVxuIiwKKwkJCSAg YmFuaywgYml0LCBpZGVudCk7CisJCXJldHVybiAwOworCX0KKworCXJhd19yZWdfd3JpdGUocmVn cywgR0VOMTFfSU5UUl9JREVOVElUWV9SRUcoYmFuayksCisJCSAgICAgIEdFTjExX0lOVFJfREFU QV9WQUxJRCk7CisKKwlyZXR1cm4gaWRlbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitnZW4xMV9vdGhl cl9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBjb25zdCB1OCBpbnN0YW5jZSwKKwkJ CWNvbnN0IHUxNiBpaXIpCit7CisJaWYgKGluc3RhbmNlID09IE9USEVSX0dVQ19JTlNUQU5DRSkK KwkJcmV0dXJuIGd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgaWlyKTsKKworCWlmIChpbnN0 YW5jZSA9PSBPVEhFUl9HVFBNX0lOU1RBTkNFKQorCQlyZXR1cm4gZ2VuMTFfcnBzX2lycV9oYW5k bGVyKCZndC0+cnBzLCBpaXIpOworCisJV0FSTl9PTkNFKDEsICJ1bmhhbmRsZWQgb3RoZXIgaW50 ZXJydXB0IGluc3RhbmNlPTB4JXgsIGlpcj0weCV4XG4iLAorCQkgIGluc3RhbmNlLCBpaXIpOwor fQorCitzdGF0aWMgdm9pZAorZ2VuMTFfZW5naW5lX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9n dCAqZ3QsIGNvbnN0IHU4IGNsYXNzLAorCQkJIGNvbnN0IHU4IGluc3RhbmNlLCBjb25zdCB1MTYg aWlyKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKworCWlmIChpbnN0YW5j ZSA8PSBNQVhfRU5HSU5FX0lOU1RBTkNFKQorCQllbmdpbmUgPSBndC0+ZW5naW5lX2NsYXNzW2Ns YXNzXVtpbnN0YW5jZV07CisJZWxzZQorCQllbmdpbmUgPSBOVUxMOworCisJaWYgKGxpa2VseShl bmdpbmUpKQorCQlyZXR1cm4gY3NfaXJxX2hhbmRsZXIoZW5naW5lLCBpaXIpOworCisJV0FSTl9P TkNFKDEsICJ1bmhhbmRsZWQgZW5naW5lIGludGVycnVwdCBjbGFzcz0weCV4LCBpbnN0YW5jZT0w eCV4XG4iLAorCQkgIGNsYXNzLCBpbnN0YW5jZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW4xMV9n dF9pZGVudGl0eV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGNvbnN0IHUzMiBpZGVudGl0 eSkKK3sKKwljb25zdCB1OCBjbGFzcyA9IEdFTjExX0lOVFJfRU5HSU5FX0NMQVNTKGlkZW50aXR5 KTsKKwljb25zdCB1OCBpbnN0YW5jZSA9IEdFTjExX0lOVFJfRU5HSU5FX0lOU1RBTkNFKGlkZW50 aXR5KTsKKwljb25zdCB1MTYgaW50ciA9IEdFTjExX0lOVFJfRU5HSU5FX0lOVFIoaWRlbnRpdHkp OworCisJaWYgKHVubGlrZWx5KCFpbnRyKSkKKwkJcmV0dXJuOworCisJaWYgKGNsYXNzIDw9IENP UFlfRU5HSU5FX0NMQVNTKQorCQlyZXR1cm4gZ2VuMTFfZW5naW5lX2lycV9oYW5kbGVyKGd0LCBj bGFzcywgaW5zdGFuY2UsIGludHIpOworCisJaWYgKGNsYXNzID09IE9USEVSX0NMQVNTKQorCQly ZXR1cm4gZ2VuMTFfb3RoZXJfaXJxX2hhbmRsZXIoZ3QsIGluc3RhbmNlLCBpbnRyKTsKKworCVdB Uk5fT05DRSgxLCAidW5rbm93biBpbnRlcnJ1cHQgY2xhc3M9MHgleCwgaW5zdGFuY2U9MHgleCwg aW50cj0weCV4XG4iLAorCQkgIGNsYXNzLCBpbnN0YW5jZSwgaW50cik7Cit9CisKK3N0YXRpYyB2 b2lkCitnZW4xMV9ndF9iYW5rX2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpndCwgY29uc3QgdW5z aWduZWQgaW50IGJhbmspCit7CisJdm9pZCBfX2lvbWVtICogY29uc3QgcmVncyA9IGd0LT51bmNv cmUtPnJlZ3M7CisJdW5zaWduZWQgbG9uZyBpbnRyX2R3OworCXVuc2lnbmVkIGludCBiaXQ7CisK Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aXJxX2xvY2spOworCisJaW50cl9kdyA9IHJhd19y ZWdfcmVhZChyZWdzLCBHRU4xMV9HVF9JTlRSX0RXKGJhbmspKTsKKworCWZvcl9lYWNoX3NldF9i aXQoYml0LCAmaW50cl9kdywgMzIpIHsKKwkJY29uc3QgdTMyIGlkZW50ID0gZ2VuMTFfZ3RfZW5n aW5lX2lkZW50aXR5KGd0LCBiYW5rLCBiaXQpOworCisJCWdlbjExX2d0X2lkZW50aXR5X2hhbmRs ZXIoZ3QsIGlkZW50KTsKKwl9CisKKwkvKiBDbGVhciBtdXN0IGJlIGFmdGVyIHNoYXJlZCBoYXMg YmVlbiBzZXJ2ZWQgZm9yIGVuZ2luZSAqLworCXJhd19yZWdfd3JpdGUocmVncywgR0VOMTFfR1Rf SU5UUl9EVyhiYW5rKSwgaW50cl9kdyk7Cit9CisKK3ZvaWQgZ2VuMTFfZ3RfaXJxX2hhbmRsZXIo c3RydWN0IGludGVsX2d0ICpndCwgY29uc3QgdTMyIG1hc3Rlcl9jdGwpCit7CisJdW5zaWduZWQg aW50IGJhbms7CisKKwlzcGluX2xvY2soJmd0LT5pcnFfbG9jayk7CisKKwlmb3IgKGJhbmsgPSAw OyBiYW5rIDwgMjsgYmFuaysrKSB7CisJCWlmIChtYXN0ZXJfY3RsICYgR0VOMTFfR1RfRFdfSVJR KGJhbmspKQorCQkJZ2VuMTFfZ3RfYmFua19oYW5kbGVyKGd0LCBiYW5rKTsKKwl9CisKKwlzcGlu X3VubG9jaygmZ3QtPmlycV9sb2NrKTsKK30KKworYm9vbCBnZW4xMV9ndF9yZXNldF9vbmVfaWly KHN0cnVjdCBpbnRlbF9ndCAqZ3QsCisJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IGJhbmssCisJ CQkgICAgY29uc3QgdW5zaWduZWQgaW50IGJpdCkKK3sKKwl2b2lkIF9faW9tZW0gKiBjb25zdCBy ZWdzID0gZ3QtPnVuY29yZS0+cmVnczsKKwl1MzIgZHc7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZndC0+aXJxX2xvY2spOworCisJZHcgPSByYXdfcmVnX3JlYWQocmVncywgR0VOMTFfR1RfSU5U Ul9EVyhiYW5rKSk7CisJaWYgKGR3ICYgQklUKGJpdCkpIHsKKwkJLyoKKwkJICogQWNjb3JkaW5n IHRvIHRoZSBCU3BlYywgRFdfSUlSIGJpdHMgY2Fubm90IGJlIGNsZWFyZWQgd2l0aG91dAorCQkg KiBmaXJzdCBzZXJ2aWNpbmcgdGhlIFNlbGVjdG9yICYgU2hhcmVkIElJUiByZWdpc3RlcnMuCisJ CSAqLworCQlnZW4xMV9ndF9lbmdpbmVfaWRlbnRpdHkoZ3QsIGJhbmssIGJpdCk7CisKKwkJLyoK KwkJICogV2UgbG9ja2VkIEdUIElOVCBEVyBieSByZWFkaW5nIGl0LiBJZiB3ZSB3YW50IHRvICh0 cnkKKwkJICogdG8pIHJlY292ZXIgZnJvbSB0aGlzIHN1Y2Nlc3NmdWxseSwgd2UgbmVlZCB0byBj bGVhcgorCQkgKiBvdXIgYml0LCBvdGhlcndpc2Ugd2UgYXJlIGxvY2tpbmcgdGhlIHJlZ2lzdGVy IGZvcgorCQkgKiBldmVyeWJvZHkuCisJCSAqLworCQlyYXdfcmVnX3dyaXRlKHJlZ3MsIEdFTjEx X0dUX0lOVFJfRFcoYmFuayksIEJJVChiaXQpKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZ2VuMTFfZ3RfaXJxX3Jlc2V0KHN0cnVjdCBpbnRlbF9n dCAqZ3QpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKKwor CS8qIERpc2FibGUgUkNTLCBCQ1MsIFZDUyBhbmQgVkVDUyBjbGFzcyBlbmdpbmVzLiAqLworCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX1JFTkRFUl9DT1BZX0lOVFJfRU5BQkxFLCAw KTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9WQ1NfVkVDU19JTlRSX0VOQUJM RSwJICAwKTsKKworCS8qIFJlc3RvcmUgbWFza3MgaXJxcyBvbiBSQ1MsIEJDUywgVkNTIGFuZCBW RUNTIGVuZ2luZXMuICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfUkNTMF9S U1ZEX0lOVFJfTUFTSywJfjApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0JD U19SU1ZEX0lOVFJfTUFTSywJfjApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjEx X1ZDUzBfVkNTMV9JTlRSX01BU0ssCX4wKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBH RU4xMV9WQ1MyX1ZDUzNfSU5UUl9NQVNLLAl+MCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgR0VOMTFfVkVDUzBfVkVDUzFfSU5UUl9NQVNLLAl+MCk7CisKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBHRU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfRU5BQkxFLCAwKTsKKwlpbnRlbF91 bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfTUFTSywgIH4wKTsK KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9HVUNfU0dfSU5UUl9FTkFCTEUsIDAp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0dVQ19TR19JTlRSX01BU0ssICB+ MCk7Cit9CisKK3ZvaWQgZ2VuMTFfZ3RfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBpbnRlbF9ndCAq Z3QpCit7CisJY29uc3QgdTMyIGlycXMgPSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgfCBHVF9D T05URVhUX1NXSVRDSF9JTlRFUlJVUFQ7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0g Z3QtPnVuY29yZTsKKwljb25zdCB1MzIgZG1hc2sgPSBpcnFzIDw8IDE2IHwgaXJxczsKKwljb25z dCB1MzIgc21hc2sgPSBpcnFzIDw8IDE2OworCisJQlVJTERfQlVHX09OKGlycXMgJiAweGZmZmYw MDAwKTsKKworCS8qIEVuYWJsZSBSQ1MsIEJDUywgVkNTIGFuZCBWRUNTIGNsYXNzIGludGVycnVw dHMuICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfUkVOREVSX0NPUFlfSU5U Ul9FTkFCTEUsIGRtYXNrKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9WQ1Nf VkVDU19JTlRSX0VOQUJMRSwgZG1hc2spOworCisJLyogVW5tYXNrIGlycXMgb24gUkNTLCBCQ1Ms IFZDUyBhbmQgVkVDUyBlbmdpbmVzLiAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdF TjExX1JDUzBfUlNWRF9JTlRSX01BU0ssIH5zbWFzayk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgR0VOMTFfQkNTX1JTVkRfSU5UUl9NQVNLLCB+c21hc2spOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIEdFTjExX1ZDUzBfVkNTMV9JTlRSX01BU0ssIH5kbWFzayk7CisJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfVkNTMl9WQ1MzX0lOVFJfTUFTSywgfmRtYXNrKTsK KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9WRUNTMF9WRUNTMV9JTlRSX01BU0ss IH5kbWFzayk7CisKKwkvKgorCSAqIFJQUyBpbnRlcnJ1cHRzIHdpbGwgZ2V0IGVuYWJsZWQvZGlz YWJsZWQgb24gZGVtYW5kIHdoZW4gUlBTIGl0c2VsZgorCSAqIGlzIGVuYWJsZWQvZGlzYWJsZWQu CisJICovCisJZ3QtPnBtX2llciA9IDB4MDsKKwlndC0+cG1faW1yID0gfmd0LT5wbV9pZXI7CisJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfR1BNX1dHQk9YUEVSRl9JTlRSX0VOQUJM RSwgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfR1BNX1dHQk9YUEVSRl9J TlRSX01BU0ssICB+MCk7CisKKwkvKiBTYW1lIHRoaW5nIGZvciBHdUMgaW50ZXJydXB0cyAqLwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0dVQ19TR19JTlRSX0VOQUJMRSwgMCk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfR1VDX1NHX0lOVFJfTUFTSywgIH4w KTsKK30KKwordm9pZCBnZW41X2d0X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUz MiBndF9paXIpCit7CisJaWYgKGd0X2lpciAmIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKKwkJ aW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShndC0+ZW5naW5lX2NsYXNzW1JFTkRFUl9DTEFT U11bMF0pOworCWlmIChndF9paXIgJiBJTEtfQlNEX1VTRVJfSU5URVJSVVBUKQorCQlpbnRlbF9l bmdpbmVfYnJlYWRjcnVtYnNfaXJxKGd0LT5lbmdpbmVfY2xhc3NbVklERU9fREVDT0RFX0NMQVNT XVswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjdfcGFyaXR5X2Vycm9yX2lycV9oYW5kbGVyKHN0 cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBpaXIpCit7CisJaWYgKCFIQVNfTDNfRFBGKGd0LT5pOTE1 KSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZndC0+aXJxX2xvY2spOworCWdlbjVfZ3RfZGlz YWJsZV9pcnEoZ3QsIEdUX1BBUklUWV9FUlJPUihndC0+aTkxNSkpOworCXNwaW5fdW5sb2NrKCZn dC0+aXJxX2xvY2spOworCisJaWYgKGlpciAmIEdUX1JFTkRFUl9MM19QQVJJVFlfRVJST1JfSU5U RVJSVVBUX1MxKQorCQlndC0+aTkxNS0+bDNfcGFyaXR5LndoaWNoX3NsaWNlIHw9IDEgPDwgMTsK KworCWlmIChpaXIgJiBHVF9SRU5ERVJfTDNfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVCkKKwkJZ3Qt Pmk5MTUtPmwzX3Bhcml0eS53aGljaF9zbGljZSB8PSAxIDw8IDA7CisKKwlzY2hlZHVsZV93b3Jr KCZndC0+aTkxNS0+bDNfcGFyaXR5LmVycm9yX3dvcmspOworfQorCit2b2lkIGdlbjZfZ3RfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIGd0X2lpcikKK3sKKwlpZiAoZ3RfaWly ICYgR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUKQorCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNf aXJxKGd0LT5lbmdpbmVfY2xhc3NbUkVOREVSX0NMQVNTXVswXSk7CisJaWYgKGd0X2lpciAmIEdU X0JTRF9VU0VSX0lOVEVSUlVQVCkKKwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShndC0+ ZW5naW5lX2NsYXNzW1ZJREVPX0RFQ09ERV9DTEFTU11bMF0pOworCWlmIChndF9paXIgJiBHVF9C TFRfVVNFUl9JTlRFUlJVUFQpCisJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZ3QtPmVu Z2luZV9jbGFzc1tDT1BZX0VOR0lORV9DTEFTU11bMF0pOworCisJaWYgKGd0X2lpciAmIChHVF9C TFRfQ1NfRVJST1JfSU5URVJSVVBUIHwKKwkJICAgICAgR1RfQlNEX0NTX0VSUk9SX0lOVEVSUlVQ VCB8CisJCSAgICAgIEdUX1JFTkRFUl9DU19NQVNURVJfRVJST1JfSU5URVJSVVBUKSkKKwkJRFJN X0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgZ3RfaWlyIDB4JTA4eFxuIiwgZ3RfaWlyKTsK KworCWlmIChndF9paXIgJiBHVF9QQVJJVFlfRVJST1IoZ3QtPmk5MTUpKQorCQlnZW43X3Bhcml0 eV9lcnJvcl9pcnFfaGFuZGxlcihndCwgZ3RfaWlyKTsKK30KKwordm9pZCBnZW44X2d0X2lycV9h Y2soc3RydWN0IGludGVsX2d0ICpndCwgdTMyIG1hc3Rlcl9jdGwsIHUzMiBndF9paXJbNF0pCit7 CisJdm9pZCBfX2lvbWVtICogY29uc3QgcmVncyA9IGd0LT51bmNvcmUtPnJlZ3M7CisKKwlpZiAo bWFzdGVyX2N0bCAmIChHRU44X0dUX1JDU19JUlEgfCBHRU44X0dUX0JDU19JUlEpKSB7CisJCWd0 X2lpclswXSA9IHJhd19yZWdfcmVhZChyZWdzLCBHRU44X0dUX0lJUigwKSk7CisJCWlmIChsaWtl bHkoZ3RfaWlyWzBdKSkKKwkJCXJhd19yZWdfd3JpdGUocmVncywgR0VOOF9HVF9JSVIoMCksIGd0 X2lpclswXSk7CisJfQorCisJaWYgKG1hc3Rlcl9jdGwgJiAoR0VOOF9HVF9WQ1MwX0lSUSB8IEdF TjhfR1RfVkNTMV9JUlEpKSB7CisJCWd0X2lpclsxXSA9IHJhd19yZWdfcmVhZChyZWdzLCBHRU44 X0dUX0lJUigxKSk7CisJCWlmIChsaWtlbHkoZ3RfaWlyWzFdKSkKKwkJCXJhd19yZWdfd3JpdGUo cmVncywgR0VOOF9HVF9JSVIoMSksIGd0X2lpclsxXSk7CisJfQorCisJaWYgKG1hc3Rlcl9jdGwg JiAoR0VOOF9HVF9QTV9JUlEgfCBHRU44X0dUX0dVQ19JUlEpKSB7CisJCWd0X2lpclsyXSA9IHJh d19yZWdfcmVhZChyZWdzLCBHRU44X0dUX0lJUigyKSk7CisJCWlmIChsaWtlbHkoZ3RfaWlyWzJd KSkKKwkJCXJhd19yZWdfd3JpdGUocmVncywgR0VOOF9HVF9JSVIoMiksIGd0X2lpclsyXSk7CisJ fQorCisJaWYgKG1hc3Rlcl9jdGwgJiBHRU44X0dUX1ZFQ1NfSVJRKSB7CisJCWd0X2lpclszXSA9 IHJhd19yZWdfcmVhZChyZWdzLCBHRU44X0dUX0lJUigzKSk7CisJCWlmIChsaWtlbHkoZ3RfaWly WzNdKSkKKwkJCXJhd19yZWdfd3JpdGUocmVncywgR0VOOF9HVF9JSVIoMyksIGd0X2lpclszXSk7 CisJfQorfQorCit2b2lkIGdlbjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpndCwg dTMyIG1hc3Rlcl9jdGwsIHUzMiBndF9paXJbNF0pCit7CisJaWYgKG1hc3Rlcl9jdGwgJiAoR0VO OF9HVF9SQ1NfSVJRIHwgR0VOOF9HVF9CQ1NfSVJRKSkgeworCQljc19pcnFfaGFuZGxlcihndC0+ ZW5naW5lX2NsYXNzW1JFTkRFUl9DTEFTU11bMF0sCisJCQkgICAgICAgZ3RfaWlyWzBdID4+IEdF TjhfUkNTX0lSUV9TSElGVCk7CisJCWNzX2lycV9oYW5kbGVyKGd0LT5lbmdpbmVfY2xhc3NbQ09Q WV9FTkdJTkVfQ0xBU1NdWzBdLAorCQkJICAgICAgIGd0X2lpclswXSA+PiBHRU44X0JDU19JUlFf U0hJRlQpOworCX0KKworCWlmIChtYXN0ZXJfY3RsICYgKEdFTjhfR1RfVkNTMF9JUlEgfCBHRU44 X0dUX1ZDUzFfSVJRKSkgeworCQljc19pcnFfaGFuZGxlcihndC0+ZW5naW5lX2NsYXNzW1ZJREVP X0RFQ09ERV9DTEFTU11bMF0sCisJCQkgICAgICAgZ3RfaWlyWzFdID4+IEdFTjhfVkNTMF9JUlFf U0hJRlQpOworCQljc19pcnFfaGFuZGxlcihndC0+ZW5naW5lX2NsYXNzW1ZJREVPX0RFQ09ERV9D TEFTU11bMV0sCisJCQkgICAgICAgZ3RfaWlyWzFdID4+IEdFTjhfVkNTMV9JUlFfU0hJRlQpOwor CX0KKworCWlmIChtYXN0ZXJfY3RsICYgR0VOOF9HVF9WRUNTX0lSUSkgeworCQljc19pcnFfaGFu ZGxlcihndC0+ZW5naW5lX2NsYXNzW1ZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTXVswXSwKKwkJCSAg ICAgICBndF9paXJbM10gPj4gR0VOOF9WRUNTX0lSUV9TSElGVCk7CisJfQorCisJaWYgKG1hc3Rl cl9jdGwgJiAoR0VOOF9HVF9QTV9JUlEgfCBHRU44X0dUX0dVQ19JUlEpKSB7CisJCWdlbjZfcnBz X2lycV9oYW5kbGVyKCZndC0+cnBzLCBndF9paXJbMl0pOworCQlndWNfaXJxX2hhbmRsZXIoJmd0 LT51Yy5ndWMsIGd0X2lpclsyXSA+PiAxNik7CisJfQorfQorCit2b2lkIGdlbjhfZ3RfaXJxX3Jl c2V0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gZ3QtPnVuY29yZTsKKworCUdFTjhfSVJRX1JFU0VUX05EWCh1bmNvcmUsIEdULCAwKTsKKwlH RU44X0lSUV9SRVNFVF9ORFgodW5jb3JlLCBHVCwgMSk7CisJR0VOOF9JUlFfUkVTRVRfTkRYKHVu Y29yZSwgR1QsIDIpOworCUdFTjhfSVJRX1JFU0VUX05EWCh1bmNvcmUsIEdULCAzKTsKK30KKwor dm9pZCBnZW44X2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0 cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7CisKKwkvKiBUaGVzZSBhcmUg aW50ZXJydXB0cyB3ZSdsbCB0b2dnbGUgd2l0aCB0aGUgcmluZyBtYXNrIHJlZ2lzdGVyICovCisJ dTMyIGd0X2ludGVycnVwdHNbXSA9IHsKKwkJKEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBH RU44X1JDU19JUlFfU0hJRlQgfAorCQkgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8IEdF TjhfUkNTX0lSUV9TSElGVCB8CisJCSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgR0VOOF9C Q1NfSVJRX1NISUZUIHwKKwkJIEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8PCBHRU44X0JD U19JUlFfU0hJRlQpLAorCisJCShHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgR0VOOF9WQ1Mw X0lSUV9TSElGVCB8CisJCSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9WQ1Mw X0lSUV9TSElGVCB8CisJCSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgR0VOOF9WQ1MxX0lS UV9TSElGVCB8CisJCSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9WQ1MxX0lS UV9TSElGVCksCisKKwkJMCwKKworCQkoR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIDw8IEdFTjhf VkVDU19JUlFfU0hJRlQgfAorCQkgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8IEdFTjhf VkVDU19JUlFfU0hJRlQpCisJfTsKKworCWd0LT5wbV9pZXIgPSAweDA7CisJZ3QtPnBtX2ltciA9 IH5ndC0+cG1faWVyOworCUdFTjhfSVJRX0lOSVRfTkRYKHVuY29yZSwgR1QsIDAsIH5ndF9pbnRl cnJ1cHRzWzBdLCBndF9pbnRlcnJ1cHRzWzBdKTsKKwlHRU44X0lSUV9JTklUX05EWCh1bmNvcmUs IEdULCAxLCB+Z3RfaW50ZXJydXB0c1sxXSwgZ3RfaW50ZXJydXB0c1sxXSk7CisJLyoKKwkgKiBS UFMgaW50ZXJydXB0cyB3aWxsIGdldCBlbmFibGVkL2Rpc2FibGVkIG9uIGRlbWFuZCB3aGVuIFJQ UyBpdHNlbGYKKwkgKiBpcyBlbmFibGVkL2Rpc2FibGVkLiBTYW1lIHdpbCBiZSB0aGUgY2FzZSBm b3IgR3VDIGludGVycnVwdHMuCisJICovCisJR0VOOF9JUlFfSU5JVF9ORFgodW5jb3JlLCBHVCwg MiwgZ3QtPnBtX2ltciwgZ3QtPnBtX2llcik7CisJR0VOOF9JUlFfSU5JVF9ORFgodW5jb3JlLCBH VCwgMywgfmd0X2ludGVycnVwdHNbM10sIGd0X2ludGVycnVwdHNbM10pOworfQorCitzdGF0aWMg dm9pZCBnZW41X2d0X3VwZGF0ZV9pcnEoc3RydWN0IGludGVsX2d0ICpndCwKKwkJCSAgICAgICB1 MzIgaW50ZXJydXB0X21hc2ssCisJCQkgICAgICAgdTMyIGVuYWJsZWRfaXJxX21hc2spCit7CisJ bG9ja2RlcF9hc3NlcnRfaGVsZCgmZ3QtPmlycV9sb2NrKTsKKworCUdFTV9CVUdfT04oZW5hYmxl ZF9pcnFfbWFzayAmIH5pbnRlcnJ1cHRfbWFzayk7CisKKwlndC0+Z3RfaW1yICY9IH5pbnRlcnJ1 cHRfbWFzazsKKwlndC0+Z3RfaW1yIHw9ICh+ZW5hYmxlZF9pcnFfbWFzayAmIGludGVycnVwdF9t YXNrKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUoZ3QtPnVuY29yZSwgR1RJTVIsIGd0LT5ndF9pbXIp OworfQorCit2b2lkIGdlbjVfZ3RfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIg bWFzaykKK3sKKwlnZW41X2d0X3VwZGF0ZV9pcnEoZ3QsIG1hc2ssIG1hc2spOworCWludGVsX3Vu Y29yZV9wb3N0aW5nX3JlYWRfZncoZ3QtPnVuY29yZSwgR1RJTVIpOworfQorCit2b2lkIGdlbjVf Z3RfZGlzYWJsZV9pcnEoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIG1hc2spCit7CisJZ2VuNV9n dF91cGRhdGVfaXJxKGd0LCBtYXNrLCAwKTsKK30KKwordm9pZCBnZW41X2d0X2lycV9yZXNldChz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0 LT51bmNvcmU7CisKKwlHRU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdUKTsKKwlpZiAoSU5URUxfR0VO KGd0LT5pOTE1KSA+PSA2KQorCQlHRU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdFTjZfUE0pOworfQor Cit2b2lkIGdlbjVfZ3RfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCit7CisJ c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKKwl1MzIgcG1faXJxcyA9 IDA7CisJdTMyIGd0X2lycXMgPSAwOworCisJZ3QtPmd0X2ltciA9IH4wOworCWlmIChIQVNfTDNf RFBGKGd0LT5pOTE1KSkgeworCQkvKiBMMyBwYXJpdHkgaW50ZXJydXB0IGlzIGFsd2F5cyB1bm1h c2tlZC4gKi8KKwkJZ3QtPmd0X2ltciA9IH5HVF9QQVJJVFlfRVJST1IoZ3QtPmk5MTUpOworCQln dF9pcnFzIHw9IEdUX1BBUklUWV9FUlJPUihndC0+aTkxNSk7CisJfQorCisJZ3RfaXJxcyB8PSBH VF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQ7CisJaWYgKElTX0dFTihndC0+aTkxNSwgNSkpCisJCWd0 X2lycXMgfD0gSUxLX0JTRF9VU0VSX0lOVEVSUlVQVDsKKwllbHNlCisJCWd0X2lycXMgfD0gR1Rf QkxUX1VTRVJfSU5URVJSVVBUIHwgR1RfQlNEX1VTRVJfSU5URVJSVVBUOworCisJR0VOM19JUlFf SU5JVCh1bmNvcmUsIEdULCBndC0+Z3RfaW1yLCBndF9pcnFzKTsKKworCWlmIChJTlRFTF9HRU4o Z3QtPmk5MTUpID49IDYpIHsKKwkJLyoKKwkJICogUlBTIGludGVycnVwdHMgd2lsbCBnZXQgZW5h YmxlZC9kaXNhYmxlZCBvbiBkZW1hbmQgd2hlbiBSUFMKKwkJICogaXRzZWxmIGlzIGVuYWJsZWQv ZGlzYWJsZWQuCisJCSAqLworCQlpZiAoSEFTX0VOR0lORShndC0+aTkxNSwgVkVDUzApKSB7CisJ CQlwbV9pcnFzIHw9IFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUOworCQkJZ3QtPnBtX2llciB8PSBQ TV9WRUJPWF9VU0VSX0lOVEVSUlVQVDsKKwkJfQorCisJCWd0LT5wbV9pbXIgPSAweGZmZmZmZmZm OworCQlHRU4zX0lSUV9JTklUKHVuY29yZSwgR0VONl9QTSwgZ3QtPnBtX2ltciwgcG1faXJxcyk7 CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJx LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhmMzc1OTM3MTJjOQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5oCkBAIC0wLDAgKzEsNDQg QEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIElOVEVMX0dUX0lSUV9I CisjZGVmaW5lIElOVEVMX0dUX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitz dHJ1Y3QgaW50ZWxfZ3Q7CisKKyNkZWZpbmUgR0VOOF9HVF9JUlFTIChHRU44X0dUX1JDU19JUlEg fCBcCisJCSAgICAgIEdFTjhfR1RfQkNTX0lSUSB8IFwKKwkJICAgICAgR0VOOF9HVF9WQ1MwX0lS USB8IFwKKwkJICAgICAgR0VOOF9HVF9WQ1MxX0lSUSB8IFwKKwkJICAgICAgR0VOOF9HVF9WRUNT X0lSUSB8IFwKKwkJICAgICAgR0VOOF9HVF9QTV9JUlEgfCBcCisJCSAgICAgIEdFTjhfR1RfR1VD X0lSUSkKKwordm9pZCBnZW4xMV9ndF9pcnFfcmVzZXQoc3RydWN0IGludGVsX2d0ICpndCk7Cit2 b2lkIGdlbjExX2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQg Z2VuMTFfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpndCwgY29uc3QgdTMyIG1hc3Rl cl9jdGwpOworCitib29sIGdlbjExX2d0X3Jlc2V0X29uZV9paXIoc3RydWN0IGludGVsX2d0ICpn dCwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmFuaywKKwkJCSAgICBjb25zdCB1bnNpZ25l ZCBpbnQgYml0KTsKKwordm9pZCBnZW41X2d0X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIHUzMiBndF9paXIpOworCit2b2lkIGdlbjVfZ3RfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBp bnRlbF9ndCAqZ3QpOwordm9pZCBnZW41X2d0X2lycV9yZXNldChzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KTsKK3ZvaWQgZ2VuNV9ndF9kaXNhYmxlX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFz ayk7Cit2b2lkIGdlbjVfZ3RfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFz ayk7CisKK3ZvaWQgZ2VuNl9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIg Z3RfaWlyKTsKKwordm9pZCBnZW44X2d0X2lycV9hY2soc3RydWN0IGludGVsX2d0ICpndCwgdTMy IG1hc3Rlcl9jdGwsIHUzMiBndF9paXJbNF0pOwordm9pZCBnZW44X2d0X2lycV9yZXNldChzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgZ2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf Z3QgKmd0LCB1MzIgbWFzdGVyX2N0bCwgdTMyIGd0X2lpcls0XSk7Cit2b2lkIGdlbjhfZ3RfaXJx X3Bvc3RpbnN0YWxsKHN0cnVjdCBpbnRlbF9ndCAqZ3QpOworCisjZW5kaWYgLyogSU5URUxfR1Rf SVJRX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3Bt LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jCmluZGV4IDY1YzBkMGM5 ZDU0My4uODczOWE4YzUzNDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMK QEAgLTksNyArOSwxMCBAQAogI2luY2x1ZGUgImludGVsX2VuZ2luZV9wbS5oIgogI2luY2x1ZGUg ImludGVsX2d0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZ3RfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9s bGMuaCIKICNpbmNsdWRlICJpbnRlbF9wbS5oIgorI2luY2x1ZGUgImludGVsX3JjNi5oIgorI2lu Y2x1ZGUgImludGVsX3Jwcy5oIgogI2luY2x1ZGUgImludGVsX3dha2VyZWYuaCIKIAogc3RhdGlj IHZvaWQgcG1fbm90aWZ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBpbnQgc3RhdGUp CkBAIC0zOCwxMiArNDEsNyBAQCBzdGF0aWMgaW50IGludGVsX2d0X3VucGFyayhzdHJ1Y3QgaW50 ZWxfd2FrZXJlZiAqd2YpCiAJZ3QtPmF3YWtlID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoaTkx NSwgUE9XRVJfRE9NQUlOX0dUX0lSUSk7CiAJR0VNX0JVR19PTighZ3QtPmF3YWtlKTsKIAotCWlu dGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoaTkxNSk7Ci0KLQlpOTE1X3VwZGF0ZV9nZnhfdmFsKGk5 MTUpOwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKLQkJZ2VuNl9ycHNfYnVzeShpOTE1KTsK LQorCWludGVsX3Jwc191bnBhcmsoJmd0LT5ycHMpOwogCWk5MTVfcG11X2d0X3VucGFya2VkKGk5 MTUpOwogCiAJaW50ZWxfZ3RfcXVldWVfaGFuZ2NoZWNrKGd0KTsKQEAgLTYyLDE3ICs2MCwxNiBA QCB2b2lkIGludGVsX2d0X3BtX2dldChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogCiBzdGF0aWMgaW50 IGludGVsX2d0X3Bhcmsoc3RydWN0IGludGVsX3dha2VyZWYgKndmKQogewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0KLQkJY29udGFpbmVyX29mKHdmLCB0eXBlb2YoKmk5MTUpLCBn dC53YWtlcmVmKTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZiA9IGZldGNoX2FuZF96ZXJvKCZp OTE1LT5ndC5hd2FrZSk7CisJc3RydWN0IGludGVsX2d0ICpndCA9IGNvbnRhaW5lcl9vZih3Ziwg dHlwZW9mKCpndCksIHdha2VyZWYpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g Z3QtPmk5MTU7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWYgPSBmZXRjaF9hbmRfemVybygmZ3Qt PmF3YWtlKTsKIAogCUdFTV9UUkFDRSgiXG4iKTsKIAogCXBtX25vdGlmeShpOTE1LCBJTlRFTF9H VF9QQVJLKTsKIAogCWk5MTVfcG11X2d0X3BhcmtlZChpOTE1KTsKLQlpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCi0JCWdlbjZfcnBzX2lkbGUoaTkxNSk7CisJaW50ZWxfcnBzX3BhcmsoJmd0LT5y cHMpOwogCiAJR0VNX0JVR19PTighd2FrZXJlZik7CiAJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo aTkxNSwgUE9XRVJfRE9NQUlOX0dUX0lSUSwgd2FrZXJlZik7CkBAIC0xMjcsNiArMTI0LDQ3IEBA IHZvaWQgaW50ZWxfZ3Rfc2FuaXRpemUoc3RydWN0IGludGVsX2d0ICpndCwgYm9vbCBmb3JjZSkK IAkJX19pbnRlbF9lbmdpbmVfcmVzZXQoZW5naW5lLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyBib29s IGlzX21vY2tfZGV2aWNlKGNvbnN0IHN0cnVjdCBpbnRlbF9ndCAqZ3QpCit7CisJcmV0dXJuIEk5 MTVfU0VMRlRFU1RfT05MWShndC0+YXdha2UgPT0gLTEpOworfQorCit2b2lkIGludGVsX2d0X3Bt X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZTsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKworCS8qIFBvd2Vyc2F2aW5nIGlz IGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hlbiBpbnNpZGUgYSBWTSAqLworCWlmIChpbnRlbF92 Z3B1X2FjdGl2ZShndC0+aTkxNSkpCisJCXJldHVybjsKKworCWlmIChpc19tb2NrX2RldmljZShn dCkpCisJCXJldHVybjsKKworCWludGVsX2d0X3BtX2dldChndCk7CisJaW50ZWxfcnBzX2VuYWJs ZSgmZ3QtPnJwcyk7CisJaW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7CisKKwlmb3JfZWFjaF9l bmdpbmUoZW5naW5lLCBndC0+aTkxNSwgaWQpIHsKKwkJaW50ZWxfZW5naW5lX3BtX2dldChlbmdp bmUpOworCQllbmdpbmUtPnNlcmlhbCsrOyAvKiBmb3JjZSBrZXJuZWwgY29udGV4dCByZWxvYWQg Ki8KKwkJaW50ZWxfZW5naW5lX3BtX3B1dChlbmdpbmUpOworCX0KKworCWludGVsX3JjNl9lbmFi bGUoJmd0LT5yYzYpOworCWludGVsX2d0X3BtX3B1dChndCk7Cit9CisKK3ZvaWQgaW50ZWxfZ3Rf cG1fZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCWlmIChpc19tb2NrX2RldmljZShn dCkpCisJCXJldHVybjsKKworCWludGVsX3JjNl9kaXNhYmxlKCZndC0+cmM2KTsKKwlpbnRlbF9s bGNfZGlzYWJsZSgmZ3QtPmxsYyk7CisJaW50ZWxfcnBzX2Rpc2FibGUoJmd0LT5ycHMpOworfQor CiBpbnQgaW50ZWxfZ3RfcmVzdW1lKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7CiAJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmgK aW5kZXggYmE5NjBlMWZjMjA5Li5hMGVkZDUzNTAzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3RfcG0uaApAQCAtMjAsNiArMjAsOCBAQCB2b2lkIGludGVsX2d0X3BtX2dldChzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KTsKIHZvaWQgaW50ZWxfZ3RfcG1fcHV0KHN0cnVjdCBpbnRlbF9ndCAq Z3QpOwogCiB2b2lkIGludGVsX2d0X3BtX2luaXRfZWFybHkoc3RydWN0IGludGVsX2d0ICpndCk7 Cit2b2lkIGludGVsX2d0X3BtX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgaW50 ZWxfZ3RfcG1fZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKIAogdm9pZCBpbnRlbF9ndF9z YW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBib29sIGZvcmNlKTsKIGludCBpbnRlbF9ndF9y ZXN1bWUoc3RydWN0IGludGVsX2d0ICpndCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9ndF9wbV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X3BtX2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmFi ZTg2NjEyNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfcG1faXJxLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24K KyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X3JlZy5oIgorI2lu Y2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCisjaW5jbHVkZSAi aW50ZWxfZ3RfcG1faXJxLmgiCisKK3N0YXRpYyB2b2lkIHdyaXRlX3BtX2ltcihzdHJ1Y3QgaW50 ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7 CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKKwl1MzIgbWFzayA9 IGd0LT5wbV9pbXI7CisJaTkxNV9yZWdfdCByZWc7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49 IDExKSB7CisJCXJlZyA9IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9NQVNLOworCQltYXNrIDw8 PSAxNjsgLyogcG0gaXMgaW4gdXBwZXIgaGFsZiAqLworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDgpIHsKKwkJcmVnID0gR0VOOF9HVF9JTVIoMik7CisJfSBlbHNlIHsKKwkJcmVnID0g R0VONl9QTUlNUjsKKwl9CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCByZWcsIG1hc2sp OworfQorCitzdGF0aWMgdm9pZCBnZW42X2d0X3BtX3VwZGF0ZV9pcnEoc3RydWN0IGludGVsX2d0 ICpndCwKKwkJCQkgIHUzMiBpbnRlcnJ1cHRfbWFzaywKKwkJCQkgIHUzMiBlbmFibGVkX2lycV9t YXNrKQoreworCXUzMiBuZXdfdmFsOworCisJV0FSTl9PTihlbmFibGVkX2lycV9tYXNrICYgfmlu dGVycnVwdF9tYXNrKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7CisK KwluZXdfdmFsID0gZ3QtPnBtX2ltcjsKKwluZXdfdmFsICY9IH5pbnRlcnJ1cHRfbWFzazsKKwlu ZXdfdmFsIHw9IH5lbmFibGVkX2lycV9tYXNrICYgaW50ZXJydXB0X21hc2s7CisKKwlpZiAobmV3 X3ZhbCAhPSBndC0+cG1faW1yKSB7CisJCWd0LT5wbV9pbXIgPSBuZXdfdmFsOworCQl3cml0ZV9w bV9pbXIoZ3QpOworCX0KK30KKwordm9pZCBnZW42X2d0X3BtX3VubWFza19pcnEoc3RydWN0IGlu dGVsX2d0ICpndCwgdTMyIG1hc2spCit7CisJZ2VuNl9ndF9wbV91cGRhdGVfaXJxKGd0LCBtYXNr LCBtYXNrKTsKK30KKwordm9pZCBnZW42X2d0X3BtX21hc2tfaXJxKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIHUzMiBtYXNrKQoreworCWdlbjZfZ3RfcG1fdXBkYXRlX2lycShndCwgbWFzaywgMCk7Cit9 CisKK3ZvaWQgZ2VuNl9ndF9wbV9yZXNldF9paXIoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIHJl c2V0X21hc2spCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsK KwlpOTE1X3JlZ190IHJlZyA9IElOVEVMX0dFTihndC0+aTkxNSkgPj0gOCA/IEdFTjhfR1RfSUlS KDIpIDogR0VONl9QTUlJUjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7 CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCByZWcsIHJlc2V0X21hc2spOworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIHJlZywgcmVzZXRfbWFzayk7CisJaW50ZWxfdW5jb3JlX3Bv c3RpbmdfcmVhZCh1bmNvcmUsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BtX2llcihz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g Z3QtPmk5MTU7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKKwl1 MzIgbWFzayA9IGd0LT5wbV9pZXI7CisJaTkxNV9yZWdfdCByZWc7CisKKwlpZiAoSU5URUxfR0VO KGk5MTUpID49IDExKSB7CisJCXJlZyA9IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9FTkFCTEU7 CisJCW1hc2sgPDw9IDE2OyAvKiBwbSBpcyBpbiB1cHBlciBoYWxmICovCisJfSBlbHNlIGlmIChJ TlRFTF9HRU4oaTkxNSkgPj0gOCkgeworCQlyZWcgPSBHRU44X0dUX0lFUigyKTsKKwl9IGVsc2Ug eworCQlyZWcgPSBHRU42X1BNSUVSOworCX0KKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IHJlZywgbWFzayk7Cit9CisKK3ZvaWQgZ2VuNl9ndF9wbV9lbmFibGVfaXJxKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIHUzMiBlbmFibGVfbWFzaykKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+ aXJxX2xvY2spOworCisJZ3QtPnBtX2llciB8PSBlbmFibGVfbWFzazsKKwl3cml0ZV9wbV9pZXIo Z3QpOworCWdlbjZfZ3RfcG1fdW5tYXNrX2lycShndCwgZW5hYmxlX21hc2spOworfQorCit2b2lk IGdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIGRpc2FibGVf bWFzaykKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aXJxX2xvY2spOworCisJZ3QtPnBt X2llciAmPSB+ZGlzYWJsZV9tYXNrOworCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIGRpc2FibGVf bWFzayk7CisJd3JpdGVfcG1faWVyKGd0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2d0X3BtX2lycS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfcG1faXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5i Mjk4MTZhMDQ4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9wbV9pcnEuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u CisgKi8KKworI2lmbmRlZiBJTlRFTF9HVF9QTV9JUlFfSAorI2RlZmluZSBJTlRFTF9HVF9QTV9J UlFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGludGVsX2d0OworCit2 b2lkIGdlbjZfZ3RfcG1fdW5tYXNrX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzayk7 Cit2b2lkIGdlbjZfZ3RfcG1fbWFza19pcnEoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIG1hc2sp OworCit2b2lkIGdlbjZfZ3RfcG1fZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIg ZW5hYmxlX21hc2spOwordm9pZCBnZW42X2d0X3BtX2Rpc2FibGVfaXJxKHN0cnVjdCBpbnRlbF9n dCAqZ3QsIHUzMiBkaXNhYmxlX21hc2spOworCit2b2lkIGdlbjZfZ3RfcG1fcmVzZXRfaWlyKHN0 cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiByZXNldF9tYXNrKTsKKworI2VuZGlmIC8qIElOVEVMX0dU X1BNX0lSUV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAppbmRl eCA1ZmQxMWUzNjFkMDMuLjU4NzY1YmE0N2M5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF90eXBlcy5oCkBAIC0xNiw3ICsxNiwxMCBAQAogI2luY2x1ZGUgInVjL2ludGVsX3Vj LmgiCiAKICNpbmNsdWRlICJpOTE1X3ZtYS5oIgorI2luY2x1ZGUgImludGVsX2xsY190eXBlcy5o IgogI2luY2x1ZGUgImludGVsX3Jlc2V0X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcmM2X3R5 cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzX3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfd2Fr ZXJlZi5oIgogCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKQEAgLTY3LDE0ICs3MCwyMCBAQCBz dHJ1Y3QgaW50ZWxfZ3QgewogCSAqLwogCWludGVsX3dha2VyZWZfdCBhd2FrZTsKIAorCXN0cnVj dCBpbnRlbF9sbGMgbGxjOworCXN0cnVjdCBpbnRlbF9yYzYgcmM2OworCXN0cnVjdCBpbnRlbF9y cHMgcnBzOworCiAJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgcG1fbm90aWZpY2F0aW9u czsKIAogCWt0aW1lX3QgbGFzdF9pbml0X3RpbWU7CiAKIAlzdHJ1Y3QgaTkxNV92bWEgKnNjcmF0 Y2g7CiAKLQl1MzIgcG1faW1yOworCXNwaW5sb2NrX3QgaXJxX2xvY2s7CisJdTMyIGd0X2ltcjsK IAl1MzIgcG1faWVyOworCXUzMiBwbV9pbXI7CiAKIAl1MzIgcG1fZ3VjX2V2ZW50czsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmEzNDVlNjA0NjZiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2xsYy5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKworI2luY2x1ZGUgImlu dGVsX2Rydi5oIgorI2luY2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVkZSAiaW50ZWxfbGxjLmgi CisjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKKworc3RhdGljIHN0cnVjdCBpbnRlbF9ndCAq bGxjX3RvX2d0KHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KGxsYywgc3RydWN0IGludGVsX2d0LCBsbGMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNw dV9tYXhfTUh6KHZvaWQpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5z aWduZWQgaW50IG1heF9raHo7CisKKwlwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoMCk7CisJaWYg KHBvbGljeSkgeworCQltYXhfa2h6ID0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxOworCQljcHVm cmVxX2NwdV9wdXQocG9saWN5KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBEZWZhdWx0IHRvIG1l YXN1cmVkIGZyZXEgaWYgbm9uZSBmb3VuZCwgUENVIHdpbGwgZW5zdXJlIHdlCisJCSAqIGRvbid0 IGdvIG92ZXIKKwkJICovCisJCW1heF9raHogPSB0c2Nfa2h6OworCX0KKworCXJldHVybiBtYXhf a2h6IC8gMTAwMDsKK30KKworc3RhdGljIHZvaWQgZ2VuNl91cGRhdGVfcmluZ19mcmVxKHN0cnVj dCBpbnRlbF9sbGMgKmxsYykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGxs Y190b19ndChsbGMpLT5pOTE1OworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZsbGNfdG9fZ3Qo bGxjKS0+cnBzOworCXVuc2lnbmVkIGludCBtYXhfaWFfZnJlcSwgbWluX3JpbmdfZnJlcTsKKwl1 bnNpZ25lZCBpbnQgbWF4X2dwdV9mcmVxLCBtaW5fZ3B1X2ZyZXE7CisJY29uc3QgaW50IG1pbl9m cmVxID0gMTU7CisJY29uc3QgaW50IHNjYWxlID0gMTgwOworCXVuc2lnbmVkIGludCBncHVfZnJl cTsKKworCWlmIChycHMtPm1heF9mcmVxIDw9IHJwcy0+bWluX2ZyZXEpCisJCXJldHVybjsKKwor CW1heF9pYV9mcmVxID0gY3B1X21heF9NSHooKTsKKworCW1pbl9yaW5nX2ZyZXEgPSBpbnRlbF91 bmNvcmVfcmVhZChsbGNfdG9fZ3QobGxjKS0+dW5jb3JlLCBEQ0xLKSAmIDB4ZjsKKwkvKiBjb252 ZXJ0IEREUiBmcmVxdWVuY3kgZnJvbSB1bml0cyBvZiAyNjYuNk1IeiB0byBiYW5kd2lkdGggKi8K KwltaW5fcmluZ19mcmVxID0gbXVsdF9mcmFjKG1pbl9yaW5nX2ZyZXEsIDgsIDMpOworCisJbWlu X2dwdV9mcmVxID0gcnBzLT5taW5fZnJlcTsKKwltYXhfZ3B1X2ZyZXEgPSBycHMtPm1heF9mcmVx OworCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1KSA+PSAxMCkgeworCQkv KiBDb252ZXJ0IEdUIGZyZXF1ZW5jeSB0byA1MCBIWiB1bml0cyAqLworCQltaW5fZ3B1X2ZyZXEg Lz0gR0VOOV9GUkVRX1NDQUxFUjsKKwkJbWF4X2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FMRVI7 CisJfQorCisJLyoKKwkgKiBGb3IgZWFjaCBwb3RlbnRpYWwgR1BVIGZyZXF1ZW5jeSwgbG9hZCBh IHJpbmcgZnJlcXVlbmN5IHdlJ2QgbGlrZQorCSAqIHRvIHVzZSBmb3IgbWVtb3J5IGFjY2Vzcy4g IFdlIGRvIHRoaXMgYnkgc3BlY2lmeWluZyB0aGUgSUEgZnJlcXVlbmN5CisJICogdGhlIFBDVSBz aG91bGQgdXNlIGFzIGEgcmVmZXJlbmNlIHRvIGRldGVybWluZSB0aGUgcmluZyBmcmVxdWVuY3ku CisJICovCisJZm9yIChncHVfZnJlcSA9IG1heF9ncHVfZnJlcTsgZ3B1X2ZyZXEgPj0gbWluX2dw dV9mcmVxOyBncHVfZnJlcS0tKSB7CisJCWNvbnN0IGludCBkaWZmID0gbWF4X2dwdV9mcmVxIC0g Z3B1X2ZyZXE7CisJCXVuc2lnbmVkIGludCBpYV9mcmVxID0gMCwgcmluZ19mcmVxID0gMDsKKwor CQlpZiAoSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwkJCS8q CisJCQkgKiByaW5nX2ZyZXEgPSAyICogR1QuIHJpbmdfZnJlcSBpcyBpbiAxMDBNSHogdW5pdHMK KwkJCSAqIE5vIGZsb29yIHJlcXVpcmVkIGZvciByaW5nIGZyZXF1ZW5jeSBvbiBTS0wuCisJCQkg Ki8KKwkJCXJpbmdfZnJlcSA9IGdwdV9mcmVxOworCQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA4KSB7CisJCQkvKiBtYXgoMiAqIEdULCBERFIpLiBOQjogR1QgaXMgNTBNSHogdW5pdHMg Ki8KKwkJCXJpbmdfZnJlcSA9IG1heChtaW5fcmluZ19mcmVxLCBncHVfZnJlcSk7CisJCX0gZWxz ZSBpZiAoSVNfSEFTV0VMTChpOTE1KSkgeworCQkJcmluZ19mcmVxID0gbXVsdF9mcmFjKGdwdV9m cmVxLCA1LCA0KTsKKwkJCXJpbmdfZnJlcSA9IG1heChtaW5fcmluZ19mcmVxLCByaW5nX2ZyZXEp OworCQkJLyogbGVhdmUgaWFfZnJlcSBhcyB0aGUgZGVmYXVsdCwgY2hvc2VuIGJ5IGNwdWZyZXEg Ki8KKwkJfSBlbHNlIHsKKwkJCS8qIE9uIG9sZGVyIHByb2Nlc3NvcnMsIHRoZXJlIGlzIG5vIHNl cGFyYXRlIHJpbmcKKwkJCSAqIGNsb2NrIGRvbWFpbiwgc28gaW4gb3JkZXIgdG8gYm9vc3QgdGhl IGJhbmR3aWR0aAorCQkJICogb2YgdGhlIHJpbmcsIHdlIG5lZWQgdG8gdXBjbG9jayB0aGUgQ1BV IChpYV9mcmVxKS4KKwkJCSAqCisJCQkgKiBGb3IgR1BVIGZyZXF1ZW5jaWVzIGxlc3MgdGhhbiA3 NTBNSHosCisJCQkgKiBqdXN0IHVzZSB0aGUgbG93ZXN0IHJpbmcgZnJlcS4KKwkJCSAqLworCQkJ aWYgKGdwdV9mcmVxIDwgbWluX2ZyZXEpCisJCQkJaWFfZnJlcSA9IDgwMDsKKwkJCWVsc2UKKwkJ CQlpYV9mcmVxID0gbWF4X2lhX2ZyZXEgLSBkaWZmICogc2NhbGUgLyAyOworCQkJaWFfZnJlcSA9 IERJVl9ST1VORF9DTE9TRVNUKGlhX2ZyZXEsIDEwMCk7CisJCX0KKworCQlzYW5keWJyaWRnZV9w Y29kZV93cml0ZShpOTE1LAorCQkJCQlHRU42X1BDT0RFX1dSSVRFX01JTl9GUkVRX1RBQkxFLAor CQkJCQlpYV9mcmVxIDw8IEdFTjZfUENPREVfRlJFUV9JQV9SQVRJT19TSElGVCB8CisJCQkJCXJp bmdfZnJlcSA8PCBHRU42X1BDT0RFX0ZSRVFfUklOR19SQVRJT19TSElGVCB8CisJCQkJCWdwdV9m cmVxKTsKKwl9Cit9CisKK3ZvaWQgaW50ZWxfbGxjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfbGxjICps bGMpCit7CisJaWYgKEhBU19MTEMobGxjX3RvX2d0KGxsYyktPmk5MTUpKQorCQlnZW42X3VwZGF0 ZV9yaW5nX2ZyZXEobGxjKTsKK30KKwordm9pZCBpbnRlbF9sbGNfZGlzYWJsZShzdHJ1Y3QgaW50 ZWxfbGxjICpsbGMpCit7CisJLyogQ3VycmVudGx5IHRoZXJlIGlzIG5vIEhXIGNvbmZpZ3VyYXRp b24gdG8gYmUgZG9uZSB0byBkaXNhYmxlLiAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9s bGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVmMDlhODkwZDJi NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5o CkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisg KgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVm IElOVEVMX0xMQ19ICisjZGVmaW5lIElOVEVMX0xMQ19ICisKK3N0cnVjdCBpbnRlbF9sbGM7CisK K3ZvaWQgaW50ZWxfbGxjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpOwordm9pZCBpbnRl bF9sbGNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpOworCisjZW5kaWYgLyogSU5URUxf TExDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsY190 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjX3R5cGVzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lY2FkNDY4N2I5MzAKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGNfdHlwZXMuaApAQCAt MCwwICsxLDEzIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAq IENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBJTlRF TF9MTENfVFlQRVNfSAorI2RlZmluZSBJTlRFTF9MTENfVFlQRVNfSAorCitzdHJ1Y3QgaW50ZWxf bGxjIHsKK307CisKKyNlbmRpZiAvKiBJTlRFTF9MTENfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yYzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjJmYzA5YWFhYjZjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3JjNi5jCkBAIC0wLDAgKzEsNjY1IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKKyNpbmNsdWRlICJpbnRlbF9yYzYuaCIKKyNpbmNs dWRlICJpbnRlbF9zaWRlYmFuZC5oIgorCisvKioKKyAqIERPQzogUkM2CisgKgorICogUkM2IGlz IGEgc3BlY2lhbCBwb3dlciBzdGFnZSB3aGljaCBhbGxvd3MgdGhlIEdQVSB0byBlbnRlciBhbiB2 ZXJ5CisgKiBsb3ctdm9sdGFnZSBtb2RlIHdoZW4gaWRsZSwgdXNpbmcgZG93biB0byAwViB3aGls ZSBhdCB0aGlzIHN0YWdlLiAgVGhpcworICogc3RhZ2UgaXMgZW50ZXJlZCBhdXRvbWF0aWNhbGx5 IHdoZW4gdGhlIEdQVSBpcyBpZGxlIHdoZW4gUkM2IHN1cHBvcnQgaXMKKyAqIGVuYWJsZWQsIGFu ZCBhcyBzb29uIGFzIG5ldyB3b3JrbG9hZCBhcmlzZXMgR1BVIHdha2VzIHVwIGF1dG9tYXRpY2Fs bHkgYXMKKyAqIHdlbGwuCisgKgorICogVGhlcmUgYXJlIGRpZmZlcmVudCBSQzYgbW9kZXMgYXZh aWxhYmxlIGluIEludGVsIEdQVSwgd2hpY2ggZGlmZmVyZW50aWF0ZQorICogYW1vbmcgZWFjaCBv dGhlciB3aXRoIHRoZSBsYXRlbmN5IHJlcXVpcmVkIHRvIGVudGVyIGFuZCBsZWF2ZSBSQzYgYW5k CisgKiB2b2x0YWdlIGNvbnN1bWVkIGJ5IHRoZSBHUFUgaW4gZGlmZmVyZW50IHN0YXRlcy4KKyAq CisgKiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBmbGFncyBkZWZpbmUgd2hpY2gg c3RhdGVzIEdQVSBpcyBhbGxvd2VkCisgKiB0byBlbnRlciwgd2hpbGUgUkM2IGlzIHRoZSBub3Jt YWwgUkM2IHN0YXRlLCBSQzZwIGlzIHRoZSBkZWVwIFJDNiwgYW5kCisgKiBSQzZwcCBpcyBkZWVw ZXN0IFJDNi4gVGhlaXIgc3VwcG9ydCBieSBoYXJkd2FyZSB2YXJpZXMgYWNjb3JkaW5nIHRvIHRo ZQorICogR1BVLCBCSU9TLCBjaGlwc2V0IGFuZCBwbGF0Zm9ybS4gUkM2IGlzIHVzdWFsbHkgdGhl IHNhZmVzdCBvbmUgYW5kIHRoZSBvbmUKKyAqIHdoaWNoIGJyaW5ncyB0aGUgbW9zdCBwb3dlciBz YXZpbmdzOyBkZWVwZXIgc3RhdGVzIHNhdmUgbW9yZSBwb3dlciwgYnV0CisgKiByZXF1aXJlIGhp Z2hlciBsYXRlbmN5IHRvIHN3aXRjaCB0byBhbmQgd2FrZSB1cC4KKyAqLworCitzdGF0aWMgc3Ry dWN0IGludGVsX2d0ICpyYzZfdG9fZ3Qoc3RydWN0IGludGVsX3JjNiAqcmM2KQoreworCXJldHVy biBjb250YWluZXJfb2YocmM2LCBzdHJ1Y3QgaW50ZWxfZ3QsIHJjNik7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgaW50ZWxfdW5jb3JlICpyYzZfdG9fdW5jb3JlKHN0cnVjdCBpbnRlbF9yYzYgKnJjKQor eworCXJldHVybiByYzZfdG9fZ3QocmMpLT51bmNvcmU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqcmM2X3RvX2k5MTUoc3RydWN0IGludGVsX3JjNiAqcmMpCit7CisJcmV0 dXJuIHJjNl90b19ndChyYyktPmk5MTU7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjExX3JjNl9lbmFi bGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9IHJjNl90b191bmNvcmUocmM2KTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisKKwkvKiAxYTogU29mdHdhcmUgUkMgc3RhdGUg LSBSQzAgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1NUQVRFLCAw KTsKKworCS8qIDJhOiBEaXNhYmxlIFJDIHN0YXRlcy4gKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JDX0NPTlRST0wsIDApOworCisJLyogMmI6IFByb2dyYW0gUkM2IHRo cmVzaG9sZHMuKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9XQUtF X1JBVEVfTElNSVQsIDU0IDw8IDE2IHwgODUpOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIEdFTjEwX01FRElBX1dBS0VfUkFURV9MSU1JVCwgMTUwKTsKKworCWludGVsX3VuY29yZV93 cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfRVZBTFVBVElPTl9JTlRFUlZBTCwgMTI1MDAwKTsgLyog MTI1MDAgKiAxMjgwbnMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JD X0lETEVfSFlTVEVSU0lTLCAyNSk7IC8qIDI1ICogMTI4MG5zICovCisJZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgcmM2X3RvX2d0KHJjNiktPmk5MTUsIGlkKQorCQlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBSSU5HX01BWF9JRExFKGVuZ2luZS0+bW1pb19iYXNlKSwgMTApOworCisJaW50 ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR1VDX01BWF9JRExFX0NPVU5ULCAweEEpOworCisJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19TTEVFUCwgMCk7CisKKwlpbnRl bF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9USFJFU0hPTEQsIDUwMDAwKTsgLyog NTAvMTI1bXMgcGVyIEVJICovCisKKwkvKgorCSAqIDJjOiBQcm9ncmFtIENvYXJzZSBQb3dlciBH YXRpbmcgUG9saWNpZXMuCisJICoKKwkgKiBCc3BlYydzIGd1aWRhbmNlIGlzIHRvIHVzZSAyNXVz IChyZWFsbHkgMjUgKiAxMjgwbnMpIGhlcmUuIFdoYXQgd2UKKwkgKiB1c2UgaW5zdGVhZCBpcyBh IG1vcmUgY29uc2VydmF0aXZlIGVzdGltYXRlIGZvciB0aGUgbWF4aW11bSB0aW1lCisJICogaXQg dGFrZXMgdXMgdG8gc2VydmljZSBhIENTIGludGVycnVwdCBhbmQgc3VibWl0IGEgbmV3IEVMU1Ag LSB0aGF0CisJICogaXMgdGhlIHRpbWUgd2hpY2ggdGhlIEdQVSBpcyBpZGxlIHdhaXRpbmcgZm9y IHRoZSBDUFUgdG8gc2VsZWN0IHRoZQorCSAqIG5leHQgcmVxdWVzdCB0byBleGVjdXRlLiBJZiB0 aGUgaWRsZSBoeXN0ZXJlc2lzIGlzIGxlc3MgdGhhbiB0aGF0CisJICogaW50ZXJydXB0IHNlcnZp Y2UgbGF0ZW5jeSwgdGhlIGhhcmR3YXJlIHdpbGwgYXV0b21hdGljYWxseSBnYXRlCisJICogdGhl IHBvd2VyIHdlbGwgYW5kIHdlIHdpbGwgdGhlbiBpbmN1ciB0aGUgd2FrZSB1cCBjb3N0IG9uIHRv cCBvZgorCSAqIHRoZSBzZXJ2aWNlIGxhdGVuY3kuIEEgc2ltaWxhciBndWlkZSBmcm9tIHBsYW5l X3N0YXRlIGlzIHRoYXQgd2UKKwkgKiBkbyBub3Qgd2FudCB0aGUgZW5hYmxlIGh5c3RlcmVzaXMg dG8gbGVzcyB0aGFuIHRoZSB3YWtldXAgbGF0ZW5jeS4KKwkgKgorCSAqIGlndC9nZW1fZXhlY19u b3Avc2VxdWVudGlhbCBwcm92aWRlcyBhIHJvdWdoIGVzdGltYXRlIGZvciB0aGUKKwkgKiBzZXJ2 aWNlIGxhdGVuY3ksIGFuZCBwdXRzIGl0IGFyb3VuZCAxMHVzIGZvciBCcm9hZHdlbGwgKGFuZCBv dGhlcgorCSAqIGJpZyBjb3JlKSBhbmQgYXJvdW5kIDQwdXMgZm9yIEJyb3h0b24gKGFuZCBvdGhl ciBsb3cgcG93ZXIgY29yZXMpLgorCSAqIFtOb3RlIHRoYXQgZm9yIGxlZ2FjeSByaW5nYnVmZmVy IHN1Ym1pc3Npb24sIHRoaXMgaXMgbGVzcyB0aGFuIDF1cyFdCisJICogSG93ZXZlciwgdGhlIHdh a2V1cCBsYXRlbmN5IG9uIEJyb3h0b24gaXMgY2xvc2VyIHRvIDEwMHVzLiBUbyBiZQorCSAqIGNv bnNlcnZhdGl2ZSwgd2UgaGF2ZSB0byBmYWN0b3IgaW4gYSBjb250ZXh0IHN3aXRjaCBvbiB0b3Ag KGR1ZQorCSAqIHRvIGtzb2Z0aXJxZCkuCisJICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VOOV9NRURJQV9QR19JRExFX0hZU1RFUkVTSVMsIDI1MCk7CisJaW50ZWxfdW5jb3Jl X3dyaXRlX2Z3KHVuY29yZSwgR0VOOV9SRU5ERVJfUEdfSURMRV9IWVNURVJFU0lTLCAyNTApOwor CisJLyogM2E6IEVuYWJsZSBSQzYgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBH RU42X1JDX0NPTlRST0wsCisJCQkgICAgICBHRU42X1JDX0NUTF9IV19FTkFCTEUgfAorCQkJICAg ICAgR0VONl9SQ19DVExfUkM2X0VOQUJMRSB8CisJCQkgICAgICBHRU42X1JDX0NUTF9FSV9NT0RF KDEpKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjlfUEdfRU5BQkxFLAor CQkJICAgICAgR0VOOV9SRU5ERVJfUEdfRU5BQkxFIHwKKwkJCSAgICAgIEdFTjlfTUVESUFfUEdf RU5BQkxFIHwKKwkJCSAgICAgIEdFTjExX01FRElBX1NBTVBMRVJfUEdfRU5BQkxFKTsKK30KKwor c3RhdGljIHZvaWQgZ2VuOV9yYzZfZW5hYmxlKHN0cnVjdCBpbnRlbF9yYzYgKnJjNikKK3sKKwlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSByYzZfdG9fdW5jb3JlKHJjNik7CisJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCXUz MiByYzZfbW9kZTsKKworCS8qIDFhOiBTb2Z0d2FyZSBSQyBzdGF0ZSAtIFJDMCAqLworCWludGVs X3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfU1RBVEUsIDApOworCisJLyogMmE6IERp c2FibGUgUkMgc3RhdGVzLiAqLworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZf UkNfQ09OVFJPTCwgMCk7CisKKwkvKiAyYjogUHJvZ3JhbSBSQzYgdGhyZXNob2xkcy4qLworCWlm IChJTlRFTF9HRU4ocmM2X3RvX2k5MTUocmM2KSkgPj0gMTApIHsKKwkJaW50ZWxfdW5jb3JlX3dy aXRlX2Z3KHVuY29yZSwgR0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCA1NCA8PCAxNiB8IDg1KTsK KwkJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VOMTBfTUVESUFfV0FLRV9SQVRFX0xJ TUlULCAxNTApOworCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShyYzZfdG9faTkxNShyYzYpKSkgewor CQkvKgorCQkgKiBXYVJzRG91YmxlUmM2V3JsV2l0aENvYXJzZVBvd2VyR2F0aW5nOnNrbCBEb3Vi bGluZyBXUkwgb25seQorCQkgKiB3aGVuIENQRyBpcyBlbmFibGVkCisJCSAqLworCQlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQsIDEwOCA8PCAx Nik7CisJfSBlbHNlIHsKKwkJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQzZf V0FLRV9SQVRFX0xJTUlULCA1NCA8PCAxNik7CisJfQorCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3 KHVuY29yZSwgR0VONl9SQ19FVkFMVUFUSU9OX0lOVEVSVkFMLCAxMjUwMDApOyAvKiAxMjUwMCAq IDEyODBucyAqLworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfSURMRV9I WVNURVJTSVMsIDI1KTsgLyogMjUgKiAxMjgwbnMgKi8KKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCByYzZfdG9fZ3QocmM2KS0+aTkxNSwgaWQpCisJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIFJJTkdfTUFYX0lETEUoZW5naW5lLT5tbWlvX2Jhc2UpLCAxMCk7CisKKwlpbnRlbF91bmNv cmVfd3JpdGVfZncodW5jb3JlLCBHVUNfTUFYX0lETEVfQ09VTlQsIDB4QSk7CisKKwlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1NMRUVQLCAwKTsKKworCS8qCisJICogMmM6 IFByb2dyYW0gQ29hcnNlIFBvd2VyIEdhdGluZyBQb2xpY2llcy4KKwkgKgorCSAqIEJzcGVjJ3Mg Z3VpZGFuY2UgaXMgdG8gdXNlIDI1dXMgKHJlYWxseSAyNSAqIDEyODBucykgaGVyZS4gV2hhdCB3 ZQorCSAqIHVzZSBpbnN0ZWFkIGlzIGEgbW9yZSBjb25zZXJ2YXRpdmUgZXN0aW1hdGUgZm9yIHRo ZSBtYXhpbXVtIHRpbWUKKwkgKiBpdCB0YWtlcyB1cyB0byBzZXJ2aWNlIGEgQ1MgaW50ZXJydXB0 IGFuZCBzdWJtaXQgYSBuZXcgRUxTUCAtIHRoYXQKKwkgKiBpcyB0aGUgdGltZSB3aGljaCB0aGUg R1BVIGlzIGlkbGUgd2FpdGluZyBmb3IgdGhlIENQVSB0byBzZWxlY3QgdGhlCisJICogbmV4dCBy ZXF1ZXN0IHRvIGV4ZWN1dGUuIElmIHRoZSBpZGxlIGh5c3RlcmVzaXMgaXMgbGVzcyB0aGFuIHRo YXQKKwkgKiBpbnRlcnJ1cHQgc2VydmljZSBsYXRlbmN5LCB0aGUgaGFyZHdhcmUgd2lsbCBhdXRv bWF0aWNhbGx5IGdhdGUKKwkgKiB0aGUgcG93ZXIgd2VsbCBhbmQgd2Ugd2lsbCB0aGVuIGluY3Vy IHRoZSB3YWtlIHVwIGNvc3Qgb24gdG9wIG9mCisJICogdGhlIHNlcnZpY2UgbGF0ZW5jeS4gQSBz aW1pbGFyIGd1aWRlIGZyb20gcGxhbmVfc3RhdGUgaXMgdGhhdCB3ZQorCSAqIGRvIG5vdCB3YW50 IHRoZSBlbmFibGUgaHlzdGVyZXNpcyB0byBsZXNzIHRoYW4gdGhlIHdha2V1cCBsYXRlbmN5Lgor CSAqCisJICogaWd0L2dlbV9leGVjX25vcC9zZXF1ZW50aWFsIHByb3ZpZGVzIGEgcm91Z2ggZXN0 aW1hdGUgZm9yIHRoZQorCSAqIHNlcnZpY2UgbGF0ZW5jeSwgYW5kIHB1dHMgaXQgYXJvdW5kIDEw dXMgZm9yIEJyb2Fkd2VsbCAoYW5kIG90aGVyCisJICogYmlnIGNvcmUpIGFuZCBhcm91bmQgNDB1 cyBmb3IgQnJveHRvbiAoYW5kIG90aGVyIGxvdyBwb3dlciBjb3JlcykuCisJICogW05vdGUgdGhh dCBmb3IgbGVnYWN5IHJpbmdidWZmZXIgc3VibWlzc2lvbiwgdGhpcyBpcyBsZXNzIHRoYW4gMXVz IV0KKwkgKiBIb3dldmVyLCB0aGUgd2FrZXVwIGxhdGVuY3kgb24gQnJveHRvbiBpcyBjbG9zZXIg dG8gMTAwdXMuIFRvIGJlCisJICogY29uc2VydmF0aXZlLCB3ZSBoYXZlIHRvIGZhY3RvciBpbiBh IGNvbnRleHQgc3dpdGNoIG9uIHRvcCAoZHVlCisJICogdG8ga3NvZnRpcnFkKS4KKwkgKi8KKwlp bnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU45X01FRElBX1BHX0lETEVfSFlTVEVSRVNJ UywgMjUwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU45X1JFTkRFUl9QR19J RExFX0hZU1RFUkVTSVMsIDI1MCk7CisKKwkvKiAzYTogRW5hYmxlIFJDNiAqLworCWludGVsX3Vu Y29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkM2X1RIUkVTSE9MRCwgMzc1MDApOyAvKiAzNy41 LzEyNW1zIHBlciBFSSAqLworCisJLyogV2FSc1VzZVRpbWVvdXRNb2RlOmNubCAocHJlLXByb2Qp ICovCisJaWYgKElTX0NOTF9SRVZJRChyYzZfdG9faTkxNShyYzYpLCBDTkxfUkVWSURfQTAsIENO TF9SRVZJRF9DMCkpCisJCXJjNl9tb2RlID0gR0VON19SQ19DVExfVE9fTU9ERTsKKwllbHNlCisJ CXJjNl9tb2RlID0gR0VONl9SQ19DVExfRUlfTU9ERSgxKTsKKworCWludGVsX3VuY29yZV93cml0 ZV9mdyh1bmNvcmUsIEdFTjZfUkNfQ09OVFJPTCwKKwkJCSAgICAgIEdFTjZfUkNfQ1RMX0hXX0VO QUJMRSB8CisJCQkgICAgICBHRU42X1JDX0NUTF9SQzZfRU5BQkxFIHwKKwkJCSAgICAgIHJjNl9t b2RlKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjlfUEdfRU5BQkxFLAor CQkJICAgICAgR0VOOV9SRU5ERVJfUEdfRU5BQkxFIHwgR0VOOV9NRURJQV9QR19FTkFCTEUpOwor fQorCitzdGF0aWMgdm9pZCBnZW44X3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQor eworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJjNl90b191bmNvcmUocmM2KTsKKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 CisKKwkvKiAxYTogU29mdHdhcmUgUkMgc3RhdGUgLSBSQzAgKi8KKwlpbnRlbF91bmNvcmVfd3Jp dGVfZncodW5jb3JlLCBHRU42X1JDX1NUQVRFLCAwKTsKKworCS8qIDJhOiBEaXNhYmxlIFJDIHN0 YXRlcy4gKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX0NPTlRST0ws IDApOworCisJLyogMmI6IFByb2dyYW0gUkM2IHRocmVzaG9sZHMuKi8KKwlpbnRlbF91bmNvcmVf d3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQsIDQwIDw8IDE2KTsKKwlp bnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX0VWQUxVQVRJT05fSU5URVJWQUws IDEyNTAwMCk7IC8qIDEyNTAwICogMTI4MG5zICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VONl9SQ19JRExFX0hZU1RFUlNJUywgMjUpOyAvKiAyNSAqIDEyODBucyAqLworCWZv cl9lYWNoX2VuZ2luZShlbmdpbmUsIHJjNl90b19ndChyYzYpLT5pOTE1LCBpZCkKKwkJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9fYmFzZSks IDEwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1NMRUVQLCAwKTsK KwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9USFJFU0hPTEQsIDYyNSk7 IC8qIDgwMHVzLzEuMjggZm9yIFRPICovCisKKwkvKiAzOiBFbmFibGUgUkM2ICovCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19DT05UUk9MLAorCQkJICAgICAgR0VONl9S Q19DVExfSFdfRU5BQkxFIHwKKwkJCSAgICAgIEdFTjdfUkNfQ1RMX1RPX01PREUgfAorCQkJICAg ICAgR0VONl9SQ19DVExfUkM2X0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjZfcmM2X2Vu YWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gcmM2X3RvX3VuY29yZShyYzYpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gcmM2X3RvX2k5MTUocmM2KTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJ ZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisJdTMyIHJjNnZpZHMsIHJjNl9tYXNrOworCWludCBy ZXQ7CisKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1NUQVRFLCAwKTsK KworCS8qIGRpc2FibGUgdGhlIGNvdW50ZXJzIGFuZCBzZXQgZGV0ZXJtaW5pc3RpYyB0aHJlc2hv bGRzICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19DT05UUk9MLCAw KTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkMxX1dBS0VfUkFURV9M SU1JVCwgMTAwMCA8PCAxNik7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9S QzZfV0FLRV9SQVRFX0xJTUlULCA0MCA8PCAxNiB8IDMwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JDNnBwX1dBS0VfUkFURV9MSU1JVCwgMzApOworCWludGVsX3VuY29y ZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfRVZBTFVBVElPTl9JTlRFUlZBTCwgMTI1MDAwKTsK KwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX0lETEVfSFlTVEVSU0lTLCAy NSk7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkKKwkJaW50ZWxfdW5jb3Jl X3dyaXRlX2Z3KHVuY29yZSwgUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9fYmFzZSksCisJCQkJ ICAgICAgMTApOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19TTEVF UCwgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQzFlX1RIUkVTSE9M RCwgMTAwMCk7CisJaWYgKElTX0lWWUJSSURHRShpOTE1KSkKKwkJaW50ZWxfdW5jb3JlX3dyaXRl X2Z3KHVuY29yZSwgR0VONl9SQzZfVEhSRVNIT0xELCAxMjUwMDApOworCWVsc2UKKwkJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQzZfVEhSRVNIT0xELCA1MDAwMCk7CisJaW50 ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQzZwX1RIUkVTSE9MRCwgMTUwMDAwKTsK KwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNnBwX1RIUkVTSE9MRCwgNjQw MDApOyAvKiB1bnVzZWQgKi8KKworCS8qIFdlIGRvbid0IHVzZSB0aG9zZSBvbiBIYXN3ZWxsICov CisJcmM2X21hc2sgPSBHRU42X1JDX0NUTF9SQzZfRU5BQkxFOworCWlmIChIQVNfUkM2cChpOTE1 KSkKKwkJcmM2X21hc2sgfD0gR0VONl9SQ19DVExfUkM2cF9FTkFCTEU7CisJaWYgKEhBU19SQzZw cChpOTE1KSkKKwkJcmM2X21hc2sgfD0gR0VONl9SQ19DVExfUkM2cHBfRU5BQkxFOworCWludGVs X3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfQ09OVFJPTCwKKwkJCSAgICAgIHJjNl9t YXNrIHwKKwkJCSAgICAgIEdFTjZfUkNfQ1RMX0VJX01PREUoMSkgfAorCQkJICAgICAgR0VONl9S Q19DVExfSFdfRU5BQkxFKTsKKworCXJjNnZpZHMgPSAwOworCXJldCA9IHNhbmR5YnJpZGdlX3Bj b2RlX3JlYWQoaTkxNSwgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMsCisJCQkJICAgICAmcmM2dmlk cywgTlVMTCk7CisJaWYgKElTX0dFTihpOTE1LCA2KSAmJiByZXQpIHsKKwkJRFJNX0RFQlVHX0RS SVZFUigiQ291bGRuJ3QgY2hlY2sgZm9yIEJJT1Mgd29ya2Fyb3VuZFxuIik7CisJfSBlbHNlIGlm IChJU19HRU4oaTkxNSwgNikgJiYgKEdFTjZfREVDT0RFX1JDNl9WSUQocmM2dmlkcyAmIDB4ZmYp IDwgNDUwKSkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJZb3Ugc2hvdWxkIHVwZGF0ZSB5b3VyIEJJ T1MuIENvcnJlY3RpbmcgbWluaW11bSByYzYgdm9sdGFnZSAoJWRtVi0+JWRtVilcbiIsCisJCQkJ IEdFTjZfREVDT0RFX1JDNl9WSUQocmM2dmlkcyAmIDB4ZmYpLCA0NTApOworCQlyYzZ2aWRzICY9 IDB4ZmZmZjAwOworCQlyYzZ2aWRzIHw9IEdFTjZfRU5DT0RFX1JDNl9WSUQoNDUwKTsKKwkJcmV0 ID0gc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoaTkxNSwgR0VONl9QQ09ERV9XUklURV9SQzZWSURT LCByYzZ2aWRzKTsKKwkJaWYgKHJldCkKKwkJCURSTV9FUlJPUigiQ291bGRuJ3QgZml4IGluY29y cmVjdCByYzYgdm9sdGFnZVxuIik7CisJfQorfQorCisvKiBDaGVjayB0aGF0IHRoZSBwY2JyIGFk ZHJlc3MgaXMgbm90IGVtcHR5LiAqLworc3RhdGljIHZvaWQgY2h2X3JjNl9pbml0KHN0cnVjdCBp bnRlbF9yYzYgKnJjNikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSByYzZfdG9f dW5jb3JlKHJjNik7CisJcmVzb3VyY2Vfc2l6ZV90IHBjdHhfcGFkZHIsIHBhZGRyOworCXJlc291 cmNlX3NpemVfdCBwY3R4X3NpemUgPSAzMiAqIFNaXzFLOworCXUzMiBwY2JyOworCisJcGNiciA9 IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgVkxWX1BDQlIpOworCWlmICgocGNiciA+PiBWTFZf UENCUl9BRERSX1NISUZUKSA9PSAwKSB7CisJCURSTV9ERUJVR19EUklWRVIoIkJJT1MgZGlkbid0 IHNldCB1cCBQQ0JSLCBmaXhpbmcgdXBcbiIpOworCQlwYWRkciA9IHJjNl90b19pOTE1KHJjNikt PmRzbS5lbmQgKyAxIC0gcGN0eF9zaXplOworCQlHRU1fQlVHX09OKHBhZGRyID4gVTMyX01BWCk7 CisKKwkJcGN0eF9wYWRkciA9IChwYWRkciAmIH40MDk1KTsKKwkJaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgVkxWX1BDQlIsIHBjdHhfcGFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgdmx2 X3JjNl9pbml0KHN0cnVjdCBpbnRlbF9yYzYgKnJjNikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHJjNl90b19pOTE1KHJjNik7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gcmM2X3RvX3VuY29yZShyYzYpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpw Y3R4OworCXJlc291cmNlX3NpemVfdCBwY3R4X3BhZGRyOworCXJlc291cmNlX3NpemVfdCBwY3R4 X3NpemUgPSAyNCAqIFNaXzFLOworCXUzMiBwY2JyOworCisJcGNiciA9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgVkxWX1BDQlIpOworCWlmIChwY2JyKSB7CisJCS8qIEJJT1Mgc2V0IGl0IHVw IGFscmVhZHksIGdyYWIgdGhlIHByZS1hbGxvYydkIHNwYWNlICovCisJCXJlc291cmNlX3NpemVf dCBwY2JyX29mZnNldDsKKworCQlwY2JyX29mZnNldCA9IChwY2JyICYgfjQwOTUpIC0gaTkxNS0+ ZHNtLnN0YXJ0OworCQlwY3R4ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW5fZm9yX3By ZWFsbG9jYXRlZChpOTE1LAorCQkJCQkJCQkgICAgICBwY2JyX29mZnNldCwKKwkJCQkJCQkJICAg ICAgSTkxNV9HVFRfT0ZGU0VUX05PTkUsCisJCQkJCQkJCSAgICAgIHBjdHhfc2l6ZSk7CisJCWdv dG8gb3V0OworCX0KKworCURSTV9ERUJVR19EUklWRVIoIkJJT1MgZGlkbid0IHNldCB1cCBQQ0JS LCBmaXhpbmcgdXBcbiIpOworCisJLyoKKwkgKiBGcm9tIHRoZSBHdW5pdCByZWdpc3RlciBIQVM6 CisJICogVGhlIEdmeCBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gcHJvZ3JhbSB0aGlzIHJlZ2lzdGVy IGFuZCBlbnN1cmUKKwkgKiBwcm9wZXIgYWxsb2NhdGlvbiB3aXRoaW4gR2Z4IHN0b2xlbiBtZW1v cnkuICBGb3IgZXhhbXBsZSwgdGhpcworCSAqIHJlZ2lzdGVyIHNob3VsZCBiZSBwcm9ncmFtbWVk IHN1Y2ggdGhhbiB0aGUgUENCUiByYW5nZSBkb2VzIG5vdAorCSAqIG92ZXJsYXAgd2l0aCBvdGhl ciByYW5nZXMsIHN1Y2ggYXMgdGhlIGZyYW1lIGJ1ZmZlciwgcHJvdGVjdGVkCisJICogbWVtb3J5 LCBvciBhbnkgb3RoZXIgcmVsZXZhbnQgcmFuZ2VzLgorCSAqLworCXBjdHggPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3N0b2xlbihpOTE1LCBwY3R4X3NpemUpOworCWlmICghcGN0eCkgeworCQlE Uk1fREVCVUcoIm5vdCBlbm91Z2ggc3RvbGVuIHNwYWNlIGZvciBQQ1RYLCBkaXNhYmxpbmdcbiIp OworCQlnb3RvIG91dDsKKwl9CisKKwlHRU1fQlVHX09OKHJhbmdlX292ZXJmbG93c190KHU2NCwK KwkJCQkgICAgIGk5MTUtPmRzbS5zdGFydCwKKwkJCQkgICAgIHBjdHgtPnN0b2xlbi0+c3RhcnQs CisJCQkJICAgICBVMzJfTUFYKSk7CisJcGN0eF9wYWRkciA9IGk5MTUtPmRzbS5zdGFydCArIHBj dHgtPnN0b2xlbi0+c3RhcnQ7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVkxWX1BDQlIs IHBjdHhfcGFkZHIpOworCitvdXQ6CisJcmM2LT5wY3R4ID0gcGN0eDsKK30KKworc3RhdGljIHZv aWQgY2h2X3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQoreworCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9IHJjNl90b191bmNvcmUocmM2KTsKKwlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisKKwkvKiAgRGlzYWJs ZSBSQyBzdGF0ZXMuICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19D T05UUk9MLCAwKTsKKworCS8qIDJhOiBQcm9ncmFtIFJDNiB0aHJlc2hvbGRzLiovCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwKKwkJCSAgICAgIEdFTjZfUkM2X1dBS0VfUkFURV9MSU1J VCwgNDAgPDwgMTYpOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIC8qIDEyNTAwICog MTI4MG5zICovCisJCQkgICAgICBHRU42X1JDX0VWQUxVQVRJT05fSU5URVJWQUwsIDEyNTAwMCk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgLyogMjUgKiAxMjgwbnMgKi8KKwkJCSAg ICAgIEdFTjZfUkNfSURMRV9IWVNURVJTSVMsIDI1KTsKKworCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIHJjNl90b19ndChyYzYpLT5pOTE1LCBpZCkKKwkJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9fYmFzZSksCisJCQkJICAgICAgMTApOwor CWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfU0xFRVAsIDApOworCisJLyog VE8gdGhyZXNob2xkIHNldCB0byA1MDAgdXMgKCAweDE4NiAqIDEuMjggdXMpICovCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQzZfVEhSRVNIT0xELCAweDE4Nik7CisKKwkv KiBBbGxvd3MgUkM2IHJlc2lkZW5jeSBjb3VudGVyIHRvIHdvcmsgKi8KKwlpbnRlbF91bmNvcmVf d3JpdGVfZncodW5jb3JlLCBWTFZfQ09VTlRFUl9DT05UUk9MLAorCQkJICAgICAgX01BU0tFRF9C SVRfRU5BQkxFKFZMVl9DT1VOVF9SQU5HRV9ISUdIIHwKKwkJCQkJCSBWTFZfTUVESUFfUkM2X0NP VU5UX0VOIHwKKwkJCQkJCSBWTFZfUkVOREVSX1JDNl9DT1VOVF9FTikpOworCisJLyogMzogRW5h YmxlIFJDNiAqLworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfQ09OVFJP TCwgR0VON19SQ19DVExfVE9fTU9ERSk7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9yYzZfZW5hYmxl KHN0cnVjdCBpbnRlbF9yYzYgKnJjNikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUg PSByYzZfdG9fdW5jb3JlKHJjNik7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCisJLyogIERpc2FibGUgUkMgc3RhdGVzLiAqLwor CWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfQ09OVFJPTCwgMCk7CisKKwlp bnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQsIDB4 MDAyODAwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfRVZBTFVB VElPTl9JTlRFUlZBTCwgMTI1MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBH RU42X1JDX0lETEVfSFlTVEVSU0lTLCAyNSk7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBy YzZfdG9fZ3QocmM2KS0+aTkxNSwgaWQpCisJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUs CisJCQkJICAgICAgUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9fYmFzZSksIDEwKTsKKworCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkM2X1RIUkVTSE9MRCwgMHg1NTcpOwor CisJLyogQWxsb3dzIFJDNiByZXNpZGVuY3kgY291bnRlciB0byB3b3JrICovCisJaW50ZWxfdW5j b3JlX3dyaXRlX2Z3KHVuY29yZSwgVkxWX0NPVU5URVJfQ09OVFJPTCwKKwkJCSAgICAgIF9NQVNL RURfQklUX0VOQUJMRShWTFZfQ09VTlRfUkFOR0VfSElHSCB8CisJCQkJCQkgVkxWX01FRElBX1JD MF9DT1VOVF9FTiB8CisJCQkJCQkgVkxWX1JFTkRFUl9SQzBfQ09VTlRfRU4gfAorCQkJCQkJIFZM Vl9NRURJQV9SQzZfQ09VTlRfRU4gfAorCQkJCQkJIFZMVl9SRU5ERVJfUkM2X0NPVU5UX0VOKSk7 CisKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX0NPTlRST0wsCisJCQkg ICAgICBHRU43X1JDX0NUTF9UT19NT0RFIHwgVkxWX1JDX0NUTF9DVFhfUlNUX1BBUkFMTEVMKTsK K30KKwordm9pZCBpbnRlbF9yYzZfaW5pdChzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSByYzZfdG9faTkxNShyYzYpOworCisJaWYgKElT X0NIRVJSWVZJRVcoaTkxNSkpCisJCWNodl9yYzZfaW5pdChyYzYpOworCWVsc2UgaWYgKElTX1ZB TExFWVZJRVcoaTkxNSkpCisJCXZsdl9yYzZfaW5pdChyYzYpOworfQorCitzdGF0aWMgYm9vbCBi eHRfY2hlY2tfYmlvc19yYzZfc2V0dXAoc3RydWN0IGludGVsX3JjNiAqcmM2KQoreworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJjNl90b191bmNvcmUocmM2KTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJjNl90b19pOTE1KHJjNik7CisJdTMyIHJjNl9jdHhfYmFz ZSwgcmNfY3RsLCByY19zd190YXJnZXQ7CisJYm9vbCBlbmFibGVfcmM2ID0gdHJ1ZTsKKworCXJj X2N0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SQ19DT05UUk9MKTsKKwlyY19z d190YXJnZXQgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjZfUkNfU1RBVEUpOworCXJj X3N3X3RhcmdldCAmPSBSQ19TV19UQVJHRVRfU1RBVEVfTUFTSzsKKwlyY19zd190YXJnZXQgPj49 IFJDX1NXX1RBUkdFVF9TVEFURV9TSElGVDsKKwlEUk1fREVCVUdfRFJJVkVSKCJCSU9TIGVuYWJs ZWQgUkMgc3RhdGVzOiAiCisJCQkgIkhXX0NUUkwgJXMgSFdfUkM2ICVzIFNXX1RBUkdFVF9TVEFU RSAleFxuIiwKKwkJCSBvbm9mZihyY19jdGwgJiBHRU42X1JDX0NUTF9IV19FTkFCTEUpLAorCQkJ IG9ub2ZmKHJjX2N0bCAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUpLAorCQkJIHJjX3N3X3Rhcmdl dCk7CisKKwlpZiAoIShpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDNl9MT0NBVElPTikgJiBS QzZfQ1RYX0lOX0RSQU0pKSB7CisJCURSTV9ERUJVR19EUklWRVIoIlJDNiBCYXNlIGxvY2F0aW9u IG5vdCBzZXQgcHJvcGVybHkuXG4iKTsKKwkJZW5hYmxlX3JjNiA9IGZhbHNlOworCX0KKworCS8q CisJICogVGhlIGV4YWN0IGNvbnRleHQgc2l6ZSBpcyBub3Qga25vd24gZm9yIEJYVCwgc28gYXNz dW1lIGEgcGFnZSBzaXplCisJICogZm9yIHRoaXMgY2hlY2suCisJICovCisJcmM2X2N0eF9iYXNl ID0KKwkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQzZfQ1RYX0JBU0UpICYgUkM2X0NUWF9C QVNFX01BU0s7CisJaWYgKCEocmM2X2N0eF9iYXNlID49IGk5MTUtPmRzbV9yZXNlcnZlZC5zdGFy dCAmJgorCSAgICAgIHJjNl9jdHhfYmFzZSArIFBBR0VfU0laRSA8IGk5MTUtPmRzbV9yZXNlcnZl ZC5lbmQpKSB7CisJCURSTV9ERUJVR19EUklWRVIoIlJDNiBCYXNlIGFkZHJlc3Mgbm90IGFzIGV4 cGVjdGVkLlxuIik7CisJCWVuYWJsZV9yYzYgPSBmYWxzZTsKKwl9CisKKwlpZiAoISgoaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBQV1JDVFhfTUFYQ05UX1JDU1VOSVQpICYgSURMRV9USU1FX01B U0spID4gMSAmJgorCSAgICAgIChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBXUkNUWF9NQVhD TlRfVkNTVU5JVDApICYgSURMRV9USU1FX01BU0spID4gMSAmJgorCSAgICAgIChpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIFBXUkNUWF9NQVhDTlRfQkNTVU5JVCkgJiBJRExFX1RJTUVfTUFTSykg PiAxICYmCisJICAgICAgKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUFdSQ1RYX01BWENOVF9W RUNTVU5JVCkgJiBJRExFX1RJTUVfTUFTSykgPiAxKSkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJF bmdpbmUgSWRsZSB3YWl0IHRpbWUgbm90IHNldCBwcm9wZXJseS5cbiIpOworCQllbmFibGVfcmM2 ID0gZmFsc2U7CisJfQorCisJaWYgKCFpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfUFVT SEJVU19DT05UUk9MKSB8fAorCSAgICAhaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X1BV U0hCVVNfRU5BQkxFKSB8fAorCSAgICAhaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X1BV U0hCVVNfU0hJRlQpKSB7CisJCURSTV9ERUJVR19EUklWRVIoIlB1c2hidXMgbm90IHNldHVwIHBy b3Blcmx5LlxuIik7CisJCWVuYWJsZV9yYzYgPSBmYWxzZTsKKwl9CisKKwlpZiAoIWludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgR0VONl9HRlhQQVVTRSkpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigi R0ZYIHBhdXNlIG5vdCBzZXR1cCBwcm9wZXJseS5cbiIpOworCQllbmFibGVfcmM2ID0gZmFsc2U7 CisJfQorCisJaWYgKCFpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfTUlTQ19DVFJMMCkp IHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiR1BNIGNvbnRyb2wgbm90IHNldHVwIHByb3Blcmx5Llxu Iik7CisJCWVuYWJsZV9yYzYgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZW5hYmxlX3JjNjsKK30K Kwordm9pZCBpbnRlbF9yYzZfZW5hYmxlKHN0cnVjdCBpbnRlbF9yYzYgKnJjNikKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJjNl90b19pOTE1KHJjNik7CisJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcmM2X3RvX3VuY29yZShyYzYpOworCisJaWYgKElTX0dFTjlf TFAoaTkxNSkgJiYgIWJ4dF9jaGVja19iaW9zX3JjNl9zZXR1cChyYzYpKSB7CisJCURSTV9JTkZP KCJSQzYgYW5kIHBvd2Vyc2F2aW5nIGRpc2FibGVkIGJ5IEJJT1NcbiIpOworCQlwbV9ydW50aW1l X2dldCgmaTkxNS0+ZHJtLnBkZXYtPmRldik7CisJCXJldHVybjsKKwl9CisKKwlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCisJaWYgKElTX0NIRVJS WVZJRVcoaTkxNSkpCisJCWNodl9yYzZfZW5hYmxlKHJjNik7CisJZWxzZSBpZiAoSVNfVkFMTEVZ VklFVyhpOTE1KSkKKwkJdmx2X3JjNl9lbmFibGUocmM2KTsKKwllbHNlIGlmIChJTlRFTF9HRU4o aTkxNSkgPj0gMTEpCisJCWdlbjExX3JjNl9lbmFibGUocmM2KTsKKwllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOSkKKwkJZ2VuOV9yYzZfZW5hYmxlKHJjNik7CisJZWxzZSBpZiAoSVNfQlJP QURXRUxMKGk5MTUpKQorCQlnZW44X3JjNl9lbmFibGUocmM2KTsKKwllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gNikKKwkJZ2VuNl9yYzZfZW5hYmxlKHJjNik7CisKKwlpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX3B1dCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCisJcmM2LT5lbmFibGVkID0g dHJ1ZTsKK30KKwordm9pZCBpbnRlbF9yYzZfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSByYzZfdG9faTkxNShyYzYpOwor CXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJjNl90b191bmNvcmUocmM2KTsKKworCWlm IChJTlRFTF9HRU4oaTkxNSkgPCA2KQorCQlyZXR1cm47CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX2dldCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1 bmNvcmUsIEdFTjZfUkNfQ09OVFJPTCwgMCk7CisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQor CQlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU45X1BHX0VOQUJMRSwgMCk7CisJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKKworCXJjNi0+ ZW5hYmxlZCA9IGZhbHNlOworfQorCit2b2lkIGludGVsX3JjNl9maW5pKHN0cnVjdCBpbnRlbF9y YzYgKnJjNikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcGN0eDsKKworCXBjdHgg PSBmZXRjaF9hbmRfemVybygmcmM2LT5wY3R4KTsKKwlpZiAocGN0eCkKKwkJaTkxNV9nZW1fb2Jq ZWN0X3B1dChwY3R4KTsKK30KKworc3RhdGljIHU2NCB2bHZfcmVzaWRlbmN5X3JhdyhzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUsIGNvbnN0IGk5MTVfcmVnX3QgcmVnKQoreworCXUzMiBsb3dl ciwgdXBwZXIsIHRtcDsKKwlpbnQgbG9vcCA9IDI7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBh Y2Nlc3NlZCBkbyBub3QgbmVlZCBmb3JjZXdha2UuIFdlIGJvcnJvdworCSAqIHVuY29yZSBsb2Nr IHRvIHByZXZlbnQgY29uY3VycmVudCBhY2Nlc3MgdG8gcmFuZ2UgcmVnLgorCSAqLworCWxvY2tk ZXBfYXNzZXJ0X2hlbGQoJnVuY29yZS0+bG9jayk7CisKKwkvKgorCSAqIHZsdiBhbmQgY2h2IHJl c2lkZW5jeSBjb3VudGVycyBhcmUgNDAgYml0cyBpbiB3aWR0aC4KKwkgKiBXaXRoIGEgY29udHJv bCBiaXQsIHdlIGNhbiBjaG9vc2UgYmV0d2VlbiB1cHBlciBvciBsb3dlcgorCSAqIDMyYml0IHdp bmRvdyBpbnRvIHRoaXMgY291bnRlci4KKwkgKgorCSAqIEFsdGhvdWdoIHdlIGFsd2F5cyB1c2Ug dGhlIGNvdW50ZXIgaW4gaGlnaC1yYW5nZSBtb2RlIGVsc2V3aGVyZSwKKwkgKiB1c2Vyc3BhY2Ug bWF5IGF0dGVtcHQgdG8gcmVhZCB0aGUgdmFsdWUgYmVmb3JlIHJjNiBpcyBpbml0aWFsaXNlZCwK KwkgKiBiZWZvcmUgd2UgaGF2ZSBzZXQgdGhlIGRlZmF1bHQgVkxWX0NPVU5URVJfQ09OVFJPTCB2 YWx1ZS4gU28gYWx3YXlzCisJICogc2V0IHRoZSBoaWdoIGJpdCB0byBiZSBzYWZlLgorCSAqLwor CWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIFZMVl9DT1VOVEVSX0NPTlRST0wsCisJCQkg ICAgICBfTUFTS0VEX0JJVF9FTkFCTEUoVkxWX0NPVU5UX1JBTkdFX0hJR0gpKTsKKwl1cHBlciA9 IGludGVsX3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgcmVnKTsKKwlkbyB7CisJCXRtcCA9IHVwcGVy OworCisJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIFZMVl9DT1VOVEVSX0NPTlRST0ws CisJCQkJICAgICAgX01BU0tFRF9CSVRfRElTQUJMRShWTFZfQ09VTlRfUkFOR0VfSElHSCkpOwor CQlsb3dlciA9IGludGVsX3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgcmVnKTsKKworCQlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBWTFZfQ09VTlRFUl9DT05UUk9MLAorCQkJCSAgICAgIF9N QVNLRURfQklUX0VOQUJMRShWTFZfQ09VTlRfUkFOR0VfSElHSCkpOworCQl1cHBlciA9IGludGVs X3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgcmVnKTsKKwl9IHdoaWxlICh1cHBlciAhPSB0bXAgJiYg LS1sb29wKTsKKworCS8qCisJICogRXZlcnl3aGVyZSBlbHNlIHdlIGFsd2F5cyB1c2UgVkxWX0NP VU5URVJfQ09OVFJPTCB3aXRoIHRoZQorCSAqIFZMVl9DT1VOVF9SQU5HRV9ISUdIIGJpdCBzZXQg LSBzbyBpdCBpcyBzYWZlIHRvIGxlYXZlIGl0IHNldAorCSAqIG5vdy4KKwkgKi8KKworCXJldHVy biBsb3dlciB8ICh1NjQpdXBwZXIgPDwgODsKK30KKwordTY0IGludGVsX3JjNl9yZXNpZGVuY3lf bnMoc3RydWN0IGludGVsX3JjNiAqcmM2LCBjb25zdCBpOTE1X3JlZ190IHJlZykKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJjNl90b19pOTE1KHJjNik7CisJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcmM2X3RvX3VuY29yZShyYzYpOworCXU2NCB0aW1lX2h3LCBw cmV2X2h3LCBvdmVyZmxvd19odzsKKwl1bnNpZ25lZCBpbnQgZndfZG9tYWluczsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpOworCXUzMiBtdWwsIGRpdjsKKworCWlmICgh cmM2LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogU3RvcmUgcHJldmlvdXMgaHcg Y291bnRlciB2YWx1ZXMgZm9yIGNvdW50ZXIgd3JhcC1hcm91bmQgaGFuZGxpbmcuCisJICoKKwkg KiBUaGVyZSBhcmUgb25seSBmb3VyIGludGVyZXN0aW5nIHJlZ2lzdGVycyBhbmQgdGhleSBsaXZl IG5leHQgdG8gZWFjaAorCSAqIG90aGVyIHNvIHdlIGNhbiB1c2UgdGhlIHJlbGF0aXZlIGFkZHJl c3MsIGNvbXBhcmVkIHRvIHRoZSBzbWFsbGVzdAorCSAqIG9uZSBhcyB0aGUgaW5kZXggaW50byBk cml2ZXIgc3RvcmFnZS4KKwkgKi8KKwlpID0gKGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykgLQor CSAgICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VONl9HVF9HRlhfUkM2X0xPQ0tFRCkpIC8gc2l6 ZW9mKHUzMik7CisJaWYgKFdBUk5fT05fT05DRShpID49IEFSUkFZX1NJWkUocmM2LT5jdXJfcmVz aWRlbmN5KSkpCisJCXJldHVybiAwOworCisJZndfZG9tYWlucyA9IGludGVsX3VuY29yZV9mb3Jj ZXdha2VfZm9yX3JlZyh1bmNvcmUsIHJlZywgRldfUkVHX1JFQUQpOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnVuY29yZS0+bG9jaywgZmxhZ3MpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0 X19sb2NrZWQodW5jb3JlLCBmd19kb21haW5zKTsKKworCS8qIE9uIFZMViBhbmQgQ0hWLCByZXNp ZGVuY3kgdGltZSBpcyBpbiBDWiB1bml0cyByYXRoZXIgdGhhbiAxLjI4dXMgKi8KKwlpZiAoSVNf VkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKSB7CisJCW11bCA9IDEwMDAw MDA7CisJCWRpdiA9IGk5MTUtPmN6Y2xrX2ZyZXE7CisJCW92ZXJmbG93X2h3ID0gQklUX1VMTCg0 MCk7CisJCXRpbWVfaHcgPSB2bHZfcmVzaWRlbmN5X3Jhdyh1bmNvcmUsIHJlZyk7CisJfSBlbHNl IHsKKwkJLyogODMzLjMzbnMgdW5pdHMgb24gR2VuOUxQLCAxLjI4dXMgZWxzZXdoZXJlLiAqLwor CQlpZiAoSVNfR0VOOV9MUChpOTE1KSkgeworCQkJbXVsID0gMTAwMDA7CisJCQlkaXYgPSAxMjsK KwkJfSBlbHNlIHsKKwkJCW11bCA9IDEyODA7CisJCQlkaXYgPSAxOworCQl9CisKKwkJb3ZlcmZs b3dfaHcgPSBCSVRfVUxMKDMyKTsKKwkJdGltZV9odyA9IGludGVsX3VuY29yZV9yZWFkX2Z3KHVu Y29yZSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvdW50ZXIgd3JhcCBoYW5kbGluZy4KKwkgKgor CSAqIEJ1dCByZWx5aW5nIG9uIGEgc3VmZmljaWVudCBmcmVxdWVuY3kgb2YgcXVlcmllcyBvdGhl cndpc2UgY291bnRlcnMKKwkgKiBjYW4gc3RpbGwgd3JhcC4KKwkgKi8KKwlwcmV2X2h3ID0gcmM2 LT5wcmV2X2h3X3Jlc2lkZW5jeVtpXTsKKwlyYzYtPnByZXZfaHdfcmVzaWRlbmN5W2ldID0gdGlt ZV9odzsKKworCS8qIFJDNiBkZWx0YSBmcm9tIGxhc3Qgc2FtcGxlLiAqLworCWlmICh0aW1lX2h3 ID49IHByZXZfaHcpCisJCXRpbWVfaHcgLT0gcHJldl9odzsKKwllbHNlCisJCXRpbWVfaHcgKz0g b3ZlcmZsb3dfaHcgLSBwcmV2X2h3OworCisJLyogQWRkIGRlbHRhIHRvIFJDNiBleHRlbmRlZCBy YXcgZHJpdmVyIGNvcHkuICovCisJdGltZV9odyArPSByYzYtPmN1cl9yZXNpZGVuY3lbaV07CisJ cmM2LT5jdXJfcmVzaWRlbmN5W2ldID0gdGltZV9odzsKKworCWludGVsX3VuY29yZV9mb3JjZXdh a2VfcHV0X19sb2NrZWQodW5jb3JlLCBmd19kb21haW5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZ1bmNvcmUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBtdWxfdTY0X3UzMl9kaXYodGlt ZV9odywgbXVsLCBkaXYpOworfQorCit1NjQgaW50ZWxfcmM2X3Jlc2lkZW5jeV91cyhzdHJ1Y3Qg aW50ZWxfcmM2ICpyYzYsIGk5MTVfcmVnX3QgcmVnKQoreworCXJldHVybiBESVZfUk9VTkRfVVBf VUxMKGludGVsX3JjNl9yZXNpZGVuY3lfbnMocmM2LCByZWcpLCAxMDAwKTsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcmM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jYWE3ZTEwZTkwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yYzYuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u CisgKi8KKworI2lmbmRlZiBJTlRFTF9SQzZfSAorI2RlZmluZSBJTlRFTF9SQzZfSAorCisjaW5j bHVkZSAiaTkxNV9yZWcuaCIKKworc3RydWN0IGludGVsX2VuZ2luZV9jczsKK3N0cnVjdCBpbnRl bF9yYzY7CisKK3ZvaWQgaW50ZWxfcmM2X2luaXQoc3RydWN0IGludGVsX3JjNiAqcmM2KTsKK3Zv aWQgaW50ZWxfcmM2X2Zpbmkoc3RydWN0IGludGVsX3JjNiAqcmM2KTsKKwordm9pZCBpbnRlbF9y YzZfZW5hYmxlKHN0cnVjdCBpbnRlbF9yYzYgKnJjNik7Cit2b2lkIGludGVsX3JjNl9kaXNhYmxl KHN0cnVjdCBpbnRlbF9yYzYgKnJjNik7CisKK3U2NCBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKHN0 cnVjdCBpbnRlbF9yYzYgKnJjNiwgaTkxNV9yZWdfdCByZWcpOwordTY0IGludGVsX3JjNl9yZXNp ZGVuY3lfdXMoc3RydWN0IGludGVsX3JjNiAqcmM2LCBpOTE1X3JlZ190IHJlZyk7CisKKyNlbmRp ZiAvKiBJTlRFTF9SQzZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfcmM2X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzZfdHlw ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM1ZTdlMTVjNmFm ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNl90 eXBlcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisj aWZuZGVmIElOVEVMX1JDNl9UWVBFU19ICisjZGVmaW5lIElOVEVMX1JDNl9UWVBFU19ICisKKyNp bmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNp bmNsdWRlICJpbnRlbF9lbmdpbmVfdHlwZXMuaCIKKworc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3Q7CisKK3N0cnVjdCBpbnRlbF9yYzYgeworCWJvb2wgZW5hYmxlZDsKKworCXU2NCBwcmV2X2h3 X3Jlc2lkZW5jeVs0XTsKKwl1NjQgY3VyX3Jlc2lkZW5jeVs0XTsKKworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpwY3R4OworfTsKKworI2VuZGlmIC8qIElOVEVMX1JDNl9UWVBFU19IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZGIwMjAy OWUzZTU4Li5jOThiYzFhYmI2ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9y aW5nYnVmZmVyLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAj aW5jbHVkZSAiaW50ZWxfY29udGV4dC5oIgogI2luY2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVk ZSAiaW50ZWxfZ3RfaXJxLmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfcG1faXJxLmgiCiAjaW5jbHVk ZSAiaW50ZWxfcmVzZXQuaCIKICNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgogCkBAIC05 ODQsMTMgKzk4NiwxMyBAQCBzdGF0aWMgdTMyICpnZW41X2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKIHN0YXRpYyB2b2lkCiBnZW41X2lycV9lbmFibGUo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewotCWdlbjVfZW5hYmxlX2d0X2lycShl bmdpbmUtPmk5MTUsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKKwlnZW41X2d0X2VuYWJsZV9p cnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwogfQogCiBzdGF0aWMgdm9p ZAogZ2VuNV9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7Ci0J Z2VuNV9kaXNhYmxlX2d0X2lycShlbmdpbmUtPmk5MTUsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNr KTsKKwlnZW41X2d0X2Rpc2FibGVfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9t YXNrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwNTEsMTQgKzEwNTMsMTQgQEAgZ2VuNl9pcnFf ZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkvKiBGbHVzaC9kZWxheSB0 byBlbnN1cmUgdGhlIFJJTkdfSU1SIGlzIGFjdGl2ZSBiZWZvcmUgdGhlIEdUIElNUiAqLwogCUVO R0lORV9QT1NUSU5HX1JFQUQoZW5naW5lLCBSSU5HX0lNUik7CiAKLQlnZW41X2VuYWJsZV9ndF9p cnEoZW5naW5lLT5pOTE1LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7CisJZ2VuNV9ndF9lbmFi bGVfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKIH0KIAogc3RhdGlj IHZvaWQKIGdlbjZfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQog ewogCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLCB+ZW5naW5lLT5pcnFfa2VlcF9tYXNr KTsKLQlnZW41X2Rpc2FibGVfZ3RfaXJxKGVuZ2luZS0+aTkxNSwgZW5naW5lLT5pcnFfZW5hYmxl X21hc2spOworCWdlbjVfZ3RfZGlzYWJsZV9pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5h YmxlX21hc2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTA2OSwxNCArMTA3MSwxNCBAQCBoc3df dmVib3hfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJLyogRmx1 c2gvZGVsYXkgdG8gZW5zdXJlIHRoZSBSSU5HX0lNUiBpcyBhY3RpdmUgYmVmb3JlIHRoZSBHVCBJ TVIgKi8KIAlFTkdJTkVfUE9TVElOR19SRUFEKGVuZ2luZSwgUklOR19JTVIpOwogCi0JZ2VuNl91 bm1hc2tfcG1faXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKKwlnZW42 X2d0X3BtX3VubWFza19pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwog fQogCiBzdGF0aWMgdm9pZAogaHN3X3ZlYm94X2lycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKIHsKIAlFTkdJTkVfV1JJVEUoZW5naW5lLCBSSU5HX0lNUiwgfjApOwot CWdlbjZfbWFza19wbV9pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwor CWdlbjZfZ3RfcG1fbWFza19pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2sp OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ycHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzcyZDcyZDczNTdkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKQEAgLTAsMCArMSwx ODcwIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHly aWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKKyNpbmNsdWRlICJpbnRlbF9ndF9pcnEuaCIKKyNp bmNsdWRlICJpbnRlbF9ndF9wbV9pcnEuaCIKKyNpbmNsdWRlICJpbnRlbF9ycHMuaCIKKyNpbmNs dWRlICJpbnRlbF9zaWRlYmFuZC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3BsYXRmb3JtL3g4Ni9p bnRlbF9pcHMuaCIKKworLyoKKyAqIExvY2sgcHJvdGVjdGluZyBJUFMgcmVsYXRlZCBkYXRhIHN0 cnVjdHVyZXMKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhtY2hkZXZfbG9jayk7CisKK3N0 YXRpYyBzdHJ1Y3QgaW50ZWxfZ3QgKnJwc190b19ndChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZihycHMsIHN0cnVjdCBpbnRlbF9ndCwgcnBzKTsKK30KKwor c3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpycHNfdG9faTkxNShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT5pOTE1OworfQorCitzdGF0aWMg c3RydWN0IGludGVsX3VuY29yZSAqcnBzX3RvX3VuY29yZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMp Cit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT51bmNvcmU7Cit9CisKK3N0YXRpYyB1MzIgcnBz X3BtX3Nhbml0aXplX21hc2soc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgbWFzaykKK3sKKwly ZXR1cm4gbWFzayAmIH5ycHMtPnBtX2ludHJtc2tfbWJ6OworfQorCitzdGF0aWMgdTMyIHJwc19w bV9tYXNrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXUzMiBtYXNrID0gMDsK KworCS8qIFdlIHVzZSBVUF9FSV9FWFBJUkVEIGludGVycnVwdHMgZm9yIGJvdGggdXAvZG93biBp biBtYW51YWwgbW9kZSAqLworCWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJ bWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX0RPV05fVEhSRVNI T0xEIHwgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQ7CisJaWYgKHZhbCA8IHJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0KQorCQltYXNrIHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCB8IEdFTjZfUE1f UlBfVVBfVEhSRVNIT0xEOworCisJbWFzayAmPSBycHMtPnBtX2V2ZW50czsKKworCXJldHVybiBy cHNfcG1fc2FuaXRpemVfbWFzayhycHMsIH5tYXNrKTsKK30KKworc3RhdGljIHZvaWQgcnBzX3Jl c2V0X2VpKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwltZW1zZXQoJnJwcy0+ZWksIDAsIHNp emVvZihycHMtPmVpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJwc19lbmFibGVfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19n dChycHMpOworCisJcnBzX3Jlc2V0X2VpKHJwcyk7CisKKwlpZiAoSVNfVkFMTEVZVklFVyhndC0+ aTkxNSkpCisJCS8qIFdhR3N2UkMwUmVzaWRlbmN5TWV0aG9kOnZsdiAqLworCQlycHMtPnBtX2V2 ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKKwllbHNlCisJCXJwcy0+cG1fZXZlbnRz ID0gKEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEIHwKKwkJCQkgIEdFTjZfUE1fUlBfRE9XTl9USFJF U0hPTEQgfAorCQkJCSAgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpOworCisJc3Bpbl9sb2NrX2ly cSgmZ3QtPmlycV9sb2NrKTsKKwlnZW42X2d0X3BtX2VuYWJsZV9pcnEoZ3QsIHJwcy0+cG1fZXZl bnRzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisKKwlpbnRlbF91bmNvcmVf d3JpdGUoZ3QtPnVuY29yZSwgR0VONl9QTUlOVFJNU0ssCisJCQkgICBycHNfcG1fbWFzayhycHMs IHJwcy0+Y3VyX2ZyZXEpKTsKK30KKworc3RhdGljIHZvaWQgZ2VuNl9ycHNfcmVzZXRfaW50ZXJy dXB0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJZ2VuNl9ndF9wbV9yZXNldF9paXIocnBz X3RvX2d0KHJwcyksIEdFTjZfUE1fUlBTX0VWRU5UUyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjEx X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwl3aGlsZSAo Z2VuMTFfZ3RfcmVzZXRfb25lX2lpcihycHNfdG9fZ3QocnBzKSwgMCwgR0VOMTFfR1RQTSkpCisJ CTsKK30KKworc3RhdGljIHZvaWQgcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0IGludGVsX3Jw cyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCXNw aW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0g MTEpCisJCWdlbjExX3Jwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7CisJZWxzZQorCQlnZW42X3Jw c19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7CisKKwlycHMtPnBtX2lpciA9IDA7CisJc3Bpbl91bmxv Y2tfaXJxKCZndC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBycHNfZGlzYWJsZV9pbnRl cnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g cnBzX3RvX2d0KHJwcyk7CisKKwlycHMtPnBtX2V2ZW50cyA9IDA7CisKKwlpbnRlbF91bmNvcmVf d3JpdGUoZ3QtPnVuY29yZSwgR0VONl9QTUlOVFJNU0ssCisJCQkgICBycHNfcG1fc2FuaXRpemVf bWFzayhycHMsIH4wdSkpOworCisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlnZW42 X2d0X3BtX2Rpc2FibGVfaXJxKGd0LCBHRU42X1BNX1JQU19FVkVOVFMpOworCXNwaW5fdW5sb2Nr X2lycSgmZ3QtPmlycV9sb2NrKTsKKworCWludGVsX3N5bmNocm9uaXplX2lycShndC0+aTkxNSk7 CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIHdpbGwgbm90IGJlIGdlbmVyYXRpbmcgYW55IG1vcmUg d29yaywgZmx1c2ggYW55CisJICogb3V0c3RhbmRpbmcgdGFza3MuIEFzIHdlIGFyZSBjYWxsZWQg b24gdGhlIFJQUyBpZGxlIHBhdGgsCisJICogd2Ugd2lsbCByZXNldCB0aGUgR1BVIHRvIG1pbmlt dW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50CisJICogc3RhdGUgb2YgdGhlIHdvcmtlciBj YW4gYmUgZGlzY2FyZGVkLgorCSAqLworCWNhbmNlbF93b3JrX3N5bmMoJnJwcy0+d29yayk7CisK KwlycHNfcmVzZXRfaW50ZXJydXB0cyhycHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNw YXJhbXMgeworCXUxNiBpOworCXUxNiB0OworCXUxNiBtOworCXUxNiBjOworfSBjcGFyYW1zW10g PSB7CisJeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCisJeyAxLCAxMDY2LCAyOTQsIDI0NDYwIH0s CisJeyAxLCA4MDAsIDI5NCwgMjUxOTIgfSwKKwl7IDAsIDEzMzMsIDI3NiwgMjc2MDUgfSwKKwl7 IDAsIDEwNjYsIDI3NiwgMjc2MDUgfSwKKwl7IDAsIDgwMCwgMjMxLCAyMzc4NCB9LAorfTsKKwor c3RhdGljIHZvaWQgZ2VuNV9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwl1OCBmbWF4LCBmbWlu LCBmc3RhcnQ7CisJdTMyIHJndm1vZGVjdGw7CisJaW50IGNfbSwgaTsKKworCWlmIChpOTE1LT5m c2JfZnJlcSA8PSAzMjAwKQorCQljX20gPSAwOworCWVsc2UgaWYgKGk5MTUtPmZzYl9mcmVxIDw9 IDQ4MDApCisJCWNfbSA9IDE7CisJZWxzZQorCQljX20gPSAyOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoY3BhcmFtcyk7IGkrKykgeworCQlpZiAoY3BhcmFtc1tpXS5pID09IGNfbSAm JiBjcGFyYW1zW2ldLnQgPT0gaTkxNS0+bWVtX2ZyZXEpIHsKKwkJCXJwcy0+aXBzLm0gPSBjcGFy YW1zW2ldLm07CisJCQlycHMtPmlwcy5jID0gY3BhcmFtc1tpXS5jOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RM KTsKKworCS8qIFNldCB1cCBtaW4sIG1heCwgYW5kIGN1ciBmb3IgaW50ZXJydXB0IGhhbmRsaW5n ICovCisJZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1PREVf Rk1BWF9TSElGVDsKKwlmbWluID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNSU5fTUFTSyk7CisJ ZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+PgorCQlNRU1NT0RF X0ZTVEFSVF9TSElGVDsKKwlEUk1fREVCVUdfRFJJVkVSKCJmbWF4OiAlZCwgZm1pbjogJWQsIGZz dGFydDogJWRcbiIsCisJCQkgZm1heCwgZm1pbiwgZnN0YXJ0KTsKKworCXJwcy0+bWluX2ZyZXEg PSAtZnN0YXJ0OworCXJwcy0+bWF4X2ZyZXEgPSAtZm1pbjsKKworCXJwcy0+aWRsZV9mcmVxID0g cnBzLT5taW5fZnJlcTsKKwlycHMtPmN1cl9mcmVxID0gcnBzLT5pZGxlX2ZyZXE7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nCitfX2lwc19jaGlwc2V0X3ZhbChzdHJ1Y3QgaW50ZWxfaXBzICpp cHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0KKwkJcnBzX3RvX3VuY29yZShj b250YWluZXJfb2YoaXBzLCBzdHJ1Y3QgaW50ZWxfcnBzLCBpcHMpKTsKKwl1bnNpZ25lZCBsb25n IG5vdyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyksIGR0OworCXVuc2lnbmVkIGxvbmcgcmVz dWx0OworCXU2NCB0b3RhbCwgZGVsdGE7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZf bG9jayk7CisKKwkvKgorCSAqIFByZXZlbnQgZGl2aXNpb24tYnktemVybyBpZiB3ZSBhcmUgYXNr aW5nIHRvbyBmYXN0LgorCSAqIEFsc28sIHdlIGRvbid0IGdldCBpbnRlcmVzdGluZyByZXN1bHRz IGlmIHdlIGFyZSBwb2xsaW5nCisJICogZmFzdGVyIHRoYW4gb25jZSBpbiAxMG1zLCBzbyBqdXN0 IHJldHVybiB0aGUgc2F2ZWQgdmFsdWUKKwkgKiBpbiBzdWNoIGNhc2VzLgorCSAqLworCWR0ID0g bm93IC0gaXBzLT5sYXN0X3RpbWUxOworCWlmIChkdCA8PSAxMCkKKwkJcmV0dXJuIGlwcy0+Y2hp cHNldF9wb3dlcjsKKworCS8qIEZJWE1FOiBoYW5kbGUgcGVyLWNvdW50ZXIgb3ZlcmZsb3cgKi8K Kwl0b3RhbCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRE1JRUMpOworCXRvdGFsICs9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRERSRUMpOworCXRvdGFsICs9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgQ1NJRUMpOworCisJZGVsdGEgPSB0b3RhbCAtIGlwcy0+bGFzdF9jb3VudDE7 CisKKwlyZXN1bHQgPSBkaXZfdTY0KGRpdl91NjQoaXBzLT5tICogZGVsdGEsIGR0KSArIGlwcy0+ YywgMTApOworCisJaXBzLT5sYXN0X2NvdW50MSA9IHRvdGFsOworCWlwcy0+bGFzdF90aW1lMSA9 IG5vdzsKKworCWlwcy0+Y2hpcHNldF9wb3dlciA9IHJlc3VsdDsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlwc19tY2hfdmFsKHN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSkKK3sKKwl1bnNpZ25lZCBpbnQgbSwgeCwgYjsKKwl1MzIgdHNmczsKKworCXRz ZnMgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFRTRlMpOworCXggPSBpbnRlbF91bmNvcmVf cmVhZDgodW5jb3JlLCBUUjEpOworCisJYiA9IHRzZnMgJiBUU0ZTX0lOVFJfTUFTSzsKKwltID0g KHRzZnMgJiBUU0ZTX1NMT1BFX01BU0spID4+IFRTRlNfU0xPUEVfU0hJRlQ7CisKKwlyZXR1cm4g bSAqIHggLyAxMjcgLSBiOworfQorCitzdGF0aWMgaW50IF9weHZpZF90b192ZCh1OCBweHZpZCkK K3sKKwlpZiAocHh2aWQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocHh2aWQgPj0gOCAmJiBw eHZpZCA8IDMxKQorCQlweHZpZCA9IDMxOworCisJcmV0dXJuIChweHZpZCArIDIpICogMTI1Owor fQorCitzdGF0aWMgdTMyIHB2aWRfdG9fZXh0dmlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LCB1OCBweHZpZCkKK3sKKwljb25zdCBpbnQgdmQgPSBfcHh2aWRfdG9fdmQocHh2aWQpOwor CisJaWYgKElOVEVMX0lORk8oaTkxNSktPmlzX21vYmlsZSkKKwkJcmV0dXJuIG1heCh2ZCAtIDEx MjUsIDApOworCisJcmV0dXJuIHZkOworfQorCitzdGF0aWMgdm9pZCBfX2dlbjVfaXBzX3VwZGF0 ZShzdHJ1Y3QgaW50ZWxfaXBzICppcHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0KKwkJcnBzX3RvX3VuY29yZShjb250YWluZXJfb2YoaXBzLCBzdHJ1Y3QgaW50ZWxfcnBzLCBp cHMpKTsKKwl1NjQgbm93LCBkZWx0YSwgZHQ7CisJdTMyIGNvdW50OworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmbWNoZGV2X2xvY2spOworCisJbm93ID0ga3RpbWVfZ2V0X3Jhd19ucygpOworCWR0 ID0gbm93IC0gaXBzLT5sYXN0X3RpbWUyOworCWRvX2RpdihkdCwgTlNFQ19QRVJfTVNFQyk7CisK KwkvKiBEb24ndCBkaXZpZGUgYnkgMCAqLworCWlmIChkdCA8PSAxMCkKKwkJcmV0dXJuOworCisJ Y291bnQgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdGWEVDKTsKKwlkZWx0YSA9IGNvdW50 IC0gaXBzLT5sYXN0X2NvdW50MjsKKworCWlwcy0+bGFzdF9jb3VudDIgPSBjb3VudDsKKwlpcHMt Pmxhc3RfdGltZTIgPSBub3c7CisKKwkvKiBNb3JlIG1hZ2ljIGNvbnN0YW50cy4uLiAqLworCWlw cy0+Z2Z4X3Bvd2VyID0gZGl2X3U2NChkZWx0YSAqIDExODEsIGR0ICogMTApOworfQorCitzdGF0 aWMgdm9pZCBnZW41X3Jwc191cGRhdGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXNwaW5f bG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlfX2dlbjVfaXBzX3VwZGF0ZSgmcnBzLT5pcHMpOwor CXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworfQorCitzdGF0aWMgYm9vbCBnZW41X3Jw c19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXUxNiByZ3Zzd2N0bDsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKworCXJndnN3Y3RsID0gaW50ZWxfdW5j b3JlX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKKwlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01E X1NUUykgeworCQlEUk1fREVCVUcoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsK KwkJcmV0dXJuIGZhbHNlOyAvKiBzdGlsbCBidXN5IHdpdGggYW5vdGhlciBjb21tYW5kICovCisJ fQorCisJdmFsID0gLXZhbDsKKworCXJndnN3Y3RsID0KKwkJKE1FTUNUTF9DTURfQ0hGUkVRIDw8 IE1FTUNUTF9DTURfU0hJRlQpIHwKKwkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfAorCQlN RU1DVExfU0ZDQVZNOworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJn dnN3Y3RsKTsKKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 CisKKwlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsKKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1 bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IHVuc2lnbmVkIGxvbmcgaW50ZWxfcHhmcmVxKHUzMiB2aWRmcmVxKQoreworCWludCBkaXYgPSAo dmlkZnJlcSAmIDB4M2YwMDAwKSA+PiAxNjsKKwlpbnQgcG9zdCA9ICh2aWRmcmVxICYgMHgzMDAw KSA+PiAxMjsKKwlpbnQgcHJlID0gKHZpZGZyZXEgJiAweDcpOworCisJaWYgKCFwcmUpCisJCXJl dHVybiAwOworCisJcmV0dXJuIGRpdiAqIDEzMzMzMyAvIChwcmUgPDwgcG9zdCk7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9lbW9uKHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkK K3sKKwl1OCBweHdbMTZdOworCWludCBpOworCisJLyogRGlzYWJsZSB0byBwcm9ncmFtICovCisJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUNSLCAwKTsKKwlpbnRlbF91bmNvcmVfcG9zdGlu Z19yZWFkKHVuY29yZSwgRUNSKTsKKworCS8qIFByb2dyYW0gZW5lcmd5IHdlaWdodHMgZm9yIHZh cmlvdXMgZXZlbnRzICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgU0RFVywgMHgxNTA0 MGQwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcwLCAweDAwN2YwMDAwKTsK KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBDU0lFVzEsIDB4MWUyMjAwMDQpOworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIENTSUVXMiwgMHgwNDAwMDAwNCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgNTsgaSsrKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBQRVcoaSksIDApOwor CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIERF VyhpKSwgMCk7CisKKwkvKiBQcm9ncmFtIFAtc3RhdGUgd2VpZ2h0cyB0byBhY2NvdW50IGZvciBm cmVxdWVuY3kgcG93ZXIgYWRqdXN0bWVudCAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7 CisJCXUzMiBweHZpZGZyZXEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoaSkp OworCQl1bnNpZ25lZCBpbnQgZnJlcSA9IGludGVsX3B4ZnJlcShweHZpZGZyZXEpOworCQl1bnNp Z25lZCBpbnQgdmlkID0KKwkJCShweHZpZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+IFBYVkZS RVFfUFhfU0hJRlQ7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gdmlkICogdmlkICog ZnJlcSAvIDEwMDAgKiAyNTU7CisJCXZhbCAvPSAxMjcgKiAxMjcgKiA5MDA7CisKKwkJcHh3W2ld ID0gdmFsOworCX0KKwkvKiBSZW5kZXIgc3RhbmRieSBzdGF0ZXMgZ2V0IDAgd2VpZ2h0ICovCisJ cHh3WzE0XSA9IDA7CisJcHh3WzE1XSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFBYVyhpKSwKKwkJCQkgICBweHdbaSAqIDQg KyAwXSA8PCAyNCB8CisJCQkJICAgcHh3W2kgKiA0ICsgMV0gPDwgMTYgfAorCQkJCSAgIHB4d1tp ICogNCArIDJdIDw8ICA4IHwKKwkJCQkgICBweHdbaSAqIDQgKyAzXSA8PCAgMCk7CisJfQorCisJ LyogQWRqdXN0IG1hZ2ljIHJlZ3MgdG8gbWFnaWMgdmFsdWVzIChtb3JlIGV4cGVyaW1lbnRhbCBy ZXN1bHRzKSAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIE9HVzAsIDApOworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIE9HVzEsIDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsIEVHMCwgMHgwMDAwN2YwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUcxLCAw eDAwMDAwMDBlKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzIsIDB4MDAwZTAwMDAp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHMywgMHg2ODAwMDMwMCk7CisJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgRUc0LCAweDQyMDAwMDAwKTsKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBFRzUsIDB4MDAxNDAwMzEpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IEVHNiwgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUc3LCAwKTsKKworCWZvciAo aSA9IDA7IGkgPCA4OyBpKyspCisJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFBYV0woaSks IDApOworCisJLyogRW5hYmxlIFBNT04gKyBzZWxlY3QgZXZlbnRzICovCisJaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwgRUNSLCAweDgwMDAwMDE5KTsKKworCXJldHVybiBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIExDRlVTRTAyKSAmIExDRlVTRV9ISVZfTUFTSzsKK30KKworc3RhdGljIGJv b2wgZ2VuNV9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50 ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTggZnN0YXJ0LCB2c3Rh cnQ7CisJdTMyIHJndm1vZGVjdGw7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisK KwlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RMKTsKKwor CS8qIEVuYWJsZSB0ZW1wIHJlcG9ydGluZyAqLworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29y ZSwgUE1NSVNDLAorCQkJICAgICBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29yZSwgUE1NSVNDKSB8 IE1DUFBDRV9FTik7CisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBUU0MxLAorCQkJICAg ICBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29yZSwgVFNDMSkgfCBUU0UpOworCisJLyogMTAwbXMg UkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBS Q1VQRUksIDEwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNETkVJLCAxMDAw MDApOworCisJLyogU2V0IG1heC9taW4gdGhyZXNob2xkcyB0byA5MG1zIGFuZCA4MG1zIHJlc3Bl Y3RpdmVseSAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1BWEFWRywgOTAwMDAp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1JTkFWRywgODAwMDApOworCisJaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSUhZU1QsIDEpOworCisJLyogU2V0IHVwIG1pbiwg bWF4LCBhbmQgY3VyIGZvciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwlmc3RhcnQgPSAocmd2bW9k ZWN0bCAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+CisJCU1FTU1PREVfRlNUQVJUX1NISUZUOwor CisJdnN0YXJ0ID0gKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUFhWRlJFUShmc3RhcnQpKSAm CisJCSAgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NISUZUOworCisJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwKKwkJCSAgIE1FTUlOVFJFTiwKKwkJCSAgIE1FTUlOVF9DWF9TVVBS X0VOIHwgTUVNSU5UX0VWQUxfQ0hHX0VOKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IFZJRFNUQVJULCB2c3RhcnQpOworCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQodW5jb3JlLCBW SURTVEFSVCk7CisKKwlyZ3Ztb2RlY3RsIHw9IE1FTU1PREVfU1dNT0RFX0VOOworCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIE1FTU1PREVDVEwsIHJndm1vZGVjdGwpOworCisJaWYgKHdhaXRf Zm9yX2F0b21pYygoaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1TV0NUTCkgJgorCQkJICAg ICBNRU1DVExfQ01EX1NUUykgPT0gMCwgMTApKQorCQlEUk1fRVJST1IoInN0dWNrIHRyeWluZyB0 byBjaGFuZ2UgcGVyZiBtb2RlXG4iKTsKKwltZGVsYXkoMSk7CisKKwlnZW41X3Jwc19zZXQocnBz LCBycHMtPmN1cl9mcmVxKTsKKworCXJwcy0+aXBzLmxhc3RfY291bnQxID0gaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBETUlFQyk7CisJcnBzLT5pcHMubGFzdF9jb3VudDEgKz0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBERFJFQyk7CisJcnBzLT5pcHMubGFzdF9jb3VudDEgKz0gaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7CisJcnBzLT5pcHMubGFzdF90aW1lMSA9IGppZmZp ZXNfdG9fbXNlY3MoamlmZmllcyk7CisKKwlycHMtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgR0ZYRUMpOworCXJwcy0+aXBzLmxhc3RfdGltZTIgPSBrdGltZV9n ZXRfcmF3X25zKCk7CisKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCXJwcy0+ aXBzLmNvcnIgPSBpbml0X2Vtb24odW5jb3JlKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZCBnZW41X3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTE2IHJndnN3 Y3RsOworCisJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJcmd2c3djdGwgPSBpbnRl bF91bmNvcmVfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOworCisJLyogQWNrIGludGVycnVwdHMs IGRpc2FibGUgRUZDIGludGVycnVwdCAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIE1F TUlOVFJFTiwKKwkJCSAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUkVOKSAmCisJ CQkgICB+TUVNSU5UX0VWQUxfQ0hHX0VOKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBN RU1JTlRSU1RTLCBNRU1JTlRfRVZBTF9DSEcpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IERFSUVSLAorCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERUlFUikgJiB+REVfUENV X0VWRU5UKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlJUiwgREVfUENVX0VWRU5U KTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlNUiwKKwkJCSAgIGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgREVJTVIpIHwgREVfUENVX0VWRU5UKTsKKworCS8qIEdvIGJhY2sgdG8g dGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSAqLworCWdlbjVfcnBzX3NldChycHMsIHJwcy0+aWRsZV9m cmVxKTsKKwltZGVsYXkoMSk7CisJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7CisJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKKwltZGVsYXkoMSk7CisK KwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKK30KKworc3RhdGljIHUzMiBycHNfbGlt aXRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXUzMiBsaW1pdHM7CisKKwkv KgorCSAqIE9ubHkgc2V0IHRoZSBkb3duIGxpbWl0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgbG93 ZXN0IGxldmVsIHRvIGF2b2lkCisJICogZ2V0dGluZyBtb3JlIGludGVycnVwdHMsIG90aGVyd2lz ZSBsZWF2ZSB0aGlzIGNsZWFyLiBUaGlzIHByZXZlbnRzIGEKKwkgKiByYWNlIGluIHRoZSBodyB3 aGVuIGNvbWluZyBvdXQgb2YgcmM2OiBUaGVyZSdzIGEgdGlueSB3aW5kb3cgd2hlcmUKKwkgKiB0 aGUgaHcgcnVucyBhdCB0aGUgbWluaW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0aW5nIHRoZSBkZXNp cmVkCisJICogZnJlcXVlbmN5LCBpZiB0aGUgZG93biB0aHJlc2hvbGQgZXhwaXJlcyBpbiB0aGF0 IHdpbmRvdyB3ZSB3aWxsIG5vdAorCSAqIHJlY2VpdmUgYSBkb3duIGludGVycnVwdC4KKwkgKi8K KwlpZiAoSU5URUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDkpIHsKKwkJbGltaXRzID0gcnBz LT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjM7CisJCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQpCisJCQlsaW1pdHMgfD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPDwgMTQ7CisJ fSBlbHNlIHsKKwkJbGltaXRzID0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjQ7CisJCWlm ICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCisJCQlsaW1pdHMgfD0gcnBzLT5taW5f ZnJlcV9zb2Z0bGltaXQgPDwgMTY7CisJfQorCisJcmV0dXJuIGxpbWl0czsKK30KKworc3RhdGlj IHZvaWQgcnBzX3NldF9wb3dlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCBuZXdfcG93ZXIp Cit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIg dGhyZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAwOyAvKiBpbiAlICovCisJdTMyIGVp X3VwID0gMCwgZWlfZG93biA9IDA7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBvd2Vy Lm11dGV4KTsKKworCWlmIChuZXdfcG93ZXIgPT0gcnBzLT5wb3dlci5tb2RlKQorCQlyZXR1cm47 CisKKwkvKiBOb3RlIHRoZSB1bml0cyBoZXJlIGFyZSBub3QgZXhhY3RseSAxdXMsIGJ1dCAxMjgw bnMuICovCisJc3dpdGNoIChuZXdfcG93ZXIpIHsKKwljYXNlIExPV19QT1dFUjoKKwkJLyogVXBj bG9jayBpZiBtb3JlIHRoYW4gOTUlIGJ1c3kgb3ZlciAxNm1zICovCisJCWVpX3VwID0gMTYwMDA7 CisJCXRocmVzaG9sZF91cCA9IDk1OworCisJCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gODUl IGJ1c3kgb3ZlciAzMm1zICovCisJCWVpX2Rvd24gPSAzMjAwMDsKKwkJdGhyZXNob2xkX2Rvd24g PSA4NTsKKwkJYnJlYWs7CisKKwljYXNlIEJFVFdFRU46CisJCS8qIFVwY2xvY2sgaWYgbW9yZSB0 aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLworCQllaV91cCA9IDEzMDAwOworCQl0aHJlc2hvbGRf dXAgPSA5MDsKKworCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDc1JSBidXN5IG92ZXIgMzJt cyAqLworCQllaV9kb3duID0gMzIwMDA7CisJCXRocmVzaG9sZF9kb3duID0gNzU7CisJCWJyZWFr OworCisJY2FzZSBISUdIX1BPV0VSOgorCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA4NSUgYnVz eSBvdmVyIDEwbXMgKi8KKwkJZWlfdXAgPSAxMDAwMDsKKwkJdGhyZXNob2xkX3VwID0gODU7CisK KwkJLyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA2MCUgYnVzeSBvdmVyIDMybXMgKi8KKwkJZWlf ZG93biA9IDMyMDAwOworCQl0aHJlc2hvbGRfZG93biA9IDYwOworCQlicmVhazsKKwl9CisKKwkv KiBXaGVuIGJ5dCBjYW4gc3Vydml2ZSB3aXRob3V0IHN5c3RlbSBoYW5nIHdpdGggZHluYW1pYwor CSAqIHN3IGZyZXEgYWRqdXN0bWVudHMsIHRoaXMgcmVzdHJpY3Rpb24gY2FuIGJlIGxpZnRlZC4K KwkgKi8KKwlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJZ290byBza2lwX2h3X3dyaXRlOwor CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9VUF9FSSwKKwkJCSAgIEdUX0lO VEVSVkFMX0ZST01fVVMoaTkxNSwgZWlfdXApKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU42X1JQX1VQX1RIUkVTSE9MRCwKKwkJCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwK KwkJCQkJICAgICAgIGVpX3VwICogdGhyZXNob2xkX3VwIC8gMTAwKSk7CisKKwlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBHRU42X1JQX0RPV05fRUksCisJCQkgICBHVF9JTlRFUlZBTF9GUk9N X1VTKGk5MTUsIGVpX2Rvd24pKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1JQ X0RPV05fVEhSRVNIT0xELAorCQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1LAorCQkJCQkg ICAgICAgZWlfZG93biAqIHRocmVzaG9sZF9kb3duIC8gMTAwKSk7CisKKwlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCisJCQkgICAoSU5URUxfR0VOKGk5MTUpID4g OSA/IDAgOiBHRU42X1JQX01FRElBX1RVUkJPKSB8CisJCQkgICBHRU42X1JQX01FRElBX0hXX05P Uk1BTF9NT0RFIHwKKwkJCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKKwkJCSAgIEdFTjZfUlBf RU5BQkxFIHwKKwkJCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAorCQkJICAgR0VONl9SUF9ET1dO X0lETEVfQVZHKTsKKworc2tpcF9od193cml0ZToKKwlycHMtPnBvd2VyLm1vZGUgPSBuZXdfcG93 ZXI7CisJcnBzLT5wb3dlci51cF90aHJlc2hvbGQgPSB0aHJlc2hvbGRfdXA7CisJcnBzLT5wb3dl ci5kb3duX3RocmVzaG9sZCA9IHRocmVzaG9sZF9kb3duOworfQorCitzdGF0aWMgdm9pZCBnZW42 X3Jwc19zZXRfdGhyZXNob2xkcyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwlp bnQgbmV3X3Bvd2VyOworCisJbmV3X3Bvd2VyID0gcnBzLT5wb3dlci5tb2RlOworCXN3aXRjaCAo cnBzLT5wb3dlci5tb2RlKSB7CisJY2FzZSBMT1dfUE9XRVI6CisJCWlmICh2YWwgPiBycHMtPmVm ZmljaWVudF9mcmVxICsgMSAmJgorCQkgICAgdmFsID4gcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19w b3dlciA9IEJFVFdFRU47CisJCWJyZWFrOworCisJY2FzZSBCRVRXRUVOOgorCQlpZiAodmFsIDw9 IHJwcy0+ZWZmaWNpZW50X2ZyZXEgJiYKKwkJICAgIHZhbCA8IHJwcy0+Y3VyX2ZyZXEpCisJCQlu ZXdfcG93ZXIgPSBMT1dfUE9XRVI7CisJCWVsc2UgaWYgKHZhbCA+PSBycHMtPnJwMF9mcmVxICYm CisJCQkgdmFsID4gcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7CisJ CWJyZWFrOworCisJY2FzZSBISUdIX1BPV0VSOgorCQlpZiAodmFsIDwgKHJwcy0+cnAxX2ZyZXEg KyBycHMtPnJwMF9mcmVxKSA+PiAxICYmCisJCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQorCQkJ bmV3X3Bvd2VyID0gQkVUV0VFTjsKKwkJYnJlYWs7CisJfQorCS8qIE1heC9taW4gYmlucyBhcmUg c3BlY2lhbCAqLworCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCisJCW5ld19w b3dlciA9IExPV19QT1dFUjsKKwlpZiAodmFsID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQor CQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOworCisJbXV0ZXhfbG9jaygmcnBzLT5wb3dlci5tdXRl eCk7CisJaWYgKHJwcy0+cG93ZXIuaW50ZXJhY3RpdmUpCisJCW5ld19wb3dlciA9IEhJR0hfUE9X RVI7CisJcnBzX3NldF9wb3dlcihycHMsIG5ld19wb3dlcik7CisJbXV0ZXhfdW5sb2NrKCZycHMt PnBvd2VyLm11dGV4KTsKK30KKwordm9pZCBpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMsIGJvb2wgaW50ZXJhY3RpdmUpCit7CisJaWYgKCFycHMtPmVuYWJs ZWQpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworCWlmIChp bnRlcmFjdGl2ZSkgeworCQlpZiAoIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUrKyAmJiBycHMtPmFj dGl2ZSkKKwkJCXJwc19zZXRfcG93ZXIocnBzLCBISUdIX1BPV0VSKTsKKwl9IGVsc2UgeworCQlH RU1fQlVHX09OKCFycHMtPnBvd2VyLmludGVyYWN0aXZlKTsKKwkJcnBzLT5wb3dlci5pbnRlcmFj dGl2ZS0tOworCX0KKwltdXRleF91bmxvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworfQorCitzdGF0 aWMgaW50IGdlbjZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiBzd3JlcTsK KworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwkJc3dyZXEgPSBHRU45X0ZSRVFVRU5DWSh2 YWwpOworCWVsc2UgaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQor CQlzd3JlcSA9IEhTV19GUkVRVUVOQ1kodmFsKTsKKwllbHNlCisJCXN3cmVxID0gKEdFTjZfRlJF UVVFTkNZKHZhbCkgfAorCQkJIEdFTjZfT0ZGU0VUKDApIHwKKwkJCSBHRU42X0FHR1JFU1NJVkVf VFVSQk8pOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBOU1dSRVEsIHN3cmVx KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZsdl9ycHNfc2V0KHN0cnVjdCBpbnRl bF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKKwlpbnQgZXJyOworCisJdmx2X3B1bml0X2dldChpOTE1KTsKKwll cnIgPSB2bHZfcHVuaXRfd3JpdGUoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1JFUSwgdmFsKTsK Kwl2bHZfcHVuaXRfcHV0KGk5MTUpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBy cHNfc2V0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwlpbnQgZXJyOworCisJaWYgKElO VEVMX0dFTihpOTE1KSA8IDYpCisJCXJldHVybiAwOworCisJaWYgKHZhbCA9PSBycHMtPmxhc3Rf ZnJlcSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVS UllWSUVXKGk5MTUpKQorCQllcnIgPSB2bHZfcnBzX3NldChycHMsIHZhbCk7CisJZWxzZQorCQll cnIgPSBnZW42X3Jwc19zZXQocnBzLCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisK KwlnZW42X3Jwc19zZXRfdGhyZXNob2xkcyhycHMsIHZhbCk7CisJcnBzLT5sYXN0X2ZyZXEgPSB2 YWw7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpbnRlbF9ycHNfdW5wYXJrKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKK3sKKwl1OCBmcmVxOworCisJaWYgKCFycHMtPmVuYWJsZWQpCisJCXJldHVy bjsKKworCS8qCisJICogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVuY3kgYXMgYSBndWlk ZSwgYnV0IGZvciBiZXR0ZXIKKwkgKiBwZXJmb3JtYW5jZSwganVtcCBkaXJlY3RseSB0byBSUGUg YXMgb3VyIHN0YXJ0aW5nIGZyZXF1ZW5jeS4KKwkgKi8KKwltdXRleF9sb2NrKCZycHMtPmxvY2sp OworCXJwcy0+YWN0aXZlID0gdHJ1ZTsKKwlmcmVxID0gbWF4KHJwcy0+Y3VyX2ZyZXEsIHJwcy0+ ZWZmaWNpZW50X2ZyZXEpLAorCWZyZXEgPSBjbGFtcChmcmVxLCBycHMtPm1pbl9mcmVxX3NvZnRs aW1pdCwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpOworCWludGVsX3Jwc19zZXQocnBzLCBmcmVx KTsKKwlycHMtPmxhc3RfYWRqID0gMDsKKwltdXRleF91bmxvY2soJnJwcy0+bG9jayk7CisKKwlp ZiAoSU5URUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDYpCisJCXJwc19lbmFibGVfaW50ZXJy dXB0cyhycHMpOworCisJaWYgKElTX0dFTihycHNfdG9faTkxNShycHMpLCA1KSkKKwkJZ2VuNV9y cHNfdXBkYXRlKHJwcyk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX3Bhcmsoc3RydWN0IGludGVsX3Jw cyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUo cnBzKTsKKworCWlmICghcnBzLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoSU5URUxfR0VO KGk5MTUpID49IDYpCisJCXJwc19kaXNhYmxlX2ludGVycnVwdHMocnBzKTsKKworCXJwcy0+YWN0 aXZlID0gZmFsc2U7CisJaWYgKHJwcy0+bGFzdF9mcmVxIDw9IHJwcy0+aWRsZV9mcmVxKQorCQly ZXR1cm47CisKKwkvKgorCSAqIFRoZSBwdW5pdCBkZWxheXMgdGhlIHdyaXRlIG9mIHRoZSBmcmVx dWVuY3kgYW5kIHZvbHRhZ2UgdW50aWwgaXQKKwkgKiBkZXRlcm1pbmVzIHRoZSBHUFUgaXMgYXdh a2UuIER1cmluZyBub3JtYWwgdXNhZ2Ugd2UgZG9uJ3Qgd2FudCB0bworCSAqIHdhc3RlIHBvd2Vy IGNoYW5naW5nIHRoZSBmcmVxdWVuY3kgaWYgdGhlIEdQVSBpcyBzbGVlcGluZyAocmM2KS4KKwkg KiBIb3dldmVyLCB0aGUgR1BVIGFuZCBkcml2ZXIgaXMgbm93IGlkbGUgYW5kIHdlIGRvIG5vdCB3 YW50IHRvIGRlbGF5CisJICogc3dpdGNoaW5nIHRvIG1pbmltdW0gdm9sdGFnZSAocmVkdWNpbmcg cG93ZXIgd2hpbHN0IGlkbGUpIGFzIHdlIGRvCisJICogbm90IGV4cGVjdCB0byBiZSB3b2tlbiBp biB0aGUgbmVhciBmdXR1cmUgYW5kIHNvIG11c3QgZmx1c2ggdGhlCisJICogY2hhbmdlIGJ5IHdh a2luZyB0aGUgZGV2aWNlLgorCSAqCisJICogV2UgY2hvb3NlIHRvIHRha2UgdGhlIG1lZGlhIHBv d2Vyd2VsbCAoZWl0aGVyIHdvdWxkIGRvIHRvIHRyaWNrIHRoZQorCSAqIHB1bml0IGludG8gY29t bWl0dGluZyB0aGUgdm9sdGFnZSBjaGFuZ2UpIGFzIHRoYXQgdGFrZXMgYSBsb3QgbGVzcworCSAq IHBvd2VyIHRoYW4gdGhlIHJlbmRlciBwb3dlcndlbGwuCisJICovCisJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9nZXQocnBzX3RvX3VuY29yZShycHMpLCBGT1JDRVdBS0VfTUVESUEpOworCXJwc19z ZXQocnBzLCBycHMtPmlkbGVfZnJlcSk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQocnBz X3RvX3VuY29yZShycHMpLCBGT1JDRVdBS0VfTUVESUEpOworfQorCit2b2lkIGludGVsX3Jwc19i b29zdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmcnEtPmVuZ2luZS0+Z3QtPnJwczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGk5 MTVfcmVxdWVzdF9zaWduYWxlZChycSkgfHwgIXJwcy0+YWN0aXZlKQorCQlyZXR1cm47CisKKwkv KiBTZXJpYWxpemVzIHdpdGggaTkxNV9yZXF1ZXN0X3JldGlyZSgpICovCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJaWYgKCFpOTE1X3JlcXVlc3RfaGFzX3dhaXRib29z dChycSkgJiYKKwkgICAgIWRtYV9mZW5jZV9pc19zaWduYWxlZF9sb2NrZWQoJnJxLT5mZW5jZSkp IHsKKwkJcnEtPmZsYWdzIHw9IEk5MTVfUkVRVUVTVF9XQUlUQk9PU1Q7CisKKwkJaWYgKCFhdG9t aWNfZmV0Y2hfaW5jKCZycHMtPm51bV93YWl0ZXJzKSAmJgorCQkgICAgUkVBRF9PTkNFKHJwcy0+ Y3VyX2ZyZXEpIDwgcnBzLT5ib29zdF9mcmVxKQorCQkJc2NoZWR1bGVfd29yaygmcnBzLT53b3Jr KTsKKworCQlhdG9taWNfaW5jKCZycHMtPmJvb3N0cyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Cit9CisKK2ludCBpbnRlbF9ycHNfc2V0KHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCWludCBlcnIgPSAwOworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmcnBzLT5sb2NrKTsKKwlHRU1fQlVHX09OKHZhbCA+IHJwcy0+bWF4X2ZyZXEpOwor CUdFTV9CVUdfT04odmFsIDwgcnBzLT5taW5fZnJlcSk7CisKKwlpZiAocnBzLT5hY3RpdmUpIHsK KwkJZXJyID0gcnBzX3NldChycHMsIHZhbCk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHdlIGNv bnRpbnVlIHRvIGdldCBpbnRlcnJ1cHRzCisJCSAqIHVudGlsIHdlIGhpdCB0aGUgbWluaW11bSBv ciBtYXhpbXVtIGZyZXF1ZW5jaWVzLgorCQkgKi8KKwkJaWYgKElOVEVMX0dFTihycHNfdG9faTkx NShycHMpKSA+PSA2KSB7CisJCQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9f dW5jb3JlKHJwcyk7CisKKwkJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfSU5U RVJSVVBUX0xJTUlUUywKKwkJCQkJICAgcnBzX2xpbWl0cyhycHMsIHZhbCkpOworCisJCQlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1BNSU5UUk1TSywKKwkJCQkJICAgcnBzX3BtX21h c2socnBzLCB2YWwpKTsKKwkJfQorCX0KKworCWlmIChlcnIgPT0gMCkgeworCQl0cmFjZV9pbnRl bF9ncHVfZnJlcV9jaGFuZ2UoaW50ZWxfZ3B1X2ZyZXEocnBzLCB2YWwpKTsKKwkJcnBzLT5jdXJf ZnJlcSA9IHZhbDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZW42X3Jw c19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCisJLyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4g dW5pdHMgb2YgNTBNSHogKi8KKworCS8qIHN0YXRpYyB2YWx1ZXMgZnJvbSBIVzogUlAwID4gUlAx ID4gUlBuIChtaW5fZnJlcSkgKi8KKwlpZiAoSVNfR0VOOV9MUChpOTE1KSkgeworCQl1MzIgcnBf c3RhdGVfY2FwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBCWFRfUlBfU1RBVEVfQ0FQKTsK KworCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOworCQlycHMt PnJwMV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVx ID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOworCX0gZWxzZSB7CisJCXUzMiBycF9zdGF0 ZV9jYXAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjZfUlBfU1RBVEVfQ0FQKTsKKwor CQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOworCQlycHMtPnJw MV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVxID0g KHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOworCX0KKworCS8qIGh3X21heCA9IFJQMCB1bnRp bCB3ZSBjaGVjayBmb3Igb3ZlcmNsb2NraW5nICovCisJcnBzLT5tYXhfZnJlcSA9IHJwcy0+cnAw X2ZyZXE7CisKKwlycHMtPmVmZmljaWVudF9mcmVxID0gcnBzLT5ycDFfZnJlcTsKKwlpZiAoSVNf SEFTV0VMTChpOTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkgfHwKKwkgICAgSVNfR0VOOV9CQyhp OTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwkJdTMyIGRkY2Nfc3RhdHVzID0gMDsK KworCQlpZiAoc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChpOTE1LAorCQkJCQkgICBIU1dfUENPREVf RFlOQU1JQ19EVVRZX0NZQ0xFX0NPTlRST0wsCisJCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkg PT0gMCkKKwkJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPQorCQkJCWNsYW1wX3QodTgsCisJCQkJCShk ZGNjX3N0YXR1cyA+PiA4KSAmIDB4ZmYsCisJCQkJCXJwcy0+bWluX2ZyZXEsCisJCQkJCXJwcy0+ bWF4X2ZyZXEpOworCX0KKworCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1 KSA+PSAxMCkgeworCQkvKiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42NiBNSFog dW5pdHMsIHdoaWNoIGlzCisJCSAqIHRoZSBuYXR1cmFsIGhhcmR3YXJlIHVuaXQgZm9yIFNLTAor CQkgKi8KKwkJcnBzLT5ycDBfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPnJwMV9m cmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7CisJCXJwcy0+bWluX2ZyZXEgKj0gR0VOOV9GUkVRX1ND QUxFUjsKKwkJcnBzLT5tYXhfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPmVmZmlj aWVudF9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7CisJfQorfQorCitzdGF0aWMgYm9vbCBycHNf cmVzZXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCS8qIGZvcmNlIGEgcmVzZXQgKi8KKwly cHMtPnBvd2VyLm1vZGUgPSAtMTsKKwlycHMtPmxhc3RfZnJlcSA9IC0xOworCisJaWYgKHJwc19z ZXQocnBzLCBycHMtPm1pbl9mcmVxKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBS UFMgdG8gaW5pdGlhbCB2YWx1ZXNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcnBzLT5j dXJfZnJlcSA9IHJwcy0+bWluX2ZyZXE7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qIFNlZSB0aGUg R2VuOV9HVF9QTV9Qcm9ncmFtbWluZ19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLworc3RhdGlj IGJvb2wgZ2VuOV9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCisJLyogUHJvZ3JhbSBkZWZh dWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCisJaWYgKElTX0dFTihpOTE1LCA5KSkKKwkJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19GUkVRLAorCQkJCSAg ICAgIEdFTjlfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKKworCS8qIDEgc2Vjb25kIHRpbWVv dXQgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9V VCwKKwkJCSAgICAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgMTAwMDAwMCkpOworCisJaW50 ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMHhhKTsK KworCXJldHVybiBycHNfcmVzZXQocnBzKTsKK30KKworc3RhdGljIGJvb2wgZ2VuOF9ycHNfZW5h YmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3Jl LCBHRU42X1JDX1ZJREVPX0ZSRVEsCisJCQkgICAgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2Zy ZXEpKTsKKworCS8qIE5COiBEb2NzIHNheSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3Qg ZXF1aXZhbGVudCAqLworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9USU1FT1VULAorCQkJICAgICAgMTAwMDAwMDAwIC8gMTI4KTsgLyogMSBzZWNvbmQgdGltZW91 dCAqLworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RF UlNJUywgMTApOworCisJcmV0dXJuIHJwc19yZXNldChycHMpOworfQorCitzdGF0aWMgYm9vbCBn ZW42X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91 bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKworCS8qIFBvd2VyIGRvd24gaWYg Y29tcGxldGVseSBpZGxlIGZvciBvdmVyIDUwbXMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZnco dW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwgNTAwMDApOworCWludGVsX3VuY29yZV93cml0 ZV9mdyh1bmNvcmUsIEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKKworCXJldHVybiBycHNf cmVzZXQocnBzKTsKK30KKworc3RhdGljIGludCBjaHZfcnBzX21heF9mcmVxKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dG WF9GTUFYX0FUX1ZNQVhfRlVTRSk7CisKKwlzd2l0Y2ggKFJVTlRJTUVfSU5GTyhpOTE1KS0+c3Nl dS5ldV90b3RhbCkgeworCWNhc2UgODoKKwkJLyogKDIgKiA0KSBjb25maWcgKi8KKwkJdmFsID4+ PSBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzRFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwljYXNl IDEyOgorCQkvKiAoMiAqIDYpIGNvbmZpZyAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZN QVhfMlNTNkVVX0ZVU0VfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCS8qICgyICogOCkg Y29uZmlnICovCisJZGVmYXVsdDoKKwkJLyogU2V0dGluZyAoMiAqIDgpIE1pbiBSUDAgZm9yIGFu eSBvdGhlciBjb21iaW5hdGlvbiAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNT OEVVX0ZVU0VfU0hJRlQ7CisJCWJyZWFrOworCX0KKworCXJldHVybiB2YWwgJiBGQl9HRlhfRlJF UV9GVVNFX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgY2h2X3Jwc19ycGVfZnJlcShzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9f aTkxNShycHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5J VF9HUFVfRFVUWUNZQ0xFX1JFRyk7CisJdmFsID4+PSBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9G UkVRX1NISUZUOworCisJcmV0dXJuIHZhbCAmIFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFf TUFTSzsKK30KKworc3RhdGljIGludCBjaHZfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShy cHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBGQl9HRlhfRk1B WF9BVF9WTUFYX0ZVU0UpOworCisJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsK K30KKworc3RhdGljIHUzMiBjaHZfcnBzX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJ dTMyIHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUlOX0FUX1ZN SU5fRlVTRSk7CisJdmFsID4+PSBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0VfU0hJRlQ7CisKKwly ZXR1cm4gdmFsICYgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLOworfQorCitzdGF0aWMgYm9vbCBjaHZf cnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJLyogMTogUHJvZ3JhbSBk ZWZhdWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZnco dW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dy aXRlX2Z3KHVuY29yZSwgR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKKwlpbnRlbF91bmNv cmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOworCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7CisKKwlp bnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7 CisKKwkvKiAyOiBFbmFibGUgUlBTICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwg R0VONl9SUF9DT05UUk9MLAorCQkJICAgICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8 CisJCQkgICAgICBHRU42X1JQX01FRElBX0lTX0dGWCB8CisJCQkgICAgICBHRU42X1JQX0VOQUJM RSB8CisJCQkgICAgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKKwkJCSAgICAgIEdFTjZfUlBfRE9X Tl9JRExFX0FWRyk7CisKKwkvKiBTZXR0aW5nIEZpeGVkIEJpYXMgKi8KKwl2bHZfcHVuaXRfZ2V0 KGk5MTUpOworCisJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZf QklBU19DUFVfNTBfU09DXzUwOworCXZsdl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09D X09WRVJSSURFLCB2YWwpOworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVH X0dQVV9GUkVRX1NUUyk7CisKKwl2bHZfcHVuaXRfcHV0KGk5MTUpOworCisJLyogUlBTIGNvZGUg YXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KKwlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09 IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKKworCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5h YmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKKwlEUk1fREVCVUdfRFJJVkVS KCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7 Cit9CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK Kwl1MzIgdmFsLCBycDE7CisKKwl2YWwgPSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dG WF9GUkVRX0ZVU0UpOworCisJcnAxID0gdmFsICYgRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVT RV9NQVNLOworCXJwMSA+Pj0gRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKKwor CXJldHVybiBycDE7Cit9CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19tYXhfZnJlcShzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9f aTkxNShycHMpOworCXUzMiB2YWwsIHJwMDsKKworCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUsIElP U0ZfTkNfRkJfR0ZYX0ZSRVFfRlVTRSk7CisKKwlycDAgPSAodmFsICYgRkJfR0ZYX01BWF9GUkVR X0ZVU0VfTUFTSykgPj4gRkJfR0ZYX01BWF9GUkVRX0ZVU0VfU0hJRlQ7CisJLyogQ2xhbXAgdG8g bWF4ICovCisJcnAwID0gbWluX3QodTMyLCBycDAsIDB4ZWEpOworCisJcmV0dXJuIHJwMDsKK30K Kworc3RhdGljIGludCB2bHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMy IHZhbCwgcnBlOworCisJdmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRk1B WF9GVVNFX0xPKTsKKwlycGUgPSAodmFsICYgRkJfRk1BWF9WTUlOX0ZSRVFfTE9fTUFTSykgPj4g RkJfRk1BWF9WTUlOX0ZSRVFfTE9fU0hJRlQ7CisJdmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9T Rl9OQ19GQl9HRlhfRk1BWF9GVVNFX0hJKTsKKwlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9G UkVRX0hJX01BU0spIDw8IDU7CisKKwlyZXR1cm4gcnBlOworfQorCitzdGF0aWMgaW50IHZsdl9y cHNfbWluX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2 X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9MRk0pICYgMHhmZjsKKwkvKgorCSAqIEFj Y29yZGluZyB0byB0aGUgQllUIFB1bml0IEdQVSB0dXJibyBIQVMgMS4xLjYuMyB0aGUgbWluaW11 bSB2YWx1ZQorCSAqIGZvciB0aGUgbWluaW11bSBmcmVxdWVuY3kgaW4gR1BMTCBtb2RlIGlzIDB4 YzEuIENvbnRyYXJ5IHRvIHRoaXMgb24KKwkgKiBhIEJZVC1NIEIwIHRoZSBhYm92ZSByZWdpc3Rl ciBjb250YWlucyAweGJmLiBNb3Jlb3ZlciB3aGVuIHNldHRpbmcKKwkgKiBhIGZyZXF1ZW5jeSBQ dW5pdCB3aWxsIG5vdCBhbGxvdyB2YWx1ZXMgYmVsb3cgMHhjMC4gQ2xhbXAgaXQgMHhjMAorCSAq IHRvIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHdoYXQgUHVuaXQgYWNjZXB0cy4KKwkgKi8KKwlyZXR1 cm4gbWF4X3QodTMyLCB2YWwsIDB4YzApOworfQorCitzdGF0aWMgYm9vbCB2bHZfcnBzX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDApOworCWludGVsX3VuY29yZV93cml0 ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7CisJaW50ZWxfdW5jb3Jl X3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1MDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX1VQX0VJLCA2NjAwMCk7CisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLCAzNTAwMDApOworCisJaW50 ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwor CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9DT05UUk9MLAorCQkJICAg ICAgR0VONl9SUF9NRURJQV9UVVJCTyB8CisJCQkgICAgICBHRU42X1JQX01FRElBX0hXX05PUk1B TF9NT0RFIHwKKwkJCSAgICAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKKwkJCSAgICAgIEdFTjZf UlBfRU5BQkxFIHwKKwkJCSAgICAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAorCQkJICAgICAgR0VO Nl9SUF9ET1dOX0lETEVfQ09OVCk7CisKKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCisJLyogU2V0 dGluZyBGaXhlZCBCaWFzICovCisJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBf RU4gfCBWTFZfQklBU19DUFVfMTI1X1NPQ184NzU7CisJdmx2X3B1bml0X3dyaXRlKGk5MTUsIFZM Vl9UVVJCT19TT0NfT1ZFUlJJREUsIHZhbCk7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1 LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKKworCXZsdl9wdW5pdF9wdXQoaTkxNSk7CisKKwkv KiBSUFMgY29kZSBhc3N1bWVzIEdQTEwgaXMgdXNlZCAqLworCVdBUk5fT05DRSgodmFsICYgR1BM TEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90IGVuYWJsZWRcbiIpOworCisJRFJNX0RFQlVHX0RSSVZF UigiR1BMTCBlbmFibGVkPyAlc1xuIiwgeWVzbm8odmFsICYgR1BMTEVOQUJMRSkpOworCURSTV9E RUJVR19EUklWRVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKKworCXJldHVybiBycHNf cmVzZXQocnBzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pcHNfZ2Z4X3ZhbChzdHJ1 Y3QgaW50ZWxfaXBzICppcHMpCit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVy X29mKGlwcywgdHlwZW9mKCpycHMpLCBpcHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9IHJwc190b191bmNvcmUocnBzKTsKKwl1bnNpZ25lZCBsb25nIHQsIGNvcnIsIHN0YXRlMSwg Y29ycjIsIHN0YXRlMjsKKwl1MzIgcHh2aWQsIGV4dF92OworCisJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmbWNoZGV2X2xvY2spOworCisJcHh2aWQgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBY VkZSRVEocnBzLT5jdXJfZnJlcSkpOworCXB4dmlkID0gKHB4dmlkID4+IDI0KSAmIDB4N2Y7CisJ ZXh0X3YgPSBwdmlkX3RvX2V4dHZpZChycHNfdG9faTkxNShycHMpLCBweHZpZCk7CisKKwlzdGF0 ZTEgPSBleHRfdjsKKworCS8qIFJldmVsIGluIHRoZSBlbXBpcmljYWxseSBkZXJpdmVkIGNvbnN0 YW50cyAqLworCisJLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8KKwl0 ID0gaXBzX21jaF92YWwodW5jb3JlKTsKKwlpZiAodCA+IDgwKQorCQljb3JyID0gdCAqIDIzNDkg KyAxMzU5NDA7CisJZWxzZSBpZiAodCA+PSA1MCkKKwkJY29yciA9IHQgKiA5NjQgKyAyOTMxNzsK KwllbHNlIC8qIDwgNTAgKi8KKwkJY29yciA9IHQgKiAzMDEgKyAxMDA0OworCisJY29yciA9IGNv cnIgKiAxNTAxNDIgKiBzdGF0ZTEgLyAxMDAwMCAtIDc4NjQyOworCWNvcnIgLz0gMTAwMDAwOwor CWNvcnIyID0gY29yciAqIGlwcy0+Y29ycjsKKworCXN0YXRlMiA9IGNvcnIyICogc3RhdGUxIC8g MTAwMDA7CisJc3RhdGUyIC89IDEwMDsgLyogY29udmVydCB0byBtVyAqLworCisJX19nZW41X2lw c191cGRhdGUoaXBzKTsKKworCXJldHVybiBpcHMtPmdmeF9wb3dlciArIHN0YXRlMjsKK30KKwor dm9pZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCisJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKKwlpZiAoSVNfQ0hFUlJZVklFVyhp OTE1KSkKKwkJcnBzLT5lbmFibGVkID0gY2h2X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJ U19WQUxMRVlWSUVXKGk5MTUpKQorCQlycHMtPmVuYWJsZWQgPSB2bHZfcnBzX2VuYWJsZShycHMp OworCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQorCQlycHMtPmVuYWJsZWQgPSBnZW45 X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcnBz LT5lbmFibGVkID0gZ2VuOF9ycHNfZW5hYmxlKHJwcyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjZfcnBzX2VuYWJsZShycHMpOworCWVsc2Ug aWYgKElTX0lST05MQUtFX00oaTkxNSkpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjVfcnBzX2VuYWJs ZShycHMpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FM TCk7CisJaWYgKCFycHMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCVdBUk5fT04ocnBzLT5tYXhf ZnJlcSA8IHJwcy0+bWluX2ZyZXEpOworCVdBUk5fT04ocnBzLT5pZGxlX2ZyZXEgPiBycHMtPm1h eF9mcmVxKTsKKworCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA8IHJwcy0+bWluX2ZyZXEp OworCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA+IHJwcy0+bWF4X2ZyZXEpOworfQorCitz dGF0aWMgdm9pZCBnZW42X3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlp bnRlbF91bmNvcmVfd3JpdGUocnBzX3RvX3VuY29yZShycHMpLCBHRU42X1JQX0NPTlRST0wsIDAp OworfQorCit2b2lkIGludGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwly cHMtPmVuYWJsZWQgPSBmYWxzZTsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJZ2Vu Nl9ycHNfZGlzYWJsZShycHMpOworCWVsc2UgaWYgKElTX0lST05MQUtFX00oaTkxNSkpCisJCWdl bjVfcnBzX2Rpc2FibGUocnBzKTsKK30KKworc3RhdGljIGludCBieXRfZ3B1X2ZyZXEoc3RydWN0 IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCS8qCisJICogTiA9IHZhbCAtIDB4YjcKKwkg KiBTbG93ID0gRmFzdCA9IEdQTEwgcmVmICogTgorCSAqLworCXJldHVybiBESVZfUk9VTkRfQ0xP U0VTVChycHMtPmdwbGxfcmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOworfQorCitzdGF0 aWMgaW50IGJ5dF9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCit7 CisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJl cSkgKyAweGI3OworfQorCitzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMsIGludCB2YWwpCit7CisJLyoKKwkgKiBOID0gdmFsIC8gMgorCSAqIENVIChzbG93KSA9 IENVMnggKGZhc3QpIC8gMiA9IEdQTEwgcmVmICogTiAvIDIKKwkgKi8KKwlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogdmFsLCAyICogMiAqIDEwMDApOworfQor CitzdGF0aWMgaW50IGNodl9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2 YWwpCit7CisJLyogQ0hWIG5lZWRzIGV2ZW4gdmFsdWVzICovCisJcmV0dXJuIERJVl9ST1VORF9D TE9TRVNUKDIgKiAxMDAwICogdmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICogMjsKK30KKworaW50 IGludGVsX2dwdV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDkpCisJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHVF9G UkVRVUVOQ1lfTVVMVElQTElFUiwKKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOworCWVsc2UgaWYg KElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCXJldHVybiBjaHZfZ3B1X2ZyZXEocnBzLCB2YWwpOwor CWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCisJCXJldHVybiBieXRfZ3B1X2ZyZXEocnBz LCB2YWwpOworCWVsc2UKKwkJcmV0dXJuIHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOwor fQorCitpbnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFs KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK KworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KHZhbCAqIEdFTjlfRlJFUV9TQ0FMRVIsCisJCQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7 CisJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGNodl9mcmVxX29wY29k ZShycHMsIHZhbCk7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGJ5 dF9mcmVxX29wY29kZShycHMsIHZhbCk7CisJZWxzZQorCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NF U1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9p bml0X2dwbGxfcmVmX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCXJwcy0+Z3BsbF9yZWZf ZnJlcSA9CisJCXZsdl9nZXRfY2NrX2Nsb2NrKGk5MTUsICJHUExMIHJlZiIsCisJCQkJICBDQ0tf R1BMTF9DTE9DS19DT05UUk9MLAorCQkJCSAgaTkxNS0+Y3pjbGtfZnJlcSk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCJHUExMIHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsIHJwcy0+Z3BsbF9yZWZf ZnJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp OworCXUzMiB2YWw7CisKKwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9T Ql9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0Jf Q0NLKSk7CisKKwl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHJwcyk7CisKKwl2YWwgPSB2bHZfcHVu aXRfcmVhZChpOTE1LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKKwlzd2l0Y2ggKCh2YWwgPj4g NikgJiAzKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJaTkxNS0+bWVtX2ZyZXEgPSA4MDA7CisJ CWJyZWFrOworCWNhc2UgMjoKKwkJaTkxNS0+bWVtX2ZyZXEgPSAxMDY2OworCQlicmVhazsKKwlj YXNlIDM6CisJCWk5MTUtPm1lbV9mcmVxID0gMTMzMzsKKwkJYnJlYWs7CisJfQorCURSTV9ERUJV R19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6XG4iLCBpOTE1LT5tZW1fZnJlcSk7CisKKwlycHMt Pm1heF9mcmVxID0gdmx2X3Jwc19tYXhfZnJlcShycHMpOworCXJwcy0+cnAwX2ZyZXEgPSBycHMt Pm1heF9mcmVxOworCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlc biIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSwKKwkJCSBycHMtPm1h eF9mcmVxKTsKKworCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSB2bHZfcnBzX3JwZV9mcmVxKHJwcyk7 CisJRFJNX0RFQlVHX0RSSVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBp bnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAorCQkJIHJwcy0+ZWZmaWNp ZW50X2ZyZXEpOworCisJcnBzLT5ycDFfZnJlcSA9IHZsdl9ycHNfZ3Vhcl9mcmVxKHJwcyk7CisJ RFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4i LAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSksCisJCQkgcnBzLT5ycDFf ZnJlcSk7CisKKwlycHMtPm1pbl9mcmVxID0gdmx2X3Jwc19taW5fZnJlcShycHMpOworCURSTV9E RUJVR19EUklWRVIoIm1pbiBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxKSwKKwkJCSBycHMtPm1pbl9mcmVxKTsKKworCXZsdl9p b3NmX3NiX3B1dChpOTE1LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxW X0lPU0ZfU0JfTkMpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKK30KKworc3RhdGljIHZv aWQgY2h2X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZsdl9p b3NmX3NiX2dldChpOTE1LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxW X0lPU0ZfU0JfTkMpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKKworCXZsdl9pbml0X2dw bGxfcmVmX2ZyZXEocnBzKTsKKworCXZhbCA9IHZsdl9jY2tfcmVhZChpOTE1LCBDQ0tfRlVTRV9S RUcpOworCisJc3dpdGNoICgodmFsID4+IDIpICYgMHg3KSB7CisJY2FzZSAzOgorCQlpOTE1LT5t ZW1fZnJlcSA9IDIwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWk5MTUtPm1lbV9mcmVxID0g MTYwMDsKKwkJYnJlYWs7CisJfQorCURSTV9ERUJVR19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6 XG4iLCBpOTE1LT5tZW1fZnJlcSk7CisKKwlycHMtPm1heF9mcmVxID0gY2h2X3Jwc19tYXhfZnJl cShycHMpOworCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1heF9mcmVxOworCURSTV9ERUJVR19EUklW RVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBz LCBycHMtPm1heF9mcmVxKSwKKwkJCSBycHMtPm1heF9mcmVxKTsKKworCXJwcy0+ZWZmaWNpZW50 X2ZyZXEgPSBjaHZfcnBzX3JwZV9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlBlIEdQ VSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZm aWNpZW50X2ZyZXEpLAorCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOworCisJcnBzLT5ycDFfZnJl cSA9IGNodl9ycHNfZ3Vhcl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIp IEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ cnAxX2ZyZXEpLAorCQkJIHJwcy0+cnAxX2ZyZXEpOworCisJcnBzLT5taW5fZnJlcSA9IGNodl9y cHNfbWluX2ZyZXEocnBzKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZyZXE6ICVkIE1I eiAoJXUpXG4iLAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCQkg cnBzLT5taW5fZnJlcSk7CisKKwl2bHZfaW9zZl9zYl9wdXQoaTkxNSwKKwkJCUJJVChWTFZfSU9T Rl9TQl9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0Zf U0JfQ0NLKSk7CisKKwlXQVJOX09OQ0UoKHJwcy0+bWF4X2ZyZXEgfCBycHMtPmVmZmljaWVudF9m cmVxIHwgcnBzLT5ycDFfZnJlcSB8CisJCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKKwkJICAiT2Rk IEdQVSBmcmVxIHZhbHVlc1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSwgc3RydWN0IGludGVsX3Jwc19laSAqZWkpCit7CisJZWkt Pmt0aW1lID0ga3RpbWVfZ2V0X3JhdygpOworCWVpLT5yZW5kZXJfYzAgPSBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIFZMVl9SRU5ERVJfQzBfQ09VTlQpOworCWVpLT5tZWRpYV9jMCA9IGludGVs X3VuY29yZV9yZWFkKHVuY29yZSwgVkxWX01FRElBX0MwX0NPVU5UKTsKK30KKworc3RhdGljIHUz MiB2bHZfd2FfYzBfZWkoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQoreworCXN0 cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwljb25zdCBz dHJ1Y3QgaW50ZWxfcnBzX2VpICpwcmV2ID0gJnJwcy0+ZWk7CisJc3RydWN0IGludGVsX3Jwc19l aSBub3c7CisJdTMyIGV2ZW50cyA9IDA7CisKKwlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBf RUlfRVhQSVJFRCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2bHZfYzBfcmVhZCh1bmNvcmUsICZu b3cpOworCisJaWYgKHByZXYtPmt0aW1lKSB7CisJCXU2NCB0aW1lLCBjMDsKKwkJdTMyIHJlbmRl ciwgbWVkaWE7CisKKwkJdGltZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3Rp bWUpOworCisJCXRpbWUgKj0gcnBzX3RvX2k5MTUocnBzKS0+Y3pjbGtfZnJlcTsKKworCQkvKiBX b3JrbG9hZCBjYW4gYmUgc3BsaXQgYmV0d2VlbiByZW5kZXIgKyBtZWRpYSwKKwkJICogZS5nLiBT d2FwQnVmZmVycyBiZWluZyBibGl0dGVkIGluIFggYWZ0ZXIgYmVpbmcgcmVuZGVyZWQgaW4KKwkJ ICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdp bmVzCisJCSAqIGludG8gb3VyIGFjdGl2aXR5IGNvdW50ZXIuCisJCSAqLworCQlyZW5kZXIgPSBu b3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOworCQltZWRpYSA9IG5vdy5tZWRpYV9jMCAt IHByZXYtPm1lZGlhX2MwOworCQljMCA9IG1heChyZW5kZXIsIG1lZGlhKTsKKwkJYzAgKj0gMTAw MCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAqLworCisJ CWlmIChjMCA+IHRpbWUgKiBycHMtPnBvd2VyLnVwX3RocmVzaG9sZCkKKwkJCWV2ZW50cyA9IEdF TjZfUE1fUlBfVVBfVEhSRVNIT0xEOworCQllbHNlIGlmIChjMCA8IHRpbWUgKiBycHMtPnBvd2Vy LmRvd25fdGhyZXNob2xkKQorCQkJZXZlbnRzID0gR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRDsK Kwl9CisKKwlycHMtPmVpID0gbm93OworCXJldHVybiBldmVudHM7Cit9CisKK3N0YXRpYyB2b2lk IHJwc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpycHMpLCB3b3JrKTsKKwlzdHJ1Y3Qg aW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisJYm9vbCBjbGllbnRfYm9vc3QgPSBmYWxz ZTsKKwlpbnQgbmV3X2ZyZXEsIGFkaiwgbWluLCBtYXg7CisJdTMyIHBtX2lpciA9IDA7CisKKwlz cGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZy cHMtPnBtX2lpcik7CisJY2xpZW50X2Jvb3N0ID0gYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRl cnMpOworCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKworCS8qIE1ha2Ugc3VyZSB3 ZSBkaWRuJ3QgcXVldWUgYW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCisJ aWYgKChwbV9paXIgJiBycHMtPnBtX2V2ZW50cykgPT0gMCAmJiAhY2xpZW50X2Jvb3N0KQorCQln b3RvIG91dDsKKworCW11dGV4X2xvY2soJnJwcy0+bG9jayk7CisKKwlwbV9paXIgfD0gdmx2X3dh X2MwX2VpKHJwcywgcG1faWlyKTsKKworCWFkaiA9IHJwcy0+bGFzdF9hZGo7CisJbmV3X2ZyZXEg PSBycHMtPmN1cl9mcmVxOworCW1pbiA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0OworCW1heCA9 IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0OworCWlmIChjbGllbnRfYm9vc3QpCisJCW1heCA9IHJw cy0+bWF4X2ZyZXE7CisJaWYgKGNsaWVudF9ib29zdCAmJiBuZXdfZnJlcSA8IHJwcy0+Ym9vc3Rf ZnJlcSkgeworCQluZXdfZnJlcSA9IHJwcy0+Ym9vc3RfZnJlcTsKKwkJYWRqID0gMDsKKwl9IGVs c2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPiAw KQorCQkJYWRqICo9IDI7CisJCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAq LworCQkJYWRqID0gSVNfQ0hFUlJZVklFVyhndC0+aTkxNSkgPyAyIDogMTsKKworCQlpZiAobmV3 X2ZyZXEgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCisJCQlhZGogPSAwOworCX0gZWxzZSBp ZiAoY2xpZW50X2Jvb3N0KSB7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42 X1BNX1JQX0RPV05fVElNRU9VVCkgeworCQlpZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+ZWZmaWNp ZW50X2ZyZXEpCisJCQluZXdfZnJlcSA9IHJwcy0+ZWZmaWNpZW50X2ZyZXE7CisJCWVsc2UgaWYg KHJwcy0+Y3VyX2ZyZXEgPiBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCW5ld19mcmVxID0g cnBzLT5taW5fZnJlcV9zb2Z0bGltaXQ7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIg JiBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPCAwKQorCQkJYWRqICo9 IDI7CisJCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLworCQkJYWRqID0g SVNfQ0hFUlJZVklFVyhndC0+aTkxNSkgPyAtMiA6IC0xOworCisJCWlmIChuZXdfZnJlcSA8PSBy cHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCWFkaiA9IDA7CisJfSBlbHNlIHsgLyogdW5rbm93 biBldmVudCAqLworCQlhZGogPSAwOworCX0KKworCXJwcy0+bGFzdF9hZGogPSBhZGo7CisKKwkv KgorCSAqIExpbWl0IGRlYm9vc3RpbmcgYW5kIGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0 IHRoZSBleHRyZW1lcworCSAqIHdoZW4gaW4gdGhlIHJlc3BlY3RpdmUgcG93ZXIgbW9kZXMgKGku ZS4gc2xvd2x5IGRlY3JlYXNlIGZyZXF1ZW5jaWVzCisJICogd2hpbGUgaW4gdGhlIEhJR0hfUE9X RVIgem9uZSBhbmQgc2xvd2x5IGluY3JlYXNlIGZyZXF1ZW5jaWVzIHdoaWxlCisJICogaW4gdGhl IExPV19QT1dFUiB6b25lKS4gT24gaWRsZSwgd2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRy b3AKKwkgKiB0byB0aGUgbmV4dCBsZXZlbCBxdWlja2x5LCBhbmQgY29udmVyc2VseSBpZiBidXN5 IHdlIGV4cGVjdCB0bworCSAqIGhpdCBhIHdhaXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50 byBtYXggcG93ZXIuCisJICovCisJaWYgKChhZGogPCAwICYmIHJwcy0+cG93ZXIubW9kZSA9PSBI SUdIX1BPV0VSKSB8fAorCSAgICAoYWRqID4gMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BP V0VSKSkKKwkJcnBzLT5sYXN0X2FkaiA9IDA7CisKKwkvKiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJm YWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGlsZSBzZXJ2aWNpbmcgdGhlCisJICogaW50ZXJydXB0 CisJICovCisJbmV3X2ZyZXEgKz0gYWRqOworCW5ld19mcmVxID0gY2xhbXBfdChpbnQsIG5ld19m cmVxLCBtaW4sIG1heCk7CisKKwlpZiAoaW50ZWxfcnBzX3NldChycHMsIG5ld19mcmVxKSkgewor CQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsK KwkJcnBzLT5sYXN0X2FkaiA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwor CitvdXQ6CisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlnZW42X2d0X3BtX3VubWFz a19pcnEoZ3QsIHJwcy0+cG1fZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7Cit9CisKK3ZvaWQgZ2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJw cywgdTMyIHBtX2lpcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7 CisJY29uc3QgdTMyIGV2ZW50cyA9IHJwcy0+cG1fZXZlbnRzICYgcG1faWlyOworCisJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmZ3QtPmlycV9sb2NrKTsKKworCWlmICh1bmxpa2VseSghZXZlbnRzKSkK KwkJcmV0dXJuOworCisJZ2VuNl9ndF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKKworCXJwcy0+ cG1faWlyIHw9IGV2ZW50czsKKwlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOworfQorCit2b2lk IGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisK KwlpZiAocG1faWlyICYgcnBzLT5wbV9ldmVudHMpIHsKKwkJc3RydWN0IGludGVsX2d0ICpndCA9 IHJwc190b19ndChycHMpOworCisJCXNwaW5fbG9jaygmZ3QtPmlycV9sb2NrKTsKKwkJZ2VuNl9n dF9wbV9tYXNrX2lycShndCwgcG1faWlyICYgcnBzLT5wbV9ldmVudHMpOworCQlycHMtPnBtX2lp ciB8PSBwbV9paXIgJiBycHMtPnBtX2V2ZW50czsKKwkJc2NoZWR1bGVfd29yaygmcnBzLT53b3Jr KTsKKwkJc3Bpbl91bmxvY2soJmd0LT5pcnFfbG9jayk7CisJfQorCisJaWYgKElOVEVMX0dFTihp OTE1KSA+PSA4KQorCQlyZXR1cm47CisKKwlpZiAocG1faWlyICYgUE1fVkVCT1hfVVNFUl9JTlRF UlJVUFQpCisJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoaTkxNS0+ZW5naW5lW1ZFQ1Mw XSk7CisKKwlpZiAocG1faWlyICYgUE1fVkVCT1hfQ1NfRVJST1JfSU5URVJSVVBUKQorCQlEUk1f REVCVUcoIkNvbW1hbmQgcGFyc2VyIGVycm9yLCBwbV9paXIgMHglMDh4XG4iLCBwbV9paXIpOwor fQorCit2b2lkIGdlbjVfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTMy IGJ1c3lfdXAsIGJ1c3lfZG93biwgbWF4X2F2ZywgbWluX2F2ZzsKKwl1OCBuZXdfZnJlcTsKKwor CXNwaW5fbG9jaygmbWNoZGV2X2xvY2spOworCisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3Jl LAorCQkJICAgICBNRU1JTlRSU1RTLAorCQkJICAgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUs IE1FTUlOVFJTVFMpKTsKKworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNSU5UUlNU UywgTUVNSU5UX0VWQUxfQ0hHKTsKKwlidXN5X3VwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3Jl LCBSQ1BSRVZCU1lUVVBBVkcpOworCWJ1c3lfZG93biA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgUkNQUkVWQlNZVEROQVZHKTsKKwltYXhfYXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3Jl LCBSQ0JNQVhBVkcpOworCW1pbl9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDQk1J TkFWRyk7CisKKwkvKiBIYW5kbGUgUkNTIGNoYW5nZSByZXF1ZXN0IGZyb20gaHcgKi8KKwluZXdf ZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7CisJaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKQorCQluZXdfZnJl cSsrOworCWVsc2UgaWYgKGJ1c3lfZG93biA8IG1pbl9hdmcpCisJCW5ld19mcmVxLS07CisJbmV3 X2ZyZXEgPSBjbGFtcChuZXdfZnJlcSwKKwkJCSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKKwkJ CSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCk7CisKKwlpZiAobmV3X2ZyZXEgIT0gcnBzLT5jdXJf ZnJlcSAmJiBnZW41X3Jwc19zZXQocnBzLCBuZXdfZnJlcSkpCisJCXJwcy0+Y3VyX2ZyZXEgPSBu ZXdfZnJlcTsKKworCXNwaW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Cit9CisKK3ZvaWQgaW50ZWxf cnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCW11dGV4X2luaXQoJnJwcy0+bG9jayk7 CisJbXV0ZXhfaW5pdCgmcnBzLT5wb3dlci5tdXRleCk7CisKKwlJTklUX1dPUksoJnJwcy0+d29y aywgcnBzX3dvcmspOworCisJYXRvbWljX3NldCgmcnBzLT5udW1fd2FpdGVycywgMCk7CisKKwlp ZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJY2h2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAo SVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJdmx2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAoSU5U RUxfR0VOKGk5MTUpID49IDYpCisJCWdlbjZfcnBzX2luaXQocnBzKTsKKwllbHNlIGlmIChJU19J Uk9OTEFLRV9NKGk5MTUpKQorCQlnZW41X3Jwc19pbml0KHJwcyk7CisKKwkvKiBEZXJpdmUgaW5p dGlhbCB1c2VyIHByZWZlcmVuY2VzL2xpbWl0cyBmcm9tIHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8K KwlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7CisJcnBzLT5taW5fZnJl cV9zb2Z0bGltaXQgPSBycHMtPm1pbl9mcmVxOworCisJLyogQWZ0ZXIgc2V0dGluZyBtYXgtc29m dGxpbWl0LCBmaW5kIHRoZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KKwlpZiAoSVNfR0VOKGk5MTUs IDYpIHx8IElTX0lWWUJSSURHRShpOTE1KSB8fCBJU19IQVNXRUxMKGk5MTUpKSB7CisJCXUzMiBw YXJhbXMgPSAwOworCisJCXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9SRUFEX09D X1BBUkFNUywKKwkJCQkgICAgICAgJnBhcmFtcywgTlVMTCk7CisJCWlmIChwYXJhbXMgJiBCSVQo MzEpKSB7IC8qIE9DIHN1cHBvcnRlZCAqLworCQkJRFJNX0RFQlVHX0RSSVZFUigiT3ZlcmNsb2Nr aW5nIHN1cHBvcnRlZCwgbWF4OiAlZE1Ieiwgb3ZlcmNsb2NrOiAlZE1IelxuIiwKKwkJCQkJIChy cHMtPm1heF9mcmVxICYgMHhmZikgKiA1MCwKKwkJCQkJIChwYXJhbXMgJiAweGZmKSAqIDUwKTsK KwkJCXJwcy0+bWF4X2ZyZXEgPSBwYXJhbXMgJiAweGZmOworCQl9CisJfQorCisJLyogRmluYWxs eSBhbGxvdyB1cyB0byBib29zdCB0byBtYXggYnkgZGVmYXVsdCAqLworCXJwcy0+Ym9vc3RfZnJl cSA9IHJwcy0+bWF4X2ZyZXE7CisJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJw cy0+Y3VyX2ZyZXEgPSBycHMtPmlkbGVfZnJlcTsKKworCXJwcy0+cG1faW50cm1za19tYnogPSAw OworCisJLyoKKwkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5n IG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKKwkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMg bWFza2VkLgorCSAqCisJICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVjZWQg b24gVkxWLENIVi4KKwkgKi8KKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpCisJCXJwcy0+cG1f aW50cm1za19tYnogfD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOworCisJaWYgKElOVEVMX0dF TihpOTE1KSA+PSA4KQorCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjhfUE1JTlRSX0RJU0FC TEVfUkVESVJFQ1RfVE9fR1VDOworfQorCit1MzIgaW50ZWxfZ2V0X2NhZ2Yoc3RydWN0IGludGVs X3JwcyAqcnBzLCB1MzIgcnBzdGF0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgY2FnZjsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gOSkKKwkJY2FnZiA9IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NI SUZUOworCWVsc2UgaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQor CQljYWdmID0gKHJwc3RhdCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOworCWVs c2UKKwkJY2FnZiA9IChycHN0YXQgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9DQUdGX1NISUZU OworCisJcmV0dXJuICBjYWdmOworfQorCisvKiBFeHRlcm5hbCBpbnRlcmZhY2UgZm9yIGludGVs X2lwcy5rbyAqLworCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgX19yY3UgKmlwc19t Y2hkZXY7CisKKy8qKgorICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUgaTkx NSBkcml2ZXIgaXMgbm93IGxvYWRlZCwgaWYKKyAqIElQUyBnb3QgbG9hZGVkIGZpcnN0LgorICoK KyAqIFRoaXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxlIGhhcyB0byBk ZXBlbmQgb24gdGhlCisgKiBvdGhlciBpbiBvcmRlciBmb3IgSVBTIHRvIGRvIHRoZSBhcHByb3By aWF0ZSBjb21tdW5pY2F0aW9uIG9mCisgKiBHUFUgdHVyYm8gbGltaXRzIHRvIGk5MTUuCisgKi8K K3N0YXRpYyB2b2lkCitpcHNfcGluZ19mb3JfaTkxNV9sb2FkKHZvaWQpCit7CisJdm9pZCAoKmxp bmspKHZvaWQpOworCisJbGluayA9IHN5bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIp OworCWlmIChsaW5rKSB7CisJCWxpbmsoKTsKKwkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1 X2RyaXZlcik7CisJfQorfQorCit2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0 IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBz KTsKKworCS8qCisJICogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3aXRoIGlu dGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKKwkgKiBzZXQgdXAsIHRvIGF2b2lkIGludGVsLWlw cyBzbmVha2luZyBpbiBhbmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuCisJICovCisJcmN1X2Fzc2ln bl9wb2ludGVyKGlwc19tY2hkZXYsIGd0LT5pOTE1KTsKKworCWlwc19waW5nX2Zvcl9pOTE1X2xv YWQoKTsKK30KKwordm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVs X3JwcyAqcnBzKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihpcHNfbWNoZGV2LCBOVUxMKTsKK30K Kworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICptY2hkZXZfZ2V0KHZvaWQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaTkx NSA9IHJjdV9kZXJlZmVyZW5jZShpcHNfbWNoZGV2KTsKKwlpZiAoIWtyZWZfZ2V0X3VubGVzc196 ZXJvKCZpOTE1LT5kcm0ucmVmKSkKKwkJaTkxNSA9IE5VTEw7CisJcmN1X3JlYWRfdW5sb2NrKCk7 CisKKwlyZXR1cm4gaTkxNTsKK30KKworLyoqCisgKiBpOTE1X3JlYWRfbWNoX3ZhbCAtIHJldHVy biB2YWx1ZSBmb3IgSVBTIHVzZQorICoKKyAqIENhbGN1bGF0ZSBhbmQgcmV0dXJuIGEgdmFsdWUg Zm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5nIHdoZXRoZXIKKyAqIHdlIGhh dmUgdGhlcm1hbCBhbmQgcG93ZXIgaGVhZHJvb20gdG8gaW5jcmVhc2UgQ1BVIG9yIEdQVSBwb3dl ciBidWRnZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaTkxNV9yZWFkX21jaF92YWwodm9pZCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwl1bnNpZ25lZCBsb25nIGNoaXBzZXRf dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGdyYXBoaWNzX3ZhbCA9IDA7CisJaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0 dXJuIDA7CisKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUtPnJ1bnRpbWVfcG0sIHdha2Vy ZWYpIHsKKwkJc3RydWN0IGludGVsX2lwcyAqaXBzID0gJmk5MTUtPmd0LnJwcy5pcHM7CisKKwkJ c3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCQljaGlwc2V0X3ZhbCA9IF9faXBzX2NoaXBz ZXRfdmFsKGlwcyk7CisJCWdyYXBoaWNzX3ZhbCA9IF9faXBzX2dmeF92YWwoaXBzKTsKKwkJc3Bp bl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJfQorCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRy bSk7CisJcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFsOworfQorRVhQT1JUX1NZTUJP TF9HUEwoaTkxNV9yZWFkX21jaF92YWwpOworCisvKioKKyAqIGk5MTVfZ3B1X3JhaXNlIC0gcmFp c2UgR1BVIGZyZXF1ZW5jeSBsaW1pdAorICoKKyAqIFJhaXNlIHRoZSBsaW1pdDsgSVBTIGluZGlj YXRlcyB3ZSBoYXZlIHRoZXJtYWwgaGVhZHJvb20uCisgKi8KK2Jvb2wgaTkxNV9ncHVfcmFpc2Uo dm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50ZWxf cnBzICpycHM7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJu IGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1jaGRl dl9sb2NrKTsKKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPCBycHMtPm1heF9mcmVxKQor CQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCsrOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xv Y2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHRydWU7Cit9CitFWFBP UlRfU1lNQk9MX0dQTChpOTE1X2dwdV9yYWlzZSk7CisKKy8qKgorICogaTkxNV9ncHVfbG93ZXIg LSBsb3dlciBHUFUgZnJlcXVlbmN5IGxpbWl0CisgKgorICogSVBTIGluZGljYXRlcyB3ZSdyZSBj bG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJhY2sgdGhlIEdQVQorICogZnJl cXVlbmN5IG1heGltdW0uCisgKi8KK2Jvb2wgaTkxNV9ncHVfbG93ZXIodm9pZCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7CisKKwlp OTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBz ID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlpZiAo cnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPiBycHMtPm1pbl9mcmVxKQorCQlycHMtPm1heF9mcmVx X3NvZnRsaW1pdC0tOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJZHJtX2Rl dl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChp OTE1X2dwdV9sb3dlcik7CisKKy8qKgorICogaTkxNV9ncHVfYnVzeSAtIGluZGljYXRlIEdQVSBi dXNpbmVzcyB0byBJUFMKKyAqCisgKiBUZWxsIHRoZSBJUFMgZHJpdmVyIHdoZXRoZXIgb3Igbm90 IHRoZSBHUFUgaXMgYnVzeS4KKyAqLworYm9vbCBpOTE1X2dwdV9idXN5KHZvaWQpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJYm9vbCByZXQ7CisKKwlpOTE1ID0gbWNoZGV2 X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaTkxNS0+Z3Qu YXdha2U7CisKKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKKwlyZXR1cm4gcmV0OworfQorRVhQ T1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfYnVzeSk7CisKKy8qKgorICogaTkxNV9ncHVfdHVyYm9f ZGlzYWJsZSAtIGRpc2FibGUgZ3JhcGhpY3MgdHVyYm8KKyAqCisgKiBEaXNhYmxlIGdyYXBoaWNz IHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4IGZyZXF1ZW5jeSBhbmQgc2V0dGluZyB0aGUKKyAq IGN1cnJlbnQgZnJlcXVlbmN5IHRvIHRoZSBkZWZhdWx0LgorICovCitib29sIGk5MTVfZ3B1X3R1 cmJvX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlz dHJ1Y3QgaW50ZWxfcnBzICpycHM7CisJYm9vbCByZXQ7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgp OworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsK KworCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlycHMtPm1heF9mcmVxX3NvZnRsaW1p dCA9IHJwcy0+bWluX2ZyZXE7CisJcmV0ID0gZ2VuNV9ycHNfc2V0KCZpOTE1LT5ndC5ycHMsIHJw cy0+bWluX2ZyZXEpOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJZHJtX2Rl dl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGk5 MTVfZ3B1X3R1cmJvX2Rpc2FibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcnBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk5N2E0YjRlMDIwNwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5oCkBAIC0wLDAg KzEsMzcgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIElOVEVMX1JQ U19ICisjZGVmaW5lIElOVEVMX1JQU19ICisKKyNpbmNsdWRlICJpbnRlbF9ycHNfdHlwZXMuaCIK Kworc3RydWN0IGk5MTVfcmVxdWVzdDsKKwordm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGlu dGVsX3JwcyAqcnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBp bnRlbF9ycHMgKnJwcyk7CisKK3ZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpOwordm9pZCBpbnRlbF9ycHNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwor Cit2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lkIGludGVs X3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2Jvb3N0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKKworaW50IGludGVsX3Jwc19zZXQoc3RydWN0IGlu dGVsX3JwcyAqcnBzLCB1OCB2YWwpOwordm9pZCBpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIGJvb2wgaW50ZXJhY3RpdmUpOworCitpbnQgaW50ZWxfZ3B1 X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsKK2ludCBpbnRlbF9mcmVxX29w Y29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpOwordTMyIGludGVsX2dldF9jYWdm KHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdDEpOworCit2b2lkIGdlbjVfcnBzX2ly cV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lkIGdlbjZfcnBzX2lycV9oYW5k bGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcik7Cit2b2lkIGdlbjExX3Jwc19p cnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpOworCisjZW5kaWYg LyogSU5URUxfUlBTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3Jwc190eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVz LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MGViMWZiNjUxZTcK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlw ZXMuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lm bmRlZiBJTlRFTF9SUFNfVFlQRVNfSAorI2RlZmluZSBJTlRFTF9SUFNfVFlQRVNfSAorCisjaW5j bHVkZSA8bGludXgvYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvd29ya3F1ZXVlLmg+CisKK3N0cnVjdCBpbnRlbF9pcHMgeworCXU2NCBsYXN0X2NvdW50MTsK Kwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZTE7CisJdW5zaWduZWQgbG9uZyBjaGlwc2V0X3Bvd2Vy OworCXU2NCBsYXN0X2NvdW50MjsKKwl1NjQgbGFzdF90aW1lMjsKKwl1bnNpZ25lZCBsb25nIGdm eF9wb3dlcjsKKwl1OCBjb3JyOworCisJaW50IGMsIG07Cit9OworCitzdHJ1Y3QgaW50ZWxfcnBz X2VpIHsKKwlrdGltZV90IGt0aW1lOworCXUzMiByZW5kZXJfYzA7CisJdTMyIG1lZGlhX2MwOwor fTsKKworc3RydWN0IGludGVsX3JwcyB7CisJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3Rz IGVuYWJsaW5nIGFuZCB0aGUgd29ya2VyICovCisKKwkvKgorCSAqIHdvcmssIGludGVycnVwdHNf ZW5hYmxlZCBhbmQgcG1faWlyIGFyZSBwcm90ZWN0ZWQgYnkKKwkgKiBkZXZfcHJpdi0+aXJxX2xv Y2sKKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlib29sIGVuYWJsZWQ7CisJYm9v bCBhY3RpdmU7CisJdTMyIHBtX2lpcjsKKworCS8qIFBNIGludGVycnVwdCBiaXRzIHRoYXQgc2hv dWxkIG5ldmVyIGJlIG1hc2tlZCAqLworCXUzMiBwbV9pbnRybXNrX21iejsKKwl1MzIgcG1fZXZl bnRzOworCisJLyogRnJlcXVlbmNpZXMgYXJlIHN0b3JlZCBpbiBwb3RlbnRpYWxseSBwbGF0Zm9y bSBkZXBlbmRlbnQgbXVsdGlwbGVzLgorCSAqIEluIG90aGVyIHdvcmRzLCAqX2ZyZXEgbmVlZHMg dG8gYmUgbXVsdGlwbGllZCBieSBYIHRvIGJlIGludGVyZXN0aW5nLgorCSAqIFNvZnQgbGltaXRz IGFyZSB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3IgdGhlIGR5bmFtaWMgcmVjbG9ja2luZyBkb25l CisJICogYnkgdGhlIGRyaXZlciAocmFpc2UgZnJlcXVlbmNpZXMgdW5kZXIgaGVhdnkgbG9hZHMs IGFuZCBsb3dlciBmb3IKKwkgKiBsaWdodGVyIGxvYWRzKS4gSGFyZCBsaW1pdHMgYXJlIHRob3Nl IGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqCisJICogQSBkaXN0aW5jdGlvbiBpcyBtYWRl IGZvciBvdmVyY2xvY2tpbmcsIHdoaWNoIGlzIG5ldmVyIGVuYWJsZWQgYnkKKwkgKiBkZWZhdWx0 LCBhbmQgaXMgY29uc2lkZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFyZCBsaW1pdCBpZiBpdCdzCisJ ICogcG9zc2libGUgYXQgYWxsLgorCSAqLworCXU4IGN1cl9mcmVxOwkJLyogQ3VycmVudCBmcmVx dWVuY3kgKGNhY2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KKwl1OCBsYXN0X2ZyZXE7CQkvKiBMYXN0 IHN3cXJlcSBmcmVxdWVuY3kgKi8KKwl1OCBtaW5fZnJlcV9zb2Z0bGltaXQ7CS8qIE1pbmltdW0g ZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCisJdTggbWF4X2ZyZXFfc29mdGxp bWl0OwkvKiBNYXggZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCisJdTggbWF4 X2ZyZXE7CQkvKiBNYXhpbXVtIGZyZXF1ZW5jeSwgUlAwIGlmIG5vdCBvdmVyY2xvY2tpbmcgKi8K Kwl1OCBtaW5fZnJlcTsJCS8qIEFLQSBSUG4uIE1pbmltdW0gZnJlcXVlbmN5ICovCisJdTggYm9v c3RfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2FpdCBib29zdGluZyAqLwor CXU4IGlkbGVfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2UgYXJlIGlkbGUg Ki8KKwl1OCBlZmZpY2llbnRfZnJlcTsJLyogQUtBIFJQZS4gUHJlLWRldGVybWluZWQgYmFsYW5j ZWQgZnJlcXVlbmN5ICovCisJdTggcnAxX2ZyZXE7CQkvKiAibGVzcyB0aGFuIiBSUDAgcG93ZXIv ZnJlcWVuY3kgKi8KKwl1OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVyY2xvY2tlZCBtYXggZnJlcXVl bmN5LiAqLworCXUxNiBncGxsX3JlZl9mcmVxOwkvKiB2bHYvY2h2IEdQTEwgcmVmZXJlbmNlIGZy ZXF1ZW5jeSAqLworCisJaW50IGxhc3RfYWRqOworCisJc3RydWN0IHsKKwkJc3RydWN0IG11dGV4 IG11dGV4OworCisJCWVudW0geyBMT1dfUE9XRVIsIEJFVFdFRU4sIEhJR0hfUE9XRVIgfSBtb2Rl OworCQl1bnNpZ25lZCBpbnQgaW50ZXJhY3RpdmU7CisKKwkJdTggdXBfdGhyZXNob2xkOyAvKiBD dXJyZW50ICVidXN5IHJlcXVpcmVkIHRvIHVwbG9jayAqLworCQl1OCBkb3duX3RocmVzaG9sZDsg LyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sgKi8KKwl9IHBvd2VyOworCisJ YXRvbWljX3QgbnVtX3dhaXRlcnM7CisJYXRvbWljX3QgYm9vc3RzOworCisJLyogbWFudWFsIHdh IHJlc2lkZW5jeSBjYWxjdWxhdGlvbnMgKi8KKwlzdHJ1Y3QgaW50ZWxfcnBzX2VpIGVpOworCXN0 cnVjdCBpbnRlbF9pcHMgaXBzOworfTsKKworI2VuZGlmIC8qIElOVEVMX1JQU19UWVBFU19IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Yy5jCmluZGV4IGVkNjRmZDliZTZhOS4u MjNhMDNhMjg0ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwpAQCAt MjMsNiArMjMsOCBAQAogICovCiAKICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgorI2luY2x1ZGUg Imd0L2ludGVsX2d0X2lycS5oIgorI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtX2lycS5oIgogI2lu Y2x1ZGUgImludGVsX2d1Yy5oIgogI2luY2x1ZGUgImludGVsX2d1Y19hZHMuaCIKICNpbmNsdWRl ICJpbnRlbF9ndWNfc3VibWlzc2lvbi5oIgpAQCAtNzUsNiArNzcsOTEgQEAgdm9pZCBpbnRlbF9n dWNfaW5pdF9zZW5kX3JlZ3Moc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCWd1Yy0+c2VuZF9yZWdz LmZ3X2RvbWFpbnMgPSBmd19kb21haW5zOwogfQogCitzdGF0aWMgdm9pZCBnZW45X3Jlc2V0X2d1 Y19pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0ID0gZ3VjX3RvX2d0KGd1Yyk7CisKKwlhc3NlcnRfcnBtX3dha2Vsb2NrX2hlbGQoJmd0LT5p OTE1LT5ydW50aW1lX3BtKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ2Vu Nl9ndF9wbV9yZXNldF9paXIoZ3QsIGd0LT5wbV9ndWNfZXZlbnRzKTsKKwlzcGluX3VubG9ja19p cnEoJmd0LT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjlfZW5hYmxlX2d1Y19pbnRl cnJ1cHRzKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g Z3VjX3RvX2d0KGd1Yyk7CisKKwlhc3NlcnRfcnBtX3dha2Vsb2NrX2hlbGQoJmd0LT5pOTE1LT5y dW50aW1lX3BtKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJaWYgKCFndWMt PmludGVycnVwdHMuZW5hYmxlZCkgeworCQlXQVJOX09OX09OQ0UoaW50ZWxfdW5jb3JlX3JlYWQo Z3QtPnVuY29yZSwgR0VOOF9HVF9JSVIoMikpICYKKwkJCSAgICAgZ3QtPnBtX2d1Y19ldmVudHMp OworCQlndWMtPmludGVycnVwdHMuZW5hYmxlZCA9IHRydWU7CisJCWdlbjZfZ3RfcG1fZW5hYmxl X2lycShndCwgZ3QtPnBtX2d1Y19ldmVudHMpOworCX0KKwlzcGluX3VubG9ja19pcnEoJmd0LT5p cnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjlfZGlzYWJsZV9ndWNfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19n dChndWMpOworCisJYXNzZXJ0X3JwbV93YWtlbG9ja19oZWxkKCZndC0+aTkxNS0+cnVudGltZV9w bSk7CisKKwlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCWd1Yy0+aW50ZXJydXB0cy5l bmFibGVkID0gZmFsc2U7CisKKwlnZW42X2d0X3BtX2Rpc2FibGVfaXJxKGd0LCBndC0+cG1fZ3Vj X2V2ZW50cyk7CisKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJaW50ZWxfc3lu Y2hyb25pemVfaXJxKGd0LT5pOTE1KTsKKworCWdlbjlfcmVzZXRfZ3VjX2ludGVycnVwdHMoZ3Vj KTsKK30KKworc3RhdGljIHZvaWQgZ2VuMTFfcmVzZXRfZ3VjX2ludGVycnVwdHMoc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3QoZ3VjKTsK KworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ2VuMTFfZ3RfcmVzZXRfb25lX2lp cihndCwgMCwgR0VOMTFfR1VDKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cit9 CisKK3N0YXRpYyB2b2lkIGdlbjExX2VuYWJsZV9ndWNfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxf Z3VjICpndWMpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19ndChndWMpOworCisJ c3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlpZiAoIWd1Yy0+aW50ZXJydXB0cy5lbmFi bGVkKSB7CisJCXUzMiBldmVudHMgPSBSRUdfRklFTERfUFJFUChFTkdJTkUxX01BU0ssIEdVQ19J TlRSX0dVQzJIT1NUKTsKKworCQlXQVJOX09OX09OQ0UoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihn dCwgMCwgR0VOMTFfR1VDKSk7CisJCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU4x MV9HVUNfU0dfSU5UUl9FTkFCTEUsIGV2ZW50cyk7CisJCWludGVsX3VuY29yZV93cml0ZShndC0+ dW5jb3JlLCBHRU4xMV9HVUNfU0dfSU5UUl9NQVNLLCB+ZXZlbnRzKTsKKwkJZ3VjLT5pbnRlcnJ1 cHRzLmVuYWJsZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7 Cit9CisKK3N0YXRpYyB2b2lkIGdlbjExX2Rpc2FibGVfZ3VjX2ludGVycnVwdHMoc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3QoZ3VjKTsK KworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ3VjLT5pbnRlcnJ1cHRzLmVuYWJs ZWQgPSBmYWxzZTsKKworCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU4xMV9HVUNf U0dfSU5UUl9NQVNLLCB+MCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKGd0LT51bmNvcmUsIEdFTjEx X0dVQ19TR19JTlRSX0VOQUJMRSwgMCk7CisKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7CisJaW50ZWxfc3luY2hyb25pemVfaXJxKGd0LT5pOTE1KTsKKworCWdlbjExX3Jlc2V0X2d1 Y19pbnRlcnJ1cHRzKGd1Yyk7Cit9CisKIHZvaWQgaW50ZWxfZ3VjX2luaXRfZWFybHkoc3RydWN0 IGludGVsX2d1YyAqZ3VjKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3Vj X3RvX2d0KGd1YyktPmk5MTU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCBkOTFlNDk2NzIxN2UuLjJiYmRmMzVlOTIxZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5j CkBAIC0xMDA0LDcgKzEwMDQsNyBAQCB2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQogCiBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0c19jYXB0dXJl KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5p OTE1LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7CiAJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKIAlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmU7CiAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CkBAIC0xMDUwLDcgKzEw NTAsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9n dCAqZ3QpCiAKIHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX3JlbGVhc2Uoc3RydWN0IGludGVs X2d0ICpndCkKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPmk5MTUtPmd0X3BtLnJw czsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPnJwczsKIAlzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMKaW5kZXggNjQxMmU5Y2E0YzE3Li4zZDg4YzExM2Y2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCkBAIC00MCw2ICs0MCw4IEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1f Y29udGV4dC5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCisjaW5jbHVkZSAiZ3QvaW50 ZWxfcmM2LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiZ3QvdWMvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uaCIKIAogI2luY2x1ZGUgImk5MTVfZGVidWdmcy5oIgpAQCAtODQy LDcgKzg0NCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gJmRldl9wcml2LT51bmNvcmU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5y cHM7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTg3OCwy MyArODgwLDIzIEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJc2VxX3ByaW50ZihtLCAiRERSIGZyZXE6ICVkIE1Ielxu IiwgZGV2X3ByaXYtPm1lbV9mcmVxKTsKIAogCQlzZXFfcHJpbnRmKG0sICJhY3R1YWwgR1BVIGZy ZXE6ICVkIE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCAoZnJlcV9zdHMg Pj4gOCkgJiAweGZmKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIChmcmVxX3N0cyA+PiA4 KSAmIDB4ZmYpKTsKIAogCQlzZXFfcHJpbnRmKG0sICJjdXJyZW50IEdQVSBmcmVxOiAlZCBNSHpc biIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOworCQkJ ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50Ziht LCAibWF4IEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5tYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9m cmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAibWluIEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkg ICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOworCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAiaWRsZSBH UFUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ aWRsZV9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVxKSk7 CiAKIAkJc2VxX3ByaW50ZihtLAogCQkJICAgImVmZmljaWVudCAoUlBlKSBmcmVxdWVuY3k6ICVk IE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9m cmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsK IAl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewogCQl1MzIgcnBfc3RhdGVf bGltaXRzOwogCQl1MzIgZ3RfcGVyZl9zdGF0dXM7CkBAIC05MjgsNyArOTMwLDcgQEAgc3RhdGlj IGludCBpOTE1X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2Vk KQogCQkJZWxzZQogCQkJCXJlcWYgPj49IDI1OwogCQl9Ci0JCXJlcWYgPSBpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwgcmVxZik7CisJCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShycHMsIHJlcWYpOwog CiAJCXJwbW9kZWN0bCA9IEk5MTVfUkVBRChHRU42X1JQX0NPTlRST0wpOwogCQlycGluY2xpbWl0 ID0gSTkxNV9SRUFEKEdFTjZfUlBfVVBfVEhSRVNIT0xEKTsKQEAgLTk0MSw4ICs5NDMsNyBAQCBz dGF0aWMgaW50IGk5MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1 bnVzZWQpCiAJCXJwZG93bmVpID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV05fRUkpICYgR0VO Nl9DVVJJQVZHX01BU0s7CiAJCXJwY3VyZG93biA9IEk5MTVfUkVBRChHRU42X1JQX0NVUl9ET1dO KSAmIEdFTjZfQ1VSQlNZVEFWR19NQVNLOwogCQlycHByZXZkb3duID0gSTkxNV9SRUFEKEdFTjZf UlBfUFJFVl9ET1dOKSAmIEdFTjZfQ1VSQlNZVEFWR19NQVNLOwotCQljYWdmID0gaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIHJwc3Rh dCkpOworCQljYWdmID0gaW50ZWxfZ3B1X2ZyZXEocnBzLCBpbnRlbF9nZXRfY2FnZihycHMsIHJw c3RhdCkpOwogCiAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3Jl LCBGT1JDRVdBS0VfQUxMKTsKIApAQCAtMTAxOSwzNyArMTAyMCwzNyBAQCBzdGF0aWMgaW50IGk5 MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJCW1h eF9mcmVxICo9IChJU19HRU45X0JDKGRldl9wcml2KSB8fAogCQkJICAgICBJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOwogCQlzZXFfcHJpbnRmKG0sICJM b3dlc3QgKFJQTikgZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRl dl9wcml2LCBtYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkp OwogCiAJCW1heF9mcmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4ZmYwMCkgPj4gODsKIAkJbWF4X2Zy ZXEgKj0gKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8CiAJCQkgICAgIElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7CiAJCXNlcV9wcmludGYobSwgIk5vbWlu YWwgKFJQMSkgZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9w cml2LCBtYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwog CiAJCW1heF9mcmVxID0gKElTX0dFTjlfTFAoZGV2X3ByaXYpID8gcnBfc3RhdGVfY2FwID4+IDE2 IDoKIAkJCSAgICBycF9zdGF0ZV9jYXAgPj4gMCkgJiAweGZmOwogCQltYXhfZnJlcSAqPSAoSVNf R0VOOV9CQyhkZXZfcHJpdikgfHwKIAkJCSAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/ IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKIAkJc2VxX3ByaW50ZihtLCAiTWF4IG5vbi1vdmVyY2xv Y2tlZCAoUlAwKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIG1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIG1heF9mcmVxKSk7 CiAJCXNlcV9wcmludGYobSwgIk1heCBvdmVyY2xvY2tlZCBmcmVxdWVuY3k6ICVkTUh6XG4iLAot CQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsKKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwgIkN1 cnJlbnQgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+Y3VyX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSkp OwogCQlzZXFfcHJpbnRmKG0sICJBY3R1YWwgZnJlcTogJWQgTUh6XG4iLCBjYWdmKTsKIAkJc2Vx X3ByaW50ZihtLCAiSWRsZSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShk ZXZfcHJpdiwgcnBzLT5pZGxlX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBz LT5pZGxlX2ZyZXEpKTsKIAkJc2VxX3ByaW50ZihtLCAiTWluIGZyZXE6ICVkIE1IelxuIiwKLQkJ CSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKSk7CisJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpKTsKIAkJc2VxX3ByaW50ZihtLCAiQm9vc3Qg ZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+Ym9v c3RfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsK IAkJc2VxX3ByaW50ZihtLCAiTWF4IGZyZXE6ICVkIE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMs IHJwcy0+bWF4X2ZyZXEpKTsKIAkJc2VxX3ByaW50ZihtLAogCQkJICAgImVmZmljaWVudCAoUlBl KSBmcmVxdWVuY3k6ICVkIE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBy cHMtPmVmZmljaWVudF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZm aWNpZW50X2ZyZXEpKTsKIAl9IGVsc2UgewogCQlzZXFfcHV0cyhtLCAibm8gUC1zdGF0ZSBpbmZv IGF2YWlsYWJsZVxuIik7CiAJfQpAQCAtMTIyNywxMSArMTIyOCwxMyBAQCBzdGF0aWMgdm9pZCBw cmludF9yYzZfcmVzKHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCSAgY29uc3QgY2hhciAqdGl0bGUs CiAJCQkgIGNvbnN0IGk5MTVfcmVnX3QgcmVnKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKKwlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKIAotCXNlcV9wcmludGYobSwgIiVzICV1ICglbGx1IHVzKVxuIiwKLQkJICAg dGl0bGUsIEk5MTVfUkVBRChyZWcpLAotCQkgICBpbnRlbF9yYzZfcmVzaWRlbmN5X3VzKGRldl9w cml2LCByZWcpKTsKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUtPnJ1bnRpbWVfcG0sIHdh a2VyZWYpCisJCXNlcV9wcmludGYobSwgIiVzICV1ICglbGx1IHVzKVxuIiwgdGl0bGUsCisJCQkg ICBpbnRlbF91bmNvcmVfcmVhZCgmaTkxNS0+dW5jb3JlLCByZWcpLAorCQkJICAgaW50ZWxfcmM2 X3Jlc2lkZW5jeV91cygmaTkxNS0+Z3QucmM2LCByZWcpKTsKIH0KIAogc3RhdGljIGludCB2bHZf ZHJwY19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTE1MDYsMzQgKzE1MDksMTAgQEAgc3Rh dGljIGludCBpOTE1X3NyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkK IAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X2Vtb25fc3RhdHVzKHN0cnVjdCBzZXFf ZmlsZSAqbSwgdm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwot Ci0JaWYgKCFJU19HRU4oaTkxNSwgNSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jd2l0aF9pbnRl bF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Ci0JCXVuc2lnbmVkIGxv bmcgdGVtcCwgY2hpcHNldCwgZ2Z4OwotCi0JCXRlbXAgPSBpOTE1X21jaF92YWwoaTkxNSk7Ci0J CWNoaXBzZXQgPSBpOTE1X2NoaXBzZXRfdmFsKGk5MTUpOwotCQlnZnggPSBpOTE1X2dmeF92YWwo aTkxNSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiR01DSCB0ZW1wOiAlbGRcbiIsIHRlbXApOwotCQlz ZXFfcHJpbnRmKG0sICJDaGlwc2V0IHBvd2VyOiAlbGRcbiIsIGNoaXBzZXQpOwotCQlzZXFfcHJp bnRmKG0sICJHRlggcG93ZXI6ICVsZFxuIiwgZ2Z4KTsKLQkJc2VxX3ByaW50ZihtLCAiVG90YWwg cG93ZXI6ICVsZFxuIiwgY2hpcHNldCArIGdmeCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0 YXRpYyBpbnQgaTkxNV9yaW5nX2ZyZXFfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1 bnVzZWQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19p OTE1KG0tPnByaXZhdGUpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCXVu c2lnbmVkIGludCBtYXhfZ3B1X2ZyZXEsIG1pbl9ncHVfZnJlcTsKIAlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKIAlpbnQgZ3B1X2ZyZXEsIGlhX2ZyZXE7CkBAIC0xNTU4LDEwICsxNTM3LDExIEBA IHN0YXRpYyBpbnQgaTkxNV9yaW5nX2ZyZXFfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICp1bnVzZWQpCiAJCQkJICAgICAgIEdFTjZfUENPREVfUkVBRF9NSU5fRlJFUV9UQUJMRSwKIAkJ CQkgICAgICAgJmlhX2ZyZXEsIE5VTEwpOwogCQlzZXFfcHJpbnRmKG0sICIlZFx0XHQlZFx0XHRc dFx0JWRcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgKGdwdV9mcmVxICoKLQkJ CQkJCSAgICAgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8Ci0JCQkJCQkgICAgICBJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEwID8KLQkJCQkJCSAgICAgIEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSkpLAor CQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLAorCQkJCQkgIChncHVfZnJlcSAqCisJCQkJCSAgIChJ U19HRU45X0JDKGRldl9wcml2KSB8fAorCQkJCQkgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCA/CisJCQkJCSAgICBHRU45X0ZSRVFfU0NBTEVSIDogMSkpKSwKIAkJCSAgICgoaWFfZnJlcSA+ PiAwKSAmIDB4ZmYpICogMTAwLAogCQkJICAgKChpYV9mcmVxID4+IDgpICYgMHhmZikgKiAxMDAp OwogCX0KQEAgLTE4MDUsNyArMTc4NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpycHNfcG93ZXJf dG9fc3RyKHVuc2lnbmVkIGludCBwb3dlcikKIHN0YXRpYyBpbnQgaTkxNV9ycHNfYm9vc3RfaW5m byhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwotCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMgKnJw cyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCXUzMiBhY3RfZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7CiAJ aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAKQEAgLTE4MTcsNyArMTc5Nyw3IEBAIHN0YXRpYyBp bnQgaTkxNV9ycHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiAJ CQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsKIAkJCWFjdF9mcmVxID0gKGFjdF9mcmVxID4+IDgp ICYgMHhmZjsKIAkJfSBlbHNlIHsKLQkJCWFjdF9mcmVxID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3By aXYsCisJCQlhY3RfZnJlcSA9IGludGVsX2dldF9jYWdmKHJwcywKIAkJCQkJCSAgSTkxNV9SRUFE KEdFTjZfUlBTVEFUMSkpOwogCQl9CiAJfQpAQCAtMTgyOCwxNyArMTgwOCwxNyBAQCBzdGF0aWMg aW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQog CQkgICBhdG9taWNfcmVhZCgmcnBzLT5udW1fd2FpdGVycykpOwogCXNlcV9wcmludGYobSwgIklu dGVyYWN0aXZlPyAlZFxuIiwgUkVBRF9PTkNFKHJwcy0+cG93ZXIuaW50ZXJhY3RpdmUpKTsKIAlz ZXFfcHJpbnRmKG0sICJGcmVxdWVuY3kgcmVxdWVzdGVkICVkLCBhY3R1YWwgJWRcbiIsCi0JCSAg IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmN1cl9mcmVxKSwKLQkJICAgaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsIGFjdF9mcmVxKSk7CisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBz LT5jdXJfZnJlcSksCisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgYWN0X2ZyZXEpKTsKIAlzZXFf cHJpbnRmKG0sICIgIG1pbiBoYXJkOiVkLCBzb2Z0OiVkOyBtYXggc29mdDolZCwgaGFyZDolZFxu IiwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAotCQkgICBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpLAotCQkgICBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpLAotCQkgICBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJlcSkpOworCQkgICBpbnRlbF9ncHVf ZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpLAorCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ bWluX2ZyZXFfc29mdGxpbWl0KSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9m cmVxX3NvZnRsaW1pdCksCisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkp OwogCXNlcV9wcmludGYobSwgIiAgaWRsZTolZCwgZWZmaWNpZW50OiVkLCBib29zdDolZFxuIiwK LQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVxKSwKLQkJICAgaW50 ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAotCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ib29zdF9mcmVxKSk7CisJCSAgIGludGVsX2dwdV9mcmVx KHJwcywgcnBzLT5pZGxlX2ZyZXEpLAorCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZm aWNpZW50X2ZyZXEpLAorCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Ym9vc3RfZnJlcSkp OwogCiAJc2VxX3ByaW50ZihtLCAiV2FpdCBib29zdHM6ICVkXG4iLCBhdG9taWNfcmVhZCgmcnBz LT5ib29zdHMpKTsKIApAQCAtNDQwNiw3ICs0Mzg2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1faW5mb19saXN0IGk5MTVfZGVidWdmc19saXN0W10gPSB7CiAJeyJpOTE1X2ZyZXF1ZW5jeV9p bmZvIiwgaTkxNV9mcmVxdWVuY3lfaW5mbywgMH0sCiAJeyJpOTE1X2hhbmdjaGVja19pbmZvIiwg aTkxNV9oYW5nY2hlY2tfaW5mbywgMH0sCiAJeyJpOTE1X2RycGNfaW5mbyIsIGk5MTVfZHJwY19p bmZvLCAwfSwKLQl7Imk5MTVfZW1vbl9zdGF0dXMiLCBpOTE1X2Vtb25fc3RhdHVzLCAwfSwKIAl7 Imk5MTVfcmluZ19mcmVxX3RhYmxlIiwgaTkxNV9yaW5nX2ZyZXFfdGFibGUsIDB9LAogCXsiaTkx NV9mcm9udGJ1ZmZlcl90cmFja2luZyIsIGk5MTVfZnJvbnRidWZmZXJfdHJhY2tpbmcsIDB9LAog CXsiaTkxNV9mYmNfc3RhdHVzIiwgaTkxNV9mYmNfc3RhdHVzLCAwfSwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCmluZGV4IGNiNDJkNDRjYTMyOC4uZTllN2FlMTdjZjA3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKQEAgLTE0NzIsOSArMTQ3Miw2IEBAIHN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaHdf cHJvYmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXBtX3Fvc19hZGRfcmVx dWVzdCgmZGV2X3ByaXYtPnBtX3FvcywgUE1fUU9TX0NQVV9ETUFfTEFURU5DWSwKIAkJCSAgIFBN X1FPU19ERUZBVUxUX1ZBTFVFKTsKIAotCS8qIEJJT1Mgb2Z0ZW4gbGVhdmVzIFJDNiBlbmFibGVk LCBidXQgZGlzYWJsZSBpdCBmb3IgaHcgaW5pdCAqLwotCWludGVsX3Nhbml0aXplX2d0X3Bvd2Vy c2F2ZShkZXZfcHJpdik7Ci0KIAlpbnRlbF9ndF9pbml0X3dvcmthcm91bmRzKGRldl9wcml2KTsK IAogCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJp bGl0eSBvbiB0aGUKQEAgLTE1ODAsOCArMTU3Nyw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVy X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJYWNwaV92aWRl b19yZWdpc3RlcigpOwogCX0KIAotCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKQotCQlpbnRlbF9n cHVfaXBzX2luaXQoZGV2X3ByaXYpOworCWludGVsX2d0X2RyaXZlcl9yZWdpc3RlcigmZGV2X3By aXYtPmd0KTsKIAogCWludGVsX2F1ZGlvX2luaXQoZGV2X3ByaXYpOwogCkBAIC0xNjI0LDcgKzE2 MjAsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIAkgKi8KIAlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoJmRl dl9wcml2LT5kcm0pOwogCi0JaW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOworCWludGVsX2d0X2Ry aXZlcl91bnJlZ2lzdGVyKCZkZXZfcHJpdi0+Z3QpOwogCWFjcGlfdmlkZW9fdW5yZWdpc3Rlcigp OwogCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCkBAIC0xNzY3LDEwICsx NzYzLDggQEAgaW50IGk5MTVfZHJpdmVyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25z dCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCiBvdXRfY2xlYW51cF9odzoKIAlpOTE1X2Ry aXZlcl9od19yZW1vdmUoZGV2X3ByaXYpOworCWludGVsX2d0X2RyaXZlcl9yZWxlYXNlKCZkZXZf cHJpdi0+Z3QpOwogCWk5MTVfZ2d0dF9kcml2ZXJfcmVsZWFzZShkZXZfcHJpdik7Ci0KLQkvKiBQ YXJhbm9pYTogbWFrZSBzdXJlIHdlIGhhdmUgZGlzYWJsZWQgZXZlcnl0aGluZyBiZWZvcmUgd2Ug ZXhpdC4gKi8KLQlpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwogb3V0X2Ns ZWFudXBfbW1pbzoKIAlpOTE1X2RyaXZlcl9tbWlvX3JlbGVhc2UoZGV2X3ByaXYpOwogb3V0X3J1 bnRpbWVfcG1fcHV0OgpAQCAtMTg0MSw4ICsxODM1LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2 ZXJfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJaTkxNV9nZ3R0X2RyaXZlcl9y ZWxlYXNlKGRldl9wcml2KTsKIAotCS8qIFBhcmFub2lhOiBtYWtlIHN1cmUgd2UgaGF2ZSBkaXNh YmxlZCBldmVyeXRoaW5nIGJlZm9yZSB3ZSBleGl0LiAqLwotCWludGVsX3Nhbml0aXplX2d0X3Bv d2Vyc2F2ZShkZXZfcHJpdik7CisJaW50ZWxfZ3RfZHJpdmVyX3JlbGVhc2UoJmRldl9wcml2LT5n dCk7CiAKIAlpOTE1X2RyaXZlcl9tbWlvX3JlbGVhc2UoZGV2X3ByaXYpOwogCkBAIC0yMDc1LDcg KzIwNjgsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCWludCByZXQ7CiAKIAlkaXNhYmxlX3JwbV93YWtlcmVmX2Fzc2VydHMoJmRldl9wcml2 LT5ydW50aW1lX3BtKTsKLQlpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwor CWludGVsX2d0X3BtX2Rpc2FibGUoJmRldl9wcml2LT5ndCk7CiAKIAlpOTE1X2dlbV9zYW5pdGl6 ZShkZXZfcHJpdik7CiAKQEAgLTIyMDgsNyArMjIwMSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9kcm1f cmVzdW1lX2Vhcmx5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCWhzd19kaXNhYmxlX3BjOChk ZXZfcHJpdik7CiAJfQogCi0JaW50ZWxfc2FuaXRpemVfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsK KwlpbnRlbF9ndF9wbV9kaXNhYmxlKCZkZXZfcHJpdi0+Z3QpOwogCiAJaW50ZWxfcG93ZXJfZG9t YWluc19yZXN1bWUoZGV2X3ByaXYpOwogCkBAIC0yNzQ4LDkgKzI3NDEsNiBAQCBzdGF0aWMgaW50 IGludGVsX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICprZGV2KQogCXN0cnVjdCBpbnRl bF9ydW50aW1lX3BtICpycG0gPSAmZGV2X3ByaXYtPnJ1bnRpbWVfcG07CiAJaW50IHJldDsKIAot CWlmIChXQVJOX09OX09OQ0UoIShkZXZfcHJpdi0+Z3RfcG0ucmM2LmVuYWJsZWQgJiYgSEFTX1JD NihkZXZfcHJpdikpKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAoV0FSTl9PTl9PTkNFKCFI QVNfUlVOVElNRV9QTShkZXZfcHJpdikpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKaW5kZXggMzI2OTA4YTRiZGIxLi5kYjg0YTc0NDkwNjIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaApAQCAtNjM1LDEwNiArNjM1LDYgQEAgc3RydWN0IHZsdl9zMGl4X3N0YXRl IHsKIAl1MzIgY2xvY2tfZ2F0ZV9kaXMyOwogfTsKIAotc3RydWN0IGludGVsX3Jwc19laSB7Ci0J a3RpbWVfdCBrdGltZTsKLQl1MzIgcmVuZGVyX2MwOwotCXUzMiBtZWRpYV9jMDsKLX07Ci0KLXN0 cnVjdCBpbnRlbF9ycHMgewotCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBlbmFibGlu ZyBhbmQgdGhlIHdvcmtlciAqLwotCi0JLyoKLQkgKiB3b3JrLCBpbnRlcnJ1cHRzX2VuYWJsZWQg YW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5Ci0JICogZGV2X3ByaXYtPmlycV9sb2NrCi0JICov Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0JYm9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7Ci0J dTMyIHBtX2lpcjsKLQotCS8qIFBNIGludGVycnVwdCBiaXRzIHRoYXQgc2hvdWxkIG5ldmVyIGJl IG1hc2tlZCAqLwotCXUzMiBwbV9pbnRybXNrX21iejsKLQotCS8qIEZyZXF1ZW5jaWVzIGFyZSBz dG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0gZGVwZW5kZW50IG11bHRpcGxlcy4KLQkgKiBJ biBvdGhlciB3b3JkcywgKl9mcmVxIG5lZWRzIHRvIGJlIG11bHRpcGxpZWQgYnkgWCB0byBiZSBp bnRlcmVzdGluZy4KLQkgKiBTb2Z0IGxpbWl0cyBhcmUgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9y IHRoZSBkeW5hbWljIHJlY2xvY2tpbmcgZG9uZQotCSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZy ZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBhbmQgbG93ZXIgZm9yCi0JICogbGlnaHRlciBs b2FkcykuIEhhcmQgbGltaXRzIGFyZSB0aG9zZSBpbXBvc2VkIGJ5IHRoZSBoYXJkd2FyZS4KLQkg KgotCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBmb3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBu ZXZlciBlbmFibGVkIGJ5Ci0JICogZGVmYXVsdCwgYW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWJv dmUgdGhlIGhhcmQgbGltaXQgaWYgaXQncwotCSAqIHBvc3NpYmxlIGF0IGFsbC4KLQkgKi8KLQl1 OCBjdXJfZnJlcTsJCS8qIEN1cnJlbnQgZnJlcXVlbmN5IChjYWNoZWQsIG1heSBub3QgPT0gSFcp ICovCi0JdTggbWluX2ZyZXFfc29mdGxpbWl0OwkvKiBNaW5pbXVtIGZyZXF1ZW5jeSBwZXJtaXR0 ZWQgYnkgdGhlIGRyaXZlciAqLwotCXU4IG1heF9mcmVxX3NvZnRsaW1pdDsJLyogTWF4IGZyZXF1 ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLwotCXU4IG1heF9mcmVxOwkJLyogTWF4aW11 bSBmcmVxdWVuY3ksIFJQMCBpZiBub3Qgb3ZlcmNsb2NraW5nICovCi0JdTggbWluX2ZyZXE7CQkv KiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAqLwotCXU4IGJvb3N0X2ZyZXE7CQkvKiBGcmVx dWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9vc3RpbmcgKi8KLQl1OCBpZGxlX2ZyZXE7CQkv KiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdlIGFyZSBpZGxlICovCi0JdTggZWZmaWNpZW50 X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVkIGJhbGFuY2VkIGZyZXF1ZW5jeSAqLwot CXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIgUlAwIHBvd2VyL2ZyZXFlbmN5ICovCi0JdTgg cnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQgbWF4IGZyZXF1ZW5jeS4gKi8KLQl1MTYgZ3Bs bF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExMIHJlZmVyZW5jZSBmcmVxdWVuY3kgKi8KLQotCWlu dCBsYXN0X2FkajsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBtdXRleCBtdXRleDsKLQotCQllbnVt IHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BPV0VSIH0gbW9kZTsKLQkJdW5zaWduZWQgaW50 IGludGVyYWN0aXZlOwotCi0JCXU4IHVwX3RocmVzaG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1 aXJlZCB0byB1cGxvY2sgKi8KLQkJdTggZG93bl90aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1c3kg cmVxdWlyZWQgdG8gZG93bmNsb2NrICovCi0JfSBwb3dlcjsKLQotCWJvb2wgZW5hYmxlZDsKLQlh dG9taWNfdCBudW1fd2FpdGVyczsKLQlhdG9taWNfdCBib29zdHM7Ci0KLQkvKiBtYW51YWwgd2Eg cmVzaWRlbmN5IGNhbGN1bGF0aW9ucyAqLwotCXN0cnVjdCBpbnRlbF9ycHNfZWkgZWk7Ci19Owot Ci1zdHJ1Y3QgaW50ZWxfcmM2IHsKLQlib29sIGVuYWJsZWQ7Ci0JdTY0IHByZXZfaHdfcmVzaWRl bmN5WzRdOwotCXU2NCBjdXJfcmVzaWRlbmN5WzRdOwotfTsKLQotc3RydWN0IGludGVsX2xsY19w c3RhdGUgewotCWJvb2wgZW5hYmxlZDsKLX07Ci0KLXN0cnVjdCBpbnRlbF9nZW42X3Bvd2VyX21n bXQgewotCXN0cnVjdCBpbnRlbF9ycHMgcnBzOwotCXN0cnVjdCBpbnRlbF9yYzYgcmM2OwotCXN0 cnVjdCBpbnRlbF9sbGNfcHN0YXRlIGxsY19wc3RhdGU7Ci19OwotCi0vKiBkZWZpbmVkIGludGVs X3BtLmMgKi8KLWV4dGVybiBzcGlubG9ja190IG1jaGRldl9sb2NrOwotCi1zdHJ1Y3QgaW50ZWxf aWxrX3Bvd2VyX21nbXQgewotCXU4IGN1cl9kZWxheTsKLQl1OCBtaW5fZGVsYXk7Ci0JdTggbWF4 X2RlbGF5OwotCXU4IGZtYXg7Ci0JdTggZnN0YXJ0OwotCi0JdTY0IGxhc3RfY291bnQxOwotCXVu c2lnbmVkIGxvbmcgbGFzdF90aW1lMTsKLQl1bnNpZ25lZCBsb25nIGNoaXBzZXRfcG93ZXI7Ci0J dTY0IGxhc3RfY291bnQyOwotCXU2NCBsYXN0X3RpbWUyOwotCXVuc2lnbmVkIGxvbmcgZ2Z4X3Bv d2VyOwotCXU4IGNvcnI7Ci0KLQlpbnQgY19tOwotCWludCByX3Q7Ci19OwotCiAjZGVmaW5lIE1B WF9MM19TTElDRVMgMgogc3RydWN0IGludGVsX2wzX3Bhcml0eSB7CiAJdTMyICpyZW1hcF9pbmZv W01BWF9MM19TTElDRVNdOwpAQCAtMTM5Niw4ICsxMjk2LDYgQEAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgewogCQl1MzIgaXJxX21hc2s7CiAJCXUzMiBkZV9pcnFfbWFza1tJOTE1X01BWF9QSVBF U107CiAJfTsKLQl1MzIgZ3RfaXJxX21hc2s7Ci0JdTMyIHBtX3Jwc19ldmVudHM7CiAJdTMyIHBp cGVzdGF0X2lycV9tYXNrW0k5MTVfTUFYX1BJUEVTXTsKIAogCXN0cnVjdCBpOTE1X2hvdHBsdWcg aG90cGx1ZzsKQEAgLTE1MzAsMjEgKzE0MjgsMTIgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg ewogCSAqLwogCXUzMiBlZHJhbV9zaXplX21iOwogCi0JLyogZ2VuNisgR1QgUE0gc3RhdGUgKi8K LQlzdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210IGd0X3BtOwotCi0JLyogaWxrLW9ubHkgaXBz L3JwcyBzdGF0ZS4gRXZlcnl0aGluZyBpbiBoZXJlIGlzIHByb3RlY3RlZCBieSB0aGUgZ2xvYmFs Ci0JICogbWNoZGV2X2xvY2sgaW4gaW50ZWxfcG0uYyAqLwotCXN0cnVjdCBpbnRlbF9pbGtfcG93 ZXJfbWdtdCBpcHM7Ci0KIAlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zIHBvd2VyX2RvbWFpbnM7 CiAKIAlzdHJ1Y3QgaTkxNV9wc3IgcHNyOwogCiAJc3RydWN0IGk5MTVfZ3B1X2Vycm9yIGdwdV9l cnJvcjsKIAotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp2bHZfcGN0eDsKLQogCS8qIGxp c3Qgb2YgZmJkZXYgcmVnaXN0ZXIgb24gdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3QgaW50ZWxfZmJk ZXYgKmZiZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmYmRldl9zdXNwZW5kX3dvcms7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwppbmRleCAwZTBiNTRhYmRlNDguLjUzZTY0N2MyNzczZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxf bW9jcy5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxf cmVuZGVyc3RhdGUuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKICNpbmNsdWRlICJndC9p bnRlbF93b3JrYXJvdW5kcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTkzNCw3ICs5 MzUsNyBAQCB3YWl0X2Zvcl90aW1lbGluZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUs CiAJCSAqIHN0YWxscywgc28gYWxsb3cgdGhlIGdwdSB0byBib29zdCB0byBtYXhpbXVtIGNsb2Nr cy4KIAkJICovCiAJCWlmIChmbGFncyAmIEk5MTVfV0FJVF9GT1JfSURMRV9CT09TVCkKLQkJCWdl bjZfcnBzX2Jvb3N0KHJxKTsKKwkJCWludGVsX3Jwc19ib29zdChycSk7CiAKIAkJdGltZW91dCA9 IGk5MTVfcmVxdWVzdF93YWl0KHJxLCBmbGFncywgdGltZW91dCk7CiAJCWk5MTVfcmVxdWVzdF9w dXQocnEpOwpAQCAtMTM4MiwxNyArMTM4Myw2IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9lbmdpbmVz X3JlY29yZF9kZWZhdWx0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAlnb3RvIG91 dF9jdHg7CiB9CiAKLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX2luaXRfc2NyYXRjaChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JcmV0dXJuIGludGVs X2d0X2luaXRfc2NyYXRjaCgmaTkxNS0+Z3QsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1 X2dlbV9maW5pX3NjcmF0Y2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JaW50 ZWxfZ3RfZmluaV9zY3JhdGNoKCZpOTE1LT5ndCk7Ci19Ci0KIHN0YXRpYyBpbnQgaW50ZWxfZW5n aW5lc192ZXJpZnlfd29ya2Fyb3VuZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7 CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwpAQCAtMTQ0OCwxMiArMTQzOCw3IEBA IGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJ Z290byBlcnJfdW5sb2NrOwogCX0KIAotCXJldCA9IGk5MTVfZ2VtX2luaXRfc2NyYXRjaChkZXZf cHJpdiwKLQkJCQkgICAgSVNfR0VOKGRldl9wcml2LCAyKSA/IFNaXzI1NksgOiBQQUdFX1NJWkUp OwotCWlmIChyZXQpIHsKLQkJR0VNX0JVR19PTihyZXQgPT0gLUVJTyk7Ci0JCWdvdG8gZXJyX2dn dHQ7Ci0JfQorCWludGVsX2d0X2luaXQoJmRldl9wcml2LT5ndCk7CiAKIAlyZXQgPSBpbnRlbF9l bmdpbmVzX3NldHVwKGRldl9wcml2KTsKIAlpZiAocmV0KSB7CkBAIC0xNDczLDggKzE0NTgsNiBA QCBpbnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ CWdvdG8gZXJyX2NvbnRleHQ7CiAJfQogCi0JaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoZGV2X3By aXYpOwotCiAJcmV0ID0gaW50ZWxfdWNfaW5pdCgmZGV2X3ByaXYtPmd0LnVjKTsKIAlpZiAocmV0 KQogCQlnb3RvIGVycl9wbTsKQEAgLTE1NDMsMTYgKzE1MjYsMTMgQEAgaW50IGk5MTVfZ2VtX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogZXJyX3VjX2luaXQ6CiAJaW50 ZWxfdWNfZmluaSgmZGV2X3ByaXYtPmd0LnVjKTsKIGVycl9wbToKLQlpZiAocmV0ICE9IC1FSU8p IHsKLQkJaW50ZWxfY2xlYW51cF9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOworCWlmIChyZXQgIT0g LUVJTykKIAkJaW50ZWxfZW5naW5lc19jbGVhbnVwKGRldl9wcml2KTsKLQl9CiBlcnJfY29udGV4 dDoKIAlpZiAocmV0ICE9IC1FSU8pCiAJCWk5MTVfZ2VtX2NvbnRleHRzX2ZpbmkoZGV2X3ByaXYp OwogZXJyX3NjcmF0Y2g6Ci0JaTkxNV9nZW1fZmluaV9zY3JhdGNoKGRldl9wcml2KTsKLWVycl9n Z3R0OgorCWludGVsX2d0X2RyaXZlcl9yZWxlYXNlKCZkZXZfcHJpdi0+Z3QpOwogZXJyX3VubG9j azoKIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VX QUtFX0FMTCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CkBA IC0xNjA2LDEyICsxNTg2LDEwIEBAIHZvaWQgaTkxNV9nZW1fZHJpdmVyX3VucmVnaXN0ZXIoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAKIHZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbW92 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JR0VNX0JVR19PTihkZXZf cHJpdi0+Z3QuYXdha2UpOwotCiAJaW50ZWxfd2FrZXJlZl9hdXRvX2ZpbmkoJmRldl9wcml2LT5n Z3R0LnVzZXJmYXVsdF93YWtlcmVmKTsKIAogCWk5MTVfZ2VtX3N1c3BlbmRfbGF0ZShkZXZfcHJp dik7Ci0JaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOworCWludGVsX2d0X2Ry aXZlcl9yZW1vdmUoJmRldl9wcml2LT5ndCk7CiAKIAkvKiBGbHVzaCBhbnkgb3V0c3RhbmRpbmcg dW5waW5fd29yay4gKi8KIAlpOTE1X2dlbV9kcmFpbl93b3JrcXVldWUoZGV2X3ByaXYpOwpAQCAt MTYyOSwxMyArMTYwNywxMSBAQCB2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0 cnVjdF9tdXRleCk7CiAJaW50ZWxfZW5naW5lc19jbGVhbnVwKGRldl9wcml2KTsKIAlpOTE1X2dl bV9jb250ZXh0c19maW5pKGRldl9wcml2KTsKLQlpOTE1X2dlbV9maW5pX3NjcmF0Y2goZGV2X3By aXYpOworCWludGVsX2d0X2RyaXZlcl9yZWxlYXNlKCZkZXZfcHJpdi0+Z3QpOwogCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCiAJaW50ZWxfd2FfbGlzdF9mcmVl KCZkZXZfcHJpdi0+Z3Rfd2FfbGlzdCk7CiAKLQlpbnRlbF9jbGVhbnVwX2d0X3Bvd2Vyc2F2ZShk ZXZfcHJpdik7Ci0KIAlpbnRlbF91Y19jbGVhbnVwX2Zpcm13YXJlcygmZGV2X3ByaXYtPmd0LnVj KTsKIAlpOTE1X2dlbV9jbGVhbnVwX3VzZXJwdHIoZGV2X3ByaXYpOwogCWludGVsX3RpbWVsaW5l c19maW5pKGRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDdiMTlkN2RmOWJh MS4uOWM1NzM1OGY4Njk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTQzLDYgKzQzLDgg QEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3Bzci5oIgogCiAjaW5jbHVkZSAiZ3QvaW50ZWxf Z3QuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ndF9pcnEuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9y cHMuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV9pcnEuaCIKQEAg LTE1MCw4ICsxNTIsOCBAQCBzdGF0aWMgY29uc3QgdTMyIGhwZF9tY2NbSFBEX05VTV9QSU5TXSA9 IHsKIAlbSFBEX1BPUlRfQ10gPSBTREVfVEMxX0hPVFBMVUdfSUNQCiB9OwogCi1zdGF0aWMgdm9p ZCBnZW4zX2lycV9yZXNldChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsIGk5MTVfcmVnX3Qg aW1yLAotCQkJICAgaTkxNV9yZWdfdCBpaXIsIGk5MTVfcmVnX3QgaWVyKQordm9pZCBnZW4zX2ly cV9yZXNldChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsIGk5MTVfcmVnX3QgaW1yLAorCQkg ICAgaTkxNV9yZWdfdCBpaXIsIGk5MTVfcmVnX3QgaWVyKQogewogCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIGltciwgMHhmZmZmZmZmZik7CiAJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1 bmNvcmUsIGltcik7CkBAIC0xNjUsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgZ2VuM19pcnFfcmVz ZXQoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLCBpOTE1X3JlZ190IGltciwKIAlpbnRlbF91 bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgaWlyKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuMl9p cnFfcmVzZXQoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQordm9pZCBnZW4yX2lycV9yZXNl dChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCiB7CiAJaW50ZWxfdW5jb3JlX3dyaXRlMTYo dW5jb3JlLCBHRU4yX0lNUiwgMHhmZmZmKTsKIAlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYo dW5jb3JlLCBHRU4yX0lNUik7CkBAIC0xNzksMTkgKzE4MSw2IEBAIHN0YXRpYyB2b2lkIGdlbjJf aXJxX3Jlc2V0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIAlpbnRlbF91bmNvcmVfcG9z dGluZ19yZWFkMTYodW5jb3JlLCBHRU4yX0lJUik7CiB9CiAKLSNkZWZpbmUgR0VOOF9JUlFfUkVT RVRfTkRYKHVuY29yZSwgdHlwZSwgd2hpY2gpIFwKLSh7IFwKLQl1bnNpZ25lZCBpbnQgd2hpY2hf ID0gd2hpY2g7IFwKLQlnZW4zX2lycV9yZXNldCgodW5jb3JlKSwgR0VOOF8jI3R5cGUjI19JTVIo d2hpY2hfKSwgXAotCQkgICAgICAgR0VOOF8jI3R5cGUjI19JSVIod2hpY2hfKSwgR0VOOF8jI3R5 cGUjI19JRVIod2hpY2hfKSk7IFwKLX0pCi0KLSNkZWZpbmUgR0VOM19JUlFfUkVTRVQodW5jb3Jl LCB0eXBlKSBcCi0JZ2VuM19pcnFfcmVzZXQoKHVuY29yZSksIHR5cGUjI0lNUiwgdHlwZSMjSUlS LCB0eXBlIyNJRVIpCi0KLSNkZWZpbmUgR0VOMl9JUlFfUkVTRVQodW5jb3JlKSBcCi0JZ2VuMl9p cnFfcmVzZXQodW5jb3JlKQotCiAvKgogICogV2Ugc2hvdWxkIGNsZWFyIElNUiBhdCBwcmVpbnN0 YWxsL3VuaW5zdGFsbCwgYW5kIGp1c3QgY2hlY2sgYXQgcG9zdGluc3RhbGwuCiAgKi8KQEAgLTIy NSwxMCArMjE0LDEwIEBAIHN0YXRpYyB2b2lkIGdlbjJfYXNzZXJ0X2lpcl9pc196ZXJvKHN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSkKIAlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5j b3JlLCBHRU4yX0lJUik7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjNfaXJxX2luaXQoc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlLAotCQkJICBpOTE1X3JlZ190IGltciwgdTMyIGltcl92YWwsCi0J CQkgIGk5MTVfcmVnX3QgaWVyLCB1MzIgaWVyX3ZhbCwKLQkJCSAgaTkxNV9yZWdfdCBpaXIpCit2 b2lkIGdlbjNfaXJxX2luaXQoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLAorCQkgICBpOTE1 X3JlZ190IGltciwgdTMyIGltcl92YWwsCisJCSAgIGk5MTVfcmVnX3QgaWVyLCB1MzIgaWVyX3Zh bCwKKwkJICAgaTkxNV9yZWdfdCBpaXIpCiB7CiAJZ2VuM19hc3NlcnRfaWlyX2lzX3plcm8odW5j b3JlLCBpaXIpOwogCkBAIC0yMzcsOCArMjI2LDggQEAgc3RhdGljIHZvaWQgZ2VuM19pcnFfaW5p dChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsCiAJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVh ZCh1bmNvcmUsIGltcik7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjJfaXJxX2luaXQoc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlLAotCQkJICB1MzIgaW1yX3ZhbCwgdTMyIGllcl92YWwpCit2b2lk IGdlbjJfaXJxX2luaXQoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLAorCQkgICB1MzIgaW1y X3ZhbCwgdTMyIGllcl92YWwpCiB7CiAJZ2VuMl9hc3NlcnRfaWlyX2lzX3plcm8odW5jb3JlKTsK IApAQCAtMjY1LDkgKzI1NCw2IEBAIHN0YXRpYyB2b2lkIGdlbjJfaXJxX2luaXQoc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlLAogI2RlZmluZSBHRU4yX0lSUV9JTklUKHVuY29yZSwgaW1yX3Zh bCwgaWVyX3ZhbCkgXAogCWdlbjJfaXJxX2luaXQoKHVuY29yZSksIGltcl92YWwsIGllcl92YWwp CiAKLXN0YXRpYyB2b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcik7Ci1zdGF0aWMgdm9pZCBndWNfaXJxX2hhbmRsZXIo c3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MTYgZ3VjX2lpcik7Ci0KIC8qIEZvciBkaXNwbGF5IGhv dHBsdWcgaW50ZXJydXB0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGk5MTVfaG90cGx1Z19pbnRl cnJ1cHRfdXBkYXRlX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCkBA IC0zMDYsNDEgKzI5Miw2IEBAIHZvaWQgaTkxNV9ob3RwbHVnX2ludGVycnVwdF91cGRhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXNwaW5fdW5sb2NrX2lycSgmZGV2X3By aXYtPmlycV9sb2NrKTsKIH0KIAotc3RhdGljIHUzMgotZ2VuMTFfZ3RfZW5naW5lX2lkZW50aXR5 KHN0cnVjdCBpbnRlbF9ndCAqZ3QsCi0JCQkgY29uc3QgdW5zaWduZWQgaW50IGJhbmssIGNvbnN0 IHVuc2lnbmVkIGludCBiaXQpOwotCi1zdGF0aWMgYm9vbCBnZW4xMV9yZXNldF9vbmVfaWlyKHN0 cnVjdCBpbnRlbF9ndCAqZ3QsCi0JCQkJY29uc3QgdW5zaWduZWQgaW50IGJhbmssCi0JCQkJY29u c3QgdW5zaWduZWQgaW50IGJpdCkKLXsKLQl2b2lkIF9faW9tZW0gKiBjb25zdCByZWdzID0gZ3Qt PnVuY29yZS0+cmVnczsKLQl1MzIgZHc7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aTkx NS0+aXJxX2xvY2spOwotCi0JZHcgPSByYXdfcmVnX3JlYWQocmVncywgR0VOMTFfR1RfSU5UUl9E VyhiYW5rKSk7Ci0JaWYgKGR3ICYgQklUKGJpdCkpIHsKLQkJLyoKLQkJICogQWNjb3JkaW5nIHRv IHRoZSBCU3BlYywgRFdfSUlSIGJpdHMgY2Fubm90IGJlIGNsZWFyZWQgd2l0aG91dAotCQkgKiBm aXJzdCBzZXJ2aWNpbmcgdGhlIFNlbGVjdG9yICYgU2hhcmVkIElJUiByZWdpc3RlcnMuCi0JCSAq LwotCQlnZW4xMV9ndF9lbmdpbmVfaWRlbnRpdHkoZ3QsIGJhbmssIGJpdCk7Ci0KLQkJLyoKLQkJ ICogV2UgbG9ja2VkIEdUIElOVCBEVyBieSByZWFkaW5nIGl0LiBJZiB3ZSB3YW50IHRvICh0cnkK LQkJICogdG8pIHJlY292ZXIgZnJvbSB0aGlzIHN1Y2Nlc2Z1bGx5LCB3ZSBuZWVkIHRvIGNsZWFy Ci0JCSAqIG91ciBiaXQsIG90aGVyd2lzZSB3ZSBhcmUgbG9ja2luZyB0aGUgcmVnaXN0ZXIgZm9y Ci0JCSAqIGV2ZXJ5Ym9keS4KLQkJICovCi0JCXJhd19yZWdfd3JpdGUocmVncywgR0VOMTFfR1Rf SU5UUl9EVyhiYW5rKSwgQklUKGJpdCkpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVy biBmYWxzZTsKLX0KLQogLyoqCiAgKiBpbGtfdXBkYXRlX2Rpc3BsYXlfaXJxIC0gdXBkYXRlIERF SU1SCiAgKiBAZGV2X3ByaXY6IGRyaXZlciBwcml2YXRlCkBAIC0zNzEsMzI2ICszMjIsNiBAQCB2 b2lkIGlsa191cGRhdGVfZGlzcGxheV9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCX0KIH0KIAotLyoqCi0gKiBpbGtfdXBkYXRlX2d0X2lycSAtIHVwZGF0ZSBHVElNUgot ICogQGRldl9wcml2OiBkcml2ZXIgcHJpdmF0ZQotICogQGludGVycnVwdF9tYXNrOiBtYXNrIG9m IGludGVycnVwdCBiaXRzIHRvIHVwZGF0ZQotICogQGVuYWJsZWRfaXJxX21hc2s6IG1hc2sgb2Yg aW50ZXJydXB0IGJpdHMgdG8gZW5hYmxlCi0gKi8KLXN0YXRpYyB2b2lkIGlsa191cGRhdGVfZ3Rf aXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgIHUzMiBpbnRl cnJ1cHRfbWFzaywKLQkJCSAgICAgIHUzMiBlbmFibGVkX2lycV9tYXNrKQotewotCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmRldl9wcml2LT5pcnFfbG9jayk7Ci0KLQlXQVJOX09OKGVuYWJsZWRfaXJx X21hc2sgJiB+aW50ZXJydXB0X21hc2spOwotCi0JaWYgKFdBUk5fT04oIWludGVsX2lycXNfZW5h YmxlZChkZXZfcHJpdikpKQotCQlyZXR1cm47Ci0KLQlkZXZfcHJpdi0+Z3RfaXJxX21hc2sgJj0g fmludGVycnVwdF9tYXNrOwotCWRldl9wcml2LT5ndF9pcnFfbWFzayB8PSAofmVuYWJsZWRfaXJx X21hc2sgJiBpbnRlcnJ1cHRfbWFzayk7Ci0JSTkxNV9XUklURShHVElNUiwgZGV2X3ByaXYtPmd0 X2lycV9tYXNrKTsKLX0KLQotdm9pZCBnZW41X2VuYWJsZV9ndF9pcnEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWFzaykKLXsKLQlpbGtfdXBkYXRlX2d0X2lycShkZXZf cHJpdiwgbWFzaywgbWFzayk7Ci0JaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZF9mdygmZGV2X3By aXYtPnVuY29yZSwgR1RJTVIpOwotfQotCi12b2lkIGdlbjVfZGlzYWJsZV9ndF9pcnEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWFzaykKLXsKLQlpbGtfdXBkYXRlX2d0 X2lycShkZXZfcHJpdiwgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpOTE1X3JlZ190IGdlbjZfcG1f aWlyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlXQVJOX09OX09OQ0Uo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSk7Ci0KLQlyZXR1cm4gSU5URUxfR0VOKGRldl9wcml2 KSA+PSA4ID8gR0VOOF9HVF9JSVIoMikgOiBHRU42X1BNSUlSOwotfQotCi1zdGF0aWMgdm9pZCB3 cml0ZV9wbV9pbXIoc3RydWN0IGludGVsX2d0ICpndCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGd0LT5pOTE1OwotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0 LT51bmNvcmU7Ci0JdTMyIG1hc2sgPSBndC0+cG1faW1yOwotCWk5MTVfcmVnX3QgcmVnOwotCi0J aWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewotCQlyZWcgPSBHRU4xMV9HUE1fV0dCT1hQRVJG X0lOVFJfTUFTSzsKLQkJLyogcG0gaXMgaW4gdXBwZXIgaGFsZiAqLwotCQltYXNrID0gbWFzayA8 PCAxNjsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KSB7Ci0JCXJlZyA9IEdFTjhf R1RfSU1SKDIpOwotCX0gZWxzZSB7Ci0JCXJlZyA9IEdFTjZfUE1JTVI7Ci0JfQotCi0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgcmVnLCBtYXNrKTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19y ZWFkKHVuY29yZSwgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfcG1faWVyKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkx NTsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwotCXUzMiBtYXNr ID0gZ3QtPnBtX2llcjsKLQlpOTE1X3JlZ190IHJlZzsKLQotCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gMTEpIHsKLQkJcmVnID0gR0VOMTFfR1BNX1dHQk9YUEVSRl9JTlRSX0VOQUJMRTsKLQkJLyog cG0gaXMgaW4gdXBwZXIgaGFsZiAqLwotCQltYXNrID0gbWFzayA8PCAxNjsKLQl9IGVsc2UgaWYg KElOVEVMX0dFTihpOTE1KSA+PSA4KSB7Ci0JCXJlZyA9IEdFTjhfR1RfSUVSKDIpOwotCX0gZWxz ZSB7Ci0JCXJlZyA9IEdFTjZfUE1JRVI7Ci0JfQotCi0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgcmVnLCBtYXNrKTsKLX0KLQotLyoqCi0gKiBzbmJfdXBkYXRlX3BtX2lycSAtIHVwZGF0ZSBH RU42X1BNSU1SCi0gKiBAZ3Q6IGd0IGZvciB0aGUgaW50ZXJydXB0cwotICogQGludGVycnVwdF9t YXNrOiBtYXNrIG9mIGludGVycnVwdCBiaXRzIHRvIHVwZGF0ZQotICogQGVuYWJsZWRfaXJxX21h c2s6IG1hc2sgb2YgaW50ZXJydXB0IGJpdHMgdG8gZW5hYmxlCi0gKi8KLXN0YXRpYyB2b2lkIHNu Yl91cGRhdGVfcG1faXJxKHN0cnVjdCBpbnRlbF9ndCAqZ3QsCi0JCQkgICAgICB1MzIgaW50ZXJy dXB0X21hc2ssCi0JCQkgICAgICB1MzIgZW5hYmxlZF9pcnFfbWFzaykKLXsKLQl1MzIgbmV3X3Zh bDsKLQotCVdBUk5fT04oZW5hYmxlZF9pcnFfbWFzayAmIH5pbnRlcnJ1cHRfbWFzayk7Ci0KLQls b2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aTkxNS0+aXJxX2xvY2spOwotCi0JbmV3X3ZhbCA9IGd0 LT5wbV9pbXI7Ci0JbmV3X3ZhbCAmPSB+aW50ZXJydXB0X21hc2s7Ci0JbmV3X3ZhbCB8PSAofmVu YWJsZWRfaXJxX21hc2sgJiBpbnRlcnJ1cHRfbWFzayk7Ci0KLQlpZiAobmV3X3ZhbCAhPSBndC0+ cG1faW1yKSB7Ci0JCWd0LT5wbV9pbXIgPSBuZXdfdmFsOwotCQl3cml0ZV9wbV9pbXIoZ3QpOwot CX0KLX0KLQotdm9pZCBnZW42X3VubWFza19wbV9pcnEoc3RydWN0IGludGVsX2d0ICpndCwgdTMy IG1hc2spCi17Ci0JaWYgKFdBUk5fT04oIWludGVsX2lycXNfZW5hYmxlZChndC0+aTkxNSkpKQot CQlyZXR1cm47Ci0KLQlzbmJfdXBkYXRlX3BtX2lycShndCwgbWFzaywgbWFzayk7Ci19Ci0KLXN0 YXRpYyB2b2lkIF9fZ2VuNl9tYXNrX3BtX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFz aykKLXsKLQlzbmJfdXBkYXRlX3BtX2lycShndCwgbWFzaywgMCk7Ci19Ci0KLXZvaWQgZ2VuNl9t YXNrX3BtX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzaykKLXsKLQlpZiAoV0FSTl9P TighaW50ZWxfaXJxc19lbmFibGVkKGd0LT5pOTE1KSkpCi0JCXJldHVybjsKLQotCV9fZ2VuNl9t YXNrX3BtX2lycShndCwgbWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfcmVzZXRfcG1faWly KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlc2V0X21hc2spCi17Ci0J aTkxNV9yZWdfdCByZWcgPSBnZW42X3BtX2lpcihkZXZfcHJpdik7Ci0KLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZkZXZfcHJpdi0+aXJxX2xvY2spOwotCi0JSTkxNV9XUklURShyZWcsIHJlc2V0X21h c2spOwotCUk5MTVfV1JJVEUocmVnLCByZXNldF9tYXNrKTsKLQlQT1NUSU5HX1JFQUQocmVnKTsK LX0KLQotc3RhdGljIHZvaWQgZ2VuNl9lbmFibGVfcG1faXJxKHN0cnVjdCBpbnRlbF9ndCAqZ3Qs IHUzMiBlbmFibGVfbWFzaykKLXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aTkxNS0+aXJx X2xvY2spOwotCi0JZ3QtPnBtX2llciB8PSBlbmFibGVfbWFzazsKLQl3cml0ZV9wbV9pZXIoZ3Qp OwotCWdlbjZfdW5tYXNrX3BtX2lycShndCwgZW5hYmxlX21hc2spOwotCS8qIHVubWFza19wbV9p cnEgcHJvdmlkZXMgYW4gaW1wbGljaXQgYmFycmllciAoUE9TVElOR19SRUFEKSAqLwotfQotCi1z dGF0aWMgdm9pZCBnZW42X2Rpc2FibGVfcG1faXJxKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBk aXNhYmxlX21hc2spCi17Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ3QtPmk5MTUtPmlycV9sb2Nr KTsKLQotCWd0LT5wbV9pZXIgJj0gfmRpc2FibGVfbWFzazsKLQlfX2dlbjZfbWFza19wbV9pcnEo Z3QsIGRpc2FibGVfbWFzayk7Ci0Jd3JpdGVfcG1faWVyKGd0KTsKLQkvKiB0aG91Z2ggYSBiYXJy aWVyIGlzIG1pc3NpbmcgaGVyZSwgYnV0IGRvbid0IHJlYWxseSBuZWVkIGEgb25lICovCi19Ci0K LXZvaWQgZ2VuMTFfcmVzZXRfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Ci0KLQl3 aGlsZSAoZ2VuMTFfcmVzZXRfb25lX2lpcigmZGV2X3ByaXYtPmd0LCAwLCBHRU4xMV9HVFBNKSkK LQkJOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5wbV9paXIgPSAwOwotCi0Jc3Bpbl91bmxvY2tf aXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwotfQotCi12b2lkIGdlbjZfcmVzZXRfcnBzX2ludGVy cnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXNwaW5fbG9ja19p cnEoJmRldl9wcml2LT5pcnFfbG9jayk7Ci0JZ2VuNl9yZXNldF9wbV9paXIoZGV2X3ByaXYsIEdF TjZfUE1fUlBTX0VWRU5UUyk7Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5wbV9paXIgPSAwOwotCXNw aW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKLX0KLQotdm9pZCBnZW42X2VuYWJs ZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J c3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0Jc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQlpZiAoUkVBRF9PTkNFKHJwcy0+aW50ZXJy dXB0c19lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmly cV9sb2NrKTsKLQlXQVJOX09OX09OQ0UocnBzLT5wbV9paXIpOwotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTEpCi0JCVdBUk5fT05fT05DRShnZW4xMV9yZXNldF9vbmVfaWlyKGd0LCAw LCBHRU4xMV9HVFBNKSk7Ci0JZWxzZQotCQlXQVJOX09OX09OQ0UoSTkxNV9SRUFEKGdlbjZfcG1f aWlyKGRldl9wcml2KSkgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7Ci0KLQlycHMtPmludGVy cnVwdHNfZW5hYmxlZCA9IHRydWU7Ci0JZ2VuNl9lbmFibGVfcG1faXJxKGd0LCBkZXZfcHJpdi0+ cG1fcnBzX2V2ZW50cyk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7 Ci19Ci0KLXZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0X3BtLnJwczsKLQotCWlmICghUkVBRF9PTkNFKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKSkK LQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKLQlycHMt PmludGVycnVwdHNfZW5hYmxlZCA9IGZhbHNlOwotCi0JSTkxNV9XUklURShHRU42X1BNSU5UUk1T SywgZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfjB1KSk7Ci0KLQlnZW42X2Rp c2FibGVfcG1faXJxKCZkZXZfcHJpdi0+Z3QsIEdFTjZfUE1fUlBTX0VWRU5UUyk7Ci0KLQlzcGlu X3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Ci0JaW50ZWxfc3luY2hyb25pemVfaXJx KGRldl9wcml2KTsKLQotCS8qIE5vdyB0aGF0IHdlIHdpbGwgbm90IGJlIGdlbmVyYXRpbmcgYW55 IG1vcmUgd29yaywgZmx1c2ggYW55Ci0JICogb3V0c3RhbmRpbmcgdGFza3MuIEFzIHdlIGFyZSBj YWxsZWQgb24gdGhlIFJQUyBpZGxlIHBhdGgsCi0JICogd2Ugd2lsbCByZXNldCB0aGUgR1BVIHRv IG1pbmltdW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50Ci0JICogc3RhdGUgb2YgdGhlIHdv cmtlciBjYW4gYmUgZGlzY2FyZGVkLgotCSAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnJwcy0+d29y ayk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCi0JCWdlbjExX3Jlc2V0X3Jwc19p bnRlcnJ1cHRzKGRldl9wcml2KTsKLQllbHNlCi0JCWdlbjZfcmVzZXRfcnBzX2ludGVycnVwdHMo ZGV2X3ByaXYpOwotfQotCi12b2lkIGdlbjlfcmVzZXRfZ3VjX2ludGVycnVwdHMoc3RydWN0IGlu dGVsX2d1YyAqZ3VjKQotewotCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3QoZ3VjKTsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1OwotCi0JYXNzZXJ0X3Jw bV93YWtlbG9ja19oZWxkKCZpOTE1LT5ydW50aW1lX3BtKTsKLQotCXNwaW5fbG9ja19pcnEoJmk5 MTUtPmlycV9sb2NrKTsKLQlnZW42X3Jlc2V0X3BtX2lpcihpOTE1LCBndC0+cG1fZ3VjX2V2ZW50 cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0KLXZvaWQgZ2VuOV9l bmFibGVfZ3VjX2ludGVycnVwdHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0cnVjdCBp bnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3QoZ3VjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGd0LT5pOTE1OwotCi0JYXNzZXJ0X3JwbV93YWtlbG9ja19oZWxkKCZpOTE1LT5ydW50 aW1lX3BtKTsKLQotCXNwaW5fbG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQlpZiAoIWd1Yy0+ aW50ZXJydXB0cy5lbmFibGVkKSB7Ci0JCVdBUk5fT05fT05DRShpbnRlbF91bmNvcmVfcmVhZChn dC0+dW5jb3JlLCBnZW42X3BtX2lpcihpOTE1KSkgJgotCQkJICAgICBndC0+cG1fZ3VjX2V2ZW50 cyk7Ci0JCWd1Yy0+aW50ZXJydXB0cy5lbmFibGVkID0gdHJ1ZTsKLQkJZ2VuNl9lbmFibGVfcG1f aXJxKGd0LCBndC0+cG1fZ3VjX2V2ZW50cyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmaTkxNS0+ aXJxX2xvY2spOwotfQotCi12b2lkIGdlbjlfZGlzYWJsZV9ndWNfaW50ZXJydXB0cyhzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19ndChndWMp OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7Ci0KLQlhc3NlcnRf cnBtX3dha2Vsb2NrX2hlbGQoJmk5MTUtPnJ1bnRpbWVfcG0pOwotCi0Jc3Bpbl9sb2NrX2lycSgm aTkxNS0+aXJxX2xvY2spOwotCWd1Yy0+aW50ZXJydXB0cy5lbmFibGVkID0gZmFsc2U7Ci0KLQln ZW42X2Rpc2FibGVfcG1faXJxKGd0LCBndC0+cG1fZ3VjX2V2ZW50cyk7Ci0KLQlzcGluX3VubG9j a19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQlpbnRlbF9zeW5jaHJvbml6ZV9pcnEoaTkxNSk7Ci0K LQlnZW45X3Jlc2V0X2d1Y19pbnRlcnJ1cHRzKGd1Yyk7Ci19Ci0KLXZvaWQgZ2VuMTFfcmVzZXRf Z3VjX2ludGVycnVwdHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0cnVjdCBpbnRlbF9n dCAqZ3QgPSBndWNfdG9fZ3QoZ3VjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IGd0LT5pOTE1OwotCi0Jc3Bpbl9sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2spOwotCWdlbjExX3Jl c2V0X29uZV9paXIoZ3QsIDAsIEdFTjExX0dVQyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpOTE1LT5p cnFfbG9jayk7Ci19Ci0KLXZvaWQgZ2VuMTFfZW5hYmxlX2d1Y19pbnRlcnJ1cHRzKHN0cnVjdCBp bnRlbF9ndWMgKmd1YykKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gZ3VjX3RvX2d0KGd1Yyk7 Ci0KLQlzcGluX2xvY2tfaXJxKCZndC0+aTkxNS0+aXJxX2xvY2spOwotCWlmICghZ3VjLT5pbnRl cnJ1cHRzLmVuYWJsZWQpIHsKLQkJdTMyIGV2ZW50cyA9IFJFR19GSUVMRF9QUkVQKEVOR0lORTFf TUFTSywgR1VDX0lOVFJfR1VDMkhPU1QpOwotCi0JCVdBUk5fT05fT05DRShnZW4xMV9yZXNldF9v bmVfaWlyKGd0LCAwLCBHRU4xMV9HVUMpKTsKLQkJaW50ZWxfdW5jb3JlX3dyaXRlKGd0LT51bmNv cmUsIEdFTjExX0dVQ19TR19JTlRSX0VOQUJMRSwgZXZlbnRzKTsKLQkJaW50ZWxfdW5jb3JlX3dy aXRlKGd0LT51bmNvcmUsIEdFTjExX0dVQ19TR19JTlRSX01BU0ssIH5ldmVudHMpOwotCQlndWMt PmludGVycnVwdHMuZW5hYmxlZCA9IHRydWU7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmk5 MTUtPmlycV9sb2NrKTsKLX0KLQotdm9pZCBnZW4xMV9kaXNhYmxlX2d1Y19pbnRlcnJ1cHRzKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YykKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gZ3VjX3RvX2d0 KGd1Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKLQotCXNw aW5fbG9ja19pcnEoJmk5MTUtPmlycV9sb2NrKTsKLQlndWMtPmludGVycnVwdHMuZW5hYmxlZCA9 IGZhbHNlOwotCi0JaW50ZWxfdW5jb3JlX3dyaXRlKGd0LT51bmNvcmUsIEdFTjExX0dVQ19TR19J TlRSX01BU0ssIH4wKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUoZ3QtPnVuY29yZSwgR0VOMTFfR1VD X1NHX0lOVFJfRU5BQkxFLCAwKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmaTkxNS0+aXJxX2xvY2sp OwotCWludGVsX3N5bmNocm9uaXplX2lycShpOTE1KTsKLQotCWdlbjExX3Jlc2V0X2d1Y19pbnRl cnJ1cHRzKGd1Yyk7Ci19Ci0KIC8qKgogICogYmR3X3VwZGF0ZV9wb3J0X2lycSAtIHVwZGF0ZSBE RSBwb3J0IGludGVycnVwdAogICogQGRldl9wcml2OiBkcml2ZXIgcHJpdmF0ZQpAQCAtMTI2Miwx OTggKzg5Myw2IEBAIGludCBpbnRlbF9nZXRfY3J0Y19zY2FubGluZShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKIAlyZXR1cm4gcG9zaXRpb247CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX3Jw c19jaGFuZ2VfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQot ewotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwotCXUz MiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9hdmc7Ci0JdTggbmV3X2RlbGF5Owot Ci0Jc3Bpbl9sb2NrKCZtY2hkZXZfbG9jayk7Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNv cmUsCi0JCQkgICAgIE1FTUlOVFJTVFMsCi0JCQkgICAgIGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgTUVNSU5UUlNUUykpOwotCi0JbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXk7 Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFM X0NIRyk7Ci0JYnVzeV91cCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVFVQ QVZHKTsKLQlidXN5X2Rvd24gPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRE TkFWRyk7Ci0JbWF4X2F2ZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsK LQltaW5fYXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ0JNSU5BVkcpOwotCi0JLyog SGFuZGxlIFJDUyBjaGFuZ2UgcmVxdWVzdCBmcm9tIGh3ICovCi0JaWYgKGJ1c3lfdXAgPiBtYXhf YXZnKSB7Ci0JCWlmIChkZXZfcHJpdi0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1h eF9kZWxheSkKLQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5IC0gMTsKLQkJ aWYgKG5ld19kZWxheSA8IGRldl9wcml2LT5pcHMubWF4X2RlbGF5KQotCQkJbmV3X2RlbGF5ID0g ZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXk7Ci0JfSBlbHNlIGlmIChidXN5X2Rvd24gPCBtaW5fYXZn KSB7Ci0JCWlmIChkZXZfcHJpdi0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1pbl9k ZWxheSkKLQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5ICsgMTsKLQkJaWYg KG5ld19kZWxheSA+IGRldl9wcml2LT5pcHMubWluX2RlbGF5KQotCQkJbmV3X2RlbGF5ID0gZGV2 X3ByaXYtPmlwcy5taW5fZGVsYXk7Ci0JfQotCi0JaWYgKGlyb25sYWtlX3NldF9kcnBzKGRldl9w cml2LCBuZXdfZGVsYXkpKQotCQlkZXZfcHJpdi0+aXBzLmN1cl9kZWxheSA9IG5ld19kZWxheTsK LQotCXNwaW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2 b2lkIHZsdl9jMF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCXN0 cnVjdCBpbnRlbF9ycHNfZWkgKmVpKQotewotCWVpLT5rdGltZSA9IGt0aW1lX2dldF9yYXcoKTsK LQllaS0+cmVuZGVyX2MwID0gSTkxNV9SRUFEKFZMVl9SRU5ERVJfQzBfQ09VTlQpOwotCWVpLT5t ZWRpYV9jMCA9IEk5MTVfUkVBRChWTFZfTUVESUFfQzBfQ09VTlQpOwotfQotCi12b2lkIGdlbjZf cnBzX3Jlc2V0X2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQltZW1z ZXQoJmRldl9wcml2LT5ndF9wbS5ycHMuZWksIDAsIHNpemVvZihkZXZfcHJpdi0+Z3RfcG0ucnBz LmVpKSk7Ci19Ci0KLXN0YXRpYyB1MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfcnBzX2VpICpwcmV2ID0g JnJwcy0+ZWk7Ci0Jc3RydWN0IGludGVsX3Jwc19laSBub3c7Ci0JdTMyIGV2ZW50cyA9IDA7Ci0K LQlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0gMCkKLQkJcmV0dXJu IDA7Ci0KLQl2bHZfYzBfcmVhZChkZXZfcHJpdiwgJm5vdyk7Ci0KLQlpZiAocHJldi0+a3RpbWUp IHsKLQkJdTY0IHRpbWUsIGMwOwotCQl1MzIgcmVuZGVyLCBtZWRpYTsKLQotCQl0aW1lID0ga3Rp bWVfdXNfZGVsdGEobm93Lmt0aW1lLCBwcmV2LT5rdGltZSk7Ci0KLQkJdGltZSAqPSBkZXZfcHJp di0+Y3pjbGtfZnJlcTsKLQotCQkvKiBXb3JrbG9hZCBjYW4gYmUgc3BsaXQgYmV0d2VlbiByZW5k ZXIgKyBtZWRpYSwKLQkJICogZS5nLiBTd2FwQnVmZmVycyBiZWluZyBibGl0dGVkIGluIFggYWZ0 ZXIgYmVpbmcgcmVuZGVyZWQgaW4KLQkJICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBu ZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdpbmVzCi0JCSAqIGludG8gb3VyIGFjdGl2aXR5IGNvdW50 ZXIuCi0JCSAqLwotCQlyZW5kZXIgPSBub3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwot CQltZWRpYSA9IG5vdy5tZWRpYV9jMCAtIHByZXYtPm1lZGlhX2MwOwotCQljMCA9IG1heChyZW5k ZXIsIG1lZGlhKTsKLQkJYzAgKj0gMTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2Nh bGUgdG8gdGhyZXNob2xkJSAqLwotCi0JCWlmIChjMCA+IHRpbWUgKiBycHMtPnBvd2VyLnVwX3Ro cmVzaG9sZCkKLQkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwotCQllbHNlIGlm IChjMCA8IHRpbWUgKiBycHMtPnBvd2VyLmRvd25fdGhyZXNob2xkKQotCQkJZXZlbnRzID0gR0VO Nl9QTV9SUF9ET1dOX1RIUkVTSE9MRDsKLQl9Ci0KLQlycHMtPmVpID0gbm93OwotCXJldHVybiBl dmVudHM7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfcG1fcnBzX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCWNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgZ3RfcG0ucnBzLndvcmsp OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCWJvb2wg Y2xpZW50X2Jvb3N0ID0gZmFsc2U7Ci0JaW50IG5ld19kZWxheSwgYWRqLCBtaW4sIG1heDsKLQl1 MzIgcG1faWlyID0gMDsKLQotCXNwaW5fbG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9jayk7Ci0J aWYgKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKSB7Ci0JCXBtX2lpciA9IGZldGNoX2FuZF96ZXJv KCZycHMtPnBtX2lpcik7Ci0JCWNsaWVudF9ib29zdCA9IGF0b21pY19yZWFkKCZycHMtPm51bV93 YWl0ZXJzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwotCi0J LyogTWFrZSBzdXJlIHdlIGRpZG4ndCBxdWV1ZSBhbnl0aGluZyB3ZSdyZSBub3QgZ29pbmcgdG8g cHJvY2Vzcy4gKi8KLQlXQVJOX09OKHBtX2lpciAmIH5kZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7 Ci0JaWYgKChwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cykgPT0gMCAmJiAhY2xpZW50 X2Jvb3N0KQotCQlnb3RvIG91dDsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0KLQlwbV9p aXIgfD0gdmx2X3dhX2MwX2VpKGRldl9wcml2LCBwbV9paXIpOwotCi0JYWRqID0gcnBzLT5sYXN0 X2FkajsKLQluZXdfZGVsYXkgPSBycHMtPmN1cl9mcmVxOwotCW1pbiA9IHJwcy0+bWluX2ZyZXFf c29mdGxpbWl0OwotCW1heCA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0OwotCWlmIChjbGllbnRf Ym9vc3QpCi0JCW1heCA9IHJwcy0+bWF4X2ZyZXE7Ci0JaWYgKGNsaWVudF9ib29zdCAmJiBuZXdf ZGVsYXkgPCBycHMtPmJvb3N0X2ZyZXEpIHsKLQkJbmV3X2RlbGF5ID0gcnBzLT5ib29zdF9mcmVx OwotCQlhZGogPSAwOwotCX0gZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9VUF9USFJFU0hP TEQpIHsKLQkJaWYgKGFkaiA+IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYgbmVlZHMg ZXZlbiBlbmNvZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/ IDIgOiAxOwotCi0JCWlmIChuZXdfZGVsYXkgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCi0J CQlhZGogPSAwOwotCX0gZWxzZSBpZiAoY2xpZW50X2Jvb3N0KSB7Ci0JCWFkaiA9IDA7Ci0JfSBl bHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVElNRU9VVCkgewotCQlpZiAocnBzLT5j dXJfZnJlcSA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEpCi0JCQluZXdfZGVsYXkgPSBycHMtPmVmZmlj aWVudF9mcmVxOwotCQllbHNlIGlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQpCi0JCQluZXdfZGVsYXkgPSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdDsKLQkJYWRqID0g MDsKLQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQpIHsKLQkJ aWYgKGFkaiA8IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYgbmVlZHMgZXZlbiBlbmNv ZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/IC0yIDogLTE7 Ci0KLQkJaWYgKG5ld19kZWxheSA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJCWFkaiA9 IDA7Ci0JfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLwotCQlhZGogPSAwOwotCX0KLQotCXJw cy0+bGFzdF9hZGogPSBhZGo7Ci0KLQkvKgotCSAqIExpbWl0IGRlYm9vc3RpbmcgYW5kIGJvb3N0 aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwotCSAqIHdoZW4gaW4gdGhlIHJl c3BlY3RpdmUgcG93ZXIgbW9kZXMgKGkuZS4gc2xvd2x5IGRlY3JlYXNlIGZyZXF1ZW5jaWVzCi0J ICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xvd2x5IGluY3JlYXNlIGZyZXF1 ZW5jaWVzIHdoaWxlCi0JICogaW4gdGhlIExPV19QT1dFUiB6b25lKS4gT24gaWRsZSwgd2Ugd2ls bCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKLQkgKiB0byB0aGUgbmV4dCBsZXZlbCBxdWlja2x5 LCBhbmQgY29udmVyc2VseSBpZiBidXN5IHdlIGV4cGVjdCB0bwotCSAqIGhpdCBhIHdhaXRib29z dCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93ZXIuCi0JICovCi0JaWYgKChhZGogPCAw ICYmIHJwcy0+cG93ZXIubW9kZSA9PSBISUdIX1BPV0VSKSB8fAotCSAgICAoYWRqID4gMCAmJiBy cHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VSKSkKLQkJcnBzLT5sYXN0X2FkaiA9IDA7Ci0KLQkv KiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJmYWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGlsZSBzZXJ2 aWNpbmcgdGhlCi0JICogaW50ZXJydXB0Ci0JICovCi0JbmV3X2RlbGF5ICs9IGFkajsKLQluZXdf ZGVsYXkgPSBjbGFtcF90KGludCwgbmV3X2RlbGF5LCBtaW4sIG1heCk7Ci0KLQlpZiAoaW50ZWxf c2V0X3JwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJGYWls ZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKLQkJcnBzLT5sYXN0X2FkaiA9IDA7Ci0J fQotCi0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotCi1vdXQ6Ci0JLyogTWFrZSBzdXJlIG5v dCB0byBjb3JydXB0IFBNSU1SIHN0YXRlIHVzZWQgYnkgcmluZ2J1ZmZlciBvbiBHRU42ICovCi0J c3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKLQlpZiAocnBzLT5pbnRlcnJ1cHRz X2VuYWJsZWQpCi0JCWdlbjZfdW5tYXNrX3BtX2lycSgmZGV2X3ByaXYtPmd0LCBkZXZfcHJpdi0+ cG1fcnBzX2V2ZW50cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwot fQotCi0KIC8qKgogICogaXZ5YnJpZGdlX3Bhcml0eV93b3JrIC0gV29ya3F1ZXVlIGNhbGxlZCB3 aGVuIGEgcGFyaXR5IGVycm9yIGludGVycnVwdAogICogb2NjdXJyZWQuCkBAIC0xNDY3LDYgKzkw Niw3IEBAIHN0YXRpYyB2b2lkIGl2eWJyaWRnZV9wYXJpdHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJY29u dGFpbmVyX29mKHdvcmssIHR5cGVvZigqZGV2X3ByaXYpLCBsM19wYXJpdHkuZXJyb3Jfd29yayk7 CisJc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7CiAJdTMyIGVycm9yX3N0YXR1 cywgcm93LCBiYW5rLCBzdWJiYW5rOwogCWNoYXIgKnBhcml0eV9ldmVudFs2XTsKIAl1MzIgbWlz Y2NwY3RsOwpAQCAtMTUyOCwxNDQgKzk2OCwxMyBAQCBzdGF0aWMgdm9pZCBpdnlicmlkZ2VfcGFy aXR5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiBvdXQ6CiAJV0FSTl9PTihkZXZf cHJpdi0+bDNfcGFyaXR5LndoaWNoX3NsaWNlKTsKLQlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+ aXJxX2xvY2spOwotCWdlbjVfZW5hYmxlX2d0X2lycShkZXZfcHJpdiwgR1RfUEFSSVRZX0VSUk9S KGRldl9wcml2KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOworCXNw aW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ2VuNV9ndF9lbmFibGVfaXJxKGd0LCBHVF9Q QVJJVFlfRVJST1IoZGV2X3ByaXYpKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7 CiAKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKIH0KIAotc3Rh dGljIHZvaWQgaXZ5YnJpZGdlX3Bhcml0eV9lcnJvcl9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCSAgICAgICB1MzIgaWlyKQotewotCWlmICghSEFT X0wzX0RQRihkZXZfcHJpdikpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmZGV2X3ByaXYtPmly cV9sb2NrKTsKLQlnZW41X2Rpc2FibGVfZ3RfaXJxKGRldl9wcml2LCBHVF9QQVJJVFlfRVJST1Io ZGV2X3ByaXYpKTsKLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlycV9sb2NrKTsKLQotCWlpciAm PSBHVF9QQVJJVFlfRVJST1IoZGV2X3ByaXYpOwotCWlmIChpaXIgJiBHVF9SRU5ERVJfTDNfUEFS SVRZX0VSUk9SX0lOVEVSUlVQVF9TMSkKLQkJZGV2X3ByaXYtPmwzX3Bhcml0eS53aGljaF9zbGlj ZSB8PSAxIDw8IDE7Ci0KLQlpZiAoaWlyICYgR1RfUkVOREVSX0wzX1BBUklUWV9FUlJPUl9JTlRF UlJVUFQpCi0JCWRldl9wcml2LT5sM19wYXJpdHkud2hpY2hfc2xpY2UgfD0gMSA8PCAwOwotCi0J cXVldWVfd29yayhkZXZfcHJpdi0+d3EsICZkZXZfcHJpdi0+bDNfcGFyaXR5LmVycm9yX3dvcmsp OwotfQotCi1zdGF0aWMgdm9pZCBpbGtfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgIHUzMiBndF9paXIpCi17Ci0JaWYgKGd0X2lpciAm IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2ly cShkZXZfcHJpdi0+ZW5naW5lW1JDUzBdKTsKLQlpZiAoZ3RfaWlyICYgSUxLX0JTRF9VU0VSX0lO VEVSUlVQVCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5l W1ZDUzBdKTsKLX0KLQotc3RhdGljIHZvaWQgc25iX2d0X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICB1MzIgZ3RfaWlyKQotewotCWlmIChn dF9paXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpCi0JCWludGVsX2VuZ2luZV9icmVhZGNy dW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtSQ1MwXSk7Ci0JaWYgKGd0X2lpciAmIEdUX0JTRF9V U0VSX0lOVEVSUlVQVCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ ZW5naW5lW1ZDUzBdKTsKLQlpZiAoZ3RfaWlyICYgR1RfQkxUX1VTRVJfSU5URVJSVVBUKQotCQlp bnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbQkNTMF0pOwotCi0J aWYgKGd0X2lpciAmIChHVF9CTFRfQ1NfRVJST1JfSU5URVJSVVBUIHwKLQkJICAgICAgR1RfQlNE X0NTX0VSUk9SX0lOVEVSUlVQVCB8Ci0JCSAgICAgIEdUX1JFTkRFUl9DU19NQVNURVJfRVJST1Jf SU5URVJSVVBUKSkKLQkJRFJNX0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgZ3RfaWlyIDB4 JTA4eFxuIiwgZ3RfaWlyKTsKLQotCWlmIChndF9paXIgJiBHVF9QQVJJVFlfRVJST1IoZGV2X3By aXYpKQotCQlpdnlicmlkZ2VfcGFyaXR5X2Vycm9yX2lycV9oYW5kbGVyKGRldl9wcml2LCBndF9p aXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuOF9jc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIHUzMiBpaXIpCi17Ci0JYm9vbCB0YXNrbGV0ID0gZmFsc2U7Ci0K LQlpZiAoaWlyICYgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUKQotCQl0YXNrbGV0ID0gdHJ1 ZTsKLQotCWlmIChpaXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpIHsKLQkJaW50ZWxfZW5n aW5lX2JyZWFkY3J1bWJzX2lycShlbmdpbmUpOwotCQl0YXNrbGV0IHw9IGludGVsX2VuZ2luZV9u ZWVkc19icmVhZGNydW1iX3Rhc2tsZXQoZW5naW5lKTsKLQl9Ci0KLQlpZiAodGFza2xldCkKLQkJ dGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGdlbjhfZ3RfaXJxX2FjayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwK LQkJCSAgICB1MzIgbWFzdGVyX2N0bCwgdTMyIGd0X2lpcls0XSkKLXsKLQl2b2lkIF9faW9tZW0g KiBjb25zdCByZWdzID0gaTkxNS0+dW5jb3JlLnJlZ3M7Ci0KLSNkZWZpbmUgR0VOOF9HVF9JUlFT IChHRU44X0dUX1JDU19JUlEgfCBcCi0JCSAgICAgIEdFTjhfR1RfQkNTX0lSUSB8IFwKLQkJICAg ICAgR0VOOF9HVF9WQ1MwX0lSUSB8IFwKLQkJICAgICAgR0VOOF9HVF9WQ1MxX0lSUSB8IFwKLQkJ ICAgICAgR0VOOF9HVF9WRUNTX0lSUSB8IFwKLQkJICAgICAgR0VOOF9HVF9QTV9JUlEgfCBcCi0J CSAgICAgIEdFTjhfR1RfR1VDX0lSUSkKLQotCWlmIChtYXN0ZXJfY3RsICYgKEdFTjhfR1RfUkNT X0lSUSB8IEdFTjhfR1RfQkNTX0lSUSkpIHsKLQkJZ3RfaWlyWzBdID0gcmF3X3JlZ19yZWFkKHJl Z3MsIEdFTjhfR1RfSUlSKDApKTsKLQkJaWYgKGxpa2VseShndF9paXJbMF0pKQotCQkJcmF3X3Jl Z193cml0ZShyZWdzLCBHRU44X0dUX0lJUigwKSwgZ3RfaWlyWzBdKTsKLQl9Ci0KLQlpZiAobWFz dGVyX2N0bCAmIChHRU44X0dUX1ZDUzBfSVJRIHwgR0VOOF9HVF9WQ1MxX0lSUSkpIHsKLQkJZ3Rf aWlyWzFdID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjhfR1RfSUlSKDEpKTsKLQkJaWYgKGxpa2Vs eShndF9paXJbMV0pKQotCQkJcmF3X3JlZ193cml0ZShyZWdzLCBHRU44X0dUX0lJUigxKSwgZ3Rf aWlyWzFdKTsKLQl9Ci0KLQlpZiAobWFzdGVyX2N0bCAmIChHRU44X0dUX1BNX0lSUSB8IEdFTjhf R1RfR1VDX0lSUSkpIHsKLQkJZ3RfaWlyWzJdID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjhfR1Rf SUlSKDIpKTsKLQkJaWYgKGxpa2VseShndF9paXJbMl0pKQotCQkJcmF3X3JlZ193cml0ZShyZWdz LCBHRU44X0dUX0lJUigyKSwgZ3RfaWlyWzJdKTsKLQl9Ci0KLQlpZiAobWFzdGVyX2N0bCAmIEdF TjhfR1RfVkVDU19JUlEpIHsKLQkJZ3RfaWlyWzNdID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjhf R1RfSUlSKDMpKTsKLQkJaWYgKGxpa2VseShndF9paXJbM10pKQotCQkJcmF3X3JlZ193cml0ZShy ZWdzLCBHRU44X0dUX0lJUigzKSwgZ3RfaWlyWzNdKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGdl bjhfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCi0JCQkJdTMy IG1hc3Rlcl9jdGwsIHUzMiBndF9paXJbNF0pCi17Ci0JaWYgKG1hc3Rlcl9jdGwgJiAoR0VOOF9H VF9SQ1NfSVJRIHwgR0VOOF9HVF9CQ1NfSVJRKSkgewotCQlnZW44X2NzX2lycV9oYW5kbGVyKGk5 MTUtPmVuZ2luZVtSQ1MwXSwKLQkJCQkgICAgZ3RfaWlyWzBdID4+IEdFTjhfUkNTX0lSUV9TSElG VCk7Ci0JCWdlbjhfY3NfaXJxX2hhbmRsZXIoaTkxNS0+ZW5naW5lW0JDUzBdLAotCQkJCSAgICBn dF9paXJbMF0gPj4gR0VOOF9CQ1NfSVJRX1NISUZUKTsKLQl9Ci0KLQlpZiAobWFzdGVyX2N0bCAm IChHRU44X0dUX1ZDUzBfSVJRIHwgR0VOOF9HVF9WQ1MxX0lSUSkpIHsKLQkJZ2VuOF9jc19pcnFf aGFuZGxlcihpOTE1LT5lbmdpbmVbVkNTMF0sCi0JCQkJICAgIGd0X2lpclsxXSA+PiBHRU44X1ZD UzBfSVJRX1NISUZUKTsKLQkJZ2VuOF9jc19pcnFfaGFuZGxlcihpOTE1LT5lbmdpbmVbVkNTMV0s Ci0JCQkJICAgIGd0X2lpclsxXSA+PiBHRU44X1ZDUzFfSVJRX1NISUZUKTsKLQl9Ci0KLQlpZiAo bWFzdGVyX2N0bCAmIEdFTjhfR1RfVkVDU19JUlEpIHsKLQkJZ2VuOF9jc19pcnFfaGFuZGxlcihp OTE1LT5lbmdpbmVbVkVDUzBdLAotCQkJCSAgICBndF9paXJbM10gPj4gR0VOOF9WRUNTX0lSUV9T SElGVCk7Ci0JfQotCi0JaWYgKG1hc3Rlcl9jdGwgJiAoR0VOOF9HVF9QTV9JUlEgfCBHRU44X0dU X0dVQ19JUlEpKSB7Ci0JCWdlbjZfcnBzX2lycV9oYW5kbGVyKGk5MTUsIGd0X2lpclsyXSk7Ci0J CWd1Y19pcnFfaGFuZGxlcigmaTkxNS0+Z3QudWMuZ3VjLCBndF9paXJbMl0gPj4gMTYpOwotCX0K LX0KLQogc3RhdGljIGJvb2wgZ2VuMTFfcG9ydF9ob3RwbHVnX2xvbmdfZGV0ZWN0KGVudW0gaHBk X3BpbiBwaW4sIHUzMiB2YWwpCiB7CiAJc3dpdGNoIChwaW4pIHsKQEAgLTE5MTMsNjAgKzEyMjIs NiBAQCBzdGF0aWMgdm9pZCBpOXh4X3BpcGVfY3JjX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAgIHJlczEsIHJlczIpOwogfQogCi0vKiBUaGUg UlBTIGV2ZW50cyBuZWVkIGZvcmNld2FrZSwgc28gd2UgYWRkIHRoZW0gdG8gYSB3b3JrIHF1ZXVl IGFuZCBtYXNrIHRoZWlyCi0gKiBJTVIgYml0cyB1bnRpbCB0aGUgd29yayBpcyBkb25lLiBPdGhl ciBpbnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQgd2l0aG91dAotICogdGhlIHdvcmsgcXVldWUu ICovCi1zdGF0aWMgdm9pZCBnZW4xMV9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpn dCwgdTMyIHBtX2lpcikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5p OTE1OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7Ci0JY29uc3Qg dTMyIGV2ZW50cyA9IGk5MTUtPnBtX3Jwc19ldmVudHMgJiBwbV9paXI7Ci0KLQlsb2NrZGVwX2Fz c2VydF9oZWxkKCZpOTE1LT5pcnFfbG9jayk7Ci0KLQlpZiAodW5saWtlbHkoIWV2ZW50cykpCi0J CXJldHVybjsKLQotCWdlbjZfbWFza19wbV9pcnEoZ3QsIGV2ZW50cyk7Ci0KLQlpZiAoIXJwcy0+ aW50ZXJydXB0c19lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlycHMtPnBtX2lpciB8PSBldmVudHM7 Ci0Jc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9ycHNf aXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcG1faWly KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0J aWYgKHBtX2lpciAmIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKSB7Ci0JCXNwaW5fbG9jaygmZGV2 X3ByaXYtPmlycV9sb2NrKTsKLQkJZ2VuNl9tYXNrX3BtX2lycSgmZGV2X3ByaXYtPmd0LAotCQkJ CSBwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7Ci0JCWlmIChycHMtPmludGVycnVw dHNfZW5hYmxlZCkgewotCQkJcnBzLT5wbV9paXIgfD0gcG1faWlyICYgZGV2X3ByaXYtPnBtX3Jw c19ldmVudHM7Ci0JCQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOwotCQl9Ci0JCXNwaW5fdW5s b2NrKCZkZXZfcHJpdi0+aXJxX2xvY2spOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDgpCi0JCXJldHVybjsKLQotCWlmIChwbV9paXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQ VCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1ZFQ1Mw XSk7Ci0KLQlpZiAocG1faWlyICYgUE1fVkVCT1hfQ1NfRVJST1JfSU5URVJSVVBUKQotCQlEUk1f REVCVUcoIkNvbW1hbmQgcGFyc2VyIGVycm9yLCBwbV9paXIgMHglMDh4XG4iLCBwbV9paXIpOwot fQotCi1zdGF0aWMgdm9pZCBndWNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1 MTYgaWlyKQotewotCWlmIChpaXIgJiBHVUNfSU5UUl9HVUMySE9TVCkKLQkJaW50ZWxfZ3VjX3Rv X2hvc3RfZXZlbnRfaGFuZGxlcihndWMpOwotfQotCiBzdGF0aWMgdm9pZCBpOXh4X3BpcGVzdGF0 X2lycV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJZW51bSBw aXBlIHBpcGU7CkBAIC0yMjc0LDkgKzE1MjksOSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5 dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCUk5MTVfV1JJVEUoVkxWX01B U1RFUl9JRVIsIE1BU1RFUl9JTlRFUlJVUFRfRU5BQkxFKTsKIAogCQlpZiAoZ3RfaWlyKQotCQkJ c25iX2d0X2lycV9oYW5kbGVyKGRldl9wcml2LCBndF9paXIpOworCQkJZ2VuNl9ndF9pcnFfaGFu ZGxlcigmZGV2X3ByaXYtPmd0LCBndF9paXIpOwogCQlpZiAocG1faWlyKQotCQkJZ2VuNl9ycHNf aXJxX2hhbmRsZXIoZGV2X3ByaXYsIHBtX2lpcik7CisJCQlnZW42X3Jwc19pcnFfaGFuZGxlcigm ZGV2X3ByaXYtPmd0LnJwcywgcG1faWlyKTsKIAogCQlpZiAoaG90cGx1Z19zdGF0dXMpCiAJCQlp OXh4X2hwZF9pcnFfaGFuZGxlcihkZXZfcHJpdiwgaG90cGx1Z19zdGF0dXMpOwpAQCAtMjMzMiw3 ICsxNTg3LDcgQEAgc3RhdGljIGlycXJldHVybl90IGNoZXJyeXZpZXdfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqYXJnKQogCQlpZXIgPSBJOTE1X1JFQUQoVkxWX0lFUik7CiAJCUk5MTVfV1JJ VEUoVkxWX0lFUiwgMCk7CiAKLQkJZ2VuOF9ndF9pcnFfYWNrKGRldl9wcml2LCBtYXN0ZXJfY3Rs LCBndF9paXIpOworCQlnZW44X2d0X2lycV9hY2soJmRldl9wcml2LT5ndCwgbWFzdGVyX2N0bCwg Z3RfaWlyKTsKIAogCQlpZiAoaWlyICYgSTkxNV9ESVNQTEFZX1BPUlRfSU5URVJSVVBUKQogCQkJ aG90cGx1Z19zdGF0dXMgPSBpOXh4X2hwZF9pcnFfYWNrKGRldl9wcml2KTsKQEAgLTIzNTYsNyAr MTYxMSw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBjaGVycnl2aWV3X2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmFyZykKIAkJSTkxNV9XUklURShWTFZfSUVSLCBpZXIpOwogCQlJOTE1X1dSSVRF KEdFTjhfTUFTVEVSX0lSUSwgR0VOOF9NQVNURVJfSVJRX0NPTlRST0wpOwogCi0JCWdlbjhfZ3Rf aXJxX2hhbmRsZXIoZGV2X3ByaXYsIG1hc3Rlcl9jdGwsIGd0X2lpcik7CisJCWdlbjhfZ3RfaXJx X2hhbmRsZXIoJmRldl9wcml2LT5ndCwgbWFzdGVyX2N0bCwgZ3RfaWlyKTsKIAogCQlpZiAoaG90 cGx1Z19zdGF0dXMpCiAJCQlpOXh4X2hwZF9pcnFfaGFuZGxlcihkZXZfcHJpdiwgaG90cGx1Z19z dGF0dXMpOwpAQCAtMjY1Niw3ICsxOTExLDcgQEAgc3RhdGljIHZvaWQgaWxrX2Rpc3BsYXlfaXJx X2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCX0KIAogCWlmIChJ U19HRU4oZGV2X3ByaXYsIDUpICYmIGRlX2lpciAmIERFX1BDVV9FVkVOVCkKLQkJaXJvbmxha2Vf cnBzX2NoYW5nZV9pcnFfaGFuZGxlcihkZXZfcHJpdik7CisJCWdlbjVfcnBzX2lycV9oYW5kbGVy KCZkZXZfcHJpdi0+Z3QucnBzKTsKIH0KIAogc3RhdGljIHZvaWQgaXZiX2Rpc3BsYXlfaXJxX2hh bmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMjc0MSw5ICsxOTk2 LDkgQEAgc3RhdGljIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmFyZykKIAkJSTkxNV9XUklURShHVElJUiwgZ3RfaWlyKTsKIAkJcmV0ID0gSVJRX0hBTkRM RUQ7CiAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpCi0JCQlzbmJfZ3RfaXJxX2hhbmRs ZXIoZGV2X3ByaXYsIGd0X2lpcik7CisJCQlnZW42X2d0X2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+ Z3QsIGd0X2lpcik7CiAJCWVsc2UKLQkJCWlsa19ndF9pcnFfaGFuZGxlcihkZXZfcHJpdiwgZ3Rf aWlyKTsKKwkJCWdlbjVfZ3RfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndCwgZ3RfaWlyKTsKIAl9 CiAKIAlkZV9paXIgPSBJOTE1X1JFQUQoREVJSVIpOwpAQCAtMjc2MSw3ICsyMDE2LDcgQEAgc3Rh dGljIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykK IAkJaWYgKHBtX2lpcikgewogCQkJSTkxNV9XUklURShHRU42X1BNSUlSLCBwbV9paXIpOwogCQkJ cmV0ID0gSVJRX0hBTkRMRUQ7Ci0JCQlnZW42X3Jwc19pcnFfaGFuZGxlcihkZXZfcHJpdiwgcG1f aWlyKTsKKwkJCWdlbjZfcnBzX2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+Z3QucnBzLCBwbV9paXIp OwogCQl9CiAJfQogCkBAIC0zMDM4LDcgKzIyOTMsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZ2Vu OF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJfQogCiAJLyogRmluZCwgY2xlYXIs IHRoZW4gcHJvY2VzcyBlYWNoIHNvdXJjZSBvZiBpbnRlcnJ1cHQgKi8KLQlnZW44X2d0X2lycV9h Y2soZGV2X3ByaXYsIG1hc3Rlcl9jdGwsIGd0X2lpcik7CisJZ2VuOF9ndF9pcnFfYWNrKCZkZXZf cHJpdi0+Z3QsIG1hc3Rlcl9jdGwsIGd0X2lpcik7CiAKIAkvKiBJUlFzIGFyZSBzeW5jZWQgZHVy aW5nIHJ1bnRpbWVfc3VzcGVuZCwgd2UgZG9uJ3QgcmVxdWlyZSBhIHdha2VyZWYgKi8KIAlpZiAo bWFzdGVyX2N0bCAmIH5HRU44X0dUX0lSUVMpIHsKQEAgLTMwNDksMTM0ICsyMzA0LDExIEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBnZW44X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAog CWdlbjhfbWFzdGVyX2ludHJfZW5hYmxlKHJlZ3MpOwogCi0JZ2VuOF9ndF9pcnFfaGFuZGxlcihk ZXZfcHJpdiwgbWFzdGVyX2N0bCwgZ3RfaWlyKTsKKwlnZW44X2d0X2lycV9oYW5kbGVyKCZkZXZf cHJpdi0+Z3QsIG1hc3Rlcl9jdGwsIGd0X2lpcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9 CiAKLXN0YXRpYyB1MzIKLWdlbjExX2d0X2VuZ2luZV9pZGVudGl0eShzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0LAotCQkJIGNvbnN0IHVuc2lnbmVkIGludCBiYW5rLCBjb25zdCB1bnNpZ25lZCBpbnQgYml0 KQotewotCXZvaWQgX19pb21lbSAqIGNvbnN0IHJlZ3MgPSBndC0+dW5jb3JlLT5yZWdzOwotCXUz MiB0aW1lb3V0X3RzOwotCXUzMiBpZGVudDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5p OTE1LT5pcnFfbG9jayk7Ci0KLQlyYXdfcmVnX3dyaXRlKHJlZ3MsIEdFTjExX0lJUl9SRUdfU0VM RUNUT1IoYmFuayksIEJJVChiaXQpKTsKLQotCS8qCi0JICogTkI6IFNwZWNzIGRvIG5vdCBzcGVj aWZ5IGhvdyBsb25nIHRvIHNwaW4gd2FpdCwKLQkgKiBzbyB3ZSBkbyB+MTAwdXMgYXMgYW4gZWR1 Y2F0ZWQgZ3Vlc3MuCi0JICovCi0JdGltZW91dF90cyA9IChsb2NhbF9jbG9jaygpID4+IDEwKSAr IDEwMDsKLQlkbyB7Ci0JCWlkZW50ID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjExX0lOVFJfSURF TlRJVFlfUkVHKGJhbmspKTsKLQl9IHdoaWxlICghKGlkZW50ICYgR0VOMTFfSU5UUl9EQVRBX1ZB TElEKSAmJgotCQkgIXRpbWVfYWZ0ZXIzMihsb2NhbF9jbG9jaygpID4+IDEwLCB0aW1lb3V0X3Rz KSk7Ci0KLQlpZiAodW5saWtlbHkoIShpZGVudCAmIEdFTjExX0lOVFJfREFUQV9WQUxJRCkpKSB7 Ci0JCURSTV9FUlJPUigiSU5UUl9JREVOVElUWV9SRUcldToldSAweCUwOHggbm90IHZhbGlkIVxu IiwKLQkJCSAgYmFuaywgYml0LCBpZGVudCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJhd19yZWdf d3JpdGUocmVncywgR0VOMTFfSU5UUl9JREVOVElUWV9SRUcoYmFuayksCi0JCSAgICAgIEdFTjEx X0lOVFJfREFUQV9WQUxJRCk7Ci0KLQlyZXR1cm4gaWRlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1n ZW4xMV9vdGhlcl9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBjb25zdCB1OCBpbnN0 YW5jZSwKLQkJCWNvbnN0IHUxNiBpaXIpCi17Ci0JaWYgKGluc3RhbmNlID09IE9USEVSX0dVQ19J TlNUQU5DRSkKLQkJcmV0dXJuIGd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgaWlyKTsKLQot CWlmIChpbnN0YW5jZSA9PSBPVEhFUl9HVFBNX0lOU1RBTkNFKQotCQlyZXR1cm4gZ2VuMTFfcnBz X2lycV9oYW5kbGVyKGd0LCBpaXIpOwotCi0JV0FSTl9PTkNFKDEsICJ1bmhhbmRsZWQgb3RoZXIg aW50ZXJydXB0IGluc3RhbmNlPTB4JXgsIGlpcj0weCV4XG4iLAotCQkgIGluc3RhbmNlLCBpaXIp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuMTFfZW5naW5lX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGNvbnN0IHU4IGNsYXNzLAotCQkJIGNvbnN0IHU4IGluc3RhbmNlLCBjb25zdCB1 MTYgaWlyKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKLQotCWlmIChpbnN0 YW5jZSA8PSBNQVhfRU5HSU5FX0lOU1RBTkNFKQotCQllbmdpbmUgPSBndC0+ZW5naW5lX2NsYXNz W2NsYXNzXVtpbnN0YW5jZV07Ci0JZWxzZQotCQllbmdpbmUgPSBOVUxMOwotCi0JaWYgKGxpa2Vs eShlbmdpbmUpKQotCQlyZXR1cm4gZ2VuOF9jc19pcnFfaGFuZGxlcihlbmdpbmUsIGlpcik7Ci0K LQlXQVJOX09OQ0UoMSwgInVuaGFuZGxlZCBlbmdpbmUgaW50ZXJydXB0IGNsYXNzPTB4JXgsIGlu c3RhbmNlPTB4JXhcbiIsCi0JCSAgY2xhc3MsIGluc3RhbmNlKTsKLX0KLQotc3RhdGljIHZvaWQK LWdlbjExX2d0X2lkZW50aXR5X2hhbmRsZXIoc3RydWN0IGludGVsX2d0ICpndCwgY29uc3QgdTMy IGlkZW50aXR5KQotewotCWNvbnN0IHU4IGNsYXNzID0gR0VOMTFfSU5UUl9FTkdJTkVfQ0xBU1Mo aWRlbnRpdHkpOwotCWNvbnN0IHU4IGluc3RhbmNlID0gR0VOMTFfSU5UUl9FTkdJTkVfSU5TVEFO Q0UoaWRlbnRpdHkpOwotCWNvbnN0IHUxNiBpbnRyID0gR0VOMTFfSU5UUl9FTkdJTkVfSU5UUihp ZGVudGl0eSk7Ci0KLQlpZiAodW5saWtlbHkoIWludHIpKQotCQlyZXR1cm47Ci0KLQlpZiAoY2xh c3MgPD0gQ09QWV9FTkdJTkVfQ0xBU1MpCi0JCXJldHVybiBnZW4xMV9lbmdpbmVfaXJxX2hhbmRs ZXIoZ3QsIGNsYXNzLCBpbnN0YW5jZSwgaW50cik7Ci0KLQlpZiAoY2xhc3MgPT0gT1RIRVJfQ0xB U1MpCi0JCXJldHVybiBnZW4xMV9vdGhlcl9pcnFfaGFuZGxlcihndCwgaW5zdGFuY2UsIGludHIp OwotCi0JV0FSTl9PTkNFKDEsICJ1bmtub3duIGludGVycnVwdCBjbGFzcz0weCV4LCBpbnN0YW5j ZT0weCV4LCBpbnRyPTB4JXhcbiIsCi0JCSAgY2xhc3MsIGluc3RhbmNlLCBpbnRyKTsKLX0KLQot c3RhdGljIHZvaWQKLWdlbjExX2d0X2JhbmtfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBj b25zdCB1bnNpZ25lZCBpbnQgYmFuaykKLXsKLQl2b2lkIF9faW9tZW0gKiBjb25zdCByZWdzID0g Z3QtPnVuY29yZS0+cmVnczsKLQl1bnNpZ25lZCBsb25nIGludHJfZHc7Ci0JdW5zaWduZWQgaW50 IGJpdDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pOTE1LT5pcnFfbG9jayk7Ci0KLQlp bnRyX2R3ID0gcmF3X3JlZ19yZWFkKHJlZ3MsIEdFTjExX0dUX0lOVFJfRFcoYmFuaykpOwotCi0J Zm9yX2VhY2hfc2V0X2JpdChiaXQsICZpbnRyX2R3LCAzMikgewotCQljb25zdCB1MzIgaWRlbnQg PSBnZW4xMV9ndF9lbmdpbmVfaWRlbnRpdHkoZ3QsIGJhbmssIGJpdCk7Ci0KLQkJZ2VuMTFfZ3Rf aWRlbnRpdHlfaGFuZGxlcihndCwgaWRlbnQpOwotCX0KLQotCS8qIENsZWFyIG11c3QgYmUgYWZ0 ZXIgc2hhcmVkIGhhcyBiZWVuIHNlcnZlZCBmb3IgZW5naW5lICovCi0JcmF3X3JlZ193cml0ZShy ZWdzLCBHRU4xMV9HVF9JTlRSX0RXKGJhbmspLCBpbnRyX2R3KTsKLX0KLQotc3RhdGljIHZvaWQK LWdlbjExX2d0X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGNvbnN0IHUzMiBtYXN0 ZXJfY3RsKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7Ci0J dW5zaWduZWQgaW50IGJhbms7Ci0KLQlzcGluX2xvY2soJmk5MTUtPmlycV9sb2NrKTsKLQotCWZv ciAoYmFuayA9IDA7IGJhbmsgPCAyOyBiYW5rKyspIHsKLQkJaWYgKG1hc3Rlcl9jdGwgJiBHRU4x MV9HVF9EV19JUlEoYmFuaykpCi0JCQlnZW4xMV9ndF9iYW5rX2hhbmRsZXIoZ3QsIGJhbmspOwot CX0KLQotCXNwaW5fdW5sb2NrKCZpOTE1LT5pcnFfbG9jayk7Ci19Ci0KIHN0YXRpYyB1MzIKIGdl bjExX2d1X21pc2NfaXJxX2FjayhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBjb25zdCB1MzIgbWFzdGVy X2N0bCkKIHsKQEAgLTM0ODUsMTUgKzI2MTcsNiBAQCBzdGF0aWMgdm9pZCBpYnhfaXJxX3ByZV9w b3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJUE9TVElOR19S RUFEKFNERUlFUik7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjVfZ3RfaXJxX3Jlc2V0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKLQotCUdFTjNfSVJRX1JFU0VUKHVuY29yZSwgR1QpOwot CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpCi0JCUdFTjNfSVJRX1JFU0VUKHVuY29yZSwg R0VONl9QTSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZsdl9kaXNwbGF5X2lycV9yZXNldChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gJmRldl9wcml2LT51bmNvcmU7CkBAIC0zNTU4LDcgKzI2ODEsNyBAQCBzdGF0aWMgdm9p ZCBpcm9ubGFrZV9pcnFfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRFBfUFNSX0lJUiwgMHhmZmZmZmZmZik7CiAJ fQogCi0JZ2VuNV9ndF9pcnFfcmVzZXQoZGV2X3ByaXYpOworCWdlbjVfZ3RfaXJxX3Jlc2V0KCZk ZXZfcHJpdi0+Z3QpOwogCiAJaWJ4X2lycV9yZXNldChkZXZfcHJpdik7CiB9CkBAIC0zNTY4LDcg KzI2OTEsNyBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2lycV9yZXNldChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJSTkxNV9XUklURShWTFZfTUFTVEVSX0lFUiwgMCk7CiAJ UE9TVElOR19SRUFEKFZMVl9NQVNURVJfSUVSKTsKIAotCWdlbjVfZ3RfaXJxX3Jlc2V0KGRldl9w cml2KTsKKwlnZW41X2d0X2lycV9yZXNldCgmZGV2X3ByaXYtPmd0KTsKIAogCXNwaW5fbG9ja19p cnEoJmRldl9wcml2LT5pcnFfbG9jayk7CiAJaWYgKGRldl9wcml2LT5kaXNwbGF5X2lycXNfZW5h YmxlZCkKQEAgLTM1NzYsMTYgKzI2OTksNiBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2lycV9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJc3Bpbl91bmxvY2tfaXJx KCZkZXZfcHJpdi0+aXJxX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBnZW44X2d0X2lycV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gJmRldl9wcml2LT51bmNvcmU7Ci0KLQlHRU44X0lSUV9SRVNFVF9ORFgo dW5jb3JlLCBHVCwgMCk7Ci0JR0VOOF9JUlFfUkVTRVRfTkRYKHVuY29yZSwgR1QsIDEpOwotCUdF TjhfSVJRX1JFU0VUX05EWCh1bmNvcmUsIEdULCAyKTsKLQlHRU44X0lSUV9SRVNFVF9ORFgodW5j b3JlLCBHVCwgMyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdlbjhfaXJxX3Jlc2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUg PSAmZGV2X3ByaXYtPnVuY29yZTsKQEAgLTM1OTMsNyArMjcwNiw3IEBAIHN0YXRpYyB2b2lkIGdl bjhfaXJxX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCWdlbjhf bWFzdGVyX2ludHJfZGlzYWJsZShkZXZfcHJpdi0+dW5jb3JlLnJlZ3MpOwogCi0JZ2VuOF9ndF9p cnFfcmVzZXQoZGV2X3ByaXYpOworCWdlbjhfZ3RfaXJxX3Jlc2V0KCZkZXZfcHJpdi0+Z3QpOwog CiAJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRURQX1BTUl9JTVIsIDB4ZmZmZmZmZmYpOwog CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVEUF9QU1JfSUlSLCAweGZmZmZmZmZmKTsKQEAg LTM2MTEsMjcgKzI3MjQsNiBAQCBzdGF0aWMgdm9pZCBnZW44X2lycV9yZXNldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWlieF9pcnFfcmVzZXQoZGV2X3ByaXYpOwogfQog Ci1zdGF0aWMgdm9pZCBnZW4xMV9ndF9pcnFfcmVzZXQoc3RydWN0IGludGVsX2d0ICpndCkKLXsK LQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwotCi0JLyogRGlzYWJs ZSBSQ1MsIEJDUywgVkNTIGFuZCBWRUNTIGNsYXNzIGVuZ2luZXMuICovCi0JaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwgR0VOMTFfUkVOREVSX0NPUFlfSU5UUl9FTkFCTEUsIDApOwotCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX1ZDU19WRUNTX0lOVFJfRU5BQkxFLAkgIDApOwot Ci0JLyogUmVzdG9yZSBtYXNrcyBpcnFzIG9uIFJDUywgQkNTLCBWQ1MgYW5kIFZFQ1MgZW5naW5l cy4gKi8KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9SQ1MwX1JTVkRfSU5UUl9N QVNLLAl+MCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfQkNTX1JTVkRfSU5U Ul9NQVNLLAl+MCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfVkNTMF9WQ1Mx X0lOVFJfTUFTSywJfjApOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX1ZDUzJf VkNTM19JTlRSX01BU0ssCX4wKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9W RUNTMF9WRUNTMV9JTlRSX01BU0ssCX4wKTsKLQotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9FTkFCTEUsIDApOwotCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9NQVNLLCAgfjApOwotCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0dVQ19TR19JTlRSX0VOQUJMRSwgMCk7Ci0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfR1VDX1NHX0lOVFJfTUFTSywgIH4wKTsKLX0KLQog c3RhdGljIHZvaWQgZ2VuMTFfaXJxX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIHsKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29y ZTsKQEAgLTM3MTMsNyArMjgwNSw3IEBAIHN0YXRpYyB2b2lkIGNoZXJyeXZpZXdfaXJxX3Jlc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlJOTE1X1dSSVRFKEdFTjhfTUFT VEVSX0lSUSwgMCk7CiAJUE9TVElOR19SRUFEKEdFTjhfTUFTVEVSX0lSUSk7CiAKLQlnZW44X2d0 X2lycV9yZXNldChkZXZfcHJpdik7CisJZ2VuOF9ndF9pcnFfcmVzZXQoJmRldl9wcml2LT5ndCk7 CiAKIAlHRU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdFTjhfUENVXyk7CiAKQEAgLTM5OTYsNDQgKzMw ODgsNiBAQCBzdGF0aWMgdm9pZCBpYnhfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAkJc3B0X2hwZF9kZXRlY3Rpb25fc2V0dXAoZGV2X3ByaXYpOwog fQogCi1zdGF0aWMgdm9pZCBnZW41X2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmRl dl9wcml2LT51bmNvcmU7Ci0JdTMyIHBtX2lycXMsIGd0X2lycXM7Ci0KLQlwbV9pcnFzID0gZ3Rf aXJxcyA9IDA7Ci0KLQlkZXZfcHJpdi0+Z3RfaXJxX21hc2sgPSB+MDsKLQlpZiAoSEFTX0wzX0RQ RihkZXZfcHJpdikpIHsKLQkJLyogTDMgcGFyaXR5IGludGVycnVwdCBpcyBhbHdheXMgdW5tYXNr ZWQuICovCi0JCWRldl9wcml2LT5ndF9pcnFfbWFzayA9IH5HVF9QQVJJVFlfRVJST1IoZGV2X3By aXYpOwotCQlndF9pcnFzIHw9IEdUX1BBUklUWV9FUlJPUihkZXZfcHJpdik7Ci0JfQotCi0JZ3Rf aXJxcyB8PSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQ7Ci0JaWYgKElTX0dFTihkZXZfcHJpdiwg NSkpIHsKLQkJZ3RfaXJxcyB8PSBJTEtfQlNEX1VTRVJfSU5URVJSVVBUOwotCX0gZWxzZSB7Ci0J CWd0X2lycXMgfD0gR1RfQkxUX1VTRVJfSU5URVJSVVBUIHwgR1RfQlNEX1VTRVJfSU5URVJSVVBU OwotCX0KLQotCUdFTjNfSVJRX0lOSVQodW5jb3JlLCBHVCwgZGV2X3ByaXYtPmd0X2lycV9tYXNr LCBndF9pcnFzKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpIHsKLQkJLyoKLQkJ ICogUlBTIGludGVycnVwdHMgd2lsbCBnZXQgZW5hYmxlZC9kaXNhYmxlZCBvbiBkZW1hbmQgd2hl biBSUFMKLQkJICogaXRzZWxmIGlzIGVuYWJsZWQvZGlzYWJsZWQuCi0JCSAqLwotCQlpZiAoSEFT X0VOR0lORShkZXZfcHJpdiwgVkVDUzApKSB7Ci0JCQlwbV9pcnFzIHw9IFBNX1ZFQk9YX1VTRVJf SU5URVJSVVBUOwotCQkJZGV2X3ByaXYtPmd0LnBtX2llciB8PSBQTV9WRUJPWF9VU0VSX0lOVEVS UlVQVDsKLQkJfQotCi0JCWRldl9wcml2LT5ndC5wbV9pbXIgPSAweGZmZmZmZmZmOwotCQlHRU4z X0lSUV9JTklUKHVuY29yZSwgR0VONl9QTSwgZGV2X3ByaXYtPmd0LnBtX2ltciwgcG1faXJxcyk7 Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwpAQCAtNDA2Nyw3ICszMTIxLDcgQEAgc3RhdGljIHZvaWQg aXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlHRU4zX0lSUV9JTklUKHVuY29yZSwgREUsIGRldl9wcml2LT5pcnFfbWFzaywKIAkJICAg ICAgZGlzcGxheV9tYXNrIHwgZXh0cmFfbWFzayk7CiAKLQlnZW41X2d0X2lycV9wb3N0aW5zdGFs bChkZXZfcHJpdik7CisJZ2VuNV9ndF9pcnFfcG9zdGluc3RhbGwoJmRldl9wcml2LT5ndCk7CiAK IAlpbGtfaHBkX2RldGVjdGlvbl9zZXR1cChkZXZfcHJpdik7CiAKQEAgLTQxMTYsNyArMzE3MCw3 IEBAIHZvaWQgdmFsbGV5dmlld19kaXNhYmxlX2Rpc3BsYXlfaXJxcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAKIHN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaXJxX3Bvc3RpbnN0 YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlnZW41X2d0X2lycV9w b3N0aW5zdGFsbChkZXZfcHJpdik7CisJZ2VuNV9ndF9pcnFfcG9zdGluc3RhbGwoJmRldl9wcml2 LT5ndCk7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCWlmIChkZXZf cHJpdi0+ZGlzcGxheV9pcnFzX2VuYWJsZWQpCkBAIC00MTI3LDQxICszMTgxLDYgQEAgc3RhdGlj IHZvaWQgdmFsbGV5dmlld19pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogCVBPU1RJTkdfUkVBRChWTFZfTUFTVEVSX0lFUik7CiB9CiAKLXN0YXRpYyB2 b2lkIGdlbjhfZ3RfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQotewotCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmaTkxNS0+Z3Q7Ci0Jc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKLQotCS8qIFRoZXNlIGFyZSBpbnRlcnJ1cHRzIHdl J2xsIHRvZ2dsZSB3aXRoIHRoZSByaW5nIG1hc2sgcmVnaXN0ZXIgKi8KLQl1MzIgZ3RfaW50ZXJy dXB0c1tdID0gewotCQkoR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIDw8IEdFTjhfUkNTX0lSUV9T SElGVCB8Ci0JCSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9SQ1NfSVJRX1NI SUZUIHwKLQkJIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X0JDU19JUlFfU0hJRlQg fAotCQkgR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8IEdFTjhfQkNTX0lSUV9TSElGVCks Ci0KLQkJKEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1ZDUzBfSVJRX1NISUZUIHwK LQkJIEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8PCBHRU44X1ZDUzBfSVJRX1NISUZUIHwK LQkJIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBHRU44X1ZDUzFfSVJRX1NISUZUIHwKLQkJ IEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVCA8PCBHRU44X1ZDUzFfSVJRX1NISUZUKSwKLQot CQkwLAotCi0JCShHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgR0VOOF9WRUNTX0lSUV9TSElG VCB8Ci0JCSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgR0VOOF9WRUNTX0lSUV9TSElG VCkKLQl9OwotCi0JZ3QtPnBtX2llciA9IDB4MDsKLQlndC0+cG1faW1yID0gfmd0LT5wbV9pZXI7 Ci0JR0VOOF9JUlFfSU5JVF9ORFgodW5jb3JlLCBHVCwgMCwgfmd0X2ludGVycnVwdHNbMF0sIGd0 X2ludGVycnVwdHNbMF0pOwotCUdFTjhfSVJRX0lOSVRfTkRYKHVuY29yZSwgR1QsIDEsIH5ndF9p bnRlcnJ1cHRzWzFdLCBndF9pbnRlcnJ1cHRzWzFdKTsKLQkvKgotCSAqIFJQUyBpbnRlcnJ1cHRz IHdpbGwgZ2V0IGVuYWJsZWQvZGlzYWJsZWQgb24gZGVtYW5kIHdoZW4gUlBTIGl0c2VsZgotCSAq IGlzIGVuYWJsZWQvZGlzYWJsZWQuIFNhbWUgd2lsIGJlIHRoZSBjYXNlIGZvciBHdUMgaW50ZXJy dXB0cy4KLQkgKi8KLQlHRU44X0lSUV9JTklUX05EWCh1bmNvcmUsIEdULCAyLCBndC0+cG1faW1y LCBndC0+cG1faWVyKTsKLQlHRU44X0lSUV9JTklUX05EWCh1bmNvcmUsIEdULCAzLCB+Z3RfaW50 ZXJydXB0c1szXSwgZ3RfaW50ZXJydXB0c1szXSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdlbjhfZGVf aXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKQEAgLTQyMzcs NyArMzI1Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpZiAoSEFTX1BDSF9TUExJVChkZXZfcHJpdikpCiAJ CWlieF9pcnFfcHJlX3Bvc3RpbnN0YWxsKGRldl9wcml2KTsKIAotCWdlbjhfZ3RfaXJxX3Bvc3Rp bnN0YWxsKGRldl9wcml2KTsKKwlnZW44X2d0X2lycV9wb3N0aW5zdGFsbCgmZGV2X3ByaXYtPmd0 KTsKIAlnZW44X2RlX2lycV9wb3N0aW5zdGFsbChkZXZfcHJpdik7CiAKIAlpZiAoSEFTX1BDSF9T UExJVChkZXZfcHJpdikpCkBAIC00MjQ2LDQwICszMjY1LDYgQEAgc3RhdGljIHZvaWQgZ2VuOF9p cnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWdlbjhf bWFzdGVyX2ludHJfZW5hYmxlKGRldl9wcml2LT51bmNvcmUucmVncyk7CiB9CiAKLXN0YXRpYyB2 b2lkIGdlbjExX2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQotewotCWNv bnN0IHUzMiBpcnFzID0gR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUIHwgR1RfQ09OVEVYVF9TV0lU Q0hfSU5URVJSVVBUOwotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7 Ci0JY29uc3QgdTMyIGRtYXNrID0gaXJxcyA8PCAxNiB8IGlycXM7Ci0JY29uc3QgdTMyIHNtYXNr ID0gaXJxcyA8PCAxNjsKLQotCUJVSUxEX0JVR19PTihpcnFzICYgMHhmZmZmMDAwMCk7Ci0KLQkv KiBFbmFibGUgUkNTLCBCQ1MsIFZDUyBhbmQgVkVDUyBjbGFzcyBpbnRlcnJ1cHRzLiAqLwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX1JFTkRFUl9DT1BZX0lOVFJfRU5BQkxFLCBk bWFzayk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfVkNTX1ZFQ1NfSU5UUl9F TkFCTEUsIGRtYXNrKTsKLQotCS8qIFVubWFzayBpcnFzIG9uIFJDUywgQkNTLCBWQ1MgYW5kIFZF Q1MgZW5naW5lcy4gKi8KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU4xMV9SQ1MwX1JT VkRfSU5UUl9NQVNLLCB+c21hc2spOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjEx X0JDU19SU1ZEX0lOVFJfTUFTSywgfnNtYXNrKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU4xMV9WQ1MwX1ZDUzFfSU5UUl9NQVNLLCB+ZG1hc2spOwotCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEdFTjExX1ZDUzJfVkNTM19JTlRSX01BU0ssIH5kbWFzayk7Ci0JaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfVkVDUzBfVkVDUzFfSU5UUl9NQVNLLCB+ZG1hc2spOwot Ci0JLyoKLQkgKiBSUFMgaW50ZXJydXB0cyB3aWxsIGdldCBlbmFibGVkL2Rpc2FibGVkIG9uIGRl bWFuZCB3aGVuIFJQUyBpdHNlbGYKLQkgKiBpcyBlbmFibGVkL2Rpc2FibGVkLgotCSAqLwotCWd0 LT5wbV9pZXIgPSAweDA7Ci0JZ3QtPnBtX2ltciA9IH5ndC0+cG1faWVyOwotCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9FTkFCTEUsIDApOwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9NQVNLLCAg fjApOwotCi0JLyogU2FtZSB0aGluZyBmb3IgR3VDIGludGVycnVwdHMgKi8KLQlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBHRU4xMV9HVUNfU0dfSU5UUl9FTkFCTEUsIDApOwotCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIEdFTjExX0dVQ19TR19JTlRSX01BU0ssICB+MCk7Ci19Ci0KIHN0 YXRpYyB2b2lkIGljcF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQogewogCXUzMiBtYXNrID0gU0RFX0dNQlVTX0lDUDsKQEAgLTQzMTUsNyArMzMwMCw3 IEBAIHN0YXRpYyB2b2lkIGdlbjExX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAKIHN0YXRpYyB2b2lkIGNoZXJyeXZpZXdfaXJxX3Bvc3RpbnN0YWxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlnZW44X2d0X2lycV9wb3N0 aW5zdGFsbChkZXZfcHJpdik7CisJZ2VuOF9ndF9pcnFfcG9zdGluc3RhbGwoJmRldl9wcml2LT5n dCk7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCWlmIChkZXZfcHJp di0+ZGlzcGxheV9pcnFzX2VuYWJsZWQpCkBAIC00NzUxLDcgKzM3MzYsNiBAQCBzdGF0aWMgaXJx cmV0dXJuX3QgaTk2NV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiB2b2lkIGludGVs X2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CiAJaW50IGk7CiAKIAlpZiAoSVNfSTk0NUdNKGRldl9w cml2KSkKQEAgLTQ3NTksOCArMzc0Myw2IEBAIHZvaWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCiAJaW50ZWxfaHBkX2luaXRfd29yayhkZXZfcHJp dik7CiAKLQlJTklUX1dPUksoJnJwcy0+d29yaywgZ2VuNl9wbV9ycHNfd29yayk7Ci0KIAlJTklU X1dPUksoJmRldl9wcml2LT5sM19wYXJpdHkuZXJyb3Jfd29yaywgaXZ5YnJpZGdlX3Bhcml0eV93 b3JrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0wzX1NMSUNFUzsgKytpKQogCQlkZXZfcHJpdi0+ bDNfcGFyaXR5LnJlbWFwX2luZm9baV0gPSBOVUxMOwpAQCAtNDc2OSwzMyArMzc1MSw2IEBAIHZv aWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWlm IChIQVNfR1RfVUMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKIAkJZGV2 X3ByaXYtPmd0LnBtX2d1Y19ldmVudHMgPSBHVUNfSU5UUl9HVUMySE9TVCA8PCAxNjsKIAotCS8q IExldCdzIHRyYWNrIHRoZSBlbmFibGVkIHJwcyBldmVudHMgKi8KLQlpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdikpCi0JCS8qIFdhR3N2UkMwUmVzaWRlbmN5TWV0aG9kOnZsdiAqLwotCQlkZXZf cHJpdi0+cG1fcnBzX2V2ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQllbHNlCi0J CWRldl9wcml2LT5wbV9ycHNfZXZlbnRzID0gKEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEIHwKLQkJ CQkJICAgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8Ci0JCQkJCSAgIEdFTjZfUE1fUlBfRE9X Tl9USU1FT1VUKTsKLQotCS8qIFdlIHNoYXJlIHRoZSByZWdpc3RlciB3aXRoIG90aGVyIGVuZ2lu ZSAqLwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gOSkKLQkJR0VNX1dBUk5fT04oZGV2X3By aXYtPnBtX3Jwc19ldmVudHMgJiAweGZmZmYwMDAwKTsKLQotCXJwcy0+cG1faW50cm1za19tYnog PSAwOwotCi0JLyoKLQkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBo YW5nIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKLQkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQg aXMgbWFza2VkLgotCSAqCi0JICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVj ZWQgb24gVkxWLENIVi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8PSA3KQotCQly cHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VOOF9Q TUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Ci0KIAlkZXYtPnZibGFua19kaXNhYmxlX2lt bWVkaWF0ZSA9IHRydWU7CiAKIAkvKiBNb3N0IHBsYXRmb3JtcyB0cmVhdCB0aGUgZGlzcGxheSBp cnEgYmxvY2sgYXMgYW4gYWx3YXlzLW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaAppbmRleCA4OTE4 ODA5Y2Q4MDUuLjgzNjhjNTU2OGI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCkBAIC03Niwy MiArNzYsNiBAQCBpYnhfZGlzYWJsZV9kaXNwbGF5X2ludGVycnVwdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBiaXRzKQogCWlieF9kaXNwbGF5X2ludGVycnVwdF91cGRh dGUoZGV2X3ByaXYsIGJpdHMsIDApOwogfQogCi12b2lkIGdlbjVfZW5hYmxlX2d0X2lycShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBtYXNrKTsKLXZvaWQgZ2VuNV9kaXNh YmxlX2d0X2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBtYXNrKTsK LXZvaWQgZ2VuNl9tYXNrX3BtX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzayk7Ci12 b2lkIGdlbjZfdW5tYXNrX3BtX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzayk7Ci12 b2lkIGdlbjExX3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7Ci12b2lkIGdlbjZfcmVzZXRfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgZ2VuNl9lbmFibGVfcnBzX2ludGVycnVwdHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19p bnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGdlbjZf cnBzX3Jlc2V0X2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci0KLXN0YXRp YyBpbmxpbmUgdTMyIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCi0JCQkJCSAgICB1MzIgbWFzaykKLXsKLQlyZXR1cm4gbWFzayAm IH5pOTE1LT5ndF9wbS5ycHMucG1faW50cm1za19tYno7Ci19Ci0KIHZvaWQgaW50ZWxfcnVudGlt ZV9wbV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKIHZvaWQgaW50ZWxfcnVudGltZV9wbV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogc3RhdGljIGlubGluZSBib29sIGludGVsX2lycXNfZW5h YmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCkBAIC0xMTMsMTIgKzk3LDYg QEAgdm9pZCBnZW44X2lycV9wb3dlcl93ZWxsX3Bvc3RfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAgIHU4IHBpcGVfbWFzayk7CiB2b2lkIGdlbjhfaXJx X3Bvd2VyX3dlbGxfcHJlX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAogCQkJCSAgICAgdTggcGlwZV9tYXNrKTsKLXZvaWQgZ2VuOV9yZXNldF9ndWNfaW50ZXJydXB0 cyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwotdm9pZCBnZW45X2VuYWJsZV9ndWNfaW50ZXJydXB0 cyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwotdm9pZCBnZW45X2Rpc2FibGVfZ3VjX2ludGVycnVw dHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLXZvaWQgZ2VuMTFfcmVzZXRfZ3VjX2ludGVycnVw dHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLXZvaWQgZ2VuMTFfZW5hYmxlX2d1Y19pbnRlcnJ1 cHRzKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Ci12b2lkIGdlbjExX2Rpc2FibGVfZ3VjX2ludGVy cnVwdHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKIAogYm9vbCBpOTE1X2dldF9jcnRjX3NjYW5v dXRwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCiAJCQkgICAg ICBib29sIGluX3ZibGFua19pcnEsIGludCAqdnBvcywgaW50ICpocG9zLApAQCAtMTM5LDQgKzEx Nyw0NiBAQCB2b2lkIGk5NjVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK IHZvaWQgaWxrX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB2b2lkIGJk d19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCit2b2lkIGdlbjJfaXJx X3Jlc2V0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSk7Cit2b2lkIGdlbjNfaXJxX3Jlc2V0 KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSwgaTkxNV9yZWdfdCBpbXIsCisJCSAgICBpOTE1 X3JlZ190IGlpciwgaTkxNV9yZWdfdCBpZXIpOworCit2b2lkIGdlbjJfaXJxX2luaXQoc3RydWN0 IGludGVsX3VuY29yZSAqdW5jb3JlLAorCQkgICB1MzIgaW1yX3ZhbCwgdTMyIGllcl92YWwpOwor dm9pZCBnZW4zX2lycV9pbml0KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSwKKwkJICAgaTkx NV9yZWdfdCBpbXIsIHUzMiBpbXJfdmFsLAorCQkgICBpOTE1X3JlZ190IGllciwgdTMyIGllcl92 YWwsCisJCSAgIGk5MTVfcmVnX3QgaWlyKTsKKworI2RlZmluZSBHRU44X0lSUV9SRVNFVF9ORFgo dW5jb3JlLCB0eXBlLCB3aGljaCkgXAorKHsgXAorCXVuc2lnbmVkIGludCB3aGljaF8gPSB3aGlj aDsgXAorCWdlbjNfaXJxX3Jlc2V0KCh1bmNvcmUpLCBHRU44XyMjdHlwZSMjX0lNUih3aGljaF8p LCBcCisJCSAgICAgICBHRU44XyMjdHlwZSMjX0lJUih3aGljaF8pLCBHRU44XyMjdHlwZSMjX0lF Uih3aGljaF8pKTsgXAorfSkKKworI2RlZmluZSBHRU4zX0lSUV9SRVNFVCh1bmNvcmUsIHR5cGUp IFwKKwlnZW4zX2lycV9yZXNldCgodW5jb3JlKSwgdHlwZSMjSU1SLCB0eXBlIyNJSVIsIHR5cGUj I0lFUikKKworI2RlZmluZSBHRU4yX0lSUV9SRVNFVCh1bmNvcmUpIFwKKwlnZW4yX2lycV9yZXNl dCh1bmNvcmUpCisKKyNkZWZpbmUgR0VOOF9JUlFfSU5JVF9ORFgodW5jb3JlLCB0eXBlLCB3aGlj aCwgaW1yX3ZhbCwgaWVyX3ZhbCkgXAorKHsgXAorCXVuc2lnbmVkIGludCB3aGljaF8gPSB3aGlj aDsgXAorCWdlbjNfaXJxX2luaXQoKHVuY29yZSksIFwKKwkJICAgICAgR0VOOF8jI3R5cGUjI19J TVIod2hpY2hfKSwgaW1yX3ZhbCwgXAorCQkgICAgICBHRU44XyMjdHlwZSMjX0lFUih3aGljaF8p LCBpZXJfdmFsLCBcCisJCSAgICAgIEdFTjhfIyN0eXBlIyNfSUlSKHdoaWNoXykpOyBcCit9KQor CisjZGVmaW5lIEdFTjNfSVJRX0lOSVQodW5jb3JlLCB0eXBlLCBpbXJfdmFsLCBpZXJfdmFsKSBc CisJZ2VuM19pcnFfaW5pdCgodW5jb3JlKSwgXAorCQkgICAgICB0eXBlIyNJTVIsIGltcl92YWws IFwKKwkJICAgICAgdHlwZSMjSUVSLCBpZXJfdmFsLCBcCisJCSAgICAgIHR5cGUjI0lJUikKKwor I2RlZmluZSBHRU4yX0lSUV9JTklUKHVuY29yZSwgaW1yX3ZhbCwgaWVyX3ZhbCkgXAorCWdlbjJf aXJxX2luaXQoKHVuY29yZSksIGltcl92YWwsIGllcl92YWwpCisKICNlbmRpZiAvKiBfX0k5MTVf SVJRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKaW5kZXggM2JjMzZjM2JjMDM1Li44MmY0 MTg1MmFkM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpAQCAtOSw2ICs5LDggQEAKIAogI2lu Y2x1ZGUgImd0L2ludGVsX2VuZ2luZS5oIgogI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV91c2Vy LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcmM2LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgi CiAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfcG11LmgiCkBAIC0yMTcs MzIgKzIxOSwzNCBAQCBhZGRfc2FtcGxlX211bHQoc3RydWN0IGk5MTVfcG11X3NhbXBsZSAqc2Ft cGxlLCB1MzIgdmFsLCB1MzIgbXVsKQogc3RhdGljIHZvaWQKIGZyZXF1ZW5jeV9zYW1wbGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCBpbnQgcGVyaW9kX25zKQog eworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OworCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZndC0+cnBzOworCiAJaWYgKGRldl9wcml2LT5wbXUuZW5hYmxlICYKIAkgICAg Y29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSkgewogCQl1MzIg dmFsOwogCi0JCXZhbCA9IGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXE7Ci0JCWlmIChkZXZf cHJpdi0+Z3QuYXdha2UpIHsKKwkJdmFsID0gcnBzLT5jdXJfZnJlcTsKKwkJaWYgKGd0LT5hd2Fr ZSkgewogCQkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAKIAkJCXdpdGhfaW50ZWxfcnVudGlt ZV9wbV9pZl9pbl91c2UoJmRldl9wcml2LT5ydW50aW1lX3BtLAogCQkJCQkJCXdha2VyZWYpIHsK IAkJCQl2YWwgPSBpbnRlbF91bmNvcmVfcmVhZF9ub3RyYWNlKCZkZXZfcHJpdi0+dW5jb3JlLAog CQkJCQkJCQlHRU42X1JQU1RBVDEpOwotCQkJCXZhbCA9IGludGVsX2dldF9jYWdmKGRldl9wcml2 LCB2YWwpOworCQkJCXZhbCA9IGludGVsX2dldF9jYWdmKHJwcywgdmFsKTsKIAkJCX0KIAkJfQog CiAJCWFkZF9zYW1wbGVfbXVsdCgmZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9G UkVRX0FDVF0sCi0JCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCksCisJCQkJaW50ZWxf Z3B1X2ZyZXEocnBzLCB2YWwpLAogCQkJCXBlcmlvZF9ucyAvIDEwMDApOwogCX0KIAogCWlmIChk ZXZfcHJpdi0+cG11LmVuYWJsZSAmCiAJICAgIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVf UkVRVUVTVEVEX0ZSRVFVRU5DWSkpIHsKIAkJYWRkX3NhbXBsZV9tdWx0KCZkZXZfcHJpdi0+cG11 LnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwKLQkJCQlpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwKLQkJCQkJICAgICAgIGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXEpLAorCQkJCWlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSksCiAJCQkJcGVyaW9kX25zIC8gMTAwMCk7 CiAJfQogfQpAQCAtNDI1LDE2ICs0MjksMTYgQEAgc3RhdGljIHU2NCBfX2dldF9yYzYoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJdTY0IHZhbDsKIAotCXZhbCA9IGludGVsX3Jj Nl9yZXNpZGVuY3lfbnMoaTkxNSwKKwl2YWwgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKCZpOTE1 LT5ndC5yYzYsCiAJCQkJICAgICBJU19WQUxMRVlWSUVXKGk5MTUpID8KIAkJCQkgICAgIFZMVl9H VF9SRU5ERVJfUkM2IDoKIAkJCQkgICAgIEdFTjZfR1RfR0ZYX1JDNik7CiAKIAlpZiAoSEFTX1JD NnAoaTkxNSkpCi0JCXZhbCArPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1Rf R0ZYX1JDNnApOworCQl2YWwgKz0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucygmaTkxNS0+Z3QucmM2 LCBHRU42X0dUX0dGWF9SQzZwKTsKIAogCWlmIChIQVNfUkM2cHAoaTkxNSkpCi0JCXZhbCArPSBp bnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1RfR0ZYX1JDNnBwKTsKKwkJdmFsICs9 IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoJmk5MTUtPmd0LnJjNiwgR0VONl9HVF9HRlhfUkM2cHAp OwogCiAJcmV0dXJuIHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKaW5kZXgg ODEwOTRmMjUwYmRiLi5lZmM3YTg3MTAxMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVz dC5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fY29udGV4dC5o IgogI2luY2x1ZGUgImd0L2ludGVsX2NvbnRleHQuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMu aCIKIAogI2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAg LTI5Myw4ICsyOTQsOCBAQCBzdGF0aWMgYm9vbCBpOTE1X3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQogCWlmICh0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lH TkFMX0JJVCwgJnJxLT5mZW5jZS5mbGFncykpCiAJCWk5MTVfcmVxdWVzdF9jYW5jZWxfYnJlYWRj cnVtYihycSk7CiAJaWYgKGk5MTVfcmVxdWVzdF9oYXNfd2FpdGJvb3N0KHJxKSkgewotCQlHRU1f QlVHX09OKCFhdG9taWNfcmVhZCgmcnEtPmk5MTUtPmd0X3BtLnJwcy5udW1fd2FpdGVycykpOwot CQlhdG9taWNfZGVjKCZycS0+aTkxNS0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzKTsKKwkJR0VNX0JV R19PTighYXRvbWljX3JlYWQoJnJxLT5lbmdpbmUtPmd0LT5ycHMubnVtX3dhaXRlcnMpKTsKKwkJ YXRvbWljX2RlYygmcnEtPmVuZ2luZS0+Z3QtPnJwcy5udW1fd2FpdGVycyk7CiAJfQogCWlmICgh dGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJxLT5mZW5jZS5mbGFncykpIHsKIAkJ c2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKTsKQEAgLTE0 NDQsNyArMTQ0NSw3IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCiAJICovCiAJaWYgKGZsYWdzICYgSTkxNV9XQUlUX1BSSU9SSVRZKSB7CiAJCWlmICgh aTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpICYmIElOVEVMX0dFTihycS0+aTkxNSkgPj0gNikKLQkJ CWdlbjZfcnBzX2Jvb3N0KHJxKTsKKwkJCWludGVsX3Jwc19ib29zdChycSk7CiAJCWk5MTVfc2No ZWR1bGVfYnVtcF9wcmlvcml0eShycSwgSTkxNV9QUklPUklUWV9XQUlUKTsKIAl9CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfc3lzZnMuYwppbmRleCBlY2FjMWMzODYxMDkuLmMyY2JkMWU5NjBjYiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgPGxp bnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCisjaW5jbHVkZSAiZ3QvaW50 ZWxfcmM2LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCisKICNpbmNsdWRlICJpOTE1X2Ry di5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImludGVsX3BtLmgiCkBAIC00 OSw3ICs1Miw3IEBAIHN0YXRpYyB1MzIgY2FsY19yZXNpZGVuY3koc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAogCXU2NCByZXMgPSAwOwogCiAJd2l0aF9pbnRlbF9ydW50aW1lX3Bt KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZikKLQkJcmVzID0gaW50ZWxfcmM2X3Jlc2lk ZW5jeV91cyhkZXZfcHJpdiwgcmVnKTsKKwkJcmVzID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV91cygm ZGV2X3ByaXYtPmd0LnJjNiwgcmVnKTsKIAogCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVF9VTEwo cmVzLCAxMDAwKTsKIH0KQEAgLTI2MSw2ICsyNjQsNyBAQCBzdGF0aWMgc3NpemVfdCBndF9hY3Rf ZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKIAl1 MzIgZnJlcTsKIApAQCAtMjczLDMxICsyNzcsMzEgQEAgc3RhdGljIHNzaXplX3QgZ3RfYWN0X2Zy ZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2RldiwKIAogCQlmcmVxID0gKGZyZXEgPj4gOCkg JiAweGZmOwogCX0gZWxzZSB7Ci0JCWZyZXEgPSBpbnRlbF9nZXRfY2FnZihkZXZfcHJpdiwgSTkx NV9SRUFEKEdFTjZfUlBTVEFUMSkpOworCQlmcmVxID0gaW50ZWxfZ2V0X2NhZ2YocnBzLCBJOTE1 X1JFQUQoR0VONl9SUFNUQVQxKSk7CiAJfQogCiAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9w cml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0Vf U0laRSwgIiVkXG4iLCBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgZnJlcSkpOworCXJldHVybiBz bnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBpbnRlbF9ncHVfZnJlcShycHMsIGZyZXEp KTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3RfY3VyX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmlj ZSAqa2RldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1 ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3Rv X2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7 CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWludGVsX2dw dV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVx KSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpKTsKIH0KIAogc3RhdGlj IHNzaXplX3QgZ3RfYm9vc3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3Qg aW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50Zihi dWYsIFBBR0VfU0laRSwgIiVkXG4iLAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJ ICAgICAgIGRldl9wcml2LT5ndF9wbS5ycHMuYm9vc3RfZnJlcSkpOworCQkJaW50ZWxfZ3B1X2Zy ZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3RfYm9vc3Rf ZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKQEAgLTMwNSw3ICszMDksNyBAQCBz dGF0aWMgc3NpemVfdCBndF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2 LAogCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Ci0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CisJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJYm9vbCBib29zdCA9IGZhbHNlOwog CXNzaXplX3QgcmV0OwogCXUzMiB2YWw7CkBAIC0zMTUsNyArMzE5LDcgQEAgc3RhdGljIHNzaXpl X3QgZ3RfYm9vc3RfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIAkJcmV0dXJu IHJldDsKIAogCS8qIFZhbGlkYXRlIGFnYWluc3QgKHN0YXRpYykgaGFyZHdhcmUgbGltaXRzICov Ci0JdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7CisJdmFsID0gaW50ZWxf ZnJlcV9vcGNvZGUocnBzLCB2YWwpOwogCWlmICh2YWwgPCBycHMtPm1pbl9mcmVxIHx8IHZhbCA+ IHJwcy0+bWF4X2ZyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMzUsMTkgKzMzOSwxOSBA QCBzdGF0aWMgc3NpemVfdCB2bHZfcnBlX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rl diwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1 KGtkZXYpOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJ cmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwKLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5lZmZpY2llbnRfZnJl cSkpOworCQkJaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSk7CiB9CiAK IHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYs IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0dXJuIHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwK LQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5tYXhfZnJlcV9zb2Z0bGltaXQpKTsKKwkJ CWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpKTsKIH0KIAogc3Rh dGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCkBA IC0zNTUsMTkgKzM1OSwxNyBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJlcV9taHpfc3RvcmUo c3RydWN0IGRldmljZSAqa2RldiwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv dW50KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3Jf dG9faTkxNShrZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQl1MzIgdmFsOworCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCXNzaXplX3QgcmV0OworCXUzMiB2YWw7 CiAKIAlyZXQgPSBrc3RydG91MzIoYnVmLCAwLCAmdmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4g cmV0OwogCi0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGlt ZV9wbSk7CiAJbXV0ZXhfbG9jaygmcnBzLT5sb2NrKTsKIAotCXZhbCA9IGludGVsX2ZyZXFfb3Bj b2RlKGRldl9wcml2LCB2YWwpOworCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsK IAlpZiAodmFsIDwgcnBzLT5taW5fZnJlcSB8fAogCSAgICB2YWwgPiBycHMtPm1heF9mcmVxIHx8 CiAJICAgIHZhbCA8IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KSB7CkBAIC0zNzcsNyArMzc5LDcg QEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtk ZXYsCiAKIAlpZiAodmFsID4gcnBzLT5ycDBfZnJlcSkKIAkJRFJNX0RFQlVHKCJVc2VyIHJlcXVl c3RlZCBvdmVyY2xvY2tpbmcgdG8gJWRcbiIsCi0JCQkgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCB2YWwpKTsKKwkJCSAgaW50ZWxfZ3B1X2ZyZXEocnBzLCB2YWwpKTsKIAogCXJwcy0+bWF4X2Zy ZXFfc29mdGxpbWl0ID0gdmFsOwogCkBAIC0zODUsMTQgKzM4NywxNSBAQCBzdGF0aWMgc3NpemVf dCBndF9tYXhfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIAkJICAgICAgcnBz LT5taW5fZnJlcV9zb2Z0bGltaXQsCiAJCSAgICAgIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsK IAotCS8qIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRvIHByb2Nlc3MgdGhlIG5ldyBtYXhfZGVs YXkgYW5kCisJLyoKKwkgKiBXZSBzdGlsbCBuZWVkICpfc2V0X3JwcyB0byBwcm9jZXNzIHRoZSBu ZXcgbWF4X2RlbGF5IGFuZAogCSAqIHVwZGF0ZSB0aGUgaW50ZXJydXB0IGxpbWl0cyBhbmQgUE1J TlRSTVNLIGV2ZW4gdGhvdWdoCi0JICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdl ZC4gKi8KLQlyZXQgPSBpbnRlbF9zZXRfcnBzKGRldl9wcml2LCB2YWwpOworCSAqIGZyZXF1ZW5j eSByZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuCisJICovCisJaW50ZWxfcnBzX3NldChycHMsIHZh bCk7CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJnJwcy0+bG9jayk7Ci0JaW50ZWxfcnVudGlt ZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKIAogCXJldHVybiByZXQg PzogY291bnQ7CiB9CkBAIC00MDAsMTAgKzQwMywxMCBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhf ZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIHN0YXRpYyBzc2l6ZV90IGd0X21p bl9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAi JWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwKLQkJCQkgICAgICAgZGV2X3ByaXYt Pmd0X3BtLnJwcy5taW5fZnJlcV9zb2Z0bGltaXQpKTsKKwkJCWludGVsX2dwdV9mcmVxKHJwcywg cnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3RfbWluX2Zy ZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCkBAIC00MTEsMTkgKzQxNCwxNyBAQCBz dGF0aWMgc3NpemVfdCBndF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwK IAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKLQlzdHJ1 Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKLQl1MzIgdmFsOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJp di0+Z3QucnBzOwogCXNzaXplX3QgcmV0OworCXUzMiB2YWw7CiAKIAlyZXQgPSBrc3RydG91MzIo YnVmLCAwLCAmdmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jd2FrZXJlZiA9IGlu dGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7CiAJbXV0ZXhfbG9jaygm cnBzLT5sb2NrKTsKIAotCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKGRldl9wcml2LCB2YWwpOwor CXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKIAlpZiAodmFsIDwgcnBzLT5taW5f ZnJlcSB8fAogCSAgICB2YWwgPiBycHMtPm1heF9mcmVxIHx8CiAJICAgIHZhbCA+IHJwcy0+bWF4 X2ZyZXFfc29mdGxpbWl0KSB7CkBAIC00MzcsMTQgKzQzOCwxNSBAQCBzdGF0aWMgc3NpemVfdCBn dF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIAkJICAgICAgcnBzLT5t aW5fZnJlcV9zb2Z0bGltaXQsCiAJCSAgICAgIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsKIAot CS8qIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRvIHByb2Nlc3MgdGhlIG5ldyBtaW5fZGVsYXkg YW5kCisJLyoKKwkgKiBXZSBzdGlsbCBuZWVkICpfc2V0X3JwcyB0byBwcm9jZXNzIHRoZSBuZXcg bWluX2RlbGF5IGFuZAogCSAqIHVwZGF0ZSB0aGUgaW50ZXJydXB0IGxpbWl0cyBhbmQgUE1JTlRS TVNLIGV2ZW4gdGhvdWdoCi0JICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4g Ki8KLQlyZXQgPSBpbnRlbF9zZXRfcnBzKGRldl9wcml2LCB2YWwpOworCSAqIGZyZXF1ZW5jeSBy ZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuCisJICovCisJaW50ZWxfcnBzX3NldChycHMsIHZhbCk7 CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJnJwcy0+bG9jayk7Ci0JaW50ZWxfcnVudGltZV9w bV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKIAogCXJldHVybiByZXQgPzog Y291bnQ7CiB9CkBAIC00NjYsMTUgKzQ2OCwxNSBAQCBzdGF0aWMgREVWSUNFX0FUVFIoZ3RfUlBu X2ZyZXFfbWh6LCBTX0lSVUdPLCBndF9ycF9taHpfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3NpemVf dCBndF9ycF9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0LnJwczsKIAl1MzIgdmFsOwogCiAJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2d0X1JQMF9m cmVxX21oeikKLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+cnAwX2ZyZXEp OworCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+cnAwX2ZyZXEpOwogCWVsc2UgaWYg KGF0dHIgPT0gJmRldl9hdHRyX2d0X1JQMV9mcmVxX21oeikKLQkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+cnAxX2ZyZXEpOworCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShycHMs IHJwcy0+cnAxX2ZyZXEpOwogCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2d0X1JQbl9mcmVx X21oeikKLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpOwor CQl2YWwgPSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpOwogCWVsc2UKIAkJQlVH KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IDMwMzk5YjI0NWYwNy4uN2VhN2M1MDc5 M2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTM3LDMyICszNywxMyBAQAogI2luY2x1 ZGUgImRpc3BsYXkvaW50ZWxfZmJjLmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9zcHJpdGUu aCIKIAorI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgorCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK ICNpbmNsdWRlICJpOTE1X2lycS5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUg ImludGVsX3BtLmgiCiAjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKLSNpbmNsdWRlICIuLi8u Li8uLi9wbGF0Zm9ybS94ODYvaW50ZWxfaXBzLmgiCi0KLS8qKgotICogRE9DOiBSQzYKLSAqCi0g KiBSQzYgaXMgYSBzcGVjaWFsIHBvd2VyIHN0YWdlIHdoaWNoIGFsbG93cyB0aGUgR1BVIHRvIGVu dGVyIGFuIHZlcnkKLSAqIGxvdy12b2x0YWdlIG1vZGUgd2hlbiBpZGxlLCB1c2luZyBkb3duIHRv IDBWIHdoaWxlIGF0IHRoaXMgc3RhZ2UuICBUaGlzCi0gKiBzdGFnZSBpcyBlbnRlcmVkIGF1dG9t YXRpY2FsbHkgd2hlbiB0aGUgR1BVIGlzIGlkbGUgd2hlbiBSQzYgc3VwcG9ydCBpcwotICogZW5h YmxlZCwgYW5kIGFzIHNvb24gYXMgbmV3IHdvcmtsb2FkIGFyaXNlcyBHUFUgd2FrZXMgdXAgYXV0 b21hdGljYWxseSBhcyB3ZWxsLgotICoKLSAqIFRoZXJlIGFyZSBkaWZmZXJlbnQgUkM2IG1vZGVz IGF2YWlsYWJsZSBpbiBJbnRlbCBHUFUsIHdoaWNoIGRpZmZlcmVudGlhdGUKLSAqIGFtb25nIGVh Y2ggb3RoZXIgd2l0aCB0aGUgbGF0ZW5jeSByZXF1aXJlZCB0byBlbnRlciBhbmQgbGVhdmUgUkM2 IGFuZAotICogdm9sdGFnZSBjb25zdW1lZCBieSB0aGUgR1BVIGluIGRpZmZlcmVudCBzdGF0ZXMu Ci0gKgotICogVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3MgZGVmaW5lIHdo aWNoIHN0YXRlcyBHUFUgaXMgYWxsb3dlZAotICogdG8gZW50ZXIsIHdoaWxlIFJDNiBpcyB0aGUg bm9ybWFsIFJDNiBzdGF0ZSwgUkM2cCBpcyB0aGUgZGVlcCBSQzYsIGFuZAotICogUkM2cHAgaXMg ZGVlcGVzdCBSQzYuIFRoZWlyIHN1cHBvcnQgYnkgaGFyZHdhcmUgdmFyaWVzIGFjY29yZGluZyB0 byB0aGUKLSAqIEdQVSwgQklPUywgY2hpcHNldCBhbmQgcGxhdGZvcm0uIFJDNiBpcyB1c3VhbGx5 IHRoZSBzYWZlc3Qgb25lIGFuZCB0aGUgb25lCi0gKiB3aGljaCBicmluZ3MgdGhlIG1vc3QgcG93 ZXIgc2F2aW5nczsgZGVlcGVyIHN0YXRlcyBzYXZlIG1vcmUgcG93ZXIsIGJ1dAotICogcmVxdWly ZSBoaWdoZXIgbGF0ZW5jeSB0byBzd2l0Y2ggdG8gYW5kIHdha2UgdXAuCi0gKi8KIAogc3RhdGlj IHZvaWQgZ2VuOV9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiB7CkBAIC0yMTUsNyArMTk2LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9pcm9ubGFrZV9n ZXRfbWVtX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlicmVhazsK IAl9CiAKLQlkZXZfcHJpdi0+aXBzLnJfdCA9IGRldl9wcml2LT5tZW1fZnJlcTsKIAogCXN3aXRj aCAoY3NpcGxsICYgMHgzZmYpIHsKIAljYXNlIDB4MDBjOgpAQCAtMjQ2LDEzICsyMjYsNiBAQCBz dGF0aWMgdm9pZCBpOTE1X2lyb25sYWtlX2dldF9tZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJCWJyZWFrOwogCX0KIAotCWlmIChkZXZfcHJpdi0+ZnNiX2ZyZXEg PT0gMzIwMCkgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDA7Ci0JfSBlbHNlIGlmIChkZXZfcHJp di0+ZnNiX2ZyZXEgPiAzMjAwICYmIGRldl9wcml2LT5mc2JfZnJlcSA8PSA0ODAwKSB7Ci0JCWRl dl9wcml2LT5pcHMuY19tID0gMTsKLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDI7 Ci0JfQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4c3JfbGF0ZW5jeSBjeHNyX2xhdGVuY3lf dGFibGVbXSA9IHsKQEAgLTYzODgsMjYzMiArNjM2MSwyNjAgQEAgdm9pZCBpbnRlbF9pbml0X2lw YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfZW5hYmxlX2lwYyhk ZXZfcHJpdik7CiB9CiAKLS8qCi0gKiBMb2NrIHByb3RlY3RpbmcgSVBTIHJlbGF0ZWQgZGF0YSBz dHJ1Y3R1cmVzCi0gKi8KLURFRklORV9TUElOTE9DSyhtY2hkZXZfbG9jayk7CitzdGF0aWMgdm9p ZCBpYnhfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQoreworCS8qCisJICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9pbnQsIHdlIG5lZWQgdG8g ZGlzYWJsZSBjbG9jaworCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBv ciBpdCB3aWxsIGZhaWwgdG8KKwkgKiBzdGFydCB1cCB3aGVuIG5vIHBvcnRzIGFyZSBhY3RpdmUu CisJICovCisJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFKTsKK30KIAotYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggdmFsKQorc3RhdGljIHZvaWQgZzR4X2Rpc2FibGVfdHJp Y2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5jb3JlOwotCXUxNiByZ3Zzd2N0bDsKKwll bnVtIHBpcGUgcGlwZTsKIAotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKwlm b3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7CisJCUk5MTVfV1JJVEUoRFNQQ05UUihwaXBl KSwKKwkJCSAgIEk5MTVfUkVBRChEU1BDTlRSKHBpcGUpKSB8CisJCQkgICBESVNQUExBTkVfVFJJ Q0tMRV9GRUVEX0RJU0FCTEUpOwogCi0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVu Y29yZSwgTUVNU1dDVEwpOwotCWlmIChyZ3Zzd2N0bCAmIE1FTUNUTF9DTURfU1RTKSB7Ci0JCURS TV9ERUJVRygiZ3B1IGJ1c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOwotCQlyZXR1cm4gZmFs c2U7IC8qIHN0aWxsIGJ1c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KKwkJSTkxNV9XUklURShE U1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOworCQlQT1NUSU5HX1JFQUQo RFNQU1VSRihwaXBlKSk7CiAJfQotCi0Jcmd2c3djdGwgPSAoTUVNQ1RMX0NNRF9DSEZSRVEgPDwg TUVNQ1RMX0NNRF9TSElGVCkgfAotCQkodmFsIDw8IE1FTUNUTF9GUkVRX1NISUZUKSB8IE1FTUNU TF9TRkNBVk07Ci0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3dj dGwpOwotCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKLQot CXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwotCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29y ZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKLQotCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9p ZCBpcm9ubGFrZV9lbmFibGVfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CitzdGF0aWMgdm9pZCBpbGtfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJp di0+dW5jb3JlOwotCXUzMiByZ3Ztb2RlY3RsOwotCXU4IGZtYXgsIGZtaW4sIGZzdGFydCwgdnN0 YXJ0OwotCi0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCi0Jcmd2bW9kZWN0bCA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNTU9ERUNUTCk7Ci0KLQkvKiBFbmFibGUgdGVtcCBy ZXBvcnRpbmcgKi8KLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIFBNTUlTQywgSTkxNV9S RUFEKFBNTUlTQykgfCBNQ1BQQ0VfRU4pOwotCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwg VFNDMSwgSTkxNV9SRUFEKFRTQzEpIHwgVFNFKTsKLQotCS8qIDEwMG1zIFJDIGV2YWx1YXRpb24g aW50ZXJ2YWxzICovCi0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNVUEVJLCAxMDAwMDAp OwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDRE5FSSwgMTAwMDAwKTsKLQotCS8qIFNl dCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyByZXNwZWN0aXZlbHkgKi8KLQlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNQVhBVkcsIDkwMDAwKTsKLQlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBSQ0JNSU5BVkcsIDgwMDAwKTsKLQotCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIE1FTUlIWVNULCAxKTsKLQotCS8qIFNldCB1cCBtaW4sIG1heCwgYW5kIGN1ciBm b3IgaW50ZXJydXB0IGhhbmRsaW5nICovCi0JZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9G TUFYX01BU0spID4+IE1FTU1PREVfRk1BWF9TSElGVDsKLQlmbWluID0gKHJndm1vZGVjdGwgJiBN RU1NT0RFX0ZNSU5fTUFTSyk7Ci0JZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZTVEFS VF9NQVNLKSA+PgotCQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKLQotCXZzdGFydCA9IChpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0KSkgJgotCQkgIFBYVkZSRVFfUFhfTUFT SykgPj4gUFhWRlJFUV9QWF9TSElGVDsKLQotCWRldl9wcml2LT5pcHMuZm1heCA9IGZtYXg7IC8q IElQUyBjYWxsYmFjayB3aWxsIGluY3JlYXNlIHRoaXMgKi8KLQlkZXZfcHJpdi0+aXBzLmZzdGFy dCA9IGZzdGFydDsKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtfVlJIVU5JVF9DTE9DS19HQVRFX0RJ U0FCTEU7CiAKLQlkZXZfcHJpdi0+aXBzLm1heF9kZWxheSA9IGZzdGFydDsKLQlkZXZfcHJpdi0+ aXBzLm1pbl9kZWxheSA9IGZtaW47Ci0JZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgPSBmc3RhcnQ7 CisJLyoKKwkgKiBSZXF1aXJlZCBmb3IgRkJDCisJICogV2FGYmNEaXNhYmxlRHBmY0Nsb2NrR2F0 aW5nOmlsaworCSAqLworCWRzcGNsa19nYXRlIHw9IElMS19EUEZDUlVOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFIHwKKwkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CisJCSAgIElM S19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKIAotCURSTV9ERUJVR19EUklWRVIoImZtYXg6 ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKLQkJCSBmbWF4LCBmbWluLCBmc3RhcnQpOwor CUk5MTVfV1JJVEUoUENIXzNEQ0dESVMwLAorCQkgICBNQVJJVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUgfAorCQkgICBTVlNNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCUk5MTVfV1JJVEUoUENI XzNEQ0dESVMxLAorCQkgICBWRk1VTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CiAKLQlpbnRlbF91 bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgTUVNSU5UUkVOLAotCQkJICAgTUVNSU5UX0NYX1NV UFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOworCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSBz cGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUgc2V0IGluCisJICogb3JkZXIgdG8gZW5h YmxlIG1lbW9yeSBzZWxmLXJlZnJlc2gKKwkgKiBUaGUgYml0IDIyLzIxIG9mIDB4NDIwMDQKKwkg KiBUaGUgYml0IDUgb2YgMHg0MjAyMAorCSAqIFRoZSBiaXQgMTUgb2YgMHg0NTAwMAorCSAqLwor CUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCSAgIChJOTE1X1JFQUQoSUxLX0RJ U1BMQVlfQ0hJQ0tFTjIpIHwKKwkJICAgIElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxM KSk7CisJZHNwY2xrX2dhdGUgfD0gSUxLX0RQQVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKKwlJ OTE1X1dSSVRFKERJU1BfQVJCX0NUTCwKKwkJICAgKEk5MTVfUkVBRChESVNQX0FSQl9DVEwpIHwK KwkJICAgIERJU1BfRkJDX1dNX0RJUykpOwogCiAJLyoKLQkgKiBJbnRlcnJ1cHRzIHdpbGwgYmUg ZW5hYmxlZCBpbiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwKKwkgKiBCYXNlZCBvbiB0aGUgZG9j dW1lbnQgZnJvbSBoYXJkd2FyZSBndXlzIHRoZSBmb2xsb3dpbmcgYml0cworCSAqIHNob3VsZCBi ZSBzZXQgdW5jb25kaXRpb25hbGx5IGluIG9yZGVyIHRvIGVuYWJsZSBGQkMuCisJICogVGhlIGJp dCAyMiBvZiAweDQyMDAwCisJICogVGhlIGJpdCAyMiBvZiAweDQyMDA0CisJICogVGhlIGJpdCA3 LDgsOSBvZiAweDQyMDIwLgogCSAqLworCWlmIChJU19JUk9OTEFLRV9NKGRldl9wcml2KSkgewor CQkvKiBXYUZiY0FzeW5jaEZsaXBEaXNhYmxlRmJjUXVldWU6aWxrICovCisJCUk5MTVfV1JJVEUo SUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tF TjEpIHwKKwkJCSAgIElMS19GQkNRX0RJUyk7CisJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJ Q0tFTjIsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJCSAgIElM S19EUEFSQl9HQVRFKTsKKwl9CiAKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBWSURTVEFS VCwgdnN0YXJ0KTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgVklEU1RBUlQp OworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKIAotCXJndm1v ZGVjdGwgfD0gTUVNTU9ERV9TV01PREVfRU47Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwg TUVNTU9ERUNUTCwgcmd2bW9kZWN0bCk7CisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VO MiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElMS19FTFBJ Tl80MDlfU0VMRUNUKTsKKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMiwKKwkJICAgXzNEX0NISUNL RU4yX1dNX1JFQURfUElQRUxJTkVEIDw8IDE2IHwKKwkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURf UElQRUxJTkVEKTsKIAotCWlmICh3YWl0X2Zvcl9hdG9taWMoKGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgTUVNU1dDVEwpICYKLQkJCSAgICAgTUVNQ1RMX0NNRF9TVFMpID09IDAsIDEwKSkKLQkJ RFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdlIHBlcmYgbW9kZVxuIik7Ci0JbWRlbGF5 KDEpOworCS8qIFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxpbmVkRmx1c2g6aWxrICovCisJSTkx NV9XUklURShDQUNIRV9NT0RFXzAsCisJCSAgIF9NQVNLRURfQklUX0VOQUJMRShDTTBfUElQRUxJ TkVEX1JFTkRFUl9GTFVTSF9ESVNBQkxFKSk7CiAKLQlpcm9ubGFrZV9zZXRfZHJwcyhkZXZfcHJp diwgZnN0YXJ0KTsKKwkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDpp bGsgKi8KKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElTQUJMRShSQ19P UF9GTFVTSF9FTkFCTEUpKTsKIAotCWRldl9wcml2LT5pcHMubGFzdF9jb3VudDEgPQotCQlpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKSArCi0JCWludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgRERSRUMpICsKLQkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7Ci0JZGV2X3By aXYtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQlkZXZfcHJp di0+aXBzLmxhc3RfY291bnQyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7Ci0J ZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0X3Jhd19ucygpOworCWc0eF9kaXNh YmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7CiAKLQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9s b2NrKTsKKwlpYnhfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMgdm9p ZCBpcm9ubGFrZV9kaXNhYmxlX2RycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCitz dGF0aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNv cmU7Ci0JdTE2IHJndnN3Y3RsOwotCi0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCi0J cmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwotCi0JLyog QWNrIGludGVycnVwdHMsIGRpc2FibGUgRUZDIGludGVycnVwdCAqLwotCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsCi0JCQkgICBNRU1JTlRSRU4sCi0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIE1FTUlOVFJFTikgJgotCQkJICAgfk1FTUlOVF9FVkFMX0NIR19FTik7Ci0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNUUywgTUVNSU5UX0VWQUxfQ0hHKTsKLQlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgREVJRVIsCi0JCQkgICBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQpOwotCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIERFSUlSLCBERV9QQ1VfRVZFTlQpOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsCi0JCQkgICBERUlNUiwKLQkJCSAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgREVJTVIp IHwgREVfUENVX0VWRU5UKTsKLQotCS8qIEdvIGJhY2sgdG8gdGhlIHN0YXJ0aW5nIGZyZXF1ZW5j eSAqLwotCWlyb25sYWtlX3NldF9kcnBzKGk5MTUsIGk5MTUtPmlwcy5mc3RhcnQpOwotCW1kZWxh eSgxKTsKLQlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsKLQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwotCW1kZWxheSgxKTsKKwlpbnQgcGlwZTsKKwl1 MzIgdmFsOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJLyoKKwkgKiBPbiBJ YmV4IFBlYWsgYW5kIENvdWdhciBQb2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCisJICog Z2F0aW5nIGZvciB0aGUgcGFuZWwgcG93ZXIgc2VxdWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bwor CSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KKwkgKi8KKwlJOTE1X1dSSVRF KFNPVVRIX0RTUENMS19HQVRFX0QsIFBDSF9EUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAor CQkgICBQQ0hfRFBMVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBQQ0hfQ1BVTklUX0NM T0NLX0dBVEVfRElTQUJMRSk7CisJSTkxNV9XUklURShTT1VUSF9DSElDS0VOMiwgSTkxNV9SRUFE KFNPVVRIX0NISUNLRU4yKSB8CisJCSAgIERQTFNfRURQX1BQU19GSVhfRElTKTsKKwkvKiBUaGUg YmVsb3cgZml4ZXMgdGhlIHdlaXJkIGRpc3BsYXkgY29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNo aWZ0ZWQKKwkgKiBkb3dud2FyZCwgb24gKG9ubHkpIExWRFMgb2Ygc29tZSBIUCBsYXB0b3BzIHdp dGggSVZZLgorCSAqLworCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKKwkJdmFsID0g STkxNV9SRUFEKFRSQU5TX0NISUNLRU4yKHBpcGUpKTsKKwkJdmFsIHw9IFRSQU5TX0NISUNLRU4y X1RJTUlOR19PVkVSUklERTsKKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlf UkVWRVJTRUQ7CisJCWlmIChkZXZfcHJpdi0+dmJ0LmZkaV9yeF9wb2xhcml0eV9pbnZlcnRlZCkK KwkJCXZhbCB8PSBUUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7CisJCXZhbCAm PSB+VFJBTlNfQ0hJQ0tFTjJfRlJBTUVfU1RBUlRfREVMQVlfTUFTSzsKKwkJdmFsICY9IH5UUkFO U19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfQ09VTlRFUjsKKwkJdmFsICY9IH5UUkFOU19D SElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfTU9ERVNXSVRDSDsKKwkJSTkxNV9XUklURShUUkFO U19DSElDS0VOMihwaXBlKSwgdmFsKTsKKwl9CisJLyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUg Ki8KKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7CisJCUk5MTVfV1JJVEUoVFJBTlNf Q0hJQ0tFTjEocGlwZSksCisJCQkgICBUUkFOU19DSElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUp OworCX0KIH0KIAotLyogVGhlcmUncyBhIGZ1bm55IGh3IGlzc3VlIHdoZXJlIHRoZSBodyByZXR1 cm5zIGFsbCAwIHdoZW4gcmVhZGluZyBmcm9tCi0gKiBHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMu IEhlbmNlIHdlIGFsd2F5cyBuZWVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdmFsdWUKLSAqIG91 cnNlbHZlcywgaW5zdGVhZCBvZiBkb2luZyBhIHJtdyBjeWNsZSAod2hpY2ggbWlnaHQgcmVzdWx0 IGluIHVzIGNsZWFyaW5nCi0gKiBhbGwgbGltaXRzIGFuZCB0aGUgZ3B1IHN0dWNrIGF0IHdoYXRl dmVyIGZyZXF1ZW5jeSBpdCBpcyBhdCBhdG0pLgotICovCi1zdGF0aWMgdTMyIGludGVsX3Jwc19s aW1pdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCitzdGF0aWMg dm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0J dTMyIGxpbWl0czsKLQotCS8qIE9ubHkgc2V0IHRoZSBkb3duIGxpbWl0IHdoZW4gd2UndmUgcmVh Y2hlZCB0aGUgbG93ZXN0IGxldmVsIHRvIGF2b2lkCi0JICogZ2V0dGluZyBtb3JlIGludGVycnVw dHMsIG90aGVyd2lzZSBsZWF2ZSB0aGlzIGNsZWFyLiBUaGlzIHByZXZlbnRzIGEKLQkgKiByYWNl IGluIHRoZSBodyB3aGVuIGNvbWluZyBvdXQgb2YgcmM2OiBUaGVyZSdzIGEgdGlueSB3aW5kb3cg d2hlcmUKLQkgKiB0aGUgaHcgcnVucyBhdCB0aGUgbWluaW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0 aW5nIHRoZSBkZXNpcmVkCi0JICogZnJlcXVlbmN5LCBpZiB0aGUgZG93biB0aHJlc2hvbGQgZXhw aXJlcyBpbiB0aGF0IHdpbmRvdyB3ZSB3aWxsIG5vdAotCSAqIHJlY2VpdmUgYSBkb3duIGludGVy cnVwdC4gKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7Ci0JCWxpbWl0cyA9IChy cHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgPDwgMjM7Ci0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJl cV9zb2Z0bGltaXQpCi0JCQlsaW1pdHMgfD0gKHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KSA8PCAx NDsKLQl9IGVsc2UgewotCQlsaW1pdHMgPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNDsK LQkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJCWxpbWl0cyB8PSBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsKLQl9CisJdTMyIHRtcDsKIAotCXJldHVybiBsaW1p dHM7CisJdG1wID0gSTkxNV9SRUFEKE1DSF9TU0tQRCk7CisJaWYgKCh0bXAgJiBNQ0hfU1NLUERf V00wX01BU0spICE9IE1DSF9TU0tQRF9XTTBfVkFMKQorCQlEUk1fREVCVUdfS01TKCJXcm9uZyBN Q0hfU1NLUEQgdmFsdWU6IDB4JTA4eCBUaGlzIGNhbiBjYXVzZSB1bmRlcnJ1bnMuXG4iLAorCQkJ ICAgICAgdG1wKTsKIH0KIAotc3RhdGljIHZvaWQgcnBzX3NldF9wb3dlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBuZXdfcG93ZXIpCitzdGF0aWMgdm9pZCBnZW42X2lu aXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgdGhyZXNo b2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAwOyAvKiBpbiAlICovCi0JdTMyIGVpX3VwID0g MCwgZWlfZG93biA9IDA7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBvd2VyLm11dGV4 KTsKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtfVlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAK LQlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIubW9kZSkKLQkJcmV0dXJuOworCUk5MTVfV1JJ VEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKIAotCS8qIE5vdGUgdGhlIHVuaXRz IGhlcmUgYXJlIG5vdCBleGFjdGx5IDF1cywgYnV0IDEyODBucy4gKi8KLQlzd2l0Y2ggKG5ld19w b3dlcikgewotCWNhc2UgTE9XX1BPV0VSOgotCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5NSUg YnVzeSBvdmVyIDE2bXMgKi8KLQkJZWlfdXAgPSAxNjAwMDsKLQkJdGhyZXNob2xkX3VwID0gOTU7 CisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19E SVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKIAotCQkvKiBE b3duY2xvY2sgaWYgbGVzcyB0aGFuIDg1JSBidXN5IG92ZXIgMzJtcyAqLwotCQllaV9kb3duID0g MzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gODU7Ci0JCWJyZWFrOworCS8qIFdhRGlzYWJsZUhp WlBsYW5lc1doZW5NU0FBRW5hYmxlZDpzbmIgKi8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOLAor CQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNB QV80WF9TTkIpKTsKIAotCWNhc2UgQkVUV0VFTjoKLQkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4g OTAlIGJ1c3kgb3ZlciAxM21zICovCi0JCWVpX3VwID0gMTMwMDA7Ci0JCXRocmVzaG9sZF91cCA9 IDkwOworCS8qIFdhRGlzYWJsZV9SZW5kZXJDYWNoZV9PcGVyYXRpb25hbEZsdXNoOnNuYiAqLwor CUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNI X0VOQUJMRSkpOwogCi0JCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNzUlIGJ1c3kgb3ZlciAz Mm1zICovCi0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJdGhyZXNob2xkX2Rvd24gPSA3NTsKLQkJYnJl YWs7CisJLyoKKwkgKiBCU3BlYyByZWNvb21lbmRzIDh4NCB3aGVuIE1TQUEgaXMgdXNlZCwKKwkg KiBob3dldmVyIGluIHByYWN0aWNlIDE2eDQgc2VlbXMgZmFzdGVzdC4KKwkgKgorCSAqIE5vdGUg dGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVuZCBvbiB0aGUgV0laIGhhc2hpbmcKKwkgKiBk aXNhYmxlIGJpdCwgd2hpY2ggd2UgZG9uJ3QgdG91Y2ggaGVyZSwgYnV0IGl0J3MgZ29vZAorCSAq IHRvIGtlZXAgaW4gbWluZCAoc2VlIDNEU1RBVEVfUFMgYW5kIDNEU1RBVEVfV00pLgorCSAqLwor CUk5MTVfV1JJVEUoR0VONl9HVF9NT0RFLAorCQkgICBfTUFTS0VEX0ZJRUxEKEdFTjZfV0laX0hB U0hJTkdfTUFTSywgR0VONl9XSVpfSEFTSElOR18xNng0KSk7CiAKLQljYXNlIEhJR0hfUE9XRVI6 Ci0JCS8qIFVwY2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLwotCQllaV91 cCA9IDEwMDAwOwotCQl0aHJlc2hvbGRfdXAgPSA4NTsKKwlJOTE1X1dSSVRFKENBQ0hFX01PREVf MCwKKwkJICAgX01BU0tFRF9CSVRfRElTQUJMRShDTTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NO QikpOwogCi0JCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICov Ci0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJdGhyZXNob2xkX2Rvd24gPSA2MDsKLQkJYnJlYWs7Ci0J fQorCUk5MTVfV1JJVEUoR0VONl9VQ0dDVEwxLAorCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwx KSB8CisJCSAgIEdFTjZfQkxCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBHRU42X0NT VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCi0JLyogV2hlbiBieXQgY2FuIHN1cnZpdmUgd2l0 aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMKLQkgKiBzdyBmcmVxIGFkanVzdG1lbnRzLCB0 aGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBsaWZ0ZWQuCisJLyogQWNjb3JkaW5nIHRvIHRoZSBCU3Bl YyB2b2wxZywgYml0IDEyIChSQ1BCVU5JVCkgY2xvY2sKKwkgKiBnYXRpbmcgZGlzYWJsZSBtdXN0 IGJlIHNldC4gIEZhaWx1cmUgdG8gc2V0IGl0IHJlc3VsdHMgaW4KKwkgKiBmbGlja2VyaW5nIHBp eGVscyBkdWUgdG8gWiB3cml0ZSBvcmRlcmluZyBmYWlsdXJlcyBhZnRlcgorCSAqIHNvbWUgYW1v dW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1lc2EgImZpcmUiIGRlbW8sIGFuZCBVbmlnaW5lCisJICog U2FuY3R1YXJ5IGFuZCBUcm9waWNzLCBhbmQgYXBwYXJlbnRseSBhbnl0aGluZyBlbHNlIHdpdGgK KwkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVsIGRpc2NhcmQuCisJICoKKwkgKiBBY2NvcmRpbmcgdG8g dGhlIHNwZWMsIGJpdCAxMSAoUkNDVU5JVCkgbXVzdCBhbHNvIGJlIHNldCwKKwkgKiBidXQgd2Ug ZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0Y2FzZXMgdG8gZmluZCBpdCBvdXQuCisJICoKKwkgKiBX YURpc2FibGVSQ0NVbml0Q2xvY2tHYXRpbmc6c25iCisJICogV2FEaXNhYmxlUkNQQlVuaXRDbG9j a0dhdGluZzpzbmIKIAkgKi8KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCWdvdG8g c2tpcF9od193cml0ZTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9VUF9FSSwKLQkJICAgR1RfSU5U RVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwgZWlfdXApKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBf VEhSRVNIT0xELAotCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LAotCQkJCSAgICAg ICBlaV91cCAqIHRocmVzaG9sZF91cCAvIDEwMCkpOwotCi0JSTkxNV9XUklURShHRU42X1JQX0RP V05fRUksCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsIGVpX2Rvd24pKTsKLQlJ OTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01f VVMoZGV2X3ByaXYsCi0JCQkJICAgICAgIGVpX2Rvd24gKiB0aHJlc2hvbGRfZG93biAvIDEwMCkp OwotCi0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsCi0JCSAgIChJTlRFTF9HRU4oZGV2X3By aXYpID4gOSA/IDAgOiBHRU42X1JQX01FRElBX1RVUkJPKSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFf SFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQX01FRElBX0lTX0dGWCB8Ci0JCSAgIEdFTjZf UlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9CVVNZX0FWRyB8Ci0JCSAgIEdFTjZfUlBfRE9X Tl9JRExFX0FWRyk7Ci0KLXNraXBfaHdfd3JpdGU6Ci0JcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bv d2VyOwotCXJwcy0+cG93ZXIudXBfdGhyZXNob2xkID0gdGhyZXNob2xkX3VwOwotCXJwcy0+cG93 ZXIuZG93bl90aHJlc2hvbGQgPSB0aHJlc2hvbGRfZG93bjsKLX0KLQotc3RhdGljIHZvaWQgZ2Vu Nl9zZXRfcnBzX3RocmVzaG9sZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1 OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7 Ci0JaW50IG5ld19wb3dlcjsKLQotCW5ld19wb3dlciA9IHJwcy0+cG93ZXIubW9kZTsKLQlzd2l0 Y2ggKHJwcy0+cG93ZXIubW9kZSkgewotCWNhc2UgTE9XX1BPV0VSOgotCQlpZiAodmFsID4gcnBz LT5lZmZpY2llbnRfZnJlcSArIDEgJiYKLQkJICAgIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQlu ZXdfcG93ZXIgPSBCRVRXRUVOOwotCQlicmVhazsKKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMiwK KwkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBHRU42X1JDQ1VO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAotCWNhc2UgQkVUV0VFTjoKLQkJaWYgKHZhbCA8PSBy cHMtPmVmZmljaWVudF9mcmVxICYmCi0JCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQotCQkJbmV3 X3Bvd2VyID0gTE9XX1BPV0VSOwotCQllbHNlIGlmICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgot CQkJIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOwotCQli cmVhazsKKwkvKiBXYVN0cmlwc0ZhbnNEaXNhYmxlRmFzdENsaXBQZXJmb3JtYW5jZUZpeDpzbmIg Ki8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8z RF9DSElDS0VOM19TRl9ESVNBQkxFX0ZBU1RDTElQX0NVTEwpKTsKIAotCWNhc2UgSElHSF9QT1dF UjoKLQkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVxICsgcnBzLT5ycDBfZnJlcSkgPj4gMSAmJgot CQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKLQkJCW5ld19wb3dlciA9IEJFVFdFRU47Ci0JCWJy ZWFrOwotCX0KLQkvKiBNYXgvbWluIGJpbnMgYXJlIHNwZWNpYWwgKi8KLQlpZiAodmFsIDw9IHJw cy0+bWluX2ZyZXFfc29mdGxpbWl0KQotCQluZXdfcG93ZXIgPSBMT1dfUE9XRVI7Ci0JaWYgKHZh bCA+PSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkKLQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsK KwkvKgorCSAqIEJzcGVjIHNheXM6CisJICogIlRoaXMgYml0IG11c3QgYmUgc2V0IGlmIDNEU1RB VEVfQ0xJUCBjbGlwIG1vZGUgaXMgc2V0IHRvIG5vcm1hbCBhbmQKKwkgKiAzRFNUQVRFX1NGIG51 bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBpcyBtb3JlIHRoYW4gMTYuIgorCSAqLworCUk5 MTVfV1JJVEUoXzNEX0NISUNLRU4zLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNL RU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FUVFJfRkVUQ0gpKTsKIAotCW11dGV4X2xvY2soJnJw cy0+cG93ZXIubXV0ZXgpOwotCWlmIChycHMtPnBvd2VyLmludGVyYWN0aXZlKQotCQluZXdfcG93 ZXIgPSBISUdIX1BPV0VSOwotCXJwc19zZXRfcG93ZXIoZGV2X3ByaXYsIG5ld19wb3dlcik7Ci0J bXV0ZXhfdW5sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKLX0KKwkvKgorCSAqIEFjY29yZGluZyB0 byB0aGUgc3BlYyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlCisJICogc2V0IGluIG9yZGVy IHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNoIGFuZCBmYmM6CisJICogVGhlIGJpdDIxIGFu ZCBiaXQyMiBvZiAweDQyMDAwCisJICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0CisJ ICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0MjAyMAorCSAqIFRoZSBiaXQxNCBvZiAweDcwMTgw CisJICogVGhlIGJpdDE0IG9mIDB4NzExODAKKwkgKgorCSAqIFdhRmJjQXN5bmNoRmxpcERpc2Fi bGVGYmNRdWV1ZTpzbmIKKwkgKi8KKwlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAor CQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKKwkJICAgSUxLX0ZCQ1FfRElT IHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKKwlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4y LAorCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJICAgSUxLX0RQQVJC X0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0Qs CisJCSAgIEk5MTVfUkVBRChJTEtfRFNQQ0xLX0dBVEVfRCkgfAorCQkgICBJTEtfRFBBUkJVTklU X0NMT0NLX0dBVEVfRU5BQkxFICB8CisJCSAgIElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJM RSk7CiAKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmk5MTUtPmd0X3BtLnJwczsKKwlnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYp OwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCi0JCXJldHVybjsKKwljcHRfaW5pdF9jbG9j a19nYXRpbmcoZGV2X3ByaXYpOwogCi0JbXV0ZXhfbG9jaygmcnBzLT5wb3dlci5tdXRleCk7Ci0J aWYgKGludGVyYWN0aXZlKSB7Ci0JCWlmICghcnBzLT5wb3dlci5pbnRlcmFjdGl2ZSsrICYmIFJF QURfT05DRShpOTE1LT5ndC5hd2FrZSkpCi0JCQlycHNfc2V0X3Bvd2VyKGk5MTUsIEhJR0hfUE9X RVIpOwotCX0gZWxzZSB7Ci0JCUdFTV9CVUdfT04oIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUpOwot CQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Ci0JfQotCW11dGV4X3VubG9jaygmcnBzLT5wb3dl ci5tdXRleCk7CisJZ2VuNl9jaGVja19tY2hfc2V0dXAoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMg dTMyIGdlbjZfcnBzX3BtX21hc2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1 OCB2YWwpCitzdGF0aWMgdm9pZCBnZW43X3NldHVwX2ZpeGVkX2Z1bmNfc2NoZWR1bGVyKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgbWFzayA9IDA7Ci0KLQkvKiBXZSB1c2UgVVBf RUlfRVhQSVJFRCBpbnRlcnVwdHMgZm9yIGJvdGggdXAvZG93biBpbiBtYW51YWwgbW9kZSAqLwot CWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJbWFzayB8PSBHRU42X1BNX1JQ X1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwgR0VONl9QTV9SUF9E T1dOX1RJTUVPVVQ7Ci0JaWYgKHZhbCA8IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQotCQltYXNr IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCB8IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwor CXUzMiByZWcgPSBJOTE1X1JFQUQoR0VON19GRl9USFJFQURfTU9ERSk7CiAKLQltYXNrICY9IGRl dl9wcml2LT5wbV9ycHNfZXZlbnRzOworCS8qCisJICogV2FWU1RocmVhZERpc3BhdGNoT3ZlcnJp ZGU6aXZiLHZsdgorCSAqCisJICogVGhpcyBhY3R1YWxseSBvdmVycmlkZXMgdGhlIGRpc3BhdGNo CisJICogbW9kZSBmb3IgYWxsIHRocmVhZCB0eXBlcy4KKwkgKi8KKwlyZWcgJj0gfkdFTjdfRkZf U0NIRURfTUFTSzsKKwlyZWcgfD0gR0VON19GRl9UU19TQ0hFRF9IVzsKKwlyZWcgfD0gR0VON19G Rl9WU19TQ0hFRF9IVzsKKwlyZWcgfD0gR0VON19GRl9EU19TQ0hFRF9IVzsKIAotCXJldHVybiBn ZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2LCB+bWFzayk7CisJSTkxNV9XUklURShH RU43X0ZGX1RIUkVBRF9NT0RFLCByZWcpOwogfQogCi0vKiBnZW42X3NldF9ycHMgaXMgY2FsbGVk IHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91bGQgYWxzbyBiZQotICog Y2FsbGVkIHdoZW4gdGhlIHJhbmdlIChtaW5fZGVsYXkgYW5kIG1heF9kZWxheSkgaXMgbW9kaWZp ZWQgc28gdGhhdCB3ZSBjYW4KLSAqIHVwZGF0ZSB0aGUgR0VONl9SUF9JTlRFUlJVUFRfTElNSVRT IHJlZ2lzdGVyIGFjY29yZGluZ2x5LiAqLwotc3RhdGljIGludCBnZW42X3NldF9ycHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKiBtaW4vbWF4IGRlbGF5IG1heSBz dGlsbCBoYXZlIGJlZW4gbW9kaWZpZWQgc28gYmUgc3VyZSB0bwotCSAqIHdyaXRlIHRoZSBsaW1p dHMgdmFsdWUuCi0JICovCi0JaWYgKHZhbCAhPSBycHMtPmN1cl9mcmVxKSB7Ci0JCWdlbjZfc2V0 X3Jwc190aHJlc2hvbGRzKGRldl9wcml2LCB2YWwpOwotCi0JCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDkpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0JCQkJICAgR0VOOV9GUkVR VUVOQ1kodmFsKSk7Ci0JCWVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FE V0VMTChkZXZfcHJpdikpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0JCQkJICAgSFNX X0ZSRVFVRU5DWSh2YWwpKTsKLQkJZWxzZQotCQkJSTkxNV9XUklURShHRU42X1JQTlNXUkVRLAot CQkJCSAgIEdFTjZfRlJFUVVFTkNZKHZhbCkgfAotCQkJCSAgIEdFTjZfT0ZGU0VUKDApIHwKLQkJ CQkgICBHRU42X0FHR1JFU1NJVkVfVFVSQk8pOwotCX0KLQotCS8qIE1ha2Ugc3VyZSB3ZSBjb250 aW51ZSB0byBnZXQgaW50ZXJydXB0cwotCSAqIHVudGlsIHdlIGhpdCB0aGUgbWluaW11bSBvciBt YXhpbXVtIGZyZXF1ZW5jaWVzLgotCSAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9JTlRFUlJVUFRf TElNSVRTLCBpbnRlbF9ycHNfbGltaXRzKGRldl9wcml2LCB2YWwpKTsKLQlJOTE1X1dSSVRFKEdF TjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKLQotCXJwcy0+ Y3VyX2ZyZXEgPSB2YWw7Ci0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlKGludGVsX2dwdV9m cmVxKGRldl9wcml2LCB2YWwpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZhbGxl eXZpZXdfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCkK LXsKLQlpbnQgZXJyOwotCi0JaWYgKFdBUk5fT05DRShJU19DSEVSUllWSUVXKGRldl9wcml2KSAm JiAodmFsICYgMSksCi0JCSAgICAgICJPZGQgR1BVIGZyZXEgdmFsdWVcbiIpKQotCQl2YWwgJj0g fjE7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9w cml2LCB2YWwpKTsKLQotCWlmICh2YWwgIT0gZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkg ewotCQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKLQkJZXJyID0gdmx2X3B1bml0X3dyaXRlKGRl dl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOwotCQl2bHZfcHVuaXRfcHV0KGRl dl9wcml2KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZ2VuNl9zZXRfcnBzX3Ro cmVzaG9sZHMoZGV2X3ByaXYsIHZhbCk7Ci0JfQotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJf ZnJlcSA9IHZhbDsKLQl0cmFjZV9pbnRlbF9ncHVfZnJlcV9jaGFuZ2UoaW50ZWxfZ3B1X2ZyZXEo ZGV2X3ByaXYsIHZhbCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHZsdl9zZXRfcnBzX2lkbGU6 IFNldCB0aGUgZnJlcXVlbmN5IHRvIGlkbGUsIGlmIEdmeCBjbG9ja3MgYXJlIGRvd24KLSAqCi0g KiAqIElmIEdmeCBpcyBJZGxlLCB0aGVuCi0gKiAxLiBGb3JjZXdha2UgTWVkaWEgd2VsbC4KLSAq IDIuIFJlcXVlc3QgaWRsZSBmcmVxLgotICogMy4gUmVsZWFzZSBGb3JjZXdha2Ugb2YgTWVkaWEg d2VsbC4KLSovCi1zdGF0aWMgdm9pZCB2bHZfc2V0X3Jwc19pZGxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0X3BtLnJwczsKLQl1MzIgdmFsID0gcnBzLT5pZGxlX2ZyZXE7Ci0JaW50IGVycjsKLQotCWlm IChycHMtPmN1cl9mcmVxIDw9IHZhbCkKLQkJcmV0dXJuOwotCi0JLyogVGhlIHB1bml0IGRlbGF5 cyB0aGUgd3JpdGUgb2YgdGhlIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSB1bnRpbCBpdAotCSAqIGRl dGVybWluZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBkb24ndCB3 YW50IHRvCi0JICogd2FzdGUgcG93ZXIgY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBpZiB0aGUgR1BV IGlzIHNsZWVwaW5nIChyYzYpLgotCSAqIEhvd2V2ZXIsIHRoZSBHUFUgYW5kIGRyaXZlciBpcyBu b3cgaWRsZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gZGVsYXkKLQkgKiBzd2l0Y2hpbmcgdG8gbWlu aW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8KLQkgKiBu b3QgZXhwZWN0IHRvIGJlIHdva2VuIGluIHRoZSBuZWFyIGZ1dHVyZSBhbmQgc28gbXVzdCBmbHVz aCB0aGUKLQkgKiBjaGFuZ2UgYnkgd2FraW5nIHRoZSBkZXZpY2UuCi0JICoKLQkgKiBXZSBjaG9v c2UgdG8gdGFrZSB0aGUgbWVkaWEgcG93ZXJ3ZWxsIChlaXRoZXIgd291bGQgZG8gdG8gdHJpY2sg dGhlCi0JICogcHVuaXQgaW50byBjb21taXR0aW5nIHRoZSB2b2x0YWdlIGNoYW5nZSkgYXMgdGhh dCB0YWtlcyBhIGxvdCBsZXNzCi0JICogcG93ZXIgdGhhbiB0aGUgcmVuZGVyIHBvd2Vyd2VsbC4K LQkgKi8KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9S Q0VXQUtFX01FRElBKTsKLQllcnIgPSB2YWxsZXl2aWV3X3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7 Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FL RV9NRURJQSk7Ci0KLQlpZiAoZXJyKQotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZXQgUlBTIGZv ciBpZGxlXG4iKTsKLX0KLQotdm9pZCBnZW42X3Jwc19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 X3BtLnJwczsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYgKHJwcy0+ZW5hYmxlZCkg ewotCQl1OCBmcmVxOwotCi0JCWlmIChkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyAmIEdFTjZfUE1f UlBfVVBfRUlfRVhQSVJFRCkKLQkJCWdlbjZfcnBzX3Jlc2V0X2VpKGRldl9wcml2KTsKLQkJSTkx NV9XUklURShHRU42X1BNSU5UUk1TSywKLQkJCSAgIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYs IHJwcy0+Y3VyX2ZyZXEpKTsKLQotCQlnZW42X2VuYWJsZV9ycHNfaW50ZXJydXB0cyhkZXZfcHJp dik7Ci0KLQkJLyogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVuY3kgYXMgYSBndWlkZSwg YnV0IGZvciBiZXR0ZXIKLQkJICogcGVyZm9ybWFuY2UsIGp1bXAgZGlyZWN0bHkgdG8gUlBlIGFz IG91ciBzdGFydGluZyBmcmVxdWVuY3kuCi0JCSAqLwotCQlmcmVxID0gbWF4KHJwcy0+Y3VyX2Zy ZXEsCi0JCQkgICBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCQlpZiAoaW50ZWxfc2V0X3Jwcyhk ZXZfcHJpdiwKLQkJCQkgIGNsYW1wKGZyZXEsCi0JCQkJCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0 LAotCQkJCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkpKQotCQkJRFJNX0RFQlVHX0RSSVZFUigi RmFpbGVkIHRvIHNldCBpZGxlIGZyZXF1ZW5jeVxuIik7Ci0JfQotCW11dGV4X3VubG9jaygmcnBz LT5sb2NrKTsKLX0KLQotdm9pZCBnZW42X3Jwc19pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qIEZsdXNoIG91ciBib3R0b20taGFsZiBzbyB0aGF0IGl0IGRvZXMgbm90IHJh Y2Ugd2l0aCB1cwotCSAqIHNldHRpbmcgdGhlIGlkbGUgZnJlcXVlbmN5IGFuZCBzbyB0aGF0IGl0 IGlzIGJvdW5kZWQgYnkKLQkgKiBvdXIgcnBtIHdha2VyZWYuIEFuZCB0aGVuIGRpc2FibGUgdGhl IGludGVycnVwdHMgdG8gc3RvcCBhbnkKLQkgKiBmdXRoZXIgUlBTIHJlY2xvY2tpbmcgd2hpbHN0 IHdlIGFyZSBhc2xlZXAuCi0JICovCi0JZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1cHRzKGRldl9w cml2KTsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYgKHJwcy0+ZW5hYmxlZCkgewot CQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp Ci0JCQl2bHZfc2V0X3Jwc19pZGxlKGRldl9wcml2KTsKLQkJZWxzZQotCQkJZ2VuNl9zZXRfcnBz KGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSk7Ci0JCXJwcy0+bGFzdF9hZGogPSAwOwotCQlJOTE1 X1dSSVRFKEdFTjZfUE1JTlRSTVNLLAotCQkJICAgZ2VuNl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhk ZXZfcHJpdiwgfjApKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotfQotCi12b2lk IGdlbjZfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZycS0+aTkxNS0+Z3RfcG0ucnBzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0JYm9vbCBib29zdDsKLQotCS8qIFRoaXMgaXMgaW50ZW50aW9uYWxseSByYWN5ISBXZSBwZWVr IGF0IHRoZSBzdGF0ZSBoZXJlLCB0aGVuCi0JICogdmFsaWRhdGUgaW5zaWRlIHRoZSBSUFMgd29y a2VyLgotCSAqLwotCWlmICghcnBzLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoaTkxNV9y ZXF1ZXN0X3NpZ25hbGVkKHJxKSkKLQkJcmV0dXJuOwotCi0JLyogU2VyaWFsaXplcyB3aXRoIGk5 MTVfcmVxdWVzdF9yZXRpcmUoKSAqLwotCWJvb3N0ID0gZmFsc2U7Ci0Jc3Bpbl9sb2NrX2lycXNh dmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFpOTE1X3JlcXVlc3RfaGFzX3dhaXRib29zdChy cSkgJiYKLQkgICAgIWRtYV9mZW5jZV9pc19zaWduYWxlZF9sb2NrZWQoJnJxLT5mZW5jZSkpIHsK LQkJYm9vc3QgPSAhYXRvbWljX2ZldGNoX2luYygmcnBzLT5udW1fd2FpdGVycyk7Ci0JCXJxLT5m bGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NUOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZycS0+bG9jaywgZmxhZ3MpOwotCWlmICghYm9vc3QpCi0JCXJldHVybjsKLQotCWlmIChS RUFEX09OQ0UocnBzLT5jdXJfZnJlcSkgPCBycHMtPmJvb3N0X2ZyZXEpCi0JCXNjaGVkdWxlX3dv cmsoJnJwcy0+d29yayk7Ci0KLQlhdG9taWNfaW5jKCZycHMtPmJvb3N0cyk7Ci19Ci0KLWludCBp bnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQot ewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCWludCBl cnI7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwotCUdFTV9CVUdfT04odmFs ID4gcnBzLT5tYXhfZnJlcSk7Ci0JR0VNX0JVR19PTih2YWwgPCBycHMtPm1pbl9mcmVxKTsKLQot CWlmICghcnBzLT5lbmFibGVkKSB7Ci0JCXJwcy0+Y3VyX2ZyZXEgPSB2YWw7Ci0JCXJldHVybiAw OwotCX0KLQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRl dl9wcml2KSkKLQkJZXJyID0gdmFsbGV5dmlld19zZXRfcnBzKGRldl9wcml2LCB2YWwpOwotCWVs c2UKLQkJZXJyID0gZ2VuNl9zZXRfcnBzKGRldl9wcml2LCB2YWwpOwotCi0JcmV0dXJuIGVycjsK LX0KLQotc3RhdGljIHZvaWQgZ2VuOV9kaXNhYmxlX3JjNihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCi17Ci0JSTkxNV9XUklURShHRU42X1JDX0NPTlRST0wsIDApOwotCUk5MTVf V1JJVEUoR0VOOV9QR19FTkFCTEUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBnZW45X2Rpc2FibGVf cnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1X1dSSVRFKEdF TjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfZGlzYWJsZV9yYzYoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUoR0VONl9SQ19D T05UUk9MLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9kaXNhYmxlX3JwcyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JSTkxNV9XUklURShHRU42X1JQTlNXUkVRLCAx IDw8IDMxKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGNoZXJyeXZpZXdfZGlzYWJsZV9yYzYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKLX0KLQotc3RhdGljIHZv aWQgY2hlcnJ5dmlld19kaXNhYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsIDApOwotfQotCi1zdGF0aWMgdm9p ZCB2YWxsZXl2aWV3X2Rpc2FibGVfcmM2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKLXsKLQkvKiBXZSdyZSBkb2luZyBmb3JjZXdha2UgYmVmb3JlIERpc2FibGluZyBSQzYsCi0J ICogVGhpcyB3aGF0IHRoZSBCSU9TIGV4cGVjdHMgd2hlbiBnb2luZyBpbnRvIHN1c3BlbmQgKi8K LQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtF X0FMTCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUkNfQ09OVFJPTCwgMCk7Ci0KLQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0K LXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLCAwKTsKLX0KLQot c3RhdGljIGJvb2wgYnh0X2NoZWNrX2Jpb3NfcmM2X3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlib29sIGVuYWJsZV9yYzYgPSB0cnVlOwotCXVuc2lnbmVkIGxv bmcgcmM2X2N0eF9iYXNlOwotCXUzMiByY19jdGw7Ci0JaW50IHJjX3N3X3RhcmdldDsKLQotCXJj X2N0bCA9IEk5MTVfUkVBRChHRU42X1JDX0NPTlRST0wpOwotCXJjX3N3X3RhcmdldCA9IChJOTE1 X1JFQUQoR0VONl9SQ19TVEFURSkgJiBSQ19TV19UQVJHRVRfU1RBVEVfTUFTSykgPj4KLQkJICAg ICAgIFJDX1NXX1RBUkdFVF9TVEFURV9TSElGVDsKLQlEUk1fREVCVUdfRFJJVkVSKCJCSU9TIGVu YWJsZWQgUkMgc3RhdGVzOiAiCi0JCQkgIkhXX0NUUkwgJXMgSFdfUkM2ICVzIFNXX1RBUkdFVF9T VEFURSAleFxuIiwKLQkJCSBvbm9mZihyY19jdGwgJiBHRU42X1JDX0NUTF9IV19FTkFCTEUpLAot CQkJIG9ub2ZmKHJjX2N0bCAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUpLAotCQkJIHJjX3N3X3Rh cmdldCk7Ci0KLQlpZiAoIShJOTE1X1JFQUQoUkM2X0xPQ0FUSU9OKSAmIFJDNl9DVFhfSU5fRFJB TSkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiUkM2IEJhc2UgbG9jYXRpb24gbm90IHNldCBwcm9w ZXJseS5cbiIpOwotCQllbmFibGVfcmM2ID0gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBUaGUgZXhh Y3QgY29udGV4dCBzaXplIGlzIG5vdCBrbm93biBmb3IgQlhULCBzbyBhc3N1bWUgYSBwYWdlIHNp emUKLQkgKiBmb3IgdGhpcyBjaGVjay4KLQkgKi8KLQlyYzZfY3R4X2Jhc2UgPSBJOTE1X1JFQUQo UkM2X0NUWF9CQVNFKSAmIFJDNl9DVFhfQkFTRV9NQVNLOwotCWlmICghKChyYzZfY3R4X2Jhc2Ug Pj0gZGV2X3ByaXYtPmRzbV9yZXNlcnZlZC5zdGFydCkgJiYKLQkgICAgICAocmM2X2N0eF9iYXNl ICsgUEFHRV9TSVpFIDwgZGV2X3ByaXYtPmRzbV9yZXNlcnZlZC5lbmQpKSkgewotCQlEUk1fREVC VUdfRFJJVkVSKCJSQzYgQmFzZSBhZGRyZXNzIG5vdCBhcyBleHBlY3RlZC5cbiIpOwotCQllbmFi bGVfcmM2ID0gZmFsc2U7Ci0JfQotCi0JaWYgKCEoKChJOTE1X1JFQUQoUFdSQ1RYX01BWENOVF9S Q1NVTklUKSAmIElETEVfVElNRV9NQVNLKSA+IDEpICYmCi0JICAgICAgKChJOTE1X1JFQUQoUFdS Q1RYX01BWENOVF9WQ1NVTklUMCkgJiBJRExFX1RJTUVfTUFTSykgPiAxKSAmJgotCSAgICAgICgo STkxNV9SRUFEKFBXUkNUWF9NQVhDTlRfQkNTVU5JVCkgJiBJRExFX1RJTUVfTUFTSykgPiAxKSAm JgotCSAgICAgICgoSTkxNV9SRUFEKFBXUkNUWF9NQVhDTlRfVkVDU1VOSVQpICYgSURMRV9USU1F X01BU0spID4gMSkpKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIkVuZ2luZSBJZGxlIHdhaXQgdGlt ZSBub3Qgc2V0IHByb3Blcmx5LlxuIik7Ci0JCWVuYWJsZV9yYzYgPSBmYWxzZTsKLQl9Ci0KLQlp ZiAoIUk5MTVfUkVBRChHRU44X1BVU0hCVVNfQ09OVFJPTCkgfHwKLQkgICAgIUk5MTVfUkVBRChH RU44X1BVU0hCVVNfRU5BQkxFKSB8fAotCSAgICAhSTkxNV9SRUFEKEdFTjhfUFVTSEJVU19TSElG VCkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiUHVzaGJ1cyBub3Qgc2V0dXAgcHJvcGVybHkuXG4i KTsKLQkJZW5hYmxlX3JjNiA9IGZhbHNlOwotCX0KLQotCWlmICghSTkxNV9SRUFEKEdFTjZfR0ZY UEFVU0UpKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIkdGWCBwYXVzZSBub3Qgc2V0dXAgcHJvcGVy bHkuXG4iKTsKLQkJZW5hYmxlX3JjNiA9IGZhbHNlOwotCX0KLQotCWlmICghSTkxNV9SRUFEKEdF TjhfTUlTQ19DVFJMMCkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiR1BNIGNvbnRyb2wgbm90IHNl dHVwIHByb3Blcmx5LlxuIik7Ci0JCWVuYWJsZV9yYzYgPSBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4g ZW5hYmxlX3JjNjsKLX0KLQotc3RhdGljIGJvb2wgc2FuaXRpemVfcmM2KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQotewotCXN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbyA9IG1r d3JpdGVfZGV2aWNlX2luZm8oaTkxNSk7Ci0KLQkvKiBQb3dlcnNhdmluZyBpcyBjb250cm9sbGVk IGJ5IHRoZSBob3N0IHdoZW4gaW5zaWRlIGEgVk0gKi8KLQlpZiAoaW50ZWxfdmdwdV9hY3RpdmUo aTkxNSkpIHsKLQkJaW5mby0+aGFzX3JjNiA9IDA7Ci0JCWluZm8tPmhhc19ycHMgPSBmYWxzZTsK LQl9Ci0KLQlpZiAoaW5mby0+aGFzX3JjNiAmJgotCSAgICBJU19HRU45X0xQKGk5MTUpICYmICFi eHRfY2hlY2tfYmlvc19yYzZfc2V0dXAoaTkxNSkpIHsKLQkJRFJNX0lORk8oIlJDNiBkaXNhYmxl ZCBieSBCSU9TXG4iKTsKLQkJaW5mby0+aGFzX3JjNiA9IDA7Ci0JfQotCi0JLyoKLQkgKiBXZSBh c3N1bWUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBhbnkgZGVlcCByYzYgbGV2ZWxzIGlmIHdlIGRvbid0 IGhhdmUKLQkgKiBoYXZlIHRoZSBwcmV2aW91cyByYzYgbGV2ZWwgc3VwcG9ydGVkLCBpLmUuIHdl IHVzZSBIQVNfUkM2KCkKLQkgKiBhcyB0aGUgaW5pdGlhbCBjb2Fyc2UgY2hlY2sgZm9yIHJjNiBp biBnZW5lcmFsLCBtb3Zpbmcgb24gdG8KLQkgKiBwcm9ncmVzc2l2ZWx5IGZpbmVyL2RlZXBlciBs ZXZlbHMuCi0JICovCi0JaWYgKCFpbmZvLT5oYXNfcmM2ICYmIGluZm8tPmhhc19yYzZwKQotCQlp bmZvLT5oYXNfcmM2cCA9IDA7Ci0KLQlyZXR1cm4gaW5mby0+aGFzX3JjNjsKLX0KLQotc3RhdGlj IHZvaWQgZ2VuNl9pbml0X3Jwc19mcmVxdWVuY2llcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5y cHM7Ci0KLQkvKiBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBpbiB1bml0cyBvZiA1ME1IeiAqLwot Ci0JLyogc3RhdGljIHZhbHVlcyBmcm9tIEhXOiBSUDAgPiBSUDEgPiBSUG4gKG1pbl9mcmVxKSAq LwotCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewotCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkx NV9SRUFEKEJYVF9SUF9TVEFURV9DQVApOwotCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2Nh cCA+PiAxNikgJiAweGZmOwotCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkg JiAweGZmOwotCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOwot CX0gZWxzZSB7Ci0JCXUzMiBycF9zdGF0ZV9jYXAgPSBJOTE1X1JFQUQoR0VONl9SUF9TVEFURV9D QVApOwotCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOwotCQly cHMtPnJwMV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOwotCQlycHMtPm1pbl9m cmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwotCX0KLQkvKiBod19tYXggPSBSUDAg dW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLwotCXJwcy0+bWF4X2ZyZXEgPSBycHMt PnJwMF9mcmVxOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHJwcy0+cnAxX2ZyZXE7Ci0JaWYg KElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwKLQkgICAg SVNfR0VOOV9CQyhkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewotCQl1 MzIgZGRjY19zdGF0dXMgPSAwOwotCi0JCWlmIChzYW5keWJyaWRnZV9wY29kZV9yZWFkKGRldl9w cml2LAotCQkJCQkgICBIU1dfUENPREVfRFlOQU1JQ19EVVRZX0NZQ0xFX0NPTlRST0wsCi0JCQkJ CSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKLQkJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPQot CQkJCWNsYW1wX3QodTgsCi0JCQkJCSgoZGRjY19zdGF0dXMgPj4gOCkgJiAweGZmKSwKLQkJCQkJ cnBzLT5taW5fZnJlcSwKLQkJCQkJcnBzLT5tYXhfZnJlcSk7Ci0JfQotCi0JaWYgKElTX0dFTjlf QkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsKLQkJLyogU3RvcmUg dGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGljaCBpcwotCQkgKiB0 aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKLQkJICovCi0JCXJwcy0+cnAwX2ZyZXEg Kj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5ycDFfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVS OwotCQlycHMtPm1pbl9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Ci0JCXJwcy0+bWF4X2ZyZXEg Kj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5lZmZpY2llbnRfZnJlcSAqPSBHRU45X0ZSRVFf U0NBTEVSOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgaW50ICgqc2V0KShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqLCB1OCkpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9w bS5ycHM7Ci0JdTggZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Ci0KLQkvKiBmb3JjZSBhIHJlc2V0ICov Ci0JcnBzLT5wb3dlci5tb2RlID0gLTE7Ci0JcnBzLT5jdXJfZnJlcSA9IC0xOwotCi0JaWYgKHNl dChkZXZfcHJpdiwgZnJlcSkpCi0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc2V0IFJQUyB0byBp bml0aWFsIHZhbHVlc1xuIik7Ci19Ci0KLS8qIFNlZSB0aGUgR2VuOV9HVF9QTV9Qcm9ncmFtbWlu Z19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLwotc3RhdGljIHZvaWQgZ2VuOV9lbmFibGVfcnBz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQkvKiBQcm9n cmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZvciBSUFMgKi8KLQlpZiAoSVNfR0VOKGRldl9w cml2LCA5KSkKLQkJSTkxNV9XUklURShHRU42X1JDX1ZJREVPX0ZSRVEsCi0JCQlHRU45X0ZSRVFV RU5DWShkZXZfcHJpdi0+Z3RfcG0ucnBzLnJwMV9mcmVxKSk7Ci0KLQkvKiAxIHNlY29uZCB0aW1l b3V0Ki8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USU1FT1VULAotCQlHVF9JTlRFUlZBTF9G Uk9NX1VTKGRldl9wcml2LCAxMDAwMDAwKSk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9I WVNURVJTSVMsIDB4YSk7Ci0KLQkvKiBMZWFuaW5nIG9uIHRoZSBiZWxvdyBjYWxsIHRvIGdlbjZf c2V0X3JwcyB0byBwcm9ncmFtL3NldHVwIHRoZQotCSAqIFVwL0Rvd24gRUkgJiB0aHJlc2hvbGQg cmVnaXN0ZXJzLCBhcyB3ZWxsIGFzIHRoZSBSUF9DT05UUk9MLAotCSAqIFJQX0lOVEVSUlVQVF9M SU1JVFMgJiBSUE5TV1JFUSByZWdpc3RlcnMgKi8KLQlyZXNldF9ycHMoZGV2X3ByaXYsIGdlbjZf c2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29y ZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjExX2VuYWJsZV9yYzYoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKLQotCS8qIDFhOiBTb2Z0d2Fy ZSBSQyBzdGF0ZSAtIFJDMCAqLwotCUk5MTVfV1JJVEUoR0VONl9SQ19TVEFURSwgMCk7Ci0KLQkv KgotCSAqIDFiOiBHZXQgZm9yY2V3YWtlIGR1cmluZyBwcm9ncmFtIHNlcXVlbmNlLiBBbHRob3Vn aCB0aGUgZHJpdmVyCi0JICogaGFzbid0IGVuYWJsZWQgYSBzdGF0ZSB5ZXQgd2hlcmUgd2UgbmVl ZCBmb3JjZXdha2UsIEJJT1MgbWF5IGhhdmUuCi0JICovCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogMmE6IERpc2Fi bGUgUkMgc3RhdGVzLiAqLwotCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKLQotCS8q IDJiOiBQcm9ncmFtIFJDNiB0aHJlc2hvbGRzLiovCi0JSTkxNV9XUklURShHRU42X1JDNl9XQUtF X1JBVEVfTElNSVQsIDU0IDw8IDE2IHwgODUpOwotCUk5MTVfV1JJVEUoR0VOMTBfTUVESUFfV0FL RV9SQVRFX0xJTUlULCAxNTApOwotCi0JSTkxNV9XUklURShHRU42X1JDX0VWQUxVQVRJT05fSU5U RVJWQUwsIDEyNTAwMCk7IC8qIDEyNTAwICogMTI4MG5zICovCi0JSTkxNV9XUklURShHRU42X1JD X0lETEVfSFlTVEVSU0lTLCAyNSk7IC8qIDI1ICogMTI4MG5zICovCi0JZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgZGV2X3ByaXYsIGlkKQotCQlJOTE1X1dSSVRFKFJJTkdfTUFYX0lETEUoZW5naW5l LT5tbWlvX2Jhc2UpLCAxMCk7Ci0KLQlpZiAoSEFTX0dUX1VDKGRldl9wcml2KSkKLQkJSTkxNV9X UklURShHVUNfTUFYX0lETEVfQ09VTlQsIDB4QSk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUkNfU0xF RVAsIDApOwotCi0JSTkxNV9XUklURShHRU42X1JDNl9USFJFU0hPTEQsIDUwMDAwKTsgLyogNTAv MTI1bXMgcGVyIEVJICovCi0KLQkvKgotCSAqIDJjOiBQcm9ncmFtIENvYXJzZSBQb3dlciBHYXRp bmcgUG9saWNpZXMuCi0JICoKLQkgKiBCc3BlYydzIGd1aWRhbmNlIGlzIHRvIHVzZSAyNXVzIChy ZWFsbHkgMjUgKiAxMjgwbnMpIGhlcmUuIFdoYXQgd2UKLQkgKiB1c2UgaW5zdGVhZCBpcyBhIG1v cmUgY29uc2VydmF0aXZlIGVzdGltYXRlIGZvciB0aGUgbWF4aW11bSB0aW1lCi0JICogaXQgdGFr ZXMgdXMgdG8gc2VydmljZSBhIENTIGludGVycnVwdCBhbmQgc3VibWl0IGEgbmV3IEVMU1AgLSB0 aGF0Ci0JICogaXMgdGhlIHRpbWUgd2hpY2ggdGhlIEdQVSBpcyBpZGxlIHdhaXRpbmcgZm9yIHRo ZSBDUFUgdG8gc2VsZWN0IHRoZQotCSAqIG5leHQgcmVxdWVzdCB0byBleGVjdXRlLiBJZiB0aGUg aWRsZSBoeXN0ZXJlc2lzIGlzIGxlc3MgdGhhbiB0aGF0Ci0JICogaW50ZXJydXB0IHNlcnZpY2Ug bGF0ZW5jeSwgdGhlIGhhcmR3YXJlIHdpbGwgYXV0b21hdGljYWxseSBnYXRlCi0JICogdGhlIHBv d2VyIHdlbGwgYW5kIHdlIHdpbGwgdGhlbiBpbmN1ciB0aGUgd2FrZSB1cCBjb3N0IG9uIHRvcCBv ZgotCSAqIHRoZSBzZXJ2aWNlIGxhdGVuY3kuIEEgc2ltaWxhciBndWlkZSBmcm9tIHBsYW5lX3N0 YXRlIGlzIHRoYXQgd2UKLQkgKiBkbyBub3Qgd2FudCB0aGUgZW5hYmxlIGh5c3RlcmVzaXMgdG8g bGVzcyB0aGFuIHRoZSB3YWtldXAgbGF0ZW5jeS4KLQkgKgotCSAqIGlndC9nZW1fZXhlY19ub3Av c2VxdWVudGlhbCBwcm92aWRlcyBhIHJvdWdoIGVzdGltYXRlIGZvciB0aGUKLQkgKiBzZXJ2aWNl IGxhdGVuY3ksIGFuZCBwdXRzIGl0IGFyb3VuZCAxMHVzIGZvciBCcm9hZHdlbGwgKGFuZCBvdGhl cgotCSAqIGJpZyBjb3JlKSBhbmQgYXJvdW5kIDQwdXMgZm9yIEJyb3h0b24gKGFuZCBvdGhlciBs b3cgcG93ZXIgY29yZXMpLgotCSAqIFtOb3RlIHRoYXQgZm9yIGxlZ2FjeSByaW5nYnVmZmVyIHN1 Ym1pc3Npb24sIHRoaXMgaXMgbGVzcyB0aGFuIDF1cyFdCi0JICogSG93ZXZlciwgdGhlIHdha2V1 cCBsYXRlbmN5IG9uIEJyb3h0b24gaXMgY2xvc2VyIHRvIDEwMHVzLiBUbyBiZQotCSAqIGNvbnNl cnZhdGl2ZSwgd2UgaGF2ZSB0byBmYWN0b3IgaW4gYSBjb250ZXh0IHN3aXRjaCBvbiB0b3AgKGR1 ZQotCSAqIHRvIGtzb2Z0aXJxZCkuCi0JICovCi0JSTkxNV9XUklURShHRU45X01FRElBX1BHX0lE TEVfSFlTVEVSRVNJUywgMjUwKTsKLQlJOTE1X1dSSVRFKEdFTjlfUkVOREVSX1BHX0lETEVfSFlT VEVSRVNJUywgMjUwKTsKLQotCS8qIDNhOiBFbmFibGUgUkM2ICovCi0JSTkxNV9XUklURShHRU42 X1JDX0NPTlRST0wsCi0JCSAgIEdFTjZfUkNfQ1RMX0hXX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUkNf Q1RMX1JDNl9FTkFCTEUgfAotCQkgICBHRU42X1JDX0NUTF9FSV9NT0RFKDEpKTsKLQotCS8qIDNi OiBFbmFibGUgQ29hcnNlIFBvd2VyIEdhdGluZyBvbmx5IHdoZW4gUkM2IGlzIGVuYWJsZWQuICov Ci0JSTkxNV9XUklURShHRU45X1BHX0VOQUJMRSwKLQkJICAgR0VOOV9SRU5ERVJfUEdfRU5BQkxF IHwKLQkJICAgR0VOOV9NRURJQV9QR19FTkFCTEUgfAotCQkgICBHRU4xMV9NRURJQV9TQU1QTEVS X1BHX0VOQUJMRSk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVu Y29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjlfZW5hYmxlX3JjNihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOwotCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwotCXUzMiByYzZfbW9kZTsK LQotCS8qIDFhOiBTb2Z0d2FyZSBSQyBzdGF0ZSAtIFJDMCAqLwotCUk5MTVfV1JJVEUoR0VONl9S Q19TVEFURSwgMCk7Ci0KLQkvKiAxYjogR2V0IGZvcmNld2FrZSBkdXJpbmcgcHJvZ3JhbSBzZXF1 ZW5jZS4gQWx0aG91Z2ggdGhlIGRyaXZlcgotCSAqIGhhc24ndCBlbmFibGVkIGEgc3RhdGUgeWV0 IHdoZXJlIHdlIG5lZWQgZm9yY2V3YWtlLCBCSU9TIG1heSBoYXZlLiovCi0JaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9nZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyog MmE6IERpc2FibGUgUkMgc3RhdGVzLiAqLwotCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAw KTsKLQotCS8qIDJiOiBQcm9ncmFtIFJDNiB0aHJlc2hvbGRzLiovCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTApIHsKLQkJSTkxNV9XUklURShHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQs IDU0IDw8IDE2IHwgODUpOwotCQlJOTE1X1dSSVRFKEdFTjEwX01FRElBX1dBS0VfUkFURV9MSU1J VCwgMTUwKTsKLQl9IGVsc2UgaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7Ci0JCS8qCi0JCSAq IFdhUnNEb3VibGVSYzZXcmxXaXRoQ29hcnNlUG93ZXJHYXRpbmc6c2tsIERvdWJsaW5nIFdSTCBv bmx5Ci0JCSAqIHdoZW4gQ1BHIGlzIGVuYWJsZWQKLQkJICovCi0JCUk5MTVfV1JJVEUoR0VONl9S QzZfV0FLRV9SQVRFX0xJTUlULCAxMDggPDwgMTYpOwotCX0gZWxzZSB7Ci0JCUk5MTVfV1JJVEUo R0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCA1NCA8PCAxNik7Ci0JfQotCi0JSTkxNV9XUklURShH RU42X1JDX0VWQUxVQVRJT05fSU5URVJWQUwsIDEyNTAwMCk7IC8qIDEyNTAwICogMTI4MG5zICov Ci0JSTkxNV9XUklURShHRU42X1JDX0lETEVfSFlTVEVSU0lTLCAyNSk7IC8qIDI1ICogMTI4MG5z ICovCi0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKQotCQlJOTE1X1dSSVRF KFJJTkdfTUFYX0lETEUoZW5naW5lLT5tbWlvX2Jhc2UpLCAxMCk7Ci0KLQlpZiAoSEFTX0dUX1VD KGRldl9wcml2KSkKLQkJSTkxNV9XUklURShHVUNfTUFYX0lETEVfQ09VTlQsIDB4QSk7Ci0KLQlJ OTE1X1dSSVRFKEdFTjZfUkNfU0xFRVAsIDApOwotCi0JLyoKLQkgKiAyYzogUHJvZ3JhbSBDb2Fy c2UgUG93ZXIgR2F0aW5nIFBvbGljaWVzLgotCSAqCi0JICogQnNwZWMncyBndWlkYW5jZSBpcyB0 byB1c2UgMjV1cyAocmVhbGx5IDI1ICogMTI4MG5zKSBoZXJlLiBXaGF0IHdlCi0JICogdXNlIGlu c3RlYWQgaXMgYSBtb3JlIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZSBmb3IgdGhlIG1heGltdW0gdGlt ZQotCSAqIGl0IHRha2VzIHVzIHRvIHNlcnZpY2UgYSBDUyBpbnRlcnJ1cHQgYW5kIHN1Ym1pdCBh IG5ldyBFTFNQIC0gdGhhdAotCSAqIGlzIHRoZSB0aW1lIHdoaWNoIHRoZSBHUFUgaXMgaWRsZSB3 YWl0aW5nIGZvciB0aGUgQ1BVIHRvIHNlbGVjdCB0aGUKLQkgKiBuZXh0IHJlcXVlc3QgdG8gZXhl Y3V0ZS4gSWYgdGhlIGlkbGUgaHlzdGVyZXNpcyBpcyBsZXNzIHRoYW4gdGhhdAotCSAqIGludGVy cnVwdCBzZXJ2aWNlIGxhdGVuY3ksIHRoZSBoYXJkd2FyZSB3aWxsIGF1dG9tYXRpY2FsbHkgZ2F0 ZQotCSAqIHRoZSBwb3dlciB3ZWxsIGFuZCB3ZSB3aWxsIHRoZW4gaW5jdXIgdGhlIHdha2UgdXAg Y29zdCBvbiB0b3Agb2YKLQkgKiB0aGUgc2VydmljZSBsYXRlbmN5LiBBIHNpbWlsYXIgZ3VpZGUg ZnJvbSBwbGFuZV9zdGF0ZSBpcyB0aGF0IHdlCi0JICogZG8gbm90IHdhbnQgdGhlIGVuYWJsZSBo eXN0ZXJlc2lzIHRvIGxlc3MgdGhhbiB0aGUgd2FrZXVwIGxhdGVuY3kuCi0JICoKLQkgKiBpZ3Qv Z2VtX2V4ZWNfbm9wL3NlcXVlbnRpYWwgcHJvdmlkZXMgYSByb3VnaCBlc3RpbWF0ZSBmb3IgdGhl Ci0JICogc2VydmljZSBsYXRlbmN5LCBhbmQgcHV0cyBpdCBhcm91bmQgMTB1cyBmb3IgQnJvYWR3 ZWxsIChhbmQgb3RoZXIKLQkgKiBiaWcgY29yZSkgYW5kIGFyb3VuZCA0MHVzIGZvciBCcm94dG9u IChhbmQgb3RoZXIgbG93IHBvd2VyIGNvcmVzKS4KLQkgKiBbTm90ZSB0aGF0IGZvciBsZWdhY3kg cmluZ2J1ZmZlciBzdWJtaXNzaW9uLCB0aGlzIGlzIGxlc3MgdGhhbiAxdXMhXQotCSAqIEhvd2V2 ZXIsIHRoZSB3YWtldXAgbGF0ZW5jeSBvbiBCcm94dG9uIGlzIGNsb3NlciB0byAxMDB1cy4gVG8g YmUKLQkgKiBjb25zZXJ2YXRpdmUsIHdlIGhhdmUgdG8gZmFjdG9yIGluIGEgY29udGV4dCBzd2l0 Y2ggb24gdG9wIChkdWUKLQkgKiB0byBrc29mdGlycWQpLgotCSAqLwotCUk5MTVfV1JJVEUoR0VO OV9NRURJQV9QR19JRExFX0hZU1RFUkVTSVMsIDI1MCk7Ci0JSTkxNV9XUklURShHRU45X1JFTkRF Ul9QR19JRExFX0hZU1RFUkVTSVMsIDI1MCk7Ci0KLQkvKiAzYTogRW5hYmxlIFJDNiAqLwotCUk5 MTVfV1JJVEUoR0VONl9SQzZfVEhSRVNIT0xELCAzNzUwMCk7IC8qIDM3LjUvMTI1bXMgcGVyIEVJ ICovCi0KLQkvKiBXYVJzVXNlVGltZW91dE1vZGU6Y25sIChwcmUtcHJvZCkgKi8KLQlpZiAoSVNf Q05MX1JFVklEKGRldl9wcml2LCBDTkxfUkVWSURfQTAsIENOTF9SRVZJRF9DMCkpCi0JCXJjNl9t b2RlID0gR0VON19SQ19DVExfVE9fTU9ERTsKLQllbHNlCi0JCXJjNl9tb2RlID0gR0VONl9SQ19D VExfRUlfTU9ERSgxKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLAotCQkgICBHRU42 X1JDX0NUTF9IV19FTkFCTEUgfAotCQkgICBHRU42X1JDX0NUTF9SQzZfRU5BQkxFIHwKLQkJICAg cmM2X21vZGUpOwotCi0JLyoKLQkgKiAzYjogRW5hYmxlIENvYXJzZSBQb3dlciBHYXRpbmcgb25s eSB3aGVuIFJDNiBpcyBlbmFibGVkLgotCSAqIFdhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmc6 c2tsLGNubCAtIFJlbmRlci9NZWRpYSBQRyBuZWVkIHRvIGJlIGRpc2FibGVkIHdpdGggUkM2Lgot CSAqLwotCWlmIChORUVEU19XYVJzRGlzYWJsZUNvYXJzZVBvd2VyR2F0aW5nKGRldl9wcml2KSkK LQkJSTkxNV9XUklURShHRU45X1BHX0VOQUJMRSwgMCk7Ci0JZWxzZQotCQlJOTE1X1dSSVRFKEdF TjlfUEdfRU5BQkxFLAotCQkJICAgR0VOOV9SRU5ERVJfUEdfRU5BQkxFIHwgR0VOOV9NRURJQV9Q R19FTkFCTEUpOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNv cmUsIEZPUkNFV0FLRV9BTEwpOwotfQotCi1zdGF0aWMgdm9pZCBnZW44X2VuYWJsZV9yYzYoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKLQotCS8qIDFhOiBTb2Z0d2Fy ZSBSQyBzdGF0ZSAtIFJDMCAqLwotCUk5MTVfV1JJVEUoR0VONl9SQ19TVEFURSwgMCk7Ci0KLQkv KiAxYjogR2V0IGZvcmNld2FrZSBkdXJpbmcgcHJvZ3JhbSBzZXF1ZW5jZS4gQWx0aG91Z2ggdGhl IGRyaXZlcgotCSAqIGhhc24ndCBlbmFibGVkIGEgc3RhdGUgeWV0IHdoZXJlIHdlIG5lZWQgZm9y Y2V3YWtlLCBCSU9TIG1heSBoYXZlLiovCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRl dl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogMmE6IERpc2FibGUgUkMgc3Rh dGVzLiAqLwotCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKLQotCS8qIDJiOiBQcm9n cmFtIFJDNiB0aHJlc2hvbGRzLiovCi0JSTkxNV9XUklURShHRU42X1JDNl9XQUtFX1JBVEVfTElN SVQsIDQwIDw8IDE2KTsKLQlJOTE1X1dSSVRFKEdFTjZfUkNfRVZBTFVBVElPTl9JTlRFUlZBTCwg MTI1MDAwKTsgLyogMTI1MDAgKiAxMjgwbnMgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUkNfSURMRV9I WVNURVJTSVMsIDI1KTsgLyogMjUgKiAxMjgwbnMgKi8KLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBkZXZfcHJpdiwgaWQpCi0JCUk5MTVfV1JJVEUoUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9f YmFzZSksIDEwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUkNfU0xFRVAsIDApOwotCUk5MTVfV1JJVEUo R0VONl9SQzZfVEhSRVNIT0xELCA2MjUpOyAvKiA4MDB1cy8xLjI4IGZvciBUTyAqLwotCi0JLyog MzogRW5hYmxlIFJDNiAqLwotCi0JSTkxNV9XUklURShHRU42X1JDX0NPTlRST0wsCi0JCSAgIEdF TjZfUkNfQ1RMX0hXX0VOQUJMRSB8Ci0JCSAgIEdFTjdfUkNfQ1RMX1RPX01PREUgfAotCQkgICBH RU42X1JDX0NUTF9SQzZfRU5BQkxFKTsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZk ZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuOF9l bmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3Qg aW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCS8qIDEg UHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTKi8KLQlJOTE1X1dSSVRFKEdF TjZfUlBOU1dSRVEsCi0JCSAgIEhTV19GUkVRVUVOQ1kocnBzLT5ycDFfZnJlcSkpOwotCUk5MTVf V1JJVEUoR0VONl9SQ19WSURFT19GUkVRLAotCQkgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2Zy ZXEpKTsKLQkvKiBOQjogRG9jcyBzYXkgMXMsIGFuZCAxMDAwMDAwIC0gd2hpY2ggYXJlbid0IGVx dWl2YWxlbnQgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAwMDAg LyAxMjgpOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCi0KLQkvKiBEb2NzIHJlY29tbWVuZCA5MDBN SHosIGFuZCAzMDAgTUh6IHJlc3BlY3RpdmVseSAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9JTlRF UlJVUFRfTElNSVRTLAotCQkgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNCB8Ci0JCSAg IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0IDw8IDE2KTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9V UF9USFJFU0hPTEQsIDc2MDAwMDAgLyAxMjgpOyAvKiA3Nm1zIGJ1c3luZXNzIHBlciBFSSwgOTAl ICovCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELCAzMTMwMDAwMCAvIDEyOCk7 IC8qIDMxM21zIGJ1c3luZXNzIHBlciBFSSwgNzAlKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBf RUksIDY2MDAwKTsgLyogODQuNDhtcywgWFhYOiByYW5kb20/ICovCi0JSTkxNV9XUklURShHRU42 X1JQX0RPV05fRUksIDM1MDAwMCk7IC8qIDQ0OG1zLCBYWFg6IHJhbmRvbT8gKi8KLQotCUk5MTVf V1JJVEUoR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwotCi0JLyogMjogRW5hYmxlIFJQUyAq LwotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICBHRU42X1JQX01FRElBX1RVUkJP IHwKLQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVE SUFfSVNfR0ZYIHwKLQkJICAgR0VONl9SUF9FTkFCTEUgfAotCQkgICBHRU42X1JQX1VQX0JVU1lf QVZHIHwKLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQVZHKTsKLQotCXJlc2V0X3JwcyhkZXZfcHJp diwgZ2VuNl9zZXRfcnBzKTsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJp di0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9lbmFibGVf cmM2KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmU7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0JdTMyIHJjNnZp ZHMsIHJjNl9tYXNrOwotCXUzMiBndGZpZm9kYmc7Ci0JaW50IHJldDsKLQotCUk5MTVfV1JJVEUo R0VONl9SQ19TVEFURSwgMCk7Ci0KLQkvKiBDbGVhciB0aGUgREJHIG5vdyBzbyB3ZSBkb24ndCBj b25mdXNlIGVhcmxpZXIgZXJyb3JzICovCi0JZ3RmaWZvZGJnID0gSTkxNV9SRUFEKEdURklGT0RC Ryk7Ci0JaWYgKGd0Zmlmb2RiZykgewotCQlEUk1fRVJST1IoIkdUIGZpZm8gaGFkIGEgcHJldmlv dXMgZXJyb3IgJXhcbiIsIGd0Zmlmb2RiZyk7Ci0JCUk5MTVfV1JJVEUoR1RGSUZPREJHLCBndGZp Zm9kYmcpOwotCX0KLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCS8qIGRpc2FibGUgdGhlIGNvdW50ZXJzIGFuZCBzZXQg ZGV0ZXJtaW5pc3RpYyB0aHJlc2hvbGRzICovCi0JSTkxNV9XUklURShHRU42X1JDX0NPTlRST0ws IDApOwotCi0JSTkxNV9XUklURShHRU42X1JDMV9XQUtFX1JBVEVfTElNSVQsIDEwMDAgPDwgMTYp OwotCUk5MTVfV1JJVEUoR0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCA0MCA8PCAxNiB8IDMwKTsK LQlJOTE1X1dSSVRFKEdFTjZfUkM2cHBfV0FLRV9SQVRFX0xJTUlULCAzMCk7Ci0JSTkxNV9XUklU RShHRU42X1JDX0VWQUxVQVRJT05fSU5URVJWQUwsIDEyNTAwMCk7Ci0JSTkxNV9XUklURShHRU42 X1JDX0lETEVfSFlTVEVSU0lTLCAyNSk7Ci0KLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZf cHJpdiwgaWQpCi0JCUk5MTVfV1JJVEUoUklOR19NQVhfSURMRShlbmdpbmUtPm1taW9fYmFzZSks IDEwKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SQ19TTEVFUCwgMCk7Ci0JSTkxNV9XUklURShHRU42 X1JDMWVfVEhSRVNIT0xELCAxMDAwKTsKLQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKLQkJ STkxNV9XUklURShHRU42X1JDNl9USFJFU0hPTEQsIDEyNTAwMCk7Ci0JZWxzZQotCQlJOTE1X1dS SVRFKEdFTjZfUkM2X1RIUkVTSE9MRCwgNTAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SQzZwX1RI UkVTSE9MRCwgMTUwMDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUkM2cHBfVEhSRVNIT0xELCA2NDAw MCk7IC8qIHVudXNlZCAqLwotCi0JLyogV2UgZG9uJ3QgdXNlIHRob3NlIG9uIEhhc3dlbGwgKi8K LQlyYzZfbWFzayA9IEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEU7Ci0JaWYgKEhBU19SQzZwKGRldl9w cml2KSkKLQkJcmM2X21hc2sgfD0gR0VONl9SQ19DVExfUkM2cF9FTkFCTEU7Ci0JaWYgKEhBU19S QzZwcChkZXZfcHJpdikpCi0JCXJjNl9tYXNrIHw9IEdFTjZfUkNfQ1RMX1JDNnBwX0VOQUJMRTsK LQlJOTE1X1dSSVRFKEdFTjZfUkNfQ09OVFJPTCwKLQkJICAgcmM2X21hc2sgfAotCQkgICBHRU42 X1JDX0NUTF9FSV9NT0RFKDEpIHwKLQkJICAgR0VONl9SQ19DVExfSFdfRU5BQkxFKTsKLQotCXJj NnZpZHMgPSAwOwotCXJldCA9IHNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoZGV2X3ByaXYsIEdFTjZf UENPREVfUkVBRF9SQzZWSURTLAotCQkJCSAgICAgJnJjNnZpZHMsIE5VTEwpOwotCWlmIChJU19H RU4oZGV2X3ByaXYsIDYpICYmIHJldCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJDb3VsZG4ndCBj aGVjayBmb3IgQklPUyB3b3JrYXJvdW5kXG4iKTsKLQl9IGVsc2UgaWYgKElTX0dFTihkZXZfcHJp diwgNikgJiYgKEdFTjZfREVDT0RFX1JDNl9WSUQocmM2dmlkcyAmIDB4ZmYpIDwgNDUwKSkgewot CQlEUk1fREVCVUdfRFJJVkVSKCJZb3Ugc2hvdWxkIHVwZGF0ZSB5b3VyIEJJT1MuIENvcnJlY3Rp bmcgbWluaW11bSByYzYgdm9sdGFnZSAoJWRtVi0+JWRtVilcbiIsCi0JCQkgIEdFTjZfREVDT0RF X1JDNl9WSUQocmM2dmlkcyAmIDB4ZmYpLCA0NTApOwotCQlyYzZ2aWRzICY9IDB4ZmZmZjAwOwot CQlyYzZ2aWRzIHw9IEdFTjZfRU5DT0RFX1JDNl9WSUQoNDUwKTsKLQkJcmV0ID0gc2FuZHlicmlk Z2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIEdFTjZfUENPREVfV1JJVEVfUkM2VklEUywgcmM2dmlk cyk7Ci0JCWlmIChyZXQpCi0JCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpeCBpbmNvcnJlY3QgcmM2 IHZvbHRhZ2VcbiIpOwotCX0KLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJp di0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9lbmFibGVf cnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKiBIZXJlIGJlZ2lu cyBhIG1hZ2ljIHNlcXVlbmNlIG9mIHJlZ2lzdGVyIHdyaXRlcyB0byBlbmFibGUKLQkgKiBhdXRv LWRvd25jbG9ja2luZy4KLQkgKgotCSAqIFBlcmhhcHMgdGhlcmUgbWlnaHQgYmUgc29tZSB2YWx1 ZSBpbiBleHBvc2luZyB0aGVzZSB0bwotCSAqIHVzZXJzcGFjZS4uLgotCSAqLwotCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQot CS8qIFBvd2VyIGRvd24gaWYgY29tcGxldGVseSBpZGxlIGZvciBvdmVyIDUwbXMgKi8KLQlJOTE1 X1dSSVRFKEdFTjZfUlBfRE9XTl9USU1FT1VULCA1MDAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQ X0lETEVfSFlTVEVSU0lTLCAxMCk7Ci0KLQlyZXNldF9ycHMoZGV2X3ByaXYsIGdlbjZfc2V0X3Jw cyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9S Q0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfdXBkYXRlX3JpbmdfZnJlcShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JY29uc3QgaW50IG1pbl9mcmVxID0gMTU7Ci0JY29u c3QgaW50IHNjYWxpbmdfZmFjdG9yID0gMTgwOwotCXVuc2lnbmVkIGludCBncHVfZnJlcTsKLQl1 bnNpZ25lZCBpbnQgbWF4X2lhX2ZyZXEsIG1pbl9yaW5nX2ZyZXE7Ci0JdW5zaWduZWQgaW50IG1h eF9ncHVfZnJlcSwgbWluX2dwdV9mcmVxOwotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5 OwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnBzLT5sb2NrKTsKLQotCWlmIChycHMtPm1heF9m cmVxIDw9IHJwcy0+bWluX2ZyZXEpCi0JCXJldHVybjsKLQotCXBvbGljeSA9IGNwdWZyZXFfY3B1 X2dldCgwKTsKLQlpZiAocG9saWN5KSB7Ci0JCW1heF9pYV9mcmVxID0gcG9saWN5LT5jcHVpbmZv Lm1heF9mcmVxOwotCQljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKLQl9IGVsc2UgewotCQkvKgot CQkgKiBEZWZhdWx0IHRvIG1lYXN1cmVkIGZyZXEgaWYgbm9uZSBmb3VuZCwgUENVIHdpbGwgZW5z dXJlIHdlCi0JCSAqIGRvbid0IGdvIG92ZXIKLQkJICovCi0JCW1heF9pYV9mcmVxID0gdHNjX2to ejsKLQl9Ci0KLQkvKiBDb252ZXJ0IGZyb20ga0h6IHRvIE1IeiAqLwotCW1heF9pYV9mcmVxIC89 IDEwMDA7Ci0KLQltaW5fcmluZ19mcmVxID0gSTkxNV9SRUFEKERDTEspICYgMHhmOwotCS8qIGNv bnZlcnQgRERSIGZyZXF1ZW5jeSBmcm9tIHVuaXRzIG9mIDI2Ni42TUh6IHRvIGJhbmR3aWR0aCAq LwotCW1pbl9yaW5nX2ZyZXEgPSBtdWx0X2ZyYWMobWluX3JpbmdfZnJlcSwgOCwgMyk7Ci0KLQlt aW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwotCW1heF9ncHVfZnJlcSA9IHJwcy0+bWF4X2Zy ZXE7Ci0JaWYgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTApIHsKLQkJLyogQ29udmVydCBHVCBmcmVxdWVuY3kgdG8gNTAgSFogdW5pdHMgKi8KLQkJbWlu X2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FMRVI7Ci0JCW1heF9ncHVfZnJlcSAvPSBHRU45X0ZS RVFfU0NBTEVSOwotCX0KLQotCS8qCi0JICogRm9yIGVhY2ggcG90ZW50aWFsIEdQVSBmcmVxdWVu Y3ksIGxvYWQgYSByaW5nIGZyZXF1ZW5jeSB3ZSdkIGxpa2UKLQkgKiB0byB1c2UgZm9yIG1lbW9y eSBhY2Nlc3MuICBXZSBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcgdGhlIElBIGZyZXF1ZW5jeQotCSAq IHRoZSBQQ1Ugc2hvdWxkIHVzZSBhcyBhIHJlZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJpbmcg ZnJlcXVlbmN5LgotCSAqLwotCWZvciAoZ3B1X2ZyZXEgPSBtYXhfZ3B1X2ZyZXE7IGdwdV9mcmVx ID49IG1pbl9ncHVfZnJlcTsgZ3B1X2ZyZXEtLSkgewotCQljb25zdCBpbnQgZGlmZiA9IG1heF9n cHVfZnJlcSAtIGdwdV9mcmVxOwotCQl1bnNpZ25lZCBpbnQgaWFfZnJlcSA9IDAsIHJpbmdfZnJl cSA9IDA7Ci0KLQkJaWYgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTApIHsKLQkJCS8qCi0JCQkgKiByaW5nX2ZyZXEgPSAyICogR1QuIHJpbmdfZnJlcSBp cyBpbiAxMDBNSHogdW5pdHMKLQkJCSAqIE5vIGZsb29yIHJlcXVpcmVkIGZvciByaW5nIGZyZXF1 ZW5jeSBvbiBTS0wuCi0JCQkgKi8KLQkJCXJpbmdfZnJlcSA9IGdwdV9mcmVxOwotCQl9IGVsc2Ug aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkgewotCQkJLyogbWF4KDIgKiBHVCwgRERSKS4g TkI6IEdUIGlzIDUwTUh6IHVuaXRzICovCi0JCQlyaW5nX2ZyZXEgPSBtYXgobWluX3JpbmdfZnJl cSwgZ3B1X2ZyZXEpOwotCQl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Ci0JCQly aW5nX2ZyZXEgPSBtdWx0X2ZyYWMoZ3B1X2ZyZXEsIDUsIDQpOwotCQkJcmluZ19mcmVxID0gbWF4 KG1pbl9yaW5nX2ZyZXEsIHJpbmdfZnJlcSk7Ci0JCQkvKiBsZWF2ZSBpYV9mcmVxIGFzIHRoZSBk ZWZhdWx0LCBjaG9zZW4gYnkgY3B1ZnJlcSAqLwotCQl9IGVsc2UgewotCQkJLyogT24gb2xkZXIg cHJvY2Vzc29ycywgdGhlcmUgaXMgbm8gc2VwYXJhdGUgcmluZwotCQkJICogY2xvY2sgZG9tYWlu LCBzbyBpbiBvcmRlciB0byBib29zdCB0aGUgYmFuZHdpZHRoCi0JCQkgKiBvZiB0aGUgcmluZywg d2UgbmVlZCB0byB1cGNsb2NrIHRoZSBDUFUgKGlhX2ZyZXEpLgotCQkJICoKLQkJCSAqIEZvciBH UFUgZnJlcXVlbmNpZXMgbGVzcyB0aGFuIDc1ME1IeiwKLQkJCSAqIGp1c3QgdXNlIHRoZSBsb3dl c3QgcmluZyBmcmVxLgotCQkJICovCi0JCQlpZiAoZ3B1X2ZyZXEgPCBtaW5fZnJlcSkKLQkJCQlp YV9mcmVxID0gODAwOwotCQkJZWxzZQotCQkJCWlhX2ZyZXEgPSBtYXhfaWFfZnJlcSAtICgoZGlm ZiAqIHNjYWxpbmdfZmFjdG9yKSAvIDIpOwotCQkJaWFfZnJlcSA9IERJVl9ST1VORF9DTE9TRVNU KGlhX2ZyZXEsIDEwMCk7Ci0JCX0KLQotCQlzYW5keWJyaWRnZV9wY29kZV93cml0ZShkZXZfcHJp diwKLQkJCQkJR0VONl9QQ09ERV9XUklURV9NSU5fRlJFUV9UQUJMRSwKLQkJCQkJaWFfZnJlcSA8 PCBHRU42X1BDT0RFX0ZSRVFfSUFfUkFUSU9fU0hJRlQgfAotCQkJCQlyaW5nX2ZyZXEgPDwgR0VO Nl9QQ09ERV9GUkVRX1JJTkdfUkFUSU9fU0hJRlQgfAotCQkJCQlncHVfZnJlcSk7Ci0JfQotfQot Ci1zdGF0aWMgaW50IGNoZXJyeXZpZXdfcnBzX21heF9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycDA7Ci0KLQl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKLQotCXN3aXRjaCAoUlVOVElN RV9JTkZPKGRldl9wcml2KS0+c3NldS5ldV90b3RhbCkgewotCWNhc2UgODoKLQkJLyogKDIgKiA0 KSBjb25maWcgKi8KLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzRFVV9G VVNFX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJLyogKDIgKiA2KSBjb25maWcgKi8K LQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzZFVV9GVVNFX1NISUZUKTsK LQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJLyogKDIgKiA4KSBjb25maWcgKi8KLQlkZWZhdWx0Ogot CQkvKiBTZXR0aW5nICgyICogOCkgTWluIFJQMCBmb3IgYW55IG90aGVyIGNvbWJpbmF0aW9uICov Ci0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M4RVVfRlVTRV9TSElGVCk7 Ci0JCWJyZWFrOwotCX0KLQotCXJwMCA9IChycDAgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwot Ci0JcmV0dXJuIHJwMDsKLX0KLQotc3RhdGljIGludCBjaGVycnl2aWV3X3Jwc19ycGVfZnJlcShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIHZhbCwgcnBlOwotCi0J dmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX0dQVV9EVVRZQ1lDTEVfUkVHKTsK LQlycGUgPSAodmFsID4+IFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfU0hJRlQpICYgUFVO SVRfR1BVX0RVVFlDWUNMRV9SUEVfRlJFUV9NQVNLOwotCi0JcmV0dXJuIHJwZTsKLX0KLQotc3Rh dGljIGludCBjaGVycnl2aWV3X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMTsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRl dl9wcml2LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0UpOwotCXJwMSA9ICh2YWwgJiBGQl9HRlhf RlJFUV9GVVNFX01BU0spOwotCi0JcmV0dXJuIHJwMTsKLX0KLQotc3RhdGljIHUzMiBjaGVycnl2 aWV3X3Jwc19taW5fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J dTMyIHZhbCwgcnBuOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIEZCX0dGWF9G TUlOX0FUX1ZNSU5fRlVTRSk7Ci0JcnBuID0gKCh2YWwgPj4gRkJfR0ZYX0ZNSU5fQVRfVk1JTl9G VVNFX1NISUZUKSAmCi0JCSAgICAgICBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwotCi0JcmV0dXJu IHJwbjsKLX0KLQotc3RhdGljIGludCB2YWxsZXl2aWV3X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMTsKLQotCXZhbCA9IHZs dl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwotCi0JcnAxID0g KHZhbCAmIEZCX0dGWF9GR1VBUkFOVEVFRF9GUkVRX0ZVU0VfTUFTSykgPj4gRkJfR0ZYX0ZHVUFS QU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKLQotCXJldHVybiBycDE7Ci19Ci0KLXN0YXRpYyBpbnQg dmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXUzMiB2YWwsIHJwMDsKLQotCXZhbCA9IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NG X05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwotCi0JcnAwID0gKHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9G VVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNFX1NISUZUOwotCS8qIENsYW1wIHRvIG1h eCAqLwotCXJwMCA9IG1pbl90KHUzMiwgcnAwLCAweGVhKTsKLQotCXJldHVybiBycDA7Ci19Ci0K LXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwZTsKLQotCXZhbCA9IHZsdl9uY19yZWFkKGRl dl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfTE8pOwotCXJwZSA9ICh2YWwgJiBGQl9G TUFYX1ZNSU5fRlJFUV9MT19NQVNLKSA+PiBGQl9GTUFYX1ZNSU5fRlJFUV9MT19TSElGVDsKLQl2 YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0hJKTsK LQlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9GUkVRX0hJX01BU0spIDw8IDU7Ci0KLQlyZXR1 cm4gcnBlOwotfQotCi1zdGF0aWMgaW50IHZhbGxleXZpZXdfcnBzX21pbl9mcmVxKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsOwotCi0JdmFsID0gdmx2X3B1 bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfTEZNKSAmIDB4ZmY7Ci0JLyoKLQkgKiBB Y2NvcmRpbmcgdG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8gSEFTIDEuMS42LjMgdGhlIG1pbmlt dW0gdmFsdWUKLQkgKiBmb3IgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGluIEdQTEwgbW9kZSBpcyAw eGMxLiBDb250cmFyeSB0byB0aGlzIG9uCi0JICogYSBCWVQtTSBCMCB0aGUgYWJvdmUgcmVnaXN0 ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hlbiBzZXR0aW5nCi0JICogYSBmcmVxdWVuY3kg UHVuaXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4YzAuIENsYW1wIGl0IDB4YzAKLQkg KiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IFB1bml0IGFjY2VwdHMuCi0JICovCi0JcmV0 dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKLX0KLQotLyogQ2hlY2sgdGhhdCB0aGUgcGN0eCBi dWZmZXIgd2Fzbid0IG1vdmUgdW5kZXIgdXMuICovCi1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2No ZWNrX3BjdHgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXVuc2lnbmVk IGxvbmcgcGN0eF9hZGRyID0gSTkxNV9SRUFEKFZMVl9QQ0JSKSAmIH40MDk1OwotCi0JV0FSTl9P TihwY3R4X2FkZHIgIT0gZGV2X3ByaXYtPmRzbS5zdGFydCArCi0JCQkgICAgIGRldl9wcml2LT52 bHZfcGN0eC0+c3RvbGVuLT5zdGFydCk7Ci19Ci0KLQotLyogQ2hlY2sgdGhhdCB0aGUgcGNiciBh ZGRyZXNzIGlzIG5vdCBlbXB0eS4gKi8KLXN0YXRpYyB2b2lkIGNoZXJyeXZpZXdfY2hlY2tfcGN0 eChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdW5zaWduZWQgbG9uZyBw Y3R4X2FkZHIgPSBJOTE1X1JFQUQoVkxWX1BDQlIpICYgfjQwOTU7Ci0KLQlXQVJOX09OKChwY3R4 X2FkZHIgPj4gVkxWX1BDQlJfQUREUl9TSElGVCkgPT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNo ZXJyeXZpZXdfc2V0dXBfcGN0eChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17 Ci0JcmVzb3VyY2Vfc2l6ZV90IHBjdHhfcGFkZHIsIHBhZGRyOwotCXJlc291cmNlX3NpemVfdCBw Y3R4X3NpemUgPSAzMioxMDI0OwotCXUzMiBwY2JyOwotCi0JcGNiciA9IEk5MTVfUkVBRChWTFZf UENCUik7Ci0JaWYgKChwY2JyID4+IFZMVl9QQ0JSX0FERFJfU0hJRlQpID09IDApIHsKLQkJRFJN X0RFQlVHX0RSSVZFUigiQklPUyBkaWRuJ3Qgc2V0IHVwIFBDQlIsIGZpeGluZyB1cFxuIik7Ci0J CXBhZGRyID0gZGV2X3ByaXYtPmRzbS5lbmQgKyAxIC0gcGN0eF9zaXplOwotCQlHRU1fQlVHX09O KHBhZGRyID4gVTMyX01BWCk7Ci0KLQkJcGN0eF9wYWRkciA9IChwYWRkciAmICh+NDA5NSkpOwot CQlJOTE1X1dSSVRFKFZMVl9QQ0JSLCBwY3R4X3BhZGRyKTsKLQl9Ci0KLQlEUk1fREVCVUdfRFJJ VkVSKCJQQ0JSOiAweCUwOHhcbiIsIEk5MTVfUkVBRChWTFZfUENCUikpOwotfQotCi1zdGF0aWMg dm9pZCB2YWxsZXl2aWV3X3NldHVwX3BjdHgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpwY3R4OwotCXJlc291cmNlX3Np emVfdCBwY3R4X3BhZGRyOwotCXJlc291cmNlX3NpemVfdCBwY3R4X3NpemUgPSAyNCoxMDI0Owot CXUzMiBwY2JyOwotCi0JcGNiciA9IEk5MTVfUkVBRChWTFZfUENCUik7Ci0JaWYgKHBjYnIpIHsK LQkJLyogQklPUyBzZXQgaXQgdXAgYWxyZWFkeSwgZ3JhYiB0aGUgcHJlLWFsbG9jJ2Qgc3BhY2Ug Ki8KLQkJcmVzb3VyY2Vfc2l6ZV90IHBjYnJfb2Zmc2V0OwotCi0JCXBjYnJfb2Zmc2V0ID0gKHBj YnIgJiAofjQwOTUpKSAtIGRldl9wcml2LT5kc20uc3RhcnQ7Ci0JCXBjdHggPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKGRldl9wcml2LAotCQkJCQkJCQkg ICAgICBwY2JyX29mZnNldCwKLQkJCQkJCQkJICAgICAgSTkxNV9HVFRfT0ZGU0VUX05PTkUsCi0J CQkJCQkJCSAgICAgIHBjdHhfc2l6ZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCURSTV9ERUJVR19E UklWRVIoIkJJT1MgZGlkbid0IHNldCB1cCBQQ0JSLCBmaXhpbmcgdXBcbiIpOwotCi0JLyoKLQkg KiBGcm9tIHRoZSBHdW5pdCByZWdpc3RlciBIQVM6Ci0JICogVGhlIEdmeCBkcml2ZXIgaXMgZXhw ZWN0ZWQgdG8gcHJvZ3JhbSB0aGlzIHJlZ2lzdGVyIGFuZCBlbnN1cmUKLQkgKiBwcm9wZXIgYWxs b2NhdGlvbiB3aXRoaW4gR2Z4IHN0b2xlbiBtZW1vcnkuICBGb3IgZXhhbXBsZSwgdGhpcwotCSAq IHJlZ2lzdGVyIHNob3VsZCBiZSBwcm9ncmFtbWVkIHN1Y2ggdGhhbiB0aGUgUENCUiByYW5nZSBk b2VzIG5vdAotCSAqIG92ZXJsYXAgd2l0aCBvdGhlciByYW5nZXMsIHN1Y2ggYXMgdGhlIGZyYW1l IGJ1ZmZlciwgcHJvdGVjdGVkCi0JICogbWVtb3J5LCBvciBhbnkgb3RoZXIgcmVsZXZhbnQgcmFu Z2VzLgotCSAqLwotCXBjdHggPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbihkZXZfcHJp diwgcGN0eF9zaXplKTsKLQlpZiAoIXBjdHgpIHsKLQkJRFJNX0RFQlVHKCJub3QgZW5vdWdoIHN0 b2xlbiBzcGFjZSBmb3IgUENUWCwgZGlzYWJsaW5nXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0J R0VNX0JVR19PTihyYW5nZV9vdmVyZmxvd3NfdCh1NjQsCi0JCQkJICAgICBkZXZfcHJpdi0+ZHNt LnN0YXJ0LAotCQkJCSAgICAgcGN0eC0+c3RvbGVuLT5zdGFydCwKLQkJCQkgICAgIFUzMl9NQVgp KTsKLQlwY3R4X3BhZGRyID0gZGV2X3ByaXYtPmRzbS5zdGFydCArIHBjdHgtPnN0b2xlbi0+c3Rh cnQ7Ci0JSTkxNV9XUklURShWTFZfUENCUiwgcGN0eF9wYWRkcik7Ci0KLW91dDoKLQlEUk1fREVC VUdfRFJJVkVSKCJQQ0JSOiAweCUwOHhcbiIsIEk5MTVfUkVBRChWTFZfUENCUikpOwotCWRldl9w cml2LT52bHZfcGN0eCA9IHBjdHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfY2xlYW51 cF9wY3R4KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqcGN0eDsKLQotCXBjdHggPSBmZXRjaF9hbmRfemVybygmZGV2X3By aXYtPnZsdl9wY3R4KTsKLQlpZiAocGN0eCkKLQkJaTkxNV9nZW1fb2JqZWN0X3B1dChwY3R4KTsK LX0KLQotc3RhdGljIHZvaWQgdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5ncGxsX3JlZl9mcmVx ID0KLQkJdmx2X2dldF9jY2tfY2xvY2soZGV2X3ByaXYsICJHUExMIHJlZiIsCi0JCQkJICBDQ0tf R1BMTF9DTE9DS19DT05UUk9MLAotCQkJCSAgZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwotCi0JRFJN X0RFQlVHX0RSSVZFUigiR1BMTCByZWZlcmVuY2UgZnJlcTogJWQga0h6XG4iLAotCQkJIGRldl9w cml2LT5ndF9wbS5ycHMuZ3BsbF9yZWZfZnJlcSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZp ZXdfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQot ewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCXUzMiB2 YWw7Ci0KLQl2YWxsZXl2aWV3X3NldHVwX3BjdHgoZGV2X3ByaXYpOwotCi0Jdmx2X2lvc2Zfc2Jf Z2V0KGRldl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lP U0ZfU0JfTkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLQotCXZsdl9pbml0X2dwbGxf cmVmX2ZyZXEoZGV2X3ByaXYpOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBV TklUX1JFR19HUFVfRlJFUV9TVFMpOwotCXN3aXRjaCAoKHZhbCA+PiA2KSAmIDMpIHsKLQljYXNl IDA6Ci0JY2FzZSAxOgotCQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSA4MDA7Ci0JCWJyZWFrOwotCWNh c2UgMjoKLQkJZGV2X3ByaXYtPm1lbV9mcmVxID0gMTA2NjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgot CQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSAxMzMzOwotCQlicmVhazsKLQl9Ci0JRFJNX0RFQlVHX0RS SVZFUigiRERSIHNwZWVkOiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7Ci0KLQlycHMt Pm1heF9mcmVxID0gdmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoZGV2X3ByaXYpOwotCXJwcy0+cnAw X2ZyZXEgPSBycHMtPm1heF9mcmVxOwotCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTog JWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2Zy ZXEpLAotCQkJIHJwcy0+bWF4X2ZyZXEpOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHZhbGxl eXZpZXdfcnBzX3JwZV9mcmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BV IGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMt PmVmZmljaWVudF9mcmVxKSwKLQkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCXJwcy0+cnAx X2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19E UklWRVIoIlJQMShHdWFyIEZyZXEpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRl bF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ycDFfZnJlcSksCi0JCQkgcnBzLT5ycDFfZnJlcSk7 Ci0KLQlycHMtPm1pbl9mcmVxID0gdmFsbGV5dmlld19ycHNfbWluX2ZyZXEoZGV2X3ByaXYpOwot CURSTV9ERUJVR19EUklWRVIoIm1pbiBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50 ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAotCQkJIHJwcy0+bWluX2ZyZXEp OwotCi0Jdmx2X2lvc2Zfc2JfcHV0KGRldl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklU KSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsK LX0KLQotc3RhdGljIHZvaWQgY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMyIHZhbDsKLQotCWNoZXJyeXZpZXdfc2V0dXBfcGN0eChk ZXZfcHJpdik7Ci0KLQl2bHZfaW9zZl9zYl9nZXQoZGV2X3ByaXYsCi0JCQlCSVQoVkxWX0lPU0Zf U0JfUFVOSVQpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZMVl9JT1NGX1NC X0NDSykpOwotCi0Jdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShkZXZfcHJpdik7Ci0KLQl2YWwgPSB2 bHZfY2NrX3JlYWQoZGV2X3ByaXYsIENDS19GVVNFX1JFRyk7Ci0KLQlzd2l0Y2ggKCh2YWwgPj4g MikgJiAweDcpIHsKLQljYXNlIDM6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDIwMDA7Ci0JCWJy ZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDE2MDA7Ci0JCWJyZWFrOwot CX0KLQlEUk1fREVCVUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1l bV9mcmVxKTsKLQotCXJwcy0+bWF4X2ZyZXEgPSBjaGVycnl2aWV3X3Jwc19tYXhfZnJlcShkZXZf cHJpdik7Ci0JcnBzLT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JRFJNX0RFQlVHX0RSSVZF UigibWF4IEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgcnBzLT5tYXhfZnJlcSksCi0JCQkgcnBzLT5tYXhfZnJlcSk7Ci0KLQlycHMtPmVmZmlj aWVudF9mcmVxID0gY2hlcnJ5dmlld19ycHNfcnBlX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJV R19EUklWRVIoIlJQZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAotCQkJIHJwcy0+ZWZmaWNpZW50X2Zy ZXEpOwotCi0JcnBzLT5ycDFfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX2d1YXJfZnJlcShkZXZfcHJp dik7Ci0JRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxu IiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ycDFfZnJlcSksCi0JCQkgcnBz LT5ycDFfZnJlcSk7Ci0KLQlycHMtPm1pbl9mcmVxID0gY2hlcnJ5dmlld19ycHNfbWluX2ZyZXEo ZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIm1pbiBHUFUgZnJlcTogJWQgTUh6ICgldSlc biIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAotCQkJIHJw cy0+bWluX2ZyZXEpOwotCi0Jdmx2X2lvc2Zfc2JfcHV0KGRldl9wcml2LAotCQkJQklUKFZMVl9J T1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKLQkJCUJJVChWTFZfSU9T Rl9TQl9DQ0spKTsKLQotCVdBUk5fT05DRSgocnBzLT5tYXhfZnJlcSB8IHJwcy0+ZWZmaWNpZW50 X2ZyZXEgfCBycHMtPnJwMV9mcmVxIHwKLQkJICAgcnBzLT5taW5fZnJlcSkgJiAxLAotCQkgICJP ZGQgR1BVIGZyZXEgdmFsdWVzXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgdmFsbGV5dmlld19jbGVh bnVwX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J dmFsbGV5dmlld19jbGVhbnVwX3BjdHgoZGV2X3ByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVy cnl2aWV3X2VuYWJsZV9yYzYoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewot CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKLQllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKLQl1MzIgZ3RmaWZvZGJnLCByYzZfbW9kZSwgcGNicjsKLQotCWd0Zmlmb2RiZyA9IEk5MTVf UkVBRChHVEZJRk9EQkcpICYgfihHVF9GSUZPX1NCREVESUNBVEVfRlJFRV9FTlRSWV9DSFYgfAot CQkJCQkgICAgIEdUX0ZJRk9fRlJFRV9FTlRSSUVTX0NIVik7Ci0JaWYgKGd0Zmlmb2RiZykgewot CQlEUk1fREVCVUdfRFJJVkVSKCJHVCBmaWZvIGhhZCBhIHByZXZpb3VzIGVycm9yICV4XG4iLAot CQkJCSBndGZpZm9kYmcpOwotCQlJOTE1X1dSSVRFKEdURklGT0RCRywgZ3RmaWZvZGJnKTsKLQl9 Ci0KLQljaGVycnl2aWV3X2NoZWNrX3BjdHgoZGV2X3ByaXYpOwotCi0JLyogMWEgJiAxYjogR2V0 IGZvcmNld2FrZSBkdXJpbmcgcHJvZ3JhbSBzZXF1ZW5jZS4gQWx0aG91Z2ggdGhlIGRyaXZlcgot CSAqIGhhc24ndCBlbmFibGVkIGEgc3RhdGUgeWV0IHdoZXJlIHdlIG5lZWQgZm9yY2V3YWtlLCBC SU9TIG1heSBoYXZlLiovCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9wcml2LT51 bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogIERpc2FibGUgUkMgc3RhdGVzLiAqLwotCUk5 MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKLQotCS8qIDJhOiBQcm9ncmFtIFJDNiB0aHJl c2hvbGRzLiovCi0JSTkxNV9XUklURShHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQsIDQwIDw8IDE2 KTsKLQlJOTE1X1dSSVRFKEdFTjZfUkNfRVZBTFVBVElPTl9JTlRFUlZBTCwgMTI1MDAwKTsgLyog MTI1MDAgKiAxMjgwbnMgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUkNfSURMRV9IWVNURVJTSVMsIDI1 KTsgLyogMjUgKiAxMjgwbnMgKi8KLQotCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 LCBpZCkKLQkJSTkxNV9XUklURShSSU5HX01BWF9JRExFKGVuZ2luZS0+bW1pb19iYXNlKSwgMTAp OwotCUk5MTVfV1JJVEUoR0VONl9SQ19TTEVFUCwgMCk7Ci0KLQkvKiBUTyB0aHJlc2hvbGQgc2V0 IHRvIDUwMCB1cyAoIDB4MTg2ICogMS4yOCB1cykgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUkM2X1RI UkVTSE9MRCwgMHgxODYpOwotCi0JLyogQWxsb3dzIFJDNiByZXNpZGVuY3kgY291bnRlciB0byB3 b3JrICovCi0JSTkxNV9XUklURShWTFZfQ09VTlRFUl9DT05UUk9MLAotCQkgICBfTUFTS0VEX0JJ VF9FTkFCTEUoVkxWX0NPVU5UX1JBTkdFX0hJR0ggfAotCQkJCSAgICAgIFZMVl9NRURJQV9SQzZf Q09VTlRfRU4gfAotCQkJCSAgICAgIFZMVl9SRU5ERVJfUkM2X0NPVU5UX0VOKSk7Ci0KLQkvKiBG b3Igbm93IHdlIGFzc3VtZSBCSU9TIGlzIGFsbG9jYXRpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFBD QlIgICovCi0JcGNiciA9IEk5MTVfUkVBRChWTFZfUENCUik7Ci0KLQkvKiAzOiBFbmFibGUgUkM2 ICovCi0JcmM2X21vZGUgPSAwOwotCWlmIChwY2JyID4+IFZMVl9QQ0JSX0FERFJfU0hJRlQpCi0J CXJjNl9tb2RlID0gR0VON19SQ19DVExfVE9fTU9ERTsKLQlJOTE1X1dSSVRFKEdFTjZfUkNfQ09O VFJPTCwgcmM2X21vZGUpOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2 LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Vu YWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWw7 Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VX QUtFX0FMTCk7Ci0KLQkvKiAxOiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZvciBS UFMqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDApOwotCUk5MTVf V1JJVEUoR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBf RE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJLCA2NjAw MCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7Ci0KLQlJOTE1X1dSSVRF KEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCS8qIDI6IEVuYWJsZSBSUFMgKi8KLQlJ OTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxf TU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKLQkJICAgR0VONl9SUF9FTkFCTEUg fAotCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQVZH KTsKLQotCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYp OwotCi0JdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZfQklBU19D UFVfNTBfU09DXzUwOwotCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NPQ19P VkVSUklERSwgdmFsKTsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9S RUdfR1BVX0ZSRVFfU1RTKTsKLQotCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwotCi0JLyogUlBT IGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KLQlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFC TEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKLQotCURSTV9ERUJVR19EUklWRVIoIkdQ TEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKLQlEUk1fREVCVUdf RFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7Ci0KLQlyZXNldF9ycHMoZGV2X3By aXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgm ZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxl eXZpZXdfZW5hYmxlX3JjNihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwotCWVudW0gaW50ZWxfZW5naW5lX2lkIGlk OwotCXUzMiBndGZpZm9kYmc7Ci0KLQl2YWxsZXl2aWV3X2NoZWNrX3BjdHgoZGV2X3ByaXYpOwot Ci0JZ3RmaWZvZGJnID0gSTkxNV9SRUFEKEdURklGT0RCRyk7Ci0JaWYgKGd0Zmlmb2RiZykgewot CQlEUk1fREVCVUdfRFJJVkVSKCJHVCBmaWZvIGhhZCBhIHByZXZpb3VzIGVycm9yICV4XG4iLAot CQkJCSBndGZpZm9kYmcpOwotCQlJOTE1X1dSSVRFKEdURklGT0RCRywgZ3RmaWZvZGJnKTsKLQl9 Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VX QUtFX0FMTCk7Ci0KLQkvKiAgRGlzYWJsZSBSQyBzdGF0ZXMuICovCi0JSTkxNV9XUklURShHRU42 X1JDX0NPTlRST0wsIDApOwotCi0JSTkxNV9XUklURShHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQs IDB4MDAyODAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SQ19FVkFMVUFUSU9OX0lOVEVSVkFMLCAx MjUwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SQ19JRExFX0hZU1RFUlNJUywgMjUpOwotCi0JZm9y X2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKQotCQlJOTE1X1dSSVRFKFJJTkdfTUFY X0lETEUoZW5naW5lLT5tbWlvX2Jhc2UpLCAxMCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUkM2X1RI UkVTSE9MRCwgMHg1NTcpOwotCi0JLyogQWxsb3dzIFJDNiByZXNpZGVuY3kgY291bnRlciB0byB3 b3JrICovCi0JSTkxNV9XUklURShWTFZfQ09VTlRFUl9DT05UUk9MLAotCQkgICBfTUFTS0VEX0JJ VF9FTkFCTEUoVkxWX0NPVU5UX1JBTkdFX0hJR0ggfAotCQkJCSAgICAgIFZMVl9NRURJQV9SQzBf Q09VTlRfRU4gfAotCQkJCSAgICAgIFZMVl9SRU5ERVJfUkMwX0NPVU5UX0VOIHwKLQkJCQkgICAg ICBWTFZfTUVESUFfUkM2X0NPVU5UX0VOIHwKLQkJCQkgICAgICBWTFZfUkVOREVSX1JDNl9DT1VO VF9FTikpOwotCi0JSTkxNV9XUklURShHRU42X1JDX0NPTlRST0wsCi0JCSAgIEdFTjdfUkNfQ1RM X1RPX01PREUgfCBWTFZfUkNfQ1RMX0NUWF9SU1RfUEFSQUxMRUwpOwotCi0JaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotfQotCi1z dGF0aWMgdm9pZCB2YWxsZXl2aWV3X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCXUzMiB2YWw7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgm ZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBf RE9XTl9USU1FT1VULCAxMDAwMDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfVEhSRVNIT0xE LCA1OTQwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOwot CUk5MTVfV1JJVEUoR0VONl9SUF9VUF9FSSwgNjYwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9E T1dOX0VJLCAzNTAwMDApOwotCi0JSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAx MCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9U VVJCTyB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQ X01FRElBX0lTX0dGWCB8Ci0JCSAgIEdFTjZfUlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8Ci0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0NPTlQpOwotCi0Jdmx2X3B1bml0X2dl dChkZXZfcHJpdik7Ci0KLQkvKiBTZXR0aW5nIEZpeGVkIEJpYXMgKi8KLQl2YWwgPSBWTFZfT1ZF UlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IFZMVl9CSUFTX0NQVV8xMjVfU09DXzg3NTsKLQl2 bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFZMVl9UVVJCT19TT0NfT1ZFUlJJREUsIHZhbCk7Ci0K LQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7 Ci0KLQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsKLQotCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BM TCBpcyB1c2VkICovCi0JV0FSTl9PTkNFKCh2YWwgJiBHUExMRU5BQkxFKSA9PSAwLCAiR1BMTCBu b3QgZW5hYmxlZFxuIik7Ci0KLQlEUk1fREVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4i LCB5ZXNubyh2YWwgJiBHUExMRU5BQkxFKSk7Ci0JRFJNX0RFQlVHX0RSSVZFUigiR1BVIHN0YXR1 czogMHglMDh4XG4iLCB2YWwpOwotCi0JcmVzZXRfcnBzKGRldl9wcml2LCB2YWxsZXl2aWV3X3Nl dF9ycHMpOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUs IEZPUkNFV0FLRV9BTEwpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEo dTMyIHZpZGZyZXEpCi17Ci0JdW5zaWduZWQgbG9uZyBmcmVxOwotCWludCBkaXYgPSAodmlkZnJl cSAmIDB4M2YwMDAwKSA+PiAxNjsKLQlpbnQgcG9zdCA9ICh2aWRmcmVxICYgMHgzMDAwKSA+PiAx MjsKLQlpbnQgcHJlID0gKHZpZGZyZXEgJiAweDcpOwotCi0JaWYgKCFwcmUpCi0JCXJldHVybiAw OwotCi0JZnJlcSA9ICgoZGl2ICogMTMzMzMzKSAvICgoMTw8cG9zdCkgKiBwcmUpKTsKLQotCXJl dHVybiBmcmVxOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNwYXJhbXMgewotCXUxNiBpOwot CXUxNiB0OwotCXUxNiBtOwotCXUxNiBjOwotfSBjcGFyYW1zW10gPSB7Ci0JeyAxLCAxMzMzLCAz MDEsIDI4NjY0IH0sCi0JeyAxLCAxMDY2LCAyOTQsIDI0NDYwIH0sCi0JeyAxLCA4MDAsIDI5NCwg MjUxOTIgfSwKLQl7IDAsIDEzMzMsIDI3NiwgMjc2MDUgfSwKLQl7IDAsIDEwNjYsIDI3NiwgMjc2 MDUgfSwKLQl7IDAsIDgwMCwgMjMxLCAyMzc4NCB9LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxv bmcgX19pOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK LXsKLQl1NjQgdG90YWxfY291bnQsIGRpZmYsIHJldDsKLQl1MzIgY291bnQxLCBjb3VudDIsIGNv dW50MywgbSA9IDAsIGMgPSAwOwotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190b19tc2Vj cyhqaWZmaWVzKSwgZGlmZjE7Ci0JaW50IGk7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hk ZXZfbG9jayk7Ci0KLQlkaWZmMSA9IG5vdyAtIGRldl9wcml2LT5pcHMubGFzdF90aW1lMTsKLQot CS8qIFByZXZlbnQgZGl2aXNpb24tYnktemVybyBpZiB3ZSBhcmUgYXNraW5nIHRvbyBmYXN0Lgot CSAqIEFsc28sIHdlIGRvbid0IGdldCBpbnRlcmVzdGluZyByZXN1bHRzIGlmIHdlIGFyZSBwb2xs aW5nCi0JICogZmFzdGVyIHRoYW4gb25jZSBpbiAxMG1zLCBzbyBqdXN0IHJldHVybiB0aGUgc2F2 ZWQgdmFsdWUKLQkgKiBpbiBzdWNoIGNhc2VzLgotCSAqLwotCWlmIChkaWZmMSA8PSAxMCkKLQkJ cmV0dXJuIGRldl9wcml2LT5pcHMuY2hpcHNldF9wb3dlcjsKLQotCWNvdW50MSA9IEk5MTVfUkVB RChETUlFQyk7Ci0JY291bnQyID0gSTkxNV9SRUFEKEREUkVDKTsKLQljb3VudDMgPSBJOTE1X1JF QUQoQ1NJRUMpOwotCi0JdG90YWxfY291bnQgPSBjb3VudDEgKyBjb3VudDIgKyBjb3VudDM7Ci0K LQkvKiBGSVhNRTogaGFuZGxlIHBlci1jb3VudGVyIG92ZXJmbG93ICovCi0JaWYgKHRvdGFsX2Nv dW50IDwgZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MSkgewotCQlkaWZmID0gfjBVTCAtIGRldl9w cml2LT5pcHMubGFzdF9jb3VudDE7Ci0JCWRpZmYgKz0gdG90YWxfY291bnQ7Ci0JfSBlbHNlIHsK LQkJZGlmZiA9IHRvdGFsX2NvdW50IC0gZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MTsKLQl9Ci0K LQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcGFyYW1zKTsgaSsrKSB7Ci0JCWlmIChjcGFy YW1zW2ldLmkgPT0gZGV2X3ByaXYtPmlwcy5jX20gJiYKLQkJICAgIGNwYXJhbXNbaV0udCA9PSBk ZXZfcHJpdi0+aXBzLnJfdCkgewotCQkJbSA9IGNwYXJhbXNbaV0ubTsKLQkJCWMgPSBjcGFyYW1z W2ldLmM7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWRpZmYgPSBkaXZfdTY0KGRpZmYsIGRpZmYx KTsKLQlyZXQgPSAoKG0gKiBkaWZmKSArIGMpOwotCXJldCA9IGRpdl91NjQocmV0LCAxMCk7Ci0K LQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxID0gdG90YWxfY291bnQ7Ci0JZGV2X3ByaXYtPmlw cy5sYXN0X3RpbWUxID0gbm93OwotCi0JZGV2X3ByaXYtPmlwcy5jaGlwc2V0X3Bvd2VyID0gcmV0 OwotCi0JcmV0dXJuIHJldDsKLX0KLQotdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF93YWtlcmVmX3Qgd2Fr ZXJlZjsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDA7Ci0KLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwg NSkpCi0JCXJldHVybiAwOwotCi0Jd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVu dGltZV9wbSwgd2FrZXJlZikgewotCQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JCXZh bCA9IF9faTkxNV9jaGlwc2V0X3ZhbChkZXZfcHJpdik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNo ZGV2X2xvY2spOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaTkxNV9t Y2hfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQotewotCXVuc2lnbmVkIGxvbmcg bSwgeCwgYjsKLQl1MzIgdHNmczsKLQotCXRzZnMgPSBpbnRlbF91bmNvcmVfcmVhZCgmaTkxNS0+ dW5jb3JlLCBUU0ZTKTsKLQotCW0gPSAoKHRzZnMgJiBUU0ZTX1NMT1BFX01BU0spID4+IFRTRlNf U0xPUEVfU0hJRlQpOwotCXggPSBpbnRlbF91bmNvcmVfcmVhZDgoJmk5MTUtPnVuY29yZSwgVFIx KTsKLQotCWIgPSB0c2ZzICYgVFNGU19JTlRSX01BU0s7Ci0KLQlyZXR1cm4gKChtICogeCkgLyAx MjcpIC0gYjsKLX0KLQotc3RhdGljIGludCBfcHh2aWRfdG9fdmQodTggcHh2aWQpCi17Ci0JaWYg KHB4dmlkID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHB4dmlkID49IDggJiYgcHh2aWQgPCAz MSkKLQkJcHh2aWQgPSAzMTsKLQotCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsKLX0KLQotc3Rh dGljIHUzMiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHU4IHB4dmlkKQotewotCWNvbnN0IGludCB2ZCA9IF9weHZpZF90b192ZChweHZpZCk7Ci0JY29u c3QgaW50IHZtID0gdmQgLSAxMTI1OwotCi0JaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5pc19t b2JpbGUpCi0JCXJldHVybiB2bSA+IDAgPyB2bSA6IDA7Ci0KLQlyZXR1cm4gdmQ7Ci19Ci0KLXN0 YXRpYyB2b2lkIF9faTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTY0IG5vdywgZGlmZiwgZGlmZm1zOwotCXUzMiBjb3VudDsKLQotCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKLQotCW5vdyA9IGt0aW1lX2dldF9yYXdf bnMoKTsKLQlkaWZmbXMgPSBub3cgLSBkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTI7Ci0JZG9fZGl2 KGRpZmZtcywgTlNFQ19QRVJfTVNFQyk7Ci0KLQkvKiBEb24ndCBkaXZpZGUgYnkgMCAqLwotCWlm ICghZGlmZm1zKQotCQlyZXR1cm47Ci0KLQljb3VudCA9IEk5MTVfUkVBRChHRlhFQyk7Ci0KLQlp ZiAoY291bnQgPCBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyKSB7Ci0JCWRpZmYgPSB+MFVMIC0g ZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MjsKLQkJZGlmZiArPSBjb3VudDsKLQl9IGVsc2Ugewot CQlkaWZmID0gY291bnQgLSBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyOwotCX0KLQotCWRldl9w cml2LT5pcHMubGFzdF9jb3VudDIgPSBjb3VudDsKLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTIg PSBub3c7Ci0KLQkvKiBNb3JlIG1hZ2ljIGNvbnN0YW50cy4uLiAqLwotCWRpZmYgPSBkaWZmICog MTE4MTsKLQlkaWZmID0gZGl2X3U2NChkaWZmLCBkaWZmbXMgKiAxMCk7Ci0JZGV2X3ByaXYtPmlw cy5nZnhfcG93ZXIgPSBkaWZmOwotfQotCi12b2lkIGk5MTVfdXBkYXRlX2dmeF92YWwoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3dha2VyZWZfdCB3YWtlcmVm OwotCi0JaWYgKCFJU19HRU4oZGV2X3ByaXYsIDUpKQotCQlyZXR1cm47Ci0KLQl3aXRoX2ludGVs X3J1bnRpbWVfcG0oJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Ci0JCXNwaW5fbG9j a19pcnEoJm1jaGRldl9sb2NrKTsKLQkJX19pOTE1X3VwZGF0ZV9nZnhfdmFsKGRldl9wcml2KTsK LQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWdu ZWQgbG9uZyBfX2k5MTVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Ci17Ci0JdW5zaWduZWQgbG9uZyB0LCBjb3JyLCBzdGF0ZTEsIGNvcnIyLCBzdGF0ZTI7Ci0JdTMy IHB4dmlkLCBleHRfdjsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKLQot CXB4dmlkID0gSTkxNV9SRUFEKFBYVkZSRVEoZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkp OwotCXB4dmlkID0gKHB4dmlkID4+IDI0KSAmIDB4N2Y7Ci0JZXh0X3YgPSBwdmlkX3RvX2V4dHZp ZChkZXZfcHJpdiwgcHh2aWQpOwotCi0Jc3RhdGUxID0gZXh0X3Y7Ci0KLQl0ID0gaTkxNV9tY2hf dmFsKGRldl9wcml2KTsKLQotCS8qIFJldmVsIGluIHRoZSBlbXBpcmljYWxseSBkZXJpdmVkIGNv bnN0YW50cyAqLwotCi0JLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8K LQlpZiAodCA+IDgwKQotCQljb3JyID0gKCh0ICogMjM0OSkgKyAxMzU5NDApOwotCWVsc2UgaWYg KHQgPj0gNTApCi0JCWNvcnIgPSAoKHQgKiA5NjQpICsgMjkzMTcpOwotCWVsc2UgLyogPCA1MCAq LwotCQljb3JyID0gKCh0ICogMzAxKSArIDEwMDQpOwotCi0JY29yciA9IGNvcnIgKiAoKDE1MDE0 MiAqIHN0YXRlMSkgLyAxMDAwMCAtIDc4NjQyKTsKLQljb3JyIC89IDEwMDAwMDsKLQljb3JyMiA9 IChjb3JyICogZGV2X3ByaXYtPmlwcy5jb3JyKTsKLQotCXN0YXRlMiA9IChjb3JyMiAqIHN0YXRl MSkgLyAxMDAwMDsKLQlzdGF0ZTIgLz0gMTAwOyAvKiBjb252ZXJ0IHRvIG1XICovCi0KLQlfX2k5 MTVfdXBkYXRlX2dmeF92YWwoZGV2X3ByaXYpOwotCi0JcmV0dXJuIGRldl9wcml2LT5pcHMuZ2Z4 X3Bvd2VyICsgc3RhdGUyOwotfQotCi11bnNpZ25lZCBsb25nIGk5MTVfZ2Z4X3ZhbChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCi0JaWYgKCFJU19HRU4oZGV2X3ByaXYsIDUpKQot CQlyZXR1cm4gMDsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgmZGV2X3ByaXYtPnJ1bnRpbWVf cG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCQl2YWwgPSBf X2k5MTVfZ2Z4X3ZhbChkZXZfcHJpdik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2sp OwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSBfX3JjdSAqaTkxNV9tY2hfZGV2OwotCi1zdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Km1jaGRldl9nZXQodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQot CXJjdV9yZWFkX2xvY2soKTsKLQlpOTE1ID0gcmN1X2RlcmVmZXJlbmNlKGk5MTVfbWNoX2Rldik7 Ci0JaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmaTkxNS0+ZHJtLnJlZikpCi0JCWk5MTUgPSBO VUxMOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIGk5MTU7Ci19Ci0KLS8qKgotICog aTkxNV9yZWFkX21jaF92YWwgLSByZXR1cm4gdmFsdWUgZm9yIElQUyB1c2UKLSAqCi0gKiBDYWxj dWxhdGUgYW5kIHJldHVybiBhIHZhbHVlIGZvciB0aGUgSVBTIGRyaXZlciB0byB1c2Ugd2hlbiBk ZWNpZGluZyB3aGV0aGVyCi0gKiB3ZSBoYXZlIHRoZXJtYWwgYW5kIHBvd2VyIGhlYWRyb29tIHRv IGluY3JlYXNlIENQVSBvciBHUFUgcG93ZXIgYnVkZ2V0LgotICovCi11bnNpZ25lZCBsb25nIGk5 MTVfcmVhZF9tY2hfdmFsKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 Ci0JdW5zaWduZWQgbG9uZyBjaGlwc2V0X3ZhbCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBncmFwaGlj c192YWwgPSAwOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCi0JaTkxNSA9IG1jaGRldl9n ZXQoKTsKLQlpZiAoIWk5MTUpCi0JCXJldHVybiAwOwotCi0Jd2l0aF9pbnRlbF9ydW50aW1lX3Bt KCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9s b2NrKTsKLQkJY2hpcHNldF92YWwgPSBfX2k5MTVfY2hpcHNldF92YWwoaTkxNSk7Ci0JCWdyYXBo aWNzX3ZhbCA9IF9faTkxNV9nZnhfdmFsKGk5MTUpOwotCQlzcGluX3VubG9ja19pcnEoJm1jaGRl dl9sb2NrKTsKLQl9Ci0KLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKLQlyZXR1cm4gY2hpcHNl dF92YWwgKyBncmFwaGljc192YWw7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1X3JlYWRfbWNo X3ZhbCk7Ci0KLS8qKgotICogaTkxNV9ncHVfcmFpc2UgLSByYWlzZSBHUFUgZnJlcXVlbmN5IGxp bWl0Ci0gKgotICogUmFpc2UgdGhlIGxpbWl0OyBJUFMgaW5kaWNhdGVzIHdlIGhhdmUgdGhlcm1h bCBoZWFkcm9vbS4KLSAqLwotYm9vbCBpOTE1X2dwdV9yYWlzZSh2b2lkKQotewotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1OwotCi0JaTkxNSA9IG1jaGRldl9nZXQoKTsKLQlpZiAoIWk5 MTUpCi0JCXJldHVybiBmYWxzZTsKLQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQlp ZiAoaTkxNS0+aXBzLm1heF9kZWxheSA+IGk5MTUtPmlwcy5mbWF4KQotCQlpOTE1LT5pcHMubWF4 X2RlbGF5LS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0KLQlkcm1fZGV2X3B1 dCgmaTkxNS0+ZHJtKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVf Z3B1X3JhaXNlKTsKLQotLyoqCi0gKiBpOTE1X2dwdV9sb3dlciAtIGxvd2VyIEdQVSBmcmVxdWVu Y3kgbGltaXQKLSAqCi0gKiBJUFMgaW5kaWNhdGVzIHdlJ3JlIGNsb3NlIHRvIGEgdGhlcm1hbCBs aW1pdCwgc28gdGhyb3R0bGUgYmFjayB0aGUgR1BVCi0gKiBmcmVxdWVuY3kgbWF4aW11bS4KLSAq LwotYm9vbCBpOTE1X2dwdV9sb3dlcih2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1OwotCi0JaTkxNSA9IG1jaGRldl9nZXQoKTsKLQlpZiAoIWk5MTUpCi0JCXJldHVybiBm YWxzZTsKLQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQlpZiAoaTkxNS0+aXBzLm1h eF9kZWxheSA8IGk5MTUtPmlwcy5taW5fZGVsYXkpCi0JCWk5MTUtPmlwcy5tYXhfZGVsYXkrKzsK LQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQotCWRybV9kZXZfcHV0KCZpOTE1LT5k cm0pOwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfbG93ZXIp OwotCi0vKioKLSAqIGk5MTVfZ3B1X2J1c3kgLSBpbmRpY2F0ZSBHUFUgYnVzaW5lc3MgdG8gSVBT Ci0gKgotICogVGVsbCB0aGUgSVBTIGRyaXZlciB3aGV0aGVyIG9yIG5vdCB0aGUgR1BVIGlzIGJ1 c3kuCi0gKi8KLWJvb2wgaTkxNV9ncHVfYnVzeSh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1OwotCWJvb2wgcmV0OwotCi0JaTkxNSA9IG1jaGRldl9nZXQoKTsKLQlpZiAo IWk5MTUpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldCA9IGk5MTUtPmd0LmF3YWtlOwotCi0JZHJt X2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BM KGk5MTVfZ3B1X2J1c3kpOwotCi0vKioKLSAqIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUgLSBkaXNh YmxlIGdyYXBoaWNzIHR1cmJvCi0gKgotICogRGlzYWJsZSBncmFwaGljcyB0dXJibyBieSByZXNl dHRpbmcgdGhlIG1heCBmcmVxdWVuY3kgYW5kIHNldHRpbmcgdGhlCi0gKiBjdXJyZW50IGZyZXF1 ZW5jeSB0byB0aGUgZGVmYXVsdC4KLSAqLwotYm9vbCBpOTE1X2dwdV90dXJib19kaXNhYmxlKHZv aWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0JYm9vbCByZXQ7Ci0KLQlp OTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCWk5MTUtPmlwcy5tYXhfZGVsYXkgPSBpOTE1LT5p cHMuZnN0YXJ0OwotCXJldCA9IGlyb25sYWtlX3NldF9kcnBzKGk5MTUsIGk5MTUtPmlwcy5mc3Rh cnQpOwotCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCi0JZHJtX2Rldl9wdXQoJmk5 MTUtPmRybSk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3R1 cmJvX2Rpc2FibGUpOwotCi0vKioKLSAqIFRlbGxzIHRoZSBpbnRlbF9pcHMgZHJpdmVyIHRoYXQg dGhlIGk5MTUgZHJpdmVyIGlzIG5vdyBsb2FkZWQsIGlmCi0gKiBJUFMgZ290IGxvYWRlZCBmaXJz dC4KLSAqCi0gKiBUaGlzIGF3a3dhcmQgZGFuY2UgaXMgc28gdGhhdCBuZWl0aGVyIG1vZHVsZSBo YXMgdG8gZGVwZW5kIG9uIHRoZQotICogb3RoZXIgaW4gb3JkZXIgZm9yIElQUyB0byBkbyB0aGUg YXBwcm9wcmlhdGUgY29tbXVuaWNhdGlvbiBvZgotICogR1BVIHR1cmJvIGxpbWl0cyB0byBpOTE1 LgotICovCi1zdGF0aWMgdm9pZAotaXBzX3BpbmdfZm9yX2k5MTVfbG9hZCh2b2lkKQotewotCXZv aWQgKCpsaW5rKSh2b2lkKTsKLQotCWxpbmsgPSBzeW1ib2xfZ2V0KGlwc19saW5rX3RvX2k5MTVf ZHJpdmVyKTsKLQlpZiAobGluaykgewotCQlsaW5rKCk7Ci0JCXN5bWJvbF9wdXQoaXBzX2xpbmtf dG9faTkxNV9kcml2ZXIpOwotCX0KLX0KLQotdm9pZCBpbnRlbF9ncHVfaXBzX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCS8qIFdlIG9ubHkgcmVnaXN0ZXIgdGhl IGk5MTUgaXBzIHBhcnQgd2l0aCBpbnRlbC1pcHMgb25jZSBldmVyeXRoaW5nIGlzCi0JICogc2V0 IHVwLCB0byBhdm9pZCBpbnRlbC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFs dWVzLiAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihpOTE1X21jaF9kZXYsIGRldl9wcml2KTsKLQot CWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsKLX0KLQotdm9pZCBpbnRlbF9ncHVfaXBzX3RlYXJk b3duKHZvaWQpCi17Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGk5MTVfbWNoX2RldiwgTlVMTCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGludGVsX2luaXRfZW1vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIGxjZnVzZTsKLQl1OCBweHdbMTZdOwotCWludCBpOwotCi0JLyog RGlzYWJsZSB0byBwcm9ncmFtICovCi0JSTkxNV9XUklURShFQ1IsIDApOwotCVBPU1RJTkdfUkVB RChFQ1IpOwotCi0JLyogUHJvZ3JhbSBlbmVyZ3kgd2VpZ2h0cyBmb3IgdmFyaW91cyBldmVudHMg Ki8KLQlJOTE1X1dSSVRFKFNERVcsIDB4MTUwNDBkMDApOwotCUk5MTVfV1JJVEUoQ1NJRVcwLCAw eDAwN2YwMDAwKTsKLQlJOTE1X1dSSVRFKENTSUVXMSwgMHgxZTIyMDAwNCk7Ci0JSTkxNV9XUklU RShDU0lFVzIsIDB4MDQwMDAwMDQpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJSTkx NV9XUklURShQRVcoaSksIDApOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCUk5MTVfV1JJ VEUoREVXKGkpLCAwKTsKLQotCS8qIFByb2dyYW0gUC1zdGF0ZSB3ZWlnaHRzIHRvIGFjY291bnQg Zm9yIGZyZXF1ZW5jeSBwb3dlciBhZGp1c3RtZW50ICovCi0JZm9yIChpID0gMDsgaSA8IDE2OyBp KyspIHsKLQkJdTMyIHB4dmlkZnJlcSA9IEk5MTVfUkVBRChQWFZGUkVRKGkpKTsKLQkJdW5zaWdu ZWQgbG9uZyBmcmVxID0gaW50ZWxfcHhmcmVxKHB4dmlkZnJlcSk7Ci0JCXVuc2lnbmVkIGxvbmcg dmlkID0gKHB4dmlkZnJlcSAmIFBYVkZSRVFfUFhfTUFTSykgPj4KLQkJCVBYVkZSRVFfUFhfU0hJ RlQ7Ci0JCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JCXZhbCA9IHZpZCAqIHZpZDsKLQkJdmFsICo9 IChmcmVxIC8gMTAwMCk7Ci0JCXZhbCAqPSAyNTU7Ci0JCXZhbCAvPSAoMTI3KjEyNyo5MDApOwot CQlpZiAodmFsID4gMHhmZikKLQkJCURSTV9FUlJPUigiYmFkIHB4dmFsOiAlbGRcbiIsIHZhbCk7 Ci0JCXB4d1tpXSA9IHZhbDsKLQl9Ci0JLyogUmVuZGVyIHN0YW5kYnkgc3RhdGVzIGdldCAwIHdl aWdodCAqLwotCXB4d1sxNF0gPSAwOwotCXB4d1sxNV0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgewotCQl1MzIgdmFsID0gKHB4d1tpKjRdIDw8IDI0KSB8IChweHdbKGkqNCkrMV0g PDwgMTYpIHwKLQkJCShweHdbKGkqNCkrMl0gPDwgOCkgfCAocHh3WyhpKjQpKzNdKTsKLQkJSTkx NV9XUklURShQWFcoaSksIHZhbCk7Ci0JfQotCi0JLyogQWRqdXN0IG1hZ2ljIHJlZ3MgdG8gbWFn aWMgdmFsdWVzIChtb3JlIGV4cGVyaW1lbnRhbCByZXN1bHRzKSAqLwotCUk5MTVfV1JJVEUoT0dX MCwgMCk7Ci0JSTkxNV9XUklURShPR1cxLCAwKTsKLQlJOTE1X1dSSVRFKEVHMCwgMHgwMDAwN2Yw MCk7Ci0JSTkxNV9XUklURShFRzEsIDB4MDAwMDAwMGUpOwotCUk5MTVfV1JJVEUoRUcyLCAweDAw MGUwMDAwKTsKLQlJOTE1X1dSSVRFKEVHMywgMHg2ODAwMDMwMCk7Ci0JSTkxNV9XUklURShFRzQs IDB4NDIwMDAwMDApOwotCUk5MTVfV1JJVEUoRUc1LCAweDAwMTQwMDMxKTsKLQlJOTE1X1dSSVRF KEVHNiwgMCk7Ci0JSTkxNV9XUklURShFRzcsIDApOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkr KykKLQkJSTkxNV9XUklURShQWFdMKGkpLCAwKTsKLQotCS8qIEVuYWJsZSBQTU9OICsgc2VsZWN0 IGV2ZW50cyAqLwotCUk5MTVfV1JJVEUoRUNSLCAweDgwMDAwMDE5KTsKLQotCWxjZnVzZSA9IEk5 MTVfUkVBRChMQ0ZVU0UwMik7Ci0KLQlkZXZfcHJpdi0+aXBzLmNvcnIgPSAobGNmdXNlICYgTENG VVNFX0hJVl9NQVNLKTsKLX0KLQotdm9pZCBpbnRlbF9pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0g JmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIFJQTSBkZXBlbmRzIG9uIFJDNiB0byBz YXZlIHJlc3RvcmUgdGhlIEdUIEhXIGNvbnRleHQsIHNvIG1ha2UgUkM2IGEKLQkgKiByZXF1aXJl bWVudC4KLQkgKi8KLQlpZiAoIXNhbml0aXplX3JjNihkZXZfcHJpdikpIHsKLQkJRFJNX0lORk8o IlJDNiBkaXNhYmxlZCwgZGlzYWJsaW5nIHJ1bnRpbWUgUE0gc3VwcG9ydFxuIik7Ci0JCXBtX3J1 bnRpbWVfZ2V0KCZkZXZfcHJpdi0+ZHJtLnBkZXYtPmRldik7Ci0JfQotCi0JLyogSW5pdGlhbGl6 ZSBSUFMgbGltaXRzIChmb3IgdXNlcnNwYWNlKSAqLwotCWlmIChJU19DSEVSUllWSUVXKGRldl9w cml2KSkKLQkJY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Ci0JZWxzZSBp ZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCXZhbGxleXZpZXdfaW5pdF9ndF9wb3dlcnNh dmUoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikKLQkJZ2Vu Nl9pbml0X3Jwc19mcmVxdWVuY2llcyhkZXZfcHJpdik7Ci0KLQkvKiBEZXJpdmUgaW5pdGlhbCB1 c2VyIHByZWZlcmVuY2VzL2xpbWl0cyBmcm9tIHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8KLQlycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7Ci0JcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQgPSBycHMtPm1pbl9mcmVxOwotCi0JLyogQWZ0ZXIgc2V0dGluZyBtYXgtc29mdGxpbWl0 LCBmaW5kIHRoZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KLQlpZiAoSVNfR0VOKGRldl9wcml2LCA2 KSB8fAotCSAgICBJU19JVllCUklER0UoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYp KSB7Ci0JCXUzMiBwYXJhbXMgPSAwOwotCi0JCXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoZGV2X3By aXYsIEdFTjZfUkVBRF9PQ19QQVJBTVMsCi0JCQkJICAgICAgICZwYXJhbXMsIE5VTEwpOwotCQlp ZiAocGFyYW1zICYgQklUKDMxKSkgeyAvKiBPQyBzdXBwb3J0ZWQgKi8KLQkJCURSTV9ERUJVR19E UklWRVIoIk92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIG1heDogJWRNSHosIG92ZXJjbG9jazogJWRN SHpcbiIsCi0JCQkJCSAocnBzLT5tYXhfZnJlcSAmIDB4ZmYpICogNTAsCi0JCQkJCSAocGFyYW1z ICYgMHhmZikgKiA1MCk7Ci0JCQlycHMtPm1heF9mcmVxID0gcGFyYW1zICYgMHhmZjsKLQkJfQot CX0KLQotCS8qIEZpbmFsbHkgYWxsb3cgdXMgdG8gYm9vc3QgdG8gbWF4IGJ5IGRlZmF1bHQgKi8K LQlycHMtPmJvb3N0X2ZyZXEgPSBycHMtPm1heF9mcmVxOwotCXJwcy0+aWRsZV9mcmVxID0gcnBz LT5taW5fZnJlcTsKLQlycHMtPmN1cl9mcmVxID0gcnBzLT5pZGxlX2ZyZXE7Ci19Ci0KLXZvaWQg aW50ZWxfY2xlYW51cF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJdmFsbGV5dmlld19jbGVh bnVwX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Ci0KLQlpZiAoIUhBU19SQzYoZGV2X3ByaXYpKQot CQlwbV9ydW50aW1lX3B1dCgmZGV2X3ByaXYtPmRybS5wZGV2LT5kZXYpOwotfQotCi12b2lkIGlu dGVsX3Nhbml0aXplX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5lbmFibGVkID0gdHJ1ZTsgLyogZm9yY2UgUlBT IGRpc2FibGluZyAqLwotCWRldl9wcml2LT5ndF9wbS5yYzYuZW5hYmxlZCA9IHRydWU7IC8qIGZv cmNlIFJDNiBkaXNhYmxpbmcgKi8KLQlpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJp dik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJZ2VuMTFfcmVzZXRfcnBz X2ludGVycnVwdHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NikKLQkJZ2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCBpbnRlbF9kaXNhYmxlX2xsY19wc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCi17Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+Z3RfcG0ucnBzLmxvY2sp OwotCi0JaWYgKCFpOTE1LT5ndF9wbS5sbGNfcHN0YXRlLmVuYWJsZWQpCi0JCXJldHVybjsKLQot CS8qIEN1cnJlbnRseSB0aGVyZSBpcyBubyBIVyBjb25maWd1cmF0aW9uIHRvIGJlIGRvbmUgdG8g ZGlzYWJsZS4gKi8KLQotCWk5MTUtPmd0X3BtLmxsY19wc3RhdGUuZW5hYmxlZCA9IGZhbHNlOwot fQotCi1zdGF0aWMgdm9pZCBpbnRlbF9kaXNhYmxlX3JjNihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCi17Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPmd0X3BtLnJw cy5sb2NrKTsKLQotCWlmICghZGV2X3ByaXYtPmd0X3BtLnJjNi5lbmFibGVkKQotCQlyZXR1cm47 Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlnZW45X2Rpc2FibGVfcmM2KGRl dl9wcml2KTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJY2hlcnJ5dmll d19kaXNhYmxlX3JjNihkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJp dikpCi0JCXZhbGxleXZpZXdfZGlzYWJsZV9yYzYoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNikKLQkJZ2VuNl9kaXNhYmxlX3JjNihkZXZfcHJpdik7Ci0KLQlk ZXZfcHJpdi0+Z3RfcG0ucmM2LmVuYWJsZWQgPSBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgaW50 ZWxfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoIWRl dl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gOSkKLQkJZ2VuOV9kaXNhYmxlX3JwcyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNoZXJyeXZpZXdfZGlzYWJsZV9ycHMoZGV2X3By aXYpOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQotCQl2YWxsZXl2aWV3X2Rp c2FibGVfcnBzKGRldl9wcml2KTsKLQllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYp Ci0JCWdlbjZfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX0lST05MQUtFX00o ZGV2X3ByaXYpKQotCQlpcm9ubGFrZV9kaXNhYmxlX2RycHMoZGV2X3ByaXYpOwotCi0JZGV2X3By aXYtPmd0X3BtLnJwcy5lbmFibGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgaW50ZWxfZGlzYWJsZV9n dF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCW11dGV4 X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci0KLQlpbnRlbF9kaXNhYmxlX3JjNihk ZXZfcHJpdik7Ci0JaW50ZWxfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWlmIChIQVNfTExDKGRl dl9wcml2KSkKLQkJaW50ZWxfZGlzYWJsZV9sbGNfcHN0YXRlKGRldl9wcml2KTsKLQotCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkIGludGVsX2VuYWJsZV9sbGNfcHN0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmd0X3BtLnJwcy5sb2NrKTsKLQotCWlm IChpOTE1LT5ndF9wbS5sbGNfcHN0YXRlLmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWdlbjZfdXBk YXRlX3JpbmdfZnJlcShpOTE1KTsKLQotCWk5MTUtPmd0X3BtLmxsY19wc3RhdGUuZW5hYmxlZCA9 IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9yYzYoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5n dF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoZGV2X3ByaXYtPmd0X3BtLnJjNi5lbmFibGVkKQotCQly ZXR1cm47Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNoZXJyeXZpZXdfZW5h YmxlX3JjNihkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0J CXZhbGxleXZpZXdfZW5hYmxlX3JjNihkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMSkKLQkJZ2VuMTFfZW5hYmxlX3JjNihkZXZfcHJpdik7Ci0JZWxzZSBpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlnZW45X2VuYWJsZV9yYzYoZGV2X3ByaXYpOwot CWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCWdlbjhfZW5hYmxlX3JjNihkZXZf cHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQotCQlnZW42X2VuYWJs ZV9yYzYoZGV2X3ByaXYpOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJjNi5lbmFibGVkID0gdHJ1ZTsK LX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9w bS5ycHM7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwotCi0JaWYgKHJwcy0+ ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0J CWNoZXJyeXZpZXdfZW5hYmxlX3JwcyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19WQUxMRVlW SUVXKGRldl9wcml2KSkgewotCQl2YWxsZXl2aWV3X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCX0g ZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7Ci0JCWdlbjlfZW5hYmxlX3Jwcyhk ZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Ci0JCWdlbjhf ZW5hYmxlX3JwcyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDYpIHsKLQkJZ2VuNl9lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElTX0lST05M QUtFX00oZGV2X3ByaXYpKSB7Ci0JCWlyb25sYWtlX2VuYWJsZV9kcnBzKGRldl9wcml2KTsKLQkJ aW50ZWxfaW5pdF9lbW9uKGRldl9wcml2KTsKLQl9Ci0KLQlXQVJOX09OKHJwcy0+bWF4X2ZyZXEg PCBycHMtPm1pbl9mcmVxKTsKLQlXQVJOX09OKHJwcy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJl cSk7Ci0KLQlXQVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPCBycHMtPm1pbl9mcmVxKTsKLQlX QVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKLQotCXJwcy0+ZW5h YmxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyogUG93ZXJzYXZpbmcgaXMgY29udHJv bGxlZCBieSB0aGUgaG9zdCB3aGVuIGluc2lkZSBhIFZNICovCi0JaWYgKGludGVsX3ZncHVfYWN0 aXZlKGRldl9wcml2KSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmd0X3Bt LnJwcy5sb2NrKTsKLQotCWlmIChIQVNfUkM2KGRldl9wcml2KSkKLQkJaW50ZWxfZW5hYmxlX3Jj NihkZXZfcHJpdik7Ci0JaWYgKEhBU19SUFMoZGV2X3ByaXYpKQotCQlpbnRlbF9lbmFibGVfcnBz KGRldl9wcml2KTsKLQlpZiAoSEFTX0xMQyhkZXZfcHJpdikpCi0JCWludGVsX2VuYWJsZV9sbGNf cHN0YXRlKGRldl9wcml2KTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmd0X3BtLnJwcy5s b2NrKTsKLX0KLQotc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKgotCSAqIE9uIEliZXggUGVhayBhbmQgQ291 Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKLQkgKiBnYXRpbmcgZm9yIHRoZSBw YW5lbCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRvCi0JICogc3RhcnQgdXAgd2hl biBubyBwb3J0cyBhcmUgYWN0aXZlLgotCSAqLwotCUk5MTVfV1JJVEUoU09VVEhfRFNQQ0xLX0dB VEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lk IGc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JZW51bSBwaXBlIHBpcGU7Ci0KLQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBl KSB7Ci0JCUk5MTVfV1JJVEUoRFNQQ05UUihwaXBlKSwKLQkJCSAgIEk5MTVfUkVBRChEU1BDTlRS KHBpcGUpKSB8Ci0JCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEUpOwotCi0JCUk5 MTVfV1JJVEUoRFNQU1VSRihwaXBlKSwgSTkxNV9SRUFEKERTUFNVUkYocGlwZSkpKTsKLQkJUE9T VElOR19SRUFEKERTUFNVUkYocGlwZSkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaWxrX2luaXRf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIg ZHNwY2xrX2dhdGUgPSBJTEtfVlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7Ci0KLQkvKgotCSAq IFJlcXVpcmVkIGZvciBGQkMKLQkgKiBXYUZiY0Rpc2FibGVEcGZjQ2xvY2tHYXRpbmc6aWxrCi0J ICovCi0JZHNwY2xrX2dhdGUgfD0gSUxLX0RQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAot CQkgICBJTEtfRFBGQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgSUxLX0RQRkRVTklU X0NMT0NLX0dBVEVfRU5BQkxFOwotCi0JSTkxNV9XUklURShQQ0hfM0RDR0RJUzAsCi0JCSAgIE1B UklVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIFNWU01VTklUX0NMT0NLX0dBVEVfRElT QUJMRSk7Ci0JSTkxNV9XUklURShQQ0hfM0RDR0RJUzEsCi0JCSAgIFZGTVVOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFKTsKLQotCS8qCi0JICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBmb2xsb3dp bmcgYml0cyBzaG91bGQgYmUgc2V0IGluCi0JICogb3JkZXIgdG8gZW5hYmxlIG1lbW9yeSBzZWxm LXJlZnJlc2gKLQkgKiBUaGUgYml0IDIyLzIxIG9mIDB4NDIwMDQKLQkgKiBUaGUgYml0IDUgb2Yg MHg0MjAyMAotCSAqIFRoZSBiaXQgMTUgb2YgMHg0NTAwMAotCSAqLwotCUk5MTVfV1JJVEUoSUxL X0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCSAgIChJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIp IHwKLQkJICAgIElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKSk7Ci0JZHNwY2xrX2dh dGUgfD0gSUxLX0RQQVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKLQlJOTE1X1dSSVRFKERJU1Bf QVJCX0NUTCwKLQkJICAgKEk5MTVfUkVBRChESVNQX0FSQl9DVEwpIHwKLQkJICAgIERJU1BfRkJD X1dNX0RJUykpOwotCi0JLyoKLQkgKiBCYXNlZCBvbiB0aGUgZG9jdW1lbnQgZnJvbSBoYXJkd2Fy ZSBndXlzIHRoZSBmb2xsb3dpbmcgYml0cwotCSAqIHNob3VsZCBiZSBzZXQgdW5jb25kaXRpb25h bGx5IGluIG9yZGVyIHRvIGVuYWJsZSBGQkMuCi0JICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCi0J ICogVGhlIGJpdCAyMiBvZiAweDQyMDA0Ci0JICogVGhlIGJpdCA3LDgsOSBvZiAweDQyMDIwLgot CSAqLwotCWlmIChJU19JUk9OTEFLRV9NKGRldl9wcml2KSkgewotCQkvKiBXYUZiY0FzeW5jaEZs aXBEaXNhYmxlRmJjUXVldWU6aWxrICovCi0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tF TjEsCi0JCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKLQkJCSAgIElMS19G QkNRX0RJUyk7Ci0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCQkgICBJOTE1 X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKLQkJCSAgIElMS19EUEFSQl9HQVRFKTsKLQl9 Ci0KLQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7Ci0KLQlJOTE1 X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKLQkJICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwotCUk5MTVfV1JJVEUoXzNE X0NISUNLRU4yLAotCQkgICBfM0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQgPDwgMTYgfAot CQkgICBfM0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQpOwotCi0JLyogV2FEaXNhYmxlUmVu ZGVyQ2FjaGVQaXBlbGluZWRGbHVzaDppbGsgKi8KLQlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwK LQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKENNMF9QSVBFTElORURfUkVOREVSX0ZMVVNIX0RJU0FC TEUpKTsKLQotCS8qIFdhRGlzYWJsZV9SZW5kZXJDYWNoZV9PcGVyYXRpb25hbEZsdXNoOmlsayAq LwotCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZM VVNIX0VOQUJMRSkpOwotCi0JZzR4X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKLQot CWlieF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNwdF9p bml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J aW50IHBpcGU7Ci0JdTMyIHZhbDsKLQotCS8qCi0JICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIg UG9pbnQsIHdlIG5lZWQgdG8gZGlzYWJsZSBjbG9jawotCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVs IHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZhaWwgdG8KLQkgKiBzdGFydCB1cCB3aGVuIG5v IHBvcnRzIGFyZSBhY3RpdmUuCi0JICovCi0JSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9E LCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgUENIX0RQTFVOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFIHwKLQkJICAgUENIX0NQVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwot CUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjIsIEk5MTVfUkVBRChTT1VUSF9DSElDS0VOMikgfAot CQkgICBEUExTX0VEUF9QUFNfRklYX0RJUyk7Ci0JLyogVGhlIGJlbG93IGZpeGVzIHRoZSB3ZWly ZCBkaXNwbGF5IGNvcnJ1cHRpb24sIGEgZmV3IHBpeGVscyBzaGlmdGVkCi0JICogZG93bndhcmQs IG9uIChvbmx5KSBMVkRTIG9mIHNvbWUgSFAgbGFwdG9wcyB3aXRoIElWWS4KLQkgKi8KLQlmb3Jf ZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7Ci0JCXZhbCA9IEk5MTVfUkVBRChUUkFOU19DSElD S0VOMihwaXBlKSk7Ci0JCXZhbCB8PSBUUkFOU19DSElDS0VOMl9USU1JTkdfT1ZFUlJJREU7Ci0J CXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVSU0VEOwotCQlpZiAoZGV2 X3ByaXYtPnZidC5mZGlfcnhfcG9sYXJpdHlfaW52ZXJ0ZWQpCi0JCQl2YWwgfD0gVFJBTlNfQ0hJ Q0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVSU0VEOwotCQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0ZS QU1FX1NUQVJUX0RFTEFZX01BU0s7Ci0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9E RUVQX0NPTE9SX0NPVU5URVI7Ci0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQ X0NPTE9SX01PREVTV0lUQ0g7Ci0JCUk5MTVfV1JJVEUoVFJBTlNfQ0hJQ0tFTjIocGlwZSksIHZh bCk7Ci0JfQotCS8qIFdBRFAwQ2xvY2tHYXRpbmdEaXNhYmxlICovCi0JZm9yX2VhY2hfcGlwZShk ZXZfcHJpdiwgcGlwZSkgewotCQlJOTE1X1dSSVRFKFRSQU5TX0NISUNLRU4xKHBpcGUpLAotCQkJ ICAgVFJBTlNfQ0hJQ0tFTjFfRFAwVU5JVF9HQ19ESVNBQkxFKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkIGdlbjZfY2hlY2tfbWNoX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKLXsKLQl1MzIgdG1wOwotCi0JdG1wID0gSTkxNV9SRUFEKE1DSF9TU0tQRCk7Ci0JaWYgKCh0 bXAgJiBNQ0hfU1NLUERfV00wX01BU0spICE9IE1DSF9TU0tQRF9XTTBfVkFMKQotCQlEUk1fREVC VUdfS01TKCJXcm9uZyBNQ0hfU1NLUEQgdmFsdWU6IDB4JTA4eCBUaGlzIGNhbiBjYXVzZSB1bmRl cnJ1bnMuXG4iLAotCQkJICAgICAgdG1wKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9pbml0X2Ns b2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIGRz cGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOwotCi0JSTkxNV9XUklU RShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOwotCi0JSTkxNV9XUklURShJTEtfRElT UExBWV9DSElDS0VOMiwKLQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0J CSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKLQotCS8qIFdhRGlzYWJsZUhpWlBsYW5lc1doZW5N U0FBRW5hYmxlZDpzbmIgKi8KLQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOLAotCQkgICBfTUFTS0VE X0JJVF9FTkFCTEUoXzNEX0NISUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsK LQotCS8qIFdhRGlzYWJsZV9SZW5kZXJDYWNoZV9PcGVyYXRpb25hbEZsdXNoOnNuYiAqLwotCUk5 MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VO QUJMRSkpOwotCi0JLyoKLQkgKiBCU3BlYyByZWNvb21lbmRzIDh4NCB3aGVuIE1TQUEgaXMgdXNl ZCwKLQkgKiBob3dldmVyIGluIHByYWN0aWNlIDE2eDQgc2VlbXMgZmFzdGVzdC4KLQkgKgotCSAq IE5vdGUgdGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVuZCBvbiB0aGUgV0laIGhhc2hpbmcK LQkgKiBkaXNhYmxlIGJpdCwgd2hpY2ggd2UgZG9uJ3QgdG91Y2ggaGVyZSwgYnV0IGl0J3MgZ29v ZAotCSAqIHRvIGtlZXAgaW4gbWluZCAoc2VlIDNEU1RBVEVfUFMgYW5kIDNEU1RBVEVfV00pLgot CSAqLwotCUk5MTVfV1JJVEUoR0VONl9HVF9NT0RFLAotCQkgICBfTUFTS0VEX0ZJRUxEKEdFTjZf V0laX0hBU0hJTkdfTUFTSywgR0VONl9XSVpfSEFTSElOR18xNng0KSk7Ci0KLQlJOTE1X1dSSVRF KENBQ0hFX01PREVfMCwKLQkJICAgX01BU0tFRF9CSVRfRElTQUJMRShDTTBfU1RDX0VWSUNUX0RJ U0FCTEVfTFJBX1NOQikpOwotCi0JSTkxNV9XUklURShHRU42X1VDR0NUTDEsCi0JCSAgIEk5MTVf UkVBRChHRU42X1VDR0NUTDEpIHwKLQkJICAgR0VONl9CTEJVTklUX0NMT0NLX0dBVEVfRElTQUJM RSB8Ci0JCSAgIEdFTjZfQ1NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0KLQkvKiBBY2NvcmRp bmcgdG8gdGhlIEJTcGVjIHZvbDFnLCBiaXQgMTIgKFJDUEJVTklUKSBjbG9jawotCSAqIGdhdGlu ZyBkaXNhYmxlIG11c3QgYmUgc2V0LiAgRmFpbHVyZSB0byBzZXQgaXQgcmVzdWx0cyBpbgotCSAq IGZsaWNrZXJpbmcgcGl4ZWxzIGR1ZSB0byBaIHdyaXRlIG9yZGVyaW5nIGZhaWx1cmVzIGFmdGVy Ci0JICogc29tZSBhbW91bnQgb2YgcnVudGltZSBpbiB0aGUgTWVzYSAiZmlyZSIgZGVtbywgYW5k IFVuaWdpbmUKLQkgKiBTYW5jdHVhcnkgYW5kIFRyb3BpY3MsIGFuZCBhcHBhcmVudGx5IGFueXRo aW5nIGVsc2Ugd2l0aAotCSAqIGFscGhhIHRlc3Qgb3IgcGl4ZWwgZGlzY2FyZC4KLQkgKgotCSAq IEFjY29yZGluZyB0byB0aGUgc3BlYywgYml0IDExIChSQ0NVTklUKSBtdXN0IGFsc28gYmUgc2V0 LAotCSAqIGJ1dCB3ZSBkaWRuJ3QgZGVidWcgYWN0dWFsIHRlc3RjYXNlcyB0byBmaW5kIGl0IG91 dC4KLQkgKgotCSAqIFdhRGlzYWJsZVJDQ1VuaXRDbG9ja0dhdGluZzpzbmIKLQkgKiBXYURpc2Fi bGVSQ1BCVW5pdENsb2NrR2F0aW5nOnNuYgotCSAqLwotCUk5MTVfV1JJVEUoR0VONl9VQ0dDVEwy LAotCQkgICBHRU42X1JDUEJVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIEdFTjZfUkND VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwotCi0JLyogV2FTdHJpcHNGYW5zRGlzYWJsZUZhc3RD bGlwUGVyZm9ybWFuY2VGaXg6c25iICovCi0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCi0JCSAg IF9NQVNLRURfQklUX0VOQUJMRShfM0RfQ0hJQ0tFTjNfU0ZfRElTQUJMRV9GQVNUQ0xJUF9DVUxM KSk7Ci0KLQkvKgotCSAqIEJzcGVjIHNheXM6Ci0JICogIlRoaXMgYml0IG11c3QgYmUgc2V0IGlm IDNEU1RBVEVfQ0xJUCBjbGlwIG1vZGUgaXMgc2V0IHRvIG5vcm1hbCBhbmQKLQkgKiAzRFNUQVRF X1NGIG51bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBpcyBtb3JlIHRoYW4gMTYuIgotCSAq LwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNE X0NISUNLRU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FUVFJfRkVUQ0gpKTsKLQotCS8qCi0JICog QWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUKLQkgKiBz ZXQgaW4gb3JkZXIgdG8gZW5hYmxlIG1lbW9yeSBzZWxmLXJlZnJlc2ggYW5kIGZiYzoKLQkgKiBU aGUgYml0MjEgYW5kIGJpdDIyIG9mIDB4NDIwMDAKLQkgKiBUaGUgYml0MjEgYW5kIGJpdDIyIG9m IDB4NDIwMDQKLQkgKiBUaGUgYml0NSBhbmQgYml0NyBvZiAweDQyMDIwCi0JICogVGhlIGJpdDE0 IG9mIDB4NzAxODAKLQkgKiBUaGUgYml0MTQgb2YgMHg3MTE4MAotCSAqCi0JICogV2FGYmNBc3lu Y2hGbGlwRGlzYWJsZUZiY1F1ZXVlOnNuYgotCSAqLwotCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAotCQkgICBJ TEtfRkJDUV9ESVMgfCBJTEtfUEFCU1RSRVRDSF9ESVMpOwotCUk5MTVfV1JJVEUoSUxLX0RJU1BM QVlfQ0hJQ0tFTjIsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAotCQkg ICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVMTCk7Ci0JSTkxNV9XUklURShJTEtfRFNQ Q0xLX0dBVEVfRCwKLQkJICAgSTkxNV9SRUFEKElMS19EU1BDTEtfR0FURV9EKSB8Ci0JCSAgIElM S19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEUgIHwKLQkJICAgSUxLX0RQRkRVTklUX0NMT0NL X0dBVEVfRU5BQkxFKTsKLQotCWc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7Ci0K LQljcHRfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwotCi0JZ2VuNl9jaGVja19tY2hfc2V0 dXAoZGV2X3ByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBnZW43X3NldHVwX2ZpeGVkX2Z1bmNfc2No ZWR1bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgcmVnID0g STkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01PREUpOwotCi0JLyoKLQkgKiBXYVZTVGhyZWFkRGlz cGF0Y2hPdmVycmlkZTppdmIsdmx2Ci0JICoKLQkgKiBUaGlzIGFjdHVhbGx5IG92ZXJyaWRlcyB0 aGUgZGlzcGF0Y2gKLQkgKiBtb2RlIGZvciBhbGwgdGhyZWFkIHR5cGVzLgotCSAqLwotCXJlZyAm PSB+R0VON19GRl9TQ0hFRF9NQVNLOwotCXJlZyB8PSBHRU43X0ZGX1RTX1NDSEVEX0hXOwotCXJl ZyB8PSBHRU43X0ZGX1ZTX1NDSEVEX0hXOwotCXJlZyB8PSBHRU43X0ZGX0RTX1NDSEVEX0hXOwot Ci0JSTkxNV9XUklURShHRU43X0ZGX1RIUkVBRF9NT0RFLCByZWcpOwotfQotCi1zdGF0aWMgdm9p ZCBscHRfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQorc3RhdGljIHZvaWQgbHB0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKIHsKIAkvKgogCSAqIFRPRE86IHRoaXMgYml0IHNob3VsZCBvbmx5IGJl IGVuYWJsZWQgd2hlbiByZWFsbHkgbmVlZGVkLCB0aGVuCkBAIC05NzMzLDIxNyArNzMzNCw4IEBA IHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ fQogfQogCi1zdGF0aWMgaW50IGJ5dF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4gPSB2YWwgLSAweGI3Ci0JICogU2xvdyA9IEZhc3Qg PSBHUExMIHJlZiAqIE4KLQkgKi8KLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxs X3JlZl9mcmVxICogKHZhbCAtIDB4YjcpLCAxMDAwKTsKLX0KLQotc3RhdGljIGludCBieXRfZnJl cV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQotewot CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JcmV0dXJu IERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkgKyAweGI3 OwotfQotCi1zdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4gPSB2YWwgLyAyCi0JICogQ1UgKHNsb3cpID0gQ1Uy eCAoZmFzdCkgLyAyID0gR1BMTCByZWYgKiBOIC8gMgotCSAqLwotCXJldHVybiBESVZfUk9VTkRf Q0xPU0VTVChycHMtPmdwbGxfcmVmX2ZyZXEgKiB2YWwsIDIgKiAyICogMTAwMCk7Ci19Ci0KLXN0 YXRpYyBpbnQgY2h2X2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qIENIViBuZWVkcyBldmVuIHZhbHVlcyAqLwotCXJldHVybiBESVZfUk9VTkRf Q0xPU0VTVCgyICogMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3JlZl9mcmVxKSAqIDI7Ci19Ci0KLWlu dCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2 YWwpCi17Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSLAotCQkJCQkgR0VOOV9GUkVR X1NDQUxFUik7Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBj aHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZf cHJpdikpCi0JCXJldHVybiBieXRfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQly ZXR1cm4gdmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVI7Ci19Ci0KLWludCBpbnRlbF9mcmVx X29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KHZhbCAqIEdFTjlfRlJFUV9TQ0FMRVIsCi0JCQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7 Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBjaHZfZnJlcV9v cGNvZGUoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikp Ci0JCXJldHVybiBieXRfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQlyZXR1 cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Ci19Ci0K IHZvaWQgaW50ZWxfcG1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog ewotCW11dGV4X2luaXQoJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci0JbXV0ZXhfaW5pdCgm ZGV2X3ByaXYtPmd0X3BtLnJwcy5wb3dlci5tdXRleCk7Ci0KLQlhdG9taWNfc2V0KCZkZXZfcHJp di0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzLCAwKTsKLQogCWRldl9wcml2LT5ydW50aW1lX3BtLnN1 c3BlbmRlZCA9IGZhbHNlOwogCWF0b21pY19zZXQoJmRldl9wcml2LT5ydW50aW1lX3BtLndha2Vy ZWZfY291bnQsIDApOwogfQotCi1zdGF0aWMgdTY0IHZsdl9yZXNpZGVuY3lfcmF3KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgY29uc3QgaTkxNV9yZWdfdCByZWcp Ci17Ci0JdTMyIGxvd2VyLCB1cHBlciwgdG1wOwotCWludCBsb29wID0gMjsKLQotCS8qCi0JICog VGhlIHJlZ2lzdGVyIGFjY2Vzc2VkIGRvIG5vdCBuZWVkIGZvcmNld2FrZS4gV2UgYm9ycm93Ci0J ICogdW5jb3JlIGxvY2sgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyB0byByYW5nZSByZWcu Ci0JICovCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKLQot CS8qCi0JICogdmx2IGFuZCBjaHYgcmVzaWRlbmN5IGNvdW50ZXJzIGFyZSA0MCBiaXRzIGluIHdp ZHRoLgotCSAqIFdpdGggYSBjb250cm9sIGJpdCwgd2UgY2FuIGNob29zZSBiZXR3ZWVuIHVwcGVy IG9yIGxvd2VyCi0JICogMzJiaXQgd2luZG93IGludG8gdGhpcyBjb3VudGVyLgotCSAqCi0JICog QWx0aG91Z2ggd2UgYWx3YXlzIHVzZSB0aGUgY291bnRlciBpbiBoaWdoLXJhbmdlIG1vZGUgZWxz ZXdoZXJlLAotCSAqIHVzZXJzcGFjZSBtYXkgYXR0ZW1wdCB0byByZWFkIHRoZSB2YWx1ZSBiZWZv cmUgcmM2IGlzIGluaXRpYWxpc2VkLAotCSAqIGJlZm9yZSB3ZSBoYXZlIHNldCB0aGUgZGVmYXVs dCBWTFZfQ09VTlRFUl9DT05UUk9MIHZhbHVlLiBTbyBhbHdheXMKLQkgKiBzZXQgdGhlIGhpZ2gg Yml0IHRvIGJlIHNhZmUuCi0JICovCi0JSTkxNV9XUklURV9GVyhWTFZfQ09VTlRFUl9DT05UUk9M LAotCQkgICAgICBfTUFTS0VEX0JJVF9FTkFCTEUoVkxWX0NPVU5UX1JBTkdFX0hJR0gpKTsKLQl1 cHBlciA9IEk5MTVfUkVBRF9GVyhyZWcpOwotCWRvIHsKLQkJdG1wID0gdXBwZXI7Ci0KLQkJSTkx NV9XUklURV9GVyhWTFZfQ09VTlRFUl9DT05UUk9MLAotCQkJICAgICAgX01BU0tFRF9CSVRfRElT QUJMRShWTFZfQ09VTlRfUkFOR0VfSElHSCkpOwotCQlsb3dlciA9IEk5MTVfUkVBRF9GVyhyZWcp OwotCi0JCUk5MTVfV1JJVEVfRlcoVkxWX0NPVU5URVJfQ09OVFJPTCwKLQkJCSAgICAgIF9NQVNL RURfQklUX0VOQUJMRShWTFZfQ09VTlRfUkFOR0VfSElHSCkpOwotCQl1cHBlciA9IEk5MTVfUkVB RF9GVyhyZWcpOwotCX0gd2hpbGUgKHVwcGVyICE9IHRtcCAmJiAtLWxvb3ApOwotCi0JLyoKLQkg KiBFdmVyeXdoZXJlIGVsc2Ugd2UgYWx3YXlzIHVzZSBWTFZfQ09VTlRFUl9DT05UUk9MIHdpdGgg dGhlCi0JICogVkxWX0NPVU5UX1JBTkdFX0hJR0ggYml0IHNldCAtIHNvIGl0IGlzIHNhZmUgdG8g bGVhdmUgaXQgc2V0Ci0JICogbm93LgotCSAqLwotCi0JcmV0dXJuIGxvd2VyIHwgKHU2NCl1cHBl ciA8PCA4OwotfQotCi11NjQgaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBjb25zdCBpOTE1X3JlZ190IHJlZykKLXsKLQlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKLQl1NjQgdGltZV9o dywgcHJldl9odywgb3ZlcmZsb3dfaHc7Ci0JdW5zaWduZWQgaW50IGZ3X2RvbWFpbnM7Ci0JdW5z aWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgbXVsLCBkaXY7Ci0KLQlp ZiAoIUhBU19SQzYoZGV2X3ByaXYpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogU3RvcmUgcHJl dmlvdXMgaHcgY291bnRlciB2YWx1ZXMgZm9yIGNvdW50ZXIgd3JhcC1hcm91bmQgaGFuZGxpbmcu Ci0JICoKLQkgKiBUaGVyZSBhcmUgb25seSBmb3VyIGludGVyZXN0aW5nIHJlZ2lzdGVycyBhbmQg dGhleSBsaXZlIG5leHQgdG8gZWFjaAotCSAqIG90aGVyIHNvIHdlIGNhbiB1c2UgdGhlIHJlbGF0 aXZlIGFkZHJlc3MsIGNvbXBhcmVkIHRvIHRoZSBzbWFsbGVzdAotCSAqIG9uZSBhcyB0aGUgaW5k ZXggaW50byBkcml2ZXIgc3RvcmFnZS4KLQkgKi8KLQlpID0gKGk5MTVfbW1pb19yZWdfb2Zmc2V0 KHJlZykgLQotCSAgICAgaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VONl9HVF9HRlhfUkM2X0xPQ0tF RCkpIC8gc2l6ZW9mKHUzMik7Ci0JaWYgKFdBUk5fT05fT05DRShpID49IEFSUkFZX1NJWkUoZGV2 X3ByaXYtPmd0X3BtLnJjNi5jdXJfcmVzaWRlbmN5KSkpCi0JCXJldHVybiAwOwotCi0JZndfZG9t YWlucyA9IGludGVsX3VuY29yZV9mb3JjZXdha2VfZm9yX3JlZyh1bmNvcmUsIHJlZywgRldfUkVH X1JFQUQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVuY29yZS0+bG9jaywgZmxhZ3MpOwotCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0X19sb2NrZWQodW5jb3JlLCBmd19kb21haW5zKTsKLQot CS8qIE9uIFZMViBhbmQgQ0hWLCByZXNpZGVuY3kgdGltZSBpcyBpbiBDWiB1bml0cyByYXRoZXIg dGhhbiAxLjI4dXMgKi8KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpIHsKLQkJbXVsID0gMTAwMDAwMDsKLQkJZGl2ID0gZGV2X3ByaXYtPmN6 Y2xrX2ZyZXE7Ci0JCW92ZXJmbG93X2h3ID0gQklUX1VMTCg0MCk7Ci0JCXRpbWVfaHcgPSB2bHZf cmVzaWRlbmN5X3JhdyhkZXZfcHJpdiwgcmVnKTsKLQl9IGVsc2UgewotCQkvKiA4MzMuMzNucyB1 bml0cyBvbiBHZW45TFAsIDEuMjh1cyBlbHNld2hlcmUuICovCi0JCWlmIChJU19HRU45X0xQKGRl dl9wcml2KSkgewotCQkJbXVsID0gMTAwMDA7Ci0JCQlkaXYgPSAxMjsKLQkJfSBlbHNlIHsKLQkJ CW11bCA9IDEyODA7Ci0JCQlkaXYgPSAxOwotCQl9Ci0KLQkJb3ZlcmZsb3dfaHcgPSBCSVRfVUxM KDMyKTsKLQkJdGltZV9odyA9IGludGVsX3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgcmVnKTsKLQl9 Ci0KLQkvKgotCSAqIENvdW50ZXIgd3JhcCBoYW5kbGluZy4KLQkgKgotCSAqIEJ1dCByZWx5aW5n IG9uIGEgc3VmZmljaWVudCBmcmVxdWVuY3kgb2YgcXVlcmllcyBvdGhlcndpc2UgY291bnRlcnMK LQkgKiBjYW4gc3RpbGwgd3JhcC4KLQkgKi8KLQlwcmV2X2h3ID0gZGV2X3ByaXYtPmd0X3BtLnJj Ni5wcmV2X2h3X3Jlc2lkZW5jeVtpXTsKLQlkZXZfcHJpdi0+Z3RfcG0ucmM2LnByZXZfaHdfcmVz aWRlbmN5W2ldID0gdGltZV9odzsKLQotCS8qIFJDNiBkZWx0YSBmcm9tIGxhc3Qgc2FtcGxlLiAq LwotCWlmICh0aW1lX2h3ID49IHByZXZfaHcpCi0JCXRpbWVfaHcgLT0gcHJldl9odzsKLQllbHNl Ci0JCXRpbWVfaHcgKz0gb3ZlcmZsb3dfaHcgLSBwcmV2X2h3OwotCi0JLyogQWRkIGRlbHRhIHRv IFJDNiBleHRlbmRlZCByYXcgZHJpdmVyIGNvcHkuICovCi0JdGltZV9odyArPSBkZXZfcHJpdi0+ Z3RfcG0ucmM2LmN1cl9yZXNpZGVuY3lbaV07Ci0JZGV2X3ByaXYtPmd0X3BtLnJjNi5jdXJfcmVz aWRlbmN5W2ldID0gdGltZV9odzsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0X19sb2Nr ZWQodW5jb3JlLCBmd19kb21haW5zKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bmNvcmUt PmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBtdWxfdTY0X3UzMl9kaXYodGltZV9odywgbXVsLCBk aXYpOwotfQotCi11NjQgaW50ZWxfcmM2X3Jlc2lkZW5jeV91cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCi0JCQkgICBpOTE1X3JlZ190IHJlZykKLXsKLQlyZXR1cm4gRElWX1JP VU5EX1VQX1VMTChpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGRldl9wcml2LCByZWcpLCAxMDAwKTsK LX0KLQotdTMyIGludGVsX2dldF9jYWdmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdTMyIHJwc3RhdCkKLXsKLQl1MzIgY2FnZjsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDkpCi0JCWNhZ2YgPSAocnBzdGF0ICYgR0VOOV9DQUdGX01BU0spID4+IEdFTjlfQ0FHRl9T SElGVDsKLQllbHNlIGlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2 X3ByaXYpKQotCQljYWdmID0gKHJwc3RhdCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NI SUZUOwotCWVsc2UKLQkJY2FnZiA9IChycHN0YXQgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9D QUdGX1NISUZUOwotCi0JcmV0dXJuICBjYWdmOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmgKaW5k ZXggZTM1NzNlMWUxNmUzLi5iNTZlNjI4NWQxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaApA QCAtMjksMTYgKzI5LDYgQEAgdm9pZCBpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0Yyk7CiB2b2lkIGludGVsX2luaXRfcG0oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKIHZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmdfaG9va3Moc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaW50ZWxfcG1fc2V0dXAoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZ3B1X2lwc19pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2dwdV9pcHNfdGVh cmRvd24odm9pZCk7Ci12b2lkIGludGVsX2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2NsZWFudXBfZ3RfcG93ZXJzYXZlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX3Nhbml0aXplX2d0 X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRl bF9lbmFibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 Ci12b2lkIGludGVsX2Rpc2FibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Ci12b2lkIGdlbjZfcnBzX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsKLXZvaWQgZ2VuNl9ycHNfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwotdm9pZCBnZW42X3Jwc19ib29zdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7 CiB2b2lkIGc0eF93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKIHZvaWQgdmx2X3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogdm9pZCBpbGtfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CkBAIC03MCwyMSArNjAsNiBAQCBpbnQgc2tsX2NoZWNrX3BpcGVfbWF4 X3BpeGVsX3JhdGUoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiB2b2lkIGludGVsX2lu aXRfaXBjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2Vu YWJsZV9pcGMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAotaW50IGludGVs X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCk7Ci1p bnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBp bnQgdmFsKTsKLXU2NCBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgaTkxNV9yZWdfdCByZWcpOwotdTY0IGludGVsX3JjNl9yZXNpZGVuY3lf dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpOTE1X3JlZ190IHJlZyk7Ci0K LXUzMiBpbnRlbF9nZXRfY2FnZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUz MiBycHN0YXQxKTsKLQotdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci11bnNpZ25lZCBsb25nIGk5MTVfbWNoX3ZhbChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdW5zaWduZWQgbG9uZyBpOTE1X2dmeF92 YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaTkxNV91cGRhdGVf Z2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotCi1ib29sIGlyb25s YWtlX3NldF9kcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKTsK LWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTgg dmFsKTsKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUpOwogYm9vbCBpbnRlbF9zZXRfbWVtb3J5X2N4 c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSk7CiAKICNl bmRpZiAvKiBfX0lOVEVMX1BNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCmluZGV4IGZkNGNjNDgwOWViOC4uNmY3YjZiMDc4M2E3 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2 aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2Rldmlj ZS5jCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKm1vY2tfZ2Vt X2RldmljZSh2b2lkKQogCUlOSVRfREVMQVlFRF9XT1JLKCZpOTE1LT5nZW0ucmV0aXJlX3dvcmss IG1vY2tfcmV0aXJlX3dvcmtfaGFuZGxlcik7CiAJSU5JVF9XT1JLKCZpOTE1LT5nZW0uaWRsZV93 b3JrLCBtb2NrX2lkbGVfd29ya19oYW5kbGVyKTsKIAotCWk5MTUtPmd0LmF3YWtlID0gdHJ1ZTsK KwlpOTE1LT5ndC5hd2FrZSA9IC0xOwogCiAJaW50ZWxfdGltZWxpbmVzX2luaXQoaTkxNSk7CiAK LS0gCjIuMjIuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4