From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andi Shyti Subject: [PATCH v2 1/2] drm/i915: Extract GT render power state management Date: Wed, 23 Oct 2019 12:50:00 +0300 Message-ID: <20191023095000.3782-1-andi.shyti@intel.com> References: <20191023093821.3350-1-andi.shyti@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 61FD86EA19 for ; Wed, 23 Oct 2019 09:50:09 +0000 (UTC) In-Reply-To: <20191023093821.3350-1-andi.shyti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel GFX List-Id: intel-gfx@lists.freedesktop.org aTkxNV9pcnEuYyBpcyBsYXJnZS4gT25lIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGhhcyBhIGxh cmdlIGNodW5rIG9mCnRoZSBHVCByZW5kZXIgcG93ZXIgbWFuYWdlbWVudCBzdGFzaGVkIGF3YXkg aW4gaXQuIEV4dHJhY3QgdGhhdCBsb2dpYwpvdXQgb2YgaTkxNV9pcnEuYyBhbmQgaW50ZWxfcG0u YyBhbmQgcHV0IGl0IHVuZGVyIG9uZSByb29mLgoKQmFzZWQgb24gYSBwYXRjaCBieSBDaHJpcyBX aWxzb24uCgpTaWduZWQtb2ZmLWJ5OiBBbmRpIFNoeXRpIDxhbmRpLnNoeXRpQGludGVsLmNvbT4K Q2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8ICAgIDggKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgICAgICAgICAgICB8ICAgIDYgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMgICAgICAgICB8ICAgNDkgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmggICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaCAgICAgIHwgICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAgfCAgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyAgICAgICAgICAgfCAxODcyICsrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmggICAgICAgICAgIHwgICAzNyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaCAgICAgfCAgIDkzICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jICAgICAgICB8ICAgIDcgKy0K IC4uLi9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyB8ICAgIDQgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAgNzMgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgIDIgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5NiAtCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCAgICAzICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgMzU5ICstLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaCAgICAgICAgICAgICAgIHwgICAgMyAtCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgICAgICAgfCAgIDEwICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgICAgICAgfCAgICA3ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMgICAgICAgICAgICAgfCAgIDc0ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgICAgICAgICAgfCAyMTA1ICsrLS0t LS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oICAgICAgICAgICAg ICAgfCAgIDIyIC0KIDI0IGZpbGVzIGNoYW5nZWQsIDIzNTkgaW5zZXJ0aW9ucygrKSwgMjQ4NCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ycHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3Jwcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfcnBzX3R5cGVzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDJmZDRiZWQxODhlNS4uMTMz Y2E1OWU3YzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtOTAsMTEgKzkwLDEyIEBAIGd0LXkg Kz0gXAogCWd0L2ludGVsX2hhbmdjaGVjay5vIFwKIAlndC9pbnRlbF9sbGMubyBcCiAJZ3QvaW50 ZWxfbHJjLm8gXAorCWd0L2ludGVsX21vY3MubyBcCiAJZ3QvaW50ZWxfcmM2Lm8gXAogCWd0L2lu dGVsX3JlbmRlcnN0YXRlLm8gXAogCWd0L2ludGVsX3Jlc2V0Lm8gXAogCWd0L2ludGVsX3Jpbmdi dWZmZXIubyBcCi0JZ3QvaW50ZWxfbW9jcy5vIFwKKwlndC9pbnRlbF9ycHMubyBcCiAJZ3QvaW50 ZWxfc3NldS5vIFwKIAlndC9pbnRlbF90aW1lbGluZS5vIFwKIAlndC9pbnRlbF93b3JrYXJvdW5k cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4 IDIzNmZkZjEyMmU0Ny4uNDljMmM3ZjcxMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgImRpc3Bs YXkvaW50ZWxfdHYuaCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3Zkc2MuaCIKIAorI2luY2x1 ZGUgImd0L2ludGVsX3Jwcy5oIgorCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJp OTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfYWNwaS5oIgpAQCAtMTQ3ODIsNyArMTQ3ODQs NyBAQCBzdGF0aWMgaW50IGRvX3Jwc19ib29zdChzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqX3dh aXQsCiAJICogdmJsYW5rIHdpdGhvdXQgb3VyIGludGVydmVudGlvbiwgc28gbGVhdmUgUlBTIGFs b25lLgogCSAqLwogCWlmICghaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpKQotCQlnZW42X3Jwc19i b29zdChycSk7CisJCWludGVsX3Jwc19ib29zdChycSk7CiAJaTkxNV9yZXF1ZXN0X3B1dChycSk7 CiAKIAlkcm1fY3J0Y192YmxhbmtfcHV0KHdhaXQtPmNydGMpOwpAQCAtMTQ5NzYsNyArMTQ5Nzgs NyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCSAq IG1heGltdW0gY2xvY2tzIGZvbGxvd2luZyBhIHZibGFuayBtaXNzIChzZWUgZG9fcnBzX2Jvb3N0 KCkpLgogCSAqLwogCWlmICghaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFjdGl2ZSkgewotCQlpbnRl bF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgdHJ1ZSk7CisJCWludGVsX3Jwc19tYXJr X2ludGVyYWN0aXZlKCZkZXZfcHJpdi0+Z3QucnBzLCB0cnVlKTsKIAkJaW50ZWxfc3RhdGUtPnJw c19pbnRlcmFjdGl2ZSA9IHRydWU7CiAJfQogCkBAIC0xNTAwMSw3ICsxNTAwMyw3IEBAIGludGVs X2NsZWFudXBfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ZGV2KTsKIAogCWlmIChpbnRl bF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlKSB7Ci0JCWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZl KGRldl9wcml2LCBmYWxzZSk7CisJCWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKCZkZXZfcHJp di0+Z3QucnBzLCBmYWxzZSk7CiAJCWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSBmYWxz ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCmluZGV4IDFjNGI2Yzk2NDJhZC4u NzUxODg1MmNiNzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKQEAgLTksNiArOSw3 IEBACiAjaW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKICNpbmNsdWRlICJpbnRlbF9tb2Nz LmgiCiAjaW5jbHVkZSAiaW50ZWxfcmM2LmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAjaW5j bHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAjaW5jbHVkZSAiaW50ZWxfcG0uaCIKIApAQCAtMzIxLDgg KzMyMiw3IEBAIHZvaWQgaW50ZWxfZ3RfY2hpcHNldF9mbHVzaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQogCiB2b2lkIGludGVsX2d0X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQog ewotCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKQotCQlpbnRlbF9ncHVfaXBzX2luaXQoZ3QtPmk5 MTUpOworCWludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoJmd0LT5ycHMpOwogfQogCiBzdGF0aWMg aW50IGludGVsX2d0X2luaXRfc2NyYXRjaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1bnNpZ25lZCBp bnQgc2l6ZSkKQEAgLTM4NSw3ICszODUsNyBAQCB2b2lkIGludGVsX2d0X2RyaXZlcl9yZW1vdmUo c3RydWN0IGludGVsX2d0ICpndCkKIAogdm9pZCBpbnRlbF9ndF9kcml2ZXJfdW5yZWdpc3Rlcihz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQogewotCWludGVsX2dwdV9pcHNfdGVhcmRvd24oKTsKKwlpbnRl bF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoJmd0LT5ycHMpOwogfQogCiB2b2lkIGludGVsX2d0X2Ry aXZlcl9yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0X2lycS5jCmluZGV4IDM0YTRmYjYyNGJmNy4uOTczZWU3ZWRlZDY0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUg ImludGVsX2d0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCiAjaW5jbHVkZSAiaW50ZWxf dW5jb3JlLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAKIHN0YXRpYyB2b2lkIGd1Y19pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUxNiBpaXIpCiB7CkBAIC03Nyw3ICs3OCw3 IEBAIGdlbjExX290aGVyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGNvbnN0IHU4 IGluc3RhbmNlLAogCQlyZXR1cm4gZ3VjX2lycV9oYW5kbGVyKCZndC0+dWMuZ3VjLCBpaXIpOwog CiAJaWYgKGluc3RhbmNlID09IE9USEVSX0dUUE1fSU5TVEFOQ0UpCi0JCXJldHVybiBnZW4xMV9y cHNfaXJxX2hhbmRsZXIoZ3QsIGlpcik7CisJCXJldHVybiBnZW4xMV9ycHNfaXJxX2hhbmRsZXIo Jmd0LT5ycHMsIGlpcik7CiAKIAlXQVJOX09OQ0UoMSwgInVuaGFuZGxlZCBvdGhlciBpbnRlcnJ1 cHQgaW5zdGFuY2U9MHgleCwgaWlyPTB4JXhcbiIsCiAJCSAgaW5zdGFuY2UsIGlpcik7CkBAIC0z MzYsNyArMzM3LDcgQEAgdm9pZCBnZW44X2d0X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIHUzMiBtYXN0ZXJfY3RsLCB1MzIgZ3RfaWlyWzRdKQogCX0KIAogCWlmIChtYXN0ZXJfY3Rs ICYgKEdFTjhfR1RfUE1fSVJRIHwgR0VOOF9HVF9HVUNfSVJRKSkgewotCQlnZW42X3Jwc19pcnFf aGFuZGxlcihndC0+aTkxNSwgZ3RfaWlyWzJdKTsKKwkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmd0 LT5ycHMsIGd0X2lpclsyXSk7CiAJCWd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgZ3RfaWly WzJdID4+IDE2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwppbmRl eCAwNmU3M2Q1NmNmY2YuLjMyY2E4NzI2NTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5jCkBAIC0xMiw4ICsxMiwxMCBAQAogI2luY2x1ZGUgImludGVsX2d0LmgiCiAjaW5j bHVkZSAiaW50ZWxfZ3RfcG0uaCIKICNpbmNsdWRlICJpbnRlbF9ndF9yZXF1ZXN0cy5oIgorI2lu Y2x1ZGUgImludGVsX2xsYy5oIgogI2luY2x1ZGUgImludGVsX3BtLmgiCiAjaW5jbHVkZSAiaW50 ZWxfcmM2LmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiaW50ZWxfd2FrZXJl Zi5oIgogCiBzdGF0aWMgaW50IF9fZ3RfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikK QEAgLTM5LDEyICs0MSw4IEBAIHN0YXRpYyBpbnQgX19ndF91bnBhcmsoc3RydWN0IGludGVsX3dh a2VyZWYgKndmKQogCWd0LT5hd2FrZSA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBP V0VSX0RPTUFJTl9HVF9JUlEpOwogCUdFTV9CVUdfT04oIWd0LT5hd2FrZSk7CiAKLQlpbnRlbF9l bmFibGVfZ3RfcG93ZXJzYXZlKGk5MTUpOwotCi0JaTkxNV91cGRhdGVfZ2Z4X3ZhbChpOTE1KTsK LQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCi0JCWdlbjZfcnBzX2J1c3koaTkxNSk7Ci0KKwlp bnRlbF9ycHNfdW5wYXJrKCZndC0+cnBzKTsKKwlpbnRlbF9sbGNfZW5hYmxlKCZndC0+bGxjKTsK IAlpOTE1X3BtdV9ndF91bnBhcmtlZChpOTE1KTsKIAogCWludGVsX2d0X3F1ZXVlX2hhbmdjaGVj ayhndCk7CkBAIC02NSw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgX19ndF9wYXJrKHN0cnVjdCBpbnRl bF93YWtlcmVmICp3ZikKIAogCWk5MTVfdm1hX3BhcmtlZChndCk7CiAJaTkxNV9wbXVfZ3RfcGFy a2VkKGk5MTUpOwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKLQkJZ2VuNl9ycHNfaWRsZShp OTE1KTsKKwlpbnRlbF9sbGNfZGlzYWJsZSgmZ3QtPmxsYyk7CisJaW50ZWxfcnBzX3BhcmsoJmd0 LT5ycHMpOwogCiAJLyogRXZlcnl0aGluZyBzd2l0Y2hlZCBvZmYsIGZsdXNoIGFueSByZXNpZHVh bCBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCiAJaW50ZWxfc3luY2hyb25pemVfaXJxKGk5MTUp OwpAQCAtOTgsNiArOTYsNyBAQCB2b2lkIGludGVsX2d0X3BtX2luaXQoc3RydWN0IGludGVsX2d0 ICpndCkKIAkgKiB1c2VyLgogCSAqLwogCWludGVsX3JjNl9pbml0KCZndC0+cmM2KTsKKwlpbnRl bF9ycHNfaW5pdCgmZ3QtPnJwcyk7CiB9CiAKIHN0YXRpYyBib29sIHJlc2V0X2VuZ2luZXMoc3Ry dWN0IGludGVsX2d0ICpndCkKQEAgLTE0MSwxMCArMTQwLDM5IEBAIHZvaWQgaW50ZWxfZ3Rfc2Fu aXRpemUoc3RydWN0IGludGVsX2d0ICpndCwgYm9vbCBmb3JjZSkKIAkJCWVuZ2luZS0+cmVzZXQu ZmluaXNoKGVuZ2luZSk7CiB9CiAKK3ZvaWQgaW50ZWxfZ3RfcG1fZW5hYmxlKHN0cnVjdCBpbnRl bF9ndCAqZ3QpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0gaW50 ZWxfZW5naW5lX2lkIGlkOworCisJLyogUG93ZXJzYXZpbmcgaXMgY29udHJvbGxlZCBieSB0aGUg aG9zdCB3aGVuIGluc2lkZSBhIFZNICovCisJaWYgKGludGVsX3ZncHVfYWN0aXZlKGd0LT5pOTE1 KSkKKwkJcmV0dXJuOworCisJaWYgKGlzX21vY2tfZ3QoZ3QpKQorCQlyZXR1cm47CisKKwlpbnRl bF9ndF9wbV9nZXQoZ3QpOworCWludGVsX3Jwc19lbmFibGUoJmd0LT5ycHMpOworCWludGVsX2xs Y19lbmFibGUoJmd0LT5sbGMpOworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QtPmk5MTUs IGlkKSB7CisJCWludGVsX2VuZ2luZV9wbV9nZXQoZW5naW5lKTsKKwkJZW5naW5lLT5zZXJpYWwr KzsgLyogZm9yY2Uga2VybmVsIGNvbnRleHQgcmVsb2FkICovCisJCWludGVsX2VuZ2luZV9wbV9w dXQoZW5naW5lKTsKKwl9CisKKwlpbnRlbF9ndF9wbV9wdXQoZ3QpOworfQorCiB2b2lkIGludGVs X2d0X3BtX2Rpc2FibGUoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlpZiAoIWlzX21vY2tfZ3Qo Z3QpKQotCQlpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoZ3QtPmk5MTUpOworCWlmIChpc19t b2NrX2d0KGd0KSkKKwkJcmV0dXJuOworCisJaW50ZWxfcmM2X2Rpc2FibGUoJmd0LT5yYzYpOwor CWludGVsX2xsY19kaXNhYmxlKCZndC0+bGxjKTsKKwlpbnRlbF9ycHNfZGlzYWJsZSgmZ3QtPnJw cyk7CiB9CiAKIHZvaWQgaW50ZWxfZ3RfcG1fZmluaShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQpAQCAt MTY1LDYgKzE5Myw3IEBAIGludCBpbnRlbF9ndF9yZXN1bWUoc3RydWN0IGludGVsX2d0ICpndCkK IAkgKiBhbGxvd2luZyB1cyB0byBmaXh1cCB0aGUgdXNlciBjb250ZXh0cyBvbiB0aGVpciBmaXJz dCBwaW4uCiAJICovCiAJaW50ZWxfZ3RfcG1fZ2V0KGd0KTsKKwogCWludGVsX3VuY29yZV9mb3Jj ZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwogCWludGVsX3JjNl9zYW5pdGl6 ZSgmZ3QtPnJjNik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oCmluZGV4IDBl ZDg3ZGE0YmI2OC4uZGY1MGY4NTM3NDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9wbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0 X3BtLmgKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3RfcG1fd2Fp dF9mb3JfaWRsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogdm9pZCBpbnRlbF9ndF9wbV9pbml0X2Vh cmx5KHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBp bnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9ndCAq Z3QpOwordm9pZCBpbnRlbF9ndF9wbV9lbmFibGUoc3RydWN0IGludGVsX2d0ICpndCk7CiB2b2lk IGludGVsX2d0X3BtX2Zpbmkoc3RydWN0IGludGVsX2d0ICpndCk7CiAKIHZvaWQgaW50ZWxfZ3Rf c2FuaXRpemUoc3RydWN0IGludGVsX2d0ICpndCwgYm9vbCBmb3JjZSk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAppbmRleCA5ODA5NzNlNjZlN2YuLmU0YmQyM2ViODI5 MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oCkBAIC0yMCw2ICsy MCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfbGxjX3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVz ZXRfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9yYzZfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRl bF9ycHNfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCiAKIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlOwpAQCAtODIsNiArODMsNyBAQCBzdHJ1Y3QgaW50ZWxfZ3QgewogCiAJc3Ry dWN0IGludGVsX2xsYyBsbGM7CiAJc3RydWN0IGludGVsX3JjNiByYzY7CisJc3RydWN0IGludGVs X3JwcyBycHM7CiAKIAlrdGltZV90IGxhc3RfaW5pdF90aW1lOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xsYy5jCmluZGV4IDM1MDkzZWI1ZjI0ZS4uY2ViNzg1Yjc1YzI1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9sbGMuYwpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgYm9vbCBnZXRf aWFfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9sbGMgKmxsYywKIAkJCSAgICAgc3RydWN0IGlhX2Nv bnN0YW50cyAqY29uc3RzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbGxj X3RvX2d0KGxsYyktPmk5MTU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUtPmd0X3Bt LnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmbGxjX3RvX2d0KGxsYyktPnJwczsKIAog CWlmIChycHMtPm1heF9mcmVxIDw9IHJwcy0+bWluX2ZyZXEpCiAJCXJldHVybiBmYWxzZTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4zMGY1NmM3ODY0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ycHMuYwpAQCAtMCwwICsxLDE4NzIgQEAKKy8qCisgKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9n dC5oIgorI2luY2x1ZGUgImludGVsX2d0X2lycS5oIgorI2luY2x1ZGUgImludGVsX2d0X3BtX2ly cS5oIgorI2luY2x1ZGUgImludGVsX3Jwcy5oIgorI2luY2x1ZGUgImludGVsX3NpZGViYW5kLmgi CisjaW5jbHVkZSAiLi4vLi4vLi4vcGxhdGZvcm0veDg2L2ludGVsX2lwcy5oIgorCisvKgorICog TG9jayBwcm90ZWN0aW5nIElQUyByZWxhdGVkIGRhdGEgc3RydWN0dXJlcworICovCitzdGF0aWMg REVGSU5FX1NQSU5MT0NLKG1jaGRldl9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBpbnRlbF9ndCAq cnBzX3RvX2d0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KHJwcywgc3RydWN0IGludGVsX2d0LCBycHMpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKnJwc190b19pOTE1KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4g cnBzX3RvX2d0KHJwcyktPmk5MTU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfdW5jb3JlICpy cHNfdG9fdW5jb3JlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4gcnBzX3RvX2d0 KHJwcyktPnVuY29yZTsKK30KKworc3RhdGljIHUzMiBycHNfcG1fc2FuaXRpemVfbWFzayhzdHJ1 Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBtYXNrKQoreworCXJldHVybiBtYXNrICYgfnJwcy0+cG1f aW50cm1za19tYno7Cit9CisKK3N0YXRpYyB1MzIgcnBzX3BtX21hc2soc3RydWN0IGludGVsX3Jw cyAqcnBzLCB1OCB2YWwpCit7CisJdTMyIG1hc2sgPSAwOworCisJLyogV2UgdXNlIFVQX0VJX0VY UElSRUQgaW50ZXJydXB0cyBmb3IgYm90aCB1cC9kb3duIGluIG1hbnVhbCBtb2RlICovCisJaWYg KHZhbCA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQltYXNrIHw9IChHRU42X1BNX1JQX1VQ X0VJX0VYUElSRUQgfAorCQkJIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfAorCQkJIEdFTjZf UE1fUlBfRE9XTl9USU1FT1VUKTsKKworCWlmICh2YWwgPCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCkKKwkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX1RI UkVTSE9MRDsKKworCW1hc2sgJj0gcnBzLT5wbV9ldmVudHM7CisKKwlyZXR1cm4gcnBzX3BtX3Nh bml0aXplX21hc2socnBzLCB+bWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIHJwc19yZXNldF9laShz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJbWVtc2V0KCZycHMtPmVpLCAwLCBzaXplb2YocnBz LT5laSkpOworfQorCitzdGF0aWMgdm9pZCBycHNfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsK KworCXJwc19yZXNldF9laShycHMpOworCisJaWYgKElTX1ZBTExFWVZJRVcoZ3QtPmk5MTUpKQor CQkvKiBXYUdzdlJDMFJlc2lkZW5jeU1ldGhvZDp2bHYgKi8KKwkJcnBzLT5wbV9ldmVudHMgPSBH RU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7CisJZWxzZQorCQlycHMtPnBtX2V2ZW50cyA9IChHRU42 X1BNX1JQX1VQX1RIUkVTSE9MRCB8CisJCQkJICBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwK KwkJCQkgIEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5p cnFfbG9jayk7CisJZ2VuNl9ndF9wbV9lbmFibGVfaXJxKGd0LCBycHMtPnBtX2V2ZW50cyk7CisJ c3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKGd0 LT51bmNvcmUsIEdFTjZfUE1JTlRSTVNLLAorCQkJICAgcnBzX3BtX21hc2socnBzLCBycHMtPmN1 cl9mcmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCWdlbjZfZ3RfcG1fcmVzZXRfaWlyKHJwc190b19ndChy cHMpLCBHRU42X1BNX1JQU19FVkVOVFMpOworfQorCitzdGF0aWMgdm9pZCBnZW4xMV9ycHNfcmVz ZXRfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJd2hpbGUgKGdlbjExX2d0 X3Jlc2V0X29uZV9paXIocnBzX3RvX2d0KHJwcyksIDAsIEdFTjExX0dUUE0pKQorCQk7Cit9CisK K3N0YXRpYyB2b2lkIHJwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwlzcGluX2xvY2tf aXJxKCZndC0+aXJxX2xvY2spOworCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExKQorCQln ZW4xMV9ycHNfcmVzZXRfaW50ZXJydXB0cyhycHMpOworCWVsc2UKKwkJZ2VuNl9ycHNfcmVzZXRf aW50ZXJydXB0cyhycHMpOworCisJcnBzLT5wbV9paXIgPSAwOworCXNwaW5fdW5sb2NrX2lycSgm Z3QtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcnBzX2Rpc2FibGVfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19n dChycHMpOworCisJcnBzLT5wbV9ldmVudHMgPSAwOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKGd0 LT51bmNvcmUsIEdFTjZfUE1JTlRSTVNLLAorCQkJICAgcnBzX3BtX3Nhbml0aXplX21hc2socnBz LCB+MHUpKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ2VuNl9ndF9wbV9k aXNhYmxlX2lycShndCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKKwlzcGluX3VubG9ja19pcnEoJmd0 LT5pcnFfbG9jayk7CisKKwlpbnRlbF9zeW5jaHJvbml6ZV9pcnEoZ3QtPmk5MTUpOworCisJLyoK KwkgKiBOb3cgdGhhdCB3ZSB3aWxsIG5vdCBiZSBnZW5lcmF0aW5nIGFueSBtb3JlIHdvcmssIGZs dXNoIGFueQorCSAqIG91dHN0YW5kaW5nIHRhc2tzLiBBcyB3ZSBhcmUgY2FsbGVkIG9uIHRoZSBS UFMgaWRsZSBwYXRoLAorCSAqIHdlIHdpbGwgcmVzZXQgdGhlIEdQVSB0byBtaW5pbXVtIGZyZXF1 ZW5jaWVzLCBzbyB0aGUgY3VycmVudAorCSAqIHN0YXRlIG9mIHRoZSB3b3JrZXIgY2FuIGJlIGRp c2NhcmRlZC4KKwkgKi8KKwljYW5jZWxfd29ya19zeW5jKCZycHMtPndvcmspOworCisJcnBzX3Jl c2V0X2ludGVycnVwdHMocnBzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsK Kwl1MTYgaTsKKwl1MTYgdDsKKwl1MTYgbTsKKwl1MTYgYzsKK30gY3BhcmFtc1tdID0geworCXsg MSwgMTMzMywgMzAxLCAyODY2NCB9LAorCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAorCXsgMSwg ODAwLCAyOTQsIDI1MTkyIH0sCisJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCisJeyAwLCAxMDY2 LCAyNzYsIDI3NjA1IH0sCisJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKK307CisKK3N0YXRpYyB2 b2lkIGdlbjVfcnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwlzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTggZm1heCwgZm1pbiwgZnN0YXJ0 OworCXUzMiByZ3Ztb2RlY3RsOworCWludCBjX20sIGk7CisKKwlpZiAoaTkxNS0+ZnNiX2ZyZXEg PD0gMzIwMCkKKwkJY19tID0gMDsKKwllbHNlIGlmIChpOTE1LT5mc2JfZnJlcSA8PSA0ODAwKQor CQljX20gPSAxOworCWVsc2UKKwkJY19tID0gMjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGNwYXJhbXMpOyBpKyspIHsKKwkJaWYgKGNwYXJhbXNbaV0uaSA9PSBjX20gJiYgY3BhcmFt c1tpXS50ID09IGk5MTUtPm1lbV9mcmVxKSB7CisJCQlycHMtPmlwcy5tID0gY3BhcmFtc1tpXS5t OworCQkJcnBzLT5pcHMuYyA9IGNwYXJhbXNbaV0uYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ cmd2bW9kZWN0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNTU9ERUNUTCk7CisKKwkv KiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLworCWZt YXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1BWF9NQVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJ RlQ7CisJZm1pbiA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUlOX01BU0spOworCWZzdGFydCA9 IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykgPj4KKwkJTUVNTU9ERV9GU1RBUlRf U0hJRlQ7CisJRFJNX0RFQlVHX0RSSVZFUigiZm1heDogJWQsIGZtaW46ICVkLCBmc3RhcnQ6ICVk XG4iLAorCQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7CisKKwlycHMtPm1pbl9mcmVxID0gLWZzdGFy dDsKKwlycHMtPm1heF9mcmVxID0gLWZtaW47CisKKwlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWlu X2ZyZXE7CisJcnBzLT5jdXJfZnJlcSA9IHJwcy0+aWRsZV9mcmVxOworfQorCitzdGF0aWMgdW5z aWduZWQgbG9uZworX19pcHNfY2hpcHNldF92YWwoc3RydWN0IGludGVsX2lwcyAqaXBzKQorewor CXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9CisJCXJwc190b191bmNvcmUoY29udGFpbmVy X29mKGlwcywgc3RydWN0IGludGVsX3JwcywgaXBzKSk7CisJdW5zaWduZWQgbG9uZyBub3cgPSBq aWZmaWVzX3RvX21zZWNzKGppZmZpZXMpLCBkdDsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwl1 NjQgdG90YWwsIGRlbHRhOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwor CisJLyoKKwkgKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2luZyB0b28g ZmFzdC4KKwkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0cyBpZiB3ZSBh cmUgcG9sbGluZworCSAqIGZhc3RlciB0aGFuIG9uY2UgaW4gMTBtcywgc28ganVzdCByZXR1cm4g dGhlIHNhdmVkIHZhbHVlCisJICogaW4gc3VjaCBjYXNlcy4KKwkgKi8KKwlkdCA9IG5vdyAtIGlw cy0+bGFzdF90aW1lMTsKKwlpZiAoZHQgPD0gMTApCisJCXJldHVybiBpcHMtPmNoaXBzZXRfcG93 ZXI7CisKKwkvKiBGSVhNRTogaGFuZGxlIHBlci1jb3VudGVyIG92ZXJmbG93ICovCisJdG90YWwg PSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKTsKKwl0b3RhbCArPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIEREUkVDKTsKKwl0b3RhbCArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIENTSUVDKTsKKworCWRlbHRhID0gdG90YWwgLSBpcHMtPmxhc3RfY291bnQxOworCisJcmVz dWx0ID0gZGl2X3U2NChkaXZfdTY0KGlwcy0+bSAqIGRlbHRhLCBkdCkgKyBpcHMtPmMsIDEwKTsK KworCWlwcy0+bGFzdF9jb3VudDEgPSB0b3RhbDsKKwlpcHMtPmxhc3RfdGltZTEgPSBub3c7CisK KwlpcHMtPmNoaXBzZXRfcG93ZXIgPSByZXN1bHQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitz dGF0aWMgdW5zaWduZWQgbG9uZyBpcHNfbWNoX3ZhbChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUpCit7CisJdW5zaWduZWQgaW50IG0sIHgsIGI7CisJdTMyIHRzZnM7CisKKwl0c2ZzID0gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBUU0ZTKTsKKwl4ID0gaW50ZWxfdW5jb3JlX3JlYWQ4KHVu Y29yZSwgVFIxKTsKKworCWIgPSB0c2ZzICYgVFNGU19JTlRSX01BU0s7CisJbSA9ICh0c2ZzICYg VFNGU19TTE9QRV9NQVNLKSA+PiBUU0ZTX1NMT1BFX1NISUZUOworCisJcmV0dXJuIG0gKiB4IC8g MTI3IC0gYjsKK30KKworc3RhdGljIGludCBfcHh2aWRfdG9fdmQodTggcHh2aWQpCit7CisJaWYg KHB4dmlkID09IDApCisJCXJldHVybiAwOworCisJaWYgKHB4dmlkID49IDggJiYgcHh2aWQgPCAz MSkKKwkJcHh2aWQgPSAzMTsKKworCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsKK30KKworc3Rh dGljIHUzMiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTgg cHh2aWQpCit7CisJY29uc3QgaW50IHZkID0gX3B4dmlkX3RvX3ZkKHB4dmlkKTsKKworCWlmIChJ TlRFTF9JTkZPKGk5MTUpLT5pc19tb2JpbGUpCisJCXJldHVybiBtYXgodmQgLSAxMTI1LCAwKTsK KworCXJldHVybiB2ZDsKK30KKworc3RhdGljIHZvaWQgX19nZW41X2lwc191cGRhdGUoc3RydWN0 IGludGVsX2lwcyAqaXBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9CisJCXJw c190b191bmNvcmUoY29udGFpbmVyX29mKGlwcywgc3RydWN0IGludGVsX3JwcywgaXBzKSk7CisJ dTY0IG5vdywgZGVsdGEsIGR0OworCXUzMiBjb3VudDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo Jm1jaGRldl9sb2NrKTsKKworCW5vdyA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKwlkdCA9IG5vdyAt IGlwcy0+bGFzdF90aW1lMjsKKwlkb19kaXYoZHQsIE5TRUNfUEVSX01TRUMpOworCisJLyogRG9u J3QgZGl2aWRlIGJ5IDAgKi8KKwlpZiAoZHQgPD0gMTApCisJCXJldHVybjsKKworCWNvdW50ID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7CisJZGVsdGEgPSBjb3VudCAtIGlwcy0+ bGFzdF9jb3VudDI7CisKKwlpcHMtPmxhc3RfY291bnQyID0gY291bnQ7CisJaXBzLT5sYXN0X3Rp bWUyID0gbm93OworCisJLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KKwlpcHMtPmdmeF9w b3dlciA9IGRpdl91NjQoZGVsdGEgKiAxMTgxLCBkdCAqIDEwKTsKK30KKworc3RhdGljIHZvaWQg Z2VuNV9ycHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzcGluX2xvY2tfaXJx KCZtY2hkZXZfbG9jayk7CisJX19nZW41X2lwc191cGRhdGUoJnJwcy0+aXBzKTsKKwlzcGluX3Vu bG9ja19pcnEoJm1jaGRldl9sb2NrKTsKK30KKworc3RhdGljIGJvb2wgZ2VuNV9ycHNfc2V0KHN0 cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwl1MTYgcmd2c3djdGw7CisKKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZtY2hkZXZfbG9jayk7CisKKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFk MTYodW5jb3JlLCBNRU1TV0NUTCk7CisJaWYgKHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMpIHsK KwkJRFJNX0RFQlVHKCJncHUgYnVzeSwgUkNTIGNoYW5nZSByZWplY3RlZFxuIik7CisJCXJldHVy biBmYWxzZTsgLyogc3RpbGwgYnVzeSB3aXRoIGFub3RoZXIgY29tbWFuZCAqLworCX0KKworCXZh bCA9IC12YWw7CisKKwlyZ3Zzd2N0bCA9CisJCShNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExf Q01EX1NISUZUKSB8CisJCSh2YWwgPDwgTUVNQ1RMX0ZSRVFfU0hJRlQpIHwKKwkJTUVNQ1RMX1NG Q0FWTTsKKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7 CisJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOworCisJcmd2 c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7CisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBN RU1TV0NUTCwgcmd2c3djdGwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkKK3sKKwlpbnQgZGl2ID0gKHZpZGZyZXEg JiAweDNmMDAwMCkgPj4gMTY7CisJaW50IHBvc3QgPSAodmlkZnJlcSAmIDB4MzAwMCkgPj4gMTI7 CisJaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKKworCWlmICghcHJlKQorCQlyZXR1cm4gMDsK KworCXJldHVybiBkaXYgKiAxMzMzMzMgLyAocHJlIDw8IHBvc3QpOworfQorCitzdGF0aWMgdW5z aWduZWQgaW50IGluaXRfZW1vbihzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCit7CisJdTgg cHh3WzE2XTsKKwlpbnQgaTsKKworCS8qIERpc2FibGUgdG8gcHJvZ3JhbSAqLworCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIEVDUiwgMCk7CisJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1 bmNvcmUsIEVDUik7CisKKwkvKiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2YXJpb3VzIGV2 ZW50cyAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFNERVcsIDB4MTUwNDBkMDApOwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIENTSUVXMCwgMHgwMDdmMDAwMCk7CisJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcxLCAweDFlMjIwMDA0KTsKKwlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBDU0lFVzIsIDB4MDQwMDAwMDQpOworCisJZm9yIChpID0gMDsgaSA8IDU7 IGkrKykKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUEVXKGkpLCAwKTsKKwlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERVcoaSksIDAp OworCisJLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3IgZnJlcXVlbmN5 IHBvd2VyIGFkanVzdG1lbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl1MzIg cHh2aWRmcmVxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKGkpKTsKKwkJdW5z aWduZWQgaW50IGZyZXEgPSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKKwkJdW5zaWduZWQgaW50 IHZpZCA9CisJCQkocHh2aWRmcmVxICYgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NI SUZUOworCQl1bnNpZ25lZCBpbnQgdmFsOworCisJCXZhbCA9IHZpZCAqIHZpZCAqIGZyZXEgLyAx MDAwICogMjU1OworCQl2YWwgLz0gMTI3ICogMTI3ICogOTAwOworCisJCXB4d1tpXSA9IHZhbDsK Kwl9CisJLyogUmVuZGVyIHN0YW5kYnkgc3RhdGVzIGdldCAwIHdlaWdodCAqLworCXB4d1sxNF0g PSAwOworCXB4d1sxNV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBQWFcoaSksCisJCQkJICAgcHh3W2kgKiA0ICsgMF0gPDwg MjQgfAorCQkJCSAgIHB4d1tpICogNCArIDFdIDw8IDE2IHwKKwkJCQkgICBweHdbaSAqIDQgKyAy XSA8PCAgOCB8CisJCQkJICAgcHh3W2kgKiA0ICsgM10gPDwgIDApOworCX0KKworCS8qIEFkanVz dCBtYWdpYyByZWdzIHRvIG1hZ2ljIHZhbHVlcyAobW9yZSBleHBlcmltZW50YWwgcmVzdWx0cykg Ki8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBPR1cwLCAwKTsKKwlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBPR1cxLCAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzAs IDB4MDAwMDdmMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHMSwgMHgwMDAwMDAw ZSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUcyLCAweDAwMGUwMDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzMsIDB4NjgwMDAzMDApOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIEVHNCwgMHg0MjAwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgRUc1LCAweDAwMTQwMDMxKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzYsIDAp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNywgMCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgODsgaSsrKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBQWFdMKGkpLCAwKTsKKwor CS8qIEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLworCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsIEVDUiwgMHg4MDAwMDAxOSk7CisKKwlyZXR1cm4gaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBMQ0ZVU0UwMikgJiBMQ0ZVU0VfSElWX01BU0s7Cit9CisKK3N0YXRpYyBib29sIGdlbjVf cnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXU4IGZzdGFydCwgdnN0YXJ0OworCXUz MiByZ3Ztb2RlY3RsOworCisJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJcmd2bW9k ZWN0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNTU9ERUNUTCk7CisKKwkvKiBFbmFi bGUgdGVtcCByZXBvcnRpbmcgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIFBNTUlT QywKKwkJCSAgICAgaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIFBNTUlTQykgfCBNQ1BQQ0Vf RU4pOworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgVFNDMSwKKwkJCSAgICAgaW50ZWxf dW5jb3JlX3JlYWQxNih1bmNvcmUsIFRTQzEpIHwgVFNFKTsKKworCS8qIDEwMG1zIFJDIGV2YWx1 YXRpb24gaW50ZXJ2YWxzICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNVUEVJLCAx MDAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDRE5FSSwgMTAwMDAwKTsKKwor CS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyByZXNwZWN0aXZlbHkg Ki8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNQVhBVkcsIDkwMDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNSU5BVkcsIDgwMDAwKTsKKworCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIE1FTUlIWVNULCAxKTsKKworCS8qIFNldCB1cCBtaW4sIG1heCwgYW5k IGN1ciBmb3IgaW50ZXJydXB0IGhhbmRsaW5nICovCisJZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBN RU1NT0RFX0ZTVEFSVF9NQVNLKSA+PgorCQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKKworCXZzdGFy dCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0KSkgJgorCQkgIFBY VkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKworCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsCisJCQkgICBNRU1JTlRSRU4sCisJCQkgICBNRU1JTlRfQ1hfU1VQUl9FTiB8IE1F TUlOVF9FVkFMX0NIR19FTik7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBWSURTVEFS VCwgdnN0YXJ0KTsKKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgVklEU1RBUlQp OworCisJcmd2bW9kZWN0bCB8PSBNRU1NT0RFX1NXTU9ERV9FTjsKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBNRU1NT0RFQ1RMLCByZ3Ztb2RlY3RsKTsKKworCWlmICh3YWl0X2Zvcl9hdG9t aWMoKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKKwkJCSAgICAgTUVNQ1RM X0NNRF9TVFMpID09IDAsIDEwKSkKKwkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdl IHBlcmYgbW9kZVxuIik7CisJbWRlbGF5KDEpOworCisJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5j dXJfZnJlcSk7CisKKwlycHMtPmlwcy5sYXN0X2NvdW50MSA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgRE1JRUMpOworCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgRERSRUMpOworCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgQ1NJRUMpOworCXJwcy0+aXBzLmxhc3RfdGltZTEgPSBqaWZmaWVzX3RvX21z ZWNzKGppZmZpZXMpOworCisJcnBzLT5pcHMubGFzdF9jb3VudDIgPSBpbnRlbF91bmNvcmVfcmVh ZCh1bmNvcmUsIEdGWEVDKTsKKwlycHMtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0X3Jhd19u cygpOworCisJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisKKwlycHMtPmlwcy5jb3Jy ID0gaW5pdF9lbW9uKHVuY29yZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg Z2VuNV9ycHNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXUxNiByZ3Zzd2N0bDsKKwor CXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCXJndnN3Y3RsID0gaW50ZWxfdW5jb3Jl X3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKKworCS8qIEFjayBpbnRlcnJ1cHRzLCBkaXNhYmxl IEVGQyBpbnRlcnJ1cHQgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JTlRSRU4s CisJCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJFTikgJgorCQkJICAgfk1F TUlOVF9FVkFMX0NIR19FTik7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNU UywgTUVNSU5UX0VWQUxfQ0hHKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlFUiwK KwkJCSAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgREVJRVIpICYgfkRFX1BDVV9FVkVOVCk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJSVIsIERFX1BDVV9FVkVOVCk7CisJaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJTVIsCisJCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIERFSU1SKSB8IERFX1BDVV9FVkVOVCk7CisKKwkvKiBHbyBiYWNrIHRvIHRoZSBzdGFy dGluZyBmcmVxdWVuY3kgKi8KKwlnZW41X3Jwc19zZXQocnBzLCBycHMtPmlkbGVfZnJlcSk7CisJ bWRlbGF5KDEpOworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisJbWRlbGF5KDEpOworCisJc3Bpbl91 bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cit9CisKK3N0YXRpYyB1MzIgcnBzX2xpbWl0cyhzdHJ1 Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwl1MzIgbGltaXRzOworCisJLyoKKwkgKiBP bmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZl bCB0byBhdm9pZAorCSAqIGdldHRpbmcgbW9yZSBpbnRlcnJ1cHRzLCBvdGhlcndpc2UgbGVhdmUg dGhpcyBjbGVhci4gVGhpcyBwcmV2ZW50cyBhCisJICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21p bmcgb3V0IG9mIHJjNjogVGhlcmUncyBhIHRpbnkgd2luZG93IHdoZXJlCisJICogdGhlIGh3IHJ1 bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVmb3JlIHNlbGVjdGluZyB0aGUgZGVzaXJlZAorCSAq IGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhyZXNob2xkIGV4cGlyZXMgaW4gdGhhdCB3aW5kb3cg d2Ugd2lsbCBub3QKKwkgKiByZWNlaXZlIGEgZG93biBpbnRlcnJ1cHQuCisJICovCisJaWYgKElO VEVMX0dFTihycHNfdG9faTkxNShycHMpKSA+PSA5KSB7CisJCWxpbWl0cyA9IHJwcy0+bWF4X2Zy ZXFfc29mdGxpbWl0IDw8IDIzOworCQlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0 KQorCQkJbGltaXRzIHw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0IDw8IDE0OworCX0gZWxzZSB7 CisJCWxpbWl0cyA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0OworCQlpZiAodmFsIDw9 IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQkJbGltaXRzIHw9IHJwcy0+bWluX2ZyZXFfc29m dGxpbWl0IDw8IDE2OworCX0KKworCXJldHVybiBsaW1pdHM7Cit9CisKK3N0YXRpYyB2b2lkIHJw c19zZXRfcG93ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgbmV3X3Bvd2VyKQoreworCXN0 cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHRocmVzaG9s ZF91cCA9IDAsIHRocmVzaG9sZF9kb3duID0gMDsgLyogaW4gJSAqLworCXUzMiBlaV91cCA9IDAs IGVpX2Rvd24gPSAwOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnBzLT5wb3dlci5tdXRleCk7 CisKKwlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIubW9kZSkKKwkJcmV0dXJuOworCisJLyog Tm90ZSB0aGUgdW5pdHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4MG5zLiAqLwor CXN3aXRjaCAobmV3X3Bvd2VyKSB7CisJY2FzZSBMT1dfUE9XRVI6CisJCS8qIFVwY2xvY2sgaWYg bW9yZSB0aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLworCQllaV91cCA9IDE2MDAwOworCQl0aHJl c2hvbGRfdXAgPSA5NTsKKworCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDg1JSBidXN5IG92 ZXIgMzJtcyAqLworCQllaV9kb3duID0gMzIwMDA7CisJCXRocmVzaG9sZF9kb3duID0gODU7CisJ CWJyZWFrOworCisJY2FzZSBCRVRXRUVOOgorCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5MCUg YnVzeSBvdmVyIDEzbXMgKi8KKwkJZWlfdXAgPSAxMzAwMDsKKwkJdGhyZXNob2xkX3VwID0gOTA7 CisKKwkJLyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA3NSUgYnVzeSBvdmVyIDMybXMgKi8KKwkJ ZWlfZG93biA9IDMyMDAwOworCQl0aHJlc2hvbGRfZG93biA9IDc1OworCQlicmVhazsKKworCWNh c2UgSElHSF9QT1dFUjoKKwkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gODUlIGJ1c3kgb3ZlciAx MG1zICovCisJCWVpX3VwID0gMTAwMDA7CisJCXRocmVzaG9sZF91cCA9IDg1OworCisJCS8qIERv d25jbG9jayBpZiBsZXNzIHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCisJCWVpX2Rvd24gPSAz MjAwMDsKKwkJdGhyZXNob2xkX2Rvd24gPSA2MDsKKwkJYnJlYWs7CisJfQorCisJLyogV2hlbiBi eXQgY2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMKKwkgKiBzdyBm cmVxIGFkanVzdG1lbnRzLCB0aGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBsaWZ0ZWQuCisJICovCisJ aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCisJCWdvdG8gc2tpcF9od193cml0ZTsKKworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfRUksCisJCQkgICBHVF9JTlRFUlZBTF9G Uk9NX1VTKGk5MTUsIGVpX3VwKSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9S UF9VUF9USFJFU0hPTEQsCisJCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGk5MTUsCisJCQkJCSAg ICAgICBlaV91cCAqIHRocmVzaG9sZF91cCAvIDEwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLAorCQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1 LCBlaV9kb3duKSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9ET1dOX1RI UkVTSE9MRCwKKwkJCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwKKwkJCQkJICAgICAgIGVp X2Rvd24gKiB0aHJlc2hvbGRfZG93biAvIDEwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgR0VONl9SUF9DT05UUk9MLAorCQkJICAgKElOVEVMX0dFTihpOTE1KSA+IDkgPyAwIDog R0VONl9SUF9NRURJQV9UVVJCTykgfAorCQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9E RSB8CisJCQkgICBHRU42X1JQX01FRElBX0lTX0dGWCB8CisJCQkgICBHRU42X1JQX0VOQUJMRSB8 CisJCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKKwkJCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FW Ryk7CisKK3NraXBfaHdfd3JpdGU6CisJcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOworCXJw cy0+cG93ZXIudXBfdGhyZXNob2xkID0gdGhyZXNob2xkX3VwOworCXJwcy0+cG93ZXIuZG93bl90 aHJlc2hvbGQgPSB0aHJlc2hvbGRfZG93bjsKK30KKworc3RhdGljIHZvaWQgZ2VuNl9ycHNfc2V0 X3RocmVzaG9sZHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJaW50IG5ld19w b3dlcjsKKworCW5ld19wb3dlciA9IHJwcy0+cG93ZXIubW9kZTsKKwlzd2l0Y2ggKHJwcy0+cG93 ZXIubW9kZSkgeworCWNhc2UgTE9XX1BPV0VSOgorCQlpZiAodmFsID4gcnBzLT5lZmZpY2llbnRf ZnJlcSArIDEgJiYKKwkJICAgIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBC RVRXRUVOOworCQlicmVhazsKKworCWNhc2UgQkVUV0VFTjoKKwkJaWYgKHZhbCA8PSBycHMtPmVm ZmljaWVudF9mcmVxICYmCisJCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQorCQkJbmV3X3Bvd2Vy ID0gTE9XX1BPV0VSOworCQllbHNlIGlmICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgorCQkJIHZh bCA+IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOworCQlicmVhazsK KworCWNhc2UgSElHSF9QT1dFUjoKKwkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVxICsgcnBzLT5y cDBfZnJlcSkgPj4gMSAmJgorCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19wb3dl ciA9IEJFVFdFRU47CisJCWJyZWFrOworCX0KKwkvKiBNYXgvbWluIGJpbnMgYXJlIHNwZWNpYWwg Ki8KKwlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQluZXdfcG93ZXIgPSBM T1dfUE9XRVI7CisJaWYgKHZhbCA+PSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkKKwkJbmV3X3Bv d2VyID0gSElHSF9QT1dFUjsKKworCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworCWlm IChycHMtPnBvd2VyLmludGVyYWN0aXZlKQorCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOworCXJw c19zZXRfcG93ZXIocnBzLCBuZXdfcG93ZXIpOworCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5t dXRleCk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGludGVs X3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKQoreworCWlmICghcnBzLT5lbmFibGVkKQorCQly ZXR1cm47CisKKwltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKKwlpZiAoaW50ZXJhY3Rp dmUpIHsKKwkJaWYgKCFycHMtPnBvd2VyLmludGVyYWN0aXZlKysgJiYgcnBzLT5hY3RpdmUpCisJ CQlycHNfc2V0X3Bvd2VyKHJwcywgSElHSF9QT1dFUik7CisJfSBlbHNlIHsKKwkJR0VNX0JVR19P TighcnBzLT5wb3dlci5pbnRlcmFjdGl2ZSk7CisJCXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUtLTsK Kwl9CisJbXV0ZXhfdW5sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKK30KKworc3RhdGljIGludCBn ZW42X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgc3dyZXE7CisKKwlpZiAo SU5URUxfR0VOKGk5MTUpID49IDkpCisJCXN3cmVxID0gR0VOOV9GUkVRVUVOQ1kodmFsKTsKKwll bHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8IElTX0JST0FEV0VMTChpOTE1KSkKKwkJc3dyZXEg PSBIU1dfRlJFUVVFTkNZKHZhbCk7CisJZWxzZQorCQlzd3JlcSA9IChHRU42X0ZSRVFVRU5DWSh2 YWwpIHwKKwkJCSBHRU42X09GRlNFVCgwKSB8CisJCQkgR0VONl9BR0dSRVNTSVZFX1RVUkJPKTsK KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1JQTlNXUkVRLCBzd3JlcSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bHZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7CisJaW50IGVycjsKKworCXZsdl9wdW5pdF9nZXQoaTkxNSk7CisJZXJyID0gdmx2 X3B1bml0X3dyaXRlKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9SRVEsIHZhbCk7CisJdmx2X3B1 bml0X3B1dChpOTE1KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnBzX3NldChz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJaW50IGVycjsKKworCWlmIChJTlRFTF9HRU4o aTkxNSkgPCA2KQorCQlyZXR1cm4gMDsKKworCWlmICh2YWwgPT0gcnBzLT5sYXN0X2ZyZXEpCisJ CXJldHVybiAwOworCisJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhp OTE1KSkKKwkJZXJyID0gdmx2X3Jwc19zZXQocnBzLCB2YWwpOworCWVsc2UKKwkJZXJyID0gZ2Vu Nl9ycHNfc2V0KHJwcywgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZ2VuNl9y cHNfc2V0X3RocmVzaG9sZHMocnBzLCB2YWwpOworCXJwcy0+bGFzdF9mcmVxID0gdmFsOworCisJ cmV0dXJuIDA7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX3VucGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCit7CisJdTggZnJlcTsKKworCWlmICghcnBzLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkv KgorCSAqIFVzZSB0aGUgdXNlcidzIGRlc2lyZWQgZnJlcXVlbmN5IGFzIGEgZ3VpZGUsIGJ1dCBm b3IgYmV0dGVyCisJICogcGVyZm9ybWFuY2UsIGp1bXAgZGlyZWN0bHkgdG8gUlBlIGFzIG91ciBz dGFydGluZyBmcmVxdWVuY3kuCisJICovCisJbXV0ZXhfbG9jaygmcnBzLT5sb2NrKTsKKwlycHMt PmFjdGl2ZSA9IHRydWU7CisJZnJlcSA9IG1heChycHMtPmN1cl9mcmVxLCBycHMtPmVmZmljaWVu dF9mcmVxKSwKKwlmcmVxID0gY2xhbXAoZnJlcSwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsKKwlpbnRlbF9ycHNfc2V0KHJwcywgZnJlcSk7CisJcnBz LT5sYXN0X2FkaiA9IDA7CisJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOworCisJaWYgKElOVEVM X0dFTihycHNfdG9faTkxNShycHMpKSA+PSA2KQorCQlycHNfZW5hYmxlX2ludGVycnVwdHMocnBz KTsKKworCWlmIChJU19HRU4ocnBzX3RvX2k5MTUocnBzKSwgNSkpCisJCWdlbjVfcnBzX3VwZGF0 ZShycHMpOworfQorCit2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisK KwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+ PSA2KQorCQlycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHJwcyk7CisKKwlycHMtPmFjdGl2ZSA9IGZh bHNlOworCWlmIChycHMtPmxhc3RfZnJlcSA8PSBycHMtPmlkbGVfZnJlcSkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBUaGUgcHVuaXQgZGVsYXlzIHRoZSB3cml0ZSBvZiB0aGUgZnJlcXVlbmN5IGFu ZCB2b2x0YWdlIHVudGlsIGl0CisJICogZGV0ZXJtaW5lcyB0aGUgR1BVIGlzIGF3YWtlLiBEdXJp bmcgbm9ybWFsIHVzYWdlIHdlIGRvbid0IHdhbnQgdG8KKwkgKiB3YXN0ZSBwb3dlciBjaGFuZ2lu ZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMgc2xlZXBpbmcgKHJjNikuCisJICogSG93ZXZl ciwgdGhlIEdQVSBhbmQgZHJpdmVyIGlzIG5vdyBpZGxlIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBk ZWxheQorCSAqIHN3aXRjaGluZyB0byBtaW5pbXVtIHZvbHRhZ2UgKHJlZHVjaW5nIHBvd2VyIHdo aWxzdCBpZGxlKSBhcyB3ZSBkbworCSAqIG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5l YXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZsdXNoIHRoZQorCSAqIGNoYW5nZSBieSB3YWtpbmcgdGhl IGRldmljZS4KKwkgKgorCSAqIFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwg KGVpdGhlciB3b3VsZCBkbyB0byB0cmljayB0aGUKKwkgKiBwdW5pdCBpbnRvIGNvbW1pdHRpbmcg dGhlIHZvbHRhZ2UgY2hhbmdlKSBhcyB0aGF0IHRha2VzIGEgbG90IGxlc3MKKwkgKiBwb3dlciB0 aGFuIHRoZSByZW5kZXIgcG93ZXJ3ZWxsLgorCSAqLworCWludGVsX3VuY29yZV9mb3JjZXdha2Vf Z2V0KHJwc190b191bmNvcmUocnBzKSwgRk9SQ0VXQUtFX01FRElBKTsKKwlycHNfc2V0KHJwcywg cnBzLT5pZGxlX2ZyZXEpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHJwc190b191bmNv cmUocnBzKSwgRk9SQ0VXQUtFX01FRElBKTsKK30KKwordm9pZCBpbnRlbF9ycHNfYm9vc3Qoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJnJxLT5l bmdpbmUtPmd0LT5ycHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpOTE1X3JlcXVl c3Rfc2lnbmFsZWQocnEpIHx8ICFycHMtPmFjdGl2ZSkKKwkJcmV0dXJuOworCisJLyogU2VyaWFs aXplcyB3aXRoIGk5MTVfcmVxdWVzdF9yZXRpcmUoKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZy cS0+bG9jaywgZmxhZ3MpOworCWlmICghaTkxNV9yZXF1ZXN0X2hhc193YWl0Ym9vc3QocnEpICYm CisJICAgICFkbWFfZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZycS0+ZmVuY2UpKSB7CisJCXJx LT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NUOworCisJCWlmICghYXRvbWljX2ZldGNo X2luYygmcnBzLT5udW1fd2FpdGVycykgJiYKKwkJICAgIFJFQURfT05DRShycHMtPmN1cl9mcmVx KSA8IHJwcy0+Ym9vc3RfZnJlcSkKKwkJCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7CisKKwkJ YXRvbWljX2luYygmcnBzLT5ib29zdHMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZy cS0+bG9jaywgZmxhZ3MpOworfQorCitpbnQgaW50ZWxfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMsIHU4IHZhbCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnJwcy0+bG9jayk7CisJR0VNX0JVR19PTih2YWwgPiBycHMtPm1heF9mcmVxKTsKKwlHRU1fQlVH X09OKHZhbCA8IHJwcy0+bWluX2ZyZXEpOworCisJaWYgKHJwcy0+YWN0aXZlKSB7CisJCWVyciA9 IHJwc19zZXQocnBzLCB2YWwpOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBjb250aW51ZSB0 byBnZXQgaW50ZXJydXB0cworCQkgKiB1bnRpbCB3ZSBoaXQgdGhlIG1pbmltdW0gb3IgbWF4aW11 bSBmcmVxdWVuY2llcy4KKwkJICovCisJCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBzKSkg Pj0gNikgeworCQkJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShy cHMpOworCisJCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1JQX0lOVEVSUlVQVF9M SU1JVFMsCisJCQkJCSAgIHJwc19saW1pdHMocnBzLCB2YWwpKTsKKworCQkJaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwgR0VONl9QTUlOVFJNU0ssCisJCQkJCSAgIHJwc19wbV9tYXNrKHJwcywg dmFsKSk7CisJCX0KKwl9CisKKwlpZiAoZXJyID09IDApCisJCXJwcy0+Y3VyX2ZyZXEgPSB2YWw7 CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZW42X3Jwc19pbml0KHN0cnVjdCBp bnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOworCisJLyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHog Ki8KKworCS8qIHN0YXRpYyB2YWx1ZXMgZnJvbSBIVzogUlAwID4gUlAxID4gUlBuIChtaW5fZnJl cSkgKi8KKwlpZiAoSVNfR0VOOV9MUChpOTE1KSkgeworCQl1MzIgcnBfc3RhdGVfY2FwID0gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBCWFRfUlBfU1RBVEVfQ0FQKTsKKworCQlycHMtPnJwMF9m cmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOworCQlycHMtPnJwMV9mcmVxID0gKHJw X3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2Nh cCA+PiAgMCkgJiAweGZmOworCX0gZWxzZSB7CisJCXUzMiBycF9zdGF0ZV9jYXAgPSBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjZfUlBfU1RBVEVfQ0FQKTsKKworCQlycHMtPnJwMF9mcmVx ID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOworCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0 YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+ PiAxNikgJiAweGZmOworCX0KKworCS8qIGh3X21heCA9IFJQMCB1bnRpbCB3ZSBjaGVjayBmb3Ig b3ZlcmNsb2NraW5nICovCisJcnBzLT5tYXhfZnJlcSA9IHJwcy0+cnAwX2ZyZXE7CisKKwlycHMt PmVmZmljaWVudF9mcmVxID0gcnBzLT5ycDFfZnJlcTsKKwlpZiAoSVNfSEFTV0VMTChpOTE1KSB8 fCBJU19CUk9BRFdFTEwoaTkxNSkgfHwKKwkgICAgSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9H RU4oaTkxNSkgPj0gMTApIHsKKwkJdTMyIGRkY2Nfc3RhdHVzID0gMDsKKworCQlpZiAoc2FuZHli cmlkZ2VfcGNvZGVfcmVhZChpOTE1LAorCQkJCQkgICBIU1dfUENPREVfRFlOQU1JQ19EVVRZX0NZ Q0xFX0NPTlRST0wsCisJCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKKwkJCXJwcy0+ ZWZmaWNpZW50X2ZyZXEgPQorCQkJCWNsYW1wX3QodTgsCisJCQkJCShkZGNjX3N0YXR1cyA+PiA4 KSAmIDB4ZmYsCisJCQkJCXJwcy0+bWluX2ZyZXEsCisJCQkJCXJwcy0+bWF4X2ZyZXEpOworCX0K KworCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1KSA+PSAxMCkgeworCQkv KiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42NiBNSFogdW5pdHMsIHdoaWNoIGlz CisJCSAqIHRoZSBuYXR1cmFsIGhhcmR3YXJlIHVuaXQgZm9yIFNLTAorCQkgKi8KKwkJcnBzLT5y cDBfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPnJwMV9mcmVxICo9IEdFTjlfRlJF UV9TQ0FMRVI7CisJCXJwcy0+bWluX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKKwkJcnBzLT5t YXhfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPmVmZmljaWVudF9mcmVxICo9IEdF TjlfRlJFUV9TQ0FMRVI7CisJfQorfQorCitzdGF0aWMgYm9vbCBycHNfcmVzZXQoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCS8qIGZvcmNlIGEgcmVzZXQgKi8KKwlycHMtPnBvd2VyLm1vZGUg PSAtMTsKKwlycHMtPmxhc3RfZnJlcSA9IC0xOworCisJaWYgKHJwc19zZXQocnBzLCBycHMtPm1p bl9mcmVxKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcnBzLT5jdXJfZnJlcSA9IHJwcy0+ bWluX2ZyZXE7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qIFNlZSB0aGUgR2VuOV9HVF9QTV9Qcm9n cmFtbWluZ19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLworc3RhdGljIGJvb2wgZ2VuOV9ycHNf ZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCisJLyogUHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNo b2xkcyBmb3IgUlBTICovCisJaWYgKElTX0dFTihpOTE1LCA5KSkKKwkJaW50ZWxfdW5jb3JlX3dy aXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19GUkVRLAorCQkJCSAgICAgIEdFTjlfRlJFUVVF TkNZKHJwcy0+cnAxX2ZyZXEpKTsKKworCS8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKwlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwKKwkJCSAgICAgIEdU X0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgMTAwMDAwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRl X2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMHhhKTsKKworCXJldHVybiBycHNf cmVzZXQocnBzKTsKK30KKworc3RhdGljIGJvb2wgZ2VuOF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7CisKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1ZJREVP X0ZSRVEsCisJCQkgICAgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKKworCS8qIE5C OiBEb2NzIHNheSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVudCAqLwor CWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULAorCQkJ ICAgICAgMTAwMDAwMDAwIC8gMTI4KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLworCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOworCisJ cmV0dXJuIHJwc19yZXNldChycHMpOworfQorCitzdGF0aWMgYm9vbCBnZW42X3Jwc19lbmFibGUo c3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKKworCS8qIFBvd2VyIGRvd24gaWYgY29tcGxldGVseSBpZGxl IGZvciBvdmVyIDUwbXMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X0RPV05fVElNRU9VVCwgNTAwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKKworCXJldHVybiBycHNfcmVzZXQocnBzKTsKK30K Kworc3RhdGljIGludCBjaHZfcnBzX21heF9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMy IHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUFYX0FUX1ZNQVhf RlVTRSk7CisKKwlzd2l0Y2ggKFJVTlRJTUVfSU5GTyhpOTE1KS0+c3NldS5ldV90b3RhbCkgewor CWNhc2UgODoKKwkJLyogKDIgKiA0KSBjb25maWcgKi8KKwkJdmFsID4+PSBGQl9HRlhfRk1BWF9B VF9WTUFYXzJTUzRFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwljYXNlIDEyOgorCQkvKiAoMiAq IDYpIGNvbmZpZyAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTNkVVX0ZVU0Vf U0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCS8qICgyICogOCkgY29uZmlnICovCisJZGVm YXVsdDoKKwkJLyogU2V0dGluZyAoMiAqIDgpIE1pbiBSUDAgZm9yIGFueSBvdGhlciBjb21iaW5h dGlvbiAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQ7 CisJCWJyZWFrOworCX0KKworCXJldHVybiB2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0s7Cit9 CisKK3N0YXRpYyBpbnQgY2h2X3Jwc19ycGVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUz MiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9HUFVfRFVUWUNZQ0xF X1JFRyk7CisJdmFsID4+PSBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUOworCisJ cmV0dXJuIHZhbCAmIFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKK30KKworc3Rh dGljIGludCBjaHZfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7 CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0Up OworCisJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsKK30KKworc3RhdGljIHUz MiBjaHZfcnBzX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZh bCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7CisJdmFs ID4+PSBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0VfU0hJRlQ7CisKKwlyZXR1cm4gdmFsICYgRkJf R0ZYX0ZSRVFfRlVTRV9NQVNLOworfQorCitzdGF0aWMgYm9vbCBjaHZfcnBzX2VuYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBz X3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3Rv X2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJLyogMTogUHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhy ZXNob2xkcyBmb3IgUlBTKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X0RPV05fVElNRU9VVCwgMTAwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwg R0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5j b3JlLCBHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOworCWludGVsX3VuY29yZV93cml0 ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7CisKKwlpbnRlbF91bmNvcmVfd3Jp dGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7CisKKwkvKiAyOiBFbmFi bGUgUlBTICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9DT05UUk9M LAorCQkJICAgICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8CisJCQkgICAgICBHRU42 X1JQX01FRElBX0lTX0dGWCB8CisJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8CisJCQkgICAgICBH RU42X1JQX1VQX0JVU1lfQVZHIHwKKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7CisK KwkvKiBTZXR0aW5nIEZpeGVkIEJpYXMgKi8KKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCisJdmFs ID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZfQklBU19DUFVfNTBfU09D XzUwOworCXZsdl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwp OworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7 CisKKwl2bHZfcHVuaXRfcHV0KGk5MTUpOworCisJLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlz IHVzZWQgKi8KKwlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBl bmFibGVkXG4iKTsKKworCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHll c25vKHZhbCAmIEdQTExFTkFCTEUpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAw eCUwOHhcbiIsIHZhbCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyBp bnQgdmx2X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsLCBycDE7 CisKKwl2YWwgPSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwor CisJcnAxID0gdmFsICYgRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9NQVNLOworCXJwMSA+ Pj0gRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKKworCXJldHVybiBycDE7Cit9 CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19tYXhfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUz MiB2YWwsIHJwMDsKKworCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJfR0ZYX0ZS RVFfRlVTRSk7CisKKwlycDAgPSAodmFsICYgRkJfR0ZYX01BWF9GUkVRX0ZVU0VfTUFTSykgPj4g RkJfR0ZYX01BWF9GUkVRX0ZVU0VfU0hJRlQ7CisJLyogQ2xhbXAgdG8gbWF4ICovCisJcnAwID0g bWluX3QodTMyLCBycDAsIDB4ZWEpOworCisJcmV0dXJuIHJwMDsKK30KKworc3RhdGljIGludCB2 bHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbCwgcnBlOworCisJ dmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKKwly cGUgPSAodmFsICYgRkJfRk1BWF9WTUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZS RVFfTE9fU0hJRlQ7CisJdmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRk1B WF9GVVNFX0hJKTsKKwlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9GUkVRX0hJX01BU0spIDw8 IDU7CisKKwlyZXR1cm4gcnBlOworfQorCitzdGF0aWMgaW50IHZsdl9ycHNfbWluX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkx NSwgUFVOSVRfUkVHX0dQVV9MRk0pICYgMHhmZjsKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUg QllUIFB1bml0IEdQVSB0dXJibyBIQVMgMS4xLjYuMyB0aGUgbWluaW11bSB2YWx1ZQorCSAqIGZv ciB0aGUgbWluaW11bSBmcmVxdWVuY3kgaW4gR1BMTCBtb2RlIGlzIDB4YzEuIENvbnRyYXJ5IHRv IHRoaXMgb24KKwkgKiBhIEJZVC1NIEIwIHRoZSBhYm92ZSByZWdpc3RlciBjb250YWlucyAweGJm LiBNb3Jlb3ZlciB3aGVuIHNldHRpbmcKKwkgKiBhIGZyZXF1ZW5jeSBQdW5pdCB3aWxsIG5vdCBh bGxvdyB2YWx1ZXMgYmVsb3cgMHhjMC4gQ2xhbXAgaXQgMHhjMAorCSAqIHRvIG1ha2Ugc3VyZSBp dCBtYXRjaGVzIHdoYXQgUHVuaXQgYWNjZXB0cy4KKwkgKi8KKwlyZXR1cm4gbWF4X3QodTMyLCB2 YWwsIDB4YzApOworfQorCitzdGF0aWMgYm9vbCB2bHZfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBz KTsKKwl1MzIgdmFsOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9E T1dOX1RJTUVPVVQsIDEwMDAwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29y ZSwgR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX1VQX0VJLCA2NjAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3 KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLCAzNTAwMDApOworCisJaW50ZWxfdW5jb3JlX3dyaXRl X2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOworCisJaW50ZWxfdW5jb3Jl X3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9DT05UUk9MLAorCQkJICAgICAgR0VONl9SUF9NRURJ QV9UVVJCTyB8CisJCQkgICAgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKKwkJCSAg ICAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKKwkJCSAgICAgIEdFTjZfUlBfRU5BQkxFIHwKKwkJ CSAgICAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAorCQkJICAgICAgR0VONl9SUF9ET1dOX0lETEVf Q09OVCk7CisKKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCisJLyogU2V0dGluZyBGaXhlZCBCaWFz ICovCisJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBWTFZfQklBU19D UFVfMTI1X1NPQ184NzU7CisJdmx2X3B1bml0X3dyaXRlKGk5MTUsIFZMVl9UVVJCT19TT0NfT1ZF UlJJREUsIHZhbCk7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9SRUdfR1BV X0ZSRVFfU1RTKTsKKworCXZsdl9wdW5pdF9wdXQoaTkxNSk7CisKKwkvKiBSUFMgY29kZSBhc3N1 bWVzIEdQTEwgaXMgdXNlZCAqLworCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOworCisJRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVk PyAlc1xuIiwgeWVzbm8odmFsICYgR1BMTEVOQUJMRSkpOworCURSTV9ERUJVR19EUklWRVIoIkdQ VSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKKworCXJldHVybiBycHNfcmVzZXQocnBzKTsKK30K Kworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pcHNfZ2Z4X3ZhbChzdHJ1Y3QgaW50ZWxfaXBzICpp cHMpCit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKGlwcywgdHlwZW9m KCpycHMpLCBpcHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNv cmUocnBzKTsKKwl1bnNpZ25lZCBsb25nIHQsIGNvcnIsIHN0YXRlMSwgY29ycjIsIHN0YXRlMjsK Kwl1MzIgcHh2aWQsIGV4dF92OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2sp OworCisJcHh2aWQgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEocnBzLT5jdXJf ZnJlcSkpOworCXB4dmlkID0gKHB4dmlkID4+IDI0KSAmIDB4N2Y7CisJZXh0X3YgPSBwdmlkX3Rv X2V4dHZpZChycHNfdG9faTkxNShycHMpLCBweHZpZCk7CisKKwlzdGF0ZTEgPSBleHRfdjsKKwor CS8qIFJldmVsIGluIHRoZSBlbXBpcmljYWxseSBkZXJpdmVkIGNvbnN0YW50cyAqLworCisJLyog Q29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8KKwl0ID0gaXBzX21jaF92YWwo dW5jb3JlKTsKKwlpZiAodCA+IDgwKQorCQljb3JyID0gdCAqIDIzNDkgKyAxMzU5NDA7CisJZWxz ZSBpZiAodCA+PSA1MCkKKwkJY29yciA9IHQgKiA5NjQgKyAyOTMxNzsKKwllbHNlIC8qIDwgNTAg Ki8KKwkJY29yciA9IHQgKiAzMDEgKyAxMDA0OworCisJY29yciA9IGNvcnIgKiAxNTAxNDIgKiBz dGF0ZTEgLyAxMDAwMCAtIDc4NjQyOworCWNvcnIgLz0gMTAwMDAwOworCWNvcnIyID0gY29yciAq IGlwcy0+Y29ycjsKKworCXN0YXRlMiA9IGNvcnIyICogc3RhdGUxIC8gMTAwMDA7CisJc3RhdGUy IC89IDEwMDsgLyogY29udmVydCB0byBtVyAqLworCisJX19nZW41X2lwc191cGRhdGUoaXBzKTsK KworCXJldHVybiBpcHMtPmdmeF9wb3dlciArIHN0YXRlMjsKK30KKwordm9pZCBpbnRlbF9ycHNf ZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQodW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKKwlpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcnBzLT5l bmFibGVkID0gY2h2X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5 MTUpKQorCQlycHMtPmVuYWJsZWQgPSB2bHZfcnBzX2VuYWJsZShycHMpOworCWVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA5KQorCQlycHMtPmVuYWJsZWQgPSBnZW45X3Jwc19lbmFibGUocnBz KTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcnBzLT5lbmFibGVkID0gZ2Vu OF9ycHNfZW5hYmxlKHJwcyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCisJCXJw cy0+ZW5hYmxlZCA9IGdlbjZfcnBzX2VuYWJsZShycHMpOworCWVsc2UgaWYgKElTX0lST05MQUtF X00oaTkxNSkpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjVfcnBzX2VuYWJsZShycHMpOworCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CisJaWYgKCFycHMt PmVuYWJsZWQpCisJCXJldHVybjsKKworCVdBUk5fT04ocnBzLT5tYXhfZnJlcSA8IHJwcy0+bWlu X2ZyZXEpOworCVdBUk5fT04ocnBzLT5pZGxlX2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKKworCVdB Uk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA8IHJwcy0+bWluX2ZyZXEpOworCVdBUk5fT04ocnBz LT5lZmZpY2llbnRfZnJlcSA+IHJwcy0+bWF4X2ZyZXEpOworfQorCitzdGF0aWMgdm9pZCBnZW42 X3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlpbnRlbF91bmNvcmVfd3Jp dGUocnBzX3RvX3VuY29yZShycHMpLCBHRU42X1JQX0NPTlRST0wsIDApOworfQorCit2b2lkIGlu dGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlycHMtPmVuYWJsZWQgPSBm YWxzZTsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJZ2VuNl9ycHNfZGlzYWJsZShy cHMpOworCWVsc2UgaWYgKElTX0lST05MQUtFX00oaTkxNSkpCisJCWdlbjVfcnBzX2Rpc2FibGUo cnBzKTsKK30KKworc3RhdGljIGludCBieXRfZ3B1X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBz LCBpbnQgdmFsKQoreworCS8qCisJICogTiA9IHZhbCAtIDB4YjcKKwkgKiBTbG93ID0gRmFzdCA9 IEdQTEwgcmVmICogTgorCSAqLworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxf cmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOworfQorCitzdGF0aWMgaW50IGJ5dF9mcmVx X29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCit7CisJcmV0dXJuIERJVl9S T1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkgKyAweGI3OworfQor CitzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwp Cit7CisJLyoKKwkgKiBOID0gdmFsIC8gMgorCSAqIENVIChzbG93KSA9IENVMnggKGZhc3QpIC8g MiA9IEdQTEwgcmVmICogTiAvIDIKKwkgKi8KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBz LT5ncGxsX3JlZl9mcmVxICogdmFsLCAyICogMiAqIDEwMDApOworfQorCitzdGF0aWMgaW50IGNo dl9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCit7CisJLyogQ0hW IG5lZWRzIGV2ZW4gdmFsdWVzICovCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDIgKiAxMDAw ICogdmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICogMjsKK30KKworaW50IGludGVsX2dwdV9mcmVx KHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49 IDkpCisJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQ TElFUiwKKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVco aTkxNSkpCisJCXJldHVybiBjaHZfZ3B1X2ZyZXEocnBzLCB2YWwpOworCWVsc2UgaWYgKElTX1ZB TExFWVZJRVcoaTkxNSkpCisJCXJldHVybiBieXRfZ3B1X2ZyZXEocnBzLCB2YWwpOworCWVsc2UK KwkJcmV0dXJuIHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOworfQorCitpbnQgaW50ZWxf ZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOSkKKwkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJF UV9TQ0FMRVIsCisJCQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7CisJZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGNodl9mcmVxX29wY29kZShycHMsIHZhbCk7CisJ ZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGJ5dF9mcmVxX29wY29kZShy cHMsIHZhbCk7CisJZWxzZQorCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVR VUVOQ1lfTVVMVElQTElFUik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVmX2Zy ZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCXJwcy0+Z3BsbF9yZWZfZnJlcSA9CisJCXZsdl9n ZXRfY2NrX2Nsb2NrKGk5MTUsICJHUExMIHJlZiIsCisJCQkJICBDQ0tfR1BMTF9DTE9DS19DT05U Uk9MLAorCQkJCSAgaTkxNS0+Y3pjbGtfZnJlcSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHUExM IHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsIHJwcy0+Z3BsbF9yZWZfZnJlcSk7Cit9CisKK3N0 YXRpYyB2b2lkIHZsdl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisK Kwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAorCQkJ QklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7CisKKwl2bHZf aW5pdF9ncGxsX3JlZl9mcmVxKHJwcyk7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQ VU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKKwlzd2l0Y2ggKCh2YWwgPj4gNikgJiAzKSB7CisJY2Fz ZSAwOgorCWNhc2UgMToKKwkJaTkxNS0+bWVtX2ZyZXEgPSA4MDA7CisJCWJyZWFrOworCWNhc2Ug MjoKKwkJaTkxNS0+bWVtX2ZyZXEgPSAxMDY2OworCQlicmVhazsKKwljYXNlIDM6CisJCWk5MTUt Pm1lbV9mcmVxID0gMTMzMzsKKwkJYnJlYWs7CisJfQorCURSTV9ERUJVR19EUklWRVIoIkREUiBz cGVlZDogJWQgTUh6XG4iLCBpOTE1LT5tZW1fZnJlcSk7CisKKwlycHMtPm1heF9mcmVxID0gdmx2 X3Jwc19tYXhfZnJlcShycHMpOworCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1heF9mcmVxOworCURS TV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSwKKwkJCSBycHMtPm1heF9mcmVxKTsKKworCXJw cy0+ZWZmaWNpZW50X2ZyZXEgPSB2bHZfcnBzX3JwZV9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RS SVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShy cHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAorCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOworCisJ cnBzLT5ycDFfZnJlcSA9IHZsdl9ycHNfZ3Vhcl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZF UigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJIGludGVsX2dw dV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSksCisJCQkgcnBzLT5ycDFfZnJlcSk7CisKKwlycHMt Pm1pbl9mcmVxID0gdmx2X3Jwc19taW5fZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIm1p biBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt Pm1pbl9mcmVxKSwKKwkJCSBycHMtPm1pbl9mcmVxKTsKKworCXZsdl9pb3NmX3NiX3B1dChpOTE1 LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwK KwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKK30KKworc3RhdGljIHZvaWQgY2h2X3Jwc19pbml0 KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZsdl9pb3NmX3NiX2dldChpOTE1 LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwK KwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKKworCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEocnBz KTsKKworCXZhbCA9IHZsdl9jY2tfcmVhZChpOTE1LCBDQ0tfRlVTRV9SRUcpOworCisJc3dpdGNo ICgodmFsID4+IDIpICYgMHg3KSB7CisJY2FzZSAzOgorCQlpOTE1LT5tZW1fZnJlcSA9IDIwMDA7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWk5MTUtPm1lbV9mcmVxID0gMTYwMDsKKwkJYnJlYWs7 CisJfQorCURSTV9ERUJVR19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6XG4iLCBpOTE1LT5tZW1f ZnJlcSk7CisKKwlycHMtPm1heF9mcmVxID0gY2h2X3Jwc19tYXhfZnJlcShycHMpOworCXJwcy0+ cnAwX2ZyZXEgPSBycHMtPm1heF9mcmVxOworCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJl cTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVx KSwKKwkJCSBycHMtPm1heF9mcmVxKTsKKworCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBjaHZfcnBz X3JwZV9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHog KCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAor CQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOworCisJcnBzLT5ycDFfZnJlcSA9IGNodl9ycHNfZ3Vh cl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIpIEdQVSBmcmVxOiAlZCBN SHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+cnAxX2ZyZXEpLAorCQkJ IHJwcy0+cnAxX2ZyZXEpOworCisJcnBzLT5taW5fZnJlcSA9IGNodl9ycHNfbWluX2ZyZXEocnBz KTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJ IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCQkgcnBzLT5taW5fZnJlcSk7 CisKKwl2bHZfaW9zZl9zYl9wdXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAor CQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7CisKKwlX QVJOX09OQ0UoKHJwcy0+bWF4X2ZyZXEgfCBycHMtPmVmZmljaWVudF9mcmVxIHwgcnBzLT5ycDFf ZnJlcSB8CisJCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKKwkJICAiT2RkIEdQVSBmcmVxIHZhbHVl c1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSwgc3RydWN0IGludGVsX3Jwc19laSAqZWkpCit7CisJZWktPmt0aW1lID0ga3RpbWVf Z2V0X3JhdygpOworCWVpLT5yZW5kZXJfYzAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFZM Vl9SRU5ERVJfQzBfQ09VTlQpOworCWVpLT5tZWRpYV9jMCA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgVkxWX01FRElBX0MwX0NPVU5UKTsKK30KKworc3RhdGljIHUzMiB2bHZfd2FfYzBfZWko c3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQoreworCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcnBz X2VpICpwcmV2ID0gJnJwcy0+ZWk7CisJc3RydWN0IGludGVsX3Jwc19laSBub3c7CisJdTMyIGV2 ZW50cyA9IDA7CisKKwlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0g MCkKKwkJcmV0dXJuIDA7CisKKwl2bHZfYzBfcmVhZCh1bmNvcmUsICZub3cpOworCisJaWYgKHBy ZXYtPmt0aW1lKSB7CisJCXU2NCB0aW1lLCBjMDsKKwkJdTMyIHJlbmRlciwgbWVkaWE7CisKKwkJ dGltZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOworCisJCXRpbWUg Kj0gcnBzX3RvX2k5MTUocnBzKS0+Y3pjbGtfZnJlcTsKKworCQkvKiBXb3JrbG9hZCBjYW4gYmUg c3BsaXQgYmV0d2VlbiByZW5kZXIgKyBtZWRpYSwKKwkJICogZS5nLiBTd2FwQnVmZmVycyBiZWlu ZyBibGl0dGVkIGluIFggYWZ0ZXIgYmVpbmcgcmVuZGVyZWQgaW4KKwkJICogbWVzYS4gVG8gYWNj b3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdpbmVzCisJCSAqIGludG8g b3VyIGFjdGl2aXR5IGNvdW50ZXIuCisJCSAqLworCQlyZW5kZXIgPSBub3cucmVuZGVyX2MwIC0g cHJldi0+cmVuZGVyX2MwOworCQltZWRpYSA9IG5vdy5tZWRpYV9jMCAtIHByZXYtPm1lZGlhX2Mw OworCQljMCA9IG1heChyZW5kZXIsIG1lZGlhKTsKKwkJYzAgKj0gMTAwMCAqIDEwMCA8PCA4OyAv KiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAqLworCisJCWlmIChjMCA+IHRpbWUg KiBycHMtPnBvd2VyLnVwX3RocmVzaG9sZCkKKwkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhS RVNIT0xEOworCQllbHNlIGlmIChjMCA8IHRpbWUgKiBycHMtPnBvd2VyLmRvd25fdGhyZXNob2xk KQorCQkJZXZlbnRzID0gR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRDsKKwl9CisKKwlycHMtPmVp ID0gbm93OworCXJldHVybiBldmVudHM7Cit9CisKK3N0YXRpYyB2b2lkIHJwc193b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSBjb250YWlu ZXJfb2Yod29yaywgdHlwZW9mKCpycHMpLCB3b3JrKTsKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g cnBzX3RvX2d0KHJwcyk7CisJYm9vbCBjbGllbnRfYm9vc3QgPSBmYWxzZTsKKwlpbnQgbmV3X2Zy ZXEsIGFkaiwgbWluLCBtYXg7CisJdTMyIHBtX2lpciA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZn dC0+aXJxX2xvY2spOworCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7CisJ Y2xpZW50X2Jvb3N0ID0gYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRlcnMpOworCXNwaW5fdW5s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgcXVldWUg YW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCisJaWYgKChwbV9paXIgJiBy cHMtPnBtX2V2ZW50cykgPT0gMCAmJiAhY2xpZW50X2Jvb3N0KQorCQlnb3RvIG91dDsKKworCW11 dGV4X2xvY2soJnJwcy0+bG9jayk7CisKKwlwbV9paXIgfD0gdmx2X3dhX2MwX2VpKHJwcywgcG1f aWlyKTsKKworCWFkaiA9IHJwcy0+bGFzdF9hZGo7CisJbmV3X2ZyZXEgPSBycHMtPmN1cl9mcmVx OworCW1pbiA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0OworCW1heCA9IHJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0OworCWlmIChjbGllbnRfYm9vc3QpCisJCW1heCA9IHJwcy0+bWF4X2ZyZXE7CisJ aWYgKGNsaWVudF9ib29zdCAmJiBuZXdfZnJlcSA8IHJwcy0+Ym9vc3RfZnJlcSkgeworCQluZXdf ZnJlcSA9IHJwcy0+Ym9vc3RfZnJlcTsKKwkJYWRqID0gMDsKKwl9IGVsc2UgaWYgKHBtX2lpciAm IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPiAwKQorCQkJYWRqICo9IDI7 CisJCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLworCQkJYWRqID0gSVNf Q0hFUlJZVklFVyhndC0+aTkxNSkgPyAyIDogMTsKKworCQlpZiAobmV3X2ZyZXEgPj0gcnBzLT5t YXhfZnJlcV9zb2Z0bGltaXQpCisJCQlhZGogPSAwOworCX0gZWxzZSBpZiAoY2xpZW50X2Jvb3N0 KSB7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVElN RU9VVCkgeworCQlpZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEpCisJCQlu ZXdfZnJlcSA9IHJwcy0+ZWZmaWNpZW50X2ZyZXE7CisJCWVsc2UgaWYgKHJwcy0+Y3VyX2ZyZXEg PiBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCW5ld19mcmVxID0gcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQ7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RP V05fVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPCAwKQorCQkJYWRqICo9IDI7CisJCWVsc2UgLyog Q0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLworCQkJYWRqID0gSVNfQ0hFUlJZVklFVyhn dC0+aTkxNSkgPyAtMiA6IC0xOworCisJCWlmIChuZXdfZnJlcSA8PSBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKKwkJCWFkaiA9IDA7CisJfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLworCQlh ZGogPSAwOworCX0KKworCXJwcy0+bGFzdF9hZGogPSBhZGo7CisKKwkvKgorCSAqIExpbWl0IGRl Ym9vc3RpbmcgYW5kIGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwor CSAqIHdoZW4gaW4gdGhlIHJlc3BlY3RpdmUgcG93ZXIgbW9kZXMgKGkuZS4gc2xvd2x5IGRlY3Jl YXNlIGZyZXF1ZW5jaWVzCisJICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xv d2x5IGluY3JlYXNlIGZyZXF1ZW5jaWVzIHdoaWxlCisJICogaW4gdGhlIExPV19QT1dFUiB6b25l KS4gT24gaWRsZSwgd2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKKwkgKiB0byB0aGUg bmV4dCBsZXZlbCBxdWlja2x5LCBhbmQgY29udmVyc2VseSBpZiBidXN5IHdlIGV4cGVjdCB0bwor CSAqIGhpdCBhIHdhaXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93ZXIuCisJ ICovCisJaWYgKChhZGogPCAwICYmIHJwcy0+cG93ZXIubW9kZSA9PSBISUdIX1BPV0VSKSB8fAor CSAgICAoYWRqID4gMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VSKSkKKwkJcnBzLT5s YXN0X2FkaiA9IDA7CisKKwkvKiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJmYWNlcyBtYXkgaGF2ZSBz bnVjayBpbiB3aGlsZSBzZXJ2aWNpbmcgdGhlCisJICogaW50ZXJydXB0CisJICovCisJbmV3X2Zy ZXEgKz0gYWRqOworCW5ld19mcmVxID0gY2xhbXBfdChpbnQsIG5ld19mcmVxLCBtaW4sIG1heCk7 CisKKwlpZiAoaW50ZWxfcnBzX3NldChycHMsIG5ld19mcmVxKSkgeworCQlEUk1fREVCVUdfRFJJ VkVSKCJGYWlsZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKKwkJcnBzLT5sYXN0X2Fk aiA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOworCitvdXQ6CisJc3Bpbl9s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlnZW42X2d0X3BtX3VubWFza19pcnEoZ3QsIHJwcy0+ cG1fZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cit9CisKK3ZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikK K3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisJY29uc3QgdTMyIGV2 ZW50cyA9IHJwcy0+cG1fZXZlbnRzICYgcG1faWlyOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgm Z3QtPmlycV9sb2NrKTsKKworCWlmICh1bmxpa2VseSghZXZlbnRzKSkKKwkJcmV0dXJuOworCisJ Z2VuNl9ndF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKKworCXJwcy0+cG1faWlyIHw9IGV2ZW50 czsKKwlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOworfQorCit2b2lkIGdlbjZfcnBzX2lycV9o YW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAocG1faWlyICYg cnBzLT5wbV9ldmVudHMpIHsKKwkJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChycHMp OworCisJCXNwaW5fbG9jaygmZ3QtPmlycV9sb2NrKTsKKwkJZ2VuNl9ndF9wbV9tYXNrX2lycShn dCwgcG1faWlyICYgcnBzLT5wbV9ldmVudHMpOworCQlycHMtPnBtX2lpciB8PSBwbV9paXIgJiBy cHMtPnBtX2V2ZW50czsKKwkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKKwkJc3Bpbl91bmxv Y2soJmd0LT5pcnFfbG9jayk7CisJfQorCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQorCQly ZXR1cm47CisKKwlpZiAocG1faWlyICYgUE1fVkVCT1hfVVNFUl9JTlRFUlJVUFQpCisJCWludGVs X2VuZ2luZV9icmVhZGNydW1ic19pcnEoaTkxNS0+ZW5naW5lW1ZFQ1MwXSk7CisKKwlpZiAocG1f aWlyICYgUE1fVkVCT1hfQ1NfRVJST1JfSU5URVJSVVBUKQorCQlEUk1fREVCVUcoIkNvbW1hbmQg cGFyc2VyIGVycm9yLCBwbV9paXIgMHglMDh4XG4iLCBwbV9paXIpOworfQorCit2b2lkIGdlbjVf cnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxf dW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTMyIGJ1c3lfdXAsIGJ1c3lf ZG93biwgbWF4X2F2ZywgbWluX2F2ZzsKKwl1OCBuZXdfZnJlcTsKKworCXNwaW5fbG9jaygmbWNo ZGV2X2xvY2spOworCisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLAorCQkJICAgICBNRU1J TlRSU1RTLAorCQkJICAgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsK KworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNSU5UUlNUUywgTUVNSU5UX0VWQUxf Q0hHKTsKKwlidXN5X3VwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lUVVBB VkcpOworCWJ1c3lfZG93biA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVERO QVZHKTsKKwltYXhfYXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ0JNQVhBVkcpOwor CW1pbl9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDQk1JTkFWRyk7CisKKwkvKiBI YW5kbGUgUkNTIGNoYW5nZSByZXF1ZXN0IGZyb20gaHcgKi8KKwluZXdfZnJlcSA9IHJwcy0+Y3Vy X2ZyZXE7CisJaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKQorCQluZXdfZnJlcSsrOworCWVsc2UgaWYg KGJ1c3lfZG93biA8IG1pbl9hdmcpCisJCW5ld19mcmVxLS07CisJbmV3X2ZyZXEgPSBjbGFtcChu ZXdfZnJlcSwKKwkJCSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKKwkJCSBycHMtPm1heF9mcmVx X3NvZnRsaW1pdCk7CisKKwlpZiAobmV3X2ZyZXEgIT0gcnBzLT5jdXJfZnJlcSAmJiBnZW41X3Jw c19zZXQocnBzLCBuZXdfZnJlcSkpCisJCXJwcy0+Y3VyX2ZyZXEgPSBuZXdfZnJlcTsKKworCXNw aW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0 IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBz X3RvX2k5MTUocnBzKTsKKworCW11dGV4X2luaXQoJnJwcy0+bG9jayk7CisJbXV0ZXhfaW5pdCgm cnBzLT5wb3dlci5tdXRleCk7CisKKwlJTklUX1dPUksoJnJwcy0+d29yaywgcnBzX3dvcmspOwor CisJYXRvbWljX3NldCgmcnBzLT5udW1fd2FpdGVycywgMCk7CisKKwlpZiAoSVNfQ0hFUlJZVklF VyhpOTE1KSkKKwkJY2h2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhp OTE1KSkKKwkJdmx2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDYpCisJCWdlbjZfcnBzX2luaXQocnBzKTsKKwllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUp KQorCQlnZW41X3Jwc19pbml0KHJwcyk7CisKKwkvKiBEZXJpdmUgaW5pdGlhbCB1c2VyIHByZWZl cmVuY2VzL2xpbWl0cyBmcm9tIHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8KKwlycHMtPm1heF9mcmVx X3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7CisJcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPSBy cHMtPm1pbl9mcmVxOworCisJLyogQWZ0ZXIgc2V0dGluZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRo ZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KKwlpZiAoSVNfR0VOKGk5MTUsIDYpIHx8IElTX0lWWUJS SURHRShpOTE1KSB8fCBJU19IQVNXRUxMKGk5MTUpKSB7CisJCXUzMiBwYXJhbXMgPSAwOworCisJ CXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9SRUFEX09DX1BBUkFNUywKKwkJCQkg ICAgICAgJnBhcmFtcywgTlVMTCk7CisJCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1 cHBvcnRlZCAqLworCQkJRFJNX0RFQlVHX0RSSVZFUigiT3ZlcmNsb2NraW5nIHN1cHBvcnRlZCwg bWF4OiAlZE1Ieiwgb3ZlcmNsb2NrOiAlZE1IelxuIiwKKwkJCQkJIChycHMtPm1heF9mcmVxICYg MHhmZikgKiA1MCwKKwkJCQkJIChwYXJhbXMgJiAweGZmKSAqIDUwKTsKKwkJCXJwcy0+bWF4X2Zy ZXEgPSBwYXJhbXMgJiAweGZmOworCQl9CisJfQorCisJLyogRmluYWxseSBhbGxvdyB1cyB0byBi b29zdCB0byBtYXggYnkgZGVmYXVsdCAqLworCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2Zy ZXE7CisJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJwcy0+Y3VyX2ZyZXEgPSBy cHMtPmlkbGVfZnJlcTsKKworCXJwcy0+cG1faW50cm1za19tYnogPSAwOworCisJLyoKKwkgKiBT TkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9uIGxvb3BpbmcgYmF0 Y2hidWZmZXIKKwkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgorCSAqCisJ ICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgb24gVkxWLENIVi4KKwkg Ki8KKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpCisJCXJwcy0+cG1faW50cm1za19tYnogfD0g R0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQor CQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjhfUE1JTlRSX0RJU0FCTEVfUkVESVJFQ1RfVE9f R1VDOworfQorCit1MzIgaW50ZWxfZ2V0X2NhZ2Yoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIg cnBzdGF0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUo cnBzKTsKKwl1MzIgY2FnZjsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwkJY2FnZiA9 IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOworCWVsc2UgaWYg KElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQorCQljYWdmID0gKHJwc3Rh dCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOworCWVsc2UKKwkJY2FnZiA9IChy cHN0YXQgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9DQUdGX1NISUZUOworCisJcmV0dXJuICBj YWdmOworfQorCisvKiBFeHRlcm5hbCBpbnRlcmZhY2UgZm9yIGludGVsX2lwcy5rbyAqLworCitz dGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgX19yY3UgKmlwc19tY2hkZXY7CisKKy8qKgor ICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUgaTkxNSBkcml2ZXIgaXMgbm93 IGxvYWRlZCwgaWYKKyAqIElQUyBnb3QgbG9hZGVkIGZpcnN0LgorICoKKyAqIFRoaXMgYXdrd2Fy ZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxlIGhhcyB0byBkZXBlbmQgb24gdGhlCisg KiBvdGhlciBpbiBvcmRlciBmb3IgSVBTIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjb21tdW5pY2F0 aW9uIG9mCisgKiBHUFUgdHVyYm8gbGltaXRzIHRvIGk5MTUuCisgKi8KK3N0YXRpYyB2b2lkCitp cHNfcGluZ19mb3JfaTkxNV9sb2FkKHZvaWQpCit7CisJdm9pZCAoKmxpbmspKHZvaWQpOworCisJ bGluayA9IHN5bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOworCWlmIChsaW5rKSB7 CisJCWxpbmsoKTsKKwkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7CisJfQor fQorCit2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCS8qCisJICog V2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3aXRoIGludGVsLWlwcyBvbmNlIGV2 ZXJ5dGhpbmcgaXMKKwkgKiBzZXQgdXAsIHRvIGF2b2lkIGludGVsLWlwcyBzbmVha2luZyBpbiBh bmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuCisJICovCisJaWYgKElTX0dFTihndC0+aTkxNSwgNSkp IHsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGlwc19tY2hkZXYsIGd0LT5pOTE1KTsKKwkJaXBzX3Bp bmdfZm9yX2k5MTVfbG9hZCgpOworCX0KK30KKwordm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVn aXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihpcHNf bWNoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICptY2hk ZXZfZ2V0KHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisKKwlyY3Vf cmVhZF9sb2NrKCk7CisJaTkxNSA9IHJjdV9kZXJlZmVyZW5jZShpcHNfbWNoZGV2KTsKKwlpZiAo IWtyZWZfZ2V0X3VubGVzc196ZXJvKCZpOTE1LT5kcm0ucmVmKSkKKwkJaTkxNSA9IE5VTEw7CisJ cmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gaTkxNTsKK30KKworLyoqCisgKiBpOTE1X3Jl YWRfbWNoX3ZhbCAtIHJldHVybiB2YWx1ZSBmb3IgSVBTIHVzZQorICoKKyAqIENhbGN1bGF0ZSBh bmQgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5n IHdoZXRoZXIKKyAqIHdlIGhhdmUgdGhlcm1hbCBhbmQgcG93ZXIgaGVhZHJvb20gdG8gaW5jcmVh c2UgQ1BVIG9yIEdQVSBwb3dlciBidWRnZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaTkxNV9yZWFk X21jaF92YWwodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwl1bnNp Z25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGdyYXBoaWNzX3ZhbCA9 IDA7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOwor CWlmICghaTkxNSkKKwkJcmV0dXJuIDA7CisKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUt PnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKKwkJc3RydWN0IGludGVsX2lwcyAqaXBzID0gJmk5MTUt Pmd0LnJwcy5pcHM7CisKKwkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCQljaGlwc2V0 X3ZhbCA9IF9faXBzX2NoaXBzZXRfdmFsKGlwcyk7CisJCWdyYXBoaWNzX3ZhbCA9IF9faXBzX2dm eF92YWwoaXBzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJfQorCisJZHJt X2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFs OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9yZWFkX21jaF92YWwpOworCisvKioKKyAqIGk5 MTVfZ3B1X3JhaXNlIC0gcmFpc2UgR1BVIGZyZXF1ZW5jeSBsaW1pdAorICoKKyAqIFJhaXNlIHRo ZSBsaW1pdDsgSVBTIGluZGljYXRlcyB3ZSBoYXZlIHRoZXJtYWwgaGVhZHJvb20uCisgKi8KK2Jv b2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlm ICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsKKworCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PCBycHMtPm1heF9mcmVxKQorCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCsrOworCXNwaW5fdW5s b2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0 dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9yYWlzZSk7CisKKy8qKgor ICogaTkxNV9ncHVfbG93ZXIgLSBsb3dlciBHUFUgZnJlcXVlbmN5IGxpbWl0CisgKgorICogSVBT IGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJh Y2sgdGhlIEdQVQorICogZnJlcXVlbmN5IG1heGltdW0uCisgKi8KK2Jvb2wgaTkxNV9ncHVfbG93 ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50 ZWxfcnBzICpycHM7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1j aGRldl9sb2NrKTsKKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPiBycHMtPm1pbl9mcmVx KQorCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdC0tOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2 X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHRydWU7Cit9CitF WFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9sb3dlcik7CisKKy8qKgorICogaTkxNV9ncHVfYnVz eSAtIGluZGljYXRlIEdQVSBidXNpbmVzcyB0byBJUFMKKyAqCisgKiBUZWxsIHRoZSBJUFMgZHJp dmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KKyAqLworYm9vbCBpOTE1X2dwdV9i dXN5KHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJYm9vbCByZXQ7 CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0ID0gaTkxNS0+Z3QuYXdha2U7CisKKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKKwly ZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfYnVzeSk7CisKKy8qKgor ICogaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSAtIGRpc2FibGUgZ3JhcGhpY3MgdHVyYm8KKyAqCisg KiBEaXNhYmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4IGZyZXF1ZW5jeSBh bmQgc2V0dGluZyB0aGUKKyAqIGN1cnJlbnQgZnJlcXVlbmN5IHRvIHRoZSBkZWZhdWx0LgorICov Citib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7CisJYm9vbCByZXQ7CisKKwlp OTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBz ID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7CisJcmV0ID0gZ2VuNV9ycHNfc2V0 KCZpOTE1LT5ndC5ycHMsIHJwcy0+bWluX2ZyZXEpOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2 X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHJldDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9ycHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk5 N2E0YjRlMDIwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3Jwcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaWZuZGVmIElOVEVMX1JQU19ICisjZGVmaW5lIElOVEVMX1JQU19ICisKKyNpbmNsdWRlICJp bnRlbF9ycHNfdHlwZXMuaCIKKworc3RydWN0IGk5MTVfcmVxdWVzdDsKKwordm9pZCBpbnRlbF9y cHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19kcml2ZXJf cmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl91 bnJlZ2lzdGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7CisKK3ZvaWQgaW50ZWxfcnBzX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBpbnRlbF9ycHNfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMg KnJwcyk7Cit2b2lkIGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKK3Zv aWQgaW50ZWxfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKKworaW50IGludGVs X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpOwordm9pZCBpbnRlbF9ycHNf bWFya19pbnRlcmFjdGl2ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGJvb2wgaW50ZXJhY3RpdmUp OworCitpbnQgaW50ZWxfZ3B1X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsK K2ludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpOwor dTMyIGludGVsX2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdDEpOwor Cit2b2lkIGdlbjVfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lk IGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcik7 Cit2b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBw bV9paXIpOworCisjZW5kaWYgLyogSU5URUxfUlBTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcnBzX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40MGViMWZiNjUxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ycHNfdHlwZXMuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKi8KKworI2lmbmRlZiBJTlRFTF9SUFNfVFlQRVNfSAorI2RlZmluZSBJTlRFTF9S UFNfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgv a3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKK3N0cnVjdCBpbnRlbF9pcHMgewor CXU2NCBsYXN0X2NvdW50MTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZTE7CisJdW5zaWduZWQg bG9uZyBjaGlwc2V0X3Bvd2VyOworCXU2NCBsYXN0X2NvdW50MjsKKwl1NjQgbGFzdF90aW1lMjsK Kwl1bnNpZ25lZCBsb25nIGdmeF9wb3dlcjsKKwl1OCBjb3JyOworCisJaW50IGMsIG07Cit9Owor CitzdHJ1Y3QgaW50ZWxfcnBzX2VpIHsKKwlrdGltZV90IGt0aW1lOworCXUzMiByZW5kZXJfYzA7 CisJdTMyIG1lZGlhX2MwOworfTsKKworc3RydWN0IGludGVsX3JwcyB7CisJc3RydWN0IG11dGV4 IGxvY2s7IC8qIHByb3RlY3RzIGVuYWJsaW5nIGFuZCB0aGUgd29ya2VyICovCisKKwkvKgorCSAq IHdvcmssIGludGVycnVwdHNfZW5hYmxlZCBhbmQgcG1faWlyIGFyZSBwcm90ZWN0ZWQgYnkKKwkg KiBkZXZfcHJpdi0+aXJxX2xvY2sKKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwli b29sIGVuYWJsZWQ7CisJYm9vbCBhY3RpdmU7CisJdTMyIHBtX2lpcjsKKworCS8qIFBNIGludGVy cnVwdCBiaXRzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLworCXUzMiBwbV9pbnRybXNr X21iejsKKwl1MzIgcG1fZXZlbnRzOworCisJLyogRnJlcXVlbmNpZXMgYXJlIHN0b3JlZCBpbiBw b3RlbnRpYWxseSBwbGF0Zm9ybSBkZXBlbmRlbnQgbXVsdGlwbGVzLgorCSAqIEluIG90aGVyIHdv cmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUgbXVsdGlwbGllZCBieSBYIHRvIGJlIGludGVyZXN0aW5n LgorCSAqIFNvZnQgbGltaXRzIGFyZSB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3IgdGhlIGR5bmFt aWMgcmVjbG9ja2luZyBkb25lCisJICogYnkgdGhlIGRyaXZlciAocmFpc2UgZnJlcXVlbmNpZXMg dW5kZXIgaGVhdnkgbG9hZHMsIGFuZCBsb3dlciBmb3IKKwkgKiBsaWdodGVyIGxvYWRzKS4gSGFy ZCBsaW1pdHMgYXJlIHRob3NlIGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqCisJICogQSBk aXN0aW5jdGlvbiBpcyBtYWRlIGZvciBvdmVyY2xvY2tpbmcsIHdoaWNoIGlzIG5ldmVyIGVuYWJs ZWQgYnkKKwkgKiBkZWZhdWx0LCBhbmQgaXMgY29uc2lkZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFy ZCBsaW1pdCBpZiBpdCdzCisJICogcG9zc2libGUgYXQgYWxsLgorCSAqLworCXU4IGN1cl9mcmVx OwkJLyogQ3VycmVudCBmcmVxdWVuY3kgKGNhY2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KKwl1OCBs YXN0X2ZyZXE7CQkvKiBMYXN0IHN3cXJlcSBmcmVxdWVuY3kgKi8KKwl1OCBtaW5fZnJlcV9zb2Z0 bGltaXQ7CS8qIE1pbmltdW0gZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCisJ dTggbWF4X2ZyZXFfc29mdGxpbWl0OwkvKiBNYXggZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUg ZHJpdmVyICovCisJdTggbWF4X2ZyZXE7CQkvKiBNYXhpbXVtIGZyZXF1ZW5jeSwgUlAwIGlmIG5v dCBvdmVyY2xvY2tpbmcgKi8KKwl1OCBtaW5fZnJlcTsJCS8qIEFLQSBSUG4uIE1pbmltdW0gZnJl cXVlbmN5ICovCisJdTggYm9vc3RfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4g d2FpdCBib29zdGluZyAqLworCXU4IGlkbGVfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0 IHdoZW4gd2UgYXJlIGlkbGUgKi8KKwl1OCBlZmZpY2llbnRfZnJlcTsJLyogQUtBIFJQZS4gUHJl LWRldGVybWluZWQgYmFsYW5jZWQgZnJlcXVlbmN5ICovCisJdTggcnAxX2ZyZXE7CQkvKiAibGVz cyB0aGFuIiBSUDAgcG93ZXIvZnJlcWVuY3kgKi8KKwl1OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVy Y2xvY2tlZCBtYXggZnJlcXVlbmN5LiAqLworCXUxNiBncGxsX3JlZl9mcmVxOwkvKiB2bHYvY2h2 IEdQTEwgcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLworCisJaW50IGxhc3RfYWRqOworCisJc3RydWN0 IHsKKwkJc3RydWN0IG11dGV4IG11dGV4OworCisJCWVudW0geyBMT1dfUE9XRVIsIEJFVFdFRU4s IEhJR0hfUE9XRVIgfSBtb2RlOworCQl1bnNpZ25lZCBpbnQgaW50ZXJhY3RpdmU7CisKKwkJdTgg dXBfdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVpcmVkIHRvIHVwbG9jayAqLworCQl1 OCBkb3duX3RocmVzaG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sg Ki8KKwl9IHBvd2VyOworCisJYXRvbWljX3QgbnVtX3dhaXRlcnM7CisJYXRvbWljX3QgYm9vc3Rz OworCisJLyogbWFudWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxhdGlvbnMgKi8KKwlzdHJ1Y3QgaW50 ZWxfcnBzX2VpIGVpOworCXN0cnVjdCBpbnRlbF9pcHMgaXBzOworfTsKKworI2VuZGlmIC8qIElO VEVMX1JQU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCmlu ZGV4IGE3MDU3Nzg1ZTQyMC4uZmQzNzcwZTQ4YWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYwpAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgImludGVsX3BtLmgiIC8q IGludGVsX2dwdV9mcmVxKCkgKi8KICNpbmNsdWRlICJzZWxmdGVzdF9sbGMuaCIKKyNpbmNsdWRl ICJpbnRlbF9ycHMuaCIKIAogc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0 IGludGVsX2xsYyAqbGxjKQogewpAQCAtMjUsNiArMjYsOCBAQCBzdGF0aWMgaW50IGdlbjZfdmVy aWZ5X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJZm9yIChncHVfZnJlcSA9IGNv bnN0cy5taW5fZ3B1X2ZyZXE7CiAJICAgICBncHVfZnJlcSA8PSBjb25zdHMubWF4X2dwdV9mcmVx OwogCSAgICAgZ3B1X2ZyZXErKykgeworCQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmbGxjX3Rv X2d0KGxsYyktPnJwczsKKwogCQl1bnNpZ25lZCBpbnQgaWFfZnJlcSwgcmluZ19mcmVxLCBmb3Vu ZDsKIAkJdTMyIHZhbDsKIApAQCAtNDQsNyArNDcsNyBAQCBzdGF0aWMgaW50IGdlbjZfdmVyaWZ5 X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJCWlmIChmb3VuZCAhPSBpYV9mcmVx KSB7CiAJCQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90 IG1hdGNoIGV4cGVjdGVkIENQVSBmcmVxLCBmb3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCiAJCQkg ICAgICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEs Ci0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEoaTkxNSwgZ3B1X2ZyZXEgKiAoSU5URUxfR0VOKGk5 MTUpID49IDkgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSkpLAorCQkJICAgICAgIGludGVsX2dwdV9m cmVxKHJwcywgZ3B1X2ZyZXEgKiAoSU5URUxfR0VOKGk5MTUpID49IDkgPyBHRU45X0ZSRVFfU0NB TEVSIDogMSkpLAogCQkJICAgICAgIGZvdW5kLCBpYV9mcmVxKTsKIAkJCWVyciA9IC1FSU5WQUw7 CiAJCQlicmVhazsKQEAgLTU0LDcgKzU3LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5n X2ZyZXEoc3RydWN0IGludGVsX2xsYyAqbGxjKQogCQlpZiAoZm91bmQgIT0gcmluZ19mcmVxKSB7 CiAJCQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1h dGNoIGV4cGVjdGVkIHJpbmcgZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAogCQkJICAg ICAgIGdwdV9mcmVxLCBjb25zdHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAot CQkJICAgICAgIGludGVsX2dwdV9mcmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1 KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwKKwkJCSAgICAgICBpbnRlbF9ncHVfZnJl cShycHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxF UiA6IDEpKSwKIAkJCSAgICAgICBmb3VuZCwgcmluZ19mcmVxKTsKIAkJCWVyciA9IC1FSU5WQUw7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNf c3VibWlzc2lvbi5jCmluZGV4IDAwOWU1NGEzNzY0Zi4uOTdiODU4Y2U3NjgyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKQEAgLTEw MTAsNyArMTAxMCw3IEBAIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCiAKIHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0 IGludGVsX2d0ICpndCkKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPmk5MTUtPmd0 X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPnJwczsKIAlzdHJ1Y3QgaW50 ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKQEAgLTEwNTYsNyArMTA1Niw3IEBA IHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0IGludGVsX2d0ICpndCkK IAogc3RhdGljIHZvaWQgZ3VjX2ludGVycnVwdHNfcmVsZWFzZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQogewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+aTkxNS0+Z3RfcG0ucnBzOworCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+cnBzOwogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSA9IGd0LT51bmNvcmU7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCWVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRl eCAxNjIxMTQzMGViNzguLjIyOTYyMzczNzIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJndC9pbnRlbF9ndF9yZXF1ZXN0cy5o IgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfcmM2Lmgi CisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiZ3QvdWMvaW50ZWxfZ3VjX3N1 Ym1pc3Npb24uaCIKIAogI2luY2x1ZGUgImk5MTVfZGVidWdmcy5oIgpAQCAtNzkxLDcgKzc5Miw3 IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2Rl X3RvX2k5MTUobS0+cHJpdmF0ZSk7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmRl dl9wcml2LT51bmNvcmU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9w bS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTgyNywyMyArODI4LDIz IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnVudXNlZCkKIAkJc2VxX3ByaW50ZihtLCAiRERSIGZyZXE6ICVkIE1IelxuIiwgZGV2X3By aXYtPm1lbV9mcmVxKTsKIAogCQlzZXFfcHJpbnRmKG0sICJhY3R1YWwgR1BVIGZyZXE6ICVkIE1I elxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCAoZnJlcV9zdHMgPj4gOCkgJiAw eGZmKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIChmcmVxX3N0cyA+PiA4KSAmIDB4ZmYp KTsKIAogCQlzZXFfcHJpbnRmKG0sICJjdXJyZW50IEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkg ICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOworCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAibWF4IEdQ VSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t YXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7CiAK IAkJc2VxX3ByaW50ZihtLCAibWluIEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAiaWRsZSBHUFUgZnJlcTog JWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVx KSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVxKSk7CiAKIAkJc2Vx X3ByaW50ZihtLAogCQkJICAgImVmZmljaWVudCAoUlBlKSBmcmVxdWVuY3k6ICVkIE1IelxuIiwK LQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVxKSk7CisJ CQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKIAl9IGVsc2Ug aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewogCQl1MzIgcnBfc3RhdGVfbGltaXRzOwog CQl1MzIgZ3RfcGVyZl9zdGF0dXM7CkBAIC04NzcsNyArODc4LDcgQEAgc3RhdGljIGludCBpOTE1 X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJZWxz ZQogCQkJCXJlcWYgPj49IDI1OwogCQl9Ci0JCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcmVxZik7CisJCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShycHMsIHJlcWYpOwogCiAJCXJwbW9k ZWN0bCA9IEk5MTVfUkVBRChHRU42X1JQX0NPTlRST0wpOwogCQlycGluY2xpbWl0ID0gSTkxNV9S RUFEKEdFTjZfUlBfVVBfVEhSRVNIT0xEKTsKQEAgLTg5MCw4ICs4OTEsNyBAQCBzdGF0aWMgaW50 IGk5MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJ CXJwZG93bmVpID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV05fRUkpICYgR0VONl9DVVJJQVZH X01BU0s7CiAJCXJwY3VyZG93biA9IEk5MTVfUkVBRChHRU42X1JQX0NVUl9ET1dOKSAmIEdFTjZf Q1VSQlNZVEFWR19NQVNLOwogCQlycHByZXZkb3duID0gSTkxNV9SRUFEKEdFTjZfUlBfUFJFVl9E T1dOKSAmIEdFTjZfQ1VSQlNZVEFWR19NQVNLOwotCQljYWdmID0gaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsCi0JCQkJICAgICAgaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIHJwc3RhdCkpOworCQlj YWdmID0gaW50ZWxfZ3B1X2ZyZXEocnBzLCBpbnRlbF9nZXRfY2FnZihycHMsIHJwc3RhdCkpOwog CiAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdB S0VfQUxMKTsKIApAQCAtOTY4LDM3ICs5NjgsMzcgQEAgc3RhdGljIGludCBpOTE1X2ZyZXF1ZW5j eV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQltYXhfZnJlcSAqPSAo SVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKIAkJCSAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKIAkJc2VxX3ByaW50ZihtLCAiTG93ZXN0IChSUE4p IGZyZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4 X2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAogCQltYXhf ZnJlcSA9IChycF9zdGF0ZV9jYXAgJiAweGZmMDApID4+IDg7CiAJCW1heF9mcmVxICo9IChJU19H RU45X0JDKGRldl9wcml2KSB8fAogCQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8g R0VOOV9GUkVRX1NDQUxFUiA6IDEpOwogCQlzZXFfcHJpbnRmKG0sICJOb21pbmFsIChSUDEpIGZy ZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4X2Zy ZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAogCQltYXhfZnJl cSA9IChJU19HRU45X0xQKGRldl9wcml2KSA/IHJwX3N0YXRlX2NhcCA+PiAxNiA6CiAJCQkgICAg cnBfc3RhdGVfY2FwID4+IDApICYgMHhmZjsKIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoZGV2 X3ByaXYpIHx8CiAJCQkgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFf U0NBTEVSIDogMSk7CiAJCXNlcV9wcmludGYobSwgIk1heCBub24tb3ZlcmNsb2NrZWQgKFJQMCkg ZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBtYXhf ZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwogCQlzZXFfcHJp bnRmKG0sICJNYXggb3ZlcmNsb2NrZWQgZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKIAogCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IGZyZXE6 ICVkIE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmN1cl9mcmVx KSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpKTsKIAkJc2VxX3By aW50ZihtLCAiQWN0dWFsIGZyZXE6ICVkIE1IelxuIiwgY2FnZik7CiAJCXNlcV9wcmludGYobSwg IklkbGUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+aWRsZV9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVx KSk7CiAJCXNlcV9wcmludGYobSwgIk1pbiBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKSk7CiAJCXNlcV9wcmludGYobSwgIkJvb3N0IGZyZXE6ICVkIE1I elxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsK KwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVxKSk7CiAJCXNlcV9wcmlu dGYobSwgIk1heCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5tYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9m cmVxKSk7CiAJCXNlcV9wcmludGYobSwKIAkJCSAgICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5 OiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2ll bnRfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVx KSk7CiAJfSBlbHNlIHsKIAkJc2VxX3B1dHMobSwgIm5vIFAtc3RhdGUgaW5mbyBhdmFpbGFibGVc biIpOwogCX0KQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiBzdGF0aWMgaW50IGk5MTVfcmluZ19m cmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2dwdV9m cmVxLCBtaW5fZ3B1X2ZyZXE7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJaW50IGdwdV9m cmVxLCBpYV9mcmVxOwpAQCAtMTQ4NiwxMCArMTQ4NiwxMSBAQCBzdGF0aWMgaW50IGk5MTVfcmlu Z19mcmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJCSAgICAg ICBHRU42X1BDT0RFX1JFQURfTUlOX0ZSRVFfVEFCTEUsCiAJCQkJICAgICAgICZpYV9mcmVxLCBO VUxMKTsKIAkJc2VxX3ByaW50ZihtLCAiJWRcdFx0JWRcdFx0XHRcdCVkXG4iLAotCQkJICAgaW50 ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIChncHVfZnJlcSAqCi0JCQkJCQkgICAgIChJU19HRU45X0JD KGRldl9wcml2KSB8fAotCQkJCQkJICAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/Ci0J CQkJCQkgICAgICBHRU45X0ZSRVFfU0NBTEVSIDogMSkpKSwKKwkJCSAgIGludGVsX2dwdV9mcmVx KHJwcywKKwkJCQkJICAoZ3B1X2ZyZXEgKgorCQkJCQkgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikg fHwKKwkJCQkJICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPworCQkJCQkgICAgR0VOOV9G UkVRX1NDQUxFUiA6IDEpKSksCiAJCQkgICAoKGlhX2ZyZXEgPj4gMCkgJiAweGZmKSAqIDEwMCwK IAkJCSAgICgoaWFfZnJlcSA+PiA4KSAmIDB4ZmYpICogMTAwKTsKIAl9CkBAIC0xNzE3LDcgKzE3 MTgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcnBzX3Bvd2VyX3RvX3N0cih1bnNpZ25lZCBpbnQg cG93ZXIpCiBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5v ZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKIAl1MzIgYWN0X2ZyZXEgPSBycHMtPmN1cl9mcmVxOwogCWludGVsX3dha2VyZWZfdCB3YWtl cmVmOwogCkBAIC0xNzI5LDcgKzE3MzAsNyBAQCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2lu Zm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCQkJdmx2X3B1bml0X3B1dChkZXZf cHJpdik7CiAJCQlhY3RfZnJlcSA9IChhY3RfZnJlcSA+PiA4KSAmIDB4ZmY7CiAJCX0gZWxzZSB7 Ci0JCQlhY3RfZnJlcSA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAorCQkJYWN0X2ZyZXEgPSBp bnRlbF9nZXRfY2FnZihycHMsCiAJCQkJCQkgIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKIAkJ fQogCX0KQEAgLTE3NDAsMTcgKzE3NDEsMTcgQEAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9p bmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIAkJICAgYXRvbWljX3JlYWQoJnJw cy0+bnVtX3dhaXRlcnMpKTsKIAlzZXFfcHJpbnRmKG0sICJJbnRlcmFjdGl2ZT8gJWRcbiIsIFJF QURfT05DRShycHMtPnBvd2VyLmludGVyYWN0aXZlKSk7CiAJc2VxX3ByaW50ZihtLCAiRnJlcXVl bmN5IHJlcXVlc3RlZCAlZCwgYWN0dWFsICVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgcnBzLT5jdXJfZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBhY3Rf ZnJlcSkpOworCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAorCQkgICBp bnRlbF9ncHVfZnJlcShycHMsIGFjdF9mcmVxKSk7CiAJc2VxX3ByaW50ZihtLCAiICBtaW4gaGFy ZDolZCwgc29mdDolZDsgbWF4IHNvZnQ6JWQsIGhhcmQ6JWRcbiIsCi0JCSAgIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWF4X2ZyZXEpKTsKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9m cmVxKSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCks CisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpLAorCQkg ICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKIAlzZXFfcHJpbnRmKG0sICIg IGlkbGU6JWQsIGVmZmljaWVudDolZCwgYm9vc3Q6JWRcbiIsCi0JCSAgIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPmVmZmljaWVudF9mcmVxKSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+Ym9vc3RfZnJlcSkpOworCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVx KSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwKKwkJICAg aW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsKIAogCXNlcV9wcmludGYobSwg IldhaXQgYm9vc3RzOiAlZFxuIiwgYXRvbWljX3JlYWQoJnJwcy0+Ym9vc3RzKSk7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCmluZGV4IDUxMzhkMWVlZDMwNi4uNzhhYzA4ZGI0OGEzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTE4NDEsNiArMTg0MSw4IEBAIHN0YXRpYyBpbnQgaTkxNV9k cm1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAKIAlpbnRlbF9kcF9tc3RfcmVzdW1l KGRldl9wcml2KTsKIAorCWludGVsX2d0X3BtX2VuYWJsZSgmZGV2X3ByaXYtPmd0KTsKKwogCWlu dGVsX2Rpc3BsYXlfcmVzdW1lKGRldik7CiAKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShk ZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggODg4MmMwOTA4YzNiLi5lYjU0NjAyOTA4 MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNTQzLDk0ICs1NDMsNiBAQCBzdHJ1Y3Qg aTkxNV9zdXNwZW5kX3NhdmVkX3JlZ2lzdGVycyB7CiAKIHN0cnVjdCB2bHZfczBpeF9zdGF0ZTsK IAotc3RydWN0IGludGVsX3Jwc19laSB7Ci0Ja3RpbWVfdCBrdGltZTsKLQl1MzIgcmVuZGVyX2Mw OwotCXUzMiBtZWRpYV9jMDsKLX07Ci0KLXN0cnVjdCBpbnRlbF9ycHMgewotCXN0cnVjdCBtdXRl eCBsb2NrOyAvKiBwcm90ZWN0cyBlbmFibGluZyBhbmQgdGhlIHdvcmtlciAqLwotCi0JLyoKLQkg KiB3b3JrLCBpbnRlcnJ1cHRzX2VuYWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5Ci0J ICogZGV2X3ByaXYtPmlycV9sb2NrCi0JICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0J Ym9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7Ci0JdTMyIHBtX2lpcjsKLQotCS8qIFBNIGludGVycnVw dCBiaXRzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLwotCXUzMiBwbV9pbnRybXNrX21i ejsKLQotCS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0g ZGVwZW5kZW50IG11bHRpcGxlcy4KLQkgKiBJbiBvdGhlciB3b3JkcywgKl9mcmVxIG5lZWRzIHRv IGJlIG11bHRpcGxpZWQgYnkgWCB0byBiZSBpbnRlcmVzdGluZy4KLQkgKiBTb2Z0IGxpbWl0cyBh cmUgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBkeW5hbWljIHJlY2xvY2tpbmcgZG9uZQot CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCi0JICogbGlnaHRlciBsb2FkcykuIEhhcmQgbGltaXRzIGFyZSB0aG9zZSBp bXBvc2VkIGJ5IHRoZSBoYXJkd2FyZS4KLQkgKgotCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBm b3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Ci0JICogZGVmYXVsdCwg YW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWJvdmUgdGhlIGhhcmQgbGltaXQgaWYgaXQncwotCSAq IHBvc3NpYmxlIGF0IGFsbC4KLQkgKi8KLQl1OCBjdXJfZnJlcTsJCS8qIEN1cnJlbnQgZnJlcXVl bmN5IChjYWNoZWQsIG1heSBub3QgPT0gSFcpICovCi0JdTggbWluX2ZyZXFfc29mdGxpbWl0Owkv KiBNaW5pbXVtIGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLwotCXU4IG1heF9m cmVxX3NvZnRsaW1pdDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAq LwotCXU4IG1heF9mcmVxOwkJLyogTWF4aW11bSBmcmVxdWVuY3ksIFJQMCBpZiBub3Qgb3ZlcmNs b2NraW5nICovCi0JdTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAq LwotCXU4IGJvb3N0X2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9v c3RpbmcgKi8KLQl1OCBpZGxlX2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdl IGFyZSBpZGxlICovCi0JdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1p bmVkIGJhbGFuY2VkIGZyZXF1ZW5jeSAqLwotCXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIg UlAwIHBvd2VyL2ZyZXFlbmN5ICovCi0JdTggcnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQg bWF4IGZyZXF1ZW5jeS4gKi8KLQl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExMIHJl ZmVyZW5jZSBmcmVxdWVuY3kgKi8KLQotCWludCBsYXN0X2FkajsKLQotCXN0cnVjdCB7Ci0JCXN0 cnVjdCBtdXRleCBtdXRleDsKLQotCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BP V0VSIH0gbW9kZTsKLQkJdW5zaWduZWQgaW50IGludGVyYWN0aXZlOwotCi0JCXU4IHVwX3RocmVz aG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KLQkJdTggZG93bl90 aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1c3kgcmVxdWlyZWQgdG8gZG93bmNsb2NrICovCi0JfSBw b3dlcjsKLQotCWJvb2wgZW5hYmxlZDsKLQlhdG9taWNfdCBudW1fd2FpdGVyczsKLQlhdG9taWNf dCBib29zdHM7Ci0KLQkvKiBtYW51YWwgd2EgcmVzaWRlbmN5IGNhbGN1bGF0aW9ucyAqLwotCXN0 cnVjdCBpbnRlbF9ycHNfZWkgZWk7Ci19OwotCi1zdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210 IHsKLQlzdHJ1Y3QgaW50ZWxfcnBzIHJwczsKLX07Ci0KLS8qIGRlZmluZWQgaW50ZWxfcG0uYyAq LwotZXh0ZXJuIHNwaW5sb2NrX3QgbWNoZGV2X2xvY2s7Ci0KLXN0cnVjdCBpbnRlbF9pbGtfcG93 ZXJfbWdtdCB7Ci0JdTggY3VyX2RlbGF5OwotCXU4IG1pbl9kZWxheTsKLQl1OCBtYXhfZGVsYXk7 Ci0JdTggZm1heDsKLQl1OCBmc3RhcnQ7Ci0KLQl1NjQgbGFzdF9jb3VudDE7Ci0JdW5zaWduZWQg bG9uZyBsYXN0X3RpbWUxOwotCXVuc2lnbmVkIGxvbmcgY2hpcHNldF9wb3dlcjsKLQl1NjQgbGFz dF9jb3VudDI7Ci0JdTY0IGxhc3RfdGltZTI7Ci0JdW5zaWduZWQgbG9uZyBnZnhfcG93ZXI7Ci0J dTggY29ycjsKLQotCWludCBjX207Ci0JaW50IHJfdDsKLX07Ci0KICNkZWZpbmUgTUFYX0wzX1NM SUNFUyAyCiBzdHJ1Y3QgaW50ZWxfbDNfcGFyaXR5IHsKIAl1MzIgKnJlbWFwX2luZm9bTUFYX0wz X1NMSUNFU107CkBAIC0xMDY3LDcgKzk3OSw2IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAkJdTMyIGlycV9tYXNrOwogCQl1MzIgZGVfaXJxX21hc2tbSTkxNV9NQVhfUElQRVNdOwogCX07 Ci0JdTMyIHBtX3Jwc19ldmVudHM7CiAJdTMyIHBpcGVzdGF0X2lycV9tYXNrW0k5MTVfTUFYX1BJ UEVTXTsKIAogCXN0cnVjdCBpOTE1X2hvdHBsdWcgaG90cGx1ZzsKQEAgLTEyMDIsMTMgKzExMTMs NiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJICovCiAJdTMyIGVkcmFtX3NpemVfbWI7 CiAKLQkvKiBnZW42KyBHVCBQTSBzdGF0ZSAqLwotCXN0cnVjdCBpbnRlbF9nZW42X3Bvd2VyX21n bXQgZ3RfcG07Ci0KLQkvKiBpbGstb25seSBpcHMvcnBzIHN0YXRlLiBFdmVyeXRoaW5nIGluIGhl cmUgaXMgcHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWwKLQkgKiBtY2hkZXZfbG9jayBpbiBpbnRlbF9w bS5jICovCi0Jc3RydWN0IGludGVsX2lsa19wb3dlcl9tZ210IGlwczsKLQogCXN0cnVjdCBpOTE1 X3Bvd2VyX2RvbWFpbnMgcG93ZXJfZG9tYWluczsKIAogCXN0cnVjdCBpOTE1X3BzciBwc3I7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBiODgyOTg4MDU2YmQuLmVhYjE3MDlkMTg5NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiZ3QvaW50 ZWxfbW9jcy5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCiAjaW5jbHVkZSAiZ3QvaW50 ZWxfcmVuZGVyc3RhdGUuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKICNpbmNsdWRlICJn dC9pbnRlbF93b3JrYXJvdW5kcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTEyNzIs OCArMTI3Myw2IEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAkJZ290byBlcnJfY29udGV4dDsKIAl9CiAKLQlpbnRlbF9pbml0X2d0X3Bvd2Vy c2F2ZShkZXZfcHJpdik7Ci0KIAlpbnRlbF91Y19pbml0KCZkZXZfcHJpdi0+Z3QudWMpOwogCiAJ cmV0ID0gaW50ZWxfZ3RfaW5pdF9odygmZGV2X3ByaXYtPmd0KTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jCmluZGV4IDU3MmE1YzM3Y2M2MS4uNTk4OTI0YjNjNTU2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgogI2luY2x1 ZGUgImd0L2ludGVsX2d0X2lycS5oIgogI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtX2lycS5oIgor I2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNs dWRlICJpOTE1X2lycS5oIgpAQCAtMzI3LDg3ICszMjgsNiBAQCBzdGF0aWMgaTkxNV9yZWdfdCBn ZW42X3BtX2lpcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIElO VEVMX0dFTihkZXZfcHJpdikgPj0gOCA/IEdFTjhfR1RfSUlSKDIpIDogR0VONl9QTUlJUjsKIH0K IAotdm9pZCBnZW4xMV9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0K LQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCi0Jd2hpbGUgKGdlbjExX2d0X3Jlc2V0 X29uZV9paXIoZ3QsIDAsIEdFTjExX0dUUE0pKQotCQk7Ci0KLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LnBtX2lpciA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLXZv aWQgZ2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0KLQlzcGlu X2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCWdlbjZfZ3RfcG1fcmVzZXRfaWlyKGd0LCBHRU42 X1BNX1JQU19FVkVOVFMpOwotCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0gMDsKLQlzcGlu X3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLXZvaWQgZ2VuNl9lbmFibGVfcnBzX2lu dGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBp bnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JaWYgKFJFQURfT05DRShycHMtPmludGVycnVwdHNfZW5h YmxlZCkpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JV0FS Tl9PTl9PTkNFKHJwcy0+cG1faWlyKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQotCQlXQVJOX09OX09OQ0UoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihndCwgMCwgR0VOMTFfR1RQ TSkpOwotCWVsc2UKLQkJV0FSTl9PTl9PTkNFKEk5MTVfUkVBRChnZW42X3BtX2lpcihkZXZfcHJp dikpICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwotCi0JcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQgPSB0cnVlOwotCWdlbjZfZ3RfcG1fZW5hYmxlX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19l dmVudHMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotfQotCi11MzIgZ2Vu Nl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwgdTMyIG1hc2spCi17Ci0JcmV0dXJuIG1hc2sgJiB+aTkxNS0+Z3RfcG0ucnBzLnBtX2ludHJt c2tfbWJ6OwotfQotCi12b2lkIGdlbjZfZGlzYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7 Ci0KLQlpZiAoIVJFQURfT05DRShycHMtPmludGVycnVwdHNfZW5hYmxlZCkpCi0JCXJldHVybjsK LQotCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQgPSBmYWxzZTsKLQotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVf cnBzX3BtX21hc2soZGV2X3ByaXYsIH4wdSkpOwotCi0JZ2VuNl9ndF9wbV9kaXNhYmxlX2lycShn dCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2Nr KTsKLQlpbnRlbF9zeW5jaHJvbml6ZV9pcnEoZGV2X3ByaXYpOwotCi0JLyogTm93IHRoYXQgd2Ug d2lsbCBub3QgYmUgZ2VuZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKLQkgKiBvdXRz dGFuZGluZyB0YXNrcy4gQXMgd2UgYXJlIGNhbGxlZCBvbiB0aGUgUlBTIGlkbGUgcGF0aCwKLQkg KiB3ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1 cnJlbnQKLQkgKiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCi0JICovCi0J Y2FuY2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMSkKLQkJZ2VuMTFfcmVzZXRfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwotCWVsc2UKLQkJ Z2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci19Ci0KIHZvaWQgZ2VuOV9yZXNl dF9ndWNfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7CiAJc3RydWN0IGludGVs X2d0ICpndCA9IGd1Y190b19ndChndWMpOwpAQCAtMTA2NSwxOTkgKzk4NSw2IEBAIGludCBpbnRl bF9nZXRfY3J0Y19zY2FubGluZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlyZXR1cm4gcG9z aXRpb247CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwotCXUzMiBidXN5X3VwLCBidXN5X2Rvd24s IG1heF9hdmcsIG1pbl9hdmc7Ci0JdTggbmV3X2RlbGF5OwotCi0Jc3Bpbl9sb2NrKCZtY2hkZXZf bG9jayk7Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsCi0JCQkgICAgIE1FTUlOVFJT VFMsCi0JCQkgICAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUlNUUykpOwotCi0J bmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXk7Ci0KLQlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Ci0JYnVzeV91cCA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVFVQQVZHKTsKLQlidXN5X2Rvd24gPSBp bnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7Ci0JbWF4X2F2ZyA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKLQltaW5fYXZnID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBSQ0JNSU5BVkcpOwotCi0JLyogSGFuZGxlIFJDUyBjaGFuZ2UgcmVx dWVzdCBmcm9tIGh3ICovCi0JaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKSB7Ci0JCWlmIChkZXZfcHJp di0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkKLQkJCW5ld19kZWxh eSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5IC0gMTsKLQkJaWYgKG5ld19kZWxheSA8IGRldl9w cml2LT5pcHMubWF4X2RlbGF5KQotCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5tYXhfZGVs YXk7Ci0JfSBlbHNlIGlmIChidXN5X2Rvd24gPCBtaW5fYXZnKSB7Ci0JCWlmIChkZXZfcHJpdi0+ aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSkKLQkJCW5ld19kZWxheSA9 IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5ICsgMTsKLQkJaWYgKG5ld19kZWxheSA+IGRldl9wcml2 LT5pcHMubWluX2RlbGF5KQotCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5taW5fZGVsYXk7 Ci0JfQotCi0JaWYgKGlyb25sYWtlX3NldF9kcnBzKGRldl9wcml2LCBuZXdfZGVsYXkpKQotCQlk ZXZfcHJpdi0+aXBzLmN1cl9kZWxheSA9IG5ld19kZWxheTsKLQotCXNwaW5fdW5sb2NrKCZtY2hk ZXZfbG9jayk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCXN0cnVjdCBpbnRlbF9ycHNfZWkgKmVp KQotewotCWVpLT5rdGltZSA9IGt0aW1lX2dldF9yYXcoKTsKLQllaS0+cmVuZGVyX2MwID0gSTkx NV9SRUFEKFZMVl9SRU5ERVJfQzBfQ09VTlQpOwotCWVpLT5tZWRpYV9jMCA9IEk5MTVfUkVBRChW TFZfTUVESUFfQzBfQ09VTlQpOwotfQotCi12b2lkIGdlbjZfcnBzX3Jlc2V0X2VpKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQltZW1zZXQoJmRldl9wcml2LT5ndF9wbS5y cHMuZWksIDAsIHNpemVvZihkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpKSk7Ci19Ci0KLXN0YXRpYyB1 MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBt X2lpcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK LQljb25zdCBzdHJ1Y3QgaW50ZWxfcnBzX2VpICpwcmV2ID0gJnJwcy0+ZWk7Ci0Jc3RydWN0IGlu dGVsX3Jwc19laSBub3c7Ci0JdTMyIGV2ZW50cyA9IDA7Ci0KLQlpZiAoKHBtX2lpciAmIEdFTjZf UE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQl2bHZfYzBfcmVhZChk ZXZfcHJpdiwgJm5vdyk7Ci0KLQlpZiAocHJldi0+a3RpbWUpIHsKLQkJdTY0IHRpbWUsIGMwOwot CQl1MzIgcmVuZGVyLCBtZWRpYTsKLQotCQl0aW1lID0ga3RpbWVfdXNfZGVsdGEobm93Lmt0aW1l LCBwcmV2LT5rdGltZSk7Ci0KLQkJdGltZSAqPSBkZXZfcHJpdi0+Y3pjbGtfZnJlcTsKLQotCQkv KiBXb3JrbG9hZCBjYW4gYmUgc3BsaXQgYmV0d2VlbiByZW5kZXIgKyBtZWRpYSwKLQkJICogZS5n LiBTd2FwQnVmZmVycyBiZWluZyBibGl0dGVkIGluIFggYWZ0ZXIgYmVpbmcgcmVuZGVyZWQgaW4K LQkJICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBl bmdpbmVzCi0JCSAqIGludG8gb3VyIGFjdGl2aXR5IGNvdW50ZXIuCi0JCSAqLwotCQlyZW5kZXIg PSBub3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwotCQltZWRpYSA9IG5vdy5tZWRpYV9j MCAtIHByZXYtPm1lZGlhX2MwOwotCQljMCA9IG1heChyZW5kZXIsIG1lZGlhKTsKLQkJYzAgKj0g MTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAqLwot Ci0JCWlmIChjMCA+IHRpbWUgKiBycHMtPnBvd2VyLnVwX3RocmVzaG9sZCkKLQkJCWV2ZW50cyA9 IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwotCQllbHNlIGlmIChjMCA8IHRpbWUgKiBycHMtPnBv d2VyLmRvd25fdGhyZXNob2xkKQotCQkJZXZlbnRzID0gR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9M RDsKLQl9Ci0KLQlycHMtPmVpID0gbm93OwotCXJldHVybiBldmVudHM7Ci19Ci0KLXN0YXRpYyB2 b2lkIGdlbjZfcG1fcnBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgZ3RfcG0ucnBzLndvcmspOwotCXN0cnVjdCBpbnRlbF9ndCAq Z3QgPSAmZGV2X3ByaXYtPmd0OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+ Z3RfcG0ucnBzOwotCWJvb2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7Ci0JaW50IG5ld19kZWxheSwg YWRqLCBtaW4sIG1heDsKLQl1MzIgcG1faWlyID0gMDsKLQotCXNwaW5fbG9ja19pcnEoJmd0LT5p cnFfbG9jayk7Ci0JaWYgKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKSB7Ci0JCXBtX2lpciA9IGZl dGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7Ci0JCWNsaWVudF9ib29zdCA9IGF0b21pY19yZWFk KCZycHMtPm51bV93YWl0ZXJzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2sp OwotCi0JLyogTWFrZSBzdXJlIHdlIGRpZG4ndCBxdWV1ZSBhbnl0aGluZyB3ZSdyZSBub3QgZ29p bmcgdG8gcHJvY2Vzcy4gKi8KLQlXQVJOX09OKHBtX2lpciAmIH5kZXZfcHJpdi0+cG1fcnBzX2V2 ZW50cyk7Ci0JaWYgKChwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cykgPT0gMCAmJiAh Y2xpZW50X2Jvb3N0KQotCQlnb3RvIG91dDsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0K LQlwbV9paXIgfD0gdmx2X3dhX2MwX2VpKGRldl9wcml2LCBwbV9paXIpOwotCi0JYWRqID0gcnBz LT5sYXN0X2FkajsKLQluZXdfZGVsYXkgPSBycHMtPmN1cl9mcmVxOwotCW1pbiA9IHJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0OwotCW1heCA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0OwotCWlmIChj bGllbnRfYm9vc3QpCi0JCW1heCA9IHJwcy0+bWF4X2ZyZXE7Ci0JaWYgKGNsaWVudF9ib29zdCAm JiBuZXdfZGVsYXkgPCBycHMtPmJvb3N0X2ZyZXEpIHsKLQkJbmV3X2RlbGF5ID0gcnBzLT5ib29z dF9mcmVxOwotCQlhZGogPSAwOwotCX0gZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9VUF9U SFJFU0hPTEQpIHsKLQkJaWYgKGFkaiA+IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYg bmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9w cml2KSA/IDIgOiAxOwotCi0JCWlmIChuZXdfZGVsYXkgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGlt aXQpCi0JCQlhZGogPSAwOwotCX0gZWxzZSBpZiAoY2xpZW50X2Jvb3N0KSB7Ci0JCWFkaiA9IDA7 Ci0JfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVElNRU9VVCkgewotCQlpZiAo cnBzLT5jdXJfZnJlcSA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEpCi0JCQluZXdfZGVsYXkgPSBycHMt PmVmZmljaWVudF9mcmVxOwotCQllbHNlIGlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJl cV9zb2Z0bGltaXQpCi0JCQluZXdfZGVsYXkgPSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdDsKLQkJ YWRqID0gMDsKLQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQp IHsKLQkJaWYgKGFkaiA8IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYgbmVlZHMgZXZl biBlbmNvZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/IC0y IDogLTE7Ci0KLQkJaWYgKG5ld19kZWxheSA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJ CWFkaiA9IDA7Ci0JfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLwotCQlhZGogPSAwOwotCX0K LQotCXJwcy0+bGFzdF9hZGogPSBhZGo7Ci0KLQkvKgotCSAqIExpbWl0IGRlYm9vc3RpbmcgYW5k IGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwotCSAqIHdoZW4gaW4g dGhlIHJlc3BlY3RpdmUgcG93ZXIgbW9kZXMgKGkuZS4gc2xvd2x5IGRlY3JlYXNlIGZyZXF1ZW5j aWVzCi0JICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xvd2x5IGluY3JlYXNl IGZyZXF1ZW5jaWVzIHdoaWxlCi0JICogaW4gdGhlIExPV19QT1dFUiB6b25lKS4gT24gaWRsZSwg d2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKLQkgKiB0byB0aGUgbmV4dCBsZXZlbCBx dWlja2x5LCBhbmQgY29udmVyc2VseSBpZiBidXN5IHdlIGV4cGVjdCB0bwotCSAqIGhpdCBhIHdh aXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93ZXIuCi0JICovCi0JaWYgKChh ZGogPCAwICYmIHJwcy0+cG93ZXIubW9kZSA9PSBISUdIX1BPV0VSKSB8fAotCSAgICAoYWRqID4g MCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VSKSkKLQkJcnBzLT5sYXN0X2FkaiA9IDA7 Ci0KLQkvKiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJmYWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGls ZSBzZXJ2aWNpbmcgdGhlCi0JICogaW50ZXJydXB0Ci0JICovCi0JbmV3X2RlbGF5ICs9IGFkajsK LQluZXdfZGVsYXkgPSBjbGFtcF90KGludCwgbmV3X2RlbGF5LCBtaW4sIG1heCk7Ci0KLQlpZiAo aW50ZWxfc2V0X3JwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkgewotCQlEUk1fREVCVUdfRFJJVkVS KCJGYWlsZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKLQkJcnBzLT5sYXN0X2FkaiA9 IDA7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotCi1vdXQ6Ci0JLyogTWFrZSBz dXJlIG5vdCB0byBjb3JydXB0IFBNSU1SIHN0YXRlIHVzZWQgYnkgcmluZ2J1ZmZlciBvbiBHRU42 ICovCi0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLQlpZiAocnBzLT5pbnRlcnJ1cHRz X2VuYWJsZWQpCi0JCWdlbjZfZ3RfcG1fdW5tYXNrX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19l dmVudHMpOwotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLX0KLQotCiAvKioKICAq IGl2eWJyaWRnZV9wYXJpdHlfd29yayAtIFdvcmtxdWV1ZSBjYWxsZWQgd2hlbiBhIHBhcml0eSBl cnJvciBpbnRlcnJ1cHQKICAqIG9jY3VycmVkLgpAQCAtMTYzMSw1NCArMTM1OCw2IEBAIHN0YXRp YyB2b2lkIGk5eHhfcGlwZV9jcmNfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCQkJCSAgICAgcmVzMSwgcmVzMik7CiB9CiAKLS8qIFRoZSBSUFMgZXZlbnRz IG5lZWQgZm9yY2V3YWtlLCBzbyB3ZSBhZGQgdGhlbSB0byBhIHdvcmsgcXVldWUgYW5kIG1hc2sg dGhlaXIKLSAqIElNUiBiaXRzIHVudGlsIHRoZSB3b3JrIGlzIGRvbmUuIE90aGVyIGludGVycnVw dHMgY2FuIGJlIHByb2Nlc3NlZCB3aXRob3V0Ci0gKiB0aGUgd29yayBxdWV1ZS4gKi8KLXZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmaTkxNS0+Z3RfcG0ucnBzOwotCWNvbnN0IHUzMiBldmVudHMgPSBpOTE1 LT5wbV9ycHNfZXZlbnRzICYgcG1faWlyOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ3QtPmly cV9sb2NrKTsKLQotCWlmICh1bmxpa2VseSghZXZlbnRzKSkKLQkJcmV0dXJuOwotCi0JZ2VuNl9n dF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKLQotCWlmICghcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQpCi0JCXJldHVybjsKLQotCXJwcy0+cG1faWlyIHw9IGV2ZW50czsKLQlzY2hlZHVsZV93b3Jr KCZycHMtPndvcmspOwotfQotCi12b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRl dl9wcml2LT5ndDsKLQotCWlmIChwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cykgewot CQlzcGluX2xvY2soJmd0LT5pcnFfbG9jayk7Ci0JCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIHBt X2lpciAmIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQkJaWYgKHJwcy0+aW50ZXJydXB0c19l bmFibGVkKSB7Ci0JCQlycHMtPnBtX2lpciB8PSBwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50czsKLQkJCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2so Jmd0LT5pcnFfbG9jayk7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJ cmV0dXJuOwotCi0JaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQotCQlpbnRl bF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbVkVDUzBdKTsKLQotCWlm IChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCi0JCURSTV9ERUJVRygiQ29t bWFuZCBwYXJzZXIgZXJyb3IsIHBtX2lpciAweCUwOHhcbiIsIHBtX2lpcik7Ci19Ci0KIHN0YXRp YyB2b2lkIGk5eHhfcGlwZXN0YXRfaXJxX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIHsKIAllbnVtIHBpcGUgcGlwZTsKQEAgLTE5ODksNyArMTY2OCw3IEBAIHN0YXRp YyBpcnFyZXR1cm5fdCB2YWxsZXl2aWV3X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykK IAkJaWYgKGd0X2lpcikKIAkJCWdlbjZfZ3RfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndCwgZ3Rf aWlyKTsKIAkJaWYgKHBtX2lpcikKLQkJCWdlbjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2LCBw bV9paXIpOworCQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBtX2lp cik7CiAKIAkJaWYgKGhvdHBsdWdfc3RhdHVzKQogCQkJaTl4eF9ocGRfaXJxX2hhbmRsZXIoZGV2 X3ByaXYsIGhvdHBsdWdfc3RhdHVzKTsKQEAgLTIzOTMsNyArMjA3Miw3IEBAIHN0YXRpYyB2b2lk IGlsa19kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAl9CiAKIAlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSAmJiBkZV9paXIgJiBERV9QQ1VfRVZF TlQpCi0JCWlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIoZGV2X3ByaXYpOworCQlnZW41 X3Jwc19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl2 Yl9kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK QEAgLTI0OTgsNyArMjE3Nyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpcm9ubGFrZV9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCWlmIChwbV9paXIpIHsKIAkJCUk5MTVfV1JJVEUo R0VONl9QTUlJUiwgcG1faWlyKTsKIAkJCXJldCA9IElSUV9IQU5ETEVEOwotCQkJZ2VuNl9ycHNf aXJxX2hhbmRsZXIoZGV2X3ByaXYsIHBtX2lpcik7CisJCQlnZW42X3Jwc19pcnFfaGFuZGxlcigm ZGV2X3ByaXYtPmd0LnJwcywgcG1faWlyKTsKIAkJfQogCX0KIApAQCAtNDI3MCwxMyArMzk0OSwx MCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTk2NV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICph cmcpCiB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CiAJaW50IGk7CiAKIAlpbnRl bF9ocGRfaW5pdF93b3JrKGRldl9wcml2KTsKIAotCUlOSVRfV09SSygmcnBzLT53b3JrLCBnZW42 X3BtX3Jwc193b3JrKTsKLQogCUlOSVRfV09SSygmZGV2X3ByaXYtPmwzX3Bhcml0eS5lcnJvcl93 b3JrLCBpdnlicmlkZ2VfcGFyaXR5X3dvcmspOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTDNfU0xJ Q0VTOyArK2kpCiAJCWRldl9wcml2LT5sM19wYXJpdHkucmVtYXBfaW5mb1tpXSA9IE5VTEw7CkBA IC00Mjg1LDMzICszOTYxLDYgQEAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYgKEhBU19HVF9VQyhkZXZfcHJpdikgJiYgSU5URUxfR0VO KGRldl9wcml2KSA8IDExKQogCQlkZXZfcHJpdi0+Z3QucG1fZ3VjX2V2ZW50cyA9IEdVQ19JTlRS X0dVQzJIT1NUIDw8IDE2OwogCi0JLyogTGV0J3MgdHJhY2sgdGhlIGVuYWJsZWQgcnBzIGV2ZW50 cyAqLwotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCi0JCWRldl9wcml2LT5wbV9ycHNfZXZlbnRzID0gR0VONl9QTV9SUF9V UF9FSV9FWFBJUkVEOwotCWVsc2UKLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSAoR0VONl9Q TV9SUF9VUF9USFJFU0hPTEQgfAotCQkJCQkgICBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwK LQkJCQkJICAgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpOwotCi0JLyogV2Ugc2hhcmUgdGhlIHJl Z2lzdGVyIHdpdGggb3RoZXIgZW5naW5lICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPiA5 KQotCQlHRU1fV0FSTl9PTihkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyAmIDB4ZmZmZjAwMDApOwot Ci0JcnBzLT5wbV9pbnRybXNrX21ieiA9IDA7Ci0KLQkvKgotCSAqIFNOQixJVkIsSFNXIGNhbiB3 aGlsZSBWTFYsQ0hWIG1heSBoYXJkIGhhbmcgb24gbG9vcGluZyBiYXRjaGJ1ZmZlcgotCSAqIGlm IEdFTjZfUE1fVVBfRUlfRVhQSVJFRCBpcyBtYXNrZWQuCi0JICoKLQkgKiBUT0RPOiB2ZXJpZnkg aWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNlZCBvbiBWTFYsQ0hWLgotCSAqLwotCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpIDw9IDcpCi0JCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VONl9QTV9SUF9V UF9FSV9FWFBJUkVEOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJcnBzLT5w bV9pbnRybXNrX21ieiB8PSBHRU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RPX0dVQzsKLQog CWRldi0+dmJsYW5rX2Rpc2FibGVfaW1tZWRpYXRlID0gdHJ1ZTsKIAogCS8qIE1vc3QgcGxhdGZv cm1zIHRyZWF0IHRoZSBkaXNwbGF5IGlycSBibG9jayBhcyBhbiBhbHdheXMtb24KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5oCmluZGV4IDE5YTNiYzAxOTUzNS4uZDBkOTFjNmUwMGQ3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmgKQEAgLTIyLDkgKzIyLDYgQEAgc3RydWN0IGludGVsX2d0Owogc3RydWN0 IGludGVsX2d1YzsKIHN0cnVjdCBpbnRlbF91bmNvcmU7CiAKLXZvaWQgZ2VuMTFfcnBzX2lycV9o YW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpOwotdm9pZCBnZW42X3Jwc19p cnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIp OwotCiB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7CiB2b2lkIGludGVsX2lycV9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7CiBpbnQgaW50ZWxfaXJxX2luc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCmluZGV4IDg1OTEyOTE3YzA2Mi4uMjY2ZDY2YjFm YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRl ICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgogI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtLmgiCiAj aW5jbHVkZSAiZ3QvaW50ZWxfcmM2LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAKICNp bmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfcG11LmgiCkBAIC0zNTgsMjUgKzM1 OSwyNiBAQCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHVuc2lnbmVkIGlu dCBwZXJpb2RfbnMpCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsK IAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwogCXN0cnVjdCBpOTE1 X3BtdSAqcG11ID0gJmk5MTUtPnBtdTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPnJw czsKIAogCWlmIChwbXUtPmVuYWJsZSAmIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNU VUFMX0ZSRVFVRU5DWSkpIHsKIAkJdTMyIHZhbDsKIAotCQl2YWwgPSBpOTE1LT5ndF9wbS5ycHMu Y3VyX2ZyZXE7CisJCXZhbCA9IHJwcy0+Y3VyX2ZyZXE7CiAJCWlmIChpbnRlbF9ndF9wbV9nZXRf aWZfYXdha2UoZ3QpKSB7CiAJCQl2YWwgPSBpbnRlbF91bmNvcmVfcmVhZF9ub3RyYWNlKHVuY29y ZSwgR0VONl9SUFNUQVQxKTsKLQkJCXZhbCA9IGludGVsX2dldF9jYWdmKGk5MTUsIHZhbCk7CisJ CQl2YWwgPSBpbnRlbF9nZXRfY2FnZihycHMsIHZhbCk7CiAJCQlpbnRlbF9ndF9wbV9wdXQoZ3Qp OwogCQl9CiAKIAkJYWRkX3NhbXBsZV9tdWx0KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZS RVFfQUNUXSwKLQkJCQlpbnRlbF9ncHVfZnJlcShpOTE1LCB2YWwpLAorCQkJCWludGVsX2dwdV9m cmVxKHJwcywgdmFsKSwKIAkJCQlwZXJpb2RfbnMgLyAxMDAwKTsKIAl9CiAKIAlpZiAocG11LT5l bmFibGUgJiBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kp KSB7CiAJCWFkZF9zYW1wbGVfbXVsdCgmcG11LT5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JF UV0sCi0JCQkJaW50ZWxfZ3B1X2ZyZXEoaTkxNSwgaTkxNS0+Z3RfcG0ucnBzLmN1cl9mcmVxKSwK KwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAogCQkJCXBlcmlvZF9ucyAv IDEwMDApOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVx dWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKaW5kZXggNDU3NWYz Njg0NTVkLi4wOGNlMmVlZWNmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCkBA IC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fY29udGV4dC5oIgogI2lu Y2x1ZGUgImd0L2ludGVsX2NvbnRleHQuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKIAog I2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTI1Nyw4 ICsyNTgsOCBAQCBib29sIGk5MTVfcmVxdWVzdF9yZXRpcmUoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEpCiAJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdOQUxfQklULCAmcnEt PmZlbmNlLmZsYWdzKSkKIAkJaTkxNV9yZXF1ZXN0X2NhbmNlbF9icmVhZGNydW1iKHJxKTsKIAlp ZiAoaTkxNV9yZXF1ZXN0X2hhc193YWl0Ym9vc3QocnEpKSB7Ci0JCUdFTV9CVUdfT04oIWF0b21p Y19yZWFkKCZycS0+aTkxNS0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzKSk7Ci0JCWF0b21pY19kZWMo JnJxLT5pOTE1LT5ndF9wbS5ycHMubnVtX3dhaXRlcnMpOworCQlHRU1fQlVHX09OKCFhdG9taWNf cmVhZCgmcnEtPmVuZ2luZS0+Z3QtPnJwcy5udW1fd2FpdGVycykpOworCQlhdG9taWNfZGVjKCZy cS0+ZW5naW5lLT5ndC0+cnBzLm51bV93YWl0ZXJzKTsKIAl9CiAJaWYgKCF0ZXN0X2JpdChJOTE1 X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKSkgewogCQlzZXRfYml0KEk5MTVf RkVOQ0VfRkxBR19BQ1RJVkUsICZycS0+ZmVuY2UuZmxhZ3MpOwpAQCAtMTQ2Niw3ICsxNDY3LDcg QEAgbG9uZyBpOTE1X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIAkgKi8K IAlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfUFJJT1JJVFkpIHsKIAkJaWYgKCFpOTE1X3JlcXVlc3Rf c3RhcnRlZChycSkgJiYgSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA2KQotCQkJZ2VuNl9ycHNfYm9v c3QocnEpOworCQkJaW50ZWxfcnBzX2Jvb3N0KHJxKTsKIAkJaTkxNV9zY2hlZHVsZV9idW1wX3By aW9yaXR5KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z eXNmcy5jCmluZGV4IGJmMDM5YjhiYTU5My4uNjU0NzY5MDlkMWJmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4K IAogI2luY2x1ZGUgImd0L2ludGVsX3JjNi5oIgorI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgog CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X3N5c2ZzLmgiCkBAIC0yNTks NiArMjYwLDcgQEAgc3RhdGljIHNzaXplX3QgZ3RfYWN0X2ZyZXFfbWh6X3Nob3coc3RydWN0IGRl dmljZSAqa2RldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9y X3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5y cHM7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJdTMyIGZyZXE7CiAKQEAgLTI3MSwzMSAr MjczLDMxIEBAIHN0YXRpYyBzc2l6ZV90IGd0X2FjdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZp Y2UgKmtkZXYsCiAKIAkJZnJlcSA9IChmcmVxID4+IDgpICYgMHhmZjsKIAl9IGVsc2UgewotCQlm cmVxID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsK KwkJZnJlcSA9IGludGVsX2dldF9jYWdmKHJwcywgSTkxNV9SRUFEKEdFTjZfUlBTVEFUMSkpOwog CX0KIAogCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJl Zik7CiAKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsIGZyZXEpKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUs ICIlZFxuIiwgaW50ZWxfZ3B1X2ZyZXEocnBzLCBmcmVxKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90 IGd0X2N1cl9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1 ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwKLQkJCQkg ICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkpOworCQkJaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmN1cl9mcmVxKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFf bWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBr ZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwK LQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0u cnBzLmJvb3N0X2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVx KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmtkZXYsCkBAIC0zMDMsNyArMzA1LDcgQEAgc3RhdGljIHNzaXplX3QgZ3RfYm9vc3Rf ZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIAkJCQkgICAgICAgY29uc3QgY2hh ciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJp di0+Z3QucnBzOwogCWJvb2wgYm9vc3QgPSBmYWxzZTsKIAlzc2l6ZV90IHJldDsKIAl1MzIgdmFs OwpAQCAtMzEzLDcgKzMxNSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCXJldHVybiByZXQ7CiAKIAkvKiBWYWxpZGF0ZSBh Z2FpbnN0IChzdGF0aWMpIGhhcmR3YXJlIGxpbWl0cyAqLwotCXZhbCA9IGludGVsX2ZyZXFfb3Bj b2RlKGRldl9wcml2LCB2YWwpOworCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsK IAlpZiAodmFsIDwgcnBzLT5taW5fZnJlcSB8fCB2YWwgPiBycHMtPm1heF9mcmVxKQogCQlyZXR1 cm4gLUVJTlZBTDsKIApAQCAtMzMzLDE5ICszMzUsMTkgQEAgc3RhdGljIHNzaXplX3Qgdmx2X3Jw ZV9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBB R0VfU0laRSwgIiVkXG4iLAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAg IGRldl9wcml2LT5ndF9wbS5ycHMuZWZmaWNpZW50X2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVx KHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9tYXhf ZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVk XG4iLAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5n dF9wbS5ycHMubWF4X2ZyZXFfc29mdGxpbWl0KSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVx X21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LApAQCAtMzUzLDE5ICszNTUsMTcgQEAgc3Rh dGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7Ci0JdTMyIHZhbDsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0LnJwczsKIAlzc2l6ZV90IHJldDsKKwl1MzIgdmFsOwogCiAJcmV0ID0ga3N0cnRvdTMyKGJ1 ZiwgMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXdha2VyZWYgPSBpbnRl bF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwogCW11dGV4X2xvY2soJnJw cy0+bG9jayk7CiAKLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKKwl2 YWwgPSBpbnRlbF9mcmVxX29wY29kZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWluX2Zy ZXEgfHwKIAkgICAgdmFsID4gcnBzLT5tYXhfZnJlcSB8fAogCSAgICB2YWwgPCBycHMtPm1pbl9m cmVxX3NvZnRsaW1pdCkgewpAQCAtMzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21h eF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogCiAJaWYgKHZhbCA+IHJwcy0+ cnAwX2ZyZXEpCiAJCURSTV9ERUJVRygiVXNlciByZXF1ZXN0ZWQgb3ZlcmNsb2NraW5nIHRvICVk XG4iLAotCQkJICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7CisJCQkgIGludGVsX2dw dV9mcmVxKHJwcywgdmFsKSk7CiAKIAlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA9IHZhbDsKIApA QCAtMzgzLDE0ICszODMsMTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3Jl KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAog CQkgICAgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCk7CiAKLQkvKiBXZSBzdGlsbCBuZWVkICpf c2V0X3JwcyB0byBwcm9jZXNzIHRoZSBuZXcgbWF4X2RlbGF5IGFuZAorCS8qCisJICogV2Ugc3Rp bGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1heF9kZWxheSBhbmQKIAkgKiB1 cGRhdGUgdGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAotCSAq IGZyZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuICovCi0JcmV0ID0gaW50ZWxfc2V0 X3JwcyhkZXZfcHJpdiwgdmFsKTsKKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFu Z2VkLgorCSAqLworCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwogCiB1bmxvY2s6CiAJbXV0ZXhf dW5sb2NrKCZycHMtPmxvY2spOwotCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVu dGltZV9wbSwgd2FrZXJlZik7CiAKIAlyZXR1cm4gcmV0ID86IGNvdW50OwogfQpAQCAtMzk4LDEw ICszOTksMTAgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmtkZXYsCiBzdGF0aWMgc3NpemVfdCBndF9taW5fZnJlcV9taHpfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQog ewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkx NShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAog CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAotCQkJaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5ndF9wbS5ycHMubWluX2ZyZXFfc29m dGxpbWl0KSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0 KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2 aWNlICprZGV2LApAQCAtNDA5LDE5ICs0MTAsMTcgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2Zy ZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICBjb25zdCBjaGFyICpi dWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JdTMyIHZhbDsK KwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAlzc2l6ZV90IHJl dDsKKwl1MzIgdmFsOwogCiAJcmV0ID0ga3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbCk7CiAJaWYgKHJl dCkKIAkJcmV0dXJuIHJldDsKIAotCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0pOwogCW11dGV4X2xvY2soJnJwcy0+bG9jayk7CiAKLQl2YWwgPSBp bnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKKwl2YWwgPSBpbnRlbF9mcmVxX29wY29k ZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWluX2ZyZXEgfHwKIAkgICAgdmFsID4gcnBz LT5tYXhfZnJlcSB8fAogCSAgICB2YWwgPiBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgewpAQCAt NDM1LDE0ICs0MzQsMTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmtkZXYsCiAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAogCQkg ICAgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCk7CiAKLQkvKiBXZSBzdGlsbCBuZWVkICpfc2V0 X3JwcyB0byBwcm9jZXNzIHRoZSBuZXcgbWluX2RlbGF5IGFuZAorCS8qCisJICogV2Ugc3RpbGwg bmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1pbl9kZWxheSBhbmQKIAkgKiB1cGRh dGUgdGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAotCSAqIGZy ZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuICovCi0JcmV0ID0gaW50ZWxfc2V0X3Jw cyhkZXZfcHJpdiwgdmFsKTsKKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFuZ2Vk LgorCSAqLworCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5s b2NrKCZycHMtPmxvY2spOwotCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGlt ZV9wbSwgd2FrZXJlZik7CiAKIAlyZXR1cm4gcmV0ID86IGNvdW50OwogfQpAQCAtNDY0LDE1ICs0 NjQsMTUgQEAgc3RhdGljIERFVklDRV9BVFRSKGd0X1JQbl9mcmVxX21oeiwgU19JUlVHTywgZ3Rf cnBfbWh6X3Nob3csIE5VTEwpOwogc3RhdGljIHNzaXplX3QgZ3RfcnBfbWh6X3Nob3coc3RydWN0 IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5 MTUoa2Rldik7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7 CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJdTMyIHZhbDsK IAogCWlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUDBfZnJlcV9taHopCi0JCXZhbCA9IGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMF9mcmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEocnBzLCBycHMtPnJwMF9mcmVxKTsKIAllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9S UDFfZnJlcV9taHopCi0JCXZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9m cmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPnJwMV9mcmVxKTsKIAllbHNl IGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUG5fZnJlcV9taHopCi0JCXZhbCA9IGludGVsX2dw dV9mcmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKTsKIAllbHNlCiAJCUJVRygpOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwppbmRleCAzNjIyMzQ0NDkwODcuLjY3NDE1MDdjNzRmMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCkBAIC0xOTcsOCArMTk3LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9pcm9ubGFrZV9nZXRf bWVtX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlicmVhazsKIAl9 CiAKLQlkZXZfcHJpdi0+aXBzLnJfdCA9IGRldl9wcml2LT5tZW1fZnJlcTsKLQogCXN3aXRjaCAo Y3NpcGxsICYgMHgzZmYpIHsKIAljYXNlIDB4MDBjOgogCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAz MjAwOwpAQCAtMjI3LDE0ICsyMjUsNiBAQCBzdGF0aWMgdm9pZCBpOTE1X2lyb25sYWtlX2dldF9t ZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2LT5m c2JfZnJlcSA9IDA7CiAJCWJyZWFrOwogCX0KLQotCWlmIChkZXZfcHJpdi0+ZnNiX2ZyZXEgPT0g MzIwMCkgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDA7Ci0JfSBlbHNlIGlmIChkZXZfcHJpdi0+ ZnNiX2ZyZXEgPiAzMjAwICYmIGRldl9wcml2LT5mc2JfZnJlcSA8PSA0ODAwKSB7Ci0JCWRldl9w cml2LT5pcHMuY19tID0gMTsKLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDI7Ci0J fQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4c3JfbGF0ZW5jeSBjeHNyX2xhdGVuY3lfdGFi bGVbXSA9IHsKQEAgLTYzMzksMTg2NSArNjMyOSwyNTggQEAgdm9pZCBpbnRlbF9pbml0X2lwYyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfZW5hYmxlX2lwYyhkZXZf cHJpdik7CiB9CiAKLS8qCi0gKiBMb2NrIHByb3RlY3RpbmcgSVBTIHJlbGF0ZWQgZGF0YSBzdHJ1 Y3R1cmVzCi0gKi8KLURFRklORV9TUElOTE9DSyhtY2hkZXZfbG9jayk7CitzdGF0aWMgY29uc3Qg c3RydWN0IGNwYXJhbXMgeworCXUxNiBpOworCXUxNiB0OworCXUxNiBtOworCXUxNiBjOworfSBj cGFyYW1zW10gPSB7CisJeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCisJeyAxLCAxMDY2LCAyOTQs IDI0NDYwIH0sCisJeyAxLCA4MDAsIDI5NCwgMjUxOTIgfSwKKwl7IDAsIDEzMzMsIDI3NiwgMjc2 MDUgfSwKKwl7IDAsIDEwNjYsIDI3NiwgMjc2MDUgfSwKKwl7IDAsIDgwMCwgMjMxLCAyMzc4NCB9 LAorfTsKIAotYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgdTggdmFsKQorc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUgPSAmaTkxNS0+dW5jb3JlOwotCXUxNiByZ3Zzd2N0bDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJm1jaGRldl9sb2NrKTsKLQotCXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNv cmUsIE1FTVNXQ1RMKTsKLQlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01EX1NUUykgewotCQlEUk1f REVCVUcoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNl OyAvKiBzdGlsbCBidXN5IHdpdGggYW5vdGhlciBjb21tYW5kICovCi0JfQotCi0Jcmd2c3djdGwg PSAoTUVNQ1RMX0NNRF9DSEZSRVEgPDwgTUVNQ1RMX0NNRF9TSElGVCkgfAotCQkodmFsIDw8IE1F TUNUTF9GUkVRX1NISUZUKSB8IE1FTUNUTF9TRkNBVk07Ci0JaW50ZWxfdW5jb3JlX3dyaXRlMTYo dW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwotCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQx Nih1bmNvcmUsIE1FTVNXQ1RMKTsKLQotCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwotCWlu dGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKLQotCXJldHVy biB0cnVlOworCS8qCisJICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9pbnQsIHdlIG5lZWQg dG8gZGlzYWJsZSBjbG9jaworCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNl ciBvciBpdCB3aWxsIGZhaWwgdG8KKwkgKiBzdGFydCB1cCB3aGVuIG5vIHBvcnRzIGFyZSBhY3Rp dmUuCisJICovCisJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2Ry cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsK LQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKLQl1MzIg cmd2bW9kZWN0bDsKLQl1OCBmbWF4LCBmbWluLCBmc3RhcnQsIHZzdGFydDsKLQotCXNwaW5fbG9j a19pcnEoJm1jaGRldl9sb2NrKTsKLQotCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIE1FTU1PREVDVEwpOwotCi0JLyogRW5hYmxlIHRlbXAgcmVwb3J0aW5nICovCi0JaW50 ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsIEk5MTVfUkVBRChQTU1JU0MpIHwgTUNQ UENFX0VOKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIFRTQzEsIEk5MTVfUkVBRChU U0MxKSB8IFRTRSk7Ci0KLQkvKiAxMDBtcyBSQyBldmFsdWF0aW9uIGludGVydmFscyAqLwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBSQ0RORUksIDEwMDAwMCk7Ci0KLQkvKiBTZXQgbWF4L21pbiB0aHJlc2hv bGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCi0JaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgUkNCTUFYQVZHLCA5MDAwMCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwg UkNCTUlOQVZHLCA4MDAwMCk7Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JSFlT VCwgMSk7CisJZW51bSBwaXBlIHBpcGU7CiAKLQkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIg Zm9yIGludGVycnVwdCBoYW5kbGluZyAqLwotCWZtYXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVf Rk1BWF9NQVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJRlQ7Ci0JZm1pbiA9IChyZ3Ztb2RlY3RsICYg TUVNTU9ERV9GTUlOX01BU0spOwotCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RB UlRfTUFTSykgPj4KLQkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7CisJZm9yX2VhY2hfcGlwZShkZXZf cHJpdiwgcGlwZSkgeworCQlJOTE1X1dSSVRFKERTUENOVFIocGlwZSksCisJCQkgICBJOTE1X1JF QUQoRFNQQ05UUihwaXBlKSkgfAorCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxF KTsKIAotCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0 KSkgJgotCQkgIFBYVkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKwkJSTkxNV9X UklURShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOworCQlQT1NUSU5H X1JFQUQoRFNQU1VSRihwaXBlKSk7CisJfQorfQogCi0JZGV2X3ByaXYtPmlwcy5mbWF4ID0gZm1h eDsgLyogSVBTIGNhbGxiYWNrIHdpbGwgaW5jcmVhc2UgdGhpcyAqLwotCWRldl9wcml2LT5pcHMu ZnN0YXJ0ID0gZnN0YXJ0Oworc3RhdGljIHZvaWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtf VlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAKLQlkZXZfcHJpdi0+aXBzLm1heF9kZWxheSA9 IGZzdGFydDsKLQlkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSA9IGZtaW47Ci0JZGV2X3ByaXYtPmlw cy5jdXJfZGVsYXkgPSBmc3RhcnQ7CisJLyoKKwkgKiBSZXF1aXJlZCBmb3IgRkJDCisJICogV2FG YmNEaXNhYmxlRHBmY0Nsb2NrR2F0aW5nOmlsaworCSAqLworCWRzcGNsa19nYXRlIHw9IElMS19E UEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dB VEVfRElTQUJMRSB8CisJCSAgIElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKIAotCURS TV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKLQkJCSBm bWF4LCBmbWluLCBmc3RhcnQpOworCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMwLAorCQkgICBNQVJJ VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBTVlNNVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOworCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMxLAorCQkgICBWRk1VTklUX0NMT0NLX0dBVEVf RElTQUJMRSk7CiAKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgTUVNSU5UUkVO LAotCQkJICAgTUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOworCS8qCisJ ICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUgc2V0 IGluCisJICogb3JkZXIgdG8gZW5hYmxlIG1lbW9yeSBzZWxmLXJlZnJlc2gKKwkgKiBUaGUgYml0 IDIyLzIxIG9mIDB4NDIwMDQKKwkgKiBUaGUgYml0IDUgb2YgMHg0MjAyMAorCSAqIFRoZSBiaXQg MTUgb2YgMHg0NTAwMAorCSAqLworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJ CSAgIChJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJICAgIElMS19EUEFSQl9H QVRFIHwgSUxLX1ZTRFBGRF9GVUxMKSk7CisJZHNwY2xrX2dhdGUgfD0gSUxLX0RQQVJCVU5JVF9D TE9DS19HQVRFX0VOQUJMRTsKKwlJOTE1X1dSSVRFKERJU1BfQVJCX0NUTCwKKwkJICAgKEk5MTVf UkVBRChESVNQX0FSQl9DVEwpIHwKKwkJICAgIERJU1BfRkJDX1dNX0RJUykpOwogCiAJLyoKLQkg KiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBpbiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwK KwkgKiBCYXNlZCBvbiB0aGUgZG9jdW1lbnQgZnJvbSBoYXJkd2FyZSBndXlzIHRoZSBmb2xsb3dp bmcgYml0cworCSAqIHNob3VsZCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGluIG9yZGVyIHRvIGVu YWJsZSBGQkMuCisJICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCisJICogVGhlIGJpdCAyMiBvZiAw eDQyMDA0CisJICogVGhlIGJpdCA3LDgsOSBvZiAweDQyMDIwLgogCSAqLworCWlmIChJU19JUk9O TEFLRV9NKGRldl9wcml2KSkgeworCQkvKiBXYUZiY0FzeW5jaEZsaXBEaXNhYmxlRmJjUXVldWU6 aWxrICovCisJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCisJCQkgICBJOTE1X1JF QUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKKwkJCSAgIElMS19GQkNRX0RJUyk7CisJCUk5MTVf V1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKKwkJCSAgIElMS19EUEFSQl9HQVRFKTsKKwl9CiAKLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBWSURTVEFSVCwgdnN0YXJ0KTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19y ZWFkKHVuY29yZSwgVklEU1RBUlQpOworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRz cGNsa19nYXRlKTsKIAotCXJndm1vZGVjdGwgfD0gTUVNTU9ERV9TV01PREVfRU47Ci0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNUTCwgcmd2bW9kZWN0bCk7CisJSTkxNV9XUklU RShJTEtfRElTUExBWV9DSElDS0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNL RU4yKSB8CisJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKKwlJOTE1X1dSSVRFKF8zRF9DSElD S0VOMiwKKwkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEIDw8IDE2IHwKKwkJICAg XzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEKTsKIAotCWlmICh3YWl0X2Zvcl9hdG9taWMo KGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKLQkJCSAgICAgTUVNQ1RMX0NN RF9TVFMpID09IDAsIDEwKSkKLQkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdlIHBl cmYgbW9kZVxuIik7Ci0JbWRlbGF5KDEpOworCS8qIFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxp bmVkRmx1c2g6aWxrICovCisJSTkxNV9XUklURShDQUNIRV9NT0RFXzAsCisJCSAgIF9NQVNLRURf QklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRFUl9GTFVTSF9ESVNBQkxFKSk7CiAKLQlpcm9u bGFrZV9zZXRfZHJwcyhkZXZfcHJpdiwgZnN0YXJ0KTsKKwkvKiBXYURpc2FibGVfUmVuZGVyQ2Fj aGVfT3BlcmF0aW9uYWxGbHVzaDppbGsgKi8KKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01B U0tFRF9CSVRfRElTQUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKIAotCWRldl9wcml2LT5pcHMu bGFzdF9jb3VudDEgPQotCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKSArCi0JCWlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRERSRUMpICsKLQkJaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBDU0lFQyk7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19tc2Vj cyhqaWZmaWVzKTsKLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBHRlhFQyk7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0 X3Jhd19ucygpOworCWc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7CiAKLQlzcGlu X3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlpYnhfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3By aXYpOwogfQogCi1zdGF0aWMgdm9pZCBpcm9ubGFrZV9kaXNhYmxlX2RycHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCitzdGF0aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRpbmcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSA9ICZpOTE1LT51bmNvcmU7Ci0JdTE2IHJndnN3Y3RsOwotCi0Jc3Bpbl9sb2NrX2ly cSgmbWNoZGV2X2xvY2spOwotCi0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29y ZSwgTUVNU1dDVEwpOwotCi0JLyogQWNrIGludGVycnVwdHMsIGRpc2FibGUgRUZDIGludGVycnVw dCAqLwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCi0JCQkgICBNRU1JTlRSRU4sCi0JCQkg ICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJFTikgJgotCQkJICAgfk1FTUlOVF9F VkFMX0NIR19FTik7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNUUywgTUVN SU5UX0VWQUxfQ0hHKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgREVJRVIs Ci0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQp OwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIERFSUlSLCBERV9QQ1VfRVZFTlQpOwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCi0JCQkgICBERUlNUiwKLQkJCSAgIGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgREVJTVIpIHwgREVfUENVX0VWRU5UKTsKLQotCS8qIEdvIGJhY2sgdG8g dGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSAqLwotCWlyb25sYWtlX3NldF9kcnBzKGk5MTUsIGk5MTUt Pmlwcy5mc3RhcnQpOwotCW1kZWxheSgxKTsKLQlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsK LQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwotCW1kZWxh eSgxKTsKKwllbnVtIHBpcGUgcGlwZTsKKwl1MzIgdmFsOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZt Y2hkZXZfbG9jayk7CisJLyoKKwkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQb2ludCwgd2Ug bmVlZCB0byBkaXNhYmxlIGNsb2NrCisJICogZ2F0aW5nIGZvciB0aGUgcGFuZWwgcG93ZXIgc2Vx dWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bworCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJl IGFjdGl2ZS4KKwkgKi8KKwlJOTE1X1dSSVRFKFNPVVRIX0RTUENMS19HQVRFX0QsIFBDSF9EUExT VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBQQ0hfRFBMVU5JVF9DTE9DS19HQVRFX0RJ U0FCTEUgfAorCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJSTkxNV9XUklU RShTT1VUSF9DSElDS0VOMiwgSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4yKSB8CisJCSAgIERQTFNf RURQX1BQU19GSVhfRElTKTsKKwkvKiBUaGUgYmVsb3cgZml4ZXMgdGhlIHdlaXJkIGRpc3BsYXkg Y29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0ZWQKKwkgKiBkb3dud2FyZCwgb24gKG9ubHkp IExWRFMgb2Ygc29tZSBIUCBsYXB0b3BzIHdpdGggSVZZLgorCSAqLworCWZvcl9lYWNoX3BpcGUo ZGV2X3ByaXYsIHBpcGUpIHsKKwkJdmFsID0gSTkxNV9SRUFEKFRSQU5TX0NISUNLRU4yKHBpcGUp KTsKKwkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKKwkJdmFsICY9IH5U UkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7CisJCWlmIChkZXZfcHJpdi0+dmJ0 LmZkaV9yeF9wb2xhcml0eV9pbnZlcnRlZCkKKwkJCXZhbCB8PSBUUkFOU19DSElDS0VOMl9GRElf UE9MQVJJVFlfUkVWRVJTRUQ7CisJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJBTUVfU1RBUlRf REVMQVlfTUFTSzsKKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1Jf Q09VTlRFUjsKKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfTU9E RVNXSVRDSDsKKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFsKTsKKwl9CisJ LyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBw aXBlKSB7CisJCUk5MTVfV1JJVEUoVFJBTlNfQ0hJQ0tFTjEocGlwZSksCisJCQkgICBUUkFOU19D SElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOworCX0KIH0KIAotLyogVGhlcmUncyBhIGZ1bm55 IGh3IGlzc3VlIHdoZXJlIHRoZSBodyByZXR1cm5zIGFsbCAwIHdoZW4gcmVhZGluZyBmcm9tCi0g KiBHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMuIEhlbmNlIHdlIGFsd2F5cyBuZWVkIHRvIGNvbXB1 dGUgdGhlIGRlc2lyZWQgdmFsdWUKLSAqIG91cnNlbHZlcywgaW5zdGVhZCBvZiBkb2luZyBhIHJt dyBjeWNsZSAod2hpY2ggbWlnaHQgcmVzdWx0IGluIHVzIGNsZWFyaW5nCi0gKiBhbGwgbGltaXRz IGFuZCB0aGUgZ3B1IHN0dWNrIGF0IHdoYXRldmVyIGZyZXF1ZW5jeSBpdCBpcyBhdCBhdG0pLgot ICovCi1zdGF0aWMgdTMyIGludGVsX3Jwc19saW1pdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCB1OCB2YWwpCitzdGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMyIGxpbWl0czsKLQotCS8qIE9ubHkgc2V0IHRo ZSBkb3duIGxpbWl0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgbG93ZXN0IGxldmVsIHRvIGF2b2lk Ci0JICogZ2V0dGluZyBtb3JlIGludGVycnVwdHMsIG90aGVyd2lzZSBsZWF2ZSB0aGlzIGNsZWFy LiBUaGlzIHByZXZlbnRzIGEKLQkgKiByYWNlIGluIHRoZSBodyB3aGVuIGNvbWluZyBvdXQgb2Yg cmM2OiBUaGVyZSdzIGEgdGlueSB3aW5kb3cgd2hlcmUKLQkgKiB0aGUgaHcgcnVucyBhdCB0aGUg bWluaW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0aW5nIHRoZSBkZXNpcmVkCi0JICogZnJlcXVlbmN5 LCBpZiB0aGUgZG93biB0aHJlc2hvbGQgZXhwaXJlcyBpbiB0aGF0IHdpbmRvdyB3ZSB3aWxsIG5v dAotCSAqIHJlY2VpdmUgYSBkb3duIGludGVycnVwdC4gKi8KLQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSA5KSB7Ci0JCWxpbWl0cyA9IChycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgPDwgMjM7 Ci0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlsaW1pdHMgfD0gKHJw cy0+bWluX2ZyZXFfc29mdGxpbWl0KSA8PCAxNDsKLQl9IGVsc2UgewotCQlsaW1pdHMgPSBycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNDsKLQkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKLQkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsKLQl9 CisJdTMyIHRtcDsKIAotCXJldHVybiBsaW1pdHM7CisJdG1wID0gSTkxNV9SRUFEKE1DSF9TU0tQ RCk7CisJaWYgKCh0bXAgJiBNQ0hfU1NLUERfV00wX01BU0spICE9IE1DSF9TU0tQRF9XTTBfVkFM KQorCQlEUk1fREVCVUdfS01TKCJXcm9uZyBNQ0hfU1NLUEQgdmFsdWU6IDB4JTA4eCBUaGlzIGNh biBjYXVzZSB1bmRlcnJ1bnMuXG4iLAorCQkJICAgICAgdG1wKTsKIH0KIAotc3RhdGljIHZvaWQg cnBzX3NldF9wb3dlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBuZXdf cG93ZXIpCitzdGF0aWMgdm9pZCBnZW42X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKLQl1MzIgdGhyZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAw OyAvKiBpbiAlICovCi0JdTMyIGVpX3VwID0gMCwgZWlfZG93biA9IDA7Ci0KLQlsb2NrZGVwX2Fz c2VydF9oZWxkKCZycHMtPnBvd2VyLm11dGV4KTsKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtfVlJI VU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAKLQlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIu bW9kZSkKLQkJcmV0dXJuOworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19n YXRlKTsKIAotCS8qIE5vdGUgdGhlIHVuaXRzIGhlcmUgYXJlIG5vdCBleGFjdGx5IDF1cywgYnV0 IDEyODBucy4gKi8KLQlzd2l0Y2ggKG5ld19wb3dlcikgewotCWNhc2UgTE9XX1BPV0VSOgotCQkv KiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5NSUgYnVzeSBvdmVyIDE2bXMgKi8KLQkJZWlfdXAgPSAx NjAwMDsKLQkJdGhyZXNob2xkX3VwID0gOTU7CisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElD S0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElMS19F TFBJTl80MDlfU0VMRUNUKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDg1JSBidXN5 IG92ZXIgMzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gODU7 Ci0JCWJyZWFrOworCS8qIFdhRGlzYWJsZUhpWlBsYW5lc1doZW5NU0FBRW5hYmxlZDpzbmIgKi8K KwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NI SUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsKIAotCWNhc2UgQkVUV0VFTjoK LQkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gOTAlIGJ1c3kgb3ZlciAxM21zICovCi0JCWVpX3Vw ID0gMTMwMDA7Ci0JCXRocmVzaG9sZF91cCA9IDkwOworCS8qIFdhRGlzYWJsZV9SZW5kZXJDYWNo ZV9PcGVyYXRpb25hbEZsdXNoOnNuYiAqLworCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFT S0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VOQUJMRSkpOwogCi0JCS8qIERvd25jbG9jayBp ZiBsZXNzIHRoYW4gNzUlIGJ1c3kgb3ZlciAzMm1zICovCi0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJ dGhyZXNob2xkX2Rvd24gPSA3NTsKLQkJYnJlYWs7CisJLyoKKwkgKiBCU3BlYyByZWNvb21lbmRz IDh4NCB3aGVuIE1TQUEgaXMgdXNlZCwKKwkgKiBob3dldmVyIGluIHByYWN0aWNlIDE2eDQgc2Vl bXMgZmFzdGVzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVu ZCBvbiB0aGUgV0laIGhhc2hpbmcKKwkgKiBkaXNhYmxlIGJpdCwgd2hpY2ggd2UgZG9uJ3QgdG91 Y2ggaGVyZSwgYnV0IGl0J3MgZ29vZAorCSAqIHRvIGtlZXAgaW4gbWluZCAoc2VlIDNEU1RBVEVf UFMgYW5kIDNEU1RBVEVfV00pLgorCSAqLworCUk5MTVfV1JJVEUoR0VONl9HVF9NT0RFLAorCQkg ICBfTUFTS0VEX0ZJRUxEKEdFTjZfV0laX0hBU0hJTkdfTUFTSywgR0VONl9XSVpfSEFTSElOR18x Nng0KSk7CiAKLQljYXNlIEhJR0hfUE9XRVI6Ci0JCS8qIFVwY2xvY2sgaWYgbW9yZSB0aGFuIDg1 JSBidXN5IG92ZXIgMTBtcyAqLwotCQllaV91cCA9IDEwMDAwOwotCQl0aHJlc2hvbGRfdXAgPSA4 NTsKKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwKKwkJICAgX01BU0tFRF9CSVRfRElTQUJMRShD TTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQikpOwogCi0JCS8qIERvd25jbG9jayBpZiBsZXNz IHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCi0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJdGhyZXNo b2xkX2Rvd24gPSA2MDsKLQkJYnJlYWs7Ci0JfQorCUk5MTVfV1JJVEUoR0VONl9VQ0dDVEwxLAor CQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8CisJCSAgIEdFTjZfQkxCVU5JVF9DTE9DS19H QVRFX0RJU0FCTEUgfAorCQkgICBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCi0J LyogV2hlbiBieXQgY2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMK LQkgKiBzdyBmcmVxIGFkanVzdG1lbnRzLCB0aGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBsaWZ0ZWQu CisJLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5JVCkgY2xv Y2sKKwkgKiBnYXRpbmcgZGlzYWJsZSBtdXN0IGJlIHNldC4gIEZhaWx1cmUgdG8gc2V0IGl0IHJl c3VsdHMgaW4KKwkgKiBmbGlja2VyaW5nIHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRlcmluZyBm YWlsdXJlcyBhZnRlcgorCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1lc2EgImZp cmUiIGRlbW8sIGFuZCBVbmlnaW5lCisJICogU2FuY3R1YXJ5IGFuZCBUcm9waWNzLCBhbmQgYXBw YXJlbnRseSBhbnl0aGluZyBlbHNlIHdpdGgKKwkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVsIGRpc2Nh cmQuCisJICoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJpdCAxMSAoUkNDVU5JVCkgbXVz dCBhbHNvIGJlIHNldCwKKwkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0Y2FzZXMg dG8gZmluZCBpdCBvdXQuCisJICoKKwkgKiBXYURpc2FibGVSQ0NVbml0Q2xvY2tHYXRpbmc6c25i CisJICogV2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKIAkgKi8KLQlpZiAoSVNfVkFM TEVZVklFVyhkZXZfcHJpdikpCi0JCWdvdG8gc2tpcF9od193cml0ZTsKLQotCUk5MTVfV1JJVEUo R0VONl9SUF9VUF9FSSwKLQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwgZWlfdXAp KTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfVEhSRVNIT0xELAotCQkgICBHVF9JTlRFUlZBTF9G Uk9NX1VTKGRldl9wcml2LAotCQkJCSAgICAgICBlaV91cCAqIHRocmVzaG9sZF91cCAvIDEwMCkp OwotCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01f VVMoZGV2X3ByaXYsIGVpX2Rvd24pKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hP TEQsCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsCi0JCQkJICAgICAgIGVpX2Rv d24gKiB0aHJlc2hvbGRfZG93biAvIDEwMCkpOwotCi0JSTkxNV9XUklURShHRU42X1JQX0NPTlRS T0wsCi0JCSAgIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gOSA/IDAgOiBHRU42X1JQX01FRElBX1RV UkJPKSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQ X01FRElBX0lTX0dGWCB8Ci0JCSAgIEdFTjZfUlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8Ci0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Ci0KLXNraXBfaHdfd3JpdGU6 Ci0JcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOwotCXJwcy0+cG93ZXIudXBfdGhyZXNob2xk ID0gdGhyZXNob2xkX3VwOwotCXJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQgPSB0aHJlc2hvbGRf ZG93bjsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50IG5ld19wb3dlcjsKLQotCW5ld19wb3dl ciA9IHJwcy0+cG93ZXIubW9kZTsKLQlzd2l0Y2ggKHJwcy0+cG93ZXIubW9kZSkgewotCWNhc2Ug TE9XX1BPV0VSOgotCQlpZiAodmFsID4gcnBzLT5lZmZpY2llbnRfZnJlcSArIDEgJiYKLQkJICAg IHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQluZXdfcG93ZXIgPSBCRVRXRUVOOwotCQlicmVhazsK KwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMiwKKwkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRF X0RJU0FCTEUgfAorCQkgICBHRU42X1JDQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAotCWNh c2UgQkVUV0VFTjoKLQkJaWYgKHZhbCA8PSBycHMtPmVmZmljaWVudF9mcmVxICYmCi0JCSAgICB2 YWwgPCBycHMtPmN1cl9mcmVxKQotCQkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOwotCQllbHNlIGlm ICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgotCQkJIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQlu ZXdfcG93ZXIgPSBISUdIX1BPV0VSOwotCQlicmVhazsKKwkvKiBXYVN0cmlwc0ZhbnNEaXNhYmxl RmFzdENsaXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywK KwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX0ZBU1RDTElQ X0NVTEwpKTsKIAotCWNhc2UgSElHSF9QT1dFUjoKLQkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVx ICsgcnBzLT5ycDBfZnJlcSkgPj4gMSAmJgotCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKLQkJ CW5ld19wb3dlciA9IEJFVFdFRU47Ci0JCWJyZWFrOwotCX0KLQkvKiBNYXgvbWluIGJpbnMgYXJl IHNwZWNpYWwgKi8KLQlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQotCQluZXdf cG93ZXIgPSBMT1dfUE9XRVI7Ci0JaWYgKHZhbCA+PSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkK LQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwkvKgorCSAqIEJzcGVjIHNheXM6CisJICogIlRo aXMgYml0IG11c3QgYmUgc2V0IGlmIDNEU1RBVEVfQ0xJUCBjbGlwIG1vZGUgaXMgc2V0IHRvIG5v cm1hbCBhbmQKKwkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBp cyBtb3JlIHRoYW4gMTYuIgorCSAqLworCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAorCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FUVFJf RkVUQ0gpKTsKIAotCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0ZXgpOwotCWlmIChycHMtPnBv d2VyLmludGVyYWN0aXZlKQotCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOwotCXJwc19zZXRfcG93 ZXIoZGV2X3ByaXYsIG5ld19wb3dlcik7Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPnBvd2VyLm11dGV4 KTsKLX0KKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYyB0aGUgZm9sbG93aW5nIGJpdHMg c2hvdWxkIGJlCisJICogc2V0IGluIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNo IGFuZCBmYmM6CisJICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDAwCisJICogVGhlIGJp dDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0CisJICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0MjAy MAorCSAqIFRoZSBiaXQxNCBvZiAweDcwMTgwCisJICogVGhlIGJpdDE0IG9mIDB4NzExODAKKwkg KgorCSAqIFdhRmJjQXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKKwkgKi8KKwlJOTE1X1dS SVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAorCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJ Q0tFTjEpIHwKKwkJICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKKwlJOTE1 X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAorCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKKwkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOworCUk5 MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsCisJCSAgIEk5MTVfUkVBRChJTEtfRFNQQ0xLX0dB VEVfRCkgfAorCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8CisJCSAgIElM S19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRSk7CiAKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50 ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUp Ci17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUtPmd0X3BtLnJwczsKKwlnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDYp Ci0JCXJldHVybjsKKwljcHRfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwogCi0JbXV0ZXhf bG9jaygmcnBzLT5wb3dlci5tdXRleCk7Ci0JaWYgKGludGVyYWN0aXZlKSB7Ci0JCWlmICghcnBz LT5wb3dlci5pbnRlcmFjdGl2ZSsrICYmIFJFQURfT05DRShpOTE1LT5ndC5hd2FrZSkpCi0JCQly cHNfc2V0X3Bvd2VyKGk5MTUsIEhJR0hfUE9XRVIpOwotCX0gZWxzZSB7Ci0JCUdFTV9CVUdfT04o IXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUpOwotCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Ci0J fQotCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7CisJZ2VuNl9jaGVja19tY2hfc2V0 dXAoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMgdTMyIGdlbjZfcnBzX3BtX21hc2soc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCitzdGF0aWMgdm9pZCBnZW43X3NldHVw X2ZpeGVkX2Z1bmNfc2NoZWR1bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIg bWFzayA9IDA7Ci0KLQkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnVwdHMgZm9yIGJvdGgg dXAvZG93biBpbiBtYW51YWwgbW9kZSAqLwotCWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3NvZnRs aW1pdCkKLQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX0RP V05fVEhSRVNIT0xEIHwgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQ7Ci0JaWYgKHZhbCA8IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0KQotCQltYXNrIHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCB8 IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwotCi0JbWFzayAmPSBkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50czsKLQotCXJldHVybiBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2LCB+bWFz ayk7Ci19Ci0KLS8qIGdlbjZfc2V0X3JwcyBpcyBjYWxsZWQgdG8gdXBkYXRlIHRoZSBmcmVxdWVu Y3kgcmVxdWVzdCwgYnV0IHNob3VsZCBhbHNvIGJlCi0gKiBjYWxsZWQgd2hlbiB0aGUgcmFuZ2Ug KG1pbl9kZWxheSBhbmQgbWF4X2RlbGF5KSBpcyBtb2RpZmllZCBzbyB0aGF0IHdlIGNhbgotICog dXBkYXRlIHRoZSBHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMgcmVnaXN0ZXIgYWNjb3JkaW5nbHku ICovCi1zdGF0aWMgaW50IGdlbjZfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 X3BtLnJwczsKLQotCS8qIG1pbi9tYXggZGVsYXkgbWF5IHN0aWxsIGhhdmUgYmVlbiBtb2RpZmll ZCBzbyBiZSBzdXJlIHRvCi0JICogd3JpdGUgdGhlIGxpbWl0cyB2YWx1ZS4KLQkgKi8KLQlpZiAo dmFsICE9IHJwcy0+Y3VyX2ZyZXEpIHsKLQkJZ2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoZGV2X3By aXYsIHZhbCk7Ci0KLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJCUk5MTVfV1JJ VEUoR0VONl9SUE5TV1JFUSwKLQkJCQkgICBHRU45X0ZSRVFVRU5DWSh2YWwpKTsKLQkJZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKLQkJCUk5 MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKLQkJCQkgICBIU1dfRlJFUVVFTkNZKHZhbCkpOwotCQll bHNlCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0JCQkJICAgR0VONl9GUkVRVUVOQ1ko dmFsKSB8Ci0JCQkJICAgR0VONl9PRkZTRVQoMCkgfAotCQkJCSAgIEdFTjZfQUdHUkVTU0lWRV9U VVJCTyk7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHdlIGNvbnRpbnVlIHRvIGdldCBpbnRlcnJ1cHRz Ci0JICogdW50aWwgd2UgaGl0IHRoZSBtaW5pbXVtIG9yIG1heGltdW0gZnJlcXVlbmNpZXMuCi0J ICovCi0JSTkxNV9XUklURShHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMsIGludGVsX3Jwc19saW1p dHMoZGV2X3ByaXYsIHZhbCkpOwotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfcnBz X3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwotCi0JcnBzLT5jdXJfZnJlcSA9IHZhbDsKLQl0cmFj ZV9pbnRlbF9ncHVfZnJlcV9jaGFuZ2UoaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19zZXRfcnBzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQotewotCWludCBlcnI7Ci0KLQlpZiAo V0FSTl9PTkNFKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmICh2YWwgJiAxKSwKLQkJICAgICAg Ik9kZCBHUFUgZnJlcSB2YWx1ZVxuIikpCi0JCXZhbCAmPSB+MTsKLQotCUk5MTVfV1JJVEUoR0VO Nl9QTUlOVFJNU0ssIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwotCi0JaWYgKHZh bCAhPSBkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxKSB7Ci0JCXZsdl9wdW5pdF9nZXQoZGV2 X3ByaXYpOwotCQllcnIgPSB2bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVf RlJFUV9SRVEsIHZhbCk7Ci0JCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwotCQlpZiAoZXJyKQot CQkJcmV0dXJuIGVycjsKLQotCQlnZW42X3NldF9ycHNfdGhyZXNob2xkcyhkZXZfcHJpdiwgdmFs KTsKLQl9Ci0KLQlkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxID0gdmFsOwotCXRyYWNlX2lu dGVsX2dwdV9mcmVxX2NoYW5nZShpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotLyogdmx2X3NldF9ycHNfaWRsZTogU2V0IHRoZSBmcmVxdWVuY3kgdG8g aWRsZSwgaWYgR2Z4IGNsb2NrcyBhcmUgZG93bgotICoKLSAqICogSWYgR2Z4IGlzIElkbGUsIHRo ZW4KLSAqIDEuIEZvcmNld2FrZSBNZWRpYSB3ZWxsLgotICogMi4gUmVxdWVzdCBpZGxlIGZyZXEu Ci0gKiAzLiBSZWxlYXNlIEZvcmNld2FrZSBvZiBNZWRpYSB3ZWxsLgotKi8KLXN0YXRpYyB2b2lk IHZsdl9zZXRfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewot CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCXUzMiB2YWwg PSBycHMtPmlkbGVfZnJlcTsKLQlpbnQgZXJyOwotCi0JaWYgKHJwcy0+Y3VyX2ZyZXEgPD0gdmFs KQotCQlyZXR1cm47Ci0KLQkvKiBUaGUgcHVuaXQgZGVsYXlzIHRoZSB3cml0ZSBvZiB0aGUgZnJl cXVlbmN5IGFuZCB2b2x0YWdlIHVudGlsIGl0Ci0JICogZGV0ZXJtaW5lcyB0aGUgR1BVIGlzIGF3 YWtlLiBEdXJpbmcgbm9ybWFsIHVzYWdlIHdlIGRvbid0IHdhbnQgdG8KLQkgKiB3YXN0ZSBwb3dl ciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMgc2xlZXBpbmcgKHJjNikuCi0J ICogSG93ZXZlciwgdGhlIEdQVSBhbmQgZHJpdmVyIGlzIG5vdyBpZGxlIGFuZCB3ZSBkbyBub3Qg d2FudCB0byBkZWxheQotCSAqIHN3aXRjaGluZyB0byBtaW5pbXVtIHZvbHRhZ2UgKHJlZHVjaW5n IHBvd2VyIHdoaWxzdCBpZGxlKSBhcyB3ZSBkbwotCSAqIG5vdCBleHBlY3QgdG8gYmUgd29rZW4g aW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZsdXNoIHRoZQotCSAqIGNoYW5nZSBieSB3 YWtpbmcgdGhlIGRldmljZS4KLQkgKgotCSAqIFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBw b3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0byB0cmljayB0aGUKLQkgKiBwdW5pdCBpbnRvIGNv bW1pdHRpbmcgdGhlIHZvbHRhZ2UgY2hhbmdlKSBhcyB0aGF0IHRha2VzIGEgbG90IGxlc3MKLQkg KiBwb3dlciB0aGFuIHRoZSByZW5kZXIgcG93ZXJ3ZWxsLgotCSAqLwotCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfTUVESUEpOwotCWVyciA9 IHZhbGxleXZpZXdfc2V0X3JwcyhkZXZfcHJpdiwgdmFsKTsKLQlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKLQotCWlmIChlcnIp Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHNldCBSUFMgZm9yIGlkbGVcbiIpOwotfQotCi12b2lk IGdlbjZfcnBzX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JbXV0ZXhfbG9j aygmcnBzLT5sb2NrKTsKLQlpZiAocnBzLT5lbmFibGVkKSB7Ci0JCXU4IGZyZXE7Ci0KLQkJaWYg KGRldl9wcml2LT5wbV9ycHNfZXZlbnRzICYgR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEKQotCQkJ Z2VuNl9ycHNfcmVzZXRfZWkoZGV2X3ByaXYpOwotCQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNL LAotCQkJICAgZ2VuNl9ycHNfcG1fbWFzayhkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOwotCi0J CWdlbjZfZW5hYmxlX3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKLQotCQkvKiBVc2UgdGhlIHVz ZXIncyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1aWRlLCBidXQgZm9yIGJldHRlcgotCQkgKiBw ZXJmb3JtYW5jZSwganVtcCBkaXJlY3RseSB0byBSUGUgYXMgb3VyIHN0YXJ0aW5nIGZyZXF1ZW5j eS4KLQkJICovCi0JCWZyZXEgPSBtYXgocnBzLT5jdXJfZnJlcSwKLQkJCSAgIHJwcy0+ZWZmaWNp ZW50X2ZyZXEpOwotCi0JCWlmIChpbnRlbF9zZXRfcnBzKGRldl9wcml2LAotCQkJCSAgY2xhbXAo ZnJlcSwKLQkJCQkJcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsCi0JCQkJCXJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0KSkpCi0JCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gc2V0IGlkbGUgZnJl cXVlbmN5XG4iKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotfQotCi12b2lkIGdl bjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVj dCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JLyogRmx1c2ggb3Vy IGJvdHRvbS1oYWxmIHNvIHRoYXQgaXQgZG9lcyBub3QgcmFjZSB3aXRoIHVzCi0JICogc2V0dGlu ZyB0aGUgaWRsZSBmcmVxdWVuY3kgYW5kIHNvIHRoYXQgaXQgaXMgYm91bmRlZCBieQotCSAqIG91 ciBycG0gd2FrZXJlZi4gQW5kIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cyB0byBzdG9wIGFu eQotCSAqIGZ1dGhlciBSUFMgcmVjbG9ja2luZyB3aGlsc3Qgd2UgYXJlIGFzbGVlcC4KLQkgKi8K LQlnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwotCi0JbXV0ZXhfbG9jaygm cnBzLT5sb2NrKTsKLQlpZiAocnBzLT5lbmFibGVkKSB7Ci0JCWlmIChJU19WQUxMRVlWSUVXKGRl dl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJCXZsdl9zZXRfcnBzX2lkbGUo ZGV2X3ByaXYpOwotCQllbHNlCi0JCQlnZW42X3NldF9ycHMoZGV2X3ByaXYsIHJwcy0+aWRsZV9m cmVxKTsKLQkJcnBzLT5sYXN0X2FkaiA9IDA7Ci0JCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ss Ci0JCQkgICBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2LCB+MCkpOwotCX0KLQlt dXRleF91bmxvY2soJnJwcy0+bG9jayk7Ci19Ci0KLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJnJxLT5pOTE1 LT5ndF9wbS5ycHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib29sIGJvb3N0OwotCi0JLyog VGhpcyBpcyBpbnRlbnRpb25hbGx5IHJhY3khIFdlIHBlZWsgYXQgdGhlIHN0YXRlIGhlcmUsIHRo ZW4KLQkgKiB2YWxpZGF0ZSBpbnNpZGUgdGhlIFJQUyB3b3JrZXIuCi0JICovCi0JaWYgKCFycHMt PmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWlmIChpOTE1X3JlcXVlc3Rfc2lnbmFsZWQocnEpKQot CQlyZXR1cm47Ci0KLQkvKiBTZXJpYWxpemVzIHdpdGggaTkxNV9yZXF1ZXN0X3JldGlyZSgpICov Ci0JYm9vc3QgPSBmYWxzZTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsK LQlpZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJvb3N0KHJxKSAmJgotCSAgICAhZG1hX2ZlbmNl X2lzX3NpZ25hbGVkX2xvY2tlZCgmcnEtPmZlbmNlKSkgewotCQlib29zdCA9ICFhdG9taWNfZmV0 Y2hfaW5jKCZycHMtPm51bV93YWl0ZXJzKTsKLQkJcnEtPmZsYWdzIHw9IEk5MTVfUkVRVUVTVF9X QUlUQk9PU1Q7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7 Ci0JaWYgKCFib29zdCkKLQkJcmV0dXJuOwotCi0JaWYgKFJFQURfT05DRShycHMtPmN1cl9mcmVx KSA8IHJwcy0+Ym9vc3RfZnJlcSkKLQkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKLQotCWF0 b21pY19pbmMoJnJwcy0+Ym9vc3RzKTsKLX0KLQotaW50IGludGVsX3NldF9ycHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50IGVycjsKLQotCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJnJwcy0+bG9jayk7Ci0JR0VNX0JVR19PTih2YWwgPiBycHMtPm1heF9mcmVxKTsKLQlH RU1fQlVHX09OKHZhbCA8IHJwcy0+bWluX2ZyZXEpOwotCi0JaWYgKCFycHMtPmVuYWJsZWQpIHsK LQkJcnBzLT5jdXJfZnJlcSA9IHZhbDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKElTX1ZBTExF WVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQllcnIgPSB2YWxs ZXl2aWV3X3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQllcnIgPSBnZW42X3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBnZW45 X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1 X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfZGlzYWJs ZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUo R0VONl9SUE5TV1JFUSwgMSA8PCAzMSk7Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsIDAp OwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLCAwKTsK LX0KLQotc3RhdGljIHZvaWQgZ2VuNl9pbml0X3Jwc19mcmVxdWVuY2llcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndF9wbS5ycHM7Ci0KLQkvKiBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBpbiB1bml0cyBv ZiA1ME1IeiAqLwotCi0JLyogc3RhdGljIHZhbHVlcyBmcm9tIEhXOiBSUDAgPiBSUDEgPiBSUG4g KG1pbl9mcmVxKSAqLwotCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewotCQl1MzIgcnBfc3Rh dGVfY2FwID0gSTkxNV9SRUFEKEJYVF9SUF9TVEFURV9DQVApOwotCQlycHMtPnJwMF9mcmVxID0g KHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwotCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0YXRl X2NhcCA+PiAgOCkgJiAweGZmOwotCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAg MCkgJiAweGZmOwotCX0gZWxzZSB7Ci0JCXUzMiBycF9zdGF0ZV9jYXAgPSBJOTE1X1JFQUQoR0VO Nl9SUF9TVEFURV9DQVApOwotCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkg JiAweGZmOwotCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOwot CQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwotCX0KLQkvKiBo d19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLwotCXJwcy0+bWF4 X2ZyZXEgPSBycHMtPnJwMF9mcmVxOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHJwcy0+cnAx X2ZyZXE7Ci0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJp dikgfHwKLQkgICAgSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCkgewotCQl1MzIgZGRjY19zdGF0dXMgPSAwOwotCi0JCWlmIChzYW5keWJyaWRnZV9wY29k ZV9yZWFkKGRldl9wcml2LAotCQkJCQkgICBIU1dfUENPREVfRFlOQU1JQ19EVVRZX0NZQ0xFX0NP TlRST0wsCi0JCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKLQkJCXJwcy0+ZWZmaWNp ZW50X2ZyZXEgPQotCQkJCWNsYW1wX3QodTgsCi0JCQkJCSgoZGRjY19zdGF0dXMgPj4gOCkgJiAw eGZmKSwKLQkJCQkJcnBzLT5taW5fZnJlcSwKLQkJCQkJcnBzLT5tYXhfZnJlcSk7Ci0JfQotCi0J aWYgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsK LQkJLyogU3RvcmUgdGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGlj aCBpcwotCQkgKiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKLQkJICovCi0JCXJw cy0+cnAwX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5ycDFfZnJlcSAqPSBHRU45 X0ZSRVFfU0NBTEVSOwotCQlycHMtPm1pbl9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Ci0JCXJw cy0+bWF4X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5lZmZpY2llbnRfZnJlcSAq PSBHRU45X0ZSRVFfU0NBTEVSOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgaW50ICgqc2V0KShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqLCB1OCkpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0JdTggZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Ci0KLQkvKiBmb3Jj ZSBhIHJlc2V0ICovCi0JcnBzLT5wb3dlci5tb2RlID0gLTE7Ci0JcnBzLT5jdXJfZnJlcSA9IC0x OwotCi0JaWYgKHNldChkZXZfcHJpdiwgZnJlcSkpCi0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJl c2V0IFJQUyB0byBpbml0aWFsIHZhbHVlc1xuIik7Ci19Ci0KLS8qIFNlZSB0aGUgR2VuOV9HVF9Q TV9Qcm9ncmFtbWluZ19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLwotc3RhdGljIHZvaWQgZ2Vu OV9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRl bF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7 Ci0KLQkvKiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZvciBSUFMgKi8KLQlpZiAo SVNfR0VOKGRldl9wcml2LCA5KSkKLQkJSTkxNV9XUklURShHRU42X1JDX1ZJREVPX0ZSRVEsCi0J CQlHRU45X0ZSRVFVRU5DWShkZXZfcHJpdi0+Z3RfcG0ucnBzLnJwMV9mcmVxKSk7Ci0KLQkvKiAx IHNlY29uZCB0aW1lb3V0Ki8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USU1FT1VULAotCQlH VF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCAxMDAwMDAwKSk7Ci0KLQlJOTE1X1dSSVRFKEdF TjZfUlBfSURMRV9IWVNURVJTSVMsIDB4YSk7Ci0KLQkvKiBMZWFuaW5nIG9uIHRoZSBiZWxvdyBj YWxsIHRvIGdlbjZfc2V0X3JwcyB0byBwcm9ncmFtL3NldHVwIHRoZQotCSAqIFVwL0Rvd24gRUkg JiB0aHJlc2hvbGQgcmVnaXN0ZXJzLCBhcyB3ZWxsIGFzIHRoZSBSUF9DT05UUk9MLAotCSAqIFJQ X0lOVEVSUlVQVF9MSU1JVFMgJiBSUE5TV1JFUSByZWdpc3RlcnMgKi8KLQlyZXNldF9ycHMoZGV2 X3ByaXYsIGdlbjZfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2 X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjhfZW5h YmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQkvKiAxIFBy b2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCi0JSTkxNV9XUklURShHRU42 X1JQTlNXUkVRLAotCQkgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKLQlJOTE1X1dS SVRFKEdFTjZfUkNfVklERU9fRlJFUSwKLQkJICAgSFNXX0ZSRVFVRU5DWShycHMtPnJwMV9mcmVx KSk7Ci0JLyogTkI6IERvY3Mgc2F5IDFzLCBhbmQgMTAwMDAwMCAtIHdoaWNoIGFyZW4ndCBlcXVp dmFsZW50ICovCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMDAwIC8g MTI4KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLwotCi0JLyogRG9jcyByZWNvbW1lbmQgOTAwTUh6 LCBhbmQgMzAwIE1IeiByZXNwZWN0aXZlbHkgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5URVJS VVBUX0xJTUlUUywKLQkJICAgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjQgfAotCQkgICBy cHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNik7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBf VEhSRVNIT0xELCA3NjAwMDAwIC8gMTI4KTsgLyogNzZtcyBidXN5bmVzcyBwZXIgRUksIDkwJSAq LwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMzEzMDAwMDAgLyAxMjgpOyAv KiAzMTNtcyBidXN5bmVzcyBwZXIgRUksIDcwJSovCi0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJ LCA2NjAwMCk7IC8qIDg0LjQ4bXMsIFhYWDogcmFuZG9tPyAqLwotCUk5MTVfV1JJVEUoR0VONl9S UF9ET1dOX0VJLCAzNTAwMDApOyAvKiA0NDhtcywgWFhYOiByYW5kb20/ICovCi0KLQlJOTE1X1dS SVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCS8qIDI6IEVuYWJsZSBSUFMgKi8K LQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9UVVJCTyB8 Ci0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQX01FRElB X0lTX0dGWCB8Ci0JCSAgIEdFTjZfUlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9CVVNZX0FW RyB8Ci0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Ci0KLQlyZXNldF9ycHMoZGV2X3ByaXYs IGdlbjZfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYt PnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfZW5hYmxlX3Jw cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyogSGVyZSBiZWdpbnMg YSBtYWdpYyBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0ZXMgdG8gZW5hYmxlCi0JICogYXV0by1k b3duY2xvY2tpbmcuCi0JICoKLQkgKiBQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdmFsdWUg aW4gZXhwb3NpbmcgdGhlc2UgdG8KLQkgKiB1c2Vyc3BhY2UuLi4KLQkgKi8KLQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQkv KiBQb3dlciBkb3duIGlmIGNvbXBsZXRlbHkgaWRsZSBmb3Igb3ZlciA1MG1zICovCi0JSTkxNV9X UklURShHRU42X1JQX0RPV05fVElNRU9VVCwgNTAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9J RExFX0hZU1RFUlNJUywgMTApOwotCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp OwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNF V0FLRV9BTEwpOwotfQotCi1zdGF0aWMgaW50IGNoZXJyeXZpZXdfcnBzX21heF9mcmVxKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycDA7Ci0KLQl2YWwg PSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKLQot CXN3aXRjaCAoUlVOVElNRV9JTkZPKGRldl9wcml2KS0+c3NldS5ldV90b3RhbCkgewotCWNhc2Ug ODoKLQkJLyogKDIgKiA0KSBjb25maWcgKi8KLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9B VF9WTUFYXzJTUzRFVV9GVVNFX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJLyogKDIg KiA2KSBjb25maWcgKi8KLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzZF VV9GVVNFX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJLyogKDIgKiA4KSBjb25maWcg Ki8KLQlkZWZhdWx0OgotCQkvKiBTZXR0aW5nICgyICogOCkgTWluIFJQMCBmb3IgYW55IG90aGVy IGNvbWJpbmF0aW9uICovCi0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M4 RVVfRlVTRV9TSElGVCk7Ci0JCWJyZWFrOwotCX0KLQotCXJwMCA9IChycDAgJiBGQl9HRlhfRlJF UV9GVVNFX01BU0spOwotCi0JcmV0dXJuIHJwMDsKLX0KLQotc3RhdGljIGludCBjaGVycnl2aWV3 X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMy IHZhbCwgcnBlOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX0dQVV9E VVRZQ1lDTEVfUkVHKTsKLQlycGUgPSAodmFsID4+IFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZS RVFfU0hJRlQpICYgUFVOSVRfR1BVX0RVVFlDWUNMRV9SUEVfRlJFUV9NQVNLOwotCi0JcmV0dXJu IHJwZTsKLX0KLQotc3RhdGljIGludCBjaGVycnl2aWV3X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMTsKLQotCXZhbCA9IHZs dl9wdW5pdF9yZWFkKGRldl9wcml2LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0UpOwotCXJwMSA9 ICh2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwotCi0JcmV0dXJuIHJwMTsKLX0KLQotc3Rh dGljIHUzMiBjaGVycnl2aWV3X3Jwc19taW5fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbCwgcnBuOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2 X3ByaXYsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7Ci0JcnBuID0gKCh2YWwgPj4gRkJfR0ZY X0ZNSU5fQVRfVk1JTl9GVVNFX1NISUZUKSAmCi0JCSAgICAgICBGQl9HRlhfRlJFUV9GVVNFX01B U0spOwotCi0JcmV0dXJuIHJwbjsKLX0KLQotc3RhdGljIGludCB2YWxsZXl2aWV3X3Jwc19ndWFy X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJw MTsKLQotCXZhbCA9IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZV U0UpOwotCi0JcnAxID0gKHZhbCAmIEZCX0dGWF9GR1VBUkFOVEVFRF9GUkVRX0ZVU0VfTUFTSykg Pj4gRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKLQotCXJldHVybiBycDE7Ci19 Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMDsKLQotCXZhbCA9IHZsdl9uY19yZWFk KGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwotCi0JcnAwID0gKHZhbCAmIEZC X0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNFX1NISUZUOwot CS8qIENsYW1wIHRvIG1heCAqLwotCXJwMCA9IG1pbl90KHUzMiwgcnAwLCAweGVhKTsKLQotCXJl dHVybiBycDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwZTsKLQotCXZhbCA9 IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfTE8pOwotCXJw ZSA9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9MT19NQVNLKSA+PiBGQl9GTUFYX1ZNSU5fRlJF UV9MT19TSElGVDsKLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhf Rk1BWF9GVVNFX0hJKTsKLQlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9GUkVRX0hJX01BU0sp IDw8IDU7Ci0KLQlyZXR1cm4gcnBlOwotfQotCi1zdGF0aWMgaW50IHZhbGxleXZpZXdfcnBzX21p bl9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsOwot Ci0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfTEZNKSAmIDB4 ZmY7Ci0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8gSEFTIDEu MS42LjMgdGhlIG1pbmltdW0gdmFsdWUKLQkgKiBmb3IgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGlu IEdQTEwgbW9kZSBpcyAweGMxLiBDb250cmFyeSB0byB0aGlzIG9uCi0JICogYSBCWVQtTSBCMCB0 aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hlbiBzZXR0aW5nCi0J ICogYSBmcmVxdWVuY3kgUHVuaXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4YzAuIENs YW1wIGl0IDB4YzAKLQkgKiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IFB1bml0IGFjY2Vw dHMuCi0JICovCi0JcmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKLX0KLQotc3RhdGljIHZv aWQgdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5ncGxsX3JlZl9mcmVxID0KLQkJdmx2X2dldF9j Y2tfY2xvY2soZGV2X3ByaXYsICJHUExMIHJlZiIsCi0JCQkJICBDQ0tfR1BMTF9DTE9DS19DT05U Uk9MLAotCQkJCSAgZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigi R1BMTCByZWZlcmVuY2UgZnJlcTogJWQga0h6XG4iLAotCQkJIGRldl9wcml2LT5ndF9wbS5ycHMu Z3BsbF9yZWZfZnJlcSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCXUzMiB2YWw7Ci0KLQl2bHZfaW9z Zl9zYl9nZXQoZGV2X3ByaXYsCi0JCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKLQkJCUJJVChW TFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwotCi0Jdmx2X2luaXRf Z3BsbF9yZWZfZnJlcShkZXZfcHJpdik7Ci0KLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJp diwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Ci0Jc3dpdGNoICgodmFsID4+IDYpICYgMykgewot CWNhc2UgMDoKLQljYXNlIDE6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDgwMDsKLQkJYnJlYWs7 Ci0JY2FzZSAyOgotCQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSAxMDY2OwotCQlicmVhazsKLQljYXNl IDM6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDEzMzM7Ci0JCWJyZWFrOwotCX0KLQlEUk1fREVC VUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9mcmVxKTsKLQot CXJwcy0+bWF4X2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19tYXhfZnJlcShkZXZfcHJpdik7Ci0JcnBz LT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWF4IEdQVSBm cmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t YXhfZnJlcSksCi0JCQkgcnBzLT5tYXhfZnJlcSk7Ci0KLQlycHMtPmVmZmljaWVudF9mcmVxID0g dmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQ ZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAotCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwotCi0JcnBz LT5ycDFfZnJlcSA9IHZhbGxleXZpZXdfcnBzX2d1YXJfZnJlcShkZXZfcHJpdik7Ci0JRFJNX0RF QlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJ IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9mcmVxKSwKLQkJCSBycHMtPnJwMV9m cmVxKTsKLQotCXJwcy0+bWluX2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19taW5fZnJlcShkZXZfcHJp dik7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJ CSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSksCi0JCQkgcnBzLT5taW5f ZnJlcSk7Ci0KLQl2bHZfaW9zZl9zYl9wdXQoZGV2X3ByaXYsCi0JCQlCSVQoVkxWX0lPU0ZfU0Jf UFVOSVQpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZMVl9JT1NGX1NCX0ND SykpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsOwotCi0Jdmx2X2lvc2Zfc2JfZ2V0KGRl dl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0Jf TkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLQotCXZsdl9pbml0X2dwbGxfcmVmX2Zy ZXEoZGV2X3ByaXYpOwotCi0JdmFsID0gdmx2X2Nja19yZWFkKGRldl9wcml2LCBDQ0tfRlVTRV9S RUcpOwotCi0Jc3dpdGNoICgodmFsID4+IDIpICYgMHg3KSB7Ci0JY2FzZSAzOgotCQlkZXZfcHJp di0+bWVtX2ZyZXEgPSAyMDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfcHJpdi0+bWVt X2ZyZXEgPSAxNjAwOwotCQlicmVhazsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVk OiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7Ci0KLQlycHMtPm1heF9mcmVxID0gY2hl cnJ5dmlld19ycHNfbWF4X2ZyZXEoZGV2X3ByaXYpOwotCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1h eF9mcmVxOwotCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIs Ci0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAotCQkJIHJwcy0+ bWF4X2ZyZXEpOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX3JwZV9m cmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVx KSwKLQkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCXJwcy0+cnAxX2ZyZXEgPSBjaGVycnl2 aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy KSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IHJwcy0+cnAxX2ZyZXEpLAotCQkJIHJwcy0+cnAxX2ZyZXEpOwotCi0JcnBzLT5taW5fZnJlcSA9 IGNoZXJyeXZpZXdfcnBzX21pbl9mcmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJt aW4gR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPm1pbl9mcmVxKSwKLQkJCSBycHMtPm1pbl9mcmVxKTsKLQotCXZsdl9pb3NmX3NiX3B1 dChkZXZfcHJpdiwKLQkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAotCQkJQklUKFZMVl9JT1NG X1NCX05DKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Ci0KLQlXQVJOX09OQ0UoKHJwcy0+ bWF4X2ZyZXEgfCBycHMtPmVmZmljaWVudF9mcmVxIHwgcnBzLT5ycDFfZnJlcSB8Ci0JCSAgIHJw cy0+bWluX2ZyZXEpICYgMSwKLQkJICAiT2RkIEdQVSBmcmVxIHZhbHVlc1xuIik7Ci19Ci0KLXN0 YXRpYyB2b2lkIGNoZXJyeXZpZXdfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbDsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZk ZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCS8qIDE6IFByb2dyYW0gZGVmYXVs dHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElN RU9VVCwgMTAwMDAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNTk0MDAp OwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1MDAwKTsKLQlJOTE1X1dS SVRFKEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9FSSwg MzUwMDAwKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwotCi0J LyogMjogRW5hYmxlIFJQUyAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICBH RU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlgg fAotCQkgICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkg ICBHRU42X1JQX0RPV05fSURMRV9BVkcpOwotCi0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCi0J dmx2X3B1bml0X2dldChkZXZfcHJpdik7Ci0KLQl2YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZf U09DX1REUF9FTiB8IENIVl9CSUFTX0NQVV81MF9TT0NfNTA7Ci0Jdmx2X3B1bml0X3dyaXRlKGRl dl9wcml2LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOwotCi0JdmFsID0gdmx2X3B1bml0 X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMpOwotCi0Jdmx2X3B1bml0X3B1 dChkZXZfcHJpdik7Ci0KLQkvKiBSUFMgY29kZSBhc3N1bWVzIEdQTEwgaXMgdXNlZCAqLwotCVdB Uk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90IGVuYWJsZWRcbiIpOwot Ci0JRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVkPyAlc1xuIiwgeWVzbm8odmFsICYgR1BM TEVOQUJMRSkpOwotCURSTV9ERUJVR19EUklWRVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFs KTsKLQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgdmFsbGV5dmlld19zZXRfcnBzKTsKLQotCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsK LX0KLQotc3RhdGljIHZvaWQgdmFsbGV5dmlld19lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JSTkxNV9XUklURShH RU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX1RI UkVTSE9MRCwgNTk0MDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1 MDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKLQlJOTE1X1dSSVRFKEdF TjZfUlBfRE9XTl9FSSwgMzUwMDAwKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RF UlNJUywgMTApOwotCi0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsCi0JCSAgIEdFTjZfUlBf TUVESUFfVFVSQk8gfAotCQkgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAg R0VONl9SUF9NRURJQV9JU19HRlggfAotCQkgICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZf UlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42X1JQX0RPV05fSURMRV9DT05UKTsKLQotCXZsdl9w dW5pdF9nZXQoZGV2X3ByaXYpOwotCi0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCi0JdmFsID0g VkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBWTFZfQklBU19DUFVfMTI1X1NPQ184 NzU7Ci0Jdmx2X3B1bml0X3dyaXRlKGRldl9wcml2LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2 YWwpOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJF UV9TVFMpOwotCi0Jdmx2X3B1bml0X3B1dChkZXZfcHJpdik7Ci0KLQkvKiBSUFMgY29kZSBhc3N1 bWVzIEdQTEwgaXMgdXNlZCAqLwotCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVk PyAlc1xuIiwgeWVzbm8odmFsICYgR1BMTEVOQUJMRSkpOwotCURSTV9ERUJVR19EUklWRVIoIkdQ VSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKLQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgdmFsbGV5 dmlld19zZXRfcnBzKTsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+ dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZWxf cHhmcmVxKHUzMiB2aWRmcmVxKQotewotCXVuc2lnbmVkIGxvbmcgZnJlcTsKLQlpbnQgZGl2ID0g KHZpZGZyZXEgJiAweDNmMDAwMCkgPj4gMTY7Ci0JaW50IHBvc3QgPSAodmlkZnJlcSAmIDB4MzAw MCkgPj4gMTI7Ci0JaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKLQotCWlmICghcHJlKQotCQly ZXR1cm4gMDsKLQotCWZyZXEgPSAoKGRpdiAqIDEzMzMzMykgLyAoKDE8PHBvc3QpICogcHJlKSk7 Ci0KLQlyZXR1cm4gZnJlcTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKLQl1 MTYgaTsKLQl1MTYgdDsKLQl1MTYgbTsKLQl1MTYgYzsKLX0gY3BhcmFtc1tdID0gewotCXsgMSwg MTMzMywgMzAxLCAyODY2NCB9LAotCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAotCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCi0JeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCi0JeyAwLCAxMDY2LCAy NzYsIDI3NjA1IH0sCi0JeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKLX07Ci0KLXN0YXRpYyB1bnNp Z25lZCBsb25nIF9faTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0JdTY0IHRvdGFsX2NvdW50LCBkaWZmLCByZXQ7Ci0JdTMyIGNvdW50MSwgY291 bnQyLCBjb3VudDMsIG0gPSAwLCBjID0gMDsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXNf dG9fbXNlY3MoamlmZmllcyksIGRpZmYxOwotCWludCBpOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmbWNoZGV2X2xvY2spOwotCi0JZGlmZjEgPSBub3cgLSBkZXZfcHJpdi0+aXBzLmxhc3RfdGlt ZTE7Ci0KLQkvKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2luZyB0b28g ZmFzdC4KLQkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0cyBpZiB3ZSBh cmUgcG9sbGluZwotCSAqIGZhc3RlciB0aGFuIG9uY2UgaW4gMTBtcywgc28ganVzdCByZXR1cm4g dGhlIHNhdmVkIHZhbHVlCi0JICogaW4gc3VjaCBjYXNlcy4KLQkgKi8KLQlpZiAoZGlmZjEgPD0g MTApCi0JCXJldHVybiBkZXZfcHJpdi0+aXBzLmNoaXBzZXRfcG93ZXI7Ci0KLQljb3VudDEgPSBJ OTE1X1JFQUQoRE1JRUMpOwotCWNvdW50MiA9IEk5MTVfUkVBRChERFJFQyk7Ci0JY291bnQzID0g STkxNV9SRUFEKENTSUVDKTsKLQotCXRvdGFsX2NvdW50ID0gY291bnQxICsgY291bnQyICsgY291 bnQzOwotCi0JLyogRklYTUU6IGhhbmRsZSBwZXItY291bnRlciBvdmVyZmxvdyAqLwotCWlmICh0 b3RhbF9jb3VudCA8IGRldl9wcml2LT5pcHMubGFzdF9jb3VudDEpIHsKLQkJZGlmZiA9IH4wVUwg LSBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxOwotCQlkaWZmICs9IHRvdGFsX2NvdW50OwotCX0g ZWxzZSB7Ci0JCWRpZmYgPSB0b3RhbF9jb3VudCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDE7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BhcmFtcyk7IGkrKykgewotCQlp ZiAoY3BhcmFtc1tpXS5pID09IGRldl9wcml2LT5pcHMuY19tICYmCi0JCSAgICBjcGFyYW1zW2ld LnQgPT0gZGV2X3ByaXYtPmlwcy5yX3QpIHsKLQkJCW0gPSBjcGFyYW1zW2ldLm07Ci0JCQljID0g Y3BhcmFtc1tpXS5jOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlkaWZmID0gZGl2X3U2NChkaWZm LCBkaWZmMSk7Ci0JcmV0ID0gKChtICogZGlmZikgKyBjKTsKLQlyZXQgPSBkaXZfdTY0KHJldCwg MTApOwotCi0JZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MSA9IHRvdGFsX2NvdW50OwotCWRldl9w cml2LT5pcHMubGFzdF90aW1lMSA9IG5vdzsKLQotCWRldl9wcml2LT5pcHMuY2hpcHNldF9wb3dl ciA9IHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0 X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCi0JaWYgKCFJU19HRU4oZGV2 X3ByaXYsIDUpKQotCQlyZXR1cm4gMDsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgmZGV2X3By aXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2sp OwotCQl2YWwgPSBfX2k5MTVfY2hpcHNldF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9ja19p cnEoJm1jaGRldl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi11bnNpZ25lZCBsb25n IGk5MTVfbWNoX3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQl1bnNpZ25l ZCBsb25nIG0sIHgsIGI7Ci0JdTMyIHRzZnM7Ci0KLQl0c2ZzID0gaW50ZWxfdW5jb3JlX3JlYWQo Jmk5MTUtPnVuY29yZSwgVFNGUyk7Ci0KLQltID0gKCh0c2ZzICYgVFNGU19TTE9QRV9NQVNLKSA+ PiBUU0ZTX1NMT1BFX1NISUZUKTsKLQl4ID0gaW50ZWxfdW5jb3JlX3JlYWQ4KCZpOTE1LT51bmNv cmUsIFRSMSk7Ci0KLQliID0gdHNmcyAmIFRTRlNfSU5UUl9NQVNLOwotCi0JcmV0dXJuICgobSAq IHgpIC8gMTI3KSAtIGI7Ci19Ci0KLXN0YXRpYyBpbnQgX3B4dmlkX3RvX3ZkKHU4IHB4dmlkKQot ewotCWlmIChweHZpZCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChweHZpZCA+PSA4ICYmIHB4 dmlkIDwgMzEpCi0JCXB4dmlkID0gMzE7Ci0KLQlyZXR1cm4gKHB4dmlkICsgMikgKiAxMjU7Ci19 Ci0KLXN0YXRpYyB1MzIgcHZpZF90b19leHR2aWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1OCBweHZpZCkKLXsKLQljb25zdCBpbnQgdmQgPSBfcHh2aWRfdG9fdmQocHh2aWQp OwotCWNvbnN0IGludCB2bSA9IHZkIC0gMTEyNTsKLQotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2 KS0+aXNfbW9iaWxlKQotCQlyZXR1cm4gdm0gPiAwID8gdm0gOiAwOwotCi0JcmV0dXJuIHZkOwot fQotCi1zdGF0aWMgdm9pZCBfX2k5MTVfdXBkYXRlX2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXU2NCBub3csIGRpZmYsIGRpZmZtczsKLQl1MzIgY291bnQ7 Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Ci0KLQlub3cgPSBrdGltZV9n ZXRfcmF3X25zKCk7Ci0JZGlmZm1zID0gbm93IC0gZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyOwot CWRvX2RpdihkaWZmbXMsIE5TRUNfUEVSX01TRUMpOwotCi0JLyogRG9uJ3QgZGl2aWRlIGJ5IDAg Ki8KLQlpZiAoIWRpZmZtcykKLQkJcmV0dXJuOwotCi0JY291bnQgPSBJOTE1X1JFQUQoR0ZYRUMp OwotCi0JaWYgKGNvdW50IDwgZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MikgewotCQlkaWZmID0g fjBVTCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Ci0JCWRpZmYgKz0gY291bnQ7Ci0JfSBl bHNlIHsKLQkJZGlmZiA9IGNvdW50IC0gZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MjsKLQl9Ci0K LQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gY291bnQ7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0 X3RpbWUyID0gbm93OwotCi0JLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KLQlkaWZmID0g ZGlmZiAqIDExODE7Ci0JZGlmZiA9IGRpdl91NjQoZGlmZiwgZGlmZm1zICogMTApOwotCWRldl9w cml2LT5pcHMuZ2Z4X3Bvd2VyID0gZGlmZjsKLX0KLQotdm9pZCBpOTE1X3VwZGF0ZV9nZnhfdmFs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKLQotCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkKLQkJcmV0dXJuOwotCi0Jd2l0 aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZikgewotCQlz cGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JCV9faTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZf cHJpdik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCX0KLX0KLQotc3RhdGlj IHVuc2lnbmVkIGxvbmcgX19pOTE1X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCXVuc2lnbmVkIGxvbmcgdCwgY29yciwgc3RhdGUxLCBjb3JyMiwgc3RhdGUy OwotCXUzMiBweHZpZCwgZXh0X3Y7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9j ayk7Ci0KLQlweHZpZCA9IEk5MTVfUkVBRChQWFZGUkVRKGRldl9wcml2LT5ndF9wbS5ycHMuY3Vy X2ZyZXEpKTsKLQlweHZpZCA9IChweHZpZCA+PiAyNCkgJiAweDdmOwotCWV4dF92ID0gcHZpZF90 b19leHR2aWQoZGV2X3ByaXYsIHB4dmlkKTsKLQotCXN0YXRlMSA9IGV4dF92OwotCi0JdCA9IGk5 MTVfbWNoX3ZhbChkZXZfcHJpdik7Ci0KLQkvKiBSZXZlbCBpbiB0aGUgZW1waXJpY2FsbHkgZGVy aXZlZCBjb25zdGFudHMgKi8KLQotCS8qIENvcnJlY3Rpb24gZmFjdG9yIGluIDEvMTAwMDAwIHVu aXRzICovCi0JaWYgKHQgPiA4MCkKLQkJY29yciA9ICgodCAqIDIzNDkpICsgMTM1OTQwKTsKLQll bHNlIGlmICh0ID49IDUwKQotCQljb3JyID0gKCh0ICogOTY0KSArIDI5MzE3KTsKLQllbHNlIC8q IDwgNTAgKi8KLQkJY29yciA9ICgodCAqIDMwMSkgKyAxMDA0KTsKLQotCWNvcnIgPSBjb3JyICog KCgxNTAxNDIgKiBzdGF0ZTEpIC8gMTAwMDAgLSA3ODY0Mik7Ci0JY29yciAvPSAxMDAwMDA7Ci0J Y29ycjIgPSAoY29yciAqIGRldl9wcml2LT5pcHMuY29ycik7Ci0KLQlzdGF0ZTIgPSAoY29ycjIg KiBzdGF0ZTEpIC8gMTAwMDA7Ci0Jc3RhdGUyIC89IDEwMDsgLyogY29udmVydCB0byBtVyAqLwot Ci0JX19pOTE1X3VwZGF0ZV9nZnhfdmFsKGRldl9wcml2KTsKLQotCXJldHVybiBkZXZfcHJpdi0+ aXBzLmdmeF9wb3dlciArIHN0YXRlMjsKLX0KLQotdW5zaWduZWQgbG9uZyBpOTE1X2dmeF92YWwo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKLQotCWlmICghSVNfR0VOKGRldl9wcml2 LCA1KSkKLQkJcmV0dXJuIDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQkJ dmFsID0gX19pOTE1X2dmeF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9ja19pcnEoJm1jaGRl dl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgX19yY3UgKmk5MTVfbWNoX2RldjsKLQotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICptY2hkZXZfZ2V0KHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaTkxNSA9IHJjdV9kZXJlZmVyZW5jZShpOTE1X21j aF9kZXYpOwotCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmk5MTUtPmRybS5yZWYpKQotCQlp OTE1ID0gTlVMTDsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBpOTE1OwotfQotCi0v KioKLSAqIGk5MTVfcmVhZF9tY2hfdmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCi0gKgot ICogQ2FsY3VsYXRlIGFuZCByZXR1cm4gYSB2YWx1ZSBmb3IgdGhlIElQUyBkcml2ZXIgdG8gdXNl IHdoZW4gZGVjaWRpbmcgd2hldGhlcgotICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFk cm9vbSB0byBpbmNyZWFzZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KLSAqLwotdW5zaWduZWQg bG9uZyBpOTE1X3JlYWRfbWNoX3ZhbCh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1OwotCXVuc2lnbmVkIGxvbmcgY2hpcHNldF92YWwgPSAwOwotCXVuc2lnbmVkIGxvbmcg Z3JhcGhpY3NfdmFsID0gMDsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCWk5MTUgPSBt Y2hkZXZfZ2V0KCk7Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gMDsKLQotCXdpdGhfaW50ZWxfcnVu dGltZV9wbSgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZikgewotCQlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Ci0JCWNoaXBzZXRfdmFsID0gX19pOTE1X2NoaXBzZXRfdmFsKGk5MTUpOwot CQlncmFwaGljc192YWwgPSBfX2k5MTVfZ2Z4X3ZhbChpOTE1KTsKLQkJc3Bpbl91bmxvY2tfaXJx KCZtY2hkZXZfbG9jayk7Ci0JfQotCi0JZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJu IGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFsOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9y ZWFkX21jaF92YWwpOwotCi0vKioKLSAqIGk5MTVfZ3B1X3JhaXNlIC0gcmFpc2UgR1BVIGZyZXF1 ZW5jeSBsaW1pdAotICoKLSAqIFJhaXNlIHRoZSBsaW1pdDsgSVBTIGluZGljYXRlcyB3ZSBoYXZl IHRoZXJtYWwgaGVhZHJvb20uCi0gKi8KLWJvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Ci0J aWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9j ayk7Ci0JaWYgKGk5MTUtPmlwcy5tYXhfZGVsYXkgPiBpOTE1LT5pcHMuZm1heCkKLQkJaTkxNS0+ aXBzLm1heF9kZWxheS0tOwotCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCi0JZHJt X2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQ TChpOTE1X2dwdV9yYWlzZSk7Ci0KLS8qKgotICogaTkxNV9ncHVfbG93ZXIgLSBsb3dlciBHUFUg ZnJlcXVlbmN5IGxpbWl0Ci0gKgotICogSVBTIGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRo ZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJhY2sgdGhlIEdQVQotICogZnJlcXVlbmN5IG1heGlt dW0uCi0gKi8KLWJvb2wgaTkxNV9ncHVfbG93ZXIodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Ci0JaWYgKCFpOTE1KQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JaWYgKGk5MTUt Pmlwcy5tYXhfZGVsYXkgPCBpOTE1LT5pcHMubWluX2RlbGF5KQotCQlpOTE1LT5pcHMubWF4X2Rl bGF5Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0KLQlkcm1fZGV2X3B1dCgm aTkxNS0+ZHJtKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1 X2xvd2VyKTsKLQotLyoqCi0gKiBpOTE1X2dwdV9idXN5IC0gaW5kaWNhdGUgR1BVIGJ1c2luZXNz IHRvIElQUwotICoKLSAqIFRlbGwgdGhlIElQUyBkcml2ZXIgd2hldGhlciBvciBub3QgdGhlIEdQ VSBpcyBidXN5LgotICovCi1ib29sIGk5MTVfZ3B1X2J1c3kodm9pZCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlib29sIHJldDsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7 Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBpOTE1LT5ndC5hd2FrZTsK LQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lN Qk9MX0dQTChpOTE1X2dwdV9idXN5KTsKLQotLyoqCi0gKiBpOTE1X2dwdV90dXJib19kaXNhYmxl IC0gZGlzYWJsZSBncmFwaGljcyB0dXJibwotICoKLSAqIERpc2FibGUgZ3JhcGhpY3MgdHVyYm8g YnkgcmVzZXR0aW5nIHRoZSBtYXggZnJlcXVlbmN5IGFuZCBzZXR0aW5nIHRoZQotICogY3VycmVu dCBmcmVxdWVuY3kgdG8gdGhlIGRlZmF1bHQuCi0gKi8KLWJvb2wgaTkxNV9ncHVfdHVyYm9fZGlz YWJsZSh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OwotCWJvb2wgcmV0 OwotCi0JaTkxNSA9IG1jaGRldl9nZXQoKTsKLQlpZiAoIWk5MTUpCi0JCXJldHVybiBmYWxzZTsK LQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQlpOTE1LT5pcHMubWF4X2RlbGF5ID0g aTkxNS0+aXBzLmZzdGFydDsKLQlyZXQgPSBpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5p cHMuZnN0YXJ0KTsKLQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQotCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1 X2dwdV90dXJib19kaXNhYmxlKTsKLQotLyoqCi0gKiBUZWxscyB0aGUgaW50ZWxfaXBzIGRyaXZl ciB0aGF0IHRoZSBpOTE1IGRyaXZlciBpcyBub3cgbG9hZGVkLCBpZgotICogSVBTIGdvdCBsb2Fk ZWQgZmlyc3QuCi0gKgotICogVGhpcyBhd2t3YXJkIGRhbmNlIGlzIHNvIHRoYXQgbmVpdGhlciBt b2R1bGUgaGFzIHRvIGRlcGVuZCBvbiB0aGUKLSAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMgdG8g ZG8gdGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKLSAqIEdQVSB0dXJibyBsaW1pdHMg dG8gaTkxNS4KLSAqLwotc3RhdGljIHZvaWQKLWlwc19waW5nX2Zvcl9pOTE1X2xvYWQodm9pZCkK LXsKLQl2b2lkICgqbGluaykodm9pZCk7Ci0KLQlsaW5rID0gc3ltYm9sX2dldChpcHNfbGlua190 b19pOTE1X2RyaXZlcik7Ci0JaWYgKGxpbmspIHsKLQkJbGluaygpOwotCQlzeW1ib2xfcHV0KGlw c19saW5rX3RvX2k5MTVfZHJpdmVyKTsKLQl9Ci19Ci0KLXZvaWQgaW50ZWxfZ3B1X2lwc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKiBXZSBvbmx5IHJlZ2lz dGVyIHRoZSBpOTE1IGlwcyBwYXJ0IHdpdGggaW50ZWwtaXBzIG9uY2UgZXZlcnl0aGluZyBpcwot CSAqIHNldCB1cCwgdG8gYXZvaWQgaW50ZWwtaXBzIHNuZWFraW5nIGluIGFuZCByZWFkaW5nIGJv Z3VzIHZhbHVlcy4gKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBkZXZfcHJp dik7Ci0KLQlpcHNfcGluZ19mb3JfaTkxNV9sb2FkKCk7Ci19Ci0KLXZvaWQgaW50ZWxfZ3B1X2lw c190ZWFyZG93bih2b2lkKQotewotCXJjdV9hc3NpZ25fcG9pbnRlcihpOTE1X21jaF9kZXYsIE5V TEwpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9pbml0X2Vtb24oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXUzMiBsY2Z1c2U7Ci0JdTggcHh3WzE2XTsKLQlpbnQgaTsK LQotCS8qIERpc2FibGUgdG8gcHJvZ3JhbSAqLwotCUk5MTVfV1JJVEUoRUNSLCAwKTsKLQlQT1NU SU5HX1JFQUQoRUNSKTsKLQotCS8qIFByb2dyYW0gZW5lcmd5IHdlaWdodHMgZm9yIHZhcmlvdXMg ZXZlbnRzICovCi0JSTkxNV9XUklURShTREVXLCAweDE1MDQwZDAwKTsKLQlJOTE1X1dSSVRFKENT SUVXMCwgMHgwMDdmMDAwMCk7Ci0JSTkxNV9XUklURShDU0lFVzEsIDB4MWUyMjAwMDQpOwotCUk5 MTVfV1JJVEUoQ1NJRVcyLCAweDA0MDAwMDA0KTsKLQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKysp Ci0JCUk5MTVfV1JJVEUoUEVXKGkpLCAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlJ OTE1X1dSSVRFKERFVyhpKSwgMCk7Ci0KLQkvKiBQcm9ncmFtIFAtc3RhdGUgd2VpZ2h0cyB0byBh Y2NvdW50IGZvciBmcmVxdWVuY3kgcG93ZXIgYWRqdXN0bWVudCAqLwotCWZvciAoaSA9IDA7IGkg PCAxNjsgaSsrKSB7Ci0JCXUzMiBweHZpZGZyZXEgPSBJOTE1X1JFQUQoUFhWRlJFUShpKSk7Ci0J CXVuc2lnbmVkIGxvbmcgZnJlcSA9IGludGVsX3B4ZnJlcShweHZpZGZyZXEpOwotCQl1bnNpZ25l ZCBsb25nIHZpZCA9IChweHZpZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+Ci0JCQlQWFZGUkVR X1BYX1NISUZUOwotCQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCQl2YWwgPSB2aWQgKiB2aWQ7Ci0J CXZhbCAqPSAoZnJlcSAvIDEwMDApOwotCQl2YWwgKj0gMjU1OwotCQl2YWwgLz0gKDEyNyoxMjcq OTAwKTsKLQkJaWYgKHZhbCA+IDB4ZmYpCi0JCQlEUk1fRVJST1IoImJhZCBweHZhbDogJWxkXG4i LCB2YWwpOwotCQlweHdbaV0gPSB2YWw7Ci0JfQotCS8qIFJlbmRlciBzdGFuZGJ5IHN0YXRlcyBn ZXQgMCB3ZWlnaHQgKi8KLQlweHdbMTRdID0gMDsKLQlweHdbMTVdID0gMDsKLQotCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsKLQkJdTMyIHZhbCA9IChweHdbaSo0XSA8PCAyNCkgfCAocHh3Wyhp KjQpKzFdIDw8IDE2KSB8Ci0JCQkocHh3WyhpKjQpKzJdIDw8IDgpIHwgKHB4d1soaSo0KSszXSk7 Ci0JCUk5MTVfV1JJVEUoUFhXKGkpLCB2YWwpOwotCX0KLQotCS8qIEFkanVzdCBtYWdpYyByZWdz IHRvIG1hZ2ljIHZhbHVlcyAobW9yZSBleHBlcmltZW50YWwgcmVzdWx0cykgKi8KLQlJOTE1X1dS SVRFKE9HVzAsIDApOwotCUk5MTVfV1JJVEUoT0dXMSwgMCk7Ci0JSTkxNV9XUklURShFRzAsIDB4 MDAwMDdmMDApOwotCUk5MTVfV1JJVEUoRUcxLCAweDAwMDAwMDBlKTsKLQlJOTE1X1dSSVRFKEVH MiwgMHgwMDBlMDAwMCk7Ci0JSTkxNV9XUklURShFRzMsIDB4NjgwMDAzMDApOwotCUk5MTVfV1JJ VEUoRUc0LCAweDQyMDAwMDAwKTsKLQlJOTE1X1dSSVRFKEVHNSwgMHgwMDE0MDAzMSk7Ci0JSTkx NV9XUklURShFRzYsIDApOwotCUk5MTVfV1JJVEUoRUc3LCAwKTsKLQotCWZvciAoaSA9IDA7IGkg PCA4OyBpKyspCi0JCUk5MTVfV1JJVEUoUFhXTChpKSwgMCk7Ci0KLQkvKiBFbmFibGUgUE1PTiAr IHNlbGVjdCBldmVudHMgKi8KLQlJOTE1X1dSSVRFKEVDUiwgMHg4MDAwMDAxOSk7Ci0KLQlsY2Z1 c2UgPSBJOTE1X1JFQUQoTENGVVNFMDIpOwotCi0JZGV2X3ByaXYtPmlwcy5jb3JyID0gKGxjZnVz ZSAmIExDRlVTRV9ISVZfTUFTSyk7Ci19Ci0KLXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JLyogUG93ZXJzYXZpbmcgaXMgY29udHJv bGxlZCBieSB0aGUgaG9zdCB3aGVuIGluc2lkZSBhIFZNICovCi0JaWYgKGludGVsX3ZncHVfYWN0 aXZlKGRldl9wcml2KSkKLQkJbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPmhhc19ycHMg PSBmYWxzZTsKLQotCS8qIEluaXRpYWxpemUgUlBTIGxpbWl0cyAoZm9yIHVzZXJzcGFjZSkgKi8K LQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNoZXJyeXZpZXdfaW5pdF9ndF9wb3dl cnNhdmUoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQotCQl2 YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQllbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDYpCi0JCWdlbjZfaW5pdF9ycHNfZnJlcXVlbmNpZXMoZGV2X3ByaXYp OwotCi0JLyogRGVyaXZlIGluaXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0aGUg aGFyZHdhcmUgbGltaXRzICovCi0JcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSBycHMtPm1heF9m cmVxOwotCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsKLQotCS8qIEFm dGVyIHNldHRpbmcgbWF4LXNvZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVxICov Ci0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwKLQkgICAgSVNfSVZZQlJJREdFKGRldl9wcml2 KSB8fCBJU19IQVNXRUxMKGRldl9wcml2KSkgewotCQl1MzIgcGFyYW1zID0gMDsKLQotCQlzYW5k eWJyaWRnZV9wY29kZV9yZWFkKGRldl9wcml2LCBHRU42X1JFQURfT0NfUEFSQU1TLAotCQkJCSAg ICAgICAmcGFyYW1zLCBOVUxMKTsKLQkJaWYgKHBhcmFtcyAmIEJJVCgzMSkpIHsgLyogT0Mgc3Vw cG9ydGVkICovCi0JCQlEUk1fREVCVUdfRFJJVkVSKCJPdmVyY2xvY2tpbmcgc3VwcG9ydGVkLCBt YXg6ICVkTUh6LCBvdmVyY2xvY2s6ICVkTUh6XG4iLAotCQkJCQkgKHJwcy0+bWF4X2ZyZXEgJiAw eGZmKSAqIDUwLAotCQkJCQkgKHBhcmFtcyAmIDB4ZmYpICogNTApOwotCQkJcnBzLT5tYXhfZnJl cSA9IHBhcmFtcyAmIDB4ZmY7Ci0JCX0KLQl9Ci0KLQkvKiBGaW5hbGx5IGFsbG93IHVzIHRvIGJv b3N0IHRvIG1heCBieSBkZWZhdWx0ICovCi0JcnBzLT5ib29zdF9mcmVxID0gcnBzLT5tYXhfZnJl cTsKLQlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWluX2ZyZXE7Ci0JcnBzLT5jdXJfZnJlcSA9IHJw cy0+aWRsZV9mcmVxOwotfQotCi12b2lkIGludGVsX3Nhbml0aXplX2d0X3Bvd2Vyc2F2ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5l bmFibGVkID0gdHJ1ZTsgLyogZm9yY2UgUlBTIGRpc2FibGluZyAqLwotCWludGVsX2Rpc2FibGVf Z3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQotCQlnZW4xMV9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA2KQotCQlnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9w cml2KTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5n dF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoIWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCkKLQkJ cmV0dXJuOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJZ2VuOV9kaXNhYmxl X3JwcyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNo ZXJyeXZpZXdfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpKQotCQl2YWxsZXl2aWV3X2Rpc2FibGVfcnBzKGRldl9wcml2KTsKLQllbHNlIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpCi0JCWdlbjZfZGlzYWJsZV9ycHMoZGV2X3ByaXYp OwotCWVsc2UgaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKQotCQlpcm9ubGFrZV9kaXNhYmxl X2RycHMoZGV2X3ByaXYpOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5lbmFibGVkID0gZmFsc2U7 Ci19Ci0KLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9j ayk7Ci0KLQlpbnRlbF9kaXNhYmxlX3JwcyhkZXZfcHJpdik7Ci0JaWYgKEhBU19MTEMoZGV2X3By aXYpKQotCQlpbnRlbF9sbGNfZGlzYWJsZSgmZGV2X3ByaXYtPmd0LmxsYyk7Ci0KLQltdXRleF91 bmxvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVs X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVj dCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmcnBzLT5sb2NrKTsKLQotCWlmIChycHMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQot CWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQljaGVycnl2aWV3X2VuYWJsZV9ycHMo ZGV2X3ByaXYpOwotCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpIHsKLQkJdmFs bGV5dmlld19lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkgewotCQlnZW45X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCX0gZWxzZSBpZiAo SVNfQlJPQURXRUxMKGRldl9wcml2KSkgewotCQlnZW44X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwot CX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KSB7Ci0JCWdlbjZfZW5hYmxlX3Jw cyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19JUk9OTEFLRV9NKGRldl9wcml2KSkgewotCQlp cm9ubGFrZV9lbmFibGVfZHJwcyhkZXZfcHJpdik7Ci0JCWludGVsX2luaXRfZW1vbihkZXZfcHJp dik7Ci0JfQotCi0JV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Ci0JV0FS Tl9PTihycHMtPmlkbGVfZnJlcSA+IHJwcy0+bWF4X2ZyZXEpOwotCi0JV0FSTl9PTihycHMtPmVm ZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Ci0JV0FSTl9PTihycHMtPmVmZmljaWVudF9m cmVxID4gcnBzLT5tYXhfZnJlcSk7Ci0KLQlycHMtPmVuYWJsZWQgPSB0cnVlOwotfQotCi12b2lk IGludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hlbiBp bnNpZGUgYSBWTSAqLwotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCi0JCXJldHVy bjsKLQotCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoSEFT X1JQUyhkZXZfcHJpdikpCi0JCWludGVsX2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCi0JaW50ZWxf bGxjX2VuYWJsZSgmZGV2X3ByaXYtPmd0LmxsYyk7Ci0KLQltdXRleF91bmxvY2soJmRldl9wcml2 LT5ndF9wbS5ycHMubG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlieF9pbml0X2Nsb2NrX2dhdGlu ZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyoKLQkgKiBPbiBJYmV4 IFBlYWsgYW5kIENvdWdhciBQb2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCi0JICogZ2F0 aW5nIGZvciB0aGUgcGFuZWwgcG93ZXIgc2VxdWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bwotCSAq IHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KLQkgKi8KLQlJOTE1X1dSSVRFKFNP VVRIX0RTUENMS19HQVRFX0QsIFBDSF9EUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwotfQot Ci1zdGF0aWMgdm9pZCBnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCWVudW0gcGlwZSBwaXBlOwotCi0JZm9yX2VhY2hfcGlwZShk ZXZfcHJpdiwgcGlwZSkgewotCQlJOTE1X1dSSVRFKERTUENOVFIocGlwZSksCi0JCQkgICBJOTE1 X1JFQUQoRFNQQ05UUihwaXBlKSkgfAotCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNB QkxFKTsKLQotCQlJOTE1X1dSSVRFKERTUFNVUkYocGlwZSksIEk5MTVfUkVBRChEU1BTVVJGKHBp cGUpKSk7Ci0JCVBPU1RJTkdfUkVBRChEU1BTVVJGKHBpcGUpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkIGlsa19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF OwotCi0JLyoKLQkgKiBSZXF1aXJlZCBmb3IgRkJDCi0JICogV2FGYmNEaXNhYmxlRHBmY0Nsb2Nr R2F0aW5nOmlsawotCSAqLwotCWRzcGNsa19nYXRlIHw9IElMS19EUEZDUlVOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFIHwKLQkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAg IElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKLQotCUk5MTVfV1JJVEUoUENIXzNEQ0dE SVMwLAotCQkgICBNQVJJVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBTVlNNVU5JVF9D TE9DS19HQVRFX0RJU0FCTEUpOwotCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMxLAotCQkgICBWRk1V TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byB0aGUgc3Bl YyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlIHNldCBpbgotCSAqIG9yZGVyIHRvIGVuYWJs ZSBtZW1vcnkgc2VsZi1yZWZyZXNoCi0JICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0Ci0JICog VGhlIGJpdCA1IG9mIDB4NDIwMjAKLQkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKLQkgKi8KLQlJ OTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAotCQkgICAoSTkxNV9SRUFEKElMS19ESVNQ TEFZX0NISUNLRU4yKSB8Ci0JCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVMTCkp OwotCWRzcGNsa19nYXRlIHw9IElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7Ci0JSTkx NV9XUklURShESVNQX0FSQl9DVEwsCi0JCSAgIChJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8Ci0J CSAgICBESVNQX0ZCQ19XTV9ESVMpKTsKLQotCS8qCi0JICogQmFzZWQgb24gdGhlIGRvY3VtZW50 IGZyb20gaGFyZHdhcmUgZ3V5cyB0aGUgZm9sbG93aW5nIGJpdHMKLQkgKiBzaG91bGQgYmUgc2V0 IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgotCSAqIFRoZSBiaXQgMjIg b2YgMHg0MjAwMAotCSAqIFRoZSBiaXQgMjIgb2YgMHg0MjAwNAotCSAqIFRoZSBiaXQgNyw4LDkg b2YgMHg0MjAyMC4KLQkgKi8KLQlpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsKLQkJLyog V2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVlOmlsayAqLwotCQlJOTE1X1dSSVRFKElMS19E SVNQTEFZX0NISUNLRU4xLAotCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8 Ci0JCQkgICBJTEtfRkJDUV9ESVMpOwotCQlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4y LAotCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCQkgICBJTEtfRFBB UkJfR0FURSk7Ci0JfQotCi0JSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dh dGUpOwotCi0JSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKLQkJICAgSTkxNV9SRUFE KElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKLQlJ OTE1X1dSSVRFKF8zRF9DSElDS0VOMiwKLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJ TkVEIDw8IDE2IHwKLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEKTsKLQotCS8q IFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxpbmVkRmx1c2g6aWxrICovCi0JSTkxNV9XUklURShD QUNIRV9NT0RFXzAsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRF Ul9GTFVTSF9ESVNBQkxFKSk7Ci0KLQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9u YWxGbHVzaDppbGsgKi8KLQlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElT QUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKLQotCWc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChk ZXZfcHJpdik7Ci0KLQlpYnhfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwotfQotCi1zdGF0 aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCWVudW0gcGlwZSBwaXBlOwotCXUzMiB2YWw7Ci0KLQkvKgotCSAqIE9uIEli ZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKLQkgKiBn YXRpbmcgZm9yIHRoZSBwYW5lbCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRvCi0J ICogc3RhcnQgdXAgd2hlbiBubyBwb3J0cyBhcmUgYWN0aXZlLgotCSAqLwotCUk5MTVfV1JJVEUo U09VVEhfRFNQQ0xLX0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0J CSAgIFBDSF9EUExVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIFBDSF9DUFVOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFKTsKLQlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4yLCBJOTE1X1JFQUQo U09VVEhfQ0hJQ0tFTjIpIHwKLQkJICAgRFBMU19FRFBfUFBTX0ZJWF9ESVMpOwotCS8qIFRoZSBi ZWxvdyBmaXhlcyB0aGUgd2VpcmQgZGlzcGxheSBjb3JydXB0aW9uLCBhIGZldyBwaXhlbHMgc2hp ZnRlZAotCSAqIGRvd253YXJkLCBvbiAob25seSkgTFZEUyBvZiBzb21lIEhQIGxhcHRvcHMgd2l0 aCBJVlkuCi0JICovCi0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewotCQl2YWwgPSBJ OTE1X1JFQUQoVFJBTlNfQ0hJQ0tFTjIocGlwZSkpOwotCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJf VElNSU5HX09WRVJSSURFOwotCQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0ZESV9QT0xBUklUWV9S RVZFUlNFRDsKLQkJaWYgKGRldl9wcml2LT52YnQuZmRpX3J4X3BvbGFyaXR5X2ludmVydGVkKQot CQkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX0ZESV9QT0xBUklUWV9SRVZFUlNFRDsKLQkJdmFsICY9 IH5UUkFOU19DSElDS0VOMl9GUkFNRV9TVEFSVF9ERUxBWV9NQVNLOwotCQl2YWwgJj0gflRSQU5T X0NISUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9DT1VOVEVSOwotCQl2YWwgJj0gflRSQU5TX0NI SUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9NT0RFU1dJVENIOwotCQlJOTE1X1dSSVRFKFRSQU5T X0NISUNLRU4yKHBpcGUpLCB2YWwpOwotCX0KLQkvKiBXQURQMENsb2NrR2F0aW5nRGlzYWJsZSAq LwotCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJSTkxNV9XUklURShUUkFOU19D SElDS0VOMShwaXBlKSwKLQkJCSAgIFRSQU5TX0NISUNLRU4xX0RQMFVOSVRfR0NfRElTQUJMRSk7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIHRtcDsKLQotCXRtcCA9IEk5MTVfUkVBRChN Q0hfU1NLUEQpOwotCWlmICgodG1wICYgTUNIX1NTS1BEX1dNMF9NQVNLKSAhPSBNQ0hfU1NLUERf V00wX1ZBTCkKLQkJRFJNX0RFQlVHX0tNUygiV3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHgg VGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxuIiwKLQkJCSAgICAgIHRtcCk7Ci19Ci0KLXN0YXRp YyB2b2lkIGdlbjZfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVfRElT QUJMRTsKLQotCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKLQot CUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElT UExBWV9DSElDS0VOMikgfAotCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7Ci0KLQkvKiBXYURp c2FibGVIaVpQbGFuZXNXaGVuTVNBQUVuYWJsZWQ6c25iICovCi0JSTkxNV9XUklURShfM0RfQ0hJ Q0tFTiwKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNB QkxFX01TQUFfNFhfU05CKSk7Ci0KLQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9u YWxGbHVzaDpzbmIgKi8KLQlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElT QUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKLQotCS8qCi0JICogQlNwZWMgcmVjb29tZW5kcyA4 eDQgd2hlbiBNU0FBIGlzIHVzZWQsCi0JICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNlZW1z IGZhc3Rlc3QuCi0JICoKLQkgKiBOb3RlIHRoYXQgUFMvV00gdGhyZWFkIGNvdW50cyBkZXBlbmQg b24gdGhlIFdJWiBoYXNoaW5nCi0JICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRvbid0IHRvdWNo IGhlcmUsIGJ1dCBpdCdzIGdvb2QKLQkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BT IGFuZCAzRFNUQVRFX1dNKS4KLQkgKi8KLQlJOTE1X1dSSVRFKEdFTjZfR1RfTU9ERSwKLQkJICAg X01BU0tFRF9GSUVMRChHRU42X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdfMTZ4 NCkpOwotCi0JSTkxNV9XUklURShDQUNIRV9NT0RFXzAsCi0JCSAgIF9NQVNLRURfQklUX0RJU0FC TEUoQ00wX1NUQ19FVklDVF9ESVNBQkxFX0xSQV9TTkIpKTsKLQotCUk5MTVfV1JJVEUoR0VONl9V Q0dDVEwxLAotCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8Ci0JCSAgIEdFTjZfQkxCVU5J VF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOwotCi0JLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5J VCkgY2xvY2sKLQkgKiBnYXRpbmcgZGlzYWJsZSBtdXN0IGJlIHNldC4gIEZhaWx1cmUgdG8gc2V0 IGl0IHJlc3VsdHMgaW4KLQkgKiBmbGlja2VyaW5nIHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRl cmluZyBmYWlsdXJlcyBhZnRlcgotCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1l c2EgImZpcmUiIGRlbW8sIGFuZCBVbmlnaW5lCi0JICogU2FuY3R1YXJ5IGFuZCBUcm9waWNzLCBh bmQgYXBwYXJlbnRseSBhbnl0aGluZyBlbHNlIHdpdGgKLQkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVs IGRpc2NhcmQuCi0JICoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJpdCAxMSAoUkNDVU5J VCkgbXVzdCBhbHNvIGJlIHNldCwKLQkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0 Y2FzZXMgdG8gZmluZCBpdCBvdXQuCi0JICoKLQkgKiBXYURpc2FibGVSQ0NVbml0Q2xvY2tHYXRp bmc6c25iCi0JICogV2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKLQkgKi8KLQlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMiwKLQkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUgfAotCQkgICBHRU42X1JDQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLQotCS8qIFdhU3Ry aXBzRmFuc0Rpc2FibGVGYXN0Q2xpcFBlcmZvcm1hbmNlRml4OnNuYiAqLwotCUk5MTVfV1JJVEUo XzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJ U0FCTEVfRkFTVENMSVBfQ1VMTCkpOwotCi0JLyoKLQkgKiBCc3BlYyBzYXlzOgotCSAqICJUaGlz IGJpdCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3Jt YWwgYW5kCi0JICogM0RTVEFURV9TRiBudW1iZXIgb2YgU0Ygb3V0cHV0IGF0dHJpYnV0ZXMgaXMg bW9yZSB0aGFuIDE2LiIKLQkgKi8KLQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKLQkJICAgX01B U0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX1BJUEVMSU5FRF9BVFRSX0ZF VENIKSk7Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYyB0aGUgZm9sbG93aW5nIGJp dHMgc2hvdWxkIGJlCi0JICogc2V0IGluIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZy ZXNoIGFuZCBmYmM6Ci0JICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDAwCi0JICogVGhl IGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0Ci0JICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0 MjAyMAotCSAqIFRoZSBiaXQxNCBvZiAweDcwMTgwCi0JICogVGhlIGJpdDE0IG9mIDB4NzExODAK LQkgKgotCSAqIFdhRmJjQXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKLQkgKi8KLQlJOTE1 X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEpIHwKLQkJICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKLQlJ OTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BM QVlfQ0hJQ0tFTjIpIHwKLQkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOwot CUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsCi0JCSAgIEk5MTVfUkVBRChJTEtfRFNQQ0xL X0dBVEVfRCkgfAotCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8Ci0JCSAg IElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRSk7Ci0KLQlnNHhfZGlzYWJsZV90cmlja2xl X2ZlZWQoZGV2X3ByaXYpOwotCi0JY3B0X2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKLQot CWdlbjZfY2hlY2tfbWNoX3NldHVwKGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuN19z ZXR1cF9maXhlZF9mdW5jX3NjaGVkdWxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43X0ZGX1RIUkVBRF9NT0RFKTsKKwl1MzIg cmVnID0gSTkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01PREUpOwogCiAJLyoKIAkgKiBXYVZTVGhy ZWFkRGlzcGF0Y2hPdmVycmlkZTppdmIsdmx2CkBAIC04OTQyLDkwICs3MzI1LDggQEAgdm9pZCBp bnRlbF9pbml0X3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAl9CiB9CiAK LXN0YXRpYyBpbnQgYnl0X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qCi0JICogTiA9IHZhbCAtIDB4YjcKLQkgKiBTbG93ID0gRmFzdCA9IEdQTEwg cmVmICogTgotCSAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxfcmVmX2Zy ZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOwotfQotCi1zdGF0aWMgaW50IGJ5dF9mcmVxX29wY29k ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QoMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3JlZl9mcmVxKSArIDB4Yjc7Ci19Ci0K LXN0YXRpYyBpbnQgY2h2X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qCi0JICogTiA9IHZhbCAvIDIKLQkgKiBDVSAoc2xvdykgPSBDVTJ4IChmYXN0 KSAvIDIgPSBHUExMIHJlZiAqIE4gLyAyCi0JICovCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KHJwcy0+Z3BsbF9yZWZfZnJlcSAqIHZhbCwgMiAqIDIgKiAxMDAwKTsKLX0KLQotc3RhdGljIGlu dCBjaHZfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQg dmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot Ci0JLyogQ0hWIG5lZWRzIGV2ZW4gdmFsdWVzICovCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KDIgKiAxMDAwICogdmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICogMjsKLX0KLQotaW50IGludGVs X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsK LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NF U1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVIsCi0JCQkJCSBHRU45X0ZSRVFfU0NBTEVS KTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJcmV0dXJuIGNodl9ncHVf ZnJlcShkZXZfcHJpdiwgdmFsKTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkK LQkJcmV0dXJuIGJ5dF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKTsKLQllbHNlCi0JCXJldHVybiB2 YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsKLX0KLQotaW50IGludGVsX2ZyZXFfb3Bjb2Rl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsKLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICog R0VOOV9GUkVRX1NDQUxFUiwKLQkJCQkJIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKLQllbHNl IGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJcmV0dXJuIGNodl9mcmVxX29wY29kZShk ZXZfcHJpdiwgdmFsKTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJcmV0 dXJuIGJ5dF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKLQllbHNlCi0JCXJldHVybiBESVZf Uk9VTkRfQ0xPU0VTVCh2YWwsIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKLX0KLQogdm9pZCBp bnRlbF9wbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0 ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKLQltdXRleF9pbml0KCZkZXZfcHJp di0+Z3RfcG0ucnBzLnBvd2VyLm11dGV4KTsKLQotCWF0b21pY19zZXQoJmRldl9wcml2LT5ndF9w bS5ycHMubnVtX3dhaXRlcnMsIDApOwotCiAJZGV2X3ByaXYtPnJ1bnRpbWVfcG0uc3VzcGVuZGVk ID0gZmFsc2U7CiAJYXRvbWljX3NldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0ud2FrZXJlZl9jb3Vu dCwgMCk7CiB9Ci0KLXUzMiBpbnRlbF9nZXRfY2FnZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIHUzMiBycHN0YXQpCi17Ci0JdTMyIGNhZ2Y7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5KQotCQljYWdmID0gKHJwc3RhdCAmIEdFTjlfQ0FHRl9NQVNLKSA+PiBHRU45 X0NBR0ZfU0hJRlQ7Ci0JZWxzZSBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURX RUxMKGRldl9wcml2KSkKLQkJY2FnZiA9IChycHN0YXQgJiBIU1dfQ0FHRl9NQVNLKSA+PiBIU1df Q0FHRl9TSElGVDsKLQllbHNlCi0JCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+ IEdFTjZfQ0FHRl9TSElGVDsKLQotCXJldHVybiAgY2FnZjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5oCmluZGV4IDkzZDE5MmQwNjEwYS4uYjU2ZTYyODVkMWMzIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmgKQEAgLTI5LDE1ICsyOSw2IEBAIHZvaWQgaW50ZWxfdXBkYXRlX3dhdGVybWFya3Moc3Ry dWN0IGludGVsX2NydGMgKmNydGMpOwogdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nX2hvb2tz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX3BtX3NldHVw KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2dwdV9pcHNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9ncHVf aXBzX3RlYXJkb3duKHZvaWQpOwotdm9pZCBpbnRlbF9pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZW5h YmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9p ZCBpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwotdm9pZCBnZW42X3Jwc19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Ci12b2lkIGdlbjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwogdm9p ZCBnNHhfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKIHZvaWQgaWxrX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwpAQCAtNjksMTkgKzYwLDYgQEAgaW50IHNrbF9jaGVja19waXBlX21heF9waXhl bF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogdm9pZCBpbnRlbF9pbml0X2lw YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9lbmFibGVf aXBjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKLWludCBpbnRlbF9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwotaW50IGlu dGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZh bCk7Ci0KLXUzMiBpbnRlbF9nZXRfY2FnZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBycHN0YXQxKTsKLQotdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci11bnNpZ25lZCBsb25nIGk5MTVfbWNoX3Zh bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdW5zaWduZWQgbG9uZyBpOTE1 X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaTkxNV91 cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotCi1ib29s IGlyb25sYWtlX3NldF9kcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTgg dmFsKTsKLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdTggdmFsKTsKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUpOwogYm9vbCBpbnRlbF9zZXRfbWVt b3J5X2N4c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSk7 CiAKICNlbmRpZiAvKiBfX0lOVEVMX1BNX0hfXyAqLwotLSAKMi4yMy4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2645CA9EB6 for ; Wed, 23 Oct 2019 09:50:11 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7C9ED2064B for ; Wed, 23 Oct 2019 09:50:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7C9ED2064B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4EEE6EA16; Wed, 23 Oct 2019 09:50:10 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 61FD86EA19 for ; Wed, 23 Oct 2019 09:50:09 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Oct 2019 02:50:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,220,1569308400"; d="scan'208";a="372828997" Received: from server.fi.intel.com (HELO teofilatto.example.org) ([10.237.72.186]) by orsmga005.jf.intel.com with ESMTP; 23 Oct 2019 02:50:04 -0700 From: Andi Shyti To: Intel GFX Date: Wed, 23 Oct 2019 12:50:00 +0300 Message-Id: <20191023095000.3782-1-andi.shyti@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191023093821.3350-1-andi.shyti@intel.com> References: <20191023093821.3350-1-andi.shyti@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 1/2] drm/i915: Extract GT render power state management X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191023095000.aFQNj1zVfuYGa2NpraES3GOSxdXOQuTTL2xxiWOeVfs@z> aTkxNV9pcnEuYyBpcyBsYXJnZS4gT25lIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGhhcyBhIGxh cmdlIGNodW5rIG9mCnRoZSBHVCByZW5kZXIgcG93ZXIgbWFuYWdlbWVudCBzdGFzaGVkIGF3YXkg aW4gaXQuIEV4dHJhY3QgdGhhdCBsb2dpYwpvdXQgb2YgaTkxNV9pcnEuYyBhbmQgaW50ZWxfcG0u YyBhbmQgcHV0IGl0IHVuZGVyIG9uZSByb29mLgoKQmFzZWQgb24gYSBwYXRjaCBieSBDaHJpcyBX aWxzb24uCgpTaWduZWQtb2ZmLWJ5OiBBbmRpIFNoeXRpIDxhbmRpLnNoeXRpQGludGVsLmNvbT4K Q2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8ICAgIDggKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgICAgICAgICAgICB8ICAgIDYgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jICAgICAgICB8ICAgIDUgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMgICAgICAgICB8ICAgNDkgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmggICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaCAgICAgIHwgICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAgfCAgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyAgICAgICAgICAgfCAxODcyICsrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmggICAgICAgICAgIHwgICAzNyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaCAgICAgfCAgIDkzICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jICAgICAgICB8ICAgIDcgKy0K IC4uLi9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyB8ICAgIDQgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAgNzMgKy0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgIDIgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICA5NiAtCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCAgICAzICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgMzU5ICstLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaCAgICAgICAgICAgICAgIHwgICAgMyAtCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgICAgICAgfCAgIDEwICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgICAgICAgfCAgICA3ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMgICAgICAgICAgICAgfCAgIDc0ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgICAgICAgICAgfCAyMTA1ICsrLS0t LS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oICAgICAgICAgICAg ICAgfCAgIDIyIC0KIDI0IGZpbGVzIGNoYW5nZWQsIDIzNTkgaW5zZXJ0aW9ucygrKSwgMjQ4NCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ycHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3Jwcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfcnBzX3R5cGVzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDJmZDRiZWQxODhlNS4uMTMz Y2E1OWU3YzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtOTAsMTEgKzkwLDEyIEBAIGd0LXkg Kz0gXAogCWd0L2ludGVsX2hhbmdjaGVjay5vIFwKIAlndC9pbnRlbF9sbGMubyBcCiAJZ3QvaW50 ZWxfbHJjLm8gXAorCWd0L2ludGVsX21vY3MubyBcCiAJZ3QvaW50ZWxfcmM2Lm8gXAogCWd0L2lu dGVsX3JlbmRlcnN0YXRlLm8gXAogCWd0L2ludGVsX3Jlc2V0Lm8gXAogCWd0L2ludGVsX3Jpbmdi dWZmZXIubyBcCi0JZ3QvaW50ZWxfbW9jcy5vIFwKKwlndC9pbnRlbF9ycHMubyBcCiAJZ3QvaW50 ZWxfc3NldS5vIFwKIAlndC9pbnRlbF90aW1lbGluZS5vIFwKIAlndC9pbnRlbF93b3JrYXJvdW5k cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4 IDIzNmZkZjEyMmU0Ny4uNDljMmM3ZjcxMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgImRpc3Bs YXkvaW50ZWxfdHYuaCIKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3Zkc2MuaCIKIAorI2luY2x1 ZGUgImd0L2ludGVsX3Jwcy5oIgorCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJp OTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfYWNwaS5oIgpAQCAtMTQ3ODIsNyArMTQ3ODQs NyBAQCBzdGF0aWMgaW50IGRvX3Jwc19ib29zdChzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqX3dh aXQsCiAJICogdmJsYW5rIHdpdGhvdXQgb3VyIGludGVydmVudGlvbiwgc28gbGVhdmUgUlBTIGFs b25lLgogCSAqLwogCWlmICghaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpKQotCQlnZW42X3Jwc19i b29zdChycSk7CisJCWludGVsX3Jwc19ib29zdChycSk7CiAJaTkxNV9yZXF1ZXN0X3B1dChycSk7 CiAKIAlkcm1fY3J0Y192YmxhbmtfcHV0KHdhaXQtPmNydGMpOwpAQCAtMTQ5NzYsNyArMTQ5Nzgs NyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCSAq IG1heGltdW0gY2xvY2tzIGZvbGxvd2luZyBhIHZibGFuayBtaXNzIChzZWUgZG9fcnBzX2Jvb3N0 KCkpLgogCSAqLwogCWlmICghaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFjdGl2ZSkgewotCQlpbnRl bF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgdHJ1ZSk7CisJCWludGVsX3Jwc19tYXJr X2ludGVyYWN0aXZlKCZkZXZfcHJpdi0+Z3QucnBzLCB0cnVlKTsKIAkJaW50ZWxfc3RhdGUtPnJw c19pbnRlcmFjdGl2ZSA9IHRydWU7CiAJfQogCkBAIC0xNTAwMSw3ICsxNTAwMyw3IEBAIGludGVs X2NsZWFudXBfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ZGV2KTsKIAogCWlmIChpbnRl bF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlKSB7Ci0JCWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZl KGRldl9wcml2LCBmYWxzZSk7CisJCWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKCZkZXZfcHJp di0+Z3QucnBzLCBmYWxzZSk7CiAJCWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSBmYWxz ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCmluZGV4IDFjNGI2Yzk2NDJhZC4u NzUxODg1MmNiNzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKQEAgLTksNiArOSw3 IEBACiAjaW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKICNpbmNsdWRlICJpbnRlbF9tb2Nz LmgiCiAjaW5jbHVkZSAiaW50ZWxfcmM2LmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAjaW5j bHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAjaW5jbHVkZSAiaW50ZWxfcG0uaCIKIApAQCAtMzIxLDgg KzMyMiw3IEBAIHZvaWQgaW50ZWxfZ3RfY2hpcHNldF9mbHVzaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQogCiB2b2lkIGludGVsX2d0X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQog ewotCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKQotCQlpbnRlbF9ncHVfaXBzX2luaXQoZ3QtPmk5 MTUpOworCWludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoJmd0LT5ycHMpOwogfQogCiBzdGF0aWMg aW50IGludGVsX2d0X2luaXRfc2NyYXRjaChzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1bnNpZ25lZCBp bnQgc2l6ZSkKQEAgLTM4NSw3ICszODUsNyBAQCB2b2lkIGludGVsX2d0X2RyaXZlcl9yZW1vdmUo c3RydWN0IGludGVsX2d0ICpndCkKIAogdm9pZCBpbnRlbF9ndF9kcml2ZXJfdW5yZWdpc3Rlcihz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQogewotCWludGVsX2dwdV9pcHNfdGVhcmRvd24oKTsKKwlpbnRl bF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoJmd0LT5ycHMpOwogfQogCiB2b2lkIGludGVsX2d0X2Ry aXZlcl9yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0X2lycS5jCmluZGV4IDM0YTRmYjYyNGJmNy4uOTczZWU3ZWRlZDY0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUg ImludGVsX2d0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCiAjaW5jbHVkZSAiaW50ZWxf dW5jb3JlLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAKIHN0YXRpYyB2b2lkIGd1Y19pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUxNiBpaXIpCiB7CkBAIC03Nyw3ICs3OCw3 IEBAIGdlbjExX290aGVyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGNvbnN0IHU4 IGluc3RhbmNlLAogCQlyZXR1cm4gZ3VjX2lycV9oYW5kbGVyKCZndC0+dWMuZ3VjLCBpaXIpOwog CiAJaWYgKGluc3RhbmNlID09IE9USEVSX0dUUE1fSU5TVEFOQ0UpCi0JCXJldHVybiBnZW4xMV9y cHNfaXJxX2hhbmRsZXIoZ3QsIGlpcik7CisJCXJldHVybiBnZW4xMV9ycHNfaXJxX2hhbmRsZXIo Jmd0LT5ycHMsIGlpcik7CiAKIAlXQVJOX09OQ0UoMSwgInVuaGFuZGxlZCBvdGhlciBpbnRlcnJ1 cHQgaW5zdGFuY2U9MHgleCwgaWlyPTB4JXhcbiIsCiAJCSAgaW5zdGFuY2UsIGlpcik7CkBAIC0z MzYsNyArMzM3LDcgQEAgdm9pZCBnZW44X2d0X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIHUzMiBtYXN0ZXJfY3RsLCB1MzIgZ3RfaWlyWzRdKQogCX0KIAogCWlmIChtYXN0ZXJfY3Rs ICYgKEdFTjhfR1RfUE1fSVJRIHwgR0VOOF9HVF9HVUNfSVJRKSkgewotCQlnZW42X3Jwc19pcnFf aGFuZGxlcihndC0+aTkxNSwgZ3RfaWlyWzJdKTsKKwkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmd0 LT5ycHMsIGd0X2lpclsyXSk7CiAJCWd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgZ3RfaWly WzJdID4+IDE2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwppbmRl eCAwNmU3M2Q1NmNmY2YuLjMyY2E4NzI2NTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5jCkBAIC0xMiw4ICsxMiwxMCBAQAogI2luY2x1ZGUgImludGVsX2d0LmgiCiAjaW5j bHVkZSAiaW50ZWxfZ3RfcG0uaCIKICNpbmNsdWRlICJpbnRlbF9ndF9yZXF1ZXN0cy5oIgorI2lu Y2x1ZGUgImludGVsX2xsYy5oIgogI2luY2x1ZGUgImludGVsX3BtLmgiCiAjaW5jbHVkZSAiaW50 ZWxfcmM2LmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiaW50ZWxfd2FrZXJl Zi5oIgogCiBzdGF0aWMgaW50IF9fZ3RfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikK QEAgLTM5LDEyICs0MSw4IEBAIHN0YXRpYyBpbnQgX19ndF91bnBhcmsoc3RydWN0IGludGVsX3dh a2VyZWYgKndmKQogCWd0LT5hd2FrZSA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGk5MTUsIFBP V0VSX0RPTUFJTl9HVF9JUlEpOwogCUdFTV9CVUdfT04oIWd0LT5hd2FrZSk7CiAKLQlpbnRlbF9l bmFibGVfZ3RfcG93ZXJzYXZlKGk5MTUpOwotCi0JaTkxNV91cGRhdGVfZ2Z4X3ZhbChpOTE1KTsK LQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCi0JCWdlbjZfcnBzX2J1c3koaTkxNSk7Ci0KKwlp bnRlbF9ycHNfdW5wYXJrKCZndC0+cnBzKTsKKwlpbnRlbF9sbGNfZW5hYmxlKCZndC0+bGxjKTsK IAlpOTE1X3BtdV9ndF91bnBhcmtlZChpOTE1KTsKIAogCWludGVsX2d0X3F1ZXVlX2hhbmdjaGVj ayhndCk7CkBAIC02NSw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgX19ndF9wYXJrKHN0cnVjdCBpbnRl bF93YWtlcmVmICp3ZikKIAogCWk5MTVfdm1hX3BhcmtlZChndCk7CiAJaTkxNV9wbXVfZ3RfcGFy a2VkKGk5MTUpOwotCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKLQkJZ2VuNl9ycHNfaWRsZShp OTE1KTsKKwlpbnRlbF9sbGNfZGlzYWJsZSgmZ3QtPmxsYyk7CisJaW50ZWxfcnBzX3BhcmsoJmd0 LT5ycHMpOwogCiAJLyogRXZlcnl0aGluZyBzd2l0Y2hlZCBvZmYsIGZsdXNoIGFueSByZXNpZHVh bCBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCiAJaW50ZWxfc3luY2hyb25pemVfaXJxKGk5MTUp OwpAQCAtOTgsNiArOTYsNyBAQCB2b2lkIGludGVsX2d0X3BtX2luaXQoc3RydWN0IGludGVsX2d0 ICpndCkKIAkgKiB1c2VyLgogCSAqLwogCWludGVsX3JjNl9pbml0KCZndC0+cmM2KTsKKwlpbnRl bF9ycHNfaW5pdCgmZ3QtPnJwcyk7CiB9CiAKIHN0YXRpYyBib29sIHJlc2V0X2VuZ2luZXMoc3Ry dWN0IGludGVsX2d0ICpndCkKQEAgLTE0MSwxMCArMTQwLDM5IEBAIHZvaWQgaW50ZWxfZ3Rfc2Fu aXRpemUoc3RydWN0IGludGVsX2d0ICpndCwgYm9vbCBmb3JjZSkKIAkJCWVuZ2luZS0+cmVzZXQu ZmluaXNoKGVuZ2luZSk7CiB9CiAKK3ZvaWQgaW50ZWxfZ3RfcG1fZW5hYmxlKHN0cnVjdCBpbnRl bF9ndCAqZ3QpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0gaW50 ZWxfZW5naW5lX2lkIGlkOworCisJLyogUG93ZXJzYXZpbmcgaXMgY29udHJvbGxlZCBieSB0aGUg aG9zdCB3aGVuIGluc2lkZSBhIFZNICovCisJaWYgKGludGVsX3ZncHVfYWN0aXZlKGd0LT5pOTE1 KSkKKwkJcmV0dXJuOworCisJaWYgKGlzX21vY2tfZ3QoZ3QpKQorCQlyZXR1cm47CisKKwlpbnRl bF9ndF9wbV9nZXQoZ3QpOworCWludGVsX3Jwc19lbmFibGUoJmd0LT5ycHMpOworCWludGVsX2xs Y19lbmFibGUoJmd0LT5sbGMpOworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QtPmk5MTUs IGlkKSB7CisJCWludGVsX2VuZ2luZV9wbV9nZXQoZW5naW5lKTsKKwkJZW5naW5lLT5zZXJpYWwr KzsgLyogZm9yY2Uga2VybmVsIGNvbnRleHQgcmVsb2FkICovCisJCWludGVsX2VuZ2luZV9wbV9w dXQoZW5naW5lKTsKKwl9CisKKwlpbnRlbF9ndF9wbV9wdXQoZ3QpOworfQorCiB2b2lkIGludGVs X2d0X3BtX2Rpc2FibGUoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlpZiAoIWlzX21vY2tfZ3Qo Z3QpKQotCQlpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoZ3QtPmk5MTUpOworCWlmIChpc19t b2NrX2d0KGd0KSkKKwkJcmV0dXJuOworCisJaW50ZWxfcmM2X2Rpc2FibGUoJmd0LT5yYzYpOwor CWludGVsX2xsY19kaXNhYmxlKCZndC0+bGxjKTsKKwlpbnRlbF9ycHNfZGlzYWJsZSgmZ3QtPnJw cyk7CiB9CiAKIHZvaWQgaW50ZWxfZ3RfcG1fZmluaShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQpAQCAt MTY1LDYgKzE5Myw3IEBAIGludCBpbnRlbF9ndF9yZXN1bWUoc3RydWN0IGludGVsX2d0ICpndCkK IAkgKiBhbGxvd2luZyB1cyB0byBmaXh1cCB0aGUgdXNlciBjb250ZXh0cyBvbiB0aGVpciBmaXJz dCBwaW4uCiAJICovCiAJaW50ZWxfZ3RfcG1fZ2V0KGd0KTsKKwogCWludGVsX3VuY29yZV9mb3Jj ZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwogCWludGVsX3JjNl9zYW5pdGl6 ZSgmZ3QtPnJjNik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oCmluZGV4IDBl ZDg3ZGE0YmI2OC4uZGY1MGY4NTM3NDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9wbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0 X3BtLmgKQEAgLTQwLDYgKzQwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3RfcG1fd2Fp dF9mb3JfaWRsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQogdm9pZCBpbnRlbF9ndF9wbV9pbml0X2Vh cmx5KHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBp bnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9ndCAq Z3QpOwordm9pZCBpbnRlbF9ndF9wbV9lbmFibGUoc3RydWN0IGludGVsX2d0ICpndCk7CiB2b2lk IGludGVsX2d0X3BtX2Zpbmkoc3RydWN0IGludGVsX2d0ICpndCk7CiAKIHZvaWQgaW50ZWxfZ3Rf c2FuaXRpemUoc3RydWN0IGludGVsX2d0ICpndCwgYm9vbCBmb3JjZSk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAppbmRleCA5ODA5NzNlNjZlN2YuLmU0YmQyM2ViODI5 MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oCkBAIC0yMCw2ICsy MCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfbGxjX3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVz ZXRfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9yYzZfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRl bF9ycHNfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCiAKIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlOwpAQCAtODIsNiArODMsNyBAQCBzdHJ1Y3QgaW50ZWxfZ3QgewogCiAJc3Ry dWN0IGludGVsX2xsYyBsbGM7CiAJc3RydWN0IGludGVsX3JjNiByYzY7CisJc3RydWN0IGludGVs X3JwcyBycHM7CiAKIAlrdGltZV90IGxhc3RfaW5pdF90aW1lOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xsYy5jCmluZGV4IDM1MDkzZWI1ZjI0ZS4uY2ViNzg1Yjc1YzI1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9sbGMuYwpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgYm9vbCBnZXRf aWFfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9sbGMgKmxsYywKIAkJCSAgICAgc3RydWN0IGlhX2Nv bnN0YW50cyAqY29uc3RzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbGxj X3RvX2d0KGxsYyktPmk5MTU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUtPmd0X3Bt LnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmbGxjX3RvX2d0KGxsYyktPnJwczsKIAog CWlmIChycHMtPm1heF9mcmVxIDw9IHJwcy0+bWluX2ZyZXEpCiAJCXJldHVybiBmYWxzZTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4zMGY1NmM3ODY0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ycHMuYwpAQCAtMCwwICsxLDE4NzIgQEAKKy8qCisgKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9n dC5oIgorI2luY2x1ZGUgImludGVsX2d0X2lycS5oIgorI2luY2x1ZGUgImludGVsX2d0X3BtX2ly cS5oIgorI2luY2x1ZGUgImludGVsX3Jwcy5oIgorI2luY2x1ZGUgImludGVsX3NpZGViYW5kLmgi CisjaW5jbHVkZSAiLi4vLi4vLi4vcGxhdGZvcm0veDg2L2ludGVsX2lwcy5oIgorCisvKgorICog TG9jayBwcm90ZWN0aW5nIElQUyByZWxhdGVkIGRhdGEgc3RydWN0dXJlcworICovCitzdGF0aWMg REVGSU5FX1NQSU5MT0NLKG1jaGRldl9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBpbnRlbF9ndCAq cnBzX3RvX2d0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KHJwcywgc3RydWN0IGludGVsX2d0LCBycHMpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKnJwc190b19pOTE1KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4g cnBzX3RvX2d0KHJwcyktPmk5MTU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfdW5jb3JlICpy cHNfdG9fdW5jb3JlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlyZXR1cm4gcnBzX3RvX2d0 KHJwcyktPnVuY29yZTsKK30KKworc3RhdGljIHUzMiBycHNfcG1fc2FuaXRpemVfbWFzayhzdHJ1 Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBtYXNrKQoreworCXJldHVybiBtYXNrICYgfnJwcy0+cG1f aW50cm1za19tYno7Cit9CisKK3N0YXRpYyB1MzIgcnBzX3BtX21hc2soc3RydWN0IGludGVsX3Jw cyAqcnBzLCB1OCB2YWwpCit7CisJdTMyIG1hc2sgPSAwOworCisJLyogV2UgdXNlIFVQX0VJX0VY UElSRUQgaW50ZXJydXB0cyBmb3IgYm90aCB1cC9kb3duIGluIG1hbnVhbCBtb2RlICovCisJaWYg KHZhbCA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQltYXNrIHw9IChHRU42X1BNX1JQX1VQ X0VJX0VYUElSRUQgfAorCQkJIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfAorCQkJIEdFTjZf UE1fUlBfRE9XTl9USU1FT1VUKTsKKworCWlmICh2YWwgPCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCkKKwkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX1RI UkVTSE9MRDsKKworCW1hc2sgJj0gcnBzLT5wbV9ldmVudHM7CisKKwlyZXR1cm4gcnBzX3BtX3Nh bml0aXplX21hc2socnBzLCB+bWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIHJwc19yZXNldF9laShz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJbWVtc2V0KCZycHMtPmVpLCAwLCBzaXplb2YocnBz LT5laSkpOworfQorCitzdGF0aWMgdm9pZCBycHNfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsK KworCXJwc19yZXNldF9laShycHMpOworCisJaWYgKElTX1ZBTExFWVZJRVcoZ3QtPmk5MTUpKQor CQkvKiBXYUdzdlJDMFJlc2lkZW5jeU1ldGhvZDp2bHYgKi8KKwkJcnBzLT5wbV9ldmVudHMgPSBH RU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7CisJZWxzZQorCQlycHMtPnBtX2V2ZW50cyA9IChHRU42 X1BNX1JQX1VQX1RIUkVTSE9MRCB8CisJCQkJICBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwK KwkJCQkgIEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5p cnFfbG9jayk7CisJZ2VuNl9ndF9wbV9lbmFibGVfaXJxKGd0LCBycHMtPnBtX2V2ZW50cyk7CisJ c3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKGd0 LT51bmNvcmUsIEdFTjZfUE1JTlRSTVNLLAorCQkJICAgcnBzX3BtX21hc2socnBzLCBycHMtPmN1 cl9mcmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCWdlbjZfZ3RfcG1fcmVzZXRfaWlyKHJwc190b19ndChy cHMpLCBHRU42X1BNX1JQU19FVkVOVFMpOworfQorCitzdGF0aWMgdm9pZCBnZW4xMV9ycHNfcmVz ZXRfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJd2hpbGUgKGdlbjExX2d0 X3Jlc2V0X29uZV9paXIocnBzX3RvX2d0KHJwcyksIDAsIEdFTjExX0dUUE0pKQorCQk7Cit9CisK K3N0YXRpYyB2b2lkIHJwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwlzcGluX2xvY2tf aXJxKCZndC0+aXJxX2xvY2spOworCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExKQorCQln ZW4xMV9ycHNfcmVzZXRfaW50ZXJydXB0cyhycHMpOworCWVsc2UKKwkJZ2VuNl9ycHNfcmVzZXRf aW50ZXJydXB0cyhycHMpOworCisJcnBzLT5wbV9paXIgPSAwOworCXNwaW5fdW5sb2NrX2lycSgm Z3QtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcnBzX2Rpc2FibGVfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19n dChycHMpOworCisJcnBzLT5wbV9ldmVudHMgPSAwOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKGd0 LT51bmNvcmUsIEdFTjZfUE1JTlRSTVNLLAorCQkJICAgcnBzX3BtX3Nhbml0aXplX21hc2socnBz LCB+MHUpKTsKKworCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7CisJZ2VuNl9ndF9wbV9k aXNhYmxlX2lycShndCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKKwlzcGluX3VubG9ja19pcnEoJmd0 LT5pcnFfbG9jayk7CisKKwlpbnRlbF9zeW5jaHJvbml6ZV9pcnEoZ3QtPmk5MTUpOworCisJLyoK KwkgKiBOb3cgdGhhdCB3ZSB3aWxsIG5vdCBiZSBnZW5lcmF0aW5nIGFueSBtb3JlIHdvcmssIGZs dXNoIGFueQorCSAqIG91dHN0YW5kaW5nIHRhc2tzLiBBcyB3ZSBhcmUgY2FsbGVkIG9uIHRoZSBS UFMgaWRsZSBwYXRoLAorCSAqIHdlIHdpbGwgcmVzZXQgdGhlIEdQVSB0byBtaW5pbXVtIGZyZXF1 ZW5jaWVzLCBzbyB0aGUgY3VycmVudAorCSAqIHN0YXRlIG9mIHRoZSB3b3JrZXIgY2FuIGJlIGRp c2NhcmRlZC4KKwkgKi8KKwljYW5jZWxfd29ya19zeW5jKCZycHMtPndvcmspOworCisJcnBzX3Jl c2V0X2ludGVycnVwdHMocnBzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsK Kwl1MTYgaTsKKwl1MTYgdDsKKwl1MTYgbTsKKwl1MTYgYzsKK30gY3BhcmFtc1tdID0geworCXsg MSwgMTMzMywgMzAxLCAyODY2NCB9LAorCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAorCXsgMSwg ODAwLCAyOTQsIDI1MTkyIH0sCisJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCisJeyAwLCAxMDY2 LCAyNzYsIDI3NjA1IH0sCisJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKK307CisKK3N0YXRpYyB2 b2lkIGdlbjVfcnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwlzdHJ1Y3QgaW50ZWxfdW5j b3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTggZm1heCwgZm1pbiwgZnN0YXJ0 OworCXUzMiByZ3Ztb2RlY3RsOworCWludCBjX20sIGk7CisKKwlpZiAoaTkxNS0+ZnNiX2ZyZXEg PD0gMzIwMCkKKwkJY19tID0gMDsKKwllbHNlIGlmIChpOTE1LT5mc2JfZnJlcSA8PSA0ODAwKQor CQljX20gPSAxOworCWVsc2UKKwkJY19tID0gMjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGNwYXJhbXMpOyBpKyspIHsKKwkJaWYgKGNwYXJhbXNbaV0uaSA9PSBjX20gJiYgY3BhcmFt c1tpXS50ID09IGk5MTUtPm1lbV9mcmVxKSB7CisJCQlycHMtPmlwcy5tID0gY3BhcmFtc1tpXS5t OworCQkJcnBzLT5pcHMuYyA9IGNwYXJhbXNbaV0uYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ cmd2bW9kZWN0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNTU9ERUNUTCk7CisKKwkv KiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLworCWZt YXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1BWF9NQVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJ RlQ7CisJZm1pbiA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUlOX01BU0spOworCWZzdGFydCA9 IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykgPj4KKwkJTUVNTU9ERV9GU1RBUlRf U0hJRlQ7CisJRFJNX0RFQlVHX0RSSVZFUigiZm1heDogJWQsIGZtaW46ICVkLCBmc3RhcnQ6ICVk XG4iLAorCQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7CisKKwlycHMtPm1pbl9mcmVxID0gLWZzdGFy dDsKKwlycHMtPm1heF9mcmVxID0gLWZtaW47CisKKwlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWlu X2ZyZXE7CisJcnBzLT5jdXJfZnJlcSA9IHJwcy0+aWRsZV9mcmVxOworfQorCitzdGF0aWMgdW5z aWduZWQgbG9uZworX19pcHNfY2hpcHNldF92YWwoc3RydWN0IGludGVsX2lwcyAqaXBzKQorewor CXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9CisJCXJwc190b191bmNvcmUoY29udGFpbmVy X29mKGlwcywgc3RydWN0IGludGVsX3JwcywgaXBzKSk7CisJdW5zaWduZWQgbG9uZyBub3cgPSBq aWZmaWVzX3RvX21zZWNzKGppZmZpZXMpLCBkdDsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwl1 NjQgdG90YWwsIGRlbHRhOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwor CisJLyoKKwkgKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2luZyB0b28g ZmFzdC4KKwkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0cyBpZiB3ZSBh cmUgcG9sbGluZworCSAqIGZhc3RlciB0aGFuIG9uY2UgaW4gMTBtcywgc28ganVzdCByZXR1cm4g dGhlIHNhdmVkIHZhbHVlCisJICogaW4gc3VjaCBjYXNlcy4KKwkgKi8KKwlkdCA9IG5vdyAtIGlw cy0+bGFzdF90aW1lMTsKKwlpZiAoZHQgPD0gMTApCisJCXJldHVybiBpcHMtPmNoaXBzZXRfcG93 ZXI7CisKKwkvKiBGSVhNRTogaGFuZGxlIHBlci1jb3VudGVyIG92ZXJmbG93ICovCisJdG90YWwg PSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKTsKKwl0b3RhbCArPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIEREUkVDKTsKKwl0b3RhbCArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIENTSUVDKTsKKworCWRlbHRhID0gdG90YWwgLSBpcHMtPmxhc3RfY291bnQxOworCisJcmVz dWx0ID0gZGl2X3U2NChkaXZfdTY0KGlwcy0+bSAqIGRlbHRhLCBkdCkgKyBpcHMtPmMsIDEwKTsK KworCWlwcy0+bGFzdF9jb3VudDEgPSB0b3RhbDsKKwlpcHMtPmxhc3RfdGltZTEgPSBub3c7CisK KwlpcHMtPmNoaXBzZXRfcG93ZXIgPSByZXN1bHQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitz dGF0aWMgdW5zaWduZWQgbG9uZyBpcHNfbWNoX3ZhbChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUpCit7CisJdW5zaWduZWQgaW50IG0sIHgsIGI7CisJdTMyIHRzZnM7CisKKwl0c2ZzID0gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBUU0ZTKTsKKwl4ID0gaW50ZWxfdW5jb3JlX3JlYWQ4KHVu Y29yZSwgVFIxKTsKKworCWIgPSB0c2ZzICYgVFNGU19JTlRSX01BU0s7CisJbSA9ICh0c2ZzICYg VFNGU19TTE9QRV9NQVNLKSA+PiBUU0ZTX1NMT1BFX1NISUZUOworCisJcmV0dXJuIG0gKiB4IC8g MTI3IC0gYjsKK30KKworc3RhdGljIGludCBfcHh2aWRfdG9fdmQodTggcHh2aWQpCit7CisJaWYg KHB4dmlkID09IDApCisJCXJldHVybiAwOworCisJaWYgKHB4dmlkID49IDggJiYgcHh2aWQgPCAz MSkKKwkJcHh2aWQgPSAzMTsKKworCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsKK30KKworc3Rh dGljIHUzMiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTgg cHh2aWQpCit7CisJY29uc3QgaW50IHZkID0gX3B4dmlkX3RvX3ZkKHB4dmlkKTsKKworCWlmIChJ TlRFTF9JTkZPKGk5MTUpLT5pc19tb2JpbGUpCisJCXJldHVybiBtYXgodmQgLSAxMTI1LCAwKTsK KworCXJldHVybiB2ZDsKK30KKworc3RhdGljIHZvaWQgX19nZW41X2lwc191cGRhdGUoc3RydWN0 IGludGVsX2lwcyAqaXBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9CisJCXJw c190b191bmNvcmUoY29udGFpbmVyX29mKGlwcywgc3RydWN0IGludGVsX3JwcywgaXBzKSk7CisJ dTY0IG5vdywgZGVsdGEsIGR0OworCXUzMiBjb3VudDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo Jm1jaGRldl9sb2NrKTsKKworCW5vdyA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKwlkdCA9IG5vdyAt IGlwcy0+bGFzdF90aW1lMjsKKwlkb19kaXYoZHQsIE5TRUNfUEVSX01TRUMpOworCisJLyogRG9u J3QgZGl2aWRlIGJ5IDAgKi8KKwlpZiAoZHQgPD0gMTApCisJCXJldHVybjsKKworCWNvdW50ID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7CisJZGVsdGEgPSBjb3VudCAtIGlwcy0+ bGFzdF9jb3VudDI7CisKKwlpcHMtPmxhc3RfY291bnQyID0gY291bnQ7CisJaXBzLT5sYXN0X3Rp bWUyID0gbm93OworCisJLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KKwlpcHMtPmdmeF9w b3dlciA9IGRpdl91NjQoZGVsdGEgKiAxMTgxLCBkdCAqIDEwKTsKK30KKworc3RhdGljIHZvaWQg Z2VuNV9ycHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzcGluX2xvY2tfaXJx KCZtY2hkZXZfbG9jayk7CisJX19nZW41X2lwc191cGRhdGUoJnJwcy0+aXBzKTsKKwlzcGluX3Vu bG9ja19pcnEoJm1jaGRldl9sb2NrKTsKK30KKworc3RhdGljIGJvb2wgZ2VuNV9ycHNfc2V0KHN0 cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwl1MTYgcmd2c3djdGw7CisKKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZtY2hkZXZfbG9jayk7CisKKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFk MTYodW5jb3JlLCBNRU1TV0NUTCk7CisJaWYgKHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMpIHsK KwkJRFJNX0RFQlVHKCJncHUgYnVzeSwgUkNTIGNoYW5nZSByZWplY3RlZFxuIik7CisJCXJldHVy biBmYWxzZTsgLyogc3RpbGwgYnVzeSB3aXRoIGFub3RoZXIgY29tbWFuZCAqLworCX0KKworCXZh bCA9IC12YWw7CisKKwlyZ3Zzd2N0bCA9CisJCShNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExf Q01EX1NISUZUKSB8CisJCSh2YWwgPDwgTUVNQ1RMX0ZSRVFfU0hJRlQpIHwKKwkJTUVNQ1RMX1NG Q0FWTTsKKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7 CisJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOworCisJcmd2 c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7CisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBN RU1TV0NUTCwgcmd2c3djdGwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkKK3sKKwlpbnQgZGl2ID0gKHZpZGZyZXEg JiAweDNmMDAwMCkgPj4gMTY7CisJaW50IHBvc3QgPSAodmlkZnJlcSAmIDB4MzAwMCkgPj4gMTI7 CisJaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKKworCWlmICghcHJlKQorCQlyZXR1cm4gMDsK KworCXJldHVybiBkaXYgKiAxMzMzMzMgLyAocHJlIDw8IHBvc3QpOworfQorCitzdGF0aWMgdW5z aWduZWQgaW50IGluaXRfZW1vbihzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCit7CisJdTgg cHh3WzE2XTsKKwlpbnQgaTsKKworCS8qIERpc2FibGUgdG8gcHJvZ3JhbSAqLworCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIEVDUiwgMCk7CisJaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1 bmNvcmUsIEVDUik7CisKKwkvKiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2YXJpb3VzIGV2 ZW50cyAqLworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFNERVcsIDB4MTUwNDBkMDApOwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIENTSUVXMCwgMHgwMDdmMDAwMCk7CisJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcxLCAweDFlMjIwMDA0KTsKKwlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBDU0lFVzIsIDB4MDQwMDAwMDQpOworCisJZm9yIChpID0gMDsgaSA8IDU7 IGkrKykKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUEVXKGkpLCAwKTsKKwlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERVcoaSksIDAp OworCisJLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3IgZnJlcXVlbmN5 IHBvd2VyIGFkanVzdG1lbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl1MzIg cHh2aWRmcmVxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKGkpKTsKKwkJdW5z aWduZWQgaW50IGZyZXEgPSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKKwkJdW5zaWduZWQgaW50 IHZpZCA9CisJCQkocHh2aWRmcmVxICYgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NI SUZUOworCQl1bnNpZ25lZCBpbnQgdmFsOworCisJCXZhbCA9IHZpZCAqIHZpZCAqIGZyZXEgLyAx MDAwICogMjU1OworCQl2YWwgLz0gMTI3ICogMTI3ICogOTAwOworCisJCXB4d1tpXSA9IHZhbDsK Kwl9CisJLyogUmVuZGVyIHN0YW5kYnkgc3RhdGVzIGdldCAwIHdlaWdodCAqLworCXB4d1sxNF0g PSAwOworCXB4d1sxNV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBQWFcoaSksCisJCQkJICAgcHh3W2kgKiA0ICsgMF0gPDwg MjQgfAorCQkJCSAgIHB4d1tpICogNCArIDFdIDw8IDE2IHwKKwkJCQkgICBweHdbaSAqIDQgKyAy XSA8PCAgOCB8CisJCQkJICAgcHh3W2kgKiA0ICsgM10gPDwgIDApOworCX0KKworCS8qIEFkanVz dCBtYWdpYyByZWdzIHRvIG1hZ2ljIHZhbHVlcyAobW9yZSBleHBlcmltZW50YWwgcmVzdWx0cykg Ki8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBPR1cwLCAwKTsKKwlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBPR1cxLCAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzAs IDB4MDAwMDdmMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHMSwgMHgwMDAwMDAw ZSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUcyLCAweDAwMGUwMDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzMsIDB4NjgwMDAzMDApOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIEVHNCwgMHg0MjAwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgRUc1LCAweDAwMTQwMDMxKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzYsIDAp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNywgMCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgODsgaSsrKQorCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBQWFdMKGkpLCAwKTsKKwor CS8qIEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLworCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsIEVDUiwgMHg4MDAwMDAxOSk7CisKKwlyZXR1cm4gaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBMQ0ZVU0UwMikgJiBMQ0ZVU0VfSElWX01BU0s7Cit9CisKK3N0YXRpYyBib29sIGdlbjVf cnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXU4IGZzdGFydCwgdnN0YXJ0OworCXUz MiByZ3Ztb2RlY3RsOworCisJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJcmd2bW9k ZWN0bCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNTU9ERUNUTCk7CisKKwkvKiBFbmFi bGUgdGVtcCByZXBvcnRpbmcgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIFBNTUlT QywKKwkJCSAgICAgaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIFBNTUlTQykgfCBNQ1BQQ0Vf RU4pOworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgVFNDMSwKKwkJCSAgICAgaW50ZWxf dW5jb3JlX3JlYWQxNih1bmNvcmUsIFRTQzEpIHwgVFNFKTsKKworCS8qIDEwMG1zIFJDIGV2YWx1 YXRpb24gaW50ZXJ2YWxzICovCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNVUEVJLCAx MDAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDRE5FSSwgMTAwMDAwKTsKKwor CS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyByZXNwZWN0aXZlbHkg Ki8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNQVhBVkcsIDkwMDAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNSU5BVkcsIDgwMDAwKTsKKworCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIE1FTUlIWVNULCAxKTsKKworCS8qIFNldCB1cCBtaW4sIG1heCwgYW5k IGN1ciBmb3IgaW50ZXJydXB0IGhhbmRsaW5nICovCisJZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBN RU1NT0RFX0ZTVEFSVF9NQVNLKSA+PgorCQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKKworCXZzdGFy dCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0KSkgJgorCQkgIFBY VkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKworCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsCisJCQkgICBNRU1JTlRSRU4sCisJCQkgICBNRU1JTlRfQ1hfU1VQUl9FTiB8IE1F TUlOVF9FVkFMX0NIR19FTik7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBWSURTVEFS VCwgdnN0YXJ0KTsKKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgVklEU1RBUlQp OworCisJcmd2bW9kZWN0bCB8PSBNRU1NT0RFX1NXTU9ERV9FTjsKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBNRU1NT0RFQ1RMLCByZ3Ztb2RlY3RsKTsKKworCWlmICh3YWl0X2Zvcl9hdG9t aWMoKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKKwkJCSAgICAgTUVNQ1RM X0NNRF9TVFMpID09IDAsIDEwKSkKKwkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdl IHBlcmYgbW9kZVxuIik7CisJbWRlbGF5KDEpOworCisJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5j dXJfZnJlcSk7CisKKwlycHMtPmlwcy5sYXN0X2NvdW50MSA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgRE1JRUMpOworCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgRERSRUMpOworCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgQ1NJRUMpOworCXJwcy0+aXBzLmxhc3RfdGltZTEgPSBqaWZmaWVzX3RvX21z ZWNzKGppZmZpZXMpOworCisJcnBzLT5pcHMubGFzdF9jb3VudDIgPSBpbnRlbF91bmNvcmVfcmVh ZCh1bmNvcmUsIEdGWEVDKTsKKwlycHMtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0X3Jhd19u cygpOworCisJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisKKwlycHMtPmlwcy5jb3Jy ID0gaW5pdF9lbW9uKHVuY29yZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg Z2VuNV9ycHNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXUxNiByZ3Zzd2N0bDsKKwor CXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCXJndnN3Y3RsID0gaW50ZWxfdW5jb3Jl X3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKKworCS8qIEFjayBpbnRlcnJ1cHRzLCBkaXNhYmxl IEVGQyBpbnRlcnJ1cHQgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JTlRSRU4s CisJCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJFTikgJgorCQkJICAgfk1F TUlOVF9FVkFMX0NIR19FTik7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNU UywgTUVNSU5UX0VWQUxfQ0hHKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlFUiwK KwkJCSAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgREVJRVIpICYgfkRFX1BDVV9FVkVOVCk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJSVIsIERFX1BDVV9FVkVOVCk7CisJaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJTVIsCisJCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIERFSU1SKSB8IERFX1BDVV9FVkVOVCk7CisKKwkvKiBHbyBiYWNrIHRvIHRoZSBzdGFy dGluZyBmcmVxdWVuY3kgKi8KKwlnZW41X3Jwc19zZXQocnBzLCBycHMtPmlkbGVfZnJlcSk7CisJ bWRlbGF5KDEpOworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisJbWRlbGF5KDEpOworCisJc3Bpbl91 bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cit9CisKK3N0YXRpYyB1MzIgcnBzX2xpbWl0cyhzdHJ1 Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwl1MzIgbGltaXRzOworCisJLyoKKwkgKiBP bmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZl bCB0byBhdm9pZAorCSAqIGdldHRpbmcgbW9yZSBpbnRlcnJ1cHRzLCBvdGhlcndpc2UgbGVhdmUg dGhpcyBjbGVhci4gVGhpcyBwcmV2ZW50cyBhCisJICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21p bmcgb3V0IG9mIHJjNjogVGhlcmUncyBhIHRpbnkgd2luZG93IHdoZXJlCisJICogdGhlIGh3IHJ1 bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVmb3JlIHNlbGVjdGluZyB0aGUgZGVzaXJlZAorCSAq IGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhyZXNob2xkIGV4cGlyZXMgaW4gdGhhdCB3aW5kb3cg d2Ugd2lsbCBub3QKKwkgKiByZWNlaXZlIGEgZG93biBpbnRlcnJ1cHQuCisJICovCisJaWYgKElO VEVMX0dFTihycHNfdG9faTkxNShycHMpKSA+PSA5KSB7CisJCWxpbWl0cyA9IHJwcy0+bWF4X2Zy ZXFfc29mdGxpbWl0IDw8IDIzOworCQlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0 KQorCQkJbGltaXRzIHw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0IDw8IDE0OworCX0gZWxzZSB7 CisJCWxpbWl0cyA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0OworCQlpZiAodmFsIDw9 IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQkJbGltaXRzIHw9IHJwcy0+bWluX2ZyZXFfc29m dGxpbWl0IDw8IDE2OworCX0KKworCXJldHVybiBsaW1pdHM7Cit9CisKK3N0YXRpYyB2b2lkIHJw c19zZXRfcG93ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgbmV3X3Bvd2VyKQoreworCXN0 cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHRocmVzaG9s ZF91cCA9IDAsIHRocmVzaG9sZF9kb3duID0gMDsgLyogaW4gJSAqLworCXUzMiBlaV91cCA9IDAs IGVpX2Rvd24gPSAwOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnBzLT5wb3dlci5tdXRleCk7 CisKKwlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIubW9kZSkKKwkJcmV0dXJuOworCisJLyog Tm90ZSB0aGUgdW5pdHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4MG5zLiAqLwor CXN3aXRjaCAobmV3X3Bvd2VyKSB7CisJY2FzZSBMT1dfUE9XRVI6CisJCS8qIFVwY2xvY2sgaWYg bW9yZSB0aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLworCQllaV91cCA9IDE2MDAwOworCQl0aHJl c2hvbGRfdXAgPSA5NTsKKworCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDg1JSBidXN5IG92 ZXIgMzJtcyAqLworCQllaV9kb3duID0gMzIwMDA7CisJCXRocmVzaG9sZF9kb3duID0gODU7CisJ CWJyZWFrOworCisJY2FzZSBCRVRXRUVOOgorCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5MCUg YnVzeSBvdmVyIDEzbXMgKi8KKwkJZWlfdXAgPSAxMzAwMDsKKwkJdGhyZXNob2xkX3VwID0gOTA7 CisKKwkJLyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA3NSUgYnVzeSBvdmVyIDMybXMgKi8KKwkJ ZWlfZG93biA9IDMyMDAwOworCQl0aHJlc2hvbGRfZG93biA9IDc1OworCQlicmVhazsKKworCWNh c2UgSElHSF9QT1dFUjoKKwkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gODUlIGJ1c3kgb3ZlciAx MG1zICovCisJCWVpX3VwID0gMTAwMDA7CisJCXRocmVzaG9sZF91cCA9IDg1OworCisJCS8qIERv d25jbG9jayBpZiBsZXNzIHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCisJCWVpX2Rvd24gPSAz MjAwMDsKKwkJdGhyZXNob2xkX2Rvd24gPSA2MDsKKwkJYnJlYWs7CisJfQorCisJLyogV2hlbiBi eXQgY2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMKKwkgKiBzdyBm cmVxIGFkanVzdG1lbnRzLCB0aGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBsaWZ0ZWQuCisJICovCisJ aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCisJCWdvdG8gc2tpcF9od193cml0ZTsKKworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfRUksCisJCQkgICBHVF9JTlRFUlZBTF9G Uk9NX1VTKGk5MTUsIGVpX3VwKSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9S UF9VUF9USFJFU0hPTEQsCisJCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGk5MTUsCisJCQkJCSAg ICAgICBlaV91cCAqIHRocmVzaG9sZF91cCAvIDEwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLAorCQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1 LCBlaV9kb3duKSk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9ET1dOX1RI UkVTSE9MRCwKKwkJCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwKKwkJCQkJICAgICAgIGVp X2Rvd24gKiB0aHJlc2hvbGRfZG93biAvIDEwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgR0VONl9SUF9DT05UUk9MLAorCQkJICAgKElOVEVMX0dFTihpOTE1KSA+IDkgPyAwIDog R0VONl9SUF9NRURJQV9UVVJCTykgfAorCQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9E RSB8CisJCQkgICBHRU42X1JQX01FRElBX0lTX0dGWCB8CisJCQkgICBHRU42X1JQX0VOQUJMRSB8 CisJCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKKwkJCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FW Ryk7CisKK3NraXBfaHdfd3JpdGU6CisJcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOworCXJw cy0+cG93ZXIudXBfdGhyZXNob2xkID0gdGhyZXNob2xkX3VwOworCXJwcy0+cG93ZXIuZG93bl90 aHJlc2hvbGQgPSB0aHJlc2hvbGRfZG93bjsKK30KKworc3RhdGljIHZvaWQgZ2VuNl9ycHNfc2V0 X3RocmVzaG9sZHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJaW50IG5ld19w b3dlcjsKKworCW5ld19wb3dlciA9IHJwcy0+cG93ZXIubW9kZTsKKwlzd2l0Y2ggKHJwcy0+cG93 ZXIubW9kZSkgeworCWNhc2UgTE9XX1BPV0VSOgorCQlpZiAodmFsID4gcnBzLT5lZmZpY2llbnRf ZnJlcSArIDEgJiYKKwkJICAgIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBC RVRXRUVOOworCQlicmVhazsKKworCWNhc2UgQkVUV0VFTjoKKwkJaWYgKHZhbCA8PSBycHMtPmVm ZmljaWVudF9mcmVxICYmCisJCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQorCQkJbmV3X3Bvd2Vy ID0gTE9XX1BPV0VSOworCQllbHNlIGlmICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgorCQkJIHZh bCA+IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOworCQlicmVhazsK KworCWNhc2UgSElHSF9QT1dFUjoKKwkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVxICsgcnBzLT5y cDBfZnJlcSkgPj4gMSAmJgorCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19wb3dl ciA9IEJFVFdFRU47CisJCWJyZWFrOworCX0KKwkvKiBNYXgvbWluIGJpbnMgYXJlIHNwZWNpYWwg Ki8KKwlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQorCQluZXdfcG93ZXIgPSBM T1dfUE9XRVI7CisJaWYgKHZhbCA+PSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkKKwkJbmV3X3Bv d2VyID0gSElHSF9QT1dFUjsKKworCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworCWlm IChycHMtPnBvd2VyLmludGVyYWN0aXZlKQorCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOworCXJw c19zZXRfcG93ZXIocnBzLCBuZXdfcG93ZXIpOworCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5t dXRleCk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGludGVs X3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKQoreworCWlmICghcnBzLT5lbmFibGVkKQorCQly ZXR1cm47CisKKwltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKKwlpZiAoaW50ZXJhY3Rp dmUpIHsKKwkJaWYgKCFycHMtPnBvd2VyLmludGVyYWN0aXZlKysgJiYgcnBzLT5hY3RpdmUpCisJ CQlycHNfc2V0X3Bvd2VyKHJwcywgSElHSF9QT1dFUik7CisJfSBlbHNlIHsKKwkJR0VNX0JVR19P TighcnBzLT5wb3dlci5pbnRlcmFjdGl2ZSk7CisJCXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUtLTsK Kwl9CisJbXV0ZXhfdW5sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKK30KKworc3RhdGljIGludCBn ZW42X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgc3dyZXE7CisKKwlpZiAo SU5URUxfR0VOKGk5MTUpID49IDkpCisJCXN3cmVxID0gR0VOOV9GUkVRVUVOQ1kodmFsKTsKKwll bHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8IElTX0JST0FEV0VMTChpOTE1KSkKKwkJc3dyZXEg PSBIU1dfRlJFUVVFTkNZKHZhbCk7CisJZWxzZQorCQlzd3JlcSA9IChHRU42X0ZSRVFVRU5DWSh2 YWwpIHwKKwkJCSBHRU42X09GRlNFVCgwKSB8CisJCQkgR0VONl9BR0dSRVNTSVZFX1RVUkJPKTsK KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1JQTlNXUkVRLCBzd3JlcSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bHZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7CisJaW50IGVycjsKKworCXZsdl9wdW5pdF9nZXQoaTkxNSk7CisJZXJyID0gdmx2 X3B1bml0X3dyaXRlKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9SRVEsIHZhbCk7CisJdmx2X3B1 bml0X3B1dChpOTE1KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnBzX3NldChz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJaW50IGVycjsKKworCWlmIChJTlRFTF9HRU4o aTkxNSkgPCA2KQorCQlyZXR1cm4gMDsKKworCWlmICh2YWwgPT0gcnBzLT5sYXN0X2ZyZXEpCisJ CXJldHVybiAwOworCisJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhp OTE1KSkKKwkJZXJyID0gdmx2X3Jwc19zZXQocnBzLCB2YWwpOworCWVsc2UKKwkJZXJyID0gZ2Vu Nl9ycHNfc2V0KHJwcywgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZ2VuNl9y cHNfc2V0X3RocmVzaG9sZHMocnBzLCB2YWwpOworCXJwcy0+bGFzdF9mcmVxID0gdmFsOworCisJ cmV0dXJuIDA7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX3VucGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCit7CisJdTggZnJlcTsKKworCWlmICghcnBzLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkv KgorCSAqIFVzZSB0aGUgdXNlcidzIGRlc2lyZWQgZnJlcXVlbmN5IGFzIGEgZ3VpZGUsIGJ1dCBm b3IgYmV0dGVyCisJICogcGVyZm9ybWFuY2UsIGp1bXAgZGlyZWN0bHkgdG8gUlBlIGFzIG91ciBz dGFydGluZyBmcmVxdWVuY3kuCisJICovCisJbXV0ZXhfbG9jaygmcnBzLT5sb2NrKTsKKwlycHMt PmFjdGl2ZSA9IHRydWU7CisJZnJlcSA9IG1heChycHMtPmN1cl9mcmVxLCBycHMtPmVmZmljaWVu dF9mcmVxKSwKKwlmcmVxID0gY2xhbXAoZnJlcSwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsKKwlpbnRlbF9ycHNfc2V0KHJwcywgZnJlcSk7CisJcnBz LT5sYXN0X2FkaiA9IDA7CisJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOworCisJaWYgKElOVEVM X0dFTihycHNfdG9faTkxNShycHMpKSA+PSA2KQorCQlycHNfZW5hYmxlX2ludGVycnVwdHMocnBz KTsKKworCWlmIChJU19HRU4ocnBzX3RvX2k5MTUocnBzKSwgNSkpCisJCWdlbjVfcnBzX3VwZGF0 ZShycHMpOworfQorCit2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisK KwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+ PSA2KQorCQlycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHJwcyk7CisKKwlycHMtPmFjdGl2ZSA9IGZh bHNlOworCWlmIChycHMtPmxhc3RfZnJlcSA8PSBycHMtPmlkbGVfZnJlcSkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBUaGUgcHVuaXQgZGVsYXlzIHRoZSB3cml0ZSBvZiB0aGUgZnJlcXVlbmN5IGFu ZCB2b2x0YWdlIHVudGlsIGl0CisJICogZGV0ZXJtaW5lcyB0aGUgR1BVIGlzIGF3YWtlLiBEdXJp bmcgbm9ybWFsIHVzYWdlIHdlIGRvbid0IHdhbnQgdG8KKwkgKiB3YXN0ZSBwb3dlciBjaGFuZ2lu ZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMgc2xlZXBpbmcgKHJjNikuCisJICogSG93ZXZl ciwgdGhlIEdQVSBhbmQgZHJpdmVyIGlzIG5vdyBpZGxlIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBk ZWxheQorCSAqIHN3aXRjaGluZyB0byBtaW5pbXVtIHZvbHRhZ2UgKHJlZHVjaW5nIHBvd2VyIHdo aWxzdCBpZGxlKSBhcyB3ZSBkbworCSAqIG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5l YXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZsdXNoIHRoZQorCSAqIGNoYW5nZSBieSB3YWtpbmcgdGhl IGRldmljZS4KKwkgKgorCSAqIFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwg KGVpdGhlciB3b3VsZCBkbyB0byB0cmljayB0aGUKKwkgKiBwdW5pdCBpbnRvIGNvbW1pdHRpbmcg dGhlIHZvbHRhZ2UgY2hhbmdlKSBhcyB0aGF0IHRha2VzIGEgbG90IGxlc3MKKwkgKiBwb3dlciB0 aGFuIHRoZSByZW5kZXIgcG93ZXJ3ZWxsLgorCSAqLworCWludGVsX3VuY29yZV9mb3JjZXdha2Vf Z2V0KHJwc190b191bmNvcmUocnBzKSwgRk9SQ0VXQUtFX01FRElBKTsKKwlycHNfc2V0KHJwcywg cnBzLT5pZGxlX2ZyZXEpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHJwc190b191bmNv cmUocnBzKSwgRk9SQ0VXQUtFX01FRElBKTsKK30KKwordm9pZCBpbnRlbF9ycHNfYm9vc3Qoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJnJxLT5l bmdpbmUtPmd0LT5ycHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpOTE1X3JlcXVl c3Rfc2lnbmFsZWQocnEpIHx8ICFycHMtPmFjdGl2ZSkKKwkJcmV0dXJuOworCisJLyogU2VyaWFs aXplcyB3aXRoIGk5MTVfcmVxdWVzdF9yZXRpcmUoKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZy cS0+bG9jaywgZmxhZ3MpOworCWlmICghaTkxNV9yZXF1ZXN0X2hhc193YWl0Ym9vc3QocnEpICYm CisJICAgICFkbWFfZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZycS0+ZmVuY2UpKSB7CisJCXJx LT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NUOworCisJCWlmICghYXRvbWljX2ZldGNo X2luYygmcnBzLT5udW1fd2FpdGVycykgJiYKKwkJICAgIFJFQURfT05DRShycHMtPmN1cl9mcmVx KSA8IHJwcy0+Ym9vc3RfZnJlcSkKKwkJCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7CisKKwkJ YXRvbWljX2luYygmcnBzLT5ib29zdHMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZy cS0+bG9jaywgZmxhZ3MpOworfQorCitpbnQgaW50ZWxfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMsIHU4IHZhbCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnJwcy0+bG9jayk7CisJR0VNX0JVR19PTih2YWwgPiBycHMtPm1heF9mcmVxKTsKKwlHRU1fQlVH X09OKHZhbCA8IHJwcy0+bWluX2ZyZXEpOworCisJaWYgKHJwcy0+YWN0aXZlKSB7CisJCWVyciA9 IHJwc19zZXQocnBzLCB2YWwpOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBjb250aW51ZSB0 byBnZXQgaW50ZXJydXB0cworCQkgKiB1bnRpbCB3ZSBoaXQgdGhlIG1pbmltdW0gb3IgbWF4aW11 bSBmcmVxdWVuY2llcy4KKwkJICovCisJCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBzKSkg Pj0gNikgeworCQkJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShy cHMpOworCisJCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU42X1JQX0lOVEVSUlVQVF9M SU1JVFMsCisJCQkJCSAgIHJwc19saW1pdHMocnBzLCB2YWwpKTsKKworCQkJaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwgR0VONl9QTUlOVFJNU0ssCisJCQkJCSAgIHJwc19wbV9tYXNrKHJwcywg dmFsKSk7CisJCX0KKwl9CisKKwlpZiAoZXJyID09IDApCisJCXJwcy0+Y3VyX2ZyZXEgPSB2YWw7 CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBnZW42X3Jwc19pbml0KHN0cnVjdCBp bnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOworCisJLyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHog Ki8KKworCS8qIHN0YXRpYyB2YWx1ZXMgZnJvbSBIVzogUlAwID4gUlAxID4gUlBuIChtaW5fZnJl cSkgKi8KKwlpZiAoSVNfR0VOOV9MUChpOTE1KSkgeworCQl1MzIgcnBfc3RhdGVfY2FwID0gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBCWFRfUlBfU1RBVEVfQ0FQKTsKKworCQlycHMtPnJwMF9m cmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOworCQlycHMtPnJwMV9mcmVxID0gKHJw X3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2Nh cCA+PiAgMCkgJiAweGZmOworCX0gZWxzZSB7CisJCXUzMiBycF9zdGF0ZV9jYXAgPSBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjZfUlBfU1RBVEVfQ0FQKTsKKworCQlycHMtPnJwMF9mcmVx ID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAweGZmOworCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0 YXRlX2NhcCA+PiAgOCkgJiAweGZmOworCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+ PiAxNikgJiAweGZmOworCX0KKworCS8qIGh3X21heCA9IFJQMCB1bnRpbCB3ZSBjaGVjayBmb3Ig b3ZlcmNsb2NraW5nICovCisJcnBzLT5tYXhfZnJlcSA9IHJwcy0+cnAwX2ZyZXE7CisKKwlycHMt PmVmZmljaWVudF9mcmVxID0gcnBzLT5ycDFfZnJlcTsKKwlpZiAoSVNfSEFTV0VMTChpOTE1KSB8 fCBJU19CUk9BRFdFTEwoaTkxNSkgfHwKKwkgICAgSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9H RU4oaTkxNSkgPj0gMTApIHsKKwkJdTMyIGRkY2Nfc3RhdHVzID0gMDsKKworCQlpZiAoc2FuZHli cmlkZ2VfcGNvZGVfcmVhZChpOTE1LAorCQkJCQkgICBIU1dfUENPREVfRFlOQU1JQ19EVVRZX0NZ Q0xFX0NPTlRST0wsCisJCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKKwkJCXJwcy0+ ZWZmaWNpZW50X2ZyZXEgPQorCQkJCWNsYW1wX3QodTgsCisJCQkJCShkZGNjX3N0YXR1cyA+PiA4 KSAmIDB4ZmYsCisJCQkJCXJwcy0+bWluX2ZyZXEsCisJCQkJCXJwcy0+bWF4X2ZyZXEpOworCX0K KworCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1KSA+PSAxMCkgeworCQkv KiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42NiBNSFogdW5pdHMsIHdoaWNoIGlz CisJCSAqIHRoZSBuYXR1cmFsIGhhcmR3YXJlIHVuaXQgZm9yIFNLTAorCQkgKi8KKwkJcnBzLT5y cDBfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPnJwMV9mcmVxICo9IEdFTjlfRlJF UV9TQ0FMRVI7CisJCXJwcy0+bWluX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKKwkJcnBzLT5t YXhfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPmVmZmljaWVudF9mcmVxICo9IEdF TjlfRlJFUV9TQ0FMRVI7CisJfQorfQorCitzdGF0aWMgYm9vbCBycHNfcmVzZXQoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCS8qIGZvcmNlIGEgcmVzZXQgKi8KKwlycHMtPnBvd2VyLm1vZGUg PSAtMTsKKwlycHMtPmxhc3RfZnJlcSA9IC0xOworCisJaWYgKHJwc19zZXQocnBzLCBycHMtPm1p bl9mcmVxKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcnBzLT5jdXJfZnJlcSA9IHJwcy0+ bWluX2ZyZXE7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qIFNlZSB0aGUgR2VuOV9HVF9QTV9Qcm9n cmFtbWluZ19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLworc3RhdGljIGJvb2wgZ2VuOV9ycHNf ZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCisJLyogUHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNo b2xkcyBmb3IgUlBTICovCisJaWYgKElTX0dFTihpOTE1LCA5KSkKKwkJaW50ZWxfdW5jb3JlX3dy aXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19GUkVRLAorCQkJCSAgICAgIEdFTjlfRlJFUVVF TkNZKHJwcy0+cnAxX2ZyZXEpKTsKKworCS8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKwlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwKKwkJCSAgICAgIEdU X0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgMTAwMDAwMCkpOworCisJaW50ZWxfdW5jb3JlX3dyaXRl X2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMHhhKTsKKworCXJldHVybiBycHNf cmVzZXQocnBzKTsKK30KKworc3RhdGljIGJvb2wgZ2VuOF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7CisKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1ZJREVP X0ZSRVEsCisJCQkgICAgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKKworCS8qIE5C OiBEb2NzIHNheSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVudCAqLwor CWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULAorCQkJ ICAgICAgMTAwMDAwMDAwIC8gMTI4KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLworCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOworCisJ cmV0dXJuIHJwc19yZXNldChycHMpOworfQorCitzdGF0aWMgYm9vbCBnZW42X3Jwc19lbmFibGUo c3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKKworCS8qIFBvd2VyIGRvd24gaWYgY29tcGxldGVseSBpZGxl IGZvciBvdmVyIDUwbXMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X0RPV05fVElNRU9VVCwgNTAwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKKworCXJldHVybiBycHNfcmVzZXQocnBzKTsKK30K Kworc3RhdGljIGludCBjaHZfcnBzX21heF9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMy IHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUFYX0FUX1ZNQVhf RlVTRSk7CisKKwlzd2l0Y2ggKFJVTlRJTUVfSU5GTyhpOTE1KS0+c3NldS5ldV90b3RhbCkgewor CWNhc2UgODoKKwkJLyogKDIgKiA0KSBjb25maWcgKi8KKwkJdmFsID4+PSBGQl9HRlhfRk1BWF9B VF9WTUFYXzJTUzRFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwljYXNlIDEyOgorCQkvKiAoMiAq IDYpIGNvbmZpZyAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTNkVVX0ZVU0Vf U0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCS8qICgyICogOCkgY29uZmlnICovCisJZGVm YXVsdDoKKwkJLyogU2V0dGluZyAoMiAqIDgpIE1pbiBSUDAgZm9yIGFueSBvdGhlciBjb21iaW5h dGlvbiAqLworCQl2YWwgPj49IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQ7 CisJCWJyZWFrOworCX0KKworCXJldHVybiB2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0s7Cit9 CisKK3N0YXRpYyBpbnQgY2h2X3Jwc19ycGVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUz MiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9HUFVfRFVUWUNZQ0xF X1JFRyk7CisJdmFsID4+PSBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUOworCisJ cmV0dXJuIHZhbCAmIFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKK30KKworc3Rh dGljIGludCBjaHZfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7 CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0Up OworCisJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsKK30KKworc3RhdGljIHUz MiBjaHZfcnBzX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZh bCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7CisJdmFs ID4+PSBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0VfU0hJRlQ7CisKKwlyZXR1cm4gdmFsICYgRkJf R0ZYX0ZSRVFfRlVTRV9NQVNLOworfQorCitzdGF0aWMgYm9vbCBjaHZfcnBzX2VuYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBz X3RvX3VuY29yZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3Rv X2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJLyogMTogUHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhy ZXNob2xkcyBmb3IgUlBTKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X0RPV05fVElNRU9VVCwgMTAwMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwg R0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5j b3JlLCBHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOworCWludGVsX3VuY29yZV93cml0 ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7CisKKwlpbnRlbF91bmNvcmVfd3Jp dGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7CisKKwkvKiAyOiBFbmFi bGUgUlBTICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9DT05UUk9M LAorCQkJICAgICAgR0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8CisJCQkgICAgICBHRU42 X1JQX01FRElBX0lTX0dGWCB8CisJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8CisJCQkgICAgICBH RU42X1JQX1VQX0JVU1lfQVZHIHwKKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7CisK KwkvKiBTZXR0aW5nIEZpeGVkIEJpYXMgKi8KKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCisJdmFs ID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZfQklBU19DUFVfNTBfU09D XzUwOworCXZsdl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwp OworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7 CisKKwl2bHZfcHVuaXRfcHV0KGk5MTUpOworCisJLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlz IHVzZWQgKi8KKwlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBl bmFibGVkXG4iKTsKKworCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHll c25vKHZhbCAmIEdQTExFTkFCTEUpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAw eCUwOHhcbiIsIHZhbCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyBp bnQgdmx2X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsLCBycDE7 CisKKwl2YWwgPSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwor CisJcnAxID0gdmFsICYgRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9NQVNLOworCXJwMSA+ Pj0gRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKKworCXJldHVybiBycDE7Cit9 CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19tYXhfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUz MiB2YWwsIHJwMDsKKworCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJfR0ZYX0ZS RVFfRlVTRSk7CisKKwlycDAgPSAodmFsICYgRkJfR0ZYX01BWF9GUkVRX0ZVU0VfTUFTSykgPj4g RkJfR0ZYX01BWF9GUkVRX0ZVU0VfU0hJRlQ7CisJLyogQ2xhbXAgdG8gbWF4ICovCisJcnAwID0g bWluX3QodTMyLCBycDAsIDB4ZWEpOworCisJcmV0dXJuIHJwMDsKK30KKworc3RhdGljIGludCB2 bHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbCwgcnBlOworCisJ dmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKKwly cGUgPSAodmFsICYgRkJfRk1BWF9WTUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZS RVFfTE9fU0hJRlQ7CisJdmFsID0gdmx2X25jX3JlYWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRk1B WF9GVVNFX0hJKTsKKwlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9GUkVRX0hJX01BU0spIDw8 IDU7CisKKwlyZXR1cm4gcnBlOworfQorCitzdGF0aWMgaW50IHZsdl9ycHNfbWluX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkx NSwgUFVOSVRfUkVHX0dQVV9MRk0pICYgMHhmZjsKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUg QllUIFB1bml0IEdQVSB0dXJibyBIQVMgMS4xLjYuMyB0aGUgbWluaW11bSB2YWx1ZQorCSAqIGZv ciB0aGUgbWluaW11bSBmcmVxdWVuY3kgaW4gR1BMTCBtb2RlIGlzIDB4YzEuIENvbnRyYXJ5IHRv IHRoaXMgb24KKwkgKiBhIEJZVC1NIEIwIHRoZSBhYm92ZSByZWdpc3RlciBjb250YWlucyAweGJm LiBNb3Jlb3ZlciB3aGVuIHNldHRpbmcKKwkgKiBhIGZyZXF1ZW5jeSBQdW5pdCB3aWxsIG5vdCBh bGxvdyB2YWx1ZXMgYmVsb3cgMHhjMC4gQ2xhbXAgaXQgMHhjMAorCSAqIHRvIG1ha2Ugc3VyZSBp dCBtYXRjaGVzIHdoYXQgUHVuaXQgYWNjZXB0cy4KKwkgKi8KKwlyZXR1cm4gbWF4X3QodTMyLCB2 YWwsIDB4YzApOworfQorCitzdGF0aWMgYm9vbCB2bHZfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBz KTsKKwl1MzIgdmFsOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9E T1dOX1RJTUVPVVQsIDEwMDAwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29y ZSwgR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX1VQX0VJLCA2NjAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3 KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLCAzNTAwMDApOworCisJaW50ZWxfdW5jb3JlX3dyaXRl X2Z3KHVuY29yZSwgR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOworCisJaW50ZWxfdW5jb3Jl X3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9DT05UUk9MLAorCQkJICAgICAgR0VONl9SUF9NRURJ QV9UVVJCTyB8CisJCQkgICAgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKKwkJCSAg ICAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKKwkJCSAgICAgIEdFTjZfUlBfRU5BQkxFIHwKKwkJ CSAgICAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAorCQkJICAgICAgR0VONl9SUF9ET1dOX0lETEVf Q09OVCk7CisKKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCisJLyogU2V0dGluZyBGaXhlZCBCaWFz ICovCisJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBWTFZfQklBU19D UFVfMTI1X1NPQ184NzU7CisJdmx2X3B1bml0X3dyaXRlKGk5MTUsIFZMVl9UVVJCT19TT0NfT1ZF UlJJREUsIHZhbCk7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9SRUdfR1BV X0ZSRVFfU1RTKTsKKworCXZsdl9wdW5pdF9wdXQoaTkxNSk7CisKKwkvKiBSUFMgY29kZSBhc3N1 bWVzIEdQTEwgaXMgdXNlZCAqLworCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOworCisJRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVk PyAlc1xuIiwgeWVzbm8odmFsICYgR1BMTEVOQUJMRSkpOworCURSTV9ERUJVR19EUklWRVIoIkdQ VSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKKworCXJldHVybiBycHNfcmVzZXQocnBzKTsKK30K Kworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pcHNfZ2Z4X3ZhbChzdHJ1Y3QgaW50ZWxfaXBzICpp cHMpCit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKGlwcywgdHlwZW9m KCpycHMpLCBpcHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNv cmUocnBzKTsKKwl1bnNpZ25lZCBsb25nIHQsIGNvcnIsIHN0YXRlMSwgY29ycjIsIHN0YXRlMjsK Kwl1MzIgcHh2aWQsIGV4dF92OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2sp OworCisJcHh2aWQgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEocnBzLT5jdXJf ZnJlcSkpOworCXB4dmlkID0gKHB4dmlkID4+IDI0KSAmIDB4N2Y7CisJZXh0X3YgPSBwdmlkX3Rv X2V4dHZpZChycHNfdG9faTkxNShycHMpLCBweHZpZCk7CisKKwlzdGF0ZTEgPSBleHRfdjsKKwor CS8qIFJldmVsIGluIHRoZSBlbXBpcmljYWxseSBkZXJpdmVkIGNvbnN0YW50cyAqLworCisJLyog Q29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8KKwl0ID0gaXBzX21jaF92YWwo dW5jb3JlKTsKKwlpZiAodCA+IDgwKQorCQljb3JyID0gdCAqIDIzNDkgKyAxMzU5NDA7CisJZWxz ZSBpZiAodCA+PSA1MCkKKwkJY29yciA9IHQgKiA5NjQgKyAyOTMxNzsKKwllbHNlIC8qIDwgNTAg Ki8KKwkJY29yciA9IHQgKiAzMDEgKyAxMDA0OworCisJY29yciA9IGNvcnIgKiAxNTAxNDIgKiBz dGF0ZTEgLyAxMDAwMCAtIDc4NjQyOworCWNvcnIgLz0gMTAwMDAwOworCWNvcnIyID0gY29yciAq IGlwcy0+Y29ycjsKKworCXN0YXRlMiA9IGNvcnIyICogc3RhdGUxIC8gMTAwMDA7CisJc3RhdGUy IC89IDEwMDsgLyogY29udmVydCB0byBtVyAqLworCisJX19nZW41X2lwc191cGRhdGUoaXBzKTsK KworCXJldHVybiBpcHMtPmdmeF9wb3dlciArIHN0YXRlMjsKK30KKwordm9pZCBpbnRlbF9ycHNf ZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gcnBzX3RvX3VuY29yZShycHMpOworCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQodW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKKwlpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJcnBzLT5l bmFibGVkID0gY2h2X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5 MTUpKQorCQlycHMtPmVuYWJsZWQgPSB2bHZfcnBzX2VuYWJsZShycHMpOworCWVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA5KQorCQlycHMtPmVuYWJsZWQgPSBnZW45X3Jwc19lbmFibGUocnBz KTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcnBzLT5lbmFibGVkID0gZ2Vu OF9ycHNfZW5hYmxlKHJwcyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCisJCXJw cy0+ZW5hYmxlZCA9IGdlbjZfcnBzX2VuYWJsZShycHMpOworCWVsc2UgaWYgKElTX0lST05MQUtF X00oaTkxNSkpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjVfcnBzX2VuYWJsZShycHMpOworCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CisJaWYgKCFycHMt PmVuYWJsZWQpCisJCXJldHVybjsKKworCVdBUk5fT04ocnBzLT5tYXhfZnJlcSA8IHJwcy0+bWlu X2ZyZXEpOworCVdBUk5fT04ocnBzLT5pZGxlX2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKKworCVdB Uk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA8IHJwcy0+bWluX2ZyZXEpOworCVdBUk5fT04ocnBz LT5lZmZpY2llbnRfZnJlcSA+IHJwcy0+bWF4X2ZyZXEpOworfQorCitzdGF0aWMgdm9pZCBnZW42 X3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlpbnRlbF91bmNvcmVfd3Jp dGUocnBzX3RvX3VuY29yZShycHMpLCBHRU42X1JQX0NPTlRST0wsIDApOworfQorCit2b2lkIGlu dGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlycHMtPmVuYWJsZWQgPSBm YWxzZTsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJZ2VuNl9ycHNfZGlzYWJsZShy cHMpOworCWVsc2UgaWYgKElTX0lST05MQUtFX00oaTkxNSkpCisJCWdlbjVfcnBzX2Rpc2FibGUo cnBzKTsKK30KKworc3RhdGljIGludCBieXRfZ3B1X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBz LCBpbnQgdmFsKQoreworCS8qCisJICogTiA9IHZhbCAtIDB4YjcKKwkgKiBTbG93ID0gRmFzdCA9 IEdQTEwgcmVmICogTgorCSAqLworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxf cmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOworfQorCitzdGF0aWMgaW50IGJ5dF9mcmVx X29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCit7CisJcmV0dXJuIERJVl9S T1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkgKyAweGI3OworfQor CitzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwp Cit7CisJLyoKKwkgKiBOID0gdmFsIC8gMgorCSAqIENVIChzbG93KSA9IENVMnggKGZhc3QpIC8g MiA9IEdQTEwgcmVmICogTiAvIDIKKwkgKi8KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBz LT5ncGxsX3JlZl9mcmVxICogdmFsLCAyICogMiAqIDEwMDApOworfQorCitzdGF0aWMgaW50IGNo dl9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCit7CisJLyogQ0hW IG5lZWRzIGV2ZW4gdmFsdWVzICovCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDIgKiAxMDAw ICogdmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICogMjsKK30KKworaW50IGludGVsX2dwdV9mcmVx KHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49 IDkpCisJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQ TElFUiwKKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVco aTkxNSkpCisJCXJldHVybiBjaHZfZ3B1X2ZyZXEocnBzLCB2YWwpOworCWVsc2UgaWYgKElTX1ZB TExFWVZJRVcoaTkxNSkpCisJCXJldHVybiBieXRfZ3B1X2ZyZXEocnBzLCB2YWwpOworCWVsc2UK KwkJcmV0dXJuIHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOworfQorCitpbnQgaW50ZWxf ZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOSkKKwkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJF UV9TQ0FMRVIsCisJCQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7CisJZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGNodl9mcmVxX29wY29kZShycHMsIHZhbCk7CisJ ZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJcmV0dXJuIGJ5dF9mcmVxX29wY29kZShy cHMsIHZhbCk7CisJZWxzZQorCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVR VUVOQ1lfTVVMVElQTElFUik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVmX2Zy ZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKworCXJwcy0+Z3BsbF9yZWZfZnJlcSA9CisJCXZsdl9n ZXRfY2NrX2Nsb2NrKGk5MTUsICJHUExMIHJlZiIsCisJCQkJICBDQ0tfR1BMTF9DTE9DS19DT05U Uk9MLAorCQkJCSAgaTkxNS0+Y3pjbGtfZnJlcSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHUExM IHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsIHJwcy0+Z3BsbF9yZWZfZnJlcSk7Cit9CisKK3N0 YXRpYyB2b2lkIHZsdl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisK Kwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAorCQkJ QklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7CisKKwl2bHZf aW5pdF9ncGxsX3JlZl9mcmVxKHJwcyk7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQ VU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKKwlzd2l0Y2ggKCh2YWwgPj4gNikgJiAzKSB7CisJY2Fz ZSAwOgorCWNhc2UgMToKKwkJaTkxNS0+bWVtX2ZyZXEgPSA4MDA7CisJCWJyZWFrOworCWNhc2Ug MjoKKwkJaTkxNS0+bWVtX2ZyZXEgPSAxMDY2OworCQlicmVhazsKKwljYXNlIDM6CisJCWk5MTUt Pm1lbV9mcmVxID0gMTMzMzsKKwkJYnJlYWs7CisJfQorCURSTV9ERUJVR19EUklWRVIoIkREUiBz cGVlZDogJWQgTUh6XG4iLCBpOTE1LT5tZW1fZnJlcSk7CisKKwlycHMtPm1heF9mcmVxID0gdmx2 X3Jwc19tYXhfZnJlcShycHMpOworCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1heF9mcmVxOworCURS TV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSwKKwkJCSBycHMtPm1heF9mcmVxKTsKKworCXJw cy0+ZWZmaWNpZW50X2ZyZXEgPSB2bHZfcnBzX3JwZV9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RS SVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShy cHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAorCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOworCisJ cnBzLT5ycDFfZnJlcSA9IHZsdl9ycHNfZ3Vhcl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZF UigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJIGludGVsX2dw dV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSksCisJCQkgcnBzLT5ycDFfZnJlcSk7CisKKwlycHMt Pm1pbl9mcmVxID0gdmx2X3Jwc19taW5fZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIm1p biBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt Pm1pbl9mcmVxKSwKKwkJCSBycHMtPm1pbl9mcmVxKTsKKworCXZsdl9pb3NmX3NiX3B1dChpOTE1 LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwK KwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKK30KKworc3RhdGljIHZvaWQgY2h2X3Jwc19pbml0 KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCXZsdl9pb3NmX3NiX2dldChpOTE1 LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwK KwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKKworCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEocnBz KTsKKworCXZhbCA9IHZsdl9jY2tfcmVhZChpOTE1LCBDQ0tfRlVTRV9SRUcpOworCisJc3dpdGNo ICgodmFsID4+IDIpICYgMHg3KSB7CisJY2FzZSAzOgorCQlpOTE1LT5tZW1fZnJlcSA9IDIwMDA7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWk5MTUtPm1lbV9mcmVxID0gMTYwMDsKKwkJYnJlYWs7 CisJfQorCURSTV9ERUJVR19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6XG4iLCBpOTE1LT5tZW1f ZnJlcSk7CisKKwlycHMtPm1heF9mcmVxID0gY2h2X3Jwc19tYXhfZnJlcShycHMpOworCXJwcy0+ cnAwX2ZyZXEgPSBycHMtPm1heF9mcmVxOworCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJl cTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVx KSwKKwkJCSBycHMtPm1heF9mcmVxKTsKKworCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBjaHZfcnBz X3JwZV9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHog KCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAor CQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOworCisJcnBzLT5ycDFfZnJlcSA9IGNodl9ycHNfZ3Vh cl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIpIEdQVSBmcmVxOiAlZCBN SHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+cnAxX2ZyZXEpLAorCQkJ IHJwcy0+cnAxX2ZyZXEpOworCisJcnBzLT5taW5fZnJlcSA9IGNodl9ycHNfbWluX2ZyZXEocnBz KTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJ IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCQkgcnBzLT5taW5fZnJlcSk7 CisKKwl2bHZfaW9zZl9zYl9wdXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAor CQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7CisKKwlX QVJOX09OQ0UoKHJwcy0+bWF4X2ZyZXEgfCBycHMtPmVmZmljaWVudF9mcmVxIHwgcnBzLT5ycDFf ZnJlcSB8CisJCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKKwkJICAiT2RkIEdQVSBmcmVxIHZhbHVl c1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSwgc3RydWN0IGludGVsX3Jwc19laSAqZWkpCit7CisJZWktPmt0aW1lID0ga3RpbWVf Z2V0X3JhdygpOworCWVpLT5yZW5kZXJfYzAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFZM Vl9SRU5ERVJfQzBfQ09VTlQpOworCWVpLT5tZWRpYV9jMCA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgVkxWX01FRElBX0MwX0NPVU5UKTsKK30KKworc3RhdGljIHUzMiB2bHZfd2FfYzBfZWko c3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQoreworCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcnBz X2VpICpwcmV2ID0gJnJwcy0+ZWk7CisJc3RydWN0IGludGVsX3Jwc19laSBub3c7CisJdTMyIGV2 ZW50cyA9IDA7CisKKwlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0g MCkKKwkJcmV0dXJuIDA7CisKKwl2bHZfYzBfcmVhZCh1bmNvcmUsICZub3cpOworCisJaWYgKHBy ZXYtPmt0aW1lKSB7CisJCXU2NCB0aW1lLCBjMDsKKwkJdTMyIHJlbmRlciwgbWVkaWE7CisKKwkJ dGltZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOworCisJCXRpbWUg Kj0gcnBzX3RvX2k5MTUocnBzKS0+Y3pjbGtfZnJlcTsKKworCQkvKiBXb3JrbG9hZCBjYW4gYmUg c3BsaXQgYmV0d2VlbiByZW5kZXIgKyBtZWRpYSwKKwkJICogZS5nLiBTd2FwQnVmZmVycyBiZWlu ZyBibGl0dGVkIGluIFggYWZ0ZXIgYmVpbmcgcmVuZGVyZWQgaW4KKwkJICogbWVzYS4gVG8gYWNj b3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdpbmVzCisJCSAqIGludG8g b3VyIGFjdGl2aXR5IGNvdW50ZXIuCisJCSAqLworCQlyZW5kZXIgPSBub3cucmVuZGVyX2MwIC0g cHJldi0+cmVuZGVyX2MwOworCQltZWRpYSA9IG5vdy5tZWRpYV9jMCAtIHByZXYtPm1lZGlhX2Mw OworCQljMCA9IG1heChyZW5kZXIsIG1lZGlhKTsKKwkJYzAgKj0gMTAwMCAqIDEwMCA8PCA4OyAv KiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAqLworCisJCWlmIChjMCA+IHRpbWUg KiBycHMtPnBvd2VyLnVwX3RocmVzaG9sZCkKKwkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhS RVNIT0xEOworCQllbHNlIGlmIChjMCA8IHRpbWUgKiBycHMtPnBvd2VyLmRvd25fdGhyZXNob2xk KQorCQkJZXZlbnRzID0gR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRDsKKwl9CisKKwlycHMtPmVp ID0gbm93OworCXJldHVybiBldmVudHM7Cit9CisKK3N0YXRpYyB2b2lkIHJwc193b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSBjb250YWlu ZXJfb2Yod29yaywgdHlwZW9mKCpycHMpLCB3b3JrKTsKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g cnBzX3RvX2d0KHJwcyk7CisJYm9vbCBjbGllbnRfYm9vc3QgPSBmYWxzZTsKKwlpbnQgbmV3X2Zy ZXEsIGFkaiwgbWluLCBtYXg7CisJdTMyIHBtX2lpciA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZn dC0+aXJxX2xvY2spOworCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7CisJ Y2xpZW50X2Jvb3N0ID0gYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRlcnMpOworCXNwaW5fdW5s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgcXVldWUg YW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCisJaWYgKChwbV9paXIgJiBy cHMtPnBtX2V2ZW50cykgPT0gMCAmJiAhY2xpZW50X2Jvb3N0KQorCQlnb3RvIG91dDsKKworCW11 dGV4X2xvY2soJnJwcy0+bG9jayk7CisKKwlwbV9paXIgfD0gdmx2X3dhX2MwX2VpKHJwcywgcG1f aWlyKTsKKworCWFkaiA9IHJwcy0+bGFzdF9hZGo7CisJbmV3X2ZyZXEgPSBycHMtPmN1cl9mcmVx OworCW1pbiA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0OworCW1heCA9IHJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0OworCWlmIChjbGllbnRfYm9vc3QpCisJCW1heCA9IHJwcy0+bWF4X2ZyZXE7CisJ aWYgKGNsaWVudF9ib29zdCAmJiBuZXdfZnJlcSA8IHJwcy0+Ym9vc3RfZnJlcSkgeworCQluZXdf ZnJlcSA9IHJwcy0+Ym9vc3RfZnJlcTsKKwkJYWRqID0gMDsKKwl9IGVsc2UgaWYgKHBtX2lpciAm IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPiAwKQorCQkJYWRqICo9IDI7 CisJCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLworCQkJYWRqID0gSVNf Q0hFUlJZVklFVyhndC0+aTkxNSkgPyAyIDogMTsKKworCQlpZiAobmV3X2ZyZXEgPj0gcnBzLT5t YXhfZnJlcV9zb2Z0bGltaXQpCisJCQlhZGogPSAwOworCX0gZWxzZSBpZiAoY2xpZW50X2Jvb3N0 KSB7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVElN RU9VVCkgeworCQlpZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEpCisJCQlu ZXdfZnJlcSA9IHJwcy0+ZWZmaWNpZW50X2ZyZXE7CisJCWVsc2UgaWYgKHJwcy0+Y3VyX2ZyZXEg PiBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCW5ld19mcmVxID0gcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQ7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RP V05fVEhSRVNIT0xEKSB7CisJCWlmIChhZGogPCAwKQorCQkJYWRqICo9IDI7CisJCWVsc2UgLyog Q0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLworCQkJYWRqID0gSVNfQ0hFUlJZVklFVyhn dC0+aTkxNSkgPyAtMiA6IC0xOworCisJCWlmIChuZXdfZnJlcSA8PSBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKKwkJCWFkaiA9IDA7CisJfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLworCQlh ZGogPSAwOworCX0KKworCXJwcy0+bGFzdF9hZGogPSBhZGo7CisKKwkvKgorCSAqIExpbWl0IGRl Ym9vc3RpbmcgYW5kIGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwor CSAqIHdoZW4gaW4gdGhlIHJlc3BlY3RpdmUgcG93ZXIgbW9kZXMgKGkuZS4gc2xvd2x5IGRlY3Jl YXNlIGZyZXF1ZW5jaWVzCisJICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xv d2x5IGluY3JlYXNlIGZyZXF1ZW5jaWVzIHdoaWxlCisJICogaW4gdGhlIExPV19QT1dFUiB6b25l KS4gT24gaWRsZSwgd2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKKwkgKiB0byB0aGUg bmV4dCBsZXZlbCBxdWlja2x5LCBhbmQgY29udmVyc2VseSBpZiBidXN5IHdlIGV4cGVjdCB0bwor CSAqIGhpdCBhIHdhaXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93ZXIuCisJ ICovCisJaWYgKChhZGogPCAwICYmIHJwcy0+cG93ZXIubW9kZSA9PSBISUdIX1BPV0VSKSB8fAor CSAgICAoYWRqID4gMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VSKSkKKwkJcnBzLT5s YXN0X2FkaiA9IDA7CisKKwkvKiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJmYWNlcyBtYXkgaGF2ZSBz bnVjayBpbiB3aGlsZSBzZXJ2aWNpbmcgdGhlCisJICogaW50ZXJydXB0CisJICovCisJbmV3X2Zy ZXEgKz0gYWRqOworCW5ld19mcmVxID0gY2xhbXBfdChpbnQsIG5ld19mcmVxLCBtaW4sIG1heCk7 CisKKwlpZiAoaW50ZWxfcnBzX3NldChycHMsIG5ld19mcmVxKSkgeworCQlEUk1fREVCVUdfRFJJ VkVSKCJGYWlsZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKKwkJcnBzLT5sYXN0X2Fk aiA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOworCitvdXQ6CisJc3Bpbl9s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlnZW42X2d0X3BtX3VubWFza19pcnEoZ3QsIHJwcy0+ cG1fZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cit9CisKK3ZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikK K3sKKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisJY29uc3QgdTMyIGV2 ZW50cyA9IHJwcy0+cG1fZXZlbnRzICYgcG1faWlyOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgm Z3QtPmlycV9sb2NrKTsKKworCWlmICh1bmxpa2VseSghZXZlbnRzKSkKKwkJcmV0dXJuOworCisJ Z2VuNl9ndF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKKworCXJwcy0+cG1faWlyIHw9IGV2ZW50 czsKKwlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOworfQorCit2b2lkIGdlbjZfcnBzX2lycV9o YW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAocG1faWlyICYg cnBzLT5wbV9ldmVudHMpIHsKKwkJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChycHMp OworCisJCXNwaW5fbG9jaygmZ3QtPmlycV9sb2NrKTsKKwkJZ2VuNl9ndF9wbV9tYXNrX2lycShn dCwgcG1faWlyICYgcnBzLT5wbV9ldmVudHMpOworCQlycHMtPnBtX2lpciB8PSBwbV9paXIgJiBy cHMtPnBtX2V2ZW50czsKKwkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKKwkJc3Bpbl91bmxv Y2soJmd0LT5pcnFfbG9jayk7CisJfQorCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQorCQly ZXR1cm47CisKKwlpZiAocG1faWlyICYgUE1fVkVCT1hfVVNFUl9JTlRFUlJVUFQpCisJCWludGVs X2VuZ2luZV9icmVhZGNydW1ic19pcnEoaTkxNS0+ZW5naW5lW1ZFQ1MwXSk7CisKKwlpZiAocG1f aWlyICYgUE1fVkVCT1hfQ1NfRVJST1JfSU5URVJSVVBUKQorCQlEUk1fREVCVUcoIkNvbW1hbmQg cGFyc2VyIGVycm9yLCBwbV9paXIgMHglMDh4XG4iLCBwbV9paXIpOworfQorCit2b2lkIGdlbjVf cnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxf dW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdTMyIGJ1c3lfdXAsIGJ1c3lf ZG93biwgbWF4X2F2ZywgbWluX2F2ZzsKKwl1OCBuZXdfZnJlcTsKKworCXNwaW5fbG9jaygmbWNo ZGV2X2xvY2spOworCisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLAorCQkJICAgICBNRU1J TlRSU1RTLAorCQkJICAgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsK KworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNSU5UUlNUUywgTUVNSU5UX0VWQUxf Q0hHKTsKKwlidXN5X3VwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lUVVBB VkcpOworCWJ1c3lfZG93biA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVERO QVZHKTsKKwltYXhfYXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ0JNQVhBVkcpOwor CW1pbl9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDQk1JTkFWRyk7CisKKwkvKiBI YW5kbGUgUkNTIGNoYW5nZSByZXF1ZXN0IGZyb20gaHcgKi8KKwluZXdfZnJlcSA9IHJwcy0+Y3Vy X2ZyZXE7CisJaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKQorCQluZXdfZnJlcSsrOworCWVsc2UgaWYg KGJ1c3lfZG93biA8IG1pbl9hdmcpCisJCW5ld19mcmVxLS07CisJbmV3X2ZyZXEgPSBjbGFtcChu ZXdfZnJlcSwKKwkJCSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKKwkJCSBycHMtPm1heF9mcmVx X3NvZnRsaW1pdCk7CisKKwlpZiAobmV3X2ZyZXEgIT0gcnBzLT5jdXJfZnJlcSAmJiBnZW41X3Jw c19zZXQocnBzLCBuZXdfZnJlcSkpCisJCXJwcy0+Y3VyX2ZyZXEgPSBuZXdfZnJlcTsKKworCXNw aW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0 IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBz X3RvX2k5MTUocnBzKTsKKworCW11dGV4X2luaXQoJnJwcy0+bG9jayk7CisJbXV0ZXhfaW5pdCgm cnBzLT5wb3dlci5tdXRleCk7CisKKwlJTklUX1dPUksoJnJwcy0+d29yaywgcnBzX3dvcmspOwor CisJYXRvbWljX3NldCgmcnBzLT5udW1fd2FpdGVycywgMCk7CisKKwlpZiAoSVNfQ0hFUlJZVklF VyhpOTE1KSkKKwkJY2h2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhp OTE1KSkKKwkJdmx2X3Jwc19pbml0KHJwcyk7CisJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDYpCisJCWdlbjZfcnBzX2luaXQocnBzKTsKKwllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUp KQorCQlnZW41X3Jwc19pbml0KHJwcyk7CisKKwkvKiBEZXJpdmUgaW5pdGlhbCB1c2VyIHByZWZl cmVuY2VzL2xpbWl0cyBmcm9tIHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8KKwlycHMtPm1heF9mcmVx X3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7CisJcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPSBy cHMtPm1pbl9mcmVxOworCisJLyogQWZ0ZXIgc2V0dGluZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRo ZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KKwlpZiAoSVNfR0VOKGk5MTUsIDYpIHx8IElTX0lWWUJS SURHRShpOTE1KSB8fCBJU19IQVNXRUxMKGk5MTUpKSB7CisJCXUzMiBwYXJhbXMgPSAwOworCisJ CXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9SRUFEX09DX1BBUkFNUywKKwkJCQkg ICAgICAgJnBhcmFtcywgTlVMTCk7CisJCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1 cHBvcnRlZCAqLworCQkJRFJNX0RFQlVHX0RSSVZFUigiT3ZlcmNsb2NraW5nIHN1cHBvcnRlZCwg bWF4OiAlZE1Ieiwgb3ZlcmNsb2NrOiAlZE1IelxuIiwKKwkJCQkJIChycHMtPm1heF9mcmVxICYg MHhmZikgKiA1MCwKKwkJCQkJIChwYXJhbXMgJiAweGZmKSAqIDUwKTsKKwkJCXJwcy0+bWF4X2Zy ZXEgPSBwYXJhbXMgJiAweGZmOworCQl9CisJfQorCisJLyogRmluYWxseSBhbGxvdyB1cyB0byBi b29zdCB0byBtYXggYnkgZGVmYXVsdCAqLworCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2Zy ZXE7CisJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJwcy0+Y3VyX2ZyZXEgPSBy cHMtPmlkbGVfZnJlcTsKKworCXJwcy0+cG1faW50cm1za19tYnogPSAwOworCisJLyoKKwkgKiBT TkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9uIGxvb3BpbmcgYmF0 Y2hidWZmZXIKKwkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElSRUQgaXMgbWFza2VkLgorCSAqCisJ ICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgb24gVkxWLENIVi4KKwkg Ki8KKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpCisJCXJwcy0+cG1faW50cm1za19tYnogfD0g R0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQor CQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjhfUE1JTlRSX0RJU0FCTEVfUkVESVJFQ1RfVE9f R1VDOworfQorCit1MzIgaW50ZWxfZ2V0X2NhZ2Yoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIg cnBzdGF0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUo cnBzKTsKKwl1MzIgY2FnZjsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKKwkJY2FnZiA9 IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOworCWVsc2UgaWYg KElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQorCQljYWdmID0gKHJwc3Rh dCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOworCWVsc2UKKwkJY2FnZiA9IChy cHN0YXQgJiBHRU42X0NBR0ZfTUFTSykgPj4gR0VONl9DQUdGX1NISUZUOworCisJcmV0dXJuICBj YWdmOworfQorCisvKiBFeHRlcm5hbCBpbnRlcmZhY2UgZm9yIGludGVsX2lwcy5rbyAqLworCitz dGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgX19yY3UgKmlwc19tY2hkZXY7CisKKy8qKgor ICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUgaTkxNSBkcml2ZXIgaXMgbm93 IGxvYWRlZCwgaWYKKyAqIElQUyBnb3QgbG9hZGVkIGZpcnN0LgorICoKKyAqIFRoaXMgYXdrd2Fy ZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxlIGhhcyB0byBkZXBlbmQgb24gdGhlCisg KiBvdGhlciBpbiBvcmRlciBmb3IgSVBTIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjb21tdW5pY2F0 aW9uIG9mCisgKiBHUFUgdHVyYm8gbGltaXRzIHRvIGk5MTUuCisgKi8KK3N0YXRpYyB2b2lkCitp cHNfcGluZ19mb3JfaTkxNV9sb2FkKHZvaWQpCit7CisJdm9pZCAoKmxpbmspKHZvaWQpOworCisJ bGluayA9IHN5bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOworCWlmIChsaW5rKSB7 CisJCWxpbmsoKTsKKwkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7CisJfQor fQorCit2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCS8qCisJICog V2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3aXRoIGludGVsLWlwcyBvbmNlIGV2 ZXJ5dGhpbmcgaXMKKwkgKiBzZXQgdXAsIHRvIGF2b2lkIGludGVsLWlwcyBzbmVha2luZyBpbiBh bmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuCisJICovCisJaWYgKElTX0dFTihndC0+aTkxNSwgNSkp IHsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGlwc19tY2hkZXYsIGd0LT5pOTE1KTsKKwkJaXBzX3Bp bmdfZm9yX2k5MTVfbG9hZCgpOworCX0KK30KKwordm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVn aXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihpcHNf bWNoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICptY2hk ZXZfZ2V0KHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisKKwlyY3Vf cmVhZF9sb2NrKCk7CisJaTkxNSA9IHJjdV9kZXJlZmVyZW5jZShpcHNfbWNoZGV2KTsKKwlpZiAo IWtyZWZfZ2V0X3VubGVzc196ZXJvKCZpOTE1LT5kcm0ucmVmKSkKKwkJaTkxNSA9IE5VTEw7CisJ cmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gaTkxNTsKK30KKworLyoqCisgKiBpOTE1X3Jl YWRfbWNoX3ZhbCAtIHJldHVybiB2YWx1ZSBmb3IgSVBTIHVzZQorICoKKyAqIENhbGN1bGF0ZSBh bmQgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5n IHdoZXRoZXIKKyAqIHdlIGhhdmUgdGhlcm1hbCBhbmQgcG93ZXIgaGVhZHJvb20gdG8gaW5jcmVh c2UgQ1BVIG9yIEdQVSBwb3dlciBidWRnZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaTkxNV9yZWFk X21jaF92YWwodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwl1bnNp Z25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGdyYXBoaWNzX3ZhbCA9 IDA7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOwor CWlmICghaTkxNSkKKwkJcmV0dXJuIDA7CisKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUt PnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKKwkJc3RydWN0IGludGVsX2lwcyAqaXBzID0gJmk5MTUt Pmd0LnJwcy5pcHM7CisKKwkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCQljaGlwc2V0 X3ZhbCA9IF9faXBzX2NoaXBzZXRfdmFsKGlwcyk7CisJCWdyYXBoaWNzX3ZhbCA9IF9faXBzX2dm eF92YWwoaXBzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJfQorCisJZHJt X2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFs OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9yZWFkX21jaF92YWwpOworCisvKioKKyAqIGk5 MTVfZ3B1X3JhaXNlIC0gcmFpc2UgR1BVIGZyZXF1ZW5jeSBsaW1pdAorICoKKyAqIFJhaXNlIHRo ZSBsaW1pdDsgSVBTIGluZGljYXRlcyB3ZSBoYXZlIHRoZXJtYWwgaGVhZHJvb20uCisgKi8KK2Jv b2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlm ICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsKKworCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PCBycHMtPm1heF9mcmVxKQorCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCsrOworCXNwaW5fdW5s b2NrX2lycSgmbWNoZGV2X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0 dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9yYWlzZSk7CisKKy8qKgor ICogaTkxNV9ncHVfbG93ZXIgLSBsb3dlciBHUFUgZnJlcXVlbmN5IGxpbWl0CisgKgorICogSVBT IGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJh Y2sgdGhlIEdQVQorICogZnJlcXVlbmN5IG1heGltdW0uCisgKi8KK2Jvb2wgaTkxNV9ncHVfbG93 ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50 ZWxfcnBzICpycHM7CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcnBzID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1j aGRldl9sb2NrKTsKKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPiBycHMtPm1pbl9mcmVx KQorCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdC0tOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2 X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHRydWU7Cit9CitF WFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9sb3dlcik7CisKKy8qKgorICogaTkxNV9ncHVfYnVz eSAtIGluZGljYXRlIEdQVSBidXNpbmVzcyB0byBJUFMKKyAqCisgKiBUZWxsIHRoZSBJUFMgZHJp dmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KKyAqLworYm9vbCBpOTE1X2dwdV9i dXN5KHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJYm9vbCByZXQ7 CisKKwlpOTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0ID0gaTkxNS0+Z3QuYXdha2U7CisKKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKKwly ZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfYnVzeSk7CisKKy8qKgor ICogaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSAtIGRpc2FibGUgZ3JhcGhpY3MgdHVyYm8KKyAqCisg KiBEaXNhYmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4IGZyZXF1ZW5jeSBh bmQgc2V0dGluZyB0aGUKKyAqIGN1cnJlbnQgZnJlcXVlbmN5IHRvIHRoZSBkZWZhdWx0LgorICov Citib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7CisJYm9vbCByZXQ7CisKKwlp OTE1ID0gbWNoZGV2X2dldCgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnBz ID0gJmk5MTUtPmd0LnJwczsKKworCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7CisJcmV0ID0gZ2VuNV9ycHNfc2V0 KCZpOTE1LT5ndC5ycHMsIHJwcy0+bWluX2ZyZXEpOworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2 X2xvY2spOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHJldDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9ycHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk5 N2E0YjRlMDIwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3Jwcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaWZuZGVmIElOVEVMX1JQU19ICisjZGVmaW5lIElOVEVMX1JQU19ICisKKyNpbmNsdWRlICJp bnRlbF9ycHNfdHlwZXMuaCIKKworc3RydWN0IGk5MTVfcmVxdWVzdDsKKwordm9pZCBpbnRlbF9y cHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19kcml2ZXJf cmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl91 bnJlZ2lzdGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7CisKK3ZvaWQgaW50ZWxfcnBzX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBpbnRlbF9ycHNfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMg KnJwcyk7Cit2b2lkIGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKK3Zv aWQgaW50ZWxfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKKworaW50IGludGVs X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpOwordm9pZCBpbnRlbF9ycHNf bWFya19pbnRlcmFjdGl2ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGJvb2wgaW50ZXJhY3RpdmUp OworCitpbnQgaW50ZWxfZ3B1X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsK K2ludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpOwor dTMyIGludGVsX2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdDEpOwor Cit2b2lkIGdlbjVfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lk IGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcik7 Cit2b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBw bV9paXIpOworCisjZW5kaWYgLyogSU5URUxfUlBTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcnBzX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40MGViMWZiNjUxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ycHNfdHlwZXMuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKi8KKworI2lmbmRlZiBJTlRFTF9SUFNfVFlQRVNfSAorI2RlZmluZSBJTlRFTF9S UFNfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgv a3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKK3N0cnVjdCBpbnRlbF9pcHMgewor CXU2NCBsYXN0X2NvdW50MTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZTE7CisJdW5zaWduZWQg bG9uZyBjaGlwc2V0X3Bvd2VyOworCXU2NCBsYXN0X2NvdW50MjsKKwl1NjQgbGFzdF90aW1lMjsK Kwl1bnNpZ25lZCBsb25nIGdmeF9wb3dlcjsKKwl1OCBjb3JyOworCisJaW50IGMsIG07Cit9Owor CitzdHJ1Y3QgaW50ZWxfcnBzX2VpIHsKKwlrdGltZV90IGt0aW1lOworCXUzMiByZW5kZXJfYzA7 CisJdTMyIG1lZGlhX2MwOworfTsKKworc3RydWN0IGludGVsX3JwcyB7CisJc3RydWN0IG11dGV4 IGxvY2s7IC8qIHByb3RlY3RzIGVuYWJsaW5nIGFuZCB0aGUgd29ya2VyICovCisKKwkvKgorCSAq IHdvcmssIGludGVycnVwdHNfZW5hYmxlZCBhbmQgcG1faWlyIGFyZSBwcm90ZWN0ZWQgYnkKKwkg KiBkZXZfcHJpdi0+aXJxX2xvY2sKKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwli b29sIGVuYWJsZWQ7CisJYm9vbCBhY3RpdmU7CisJdTMyIHBtX2lpcjsKKworCS8qIFBNIGludGVy cnVwdCBiaXRzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLworCXUzMiBwbV9pbnRybXNr X21iejsKKwl1MzIgcG1fZXZlbnRzOworCisJLyogRnJlcXVlbmNpZXMgYXJlIHN0b3JlZCBpbiBw b3RlbnRpYWxseSBwbGF0Zm9ybSBkZXBlbmRlbnQgbXVsdGlwbGVzLgorCSAqIEluIG90aGVyIHdv cmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUgbXVsdGlwbGllZCBieSBYIHRvIGJlIGludGVyZXN0aW5n LgorCSAqIFNvZnQgbGltaXRzIGFyZSB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3IgdGhlIGR5bmFt aWMgcmVjbG9ja2luZyBkb25lCisJICogYnkgdGhlIGRyaXZlciAocmFpc2UgZnJlcXVlbmNpZXMg dW5kZXIgaGVhdnkgbG9hZHMsIGFuZCBsb3dlciBmb3IKKwkgKiBsaWdodGVyIGxvYWRzKS4gSGFy ZCBsaW1pdHMgYXJlIHRob3NlIGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqCisJICogQSBk aXN0aW5jdGlvbiBpcyBtYWRlIGZvciBvdmVyY2xvY2tpbmcsIHdoaWNoIGlzIG5ldmVyIGVuYWJs ZWQgYnkKKwkgKiBkZWZhdWx0LCBhbmQgaXMgY29uc2lkZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFy ZCBsaW1pdCBpZiBpdCdzCisJICogcG9zc2libGUgYXQgYWxsLgorCSAqLworCXU4IGN1cl9mcmVx OwkJLyogQ3VycmVudCBmcmVxdWVuY3kgKGNhY2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KKwl1OCBs YXN0X2ZyZXE7CQkvKiBMYXN0IHN3cXJlcSBmcmVxdWVuY3kgKi8KKwl1OCBtaW5fZnJlcV9zb2Z0 bGltaXQ7CS8qIE1pbmltdW0gZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCisJ dTggbWF4X2ZyZXFfc29mdGxpbWl0OwkvKiBNYXggZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUg ZHJpdmVyICovCisJdTggbWF4X2ZyZXE7CQkvKiBNYXhpbXVtIGZyZXF1ZW5jeSwgUlAwIGlmIG5v dCBvdmVyY2xvY2tpbmcgKi8KKwl1OCBtaW5fZnJlcTsJCS8qIEFLQSBSUG4uIE1pbmltdW0gZnJl cXVlbmN5ICovCisJdTggYm9vc3RfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4g d2FpdCBib29zdGluZyAqLworCXU4IGlkbGVfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0 IHdoZW4gd2UgYXJlIGlkbGUgKi8KKwl1OCBlZmZpY2llbnRfZnJlcTsJLyogQUtBIFJQZS4gUHJl LWRldGVybWluZWQgYmFsYW5jZWQgZnJlcXVlbmN5ICovCisJdTggcnAxX2ZyZXE7CQkvKiAibGVz cyB0aGFuIiBSUDAgcG93ZXIvZnJlcWVuY3kgKi8KKwl1OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVy Y2xvY2tlZCBtYXggZnJlcXVlbmN5LiAqLworCXUxNiBncGxsX3JlZl9mcmVxOwkvKiB2bHYvY2h2 IEdQTEwgcmVmZXJlbmNlIGZyZXF1ZW5jeSAqLworCisJaW50IGxhc3RfYWRqOworCisJc3RydWN0 IHsKKwkJc3RydWN0IG11dGV4IG11dGV4OworCisJCWVudW0geyBMT1dfUE9XRVIsIEJFVFdFRU4s IEhJR0hfUE9XRVIgfSBtb2RlOworCQl1bnNpZ25lZCBpbnQgaW50ZXJhY3RpdmU7CisKKwkJdTgg dXBfdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVpcmVkIHRvIHVwbG9jayAqLworCQl1 OCBkb3duX3RocmVzaG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sg Ki8KKwl9IHBvd2VyOworCisJYXRvbWljX3QgbnVtX3dhaXRlcnM7CisJYXRvbWljX3QgYm9vc3Rz OworCisJLyogbWFudWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxhdGlvbnMgKi8KKwlzdHJ1Y3QgaW50 ZWxfcnBzX2VpIGVpOworCXN0cnVjdCBpbnRlbF9pcHMgaXBzOworfTsKKworI2VuZGlmIC8qIElO VEVMX1JQU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCmlu ZGV4IGE3MDU3Nzg1ZTQyMC4uZmQzNzcwZTQ4YWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYwpAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgImludGVsX3BtLmgiIC8q IGludGVsX2dwdV9mcmVxKCkgKi8KICNpbmNsdWRlICJzZWxmdGVzdF9sbGMuaCIKKyNpbmNsdWRl ICJpbnRlbF9ycHMuaCIKIAogc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0 IGludGVsX2xsYyAqbGxjKQogewpAQCAtMjUsNiArMjYsOCBAQCBzdGF0aWMgaW50IGdlbjZfdmVy aWZ5X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJZm9yIChncHVfZnJlcSA9IGNv bnN0cy5taW5fZ3B1X2ZyZXE7CiAJICAgICBncHVfZnJlcSA8PSBjb25zdHMubWF4X2dwdV9mcmVx OwogCSAgICAgZ3B1X2ZyZXErKykgeworCQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmbGxjX3Rv X2d0KGxsYyktPnJwczsKKwogCQl1bnNpZ25lZCBpbnQgaWFfZnJlcSwgcmluZ19mcmVxLCBmb3Vu ZDsKIAkJdTMyIHZhbDsKIApAQCAtNDQsNyArNDcsNyBAQCBzdGF0aWMgaW50IGdlbjZfdmVyaWZ5 X3JpbmdfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMpCiAJCWlmIChmb3VuZCAhPSBpYV9mcmVx KSB7CiAJCQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90 IG1hdGNoIGV4cGVjdGVkIENQVSBmcmVxLCBmb3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCiAJCQkg ICAgICAgZ3B1X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEs Ci0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEoaTkxNSwgZ3B1X2ZyZXEgKiAoSU5URUxfR0VOKGk5 MTUpID49IDkgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSkpLAorCQkJICAgICAgIGludGVsX2dwdV9m cmVxKHJwcywgZ3B1X2ZyZXEgKiAoSU5URUxfR0VOKGk5MTUpID49IDkgPyBHRU45X0ZSRVFfU0NB TEVSIDogMSkpLAogCQkJICAgICAgIGZvdW5kLCBpYV9mcmVxKTsKIAkJCWVyciA9IC1FSU5WQUw7 CiAJCQlicmVhazsKQEAgLTU0LDcgKzU3LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5n X2ZyZXEoc3RydWN0IGludGVsX2xsYyAqbGxjKQogCQlpZiAoZm91bmQgIT0gcmluZ19mcmVxKSB7 CiAJCQlwcl9lcnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1h dGNoIGV4cGVjdGVkIHJpbmcgZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAogCQkJICAg ICAgIGdwdV9mcmVxLCBjb25zdHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAot CQkJICAgICAgIGludGVsX2dwdV9mcmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1 KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwKKwkJCSAgICAgICBpbnRlbF9ncHVfZnJl cShycHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxF UiA6IDEpKSwKIAkJCSAgICAgICBmb3VuZCwgcmluZ19mcmVxKTsKIAkJCWVyciA9IC1FSU5WQUw7 CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNf c3VibWlzc2lvbi5jCmluZGV4IDAwOWU1NGEzNzY0Zi4uOTdiODU4Y2U3NjgyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKQEAgLTEw MTAsNyArMTAxMCw3IEBAIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCiAKIHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0 IGludGVsX2d0ICpndCkKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPmk5MTUtPmd0 X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPnJwczsKIAlzdHJ1Y3QgaW50 ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKQEAgLTEwNTYsNyArMTA1Niw3IEBA IHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0IGludGVsX2d0ICpndCkK IAogc3RhdGljIHZvaWQgZ3VjX2ludGVycnVwdHNfcmVsZWFzZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQogewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+aTkxNS0+Z3RfcG0ucnBzOworCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+cnBzOwogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSA9IGd0LT51bmNvcmU7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCWVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRl eCAxNjIxMTQzMGViNzguLjIyOTYyMzczNzIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJndC9pbnRlbF9ndF9yZXF1ZXN0cy5o IgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfcmM2Lmgi CisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiZ3QvdWMvaW50ZWxfZ3VjX3N1 Ym1pc3Npb24uaCIKIAogI2luY2x1ZGUgImk5MTVfZGVidWdmcy5oIgpAQCAtNzkxLDcgKzc5Miw3 IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2Rl X3RvX2k5MTUobS0+cHJpdmF0ZSk7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmRl dl9wcml2LT51bmNvcmU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9w bS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTgyNywyMyArODI4LDIz IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnVudXNlZCkKIAkJc2VxX3ByaW50ZihtLCAiRERSIGZyZXE6ICVkIE1IelxuIiwgZGV2X3By aXYtPm1lbV9mcmVxKTsKIAogCQlzZXFfcHJpbnRmKG0sICJhY3R1YWwgR1BVIGZyZXE6ICVkIE1I elxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCAoZnJlcV9zdHMgPj4gOCkgJiAw eGZmKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIChmcmVxX3N0cyA+PiA4KSAmIDB4ZmYp KTsKIAogCQlzZXFfcHJpbnRmKG0sICJjdXJyZW50IEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkg ICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOworCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAibWF4IEdQ VSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t YXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7CiAK IAkJc2VxX3ByaW50ZihtLCAibWluIEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKSk7CiAKIAkJc2VxX3ByaW50ZihtLCAiaWRsZSBHUFUgZnJlcTog JWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVx KSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVxKSk7CiAKIAkJc2Vx X3ByaW50ZihtLAogCQkJICAgImVmZmljaWVudCAoUlBlKSBmcmVxdWVuY3k6ICVkIE1IelxuIiwK LQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVxKSk7CisJ CQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKIAl9IGVsc2Ug aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewogCQl1MzIgcnBfc3RhdGVfbGltaXRzOwog CQl1MzIgZ3RfcGVyZl9zdGF0dXM7CkBAIC04NzcsNyArODc4LDcgQEAgc3RhdGljIGludCBpOTE1 X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJZWxz ZQogCQkJCXJlcWYgPj49IDI1OwogCQl9Ci0JCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcmVxZik7CisJCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShycHMsIHJlcWYpOwogCiAJCXJwbW9k ZWN0bCA9IEk5MTVfUkVBRChHRU42X1JQX0NPTlRST0wpOwogCQlycGluY2xpbWl0ID0gSTkxNV9S RUFEKEdFTjZfUlBfVVBfVEhSRVNIT0xEKTsKQEAgLTg5MCw4ICs4OTEsNyBAQCBzdGF0aWMgaW50 IGk5MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJ CXJwZG93bmVpID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV05fRUkpICYgR0VONl9DVVJJQVZH X01BU0s7CiAJCXJwY3VyZG93biA9IEk5MTVfUkVBRChHRU42X1JQX0NVUl9ET1dOKSAmIEdFTjZf Q1VSQlNZVEFWR19NQVNLOwogCQlycHByZXZkb3duID0gSTkxNV9SRUFEKEdFTjZfUlBfUFJFVl9E T1dOKSAmIEdFTjZfQ1VSQlNZVEFWR19NQVNLOwotCQljYWdmID0gaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsCi0JCQkJICAgICAgaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIHJwc3RhdCkpOworCQlj YWdmID0gaW50ZWxfZ3B1X2ZyZXEocnBzLCBpbnRlbF9nZXRfY2FnZihycHMsIHJwc3RhdCkpOwog CiAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdB S0VfQUxMKTsKIApAQCAtOTY4LDM3ICs5NjgsMzcgQEAgc3RhdGljIGludCBpOTE1X2ZyZXF1ZW5j eV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQltYXhfZnJlcSAqPSAo SVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKIAkJCSAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKIAkJc2VxX3ByaW50ZihtLCAiTG93ZXN0IChSUE4p IGZyZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4 X2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAogCQltYXhf ZnJlcSA9IChycF9zdGF0ZV9jYXAgJiAweGZmMDApID4+IDg7CiAJCW1heF9mcmVxICo9IChJU19H RU45X0JDKGRldl9wcml2KSB8fAogCQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8g R0VOOV9GUkVRX1NDQUxFUiA6IDEpOwogCQlzZXFfcHJpbnRmKG0sICJOb21pbmFsIChSUDEpIGZy ZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4X2Zy ZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAogCQltYXhfZnJl cSA9IChJU19HRU45X0xQKGRldl9wcml2KSA/IHJwX3N0YXRlX2NhcCA+PiAxNiA6CiAJCQkgICAg cnBfc3RhdGVfY2FwID4+IDApICYgMHhmZjsKIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoZGV2 X3ByaXYpIHx8CiAJCQkgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFf U0NBTEVSIDogMSk7CiAJCXNlcV9wcmludGYobSwgIk1heCBub24tb3ZlcmNsb2NrZWQgKFJQMCkg ZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBtYXhf ZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBtYXhfZnJlcSkpOwogCQlzZXFfcHJp bnRmKG0sICJNYXggb3ZlcmNsb2NrZWQgZnJlcXVlbmN5OiAlZE1IelxuIiwKLQkJCSAgIGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKIAogCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IGZyZXE6 ICVkIE1IelxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmN1cl9mcmVx KSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpKTsKIAkJc2VxX3By aW50ZihtLCAiQWN0dWFsIGZyZXE6ICVkIE1IelxuIiwgY2FnZik7CiAJCXNlcV9wcmludGYobSwg IklkbGUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+aWRsZV9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVx KSk7CiAJCXNlcV9wcmludGYobSwgIk1pbiBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKSk7CiAJCXNlcV9wcmludGYobSwgIkJvb3N0IGZyZXE6ICVkIE1I elxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsK KwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVxKSk7CiAJCXNlcV9wcmlu dGYobSwgIk1heCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5tYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9m cmVxKSk7CiAJCXNlcV9wcmludGYobSwKIAkJCSAgICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5 OiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2ll bnRfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVx KSk7CiAJfSBlbHNlIHsKIAkJc2VxX3B1dHMobSwgIm5vIFAtc3RhdGUgaW5mbyBhdmFpbGFibGVc biIpOwogCX0KQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiBzdGF0aWMgaW50IGk5MTVfcmluZ19m cmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2dwdV9m cmVxLCBtaW5fZ3B1X2ZyZXE7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJaW50IGdwdV9m cmVxLCBpYV9mcmVxOwpAQCAtMTQ4NiwxMCArMTQ4NiwxMSBAQCBzdGF0aWMgaW50IGk5MTVfcmlu Z19mcmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJCSAgICAg ICBHRU42X1BDT0RFX1JFQURfTUlOX0ZSRVFfVEFCTEUsCiAJCQkJICAgICAgICZpYV9mcmVxLCBO VUxMKTsKIAkJc2VxX3ByaW50ZihtLCAiJWRcdFx0JWRcdFx0XHRcdCVkXG4iLAotCQkJICAgaW50 ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIChncHVfZnJlcSAqCi0JCQkJCQkgICAgIChJU19HRU45X0JD KGRldl9wcml2KSB8fAotCQkJCQkJICAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/Ci0J CQkJCQkgICAgICBHRU45X0ZSRVFfU0NBTEVSIDogMSkpKSwKKwkJCSAgIGludGVsX2dwdV9mcmVx KHJwcywKKwkJCQkJICAoZ3B1X2ZyZXEgKgorCQkJCQkgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikg fHwKKwkJCQkJICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPworCQkJCQkgICAgR0VOOV9G UkVRX1NDQUxFUiA6IDEpKSksCiAJCQkgICAoKGlhX2ZyZXEgPj4gMCkgJiAweGZmKSAqIDEwMCwK IAkJCSAgICgoaWFfZnJlcSA+PiA4KSAmIDB4ZmYpICogMTAwKTsKIAl9CkBAIC0xNzE3LDcgKzE3 MTgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcnBzX3Bvd2VyX3RvX3N0cih1bnNpZ25lZCBpbnQg cG93ZXIpCiBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5v ZGVfdG9faTkxNShtLT5wcml2YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKIAl1MzIgYWN0X2ZyZXEgPSBycHMtPmN1cl9mcmVxOwogCWludGVsX3dha2VyZWZfdCB3YWtl cmVmOwogCkBAIC0xNzI5LDcgKzE3MzAsNyBAQCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2lu Zm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCQkJdmx2X3B1bml0X3B1dChkZXZf cHJpdik7CiAJCQlhY3RfZnJlcSA9IChhY3RfZnJlcSA+PiA4KSAmIDB4ZmY7CiAJCX0gZWxzZSB7 Ci0JCQlhY3RfZnJlcSA9IGludGVsX2dldF9jYWdmKGRldl9wcml2LAorCQkJYWN0X2ZyZXEgPSBp bnRlbF9nZXRfY2FnZihycHMsCiAJCQkJCQkgIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKIAkJ fQogCX0KQEAgLTE3NDAsMTcgKzE3NDEsMTcgQEAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9p bmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIAkJICAgYXRvbWljX3JlYWQoJnJw cy0+bnVtX3dhaXRlcnMpKTsKIAlzZXFfcHJpbnRmKG0sICJJbnRlcmFjdGl2ZT8gJWRcbiIsIFJF QURfT05DRShycHMtPnBvd2VyLmludGVyYWN0aXZlKSk7CiAJc2VxX3ByaW50ZihtLCAiRnJlcXVl bmN5IHJlcXVlc3RlZCAlZCwgYWN0dWFsICVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgcnBzLT5jdXJfZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBhY3Rf ZnJlcSkpOworCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAorCQkgICBp bnRlbF9ncHVfZnJlcShycHMsIGFjdF9mcmVxKSk7CiAJc2VxX3ByaW50ZihtLCAiICBtaW4gaGFy ZDolZCwgc29mdDolZDsgbWF4IHNvZnQ6JWQsIGhhcmQ6JWRcbiIsCi0JCSAgIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWF4X2ZyZXEpKTsKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9m cmVxKSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCks CisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpLAorCQkg ICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKIAlzZXFfcHJpbnRmKG0sICIg IGlkbGU6JWQsIGVmZmljaWVudDolZCwgYm9vc3Q6JWRcbiIsCi0JCSAgIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPmVmZmljaWVudF9mcmVxKSwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+Ym9vc3RfZnJlcSkpOworCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+aWRsZV9mcmVx KSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwKKwkJICAg aW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsKIAogCXNlcV9wcmludGYobSwg IldhaXQgYm9vc3RzOiAlZFxuIiwgYXRvbWljX3JlYWQoJnJwcy0+Ym9vc3RzKSk7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCmluZGV4IDUxMzhkMWVlZDMwNi4uNzhhYzA4ZGI0OGEzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTE4NDEsNiArMTg0MSw4IEBAIHN0YXRpYyBpbnQgaTkxNV9k cm1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAKIAlpbnRlbF9kcF9tc3RfcmVzdW1l KGRldl9wcml2KTsKIAorCWludGVsX2d0X3BtX2VuYWJsZSgmZGV2X3ByaXYtPmd0KTsKKwogCWlu dGVsX2Rpc3BsYXlfcmVzdW1lKGRldik7CiAKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShk ZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggODg4MmMwOTA4YzNiLi5lYjU0NjAyOTA4 MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNTQzLDk0ICs1NDMsNiBAQCBzdHJ1Y3Qg aTkxNV9zdXNwZW5kX3NhdmVkX3JlZ2lzdGVycyB7CiAKIHN0cnVjdCB2bHZfczBpeF9zdGF0ZTsK IAotc3RydWN0IGludGVsX3Jwc19laSB7Ci0Ja3RpbWVfdCBrdGltZTsKLQl1MzIgcmVuZGVyX2Mw OwotCXUzMiBtZWRpYV9jMDsKLX07Ci0KLXN0cnVjdCBpbnRlbF9ycHMgewotCXN0cnVjdCBtdXRl eCBsb2NrOyAvKiBwcm90ZWN0cyBlbmFibGluZyBhbmQgdGhlIHdvcmtlciAqLwotCi0JLyoKLQkg KiB3b3JrLCBpbnRlcnJ1cHRzX2VuYWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5Ci0J ICogZGV2X3ByaXYtPmlycV9sb2NrCi0JICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0J Ym9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7Ci0JdTMyIHBtX2lpcjsKLQotCS8qIFBNIGludGVycnVw dCBiaXRzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLwotCXUzMiBwbV9pbnRybXNrX21i ejsKLQotCS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0g ZGVwZW5kZW50IG11bHRpcGxlcy4KLQkgKiBJbiBvdGhlciB3b3JkcywgKl9mcmVxIG5lZWRzIHRv IGJlIG11bHRpcGxpZWQgYnkgWCB0byBiZSBpbnRlcmVzdGluZy4KLQkgKiBTb2Z0IGxpbWl0cyBh cmUgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBkeW5hbWljIHJlY2xvY2tpbmcgZG9uZQot CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCi0JICogbGlnaHRlciBsb2FkcykuIEhhcmQgbGltaXRzIGFyZSB0aG9zZSBp bXBvc2VkIGJ5IHRoZSBoYXJkd2FyZS4KLQkgKgotCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBm b3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Ci0JICogZGVmYXVsdCwg YW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWJvdmUgdGhlIGhhcmQgbGltaXQgaWYgaXQncwotCSAq IHBvc3NpYmxlIGF0IGFsbC4KLQkgKi8KLQl1OCBjdXJfZnJlcTsJCS8qIEN1cnJlbnQgZnJlcXVl bmN5IChjYWNoZWQsIG1heSBub3QgPT0gSFcpICovCi0JdTggbWluX2ZyZXFfc29mdGxpbWl0Owkv KiBNaW5pbXVtIGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLwotCXU4IG1heF9m cmVxX3NvZnRsaW1pdDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAq LwotCXU4IG1heF9mcmVxOwkJLyogTWF4aW11bSBmcmVxdWVuY3ksIFJQMCBpZiBub3Qgb3ZlcmNs b2NraW5nICovCi0JdTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAq LwotCXU4IGJvb3N0X2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9v c3RpbmcgKi8KLQl1OCBpZGxlX2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdl IGFyZSBpZGxlICovCi0JdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1p bmVkIGJhbGFuY2VkIGZyZXF1ZW5jeSAqLwotCXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIg UlAwIHBvd2VyL2ZyZXFlbmN5ICovCi0JdTggcnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQg bWF4IGZyZXF1ZW5jeS4gKi8KLQl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExMIHJl ZmVyZW5jZSBmcmVxdWVuY3kgKi8KLQotCWludCBsYXN0X2FkajsKLQotCXN0cnVjdCB7Ci0JCXN0 cnVjdCBtdXRleCBtdXRleDsKLQotCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BP V0VSIH0gbW9kZTsKLQkJdW5zaWduZWQgaW50IGludGVyYWN0aXZlOwotCi0JCXU4IHVwX3RocmVz aG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KLQkJdTggZG93bl90 aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1c3kgcmVxdWlyZWQgdG8gZG93bmNsb2NrICovCi0JfSBw b3dlcjsKLQotCWJvb2wgZW5hYmxlZDsKLQlhdG9taWNfdCBudW1fd2FpdGVyczsKLQlhdG9taWNf dCBib29zdHM7Ci0KLQkvKiBtYW51YWwgd2EgcmVzaWRlbmN5IGNhbGN1bGF0aW9ucyAqLwotCXN0 cnVjdCBpbnRlbF9ycHNfZWkgZWk7Ci19OwotCi1zdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210 IHsKLQlzdHJ1Y3QgaW50ZWxfcnBzIHJwczsKLX07Ci0KLS8qIGRlZmluZWQgaW50ZWxfcG0uYyAq LwotZXh0ZXJuIHNwaW5sb2NrX3QgbWNoZGV2X2xvY2s7Ci0KLXN0cnVjdCBpbnRlbF9pbGtfcG93 ZXJfbWdtdCB7Ci0JdTggY3VyX2RlbGF5OwotCXU4IG1pbl9kZWxheTsKLQl1OCBtYXhfZGVsYXk7 Ci0JdTggZm1heDsKLQl1OCBmc3RhcnQ7Ci0KLQl1NjQgbGFzdF9jb3VudDE7Ci0JdW5zaWduZWQg bG9uZyBsYXN0X3RpbWUxOwotCXVuc2lnbmVkIGxvbmcgY2hpcHNldF9wb3dlcjsKLQl1NjQgbGFz dF9jb3VudDI7Ci0JdTY0IGxhc3RfdGltZTI7Ci0JdW5zaWduZWQgbG9uZyBnZnhfcG93ZXI7Ci0J dTggY29ycjsKLQotCWludCBjX207Ci0JaW50IHJfdDsKLX07Ci0KICNkZWZpbmUgTUFYX0wzX1NM SUNFUyAyCiBzdHJ1Y3QgaW50ZWxfbDNfcGFyaXR5IHsKIAl1MzIgKnJlbWFwX2luZm9bTUFYX0wz X1NMSUNFU107CkBAIC0xMDY3LDcgKzk3OSw2IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK IAkJdTMyIGlycV9tYXNrOwogCQl1MzIgZGVfaXJxX21hc2tbSTkxNV9NQVhfUElQRVNdOwogCX07 Ci0JdTMyIHBtX3Jwc19ldmVudHM7CiAJdTMyIHBpcGVzdGF0X2lycV9tYXNrW0k5MTVfTUFYX1BJ UEVTXTsKIAogCXN0cnVjdCBpOTE1X2hvdHBsdWcgaG90cGx1ZzsKQEAgLTEyMDIsMTMgKzExMTMs NiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJICovCiAJdTMyIGVkcmFtX3NpemVfbWI7 CiAKLQkvKiBnZW42KyBHVCBQTSBzdGF0ZSAqLwotCXN0cnVjdCBpbnRlbF9nZW42X3Bvd2VyX21n bXQgZ3RfcG07Ci0KLQkvKiBpbGstb25seSBpcHMvcnBzIHN0YXRlLiBFdmVyeXRoaW5nIGluIGhl cmUgaXMgcHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWwKLQkgKiBtY2hkZXZfbG9jayBpbiBpbnRlbF9w bS5jICovCi0Jc3RydWN0IGludGVsX2lsa19wb3dlcl9tZ210IGlwczsKLQogCXN0cnVjdCBpOTE1 X3Bvd2VyX2RvbWFpbnMgcG93ZXJfZG9tYWluczsKIAogCXN0cnVjdCBpOTE1X3BzciBwc3I7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBiODgyOTg4MDU2YmQuLmVhYjE3MDlkMTg5NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiZ3QvaW50 ZWxfbW9jcy5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0LmgiCiAjaW5jbHVkZSAiZ3QvaW50 ZWxfcmVuZGVyc3RhdGUuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKICNpbmNsdWRlICJn dC9pbnRlbF93b3JrYXJvdW5kcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTEyNzIs OCArMTI3Myw2IEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAkJZ290byBlcnJfY29udGV4dDsKIAl9CiAKLQlpbnRlbF9pbml0X2d0X3Bvd2Vy c2F2ZShkZXZfcHJpdik7Ci0KIAlpbnRlbF91Y19pbml0KCZkZXZfcHJpdi0+Z3QudWMpOwogCiAJ cmV0ID0gaW50ZWxfZ3RfaW5pdF9odygmZGV2X3ByaXYtPmd0KTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jCmluZGV4IDU3MmE1YzM3Y2M2MS4uNTk4OTI0YjNjNTU2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgogI2luY2x1 ZGUgImd0L2ludGVsX2d0X2lycS5oIgogI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtX2lycS5oIgor I2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNs dWRlICJpOTE1X2lycS5oIgpAQCAtMzI3LDg3ICszMjgsNiBAQCBzdGF0aWMgaTkxNV9yZWdfdCBn ZW42X3BtX2lpcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIElO VEVMX0dFTihkZXZfcHJpdikgPj0gOCA/IEdFTjhfR1RfSUlSKDIpIDogR0VONl9QTUlJUjsKIH0K IAotdm9pZCBnZW4xMV9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0K LQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCi0Jd2hpbGUgKGdlbjExX2d0X3Jlc2V0 X29uZV9paXIoZ3QsIDAsIEdFTjExX0dUUE0pKQotCQk7Ci0KLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LnBtX2lpciA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLXZv aWQgZ2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0KLQlzcGlu X2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCWdlbjZfZ3RfcG1fcmVzZXRfaWlyKGd0LCBHRU42 X1BNX1JQU19FVkVOVFMpOwotCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0gMDsKLQlzcGlu X3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLXZvaWQgZ2VuNl9lbmFibGVfcnBzX2lu dGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBp bnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JaWYgKFJFQURfT05DRShycHMtPmludGVycnVwdHNfZW5h YmxlZCkpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JV0FS Tl9PTl9PTkNFKHJwcy0+cG1faWlyKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQotCQlXQVJOX09OX09OQ0UoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihndCwgMCwgR0VOMTFfR1RQ TSkpOwotCWVsc2UKLQkJV0FSTl9PTl9PTkNFKEk5MTVfUkVBRChnZW42X3BtX2lpcihkZXZfcHJp dikpICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwotCi0JcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQgPSB0cnVlOwotCWdlbjZfZ3RfcG1fZW5hYmxlX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19l dmVudHMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotfQotCi11MzIgZ2Vu Nl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwgdTMyIG1hc2spCi17Ci0JcmV0dXJuIG1hc2sgJiB+aTkxNS0+Z3RfcG0ucnBzLnBtX2ludHJt c2tfbWJ6OwotfQotCi12b2lkIGdlbjZfZGlzYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7 Ci0KLQlpZiAoIVJFQURfT05DRShycHMtPmludGVycnVwdHNfZW5hYmxlZCkpCi0JCXJldHVybjsK LQotCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQgPSBmYWxzZTsKLQotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVf cnBzX3BtX21hc2soZGV2X3ByaXYsIH4wdSkpOwotCi0JZ2VuNl9ndF9wbV9kaXNhYmxlX2lycShn dCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2Nr KTsKLQlpbnRlbF9zeW5jaHJvbml6ZV9pcnEoZGV2X3ByaXYpOwotCi0JLyogTm93IHRoYXQgd2Ug d2lsbCBub3QgYmUgZ2VuZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKLQkgKiBvdXRz dGFuZGluZyB0YXNrcy4gQXMgd2UgYXJlIGNhbGxlZCBvbiB0aGUgUlBTIGlkbGUgcGF0aCwKLQkg KiB3ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1 cnJlbnQKLQkgKiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCi0JICovCi0J Y2FuY2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMSkKLQkJZ2VuMTFfcmVzZXRfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwotCWVsc2UKLQkJ Z2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci19Ci0KIHZvaWQgZ2VuOV9yZXNl dF9ndWNfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7CiAJc3RydWN0IGludGVs X2d0ICpndCA9IGd1Y190b19ndChndWMpOwpAQCAtMTA2NSwxOTkgKzk4NSw2IEBAIGludCBpbnRl bF9nZXRfY3J0Y19zY2FubGluZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlyZXR1cm4gcG9z aXRpb247CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwotCXUzMiBidXN5X3VwLCBidXN5X2Rvd24s IG1heF9hdmcsIG1pbl9hdmc7Ci0JdTggbmV3X2RlbGF5OwotCi0Jc3Bpbl9sb2NrKCZtY2hkZXZf bG9jayk7Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsCi0JCQkgICAgIE1FTUlOVFJT VFMsCi0JCQkgICAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUlNUUykpOwotCi0J bmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXk7Ci0KLQlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Ci0JYnVzeV91cCA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVFVQQVZHKTsKLQlidXN5X2Rvd24gPSBp bnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7Ci0JbWF4X2F2ZyA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKLQltaW5fYXZnID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBSQ0JNSU5BVkcpOwotCi0JLyogSGFuZGxlIFJDUyBjaGFuZ2UgcmVx dWVzdCBmcm9tIGh3ICovCi0JaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKSB7Ci0JCWlmIChkZXZfcHJp di0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkKLQkJCW5ld19kZWxh eSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5IC0gMTsKLQkJaWYgKG5ld19kZWxheSA8IGRldl9w cml2LT5pcHMubWF4X2RlbGF5KQotCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5tYXhfZGVs YXk7Ci0JfSBlbHNlIGlmIChidXN5X2Rvd24gPCBtaW5fYXZnKSB7Ci0JCWlmIChkZXZfcHJpdi0+ aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSkKLQkJCW5ld19kZWxheSA9 IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5ICsgMTsKLQkJaWYgKG5ld19kZWxheSA+IGRldl9wcml2 LT5pcHMubWluX2RlbGF5KQotCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5taW5fZGVsYXk7 Ci0JfQotCi0JaWYgKGlyb25sYWtlX3NldF9kcnBzKGRldl9wcml2LCBuZXdfZGVsYXkpKQotCQlk ZXZfcHJpdi0+aXBzLmN1cl9kZWxheSA9IG5ld19kZWxheTsKLQotCXNwaW5fdW5sb2NrKCZtY2hk ZXZfbG9jayk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCXN0cnVjdCBpbnRlbF9ycHNfZWkgKmVp KQotewotCWVpLT5rdGltZSA9IGt0aW1lX2dldF9yYXcoKTsKLQllaS0+cmVuZGVyX2MwID0gSTkx NV9SRUFEKFZMVl9SRU5ERVJfQzBfQ09VTlQpOwotCWVpLT5tZWRpYV9jMCA9IEk5MTVfUkVBRChW TFZfTUVESUFfQzBfQ09VTlQpOwotfQotCi12b2lkIGdlbjZfcnBzX3Jlc2V0X2VpKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQltZW1zZXQoJmRldl9wcml2LT5ndF9wbS5y cHMuZWksIDAsIHNpemVvZihkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpKSk7Ci19Ci0KLXN0YXRpYyB1 MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBt X2lpcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK LQljb25zdCBzdHJ1Y3QgaW50ZWxfcnBzX2VpICpwcmV2ID0gJnJwcy0+ZWk7Ci0Jc3RydWN0IGlu dGVsX3Jwc19laSBub3c7Ci0JdTMyIGV2ZW50cyA9IDA7Ci0KLQlpZiAoKHBtX2lpciAmIEdFTjZf UE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQl2bHZfYzBfcmVhZChk ZXZfcHJpdiwgJm5vdyk7Ci0KLQlpZiAocHJldi0+a3RpbWUpIHsKLQkJdTY0IHRpbWUsIGMwOwot CQl1MzIgcmVuZGVyLCBtZWRpYTsKLQotCQl0aW1lID0ga3RpbWVfdXNfZGVsdGEobm93Lmt0aW1l LCBwcmV2LT5rdGltZSk7Ci0KLQkJdGltZSAqPSBkZXZfcHJpdi0+Y3pjbGtfZnJlcTsKLQotCQkv KiBXb3JrbG9hZCBjYW4gYmUgc3BsaXQgYmV0d2VlbiByZW5kZXIgKyBtZWRpYSwKLQkJICogZS5n LiBTd2FwQnVmZmVycyBiZWluZyBibGl0dGVkIGluIFggYWZ0ZXIgYmVpbmcgcmVuZGVyZWQgaW4K LQkJICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBl bmdpbmVzCi0JCSAqIGludG8gb3VyIGFjdGl2aXR5IGNvdW50ZXIuCi0JCSAqLwotCQlyZW5kZXIg PSBub3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwotCQltZWRpYSA9IG5vdy5tZWRpYV9j MCAtIHByZXYtPm1lZGlhX2MwOwotCQljMCA9IG1heChyZW5kZXIsIG1lZGlhKTsKLQkJYzAgKj0g MTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAqLwot Ci0JCWlmIChjMCA+IHRpbWUgKiBycHMtPnBvd2VyLnVwX3RocmVzaG9sZCkKLQkJCWV2ZW50cyA9 IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwotCQllbHNlIGlmIChjMCA8IHRpbWUgKiBycHMtPnBv d2VyLmRvd25fdGhyZXNob2xkKQotCQkJZXZlbnRzID0gR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9M RDsKLQl9Ci0KLQlycHMtPmVpID0gbm93OwotCXJldHVybiBldmVudHM7Ci19Ci0KLXN0YXRpYyB2 b2lkIGdlbjZfcG1fcnBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgZ3RfcG0ucnBzLndvcmspOwotCXN0cnVjdCBpbnRlbF9ndCAq Z3QgPSAmZGV2X3ByaXYtPmd0OwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+ Z3RfcG0ucnBzOwotCWJvb2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7Ci0JaW50IG5ld19kZWxheSwg YWRqLCBtaW4sIG1heDsKLQl1MzIgcG1faWlyID0gMDsKLQotCXNwaW5fbG9ja19pcnEoJmd0LT5p cnFfbG9jayk7Ci0JaWYgKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKSB7Ci0JCXBtX2lpciA9IGZl dGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7Ci0JCWNsaWVudF9ib29zdCA9IGF0b21pY19yZWFk KCZycHMtPm51bV93YWl0ZXJzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2sp OwotCi0JLyogTWFrZSBzdXJlIHdlIGRpZG4ndCBxdWV1ZSBhbnl0aGluZyB3ZSdyZSBub3QgZ29p bmcgdG8gcHJvY2Vzcy4gKi8KLQlXQVJOX09OKHBtX2lpciAmIH5kZXZfcHJpdi0+cG1fcnBzX2V2 ZW50cyk7Ci0JaWYgKChwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cykgPT0gMCAmJiAh Y2xpZW50X2Jvb3N0KQotCQlnb3RvIG91dDsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0K LQlwbV9paXIgfD0gdmx2X3dhX2MwX2VpKGRldl9wcml2LCBwbV9paXIpOwotCi0JYWRqID0gcnBz LT5sYXN0X2FkajsKLQluZXdfZGVsYXkgPSBycHMtPmN1cl9mcmVxOwotCW1pbiA9IHJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0OwotCW1heCA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0OwotCWlmIChj bGllbnRfYm9vc3QpCi0JCW1heCA9IHJwcy0+bWF4X2ZyZXE7Ci0JaWYgKGNsaWVudF9ib29zdCAm JiBuZXdfZGVsYXkgPCBycHMtPmJvb3N0X2ZyZXEpIHsKLQkJbmV3X2RlbGF5ID0gcnBzLT5ib29z dF9mcmVxOwotCQlhZGogPSAwOwotCX0gZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9VUF9U SFJFU0hPTEQpIHsKLQkJaWYgKGFkaiA+IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYg bmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9w cml2KSA/IDIgOiAxOwotCi0JCWlmIChuZXdfZGVsYXkgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGlt aXQpCi0JCQlhZGogPSAwOwotCX0gZWxzZSBpZiAoY2xpZW50X2Jvb3N0KSB7Ci0JCWFkaiA9IDA7 Ci0JfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVElNRU9VVCkgewotCQlpZiAo cnBzLT5jdXJfZnJlcSA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEpCi0JCQluZXdfZGVsYXkgPSBycHMt PmVmZmljaWVudF9mcmVxOwotCQllbHNlIGlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJl cV9zb2Z0bGltaXQpCi0JCQluZXdfZGVsYXkgPSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdDsKLQkJ YWRqID0gMDsKLQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQp IHsKLQkJaWYgKGFkaiA8IDApCi0JCQlhZGogKj0gMjsKLQkJZWxzZSAvKiBDSFYgbmVlZHMgZXZl biBlbmNvZGUgdmFsdWVzICovCi0JCQlhZGogPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/IC0y IDogLTE7Ci0KLQkJaWYgKG5ld19kZWxheSA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJ CWFkaiA9IDA7Ci0JfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLwotCQlhZGogPSAwOwotCX0K LQotCXJwcy0+bGFzdF9hZGogPSBhZGo7Ci0KLQkvKgotCSAqIExpbWl0IGRlYm9vc3RpbmcgYW5k IGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwotCSAqIHdoZW4gaW4g dGhlIHJlc3BlY3RpdmUgcG93ZXIgbW9kZXMgKGkuZS4gc2xvd2x5IGRlY3JlYXNlIGZyZXF1ZW5j aWVzCi0JICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xvd2x5IGluY3JlYXNl IGZyZXF1ZW5jaWVzIHdoaWxlCi0JICogaW4gdGhlIExPV19QT1dFUiB6b25lKS4gT24gaWRsZSwg d2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKLQkgKiB0byB0aGUgbmV4dCBsZXZlbCBx dWlja2x5LCBhbmQgY29udmVyc2VseSBpZiBidXN5IHdlIGV4cGVjdCB0bwotCSAqIGhpdCBhIHdh aXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93ZXIuCi0JICovCi0JaWYgKChh ZGogPCAwICYmIHJwcy0+cG93ZXIubW9kZSA9PSBISUdIX1BPV0VSKSB8fAotCSAgICAoYWRqID4g MCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VSKSkKLQkJcnBzLT5sYXN0X2FkaiA9IDA7 Ci0KLQkvKiBzeXNmcyBmcmVxdWVuY3kgaW50ZXJmYWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGls ZSBzZXJ2aWNpbmcgdGhlCi0JICogaW50ZXJydXB0Ci0JICovCi0JbmV3X2RlbGF5ICs9IGFkajsK LQluZXdfZGVsYXkgPSBjbGFtcF90KGludCwgbmV3X2RlbGF5LCBtaW4sIG1heCk7Ci0KLQlpZiAo aW50ZWxfc2V0X3JwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkgewotCQlEUk1fREVCVUdfRFJJVkVS KCJGYWlsZWQgdG8gc2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKLQkJcnBzLT5sYXN0X2FkaiA9 IDA7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotCi1vdXQ6Ci0JLyogTWFrZSBz dXJlIG5vdCB0byBjb3JydXB0IFBNSU1SIHN0YXRlIHVzZWQgYnkgcmluZ2J1ZmZlciBvbiBHRU42 ICovCi0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLQlpZiAocnBzLT5pbnRlcnJ1cHRz X2VuYWJsZWQpCi0JCWdlbjZfZ3RfcG1fdW5tYXNrX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19l dmVudHMpOwotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLX0KLQotCiAvKioKICAq IGl2eWJyaWRnZV9wYXJpdHlfd29yayAtIFdvcmtxdWV1ZSBjYWxsZWQgd2hlbiBhIHBhcml0eSBl cnJvciBpbnRlcnJ1cHQKICAqIG9jY3VycmVkLgpAQCAtMTYzMSw1NCArMTM1OCw2IEBAIHN0YXRp YyB2b2lkIGk5eHhfcGlwZV9jcmNfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCQkJCSAgICAgcmVzMSwgcmVzMik7CiB9CiAKLS8qIFRoZSBSUFMgZXZlbnRz IG5lZWQgZm9yY2V3YWtlLCBzbyB3ZSBhZGQgdGhlbSB0byBhIHdvcmsgcXVldWUgYW5kIG1hc2sg dGhlaXIKLSAqIElNUiBiaXRzIHVudGlsIHRoZSB3b3JrIGlzIGRvbmUuIE90aGVyIGludGVycnVw dHMgY2FuIGJlIHByb2Nlc3NlZCB3aXRob3V0Ci0gKiB0aGUgd29yayBxdWV1ZS4gKi8KLXZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmaTkxNS0+Z3RfcG0ucnBzOwotCWNvbnN0IHUzMiBldmVudHMgPSBpOTE1 LT5wbV9ycHNfZXZlbnRzICYgcG1faWlyOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ3QtPmly cV9sb2NrKTsKLQotCWlmICh1bmxpa2VseSghZXZlbnRzKSkKLQkJcmV0dXJuOwotCi0JZ2VuNl9n dF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKLQotCWlmICghcnBzLT5pbnRlcnJ1cHRzX2VuYWJs ZWQpCi0JCXJldHVybjsKLQotCXJwcy0+cG1faWlyIHw9IGV2ZW50czsKLQlzY2hlZHVsZV93b3Jr KCZycHMtPndvcmspOwotfQotCi12b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRl dl9wcml2LT5ndDsKLQotCWlmIChwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cykgewot CQlzcGluX2xvY2soJmd0LT5pcnFfbG9jayk7Ci0JCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIHBt X2lpciAmIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQkJaWYgKHJwcy0+aW50ZXJydXB0c19l bmFibGVkKSB7Ci0JCQlycHMtPnBtX2lpciB8PSBwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50czsKLQkJCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2so Jmd0LT5pcnFfbG9jayk7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJ cmV0dXJuOwotCi0JaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQotCQlpbnRl bF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbVkVDUzBdKTsKLQotCWlm IChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCi0JCURSTV9ERUJVRygiQ29t bWFuZCBwYXJzZXIgZXJyb3IsIHBtX2lpciAweCUwOHhcbiIsIHBtX2lpcik7Ci19Ci0KIHN0YXRp YyB2b2lkIGk5eHhfcGlwZXN0YXRfaXJxX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIHsKIAllbnVtIHBpcGUgcGlwZTsKQEAgLTE5ODksNyArMTY2OCw3IEBAIHN0YXRp YyBpcnFyZXR1cm5fdCB2YWxsZXl2aWV3X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykK IAkJaWYgKGd0X2lpcikKIAkJCWdlbjZfZ3RfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndCwgZ3Rf aWlyKTsKIAkJaWYgKHBtX2lpcikKLQkJCWdlbjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2LCBw bV9paXIpOworCQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBtX2lp cik7CiAKIAkJaWYgKGhvdHBsdWdfc3RhdHVzKQogCQkJaTl4eF9ocGRfaXJxX2hhbmRsZXIoZGV2 X3ByaXYsIGhvdHBsdWdfc3RhdHVzKTsKQEAgLTIzOTMsNyArMjA3Miw3IEBAIHN0YXRpYyB2b2lk IGlsa19kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAl9CiAKIAlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSAmJiBkZV9paXIgJiBERV9QQ1VfRVZF TlQpCi0JCWlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIoZGV2X3ByaXYpOworCQlnZW41 X3Jwc19pcnFfaGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl2 Yl9kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK QEAgLTI0OTgsNyArMjE3Nyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpcm9ubGFrZV9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCWlmIChwbV9paXIpIHsKIAkJCUk5MTVfV1JJVEUo R0VONl9QTUlJUiwgcG1faWlyKTsKIAkJCXJldCA9IElSUV9IQU5ETEVEOwotCQkJZ2VuNl9ycHNf aXJxX2hhbmRsZXIoZGV2X3ByaXYsIHBtX2lpcik7CisJCQlnZW42X3Jwc19pcnFfaGFuZGxlcigm ZGV2X3ByaXYtPmd0LnJwcywgcG1faWlyKTsKIAkJfQogCX0KIApAQCAtNDI3MCwxMyArMzk0OSwx MCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTk2NV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICph cmcpCiB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CiAJaW50IGk7CiAKIAlpbnRl bF9ocGRfaW5pdF93b3JrKGRldl9wcml2KTsKIAotCUlOSVRfV09SSygmcnBzLT53b3JrLCBnZW42 X3BtX3Jwc193b3JrKTsKLQogCUlOSVRfV09SSygmZGV2X3ByaXYtPmwzX3Bhcml0eS5lcnJvcl93 b3JrLCBpdnlicmlkZ2VfcGFyaXR5X3dvcmspOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTDNfU0xJ Q0VTOyArK2kpCiAJCWRldl9wcml2LT5sM19wYXJpdHkucmVtYXBfaW5mb1tpXSA9IE5VTEw7CkBA IC00Mjg1LDMzICszOTYxLDYgQEAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAJaWYgKEhBU19HVF9VQyhkZXZfcHJpdikgJiYgSU5URUxfR0VO KGRldl9wcml2KSA8IDExKQogCQlkZXZfcHJpdi0+Z3QucG1fZ3VjX2V2ZW50cyA9IEdVQ19JTlRS X0dVQzJIT1NUIDw8IDE2OwogCi0JLyogTGV0J3MgdHJhY2sgdGhlIGVuYWJsZWQgcnBzIGV2ZW50 cyAqLwotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCi0JCWRldl9wcml2LT5wbV9ycHNfZXZlbnRzID0gR0VONl9QTV9SUF9V UF9FSV9FWFBJUkVEOwotCWVsc2UKLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSAoR0VONl9Q TV9SUF9VUF9USFJFU0hPTEQgfAotCQkJCQkgICBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwK LQkJCQkJICAgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpOwotCi0JLyogV2Ugc2hhcmUgdGhlIHJl Z2lzdGVyIHdpdGggb3RoZXIgZW5naW5lICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPiA5 KQotCQlHRU1fV0FSTl9PTihkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyAmIDB4ZmZmZjAwMDApOwot Ci0JcnBzLT5wbV9pbnRybXNrX21ieiA9IDA7Ci0KLQkvKgotCSAqIFNOQixJVkIsSFNXIGNhbiB3 aGlsZSBWTFYsQ0hWIG1heSBoYXJkIGhhbmcgb24gbG9vcGluZyBiYXRjaGJ1ZmZlcgotCSAqIGlm IEdFTjZfUE1fVVBfRUlfRVhQSVJFRCBpcyBtYXNrZWQuCi0JICoKLQkgKiBUT0RPOiB2ZXJpZnkg aWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNlZCBvbiBWTFYsQ0hWLgotCSAqLwotCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpIDw9IDcpCi0JCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VONl9QTV9SUF9V UF9FSV9FWFBJUkVEOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKLQkJcnBzLT5w bV9pbnRybXNrX21ieiB8PSBHRU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RPX0dVQzsKLQog CWRldi0+dmJsYW5rX2Rpc2FibGVfaW1tZWRpYXRlID0gdHJ1ZTsKIAogCS8qIE1vc3QgcGxhdGZv cm1zIHRyZWF0IHRoZSBkaXNwbGF5IGlycSBibG9jayBhcyBhbiBhbHdheXMtb24KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2lycS5oCmluZGV4IDE5YTNiYzAxOTUzNS4uZDBkOTFjNmUwMGQ3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmgKQEAgLTIyLDkgKzIyLDYgQEAgc3RydWN0IGludGVsX2d0Owogc3RydWN0 IGludGVsX2d1YzsKIHN0cnVjdCBpbnRlbF91bmNvcmU7CiAKLXZvaWQgZ2VuMTFfcnBzX2lycV9o YW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpOwotdm9pZCBnZW42X3Jwc19p cnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIp OwotCiB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7CiB2b2lkIGludGVsX2lycV9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7CiBpbnQgaW50ZWxfaXJxX2luc3RhbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCmluZGV4IDg1OTEyOTE3YzA2Mi4uMjY2ZDY2YjFm YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRl ICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgogI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtLmgiCiAj aW5jbHVkZSAiZ3QvaW50ZWxfcmM2LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAKICNp bmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfcG11LmgiCkBAIC0zNTgsMjUgKzM1 OSwyNiBAQCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHVuc2lnbmVkIGlu dCBwZXJpb2RfbnMpCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsK IAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwogCXN0cnVjdCBpOTE1 X3BtdSAqcG11ID0gJmk5MTUtPnBtdTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZ3QtPnJw czsKIAogCWlmIChwbXUtPmVuYWJsZSAmIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNU VUFMX0ZSRVFVRU5DWSkpIHsKIAkJdTMyIHZhbDsKIAotCQl2YWwgPSBpOTE1LT5ndF9wbS5ycHMu Y3VyX2ZyZXE7CisJCXZhbCA9IHJwcy0+Y3VyX2ZyZXE7CiAJCWlmIChpbnRlbF9ndF9wbV9nZXRf aWZfYXdha2UoZ3QpKSB7CiAJCQl2YWwgPSBpbnRlbF91bmNvcmVfcmVhZF9ub3RyYWNlKHVuY29y ZSwgR0VONl9SUFNUQVQxKTsKLQkJCXZhbCA9IGludGVsX2dldF9jYWdmKGk5MTUsIHZhbCk7CisJ CQl2YWwgPSBpbnRlbF9nZXRfY2FnZihycHMsIHZhbCk7CiAJCQlpbnRlbF9ndF9wbV9wdXQoZ3Qp OwogCQl9CiAKIAkJYWRkX3NhbXBsZV9tdWx0KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZS RVFfQUNUXSwKLQkJCQlpbnRlbF9ncHVfZnJlcShpOTE1LCB2YWwpLAorCQkJCWludGVsX2dwdV9m cmVxKHJwcywgdmFsKSwKIAkJCQlwZXJpb2RfbnMgLyAxMDAwKTsKIAl9CiAKIAlpZiAocG11LT5l bmFibGUgJiBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kp KSB7CiAJCWFkZF9zYW1wbGVfbXVsdCgmcG11LT5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JF UV0sCi0JCQkJaW50ZWxfZ3B1X2ZyZXEoaTkxNSwgaTkxNS0+Z3RfcG0ucnBzLmN1cl9mcmVxKSwK KwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAogCQkJCXBlcmlvZF9ucyAv IDEwMDApOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVx dWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKaW5kZXggNDU3NWYz Njg0NTVkLi4wOGNlMmVlZWNmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCkBA IC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fY29udGV4dC5oIgogI2lu Y2x1ZGUgImd0L2ludGVsX2NvbnRleHQuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKIAog I2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKQEAgLTI1Nyw4 ICsyNTgsOCBAQCBib29sIGk5MTVfcmVxdWVzdF9yZXRpcmUoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEpCiAJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdOQUxfQklULCAmcnEt PmZlbmNlLmZsYWdzKSkKIAkJaTkxNV9yZXF1ZXN0X2NhbmNlbF9icmVhZGNydW1iKHJxKTsKIAlp ZiAoaTkxNV9yZXF1ZXN0X2hhc193YWl0Ym9vc3QocnEpKSB7Ci0JCUdFTV9CVUdfT04oIWF0b21p Y19yZWFkKCZycS0+aTkxNS0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzKSk7Ci0JCWF0b21pY19kZWMo JnJxLT5pOTE1LT5ndF9wbS5ycHMubnVtX3dhaXRlcnMpOworCQlHRU1fQlVHX09OKCFhdG9taWNf cmVhZCgmcnEtPmVuZ2luZS0+Z3QtPnJwcy5udW1fd2FpdGVycykpOworCQlhdG9taWNfZGVjKCZy cS0+ZW5naW5lLT5ndC0+cnBzLm51bV93YWl0ZXJzKTsKIAl9CiAJaWYgKCF0ZXN0X2JpdChJOTE1 X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKSkgewogCQlzZXRfYml0KEk5MTVf RkVOQ0VfRkxBR19BQ1RJVkUsICZycS0+ZmVuY2UuZmxhZ3MpOwpAQCAtMTQ2Niw3ICsxNDY3LDcg QEAgbG9uZyBpOTE1X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIAkgKi8K IAlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfUFJJT1JJVFkpIHsKIAkJaWYgKCFpOTE1X3JlcXVlc3Rf c3RhcnRlZChycSkgJiYgSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA2KQotCQkJZ2VuNl9ycHNfYm9v c3QocnEpOworCQkJaW50ZWxfcnBzX2Jvb3N0KHJxKTsKIAkJaTkxNV9zY2hlZHVsZV9idW1wX3By aW9yaXR5KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z eXNmcy5jCmluZGV4IGJmMDM5YjhiYTU5My4uNjU0NzY5MDlkMWJmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4K IAogI2luY2x1ZGUgImd0L2ludGVsX3JjNi5oIgorI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgog CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X3N5c2ZzLmgiCkBAIC0yNTks NiArMjYwLDcgQEAgc3RhdGljIHNzaXplX3QgZ3RfYWN0X2ZyZXFfbWh6X3Nob3coc3RydWN0IGRl dmljZSAqa2RldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIg KmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9y X3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5y cHM7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJdTMyIGZyZXE7CiAKQEAgLTI3MSwzMSAr MjczLDMxIEBAIHN0YXRpYyBzc2l6ZV90IGd0X2FjdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZp Y2UgKmtkZXYsCiAKIAkJZnJlcSA9IChmcmVxID4+IDgpICYgMHhmZjsKIAl9IGVsc2UgewotCQlm cmVxID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsK KwkJZnJlcSA9IGludGVsX2dldF9jYWdmKHJwcywgSTkxNV9SRUFEKEdFTjZfUlBTVEFUMSkpOwog CX0KIAogCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJl Zik7CiAKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsIGZyZXEpKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUs ICIlZFxuIiwgaW50ZWxfZ3B1X2ZyZXEocnBzLCBmcmVxKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90 IGd0X2N1cl9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1 ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwKLQkJCQkg ICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkpOworCQkJaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmN1cl9mcmVxKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFf bWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBr ZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwK LQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0u cnBzLmJvb3N0X2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVx KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmtkZXYsCkBAIC0zMDMsNyArMzA1LDcgQEAgc3RhdGljIHNzaXplX3QgZ3RfYm9vc3Rf ZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKIAkJCQkgICAgICAgY29uc3QgY2hh ciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJp di0+Z3QucnBzOwogCWJvb2wgYm9vc3QgPSBmYWxzZTsKIAlzc2l6ZV90IHJldDsKIAl1MzIgdmFs OwpAQCAtMzEzLDcgKzMxNSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCXJldHVybiByZXQ7CiAKIAkvKiBWYWxpZGF0ZSBh Z2FpbnN0IChzdGF0aWMpIGhhcmR3YXJlIGxpbWl0cyAqLwotCXZhbCA9IGludGVsX2ZyZXFfb3Bj b2RlKGRldl9wcml2LCB2YWwpOworCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsK IAlpZiAodmFsIDwgcnBzLT5taW5fZnJlcSB8fCB2YWwgPiBycHMtPm1heF9mcmVxKQogCQlyZXR1 cm4gLUVJTlZBTDsKIApAQCAtMzMzLDE5ICszMzUsMTkgQEAgc3RhdGljIHNzaXplX3Qgdmx2X3Jw ZV9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBB R0VfU0laRSwgIiVkXG4iLAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAg IGRldl9wcml2LT5ndF9wbS5ycHMuZWZmaWNpZW50X2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVx KHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9tYXhf ZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVk XG4iLAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5n dF9wbS5ycHMubWF4X2ZyZXFfc29mdGxpbWl0KSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVx X21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LApAQCAtMzUzLDE5ICszNTUsMTcgQEAgc3Rh dGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7Ci0JdTMyIHZhbDsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0LnJwczsKIAlzc2l6ZV90IHJldDsKKwl1MzIgdmFsOwogCiAJcmV0ID0ga3N0cnRvdTMyKGJ1 ZiwgMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXdha2VyZWYgPSBpbnRl bF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwogCW11dGV4X2xvY2soJnJw cy0+bG9jayk7CiAKLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKKwl2 YWwgPSBpbnRlbF9mcmVxX29wY29kZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWluX2Zy ZXEgfHwKIAkgICAgdmFsID4gcnBzLT5tYXhfZnJlcSB8fAogCSAgICB2YWwgPCBycHMtPm1pbl9m cmVxX3NvZnRsaW1pdCkgewpAQCAtMzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21h eF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogCiAJaWYgKHZhbCA+IHJwcy0+ cnAwX2ZyZXEpCiAJCURSTV9ERUJVRygiVXNlciByZXF1ZXN0ZWQgb3ZlcmNsb2NraW5nIHRvICVk XG4iLAotCQkJICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7CisJCQkgIGludGVsX2dw dV9mcmVxKHJwcywgdmFsKSk7CiAKIAlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA9IHZhbDsKIApA QCAtMzgzLDE0ICszODMsMTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3Jl KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAog CQkgICAgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCk7CiAKLQkvKiBXZSBzdGlsbCBuZWVkICpf c2V0X3JwcyB0byBwcm9jZXNzIHRoZSBuZXcgbWF4X2RlbGF5IGFuZAorCS8qCisJICogV2Ugc3Rp bGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1heF9kZWxheSBhbmQKIAkgKiB1 cGRhdGUgdGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAotCSAq IGZyZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuICovCi0JcmV0ID0gaW50ZWxfc2V0 X3JwcyhkZXZfcHJpdiwgdmFsKTsKKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFu Z2VkLgorCSAqLworCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwogCiB1bmxvY2s6CiAJbXV0ZXhf dW5sb2NrKCZycHMtPmxvY2spOwotCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVu dGltZV9wbSwgd2FrZXJlZik7CiAKIAlyZXR1cm4gcmV0ID86IGNvdW50OwogfQpAQCAtMzk4LDEw ICszOTksMTAgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBk ZXZpY2UgKmtkZXYsCiBzdGF0aWMgc3NpemVfdCBndF9taW5fZnJlcV9taHpfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQog ewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkx NShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAog CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAotCQkJaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5ndF9wbS5ycHMubWluX2ZyZXFfc29m dGxpbWl0KSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0 KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2 aWNlICprZGV2LApAQCAtNDA5LDE5ICs0MTAsMTcgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2Zy ZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICBjb25zdCBjaGFyICpi dWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JdTMyIHZhbDsK KwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAlzc2l6ZV90IHJl dDsKKwl1MzIgdmFsOwogCiAJcmV0ID0ga3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbCk7CiAJaWYgKHJl dCkKIAkJcmV0dXJuIHJldDsKIAotCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0pOwogCW11dGV4X2xvY2soJnJwcy0+bG9jayk7CiAKLQl2YWwgPSBp bnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKKwl2YWwgPSBpbnRlbF9mcmVxX29wY29k ZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWluX2ZyZXEgfHwKIAkgICAgdmFsID4gcnBz LT5tYXhfZnJlcSB8fAogCSAgICB2YWwgPiBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgewpAQCAt NDM1LDE0ICs0MzQsMTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmtkZXYsCiAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAogCQkg ICAgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCk7CiAKLQkvKiBXZSBzdGlsbCBuZWVkICpfc2V0 X3JwcyB0byBwcm9jZXNzIHRoZSBuZXcgbWluX2RlbGF5IGFuZAorCS8qCisJICogV2Ugc3RpbGwg bmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1pbl9kZWxheSBhbmQKIAkgKiB1cGRh dGUgdGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAotCSAqIGZy ZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1bmNoYW5nZWQuICovCi0JcmV0ID0gaW50ZWxfc2V0X3Jw cyhkZXZfcHJpdiwgdmFsKTsKKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFuZ2Vk LgorCSAqLworCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5s b2NrKCZycHMtPmxvY2spOwotCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGlt ZV9wbSwgd2FrZXJlZik7CiAKIAlyZXR1cm4gcmV0ID86IGNvdW50OwogfQpAQCAtNDY0LDE1ICs0 NjQsMTUgQEAgc3RhdGljIERFVklDRV9BVFRSKGd0X1JQbl9mcmVxX21oeiwgU19JUlVHTywgZ3Rf cnBfbWh6X3Nob3csIE5VTEwpOwogc3RhdGljIHNzaXplX3QgZ3RfcnBfbWh6X3Nob3coc3RydWN0 IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5 MTUoa2Rldik7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7 CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJdTMyIHZhbDsK IAogCWlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUDBfZnJlcV9taHopCi0JCXZhbCA9IGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMF9mcmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEocnBzLCBycHMtPnJwMF9mcmVxKTsKIAllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9S UDFfZnJlcV9taHopCi0JCXZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9m cmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPnJwMV9mcmVxKTsKIAllbHNl IGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUG5fZnJlcV9taHopCi0JCXZhbCA9IGludGVsX2dw dV9mcmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKTsKKwkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPm1pbl9mcmVxKTsKIAllbHNlCiAJCUJVRygpOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uYwppbmRleCAzNjIyMzQ0NDkwODcuLjY3NDE1MDdjNzRmMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCkBAIC0xOTcsOCArMTk3LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9pcm9ubGFrZV9nZXRf bWVtX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlicmVhazsKIAl9 CiAKLQlkZXZfcHJpdi0+aXBzLnJfdCA9IGRldl9wcml2LT5tZW1fZnJlcTsKLQogCXN3aXRjaCAo Y3NpcGxsICYgMHgzZmYpIHsKIAljYXNlIDB4MDBjOgogCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAz MjAwOwpAQCAtMjI3LDE0ICsyMjUsNiBAQCBzdGF0aWMgdm9pZCBpOTE1X2lyb25sYWtlX2dldF9t ZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWRldl9wcml2LT5m c2JfZnJlcSA9IDA7CiAJCWJyZWFrOwogCX0KLQotCWlmIChkZXZfcHJpdi0+ZnNiX2ZyZXEgPT0g MzIwMCkgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDA7Ci0JfSBlbHNlIGlmIChkZXZfcHJpdi0+ ZnNiX2ZyZXEgPiAzMjAwICYmIGRldl9wcml2LT5mc2JfZnJlcSA8PSA0ODAwKSB7Ci0JCWRldl9w cml2LT5pcHMuY19tID0gMTsKLQl9IGVsc2UgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDI7Ci0J fQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4c3JfbGF0ZW5jeSBjeHNyX2xhdGVuY3lfdGFi bGVbXSA9IHsKQEAgLTYzMzksMTg2NSArNjMyOSwyNTggQEAgdm9pZCBpbnRlbF9pbml0X2lwYyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJaW50ZWxfZW5hYmxlX2lwYyhkZXZf cHJpdik7CiB9CiAKLS8qCi0gKiBMb2NrIHByb3RlY3RpbmcgSVBTIHJlbGF0ZWQgZGF0YSBzdHJ1 Y3R1cmVzCi0gKi8KLURFRklORV9TUElOTE9DSyhtY2hkZXZfbG9jayk7CitzdGF0aWMgY29uc3Qg c3RydWN0IGNwYXJhbXMgeworCXUxNiBpOworCXUxNiB0OworCXUxNiBtOworCXUxNiBjOworfSBj cGFyYW1zW10gPSB7CisJeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCisJeyAxLCAxMDY2LCAyOTQs IDI0NDYwIH0sCisJeyAxLCA4MDAsIDI5NCwgMjUxOTIgfSwKKwl7IDAsIDEzMzMsIDI3NiwgMjc2 MDUgfSwKKwl7IDAsIDEwNjYsIDI3NiwgMjc2MDUgfSwKKwl7IDAsIDgwMCwgMjMxLCAyMzc4NCB9 LAorfTsKIAotYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgdTggdmFsKQorc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNv cmUgPSAmaTkxNS0+dW5jb3JlOwotCXUxNiByZ3Zzd2N0bDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJm1jaGRldl9sb2NrKTsKLQotCXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNv cmUsIE1FTVNXQ1RMKTsKLQlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01EX1NUUykgewotCQlEUk1f REVCVUcoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNl OyAvKiBzdGlsbCBidXN5IHdpdGggYW5vdGhlciBjb21tYW5kICovCi0JfQotCi0Jcmd2c3djdGwg PSAoTUVNQ1RMX0NNRF9DSEZSRVEgPDwgTUVNQ1RMX0NNRF9TSElGVCkgfAotCQkodmFsIDw8IE1F TUNUTF9GUkVRX1NISUZUKSB8IE1FTUNUTF9TRkNBVk07Ci0JaW50ZWxfdW5jb3JlX3dyaXRlMTYo dW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwotCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQx Nih1bmNvcmUsIE1FTVNXQ1RMKTsKLQotCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwotCWlu dGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKLQotCXJldHVy biB0cnVlOworCS8qCisJICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9pbnQsIHdlIG5lZWQg dG8gZGlzYWJsZSBjbG9jaworCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNl ciBvciBpdCB3aWxsIGZhaWwgdG8KKwkgKiBzdGFydCB1cCB3aGVuIG5vIHBvcnRzIGFyZSBhY3Rp dmUuCisJICovCisJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2Ry cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQorc3RhdGljIHZvaWQgZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsK LQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKLQl1MzIg cmd2bW9kZWN0bDsKLQl1OCBmbWF4LCBmbWluLCBmc3RhcnQsIHZzdGFydDsKLQotCXNwaW5fbG9j a19pcnEoJm1jaGRldl9sb2NrKTsKLQotCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIE1FTU1PREVDVEwpOwotCi0JLyogRW5hYmxlIHRlbXAgcmVwb3J0aW5nICovCi0JaW50 ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsIEk5MTVfUkVBRChQTU1JU0MpIHwgTUNQ UENFX0VOKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIFRTQzEsIEk5MTVfUkVBRChU U0MxKSB8IFRTRSk7Ci0KLQkvKiAxMDBtcyBSQyBldmFsdWF0aW9uIGludGVydmFscyAqLwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBSQ0RORUksIDEwMDAwMCk7Ci0KLQkvKiBTZXQgbWF4L21pbiB0aHJlc2hv bGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCi0JaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgUkNCTUFYQVZHLCA5MDAwMCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwg UkNCTUlOQVZHLCA4MDAwMCk7Ci0KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JSFlT VCwgMSk7CisJZW51bSBwaXBlIHBpcGU7CiAKLQkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIg Zm9yIGludGVycnVwdCBoYW5kbGluZyAqLwotCWZtYXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVf Rk1BWF9NQVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJRlQ7Ci0JZm1pbiA9IChyZ3Ztb2RlY3RsICYg TUVNTU9ERV9GTUlOX01BU0spOwotCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RB UlRfTUFTSykgPj4KLQkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7CisJZm9yX2VhY2hfcGlwZShkZXZf cHJpdiwgcGlwZSkgeworCQlJOTE1X1dSSVRFKERTUENOVFIocGlwZSksCisJCQkgICBJOTE1X1JF QUQoRFNQQ05UUihwaXBlKSkgfAorCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxF KTsKIAotCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0 KSkgJgotCQkgIFBYVkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKwkJSTkxNV9X UklURShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOworCQlQT1NUSU5H X1JFQUQoRFNQU1VSRihwaXBlKSk7CisJfQorfQogCi0JZGV2X3ByaXYtPmlwcy5mbWF4ID0gZm1h eDsgLyogSVBTIGNhbGxiYWNrIHdpbGwgaW5jcmVhc2UgdGhpcyAqLwotCWRldl9wcml2LT5pcHMu ZnN0YXJ0ID0gZnN0YXJ0Oworc3RhdGljIHZvaWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtf VlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAKLQlkZXZfcHJpdi0+aXBzLm1heF9kZWxheSA9 IGZzdGFydDsKLQlkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSA9IGZtaW47Ci0JZGV2X3ByaXYtPmlw cy5jdXJfZGVsYXkgPSBmc3RhcnQ7CisJLyoKKwkgKiBSZXF1aXJlZCBmb3IgRkJDCisJICogV2FG YmNEaXNhYmxlRHBmY0Nsb2NrR2F0aW5nOmlsaworCSAqLworCWRzcGNsa19nYXRlIHw9IElMS19E UEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dB VEVfRElTQUJMRSB8CisJCSAgIElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKIAotCURS TV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKLQkJCSBm bWF4LCBmbWluLCBmc3RhcnQpOworCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMwLAorCQkgICBNQVJJ VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBTVlNNVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOworCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMxLAorCQkgICBWRk1VTklUX0NMT0NLX0dBVEVf RElTQUJMRSk7CiAKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgTUVNSU5UUkVO LAotCQkJICAgTUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOworCS8qCisJ ICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUgc2V0 IGluCisJICogb3JkZXIgdG8gZW5hYmxlIG1lbW9yeSBzZWxmLXJlZnJlc2gKKwkgKiBUaGUgYml0 IDIyLzIxIG9mIDB4NDIwMDQKKwkgKiBUaGUgYml0IDUgb2YgMHg0MjAyMAorCSAqIFRoZSBiaXQg MTUgb2YgMHg0NTAwMAorCSAqLworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJ CSAgIChJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKKwkJICAgIElMS19EUEFSQl9H QVRFIHwgSUxLX1ZTRFBGRF9GVUxMKSk7CisJZHNwY2xrX2dhdGUgfD0gSUxLX0RQQVJCVU5JVF9D TE9DS19HQVRFX0VOQUJMRTsKKwlJOTE1X1dSSVRFKERJU1BfQVJCX0NUTCwKKwkJICAgKEk5MTVf UkVBRChESVNQX0FSQl9DVEwpIHwKKwkJICAgIERJU1BfRkJDX1dNX0RJUykpOwogCiAJLyoKLQkg KiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBpbiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwK KwkgKiBCYXNlZCBvbiB0aGUgZG9jdW1lbnQgZnJvbSBoYXJkd2FyZSBndXlzIHRoZSBmb2xsb3dp bmcgYml0cworCSAqIHNob3VsZCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGluIG9yZGVyIHRvIGVu YWJsZSBGQkMuCisJICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCisJICogVGhlIGJpdCAyMiBvZiAw eDQyMDA0CisJICogVGhlIGJpdCA3LDgsOSBvZiAweDQyMDIwLgogCSAqLworCWlmIChJU19JUk9O TEFLRV9NKGRldl9wcml2KSkgeworCQkvKiBXYUZiY0FzeW5jaEZsaXBEaXNhYmxlRmJjUXVldWU6 aWxrICovCisJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCisJCQkgICBJOTE1X1JF QUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEpIHwKKwkJCSAgIElMS19GQkNRX0RJUyk7CisJCUk5MTVf V1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKKwkJCSAgIElMS19EUEFSQl9HQVRFKTsKKwl9CiAKLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLCBWSURTVEFSVCwgdnN0YXJ0KTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19y ZWFkKHVuY29yZSwgVklEU1RBUlQpOworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRz cGNsa19nYXRlKTsKIAotCXJndm1vZGVjdGwgfD0gTUVNTU9ERV9TV01PREVfRU47Ci0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNUTCwgcmd2bW9kZWN0bCk7CisJSTkxNV9XUklU RShJTEtfRElTUExBWV9DSElDS0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNL RU4yKSB8CisJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKKwlJOTE1X1dSSVRFKF8zRF9DSElD S0VOMiwKKwkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEIDw8IDE2IHwKKwkJICAg XzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEKTsKIAotCWlmICh3YWl0X2Zvcl9hdG9taWMo KGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKLQkJCSAgICAgTUVNQ1RMX0NN RF9TVFMpID09IDAsIDEwKSkKLQkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdlIHBl cmYgbW9kZVxuIik7Ci0JbWRlbGF5KDEpOworCS8qIFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxp bmVkRmx1c2g6aWxrICovCisJSTkxNV9XUklURShDQUNIRV9NT0RFXzAsCisJCSAgIF9NQVNLRURf QklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRFUl9GTFVTSF9ESVNBQkxFKSk7CiAKLQlpcm9u bGFrZV9zZXRfZHJwcyhkZXZfcHJpdiwgZnN0YXJ0KTsKKwkvKiBXYURpc2FibGVfUmVuZGVyQ2Fj aGVfT3BlcmF0aW9uYWxGbHVzaDppbGsgKi8KKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01B U0tFRF9CSVRfRElTQUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKIAotCWRldl9wcml2LT5pcHMu bGFzdF9jb3VudDEgPQotCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKSArCi0JCWlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRERSRUMpICsKLQkJaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBDU0lFQyk7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19tc2Vj cyhqaWZmaWVzKTsKLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBHRlhFQyk7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0 X3Jhd19ucygpOworCWc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7CiAKLQlzcGlu X3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwlpYnhfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3By aXYpOwogfQogCi1zdGF0aWMgdm9pZCBpcm9ubGFrZV9kaXNhYmxlX2RycHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCitzdGF0aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRpbmcoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSA9ICZpOTE1LT51bmNvcmU7Ci0JdTE2IHJndnN3Y3RsOwotCi0Jc3Bpbl9sb2NrX2ly cSgmbWNoZGV2X2xvY2spOwotCi0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29y ZSwgTUVNU1dDVEwpOwotCi0JLyogQWNrIGludGVycnVwdHMsIGRpc2FibGUgRUZDIGludGVycnVw dCAqLwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCi0JCQkgICBNRU1JTlRSRU4sCi0JCQkg ICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJFTikgJgotCQkJICAgfk1FTUlOVF9F VkFMX0NIR19FTik7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNUUywgTUVN SU5UX0VWQUxfQ0hHKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAotCQkJICAgREVJRVIs Ci0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQp OwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIERFSUlSLCBERV9QQ1VfRVZFTlQpOwotCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCi0JCQkgICBERUlNUiwKLQkJCSAgIGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgREVJTVIpIHwgREVfUENVX0VWRU5UKTsKLQotCS8qIEdvIGJhY2sgdG8g dGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSAqLwotCWlyb25sYWtlX3NldF9kcnBzKGk5MTUsIGk5MTUt Pmlwcy5mc3RhcnQpOwotCW1kZWxheSgxKTsKLQlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsK LQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwotCW1kZWxh eSgxKTsKKwllbnVtIHBpcGUgcGlwZTsKKwl1MzIgdmFsOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZt Y2hkZXZfbG9jayk7CisJLyoKKwkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQb2ludCwgd2Ug bmVlZCB0byBkaXNhYmxlIGNsb2NrCisJICogZ2F0aW5nIGZvciB0aGUgcGFuZWwgcG93ZXIgc2Vx dWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bworCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJl IGFjdGl2ZS4KKwkgKi8KKwlJOTE1X1dSSVRFKFNPVVRIX0RTUENMS19HQVRFX0QsIFBDSF9EUExT VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBQQ0hfRFBMVU5JVF9DTE9DS19HQVRFX0RJ U0FCTEUgfAorCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CisJSTkxNV9XUklU RShTT1VUSF9DSElDS0VOMiwgSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4yKSB8CisJCSAgIERQTFNf RURQX1BQU19GSVhfRElTKTsKKwkvKiBUaGUgYmVsb3cgZml4ZXMgdGhlIHdlaXJkIGRpc3BsYXkg Y29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0ZWQKKwkgKiBkb3dud2FyZCwgb24gKG9ubHkp IExWRFMgb2Ygc29tZSBIUCBsYXB0b3BzIHdpdGggSVZZLgorCSAqLworCWZvcl9lYWNoX3BpcGUo ZGV2X3ByaXYsIHBpcGUpIHsKKwkJdmFsID0gSTkxNV9SRUFEKFRSQU5TX0NISUNLRU4yKHBpcGUp KTsKKwkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKKwkJdmFsICY9IH5U UkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7CisJCWlmIChkZXZfcHJpdi0+dmJ0 LmZkaV9yeF9wb2xhcml0eV9pbnZlcnRlZCkKKwkJCXZhbCB8PSBUUkFOU19DSElDS0VOMl9GRElf UE9MQVJJVFlfUkVWRVJTRUQ7CisJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJBTUVfU1RBUlRf REVMQVlfTUFTSzsKKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1Jf Q09VTlRFUjsKKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfTU9E RVNXSVRDSDsKKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFsKTsKKwl9CisJ LyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBw aXBlKSB7CisJCUk5MTVfV1JJVEUoVFJBTlNfQ0hJQ0tFTjEocGlwZSksCisJCQkgICBUUkFOU19D SElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOworCX0KIH0KIAotLyogVGhlcmUncyBhIGZ1bm55 IGh3IGlzc3VlIHdoZXJlIHRoZSBodyByZXR1cm5zIGFsbCAwIHdoZW4gcmVhZGluZyBmcm9tCi0g KiBHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMuIEhlbmNlIHdlIGFsd2F5cyBuZWVkIHRvIGNvbXB1 dGUgdGhlIGRlc2lyZWQgdmFsdWUKLSAqIG91cnNlbHZlcywgaW5zdGVhZCBvZiBkb2luZyBhIHJt dyBjeWNsZSAod2hpY2ggbWlnaHQgcmVzdWx0IGluIHVzIGNsZWFyaW5nCi0gKiBhbGwgbGltaXRz IGFuZCB0aGUgZ3B1IHN0dWNrIGF0IHdoYXRldmVyIGZyZXF1ZW5jeSBpdCBpcyBhdCBhdG0pLgot ICovCi1zdGF0aWMgdTMyIGludGVsX3Jwc19saW1pdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCB1OCB2YWwpCitzdGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMyIGxpbWl0czsKLQotCS8qIE9ubHkgc2V0IHRo ZSBkb3duIGxpbWl0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgbG93ZXN0IGxldmVsIHRvIGF2b2lk Ci0JICogZ2V0dGluZyBtb3JlIGludGVycnVwdHMsIG90aGVyd2lzZSBsZWF2ZSB0aGlzIGNsZWFy LiBUaGlzIHByZXZlbnRzIGEKLQkgKiByYWNlIGluIHRoZSBodyB3aGVuIGNvbWluZyBvdXQgb2Yg cmM2OiBUaGVyZSdzIGEgdGlueSB3aW5kb3cgd2hlcmUKLQkgKiB0aGUgaHcgcnVucyBhdCB0aGUg bWluaW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0aW5nIHRoZSBkZXNpcmVkCi0JICogZnJlcXVlbmN5 LCBpZiB0aGUgZG93biB0aHJlc2hvbGQgZXhwaXJlcyBpbiB0aGF0IHdpbmRvdyB3ZSB3aWxsIG5v dAotCSAqIHJlY2VpdmUgYSBkb3duIGludGVycnVwdC4gKi8KLQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSA5KSB7Ci0JCWxpbWl0cyA9IChycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgPDwgMjM7 Ci0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlsaW1pdHMgfD0gKHJw cy0+bWluX2ZyZXFfc29mdGxpbWl0KSA8PCAxNDsKLQl9IGVsc2UgewotCQlsaW1pdHMgPSBycHMt Pm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNDsKLQkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKLQkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsKLQl9 CisJdTMyIHRtcDsKIAotCXJldHVybiBsaW1pdHM7CisJdG1wID0gSTkxNV9SRUFEKE1DSF9TU0tQ RCk7CisJaWYgKCh0bXAgJiBNQ0hfU1NLUERfV00wX01BU0spICE9IE1DSF9TU0tQRF9XTTBfVkFM KQorCQlEUk1fREVCVUdfS01TKCJXcm9uZyBNQ0hfU1NLUEQgdmFsdWU6IDB4JTA4eCBUaGlzIGNh biBjYXVzZSB1bmRlcnJ1bnMuXG4iLAorCQkJICAgICAgdG1wKTsKIH0KIAotc3RhdGljIHZvaWQg cnBzX3NldF9wb3dlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBuZXdf cG93ZXIpCitzdGF0aWMgdm9pZCBnZW42X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKLQl1MzIgdGhyZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAw OyAvKiBpbiAlICovCi0JdTMyIGVpX3VwID0gMCwgZWlfZG93biA9IDA7Ci0KLQlsb2NrZGVwX2Fz c2VydF9oZWxkKCZycHMtPnBvd2VyLm11dGV4KTsKKwl1MzIgZHNwY2xrX2dhdGUgPSBJTEtfVlJI VU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CiAKLQlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIu bW9kZSkKLQkJcmV0dXJuOworCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19n YXRlKTsKIAotCS8qIE5vdGUgdGhlIHVuaXRzIGhlcmUgYXJlIG5vdCBleGFjdGx5IDF1cywgYnV0 IDEyODBucy4gKi8KLQlzd2l0Y2ggKG5ld19wb3dlcikgewotCWNhc2UgTE9XX1BPV0VSOgotCQkv KiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5NSUgYnVzeSBvdmVyIDE2bXMgKi8KLQkJZWlfdXAgPSAx NjAwMDsKLQkJdGhyZXNob2xkX3VwID0gOTU7CisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElD S0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElMS19F TFBJTl80MDlfU0VMRUNUKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDg1JSBidXN5 IG92ZXIgMzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gODU7 Ci0JCWJyZWFrOworCS8qIFdhRGlzYWJsZUhpWlBsYW5lc1doZW5NU0FBRW5hYmxlZDpzbmIgKi8K KwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NI SUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsKIAotCWNhc2UgQkVUV0VFTjoK LQkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gOTAlIGJ1c3kgb3ZlciAxM21zICovCi0JCWVpX3Vw ID0gMTMwMDA7Ci0JCXRocmVzaG9sZF91cCA9IDkwOworCS8qIFdhRGlzYWJsZV9SZW5kZXJDYWNo ZV9PcGVyYXRpb25hbEZsdXNoOnNuYiAqLworCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFT S0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VOQUJMRSkpOwogCi0JCS8qIERvd25jbG9jayBp ZiBsZXNzIHRoYW4gNzUlIGJ1c3kgb3ZlciAzMm1zICovCi0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJ dGhyZXNob2xkX2Rvd24gPSA3NTsKLQkJYnJlYWs7CisJLyoKKwkgKiBCU3BlYyByZWNvb21lbmRz IDh4NCB3aGVuIE1TQUEgaXMgdXNlZCwKKwkgKiBob3dldmVyIGluIHByYWN0aWNlIDE2eDQgc2Vl bXMgZmFzdGVzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVu ZCBvbiB0aGUgV0laIGhhc2hpbmcKKwkgKiBkaXNhYmxlIGJpdCwgd2hpY2ggd2UgZG9uJ3QgdG91 Y2ggaGVyZSwgYnV0IGl0J3MgZ29vZAorCSAqIHRvIGtlZXAgaW4gbWluZCAoc2VlIDNEU1RBVEVf UFMgYW5kIDNEU1RBVEVfV00pLgorCSAqLworCUk5MTVfV1JJVEUoR0VONl9HVF9NT0RFLAorCQkg ICBfTUFTS0VEX0ZJRUxEKEdFTjZfV0laX0hBU0hJTkdfTUFTSywgR0VONl9XSVpfSEFTSElOR18x Nng0KSk7CiAKLQljYXNlIEhJR0hfUE9XRVI6Ci0JCS8qIFVwY2xvY2sgaWYgbW9yZSB0aGFuIDg1 JSBidXN5IG92ZXIgMTBtcyAqLwotCQllaV91cCA9IDEwMDAwOwotCQl0aHJlc2hvbGRfdXAgPSA4 NTsKKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwKKwkJICAgX01BU0tFRF9CSVRfRElTQUJMRShD TTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQikpOwogCi0JCS8qIERvd25jbG9jayBpZiBsZXNz IHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCi0JCWVpX2Rvd24gPSAzMjAwMDsKLQkJdGhyZXNo b2xkX2Rvd24gPSA2MDsKLQkJYnJlYWs7Ci0JfQorCUk5MTVfV1JJVEUoR0VONl9VQ0dDVEwxLAor CQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8CisJCSAgIEdFTjZfQkxCVU5JVF9DTE9DS19H QVRFX0RJU0FCTEUgfAorCQkgICBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCi0J LyogV2hlbiBieXQgY2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMK LQkgKiBzdyBmcmVxIGFkanVzdG1lbnRzLCB0aGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBsaWZ0ZWQu CisJLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5JVCkgY2xv Y2sKKwkgKiBnYXRpbmcgZGlzYWJsZSBtdXN0IGJlIHNldC4gIEZhaWx1cmUgdG8gc2V0IGl0IHJl c3VsdHMgaW4KKwkgKiBmbGlja2VyaW5nIHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRlcmluZyBm YWlsdXJlcyBhZnRlcgorCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1lc2EgImZp cmUiIGRlbW8sIGFuZCBVbmlnaW5lCisJICogU2FuY3R1YXJ5IGFuZCBUcm9waWNzLCBhbmQgYXBw YXJlbnRseSBhbnl0aGluZyBlbHNlIHdpdGgKKwkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVsIGRpc2Nh cmQuCisJICoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJpdCAxMSAoUkNDVU5JVCkgbXVz dCBhbHNvIGJlIHNldCwKKwkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0Y2FzZXMg dG8gZmluZCBpdCBvdXQuCisJICoKKwkgKiBXYURpc2FibGVSQ0NVbml0Q2xvY2tHYXRpbmc6c25i CisJICogV2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKIAkgKi8KLQlpZiAoSVNfVkFM TEVZVklFVyhkZXZfcHJpdikpCi0JCWdvdG8gc2tpcF9od193cml0ZTsKLQotCUk5MTVfV1JJVEUo R0VONl9SUF9VUF9FSSwKLQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwgZWlfdXAp KTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfVEhSRVNIT0xELAotCQkgICBHVF9JTlRFUlZBTF9G Uk9NX1VTKGRldl9wcml2LAotCQkJCSAgICAgICBlaV91cCAqIHRocmVzaG9sZF91cCAvIDEwMCkp OwotCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01f VVMoZGV2X3ByaXYsIGVpX2Rvd24pKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hP TEQsCi0JCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsCi0JCQkJICAgICAgIGVpX2Rv d24gKiB0aHJlc2hvbGRfZG93biAvIDEwMCkpOwotCi0JSTkxNV9XUklURShHRU42X1JQX0NPTlRS T0wsCi0JCSAgIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gOSA/IDAgOiBHRU42X1JQX01FRElBX1RV UkJPKSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQ X01FRElBX0lTX0dGWCB8Ci0JCSAgIEdFTjZfUlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8Ci0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Ci0KLXNraXBfaHdfd3JpdGU6 Ci0JcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOwotCXJwcy0+cG93ZXIudXBfdGhyZXNob2xk ID0gdGhyZXNob2xkX3VwOwotCXJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQgPSB0aHJlc2hvbGRf ZG93bjsKLX0KLQotc3RhdGljIHZvaWQgZ2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50IG5ld19wb3dlcjsKLQotCW5ld19wb3dl ciA9IHJwcy0+cG93ZXIubW9kZTsKLQlzd2l0Y2ggKHJwcy0+cG93ZXIubW9kZSkgewotCWNhc2Ug TE9XX1BPV0VSOgotCQlpZiAodmFsID4gcnBzLT5lZmZpY2llbnRfZnJlcSArIDEgJiYKLQkJICAg IHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQluZXdfcG93ZXIgPSBCRVRXRUVOOwotCQlicmVhazsK KwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMiwKKwkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRF X0RJU0FCTEUgfAorCQkgICBHRU42X1JDQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAotCWNh c2UgQkVUV0VFTjoKLQkJaWYgKHZhbCA8PSBycHMtPmVmZmljaWVudF9mcmVxICYmCi0JCSAgICB2 YWwgPCBycHMtPmN1cl9mcmVxKQotCQkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOwotCQllbHNlIGlm ICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgotCQkJIHZhbCA+IHJwcy0+Y3VyX2ZyZXEpCi0JCQlu ZXdfcG93ZXIgPSBISUdIX1BPV0VSOwotCQlicmVhazsKKwkvKiBXYVN0cmlwc0ZhbnNEaXNhYmxl RmFzdENsaXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywK KwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX0ZBU1RDTElQ X0NVTEwpKTsKIAotCWNhc2UgSElHSF9QT1dFUjoKLQkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVx ICsgcnBzLT5ycDBfZnJlcSkgPj4gMSAmJgotCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKLQkJ CW5ld19wb3dlciA9IEJFVFdFRU47Ci0JCWJyZWFrOwotCX0KLQkvKiBNYXgvbWluIGJpbnMgYXJl IHNwZWNpYWwgKi8KLQlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQotCQluZXdf cG93ZXIgPSBMT1dfUE9XRVI7Ci0JaWYgKHZhbCA+PSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkK LQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwkvKgorCSAqIEJzcGVjIHNheXM6CisJICogIlRo aXMgYml0IG11c3QgYmUgc2V0IGlmIDNEU1RBVEVfQ0xJUCBjbGlwIG1vZGUgaXMgc2V0IHRvIG5v cm1hbCBhbmQKKwkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBp cyBtb3JlIHRoYW4gMTYuIgorCSAqLworCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4zLAorCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FUVFJf RkVUQ0gpKTsKIAotCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0ZXgpOwotCWlmIChycHMtPnBv d2VyLmludGVyYWN0aXZlKQotCQluZXdfcG93ZXIgPSBISUdIX1BPV0VSOwotCXJwc19zZXRfcG93 ZXIoZGV2X3ByaXYsIG5ld19wb3dlcik7Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPnBvd2VyLm11dGV4 KTsKLX0KKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYyB0aGUgZm9sbG93aW5nIGJpdHMg c2hvdWxkIGJlCisJICogc2V0IGluIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNo IGFuZCBmYmM6CisJICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDAwCisJICogVGhlIGJp dDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0CisJICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0MjAy MAorCSAqIFRoZSBiaXQxNCBvZiAweDcwMTgwCisJICogVGhlIGJpdDE0IG9mIDB4NzExODAKKwkg KgorCSAqIFdhRmJjQXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKKwkgKi8KKwlJOTE1X1dS SVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAorCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJ Q0tFTjEpIHwKKwkJICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKKwlJOTE1 X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAorCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKKwkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOworCUk5 MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsCisJCSAgIEk5MTVfUkVBRChJTEtfRFNQQ0xLX0dB VEVfRCkgfAorCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8CisJCSAgIElM S19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRSk7CiAKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50 ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUp Ci17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUtPmd0X3BtLnJwczsKKwlnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwogCi0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDYp Ci0JCXJldHVybjsKKwljcHRfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwogCi0JbXV0ZXhf bG9jaygmcnBzLT5wb3dlci5tdXRleCk7Ci0JaWYgKGludGVyYWN0aXZlKSB7Ci0JCWlmICghcnBz LT5wb3dlci5pbnRlcmFjdGl2ZSsrICYmIFJFQURfT05DRShpOTE1LT5ndC5hd2FrZSkpCi0JCQly cHNfc2V0X3Bvd2VyKGk5MTUsIEhJR0hfUE9XRVIpOwotCX0gZWxzZSB7Ci0JCUdFTV9CVUdfT04o IXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUpOwotCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Ci0J fQotCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7CisJZ2VuNl9jaGVja19tY2hfc2V0 dXAoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMgdTMyIGdlbjZfcnBzX3BtX21hc2soc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCitzdGF0aWMgdm9pZCBnZW43X3NldHVw X2ZpeGVkX2Z1bmNfc2NoZWR1bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IHsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIg bWFzayA9IDA7Ci0KLQkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnVwdHMgZm9yIGJvdGgg dXAvZG93biBpbiBtYW51YWwgbW9kZSAqLwotCWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3NvZnRs aW1pdCkKLQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX0RP V05fVEhSRVNIT0xEIHwgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQ7Ci0JaWYgKHZhbCA8IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0KQotCQltYXNrIHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCB8 IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwotCi0JbWFzayAmPSBkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50czsKLQotCXJldHVybiBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2LCB+bWFz ayk7Ci19Ci0KLS8qIGdlbjZfc2V0X3JwcyBpcyBjYWxsZWQgdG8gdXBkYXRlIHRoZSBmcmVxdWVu Y3kgcmVxdWVzdCwgYnV0IHNob3VsZCBhbHNvIGJlCi0gKiBjYWxsZWQgd2hlbiB0aGUgcmFuZ2Ug KG1pbl9kZWxheSBhbmQgbWF4X2RlbGF5KSBpcyBtb2RpZmllZCBzbyB0aGF0IHdlIGNhbgotICog dXBkYXRlIHRoZSBHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMgcmVnaXN0ZXIgYWNjb3JkaW5nbHku ICovCi1zdGF0aWMgaW50IGdlbjZfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 X3BtLnJwczsKLQotCS8qIG1pbi9tYXggZGVsYXkgbWF5IHN0aWxsIGhhdmUgYmVlbiBtb2RpZmll ZCBzbyBiZSBzdXJlIHRvCi0JICogd3JpdGUgdGhlIGxpbWl0cyB2YWx1ZS4KLQkgKi8KLQlpZiAo dmFsICE9IHJwcy0+Y3VyX2ZyZXEpIHsKLQkJZ2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoZGV2X3By aXYsIHZhbCk7Ci0KLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJCUk5MTVfV1JJ VEUoR0VONl9SUE5TV1JFUSwKLQkJCQkgICBHRU45X0ZSRVFVRU5DWSh2YWwpKTsKLQkJZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKLQkJCUk5 MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKLQkJCQkgICBIU1dfRlJFUVVFTkNZKHZhbCkpOwotCQll bHNlCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0JCQkJICAgR0VONl9GUkVRVUVOQ1ko dmFsKSB8Ci0JCQkJICAgR0VONl9PRkZTRVQoMCkgfAotCQkJCSAgIEdFTjZfQUdHUkVTU0lWRV9U VVJCTyk7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHdlIGNvbnRpbnVlIHRvIGdldCBpbnRlcnJ1cHRz Ci0JICogdW50aWwgd2UgaGl0IHRoZSBtaW5pbXVtIG9yIG1heGltdW0gZnJlcXVlbmNpZXMuCi0J ICovCi0JSTkxNV9XUklURShHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMsIGludGVsX3Jwc19saW1p dHMoZGV2X3ByaXYsIHZhbCkpOwotCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfcnBz X3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwotCi0JcnBzLT5jdXJfZnJlcSA9IHZhbDsKLQl0cmFj ZV9pbnRlbF9ncHVfZnJlcV9jaGFuZ2UoaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19zZXRfcnBzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQotewotCWludCBlcnI7Ci0KLQlpZiAo V0FSTl9PTkNFKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmICh2YWwgJiAxKSwKLQkJICAgICAg Ik9kZCBHUFUgZnJlcSB2YWx1ZVxuIikpCi0JCXZhbCAmPSB+MTsKLQotCUk5MTVfV1JJVEUoR0VO Nl9QTUlOVFJNU0ssIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwotCi0JaWYgKHZh bCAhPSBkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxKSB7Ci0JCXZsdl9wdW5pdF9nZXQoZGV2 X3ByaXYpOwotCQllcnIgPSB2bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVf RlJFUV9SRVEsIHZhbCk7Ci0JCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwotCQlpZiAoZXJyKQot CQkJcmV0dXJuIGVycjsKLQotCQlnZW42X3NldF9ycHNfdGhyZXNob2xkcyhkZXZfcHJpdiwgdmFs KTsKLQl9Ci0KLQlkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxID0gdmFsOwotCXRyYWNlX2lu dGVsX2dwdV9mcmVxX2NoYW5nZShpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotLyogdmx2X3NldF9ycHNfaWRsZTogU2V0IHRoZSBmcmVxdWVuY3kgdG8g aWRsZSwgaWYgR2Z4IGNsb2NrcyBhcmUgZG93bgotICoKLSAqICogSWYgR2Z4IGlzIElkbGUsIHRo ZW4KLSAqIDEuIEZvcmNld2FrZSBNZWRpYSB3ZWxsLgotICogMi4gUmVxdWVzdCBpZGxlIGZyZXEu Ci0gKiAzLiBSZWxlYXNlIEZvcmNld2FrZSBvZiBNZWRpYSB3ZWxsLgotKi8KLXN0YXRpYyB2b2lk IHZsdl9zZXRfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewot CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCXUzMiB2YWwg PSBycHMtPmlkbGVfZnJlcTsKLQlpbnQgZXJyOwotCi0JaWYgKHJwcy0+Y3VyX2ZyZXEgPD0gdmFs KQotCQlyZXR1cm47Ci0KLQkvKiBUaGUgcHVuaXQgZGVsYXlzIHRoZSB3cml0ZSBvZiB0aGUgZnJl cXVlbmN5IGFuZCB2b2x0YWdlIHVudGlsIGl0Ci0JICogZGV0ZXJtaW5lcyB0aGUgR1BVIGlzIGF3 YWtlLiBEdXJpbmcgbm9ybWFsIHVzYWdlIHdlIGRvbid0IHdhbnQgdG8KLQkgKiB3YXN0ZSBwb3dl ciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMgc2xlZXBpbmcgKHJjNikuCi0J ICogSG93ZXZlciwgdGhlIEdQVSBhbmQgZHJpdmVyIGlzIG5vdyBpZGxlIGFuZCB3ZSBkbyBub3Qg d2FudCB0byBkZWxheQotCSAqIHN3aXRjaGluZyB0byBtaW5pbXVtIHZvbHRhZ2UgKHJlZHVjaW5n IHBvd2VyIHdoaWxzdCBpZGxlKSBhcyB3ZSBkbwotCSAqIG5vdCBleHBlY3QgdG8gYmUgd29rZW4g aW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZsdXNoIHRoZQotCSAqIGNoYW5nZSBieSB3 YWtpbmcgdGhlIGRldmljZS4KLQkgKgotCSAqIFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBw b3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0byB0cmljayB0aGUKLQkgKiBwdW5pdCBpbnRvIGNv bW1pdHRpbmcgdGhlIHZvbHRhZ2UgY2hhbmdlKSBhcyB0aGF0IHRha2VzIGEgbG90IGxlc3MKLQkg KiBwb3dlciB0aGFuIHRoZSByZW5kZXIgcG93ZXJ3ZWxsLgotCSAqLwotCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfTUVESUEpOwotCWVyciA9 IHZhbGxleXZpZXdfc2V0X3JwcyhkZXZfcHJpdiwgdmFsKTsKLQlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKLQotCWlmIChlcnIp Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHNldCBSUFMgZm9yIGlkbGVcbiIpOwotfQotCi12b2lk IGdlbjZfcnBzX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JbXV0ZXhfbG9j aygmcnBzLT5sb2NrKTsKLQlpZiAocnBzLT5lbmFibGVkKSB7Ci0JCXU4IGZyZXE7Ci0KLQkJaWYg KGRldl9wcml2LT5wbV9ycHNfZXZlbnRzICYgR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEKQotCQkJ Z2VuNl9ycHNfcmVzZXRfZWkoZGV2X3ByaXYpOwotCQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNL LAotCQkJICAgZ2VuNl9ycHNfcG1fbWFzayhkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOwotCi0J CWdlbjZfZW5hYmxlX3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKLQotCQkvKiBVc2UgdGhlIHVz ZXIncyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1aWRlLCBidXQgZm9yIGJldHRlcgotCQkgKiBw ZXJmb3JtYW5jZSwganVtcCBkaXJlY3RseSB0byBSUGUgYXMgb3VyIHN0YXJ0aW5nIGZyZXF1ZW5j eS4KLQkJICovCi0JCWZyZXEgPSBtYXgocnBzLT5jdXJfZnJlcSwKLQkJCSAgIHJwcy0+ZWZmaWNp ZW50X2ZyZXEpOwotCi0JCWlmIChpbnRlbF9zZXRfcnBzKGRldl9wcml2LAotCQkJCSAgY2xhbXAo ZnJlcSwKLQkJCQkJcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsCi0JCQkJCXJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0KSkpCi0JCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gc2V0IGlkbGUgZnJl cXVlbmN5XG4iKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwotfQotCi12b2lkIGdl bjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVj dCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JLyogRmx1c2ggb3Vy IGJvdHRvbS1oYWxmIHNvIHRoYXQgaXQgZG9lcyBub3QgcmFjZSB3aXRoIHVzCi0JICogc2V0dGlu ZyB0aGUgaWRsZSBmcmVxdWVuY3kgYW5kIHNvIHRoYXQgaXQgaXMgYm91bmRlZCBieQotCSAqIG91 ciBycG0gd2FrZXJlZi4gQW5kIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cyB0byBzdG9wIGFu eQotCSAqIGZ1dGhlciBSUFMgcmVjbG9ja2luZyB3aGlsc3Qgd2UgYXJlIGFzbGVlcC4KLQkgKi8K LQlnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwotCi0JbXV0ZXhfbG9jaygm cnBzLT5sb2NrKTsKLQlpZiAocnBzLT5lbmFibGVkKSB7Ci0JCWlmIChJU19WQUxMRVlWSUVXKGRl dl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJCXZsdl9zZXRfcnBzX2lkbGUo ZGV2X3ByaXYpOwotCQllbHNlCi0JCQlnZW42X3NldF9ycHMoZGV2X3ByaXYsIHJwcy0+aWRsZV9m cmVxKTsKLQkJcnBzLT5sYXN0X2FkaiA9IDA7Ci0JCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ss Ci0JCQkgICBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2LCB+MCkpOwotCX0KLQlt dXRleF91bmxvY2soJnJwcy0+bG9jayk7Ci19Ci0KLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJnJxLT5pOTE1 LT5ndF9wbS5ycHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib29sIGJvb3N0OwotCi0JLyog VGhpcyBpcyBpbnRlbnRpb25hbGx5IHJhY3khIFdlIHBlZWsgYXQgdGhlIHN0YXRlIGhlcmUsIHRo ZW4KLQkgKiB2YWxpZGF0ZSBpbnNpZGUgdGhlIFJQUyB3b3JrZXIuCi0JICovCi0JaWYgKCFycHMt PmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWlmIChpOTE1X3JlcXVlc3Rfc2lnbmFsZWQocnEpKQot CQlyZXR1cm47Ci0KLQkvKiBTZXJpYWxpemVzIHdpdGggaTkxNV9yZXF1ZXN0X3JldGlyZSgpICov Ci0JYm9vc3QgPSBmYWxzZTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsK LQlpZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJvb3N0KHJxKSAmJgotCSAgICAhZG1hX2ZlbmNl X2lzX3NpZ25hbGVkX2xvY2tlZCgmcnEtPmZlbmNlKSkgewotCQlib29zdCA9ICFhdG9taWNfZmV0 Y2hfaW5jKCZycHMtPm51bV93YWl0ZXJzKTsKLQkJcnEtPmZsYWdzIHw9IEk5MTVfUkVRVUVTVF9X QUlUQk9PU1Q7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7 Ci0JaWYgKCFib29zdCkKLQkJcmV0dXJuOwotCi0JaWYgKFJFQURfT05DRShycHMtPmN1cl9mcmVx KSA8IHJwcy0+Ym9vc3RfZnJlcSkKLQkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKLQotCWF0 b21pY19pbmMoJnJwcy0+Ym9vc3RzKTsKLX0KLQotaW50IGludGVsX3NldF9ycHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JaW50IGVycjsKLQotCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJnJwcy0+bG9jayk7Ci0JR0VNX0JVR19PTih2YWwgPiBycHMtPm1heF9mcmVxKTsKLQlH RU1fQlVHX09OKHZhbCA8IHJwcy0+bWluX2ZyZXEpOwotCi0JaWYgKCFycHMtPmVuYWJsZWQpIHsK LQkJcnBzLT5jdXJfZnJlcSA9IHZhbDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKElTX1ZBTExF WVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQllcnIgPSB2YWxs ZXl2aWV3X3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQllcnIgPSBnZW42X3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBnZW45 X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1 X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfZGlzYWJs ZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUo R0VONl9SUE5TV1JFUSwgMSA8PCAzMSk7Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsIDAp OwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLCAwKTsK LX0KLQotc3RhdGljIHZvaWQgZ2VuNl9pbml0X3Jwc19mcmVxdWVuY2llcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndF9wbS5ycHM7Ci0KLQkvKiBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBpbiB1bml0cyBv ZiA1ME1IeiAqLwotCi0JLyogc3RhdGljIHZhbHVlcyBmcm9tIEhXOiBSUDAgPiBSUDEgPiBSUG4g KG1pbl9mcmVxKSAqLwotCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewotCQl1MzIgcnBfc3Rh dGVfY2FwID0gSTkxNV9SRUFEKEJYVF9SUF9TVEFURV9DQVApOwotCQlycHMtPnJwMF9mcmVxID0g KHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwotCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0YXRl X2NhcCA+PiAgOCkgJiAweGZmOwotCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAg MCkgJiAweGZmOwotCX0gZWxzZSB7Ci0JCXUzMiBycF9zdGF0ZV9jYXAgPSBJOTE1X1JFQUQoR0VO Nl9SUF9TVEFURV9DQVApOwotCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkg JiAweGZmOwotCQlycHMtPnJwMV9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgOCkgJiAweGZmOwot CQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwotCX0KLQkvKiBo d19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLwotCXJwcy0+bWF4 X2ZyZXEgPSBycHMtPnJwMF9mcmVxOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHJwcy0+cnAx X2ZyZXE7Ci0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJp dikgfHwKLQkgICAgSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCkgewotCQl1MzIgZGRjY19zdGF0dXMgPSAwOwotCi0JCWlmIChzYW5keWJyaWRnZV9wY29k ZV9yZWFkKGRldl9wcml2LAotCQkJCQkgICBIU1dfUENPREVfRFlOQU1JQ19EVVRZX0NZQ0xFX0NP TlRST0wsCi0JCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKLQkJCXJwcy0+ZWZmaWNp ZW50X2ZyZXEgPQotCQkJCWNsYW1wX3QodTgsCi0JCQkJCSgoZGRjY19zdGF0dXMgPj4gOCkgJiAw eGZmKSwKLQkJCQkJcnBzLT5taW5fZnJlcSwKLQkJCQkJcnBzLT5tYXhfZnJlcSk7Ci0JfQotCi0J aWYgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsK LQkJLyogU3RvcmUgdGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGlj aCBpcwotCQkgKiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKLQkJICovCi0JCXJw cy0+cnAwX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5ycDFfZnJlcSAqPSBHRU45 X0ZSRVFfU0NBTEVSOwotCQlycHMtPm1pbl9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Ci0JCXJw cy0+bWF4X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBzLT5lZmZpY2llbnRfZnJlcSAq PSBHRU45X0ZSRVFfU0NBTEVSOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgaW50ICgqc2V0KShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqLCB1OCkpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRl dl9wcml2LT5ndF9wbS5ycHM7Ci0JdTggZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Ci0KLQkvKiBmb3Jj ZSBhIHJlc2V0ICovCi0JcnBzLT5wb3dlci5tb2RlID0gLTE7Ci0JcnBzLT5jdXJfZnJlcSA9IC0x OwotCi0JaWYgKHNldChkZXZfcHJpdiwgZnJlcSkpCi0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJl c2V0IFJQUyB0byBpbml0aWFsIHZhbHVlc1xuIik7Ci19Ci0KLS8qIFNlZSB0aGUgR2VuOV9HVF9Q TV9Qcm9ncmFtbWluZ19HdWlkZSBkb2MgZm9yIHRoZSBiZWxvdyAqLwotc3RhdGljIHZvaWQgZ2Vu OV9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRl bF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7 Ci0KLQkvKiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZvciBSUFMgKi8KLQlpZiAo SVNfR0VOKGRldl9wcml2LCA5KSkKLQkJSTkxNV9XUklURShHRU42X1JDX1ZJREVPX0ZSRVEsCi0J CQlHRU45X0ZSRVFVRU5DWShkZXZfcHJpdi0+Z3RfcG0ucnBzLnJwMV9mcmVxKSk7Ci0KLQkvKiAx IHNlY29uZCB0aW1lb3V0Ki8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USU1FT1VULAotCQlH VF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCAxMDAwMDAwKSk7Ci0KLQlJOTE1X1dSSVRFKEdF TjZfUlBfSURMRV9IWVNURVJTSVMsIDB4YSk7Ci0KLQkvKiBMZWFuaW5nIG9uIHRoZSBiZWxvdyBj YWxsIHRvIGdlbjZfc2V0X3JwcyB0byBwcm9ncmFtL3NldHVwIHRoZQotCSAqIFVwL0Rvd24gRUkg JiB0aHJlc2hvbGQgcmVnaXN0ZXJzLCBhcyB3ZWxsIGFzIHRoZSBSUF9DT05UUk9MLAotCSAqIFJQ X0lOVEVSUlVQVF9MSU1JVFMgJiBSUE5TV1JFUSByZWdpc3RlcnMgKi8KLQlyZXNldF9ycHMoZGV2 X3ByaXYsIGdlbjZfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2 X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjhfZW5h YmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQkvKiAxIFBy b2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCi0JSTkxNV9XUklURShHRU42 X1JQTlNXUkVRLAotCQkgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKLQlJOTE1X1dS SVRFKEdFTjZfUkNfVklERU9fRlJFUSwKLQkJICAgSFNXX0ZSRVFVRU5DWShycHMtPnJwMV9mcmVx KSk7Ci0JLyogTkI6IERvY3Mgc2F5IDFzLCBhbmQgMTAwMDAwMCAtIHdoaWNoIGFyZW4ndCBlcXVp dmFsZW50ICovCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMDAwIC8g MTI4KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLwotCi0JLyogRG9jcyByZWNvbW1lbmQgOTAwTUh6 LCBhbmQgMzAwIE1IeiByZXNwZWN0aXZlbHkgKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5URVJS VVBUX0xJTUlUUywKLQkJICAgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjQgfAotCQkgICBy cHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNik7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBf VEhSRVNIT0xELCA3NjAwMDAwIC8gMTI4KTsgLyogNzZtcyBidXN5bmVzcyBwZXIgRUksIDkwJSAq LwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMzEzMDAwMDAgLyAxMjgpOyAv KiAzMTNtcyBidXN5bmVzcyBwZXIgRUksIDcwJSovCi0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJ LCA2NjAwMCk7IC8qIDg0LjQ4bXMsIFhYWDogcmFuZG9tPyAqLwotCUk5MTVfV1JJVEUoR0VONl9S UF9ET1dOX0VJLCAzNTAwMDApOyAvKiA0NDhtcywgWFhYOiByYW5kb20/ICovCi0KLQlJOTE1X1dS SVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCS8qIDI6IEVuYWJsZSBSUFMgKi8K LQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9UVVJCTyB8 Ci0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAotCQkgICBHRU42X1JQX01FRElB X0lTX0dGWCB8Ci0JCSAgIEdFTjZfUlBfRU5BQkxFIHwKLQkJICAgR0VONl9SUF9VUF9CVVNZX0FW RyB8Ci0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Ci0KLQlyZXNldF9ycHMoZGV2X3ByaXYs IGdlbjZfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYt PnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjZfZW5hYmxlX3Jw cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyogSGVyZSBiZWdpbnMg YSBtYWdpYyBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0ZXMgdG8gZW5hYmxlCi0JICogYXV0by1k b3duY2xvY2tpbmcuCi0JICoKLQkgKiBQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgdmFsdWUg aW4gZXhwb3NpbmcgdGhlc2UgdG8KLQkgKiB1c2Vyc3BhY2UuLi4KLQkgKi8KLQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci0KLQkv KiBQb3dlciBkb3duIGlmIGNvbXBsZXRlbHkgaWRsZSBmb3Igb3ZlciA1MG1zICovCi0JSTkxNV9X UklURShHRU42X1JQX0RPV05fVElNRU9VVCwgNTAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9J RExFX0hZU1RFUlNJUywgMTApOwotCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp OwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNF V0FLRV9BTEwpOwotfQotCi1zdGF0aWMgaW50IGNoZXJyeXZpZXdfcnBzX21heF9mcmVxKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycDA7Ci0KLQl2YWwg PSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKLQot CXN3aXRjaCAoUlVOVElNRV9JTkZPKGRldl9wcml2KS0+c3NldS5ldV90b3RhbCkgewotCWNhc2Ug ODoKLQkJLyogKDIgKiA0KSBjb25maWcgKi8KLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9B VF9WTUFYXzJTUzRFVV9GVVNFX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxMjoKLQkJLyogKDIg KiA2KSBjb25maWcgKi8KLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzZF VV9GVVNFX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJLyogKDIgKiA4KSBjb25maWcg Ki8KLQlkZWZhdWx0OgotCQkvKiBTZXR0aW5nICgyICogOCkgTWluIFJQMCBmb3IgYW55IG90aGVy IGNvbWJpbmF0aW9uICovCi0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M4 RVVfRlVTRV9TSElGVCk7Ci0JCWJyZWFrOwotCX0KLQotCXJwMCA9IChycDAgJiBGQl9HRlhfRlJF UV9GVVNFX01BU0spOwotCi0JcmV0dXJuIHJwMDsKLX0KLQotc3RhdGljIGludCBjaGVycnl2aWV3 X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMy IHZhbCwgcnBlOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX0dQVV9E VVRZQ1lDTEVfUkVHKTsKLQlycGUgPSAodmFsID4+IFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZS RVFfU0hJRlQpICYgUFVOSVRfR1BVX0RVVFlDWUNMRV9SUEVfRlJFUV9NQVNLOwotCi0JcmV0dXJu IHJwZTsKLX0KLQotc3RhdGljIGludCBjaGVycnl2aWV3X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMTsKLQotCXZhbCA9IHZs dl9wdW5pdF9yZWFkKGRldl9wcml2LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0UpOwotCXJwMSA9 ICh2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwotCi0JcmV0dXJuIHJwMTsKLX0KLQotc3Rh dGljIHUzMiBjaGVycnl2aWV3X3Jwc19taW5fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbCwgcnBuOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2 X3ByaXYsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7Ci0JcnBuID0gKCh2YWwgPj4gRkJfR0ZY X0ZNSU5fQVRfVk1JTl9GVVNFX1NISUZUKSAmCi0JCSAgICAgICBGQl9HRlhfRlJFUV9GVVNFX01B U0spOwotCi0JcmV0dXJuIHJwbjsKLX0KLQotc3RhdGljIGludCB2YWxsZXl2aWV3X3Jwc19ndWFy X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJw MTsKLQotCXZhbCA9IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZV U0UpOwotCi0JcnAxID0gKHZhbCAmIEZCX0dGWF9GR1VBUkFOVEVFRF9GUkVRX0ZVU0VfTUFTSykg Pj4gRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9TSElGVDsKLQotCXJldHVybiBycDE7Ci19 Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwMDsKLQotCXZhbCA9IHZsdl9uY19yZWFk KGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOwotCi0JcnAwID0gKHZhbCAmIEZC X0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNFX1NISUZUOwot CS8qIENsYW1wIHRvIG1heCAqLwotCXJwMCA9IG1pbl90KHUzMiwgcnAwLCAweGVhKTsKLQotCXJl dHVybiBycDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwZTsKLQotCXZhbCA9 IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfTE8pOwotCXJw ZSA9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9MT19NQVNLKSA+PiBGQl9GTUFYX1ZNSU5fRlJF UV9MT19TSElGVDsKLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhf Rk1BWF9GVVNFX0hJKTsKLQlycGUgfD0gKHZhbCAmIEZCX0ZNQVhfVk1JTl9GUkVRX0hJX01BU0sp IDw8IDU7Ci0KLQlyZXR1cm4gcnBlOwotfQotCi1zdGF0aWMgaW50IHZhbGxleXZpZXdfcnBzX21p bl9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsOwot Ci0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfTEZNKSAmIDB4 ZmY7Ci0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8gSEFTIDEu MS42LjMgdGhlIG1pbmltdW0gdmFsdWUKLQkgKiBmb3IgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGlu IEdQTEwgbW9kZSBpcyAweGMxLiBDb250cmFyeSB0byB0aGlzIG9uCi0JICogYSBCWVQtTSBCMCB0 aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hlbiBzZXR0aW5nCi0J ICogYSBmcmVxdWVuY3kgUHVuaXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4YzAuIENs YW1wIGl0IDB4YzAKLQkgKiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IFB1bml0IGFjY2Vw dHMuCi0JICovCi0JcmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKLX0KLQotc3RhdGljIHZv aWQgdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5ncGxsX3JlZl9mcmVxID0KLQkJdmx2X2dldF9j Y2tfY2xvY2soZGV2X3ByaXYsICJHUExMIHJlZiIsCi0JCQkJICBDQ0tfR1BMTF9DTE9DS19DT05U Uk9MLAotCQkJCSAgZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigi R1BMTCByZWZlcmVuY2UgZnJlcTogJWQga0h6XG4iLAotCQkJIGRldl9wcml2LT5ndF9wbS5ycHMu Z3BsbF9yZWZfZnJlcSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCXUzMiB2YWw7Ci0KLQl2bHZfaW9z Zl9zYl9nZXQoZGV2X3ByaXYsCi0JCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKLQkJCUJJVChW TFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwotCi0Jdmx2X2luaXRf Z3BsbF9yZWZfZnJlcShkZXZfcHJpdik7Ci0KLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJp diwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Ci0Jc3dpdGNoICgodmFsID4+IDYpICYgMykgewot CWNhc2UgMDoKLQljYXNlIDE6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDgwMDsKLQkJYnJlYWs7 Ci0JY2FzZSAyOgotCQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSAxMDY2OwotCQlicmVhazsKLQljYXNl IDM6Ci0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDEzMzM7Ci0JCWJyZWFrOwotCX0KLQlEUk1fREVC VUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9mcmVxKTsKLQot CXJwcy0+bWF4X2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19tYXhfZnJlcShkZXZfcHJpdik7Ci0JcnBz LT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWF4IEdQVSBm cmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t YXhfZnJlcSksCi0JCQkgcnBzLT5tYXhfZnJlcSk7Ci0KLQlycHMtPmVmZmljaWVudF9mcmVxID0g dmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQ ZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IHJwcy0+ZWZmaWNpZW50X2ZyZXEpLAotCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwotCi0JcnBz LT5ycDFfZnJlcSA9IHZhbGxleXZpZXdfcnBzX2d1YXJfZnJlcShkZXZfcHJpdik7Ci0JRFJNX0RF QlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJ IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9mcmVxKSwKLQkJCSBycHMtPnJwMV9m cmVxKTsKLQotCXJwcy0+bWluX2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19taW5fZnJlcShkZXZfcHJp dik7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJ CSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSksCi0JCQkgcnBzLT5taW5f ZnJlcSk7Ci0KLQl2bHZfaW9zZl9zYl9wdXQoZGV2X3ByaXYsCi0JCQlCSVQoVkxWX0lPU0ZfU0Jf UFVOSVQpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZMVl9JT1NGX1NCX0ND SykpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsOwotCi0Jdmx2X2lvc2Zfc2JfZ2V0KGRl dl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0Jf TkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLQotCXZsdl9pbml0X2dwbGxfcmVmX2Zy ZXEoZGV2X3ByaXYpOwotCi0JdmFsID0gdmx2X2Nja19yZWFkKGRldl9wcml2LCBDQ0tfRlVTRV9S RUcpOwotCi0Jc3dpdGNoICgodmFsID4+IDIpICYgMHg3KSB7Ci0JY2FzZSAzOgotCQlkZXZfcHJp di0+bWVtX2ZyZXEgPSAyMDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfcHJpdi0+bWVt X2ZyZXEgPSAxNjAwOwotCQlicmVhazsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVk OiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7Ci0KLQlycHMtPm1heF9mcmVxID0gY2hl cnJ5dmlld19ycHNfbWF4X2ZyZXEoZGV2X3ByaXYpOwotCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1h eF9mcmVxOwotCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIs Ci0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAotCQkJIHJwcy0+ bWF4X2ZyZXEpOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX3JwZV9m cmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVx KSwKLQkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCXJwcy0+cnAxX2ZyZXEgPSBjaGVycnl2 aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy KSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYs IHJwcy0+cnAxX2ZyZXEpLAotCQkJIHJwcy0+cnAxX2ZyZXEpOwotCi0JcnBzLT5taW5fZnJlcSA9 IGNoZXJyeXZpZXdfcnBzX21pbl9mcmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJt aW4gR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPm1pbl9mcmVxKSwKLQkJCSBycHMtPm1pbl9mcmVxKTsKLQotCXZsdl9pb3NmX3NiX3B1 dChkZXZfcHJpdiwKLQkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAotCQkJQklUKFZMVl9JT1NG X1NCX05DKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Ci0KLQlXQVJOX09OQ0UoKHJwcy0+ bWF4X2ZyZXEgfCBycHMtPmVmZmljaWVudF9mcmVxIHwgcnBzLT5ycDFfZnJlcSB8Ci0JCSAgIHJw cy0+bWluX2ZyZXEpICYgMSwKLQkJICAiT2RkIEdQVSBmcmVxIHZhbHVlc1xuIik7Ci19Ci0KLXN0 YXRpYyB2b2lkIGNoZXJyeXZpZXdfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbDsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZk ZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCS8qIDE6IFByb2dyYW0gZGVmYXVs dHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCi0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElN RU9VVCwgMTAwMDAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNTk0MDAp OwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1MDAwKTsKLQlJOTE1X1dS SVRFKEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9FSSwg MzUwMDAwKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwotCi0J LyogMjogRW5hYmxlIFJQUyAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICBH RU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlgg fAotCQkgICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkg ICBHRU42X1JQX0RPV05fSURMRV9BVkcpOwotCi0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCi0J dmx2X3B1bml0X2dldChkZXZfcHJpdik7Ci0KLQl2YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZf U09DX1REUF9FTiB8IENIVl9CSUFTX0NQVV81MF9TT0NfNTA7Ci0Jdmx2X3B1bml0X3dyaXRlKGRl dl9wcml2LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOwotCi0JdmFsID0gdmx2X3B1bml0 X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMpOwotCi0Jdmx2X3B1bml0X3B1 dChkZXZfcHJpdik7Ci0KLQkvKiBSUFMgY29kZSBhc3N1bWVzIEdQTEwgaXMgdXNlZCAqLwotCVdB Uk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90IGVuYWJsZWRcbiIpOwot Ci0JRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVkPyAlc1xuIiwgeWVzbm8odmFsICYgR1BM TEVOQUJMRSkpOwotCURSTV9ERUJVR19EUklWRVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFs KTsKLQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgdmFsbGV5dmlld19zZXRfcnBzKTsKLQotCWludGVs X3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsK LX0KLQotc3RhdGljIHZvaWQgdmFsbGV5dmlld19lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9nZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JSTkxNV9XUklURShH RU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX1RI UkVTSE9MRCwgNTk0MDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RIUkVTSE9MRCwgMjQ1 MDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfRUksIDY2MDAwKTsKLQlJOTE1X1dSSVRFKEdF TjZfUlBfRE9XTl9FSSwgMzUwMDAwKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RF UlNJUywgMTApOwotCi0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsCi0JCSAgIEdFTjZfUlBf TUVESUFfVFVSQk8gfAotCQkgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAg R0VONl9SUF9NRURJQV9JU19HRlggfAotCQkgICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZf UlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42X1JQX0RPV05fSURMRV9DT05UKTsKLQotCXZsdl9w dW5pdF9nZXQoZGV2X3ByaXYpOwotCi0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCi0JdmFsID0g VkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBWTFZfQklBU19DUFVfMTI1X1NPQ184 NzU7Ci0Jdmx2X3B1bml0X3dyaXRlKGRldl9wcml2LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2 YWwpOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJF UV9TVFMpOwotCi0Jdmx2X3B1bml0X3B1dChkZXZfcHJpdik7Ci0KLQkvKiBSUFMgY29kZSBhc3N1 bWVzIEdQTEwgaXMgdXNlZCAqLwotCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiR1BMTCBlbmFibGVk PyAlc1xuIiwgeWVzbm8odmFsICYgR1BMTEVOQUJMRSkpOwotCURSTV9ERUJVR19EUklWRVIoIkdQ VSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKLQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgdmFsbGV5 dmlld19zZXRfcnBzKTsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+ dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZWxf cHhmcmVxKHUzMiB2aWRmcmVxKQotewotCXVuc2lnbmVkIGxvbmcgZnJlcTsKLQlpbnQgZGl2ID0g KHZpZGZyZXEgJiAweDNmMDAwMCkgPj4gMTY7Ci0JaW50IHBvc3QgPSAodmlkZnJlcSAmIDB4MzAw MCkgPj4gMTI7Ci0JaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKLQotCWlmICghcHJlKQotCQly ZXR1cm4gMDsKLQotCWZyZXEgPSAoKGRpdiAqIDEzMzMzMykgLyAoKDE8PHBvc3QpICogcHJlKSk7 Ci0KLQlyZXR1cm4gZnJlcTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKLQl1 MTYgaTsKLQl1MTYgdDsKLQl1MTYgbTsKLQl1MTYgYzsKLX0gY3BhcmFtc1tdID0gewotCXsgMSwg MTMzMywgMzAxLCAyODY2NCB9LAotCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAotCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCi0JeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCi0JeyAwLCAxMDY2LCAy NzYsIDI3NjA1IH0sCi0JeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKLX07Ci0KLXN0YXRpYyB1bnNp Z25lZCBsb25nIF9faTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0JdTY0IHRvdGFsX2NvdW50LCBkaWZmLCByZXQ7Ci0JdTMyIGNvdW50MSwgY291 bnQyLCBjb3VudDMsIG0gPSAwLCBjID0gMDsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXNf dG9fbXNlY3MoamlmZmllcyksIGRpZmYxOwotCWludCBpOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmbWNoZGV2X2xvY2spOwotCi0JZGlmZjEgPSBub3cgLSBkZXZfcHJpdi0+aXBzLmxhc3RfdGlt ZTE7Ci0KLQkvKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2luZyB0b28g ZmFzdC4KLQkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0cyBpZiB3ZSBh cmUgcG9sbGluZwotCSAqIGZhc3RlciB0aGFuIG9uY2UgaW4gMTBtcywgc28ganVzdCByZXR1cm4g dGhlIHNhdmVkIHZhbHVlCi0JICogaW4gc3VjaCBjYXNlcy4KLQkgKi8KLQlpZiAoZGlmZjEgPD0g MTApCi0JCXJldHVybiBkZXZfcHJpdi0+aXBzLmNoaXBzZXRfcG93ZXI7Ci0KLQljb3VudDEgPSBJ OTE1X1JFQUQoRE1JRUMpOwotCWNvdW50MiA9IEk5MTVfUkVBRChERFJFQyk7Ci0JY291bnQzID0g STkxNV9SRUFEKENTSUVDKTsKLQotCXRvdGFsX2NvdW50ID0gY291bnQxICsgY291bnQyICsgY291 bnQzOwotCi0JLyogRklYTUU6IGhhbmRsZSBwZXItY291bnRlciBvdmVyZmxvdyAqLwotCWlmICh0 b3RhbF9jb3VudCA8IGRldl9wcml2LT5pcHMubGFzdF9jb3VudDEpIHsKLQkJZGlmZiA9IH4wVUwg LSBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxOwotCQlkaWZmICs9IHRvdGFsX2NvdW50OwotCX0g ZWxzZSB7Ci0JCWRpZmYgPSB0b3RhbF9jb3VudCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDE7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BhcmFtcyk7IGkrKykgewotCQlp ZiAoY3BhcmFtc1tpXS5pID09IGRldl9wcml2LT5pcHMuY19tICYmCi0JCSAgICBjcGFyYW1zW2ld LnQgPT0gZGV2X3ByaXYtPmlwcy5yX3QpIHsKLQkJCW0gPSBjcGFyYW1zW2ldLm07Ci0JCQljID0g Y3BhcmFtc1tpXS5jOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlkaWZmID0gZGl2X3U2NChkaWZm LCBkaWZmMSk7Ci0JcmV0ID0gKChtICogZGlmZikgKyBjKTsKLQlyZXQgPSBkaXZfdTY0KHJldCwg MTApOwotCi0JZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MSA9IHRvdGFsX2NvdW50OwotCWRldl9w cml2LT5pcHMubGFzdF90aW1lMSA9IG5vdzsKLQotCWRldl9wcml2LT5pcHMuY2hpcHNldF9wb3dl ciA9IHJldDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0 X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCi0JaWYgKCFJU19HRU4oZGV2 X3ByaXYsIDUpKQotCQlyZXR1cm4gMDsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgmZGV2X3By aXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2sp OwotCQl2YWwgPSBfX2k5MTVfY2hpcHNldF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9ja19p cnEoJm1jaGRldl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi11bnNpZ25lZCBsb25n IGk5MTVfbWNoX3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQl1bnNpZ25l ZCBsb25nIG0sIHgsIGI7Ci0JdTMyIHRzZnM7Ci0KLQl0c2ZzID0gaW50ZWxfdW5jb3JlX3JlYWQo Jmk5MTUtPnVuY29yZSwgVFNGUyk7Ci0KLQltID0gKCh0c2ZzICYgVFNGU19TTE9QRV9NQVNLKSA+ PiBUU0ZTX1NMT1BFX1NISUZUKTsKLQl4ID0gaW50ZWxfdW5jb3JlX3JlYWQ4KCZpOTE1LT51bmNv cmUsIFRSMSk7Ci0KLQliID0gdHNmcyAmIFRTRlNfSU5UUl9NQVNLOwotCi0JcmV0dXJuICgobSAq IHgpIC8gMTI3KSAtIGI7Ci19Ci0KLXN0YXRpYyBpbnQgX3B4dmlkX3RvX3ZkKHU4IHB4dmlkKQot ewotCWlmIChweHZpZCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChweHZpZCA+PSA4ICYmIHB4 dmlkIDwgMzEpCi0JCXB4dmlkID0gMzE7Ci0KLQlyZXR1cm4gKHB4dmlkICsgMikgKiAxMjU7Ci19 Ci0KLXN0YXRpYyB1MzIgcHZpZF90b19leHR2aWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1OCBweHZpZCkKLXsKLQljb25zdCBpbnQgdmQgPSBfcHh2aWRfdG9fdmQocHh2aWQp OwotCWNvbnN0IGludCB2bSA9IHZkIC0gMTEyNTsKLQotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2 KS0+aXNfbW9iaWxlKQotCQlyZXR1cm4gdm0gPiAwID8gdm0gOiAwOwotCi0JcmV0dXJuIHZkOwot fQotCi1zdGF0aWMgdm9pZCBfX2k5MTVfdXBkYXRlX2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXU2NCBub3csIGRpZmYsIGRpZmZtczsKLQl1MzIgY291bnQ7 Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Ci0KLQlub3cgPSBrdGltZV9n ZXRfcmF3X25zKCk7Ci0JZGlmZm1zID0gbm93IC0gZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyOwot CWRvX2RpdihkaWZmbXMsIE5TRUNfUEVSX01TRUMpOwotCi0JLyogRG9uJ3QgZGl2aWRlIGJ5IDAg Ki8KLQlpZiAoIWRpZmZtcykKLQkJcmV0dXJuOwotCi0JY291bnQgPSBJOTE1X1JFQUQoR0ZYRUMp OwotCi0JaWYgKGNvdW50IDwgZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MikgewotCQlkaWZmID0g fjBVTCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Ci0JCWRpZmYgKz0gY291bnQ7Ci0JfSBl bHNlIHsKLQkJZGlmZiA9IGNvdW50IC0gZGV2X3ByaXYtPmlwcy5sYXN0X2NvdW50MjsKLQl9Ci0K LQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gY291bnQ7Ci0JZGV2X3ByaXYtPmlwcy5sYXN0 X3RpbWUyID0gbm93OwotCi0JLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KLQlkaWZmID0g ZGlmZiAqIDExODE7Ci0JZGlmZiA9IGRpdl91NjQoZGlmZiwgZGlmZm1zICogMTApOwotCWRldl9w cml2LT5pcHMuZ2Z4X3Bvd2VyID0gZGlmZjsKLX0KLQotdm9pZCBpOTE1X3VwZGF0ZV9nZnhfdmFs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKLQotCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkKLQkJcmV0dXJuOwotCi0Jd2l0 aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZikgewotCQlz cGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JCV9faTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZf cHJpdik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCX0KLX0KLQotc3RhdGlj IHVuc2lnbmVkIGxvbmcgX19pOTE1X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCXVuc2lnbmVkIGxvbmcgdCwgY29yciwgc3RhdGUxLCBjb3JyMiwgc3RhdGUy OwotCXUzMiBweHZpZCwgZXh0X3Y7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9j ayk7Ci0KLQlweHZpZCA9IEk5MTVfUkVBRChQWFZGUkVRKGRldl9wcml2LT5ndF9wbS5ycHMuY3Vy X2ZyZXEpKTsKLQlweHZpZCA9IChweHZpZCA+PiAyNCkgJiAweDdmOwotCWV4dF92ID0gcHZpZF90 b19leHR2aWQoZGV2X3ByaXYsIHB4dmlkKTsKLQotCXN0YXRlMSA9IGV4dF92OwotCi0JdCA9IGk5 MTVfbWNoX3ZhbChkZXZfcHJpdik7Ci0KLQkvKiBSZXZlbCBpbiB0aGUgZW1waXJpY2FsbHkgZGVy aXZlZCBjb25zdGFudHMgKi8KLQotCS8qIENvcnJlY3Rpb24gZmFjdG9yIGluIDEvMTAwMDAwIHVu aXRzICovCi0JaWYgKHQgPiA4MCkKLQkJY29yciA9ICgodCAqIDIzNDkpICsgMTM1OTQwKTsKLQll bHNlIGlmICh0ID49IDUwKQotCQljb3JyID0gKCh0ICogOTY0KSArIDI5MzE3KTsKLQllbHNlIC8q IDwgNTAgKi8KLQkJY29yciA9ICgodCAqIDMwMSkgKyAxMDA0KTsKLQotCWNvcnIgPSBjb3JyICog KCgxNTAxNDIgKiBzdGF0ZTEpIC8gMTAwMDAgLSA3ODY0Mik7Ci0JY29yciAvPSAxMDAwMDA7Ci0J Y29ycjIgPSAoY29yciAqIGRldl9wcml2LT5pcHMuY29ycik7Ci0KLQlzdGF0ZTIgPSAoY29ycjIg KiBzdGF0ZTEpIC8gMTAwMDA7Ci0Jc3RhdGUyIC89IDEwMDsgLyogY29udmVydCB0byBtVyAqLwot Ci0JX19pOTE1X3VwZGF0ZV9nZnhfdmFsKGRldl9wcml2KTsKLQotCXJldHVybiBkZXZfcHJpdi0+ aXBzLmdmeF9wb3dlciArIHN0YXRlMjsKLX0KLQotdW5zaWduZWQgbG9uZyBpOTE1X2dmeF92YWwo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKLQotCWlmICghSVNfR0VOKGRldl9wcml2 LCA1KSkKLQkJcmV0dXJuIDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQkJ dmFsID0gX19pOTE1X2dmeF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9ja19pcnEoJm1jaGRl dl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgX19yY3UgKmk5MTVfbWNoX2RldjsKLQotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICptY2hkZXZfZ2V0KHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaTkxNSA9IHJjdV9kZXJlZmVyZW5jZShpOTE1X21j aF9kZXYpOwotCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmk5MTUtPmRybS5yZWYpKQotCQlp OTE1ID0gTlVMTDsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiBpOTE1OwotfQotCi0v KioKLSAqIGk5MTVfcmVhZF9tY2hfdmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCi0gKgot ICogQ2FsY3VsYXRlIGFuZCByZXR1cm4gYSB2YWx1ZSBmb3IgdGhlIElQUyBkcml2ZXIgdG8gdXNl IHdoZW4gZGVjaWRpbmcgd2hldGhlcgotICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFk cm9vbSB0byBpbmNyZWFzZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KLSAqLwotdW5zaWduZWQg bG9uZyBpOTE1X3JlYWRfbWNoX3ZhbCh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1OwotCXVuc2lnbmVkIGxvbmcgY2hpcHNldF92YWwgPSAwOwotCXVuc2lnbmVkIGxvbmcg Z3JhcGhpY3NfdmFsID0gMDsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQotCWk5MTUgPSBt Y2hkZXZfZ2V0KCk7Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gMDsKLQotCXdpdGhfaW50ZWxfcnVu dGltZV9wbSgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZikgewotCQlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Ci0JCWNoaXBzZXRfdmFsID0gX19pOTE1X2NoaXBzZXRfdmFsKGk5MTUpOwot CQlncmFwaGljc192YWwgPSBfX2k5MTVfZ2Z4X3ZhbChpOTE1KTsKLQkJc3Bpbl91bmxvY2tfaXJx KCZtY2hkZXZfbG9jayk7Ci0JfQotCi0JZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJu IGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFsOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9y ZWFkX21jaF92YWwpOwotCi0vKioKLSAqIGk5MTVfZ3B1X3JhaXNlIC0gcmFpc2UgR1BVIGZyZXF1 ZW5jeSBsaW1pdAotICoKLSAqIFJhaXNlIHRoZSBsaW1pdDsgSVBTIGluZGljYXRlcyB3ZSBoYXZl IHRoZXJtYWwgaGVhZHJvb20uCi0gKi8KLWJvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKLXsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Ci0J aWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9j ayk7Ci0JaWYgKGk5MTUtPmlwcy5tYXhfZGVsYXkgPiBpOTE1LT5pcHMuZm1heCkKLQkJaTkxNS0+ aXBzLm1heF9kZWxheS0tOwotCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCi0JZHJt X2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQ TChpOTE1X2dwdV9yYWlzZSk7Ci0KLS8qKgotICogaTkxNV9ncHVfbG93ZXIgLSBsb3dlciBHUFUg ZnJlcXVlbmN5IGxpbWl0Ci0gKgotICogSVBTIGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRo ZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJhY2sgdGhlIEdQVQotICogZnJlcXVlbmN5IG1heGlt dW0uCi0gKi8KLWJvb2wgaTkxNV9ncHVfbG93ZXIodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Ci0JaWYgKCFpOTE1KQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JaWYgKGk5MTUt Pmlwcy5tYXhfZGVsYXkgPCBpOTE1LT5pcHMubWluX2RlbGF5KQotCQlpOTE1LT5pcHMubWF4X2Rl bGF5Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0KLQlkcm1fZGV2X3B1dCgm aTkxNS0+ZHJtKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1 X2xvd2VyKTsKLQotLyoqCi0gKiBpOTE1X2dwdV9idXN5IC0gaW5kaWNhdGUgR1BVIGJ1c2luZXNz IHRvIElQUwotICoKLSAqIFRlbGwgdGhlIElQUyBkcml2ZXIgd2hldGhlciBvciBub3QgdGhlIEdQ VSBpcyBidXN5LgotICovCi1ib29sIGk5MTVfZ3B1X2J1c3kodm9pZCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlib29sIHJldDsKLQotCWk5MTUgPSBtY2hkZXZfZ2V0KCk7 Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBpOTE1LT5ndC5hd2FrZTsK LQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lN Qk9MX0dQTChpOTE1X2dwdV9idXN5KTsKLQotLyoqCi0gKiBpOTE1X2dwdV90dXJib19kaXNhYmxl IC0gZGlzYWJsZSBncmFwaGljcyB0dXJibwotICoKLSAqIERpc2FibGUgZ3JhcGhpY3MgdHVyYm8g YnkgcmVzZXR0aW5nIHRoZSBtYXggZnJlcXVlbmN5IGFuZCBzZXR0aW5nIHRoZQotICogY3VycmVu dCBmcmVxdWVuY3kgdG8gdGhlIGRlZmF1bHQuCi0gKi8KLWJvb2wgaTkxNV9ncHVfdHVyYm9fZGlz YWJsZSh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OwotCWJvb2wgcmV0 OwotCi0JaTkxNSA9IG1jaGRldl9nZXQoKTsKLQlpZiAoIWk5MTUpCi0JCXJldHVybiBmYWxzZTsK LQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQlpOTE1LT5pcHMubWF4X2RlbGF5ID0g aTkxNS0+aXBzLmZzdGFydDsKLQlyZXQgPSBpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5p cHMuZnN0YXJ0KTsKLQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQotCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1 X2dwdV90dXJib19kaXNhYmxlKTsKLQotLyoqCi0gKiBUZWxscyB0aGUgaW50ZWxfaXBzIGRyaXZl ciB0aGF0IHRoZSBpOTE1IGRyaXZlciBpcyBub3cgbG9hZGVkLCBpZgotICogSVBTIGdvdCBsb2Fk ZWQgZmlyc3QuCi0gKgotICogVGhpcyBhd2t3YXJkIGRhbmNlIGlzIHNvIHRoYXQgbmVpdGhlciBt b2R1bGUgaGFzIHRvIGRlcGVuZCBvbiB0aGUKLSAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMgdG8g ZG8gdGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKLSAqIEdQVSB0dXJibyBsaW1pdHMg dG8gaTkxNS4KLSAqLwotc3RhdGljIHZvaWQKLWlwc19waW5nX2Zvcl9pOTE1X2xvYWQodm9pZCkK LXsKLQl2b2lkICgqbGluaykodm9pZCk7Ci0KLQlsaW5rID0gc3ltYm9sX2dldChpcHNfbGlua190 b19pOTE1X2RyaXZlcik7Ci0JaWYgKGxpbmspIHsKLQkJbGluaygpOwotCQlzeW1ib2xfcHV0KGlw c19saW5rX3RvX2k5MTVfZHJpdmVyKTsKLQl9Ci19Ci0KLXZvaWQgaW50ZWxfZ3B1X2lwc19pbml0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKiBXZSBvbmx5IHJlZ2lz dGVyIHRoZSBpOTE1IGlwcyBwYXJ0IHdpdGggaW50ZWwtaXBzIG9uY2UgZXZlcnl0aGluZyBpcwot CSAqIHNldCB1cCwgdG8gYXZvaWQgaW50ZWwtaXBzIHNuZWFraW5nIGluIGFuZCByZWFkaW5nIGJv Z3VzIHZhbHVlcy4gKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBkZXZfcHJp dik7Ci0KLQlpcHNfcGluZ19mb3JfaTkxNV9sb2FkKCk7Ci19Ci0KLXZvaWQgaW50ZWxfZ3B1X2lw c190ZWFyZG93bih2b2lkKQotewotCXJjdV9hc3NpZ25fcG9pbnRlcihpOTE1X21jaF9kZXYsIE5V TEwpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9pbml0X2Vtb24oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCXUzMiBsY2Z1c2U7Ci0JdTggcHh3WzE2XTsKLQlpbnQgaTsK LQotCS8qIERpc2FibGUgdG8gcHJvZ3JhbSAqLwotCUk5MTVfV1JJVEUoRUNSLCAwKTsKLQlQT1NU SU5HX1JFQUQoRUNSKTsKLQotCS8qIFByb2dyYW0gZW5lcmd5IHdlaWdodHMgZm9yIHZhcmlvdXMg ZXZlbnRzICovCi0JSTkxNV9XUklURShTREVXLCAweDE1MDQwZDAwKTsKLQlJOTE1X1dSSVRFKENT SUVXMCwgMHgwMDdmMDAwMCk7Ci0JSTkxNV9XUklURShDU0lFVzEsIDB4MWUyMjAwMDQpOwotCUk5 MTVfV1JJVEUoQ1NJRVcyLCAweDA0MDAwMDA0KTsKLQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKysp Ci0JCUk5MTVfV1JJVEUoUEVXKGkpLCAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlJ OTE1X1dSSVRFKERFVyhpKSwgMCk7Ci0KLQkvKiBQcm9ncmFtIFAtc3RhdGUgd2VpZ2h0cyB0byBh Y2NvdW50IGZvciBmcmVxdWVuY3kgcG93ZXIgYWRqdXN0bWVudCAqLwotCWZvciAoaSA9IDA7IGkg PCAxNjsgaSsrKSB7Ci0JCXUzMiBweHZpZGZyZXEgPSBJOTE1X1JFQUQoUFhWRlJFUShpKSk7Ci0J CXVuc2lnbmVkIGxvbmcgZnJlcSA9IGludGVsX3B4ZnJlcShweHZpZGZyZXEpOwotCQl1bnNpZ25l ZCBsb25nIHZpZCA9IChweHZpZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+Ci0JCQlQWFZGUkVR X1BYX1NISUZUOwotCQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCQl2YWwgPSB2aWQgKiB2aWQ7Ci0J CXZhbCAqPSAoZnJlcSAvIDEwMDApOwotCQl2YWwgKj0gMjU1OwotCQl2YWwgLz0gKDEyNyoxMjcq OTAwKTsKLQkJaWYgKHZhbCA+IDB4ZmYpCi0JCQlEUk1fRVJST1IoImJhZCBweHZhbDogJWxkXG4i LCB2YWwpOwotCQlweHdbaV0gPSB2YWw7Ci0JfQotCS8qIFJlbmRlciBzdGFuZGJ5IHN0YXRlcyBn ZXQgMCB3ZWlnaHQgKi8KLQlweHdbMTRdID0gMDsKLQlweHdbMTVdID0gMDsKLQotCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsKLQkJdTMyIHZhbCA9IChweHdbaSo0XSA8PCAyNCkgfCAocHh3Wyhp KjQpKzFdIDw8IDE2KSB8Ci0JCQkocHh3WyhpKjQpKzJdIDw8IDgpIHwgKHB4d1soaSo0KSszXSk7 Ci0JCUk5MTVfV1JJVEUoUFhXKGkpLCB2YWwpOwotCX0KLQotCS8qIEFkanVzdCBtYWdpYyByZWdz IHRvIG1hZ2ljIHZhbHVlcyAobW9yZSBleHBlcmltZW50YWwgcmVzdWx0cykgKi8KLQlJOTE1X1dS SVRFKE9HVzAsIDApOwotCUk5MTVfV1JJVEUoT0dXMSwgMCk7Ci0JSTkxNV9XUklURShFRzAsIDB4 MDAwMDdmMDApOwotCUk5MTVfV1JJVEUoRUcxLCAweDAwMDAwMDBlKTsKLQlJOTE1X1dSSVRFKEVH MiwgMHgwMDBlMDAwMCk7Ci0JSTkxNV9XUklURShFRzMsIDB4NjgwMDAzMDApOwotCUk5MTVfV1JJ VEUoRUc0LCAweDQyMDAwMDAwKTsKLQlJOTE1X1dSSVRFKEVHNSwgMHgwMDE0MDAzMSk7Ci0JSTkx NV9XUklURShFRzYsIDApOwotCUk5MTVfV1JJVEUoRUc3LCAwKTsKLQotCWZvciAoaSA9IDA7IGkg PCA4OyBpKyspCi0JCUk5MTVfV1JJVEUoUFhXTChpKSwgMCk7Ci0KLQkvKiBFbmFibGUgUE1PTiAr IHNlbGVjdCBldmVudHMgKi8KLQlJOTE1X1dSSVRFKEVDUiwgMHg4MDAwMDAxOSk7Ci0KLQlsY2Z1 c2UgPSBJOTE1X1JFQUQoTENGVVNFMDIpOwotCi0JZGV2X3ByaXYtPmlwcy5jb3JyID0gKGxjZnVz ZSAmIExDRlVTRV9ISVZfTUFTSyk7Ci19Ci0KLXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JLyogUG93ZXJzYXZpbmcgaXMgY29udHJv bGxlZCBieSB0aGUgaG9zdCB3aGVuIGluc2lkZSBhIFZNICovCi0JaWYgKGludGVsX3ZncHVfYWN0 aXZlKGRldl9wcml2KSkKLQkJbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPmhhc19ycHMg PSBmYWxzZTsKLQotCS8qIEluaXRpYWxpemUgUlBTIGxpbWl0cyAoZm9yIHVzZXJzcGFjZSkgKi8K LQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNoZXJyeXZpZXdfaW5pdF9ndF9wb3dl cnNhdmUoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQotCQl2 YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQllbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDYpCi0JCWdlbjZfaW5pdF9ycHNfZnJlcXVlbmNpZXMoZGV2X3ByaXYp OwotCi0JLyogRGVyaXZlIGluaXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0aGUg aGFyZHdhcmUgbGltaXRzICovCi0JcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSBycHMtPm1heF9m cmVxOwotCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsKLQotCS8qIEFm dGVyIHNldHRpbmcgbWF4LXNvZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVxICov Ci0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwKLQkgICAgSVNfSVZZQlJJREdFKGRldl9wcml2 KSB8fCBJU19IQVNXRUxMKGRldl9wcml2KSkgewotCQl1MzIgcGFyYW1zID0gMDsKLQotCQlzYW5k eWJyaWRnZV9wY29kZV9yZWFkKGRldl9wcml2LCBHRU42X1JFQURfT0NfUEFSQU1TLAotCQkJCSAg ICAgICAmcGFyYW1zLCBOVUxMKTsKLQkJaWYgKHBhcmFtcyAmIEJJVCgzMSkpIHsgLyogT0Mgc3Vw cG9ydGVkICovCi0JCQlEUk1fREVCVUdfRFJJVkVSKCJPdmVyY2xvY2tpbmcgc3VwcG9ydGVkLCBt YXg6ICVkTUh6LCBvdmVyY2xvY2s6ICVkTUh6XG4iLAotCQkJCQkgKHJwcy0+bWF4X2ZyZXEgJiAw eGZmKSAqIDUwLAotCQkJCQkgKHBhcmFtcyAmIDB4ZmYpICogNTApOwotCQkJcnBzLT5tYXhfZnJl cSA9IHBhcmFtcyAmIDB4ZmY7Ci0JCX0KLQl9Ci0KLQkvKiBGaW5hbGx5IGFsbG93IHVzIHRvIGJv b3N0IHRvIG1heCBieSBkZWZhdWx0ICovCi0JcnBzLT5ib29zdF9mcmVxID0gcnBzLT5tYXhfZnJl cTsKLQlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWluX2ZyZXE7Ci0JcnBzLT5jdXJfZnJlcSA9IHJw cy0+aWRsZV9mcmVxOwotfQotCi12b2lkIGludGVsX3Nhbml0aXplX2d0X3Bvd2Vyc2F2ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JZGV2X3ByaXYtPmd0X3BtLnJwcy5l bmFibGVkID0gdHJ1ZTsgLyogZm9yY2UgUlBTIGRpc2FibGluZyAqLwotCWludGVsX2Rpc2FibGVf Z3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQotCQlnZW4xMV9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA2KQotCQlnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9w cml2KTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZGlzYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5n dF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoIWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCkKLQkJ cmV0dXJuOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJZ2VuOV9kaXNhYmxl X3JwcyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWNo ZXJyeXZpZXdfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpKQotCQl2YWxsZXl2aWV3X2Rpc2FibGVfcnBzKGRldl9wcml2KTsKLQllbHNlIGlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpCi0JCWdlbjZfZGlzYWJsZV9ycHMoZGV2X3ByaXYp OwotCWVsc2UgaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKQotCQlpcm9ubGFrZV9kaXNhYmxl X2RycHMoZGV2X3ByaXYpOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5lbmFibGVkID0gZmFsc2U7 Ci19Ci0KLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9j ayk7Ci0KLQlpbnRlbF9kaXNhYmxlX3JwcyhkZXZfcHJpdik7Ci0JaWYgKEhBU19MTEMoZGV2X3By aXYpKQotCQlpbnRlbF9sbGNfZGlzYWJsZSgmZGV2X3ByaXYtPmd0LmxsYyk7Ci0KLQltdXRleF91 bmxvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVs X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVj dCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmcnBzLT5sb2NrKTsKLQotCWlmIChycHMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQot CWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQljaGVycnl2aWV3X2VuYWJsZV9ycHMo ZGV2X3ByaXYpOwotCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpIHsKLQkJdmFs bGV5dmlld19lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkgewotCQlnZW45X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCX0gZWxzZSBpZiAo SVNfQlJPQURXRUxMKGRldl9wcml2KSkgewotCQlnZW44X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwot CX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KSB7Ci0JCWdlbjZfZW5hYmxlX3Jw cyhkZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJU19JUk9OTEFLRV9NKGRldl9wcml2KSkgewotCQlp cm9ubGFrZV9lbmFibGVfZHJwcyhkZXZfcHJpdik7Ci0JCWludGVsX2luaXRfZW1vbihkZXZfcHJp dik7Ci0JfQotCi0JV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Ci0JV0FS Tl9PTihycHMtPmlkbGVfZnJlcSA+IHJwcy0+bWF4X2ZyZXEpOwotCi0JV0FSTl9PTihycHMtPmVm ZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Ci0JV0FSTl9PTihycHMtPmVmZmljaWVudF9m cmVxID4gcnBzLT5tYXhfZnJlcSk7Ci0KLQlycHMtPmVuYWJsZWQgPSB0cnVlOwotfQotCi12b2lk IGludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hlbiBp bnNpZGUgYSBWTSAqLwotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCi0JCXJldHVy bjsKLQotCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Ci0KLQlpZiAoSEFT X1JQUyhkZXZfcHJpdikpCi0JCWludGVsX2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCi0JaW50ZWxf bGxjX2VuYWJsZSgmZGV2X3ByaXYtPmd0LmxsYyk7Ci0KLQltdXRleF91bmxvY2soJmRldl9wcml2 LT5ndF9wbS5ycHMubG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlieF9pbml0X2Nsb2NrX2dhdGlu ZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyoKLQkgKiBPbiBJYmV4 IFBlYWsgYW5kIENvdWdhciBQb2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCi0JICogZ2F0 aW5nIGZvciB0aGUgcGFuZWwgcG93ZXIgc2VxdWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bwotCSAq IHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KLQkgKi8KLQlJOTE1X1dSSVRFKFNP VVRIX0RTUENMS19HQVRFX0QsIFBDSF9EUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwotfQot Ci1zdGF0aWMgdm9pZCBnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCWVudW0gcGlwZSBwaXBlOwotCi0JZm9yX2VhY2hfcGlwZShk ZXZfcHJpdiwgcGlwZSkgewotCQlJOTE1X1dSSVRFKERTUENOVFIocGlwZSksCi0JCQkgICBJOTE1 X1JFQUQoRFNQQ05UUihwaXBlKSkgfAotCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNB QkxFKTsKLQotCQlJOTE1X1dSSVRFKERTUFNVUkYocGlwZSksIEk5MTVfUkVBRChEU1BTVVJGKHBp cGUpKSk7Ci0JCVBPU1RJTkdfUkVBRChEU1BTVVJGKHBpcGUpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkIGlsa19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF OwotCi0JLyoKLQkgKiBSZXF1aXJlZCBmb3IgRkJDCi0JICogV2FGYmNEaXNhYmxlRHBmY0Nsb2Nr R2F0aW5nOmlsawotCSAqLwotCWRzcGNsa19nYXRlIHw9IElMS19EUEZDUlVOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFIHwKLQkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAg IElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRTsKLQotCUk5MTVfV1JJVEUoUENIXzNEQ0dE SVMwLAotCQkgICBNQVJJVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBTVlNNVU5JVF9D TE9DS19HQVRFX0RJU0FCTEUpOwotCUk5MTVfV1JJVEUoUENIXzNEQ0dESVMxLAotCQkgICBWRk1V TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byB0aGUgc3Bl YyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlIHNldCBpbgotCSAqIG9yZGVyIHRvIGVuYWJs ZSBtZW1vcnkgc2VsZi1yZWZyZXNoCi0JICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0Ci0JICog VGhlIGJpdCA1IG9mIDB4NDIwMjAKLQkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKLQkgKi8KLQlJ OTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAotCQkgICAoSTkxNV9SRUFEKElMS19ESVNQ TEFZX0NISUNLRU4yKSB8Ci0JCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVMTCkp OwotCWRzcGNsa19nYXRlIHw9IElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7Ci0JSTkx NV9XUklURShESVNQX0FSQl9DVEwsCi0JCSAgIChJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8Ci0J CSAgICBESVNQX0ZCQ19XTV9ESVMpKTsKLQotCS8qCi0JICogQmFzZWQgb24gdGhlIGRvY3VtZW50 IGZyb20gaGFyZHdhcmUgZ3V5cyB0aGUgZm9sbG93aW5nIGJpdHMKLQkgKiBzaG91bGQgYmUgc2V0 IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgotCSAqIFRoZSBiaXQgMjIg b2YgMHg0MjAwMAotCSAqIFRoZSBiaXQgMjIgb2YgMHg0MjAwNAotCSAqIFRoZSBiaXQgNyw4LDkg b2YgMHg0MjAyMC4KLQkgKi8KLQlpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsKLQkJLyog V2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVlOmlsayAqLwotCQlJOTE1X1dSSVRFKElMS19E SVNQTEFZX0NISUNLRU4xLAotCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8 Ci0JCQkgICBJTEtfRkJDUV9ESVMpOwotCQlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4y LAotCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCQkgICBJTEtfRFBB UkJfR0FURSk7Ci0JfQotCi0JSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dh dGUpOwotCi0JSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKLQkJICAgSTkxNV9SRUFE KElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKLQlJ OTE1X1dSSVRFKF8zRF9DSElDS0VOMiwKLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJ TkVEIDw8IDE2IHwKLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEKTsKLQotCS8q IFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxpbmVkRmx1c2g6aWxrICovCi0JSTkxNV9XUklURShD QUNIRV9NT0RFXzAsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRF Ul9GTFVTSF9ESVNBQkxFKSk7Ci0KLQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9u YWxGbHVzaDppbGsgKi8KLQlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElT QUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKLQotCWc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChk ZXZfcHJpdik7Ci0KLQlpYnhfaW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwotfQotCi1zdGF0 aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCWVudW0gcGlwZSBwaXBlOwotCXUzMiB2YWw7Ci0KLQkvKgotCSAqIE9uIEli ZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKLQkgKiBn YXRpbmcgZm9yIHRoZSBwYW5lbCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRvCi0J ICogc3RhcnQgdXAgd2hlbiBubyBwb3J0cyBhcmUgYWN0aXZlLgotCSAqLwotCUk5MTVfV1JJVEUo U09VVEhfRFNQQ0xLX0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0J CSAgIFBDSF9EUExVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIFBDSF9DUFVOSVRfQ0xP Q0tfR0FURV9ESVNBQkxFKTsKLQlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4yLCBJOTE1X1JFQUQo U09VVEhfQ0hJQ0tFTjIpIHwKLQkJICAgRFBMU19FRFBfUFBTX0ZJWF9ESVMpOwotCS8qIFRoZSBi ZWxvdyBmaXhlcyB0aGUgd2VpcmQgZGlzcGxheSBjb3JydXB0aW9uLCBhIGZldyBwaXhlbHMgc2hp ZnRlZAotCSAqIGRvd253YXJkLCBvbiAob25seSkgTFZEUyBvZiBzb21lIEhQIGxhcHRvcHMgd2l0 aCBJVlkuCi0JICovCi0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewotCQl2YWwgPSBJ OTE1X1JFQUQoVFJBTlNfQ0hJQ0tFTjIocGlwZSkpOwotCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJf VElNSU5HX09WRVJSSURFOwotCQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0ZESV9QT0xBUklUWV9S RVZFUlNFRDsKLQkJaWYgKGRldl9wcml2LT52YnQuZmRpX3J4X3BvbGFyaXR5X2ludmVydGVkKQot CQkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX0ZESV9QT0xBUklUWV9SRVZFUlNFRDsKLQkJdmFsICY9 IH5UUkFOU19DSElDS0VOMl9GUkFNRV9TVEFSVF9ERUxBWV9NQVNLOwotCQl2YWwgJj0gflRSQU5T X0NISUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9DT1VOVEVSOwotCQl2YWwgJj0gflRSQU5TX0NI SUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9NT0RFU1dJVENIOwotCQlJOTE1X1dSSVRFKFRSQU5T X0NISUNLRU4yKHBpcGUpLCB2YWwpOwotCX0KLQkvKiBXQURQMENsb2NrR2F0aW5nRGlzYWJsZSAq LwotCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJSTkxNV9XUklURShUUkFOU19D SElDS0VOMShwaXBlKSwKLQkJCSAgIFRSQU5TX0NISUNLRU4xX0RQMFVOSVRfR0NfRElTQUJMRSk7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIHRtcDsKLQotCXRtcCA9IEk5MTVfUkVBRChN Q0hfU1NLUEQpOwotCWlmICgodG1wICYgTUNIX1NTS1BEX1dNMF9NQVNLKSAhPSBNQ0hfU1NLUERf V00wX1ZBTCkKLQkJRFJNX0RFQlVHX0tNUygiV3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHgg VGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxuIiwKLQkJCSAgICAgIHRtcCk7Ci19Ci0KLXN0YXRp YyB2b2lkIGdlbjZfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQotewotCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVfRElT QUJMRTsKLQotCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKLQot CUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElT UExBWV9DSElDS0VOMikgfAotCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7Ci0KLQkvKiBXYURp c2FibGVIaVpQbGFuZXNXaGVuTVNBQUVuYWJsZWQ6c25iICovCi0JSTkxNV9XUklURShfM0RfQ0hJ Q0tFTiwKLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNB QkxFX01TQUFfNFhfU05CKSk7Ci0KLQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9u YWxGbHVzaDpzbmIgKi8KLQlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElT QUJMRShSQ19PUF9GTFVTSF9FTkFCTEUpKTsKLQotCS8qCi0JICogQlNwZWMgcmVjb29tZW5kcyA4 eDQgd2hlbiBNU0FBIGlzIHVzZWQsCi0JICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNlZW1z IGZhc3Rlc3QuCi0JICoKLQkgKiBOb3RlIHRoYXQgUFMvV00gdGhyZWFkIGNvdW50cyBkZXBlbmQg b24gdGhlIFdJWiBoYXNoaW5nCi0JICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRvbid0IHRvdWNo IGhlcmUsIGJ1dCBpdCdzIGdvb2QKLQkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BT IGFuZCAzRFNUQVRFX1dNKS4KLQkgKi8KLQlJOTE1X1dSSVRFKEdFTjZfR1RfTU9ERSwKLQkJICAg X01BU0tFRF9GSUVMRChHRU42X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdfMTZ4 NCkpOwotCi0JSTkxNV9XUklURShDQUNIRV9NT0RFXzAsCi0JCSAgIF9NQVNLRURfQklUX0RJU0FC TEUoQ00wX1NUQ19FVklDVF9ESVNBQkxFX0xSQV9TTkIpKTsKLQotCUk5MTVfV1JJVEUoR0VONl9V Q0dDVEwxLAotCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8Ci0JCSAgIEdFTjZfQkxCVU5J VF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOwotCi0JLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5J VCkgY2xvY2sKLQkgKiBnYXRpbmcgZGlzYWJsZSBtdXN0IGJlIHNldC4gIEZhaWx1cmUgdG8gc2V0 IGl0IHJlc3VsdHMgaW4KLQkgKiBmbGlja2VyaW5nIHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRl cmluZyBmYWlsdXJlcyBhZnRlcgotCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1l c2EgImZpcmUiIGRlbW8sIGFuZCBVbmlnaW5lCi0JICogU2FuY3R1YXJ5IGFuZCBUcm9waWNzLCBh bmQgYXBwYXJlbnRseSBhbnl0aGluZyBlbHNlIHdpdGgKLQkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVs IGRpc2NhcmQuCi0JICoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJpdCAxMSAoUkNDVU5J VCkgbXVzdCBhbHNvIGJlIHNldCwKLQkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0 Y2FzZXMgdG8gZmluZCBpdCBvdXQuCi0JICoKLQkgKiBXYURpc2FibGVSQ0NVbml0Q2xvY2tHYXRp bmc6c25iCi0JICogV2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKLQkgKi8KLQlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMiwKLQkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUgfAotCQkgICBHRU42X1JDQ1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLQotCS8qIFdhU3Ry aXBzRmFuc0Rpc2FibGVGYXN0Q2xpcFBlcmZvcm1hbmNlRml4OnNuYiAqLwotCUk5MTVfV1JJVEUo XzNEX0NISUNLRU4zLAotCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJ U0FCTEVfRkFTVENMSVBfQ1VMTCkpOwotCi0JLyoKLQkgKiBCc3BlYyBzYXlzOgotCSAqICJUaGlz IGJpdCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3Jt YWwgYW5kCi0JICogM0RTVEFURV9TRiBudW1iZXIgb2YgU0Ygb3V0cHV0IGF0dHJpYnV0ZXMgaXMg bW9yZSB0aGFuIDE2LiIKLQkgKi8KLQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKLQkJICAgX01B U0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX1BJUEVMSU5FRF9BVFRSX0ZF VENIKSk7Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYyB0aGUgZm9sbG93aW5nIGJp dHMgc2hvdWxkIGJlCi0JICogc2V0IGluIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1yZWZy ZXNoIGFuZCBmYmM6Ci0JICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDAwCi0JICogVGhl IGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0Ci0JICogVGhlIGJpdDUgYW5kIGJpdDcgb2YgMHg0 MjAyMAotCSAqIFRoZSBiaXQxNCBvZiAweDcwMTgwCi0JICogVGhlIGJpdDE0IG9mIDB4NzExODAK LQkgKgotCSAqIFdhRmJjQXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKLQkgKi8KLQlJOTE1 X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4xLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEpIHwKLQkJICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKLQlJ OTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BM QVlfQ0hJQ0tFTjIpIHwKLQkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOwot CUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsCi0JCSAgIEk5MTVfUkVBRChJTEtfRFNQQ0xL X0dBVEVfRCkgfAotCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8Ci0JCSAg IElMS19EUEZEVU5JVF9DTE9DS19HQVRFX0VOQUJMRSk7Ci0KLQlnNHhfZGlzYWJsZV90cmlja2xl X2ZlZWQoZGV2X3ByaXYpOwotCi0JY3B0X2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKLQot CWdlbjZfY2hlY2tfbWNoX3NldHVwKGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuN19z ZXR1cF9maXhlZF9mdW5jX3NjaGVkdWxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCi17Ci0JdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43X0ZGX1RIUkVBRF9NT0RFKTsKKwl1MzIg cmVnID0gSTkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01PREUpOwogCiAJLyoKIAkgKiBXYVZTVGhy ZWFkRGlzcGF0Y2hPdmVycmlkZTppdmIsdmx2CkBAIC04OTQyLDkwICs3MzI1LDggQEAgdm9pZCBp bnRlbF9pbml0X3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAl9CiB9CiAK LXN0YXRpYyBpbnQgYnl0X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qCi0JICogTiA9IHZhbCAtIDB4YjcKLQkgKiBTbG93ID0gRmFzdCA9IEdQTEwg cmVmICogTgotCSAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxfcmVmX2Zy ZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOwotfQotCi1zdGF0aWMgaW50IGJ5dF9mcmVxX29wY29k ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3RydWN0 IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QoMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3JlZl9mcmVxKSArIDB4Yjc7Ci19Ci0K LXN0YXRpYyBpbnQgY2h2X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKLQotCS8qCi0JICogTiA9IHZhbCAvIDIKLQkgKiBDVSAoc2xvdykgPSBDVTJ4IChmYXN0 KSAvIDIgPSBHUExMIHJlZiAqIE4gLyAyCi0JICovCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KHJwcy0+Z3BsbF9yZWZfZnJlcSAqIHZhbCwgMiAqIDIgKiAxMDAwKTsKLX0KLQotc3RhdGljIGlu dCBjaHZfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQg dmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot Ci0JLyogQ0hWIG5lZWRzIGV2ZW4gdmFsdWVzICovCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNU KDIgKiAxMDAwICogdmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICogMjsKLX0KLQotaW50IGludGVs X2dwdV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsK LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NF U1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVIsCi0JCQkJCSBHRU45X0ZSRVFfU0NBTEVS KTsKLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJcmV0dXJuIGNodl9ncHVf ZnJlcShkZXZfcHJpdiwgdmFsKTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkK LQkJcmV0dXJuIGJ5dF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKTsKLQllbHNlCi0JCXJldHVybiB2 YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsKLX0KLQotaW50IGludGVsX2ZyZXFfb3Bjb2Rl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsKLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA5KQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICog R0VOOV9GUkVRX1NDQUxFUiwKLQkJCQkJIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKLQllbHNl IGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJcmV0dXJuIGNodl9mcmVxX29wY29kZShk ZXZfcHJpdiwgdmFsKTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJcmV0 dXJuIGJ5dF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKLQllbHNlCi0JCXJldHVybiBESVZf Uk9VTkRfQ0xPU0VTVCh2YWwsIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKLX0KLQogdm9pZCBp bnRlbF9wbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0 ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKLQltdXRleF9pbml0KCZkZXZfcHJp di0+Z3RfcG0ucnBzLnBvd2VyLm11dGV4KTsKLQotCWF0b21pY19zZXQoJmRldl9wcml2LT5ndF9w bS5ycHMubnVtX3dhaXRlcnMsIDApOwotCiAJZGV2X3ByaXYtPnJ1bnRpbWVfcG0uc3VzcGVuZGVk ID0gZmFsc2U7CiAJYXRvbWljX3NldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0ud2FrZXJlZl9jb3Vu dCwgMCk7CiB9Ci0KLXUzMiBpbnRlbF9nZXRfY2FnZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIHUzMiBycHN0YXQpCi17Ci0JdTMyIGNhZ2Y7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5KQotCQljYWdmID0gKHJwc3RhdCAmIEdFTjlfQ0FHRl9NQVNLKSA+PiBHRU45 X0NBR0ZfU0hJRlQ7Ci0JZWxzZSBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURX RUxMKGRldl9wcml2KSkKLQkJY2FnZiA9IChycHN0YXQgJiBIU1dfQ0FHRl9NQVNLKSA+PiBIU1df Q0FHRl9TSElGVDsKLQllbHNlCi0JCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+ IEdFTjZfQ0FHRl9TSElGVDsKLQotCXJldHVybiAgY2FnZjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5oCmluZGV4IDkzZDE5MmQwNjEwYS4uYjU2ZTYyODVkMWMzIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmgKQEAgLTI5LDE1ICsyOSw2IEBAIHZvaWQgaW50ZWxfdXBkYXRlX3dhdGVybWFya3Moc3Ry dWN0IGludGVsX2NydGMgKmNydGMpOwogdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nX2hvb2tz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVsX3BtX3NldHVw KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2dwdV9pcHNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9ncHVf aXBzX3RlYXJkb3duKHZvaWQpOwotdm9pZCBpbnRlbF9pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZW5h YmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9p ZCBpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwotdm9pZCBnZW42X3Jwc19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Ci12b2lkIGdlbjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwogdm9p ZCBnNHhfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKIHZvaWQgaWxrX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwpAQCAtNjksMTkgKzYwLDYgQEAgaW50IHNrbF9jaGVja19waXBlX21heF9waXhl bF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAogdm9pZCBpbnRlbF9pbml0X2lw YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9lbmFibGVf aXBjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKLWludCBpbnRlbF9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwotaW50IGlu dGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZh bCk7Ci0KLXUzMiBpbnRlbF9nZXRfY2FnZihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBycHN0YXQxKTsKLQotdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci11bnNpZ25lZCBsb25nIGk5MTVfbWNoX3Zh bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdW5zaWduZWQgbG9uZyBpOTE1 X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaTkxNV91 cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotCi1ib29s IGlyb25sYWtlX3NldF9kcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTgg dmFsKTsKLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdTggdmFsKTsKLXZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJhY3RpdmUpOwogYm9vbCBpbnRlbF9zZXRfbWVt b3J5X2N4c3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSk7 CiAKICNlbmRpZiAvKiBfX0lOVEVMX1BNX0hfXyAqLwotLSAKMi4yMy4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=