From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v2 06/12] libxl: carve out disk specific functions from libxl.c Date: Thu, 9 Feb 2017 10:30:19 +0100 Message-ID: <20170209093025.20849-7-jgross@suse.com> References: <20170209093025.20849-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cbl3i-0004ir-1r for xen-devel@lists.xenproject.org; Thu, 09 Feb 2017 09:30:35 +0000 In-Reply-To: <20170209093025.20849-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , haozhong.zhang@intel.com, wei.liu2@citrix.com, zhangchen.fnst@cn.fujitsu.com, ian.jackson@eu.citrix.com, yi.y.sun@linux.intel.com List-Id: xen-devel@lists.xenproject.org bGlieGwuYyBoYXMgZ3Jvd24gdG8gYW4gdW5jb21mb3J0YWJsZSBzaXplLiBDYXJ2ZSBvdXQgdGhl IGRpc2sKcmVsYXRlZCBmdW5jdGlvbnMgdG8gbGlieGxfZGlzay5jLgoKU2lnbmVkLW9mZi1ieTog SnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuY29tPgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxl ICAgICB8ICAgIDIgKy0KIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICB8IDEyMzMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy9saWJ4bC9saWJ4bF9k aXNrLmMgfCAxMjU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDMgZmlsZXMgY2hhbmdlZCwgMTI1OSBpbnNlcnRpb25zKCspLCAxMjM0IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX2Rpc2suYwoKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggNzUx NGNjMi4uYmFmNTkxZCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9v bHMvbGlieGwvTWFrZWZpbGUKQEAgLTEzNiw3ICsxMzYsNyBAQCBMSUJYTF9PQkpTID0gZmxleGFy cmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3BjaS5vIFwKIAkJ CWxpYnhsX3NhdmVfY2FsbG91dC5vIF9saWJ4bF9zYXZlX21zZ3NfY2FsbG91dC5vIFwKIAkJCWxp YnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwKIAkJCWxpYnhsX2RvbV9zdXNw ZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF91c2IubyBcCi0JCQlsaWJ4bF92dHBtLm8gbGli eGxfbmljLm8gXAorCQkJbGlieGxfdnRwbS5vIGxpYnhsX25pYy5vIGxpYnhsX2Rpc2subyBcCiAJ CQlsaWJ4bF9jcHVwb29sLm8gbGlieGxfc2NoZWQubyBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAkKExJQlhMX09CSlMteSkKIExJQlhMX09CSlMgKz0gbGlieGxfZ2VuaWQubwpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGwuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKaW5kZXggYWU2Yzdk NC4uM2Y4ZjE2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGwuYworKysgYi90b29scy9s aWJ4bC9saWJ4bC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAibGlieGxfYXJjaC5oIgog CiAjZGVmaW5lIFBBR0VfVE9fTUVNS0IocGFnZXMpICgocGFnZXMpICogNCkKLSNkZWZpbmUgQkFD S0VORF9TVFJJTkdfU0laRSA1CiAKIGludCBsaWJ4bF9jdHhfYWxsb2MobGlieGxfY3R4ICoqcGN0 eCwgaW50IHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCB4ZW50 b29sbG9nX2xvZ2dlciAqIGxnKQpAQCAtMTE5NywxNDAgKzExOTYsNiBAQCB2b2lkIGxpYnhsX2V2 ZGlzYWJsZV9kb21haW5fZGVhdGgobGlieGxfY3R4ICpjdHgsCiAgICAgR0NfRlJFRTsKIH0KIAot c3RhdGljIHZvaWQgZGlza19lamVjdF94c3dhdGNoX2NhbGxiYWNrKGxpYnhsX19lZ2MgKmVnYywg bGlieGxfX2V2X3hzd2F0Y2ggKncsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqd3BhdGgsIGNvbnN0IGNoYXIgKmVwYXRoKSB7Ci0gICAgRUdDX0dD OwotICAgIGxpYnhsX2V2Z2VuX2Rpc2tfZWplY3QgKmV2ZyA9ICh2b2lkKil3OwotICAgIGNvbnN0 IGNoYXIgKmJhY2tlbmQ7Ci0gICAgY2hhciAqdmFsdWU7Ci0gICAgY2hhciBiYWNrZW5kX3R5cGVb QkFDS0VORF9TVFJJTkdfU0laRSsxXTsKLSAgICBpbnQgcmM7Ci0KLSAgICB2YWx1ZSA9IGxpYnhs X194c19yZWFkKGdjLCBYQlRfTlVMTCwgd3BhdGgpOwotCi0gICAgaWYgKCF2YWx1ZSB8fCBzdHJj bXAodmFsdWUsICAiZWplY3QiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxpYnhsX194 c19wcmludGYoZ2MsIFhCVF9OVUxMLCB3cGF0aCwgIiIpKSB7Ci0gICAgICAgIExJQlhMX19FVkVO VF9ESVNBU1RFUihlZ2MsICJ4c193cml0ZSBmYWlsZWQgYWNrbm93bGVkZ2luZyBlamVjdCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgTElCWExfRVZFTlRfVFlQRV9ESVNL X0VKRUNUKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxpYnhsX2V2ZW50ICpldiA9 IE5FV19FVkVOVChlZ2MsIERJU0tfRUpFQ1QsIGV2Zy0+ZG9taWQsIGV2Zy0+dXNlcik7Ci0gICAg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZXYtPnUuZGlza19lamVjdC5kaXNrOwotCi0gICAg cmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgZXZnLT5iZV9wdHJfcGF0 aCwgJmJhY2tlbmQpOwotICAgIGlmIChyYykgewotICAgICAgICBMSUJYTF9fRVZFTlRfRElTQVNU RVIoZWdjLCAieHNfcmVhZCBmYWlsZWQgcmVhZGluZyBiZV9wdHJfcGF0aCIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlcnJubywgTElCWExfRVZFTlRfVFlQRV9ESVNLX0VKRUNUKTsK LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWJhY2tlbmQpIHsKLSAgICAgICAgLyog ZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQsIG5vdCBzaW1wbHkgZWplY3RlZCAqLwotICAgICAgICBy ZXR1cm47Ci0gICAgfQotCi0gICAgc3NjYW5mKGJhY2tlbmQsCi0gICAgICAgICAgICAiL2xvY2Fs L2RvbWFpbi8lZC9iYWNrZW5kLyUiIFRPU1RSSU5HKEJBQ0tFTkRfU1RSSU5HX1NJWkUpCi0gICAg ICAgICAgICJbYS16XS8lKmQvJSpkIiwKLSAgICAgICAgICAgJmRpc2stPmJhY2tlbmRfZG9taWQs IGJhY2tlbmRfdHlwZSk7Ci0gICAgaWYgKCFzdHJjbXAoYmFja2VuZF90eXBlLCAidGFwIikgfHwg IXN0cmNtcChiYWNrZW5kX3R5cGUsICJ2YmQiKSkgewotICAgICAgICBkaXNrLT5iYWNrZW5kID0g TElCWExfRElTS19CQUNLRU5EX1RBUDsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYmFja2VuZF90 eXBlLCAicWRpc2siKSkgewotICAgICAgICBkaXNrLT5iYWNrZW5kID0gTElCWExfRElTS19CQUNL RU5EX1FESVNLOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpc2stPmJhY2tlbmQgPSBMSUJYTF9E SVNLX0JBQ0tFTkRfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBkaXNrLT5wZGV2X3BhdGggPSBzdHJk dXAoIiIpOyAvKiB4eHggZml4bWUgbWFsbG9jIGZhaWx1cmUgKi8KLSAgICBkaXNrLT5mb3JtYXQg PSBMSUJYTF9ESVNLX0ZPUk1BVF9FTVBUWTsKLSAgICAvKiB0aGlzIHZhbHVlIGlzIHJldHVybmVk IHRvIHRoZSB1c2VyOiBkbyBub3QgZnJlZSByaWdodCBhd2F5ICovCi0gICAgZGlzay0+dmRldiA9 IGxpYnhsX19zdHJkdXAoTk9HQywgZXZnLT52ZGV2KTsKLSAgICBkaXNrLT5yZW1vdmFibGUgPSAx OwotICAgIGRpc2stPnJlYWR3cml0ZSA9IDA7Ci0gICAgZGlzay0+aXNfY2Ryb20gPSAxOwotCi0g ICAgbGlieGxfX2V2ZW50X29jY3VycmVkKGVnYywgZXYpOwotfQotCi1pbnQgbGlieGxfZXZlbmFi bGVfZGlza19lamVjdChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZ3Vlc3RfZG9taWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZGV2LCBsaWJ4bF9ldl91c2Vy IHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9ldmdlbl9kaXNrX2Vq ZWN0ICoqZXZnZW5fb3V0KSB7Ci0gICAgR0NfSU5JVChjdHgpOwotICAgIENUWF9MT0NLOwotICAg IGludCByYzsKLSAgICBjaGFyICpwYXRoOwotICAgIGxpYnhsX2V2Z2VuX2Rpc2tfZWplY3QgKmV2 ZyA9IE5VTEw7Ci0KLSAgICBldmcgPSBtYWxsb2Moc2l6ZW9mKCpldmcpKTsgIGlmICghZXZnKSB7 IHJjID0gRVJST1JfTk9NRU07IGdvdG8gb3V0OyB9Ci0gICAgbWVtc2V0KGV2ZywgMCwgc2l6ZW9m KCpldmcpKTsKLSAgICBldmctPnVzZXIgPSB1c2VyOwotICAgIGV2Zy0+ZG9taWQgPSBndWVzdF9k b21pZDsKLSAgICBMSUJYTF9MSVNUX0lOU0VSVF9IRUFEKCZDVFgtPmRpc2tfZWplY3RfZXZnZW5z LCBldmcsIGVudHJ5KTsKLQotICAgIHVpbnQzMl90IGRvbWlkID0gbGlieGxfZ2V0X3N0dWJkb21f aWQoY3R4LCBndWVzdF9kb21pZCk7Ci0KLSAgICBpZiAoIWRvbWlkKQotICAgICAgICBkb21pZCA9 IGd1ZXN0X2RvbWlkOwotCi0gICAgaW50IGRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rldl9u dW1iZXIodmRldiwgTlVMTCwgTlVMTCk7Ci0KLSAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZp Y2UvdmJkLyVkL2VqZWN0IiwKLSAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRo KGdjLCBkb21pZCksCi0gICAgICAgICAgICAgICAgIGRldmlkKTsKLSAgICBpZiAoIXBhdGgpIHsg cmMgPSBFUlJPUl9OT01FTTsgZ290byBvdXQ7IH0KLQotICAgIGNvbnN0IGNoYXIgKmxpYnhsX3Bh dGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2MsIGRvbWlkKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRldmlkKTsKLSAgICBldmctPmJlX3B0cl9wYXRoID0gbGli eGxfX3NwcmludGYoTk9HQywgIiVzL2JhY2tlbmQiLCBsaWJ4bF9wYXRoKTsKLQotICAgIGNvbnN0 IGNoYXIgKmNvbmZpZ3VyZWRfdmRldjsKLSAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQo Z2MsIFhCVF9OVUxMLAotICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9kZXYiLCBsaWJ4bF9wYXRo KSwgJmNvbmZpZ3VyZWRfdmRldik7Ci0gICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgIGV2Zy0+ dmRldiA9IGxpYnhsX19zdHJkdXAoTk9HQywgY29uZmlndXJlZF92ZGV2KTsKLQotICAgIHJjID0g bGlieGxfX2V2X3hzd2F0Y2hfcmVnaXN0ZXIoZ2MsICZldmctPndhdGNoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlza19lamVjdF94c3dhdGNoX2NhbGxiYWNrLCBwYXRo KTsKLSAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0gICAgKmV2Z2VuX291dCA9IGV2ZzsKLSAgICBD VFhfVU5MT0NLOwotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIDA7Ci0KLSBvdXQ6Ci0gICAgaWYg KGV2ZykKLSAgICAgICAgbGlieGxfX2V2ZGlzYWJsZV9kaXNrX2VqZWN0KGdjLCBldmcpOwotICAg IENUWF9VTkxPQ0s7Ci0gICAgR0NfRlJFRTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLXZvaWQgbGli eGxfX2V2ZGlzYWJsZV9kaXNrX2VqZWN0KGxpYnhsX19nYyAqZ2MsIGxpYnhsX2V2Z2VuX2Rpc2tf ZWplY3QgKmV2ZykgewotICAgIENUWF9MT0NLOwotCi0gICAgTElCWExfTElTVF9SRU1PVkUoZXZn LCBlbnRyeSk7Ci0KLSAgICBpZiAobGlieGxfX2V2X3hzd2F0Y2hfaXNyZWdpc3RlcmVkKCZldmct PndhdGNoKSkKLSAgICAgICAgbGlieGxfX2V2X3hzd2F0Y2hfZGVyZWdpc3RlcihnYywgJmV2Zy0+ d2F0Y2gpOwotCi0gICAgZnJlZShldmctPnZkZXYpOwotICAgIGZyZWUoZXZnLT5iZV9wdHJfcGF0 aCk7Ci0gICAgZnJlZShldmcpOwotCi0gICAgQ1RYX1VOTE9DSzsKLX0KLQotdm9pZCBsaWJ4bF9l dmRpc2FibGVfZGlza19lamVjdChsaWJ4bF9jdHggKmN0eCwgbGlieGxfZXZnZW5fZGlza19lamVj dCAqZXZnKSB7Ci0gICAgR0NfSU5JVChjdHgpOwotICAgIGxpYnhsX19ldmRpc2FibGVfZGlza19l amVjdChnYywgZXZnKTsKLSAgICBHQ19GUkVFOwotfQotCiAvKiBDYWxsYmFja3MgZm9yIGxpYnhs X2RvbWFpbl9kZXN0cm95ICovCiAKIHN0YXRpYyB2b2lkIGRvbWFpbl9kZXN0cm95X2NiKGxpYnhs X19lZ2MgKmVnYywgbGlieGxfX2RvbWFpbl9kZXN0cm95X3N0YXRlICpkZHMsCkBAIC0xOTQ4LDEw NDQgKzE4MTMsNiBAQCBpbnQgbGlieGxfX3Jlc29sdmVfZG9taWQobGlieGxfX2djICpnYywgY29u c3QgY2hhciAqbmFtZSwgdWludDMyX3QgKmRvbWlkKQogfQogCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotCi1pbnQgbGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQobGlieGxfX2djICpnYywg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgZG9taWQpCi17Ci0gICAgaW50IHJjOwotCi0gICAgbGlieGxfZGVmYm9vbF9z ZXRkZWZhdWx0KCZkaXNrLT5kaXNjYXJkX2VuYWJsZSwgISFkaXNrLT5yZWFkd3JpdGUpOwotICAg IGxpYnhsX2RlZmJvb2xfc2V0ZGVmYXVsdCgmZGlzay0+Y29sb19lbmFibGUsIGZhbHNlKTsKLSAg ICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmRpc2stPmNvbG9fcmVzdG9yZV9lbmFibGUsIGZh bHNlKTsKLQotICAgIHJjID0gbGlieGxfX3Jlc29sdmVfZG9taWQoZ2MsIGRpc2stPmJhY2tlbmRf ZG9tbmFtZSwgJmRpc2stPmJhY2tlbmRfZG9taWQpOwotICAgIGlmIChyYyA8IDApIHJldHVybiBy YzsKLQotICAgIC8qIEZvcmNlIFFkaXNrIGJhY2tlbmQgZm9yIENEUk9NIGRldmljZXMgb2YgZ3Vl c3RzIHdpdGggYSBkZXZpY2UgbW9kZWwuICovCi0gICAgaWYgKGRpc2stPmlzX2Nkcm9tICE9IDAg JiYKLSAgICAgICAgbGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCkgPT0gTElCWExfRE9NQUlO X1RZUEVfSFZNICYmCi0gICAgICAgIGxpYnhsX19kZXZpY2VfbW9kZWxfdmVyc2lvbl9ydW5uaW5n KGdjLCBkb21pZCkgIT0KLSAgICAgICAgTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fTk9ORSkg ewotICAgICAgICBpZiAoIShkaXNrLT5iYWNrZW5kID09IExJQlhMX0RJU0tfQkFDS0VORF9RRElT SyB8fAotICAgICAgICAgICAgICBkaXNrLT5iYWNrZW5kID09IExJQlhMX0RJU0tfQkFDS0VORF9V TktOT1dOKSkgewotICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJCYWNrZW5kIGZvciBD RCBkZXZpY2VzIG9uIEhWTSBndWVzdHMgbXVzdCBiZSBRZGlzayIpOwotICAgICAgICAgICAgcmV0 dXJuIEVSUk9SX0ZBSUw7Ci0gICAgICAgIH0KLSAgICAgICAgZGlzay0+YmFja2VuZCA9IExJQlhM X0RJU0tfQkFDS0VORF9RRElTSzsKLSAgICB9Ci0KLSAgICByYyA9IGxpYnhsX19kZXZpY2VfZGlz a19zZXRfYmFja2VuZChnYywgZGlzayk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgbGlieGxf X2RldmljZV9mcm9tX2Rpc2sobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RldmljZV9kaXNrICpkaXNr LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlICpkZXZp Y2UpCi17Ci0gICAgaW50IGRldmlkOwotCi0gICAgZGV2aWQgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tf ZGV2X251bWJlcihkaXNrLT52ZGV2LCBOVUxMLCBOVUxMKTsKLSAgICBpZiAoZGV2aWQ9PS0xKSB7 Ci0gICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiSW52YWxpZCBvciB1bnN1cHBvcnRlZCIiIHZp cnR1YWwgZGlzayBpZGVudGlmaWVyICVzIiwKLSAgICAgICAgICAgICBkaXNrLT52ZGV2KTsKLSAg ICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwotICAgIH0KLQotICAgIGRldmljZS0+YmFja2VuZF9k b21pZCA9IGRpc2stPmJhY2tlbmRfZG9taWQ7Ci0gICAgZGV2aWNlLT5iYWNrZW5kX2RldmlkID0g ZGV2aWQ7Ci0KLSAgICBzd2l0Y2ggKGRpc2stPmJhY2tlbmQpIHsKLSAgICAgICAgY2FzZSBMSUJY TF9ESVNLX0JBQ0tFTkRfUEhZOgotICAgICAgICAgICAgZGV2aWNlLT5iYWNrZW5kX2tpbmQgPSBM SUJYTF9fREVWSUNFX0tJTkRfVkJEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug TElCWExfRElTS19CQUNLRU5EX1RBUDoKLSAgICAgICAgICAgIGRldmljZS0+YmFja2VuZF9raW5k ID0gTElCWExfX0RFVklDRV9LSU5EX1ZCRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj YXNlIExJQlhMX0RJU0tfQkFDS0VORF9RRElTSzoKLSAgICAgICAgICAgIGRldmljZS0+YmFja2Vu ZF9raW5kID0gTElCWExfX0RFVklDRV9LSU5EX1FESVNLOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlVucmVjb2du aXplZCBkaXNrIGJhY2tlbmQgdHlwZTogJWQiLAotICAgICAgICAgICAgICAgICBkaXNrLT5iYWNr ZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKLSAgICB9Ci0KLSAgICBkZXZp Y2UtPmRvbWlkID0gZG9taWQ7Ci0gICAgZGV2aWNlLT5kZXZpZCA9IGRldmlkOwotICAgIGRldmlj ZS0+a2luZCAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVkJEOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K LS8qIFNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBkaXJlY3RseSBvbmx5IGJ5IGxvY2FsIGRpc2sg YXR0YWNoLAotICogYWxsIG90aGVyIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgcmVndWxh cgotICogbGlieGxfX2RldmljZV9kaXNrX2FkZCB3cmFwcGVyCi0gKgotICogVGhlIChvcHRpb25h bGx5KSBwYXNzZWQgZnVuY3Rpb24gZ2V0X3ZkZXYgd2lsbCBiZSB1c2VkIHRvCi0gKiBzZXQgdGhl IHZkZXYgdGhlIGRpc2sgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLiBXaGVuIGl0IGlzIHNldCB0aGUg Y2FsbGVyCi0gKiBtdXN0IGFsc28gcGFzcyBnZXRfdmRldl91c2VyLCB3aGljaCB3aWxsIGJlIHBh c3NlZCB0byBnZXRfdmRldi4KLSAqCi0gKiBUaGUgcGFzc2VkIGdldF92ZGV2IGZ1bmN0aW9uIGlz IGFsc28gaW4gY2hhcmdlIG9mIHByaW50aW5nCi0gKiB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBt ZXNzYWdlIHdoZW4gYXBwcm9waWF0ZS4KLSAqLwotc3RhdGljIHZvaWQgZGV2aWNlX2Rpc2tfYWRk KGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19hb19kZXZpY2UgKmFvZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqZ2V0X3ZkZXYobGlieGxfX2djICosIHZvaWQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhzX3RyYW5zYWN0aW9uX3QpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqZ2V0X3ZkZXZfdXNlcikKLXsKLSAgICBTVEFURV9BT19HQyhhb2Rldi0+ YW8pOwotICAgIGZsZXhhcnJheV90ICpmcm9udCA9IE5VTEw7Ci0gICAgZmxleGFycmF5X3QgKmJh Y2sgPSBOVUxMOwotICAgIGNoYXIgKmRldiA9IE5VTEwsICpzY3JpcHQ7Ci0gICAgbGlieGxfX2Rl dmljZSAqZGV2aWNlOwotICAgIGludCByYzsKLSAgICBsaWJ4bF9jdHggKmN0eCA9IGdjLT5vd25l cjsKLSAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKLSAgICBsaWJ4bF9kb21haW5f Y29uZmlnIGRfY29uZmlnOwotICAgIGxpYnhsX2RldmljZV9kaXNrIGRpc2tfc2F2ZWQ7Ci0gICAg bGlieGxfX2RvbWFpbl91c2VyZGF0YV9sb2NrICpsb2NrID0gTlVMTDsKLQotICAgIGxpYnhsX2Rv bWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOwotICAgIGxpYnhsX2RldmljZV9kaXNrX2luaXQo JmRpc2tfc2F2ZWQpOwotICAgIGxpYnhsX2RldmljZV9kaXNrX2NvcHkoY3R4LCAmZGlza19zYXZl ZCwgZGlzayk7Ci0KLSAgICBsaWJ4bF9kb21haW5fdHlwZSB0eXBlID0gbGlieGxfX2RvbWFpbl90 eXBlKGdjLCBkb21pZCk7Ci0gICAgaWYgKHR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJ RCkgewotICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0K LQotICAgIC8qCi0gICAgICogZ2V0X3ZkZXYgIT0gTlVMTCAtPiBsb2NhbCBhdHRhY2gKLSAgICAg KiBnZXRfdmRldiA9PSBOVUxMIC0+IGJsb2NrIGF0dGFjaAotICAgICAqCi0gICAgICogV2UgZG9u J3QgY2FyZSBhYm91dCBsb2NhbCBhdHRhY2ggc3RhdGUgYmVjYXVzZSBpdCdzIG9ubHkKLSAgICAg KiBpbnRlcm1lZGlhdGUgc3RhdGUuCi0gICAgICovCi0gICAgaWYgKCFnZXRfdmRldiAmJiBhb2Rl di0+dXBkYXRlX2pzb24pIHsKLSAgICAgICAgbG9jayA9IGxpYnhsX19sb2NrX2RvbWFpbl91c2Vy ZGF0YShnYywgZG9taWQpOwotICAgICAgICBpZiAoIWxvY2spIHsKLSAgICAgICAgICAgIHJjID0g RVJST1JfTE9DS19GQUlMOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotICAg ICAgICByYyA9IGxpYnhsX19nZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAmZF9j b25maWcpOwotICAgICAgICBpZiAocmMpIGdvdG8gb3V0OwotCi0gICAgICAgIERFVklDRV9BREQo ZGlzaywgZGlza3MsIGRvbWlkLCAmZGlza19zYXZlZCwgQ09NUEFSRV9ESVNLLCAmZF9jb25maWcp OwotCi0gICAgICAgIHJjID0gbGlieGxfX2RtX2NoZWNrX3N0YXJ0KGdjLCAmZF9jb25maWcsIGRv bWlkKTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBmb3IgKDs7KSB7 Ci0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7Ci0gICAg ICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAgaWYgKGdldF92ZGV2KSB7Ci0gICAgICAg ICAgICBhc3NlcnQoZ2V0X3ZkZXZfdXNlcik7Ci0gICAgICAgICAgICBkaXNrLT52ZGV2ID0gZ2V0 X3ZkZXYoZ2MsIGdldF92ZGV2X3VzZXIsIHQpOwotICAgICAgICAgICAgaWYgKGRpc2stPnZkZXYg PT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAgICAgICAg ICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJjID0g bGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1bHQoZ2MsIGRpc2ssIGRvbWlkKTsKLSAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKLQotICAgICAgICBmcm9udCA9IGZsZXhhcnJheV9tYWtlKGdjLCAx NiwgMSk7Ci0gICAgICAgIGJhY2sgPSBmbGV4YXJyYXlfbWFrZShnYywgMTYsIDEpOwotCi0gICAg ICAgIEdDTkVXKGRldmljZSk7Ci0gICAgICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX2Rpc2so Z2MsIGRvbWlkLCBkaXNrLCBkZXZpY2UpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAg ICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIiIgdmlydHVh bCBkaXNrIGlkZW50aWZpZXIgJXMiLAotICAgICAgICAgICAgICAgICBkaXNrLT52ZGV2KTsKLSAg ICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBsaWJ4bF9fZGV2 aWNlX2V4aXN0cyhnYywgdCwgZGV2aWNlKTsKLSAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7 Ci0gICAgICAgIGlmIChyYyA9PSAxKSB7ICAgICAgICAgICAgICAvKiBhbHJlYWR5IGV4aXN0cyBp biB4ZW5zdG9yZSAqLwotICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJkZXZpY2UgYWxy ZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKLSAgICAgICAgICAgIGFvZGV2LT5hY3Rpb24gPSBM SUJYTF9fREVWSUNFX0FDVElPTl9BREQ7IC8qIGZvciBlcnJvciBtZXNzYWdlICovCi0gICAgICAg ICAgICByYyA9IEVSUk9SX0RFVklDRV9FWElTVFM7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAg ICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZGlzay0+YmFja2VuZCkgewotICAgICAgICAgICAg Y2FzZSBMSUJYTF9ESVNLX0JBQ0tFTkRfUEhZOgotICAgICAgICAgICAgICAgIGRldiA9IGRpc2st PnBkZXZfcGF0aDsKLQotICAgICAgICBkb19iYWNrZW5kX3BoeToKLSAgICAgICAgICAgICAgICBm bGV4YXJyYXlfYXBwZW5kKGJhY2ssICJwYXJhbXMiKTsKLSAgICAgICAgICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssIGRldik7Ci0KLSAgICAgICAgICAgICAgICBzY3JpcHQgPSBsaWJ4bF9f YWJzX3BhdGgoZ2MsIGRpc2stPnNjcmlwdD86ICJibG9jayIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194ZW5fc2NyaXB0X2Rpcl9wYXRoKCkpOwotICAg ICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAic2NyaXB0Iiwgc2NyaXB0 KTsKLQotICAgICAgICAgICAgICAgIGFzc2VydChkZXZpY2UtPmJhY2tlbmRfa2luZCA9PSBMSUJY TF9fREVWSUNFX0tJTkRfVkJEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg ICAgY2FzZSBMSUJYTF9ESVNLX0JBQ0tFTkRfVEFQOgotICAgICAgICAgICAgICAgIGlmIChkZXYg PT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBkZXYgPSBsaWJ4bF9fYmxrdGFwX2RldnBh dGgoZ2MsIGRpc2stPnBkZXZfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRpc2stPmZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh ZGV2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkZhaWxl ZCB0byBnZXQgYmxrdGFwIGRldnBhdGggZm9yICVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzay0+cGRldl9wYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gRVJS T1JfRkFJTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZsZXhhcnJheV9h cHBlbmQoYmFjaywgInRhcGRpc2stcGFyYW1zIik7Ci0gICAgICAgICAgICAgICAgZmxleGFycmF5 X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgbGli eGxfX2RldmljZV9kaXNrX3N0cmluZ19vZl9mb3JtYXQoZGlzay0+Zm9ybWF0KSwKLSAgICAgICAg ICAgICAgICAgICAgZGlzay0+cGRldl9wYXRoKSk7Ci0KLSAgICAgICAgICAgICAgICAvKiB0YXAg YmFja2VuZHMgd2l0aCBzY3JpcHRzIGFyZSByZWplY3RlZCBieQotICAgICAgICAgICAgICAgICAq IGxpYnhsX19kZXZpY2VfZGlza19zZXRfYmFja2VuZCAqLwotICAgICAgICAgICAgICAgIGFzc2Vy dCghZGlzay0+c2NyaXB0KTsKLQotICAgICAgICAgICAgICAgIC8qIG5vdyBjcmVhdGUgYSBwaHkg ZGV2aWNlIHRvIGV4cG9ydCB0aGUgZGV2aWNlIHRvIHRoZSBndWVzdCAqLwotICAgICAgICAgICAg ICAgIGdvdG8gZG9fYmFja2VuZF9waHk7Ci0gICAgICAgICAgICBjYXNlIExJQlhMX0RJU0tfQkFD S0VORF9RRElTSzoKLSAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJwYXJh bXMiKTsKLSAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigi JXM6JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9kaXNr X3N0cmluZ19vZl9mb3JtYXQoZGlzay0+Zm9ybWF0KSwgZGlzay0+cGRldl9wYXRoKSk7Ci0gICAg ICAgICAgICAgICAgaWYgKGxpYnhsX2RlZmJvb2xfdmFsKGRpc2stPmNvbG9fZW5hYmxlKSkgewot ICAgICAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJjb2xvLWhvc3QiKTsK LSAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3ByaW50 ZihnYywgIiVzIiwgZGlzay0+Y29sb19ob3N0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGZsZXhh cnJheV9hcHBlbmQoYmFjaywgImNvbG8tcG9ydCIpOwotICAgICAgICAgICAgICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zcHJpbnRmKGdjLCAiJWQiLCBkaXNrLT5jb2xvX3Bv cnQpKTsKLSAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiY29sby1l eHBvcnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4 bF9fc3ByaW50ZihnYywgIiVzIiwgZGlzay0+Y29sb19leHBvcnQpKTsKLSAgICAgICAgICAgICAg ICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiYWN0aXZlLWRpc2siKTsKLSAgICAgICAgICAg ICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3ByaW50ZihnYywgIiVzIiwg ZGlzay0+YWN0aXZlX2Rpc2spKTsKLSAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVu ZChiYWNrLCAiaGlkZGVuLWRpc2siKTsKLSAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2Fw cGVuZChiYWNrLCBsaWJ4bF9fc3ByaW50ZihnYywgIiVzIiwgZGlzay0+aGlkZGVuX2Rpc2spKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGRldmljZS0+YmFja2Vu ZF9raW5kID09IExJQlhMX19ERVZJQ0VfS0lORF9RRElTSyk7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIExPR0QoRVJST1IsIGRv bWlkLCAiVW5yZWNvZ25pemVkIGRpc2sgYmFja2VuZCB0eXBlOiAlZCIsCi0gICAgICAgICAgICAg ICAgICAgICBkaXNrLT5iYWNrZW5kKTsKLSAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFM OwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgZmxleGFy cmF5X2FwcGVuZChiYWNrLCAiZnJvbnRlbmQtaWQiKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVu ZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgZG9taWQpKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVu ZChiYWNrLCAib25saW5lIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIjEiKTsK LSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAicmVtb3ZhYmxlIik7Ci0gICAgICAgIGZs ZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIChkaXNrLT5yZW1vdmFibGUpID8g MSA6IDApKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiYm9vdGFibGUiKTsKLSAg ICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgMSkpOwotICAgICAg ICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJzdGF0ZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOwotICAg ICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJkZXYiKTsKLSAgICAgICAgZmxleGFycmF5X2Fw cGVuZChiYWNrLCBkaXNrLT52ZGV2KTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAi dHlwZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19kZXZpY2VfZGlz a19zdHJpbmdfb2ZfYmFja2VuZChkaXNrLT5iYWNrZW5kKSk7Ci0gICAgICAgIGZsZXhhcnJheV9h cHBlbmQoYmFjaywgIm1vZGUiKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBkaXNr LT5yZWFkd3JpdGUgPyAidyIgOiAiciIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ss ICJkZXZpY2UtdHlwZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGRpc2stPmlz X2Nkcm9tID8gImNkcm9tIiA6ICJkaXNrIik7Ci0gICAgICAgIGlmIChkaXNrLT5kaXJlY3RfaW9f c2FmZSkgewotICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiZGlyZWN0LWlvLXNh ZmUiKTsKLSAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIjEiKTsKLSAgICAgICAg fQotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImRpc2NhcmQtZW5hYmxlIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKGRpc2stPmRp c2NhcmRfZW5hYmxlKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgOiAiMCIp OwotCi0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJiYWNrZW5kLWlkIik7Ci0gICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsIEdDU1BSSU5URigiJWQiLCBkaXNrLT5iYWNrZW5k X2RvbWlkKSk7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJzdGF0ZSIpOwotICAg ICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJ bml0aWFsaXNpbmcpKTsKLSAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgInZpcnR1YWwt ZGV2aWNlIik7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsIEdDU1BSSU5URigiJWQi LCBkZXZpY2UtPmRldmlkKSk7Ci0gICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJkZXZp Y2UtdHlwZSIpOwotICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBkaXNrLT5pc19jZHJv bSA/ICJjZHJvbSIgOiAiZGlzayIpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE9sZCBQViBr ZXJuZWwgZGlzayBmcm9udGVuZHMgYmVmb3JlIDIuNi4yNiByZWx5IG9uIHRvb2wgc3RhY2sgdG8K LSAgICAgICAgICogd3JpdGUgZGlzayBuYXRpdmUgcHJvdG9jb2wgdG8gZnJvbnRlbmQgbm9kZS4g WGVuZCBkb2VzIHRoaXMsIHBvcnQKLSAgICAgICAgICogdGhpcyBiZWhhdmlvdXIgdG8geGwuCi0g ICAgICAgICAqCi0gICAgICAgICAqIE5ldyBrZXJuZWxzIHdyaXRlIHRoaXMgbm9kZSB0aGVtc2Vs dmVzLiBJbiB0aGF0IGNhc2UgaXQganVzdAotICAgICAgICAgKiBvdmVyd3JpdGVzIGFuIGV4aXN0 aW5nIG5vZGUgd2hpY2ggaXMgT0suCi0gICAgICAgICAqLwotICAgICAgICBpZiAodHlwZSA9PSBM SUJYTF9ET01BSU5fVFlQRV9QVikgewotICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvdG9jb2wg PQotICAgICAgICAgICAgICAgIHhjX2RvbWFpbl9nZXRfbmF0aXZlX3Byb3RvY29sKGN0eC0+eGNo LCBkb21pZCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9jb2wpIHsKLSAgICAgICAgICAgICAgICBm bGV4YXJyYXlfYXBwZW5kKGZyb250LCAicHJvdG9jb2wiKTsKLSAgICAgICAgICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kKGZyb250LCBsaWJ4bF9fc3RyZHVwKGdjLCBwcm90b2NvbCkpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnZXRfdmRldiAmJiBhb2Rldi0+dXBk YXRlX2pzb24pIHsKLSAgICAgICAgICAgIHJjID0gbGlieGxfX3NldF9kb21haW5fY29uZmlndXJh dGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7Ci0gICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0 OwotICAgICAgICB9Ci0KLSAgICAgICAgbGlieGxfX2RldmljZV9nZW5lcmljX2FkZChnYywgdCwg ZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNf b2ZfZmxleGFycmF5KGdjLCBiYWNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgZnJvbnQpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5z YWN0aW9uX2NvbW1pdChnYywgJnQpOwotICAgICAgICBpZiAoIXJjKSBicmVhazsKLSAgICAgICAg aWYgKHJjIDwgMCkgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgYW9kZXYtPmRldiA9IGRldmljZTsK LSAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklDRV9BQ1RJT05fQUREOwotICAgIGxpYnhs X193YWl0X2RldmljZV9jb25uZWN0aW9uKGVnYywgYW9kZXYpOwotCi0gICAgcmMgPSAwOwotCi1v dXQ6Ci0gICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7Ci0gICAgaWYgKGxv Y2spIGxpYnhsX191bmxvY2tfZG9tYWluX3VzZXJkYXRhKGxvY2spOwotICAgIGxpYnhsX2Rldmlj ZV9kaXNrX2Rpc3Bvc2UoJmRpc2tfc2F2ZWQpOwotICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlz cG9zZSgmZF9jb25maWcpOwotICAgIGFvZGV2LT5yYyA9IHJjOwotICAgIGlmIChyYykgYW9kZXYt PmNhbGxiYWNrKGVnYywgYW9kZXYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbGli eGxfX2RldmljZV9kaXNrX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9k ZXYpCi17Ci0gICAgZGV2aWNlX2Rpc2tfYWRkKGVnYywgZG9taWQsIGRpc2ssIGFvZGV2LCBOVUxM LCBOVUxMKTsKLX0KLQotc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX2Rpc2tfZnJvbV94ZW5zdG9y ZShsaWJ4bF9fZ2MgKmdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpsaWJ4bF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaykKLXsKLSAgICBsaWJ4bF9jdHggKmN0 eCA9IGxpYnhsX19nY19vd25lcihnYyk7Ci0gICAgdW5zaWduZWQgaW50IGxlbjsKLSAgICBjaGFy ICp0bXA7Ci0gICAgaW50IHJjOwotCi0gICAgbGlieGxfZGV2aWNlX2Rpc2tfaW5pdChkaXNrKTsK LQotICAgIGNvbnN0IGNoYXIgKmJhY2tlbmRfcGF0aDsKLSAgICByYyA9IGxpYnhsX194c19yZWFk X2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH Q1NQUklOVEYoIiVzL2JhY2tlbmQiLCBsaWJ4bF9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmJhY2tlbmRfcGF0aCk7Ci0gICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAg IGlmICghYmFja2VuZF9wYXRoKSB7Ci0gICAgICAgIExPRyhFUlJPUiwgImRpc2sgJXMgZG9lcyBu b3QgZXhpc3QgKG5vIGJhY2tlbmQgcGF0aCIsIGxpYnhsX3BhdGgpOwotICAgICAgICByYyA9IEVS Uk9SX0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHJjID0gbGlieGxfX2Jh Y2tlbmRwYXRoX3BhcnNlX2RvbWlkKGdjLCBiYWNrZW5kX3BhdGgsICZkaXNrLT5iYWNrZW5kX2Rv bWlkKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgTE9HKEVSUk9SLCAiVW5hYmxlIHRvIGZldGNo IGRldmljZSBiYWNrZW5kIGRvbWlkIGZyb20gJXMiLCBiYWNrZW5kX3BhdGgpOwotICAgICAgICBn b3RvIG91dDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqICJwYXJhbXMiIG1heSBub3QgYmUgcHJl c2VudDsgYnV0IGV2ZXJ5dGhpbmcgZWxzZSBtdXN0IGJlLgotICAgICAqIGNvbG8gcmVsZWF0ZWQg ZW50cmllcyhjb2xvLWhvc3QsIGNvbG8tcG9ydCwgY29sby1leHBvcnQsCi0gICAgICogYWN0aXZl LWRpc2sgYW5kIGhpZGRlbi1kaXNrKSBhcmUgcHJlc2VudCBvbmx5IGlmIGNvbG8gaXMKLSAgICAg KiBlbmFibGVkLgotICAgICAqLwotICAgIHRtcCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxM LAotICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wYXJhbXMiLCBsaWJ4bF9wYXRoKSwg Jmxlbik7Ci0gICAgaWYgKHRtcCAmJiBzdHJjaHIodG1wLCAnOicpKSB7Ci0gICAgICAgIGRpc2st PnBkZXZfcGF0aCA9IHN0cmR1cChzdHJjaHIodG1wLCAnOicpICsgMSk7Ci0gICAgICAgIGZyZWUo dG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkaXNrLT5wZGV2X3BhdGggPSB0bXA7Ci0gICAg fQotCi0gICAgdG1wID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCi0gICAgICAgICAgICAg ICAgICBHQ1NQUklOVEYoIiVzL2NvbG8taG9zdCIsIGxpYnhsX3BhdGgpLCAmbGVuKTsKLSAgICBp ZiAodG1wKSB7Ci0gICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZkaXNrLT5jb2xvX2VuYWJsZSwg dHJ1ZSk7Ci0gICAgICAgIGRpc2stPmNvbG9faG9zdCA9IHRtcDsKLQotICAgICAgICB0bXAgPSB4 c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIiVzL2NvbG8tcG9ydCIsIGxpYnhsX3BhdGgpLCAmbGVuKTsKLSAgICAgICAgaWYgKCF0bXAp IHsKLSAgICAgICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9jb2xv LXBvcnQiLCBsaWJ4bF9wYXRoKTsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAg fQotICAgICAgICBkaXNrLT5jb2xvX3BvcnQgPSBhdG9pKHRtcCk7Ci0KLSNkZWZpbmUgWFNfUkVB RF9DT0xPKHBhcmFtLCBpdGVtKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgdG1wID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVz LyIjcGFyYW0iIiwgbGlieGxfcGF0aCksICZsZW4pOyAgICAgICAgIFwKLSAgICAgICAgaWYgKCF0 bXApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy8iI3Bh cmFtIiIsIGxpYnhsX3BhdGgpOyAgIFwKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgZGlzay0+aXRlbSA9IHRtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0gICAgICAgIFhTX1JFQURfQ09MTyhj b2xvLWV4cG9ydCwgY29sb19leHBvcnQpOwotICAgICAgICBYU19SRUFEX0NPTE8oYWN0aXZlLWRp c2ssIGFjdGl2ZV9kaXNrKTsKLSAgICAgICAgWFNfUkVBRF9DT0xPKGhpZGRlbi1kaXNrLCBoaWRk ZW5fZGlzayk7Ci0jdW5kZWYgWFNfUkVBRF9DT0xPCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbGli eGxfZGVmYm9vbF9zZXQoJmRpc2stPmNvbG9fZW5hYmxlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg dG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvdHlwZSIsIGxpYnhsX3BhdGgpKTsKLSAgICBpZiAoIXRtcCkgewot ICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvdHlwZSIsIGxpYnhs X3BhdGgpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIGxpYnhsX3N0cmluZ190 b19iYWNrZW5kKGN0eCwgdG1wLCAmKGRpc2stPmJhY2tlbmQpKTsKLQotICAgIGRpc2stPnZkZXYg PSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBH Q1NQUklOVEYoIiVzL2RldiIsIGxpYnhsX3BhdGgpLCAmbGVuKTsKLSAgICBpZiAoIWRpc2stPnZk ZXYpIHsKLSAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL2RldiIs IGxpYnhsX3BhdGgpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgdG1wID0g bGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBsaWJ4bF9fc3ByaW50ZgotICAgICAgICAgICAg ICAgICAgICAgICAgIChnYywgIiVzL3JlbW92YWJsZSIsIGxpYnhsX3BhdGgpKTsKLSAgICBpZiAo IXRtcCkgewotICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvcmVt b3ZhYmxlIiwgbGlieGxfcGF0aCk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAg ZGlzay0+cmVtb3ZhYmxlID0gYXRvaSh0bXApOwotCi0gICAgdG1wID0gbGlieGxfX3hzX3JlYWQo Z2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL21vZGUiLCBsaWJ4bF9wYXRoKSk7Ci0gICAgaWYg KCF0bXApIHsKLSAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL21v ZGUiLCBsaWJ4bF9wYXRoKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICBpZiAo IXN0cmNtcCh0bXAsICJ3IikpCi0gICAgICAgIGRpc2stPnJlYWR3cml0ZSA9IDE7Ci0gICAgZWxz ZQotICAgICAgICBkaXNrLT5yZWFkd3JpdGUgPSAwOwotCi0gICAgdG1wID0gbGlieGxfX3hzX3Jl YWQoZ2MsIFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMv ZGV2aWNlLXR5cGUiLCBsaWJ4bF9wYXRoKSk7Ci0gICAgaWYgKCF0bXApIHsKLSAgICAgICAgTE9H KEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL2RldmljZS10eXBlIiwgbGlieGxfcGF0 aCk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgZGlzay0+aXNfY2Ryb20gPSAh c3RyY21wKHRtcCwgImNkcm9tIik7Ci0KLSAgICBkaXNrLT5mb3JtYXQgPSBMSUJYTF9ESVNLX0ZP Uk1BVF9VTktOT1dOOwotCi0gICAgcmV0dXJuIDA7Ci1jbGVhbnVwOgotICAgIHJjID0gRVJST1Jf RkFJTDsKLSBvdXQ6Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZShkaXNrKTsKLSAgICBy ZXR1cm4gcmM7Ci19Ci0KLWludCBsaWJ4bF92ZGV2X3RvX2RldmljZV9kaXNrKGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnZkZXYsIGxpYnhsX2RldmljZV9kaXNrICpkaXNrKQotewotICAgIEdDX0lOSVQoY3R4 KTsKLSAgICBjaGFyICpkb21feGxfcGF0aCwgKmxpYnhsX3BhdGg7Ci0gICAgaW50IGRldmlkID0g bGlieGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIodmRldiwgTlVMTCwgTlVMTCk7Ci0gICAgaW50 IHJjID0gRVJST1JfRkFJTDsKLQotICAgIGlmIChkZXZpZCA8IDApCi0gICAgICAgIHJldHVybiBF UlJPUl9JTlZBTDsKLQotICAgIGxpYnhsX2RldmljZV9kaXNrX2luaXQoZGlzayk7Ci0KLSAgICBk b21feGxfcGF0aCA9IGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCk7Ci0gICAgaWYgKCFk b21feGxfcGF0aCkgewotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgbGlieGxfcGF0aCA9 IEdDU1BSSU5URigiJXMvZGV2aWNlL3ZiZC8lZCIsIGRvbV94bF9wYXRoLCBkZXZpZCk7Ci0KLSAg ICByYyA9IGxpYnhsX19kZXZpY2VfZGlza19mcm9tX3hlbnN0b3JlKGdjLCBsaWJ4bF9wYXRoLCBk aXNrKTsKLW91dDoKLSAgICBHQ19GUkVFOwotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBsaWJ4bF9fYXBwZW5kX2Rpc2tfbGlzdChsaWJ4bF9fZ2MgKmdjLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICoqZGlza3Ms Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuZGlza3Mp Ci17Ci0gICAgY2hhciAqbGlieGxfZGlyX3BhdGggPSBOVUxMOwotICAgIGNoYXIgKipkaXIgPSBO VUxMOwotICAgIHVuc2lnbmVkIGludCBuID0gMDsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqcGRp c2sgPSBOVUxMLCAqcGRpc2tfZW5kID0gTlVMTDsKLSAgICBpbnQgcmM9MDsKLSAgICBpbnQgaW5p dGlhbF9kaXNrcyA9ICpuZGlza3M7Ci0KLSAgICBsaWJ4bF9kaXJfcGF0aCA9IEdDU1BSSU5URigi JXMvZGV2aWNlL3ZiZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfbGlieGxf cGF0aChnYywgZG9taWQpKTsKLSAgICBkaXIgPSBsaWJ4bF9feHNfZGlyZWN0b3J5KGdjLCBYQlRf TlVMTCwgbGlieGxfZGlyX3BhdGgsICZuKTsKLSAgICBpZiAoZGlyICYmIG4pIHsKLSAgICAgICAg bGlieGxfZGV2aWNlX2Rpc2sgKnRtcDsKLSAgICAgICAgdG1wID0gcmVhbGxvYygqZGlza3MsIHNp emVvZiAobGlieGxfZGV2aWNlX2Rpc2spICogKCpuZGlza3MgKyBuKSk7Ci0gICAgICAgIGlmICh0 bXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9OT01FTTsKLSAgICAgICAgKmRp c2tzID0gdG1wOwotICAgICAgICBwZGlzayA9ICpkaXNrcyArIGluaXRpYWxfZGlza3M7Ci0gICAg ICAgIHBkaXNrX2VuZCA9ICpkaXNrcyArIGluaXRpYWxfZGlza3MgKyBuOwotICAgICAgICBmb3Ig KDsgcGRpc2sgPCBwZGlza19lbmQ7IHBkaXNrKyssIGRpcisrKSB7Ci0gICAgICAgICAgICBjb25z dCBjaGFyICpwOwotICAgICAgICAgICAgcCA9IEdDU1BSSU5URigiJXMvJXMiLCBsaWJ4bF9kaXJf cGF0aCwgKmRpcik7Ci0gICAgICAgICAgICBpZiAoKHJjPWxpYnhsX19kZXZpY2VfZGlza19mcm9t X3hlbnN0b3JlKGdjLCBwLCBwZGlzaykpKQotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAg ICAgICAgICAgKm5kaXNrcyArPSAxOwotICAgICAgICB9Ci0gICAgfQotb3V0OgotICAgIHJldHVy biByYzsKLX0KLQotbGlieGxfZGV2aWNlX2Rpc2sgKmxpYnhsX2RldmljZV9kaXNrX2xpc3QobGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSkKLXsKLSAgICBHQ19JTklUKGN0 eCk7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2tzID0gTlVMTDsKLSAgICBpbnQgcmM7Ci0K LSAgICAqbnVtID0gMDsKLQotICAgIHJjID0gbGlieGxfX2FwcGVuZF9kaXNrX2xpc3QoZ2MsIGRv bWlkLCAmZGlza3MsIG51bSk7Ci0gICAgaWYgKHJjKSBnb3RvIG91dF9lcnI7Ci0KLSAgICBHQ19G UkVFOwotICAgIHJldHVybiBkaXNrczsKLQotb3V0X2VycjoKLSAgICBMT0coRVJST1IsICJVbmFi bGUgdG8gbGlzdCBkaXNrcyIpOwotICAgIHdoaWxlIChkaXNrcyAmJiAqbnVtKSB7Ci0gICAgICAg ICgqbnVtKS0tOwotICAgICAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrc1sqbnVt XSk7Ci0gICAgfQotICAgIGZyZWUoZGlza3MpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1pbnQg bGlieGxfZGV2aWNlX2Rpc2tfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywg bGlieGxfZGlza2luZm8gKmRpc2tpbmZvKQotewotICAgIEdDX0lOSVQoY3R4KTsKLSAgICBjaGFy ICpkb21wYXRoLCAqZmVfcGF0aCwgKmxpYnhsX3BhdGg7Ci0gICAgY2hhciAqdmFsOwotICAgIGlu dCByYzsKLQotICAgIGRpc2tpbmZvLT5iYWNrZW5kID0gTlVMTDsKLQotICAgIGRvbXBhdGggPSBs aWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKTsKLSAgICBkaXNraW5mby0+ZGV2aWQgPSBs aWJ4bF9fZGV2aWNlX2Rpc2tfZGV2X251bWJlcihkaXNrLT52ZGV2LCBOVUxMLCBOVUxMKTsKLQot ICAgIC8qIHRhcCBkZXZpY2VzIGVudHJpZXMgaW4geGVuc3RvcmUgYXJlIHdyaXR0ZW4gYXMgdmJk IGRldmljZXMuICovCi0gICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3ZiZC8lZCIs IGRvbXBhdGgsIGRpc2tpbmZvLT5kZXZpZCk7Ci0gICAgbGlieGxfcGF0aCA9IEdDU1BSSU5URigi JXMvZGV2aWNlL3ZiZC8lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNf bGlieGxfcGF0aChnYywgZG9taWQpLCBkaXNraW5mby0+ZGV2aWQpOwotICAgIGRpc2tpbmZvLT5i YWNrZW5kID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGxpYnhsX3BhdGgpLCBOVUxMKTsK LSAgICBpZiAoIWRpc2tpbmZvLT5iYWNrZW5kKSB7Ci0gICAgICAgIEdDX0ZSRUU7Ci0gICAgICAg IHJldHVybiBFUlJPUl9GQUlMOwotICAgIH0KLSAgICByYyA9IGxpYnhsX19iYWNrZW5kcGF0aF9w YXJzZV9kb21pZChnYywgZGlza2luZm8tPmJhY2tlbmQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmRpc2tpbmZvLT5iYWNrZW5kX2lkKTsKLSAgICBpZiAocmMpIGdv dG8gb3V0OwotCi0gICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklO VEYoIiVzL3N0YXRlIiwgZmVfcGF0aCkpOwotICAgIGRpc2tpbmZvLT5zdGF0ZSA9IHZhbCA/IHN0 cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKLSAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywg WEJUX05VTEwsIEdDU1BSSU5URigiJXMvZXZlbnQtY2hhbm5lbCIsIGZlX3BhdGgpKTsKLSAgICBk aXNraW5mby0+ZXZ0Y2ggPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7Ci0gICAg dmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL3JpbmctcmVm IiwgZmVfcGF0aCkpOwotICAgIGRpc2tpbmZvLT5ycmVmID0gdmFsID8gc3RydG91bCh2YWwsIE5V TEwsIDEwKSA6IC0xOwotICAgIGRpc2tpbmZvLT5mcm9udGVuZCA9IHhzX3JlYWQoY3R4LT54c2gs IFhCVF9OVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIl cy9mcm9udGVuZCIsIGxpYnhsX3BhdGgpLCBOVUxMKTsKLSAgICBkaXNraW5mby0+ZnJvbnRlbmRf aWQgPSBkb21pZDsKLQotICAgIEdDX0ZSRUU7Ci0gICAgcmV0dXJuIDA7Ci0KLSBvdXQ6Ci0gICAg ZnJlZShkaXNraW5mby0+YmFja2VuZCk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgbGlieGxf Y2Ryb21faW5zZXJ0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgbGlieGxfZGV2aWNl X2Rpc2sgKmRpc2ssCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3Bf aG93ICphb19ob3cpCi17Ci0gICAgQU9fQ1JFQVRFKGN0eCwgZG9taWQsIGFvX2hvdyk7Ci0gICAg aW50IG51bSA9IDAsIGk7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2tzID0gTlVMTCwgZGlz a19zYXZlZCwgZGlza19lbXB0eTsKLSAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOwot ICAgIGludCByYywgZG1fdmVyOwotICAgIGxpYnhsX19kZXZpY2UgZGV2aWNlOwotICAgIGNvbnN0 IGNoYXIgKmJlX3BhdGgsICpsaWJ4bF9wYXRoOwotICAgIGNoYXIgKiB0bXA7Ci0gICAgbGlieGxf X2RvbWFpbl91c2VyZGF0YV9sb2NrICpsb2NrID0gTlVMTDsKLSAgICB4c190cmFuc2FjdGlvbl90 IHQgPSBYQlRfTlVMTDsKLSAgICBmbGV4YXJyYXlfdCAqaW5zZXJ0ID0gTlVMTCwgKmVtcHR5ID0g TlVMTDsKLQotICAgIGxpYnhsX2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOwotICAgIGxp YnhsX2RldmljZV9kaXNrX2luaXQoJmRpc2tfZW1wdHkpOwotICAgIGxpYnhsX2RldmljZV9kaXNr X2luaXQoJmRpc2tfc2F2ZWQpOwotICAgIGxpYnhsX2RldmljZV9kaXNrX2NvcHkoY3R4LCAmZGlz a19zYXZlZCwgZGlzayk7Ci0KLSAgICBkaXNrX2VtcHR5LmZvcm1hdCA9IExJQlhMX0RJU0tfRk9S TUFUX0VNUFRZOwotICAgIGRpc2tfZW1wdHkudmRldiA9IGxpYnhsX19zdHJkdXAoTk9HQywgZGlz ay0+dmRldik7Ci0gICAgZGlza19lbXB0eS5wZGV2X3BhdGggPSBsaWJ4bF9fc3RyZHVwKE5PR0Ms ICIiKTsKLSAgICBkaXNrX2VtcHR5LmlzX2Nkcm9tID0gMTsKLSAgICBsaWJ4bF9fZGV2aWNlX2Rp c2tfc2V0ZGVmYXVsdChnYywgJmRpc2tfZW1wdHksIGRvbWlkKTsKLQotICAgIGxpYnhsX2RvbWFp bl90eXBlIHR5cGUgPSBsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKTsKLSAgICBpZiAodHlw ZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9JTlZBTElEKSB7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJ TDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIGlmICh0eXBlICE9IExJQlhMX0RPTUFJ Tl9UWVBFX0hWTSkgewotICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImNkcm9tLWluc2VydCBy ZXF1aXJlcyBhbiBIVk0gZG9tYWluIik7Ci0gICAgICAgIHJjID0gRVJST1JfSU5WQUw7Ci0gICAg ICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGlmIChsaWJ4bF9nZXRfc3R1YmRvbV9pZChjdHgs IGRvbWlkKSAhPSAwKSB7Ci0gICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiY2Ryb20taW5zZXJ0 IGRvZXNuJ3Qgd29yayBmb3Igc3R1YiBkb21haW5zIik7Ci0gICAgICAgIHJjID0gRVJST1JfSU5W QUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGRtX3ZlciA9IGxpYnhsX19kZXZp Y2VfbW9kZWxfdmVyc2lvbl9ydW5uaW5nKGdjLCBkb21pZCk7Ci0gICAgaWYgKGRtX3ZlciA9PSAt MSkgewotICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkNhbm5vdCBkZXRlcm1pbmUgZGV2aWNl IG1vZGVsIHZlcnNpb24iKTsKLSAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwotICAgICAgICBnb3Rv IG91dDsKLSAgICB9Ci0KLSAgICBpZiAoZG1fdmVyID09IExJQlhMX0RFVklDRV9NT0RFTF9WRVJT SU9OX05PTkUpIHsKLSAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJHdWVzdHMgd2l0aG91dCBh IGRldmljZSBtb2RlbCBjYW5ub3QgdXNlIGNkLWluc2VydCIpOwotICAgICAgICByYyA9IEVSUk9S X0ZBSUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGRpc2tzID0gbGlieGxfZGV2 aWNlX2Rpc2tfbGlzdChjdHgsIGRvbWlkLCAmbnVtKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVt OyBpKyspIHsKLSAgICAgICAgaWYgKGRpc2tzW2ldLmlzX2Nkcm9tICYmICFzdHJjbXAoZGlzay0+ dmRldiwgZGlza3NbaV0udmRldikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIEZvdW5kLiAg U2V0IGJhY2tlbmQgdHlwZSBhcHByb3ByaWF0ZWx5LiAqLwotICAgICAgICAgICAgZGlzay0+YmFj a2VuZD1kaXNrc1tpXS5iYWNrZW5kOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKGkgPT0gbnVtKSB7Ci0gICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiVmly dHVhbCBkZXZpY2Ugbm90IGZvdW5kIik7Ci0gICAgICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0ZGVm YXVsdChnYywgZGlzaywgZG9taWQpOwotICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICBpZiAo IWRpc2stPnBkZXZfcGF0aCkgewotICAgICAgICBkaXNrLT5wZGV2X3BhdGggPSBsaWJ4bF9fc3Ry ZHVwKE5PR0MsICIiKTsKLSAgICAgICAgZGlzay0+Zm9ybWF0ID0gTElCWExfRElTS19GT1JNQVRf RU1QVFk7Ci0gICAgfQotCi0gICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhnYywgZG9t aWQsIGRpc2ssICZkZXZpY2UpOwotICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICBiZV9wYXRo ID0gbGlieGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsICZkZXZpY2UpOwotICAgIGxpYnhsX3Bh dGggPSBsaWJ4bF9fZGV2aWNlX2xpYnhsX3BhdGgoZ2MsICZkZXZpY2UpOwotCi0gICAgaW5zZXJ0 ID0gZmxleGFycmF5X21ha2UoZ2MsIDQsIDEpOwotCi0gICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGluc2VydCwgInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNl X2Rpc2tfc3RyaW5nX29mX2JhY2tlbmQoZGlzay0+YmFja2VuZCkpOwotICAgIGlmIChkaXNrLT5m b3JtYXQgIT0gTElCWExfRElTS19GT1JNQVRfRU1QVFkpCi0gICAgICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihpbnNlcnQsICJwYXJhbXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlczolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9k aXNrX3N0cmluZ19vZl9mb3JtYXQoZGlzay0+Zm9ybWF0KSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaXNrLT5wZGV2X3BhdGgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZsZXhhcnJheV9h cHBlbmRfcGFpcihpbnNlcnQsICJwYXJhbXMiLCAiIik7Ci0KLSAgICBlbXB0eSA9IGZsZXhhcnJh eV9tYWtlKGdjLCA0LCAxKTsKLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZW1wdHksICJ0eXBl IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9kaXNrX3N0cmluZ19v Zl9iYWNrZW5kKGRpc2stPmJhY2tlbmQpKTsKLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZW1w dHksICJwYXJhbXMiLCAiIik7Ci0KLSAgICAvKiBOb3RlOiBDVFggbG9jayBpcyBhbHJlYWR5IGhl bGQgYXQgdGhpcyBwb2ludCBzbyBsb2NrIGhpZXJhcmNoeQotICAgICAqIGlzIG1haW50YWluZWQu Ci0gICAgICovCi0gICAgbG9jayA9IGxpYnhsX19sb2NrX2RvbWFpbl91c2VyZGF0YShnYywgZG9t aWQpOwotICAgIGlmICghbG9jaykgewotICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKLSAg ICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgLyogV2UgbmVlZCB0byBlamVjdCB0aGUgb3Jp Z2luYWwgaW1hZ2UgZmlyc3QuIFRoaXMgaXMgaW1wbGVtZW50ZWQKLSAgICAgKiBieSBpbnNlcnRp bmcgZW1wdHkgbWVkaWEuIEpTT04gaXMgbm90IHVwZGF0ZWQuCi0gICAgICovCi0gICAgaWYgKGRt X3ZlciA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9RRU1VX1hFTikgewotICAgICAgICBy YyA9IGxpYnhsX19xbXBfaW5zZXJ0X2Nkcm9tKGdjLCBkb21pZCwgJmRpc2tfZW1wdHkpOwotICAg ICAgICBpZiAocmMpIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAg cmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKLSAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKLSAgICAgICAgLyogU2FuaXR5IGNoZWNrOiBtYWtlIHN1cmUgdGhlIGRldmlj ZSBleGlzdHMgYmVmb3JlIHdyaXRpbmcgaGVyZSAqLwotICAgICAgICB0bXAgPSBsaWJ4bF9feHNf cmVhZChnYywgdCwgR0NTUFJJTlRGKCIlcy9mcm9udGVuZCIsIGxpYnhsX3BhdGgpKTsKLSAgICAg ICAgaWYgKCF0bXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAi SW50ZXJuYWwgZXJyb3I6ICVzIGRvZXMgbm90IGV4aXN0IiwKLSAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlcy9mcm9udGVuZCIsIGxpYnhsX3BhdGgpKTsKLSAgICAgICAgICAgIHJjID0gRVJS T1JfRkFJTDsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgY2hh ciAqKmt2cyA9IGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBlbXB0eSk7Ci0KLSAgICAg ICAgcmMgPSBsaWJ4bF9feHNfd3JpdGV2KGdjLCB0LCBiZV9wYXRoLCBrdnMpOwotICAgICAgICBp ZiAocmMpIGdvdG8gb3V0OwotCi0gICAgICAgIHJjID0gbGlieGxfX3hzX3dyaXRldihnYywgdCwg bGlieGxfcGF0aCwga3ZzKTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgICAgICBy YyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKLSAgICAgICAgaWYgKCFy YykgYnJlYWs7Ci0gICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHJj ID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7 Ci0gICAgaWYgKHJjKSBnb3RvIG91dDsKLQotICAgIERFVklDRV9BREQoZGlzaywgZGlza3MsIGRv bWlkLCAmZGlza19zYXZlZCwgQ09NUEFSRV9ESVNLLCAmZF9jb25maWcpOwotCi0gICAgcmMgPSBs aWJ4bF9fZG1fY2hlY2tfc3RhcnQoZ2MsICZkX2NvbmZpZywgZG9taWQpOwotICAgIGlmIChyYykg Z290byBvdXQ7Ci0KLSAgICBpZiAoZG1fdmVyID09IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9O X1FFTVVfWEVOKSB7Ci0gICAgICAgIHJjID0gbGlieGxfX3FtcF9pbnNlcnRfY2Ryb20oZ2MsIGRv bWlkLCBkaXNrKTsKLSAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBmb3Ig KDs7KSB7Ci0gICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7 Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0gICAgICAgIC8qIFNhbml0eSBjaGVjazogbWFr ZSBzdXJlIHRoZSBkZXZpY2UgZXhpc3RzIGJlZm9yZSB3cml0aW5nIGhlcmUgKi8KLSAgICAgICAg dG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4 bF9wYXRoKSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBMT0dE KEVSUk9SLCBkb21pZCwgIkludGVybmFsIGVycm9yOiAlcyBkb2VzIG5vdCBleGlzdCIsCi0gICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSk7Ci0gICAg ICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAg fQotCi0gICAgICAgIHJjID0gbGlieGxfX3NldF9kb21haW5fY29uZmlndXJhdGlvbihnYywgZG9t aWQsICZkX2NvbmZpZyk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAgY2hh ciAqKmt2cyA9IGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBpbnNlcnQpOwotCi0gICAg ICAgIHJjID0gbGlieGxfX3hzX3dyaXRldihnYywgdCwgYmVfcGF0aCwga3ZzKTsKLSAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKLQotICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHQs IGxpYnhsX3BhdGgsIGt2cyk7Ci0gICAgICAgIGlmIChyYykgZ290byBvdXQ7Ci0KLSAgICAgICAg cmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7Ci0gICAgICAgIGlmICgh cmMpIGJyZWFrOwotICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICAv KiBzdWNjZXNzLCBubyBhY3R1YWwgYXN5bmMgKi8KLSAgICBsaWJ4bF9fYW9fY29tcGxldGUoZWdj LCBhbywgMCk7Ci0KLSAgICByYyA9IDA7Ci0KLW91dDoKLSAgICBsaWJ4bF9feHNfdHJhbnNhY3Rp b25fYWJvcnQoZ2MsICZ0KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0gICAgICAg IGxpYnhsX2RldmljZV9kaXNrX2Rpc3Bvc2UoJmRpc2tzW2ldKTsKLSAgICBmcmVlKGRpc2tzKTsK LSAgICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrX2VtcHR5KTsKLSAgICBsaWJ4bF9k ZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrX3NhdmVkKTsKLSAgICBsaWJ4bF9kb21haW5fY29uZmln X2Rpc3Bvc2UoJmRfY29uZmlnKTsKLQotICAgIGlmIChsb2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFp bl91c2VyZGF0YShsb2NrKTsKLQotICAgIGlmIChyYykgcmV0dXJuIEFPX0NSRUFURV9GQUlMKHJj KTsKLSAgICByZXR1cm4gQU9fSU5QUk9HUkVTUzsKLX0KLQotLyogbGlieGxfX2FsbG9jX3ZkZXYg b25seSB3b3JrcyBvbiB0aGUgbG9jYWwgZG9tYWluLCB0aGF0IGlzIHRoZSBkb21haW4KLSAqIHdo ZXJlIHRoZSB0b29sc3RhY2sgaXMgcnVubmluZyAqLwotc3RhdGljIGNoYXIgKiBsaWJ4bF9fYWxs b2NfdmRldihsaWJ4bF9fZ2MgKmdjLCB2b2lkICpnZXRfdmRldl91c2VyLAotICAgICAgICB4c190 cmFuc2FjdGlvbl90IHQpCi17Ci0gICAgY29uc3QgY2hhciAqYmxrZGV2X3N0YXJ0ID0gKGNvbnN0 IGNoYXIgKikgZ2V0X3ZkZXZfdXNlcjsKLSAgICBpbnQgZGV2aWQgPSAwLCBkaXNrID0gMCwgcGFy dCA9IDA7Ci0gICAgY2hhciAqbGlieGxfZG9tX3BhdGggPSBsaWJ4bF9feHNfbGlieGxfcGF0aChn YywgTElCWExfVE9PTFNUQUNLX0RPTUlEKTsKLQotICAgIGxpYnhsX19kZXZpY2VfZGlza19kZXZf bnVtYmVyKGJsa2Rldl9zdGFydCwgJmRpc2ssICZwYXJ0KTsKLSAgICBpZiAocGFydCAhPSAwKSB7 Ci0gICAgICAgIExPRyhFUlJPUiwgImJsa2Rldl9zdGFydCBpcyBpbnZhbGlkIik7Ci0gICAgICAg IHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgZGV2aWQgPSBsaWJ4bF9f ZGV2aWNlX2Rpc2tfZGV2X251bWJlcihHQ1NQUklOVEYoImQlZHAwIiwgZGlzayksCi0gICAgICAg ICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGlmIChkZXZpZCA8IDApCi0gICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKGxpYnhsX194c19yZWFkKGdjLCB0LAotICAgICAg ICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQvYmFja2VuZCIsCi0gICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21fcGF0aCwgZGV2aWQpKSA9PSBOVUxMKSB7Ci0g ICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKQotICAgICAgICAgICAgICAgIHJldHVybiBs aWJ4bF9fZGV2aWRfdG9fdmRldihnYywgZGV2aWQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGRpc2srKzsKLSAgICB9 IHdoaWxlICgxKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogQ2FsbGJhY2tzICovCi0KLWNo YXIgKmxpYnhsX19kZXZpY2VfZGlza19maW5kX2xvY2FsX3BhdGgobGlieGxfX2djICpnYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWlkIGd1ZXN0 X2RvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIHFkaXNrX2RpcmVjdCkKLXsKLSAgICBjaGFyICpwYXRoID0gTlVMTDsK LQotICAgIC8qIE5vIGxvY2FsIHBhdGhzIGZvciBkcml2ZXIgZG9tYWlucyAqLwotICAgIGlmIChk aXNrLT5iYWNrZW5kX2RvbW5hbWUgIT0gTlVMTCkgewotICAgICAgICBMT0coREVCVUcsICJOb24t bG9jYWwgYmFja2VuZCwgY2FuJ3QgYWNjZXNzIGxvY2FsbHkuXG4iKTsKLSAgICAgICAgZ290byBv dXQ7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGlzIGlzIGluIHJhdyBmb3JtYXQsIGFu ZCB3ZSdyZSBub3QgdXNpbmcgYSBzY3JpcHQgb3IgYQotICAgICAqIGRyaXZlciBkb21haW4sIHdl IGNhbiBhY2Nlc3MgdGhlIHRhcmdldCBwYXRoIGRpcmVjdGx5LgotICAgICAqLwotICAgIGlmIChk aXNrLT5mb3JtYXQgPT0gTElCWExfRElTS19GT1JNQVRfUkFXCi0gICAgICAgICYmIGRpc2stPnNj cmlwdCA9PSBOVUxMKSB7Ci0gICAgICAgIHBhdGggPSBsaWJ4bF9fc3RyZHVwKGdjLCBkaXNrLT5w ZGV2X3BhdGgpOwotICAgICAgICBMT0coREVCVUcsICJEaXJlY3RseSBhY2Nlc3NpbmcgbG9jYWwg UkFXIGRpc2sgJXMiLCBwYXRoKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgLyoK LSAgICAgKiBJZiB3ZSdyZSBiZWluZyBjYWxsZWQgZm9yIGEgcWVtdSBwYXRoLCB3ZSBjYW4gcGFz cyB0aGUgdGFyZ2V0Ci0gICAgICogc3RyaW5nIGRpcmVjdGx5IGFzIHdlbGwKLSAgICAgKi8KLSAg ICBpZiAocWRpc2tfZGlyZWN0ICYmIGRpc2stPmJhY2tlbmQgPT0gTElCWExfRElTS19CQUNLRU5E X1FESVNLKSB7Ci0gICAgICAgIHBhdGggPSBsaWJ4bF9fc3RyZHVwKGdjLCBkaXNrLT5wZGV2X3Bh dGgpOwotICAgICAgICBMT0coREVCVUcsICJEaXJlY3RseSBhY2Nlc3NpbmcgbG9jYWwgUURJU0sg dGFyZ2V0ICVzIiwgcGF0aCk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIC8qCi0g ICAgICogSWYgdGhlIGZvcm1hdCBpc24ndCByYXcgYW5kIC8gb3Igd2UncmUgdXNpbmcgYSBzY3Jp cHQsIHRoZW4gc2VlCi0gICAgICogaWYgdGhlIHNjcmlwdCBoYXMgd3JpdHRlbiBhIHBhdGggdG8g dGhlICJjb29rZWQiIG5vZGUKLSAgICAgKi8KLSAgICBpZiAoZGlzay0+c2NyaXB0ICYmIGd1ZXN0 X2RvbWlkICE9IElOVkFMSURfRE9NSUQpIHsKLSAgICAgICAgbGlieGxfX2RldmljZSBkZXZpY2U7 Ci0gICAgICAgIGNoYXIgKmJlX3BhdGgsICpwZHBhdGg7Ci0gICAgICAgIGludCByYzsKLQotICAg ICAgICBMT0dEKERFQlVHLCBndWVzdF9kb21pZCwKLSAgICAgICAgICAgICAiUnVuIGZyb20gYSBz Y3JpcHQ7IGNoZWNraW5nIGZvciBwaHlzaWNhbC1kZXZpY2UtcGF0aCAodmRldiAlcykiLAotICAg ICAgICAgICAgIGRpc2stPnZkZXYpOwotCi0gICAgICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9t X2Rpc2soZ2MsIGd1ZXN0X2RvbWlkLCBkaXNrLCAmZGV2aWNlKTsKLSAgICAgICAgaWYgKHJjIDwg MCkKLSAgICAgICAgICAgIGdvdG8gb3V0OwotCi0gICAgICAgIGJlX3BhdGggPSBsaWJ4bF9fZGV2 aWNlX2JhY2tlbmRfcGF0aChnYywgJmRldmljZSk7Ci0KLSAgICAgICAgcGRwYXRoID0gbGlieGxf X3NwcmludGYoZ2MsICIlcy9waHlzaWNhbC1kZXZpY2UtcGF0aCIsIGJlX3BhdGgpOwotCi0gICAg ICAgIExPR0QoREVCVUcsIGd1ZXN0X2RvbWlkLCAiQXR0ZW1wdGluZyB0byByZWFkIG5vZGUgJXMi LCBwZHBhdGgpOwotICAgICAgICBwYXRoID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBw ZHBhdGgpOwotCi0gICAgICAgIGlmIChwYXRoKQotICAgICAgICAgICAgTE9HRChERUJVRywgZ3Vl c3RfZG9taWQsICJBY2Nlc3NpbmcgY29va2VkIGJsb2NrIGRldmljZSAlcyIsIHBhdGgpOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgICBMT0dEKERFQlVHLCBndWVzdF9kb21pZCwgIk5vIHBoeXNp Y2FsLWRldmljZS1wYXRoLCBjYW4ndCBhY2Nlc3MgbG9jYWxseS4iKTsKLQotICAgICAgICBnb3Rv IG91dDsKLSAgICB9Ci0KLSBvdXQ6Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLXN0YXRpYyB2b2lk IGxvY2FsX2RldmljZV9hdHRhY2hfY2IobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNl ICphb2Rldik7Ci0KLXZvaWQgbGlieGxfX2RldmljZV9kaXNrX2xvY2FsX2luaXRpYXRlX2F0dGFj aChsaWJ4bF9fZWdjICplZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2Rpc2tfbG9jYWxfc3RhdGUgKmRscykKLXsKLSAgICBTVEFURV9BT19HQyhkbHMtPmFv KTsKLSAgICBpbnQgcmM7Ci0gICAgY29uc3QgbGlieGxfZGV2aWNlX2Rpc2sgKmluX2Rpc2sgPSBk bHMtPmluX2Rpc2s7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZGxzLT5kaXNrOwot ICAgIGNvbnN0IGNoYXIgKmJsa2Rldl9zdGFydCA9IGRscy0+YmxrZGV2X3N0YXJ0OwotCi0gICAg YXNzZXJ0KGluX2Rpc2stPnBkZXZfcGF0aCk7Ci0KLSAgICBkaXNrLT52ZGV2ID0gTlVMTDsKLQot ICAgIGlmIChkbHMtPmRpc2twYXRoKQotICAgICAgICBMT0coREVCVUcsICJTdHJhbmdlLCBkbHMt PmRpc2twYXRoIGFscmVhZHkgc2V0OiAlcyIsIGRscy0+ZGlza3BhdGgpOwotCi0gICAgTE9HKERF QlVHLCAiVHJ5aW5nIHRvIGZpbmQgbG9jYWwgcGF0aCIpOwotCi0gICAgZGxzLT5kaXNrcGF0aCA9 IGxpYnhsX19kZXZpY2VfZGlza19maW5kX2xvY2FsX3BhdGgoZ2MsIElOVkFMSURfRE9NSUQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5f ZGlzaywgZmFsc2UpOwotICAgIGlmIChkbHMtPmRpc2twYXRoKSB7Ci0gICAgICAgIExPRyhERUJV RywgIkxvY2FsIHBhdGggZm91bmQsIGV4ZWN1dGluZyBjYWxsYmFjay4iKTsKLSAgICAgICAgZGxz LT5jYWxsYmFjayhlZ2MsIGRscywgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HKERFQlVH LCAiTG9jYWwgcGF0aCBub3QgZm91bmQsIGluaXRpYXRpbmcgYXR0YWNoLiIpOwotCi0gICAgICAg IG1lbWNweShkaXNrLCBpbl9kaXNrLCBzaXplb2YobGlieGxfZGV2aWNlX2Rpc2spKTsKLSAgICAg ICAgZGlzay0+cGRldl9wYXRoID0gbGlieGxfX3N0cmR1cChnYywgaW5fZGlzay0+cGRldl9wYXRo KTsKLSAgICAgICAgaWYgKGluX2Rpc2stPnNjcmlwdCAhPSBOVUxMKQotICAgICAgICAgICAgZGlz ay0+c2NyaXB0ID0gbGlieGxfX3N0cmR1cChnYywgaW5fZGlzay0+c2NyaXB0KTsKLSAgICAgICAg ZGlzay0+dmRldiA9IE5VTEw7Ci0KLSAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfc2V0 ZGVmYXVsdChnYywgZGlzaywgTElCWExfVE9PTFNUQUNLX0RPTUlEKTsKLSAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKLQotICAgICAgICBsaWJ4bF9fcHJlcGFyZV9hb19kZXZpY2UoYW8sICZkbHMt PmFvZGV2KTsKLSAgICAgICAgZGxzLT5hb2Rldi5jYWxsYmFjayA9IGxvY2FsX2RldmljZV9hdHRh Y2hfY2I7Ci0gICAgICAgIGRldmljZV9kaXNrX2FkZChlZ2MsIExJQlhMX1RPT0xTVEFDS19ET01J RCwgZGlzaywgJmRscy0+YW9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYWxs b2NfdmRldiwgKHZvaWQgKikgYmxrZGV2X3N0YXJ0KTsKLSAgICB9Ci0KLSAgICByZXR1cm47Ci0K LSBvdXQ6Ci0gICAgYXNzZXJ0KHJjKTsKLSAgICBkbHMtPnJjID0gcmM7Ci0gICAgbGlieGxfX2Rl dmljZV9kaXNrX2xvY2FsX2luaXRpYXRlX2RldGFjaChlZ2MsIGRscyk7Ci0gICAgZGxzLT5jYWxs YmFjayhlZ2MsIGRscywgcmMpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NhbF9kZXZpY2VfYXR0YWNo X2NiKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpCi17Ci0gICAgU1RB VEVfQU9fR0MoYW9kZXYtPmFvKTsKLSAgICBsaWJ4bF9fZGlza19sb2NhbF9zdGF0ZSAqZGxzID0g Q09OVEFJTkVSX09GKGFvZGV2LCAqZGxzLCBhb2Rldik7Ci0gICAgY2hhciAqYmVfcGF0aCA9IE5V TEw7Ci0gICAgaW50IHJjOwotICAgIGxpYnhsX19kZXZpY2UgZGV2aWNlOwotICAgIGxpYnhsX2Rl dmljZV9kaXNrICpkaXNrID0gJmRscy0+ZGlzazsKLQotICAgIHJjID0gYW9kZXYtPnJjOwotICAg IGlmIChyYykgewotICAgICAgICBMT0dFKEVSUk9SLCAidW5hYmxlIGxvY2FsbHkgYXR0YWNoIGRl dmljZTogJXMiLCBkaXNrLT5wZGV2X3BhdGgpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0K LSAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9N SUQsIGRpc2ssICZkZXZpY2UpOwotICAgIGlmIChyYyA8IDApCi0gICAgICAgIGdvdG8gb3V0Owot ICAgIGJlX3BhdGggPSBsaWJ4bF9fZGV2aWNlX2JhY2tlbmRfcGF0aChnYywgJmRldmljZSk7Ci0g ICAgcmMgPSBsaWJ4bF9fd2FpdF9mb3JfYmFja2VuZChnYywgYmVfcGF0aCwgR0NTUFJJTlRGKCIl ZCIsIFhlbmJ1c1N0YXRlQ29ubmVjdGVkKSk7Ci0gICAgaWYgKHJjIDwgMCkKLSAgICAgICAgZ290 byBvdXQ7Ci0KLSAgICBkbHMtPmRpc2twYXRoID0gR0NTUFJJTlRGKCIvZGV2LyVzIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpZF90b19sb2NhbGRldihnYywgZGV2 aWNlLmRldmlkKSk7Ci0gICAgTE9HKERFQlVHLCAibG9jYWxseSBhdHRhY2hlZCBkaXNrICVzIiwg ZGxzLT5kaXNrcGF0aCk7Ci0KLSAgICBkbHMtPmNhbGxiYWNrKGVnYywgZGxzLCAwKTsKLSAgICBy ZXR1cm47Ci0KLSBvdXQ6Ci0gICAgYXNzZXJ0KHJjKTsKLSAgICBkbHMtPnJjID0gcmM7Ci0gICAg bGlieGxfX2RldmljZV9kaXNrX2xvY2FsX2luaXRpYXRlX2RldGFjaChlZ2MsIGRscyk7Ci0gICAg cmV0dXJuOwotfQotCi0vKiBDYWxsYmFja3MgZm9yIGxvY2FsIGRldGFjaCAqLwotCi1zdGF0aWMg dm9pZCBsb2NhbF9kZXZpY2VfZGV0YWNoX2NiKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvX2Rl dmljZSAqYW9kZXYpOwotCi12b2lkIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9k ZXRhY2gobGlieGxfX2VnYyAqZWdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX19kaXNrX2xvY2FsX3N0YXRlICpkbHMpCi17Ci0gICAgU1RBVEVfQU9fR0MoZGxz LT5hbyk7Ci0gICAgaW50IHJjID0gMDsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzayA9ICZk bHMtPmRpc2s7Ci0gICAgbGlieGxfX2RldmljZSAqZGV2aWNlOwotICAgIGxpYnhsX19hb19kZXZp Y2UgKmFvZGV2ID0gJmRscy0+YW9kZXY7Ci0gICAgbGlieGxfX3ByZXBhcmVfYW9fZGV2aWNlKGFv LCBhb2Rldik7Ci0KLSAgICBpZiAoIWRscy0+ZGlza3BhdGgpIGdvdG8gb3V0OwotCi0gICAgaWYg KGRpc2stPnZkZXYgIT0gTlVMTCkgewotICAgICAgICBHQ05FVyhkZXZpY2UpOwotICAgICAgICBy YyA9IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzaywgZGV2aWNlKTsKLSAgICAg ICAgaWYgKHJjICE9IDApIGdvdG8gb3V0OwotCi0gICAgICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJY TF9fREVWSUNFX0FDVElPTl9SRU1PVkU7Ci0gICAgICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7Ci0g ICAgICAgIGFvZGV2LT5jYWxsYmFjayA9IGxvY2FsX2RldmljZV9kZXRhY2hfY2I7Ci0gICAgICAg IGFvZGV2LT5mb3JjZSA9IDA7Ci0gICAgICAgIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJp Y19yZW1vdmUoZWdjLCBhb2Rldik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLW91dDoKLSAg ICBhb2Rldi0+cmMgPSByYzsKLSAgICBsb2NhbF9kZXZpY2VfZGV0YWNoX2NiKGVnYywgYW9kZXYp OwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihs aWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQotewotICAgIFNUQVRFX0FP X0dDKGFvZGV2LT5hbyk7Ci0gICAgbGlieGxfX2Rpc2tfbG9jYWxfc3RhdGUgKmRscyA9IENPTlRB SU5FUl9PRihhb2RldiwgKmRscywgYW9kZXYpOwotICAgIGludCByYzsKLQotICAgIGlmIChhb2Rl di0+cmMpIHsKLSAgICAgICAgTE9HRUQoRVJST1IsIGFvZGV2LT5kZXYtPmRvbWlkLCAiVW5hYmxl IHRvICVzICVzIHdpdGggaWQgJXUiLAotICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2Rldmlj ZV9hY3Rpb25fdG9fc3RyaW5nKGFvZGV2LT5hY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2RldmljZV9raW5kX3RvX3N0cmluZyhhb2Rldi0+ZGV2LT5raW5kKSwKLSAgICAgICAg ICAgICAgICAgICAgIGFvZGV2LT5kZXYtPmRldmlkKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAg fQotCi1vdXQ6Ci0gICAgLyoKLSAgICAgKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gZGxzLT5y YywgaXQgbWVhbnMgd2UgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tCi0gICAgICogYSBmYWlsZWQgZXhl Y3V0aW9uIG9mIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9hdHRhY2gsCi0gICAg ICogc28gcmV0dXJuIHRoZSBvcmlnaW5hbCBlcnJvci4KLSAgICAgKi8KLSAgICByYyA9IGRscy0+ cmMgPyBkbHMtPnJjIDogYW9kZXYtPnJjOwotICAgIGRscy0+Y2FsbGJhY2soZWdjLCBkbHMsIHJj KTsKLSAgICByZXR1cm47Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgbGlieGxf X2RldmljZV9jb25zb2xlX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfY29uc29sZSAqY29uc29sZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kb21haW5fYnVpbGRfc3RhdGUg KnN0YXRlLApAQCAtMzUyMCwxMCArMjM0Nyw2IEBAIG91dDoKIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgotICogbGlieGxf ZGV2aWNlX2Rpc2tfYWRkCi0gKiBsaWJ4bF9fYWRkX2Rpc2tzCi0gKiBsaWJ4bF9kZXZpY2VfZGlz a19yZW1vdmUKLSAqIGxpYnhsX2RldmljZV9kaXNrX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92 a2JfcmVtb3ZlCiAgKiBsaWJ4bF9kZXZpY2VfdmtiX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92 ZmJfcmVtb3ZlCkBAIC0zNTM0LDExICsyMzU3LDYgQEAgb3V0OgogICogMS4gYWRkIHN1cHBvcnQg Zm9yIHNlY29uZGFyeSBjb25zb2xlcyB0byB4ZW5jb25zb2xlZAogICogMi4gZHluYW1pY2FsbHkg YWRkL3JlbW92ZSBxZW11IGNoYXJkZXZzIHZpYSBxbXAgbWVzc2FnZXMuICovCiAKLS8qIGRpc2sg Ki8KLUxJQlhMX0RFRklORV9ERVZJQ0VfQUREKGRpc2spCi1MSUJYTF9ERUZJTkVfREVWSUNFU19B REQoZGlzaykKLUxJQlhMX0RFRklORV9ERVZJQ0VfUkVNT1ZFKGRpc2spCi0KIC8qIHZrYiAqLwog TElCWExfREVGSU5FX0RFVklDRV9SRU1PVkUodmtiKQogCkBAIC01NjQ0LDU3ICs0NDYyLDYgQEAg b3V0OgogICAgIHJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBsaWJ4bF9kZXZpY2VfZGlza19j b21wYXJlKGxpYnhsX2RldmljZV9kaXNrICpkMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZDIpCi17Ci0gICAgcmV0dXJuIENPTVBBUkVf RElTSyhkMSwgZDIpOwotfQotCi0vKiBUYWtlIGNhcmUgb2YgcmVtb3ZhYmxlIGRldmljZS4gV2Ug bWFpbnRhaW4gaW52YXJpYW50IGluIHRoZQotICogaW5zZXJ0IC8gcmVtb3ZlIG9wZXJhdGlvbiBz byB0aGF0OgotICogMS4gaWYgeGVuc3RvcmUgaXMgImVtcHR5IiB3aGlsZSBKU09OIGlzIG5vdCwg dGhlIHJlc3VsdAotICogICAgaXMgImVtcHR5IgotICogMi4gaWYgeGVuc3RvcmUgaGFzIGEgZGlm ZmVyZW50IG1lZGlhIHRoYW4gSlNPTiwgdXNlIHRoZQotICogICAgb25lIGluIEpTT04KLSAqIDMu IGlmIHhlbnN0b3JlIGFuZCBKU09OIGhhdmUgdGhlIHNhbWUgbWVkaWEsIHdlbGwsIHlvdQotICog ICAga25vdyB0aGUgYW5zd2VyIDotKQotICoKLSAqIEN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IG9u ZSByZW1vdmFibGUgZGV2aWNlIC0tIENEUk9NLgotICogTG9vayBmb3IgbGlieGxfY2Ryb21faW5z ZXJ0IGZvciByZWZlcmVuY2UuCi0gKi8KLXN0YXRpYyB2b2lkIGxpYnhsX2RldmljZV9kaXNrX21l cmdlKGxpYnhsX2N0eCAqY3R4LCB2b2lkICpkMSwgdm9pZCAqZDIpCi17Ci0gICAgR0NfSU5JVChj dHgpOwotICAgIGxpYnhsX2RldmljZV9kaXNrICpzcmMgPSBkMTsKLSAgICBsaWJ4bF9kZXZpY2Vf ZGlzayAqZHN0ID0gZDI7Ci0KLSAgICBpZiAoc3JjLT5yZW1vdmFibGUpIHsKLSAgICAgICAgaWYg KCFzcmMtPnBkZXZfcGF0aCB8fCAqc3JjLT5wZGV2X3BhdGggPT0gJ1wwJykgewotICAgICAgICAg ICAgLyogMSwgbm8gbWVkaWEgaW4gZHJpdmUgKi8KLSAgICAgICAgICAgIGZyZWUoZHN0LT5wZGV2 X3BhdGgpOwotICAgICAgICAgICAgZHN0LT5wZGV2X3BhdGggPSBsaWJ4bF9fc3RyZHVwKE5PR0Ms ICIiKTsKLSAgICAgICAgICAgIGRzdC0+Zm9ybWF0ID0gTElCWExfRElTS19GT1JNQVRfRU1QVFk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiAyIGFuZCAzLCB1c2UgSlNPTiwgbm8g bmVlZCB0byB0b3VjaCBhbnl0aGluZyAqLwotICAgICAgICAgICAgOwotICAgICAgICB9Ci0gICAg fQotfQotCi1zdGF0aWMgaW50IGxpYnhsX2RldmljZV9kaXNrX2RtX25lZWRlZCh2b2lkICplLCB1 bnNpZ25lZCBkb21pZCkKLXsKLSAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZWxlbSA9IGU7Ci0KLSAg ICByZXR1cm4gZWxlbS0+YmFja2VuZCA9PSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0sgJiYKLSAg ICAgICAgICAgZWxlbS0+YmFja2VuZF9kb21pZCA9PSBkb21pZDsKLX0KLQotREVGSU5FX0RFVklD RV9UWVBFX1NUUlVDVChkaXNrLAotICAgIC5tZXJnZSAgICAgICA9IGxpYnhsX2RldmljZV9kaXNr X21lcmdlLAotICAgIC5kbV9uZWVkZWQgICA9IGxpYnhsX2RldmljZV9kaXNrX2RtX25lZWRlZCwK LSAgICAuc2tpcF9hdHRhY2ggPSAxCi0pOwotCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICog bW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfZGlzay5jIGIvdG9vbHMvbGli eGwvbGlieGxfZGlzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDlk ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4bF9kaXNrLmMKQEAgLTAsMCAr MSwxMjU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhl ciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisg KiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRo IHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBM SUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRl ICJsaWJ4bF9vc2RlcHMuaCIKKworI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisKKyNkZWZp bmUgQkFDS0VORF9TVFJJTkdfU0laRSA1CisKK3N0YXRpYyB2b2lkIGRpc2tfZWplY3RfeHN3YXRj aF9jYWxsYmFjayhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl94c3dhdGNoICp3LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKndwYXRoLCBjb25z dCBjaGFyICplcGF0aCkgeworICAgIEVHQ19HQzsKKyAgICBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0 ICpldmcgPSAodm9pZCopdzsKKyAgICBjb25zdCBjaGFyICpiYWNrZW5kOworICAgIGNoYXIgKnZh bHVlOworICAgIGNoYXIgYmFja2VuZF90eXBlW0JBQ0tFTkRfU1RSSU5HX1NJWkUrMV07CisgICAg aW50IHJjOworCisgICAgdmFsdWUgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIHdwYXRo KTsKKworICAgIGlmICghdmFsdWUgfHwgc3RyY21wKHZhbHVlLCAgImVqZWN0IikpCisgICAgICAg IHJldHVybjsKKworICAgIGlmIChsaWJ4bF9feHNfcHJpbnRmKGdjLCBYQlRfTlVMTCwgd3BhdGgs ICIiKSkgeworICAgICAgICBMSUJYTF9fRVZFTlRfRElTQVNURVIoZWdjLCAieHNfd3JpdGUgZmFp bGVkIGFja25vd2xlZGdpbmcgZWplY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXJybm8sIExJQlhMX0VWRU5UX1RZUEVfRElTS19FSkVDVCk7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICBsaWJ4bF9ldmVudCAqZXYgPSBORVdfRVZFTlQoZWdjLCBESVNLX0VKRUNULCBl dmctPmRvbWlkLCBldmctPnVzZXIpOworICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrID0gJmV2 LT51LmRpc2tfZWplY3QuZGlzazsKKworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChn YywgWEJUX05VTEwsIGV2Zy0+YmVfcHRyX3BhdGgsICZiYWNrZW5kKTsKKyAgICBpZiAocmMpIHsK KyAgICAgICAgTElCWExfX0VWRU5UX0RJU0FTVEVSKGVnYywgInhzX3JlYWQgZmFpbGVkIHJlYWRp bmcgYmVfcHRyX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIExJ QlhMX0VWRU5UX1RZUEVfRElTS19FSkVDVCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg aWYgKCFiYWNrZW5kKSB7CisgICAgICAgIC8qIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCBub3Qg c2ltcGx5IGVqZWN0ZWQgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNzY2FuZihi YWNrZW5kLAorICAgICAgICAgICAgIi9sb2NhbC9kb21haW4vJWQvYmFja2VuZC8lIiBUT1NUUklO RyhCQUNLRU5EX1NUUklOR19TSVpFKQorICAgICAgICAgICAiW2Etel0vJSpkLyUqZCIsCisgICAg ICAgICAgICZkaXNrLT5iYWNrZW5kX2RvbWlkLCBiYWNrZW5kX3R5cGUpOworICAgIGlmICghc3Ry Y21wKGJhY2tlbmRfdHlwZSwgInRhcCIpIHx8ICFzdHJjbXAoYmFja2VuZF90eXBlLCAidmJkIikp IHsKKyAgICAgICAgZGlzay0+YmFja2VuZCA9IExJQlhMX0RJU0tfQkFDS0VORF9UQVA7CisgICAg fSBlbHNlIGlmICghc3RyY21wKGJhY2tlbmRfdHlwZSwgInFkaXNrIikpIHsKKyAgICAgICAgZGlz ay0+YmFja2VuZCA9IExJQlhMX0RJU0tfQkFDS0VORF9RRElTSzsKKyAgICB9IGVsc2UgeworICAg ICAgICBkaXNrLT5iYWNrZW5kID0gTElCWExfRElTS19CQUNLRU5EX1VOS05PV047CisgICAgfQor CisgICAgZGlzay0+cGRldl9wYXRoID0gc3RyZHVwKCIiKTsgLyogeHh4IGZpeG1lIG1hbGxvYyBm YWlsdXJlICovCisgICAgZGlzay0+Zm9ybWF0ID0gTElCWExfRElTS19GT1JNQVRfRU1QVFk7Cisg ICAgLyogdGhpcyB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgdXNlcjogZG8gbm90IGZyZWUgcmln aHQgYXdheSAqLworICAgIGRpc2stPnZkZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGV2Zy0+dmRl dik7CisgICAgZGlzay0+cmVtb3ZhYmxlID0gMTsKKyAgICBkaXNrLT5yZWFkd3JpdGUgPSAwOwor ICAgIGRpc2stPmlzX2Nkcm9tID0gMTsKKworICAgIGxpYnhsX19ldmVudF9vY2N1cnJlZChlZ2Ms IGV2KTsKK30KKworaW50IGxpYnhsX2V2ZW5hYmxlX2Rpc2tfZWplY3QobGlieGxfY3R4ICpjdHgs IHVpbnQzMl90IGd1ZXN0X2RvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqdmRldiwgbGlieGxfZXZfdXNlciB1c2VyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZXZnZW5fZGlza19lamVjdCAqKmV2Z2VuX291dCkgeworICAgIEdDX0lO SVQoY3R4KTsKKyAgICBDVFhfTE9DSzsKKyAgICBpbnQgcmM7CisgICAgY2hhciAqcGF0aDsKKyAg ICBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0ICpldmcgPSBOVUxMOworCisgICAgZXZnID0gbWFsbG9j KHNpemVvZigqZXZnKSk7ICBpZiAoIWV2ZykgeyByYyA9IEVSUk9SX05PTUVNOyBnb3RvIG91dDsg fQorICAgIG1lbXNldChldmcsIDAsIHNpemVvZigqZXZnKSk7CisgICAgZXZnLT51c2VyID0gdXNl cjsKKyAgICBldmctPmRvbWlkID0gZ3Vlc3RfZG9taWQ7CisgICAgTElCWExfTElTVF9JTlNFUlRf SEVBRCgmQ1RYLT5kaXNrX2VqZWN0X2V2Z2VucywgZXZnLCBlbnRyeSk7CisKKyAgICB1aW50MzJf dCBkb21pZCA9IGxpYnhsX2dldF9zdHViZG9tX2lkKGN0eCwgZ3Vlc3RfZG9taWQpOworCisgICAg aWYgKCFkb21pZCkKKyAgICAgICAgZG9taWQgPSBndWVzdF9kb21pZDsKKworICAgIGludCBkZXZp ZCA9IGxpYnhsX19kZXZpY2VfZGlza19kZXZfbnVtYmVyKHZkZXYsIE5VTEwsIE5VTEwpOworCisg ICAgcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3ZiZC8lZC9lamVjdCIsCisgICAgICAgICAg ICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpLAorICAgICAgICAgICAgICAg ICBkZXZpZCk7CisgICAgaWYgKCFwYXRoKSB7IHJjID0gRVJST1JfTk9NRU07IGdvdG8gb3V0OyB9 CisKKyAgICBjb25zdCBjaGFyICpsaWJ4bF9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJk LyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9w YXRoKGdjLCBkb21pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpZCk7 CisgICAgZXZnLT5iZV9wdHJfcGF0aCA9IGxpYnhsX19zcHJpbnRmKE5PR0MsICIlcy9iYWNrZW5k IiwgbGlieGxfcGF0aCk7CisKKyAgICBjb25zdCBjaGFyICpjb25maWd1cmVkX3ZkZXY7CisgICAg cmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgIEdD U1BSSU5URigiJXMvZGV2IiwgbGlieGxfcGF0aCksICZjb25maWd1cmVkX3ZkZXYpOworICAgIGlm IChyYykgZ290byBvdXQ7CisKKyAgICBldmctPnZkZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGNv bmZpZ3VyZWRfdmRldik7CisKKyAgICByYyA9IGxpYnhsX19ldl94c3dhdGNoX3JlZ2lzdGVyKGdj LCAmZXZnLT53YXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tf ZWplY3RfeHN3YXRjaF9jYWxsYmFjaywgcGF0aCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKwor ICAgICpldmdlbl9vdXQgPSBldmc7CisgICAgQ1RYX1VOTE9DSzsKKyAgICBHQ19GUkVFOworICAg IHJldHVybiAwOworCisgb3V0OgorICAgIGlmIChldmcpCisgICAgICAgIGxpYnhsX19ldmRpc2Fi bGVfZGlza19lamVjdChnYywgZXZnKTsKKyAgICBDVFhfVU5MT0NLOworICAgIEdDX0ZSRUU7Cisg ICAgcmV0dXJuIHJjOworfQorCit2b2lkIGxpYnhsX19ldmRpc2FibGVfZGlza19lamVjdChsaWJ4 bF9fZ2MgKmdjLCBsaWJ4bF9ldmdlbl9kaXNrX2VqZWN0ICpldmcpIHsKKyAgICBDVFhfTE9DSzsK KworICAgIExJQlhMX0xJU1RfUkVNT1ZFKGV2ZywgZW50cnkpOworCisgICAgaWYgKGxpYnhsX19l dl94c3dhdGNoX2lzcmVnaXN0ZXJlZCgmZXZnLT53YXRjaCkpCisgICAgICAgIGxpYnhsX19ldl94 c3dhdGNoX2RlcmVnaXN0ZXIoZ2MsICZldmctPndhdGNoKTsKKworICAgIGZyZWUoZXZnLT52ZGV2 KTsKKyAgICBmcmVlKGV2Zy0+YmVfcHRyX3BhdGgpOworICAgIGZyZWUoZXZnKTsKKworICAgIENU WF9VTkxPQ0s7Cit9CisKK3ZvaWQgbGlieGxfZXZkaXNhYmxlX2Rpc2tfZWplY3QobGlieGxfY3R4 ICpjdHgsIGxpYnhsX2V2Z2VuX2Rpc2tfZWplY3QgKmV2ZykgeworICAgIEdDX0lOSVQoY3R4KTsK KyAgICBsaWJ4bF9fZXZkaXNhYmxlX2Rpc2tfZWplY3QoZ2MsIGV2Zyk7CisgICAgR0NfRlJFRTsK K30KKworaW50IGxpYnhsX19kZXZpY2VfZGlza19zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIGxp YnhsX2RldmljZV9kaXNrICpkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGRvbWlkKQoreworICAgIGludCByYzsKKworICAgIGxpYnhsX2RlZmJvb2xfc2V0 ZGVmYXVsdCgmZGlzay0+ZGlzY2FyZF9lbmFibGUsICEhZGlzay0+cmVhZHdyaXRlKTsKKyAgICBs aWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmRpc2stPmNvbG9fZW5hYmxlLCBmYWxzZSk7CisgICAg bGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZkaXNrLT5jb2xvX3Jlc3RvcmVfZW5hYmxlLCBmYWxz ZSk7CisKKyAgICByYyA9IGxpYnhsX19yZXNvbHZlX2RvbWlkKGdjLCBkaXNrLT5iYWNrZW5kX2Rv bW5hbWUsICZkaXNrLT5iYWNrZW5kX2RvbWlkKTsKKyAgICBpZiAocmMgPCAwKSByZXR1cm4gcmM7 CisKKyAgICAvKiBGb3JjZSBRZGlzayBiYWNrZW5kIGZvciBDRFJPTSBkZXZpY2VzIG9mIGd1ZXN0 cyB3aXRoIGEgZGV2aWNlIG1vZGVsLiAqLworICAgIGlmIChkaXNrLT5pc19jZHJvbSAhPSAwICYm CisgICAgICAgIGxpYnhsX19kb21haW5fdHlwZShnYywgZG9taWQpID09IExJQlhMX0RPTUFJTl9U WVBFX0hWTSAmJgorICAgICAgICBsaWJ4bF9fZGV2aWNlX21vZGVsX3ZlcnNpb25fcnVubmluZyhn YywgZG9taWQpICE9CisgICAgICAgIExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9OX05PTkUpIHsK KyAgICAgICAgaWYgKCEoZGlzay0+YmFja2VuZCA9PSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0sg fHwKKyAgICAgICAgICAgICAgZGlzay0+YmFja2VuZCA9PSBMSUJYTF9ESVNLX0JBQ0tFTkRfVU5L Tk9XTikpIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiQmFja2VuZCBmb3IgQ0Qg ZGV2aWNlcyBvbiBIVk0gZ3Vlc3RzIG11c3QgYmUgUWRpc2siKTsKKyAgICAgICAgICAgIHJldHVy biBFUlJPUl9GQUlMOworICAgICAgICB9CisgICAgICAgIGRpc2stPmJhY2tlbmQgPSBMSUJYTF9E SVNLX0JBQ0tFTkRfUURJU0s7CisgICAgfQorCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tf c2V0X2JhY2tlbmQoZ2MsIGRpc2spOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX19k ZXZpY2VfZnJvbV9kaXNrKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNl KQoreworICAgIGludCBkZXZpZDsKKworICAgIGRldmlkID0gbGlieGxfX2RldmljZV9kaXNrX2Rl dl9udW1iZXIoZGlzay0+dmRldiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGRldmlkPT0tMSkgewor ICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIkludmFsaWQgb3IgdW5zdXBwb3J0ZWQiIiB2aXJ0 dWFsIGRpc2sgaWRlbnRpZmllciAlcyIsCisgICAgICAgICAgICAgZGlzay0+dmRldik7CisgICAg ICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICB9CisKKyAgICBkZXZpY2UtPmJhY2tlbmRfZG9t aWQgPSBkaXNrLT5iYWNrZW5kX2RvbWlkOworICAgIGRldmljZS0+YmFja2VuZF9kZXZpZCA9IGRl dmlkOworCisgICAgc3dpdGNoIChkaXNrLT5iYWNrZW5kKSB7CisgICAgICAgIGNhc2UgTElCWExf RElTS19CQUNLRU5EX1BIWToKKyAgICAgICAgICAgIGRldmljZS0+YmFja2VuZF9raW5kID0gTElC WExfX0RFVklDRV9LSU5EX1ZCRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJ QlhMX0RJU0tfQkFDS0VORF9UQVA6CisgICAgICAgICAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCA9 IExJQlhMX19ERVZJQ0VfS0lORF9WQkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSBMSUJYTF9ESVNLX0JBQ0tFTkRfUURJU0s6CisgICAgICAgICAgICBkZXZpY2UtPmJhY2tlbmRf a2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9RRElTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJVbnJlY29nbml6 ZWQgZGlzayBiYWNrZW5kIHR5cGU6ICVkIiwKKyAgICAgICAgICAgICAgICAgZGlzay0+YmFja2Vu ZCk7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgfQorCisgICAgZGV2aWNl LT5kb21pZCA9IGRvbWlkOworICAgIGRldmljZS0+ZGV2aWQgPSBkZXZpZDsKKyAgICBkZXZpY2Ut PmtpbmQgID0gTElCWExfX0RFVklDRV9LSU5EX1ZCRDsKKworICAgIHJldHVybiAwOworfQorCisv KiBTcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZGlyZWN0bHkgb25seSBieSBsb2NhbCBkaXNrIGF0 dGFjaCwKKyAqIGFsbCBvdGhlciB1c2VycyBzaG91bGQgaW5zdGVhZCB1c2UgdGhlIHJlZ3VsYXIK KyAqIGxpYnhsX19kZXZpY2VfZGlza19hZGQgd3JhcHBlcgorICoKKyAqIFRoZSAob3B0aW9uYWxs eSkgcGFzc2VkIGZ1bmN0aW9uIGdldF92ZGV2IHdpbGwgYmUgdXNlZCB0bworICogc2V0IHRoZSB2 ZGV2IHRoZSBkaXNrIHNob3VsZCBiZSBhdHRhY2hlZCB0by4gV2hlbiBpdCBpcyBzZXQgdGhlIGNh bGxlcgorICogbXVzdCBhbHNvIHBhc3MgZ2V0X3ZkZXZfdXNlciwgd2hpY2ggd2lsbCBiZSBwYXNz ZWQgdG8gZ2V0X3ZkZXYuCisgKgorICogVGhlIHBhc3NlZCBnZXRfdmRldiBmdW5jdGlvbiBpcyBh bHNvIGluIGNoYXJnZSBvZiBwcmludGluZworICogdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVz c2FnZSB3aGVuIGFwcHJvcGlhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRldmljZV9kaXNrX2FkZChs aWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9fYW9fZGV2aWNlICphb2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KmdldF92ZGV2KGxpYnhsX19nYyAqLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4c190cmFuc2FjdGlvbl90KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKmdldF92ZGV2X3VzZXIpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFv KTsKKyAgICBmbGV4YXJyYXlfdCAqZnJvbnQgPSBOVUxMOworICAgIGZsZXhhcnJheV90ICpiYWNr ID0gTlVMTDsKKyAgICBjaGFyICpkZXYgPSBOVUxMLCAqc2NyaXB0OworICAgIGxpYnhsX19kZXZp Y2UgKmRldmljZTsKKyAgICBpbnQgcmM7CisgICAgbGlieGxfY3R4ICpjdHggPSBnYy0+b3duZXI7 CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7CisgICAgbGlieGxfZG9tYWluX2Nv bmZpZyBkX2NvbmZpZzsKKyAgICBsaWJ4bF9kZXZpY2VfZGlzayBkaXNrX3NhdmVkOworICAgIGxp YnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21h aW5fY29uZmlnX2luaXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KCZk aXNrX3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19jb3B5KGN0eCwgJmRpc2tfc2F2ZWQs IGRpc2spOworCisgICAgbGlieGxfZG9tYWluX3R5cGUgdHlwZSA9IGxpYnhsX19kb21haW5fdHlw ZShnYywgZG9taWQpOworICAgIGlmICh0eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0lOVkFMSUQp IHsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisK KyAgICAvKgorICAgICAqIGdldF92ZGV2ICE9IE5VTEwgLT4gbG9jYWwgYXR0YWNoCisgICAgICog Z2V0X3ZkZXYgPT0gTlVMTCAtPiBibG9jayBhdHRhY2gKKyAgICAgKgorICAgICAqIFdlIGRvbid0 IGNhcmUgYWJvdXQgbG9jYWwgYXR0YWNoIHN0YXRlIGJlY2F1c2UgaXQncyBvbmx5CisgICAgICog aW50ZXJtZWRpYXRlIHN0YXRlLgorICAgICAqLworICAgIGlmICghZ2V0X3ZkZXYgJiYgYW9kZXYt PnVwZGF0ZV9qc29uKSB7CisgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRh dGEoZ2MsIGRvbWlkKTsKKyAgICAgICAgaWYgKCFsb2NrKSB7CisgICAgICAgICAgICByYyA9IEVS Uk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAg ICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29u ZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBERVZJQ0VfQUREKGRp c2ssIGRpc2tzLCBkb21pZCwgJmRpc2tfc2F2ZWQsIENPTVBBUkVfRElTSywgJmRfY29uZmlnKTsK KworICAgICAgICByYyA9IGxpYnhsX19kbV9jaGVja19zdGFydChnYywgJmRfY29uZmlnLCBkb21p ZCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgfQorCisgICAgZm9yICg7Oykgewor ICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAg ICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmIChnZXRfdmRldikgeworICAgICAgICAg ICAgYXNzZXJ0KGdldF92ZGV2X3VzZXIpOworICAgICAgICAgICAgZGlzay0+dmRldiA9IGdldF92 ZGV2KGdjLCBnZXRfdmRldl91c2VyLCB0KTsKKyAgICAgICAgICAgIGlmIChkaXNrLT52ZGV2ID09 IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAg ICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByYyA9IGxp YnhsX19kZXZpY2VfZGlza19zZXRkZWZhdWx0KGdjLCBkaXNrLCBkb21pZCk7CisgICAgICAgIGlm IChyYykgZ290byBvdXQ7CisKKyAgICAgICAgZnJvbnQgPSBmbGV4YXJyYXlfbWFrZShnYywgMTYs IDEpOworICAgICAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIDE2LCAxKTsKKworICAgICAg ICBHQ05FVyhkZXZpY2UpOworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV9kaXNrKGdj LCBkb21pZCwgZGlzaywgZGV2aWNlKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAg ICAgIExPR0QoRVJST1IsIGRvbWlkLCAiSW52YWxpZCBvciB1bnN1cHBvcnRlZCIiIHZpcnR1YWwg ZGlzayBpZGVudGlmaWVyICVzIiwKKyAgICAgICAgICAgICAgICAgZGlzay0+dmRldik7CisgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2Rldmlj ZV9leGlzdHMoZ2MsIHQsIGRldmljZSk7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0Owor ICAgICAgICBpZiAocmMgPT0gMSkgeyAgICAgICAgICAgICAgLyogYWxyZWFkeSBleGlzdHMgaW4g eGVuc3RvcmUgKi8KKyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiZGV2aWNlIGFscmVh ZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7CisgICAgICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElC WExfX0RFVklDRV9BQ1RJT05fQUREOyAvKiBmb3IgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAg ICAgcmMgPSBFUlJPUl9ERVZJQ0VfRVhJU1RTOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKworICAgICAgICBzd2l0Y2ggKGRpc2stPmJhY2tlbmQpIHsKKyAgICAgICAgICAgIGNh c2UgTElCWExfRElTS19CQUNLRU5EX1BIWToKKyAgICAgICAgICAgICAgICBkZXYgPSBkaXNrLT5w ZGV2X3BhdGg7CisKKyAgICAgICAgZG9fYmFja2VuZF9waHk6CisgICAgICAgICAgICAgICAgZmxl eGFycmF5X2FwcGVuZChiYWNrLCAicGFyYW1zIik7CisgICAgICAgICAgICAgICAgZmxleGFycmF5 X2FwcGVuZChiYWNrLCBkZXYpOworCisgICAgICAgICAgICAgICAgc2NyaXB0ID0gbGlieGxfX2Fi c19wYXRoKGdjLCBkaXNrLT5zY3JpcHQ/OiAiYmxvY2siLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feGVuX3NjcmlwdF9kaXJfcGF0aCgpKTsKKyAgICAg ICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgInNjcmlwdCIsIHNjcmlwdCk7 CisKKyAgICAgICAgICAgICAgICBhc3NlcnQoZGV2aWNlLT5iYWNrZW5kX2tpbmQgPT0gTElCWExf X0RFVklDRV9LSU5EX1ZCRCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg IGNhc2UgTElCWExfRElTS19CQUNLRU5EX1RBUDoKKyAgICAgICAgICAgICAgICBpZiAoZGV2ID09 IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGV2ID0gbGlieGxfX2Jsa3RhcF9kZXZwYXRo KGdjLCBkaXNrLT5wZGV2X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaXNrLT5mb3JtYXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWRl dikgeworICAgICAgICAgICAgICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJGYWlsZWQg dG8gZ2V0IGJsa3RhcCBkZXZwYXRoIGZvciAlcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRpc2stPnBkZXZfcGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssICJ0YXBkaXNrLXBhcmFtcyIpOworICAgICAgICAgICAgICAgIGZsZXhhcnJheV9h cHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlczolcyIsCisgICAgICAgICAgICAgICAgICAgIGxpYnhs X19kZXZpY2VfZGlza19zdHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZvcm1hdCksCisgICAgICAgICAg ICAgICAgICAgIGRpc2stPnBkZXZfcGF0aCkpOworCisgICAgICAgICAgICAgICAgLyogdGFwIGJh Y2tlbmRzIHdpdGggc2NyaXB0cyBhcmUgcmVqZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgKiBs aWJ4bF9fZGV2aWNlX2Rpc2tfc2V0X2JhY2tlbmQgKi8KKyAgICAgICAgICAgICAgICBhc3NlcnQo IWRpc2stPnNjcmlwdCk7CisKKyAgICAgICAgICAgICAgICAvKiBub3cgY3JlYXRlIGEgcGh5IGRl dmljZSB0byBleHBvcnQgdGhlIGRldmljZSB0byB0aGUgZ3Vlc3QgKi8KKyAgICAgICAgICAgICAg ICBnb3RvIGRvX2JhY2tlbmRfcGh5OworICAgICAgICAgICAgY2FzZSBMSUJYTF9ESVNLX0JBQ0tF TkRfUURJU0s6CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAicGFyYW1z Iik7CisgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBHQ1NQUklOVEYoIiVz OiVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlza19z dHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZvcm1hdCksIGRpc2stPnBkZXZfcGF0aCkpOworICAgICAg ICAgICAgICAgIGlmIChsaWJ4bF9kZWZib29sX3ZhbChkaXNrLT5jb2xvX2VuYWJsZSkpIHsKKyAg ICAgICAgICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiY29sby1ob3N0Iik7Cisg ICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYo Z2MsICIlcyIsIGRpc2stPmNvbG9faG9zdCkpOworICAgICAgICAgICAgICAgICAgICBmbGV4YXJy YXlfYXBwZW5kKGJhY2ssICJjb2xvLXBvcnQiKTsKKyAgICAgICAgICAgICAgICAgICAgZmxleGFy cmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3ByaW50ZihnYywgIiVkIiwgZGlzay0+Y29sb19wb3J0 KSk7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImNvbG8tZXhw b3J0Iik7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxf X3NwcmludGYoZ2MsICIlcyIsIGRpc2stPmNvbG9fZXhwb3J0KSk7CisgICAgICAgICAgICAgICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImFjdGl2ZS1kaXNrIik7CisgICAgICAgICAgICAg ICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2MsICIlcyIsIGRp c2stPmFjdGl2ZV9kaXNrKSk7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQo YmFjaywgImhpZGRlbi1kaXNrIik7CisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBl bmQoYmFjaywgbGlieGxfX3NwcmludGYoZ2MsICIlcyIsIGRpc2stPmhpZGRlbl9kaXNrKSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFzc2VydChkZXZpY2UtPmJhY2tlbmRf a2luZCA9PSBMSUJYTF9fREVWSUNFX0tJTkRfUURJU0spOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21p ZCwgIlVucmVjb2duaXplZCBkaXNrIGJhY2tlbmQgdHlwZTogJWQiLAorICAgICAgICAgICAgICAg ICAgICAgZGlzay0+YmFja2VuZCk7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsK KyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGZsZXhhcnJh eV9hcHBlbmQoYmFjaywgImZyb250ZW5kLWlkIik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQo YmFjaywgR0NTUFJJTlRGKCIlZCIsIGRvbWlkKSk7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQo YmFjaywgIm9ubGluZSIpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICIxIik7Cisg ICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInJlbW92YWJsZSIpOworICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kKGJhY2ssIEdDU1BSSU5URigiJWQiLCAoZGlzay0+cmVtb3ZhYmxlKSA/IDEg OiAwKSk7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImJvb3RhYmxlIik7CisgICAg ICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgR0NTUFJJTlRGKCIlZCIsIDEpKTsKKyAgICAgICAg ZmxleGFycmF5X2FwcGVuZChiYWNrLCAic3RhdGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVu ZChiYWNrLCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKKyAgICAg ICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAiZGV2Iik7CisgICAgICAgIGZsZXhhcnJheV9hcHBl bmQoYmFjaywgZGlzay0+dmRldik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgInR5 cGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fZGV2aWNlX2Rpc2tf c3RyaW5nX29mX2JhY2tlbmQoZGlzay0+YmFja2VuZCkpOworICAgICAgICBmbGV4YXJyYXlfYXBw ZW5kKGJhY2ssICJtb2RlIik7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgZGlzay0+ cmVhZHdyaXRlID8gInciIDogInIiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCAi ZGV2aWNlLXR5cGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBkaXNrLT5pc19j ZHJvbSA/ICJjZHJvbSIgOiAiZGlzayIpOworICAgICAgICBpZiAoZGlzay0+ZGlyZWN0X2lvX3Nh ZmUpIHsKKyAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgImRpcmVjdC1pby1zYWZl Iik7CisgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICIxIik7CisgICAgICAgIH0K KyAgICAgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssICJkaXNjYXJkLWVuYWJsZSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3ZhbChkaXNrLT5kaXNj YXJkX2VuYWJsZSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIDogIjAiKTsK KworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCAiYmFja2VuZC1pZCIpOworICAgICAg ICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBHQ1NQUklOVEYoIiVkIiwgZGlzay0+YmFja2VuZF9k b21pZCkpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCAic3RhdGUiKTsKKyAgICAg ICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5p dGlhbGlzaW5nKSk7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJ2aXJ0dWFsLWRl dmljZSIpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCBHQ1NQUklOVEYoIiVkIiwg ZGV2aWNlLT5kZXZpZCkpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGZyb250LCAiZGV2aWNl LXR5cGUiKTsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgZGlzay0+aXNfY2Ryb20g PyAiY2Ryb20iIDogImRpc2siKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBPbGQgUFYga2Vy bmVsIGRpc2sgZnJvbnRlbmRzIGJlZm9yZSAyLjYuMjYgcmVseSBvbiB0b29sIHN0YWNrIHRvCisg ICAgICAgICAqIHdyaXRlIGRpc2sgbmF0aXZlIHByb3RvY29sIHRvIGZyb250ZW5kIG5vZGUuIFhl bmQgZG9lcyB0aGlzLCBwb3J0CisgICAgICAgICAqIHRoaXMgYmVoYXZpb3VyIHRvIHhsLgorICAg ICAgICAgKgorICAgICAgICAgKiBOZXcga2VybmVscyB3cml0ZSB0aGlzIG5vZGUgdGhlbXNlbHZl cy4gSW4gdGhhdCBjYXNlIGl0IGp1c3QKKyAgICAgICAgICogb3ZlcndyaXRlcyBhbiBleGlzdGlu ZyBub2RlIHdoaWNoIGlzIE9LLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHR5cGUgPT0gTElC WExfRE9NQUlOX1RZUEVfUFYpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb3RvY29sID0K KyAgICAgICAgICAgICAgICB4Y19kb21haW5fZ2V0X25hdGl2ZV9wcm90b2NvbChjdHgtPnhjaCwg ZG9taWQpOworICAgICAgICAgICAgaWYgKHByb3RvY29sKSB7CisgICAgICAgICAgICAgICAgZmxl eGFycmF5X2FwcGVuZChmcm9udCwgInByb3RvY29sIik7CisgICAgICAgICAgICAgICAgZmxleGFy cmF5X2FwcGVuZChmcm9udCwgbGlieGxfX3N0cmR1cChnYywgcHJvdG9jb2wpKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZ2V0X3ZkZXYgJiYgYW9kZXYtPnVwZGF0 ZV9qc29uKSB7CisgICAgICAgICAgICByYyA9IGxpYnhsX19zZXRfZG9tYWluX2NvbmZpZ3VyYXRp b24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsK KyAgICAgICAgfQorCisgICAgICAgIGxpYnhsX19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGRl dmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29m X2ZsZXhhcnJheShnYywgYmFjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGZyb250KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2Fj dGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlm IChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7Cisg ICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX0FERDsKKyAgICBsaWJ4bF9f d2FpdF9kZXZpY2VfY29ubmVjdGlvbihlZ2MsIGFvZGV2KTsKKworICAgIHJjID0gMDsKKworb3V0 OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQpOworICAgIGlmIChsb2Nr KSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKKyAgICBsaWJ4bF9kZXZpY2Vf ZGlza19kaXNwb3NlKCZkaXNrX3NhdmVkKTsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bv c2UoJmRfY29uZmlnKTsKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBpZiAocmMpIGFvZGV2LT5j YWxsYmFjayhlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhs X19kZXZpY2VfZGlza19hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2 KQoreworICAgIGRldmljZV9kaXNrX2FkZChlZ2MsIGRvbWlkLCBkaXNrLCBhb2RldiwgTlVMTCwg TlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV9kaXNrX2Zyb21feGVuc3RvcmUo bGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbGlieGxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2spCit7CisgICAgbGlieGxfY3R4ICpjdHgg PSBsaWJ4bF9fZ2Nfb3duZXIoZ2MpOworICAgIHVuc2lnbmVkIGludCBsZW47CisgICAgY2hhciAq dG1wOworICAgIGludCByYzsKKworICAgIGxpYnhsX2RldmljZV9kaXNrX2luaXQoZGlzayk7CisK KyAgICBjb25zdCBjaGFyICpiYWNrZW5kX3BhdGg7CisgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9j aGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZiYWNrZW5kX3BhdGgpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBp ZiAoIWJhY2tlbmRfcGF0aCkgeworICAgICAgICBMT0coRVJST1IsICJkaXNrICVzIGRvZXMgbm90 IGV4aXN0IChubyBiYWNrZW5kIHBhdGgiLCBsaWJ4bF9wYXRoKTsKKyAgICAgICAgcmMgPSBFUlJP Ul9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IGxpYnhsX19iYWNr ZW5kcGF0aF9wYXJzZV9kb21pZChnYywgYmFja2VuZF9wYXRoLCAmZGlzay0+YmFja2VuZF9kb21p ZCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJPUiwgIlVuYWJsZSB0byBmZXRjaCBk ZXZpY2UgYmFja2VuZCBkb21pZCBmcm9tICVzIiwgYmFja2VuZF9wYXRoKTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAicGFyYW1zIiBtYXkgbm90IGJlIHByZXNl bnQ7IGJ1dCBldmVyeXRoaW5nIGVsc2UgbXVzdCBiZS4KKyAgICAgKiBjb2xvIHJlbGVhdGVkIGVu dHJpZXMoY29sby1ob3N0LCBjb2xvLXBvcnQsIGNvbG8tZXhwb3J0LAorICAgICAqIGFjdGl2ZS1k aXNrIGFuZCBoaWRkZW4tZGlzaykgYXJlIHByZXNlbnQgb25seSBpZiBjb2xvIGlzCisgICAgICog ZW5hYmxlZC4KKyAgICAgKi8KKyAgICB0bXAgPSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwK KyAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvcGFyYW1zIiwgbGlieGxfcGF0aCksICZs ZW4pOworICAgIGlmICh0bXAgJiYgc3RyY2hyKHRtcCwgJzonKSkgeworICAgICAgICBkaXNrLT5w ZGV2X3BhdGggPSBzdHJkdXAoc3RyY2hyKHRtcCwgJzonKSArIDEpOworICAgICAgICBmcmVlKHRt cCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGlzay0+cGRldl9wYXRoID0gdG1wOworICAgIH0K KworICAgIHRtcCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAg ICAgR0NTUFJJTlRGKCIlcy9jb2xvLWhvc3QiLCBsaWJ4bF9wYXRoKSwgJmxlbik7CisgICAgaWYg KHRtcCkgeworICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmZGlzay0+Y29sb19lbmFibGUsIHRy dWUpOworICAgICAgICBkaXNrLT5jb2xvX2hvc3QgPSB0bXA7CisKKyAgICAgICAgdG1wID0geHNf cmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRG KCIlcy9jb2xvLXBvcnQiLCBsaWJ4bF9wYXRoKSwgJmxlbik7CisgICAgICAgIGlmICghdG1wKSB7 CisgICAgICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvY29sby1w b3J0IiwgbGlieGxfcGF0aCk7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0K KyAgICAgICAgZGlzay0+Y29sb19wb3J0ID0gYXRvaSh0bXApOworCisjZGVmaW5lIFhTX1JFQURf Q09MTyhwYXJhbSwgaXRlbSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIHRtcCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8i I3BhcmFtIiIsIGxpYnhsX3BhdGgpLCAmbGVuKTsgICAgICAgICBcCisgICAgICAgIGlmICghdG1w KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICBMT0coRVJST1IsICJNaXNzaW5nIHhlbnN0b3JlIG5vZGUgJXMvIiNwYXJh bSIiLCBsaWJ4bF9wYXRoKTsgICBcCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIGRpc2stPml0ZW0gPSB0bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorICAgICAgICBYU19SRUFEX0NPTE8oY29s by1leHBvcnQsIGNvbG9fZXhwb3J0KTsKKyAgICAgICAgWFNfUkVBRF9DT0xPKGFjdGl2ZS1kaXNr LCBhY3RpdmVfZGlzayk7CisgICAgICAgIFhTX1JFQURfQ09MTyhoaWRkZW4tZGlzaywgaGlkZGVu X2Rpc2spOworI3VuZGVmIFhTX1JFQURfQ09MTworICAgIH0gZWxzZSB7CisgICAgICAgIGxpYnhs X2RlZmJvb2xfc2V0KCZkaXNrLT5jb2xvX2VuYWJsZSwgZmFsc2UpOworICAgIH0KKworICAgIHRt cCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL3R5cGUiLCBsaWJ4bF9wYXRoKSk7CisgICAgaWYgKCF0bXApIHsKKyAg ICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL3R5cGUiLCBsaWJ4bF9w YXRoKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgICBsaWJ4bF9zdHJpbmdfdG9f YmFja2VuZChjdHgsIHRtcCwgJihkaXNrLT5iYWNrZW5kKSk7CisKKyAgICBkaXNrLT52ZGV2ID0g eHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlcy9kZXYiLCBsaWJ4bF9wYXRoKSwgJmxlbik7CisgICAgaWYgKCFkaXNrLT52ZGV2 KSB7CisgICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9kZXYiLCBs aWJ4bF9wYXRoKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIHRtcCA9IGxp YnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgbGlieGxfX3NwcmludGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAoZ2MsICIlcy9yZW1vdmFibGUiLCBsaWJ4bF9wYXRoKSk7CisgICAgaWYgKCF0 bXApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiTWlzc2luZyB4ZW5zdG9yZSBub2RlICVzL3JlbW92 YWJsZSIsIGxpYnhsX3BhdGgpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIGRp c2stPnJlbW92YWJsZSA9IGF0b2kodG1wKTsKKworICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdj LCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9tb2RlIiwgbGlieGxfcGF0aCkpOworICAgIGlmICgh dG1wKSB7CisgICAgICAgIExPRyhFUlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9tb2Rl IiwgbGlieGxfcGF0aCk7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgaWYgKCFz dHJjbXAodG1wLCAidyIpKQorICAgICAgICBkaXNrLT5yZWFkd3JpdGUgPSAxOworICAgIGVsc2UK KyAgICAgICAgZGlzay0+cmVhZHdyaXRlID0gMDsKKworICAgIHRtcCA9IGxpYnhsX194c19yZWFk KGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Rl dmljZS10eXBlIiwgbGlieGxfcGF0aCkpOworICAgIGlmICghdG1wKSB7CisgICAgICAgIExPRyhF UlJPUiwgIk1pc3NpbmcgeGVuc3RvcmUgbm9kZSAlcy9kZXZpY2UtdHlwZSIsIGxpYnhsX3BhdGgp OworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIGRpc2stPmlzX2Nkcm9tID0gIXN0 cmNtcCh0bXAsICJjZHJvbSIpOworCisgICAgZGlzay0+Zm9ybWF0ID0gTElCWExfRElTS19GT1JN QVRfVU5LTk9XTjsKKworICAgIHJldHVybiAwOworY2xlYW51cDoKKyAgICByYyA9IEVSUk9SX0ZB SUw7Cisgb3V0OgorICAgIGxpYnhsX2RldmljZV9kaXNrX2Rpc3Bvc2UoZGlzayk7CisgICAgcmV0 dXJuIHJjOworfQorCitpbnQgbGlieGxfdmRldl90b19kZXZpY2VfZGlzayhsaWJ4bF9jdHggKmN0 eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICp2ZGV2LCBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaykKK3sKKyAgICBHQ19JTklUKGN0eCk7 CisgICAgY2hhciAqZG9tX3hsX3BhdGgsICpsaWJ4bF9wYXRoOworICAgIGludCBkZXZpZCA9IGxp YnhsX19kZXZpY2VfZGlza19kZXZfbnVtYmVyKHZkZXYsIE5VTEwsIE5VTEwpOworICAgIGludCBy YyA9IEVSUk9SX0ZBSUw7CisKKyAgICBpZiAoZGV2aWQgPCAwKQorICAgICAgICByZXR1cm4gRVJS T1JfSU5WQUw7CisKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KGRpc2spOworCisgICAgZG9t X3hsX3BhdGggPSBsaWJ4bF9feHNfbGlieGxfcGF0aChnYywgZG9taWQpOworICAgIGlmICghZG9t X3hsX3BhdGgpIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGxpYnhsX3BhdGggPSBH Q1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLCBkb21feGxfcGF0aCwgZGV2aWQpOworCisgICAg cmMgPSBsaWJ4bF9fZGV2aWNlX2Rpc2tfZnJvbV94ZW5zdG9yZShnYywgbGlieGxfcGF0aCwgZGlz ayk7CitvdXQ6CisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg bGlieGxfX2FwcGVuZF9kaXNrX2xpc3QobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqKmRpc2tzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmRpc2tzKQor eworICAgIGNoYXIgKmxpYnhsX2Rpcl9wYXRoID0gTlVMTDsKKyAgICBjaGFyICoqZGlyID0gTlVM TDsKKyAgICB1bnNpZ25lZCBpbnQgbiA9IDA7CisgICAgbGlieGxfZGV2aWNlX2Rpc2sgKnBkaXNr ID0gTlVMTCwgKnBkaXNrX2VuZCA9IE5VTEw7CisgICAgaW50IHJjPTA7CisgICAgaW50IGluaXRp YWxfZGlza3MgPSAqbmRpc2tzOworCisgICAgbGlieGxfZGlyX3BhdGggPSBHQ1NQUklOVEYoIiVz L2RldmljZS92YmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2xpYnhsX3Bh dGgoZ2MsIGRvbWlkKSk7CisgICAgZGlyID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05V TEwsIGxpYnhsX2Rpcl9wYXRoLCAmbik7CisgICAgaWYgKGRpciAmJiBuKSB7CisgICAgICAgIGxp YnhsX2RldmljZV9kaXNrICp0bXA7CisgICAgICAgIHRtcCA9IHJlYWxsb2MoKmRpc2tzLCBzaXpl b2YgKGxpYnhsX2RldmljZV9kaXNrKSAqICgqbmRpc2tzICsgbikpOworICAgICAgICBpZiAodG1w ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gRVJST1JfTk9NRU07CisgICAgICAgICpkaXNr cyA9IHRtcDsKKyAgICAgICAgcGRpc2sgPSAqZGlza3MgKyBpbml0aWFsX2Rpc2tzOworICAgICAg ICBwZGlza19lbmQgPSAqZGlza3MgKyBpbml0aWFsX2Rpc2tzICsgbjsKKyAgICAgICAgZm9yICg7 IHBkaXNrIDwgcGRpc2tfZW5kOyBwZGlzaysrLCBkaXIrKykgeworICAgICAgICAgICAgY29uc3Qg Y2hhciAqcDsKKyAgICAgICAgICAgIHAgPSBHQ1NQUklOVEYoIiVzLyVzIiwgbGlieGxfZGlyX3Bh dGgsICpkaXIpOworICAgICAgICAgICAgaWYgKChyYz1saWJ4bF9fZGV2aWNlX2Rpc2tfZnJvbV94 ZW5zdG9yZShnYywgcCwgcGRpc2spKSkKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAg ICAgICAgICpuZGlza3MgKz0gMTsKKyAgICAgICAgfQorICAgIH0KK291dDoKKyAgICByZXR1cm4g cmM7Cit9CisKK2xpYnhsX2RldmljZV9kaXNrICpsaWJ4bF9kZXZpY2VfZGlza19saXN0KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pCit7CisgICAgR0NfSU5JVChjdHgp OworICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrcyA9IE5VTEw7CisgICAgaW50IHJjOworCisg ICAgKm51bSA9IDA7CisKKyAgICByYyA9IGxpYnhsX19hcHBlbmRfZGlza19saXN0KGdjLCBkb21p ZCwgJmRpc2tzLCBudW0pOworICAgIGlmIChyYykgZ290byBvdXRfZXJyOworCisgICAgR0NfRlJF RTsKKyAgICByZXR1cm4gZGlza3M7CisKK291dF9lcnI6CisgICAgTE9HKEVSUk9SLCAiVW5hYmxl IHRvIGxpc3QgZGlza3MiKTsKKyAgICB3aGlsZSAoZGlza3MgJiYgKm51bSkgeworICAgICAgICAo Km51bSktLTsKKyAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza3NbKm51bV0p OworICAgIH0KKyAgICBmcmVlKGRpc2tzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGxp YnhsX2RldmljZV9kaXNrX2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2ssIGxp YnhsX2Rpc2tpbmZvICpkaXNraW5mbykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgY2hhciAq ZG9tcGF0aCwgKmZlX3BhdGgsICpsaWJ4bF9wYXRoOworICAgIGNoYXIgKnZhbDsKKyAgICBpbnQg cmM7CisKKyAgICBkaXNraW5mby0+YmFja2VuZCA9IE5VTEw7CisKKyAgICBkb21wYXRoID0gbGli eGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgZGlza2luZm8tPmRldmlkID0gbGli eGxfX2RldmljZV9kaXNrX2Rldl9udW1iZXIoZGlzay0+dmRldiwgTlVMTCwgTlVMTCk7CisKKyAg ICAvKiB0YXAgZGV2aWNlcyBlbnRyaWVzIGluIHhlbnN0b3JlIGFyZSB3cml0dGVuIGFzIHZiZCBk ZXZpY2VzLiAqLworICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92YmQvJWQiLCBk b21wYXRoLCBkaXNraW5mby0+ZGV2aWQpOworICAgIGxpYnhsX3BhdGggPSBHQ1NQUklOVEYoIiVz L2RldmljZS92YmQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2xp YnhsX3BhdGgoZ2MsIGRvbWlkKSwgZGlza2luZm8tPmRldmlkKTsKKyAgICBkaXNraW5mby0+YmFj a2VuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2JhY2tlbmQiLCBsaWJ4bF9wYXRoKSwgTlVMTCk7Cisg ICAgaWYgKCFkaXNraW5mby0+YmFja2VuZCkgeworICAgICAgICBHQ19GUkVFOworICAgICAgICBy ZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisgICAgcmMgPSBsaWJ4bF9fYmFja2VuZHBhdGhfcGFy c2VfZG9taWQoZ2MsIGRpc2tpbmZvLT5iYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZkaXNraW5mby0+YmFja2VuZF9pZCk7CisgICAgaWYgKHJjKSBnb3Rv IG91dDsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRG KCIlcy9zdGF0ZSIsIGZlX3BhdGgpKTsKKyAgICBkaXNraW5mby0+c3RhdGUgPSB2YWwgPyBzdHJ0 b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhC VF9OVUxMLCBHQ1NQUklOVEYoIiVzL2V2ZW50LWNoYW5uZWwiLCBmZV9wYXRoKSk7CisgICAgZGlz a2luZm8tPmV2dGNoID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIHZh bCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9yaW5nLXJlZiIs IGZlX3BhdGgpKTsKKyAgICBkaXNraW5mby0+cnJlZiA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxM LCAxMCkgOiAtMTsKKyAgICBkaXNraW5mby0+ZnJvbnRlbmQgPSB4c19yZWFkKGN0eC0+eHNoLCBY QlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMv ZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSwgTlVMTCk7CisgICAgZGlza2luZm8tPmZyb250ZW5kX2lk ID0gZG9taWQ7CisKKyAgICBHQ19GUkVFOworICAgIHJldHVybiAwOworCisgb3V0OgorICAgIGZy ZWUoZGlza2luZm8tPmJhY2tlbmQpOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2Nk cm9tX2luc2VydChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV9k aXNrICpkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hv dyAqYW9faG93KQoreworICAgIEFPX0NSRUFURShjdHgsIGRvbWlkLCBhb19ob3cpOworICAgIGlu dCBudW0gPSAwLCBpOworICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrcyA9IE5VTEwsIGRpc2tf c2F2ZWQsIGRpc2tfZW1wdHk7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZyBkX2NvbmZpZzsKKyAg ICBpbnQgcmMsIGRtX3ZlcjsKKyAgICBsaWJ4bF9fZGV2aWNlIGRldmljZTsKKyAgICBjb25zdCBj aGFyICpiZV9wYXRoLCAqbGlieGxfcGF0aDsKKyAgICBjaGFyICogdG1wOworICAgIGxpYnhsX19k b21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0 ID0gWEJUX05VTEw7CisgICAgZmxleGFycmF5X3QgKmluc2VydCA9IE5VTEwsICplbXB0eSA9IE5V TEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2luaXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4 bF9kZXZpY2VfZGlza19pbml0KCZkaXNrX2VtcHR5KTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19p bml0KCZkaXNrX3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlza19jb3B5KGN0eCwgJmRpc2tf c2F2ZWQsIGRpc2spOworCisgICAgZGlza19lbXB0eS5mb3JtYXQgPSBMSUJYTF9ESVNLX0ZPUk1B VF9FTVBUWTsKKyAgICBkaXNrX2VtcHR5LnZkZXYgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGRpc2st PnZkZXYpOworICAgIGRpc2tfZW1wdHkucGRldl9wYXRoID0gbGlieGxfX3N0cmR1cChOT0dDLCAi Iik7CisgICAgZGlza19lbXB0eS5pc19jZHJvbSA9IDE7CisgICAgbGlieGxfX2RldmljZV9kaXNr X3NldGRlZmF1bHQoZ2MsICZkaXNrX2VtcHR5LCBkb21pZCk7CisKKyAgICBsaWJ4bF9kb21haW5f dHlwZSB0eXBlID0gbGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCk7CisgICAgaWYgKHR5cGUg PT0gTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJRCkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBpZiAodHlwZSAhPSBMSUJYTF9ET01BSU5f VFlQRV9IVk0pIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJjZHJvbS1pbnNlcnQgcmVx dWlyZXMgYW4gSFZNIGRvbWFpbiIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAg ICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAobGlieGxfZ2V0X3N0dWJkb21faWQoY3R4LCBk b21pZCkgIT0gMCkgeworICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImNkcm9tLWluc2VydCBk b2Vzbid0IHdvcmsgZm9yIHN0dWIgZG9tYWlucyIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFM OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBkbV92ZXIgPSBsaWJ4bF9fZGV2aWNl X21vZGVsX3ZlcnNpb25fcnVubmluZyhnYywgZG9taWQpOworICAgIGlmIChkbV92ZXIgPT0gLTEp IHsKKyAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJDYW5ub3QgZGV0ZXJtaW5lIGRldmljZSBt b2RlbCB2ZXJzaW9uIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorCisgICAgaWYgKGRtX3ZlciA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lP Tl9OT05FKSB7CisgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiR3Vlc3RzIHdpdGhvdXQgYSBk ZXZpY2UgbW9kZWwgY2Fubm90IHVzZSBjZC1pbnNlcnQiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBkaXNrcyA9IGxpYnhsX2Rldmlj ZV9kaXNrX2xpc3QoY3R4LCBkb21pZCwgJm51bSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bTsg aSsrKSB7CisgICAgICAgIGlmIChkaXNrc1tpXS5pc19jZHJvbSAmJiAhc3RyY21wKGRpc2stPnZk ZXYsIGRpc2tzW2ldLnZkZXYpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3VuZC4gIFNl dCBiYWNrZW5kIHR5cGUgYXBwcm9wcmlhdGVseS4gKi8KKyAgICAgICAgICAgIGRpc2stPmJhY2tl bmQ9ZGlza3NbaV0uYmFja2VuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg fQorICAgIGlmIChpID09IG51bSkgeworICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlZpcnR1 YWwgZGV2aWNlIG5vdCBmb3VuZCIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX2RldmljZV9kaXNrX3NldGRlZmF1 bHQoZ2MsIGRpc2ssIGRvbWlkKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgaWYgKCFk aXNrLT5wZGV2X3BhdGgpIHsKKyAgICAgICAgZGlzay0+cGRldl9wYXRoID0gbGlieGxfX3N0cmR1 cChOT0dDLCAiIik7CisgICAgICAgIGRpc2stPmZvcm1hdCA9IExJQlhMX0RJU0tfRk9STUFUX0VN UFRZOworICAgIH0KKworICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX2Rpc2soZ2MsIGRvbWlk LCBkaXNrLCAmZGV2aWNlKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgYmVfcGF0aCA9 IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCAmZGV2aWNlKTsKKyAgICBsaWJ4bF9wYXRo ID0gbGlieGxfX2RldmljZV9saWJ4bF9wYXRoKGdjLCAmZGV2aWNlKTsKKworICAgIGluc2VydCA9 IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsKKworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihp bnNlcnQsICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZV9k aXNrX3N0cmluZ19vZl9iYWNrZW5kKGRpc2stPmJhY2tlbmQpKTsKKyAgICBpZiAoZGlzay0+Zm9y bWF0ICE9IExJQlhMX0RJU0tfRk9STUFUX0VNUFRZKQorICAgICAgICBmbGV4YXJyYXlfYXBwZW5k X3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5U RigiJXM6JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlz a19zdHJpbmdfb2ZfZm9ybWF0KGRpc2stPmZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzay0+cGRldl9wYXRoKSk7CisgICAgZWxzZQorICAgICAgICBmbGV4YXJyYXlfYXBw ZW5kX3BhaXIoaW5zZXJ0LCAicGFyYW1zIiwgIiIpOworCisgICAgZW1wdHkgPSBmbGV4YXJyYXlf bWFrZShnYywgNCwgMSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGVtcHR5LCAidHlwZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2VfZGlza19zdHJpbmdfb2Zf YmFja2VuZChkaXNrLT5iYWNrZW5kKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGVtcHR5 LCAicGFyYW1zIiwgIiIpOworCisgICAgLyogTm90ZTogQ1RYIGxvY2sgaXMgYWxyZWFkeSBoZWxk IGF0IHRoaXMgcG9pbnQgc28gbG9jayBoaWVyYXJjaHkKKyAgICAgKiBpcyBtYWludGFpbmVkLgor ICAgICAqLworICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlk KTsKKyAgICBpZiAoIWxvY2spIHsKKyAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIFdlIG5lZWQgdG8gZWplY3QgdGhlIG9yaWdp bmFsIGltYWdlIGZpcnN0LiBUaGlzIGlzIGltcGxlbWVudGVkCisgICAgICogYnkgaW5zZXJ0aW5n IGVtcHR5IG1lZGlhLiBKU09OIGlzIG5vdCB1cGRhdGVkLgorICAgICAqLworICAgIGlmIChkbV92 ZXIgPT0gTElCWExfREVWSUNFX01PREVMX1ZFUlNJT05fUUVNVV9YRU4pIHsKKyAgICAgICAgcmMg PSBsaWJ4bF9fcW1wX2luc2VydF9jZHJvbShnYywgZG9taWQsICZkaXNrX2VtcHR5KTsKKyAgICAg ICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJj ID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgICAgIC8qIFNhbml0eSBjaGVjazogbWFrZSBzdXJlIHRoZSBkZXZpY2Ug ZXhpc3RzIGJlZm9yZSB3cml0aW5nIGhlcmUgKi8KKyAgICAgICAgdG1wID0gbGlieGxfX3hzX3Jl YWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSk7CisgICAgICAg IGlmICghdG1wKQorICAgICAgICB7CisgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIklu dGVybmFsIGVycm9yOiAlcyBkb2VzIG5vdCBleGlzdCIsCisgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSk7CisgICAgICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIg KiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgZW1wdHkpOworCisgICAgICAg IHJjID0gbGlieGxfX3hzX3dyaXRldihnYywgdCwgYmVfcGF0aCwga3ZzKTsKKyAgICAgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHQsIGxp YnhsX3BhdGgsIGt2cyk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMg PSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMp IGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9 IGxpYnhsX19nZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOwor ICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBERVZJQ0VfQUREKGRpc2ssIGRpc2tzLCBkb21p ZCwgJmRpc2tfc2F2ZWQsIENPTVBBUkVfRElTSywgJmRfY29uZmlnKTsKKworICAgIHJjID0gbGli eGxfX2RtX2NoZWNrX3N0YXJ0KGdjLCAmZF9jb25maWcsIGRvbWlkKTsKKyAgICBpZiAocmMpIGdv dG8gb3V0OworCisgICAgaWYgKGRtX3ZlciA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9R RU1VX1hFTikgeworICAgICAgICByYyA9IGxpYnhsX19xbXBfaW5zZXJ0X2Nkcm9tKGdjLCBkb21p ZCwgZGlzayk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgfQorCisgICAgZm9yICg7 OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOwor ICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICAvKiBTYW5pdHkgY2hlY2s6IG1ha2Ug c3VyZSB0aGUgZGV2aWNlIGV4aXN0cyBiZWZvcmUgd3JpdGluZyBoZXJlICovCisgICAgICAgIHRt cCA9IGxpYnhsX194c19yZWFkKGdjLCB0LCBHQ1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgbGlieGxf cGF0aCkpOworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgeworICAgICAgICAgICAgTE9HRChF UlJPUiwgZG9taWQsICJJbnRlcm5hbCBlcnJvcjogJXMgZG9lcyBub3QgZXhpc3QiLAorICAgICAg ICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgbGlieGxfcGF0aCkpOworICAgICAg ICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0K KworICAgICAgICByYyA9IGxpYnhsX19zZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlk LCAmZF9jb25maWcpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGNoYXIg KiprdnMgPSBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgaW5zZXJ0KTsKKworICAgICAg ICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHQsIGJlX3BhdGgsIGt2cyk7CisgICAgICAgIGlm IChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGV2KGdjLCB0LCBs aWJ4bF9wYXRoLCBrdnMpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJj ID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJj KSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgLyog c3VjY2Vzcywgbm8gYWN0dWFsIGFzeW5jICovCisgICAgbGlieGxfX2FvX2NvbXBsZXRlKGVnYywg YW8sIDApOworCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9u X2Fib3J0KGdjLCAmdCk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorICAgICAgICBs aWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrc1tpXSk7CisgICAgZnJlZShkaXNrcyk7Cisg ICAgbGlieGxfZGV2aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19lbXB0eSk7CisgICAgbGlieGxfZGV2 aWNlX2Rpc2tfZGlzcG9zZSgmZGlza19zYXZlZCk7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19k aXNwb3NlKCZkX2NvbmZpZyk7CisKKyAgICBpZiAobG9jaykgbGlieGxfX3VubG9ja19kb21haW5f dXNlcmRhdGEobG9jayk7CisKKyAgICBpZiAocmMpIHJldHVybiBBT19DUkVBVEVfRkFJTChyYyk7 CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9CisKKy8qIGxpYnhsX19hbGxvY192ZGV2IG9u bHkgd29ya3Mgb24gdGhlIGxvY2FsIGRvbWFpbiwgdGhhdCBpcyB0aGUgZG9tYWluCisgKiB3aGVy ZSB0aGUgdG9vbHN0YWNrIGlzIHJ1bm5pbmcgKi8KK3N0YXRpYyBjaGFyICogbGlieGxfX2FsbG9j X3ZkZXYobGlieGxfX2djICpnYywgdm9pZCAqZ2V0X3ZkZXZfdXNlciwKKyAgICAgICAgeHNfdHJh bnNhY3Rpb25fdCB0KQoreworICAgIGNvbnN0IGNoYXIgKmJsa2Rldl9zdGFydCA9IChjb25zdCBj aGFyICopIGdldF92ZGV2X3VzZXI7CisgICAgaW50IGRldmlkID0gMCwgZGlzayA9IDAsIHBhcnQg PSAwOworICAgIGNoYXIgKmxpYnhsX2RvbV9wYXRoID0gbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2Ms IExJQlhMX1RPT0xTVEFDS19ET01JRCk7CisKKyAgICBsaWJ4bF9fZGV2aWNlX2Rpc2tfZGV2X251 bWJlcihibGtkZXZfc3RhcnQsICZkaXNrLCAmcGFydCk7CisgICAgaWYgKHBhcnQgIT0gMCkgewor ICAgICAgICBMT0coRVJST1IsICJibGtkZXZfc3RhcnQgaXMgaW52YWxpZCIpOworICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGRldmlkID0gbGlieGxfX2Rl dmljZV9kaXNrX2Rldl9udW1iZXIoR0NTUFJJTlRGKCJkJWRwMCIsIGRpc2spLAorICAgICAgICAg ICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoZGV2aWQgPCAwKQorICAgICAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChsaWJ4bF9feHNfcmVhZChnYywgdCwKKyAgICAgICAg ICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmJkLyVkL2JhY2tlbmQiLAorICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZG9tX3BhdGgsIGRldmlkKSkgPT0gTlVMTCkgeworICAg ICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGli eGxfX2RldmlkX3RvX3ZkZXYoZ2MsIGRldmlkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBkaXNrKys7CisgICAgfSB3 aGlsZSAoMSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIENhbGxiYWNrcyAqLworCitjaGFy ICpsaWJ4bF9fZGV2aWNlX2Rpc2tfZmluZF9sb2NhbF9wYXRoKGxpYnhsX19nYyAqZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21pZCBndWVzdF9k b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxp YnhsX2RldmljZV9kaXNrICpkaXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBxZGlza19kaXJlY3QpCit7CisgICAgY2hhciAqcGF0aCA9IE5VTEw7CisK KyAgICAvKiBObyBsb2NhbCBwYXRocyBmb3IgZHJpdmVyIGRvbWFpbnMgKi8KKyAgICBpZiAoZGlz ay0+YmFja2VuZF9kb21uYW1lICE9IE5VTEwpIHsKKyAgICAgICAgTE9HKERFQlVHLCAiTm9uLWxv Y2FsIGJhY2tlbmQsIGNhbid0IGFjY2VzcyBsb2NhbGx5LlxuIik7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhpcyBpcyBpbiByYXcgZm9ybWF0LCBhbmQg d2UncmUgbm90IHVzaW5nIGEgc2NyaXB0IG9yIGEKKyAgICAgKiBkcml2ZXIgZG9tYWluLCB3ZSBj YW4gYWNjZXNzIHRoZSB0YXJnZXQgcGF0aCBkaXJlY3RseS4KKyAgICAgKi8KKyAgICBpZiAoZGlz ay0+Zm9ybWF0ID09IExJQlhMX0RJU0tfRk9STUFUX1JBVworICAgICAgICAmJiBkaXNrLT5zY3Jp cHQgPT0gTlVMTCkgeworICAgICAgICBwYXRoID0gbGlieGxfX3N0cmR1cChnYywgZGlzay0+cGRl dl9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiRGlyZWN0bHkgYWNjZXNzaW5nIGxvY2FsIFJB VyBkaXNrICVzIiwgcGF0aCk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qCisg ICAgICogSWYgd2UncmUgYmVpbmcgY2FsbGVkIGZvciBhIHFlbXUgcGF0aCwgd2UgY2FuIHBhc3Mg dGhlIHRhcmdldAorICAgICAqIHN0cmluZyBkaXJlY3RseSBhcyB3ZWxsCisgICAgICovCisgICAg aWYgKHFkaXNrX2RpcmVjdCAmJiBkaXNrLT5iYWNrZW5kID09IExJQlhMX0RJU0tfQkFDS0VORF9R RElTSykgeworICAgICAgICBwYXRoID0gbGlieGxfX3N0cmR1cChnYywgZGlzay0+cGRldl9wYXRo KTsKKyAgICAgICAgTE9HKERFQlVHLCAiRGlyZWN0bHkgYWNjZXNzaW5nIGxvY2FsIFFESVNLIHRh cmdldCAlcyIsIHBhdGgpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKgorICAg ICAqIElmIHRoZSBmb3JtYXQgaXNuJ3QgcmF3IGFuZCAvIG9yIHdlJ3JlIHVzaW5nIGEgc2NyaXB0 LCB0aGVuIHNlZQorICAgICAqIGlmIHRoZSBzY3JpcHQgaGFzIHdyaXR0ZW4gYSBwYXRoIHRvIHRo ZSAiY29va2VkIiBub2RlCisgICAgICovCisgICAgaWYgKGRpc2stPnNjcmlwdCAmJiBndWVzdF9k b21pZCAhPSBJTlZBTElEX0RPTUlEKSB7CisgICAgICAgIGxpYnhsX19kZXZpY2UgZGV2aWNlOwor ICAgICAgICBjaGFyICpiZV9wYXRoLCAqcGRwYXRoOworICAgICAgICBpbnQgcmM7CisKKyAgICAg ICAgTE9HRChERUJVRywgZ3Vlc3RfZG9taWQsCisgICAgICAgICAgICAgIlJ1biBmcm9tIGEgc2Ny aXB0OyBjaGVja2luZyBmb3IgcGh5c2ljYWwtZGV2aWNlLXBhdGggKHZkZXYgJXMpIiwKKyAgICAg ICAgICAgICBkaXNrLT52ZGV2KTsKKworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV9k aXNrKGdjLCBndWVzdF9kb21pZCwgZGlzaywgJmRldmljZSk7CisgICAgICAgIGlmIChyYyA8IDAp CisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBiZV9wYXRoID0gbGlieGxfX2Rldmlj ZV9iYWNrZW5kX3BhdGgoZ2MsICZkZXZpY2UpOworCisgICAgICAgIHBkcGF0aCA9IGxpYnhsX19z cHJpbnRmKGdjLCAiJXMvcGh5c2ljYWwtZGV2aWNlLXBhdGgiLCBiZV9wYXRoKTsKKworICAgICAg ICBMT0dEKERFQlVHLCBndWVzdF9kb21pZCwgIkF0dGVtcHRpbmcgdG8gcmVhZCBub2RlICVzIiwg cGRwYXRoKTsKKyAgICAgICAgcGF0aCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgcGRw YXRoKTsKKworICAgICAgICBpZiAocGF0aCkKKyAgICAgICAgICAgIExPR0QoREVCVUcsIGd1ZXN0 X2RvbWlkLCAiQWNjZXNzaW5nIGNvb2tlZCBibG9jayBkZXZpY2UgJXMiLCBwYXRoKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgTE9HRChERUJVRywgZ3Vlc3RfZG9taWQsICJObyBwaHlzaWNh bC1kZXZpY2UtcGF0aCwgY2FuJ3QgYWNjZXNzIGxvY2FsbHkuIik7CisKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorCisgb3V0OgorICAgIHJldHVybiBwYXRoOworfQorCitzdGF0aWMgdm9pZCBs b2NhbF9kZXZpY2VfYXR0YWNoX2NiKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvX2RldmljZSAq YW9kZXYpOworCit2b2lkIGxpYnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9hdHRhY2go bGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19kaXNrX2xvY2FsX3N0YXRlICpkbHMpCit7CisgICAgU1RBVEVfQU9fR0MoZGxzLT5hbyk7 CisgICAgaW50IHJjOworICAgIGNvbnN0IGxpYnhsX2RldmljZV9kaXNrICppbl9kaXNrID0gZGxz LT5pbl9kaXNrOworICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrID0gJmRscy0+ZGlzazsKKyAg ICBjb25zdCBjaGFyICpibGtkZXZfc3RhcnQgPSBkbHMtPmJsa2Rldl9zdGFydDsKKworICAgIGFz c2VydChpbl9kaXNrLT5wZGV2X3BhdGgpOworCisgICAgZGlzay0+dmRldiA9IE5VTEw7CisKKyAg ICBpZiAoZGxzLT5kaXNrcGF0aCkKKyAgICAgICAgTE9HKERFQlVHLCAiU3RyYW5nZSwgZGxzLT5k aXNrcGF0aCBhbHJlYWR5IHNldDogJXMiLCBkbHMtPmRpc2twYXRoKTsKKworICAgIExPRyhERUJV RywgIlRyeWluZyB0byBmaW5kIGxvY2FsIHBhdGgiKTsKKworICAgIGRscy0+ZGlza3BhdGggPSBs aWJ4bF9fZGV2aWNlX2Rpc2tfZmluZF9sb2NhbF9wYXRoKGdjLCBJTlZBTElEX0RPTUlELAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2Rp c2ssIGZhbHNlKTsKKyAgICBpZiAoZGxzLT5kaXNrcGF0aCkgeworICAgICAgICBMT0coREVCVUcs ICJMb2NhbCBwYXRoIGZvdW5kLCBleGVjdXRpbmcgY2FsbGJhY2suIik7CisgICAgICAgIGRscy0+ Y2FsbGJhY2soZWdjLCBkbHMsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhERUJVRywg IkxvY2FsIHBhdGggbm90IGZvdW5kLCBpbml0aWF0aW5nIGF0dGFjaC4iKTsKKworICAgICAgICBt ZW1jcHkoZGlzaywgaW5fZGlzaywgc2l6ZW9mKGxpYnhsX2RldmljZV9kaXNrKSk7CisgICAgICAg IGRpc2stPnBkZXZfcGF0aCA9IGxpYnhsX19zdHJkdXAoZ2MsIGluX2Rpc2stPnBkZXZfcGF0aCk7 CisgICAgICAgIGlmIChpbl9kaXNrLT5zY3JpcHQgIT0gTlVMTCkKKyAgICAgICAgICAgIGRpc2st PnNjcmlwdCA9IGxpYnhsX19zdHJkdXAoZ2MsIGluX2Rpc2stPnNjcmlwdCk7CisgICAgICAgIGRp c2stPnZkZXYgPSBOVUxMOworCisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV9kaXNrX3NldGRl ZmF1bHQoZ2MsIGRpc2ssIExJQlhMX1RPT0xTVEFDS19ET01JRCk7CisgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisKKyAgICAgICAgbGlieGxfX3ByZXBhcmVfYW9fZGV2aWNlKGFvLCAmZGxzLT5h b2Rldik7CisgICAgICAgIGRscy0+YW9kZXYuY2FsbGJhY2sgPSBsb2NhbF9kZXZpY2VfYXR0YWNo X2NiOworICAgICAgICBkZXZpY2VfZGlza19hZGQoZWdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQs IGRpc2ssICZkbHMtPmFvZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FsbG9j X3ZkZXYsICh2b2lkICopIGJsa2Rldl9zdGFydCk7CisgICAgfQorCisgICAgcmV0dXJuOworCisg b3V0OgorICAgIGFzc2VydChyYyk7CisgICAgZGxzLT5yYyA9IHJjOworICAgIGxpYnhsX19kZXZp Y2VfZGlza19sb2NhbF9pbml0aWF0ZV9kZXRhY2goZWdjLCBkbHMpOworICAgIGRscy0+Y2FsbGJh Y2soZWdjLCBkbHMsIHJjKTsKK30KKworc3RhdGljIHZvaWQgbG9jYWxfZGV2aWNlX2F0dGFjaF9j YihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRF X0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfX2Rpc2tfbG9jYWxfc3RhdGUgKmRscyA9IENP TlRBSU5FUl9PRihhb2RldiwgKmRscywgYW9kZXYpOworICAgIGNoYXIgKmJlX3BhdGggPSBOVUxM OworICAgIGludCByYzsKKyAgICBsaWJ4bF9fZGV2aWNlIGRldmljZTsKKyAgICBsaWJ4bF9kZXZp Y2VfZGlzayAqZGlzayA9ICZkbHMtPmRpc2s7CisKKyAgICByYyA9IGFvZGV2LT5yYzsKKyAgICBp ZiAocmMpIHsKKyAgICAgICAgTE9HRShFUlJPUiwgInVuYWJsZSBsb2NhbGx5IGF0dGFjaCBkZXZp Y2U6ICVzIiwgZGlzay0+cGRldl9wYXRoKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhnYywgTElCWExfVE9PTFNUQUNLX0RPTUlE LCBkaXNrLCAmZGV2aWNlKTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICBnb3RvIG91dDsKKyAg ICBiZV9wYXRoID0gbGlieGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsICZkZXZpY2UpOworICAg IHJjID0gbGlieGxfX3dhaXRfZm9yX2JhY2tlbmQoZ2MsIGJlX3BhdGgsIEdDU1BSSU5URigiJWQi LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCkpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIGdvdG8g b3V0OworCisgICAgZGxzLT5kaXNrcGF0aCA9IEdDU1BSSU5URigiL2Rldi8lcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWRfdG9fbG9jYWxkZXYoZ2MsIGRldmlj ZS5kZXZpZCkpOworICAgIExPRyhERUJVRywgImxvY2FsbHkgYXR0YWNoZWQgZGlzayAlcyIsIGRs cy0+ZGlza3BhdGgpOworCisgICAgZGxzLT5jYWxsYmFjayhlZ2MsIGRscywgMCk7CisgICAgcmV0 dXJuOworCisgb3V0OgorICAgIGFzc2VydChyYyk7CisgICAgZGxzLT5yYyA9IHJjOworICAgIGxp YnhsX19kZXZpY2VfZGlza19sb2NhbF9pbml0aWF0ZV9kZXRhY2goZWdjLCBkbHMpOworICAgIHJl dHVybjsKK30KKworLyogQ2FsbGJhY2tzIGZvciBsb2NhbCBkZXRhY2ggKi8KKworc3RhdGljIHZv aWQgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZp Y2UgKmFvZGV2KTsKKwordm9pZCBsaWJ4bF9fZGV2aWNlX2Rpc2tfbG9jYWxfaW5pdGlhdGVfZGV0 YWNoKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fZGlza19sb2NhbF9zdGF0ZSAqZGxzKQoreworICAgIFNUQVRFX0FPX0dDKGRscy0+ YW8pOworICAgIGludCByYyA9IDA7CisgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2sgPSAmZGxz LT5kaXNrOworICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKKyAgICBsaWJ4bF9fYW9fZGV2aWNl ICphb2RldiA9ICZkbHMtPmFvZGV2OworICAgIGxpYnhsX19wcmVwYXJlX2FvX2RldmljZShhbywg YW9kZXYpOworCisgICAgaWYgKCFkbHMtPmRpc2twYXRoKSBnb3RvIG91dDsKKworICAgIGlmIChk aXNrLT52ZGV2ICE9IE5VTEwpIHsKKyAgICAgICAgR0NORVcoZGV2aWNlKTsKKyAgICAgICAgcmMg PSBsaWJ4bF9fZGV2aWNlX2Zyb21fZGlzayhnYywgTElCWExfVE9PTFNUQUNLX0RPTUlELAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2ssIGRldmljZSk7CisgICAgICAg IGlmIChyYyAhPSAwKSBnb3RvIG91dDsKKworICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElCWExf X0RFVklDRV9BQ1RJT05fUkVNT1ZFOworICAgICAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworICAg ICAgICBhb2Rldi0+Y2FsbGJhY2sgPSBsb2NhbF9kZXZpY2VfZGV0YWNoX2NiOworICAgICAgICBh b2Rldi0+Zm9yY2UgPSAwOworICAgICAgICBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNf cmVtb3ZlKGVnYywgYW9kZXYpOworICAgICAgICByZXR1cm47CisgICAgfQorCitvdXQ6CisgICAg YW9kZXYtPnJjID0gcmM7CisgICAgbG9jYWxfZGV2aWNlX2RldGFjaF9jYihlZ2MsIGFvZGV2KTsK KyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGxvY2FsX2RldmljZV9kZXRhY2hfY2IobGli eGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3sKKyAgICBTVEFURV9BT19H Qyhhb2Rldi0+YW8pOworICAgIGxpYnhsX19kaXNrX2xvY2FsX3N0YXRlICpkbHMgPSBDT05UQUlO RVJfT0YoYW9kZXYsICpkbHMsIGFvZGV2KTsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoYW9kZXYt PnJjKSB7CisgICAgICAgIExPR0VEKEVSUk9SLCBhb2Rldi0+ZGV2LT5kb21pZCwgIlVuYWJsZSB0 byAlcyAlcyB3aXRoIGlkICV1IiwKKyAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2Vf YWN0aW9uX3RvX3N0cmluZyhhb2Rldi0+YWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19kZXZpY2Vfa2luZF90b19zdHJpbmcoYW9kZXYtPmRldi0+a2luZCksCisgICAgICAgICAg ICAgICAgICAgICBhb2Rldi0+ZGV2LT5kZXZpZCk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K Kworb3V0OgorICAgIC8qCisgICAgICogSWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGRscy0+cmMs IGl0IG1lYW5zIHdlIGhhdmUgYmVlbiBjYWxsZWQgZnJvbQorICAgICAqIGEgZmFpbGVkIGV4ZWN1 dGlvbiBvZiBsaWJ4bF9fZGV2aWNlX2Rpc2tfbG9jYWxfaW5pdGlhdGVfYXR0YWNoLAorICAgICAq IHNvIHJldHVybiB0aGUgb3JpZ2luYWwgZXJyb3IuCisgICAgICovCisgICAgcmMgPSBkbHMtPnJj ID8gZGxzLT5yYyA6IGFvZGV2LT5yYzsKKyAgICBkbHMtPmNhbGxiYWNrKGVnYywgZGxzLCByYyk7 CisgICAgcmV0dXJuOworfQorCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5l ZDoKKyAqIGxpYnhsX2RldmljZV9kaXNrX2FkZAorICogbGlieGxfX2FkZF9kaXNrcworICogbGli eGxfZGV2aWNlX2Rpc2tfcmVtb3ZlCisgKiBsaWJ4bF9kZXZpY2VfZGlza19kZXN0cm95CisgKi8K K0xJQlhMX0RFRklORV9ERVZJQ0VfQUREKGRpc2spCitMSUJYTF9ERUZJTkVfREVWSUNFU19BREQo ZGlzaykKK0xJQlhMX0RFRklORV9ERVZJQ0VfUkVNT1ZFKGRpc2spCisKK3N0YXRpYyBpbnQgbGli eGxfZGV2aWNlX2Rpc2tfY29tcGFyZShsaWJ4bF9kZXZpY2VfZGlzayAqZDEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmQyKQoreworICAg IHJldHVybiBDT01QQVJFX0RJU0soZDEsIGQyKTsKK30KKworLyogVGFrZSBjYXJlIG9mIHJlbW92 YWJsZSBkZXZpY2UuIFdlIG1haW50YWluIGludmFyaWFudCBpbiB0aGUKKyAqIGluc2VydCAvIHJl bW92ZSBvcGVyYXRpb24gc28gdGhhdDoKKyAqIDEuIGlmIHhlbnN0b3JlIGlzICJlbXB0eSIgd2hp bGUgSlNPTiBpcyBub3QsIHRoZSByZXN1bHQKKyAqICAgIGlzICJlbXB0eSIKKyAqIDIuIGlmIHhl bnN0b3JlIGhhcyBhIGRpZmZlcmVudCBtZWRpYSB0aGFuIEpTT04sIHVzZSB0aGUKKyAqICAgIG9u ZSBpbiBKU09OCisgKiAzLiBpZiB4ZW5zdG9yZSBhbmQgSlNPTiBoYXZlIHRoZSBzYW1lIG1lZGlh LCB3ZWxsLCB5b3UKKyAqICAgIGtub3cgdGhlIGFuc3dlciA6LSkKKyAqCisgKiBDdXJyZW50bHkg dGhlcmUgaXMgb25seSBvbmUgcmVtb3ZhYmxlIGRldmljZSAtLSBDRFJPTS4KKyAqIExvb2sgZm9y IGxpYnhsX2Nkcm9tX2luc2VydCBmb3IgcmVmZXJlbmNlLgorICovCitzdGF0aWMgdm9pZCBsaWJ4 bF9kZXZpY2VfZGlza19tZXJnZShsaWJ4bF9jdHggKmN0eCwgdm9pZCAqZDEsIHZvaWQgKmQyKQor eworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBsaWJ4bF9kZXZpY2VfZGlzayAqc3JjID0gZDE7Cisg ICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRzdCA9IGQyOworCisgICAgaWYgKHNyYy0+cmVtb3ZhYmxl KSB7CisgICAgICAgIGlmICghc3JjLT5wZGV2X3BhdGggfHwgKnNyYy0+cGRldl9wYXRoID09ICdc MCcpIHsKKyAgICAgICAgICAgIC8qIDEsIG5vIG1lZGlhIGluIGRyaXZlICovCisgICAgICAgICAg ICBmcmVlKGRzdC0+cGRldl9wYXRoKTsKKyAgICAgICAgICAgIGRzdC0+cGRldl9wYXRoID0gbGli eGxfX3N0cmR1cChOT0dDLCAiIik7CisgICAgICAgICAgICBkc3QtPmZvcm1hdCA9IExJQlhMX0RJ U0tfRk9STUFUX0VNUFRZOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogMiBhbmQg MywgdXNlIEpTT04sIG5vIG5lZWQgdG8gdG91Y2ggYW55dGhpbmcgKi8KKyAgICAgICAgICAgIDsK KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludCBsaWJ4bF9kZXZpY2VfZGlza19kbV9u ZWVkZWQodm9pZCAqZSwgdW5zaWduZWQgZG9taWQpCit7CisgICAgbGlieGxfZGV2aWNlX2Rpc2sg KmVsZW0gPSBlOworCisgICAgcmV0dXJuIGVsZW0tPmJhY2tlbmQgPT0gTElCWExfRElTS19CQUNL RU5EX1FESVNLICYmCisgICAgICAgICAgIGVsZW0tPmJhY2tlbmRfZG9taWQgPT0gZG9taWQ7Cit9 CisKK0RFRklORV9ERVZJQ0VfVFlQRV9TVFJVQ1QoZGlzaywKKyAgICAubWVyZ2UgICAgICAgPSBs aWJ4bF9kZXZpY2VfZGlza19tZXJnZSwKKyAgICAuZG1fbmVlZGVkICAgPSBsaWJ4bF9kZXZpY2Vf ZGlza19kbV9uZWVkZWQsCisgICAgLnNraXBfYXR0YWNoID0gMQorKTsKKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQt dGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMC4yCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==