From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH v4 10/23] amdkfd: Add basic modules to amdkfd Date: Wed, 24 Sep 2014 23:45:24 +0300 Message-ID: <1411591537-31636-11-git-send-email-oded.gabbay@amd.com> References: <1411591537-31636-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0144.outbound.protection.outlook.com [207.46.100.144]) by gabe.freedesktop.org (Postfix) with ESMTP id 7D1D56E6A6 for ; Wed, 24 Sep 2014 14:04:33 -0700 (PDT) In-Reply-To: <1411591537-31636-1-git-send-email-oded.gabbay@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Alex Deucher , Jerome Glisse Cc: Andrew Lewycky , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org RnJvbTogQW5kcmV3IExld3lja3kgPEFuZHJldy5MZXd5Y2t5QGFtZC5jb20+CgpUaGlzIHBhdGNo IGFkZHMgdGhlIHByb2Nlc3MgbW9kdWxlIGFuZCB0aHJlZSBoZWxwZXIgbW9kdWxlczoKCi0ga2Zk X3Byb2Nlc3MsIHdoaWNoIGhhbmRsZXMgcHJvY2VzcyB3aGljaCBvcGVuIC9kZXYva2ZkCgotIGtm ZF9kb29yYmVsbCwgd2hpY2ggcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZG9vcmJlbGwg YWxsb2NhdGlvbiwKICByZWxlYXNlIGFuZCBtYXBwaW5nIHRvIHVzZXJzcGFjZQoKLSBrZmRfcGFz aWQsIHdoaWNoIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBhc2lkIGFsbG9jYXRpb24g YW5kIHJlbGVhc2UKCi0ga2ZkX2FwZXJ0dXJlLCB3aGljaCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rp b25zIGZvciBtYW5hZ2luZyB0aGUgTERTLCBMb2NhbCBHUFUKICBtZW1vcnkgYW5kIFNjcmF0Y2gg bWVtb3J5IGFwZXJ0dXJlcyBvZiB0aGUgcHJvY2VzcwoKVGhpcyBwYXRjaCBvbmx5IGNvbnRhaW5z IHRoZSBiYXNpYyBrZmRfcHJvY2VzcyBtb2R1bGUsIHdoaWNoIGRvZXNuJ3QgY29udGFpbgp0aGUg cmVmZXJlbmNlIHRvIHRoZSBxdWV1ZSBzY2hlZHVsZXIuIFRoaXMgd2FzIGRvbmUgdG8gYWxsb3cg ZWFzaWVyIGNvZGUgcmV2aWV3LgoKQWxzbywgdGhpcyBwYXRjaCBkb2Vzbid0IGNvbnRhaW4gdGhl IGNhbGxzIHRvIHRoZSBJT01NVSBkcml2ZXIgZm9yIGJpbmRpbmcgdGhlCnBhc2lkIHRvIHRoZSBk ZXZpY2UuIEFnYWluLCB0aGlzIHdhcyBkb25lIHRvIGFsbG93IGVhc2llciBjb2RlIHJldmlldwoK VGhlIGtmZF9wcm9jZXNzIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYSBwcm9jZXNzIG9wZW5zIC9k ZXYva2ZkIGFuZCBpcyBjbG9zZWQKd2hlbiB0aGUgbW1fc3RydWN0IG9mIHRoYXQgcHJvY2VzcyBp cyB0ZWFyZWQtZG93bi4KCnYzOgoKUmVtb3ZlZCBrZmRfdmlkbWVtLmMgZmlsZQpSZXBsYWNlZCBk aXJlY3QgbW1wdXQgY2FsbCB0byBtbXVfbm90aWZpZXIgcmVsZWFzZQpSZW1vdmVkIHR5cGVkZWZz Ck1vdmVkIGJvb2wgZmllbGQgdG8gZW5kIG9mIHRoZSBzdHJ1Y3R1cmUKQWRkZWQgbmV3IGtlcm5l bCBwYXJhbXMgZm9yIGdhcnQgdXNhZ2UgbGltaXRhdGlvbgpBZGRlZCBpbml0aWFsaXphdGlvbiBv ZiBzYSBtYW5hZ2VyCkZpeGVkIGRlYnVnIG1lc3NhZ2VzClJlbW92ZSBzdXBwb3J0IGZvciBMRFMg aW4gMzIgYml0CkNoYW5nZWQgY29kZSB0byBzdXBwb3J0IG1tYXAgb2YgZG9vcmJlbGwgcGFnZXMg ZnJvbSB1c2Vyc3BhY2UKQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgYXBlcnR1cmVzCgp2NDoKClJl cGxhY2VkIFJDVSBieSBTUkNVIGZvciBrZmRfcHJvY2VzcyBsaXN0IG1hbmFnZW1lbnQKClNpZ25l ZC1vZmYtYnk6IEFuZHJldyBMZXd5Y2t5IDxBbmRyZXcuTGV3eWNreUBhbWQuY29tPgpTaWduZWQt b2ZmLWJ5OiBPZGVkIEdhYmJheSA8b2RlZC5nYWJiYXlAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vcmFkZW9uL2FtZGtmZC9NYWtlZmlsZSAgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2FwZXJ0dXJlLmMgfCAzNTAgKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfY2hhcmRldi5jICB8 ICAzMSArKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kZXZpY2UuYyAgIHwg IDQ1ICsrKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kb29yYmVsbC5jIHwg MjM2ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2Zk X21vZHVsZS5jICAgfCAgMzIgKystCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRf cGFzaWQuYyAgICB8ICA5NSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQv a2ZkX3ByaXYuaCAgICAgfCAxNDEgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24v YW1ka2ZkL2tmZF9wcm9jZXNzLmMgIHwgMzIyICsrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMgICAgICAgICAgfCAgMjEgKy0KIDEwIGZp bGVzIGNoYW5nZWQsIDEyNTAgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2FwZXJ0dXJlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfZG9v cmJlbGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2Zk L2tmZF9wYXNpZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9h bWRrZmQva2ZkX3Byb2Nlc3MuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v YW1ka2ZkL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQvTWFrZWZpbGUK aW5kZXggMDhlY2ZjZC4uNmQ2NzQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9hbWRrZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQvTWFr ZWZpbGUKQEAgLTQsNiArNCw4IEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKLWFt ZGtmZC15CTo9IGtmZF9tb2R1bGUubyBrZmRfZGV2aWNlLm8ga2ZkX2NoYXJkZXYubyBrZmRfdG9w b2xvZ3kubworYW1ka2ZkLXkJOj0ga2ZkX21vZHVsZS5vIGtmZF9kZXZpY2UubyBrZmRfY2hhcmRl di5vIGtmZF90b3BvbG9neS5vIFwKKwkJa2ZkX3Bhc2lkLm8ga2ZkX2Rvb3JiZWxsLm8ga2ZkX2Fw ZXJ0dXJlLm8gXAorCQlrZmRfcHJvY2Vzcy5vCiAKIG9iai0kKENPTkZJR19IU0FfUkFERU9OKQkr PSBhbWRrZmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2Zk X2FwZXJ0dXJlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfYXBlcnR1cmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZiNzIwCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2FwZXJ0dXJlLmMKQEAg LTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg Q09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4K KyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxs aW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2tmZF9pb2N0bC5oPgorI2luY2x1 ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlICJrZmRfcHJpdi5oIgorI2luY2x1ZGUgPGxpbnV4 L21tLmg+CisjaW5jbHVkZSA8dWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgorI2luY2x1 ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyoKKyAqIFRoZSBwcmltYXJ5IG1lbW9yeSBJL08gZmVh dHVyZXMgYmVpbmcgYWRkZWQgZm9yIHJldmlzaW9ucyBvZiBnZnhpcAorICogYmV5b25kIDcuMCAo S2F2ZXJpKSBhcmU6CisgKgorICogQWNjZXNzIHRvIEFUQy9JT01NVSBtYXBwZWQgbWVtb3J5IHcv IGFzc29jaWF0ZWQgZXh0ZW5zaW9uIG9mIFZBIHRvIDQ4YgorICoKKyAqIOKAnEZsYXTigJ0gc2hh ZGVyIG1lbW9yeSBhY2Nlc3Mg4oCTIFRoZXNlIGFyZSBuZXcgc2hhZGVyIHZlY3RvciBtZW1vcnkg b3BlcmF0aW9ucworICogdGhhdCBkbyBub3QgcmVmZXJlbmNlIGEgVCMvViMgc28gYSDigJxwb2lu dGVy4oCdIGlzIHdoYXQgaXMgc291cmNlZCBmcm9tIHRoZQorICogdmVjdG9yIGdwcnMgZm9yIGRp cmVjdCBhY2Nlc3MgdG8gbWVtb3J5LiAgVGhpcyBwb2ludGVyIHNwYWNlIGhhcyB0aGUKKyAqIFNo YXJlZChMRFMpIGFuZCBQcml2YXRlKFNjcmF0Y2gpIG1lbW9yeSBtYXBwZWQgaW50byB0aGlzIHBv aW50ZXIgc3BhY2UgYXMKKyAqIGFwZXJ0dXJlcy4gIFRoZSBoYXJkd2FyZSB0aGVuIGRldGVybWlu ZXMgaG93IHRvIGRpcmVjdCB0aGUgbWVtb3J5IHJlcXVlc3QKKyAqIGJhc2VkIG9uIHdoYXQgYXBl cnR1cmVzIHRoZSByZXF1ZXN0IGZhbGxzIGluLgorICoKKyAqIFVuYWxpZ25lZCBzdXBwb3J0IGFu ZCBhbGlnbm1lbnQgY2hlY2sKKyAqCisgKgorICogU3lzdGVtIFVuaWZpZWQgQWRkcmVzcyAtIFNV QQorICoKKyAqIFRoZSBzdGFuZGFyZCB1c2FnZSBmb3IgR1BVIHZpcnR1YWwgYWRkcmVzc2VzIGFy ZSB0aGF0IHRoZXkgYXJlIG1hcHBlZCBieQorICogYSBzZXQgb2YgcGFnZSB0YWJsZXMgd2UgY2Fs bCBHUFVWTSBhbmQgdGhlc2UgcGFnZSB0YWJsZXMgYXJlIG1hbmFnZWQgYnkKKyAqIGEgY29tYmlu YXRpb24gb2YgdmlkTU0vZHJpdmVyIHNvZnR3YXJlIGNvbXBvbmVudHMuICBUaGUgY3VycmVudCB2 aXJ0dWFsCisgKiBhZGRyZXNzIChWQSkgcmFuZ2UgZm9yIEdQVVZNIGlzIDQwYi4KKyAqCisgKiBB cyBvZiBnZnhpcDcuMSBhbmQgYmV5b25kIHdl4oCZcmUgYWRkaW5nIHRoZSBhYmlsaXR5IGZvciBj b21wdXRlIG1lbW9yeQorICogY2xpZW50cyAoQ1AvUkxDLCBETUEsIFNIQURFUihpZmV0Y2gsIHNj YWxhciwgYW5kIHZlY3RvciBvcHMpKSB0byBhY2Nlc3MKKyAqIHRoZSBzYW1lIHBhZ2UgdGFibGVz IHVzZWQgYnkgaG9zdCB4ODYgcHJvY2Vzc29ycyBhbmQgdGhhdCBhcmUgbWFuYWdlZCBieQorICog dGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgaXMgdmlhIGEgdGVjaG5pcXVlIGFuZCBoYXJkd2Fy ZSBjYWxsZWQgQVRDL0lPTU1VLgorICogVGhlIEdQVSBoYXMgdGhlIGNhcGFiaWxpdHkgb2YgYWNj ZXNzaW5nIGJvdGggdGhlIEdQVVZNIGFuZCBBVEMgYWRkcmVzcworICogc3BhY2VzIGZvciBhIGdp dmVuIFZNSUQgKHByb2Nlc3MpIHNpbXVsdGFuZW91c2x5IGFuZCB3ZSBjYWxsIHRoaXMgZmVhdHVy ZQorICogc3lzdGVtIHVuaWZpZWQgYWRkcmVzcyAoU1VBKS4KKyAqCisgKiBUaGVyZSBhcmUgdGhy ZWUgZnVuZGFtZW50YWwgYWRkcmVzcyBtb2RlcyBvZiBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gVk1J RAorICogKHByb2Nlc3MpIG9uIHRoZSBHUFU6CisgKgorICoJSFNBNjQg4oCTIDY0YiBwb2ludGVy cyBhbmQgdGhlIGRlZmF1bHQgYWRkcmVzcyBzcGFjZSBpcyBBVEMKKyAqCUhTQTMyIOKAkyAzMmIg cG9pbnRlcnMgYW5kIHRoZSBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgaXMgQVRDCisgKglHUFVWTSDi gJMgNjRiIHBvaW50ZXJzIGFuZCB0aGUgZGVmYXVsdCBhZGRyZXNzIHNwYWNlIGlzIEdQVVZNIChk cml2ZXIKKyAqCQltb2RlbCBtb2RlKQorICoKKyAqCisgKiBIU0E2NCAtIEFUQy9JT01NVSA2NGIK KyAqCisgKiBBIDY0YiBwb2ludGVyIGluIHRoZSBBTUQ2NC9JQTY0IENQVSBhcmNoaXRlY3R1cmUg aXMgbm90IGZ1bGx5IHV0aWxpemVkCisgKiBieSB0aGUgQ1BVIHNvIGFuIEFNRCBDUFUgY2FuIG9u bHkgYWNjZXNzIHRoZSBoaWdoIGFyZWEKKyAqIChWQVs2Mzo0N10gPT0gMHgxRkZGRikgYW5kIGxv dyBhcmVhIChWQVs2Mzo0NyA9PSAwKSBvZiB0aGUgYWRkcmVzcyBzcGFjZQorICogc28gdGhlIGFj dHVhbCBWQSBjYXJyaWVkIHRvIHRyYW5zbGF0aW9uIGlzIDQ4Yi4gIFRoZXJlIGlzIGEg4oCcaG9s ZeKAnSBpbgorICogdGhlIG1pZGRsZSBvZiB0aGUgNjRiIFZBIHNwYWNlLgorICoKKyAqIFRoZSBH UFUgbm90IG9ubHkgaGFzIGFjY2VzcyB0byBhbGwgb2YgdGhlIENQVSBhY2Nlc3NpYmxlIGFkZHJl c3Mgc3BhY2UgdmlhCisgKiBBVEMvSU9NTVUsIGJ1dCBpdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhl IEdQVVZNIGFkZHJlc3Mgc3BhY2UuICBUaGUg4oCcc3lzdGVtCisgKiB1bmlmaWVkIGFkZHJlc3Pi gJ0gZmVhdHVyZSAoU1VBKSBpcyB0aGUgbWFwcGluZyBvZiBHUFVWTSBhbmQgQVRDIGFkZHJlc3Mg c3BhY2VzCisgKiBpbnRvIGEgdW5pZmllZCBwb2ludGVyIHNwYWNlLiAgVGhlIG1ldGhvZCB3ZSB0 YWtlIGZvciA2NGIgbW9kZSBpcyB0byBtYXAgdGhlCisgKiBmdWxsIDQwYiBHUFVWTSBhZGRyZXNz IHNwYWNlIGludG8gdGhlIGhvbGUgb2YgdGhlIDY0YiBhZGRyZXNzIHNwYWNlLgorCisgKiBUaGUg R1BVVk1fQmFzZS9HUFVWTV9MaW1pdCBkZWZpbmVzIHRoZSBhcGVydHVyZSBpbiB0aGUgNjRiIHNw YWNlIHdoZXJlIHdlCisgKiBkaXJlY3QgcmVxdWVzdHMgdG8gYmUgdHJhbnNsYXRlZCB2aWEgR1BV Vk0gcGFnZSB0YWJsZXMgaW5zdGVhZCBvZiB0aGUKKyAqIElPTU1VIHBhdGguCisgKgorICoKKyAq IDY0YiB0byA0OWIgQWRkcmVzcyBjb252ZXJzaW9uCisgKgorICogTm90ZSB0aGF0IHRoZXJlIGFy ZSBzdGlsbCBzaWduaWZpY2FudCBwb3J0aW9ucyBvZiB1bnVzZWQgcmVnaW9ucyAoaG9sZXMpCisg KiBpbiB0aGUgNjRiIGFkZHJlc3Mgc3BhY2UgZXZlbiBmb3IgdGhlIEdQVS4gIFRoZXJlIGFyZSBz ZXZlcmFsIHBsYWNlcyBpbgorICogdGhlIHBpcGVsaW5lIChzdyBhbmQgaHcpLCB3ZSB3aXNoIHRv IGNvbXByZXNzIHRoZSA2NGIgdmlydHVhbCBhZGRyZXNzCisgKiB0byBhIDQ5YiBhZGRyZXNzLiAg VGhpcyA0OWIgYWRkcmVzcyBpcyBjb25zdGl0dXRlZCBvZiBhbiDigJxBVEPigJ0gYml0CisgKiBw bHVzIGEgNDhiIHZpcnR1YWwgYWRkcmVzcy4gIFRoaXMgNDliIGFkZHJlc3MgaXMgd2hhdCBpcyBw YXNzZWQgdG8gdGhlCisgKiB0cmFuc2xhdGlvbiBoYXJkd2FyZS4gIEFUQz09MCBtZWFucyB0aGUg NDhiIGFkZHJlc3MgaXMgYSBHUFVWTSBhZGRyZXNzCisgKiAobWF4IG9mIDJeNDAg4oCTIDEpIGlu dGVuZGVkIHRvIGJlIHRyYW5zbGF0ZWQgdmlhIEdQVVZNIHBhZ2UgdGFibGVzLgorICogQVRDPT0x IG1lYW5zIHRoZSA0OGIgYWRkcmVzcyBpcyBpbnRlbmRlZCB0byBiZSB0cmFuc2xhdGVkIHZpYSBJ T01NVQorICogcGFnZSB0YWJsZXMuCisgKgorICogQSA2NGIgcG9pbnRlciBpcyBjb21wYXJlZCB0 byB0aGUgYXBlcnR1cmVzIHRoYXQgYXJlIGRlZmluZWQgKEJhc2UvTGltaXQpLCBpbgorICogdGhp cyBjYXNlIHRoZSBHUFVWTSBhcGVydHVyZSAocmVkKSBpcyBkZWZpbmVkIGFuZCBpZiBhIHBvaW50 ZXIgZmFsbHMgaW4gdGhpcworICogYXBlcnR1cmUsIHdlIHN1YnRyYWN0IHRoZSBHUFVWTV9CYXNl IGFkZHJlc3MgYW5kIHNldCB0aGUgQVRDIGJpdCB0byB6ZXJvCisgKiBhcyBwYXJ0IG9mIHRoZSA2 NGIgdG8gNDliIGNvbnZlcnNpb24uCisgKgorICogV2hlcmUgdGhpcyA2NGIgdG8gNDliIGNvbnZl cnNpb24gaXMgZG9uZSBpcyBhIGZ1bmN0aW9uIG9mIHRoZSB1c2FnZS4KKyAqIE1vc3QgR1BVIG1l bW9yeSBhY2Nlc3MgaXMgdmlhIG1lbW9yeSBvYmplY3RzIHdoZXJlIHRoZSBkcml2ZXIgYnVpbGRz CisgKiBhIGRlc2NyaXB0b3Igd2hpY2ggY29uc2lzdHMgb2YgYSBiYXNlIGFkZHJlc3MgYW5kIGEg bWVtb3J5IGFjY2VzcyBieQorICogdGhlIEdQVSB1c3VhbGx5IGNvbnNpc3RzIG9mIHNvbWUga2lu ZCBvZiBhbiBvZmZzZXQgb3IgQ2FydGVzaWFuIGNvb3JkaW5hdGUKKyAqIHRoYXQgcmVmZXJlbmNl cyB0aGlzIG1lbW9yeSBkZXNjcmlwdG9yLiAgVGhpcyBpcyB0aGUgY2FzZSBmb3Igc2hhZGVyCisg KiBpbnN0cnVjdGlvbnMgdGhhdCByZWZlcmVuY2UgdGhlIFQjIG9yIFYjIGNvbnN0YW50cywgb3Ig Zm9yIHNwZWNpZmllZAorICogbG9jYXRpb25zIG9mIGFzc2V0cyAoZXguIHRoZSBzaGFkZXIgcHJv Z3JhbSBsb2NhdGlvbikuICBJbiB0aGVzZSBjYXNlcworICogdGhlIGRyaXZlciBpcyB3aGF0IGhh bmRsZXMgdGhlIDY0YiB0byA0OWIgY29udmVyc2lvbiBhbmQgdGhlIGJhc2UKKyAqIGFkZHJlc3Mg aW4gdGhlIGRlc2NyaXB0b3IgKGV4LiBWIyBvciBUIyBvciBzaGFkZXIgcHJvZ3JhbSBsb2NhdGlv bikKKyAqIGlzIGRlZmluZWQgYXMgYSA0OGIgYWRkcmVzcyB3LyBhbiBBVEMgYml0LiAgRm9yIHRo aXMgdXNhZ2UgYSBnaXZlbgorICogbWVtb3J5IG9iamVjdCBjYW5ub3Qgc3RyYWRkbGUgbXVsdGlw bGUgYXBlcnR1cmVzIGluIHRoZSA2NGIgYWRkcmVzcworICogc3BhY2UuIEZvciBleGFtcGxlIGEg c2hhZGVyIHByb2dyYW0gY2Fubm90IGp1bXAgaW4vb3V0IGJldHdlZW4gQVRDCisgKiBhbmQgR1BV Vk0gc3BhY2UuCisgKgorICogSW4gc29tZSBjYXNlcyB3ZSB3aXNoIHRvIHBhc3MgYSA2NGIgcG9p bnRlciB0byB0aGUgR1BVIGhhcmR3YXJlIGFuZAorICogdGhlIEdQVSBodyBkb2VzIHRoZSA2NGIg dG8gNDliIGNvbnZlcnNpb24gYmVmb3JlIHBhc3NpbmcgbWVtb3J5CisgKiByZXF1ZXN0cyB0byB0 aGUgY2FjaGUvbWVtb3J5IHN5c3RlbS4gIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHRoZQorICogU19M T0FEIGFuZCBGTEFUXyogc2hhZGVyIG1lbW9yeSBpbnN0cnVjdGlvbnMgd2hlcmUgd2UgaGF2ZSA2 NGIgcG9pbnRlcnMKKyAqIGluIHNjYWxhciBhbmQgdmVjdG9yIEdQUnMgcmVzcGVjdGl2ZWx5Lgor ICoKKyAqIEluIGFsbCBjYXNlcyAobm8gbWF0dGVyIHdoZXJlIHRoZSA2NGIgLT4gNDliIGNvbnZl cnNpb24gaXMgZG9uZSksIHRoZSBnZnhpcAorICogaGFyZHdhcmUgc2VuZHMgYSA0OGIgYWRkcmVz cyBhbG9uZyB3LyBhbiBBVEMgYml0LCB0byB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKKyAqIG9uIHRo ZSBtZW1vcnkgcmVxdWVzdCBpbnRlcmZhY2VzLgorICoKKyAqCTxjbGllbnQ+X01DX3JkcmVxX2F0 YyAgIC8vIHJlYWQgcmVxdWVzdCBBVEMgYml0CisgKgorICoJCTAgOiA8Y2xpZW50Pl9NQ19yZHJl cV9hZGRyIGlzIGEgR1BVVk0gVkEKKyAqCisgKgkJMSA6IDxjbGllbnQ+X01DX3JkcmVxX2FkZHIg aXMgYSBBVEMgVkEKKyAqCisgKgorICog4oCcU3BhcmXigJ0gYXBlcnR1cmUgKEFQRTEpCisgKgor ICogV2UgdXNlIHRoZSBHUFVWTSBhcGVydHVyZSB0byBkaWZmZXJlbnRpYXRlIEFUQyB2cy4gR1BV Vk0sIGJ1dCB3ZSBhbHNvIHVzZQorICogYXBlcnR1cmVzIHRvIHNldCB0aGUgTXR5cGUgZmllbGQg Zm9yIFNfTE9BRC9GTEFUXyogb3BzIHdoaWNoIGlzIGlucHV0IHRvIHRoZQorICogY29uZmlnIHRh YmxlcyBmb3Igc2V0dGluZyBjYWNoZSBwb2xpY2llcy4gVGhlIOKAnHNwYXJl4oCdIChBUEUxKSBh cGVydHVyZSBpcworICogbW90aXZhdGVkIGJ5IGdldHRpbmcgYSBkaWZmZXJlbnQgTXR5cGUgZnJv bSB0aGUgZGVmYXVsdC4KKyAqIFRoZSBkZWZhdWx0IGFwZXJ0dXJlIGlzbuKAmXQgYW4gYWN0dWFs IGJhc2UvbGltaXQgYXBlcnR1cmU7IGl0IGlzIGp1c3QgdGhlCisgKiBhZGRyZXNzIHNwYWNlIHRo YXQgZG9lc27igJl0IGhpdCBhbnkgZGVmaW5lZCBiYXNlL2xpbWl0IGFwZXJ0dXJlcy4KKyAqIFRo ZSBmb2xsb3dpbmcgZGlhZ3JhbSBpcyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGdmeGlwNy54 IFNVQSBhcGVydHVyZXMuCisgKiBUaGUgQVBFMSBjYW4gYmUgcGxhY2VkIGVpdGhlciBiZWxvdyBv ciBhYm92ZQorICogdGhlIGhvbGUgKGNhbm5vdCBiZSBpbiB0aGUgaG9sZSkuCisgKgorICoKKyAq IEdlbmVyYWwgQXBlcnR1cmUgZGVmaW5pdGlvbnMgYW5kIHJ1bGVzCisgKgorICogQW4gYXBlcnR1 cmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiBjb25zaXN0cyBvZiBhIEJhc2UsIExpbWl0LCBNdHlwZSwg YW5kCisgKiB1c3VhbGx5IGFuIEFUQyBiaXQgaW5kaWNhdGluZyB3aGljaCB0cmFuc2xhdGlvbiB0 YWJsZXMgdGhhdCBhcGVydHVyZSB1c2VzLgorICogSW4gYWxsIGNhc2VzIChmb3IgU1VBIGFuZCBE VUEgYXBlcnR1cmVzIGRpc2N1c3NlZCBsYXRlciksIGFwZXJ0dXJlIGJhc2UKKyAqIGFuZCBsaW1p dCBkZWZpbml0aW9ucyBhcmUgNjRLQiBhbGlnbmVkLgorICoKKyAqCTxhcGU+X0Jhc2VbNjM6MF0g PSB7IDxhcGU+X0Jhc2VfcmVnaXN0ZXJbNjM6MTZdLCAweDAwMDAgfQorICoKKyAqCTxhcGU+X0xp bWl0WzYzOjBdID0geyA8YXBlPl9MaW1pdF9yZWdpc3Rlcls2MzoxNl0sIDB4RkZGRiB9CisgKgor ICogVGhlIGJhc2UgYW5kIGxpbWl0IGFyZSBjb25zaWRlcmVkIGluY2x1c2l2ZSB0byBhbiBhcGVy dHVyZSBzbyBiZWluZyBpbnNpZGUgYW4KKyAqIGFwZXJ0dXJlIG1lYW5zIChhZGRyZXNzID49IEJh c2UpIEFORCAoYWRkcmVzcyA8PSBMaW1pdCkuCisgKgorICogSW4gbm8gY2FzZSBpcyBhIHBheWxv YWQgdGhhdCBzdHJhZGRsZXMgbXVsdGlwbGUgYXBlcnR1cmVzIGV4cGVjdGVkIHRvIHdvcmsuCisg KiBGb3IgZXhhbXBsZSBhIGxvYWRfZHdvcmRfeDQgdGhhdCBzdGFydHMgaW4gb25lIGFwZXJ0dXJl IGFuZCBlbmRzIGluIGFub3RoZXIsCisgKiBkb2VzIG5vdCB3b3JrLiAgRm9yIHRoZSB2ZWN0b3Ig RkxBVF8qIG9wcyB3ZSBoYXZlIGRldGVjdGlvbiBjYXBhYmlsaXR5IGluCisgKiB0aGUgc2hhZGVy IGZvciByZXBvcnRpbmcgYSDigJxtZW1vcnkgdmlvbGF0aW9u4oCdIGJhY2sgdG8gdGhlIFNRIGJs b2NrIGZvciB1c2UKKyAqIGluIHRyYXBzLiBBIG1lbW9yeSB2aW9sYXRpb24gcmVzdWx0cyB3aGVu IGFuIG9wIGZhbGxzIGludG8gdGhlIGhvbGUsCisgKiBvciBhIHBheWxvYWQgc3RyYWRkbGVzIG11 bHRpcGxlIGFwZXJ0dXJlcy4gIFRoZSBTX0xPQUQgaW5zdHJ1Y3Rpb24KKyAqIGRvZXMgbm90IGhh dmUgdGhpcyBkZXRlY3Rpb24uCisgKgorICogQXBlcnR1cmVzIGNhbm5vdCBvdmVybGFwLgorICoK KyAqCisgKgorICogSFNBMzIgLSBBVEMvSU9NTVUgMzJiCisgKgorICogRm9yIEhTQTMyIG1vZGUs IHRoZSBwb2ludGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgMzIgYml0cyBhbmQgdXNlIGEgc2luZ2xl IEdQUgorICogaW5zdGVhZCBvZiB0d28gZm9yIHRoZSBTX0xPQUQgYW5kIEZMQVRfKiBvcHMuIFRo ZSBlbnRpcmUgR1BVVk0gc3BhY2Ugb2YgNDBiCisgKiB3aWxsIG5vdCBmaXQgc28gdGhlcmUgaXMg b25seSBwYXJ0aWFsIHZpc2liaWxpdHkgdG8gdGhlIEdQVVZNCisgKiBzcGFjZSAoZGVmaW5lZCBi eSB0aGUgYXBlcnR1cmUpIGZvciBTX0xPQUQgYW5kIEZMQVRfKiBvcHMuCisgKiBUaGVyZSBpcyBu byBzcGFyZSAoQVBFMSkgYXBlcnR1cmUgZm9yIEhTQTMyIG1vZGUuCisgKgorICoKKyAqIEdQVVZN IDY0YiBtb2RlIChkcml2ZXIgbW9kZWwpCisgKgorICogVGhpcyBtb2RlIGlzIHJlbGF0ZWQgdG8g SFNBNjQgaW4gdGhhdCB0aGUgZGlmZmVyZW5jZSByZWFsbHkgaXMgdGhhdAorICogdGhlIGRlZmF1 bHQgYXBlcnR1cmUgaXMgR1BVVk0gKEFUQz09MCkgYW5kIG5vdCBBVEMgc3BhY2UuCisgKiBXZSBo YXZlIGdmeGlwNy54IGhhcmR3YXJlIHRoYXQgaGFzIEZMQVRfKiBhbmQgU19MT0FEIHN1cHBvcnQg Zm9yCisgKiBTVUEgR1BVVk0gbW9kZSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgSFNBMzIvSFNBNjQu CisgKgorICoKKyAqIERldmljZSBVbmlmaWVkIEFkZHJlc3MgLSBEVUEKKyAqCisgKiBEZXZpY2Ug dW5pZmllZCBhZGRyZXNzIChEVUEpIGlzIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRoYXQgbWFw cyB0aGUKKyAqIFNoYXJlZChMRFMpIG1lbW9yeSBhbmQgUHJpdmF0ZShTY3JhdGNoKSBtZW1vcnkg aW50byB0aGUgb3ZlcmFsbCBhZGRyZXNzCisgKiBzcGFjZSBmb3IgdXNlIGJ5IHRoZSBuZXcgRkxB VF8qIHZlY3RvciBtZW1vcnkgb3BzLiAgVGhlIFNoYXJlZCBhbmQKKyAqIFByaXZhdGUgbWVtb3Jp ZXMgYXJlIG1hcHBlZCBhcyBhcGVydHVyZXMgaW50byB0aGUgYWRkcmVzcyBzcGFjZSwKKyAqIGFu ZCB0aGUgaGFyZHdhcmUgZGV0ZWN0cyB3aGVuIGEgRkxBVF8qIG1lbW9yeSByZXF1ZXN0IGlzIHRv IGJlIHJlZGlyZWN0ZWQKKyAqIHRvIHRoZSBMRFMgb3IgU2NyYXRjaCBtZW1vcnkgd2hlbiBpdCBm YWxscyBpbnRvIG9uZSBvZiB0aGVzZSBhcGVydHVyZXMuCisgKiBMaWtlIHRoZSBTVUEgYXBlcnR1 cmVzLCB0aGUgU2hhcmVkL1ByaXZhdGUgYXBlcnR1cmVzIGFyZSA2NEtCIGFsaWduZWQgYW5kCisg KiB0aGUgYmFzZS9saW1pdCBpcyDigJxpbuKAnSB0aGUgYXBlcnR1cmUuIEZvciBib3RoIEhTQTY0 IGFuZCBHUFVWTSBTVUEgbW9kZXMsCisgKiB0aGUgU2hhcmVkL1ByaXZhdGUgYXBlcnR1cmVzIGFy ZSBhbHdheXMgcGxhY2VkIGluIGEgbGltaXRlZCBzZWxlY3Rpb24gb2YKKyAqIG9wdGlvbnMgaW4g dGhlIGhvbGUgb2YgdGhlIDY0YiBhZGRyZXNzIHNwYWNlLiBGb3IgSFNBMzIgbW9kZSwgdGhlCisg KiBTaGFyZWQvUHJpdmF0ZSBhcGVydHVyZXMgY2FuIGJlIHBsYWNlZCBhbnl3aGVyZSBpbiB0aGUg MzJiIHNwYWNlIGV4Y2VwdCBhdCAwLgorICoKKyAqCisgKiBIU0E2NCBBcGVydHVyZXMgZm9yIEZM QVRfKiB2ZWN0b3Igb3BzCisgKgorICogRm9yIEhTQTY0IFNVQSBtb2RlLCB0aGUgU2hhcmVkIGFu ZCBQcml2YXRlIGFwZXJ0dXJlcyBhcmUgYWx3YXlzIHBsYWNlZAorICogaW4gdGhlIGhvbGUgdy8g YSBsaW1pdGVkIHNlbGVjdGlvbiBvZiBwb3NzaWJsZSBsb2NhdGlvbnMuIFRoZSByZXF1ZXN0cwor ICogdGhhdCBmYWxsIGluIHRoZSBwcml2YXRlIGFwZXJ0dXJlIGFyZSBleHBhbmRlZCBhcyBhIGZ1 bmN0aW9uIG9mIHRoZQorICogd29yay1pdGVtIGlkICh0aWQpIGFuZCByZWRpcmVjdGVkIHRvIHRo ZSBsb2NhdGlvbiBvZiB0aGUKKyAqIOKAnGhpZGRlbiBwcml2YXRlIG1lbW9yeeKAnS4gVGhlIGhp ZGRlbiBwcml2YXRlIGNhbiBiZSBwbGFjZWQgaW4gZWl0aGVyIEdQVVZNCisgKiBvciBBVEMgc3Bh Y2UuIFRoZSBhZGRyZXNzZXMgdGhhdCBmYWxsIGluIHRoZSBzaGFyZWQgYXBlcnR1cmUgYXJlCisg KiByZS1kaXJlY3RlZCB0byB0aGUgb24tY2hpcCBMRFMgbWVtb3J5IGhhcmR3YXJlLgorICoKKyAq CisgKiBIU0EzMiBBcGVydHVyZXMgZm9yIEZMQVRfKiB2ZWN0b3Igb3BzCisgKgorICogSW4gSFNB MzIgbW9kZSwgdGhlIFByaXZhdGUgYW5kIFNoYXJlZCBhcGVydHVyZXMgY2FuIGJlIHBsYWNlZCBh bnl3aGVyZQorICogaW4gdGhlIDMyYiBzcGFjZSBleGNlcHQgYXQgMCAoUHJpdmF0ZSBvciBTaGFy ZWQgQmFzZSBhdCB6ZXJvIGRpc2FibGVzCisgKiB0aGUgYXBlcnR1cmVzKS4gSWYgdGhlIGJhc2Ug YWRkcmVzcyBvZiB0aGUgYXBlcnR1cmVzIGFyZSBub24temVybworICogKGllIGFwZXJ0dXJlcyBl eGlzdHMpLCB0aGUgc2l6ZSBpcyBhbHdheXMgNjRLQi4KKyAqCisgKgorICogR1BVVk0gQXBlcnR1 cmVzIGZvciBGTEFUXyogdmVjdG9yIG9wcworICoKKyAqIEluIEdQVVZNIG1vZGUsIHRoZSBTaGFy ZWQvUHJpdmF0ZSBhcGVydHVyZXMgYXJlIHNwZWNpZmllZCBpZGVudGljYWxseQorICogdG8gSFNB NjQgbW9kZSB3aGVyZSB0aGV5IGFyZSBhbHdheXMgaW4gdGhlIGhvbGUgYXQgYSBsaW1pdGVkIHNl bGVjdGlvbgorICogb2YgbG9jYXRpb25zLgorICoKKyAqCisgKiBBcGVydHVyZSBEZWZpbml0aW9u cyBmb3IgU1VBIGFuZCBEVUEKKyAqCisgKiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGFwZXJ0 dXJlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBhIGdpdmVuCisgKiBWTUlEIGlzIGEgZnVuY3Rp b24gb2YgdGhlIOKAnFNVQSBNb2Rl4oCdIHdoaWNoIGlzIG9uZSBvZiBIU0E2NCwgSFNBMzIsIG9y CisgKiBHUFVWTTY0IGRpc2N1c3NlZCBpbiBwcmV2aW91cyBzZWN0aW9ucy4gVGhlIG1vZGUgaXMg Zmlyc3QgZGVjb2RlZCwgYW5kCisgKiB0aGVuIHRoZSByZW1haW5pbmcgcmVnaXN0ZXIgZGVjb2Rl IGlzIGEgZnVuY3Rpb24gb2YgdGhlIG1vZGUuCisgKgorICoKKyAqIFNVQSBNb2RlIERlY29kZQor ICoKKyAqIEZvciB0aGUgU19MT0FEIGFuZCBGTEFUXyogc2hhZGVyIG9wZXJhdGlvbnMsIHRoZSBT VUEgbW9kZSBpcyBkZWNvZGVkIGZyb20KKyAqIHRoZSBDT01QVVRFX0RJU1BBVENIX0lOSVRJQVRP UjpEQVRBX0FUQyBiaXQgYW5kCisgKiB0aGUgU0hfTUVNX0NPTkZJRzpQVFIzMiBiaXRzLgorICoK KyAqIENPTVBVVEVfRElTUEFUQ0hfSU5JVElBVE9SOkRBVEFfQVRDICAgIFNIX01FTV9DT05GSUc6 UFRSMzIgICAgICAgIE1vZGUKKyAqCisgKiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICBIU0E2NAorICoKKyAqIDEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAg IEhTQTMyCisgKgorICogMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYICAgICAgICAgICAgICAgICBHUFVWTTY0CisgKgorICogSW4gZ2VuZXJhbCB0aGUgaGFy ZHdhcmUgd2lsbCBpZ25vcmUgdGhlIFBUUjMyIGJpdCBhbmQgdHJlYXQgYXMg4oCcMOKAnSB3aGVu ZXZlcgorICogREFUQV9BVEMgPSDigJww4oCdLCBidXQgc3cgc2hvdWxkIHNldCBQVFIzMj0wIHdo ZW4gREFUQV9BVEM9MC4KKyAqCisgKiBUaGUgREFUQV9BVEMgYml0IGlzIG9ubHkgc2V0IGZvciBj b21wdXRlIGRpc3BhdGNoZXMuCisgKiBBbGwg4oCcRHJhd+KAnSBkaXNwYXRjaGVzIGFyZSBoYXJk Y29kZWQgdG8gR1BVVk02NCBtb2RlCisgKiBmb3IgRkxBVF8qIC8gU19MT0FEIG9wZXJhdGlvbnMu CisgKi8KKworI2RlZmluZSBNQUtFX0dQVVZNX0FQUF9CQVNFKGdwdV9udW0pIFwKKwkoKCh1aW50 NjRfdCkoZ3B1X251bSkgPDwgNjEpICsgMHgxMDAwMDAwMDAwMDAwKQorCisjZGVmaW5lIE1BS0Vf R1BVVk1fQVBQX0xJTUlUKGJhc2UpIFwKKwkoKCh1aW50NjRfdCkoYmFzZSkgJiAweEZGRkZGRjAw MDAwMDAwMDApIHwgMHhGRkZGRkZGRkZGKQorCisjZGVmaW5lIE1BS0VfU0NSQVRDSF9BUFBfQkFT RShncHVfbnVtKSBcCisJKCgodWludDY0X3QpKGdwdV9udW0pIDw8IDYxKSArIDB4MTAwMDAwMDAw KQorCisjZGVmaW5lIE1BS0VfU0NSQVRDSF9BUFBfTElNSVQoYmFzZSkgXAorCSgoKHVpbnQ2NF90 KWJhc2UgJiAweEZGRkZGRkZGMDAwMDAwMDApIHwgMHhGRkZGRkZGRikKKworI2RlZmluZSBNQUtF X0xEU19BUFBfQkFTRShncHVfbnVtKSBcCisJKCgodWludDY0X3QpKGdwdV9udW0pIDw8IDYxKSAr IDB4MCkKKyNkZWZpbmUgTUFLRV9MRFNfQVBQX0xJTUlUKGJhc2UpIFwKKwkoKCh1aW50NjRfdCko YmFzZSkgJiAweEZGRkZGRkZGMDAwMDAwMDApIHwgMHhGRkZGRkZGRikKKworaW50IGtmZF9pbml0 X2FwZXJ0dXJlcyhzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3MpCit7CisJdWludDhfdCBpZCAg PSAwOworCXN0cnVjdCBrZmRfZGV2ICpkZXY7CisJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAq cGRkOworCisJbXV0ZXhfbG9jaygmcHJvY2Vzcy0+bXV0ZXgpOworCisJLypJdGVyYXRpbmcgb3Zl ciBhbGwgZGV2aWNlcyovCisJd2hpbGUgKChkZXYgPSBrZmRfdG9wb2xvZ3lfZW51bV9rZmRfZGV2 aWNlcyhpZCkpICE9IE5VTEwgJiYKKwkJaWQgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpIHsKKwor CQlwZGQgPSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoZGV2LCBwcm9jZXNzLCAxKTsKKwor CQkvKgorCQkgKiBGb3IgNjQgYml0IHByb2Nlc3MgYXBlcnR1cmUgd2lsbCBiZSBzdGF0aWNhbGx5 IHJlc2VydmVkIGluCisJCSAqIHRoZSB4ODZfNjQgbm9uIGNhbm9uaWNhbCBwcm9jZXNzIGFkZHJl c3Mgc3BhY2UKKwkJICogYW1ka2ZkIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgYXBlcnR1cmVz IGZvciAzMiBiaXQgcHJvY2VzcworCQkgKi8KKwkJaWYgKHByb2Nlc3MtPmlzXzMyYml0X3VzZXJf bW9kZSkgeworCQkJcGRkLT5sZHNfYmFzZSA9IHBkZC0+bGRzX2xpbWl0ID0gMDsKKwkJCXBkZC0+ Z3B1dm1fYmFzZSA9IHBkZC0+Z3B1dm1fbGltaXQgPSAwOworCQkJcGRkLT5zY3JhdGNoX2Jhc2Ug PSBwZGQtPnNjcmF0Y2hfbGltaXQgPSAwOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIG5vZGUg aWQgY291bGRuJ3QgYmUgMCAtIHRoZSB0aHJlZSBNU0IgYml0cyBvZgorCQkJICogYXBlcnR1cmUg c2hvdWRuJ3QgYmUgMAorCQkJICovCisJCQlwZGQtPmxkc19iYXNlID0gTUFLRV9MRFNfQVBQX0JB U0UoaWQgKyAxKTsKKworCQkJcGRkLT5sZHNfbGltaXQgPSBNQUtFX0xEU19BUFBfTElNSVQocGRk LT5sZHNfYmFzZSk7CisKKwkJCXBkZC0+Z3B1dm1fYmFzZSA9IE1BS0VfR1BVVk1fQVBQX0JBU0Uo aWQgKyAxKTsKKworCQkJcGRkLT5ncHV2bV9saW1pdCA9CisJCQkJCU1BS0VfR1BVVk1fQVBQX0xJ TUlUKHBkZC0+Z3B1dm1fYmFzZSk7CisKKwkJCXBkZC0+c2NyYXRjaF9iYXNlID0gTUFLRV9TQ1JB VENIX0FQUF9CQVNFKGlkICsgMSk7CisKKwkJCXBkZC0+c2NyYXRjaF9saW1pdCA9CisJCQkJTUFL RV9TQ1JBVENIX0FQUF9MSU1JVChwZGQtPnNjcmF0Y2hfYmFzZSk7CisJCX0KKworCQlkZXZfZGJn KGtmZF9kZXZpY2UsICJub2RlIGlkICV1XG4iLCBpZCk7CisJCWRldl9kYmcoa2ZkX2RldmljZSwg ImdwdSBpZCAldVxuIiwgcGRkLT5kZXYtPmlkKTsKKwkJZGV2X2RiZyhrZmRfZGV2aWNlLCAibGRz X2Jhc2UgJWxsWFxuIiwgcGRkLT5sZHNfYmFzZSk7CisJCWRldl9kYmcoa2ZkX2RldmljZSwgImxk c19saW1pdCAlbGxYXG4iLCBwZGQtPmxkc19saW1pdCk7CisJCWRldl9kYmcoa2ZkX2RldmljZSwg ImdwdXZtX2Jhc2UgJWxsWFxuIiwgcGRkLT5ncHV2bV9iYXNlKTsKKwkJZGV2X2RiZyhrZmRfZGV2 aWNlLCAiZ3B1dm1fbGltaXQgJWxsWFxuIiwgcGRkLT5ncHV2bV9saW1pdCk7CisJCWRldl9kYmco a2ZkX2RldmljZSwgInNjcmF0Y2hfYmFzZSAlbGxYXG4iLCBwZGQtPnNjcmF0Y2hfYmFzZSk7CisJ CWRldl9kYmcoa2ZkX2RldmljZSwgInNjcmF0Y2hfbGltaXQgJWxsWFxuIiwgcGRkLT5zY3JhdGNo X2xpbWl0KTsKKworCQlpZCsrOworCX0KKworCW11dGV4X3VubG9jaygmcHJvY2Vzcy0+bXV0ZXgp OworCisJcmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9hbWRrZmQva2ZkX2NoYXJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tm ZF9jaGFyZGV2LmMKaW5kZXggZjE5OGU1YS4uYzQyZjUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2NoYXJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL2FtZGtmZC9rZmRfY2hhcmRldi5jCkBAIC0zOCw2ICszOCw3IEBACiAKIHN0YXRpYyBs b25nIGtmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcp Owogc3RhdGljIGludCBrZmRfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Citz dGF0aWMgaW50IGtmZF9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq KTsKIAogc3RhdGljIGNvbnN0IGNoYXIga2ZkX2Rldl9uYW1lW10gPSAia2ZkIjsKIApAQCAtNDYs NiArNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrZmRfZm9wcyA9 IHsKIAkudW5sb2NrZWRfaW9jdGwgPSBrZmRfaW9jdGwsCiAJLmNvbXBhdF9pb2N0bCA9IGtmZF9p b2N0bCwKIAkub3BlbiA9IGtmZF9vcGVuLAorCS5tbWFwID0ga2ZkX21tYXAsCiB9OwogCiBzdGF0 aWMgaW50IGtmZF9jaGFyX2Rldl9tYWpvciA9IC0xOwpAQCAtOTYsOSArOTgsMjIgQEAgc3RydWN0 IGRldmljZSAqa2ZkX2NoYXJkZXYodm9pZCkKIAogc3RhdGljIGludCBrZmRfb3BlbihzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCiB7CisJc3RydWN0IGtmZF9wcm9jZXNz ICpwcm9jZXNzOworCiAJaWYgKGltaW5vcihpbm9kZSkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7 CiAKKwlwcm9jZXNzID0ga2ZkX2NyZWF0ZV9wcm9jZXNzKGN1cnJlbnQpOworCWlmIChJU19FUlIo cHJvY2VzcykpCisJCXJldHVybiBQVFJfRVJSKHByb2Nlc3MpOworCisJcHJvY2Vzcy0+aXNfMzJi aXRfdXNlcl9tb2RlID0gaXNfY29tcGF0X3Rhc2soKTsKKworCWRldl9kYmcoa2ZkX2RldmljZSwg InByb2Nlc3MgJWQgb3BlbmVkLCBjb21wYXQgbW9kZSAoMzIgYml0KSAtICVkXG4iLAorCQlwcm9j ZXNzLT5wYXNpZCwgcHJvY2Vzcy0+aXNfMzJiaXRfdXNlcl9tb2RlKTsKKworCWtmZF9pbml0X2Fw ZXJ0dXJlcyhwcm9jZXNzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDIsOCArMTU3LDkgQEAg c3RhdGljIGxvbmcga2ZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNt ZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCSJpb2N0bCBjbWQgMHgleCAoIyVkKSwgYXJnIDB4JWx4 XG4iLAogCQljbWQsIF9JT0NfTlIoY21kKSwgYXJnKTsKIAotCS8qIFRPRE86IGFkZCBmdW5jdGlv biB0aGF0IHJldHJpZXZlcyBwcm9jZXNzICovCi0JcHJvY2VzcyA9IE5VTEw7CisJcHJvY2VzcyA9 IGtmZF9nZXRfcHJvY2VzcyhjdXJyZW50KTsKKwlpZiAoSVNfRVJSKHByb2Nlc3MpKQorCQlyZXR1 cm4gUFRSX0VSUihwcm9jZXNzKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBLRkRfSU9DX0NS RUFURV9RVUVVRToKQEAgLTE4NSwzICsyMDEsMTQgQEAgc3RhdGljIGxvbmcga2ZkX2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAK IAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgaW50IGtmZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnBy b2Nlc3M7CisKKwlwcm9jZXNzID0ga2ZkX2dldF9wcm9jZXNzKGN1cnJlbnQpOworCWlmIChJU19F UlIocHJvY2VzcykpCisJCXJldHVybiBQVFJfRVJSKHByb2Nlc3MpOworCisJcmV0dXJuIGtmZF9k b29yYmVsbF9tbWFwKHByb2Nlc3MsIHZtYSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcmFkZW9uL2FtZGtmZC9rZmRfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Ft ZGtmZC9rZmRfZGV2aWNlLmMKaW5kZXggNDEzODY5NC4uOGUyYjA3NSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9kZXZpY2UuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJrZmRfcHJpdi5oIgogCisjZGVmaW5lIE1RRF9T SVpFX0FMSUdORUQgNzY4CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2RldmljZV9pbmZvIGth dmVyaV9kZXZpY2VfaW5mbyA9IHsKIAkubWF4X3Bhc2lkX2JpdHMgPSAxNiwKIH07CkBAIC05MSw2 ICs5Myw3IEBAIHN0cnVjdCBrZmRfZGV2ICprZ2Qya2ZkX3Byb2JlKHN0cnVjdCBrZ2RfZGV2ICpr Z2QsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWtmZC0+a2dkID0ga2dkOwogCWtmZC0+ZGV2aWNl X2luZm8gPSBkZXZpY2VfaW5mbzsKIAlrZmQtPnBkZXYgPSBwZGV2OworCWtmZC0+aW5pdF9jb21w bGV0ZSA9IGZhbHNlOwogCiAJcmV0dXJuIGtmZDsKIH0KQEAgLTk4LDIzICsxMDEsNTMgQEAgc3Ry dWN0IGtmZF9kZXYgKmtnZDJrZmRfcHJvYmUoc3RydWN0IGtnZF9kZXYgKmtnZCwgc3RydWN0IHBj aV9kZXYgKnBkZXYpCiBib29sIGtnZDJrZmRfZGV2aWNlX2luaXQoc3RydWN0IGtmZF9kZXYgKmtm ZCwKIAkJCSBjb25zdCBzdHJ1Y3Qga2dkMmtmZF9zaGFyZWRfcmVzb3VyY2VzICpncHVfcmVzb3Vy Y2VzKQogeworCXVuc2lnbmVkIGludCBzaXplOworCiAJa2ZkLT5zaGFyZWRfcmVzb3VyY2VzID0g KmdwdV9yZXNvdXJjZXM7CiAKLQlpZiAoa2ZkX3RvcG9sb2d5X2FkZF9kZXZpY2Uoa2ZkKSAhPSAw KQotCQlyZXR1cm4gZmFsc2U7CisJLyogY2FsY3VsYXRlIG1heCBzaXplIG9mIG1xZHMgbmVlZGVk IGZvciBxdWV1ZXMgKi8KKwlzaXplID0gbWF4X251bV9vZl9wcm9jZXNzZXMgKgorCQltYXhfbnVt X29mX3F1ZXVlc19wZXJfcHJvY2VzcyAqCisJCU1RRF9TSVpFX0FMSUdORUQ7CisKKwkvKiBhZGQg YW5vdGhlciA1MTJLQiBmb3IgYWxsIG90aGVyIGFsbG9jYXRpb25zIG9uIGdhcnQgKi8KKwlzaXpl ICs9IDUxMiAqIDEwMjQ7CisKKwlpZiAoa2ZkMmtnZC0+aW5pdF9zYV9tYW5hZ2VyKGtmZC0+a2dk LCBzaXplKSkgeworCQlkZXZfZXJyKGtmZF9kZXZpY2UsCisJCQkiRXJyb3IgaW5pdGlhbGl6aW5n IHNhIG1hbmFnZXIgZm9yIGRldmljZSAoJXg6JXgpXG4iLAorCQkJa2ZkLT5wZGV2LT52ZW5kb3Is IGtmZC0+cGRldi0+ZGV2aWNlKTsKKwkJZ290byBvdXQ7CisJfQorCisJa2ZkX2Rvb3JiZWxsX2lu aXQoa2ZkKTsKKworCWlmIChrZmRfdG9wb2xvZ3lfYWRkX2RldmljZShrZmQpICE9IDApIHsKKwkJ ZGV2X2VycihrZmRfZGV2aWNlLAorCQkJIkVycm9yIGFkZGluZyBkZXZpY2UgKCV4OiV4KSB0byB0 b3BvbG9neVxuIiwKKwkJCWtmZC0+cGRldi0+dmVuZG9yLCBrZmQtPnBkZXYtPmRldmljZSk7CisJ CWdvdG8ga2ZkX3RvcG9sb2d5X2FkZF9kZXZpY2VfZXJyb3I7CisJfQorCiAKIAlrZmQtPmluaXRf Y29tcGxldGUgPSB0cnVlOwogCWRldl9pbmZvKGtmZF9kZXZpY2UsICJhZGRlZCBkZXZpY2UgKCV4 OiV4KVxuIiwga2ZkLT5wZGV2LT52ZW5kb3IsCiAJCSBrZmQtPnBkZXYtPmRldmljZSk7CiAKLQly ZXR1cm4gdHJ1ZTsKKwlnb3RvIG91dDsKKwora2ZkX3RvcG9sb2d5X2FkZF9kZXZpY2VfZXJyb3I6 CisJa2ZkMmtnZC0+ZmluaV9zYV9tYW5hZ2VyKGtmZC0+a2dkKTsKKwlkZXZfZXJyKGtmZF9kZXZp Y2UsCisJCSJkZXZpY2UgKCV4OiV4KSBOT1QgYWRkZWQgZHVlIHRvIGVycm9yc1xuIiwKKwkJa2Zk LT5wZGV2LT52ZW5kb3IsIGtmZC0+cGRldi0+ZGV2aWNlKTsKK291dDoKKwlyZXR1cm4ga2ZkLT5p bml0X2NvbXBsZXRlOwogfQogCiB2b2lkIGtnZDJrZmRfZGV2aWNlX2V4aXQoc3RydWN0IGtmZF9k ZXYgKmtmZCkKIHsKLQlpbnQgZXJyID0ga2ZkX3RvcG9sb2d5X3JlbW92ZV9kZXZpY2Uoa2ZkKTsK LQotCUJVR19PTihlcnIgIT0gMCk7CisJa2ZkX3RvcG9sb2d5X3JlbW92ZV9kZXZpY2Uoa2ZkKTsK IAogCWtmcmVlKGtmZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Ft ZGtmZC9rZmRfZG9vcmJlbGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9k b29yYmVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTBmNWMKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfZG9vcmJl bGwuYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1p Y3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImtmZF9wcml2 LmgiCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorCisvKgorICogVGhpcyBleHRlbnNpb24gc3VwcG9ydHMgYSBr ZXJuZWwgbGV2ZWwgZG9vcmJlbGxzIG1hbmFnZW1lbnQgZm9yCisgKiB0aGUga2VybmVsIHF1ZXVl cy4KKyAqIEJhc2ljYWxseSB0aGUgbGFzdCBkb29yYmVsbHMgcGFnZSBpcyBkZXZvdGVkIHRvIGtl cm5lbCBxdWV1ZXMKKyAqIGFuZCB0aGF0J3MgYXNzdXJlcyB0aGF0IGFueSB1c2VyIHByb2Nlc3Mg d29uJ3QgZ2V0IGFjY2VzcyB0byB0aGUKKyAqIGtlcm5lbCBkb29yYmVsbHMgcGFnZQorICovCitz dGF0aWMgREVGSU5FX01VVEVYKGRvb3JiZWxsX211dGV4KTsKK3N0YXRpYyB1bnNpZ25lZCBsb25n IGRvb3JiZWxsX2F2YWlsYWJsZV9pbmRleFtESVZfUk9VTkRfVVAoS0ZEX01BWF9OVU1fT0ZfUVVF VUVTX1BFUl9QUk9DRVNTLCBCSVRTX1BFUl9MT05HKV0gPSB7IDAgfTsKKyNkZWZpbmUgS0VSTkVM X0RPT1JCRUxMX1BBU0lEIDEKKyNkZWZpbmUgS0ZEX1NJWkVfT0ZfRE9PUkJFTExfSU5fQllURVMg NAorCisvKgorICogRWFjaCBkZXZpY2UgZXhwb3NlcyBhIGRvb3JiZWxsIGFwZXJ0dXJlLCBhIFBD SSBNTUlPIGFwZXJ0dXJlIHRoYXQKKyAqIHJlY2VpdmVzIDMyLWJpdCB3cml0ZXMgdGhhdCBhcmUg cGFzc2VkIHRvIHF1ZXVlcyBhcyB3cHRyIHZhbHVlcy4KKyAqIFRoZSBkb29yYmVsbHMgYXJlIGlu dGVuZGVkIHRvIGJlIHdyaXR0ZW4gYnkgYXBwbGljYXRpb25zIGFzIHBhcnQKKyAqIG9mIHF1ZXVl aW5nIHdvcmsgb24gdXNlci1tb2RlIHF1ZXVlcy4KKyAqIFdlIGFzc2lnbiBkb29yYmVsbHMgdG8g YXBwbGljYXRpb25zIGluIFBBR0VfU0laRS1zaXplZCBhbmQgYWxpZ25lZCBjaHVua3MuCisgKiBX ZSBtYXAgdGhlIGRvb3JiZWxsIGFkZHJlc3Mgc3BhY2UgaW50byB1c2VyLW1vZGUgd2hlbiBhIHBy b2Nlc3MgY3JlYXRlcworICogaXRzIGZpcnN0IHF1ZXVlIG9uIGVhY2ggZGV2aWNlLgorICogQWx0 aG91Z2ggdGhlIG1hcHBpbmcgaXMgZG9uZSBieSBLRkQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gYW4g bW1hcCBvZgorICogdGhlIC9kZXYva2ZkIHdpdGggdGhlIHBhcnRpY3VsYXIgZGV2aWNlIGVuY29k ZWQgaW4gdGhlIG1tYXAgb2Zmc2V0LgorICogVGhlcmUgd2lsbCBiZSBvdGhlciB1c2VzIGZvciBt bWFwIG9mIC9kZXYva2ZkLCBzbyBvbmx5IGEgcmFuZ2Ugb2YKKyAqIG9mZnNldHMgKEtGRF9NTUFQ X0RPT1JCRUxMX1NUQVJULUVORCkgaXMgdXNlZCBmb3IgZG9vcmJlbGxzLgorICovCisKKy8qICMg b2YgZG9vcmJlbGwgYnl0ZXMgYWxsb2NhdGVkIGZvciBlYWNoIHByb2Nlc3MuICovCitzdGF0aWMg aW5saW5lIHNpemVfdCBkb29yYmVsbF9wcm9jZXNzX2FsbG9jYXRpb24odm9pZCkKK3sKKwlyZXR1 cm4gcm91bmR1cChLRkRfU0laRV9PRl9ET09SQkVMTF9JTl9CWVRFUyAqCisJCQlLRkRfTUFYX05V TV9PRl9RVUVVRVNfUEVSX1BST0NFU1MsCisJCQlQQUdFX1NJWkUpOworfQorCisvKiBEb29yYmVs bCBjYWxjdWxhdGlvbnMgZm9yIGRldmljZSBpbml0LiAqLwordm9pZCBrZmRfZG9vcmJlbGxfaW5p dChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQoreworCXNpemVfdCBkb29yYmVsbF9zdGFydF9vZmZzZXQ7 CisJc2l6ZV90IGRvb3JiZWxsX2FwZXJ0dXJlX3NpemU7CisJc2l6ZV90IGRvb3JiZWxsX3Byb2Nl c3NfbGltaXQ7CisKKwkvKgorCSAqIFdlIHN0YXJ0IHdpdGggY2FsY3VsYXRpb25zIGluIGJ5dGVz IGJlY2F1c2UgdGhlIGlucHV0IGRhdGEgbWlnaHQKKwkgKiBvbmx5IGJlIGJ5dGUtYWxpZ25lZC4K KwkgKiBPbmx5IGFmdGVyIHdlIGhhdmUgZG9uZSB0aGUgcm91bmRpbmcgY2FuIHdlIGFzc3VtZSBh bnkgYWxpZ25tZW50LgorCSAqLworCisJZG9vcmJlbGxfc3RhcnRfb2Zmc2V0ID0gcm91bmR1cChr ZmQtPnNoYXJlZF9yZXNvdXJjZXMuZG9vcmJlbGxfc3RhcnRfb2Zmc2V0LAorCQkJCQlkb29yYmVs bF9wcm9jZXNzX2FsbG9jYXRpb24oKSk7CisJZG9vcmJlbGxfYXBlcnR1cmVfc2l6ZSA9IHJvdW5k ZG93bihrZmQtPnNoYXJlZF9yZXNvdXJjZXMuZG9vcmJlbGxfYXBlcnR1cmVfc2l6ZSwKKwkJCQkJ ZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCkpOworCisJaWYgKGRvb3JiZWxsX2FwZXJ0dXJl X3NpemUgPiBkb29yYmVsbF9zdGFydF9vZmZzZXQpCisJCWRvb3JiZWxsX3Byb2Nlc3NfbGltaXQg PQorCQkJKGRvb3JiZWxsX2FwZXJ0dXJlX3NpemUgLSBkb29yYmVsbF9zdGFydF9vZmZzZXQpIC8g ZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCk7CisJZWxzZQorCQlkb29yYmVsbF9wcm9jZXNz X2xpbWl0ID0gMDsKKworCWtmZC0+ZG9vcmJlbGxfYmFzZSA9IGtmZC0+c2hhcmVkX3Jlc291cmNl cy5kb29yYmVsbF9waHlzaWNhbF9hZGRyZXNzICsgZG9vcmJlbGxfc3RhcnRfb2Zmc2V0OworCWtm ZC0+ZG9vcmJlbGxfaWRfb2Zmc2V0ID0gZG9vcmJlbGxfc3RhcnRfb2Zmc2V0IC8gc2l6ZW9mKHUz Mik7CisJa2ZkLT5kb29yYmVsbF9wcm9jZXNzX2xpbWl0ID0gZG9vcmJlbGxfcHJvY2Vzc19saW1p dCAtIDE7CisKKwlrZmQtPmRvb3JiZWxsX2tlcm5lbF9wdHIgPSBpb3JlbWFwKGtmZC0+ZG9vcmJl bGxfYmFzZSwgZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCkpOworCUJVR19PTigha2ZkLT5k b29yYmVsbF9rZXJuZWxfcHRyKTsKKworCXByX2RlYnVnKCJrZmQ6IGRvb3JiZWxsIGluaXRpYWxp emF0aW9uOlxuIik7CisJcHJfZGVidWcoImtmZDogZG9vcmJlbGwgYmFzZSAgICAgICAgICAgPT0g MHglMDhsWFxuIiwKKwkJCSh1aW50cHRyX3Qpa2ZkLT5kb29yYmVsbF9iYXNlKTsKKworCXByX2Rl YnVnKCJrZmQ6IGRvb3JiZWxsX2lkX29mZnNldCAgICAgID09IDB4JTA4bFhcbiIsCisJCQlrZmQt PmRvb3JiZWxsX2lkX29mZnNldCk7CisKKwlwcl9kZWJ1Zygia2ZkOiBkb29yYmVsbF9wcm9jZXNz X2xpbWl0ICA9PSAweCUwOGxYXG4iLAorCQkJZG9vcmJlbGxfcHJvY2Vzc19saW1pdCk7CisKKwlw cl9kZWJ1Zygia2ZkOiBkb29yYmVsbF9rZXJuZWxfb2Zmc2V0ICA9PSAweCUwOGxYXG4iLAorCQkJ KHVpbnRwdHJfdClrZmQtPmRvb3JiZWxsX2Jhc2UpOworCisJcHJfZGVidWcoImtmZDogZG9vcmJl bGwgYXBlcnR1cmUgc2l6ZSAgPT0gMHglMDhsWFxuIiwKKwkJCWtmZC0+c2hhcmVkX3Jlc291cmNl cy5kb29yYmVsbF9hcGVydHVyZV9zaXplKTsKKworCXByX2RlYnVnKCJrZmQ6IGRvb3JiZWxsIGtl cm5lbCBhZGRyZXNzID09IDB4JTA4bFhcbiIsCisJCQkodWludHB0cl90KWtmZC0+ZG9vcmJlbGxf a2VybmVsX3B0cik7Cit9CisKK2ludCBrZmRfZG9vcmJlbGxfbW1hcChzdHJ1Y3Qga2ZkX3Byb2Nl c3MgKnByb2Nlc3MsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXBoeXNfYWRkcl90 IGFkZHJlc3M7CisJc3RydWN0IGtmZF9kZXYgKmRldjsKKworCS8qCisJICogRm9yIHNpbXBsaWNp dGx5IHdlIG9ubHkgYWxsb3cgbWFwcGluZyBvZiB0aGUgZW50aXJlIGRvb3JiZWxsCisJICogYWxs b2NhdGlvbiBvZiBhIHNpbmdsZSBkZXZpY2UgJiBwcm9jZXNzLgorCSAqLworCWlmICh2bWEtPnZt X2VuZCAtIHZtYS0+dm1fc3RhcnQgIT0gZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCkpCisJ CXJldHVybiAtRUlOVkFMOworCisJLyogRmluZCBrZmQgZGV2aWNlIGFjY29yZGluZyB0byBncHUg aWQgKi8KKwlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKHZtYS0+dm1fcGdvZmYpOworCWlmIChkZXYg PT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaW5kIGlmIHBkZCBleGlzdHMgZm9y IGNvbWJpbmF0aW9uIG9mIHByb2Nlc3MgYW5kIGdwdSBpZCAqLworCWlmICgha2ZkX2dldF9wcm9j ZXNzX2RldmljZV9kYXRhKGRldiwgcHJvY2VzcywgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJ LyogQ2FsY3VsYXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZG9vcmJlbGwgKi8KKwlhZGRyZXNzID0g a2ZkX2dldF9wcm9jZXNzX2Rvb3JiZWxscyhkZXYsIHByb2Nlc3MpOworCisJdm1hLT52bV9mbGFn cyB8PSBWTV9JTyB8IFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORCB8IFZNX05PUkVTRVJWRSB8 IFZNX0RPTlREVU1QIHwgVk1fUEZOTUFQOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25v bmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlwcl9kZWJ1Zygia2ZkOiBtYXBwaW5nIGRv b3JiZWxsIHBhZ2UgaW4ga2ZkX2Rvb3JiZWxsX21tYXBcbiIKKwkJICIgICAgIHRhcmdldCB1c2Vy IGFkZHJlc3MgPT0gMHglMDhsbFhcbiIKKwkJICIgICAgIHBoeXNpY2FsIGFkZHJlc3MgICAgPT0g MHglMDhsbFhcbiIKKwkJICIgICAgIHZtX2ZsYWdzICAgICAgICAgICAgPT0gMHglMDRsWFxuIgor CQkgIiAgICAgc2l6ZSAgICAgICAgICAgICAgICA9PSAweCUwNGxYXG4iLAorCQkgKHVuc2lnbmVk IGxvbmcgbG9uZykgdm1hLT52bV9zdGFydCwgYWRkcmVzcywgdm1hLT52bV9mbGFncywKKwkJIGRv b3JiZWxsX3Byb2Nlc3NfYWxsb2NhdGlvbigpKTsKKworCisJcmV0dXJuIGlvX3JlbWFwX3Bmbl9y YW5nZSh2bWEsCisJCQkJdm1hLT52bV9zdGFydCwKKwkJCQlhZGRyZXNzID4+IFBBR0VfU0hJRlQs CisJCQkJZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCksCisJCQkJdm1hLT52bV9wYWdlX3By b3QpOworfQorCisKKy8qIGdldCBrZXJuZWwgaW9tZW0gcG9pbnRlciBmb3IgYSBkb29yYmVsbCAq LwordTMyIF9faW9tZW0gKmtmZF9nZXRfa2VybmVsX2Rvb3JiZWxsKHN0cnVjdCBrZmRfZGV2ICpr ZmQsIHVuc2lnbmVkIGludCAqZG9vcmJlbGxfb2ZmKQoreworCXUzMiBpbng7CisKKwlCVUdfT04o IWtmZCB8fCAhZG9vcmJlbGxfb2ZmKTsKKworCW11dGV4X2xvY2soJmRvb3JiZWxsX211dGV4KTsK KwlpbnggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRvb3JiZWxsX2F2YWlsYWJsZV9pbmRleCwgS0ZE X01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTKTsKKwlfX3NldF9iaXQoaW54LCBkb29yYmVs bF9hdmFpbGFibGVfaW5kZXgpOworCW11dGV4X3VubG9jaygmZG9vcmJlbGxfbXV0ZXgpOworCisJ aWYgKGlueCA+PSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpCisJCXJldHVybiBO VUxMOworCisJLyogY2FsdWN1bGF0aW5nIHRoZSBrZXJuZWwgZG9vcmJlbGwgb2Zmc2V0IHVzaW5n ICJmYWtlZCIga2VybmVsIHBhc2lkIHRoYXQgYWxsb2NhdGVkIGZvciBrZXJuZWwgcXVldWVzIG9u bHkgKi8KKwkqZG9vcmJlbGxfb2ZmID0gS0VSTkVMX0RPT1JCRUxMX1BBU0lEICogKGRvb3JiZWxs X3Byb2Nlc3NfYWxsb2NhdGlvbigpL3NpemVvZih1MzIpKSArIGlueDsKKworCXByX2RlYnVnKCJr ZmQ6IGdldCBrZXJuZWwgcXVldWUgZG9vcmJlbGxcbiIKKwkJCSAiICAgICBkb29yYmVsbCBvZmZz ZXQgICA9PSAweCUwOGRcbiIKKwkJCSAiICAgICBrZXJuZWwgYWRkcmVzcyAgICA9PSAweCUwOGxY XG4iLAorCQkJICpkb29yYmVsbF9vZmYsICh1aW50cHRyX3QpKGtmZC0+ZG9vcmJlbGxfa2VybmVs X3B0ciArIGlueCkpOworCisJcmV0dXJuIGtmZC0+ZG9vcmJlbGxfa2VybmVsX3B0ciArIGlueDsK K30KKwordm9pZCBrZmRfcmVsZWFzZV9rZXJuZWxfZG9vcmJlbGwoc3RydWN0IGtmZF9kZXYgKmtm ZCwgdTMyIF9faW9tZW0gKmRiX2FkZHIpCit7CisJdW5zaWduZWQgaW50IGlueDsKKworCUJVR19P Tigha2ZkIHx8ICFkYl9hZGRyKTsKKworCWlueCA9ICh1bnNpZ25lZCBpbnQpKGRiX2FkZHIgLSBr ZmQtPmRvb3JiZWxsX2tlcm5lbF9wdHIpOworCisJbXV0ZXhfbG9jaygmZG9vcmJlbGxfbXV0ZXgp OworCV9fY2xlYXJfYml0KGlueCwgZG9vcmJlbGxfYXZhaWxhYmxlX2luZGV4KTsKKwltdXRleF91 bmxvY2soJmRvb3JiZWxsX211dGV4KTsKK30KKworaW5saW5lIHZvaWQgd3JpdGVfa2VybmVsX2Rv b3JiZWxsKHUzMiBfX2lvbWVtICpkYiwgdTMyIHZhbHVlKQoreworCWlmIChkYikgeworCQl3cml0 ZWwodmFsdWUsIGRiKTsKKwkJcHJfZGVidWcoIndyaXRpbmcgJWQgdG8gZG9vcmJlbGwgYWRkcmVz cyAweCVwXG4iLCB2YWx1ZSwgZGIpOworCX0KK30KKworLyoKKyAqIHF1ZXVlX2lkcyBhcmUgaW4g dGhlIHJhbmdlIFswLE1BWF9QUk9DRVNTX1FVRVVFUykgYW5kIGFyZSBtYXBwZWQgMToxCisgKiB0 byBkb29yYmVsbHMgd2l0aCB0aGUgcHJvY2VzcydzIGRvb3JiZWxsIHBhZ2UKKyAqLwordW5zaWdu ZWQgaW50IGtmZF9xdWV1ZV9pZF90b19kb29yYmVsbChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLAorCQkJ CQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3MsCisJCQkJCXVuc2lnbmVkIGludCBxdWV1ZV9p ZCkKK3sKKwkvKgorCSAqIGRvb3JiZWxsX2lkX29mZnNldCBhY2NvdW50cyBmb3IgZG9vcmJlbGxz IHRha2VuIGJ5IEtHRC4KKwkgKiBwYXNpZCAqIGRvb3JiZWxsX3Byb2Nlc3NfYWxsb2NhdGlvbi9z aXplb2YodTMyKSBhZGp1c3RzCisJICogdG8gdGhlIHByb2Nlc3MncyBkb29yYmVsbHMKKwkgKi8K KwlyZXR1cm4ga2ZkLT5kb29yYmVsbF9pZF9vZmZzZXQgKworCQlwcm9jZXNzLT5wYXNpZCAqIChk b29yYmVsbF9wcm9jZXNzX2FsbG9jYXRpb24oKS9zaXplb2YodTMyKSkgKworCQlxdWV1ZV9pZDsK K30KKwordWludDY0X3Qga2ZkX2dldF9udW1iZXJfZWxlbXMoc3RydWN0IGtmZF9kZXYgKmtmZCkK K3sKKwl1aW50NjRfdCBudW1fb2ZfZWxlbXMgPSAoa2ZkLT5zaGFyZWRfcmVzb3VyY2VzLmRvb3Ji ZWxsX2FwZXJ0dXJlX3NpemUgLQorCQkJCWtmZC0+c2hhcmVkX3Jlc291cmNlcy5kb29yYmVsbF9z dGFydF9vZmZzZXQpIC8KKwkJCQkJZG9vcmJlbGxfcHJvY2Vzc19hbGxvY2F0aW9uKCkgKyAxOwor CisJcmV0dXJuIG51bV9vZl9lbGVtczsKKworfQorCitwaHlzX2FkZHJfdCBrZmRfZ2V0X3Byb2Nl c3NfZG9vcmJlbGxzKHN0cnVjdCBrZmRfZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBrZmRfcHJvY2Vz cyAqcHJvY2VzcykKK3sKKwlyZXR1cm4gZGV2LT5kb29yYmVsbF9iYXNlICsKKwkJcHJvY2Vzcy0+ cGFzaWQgKiBkb29yYmVsbF9wcm9jZXNzX2FsbG9jYXRpb24oKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9tb2R1bGUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vYW1ka2ZkL2tmZF9tb2R1bGUuYwppbmRleCAwMDAyNTE4Li5hMzFiZjAzIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9rZmRfbW9kdWxlLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX21vZHVsZS5jCkBAIC0yMiw3ICsyMiw2 IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5o PgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFy YW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJrZmRfcHJpdi5oIgpA QCAtNDYsNiArNDUsMTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZ2Qya2ZkX2NhbGxzIGtnZDJr ZmQgPSB7CiAJLnJlc3VtZQkJPSBrZ2Qya2ZkX3Jlc3VtZSwKIH07CiAKK2ludCBtYXhfbnVtX29m X3Byb2Nlc3NlcyA9IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFU19ERUZBVUxUOworbW9kdWxlX3Bh cmFtKG1heF9udW1fb2ZfcHJvY2Vzc2VzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyht YXhfbnVtX29mX3Byb2Nlc3NlcywKKwkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVm aW5lcyB0aGUgYW1ka2ZkIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9jZXNzZXMiKTsK KworaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzID0gS0ZEX01BWF9OVU1fT0ZfUVVF VUVTX1BFUl9QUk9DRVNTX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW0obWF4X251bV9vZl9xdWV1ZXNf cGVyX3Byb2Nlc3MsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2ZfcXVl dWVzX3Blcl9wcm9jZXNzLAorCSJLZXJuZWwgY21kbGluZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVz IHRoZSBhbWRrZmQgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyBwZXIgcHJvY2Vz cyIpOworCiBib29sIGtnZDJrZmRfaW5pdCh1bnNpZ25lZCBpbnRlcmZhY2VfdmVyc2lvbiwKIAkJ ICBjb25zdCBzdHJ1Y3Qga2ZkMmtnZF9jYWxscyAqZjJnLAogCQkgIGNvbnN0IHN0cnVjdCBrZ2Qy a2ZkX2NhbGxzICoqZzJmKQpAQCAtNjksNiArNzgsMjQgQEAgc3RhdGljIGludCBfX2luaXQga2Zk X21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAorCS8qIFZlcmlmeSBtb2R1bGUgcGFy YW1ldGVycyAqLworCWlmICgobWF4X251bV9vZl9wcm9jZXNzZXMgPCAwKSB8fAorCQkobWF4X251 bV9vZl9wcm9jZXNzZXMgPiBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMpKSB7CisJCXByX2Vycigi a2ZkOiBtYXhfbnVtX29mX3Byb2Nlc3NlcyBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05V TV9PRl9QUk9DRVNTRVNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChtYXhfbnVtX29m X3F1ZXVlc19wZXJfcHJvY2VzcyA8IDApIHx8CisJCShtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJv Y2VzcyA+CisJCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpKSB7CisJCXByX2Vy cigia2ZkOiBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyBtdXN0IGJlIGJldHdlZW4gMCB0 byBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1NcbiIpOworCQlyZXR1cm4gLTE7CisJ fQorCisJZXJyID0ga2ZkX3Bhc2lkX2luaXQoKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJf cGFzaWQ7CisKIAllcnIgPSBrZmRfY2hhcmRldl9pbml0KCk7CiAJaWYgKGVyciA8IDApCiAJCWdv dG8gZXJyX2lvY3RsOwpAQCAtODQsNiArMTExLDggQEAgc3RhdGljIGludCBfX2luaXQga2ZkX21v ZHVsZV9pbml0KHZvaWQpCiBlcnJfdG9wb2xvZ3k6CiAJa2ZkX2NoYXJkZXZfZXhpdCgpOwogZXJy X2lvY3RsOgorCWtmZF9wYXNpZF9leGl0KCk7CitlcnJfcGFzaWQ6CiAJcmV0dXJuIGVycjsKIH0K IApAQCAtOTEsNiArMTIwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGtmZF9tb2R1bGVfZXhpdCh2 b2lkKQogewogCWtmZF90b3BvbG9neV9zaHV0ZG93bigpOwogCWtmZF9jaGFyZGV2X2V4aXQoKTsK KwlrZmRfcGFzaWRfZXhpdCgpOwogCWRldl9pbmZvKGtmZF9kZXZpY2UsICJSZW1vdmVkIG1vZHVs ZVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tm ZF9wYXNpZC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Bhc2lkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhNWUyZAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9wYXNpZC5jCkBAIC0wLDAgKzEs OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMu CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hU IEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImtmZF9wcml2LmgiCisKK3N0YXRpYyB1bnNpZ25l ZCBsb25nICpwYXNpZF9iaXRtYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhc2lkX2xpbWl0Owor c3RhdGljIERFRklORV9NVVRFWChwYXNpZF9tdXRleCk7CisKK2ludCBrZmRfcGFzaWRfaW5pdCh2 b2lkKQoreworCXBhc2lkX2xpbWl0ID0gbWF4X251bV9vZl9wcm9jZXNzZXM7CisKKwlwYXNpZF9i aXRtYXAgPSBremFsbG9jKERJVl9ST1VORF9VUChwYXNpZF9saW1pdCwgQklUU19QRVJfQllURSks IEdGUF9LRVJORUwpOworCWlmICghcGFzaWRfYml0bWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXNldF9iaXQoMCwgcGFzaWRfYml0bWFwKTsgLyogUEFTSUQgMCBpcyByZXNlcnZlZC4gKi8KKwor CXJldHVybiAwOworfQorCit2b2lkIGtmZF9wYXNpZF9leGl0KHZvaWQpCit7CisJa2ZyZWUocGFz aWRfYml0bWFwKTsKK30KKworYm9vbCBrZmRfc2V0X3Bhc2lkX2xpbWl0KHVuc2lnbmVkIGludCBu ZXdfbGltaXQpCit7CisJaWYgKG5ld19saW1pdCA8IHBhc2lkX2xpbWl0KSB7CisJCWJvb2wgb2s7 CisKKwkJbXV0ZXhfbG9jaygmcGFzaWRfbXV0ZXgpOworCisJCS8qIGVuc3VyZSB0aGF0IG5vIHBh c2lkcyA+PSBuZXdfbGltaXQgYXJlIGluLXVzZSAqLworCQlvayA9IChmaW5kX25leHRfYml0KHBh c2lkX2JpdG1hcCwgcGFzaWRfbGltaXQsIG5ld19saW1pdCkgPT0gcGFzaWRfbGltaXQpOworCQlp ZiAob2spCisJCQlwYXNpZF9saW1pdCA9IG5ld19saW1pdDsKKworCQltdXRleF91bmxvY2soJnBh c2lkX211dGV4KTsKKworCQlyZXR1cm4gb2s7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2lu bGluZSB1bnNpZ25lZCBpbnQga2ZkX2dldF9wYXNpZF9saW1pdCh2b2lkKQoreworCXJldHVybiBw YXNpZF9saW1pdDsKK30KKwordW5zaWduZWQgaW50IGtmZF9wYXNpZF9hbGxvYyh2b2lkKQorewor CXVuc2lnbmVkIGludCBmb3VuZDsKKworCW11dGV4X2xvY2soJnBhc2lkX211dGV4KTsKKworCWZv dW5kID0gZmluZF9maXJzdF96ZXJvX2JpdChwYXNpZF9iaXRtYXAsIHBhc2lkX2xpbWl0KTsKKwlp ZiAoZm91bmQgPT0gcGFzaWRfbGltaXQpCisJCWZvdW5kID0gMDsKKwllbHNlCisJCXNldF9iaXQo Zm91bmQsIHBhc2lkX2JpdG1hcCk7CisKKwltdXRleF91bmxvY2soJnBhc2lkX211dGV4KTsKKwor CXJldHVybiBmb3VuZDsKK30KKwordm9pZCBrZmRfcGFzaWRfZnJlZSh1bnNpZ25lZCBpbnQgcGFz aWQpCit7CisJQlVHX09OKHBhc2lkID09IDAgfHwgcGFzaWQgPj0gcGFzaWRfbGltaXQpOworCWNs ZWFyX2JpdChwYXNpZCwgcGFzaWRfYml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9wcml2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Ft ZGtmZC9rZmRfcHJpdi5oCmluZGV4IDRiN2ZmYjYuLjQzZjRiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9yYWRlb24vYW1ka2ZkL2tmZF9wcml2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3JhZGVvbi9hbWRrZmQva2ZkX3ByaXYuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxp bnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSAi Li4vcmFkZW9uX2tmZC5oIgorI2luY2x1ZGUgPGxpbnV4L2tmZF9pb2N0bC5oPgogCiAjZGVmaW5l IEtGRF9TWVNGU19GSUxFX01PREUgMDQ0NAogCkBAIC00MCw2ICs0MSwyMiBAQAogLyogTWFjcm8g Zm9yIGFsbG9jYXRpbmcgc3RydWN0dXJlcyAqLwogI2RlZmluZSBrZmRfYWxsb2Nfc3RydWN0KHB0 cl90b19zdHJ1Y3QpCSgodHlwZW9mKHB0cl90b19zdHJ1Y3QpKSBremFsbG9jKHNpemVvZigqcHRy X3RvX3N0cnVjdCksIEdGUF9LRVJORUwpKQogCisvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlciB0 byBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9jZXNzZXMgKi8KK2V4dGVy biBpbnQgbWF4X251bV9vZl9wcm9jZXNzZXM7CisKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUFJP Q0VTU0VTX0RFRkFVTFQgMzIKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTIDUxMgor CisvKgorICogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBtYXhpbXVtIG51bWJl ciBvZiBzdXBwb3J0ZWQgcXVldWVzCisgKiBwZXIgcHJvY2VzcworICovCitleHRlcm4gaW50IG1h eF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzOworCisjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FV RVVFU19QRVJfUFJPQ0VTU19ERUZBVUxUIDEyOAorI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVV RVNfUEVSX1BST0NFU1MgMTAyNAorCisKIHN0cnVjdCBrZmRfZGV2aWNlX2luZm8gewogCWNvbnN0 IHN0cnVjdCBrZmRfc2NoZWR1bGVyX2NsYXNzICpzY2hlZHVsZXJfY2xhc3M7CiAJdW5zaWduZWQg aW50IG1heF9wYXNpZF9iaXRzOwpAQCAtNTQsNiArNzEsMTcgQEAgc3RydWN0IGtmZF9kZXYgewog CiAJdW5zaWduZWQgaW50IGlkOwkJLyogdG9wb2xvZ3kgc3R1YiBpbmRleCAqLwogCisJcGh5c19h ZGRyX3QgZG9vcmJlbGxfYmFzZTsJLyogU3RhcnQgb2YgYWN0dWFsIGRvb3JiZWxscyB1c2VkIGJ5 CisJCQkJCSAqIEtGRC4gSXQgaXMgYWxpZ25lZCBmb3IgbWFwcGluZworCQkJCQkgKiBpbnRvIHVz ZXIgbW9kZQorCQkJCQkgKi8KKwlzaXplX3QgZG9vcmJlbGxfaWRfb2Zmc2V0OwkvKiBEb29yYmVs bCBvZmZzZXQgKGZyb20gS0ZEIGRvb3JiZWxsCisJCQkJCSAqIHRvIEhXIGRvb3JiZWxsLCBHRlgg cmVzZXJ2ZWQgc29tZQorCQkJCQkgKiBhdCB0aGUgc3RhcnQpCisJCQkJCSAqLworCXNpemVfdCBk b29yYmVsbF9wcm9jZXNzX2xpbWl0OwkvKiBOdW1iZXIgb2YgcHJvY2Vzc2VzIHdlIGhhdmUgZG9v cmJlbGwgc3BhY2UgZm9yLiAqLworCXUzMiBfX2lvbWVtICpkb29yYmVsbF9rZXJuZWxfcHRyOyAv KiB0aGlzIGlzIGEgcG9pbnRlciBmb3IgYSBkb29yYmVsbHMgcGFnZSB1c2VkIGJ5IGtlcm5lbCBx dWV1ZSAqLworCiAJc3RydWN0IGtnZDJrZmRfc2hhcmVkX3Jlc291cmNlcyBzaGFyZWRfcmVzb3Vy Y2VzOwogCiAJYm9vbCBpbml0X2NvbXBsZXRlOwpAQCAtNjksMTUgKzk3LDEyMSBAQCB2b2lkIGtn ZDJrZmRfZGV2aWNlX2V4aXQoc3RydWN0IGtmZF9kZXYgKmtmZCk7CiAKIGV4dGVybiBjb25zdCBz dHJ1Y3Qga2ZkMmtnZF9jYWxscyAqa2ZkMmtnZDsKIAorLyogRHVtbXkgc3RydWN0IGp1c3QgdG8g bWFrZSBrZmRfbWVtX29iaiogYSB1bmlxdWUgcG9pbnRlciB0eXBlLiAqLworc3RydWN0IGtmZF9t ZW1fb2JqIHsKKwl2b2lkICpzYV9ibzsKKwl1aW50NjRfdCBncHVfYWRkcjsKKwl1aW50MzJfdCAq cHRyOworfTsKKworZW51bSBrZmRfbWVtcG9vbCB7CisJS0ZEX01FTVBPT0xfU1lTVEVNX0NBQ0hF QUJMRSA9IDEsCisJS0ZEX01FTVBPT0xfU1lTVEVNX1dSSVRFQ09NQklORSA9IDIsCisJS0ZEX01F TVBPT0xfRlJBTUVCVUZGRVIgPSAzLAorfTsKKwogLyogQ2hhcmFjdGVyIGRldmljZSBpbnRlcmZh Y2UgKi8KIGludCBrZmRfY2hhcmRldl9pbml0KHZvaWQpOwogdm9pZCBrZmRfY2hhcmRldl9leGl0 KHZvaWQpOwogc3RydWN0IGRldmljZSAqa2ZkX2NoYXJkZXYodm9pZCk7CiAKKworLyogRGF0YSB0 aGF0IGlzIHBlci1wcm9jZXNzLXBlciBkZXZpY2UuICovCitzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2 aWNlIHsKKwkvKgorCSAqIExpc3Qgb2YgYWxsIHBlci1kZXZpY2UgZGF0YSBmb3IgYSBwcm9jZXNz LgorCSAqIFN0YXJ0cyBmcm9tIGtmZF9wcm9jZXNzLnBlcl9kZXZpY2VfZGF0YS4KKwkgKi8KKwlz dHJ1Y3QgbGlzdF9oZWFkIHBlcl9kZXZpY2VfbGlzdDsKKworCS8qIFRoZSBkZXZpY2UgdGhhdCBv d25zIHRoaXMgZGF0YS4gKi8KKwlzdHJ1Y3Qga2ZkX2RldiAqZGV2OworCisKKwkvKkFwZXJ0dXJl cyovCisJdWludDY0X3QgbGRzX2Jhc2U7CisJdWludDY0X3QgbGRzX2xpbWl0OworCXVpbnQ2NF90 IGdwdXZtX2Jhc2U7CisJdWludDY0X3QgZ3B1dm1fbGltaXQ7CisJdWludDY0X3Qgc2NyYXRjaF9i YXNlOworCXVpbnQ2NF90IHNjcmF0Y2hfbGltaXQ7CisKKwkvKiBJcyB0aGlzIHByb2Nlc3MvcGFz aWQgYm91bmQgdG8gdGhpcyBkZXZpY2U/IChhbWRfaW9tbXVfYmluZF9wYXNpZCkgKi8KKwlib29s IGJvdW5kOworfTsKKwogLyogUHJvY2VzcyBkYXRhICovCiBzdHJ1Y3Qga2ZkX3Byb2Nlc3Mgewor CS8qCisJICoga2ZkX3Byb2Nlc3MgYXJlIHN0b3JlZCBpbiBhbiBtbV9zdHJ1Y3QqLT5rZmRfcHJv Y2VzcyoKKwkgKiBoYXNoIHRhYmxlIChrZmRfcHJvY2Vzc2VzIGluIGtmZF9wcm9jZXNzLmMpCisJ ICovCisJc3RydWN0IGhsaXN0X25vZGUga2ZkX3Byb2Nlc3NlczsKKworCXN0cnVjdCBtbV9zdHJ1 Y3QgKm1tOworCisJc3RydWN0IG11dGV4IG11dGV4OworCisJLyoKKwkgKiBJbiBhbnkgcHJvY2Vz cywgdGhlIHRocmVhZCB0aGF0IHN0YXJ0ZWQgbWFpbigpIGlzIHRoZSBsZWFkCisJICogdGhyZWFk IGFuZCBvdXRsaXZlcyB0aGUgcmVzdC4KKwkgKiBJdCBpcyBoZXJlIGJlY2F1c2UgYW1kX2lvbW11 X2JpbmRfcGFzaWQgd2FudHMgYSB0YXNrX3N0cnVjdC4KKwkgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKmxlYWRfdGhyZWFkOworCisJLyogV2Ugd2FudCB0byByZWNlaXZlIGEgbm90aWZpY2F0aW9u IHdoZW4gdGhlIG1tX3N0cnVjdCBpcyBkZXN0cm95ZWQgKi8KKwlzdHJ1Y3QgbW11X25vdGlmaWVy IG1tdV9ub3RpZmllcjsKKworCS8qIFVzZSBmb3IgZGVsYXllZCBmcmVlaW5nIG9mIGtmZF9wcm9j ZXNzIHN0cnVjdHVyZSAqLworCXN0cnVjdCByY3VfaGVhZAlyY3U7CisKKwl1bnNpZ25lZCBpbnQg cGFzaWQ7CisKKwkvKgorCSAqIExpc3Qgb2Yga2ZkX3Byb2Nlc3NfZGV2aWNlIHN0cnVjdHVyZXMs CisJICogb25lIGZvciBlYWNoIGRldmljZSB0aGUgcHJvY2VzcyBpcyB1c2luZy4KKwkgKi8KKwlz dHJ1Y3QgbGlzdF9oZWFkIHBlcl9kZXZpY2VfZGF0YTsKKworCS8qIFRoZSBwcm9jZXNzJ3MgcXVl dWVzLiAqLworCXNpemVfdCBxdWV1ZV9hcnJheV9zaXplOworCisJLyogU2l6ZSBpcyBxdWV1ZV9h cnJheV9zaXplLCB1cCB0byBNQVhfUFJPQ0VTU19RVUVVRVMuICovCisJc3RydWN0IGtmZF9xdWV1 ZSAqKnF1ZXVlczsKKworCXVuc2lnbmVkIGxvbmcgYWxsb2NhdGVkX3F1ZXVlX2JpdG1hcFtESVZf Uk9VTkRfVVAoS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTLCBCSVRTX1BFUl9MT05H KV07CisKKwkvKklzIHRoZSB1c2VyIHNwYWNlIHByb2Nlc3MgMzIgYml0PyovCisJYm9vbCBpc18z MmJpdF91c2VyX21vZGU7CiB9OwogCitzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmtmZF9jcmVhdGVfcHJv Y2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmtm ZF9nZXRfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKK3N0cnVjdCBrZmRf cHJvY2Vzc19kZXZpY2UgKmtmZF9nZXRfcHJvY2Vzc19kZXZpY2VfZGF0YShzdHJ1Y3Qga2ZkX2Rl diAqZGV2LAorCQkJCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJCQlpbnQgY3JlYXRl X3BkZCk7CisKKy8qIFBBU0lEcyAqLworaW50IGtmZF9wYXNpZF9pbml0KHZvaWQpOwordm9pZCBr ZmRfcGFzaWRfZXhpdCh2b2lkKTsKK2Jvb2wga2ZkX3NldF9wYXNpZF9saW1pdCh1bnNpZ25lZCBp bnQgbmV3X2xpbWl0KTsKK3Vuc2lnbmVkIGludCBrZmRfZ2V0X3Bhc2lkX2xpbWl0KHZvaWQpOwor dW5zaWduZWQgaW50IGtmZF9wYXNpZF9hbGxvYyh2b2lkKTsKK3ZvaWQga2ZkX3Bhc2lkX2ZyZWUo dW5zaWduZWQgaW50IHBhc2lkKTsKKworLyogRG9vcmJlbGxzICovCit2b2lkIGtmZF9kb29yYmVs bF9pbml0KHN0cnVjdCBrZmRfZGV2ICprZmQpOworaW50IGtmZF9kb29yYmVsbF9tbWFwKHN0cnVj dCBrZmRfcHJvY2VzcyAqcHJvY2Vzcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwordTMy IF9faW9tZW0gKmtmZF9nZXRfa2VybmVsX2Rvb3JiZWxsKHN0cnVjdCBrZmRfZGV2ICprZmQsCisJ CQkJCXVuc2lnbmVkIGludCAqZG9vcmJlbGxfb2ZmKTsKK3ZvaWQga2ZkX3JlbGVhc2Vfa2VybmVs X2Rvb3JiZWxsKHN0cnVjdCBrZmRfZGV2ICprZmQsIHUzMiBfX2lvbWVtICpkYl9hZGRyKTsKK3Uz MiByZWFkX2tlcm5lbF9kb29yYmVsbCh1MzIgX19pb21lbSAqZGIpOwordm9pZCB3cml0ZV9rZXJu ZWxfZG9vcmJlbGwodTMyIF9faW9tZW0gKmRiLCB1MzIgdmFsdWUpOwordW5zaWduZWQgaW50IGtm ZF9xdWV1ZV9pZF90b19kb29yYmVsbChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLAorCQkJCQlzdHJ1Y3Qg a2ZkX3Byb2Nlc3MgKnByb2Nlc3MsCisJCQkJCXVuc2lnbmVkIGludCBxdWV1ZV9pZCk7CisKIGV4 dGVybiBzdHJ1Y3QgZGV2aWNlICprZmRfZGV2aWNlOwogCiAvKiBUb3BvbG9neSAqLwpAQCAtOTYs NCArMjMwLDExIEBAIHZvaWQga2dkMmtmZF9pbnRlcnJ1cHQoc3RydWN0IGtmZF9kZXYgKmRldiwg Y29uc3Qgdm9pZCAqaWhfcmluZ19lbnRyeSk7CiB2b2lkIGtnZDJrZmRfc3VzcGVuZChzdHJ1Y3Qg a2ZkX2RldiAqZGV2KTsKIGludCBrZ2Qya2ZkX3Jlc3VtZShzdHJ1Y3Qga2ZkX2RldiAqZGV2KTsK IAorLyogYW1ka2ZkIEFwZXJ0dXJlcyAqLworaW50IGtmZF9pbml0X2FwZXJ0dXJlcyhzdHJ1Y3Qg a2ZkX3Byb2Nlc3MgKnByb2Nlc3MpOworCit1aW50NjRfdCBrZmRfZ2V0X251bWJlcl9lbGVtcyhz dHJ1Y3Qga2ZkX2RldiAqa2ZkKTsKK3BoeXNfYWRkcl90IGtmZF9nZXRfcHJvY2Vzc19kb29yYmVs bHMoc3RydWN0IGtmZF9kZXYgKmRldiwKKwkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNz KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2FtZGtmZC9r ZmRfcHJvY2Vzcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Byb2Nlc3Mu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTVmZDkzCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hbWRrZmQva2ZkX3Byb2Nlc3MuYwpAQCAt MCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4K KyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KK3N0cnVjdCBt bV9zdHJ1Y3Q7CisKKyNpbmNsdWRlICJrZmRfcHJpdi5oIgorCisvKgorICogSW5pdGlhbCBzaXpl IGZvciB0aGUgYXJyYXkgb2YgcXVldWVzLgorICogVGhlIGFsbG9jYXRlZCBzaXplIGlzIGRvdWJs ZWQgZWFjaCB0aW1lCisgKiBpdCBpcyBleGNlZWRlZCB1cCB0byBNQVhfUFJPQ0VTU19RVUVVRVMu CisgKi8KKyNkZWZpbmUgSU5JVElBTF9RVUVVRV9BUlJBWV9TSVpFIDE2CisKKy8qIExpc3Qgb2Yg c3RydWN0IGtmZF9wcm9jZXNzIChmaWVsZCBrZmRfcHJvY2VzcykuIFVuaXF1ZS9pbmRleGVkIGJ5 IG1tX3N0cnVjdCouICovCisjZGVmaW5lIEtGRF9QUk9DRVNTX1RBQkxFX1NJWkUgNSAvKiBiaXRz OiAzMiBlbnRyaWVzICovCitzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrZmRfcHJvY2Vzc2VzX3Rh YmxlLCBLRkRfUFJPQ0VTU19UQUJMRV9TSVpFKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoa2ZkX3By b2Nlc3Nlc19tdXRleCk7CisKK0RFRklORV9TVEFUSUNfU1JDVShrZmRfcHJvY2Vzc2VzX3NyY3Up OworCitzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpmaW5kX3Byb2Nlc3MoY29uc3Qgc3RydWN0 IHRhc2tfc3RydWN0ICp0aHJlYWQpOworc3RhdGljIHN0cnVjdCBrZmRfcHJvY2VzcyAqY3JlYXRl X3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQpOworCitzdHJ1Y3Qga2Zk X3Byb2Nlc3MgKmtmZF9jcmVhdGVfcHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRo cmVhZCkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7CisKKwlpZiAodGhyZWFkLT5t bSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIE9ubHkgdGhlIHB0 aHJlYWRzIHRocmVhZGluZyBtb2RlbCBpcyBzdXBwb3J0ZWQuICovCisJaWYgKHRocmVhZC0+Z3Jv dXBfbGVhZGVyLT5tbSAhPSB0aHJlYWQtPm1tKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK KworCS8qIFRha2UgbW1hcF9zZW0gYmVjYXVzZSB3ZSBjYWxsIF9fbW11X25vdGlmaWVyX3JlZ2lz dGVyIGluc2lkZSAqLworCWRvd25fd3JpdGUoJnRocmVhZC0+bW0tPm1tYXBfc2VtKTsKKworCS8q CisJICogdGFrZSBrZmQgcHJvY2Vzc2VzIG11dGV4IGJlZm9yZSBzdGFydGluZyBvZiBwcm9jZXNz IGNyZWF0aW9uCisJICogc28gdGhlcmUgd29uJ3QgYmUgYSBjYXNlIHdoZXJlIHR3byB0aHJlYWRz IG9mIHRoZSBzYW1lIHByb2Nlc3MKKwkgKiBjcmVhdGUgdHdvIGtmZF9wcm9jZXNzIHN0cnVjdHVy ZXMKKwkgKi8KKwltdXRleF9sb2NrKCZrZmRfcHJvY2Vzc2VzX211dGV4KTsKKworCS8qIEEgcHJp b3Igb3BlbiBvZiAvZGV2L2tmZCBjb3VsZCBoYXZlIGFscmVhZHkgY3JlYXRlZCB0aGUgcHJvY2Vz cy4gKi8KKwlwcm9jZXNzID0gZmluZF9wcm9jZXNzKHRocmVhZCk7CisJaWYgKHByb2Nlc3MpCisJ CXByX2RlYnVnKCJrZmQ6IHByb2Nlc3MgYWxyZWFkeSBmb3VuZFxuIik7CisKKwlpZiAoIXByb2Nl c3MpCisJCXByb2Nlc3MgPSBjcmVhdGVfcHJvY2Vzcyh0aHJlYWQpOworCisJbXV0ZXhfdW5sb2Nr KCZrZmRfcHJvY2Vzc2VzX211dGV4KTsKKworCXVwX3dyaXRlKCZ0aHJlYWQtPm1tLT5tbWFwX3Nl bSk7CisKKwlyZXR1cm4gcHJvY2VzczsKK30KKworc3RydWN0IGtmZF9wcm9jZXNzICprZmRfZ2V0 X3Byb2Nlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQpCit7CisJc3RydWN0IGtm ZF9wcm9jZXNzICpwcm9jZXNzOworCisJaWYgKHRocmVhZC0+bW0gPT0gTlVMTCkKKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBPbmx5IHRoZSBwdGhyZWFkcyB0aHJlYWRpbmcgbW9k ZWwgaXMgc3VwcG9ydGVkLiAqLworCWlmICh0aHJlYWQtPmdyb3VwX2xlYWRlci0+bW0gIT0gdGhy ZWFkLT5tbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlwcm9jZXNzID0gZmluZF9w cm9jZXNzKHRocmVhZCk7CisKKwlyZXR1cm4gcHJvY2VzczsKK30KKworc3RhdGljIHN0cnVjdCBr ZmRfcHJvY2VzcyAqZmluZF9wcm9jZXNzX2J5X21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1t KQoreworCXN0cnVjdCBrZmRfcHJvY2VzcyAqcHJvY2VzczsKKworCWhhc2hfZm9yX2VhY2hfcG9z c2libGVfcmN1KGtmZF9wcm9jZXNzZXNfdGFibGUsIHByb2Nlc3MsIGtmZF9wcm9jZXNzZXMsICh1 aW50cHRyX3QpbW0pCisJCWlmIChwcm9jZXNzLT5tbSA9PSBtbSkKKwkJCXJldHVybiBwcm9jZXNz OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKmZpbmRf cHJvY2Vzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZCkKK3sKKwlzdHJ1Y3Qga2Zk X3Byb2Nlc3MgKnA7CisJaW50IGlkeDsKKworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrZmRfcHJv Y2Vzc2VzX3NyY3UpOworCXAgPSBmaW5kX3Byb2Nlc3NfYnlfbW0odGhyZWFkLT5tbSk7CisJc3Jj dV9yZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1LCBpZHgpOworCisJcmV0dXJuIHA7Cit9 CisKK3N0YXRpYyB2b2lkIGtmZF9wcm9jZXNzX2Rlc3Ryb3lfZGVsYXllZChzdHJ1Y3QgcmN1X2hl YWQgKnJjdSkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnA7CisKKwlwID0gY29udGFpbmVyX29m KHJjdSwgc3RydWN0IGtmZF9wcm9jZXNzLCByY3UpOworCUJVR19PTihhdG9taWNfcmVhZCgmcC0+ bW0tPm1tX2NvdW50KSA8PSAwKTsKKworCW1tZHJvcChwLT5tbSk7CisJa2ZyZWUocCk7Cit9CisK K3N0YXRpYyB2b2lkIGtmZF9wcm9jZXNzX25vdGlmaWVyX3JlbGVhc2Uoc3RydWN0IG1tdV9ub3Rp ZmllciAqbW4sCisJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBrZmRfcHJv Y2Vzc19kZXZpY2UgKnBkZCwgKnRlbXA7CisJc3RydWN0IGtmZF9wcm9jZXNzICpwOworCisJLyoK KwkgKiBUaGUga2ZkX3Byb2Nlc3Mgc3RydWN0dXJlIGNhbiBub3QgYmUgZnJlZSBiZWNhdXNlIHRo ZQorCSAqIG1tdV9ub3RpZmllciBzcmN1IGlzIHJlYWQgbG9ja2VkCisJICovCisJcCA9IGNvbnRh aW5lcl9vZihtbiwgc3RydWN0IGtmZF9wcm9jZXNzLCBtbXVfbm90aWZpZXIpOworCUJVR19PTihw LT5tbSAhPSBtbSk7CisKKwltdXRleF9sb2NrKCZrZmRfcHJvY2Vzc2VzX211dGV4KTsKKwloYXNo X2RlbF9yY3UoJnAtPmtmZF9wcm9jZXNzZXMpOworCW11dGV4X3VubG9jaygma2ZkX3Byb2Nlc3Nl c19tdXRleCk7CisJc3luY2hyb25pemVfc3JjdSgma2ZkX3Byb2Nlc3Nlc19zcmN1KTsKKworCW11 dGV4X2xvY2soJnAtPm11dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZGQsIHRl bXAsICZwLT5wZXJfZGV2aWNlX2RhdGEsIHBlcl9kZXZpY2VfbGlzdCkgeworCQlsaXN0X2RlbCgm cGRkLT5wZXJfZGV2aWNlX2xpc3QpOworCQlrZnJlZShwZGQpOworCX0KKworCWtmZF9wYXNpZF9m cmVlKHAtPnBhc2lkKTsKKworCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOworCisJbXV0ZXhfZGVz dHJveSgmcC0+bXV0ZXgpOworCisJa2ZyZWUocC0+cXVldWVzKTsKKworCS8qCisJICogQmVjYXVz ZSB3ZSBkcm9wIG1tX2NvdW50IGluc2lkZSBrZmRfcHJvY2Vzc19kZXN0cm95X2RlbGF5ZWQKKwkg KiBhbmQgYmVjYXVzZSB0aGUgbW11X25vdGlmaWVyX3VucmVnaXN0ZXIgZnVuY3Rpb24gYWxzbyBk cm9wCisJICogbW1fY291bnQgd2UgbmVlZCB0byB0YWtlIGFuIGV4dHJhIGNvdW50IGhlcmUuCisJ ICovCisJYXRvbWljX2luYygmcC0+bW0tPm1tX2NvdW50KTsKKwltbXVfbm90aWZpZXJfdW5yZWdp c3Rlcl9ub19yZWxlYXNlKCZwLT5tbXVfbm90aWZpZXIsIHAtPm1tKTsKKwltbXVfbm90aWZpZXJf Y2FsbF9zcmN1KCZwLT5yY3UsICZrZmRfcHJvY2Vzc19kZXN0cm95X2RlbGF5ZWQpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMga2ZkX3Byb2Nlc3NfbW11X25vdGlm aWVyX29wcyA9IHsKKwkucmVsZWFzZSA9IGtmZF9wcm9jZXNzX25vdGlmaWVyX3JlbGVhc2UsCit9 OworCitzdGF0aWMgc3RydWN0IGtmZF9wcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyhjb25zdCBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnRocmVhZCkKK3sKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7 CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlwcm9jZXNzID0ga3phbGxvYyhzaXplb2YoKnByb2Nl c3MpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJvY2VzcykKKwkJZ290byBlcnJfYWxsb2NfcHJv Y2VzczsKKworCXByb2Nlc3MtPnF1ZXVlcyA9IGttYWxsb2NfYXJyYXkoSU5JVElBTF9RVUVVRV9B UlJBWV9TSVpFLCBzaXplb2YocHJvY2Vzcy0+cXVldWVzWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFwcm9jZXNzLT5xdWV1ZXMpCisJCWdvdG8gZXJyX2FsbG9jX3F1ZXVlczsKKworCXByb2Nlc3Mt PnBhc2lkID0ga2ZkX3Bhc2lkX2FsbG9jKCk7CisJaWYgKHByb2Nlc3MtPnBhc2lkID09IDApCisJ CWdvdG8gZXJyX2FsbG9jX3Bhc2lkOworCisJbXV0ZXhfaW5pdCgmcHJvY2Vzcy0+bXV0ZXgpOwor CisJcHJvY2Vzcy0+bW0gPSB0aHJlYWQtPm1tOworCisJLyogcmVnaXN0ZXIgbm90aWZpZXIgKi8K Kwlwcm9jZXNzLT5tbXVfbm90aWZpZXIub3BzID0gJmtmZF9wcm9jZXNzX21tdV9ub3RpZmllcl9v cHM7CisJZXJyID0gX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoJnByb2Nlc3MtPm1tdV9ub3RpZmll ciwgcHJvY2Vzcy0+bW0pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX21tdV9ub3RpZmllcjsKKwor CWhhc2hfYWRkX3JjdShrZmRfcHJvY2Vzc2VzX3RhYmxlLCAmcHJvY2Vzcy0+a2ZkX3Byb2Nlc3Nl cywgKHVpbnRwdHJfdClwcm9jZXNzLT5tbSk7CisKKwlwcm9jZXNzLT5sZWFkX3RocmVhZCA9IHRo cmVhZC0+Z3JvdXBfbGVhZGVyOworCisJcHJvY2Vzcy0+cXVldWVfYXJyYXlfc2l6ZSA9IElOSVRJ QUxfUVVFVUVfQVJSQVlfU0laRTsKKworCUlOSVRfTElTVF9IRUFEKCZwcm9jZXNzLT5wZXJfZGV2 aWNlX2RhdGEpOworCisJcmV0dXJuIHByb2Nlc3M7CisKK2Vycl9tbXVfbm90aWZpZXI6CisJa2Zk X3Bhc2lkX2ZyZWUocHJvY2Vzcy0+cGFzaWQpOworZXJyX2FsbG9jX3Bhc2lkOgorCWtmcmVlKHBy b2Nlc3MtPnF1ZXVlcyk7CitlcnJfYWxsb2NfcXVldWVzOgorCWtmcmVlKHByb2Nlc3MpOworZXJy X2FsbG9jX3Byb2Nlc3M6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RydWN0IGtmZF9w cm9jZXNzX2RldmljZSAqa2ZkX2dldF9wcm9jZXNzX2RldmljZV9kYXRhKHN0cnVjdCBrZmRfZGV2 ICpkZXYsCisJCQkJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLAorCQkJCQkJCWludCBjcmVhdGVf cGRkKQoreworCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZCA9IE5VTEw7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHBkZCwgJnAtPnBlcl9kZXZpY2VfZGF0YSwgcGVyX2RldmljZV9saXN0 KQorCQlpZiAocGRkLT5kZXYgPT0gZGV2KQorCQkJcmV0dXJuIHBkZDsKKworCWlmIChjcmVhdGVf cGRkKSB7CisJCXBkZCA9IGt6YWxsb2Moc2l6ZW9mKCpwZGQpLCBHRlBfS0VSTkVMKTsKKwkJaWYg KHBkZCAhPSBOVUxMKSB7CisJCQlwZGQtPmRldiA9IGRldjsKKwkJCWxpc3RfYWRkKCZwZGQtPnBl cl9kZXZpY2VfbGlzdCwgJnAtPnBlcl9kZXZpY2VfZGF0YSk7CisJCX0KKwl9CisKKwlyZXR1cm4g cGRkOworfQorCisvKgorICogRGlyZWN0IHRoZSBJT01NVSB0byBiaW5kIHRoZSBwcm9jZXNzIChz cGVjaWZpY2FsbHkgdGhlIHBhc2lkLT5tbSkgdG8gdGhlIGRldmljZS4KKyAqIFVuYmluZGluZyBv Y2N1cnMgd2hlbiB0aGUgcHJvY2VzcyBkaWVzIG9yIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZC4KKyAq CisgKiBBc3N1bWVzIHRoYXQgdGhlIHByb2Nlc3MgbG9jayBpcyBoZWxkLgorICovCitzdHJ1Y3Qg a2ZkX3Byb2Nlc3NfZGV2aWNlICprZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShzdHJ1Y3Qga2Zk X2RldiAqZGV2LAorCQkJCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKK3sKKwlzdHJ1Y3Qga2Zk X3Byb2Nlc3NfZGV2aWNlICpwZGQgPSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoZGV2LCBw LCAxKTsKKworCWlmIChwZGQgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK KwlpZiAocGRkLT5ib3VuZCkKKwkJcmV0dXJuIHBkZDsKKworCXBkZC0+Ym91bmQgPSB0cnVlOwor CisJcmV0dXJuIHBkZDsKK30KKwordm9pZCBrZmRfdW5iaW5kX3Byb2Nlc3NfZnJvbV9kZXZpY2Uo c3RydWN0IGtmZF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHBhc2lkKQoreworCXN0cnVjdCBrZmRf cHJvY2VzcyAqcDsKKwlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQ7CisJaW50IGlkeCwg aTsKKworCUJVR19PTihkZXYgPT0gTlVMTCk7CisKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma2Zk X3Byb2Nlc3Nlc19zcmN1KTsKKworCWhhc2hfZm9yX2VhY2hfcmN1KGtmZF9wcm9jZXNzZXNfdGFi bGUsIGksIHAsIGtmZF9wcm9jZXNzZXMpCisJCWlmIChwLT5wYXNpZCA9PSBwYXNpZCkKKwkJCWJy ZWFrOworCisJc3JjdV9yZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1LCBpZHgpOworCisJ QlVHX09OKHAtPnBhc2lkICE9IHBhc2lkKTsKKworCW11dGV4X2xvY2soJnAtPm11dGV4KTsKKwor CXBkZCA9IGtmZF9nZXRfcHJvY2Vzc19kZXZpY2VfZGF0YShkZXYsIHAsIDApOworCisJLyoKKwkg KiBKdXN0IG1hcmsgcGRkIGFzIHVuYm91bmQsIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCBpdCB0byBj YWxsCisJICogYW1kX2lvbW11X3VuYmluZF9wYXNpZCgpIGluIHdoZW4gdGhlIHByb2Nlc3MgZXhp dHMuCisJICogV2UgZG9uJ3QgY2FsbCBhbWRfaW9tbXVfdW5iaW5kX3Bhc2lkKCkgaGVyZQorCSAq IGJlY2F1c2UgdGhlIElPTU1VIGNhbGxlZCB1cy4KKwkgKi8KKwlpZiAocGRkKQorCQlwZGQtPmJv dW5kID0gZmFsc2U7CisKKwltdXRleF91bmxvY2soJnAtPm11dGV4KTsKK30KKworc3RydWN0IGtm ZF9wcm9jZXNzX2RldmljZSAqa2ZkX2dldF9maXJzdF9wcm9jZXNzX2RldmljZV9kYXRhKHN0cnVj dCBrZmRfcHJvY2VzcyAqcCkKK3sKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmcC0+cGVyX2Rl dmljZV9kYXRhLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlLCBwZXJfZGV2aWNlX2xpc3QpOwor fQorCitzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICprZmRfZ2V0X25leHRfcHJvY2Vzc19kZXZp Y2VfZGF0YShzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2Ug KnBkZCkKK3sKKwlpZiAobGlzdF9pc19sYXN0KCZwZGQtPnBlcl9kZXZpY2VfbGlzdCwgJnAtPnBl cl9kZXZpY2VfZGF0YSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsaXN0X25leHRfZW50cnko cGRkLCBwZXJfZGV2aWNlX2xpc3QpOworfQorCitib29sIGtmZF9oYXNfcHJvY2Vzc19kZXZpY2Vf ZGF0YShzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApCit7CisJcmV0dXJuICEobGlzdF9lbXB0eSgmcC0+ cGVyX2RldmljZV9kYXRhKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L3JhZGVvbl9rZmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jCmluZGV4 IGViYWQ5MzUuLjZhODc4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFk ZW9uX2tmZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2tmZC5jCkBAIC0x NzcsOCArMTc3LDcgQEAgc3RhdGljIHUzMiBwb29sX3RvX2RvbWFpbihlbnVtIGtnZF9tZW1vcnlf cG9vbCBwKQogc3RhdGljIGludCBpbml0X3NhX21hbmFnZXIoc3RydWN0IGtnZF9kZXYgKmtnZCwg dW5zaWduZWQgaW50IHNpemUpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSAoc3Ry dWN0IHJhZGVvbl9kZXZpY2UgKilrZ2Q7Ci0JdTY0IG1heF9vZmZzZXRbNF07Ci0JaW50IHIsIGk7 CisJaW50IHI7CiAKIAlCVUdfT04oa2dkID09IE5VTEwpOwogCkBAIC0xOTEsMjEgKzE5MCw5IEBA IHN0YXRpYyBpbnQgaW5pdF9zYV9tYW5hZ2VyKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVuc2lnbmVk IGludCBzaXplKQogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCS8qIFRyeSB0byBwaW4gYnVmZmVy IGluIGZpcnN0IDhNQiwgMTZNQiBvciA2NE1CIG9mIEdBUlQgKi8KLQltYXhfb2Zmc2V0WzBdID0g cm91bmR1cChzaXplLCA4ICogMTAyNCAqIDEwMjQpOwotCW1heF9vZmZzZXRbMV0gPSByb3VuZHVw KHNpemUsIDE2ICogMTAyNCAqIDEwMjQpOwotCW1heF9vZmZzZXRbMl0gPSByb3VuZHVwKHNpemUs IDY0ICogMTAyNCAqIDEwMjQpOwotCW1heF9vZmZzZXRbM10gPSAwOwotCi0JZm9yIChpID0gMCA7 IGkgPCA0IDsgaSsrKSB7Ci0KLQkJciA9IHJhZGVvbl9zYV9ib19tYW5hZ2VyX3N0YXJ0KHJkZXYs ICZyZGV2LT5rZmRfYm8sCi0JCQkJCQltYXhfb2Zmc2V0W2ldKTsKLQkJaWYgKCFyKQotCQkJcmV0 dXJuIHI7Ci0JfQotCi0JcmFkZW9uX3NhX2JvX21hbmFnZXJfZmluaShyZGV2LCAmcmRldi0+a2Zk X2JvKTsKKwlyID0gcmFkZW9uX3NhX2JvX21hbmFnZXJfc3RhcnQocmRldiwgJnJkZXYtPmtmZF9i byk7CisJaWYgKHIpCisJCXJhZGVvbl9zYV9ib19tYW5hZ2VyX2ZpbmkocmRldiwgJnJkZXYtPmtm ZF9ibyk7CiAKIAlyZXR1cm4gcjsKIH0KLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=