From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0BDB9221E0684 for ; Wed, 13 Dec 2017 18:05:54 -0800 (PST) From: Ross Zwisler Subject: [PATCH v3 3/3] hmat: add performance attributes Date: Wed, 13 Dec 2017 19:10:19 -0700 Message-Id: <20171214021019.13579-4-ross.zwisler@linux.intel.com> In-Reply-To: <20171214021019.13579-1-ross.zwisler@linux.intel.com> References: <20171214021019.13579-1-ross.zwisler@linux.intel.com> MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: linux-kernel@vger.kernel.org Cc: "Box, David E" , Dave Hansen , "Zheng, Lv" , linux-nvdimm@lists.01.org, "Rafael J. Wysocki" , Anaczkowski,, Robert, Lukasz, "Erik , Len Brown" , John Hubbard , Jerome Glisse , devel@acpica.org, Kogut,, "Marcin , Brice Goglin , Nachimuthu, Murugasamy" , "Rafael J. Wysocki" , Koziej,, "Joonas , Andrew Morton , Tim Chen" List-ID: QWRkIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSBITUFUIHRvIHRoZSBzeXNm cyByZXByZXNlbnRhdGlvbi4KVGhpcyBpbmZvcm1hdGlvbiBsaXZlcyBhcyBhbiBhdHRyaWJ1dGUg Z3JvdXAgbmFtZWQgImxvY2FsX2luaXQiIGluIHRoZQptZW1vcnkgdGFyZ2V0OgoKICAjIHRyZWUg bWVtX3RndDIKICBtZW1fdGd0MgogIOKUnOKUgOKUgCBmaXJtd2FyZV9pZAogIOKUnOKUgOKUgCBp c19jYWNoZWQKICDilJzilIDilIAgbG9jYWxfaW5pdAogIOKUgsKgwqAg4pSc4pSA4pSAIG1lbV9p bml0MCAtPiAuLi8uLi9tZW1faW5pdDAKICDilILCoMKgIOKUnOKUgOKUgCBtZW1faW5pdDEgLT4g Li4vLi4vbWVtX2luaXQxCiAg4pSCwqDCoCDilJzilIDilIAgcmVhZF9id19NQnBzCiAg4pSCwqDC oCDilJzilIDilIAgcmVhZF9sYXRfbnNlYwogIOKUgsKgwqAg4pSc4pSA4pSAIHdyaXRlX2J3X01C cHMKICDilILCoMKgIOKUlOKUgOKUgCB3cml0ZV9sYXRfbnNlYwogIOKUnOKUgOKUgCBub2RlMiAt PiAuLi8uLi9ub2RlL25vZGUyCiAg4pSc4pSA4pSAIHBvd2VyCiAg4pSCwqDCoCDilJzilIDilIAg YXN5bmMKICDilILCoMKgIC4uLgogIOKUnOKUgOKUgCBzdWJzeXN0ZW0gLT4gLi4vLi4vLi4vLi4v YnVzL2htYXQKICDilJTilIDilIAgdWV2ZW50CgpUaGlzIGF0dHJpYnV0ZSBncm91cCBzdXJmYWNl cyBsYXRlbmN5IGFuZCBiYW5kd2lkdGggcGVyZm9ybWFuY2UgZm9yIGEKbWVtb3J5IHRhcmdldCBh bmQgaXRzIGxvY2FsIGluaXRpYXRvcnMuICBGb3IgZXhhbXBsZToKCiAgIyBncmVwIC4gbWVtX3Rn dDIvbG9jYWxfaW5pdC8qIDI+L2Rldi9udWxsCiAgbWVtX3RndDIvbG9jYWxfaW5pdC9yZWFkX2J3 X01CcHM6MzA3MjAKICBtZW1fdGd0Mi9sb2NhbF9pbml0L3JlYWRfbGF0X25zZWM6MTAwCiAgbWVt X3RndDIvbG9jYWxfaW5pdC93cml0ZV9id19NQnBzOjMwNzIwCiAgbWVtX3RndDIvbG9jYWxfaW5p dC93cml0ZV9sYXRfbnNlYzoxMDAKClRoZSBpbml0aWF0b3JzIGFsc28gaGF2ZSBhIHN5bWxpbmsg dG8gdGhlaXIgbG9jYWwgdGFyZ2V0czoKCiAgIyBscyAtbCBtZW1faW5pdDAvbWVtX3RndDIKICBs cnd4cnd4cnd4LiAxIHJvb3Qgcm9vdCAwIERlYyAxMyAxNjo0NSBtZW1faW5pdDAvbWVtX3RndDIg LT4gLi4vbWVtX3RndDIKCldlIGNyZWF0ZSBwZXJmb3JtYW5jZSBhdHRyaWJ1dGUgZ3JvdXBzIG9u bHkgZm9yIGxvY2FsIChpbml0aWF0b3IsdGFyZ2V0KQpwYWlyaW5ncywgd2hlcmUgdGhlIGZpcnN0 IGxvY2FsIGluaXRpYXRvciBmb3IgYSBnaXZlbiB0YXJnZXQgaXMgZGVmaW5lZCBieQp0aGUgIlBy b2Nlc3NvciBQcm94aW1pdHkgRG9tYWluIiBmaWVsZCBpbiB0aGUgSE1BVCdzIE1lbW9yeSBTdWJz eXN0ZW0KQWRkcmVzcyBSYW5nZSBTdHJ1Y3R1cmUgdGFibGUuICBBZnRlciB3ZSBoYXZlIG9uZSBs b2NhbCBpbml0aWF0b3Igd2Ugc2Nhbgp0aGUgcGVyZm9ybWFuY2UgZGF0YSB0byBsaW5rIHRvIGFu eSBvdGhlciAibG9jYWwiIGluaXRpYXRvcnMgd2l0aCB0aGUgc2FtZQpsb2NhbCBwZXJmb3JtYW5j ZSB0byBhIGdpdmVuIG1lbW9yeSB0YXJnZXQuCgpBIGdpdmVuIHRhcmdldCBvbmx5IGhhcyBvbmUg c2V0IG9mIGxvY2FsIHBlcmZvcm1hbmNlIHZhbHVlcywgc28gZWFjaCB0YXJnZXQKd2lsbCBoYXZl IGF0IG1vc3Qgb25lICJsb2NhbF9pbml0IiBhdHRyaWJ1dGUgZ3JvdXAsIHRob3VnaCB0aGF0IGdy b3VwIGNhbgpjb250YWluIGxpbmtzIHRvIG11bHRpcGxlIGluaXRpYXRvcnMgdGhhdCBhbGwgaGF2 ZSBsb2NhbCBwZXJmb3JtYW5jZS4gIEEKZ2l2ZW4gbWVtb3J5IGluaXRpYXRvciBtYXkgaGF2ZSBt dWx0aXBsZSBsb2NhbCBtZW1vcnkgdGFyZ2V0cywgc28gbXVsdGlwbGUKIm1lbV90Z3RYIiBsaW5r cyBtYXkgZXhpc3QgZm9yIGEgZ2l2ZW4gaW5pdGlhdG9yLgoKSWYgYSBnaXZlbiBtZW1vcnkgdGFy Z2V0IGlzIGNhY2hlZCB3ZSBnaXZlIHBlcmZvcm1hbmNlIG51bWJlcnMgb25seSBmb3IgdGhlCm1l ZGlhIGl0c2VsZiwgYW5kIHJlbHkgb24gdGhlICJpc19jYWNoZWQiIGF0dHJpYnV0ZSB0byByZXBy ZXNlbnQgdGhlCmZhY3QgdGhhdCB0aGVyZSBpcyBhIGNhY2hpbmcgbGF5ZXIuCgpUaGUgZmFjdCB0 aGF0IHdlIG9ubHkgZXhwb3NlIGEgc3Vic2V0IG9mIHRoZSBwZXJmb3JtYW5jZSBpbmZvcm1hdGlv bgpwcmVzZW50ZWQgaW4gdGhlIEhNQVQgdmlhIHN5c2ZzIGFzIGEgY29tcHJvbWlzZSwgZHJpdmVu IGJ5IGZhY3QgdGhhdCB0aG9zZQp1c2FnZXMgd2lsbCBiZSB0aGUgaGlnaGVzdCBwZXJmb3JtaW5n IGFuZCBiZWNhdXNlIHRvIHJlcHJlc2VudCBhbGwgcG9zc2libGUKcGF0aHMgY291bGQgY2F1c2Ug YW4gdW5tYW5hZ2VhYmxlIGV4cGxvc2lvbiBvZiBzeXNmcyBlbnRyaWVzLgoKSWYgd2UgZHVtcCBl dmVyeXRoaW5nIGZyb20gdGhlIEhNQVQgaW50byBzeXNmcyB3ZSBlbmQgdXAgd2l0aApPKG51bV90 YXJnZXRzICogbnVtX2luaXRpYXRvcnMgKiBudW1fY2FjaGluZ19sZXZlbHMpIGF0dHJpYnV0ZXMu ICBFYWNoIG9mCnRoZXNlIGF0dHJpYnV0ZXMgb25seSB0YWtlcyB1cCAyIGJ5dGVzIGluIGEgU3lz dGVtIExvY2FsaXR5IExhdGVuY3kgYW5kCkJhbmR3aWR0aCBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUs IGJ1dCBpZiB3ZSBoYXZlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBlbnRyeQpmb3IgZWFjaCBpdCBi ZWNvbWVzIG11Y2ggbW9yZSBleHBlbnNpdmUuCgpGb3IgZXhhbXBsZSwgdmVyeSBsYXJnZSBzeXN0 ZW1zIHRvZGF5IGNhbiBoYXZlIG9uIHRoZSBvcmRlciBvZiB0aG91c2FuZHMgb2YKTlVNQSBub2Rl cy4gIFNheSB3ZSBoYXZlIGEgc3lzdGVtIHdoaWNoIHVzZWQgdG8gaGF2ZSAxLDAwMCBOVU1BIG5v ZGVzIHRoYXQKZWFjaCBoYWQgYm90aCBhIENQVSBhbmQgbG9jYWwgbWVtb3J5LiAgVGhlIEhNQVQg YWxsb3dzIHVzIHRvIHNlcGFyYXRlIHRoZQpDUFVzIGFuZCBtZW1vcnkgaW50byBzZXBhcmF0ZSBO VU1BIG5vZGVzLCBzbyB3ZSBjYW4gZW5kIHVwIHdpdGggMSwwMDAgQ1BVCmluaXRpYXRvciBOVU1B IG5vZGVzIGFuZCAxLDAwMCBtZW1vcnkgdGFyZ2V0IE5VTUEgbm9kZXMuICBJZiB3ZSByZXByZXNl bnRlZAp0aGUgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gZm9yIGVhY2ggcG9zc2libGUgQ1BVL21l bW9yeSBwYWlyIGluIHN5c2ZzIHdlCndvdWxkIGVuZCB1cCB3aXRoIDEsMDAwLDAwMCBhdHRyaWJ1 dGUgZ3JvdXBzLgoKVGhpcyBpcyBhIGxvdCB0byBwYXNzIGluIGEgc2V0IG9mIHBhY2tlZCBkYXRh IHRhYmxlcywgYnV0IEkgdGhpbmsgd2UnbGwKYnJlYWsgc3lzZnMgaWYgd2UgdHJ5IHRvIGNyZWF0 ZSBtaWxsaW9ucyBvZiBhdHRyaWJ1dGVzLCByZWdhcmRsZXNzIG9mIGhvdwp3ZSBuZXN0IHRoZW0g aW4gYSBkaXJlY3RvcnkgaGllcmFyY2h5LgoKQnkgb25seSByZXByZXNlbnRpbmcgcGVyZm9ybWFu Y2UgaW5mb3JtYXRpb24gZm9yIGxvY2FsIChpbml0aWF0b3IsdGFyZ2V0KQpwYWlyaW5ncywgd2Ug cmVkdWNlIHRoZSBudW1iZXIgb2Ygc3lzZnMgZW50cmllcyB0byBPKG51bV90YXJnZXRzKS4KClNp Z25lZC1vZmYtYnk6IFJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4K LS0tCiBkcml2ZXJzL2FjcGkvaG1hdC9NYWtlZmlsZSAgICAgICAgICB8ICAgMiArLQogZHJpdmVy cy9hY3BpL2htYXQvY29yZS5jICAgICAgICAgICAgfCAyNjMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystCiBkcml2ZXJzL2FjcGkvaG1hdC9obWF0LmggICAgICAgICAgICB8ICAx NyArKysKIGRyaXZlcnMvYWNwaS9obWF0L3BlcmZfYXR0cmlidXRlcy5jIHwgIDU2ICsrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDMzNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYWNwaS9obWF0L3BlcmZfYXR0cmlidXRlcy5jCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9hY3BpL2htYXQvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvaG1hdC9N YWtlZmlsZQppbmRleCBlZGY0YmNiMWM5N2QuLmI1ZDFkODM2ODRkYSAxMDA2NDQKLS0tIGEvZHJp dmVycy9hY3BpL2htYXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hY3BpL2htYXQvTWFrZWZpbGUK QEAgLTEsMiArMSwyIEBACiBvYmotJChDT05GSUdfQUNQSV9ITUFUKSA6PSBobWF0Lm8KLWhtYXQt eSA6PSBjb3JlLm8gaW5pdGlhdG9yLm8gdGFyZ2V0Lm8KK2htYXQteSA6PSBjb3JlLm8gaW5pdGlh dG9yLm8gdGFyZ2V0Lm8gcGVyZl9hdHRyaWJ1dGVzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNw aS9obWF0L2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9obWF0L2NvcmUuYwppbmRleCA2MWI5MGRhZGY4 NGIuLjg5ZTg0NjU4ZmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2htYXQvY29yZS5jCisr KyBiL2RyaXZlcnMvYWNwaS9obWF0L2NvcmUuYwpAQCAtMjMsMTEgKzIzLDIyNSBAQAogI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJobWF0LmgiCiAKKyNkZWZpbmUgTk9fVkFMVUUJ LTEKKyNkZWZpbmUgTE9DQUxfSU5JVAkibG9jYWxfaW5pdCIKKwogc3RhdGljIExJU1RfSEVBRCh0 YXJnZXRfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKGluaXRpYXRvcl9saXN0KTsKK0xJU1RfSEVB RChsb2NhbGl0eV9saXN0KTsKIAogc3RhdGljIGJvb2wgYmFkX2htYXQ7CiAKKy8qIFBlcmZvcm1h bmNlIGF0dHJpYnV0ZXMgZm9yIGFuIGluaXRpYXRvci90YXJnZXQgcGFpci4gKi8KK3N0YXRpYyBp bnQgZ2V0X3BlcmZvcm1hbmNlX2RhdGEodTMyIGluaXRfcHhtLCB1MzIgdGd0X3B4bSwKKwkJc3Ry dWN0IGFjcGlfaG1hdF9sb2NhbGl0eSAqaG1hdF9sb2MpCit7CisJaW50IG51bV9pbml0ID0gaG1h dF9sb2MtPm51bWJlcl9vZl9pbml0aWF0b3JfUGRzOworCWludCBudW1fdGd0ID0gaG1hdF9sb2Mt Pm51bWJlcl9vZl90YXJnZXRfUGRzOworCWludCBpbml0X2lkeCA9IE5PX1ZBTFVFOworCWludCB0 Z3RfaWR4ID0gTk9fVkFMVUU7CisJdTMyICppbml0aWF0b3JzLCAqdGFyZ2V0czsKKwl1MTYgKmVu dHJpZXMsIHZhbDsKKwlpbnQgaTsKKworCS8qIHRoZSBpbml0aWF0b3IgYXJyYXkgaXMgYWZ0ZXIg dGhlIHN0cnVjdCBhY3BpX2htYXRfbG9jYWxpdHkgZmllbGRzICovCisJaW5pdGlhdG9ycyA9ICh1 MzIgKikoaG1hdF9sb2MgKyAxKTsKKwl0YXJnZXRzID0gJmluaXRpYXRvcnNbbnVtX2luaXRdOwor CWVudHJpZXMgPSAodTE2ICopJnRhcmdldHNbbnVtX3RndF07CisKKwlmb3IgKGkgPSAwOyBpIDwg bnVtX2luaXQ7IGkrKykgeworCQlpZiAoaW5pdGlhdG9yc1tpXSA9PSBpbml0X3B4bSkgeworCQkJ aW5pdF9pZHggPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaW5pdF9pZHggPT0gTk9f VkFMVUUpCisJCXJldHVybiBOT19WQUxVRTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdGd0OyBp KyspIHsKKwkJaWYgKHRhcmdldHNbaV0gPT0gdGd0X3B4bSkgeworCQkJdGd0X2lkeCA9IGk7CisJ CQlicmVhazsKKwkJfQorCX0KKworCWlmICh0Z3RfaWR4ID09IE5PX1ZBTFVFKQorCQlyZXR1cm4g Tk9fVkFMVUU7CisKKwl2YWwgPSBlbnRyaWVzW2luaXRfaWR4Km51bV90Z3QgKyB0Z3RfaWR4XTsK KwlpZiAodmFsIDwgMTAgfHwgdmFsID09IDB4RkZGRikKKwkJcmV0dXJuIE5PX1ZBTFVFOworCisJ cmV0dXJuIChpbnQpKHZhbCAqIGhtYXRfbG9jLT5lbnRyeV9iYXNlX3VuaXQpIC8gMTA7Cit9CisK Ky8qCisgKiAnZGlyZWN0aW9uJyBpcyBlaXRoZXIgUkVBRCBvciBXUklURQorICogTGF0ZW5jeSBp cyByZXBvcnRlZCBpbiBuYW5vc2Vjb25kcyBhbmQgYmFuZHdpZHRoIGlzIHJlcG9ydGVkIGluIE1C L3MuCisgKi8KK3N0YXRpYyBpbnQgaG1hdF9nZXRfYXR0cmlidXRlKGludCBpbml0X3B4bSwgaW50 IHRndF9weG0sIGludCBkaXJlY3Rpb24sCisJCWVudW0gaG1hdF9hdHRyX3R5cGUgdHlwZSkKK3sK KwlzdHJ1Y3QgbWVtb3J5X2xvY2FsaXR5ICpsb2M7CisJaW50IHZhbHVlOworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShsb2MsICZsb2NhbGl0eV9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBhY3BpX2ht YXRfbG9jYWxpdHkgKmhtYXRfbG9jID0gbG9jLT5obWF0X2xvYzsKKworCQlpZiAoZGlyZWN0aW9u ID09IFJFQUQgJiYgdHlwZSA9PSBMQVRFTkNZICYmCisJCSAgICAoaG1hdF9sb2MtPmRhdGFfdHlw ZSA9PSBBQ1BJX0hNQVRfQUNDRVNTX0xBVEVOQ1kgfHwKKwkJICAgICBobWF0X2xvYy0+ZGF0YV90 eXBlID09IEFDUElfSE1BVF9SRUFEX0xBVEVOQ1kpKSB7CisJCQl2YWx1ZSA9IGdldF9wZXJmb3Jt YW5jZV9kYXRhKGluaXRfcHhtLCB0Z3RfcHhtLAorCQkJCQlobWF0X2xvYyk7CisJCQlpZiAodmFs dWUgIT0gTk9fVkFMVUUpCisJCQkJcmV0dXJuIHZhbHVlOworCQl9CisKKwkJaWYgKGRpcmVjdGlv biA9PSBXUklURSAmJiB0eXBlID09IExBVEVOQ1kgJiYKKwkJICAgIChobWF0X2xvYy0+ZGF0YV90 eXBlID09IEFDUElfSE1BVF9BQ0NFU1NfTEFURU5DWSB8fAorCQkgICAgIGhtYXRfbG9jLT5kYXRh X3R5cGUgPT0gQUNQSV9ITUFUX1dSSVRFX0xBVEVOQ1kpKSB7CisJCQl2YWx1ZSA9IGdldF9wZXJm b3JtYW5jZV9kYXRhKGluaXRfcHhtLCB0Z3RfcHhtLAorCQkJCQlobWF0X2xvYyk7CisJCQlpZiAo dmFsdWUgIT0gTk9fVkFMVUUpCisJCQkJcmV0dXJuIHZhbHVlOworCQl9CisKKwkJaWYgKGRpcmVj dGlvbiA9PSBSRUFEICYmIHR5cGUgPT0gQkFORFdJRFRIICYmCisJCSAgICAoaG1hdF9sb2MtPmRh dGFfdHlwZSA9PSBBQ1BJX0hNQVRfQUNDRVNTX0JBTkRXSURUSCB8fAorCQkgICAgIGhtYXRfbG9j LT5kYXRhX3R5cGUgPT0gQUNQSV9ITUFUX1JFQURfQkFORFdJRFRIKSkgeworCQkJdmFsdWUgPSBn ZXRfcGVyZm9ybWFuY2VfZGF0YShpbml0X3B4bSwgdGd0X3B4bSwKKwkJCQkJaG1hdF9sb2MpOwor CQkJaWYgKHZhbHVlICE9IE5PX1ZBTFVFKQorCQkJCXJldHVybiB2YWx1ZTsKKwkJfQorCisJCWlm IChkaXJlY3Rpb24gPT0gV1JJVEUgJiYgdHlwZSA9PSBCQU5EV0lEVEggJiYKKwkJICAgIChobWF0 X2xvYy0+ZGF0YV90eXBlID09IEFDUElfSE1BVF9BQ0NFU1NfQkFORFdJRFRIIHx8CisJCSAgICAg aG1hdF9sb2MtPmRhdGFfdHlwZSA9PSBBQ1BJX0hNQVRfV1JJVEVfQkFORFdJRFRIKSkgeworCQkJ dmFsdWUgPSBnZXRfcGVyZm9ybWFuY2VfZGF0YShpbml0X3B4bSwgdGd0X3B4bSwKKwkJCQkJaG1h dF9sb2MpOworCQkJaWYgKHZhbHVlICE9IE5PX1ZBTFVFKQorCQkJCXJldHVybiB2YWx1ZTsKKwkJ fQorCX0KKworCXJldHVybiBOT19WQUxVRTsKK30KKworLyoKKyAqICdkaXJlY3Rpb24nIGlzIGVp dGhlciBSRUFEIG9yIFdSSVRFCisgKiBMYXRlbmN5IGlzIHJlcG9ydGVkIGluIG5hbm9zZWNvbmRz IGFuZCBiYW5kd2lkdGggaXMgcmVwb3J0ZWQgaW4gTUIvcy4KKyAqLworaW50IGhtYXRfbG9jYWxf YXR0cmlidXRlKHN0cnVjdCBkZXZpY2UgKnRndF9kZXYsIGludCBkaXJlY3Rpb24sCisJCWVudW0g aG1hdF9hdHRyX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGd0ID0gdG9f bWVtb3J5X3RhcmdldCh0Z3RfZGV2KTsKKwlpbnQgdGd0X3B4bSA9IHRndC0+bWEtPnByb3hpbWl0 eV9kb21haW47CisJaW50IGluaXRfcHhtOworCisJaWYgKCF0Z3QtPmxvY2FsX2luaXQpCisJCXJl dHVybiBOT19WQUxVRTsKKworCWluaXRfcHhtID0gdGd0LT5sb2NhbF9pbml0LT5weG07CisJcmV0 dXJuIGhtYXRfZ2V0X2F0dHJpYnV0ZShpbml0X3B4bSwgdGd0X3B4bSwgZGlyZWN0aW9uLCB0eXBl KTsKK30KKworc3RhdGljIGJvb2wgaXNfbG9jYWxfaW5pdChpbnQgaW5pdF9weG0sIGludCB0Z3Rf cHhtLCBpbnQgcmVhZF9sYXQsCisJCWludCB3cml0ZV9sYXQsIGludCByZWFkX2J3LCBpbnQgd3Jp dGVfYncpCit7CisJaWYgKHJlYWRfbGF0ICE9IGhtYXRfZ2V0X2F0dHJpYnV0ZShpbml0X3B4bSwg dGd0X3B4bSwgUkVBRCwgTEFURU5DWSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICh3cml0ZV9s YXQgIT0gaG1hdF9nZXRfYXR0cmlidXRlKGluaXRfcHhtLCB0Z3RfcHhtLCBXUklURSwgTEFURU5D WSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChyZWFkX2J3ICE9IGhtYXRfZ2V0X2F0dHJpYnV0 ZShpbml0X3B4bSwgdGd0X3B4bSwgUkVBRCwgQkFORFdJRFRIKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKHdyaXRlX2J3ICE9IGhtYXRfZ2V0X2F0dHJpYnV0ZShpbml0X3B4bSwgdGd0X3B4bSwg V1JJVEUsIEJBTkRXSURUSCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwZXJmb3JtYW5jZV9hdHRyaWJ1 dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGVyZm9ybWFuY2VfYXR0cmlidXRlcywKKwkubmFtZSA9 IExPQ0FMX0lOSVQsCit9OworCitzdGF0aWMgdm9pZCByZW1vdmVfcGVyZm9ybWFuY2VfYXR0cmli dXRlcyhzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGd0KQoreworCWlmICghdGd0LT5sb2NhbF9pbml0 KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZJWE1FOiBOZWVkIHRvIGVuaGFuY2UgdGhlIGNvcmUg c3lzZnMgY29kZSB0byByZW1vdmUgYWxsIHRoZSBsaW5rcworCSAqIGluIGJvdGggdGhlIGF0dHJp YnV0ZSBncm91cCBhbmQgaW4gdGhlIGRldmljZSBpdHNlbGYgd2hlbiB0aG9zZSBhcmUKKwkgKiBy ZW1vdmVkLgorCSAqLworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdGd0LT5kZXYua29iaiwgJnBlcmZv cm1hbmNlX2F0dHJpYnV0ZV9ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BlcmZvcm1hbmNl X2F0dHJpYnV0ZXMoc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndCkKK3sKKwlpbnQgcmVhZF9sYXQs IHdyaXRlX2xhdCwgcmVhZF9idywgd3JpdGVfYnc7CisJaW50IHRndF9weG0gPSB0Z3QtPm1hLT5w cm94aW1pdHlfZG9tYWluOworCXN0cnVjdCBrb2JqZWN0ICppbml0X2tvYmosICp0Z3Rfa29iajsK KwlzdHJ1Y3QgZGV2aWNlICppbml0X2RldiwgKnRndF9kZXY7CisJc3RydWN0IG1lbW9yeV9pbml0 aWF0b3IgKmluaXQ7CisJaW50IHJldDsKKworCWlmICghdGd0LT5sb2NhbF9pbml0KQorCQlyZXR1 cm4gMDsKKworCXRndF9kZXYgPSAmdGd0LT5kZXY7CisJdGd0X2tvYmogPSAmdGd0X2Rldi0+a29i ajsKKworCS8qIENyZWF0ZSBlbnRyaWVzIGZvciBpbml0aWF0b3IvdGFyZ2V0IHBhaXIgaW4gdGhl IHRhcmdldC4gICovCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKHRndF9rb2JqLCAmcGVyZm9y bWFuY2VfYXR0cmlidXRlX2dyb3VwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIGluaXRpYXRvcnMgYW5kIGZpbmQgYWxsIHRoZSBvbmVz IHRoYXQgaGF2ZSB0aGUgc2FtZQorCSAqIHBlcmZvcm1hbmNlIGFzIHRoZSBsb2NhbCBpbml0aWF0 b3IuCisJICovCisJcmVhZF9sYXQgPSBobWF0X2xvY2FsX2F0dHJpYnV0ZSh0Z3RfZGV2LCBSRUFE LCBMQVRFTkNZKTsKKwl3cml0ZV9sYXQgPSBobWF0X2xvY2FsX2F0dHJpYnV0ZSh0Z3RfZGV2LCBX UklURSwgTEFURU5DWSk7CisJcmVhZF9idyA9IGhtYXRfbG9jYWxfYXR0cmlidXRlKHRndF9kZXYs IFJFQUQsIEJBTkRXSURUSCk7CisJd3JpdGVfYncgPSBobWF0X2xvY2FsX2F0dHJpYnV0ZSh0Z3Rf ZGV2LCBXUklURSwgQkFORFdJRFRIKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5pdCwgJmlu aXRpYXRvcl9saXN0LCBsaXN0KSB7CisJCWluaXRfZGV2ID0gJmluaXQtPmRldjsKKwkJaW5pdF9r b2JqID0gJmluaXRfZGV2LT5rb2JqOworCisJCWlmIChpbml0ID09IHRndC0+bG9jYWxfaW5pdCB8 fAorCQkJaXNfbG9jYWxfaW5pdChpbml0LT5weG0sIHRndF9weG0sIHJlYWRfbGF0LAorCQkJCXdy aXRlX2xhdCwgcmVhZF9idywgd3JpdGVfYncpKSB7CisJCQlyZXQgPSBzeXNmc19hZGRfbGlua190 b19ncm91cCh0Z3Rfa29iaiwgTE9DQUxfSU5JVCwKKwkJCQkJaW5pdF9rb2JqLCBkZXZfbmFtZShp bml0X2RldikpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnI7CisKKwkJCS8qCisJCQkg KiBDcmVhdGUgYSBsaW5rIGluIHRoZSBsb2NhbCBpbml0aWF0b3IgdG8gdGhpcworCQkJICogdGFy Z2V0LgorCQkJICovCisJCQlyZXQgPSBzeXNmc19jcmVhdGVfbGluayhpbml0X2tvYmosIHRndF9r b2JqLAorCQkJCQlrb2JqZWN0X25hbWUodGd0X2tvYmopKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJ CWdvdG8gZXJyOworCQl9CisKKwl9CisJdGd0LT5oYXNfcGVyZl9hdHRyaWJ1dGVzID0gdHJ1ZTsK KwlyZXR1cm4gMDsKK2VycjoKKwlyZW1vdmVfcGVyZm9ybWFuY2VfYXR0cmlidXRlcyh0Z3QpOwor CXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgbGlua19ub2RlX2Zvcl9rb2JqKHVuc2lnbmVk IGludCBub2RlLCBzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlpZiAobm9kZV9kZXZpY2VzW25v ZGVdKQpAQCAtMTMyLDYgKzM0Niw5IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfbWVtb3J5X3Rhcmdl dChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZW1vdmVfbWVtb3J5 X3RhcmdldChzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGd0KQogeworCWlmICh0Z3QtPmhhc19wZXJm X2F0dHJpYnV0ZXMpCisJCXJlbW92ZV9wZXJmb3JtYW5jZV9hdHRyaWJ1dGVzKHRndCk7CisKIAlp ZiAodGd0LT5pc19yZWdpc3RlcmVkKSB7CiAJCXJlbW92ZV9ub2RlX2Zvcl9rb2JqKHB4bV90b19u b2RlKHRndC0+bWEtPnByb3hpbWl0eV9kb21haW4pLAogCQkJCSZ0Z3QtPmRldi5rb2JqKTsKQEAg LTI3Niw2ICs0OTMsMzggQEAgaG1hdF9wYXJzZV9hZGRyZXNzX3JhbmdlKHN0cnVjdCBhY3BpX3N1 YnRhYmxlX2hlYWRlciAqaGVhZGVyLAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50 IF9faW5pdCBobWF0X3BhcnNlX2xvY2FsaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAq aGVhZGVyLAorCQljb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgYWNwaV9obWF0 X2xvY2FsaXR5ICpobWF0X2xvYzsKKwlzdHJ1Y3QgbWVtb3J5X2xvY2FsaXR5ICpsb2M7CisKKwlp ZiAoYmFkX2htYXQpCisJCXJldHVybiAwOworCisJaG1hdF9sb2MgPSAoc3RydWN0IGFjcGlfaG1h dF9sb2NhbGl0eSAqKWhlYWRlcjsKKwlpZiAoIWhtYXRfbG9jKSB7CisJCXByX2VycigiSE1BVDog TlVMTCB0YWJsZSBlbnRyeVxuIik7CisJCWJhZF9obWF0ID0gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJLyogV2UgZG9uJ3QgcmVwb3J0IGNhY2hlZCBwZXJmb3JtYW5jZSBpbmZvcm1h dGlvbiBpbiBzeXNmcy4gKi8KKwlpZiAoaG1hdF9sb2MtPmZsYWdzID09IEFDUElfSE1BVF9NRU1P UlkgfHwKKwkJCWhtYXRfbG9jLT5mbGFncyA9PSBBQ1BJX0hNQVRfTEFTVF9MRVZFTF9DQUNIRSkg eworCQlsb2MgPSBremFsbG9jKHNpemVvZigqbG9jKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbG9j KSB7CisJCQliYWRfaG1hdCA9IHRydWU7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWxv Yy0+aG1hdF9sb2MgPSBobWF0X2xvYzsKKwkJbGlzdF9hZGRfdGFpbCgmbG9jLT5saXN0LCAmbG9j YWxpdHlfbGlzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGht YXRfcGFyc2VfY2FjaGUoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsCiAJCWNv bnN0IHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtNDMxLDYgKzY4MCw3IEBAIHNyYXRfcGFyc2Vf bWVtb3J5X2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAogc3Rh dGljIHZvaWQgaG1hdF9jbGVhbnVwKHZvaWQpCiB7CiAJc3RydWN0IG1lbW9yeV9pbml0aWF0b3Ig KmluaXQsICppbml0X2l0ZXI7CisJc3RydWN0IG1lbW9yeV9sb2NhbGl0eSAqbG9jLCAqbG9jX2l0 ZXI7CiAJc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndCwgKnRndF9pdGVyOwogCiAJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKHRndCwgdGd0X2l0ZXIsICZ0YXJnZXRfbGlzdCwgbGlzdCkKQEAgLTQz OCw2ICs2ODgsMTEgQEAgc3RhdGljIHZvaWQgaG1hdF9jbGVhbnVwKHZvaWQpCiAKIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoaW5pdCwgaW5pdF9pdGVyLCAmaW5pdGlhdG9yX2xpc3QsIGxpc3Qp CiAJCXJlbW92ZV9tZW1vcnlfaW5pdGlhdG9yKGluaXQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKGxvYywgbG9jX2l0ZXIsICZsb2NhbGl0eV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVs KCZsb2MtPmxpc3QpOworCQlrZnJlZShsb2MpOworCX0KIH0KIAogc3RhdGljIGludCBfX2luaXQg aG1hdF9pbml0KHZvaWQpCkBAIC00ODgsMTMgKzc0MywxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBo bWF0X2luaXQodm9pZCkKIAl9CiAKIAlpZiAoIWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfSE1B VCwgaG1hdF9ub29wX3BhcnNlKSkgewotCQlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9wcm9jIGhtYXRf cHJvY1syXTsKKwkJc3RydWN0IGFjcGlfc3VidGFibGVfcHJvYyBobWF0X3Byb2NbM107CiAKIAkJ bWVtc2V0KGhtYXRfcHJvYywgMCwgc2l6ZW9mKGhtYXRfcHJvYykpOwogCQlobWF0X3Byb2NbMF0u aWQgPSBBQ1BJX0hNQVRfVFlQRV9BRERSRVNTX1JBTkdFOwogCQlobWF0X3Byb2NbMF0uaGFuZGxl ciA9IGhtYXRfcGFyc2VfYWRkcmVzc19yYW5nZTsKIAkJaG1hdF9wcm9jWzFdLmlkID0gQUNQSV9I TUFUX1RZUEVfQ0FDSEU7CiAJCWhtYXRfcHJvY1sxXS5oYW5kbGVyID0gaG1hdF9wYXJzZV9jYWNo ZTsKKwkJaG1hdF9wcm9jWzJdLmlkID0gQUNQSV9ITUFUX1RZUEVfTE9DQUxJVFk7CisJCWhtYXRf cHJvY1syXS5oYW5kbGVyID0gaG1hdF9wYXJzZV9sb2NhbGl0eTsKIAogCQlhY3BpX3RhYmxlX3Bh cnNlX2VudHJpZXNfYXJyYXkoQUNQSV9TSUdfSE1BVCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBhY3Bp X3RhYmxlX2htYXQpLApAQCAtNTE2LDYgKzc3MywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBobWF0 X2luaXQodm9pZCkKIAkJcmV0ID0gcmVnaXN0ZXJfbWVtb3J5X3RhcmdldCh0Z3QpOwogCQlpZiAo cmV0KQogCQkJZ290byBlcnI7CisKKwkJcmV0ID0gYWRkX3BlcmZvcm1hbmNlX2F0dHJpYnV0ZXMo dGd0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9hY3BpL2htYXQvaG1hdC5oIGIvZHJpdmVycy9hY3BpL2htYXQvaG1hdC5o CmluZGV4IDEwOGFhZDFmOGFkNy4uODkyMDBmNWM0YjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Fj cGkvaG1hdC9obWF0LmgKKysrIGIvZHJpdmVycy9hY3BpL2htYXQvaG1hdC5oCkBAIC0xNiw2ICsx NiwxMSBAQAogI2lmbmRlZiBfQUNQSV9ITUFUX0hfCiAjZGVmaW5lIF9BQ1BJX0hNQVRfSF8KIAor ZW51bSBobWF0X2F0dHJfdHlwZSB7CisJTEFURU5DWSwKKwlCQU5EV0lEVEgsCit9OworCiBzdHJ1 Y3QgbWVtb3J5X2luaXRpYXRvciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBk ZXZpY2UgZGV2OwpAQCAtMzksOSArNDQsMjEgQEAgc3RydWN0IG1lbW9yeV90YXJnZXQgewogCiAJ Ym9vbCBpc19jYWNoZWQ7CiAJYm9vbCBpc19yZWdpc3RlcmVkOworCWJvb2wgaGFzX3BlcmZfYXR0 cmlidXRlczsKIH07CiAjZGVmaW5lIHRvX21lbW9yeV90YXJnZXQoZCkgY29udGFpbmVyX29mKChk KSwgc3RydWN0IG1lbW9yeV90YXJnZXQsIGRldikKIAorc3RydWN0IG1lbW9yeV9sb2NhbGl0eSB7 CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBhY3BpX2htYXRfbG9jYWxpdHkgKmht YXRfbG9jOworfTsKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1lbW9y eV9pbml0aWF0b3JfYXR0cmlidXRlX2dyb3Vwc1tdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgKm1lbW9yeV90YXJnZXRfYXR0cmlidXRlX2dyb3Vwc1tdOworZXh0ZXJuIHN0 cnVjdCBhdHRyaWJ1dGUgKnBlcmZvcm1hbmNlX2F0dHJpYnV0ZXNbXTsKKworZXh0ZXJuIHN0cnVj dCBsaXN0X2hlYWQgbG9jYWxpdHlfbGlzdDsKKworaW50IGhtYXRfbG9jYWxfYXR0cmlidXRlKHN0 cnVjdCBkZXZpY2UgKnRndF9kZXYsIGludCBkaXJlY3Rpb24sCisJCWVudW0gaG1hdF9hdHRyX3R5 cGUgdHlwZSk7CiAjZW5kaWYgLyogX0FDUElfSE1BVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9hY3BpL2htYXQvcGVyZl9hdHRyaWJ1dGVzLmMgYi9kcml2ZXJzL2FjcGkvaG1hdC9wZXJmX2F0 dHJpYnV0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYwZjEw N2I1ODgyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9obWF0L3BlcmZfYXR0cmli dXRlcy5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBIZXRlcm9nZW5lb3VzIE1lbW9yeSBBdHRy aWJ1dGVzIFRhYmxlIChITUFUKSBzeXNmcyBwZXJmb3JtYW5jZSBhdHRyaWJ1dGVzCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ IG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9zeXNmcy5oPgorI2luY2x1ZGUgImhtYXQuaCIKKworc3RhdGljIHNzaXplX3QgcmVhZF9s YXRfbnNlY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGht YXRfbG9jYWxfYXR0cmlidXRlKGRldiwgUkVBRCwgTEFURU5DWSkpOworfQorc3RhdGljIERFVklD RV9BVFRSX1JPKHJlYWRfbGF0X25zZWMpOworCitzdGF0aWMgc3NpemVfdCB3cml0ZV9sYXRfbnNl Y19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGhtYXRfbG9j YWxfYXR0cmlidXRlKGRldiwgV1JJVEUsIExBVEVOQ1kpKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRU Ul9STyh3cml0ZV9sYXRfbnNlYyk7CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfYndfTUJwc19zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGhtYXRfbG9jYWxfYXR0 cmlidXRlKGRldiwgUkVBRCwgQkFORFdJRFRIKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUk8o cmVhZF9id19NQnBzKTsKKworc3RhdGljIHNzaXplX3Qgd3JpdGVfYndfTUJwc19zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpi dWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQlobWF0X2xvY2FsX2F0dHJp YnV0ZShkZXYsIFdSSVRFLCBCQU5EV0lEVEgpKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUl9STyh3 cml0ZV9id19NQnBzKTsKKworc3RydWN0IGF0dHJpYnV0ZSAqcGVyZm9ybWFuY2VfYXR0cmlidXRl c1tdID0geworCSZkZXZfYXR0cl9yZWFkX2xhdF9uc2VjLmF0dHIsCisJJmRldl9hdHRyX3dyaXRl X2xhdF9uc2VjLmF0dHIsCisJJmRldl9hdHRyX3JlYWRfYndfTUJwcy5hdHRyLAorCSZkZXZfYXR0 cl93cml0ZV9id19NQnBzLmF0dHIsCisJTlVMTAorfTsKLS0gCjIuMTQuMwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1haWxpbmcg bGlzdApMaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtbnZkaW1tCg==