From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 3/8] drm/i915/pmu: Expose a PMU interface for perf queries Date: Mon, 25 Sep 2017 16:15:38 +0100 Message-ID: <20170925151543.7395-4-tvrtko.ursulin@linux.intel.com> References: <20170925151543.7395-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22b.google.com (mail-wm0-x22b.google.com [IPv6:2a00:1450:400c:c09::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id 21DDF6E34A for ; Mon, 25 Sep 2017 15:15:57 +0000 (UTC) Received: by mail-wm0-x22b.google.com with SMTP id m127so11374273wmm.1 for ; Mon, 25 Sep 2017 08:15:57 -0700 (PDT) In-Reply-To: <20170925151543.7395-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyb206IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpGcm9tOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpGcm9tOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0 cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgoKVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUgYWJsZSB0 byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzCndpdGhvdXQgaGF2aW5n IHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNlLiAoV2hpY2ggbm90IG9ubHkgaW5jdXJz CmhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGluZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUg c3lzdGVtLCBidXQgYWxzbwpydW5zIHRoZSByaXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBB cyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQpwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJm YWNlIHRvIHNhbXBsZSB0aGUgcmluZyByZWdpc3RlcnMgcGVyaW9kaWNhbGx5CmFuZCBzZW5kIHRo b3NlIHJlc3VsdHMgdG8gdXNlcnNwYWNlLgoKRnVuY3Rpb25hbGl0eSB3ZSBhcmUgZXhwb3J0aW5n IHRvIHVzZXJzcGFjZSBpcyB2aWEgdGhlIGV4aXN0aW5nIHBlcmYgUE1VCkFQSSBhbmQgY2FuIGJl IGV4ZXJjaXNlZCB2aWEgdGhlIGV4aXN0aW5nIHRvb2xzLiBGb3IgZXhhbXBsZToKCiAgcGVyZiBz dGF0IC1hIC1lIGk5MTUvcmNzMC1idXN5LyAtSSAxMDAwCgpXaWxsIHByaW50IHRoZSByZW5kZXIg ZW5naW5lIGJ1c3lubmVzIG9uY2UgcGVyIHNlY29uZC4gQWxsIHRoZSBwZXJmb3JtYW5jZQpjb3Vu dGVycyBjYW4gYmUgZW51bWVyYXRlZCAocGVyZiBsaXN0KSBhbmQgaGF2ZSB0aGVpciB1bml0IG9m IG1lYXN1cmUKY29ycmVjdGx5IHJlcG9ydGVkIGluIHN5c2ZzLgoKdjEtdjIgKENocmlzIFdpbHNv bik6Cgp2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4KCnYzOiAo VHZydGtvIFVyc3VsaW4pCiAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBpZHMuCiAq IENvbXBsZXRlIHVBUEkgZGVmaW5lcy4KICogUmVmYWN0b3Igc29tZSBjb2RlIHRvIGhlbHBlcnMg Zm9yIGNsYXJpdHkuCiAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5naW5lcy4KICogRXhwb3Nl IGNvdW50ZXJzIGluIHN5c2ZzLgogKiBQYXNzIGluIGZha2UgcmVncyB0byBhdm9pZCBudWxsIHB0 ciBkZXJlZiBpbiBwZXJmIGNvcmUuCiAqIENvbnZlcnQgdG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4K ICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3IgcmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZy ZXF1ZW5jeS4KCnY0OiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmVnaXN0ZXIgUE1VIHdpdGggLnRh c2tfY3R4X25yPXBlcmZfaW52YWxpZF9jb250ZXh0CiAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUg UE1VIHdpdGggdGhlIHNpbmdsZSBDUFUgaW4gdGhlIG1hc2sKICogUHJvcGVybHkgc3VwcG9ydCBw bXUtPnN0b3AoKTogaXQgc2hvdWxkIGNhbGwgcG11LT5yZWFkKCkKICogUHJvcGVybHkgc3VwcG9y dCBwbXUtPmRlbCgpOiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkK ICogSW50cm9kdWNlIHJlZmNvdW50aW5nIG9mIGV2ZW50IHN1YnNjcmlwdGlvbnMuCiAqIE1ha2Ug cG11LmJ1c3lfc3RhdHMgYSByZWZjb3VudGVyIHRvIGF2b2lkIGJ1c3kgc3RhdHMgZ29pbmcgYXdh eQogICB3aXRoIHNvbWUgZGVsZXRlZCBldmVudC4KICogRXhwb3NlIGNwdW1hc2sgZm9yIGk5MTUg UE1VIHRvIGF2b2lkIG11bHRpcGxlIGV2ZW50cyBjcmVhdGlvbiBvZgogICB0aGUgc2FtZSB0eXBl IGZvbGxvd2VkIGJ5IGNvdW50ZXIgYWdncmVnYXRpb24gYnkgcGVyZi1zdGF0LgogKiBUcmFjayBD UFVzIGdldHRpbmcgb25saW5lL29mZmxpbmUgdG8gbWlncmF0ZSBwZXJmIGNvbnRleHQuIElmIChs aWtlbHkpCiAgIGNwdW1hc2sgd2lsbCBpbml0aWFsbHkgc2V0IENQVTAsIENPTkZJR19CT09UUEFS QU1fSE9UUExVR19DUFUwIHdpbGwgYmUKICAgbmVlZGVkIHRvIHNlZSBlZmZlY3Qgb2YgQ1BVIHN0 YXR1cyB0cmFja2luZy4KICogRW5kIHJlc3VsdCBpcyB0aGF0IG9ubHkgZ2xvYmFsIGV2ZW50cyBh cmUgc3VwcG9ydGVkIGFuZCBwZXJmIHN0YXQKICAgd29ya3MgY29ycmVjdGx5LgogKiBEZW55IHBl cmYgZHJpdmVyIGxldmVsIHNhbXBsaW5nIC0gaXQgaXMgcHJvaGliaXRlZCBmb3IgdW5jb3JlIFBN VS4KCnY1OiAoVHZydGtvIFVyc3VsaW4pCgogKiBEb24ndCBoYXJkY29kZSBudW1iZXIgb2YgZW5n aW5lIHNhbXBsZXJzLgogKiBSZXdyaXRlIGV2ZW50IHJlZi1jb3VudGluZyBmb3IgY29ycmVjdG5l c3MgYW5kIHNpbXBsaWNpdHkuCiAqIFN0b3JlIGluaXRpYWwgY291bnRlciB2YWx1ZSB3aGVuIHN0 YXJ0aW5nIGFscmVhZHkgZW5hYmxlZCBldmVudHMKICAgdG8gY29ycmVjdGx5IHJlcG9ydCB2YWx1 ZXMgdG8gYWxsIGxpc3RlbmVycy4KICogRml4IFJDNiByZXNpZGVuY3kgcmVhZG91dC4KICogQ29t bWVudHMsIEdQTCBoZWFkZXIuCgp2NjoKICogQWRkIG1pc3NpbmcgZW50cnkgdG8gdjQgY2hhbmdl bG9nLgogKiBGaXggYWNjb3VudGluZyBpbiBDUFUgaG90cGx1ZyBjYXNlIGJ5IGNvcHlpbmcgdGhl IGFwcHJvYWNoIGZyb20KICAgYXJjaC94ODYvZXZlbnRzL2ludGVsL2NzdGF0ZS5jLiAoRG1pdHJ5 IFJvZ296aGtpbikKCnY3OgogKiBMb2cgZmFpbHVyZSBtZXNzYWdlIG9ubHkgb24gZmFpbHVyZS4K ICogUmVtb3ZlIENQVSBob3RwbHVnIG5vdGlmaWNhdGlvbiBzdGF0ZSBvbiB1bnJlZ2lzdGVyLgoK djg6CiAqIEZpeCBlcnJvciB1bndpbmQgb24gZmFpbGVkIHJlZ2lzdHJhdGlvbi4KICogQ2hlY2tw YXRjaCBjbGVhbnVwLgoKdjk6CiAqIERyb3AgdGhlIGVuZXJneSBtZXRyaWMsIGl0IGlzIGF2YWls YWJsZSB2aWEgaW50ZWxfcmFwbF9wZXJmLgogICAoVmlsbGUgU3lyasOkbMOkKQogKiBVc2UgSEFT X1JDNihwKS4gKENocmlzIFdpbHNvbikKICogSGFuZGxlIHVuc3VwcG9ydGVkIG5vbi1lbmdpbmUg ZXZlbnRzLiAoRG1pdHJ5IFJvZ296aGtpbikKICogUmViYXNlIGZvciBpbnRlbF9yYzZfcmVzaWRl bmN5X25zIG5lZWRpbmcgY2FsbGVyIG1hbmFnZWQKICAgcnVudGltZSBwbS4KICogRHJvcCBIQVNf UkM2IGNoZWNrcyBmcm9tIHRoZSByZWFkIGNhbGxiYWNrIHNpbmNlIGNyZWF0aW5nIHRob3NlCiAg IGV2ZW50cyB3aWxsIGJlIHJlamVjdGVkIGF0IGluaXQgdGltZSBhbHJlYWR5LgogKiBBZGQgY291 bnRlciB1bml0cyB0byBzeXNmcyBzbyBwZXJmIHN0YXQgb3V0cHV0IGlzIG5pY2VyLgogKiBDbGVh bnVwIHRoZSBhdHRyaWJ1dGUgdGFibGVzIGZvciBicmV2aXR5IGFuZCByZWFkYWJpbGl0eS4KCnYx MDoKICogRml4ZWQgcXVldWVkIGFjY291bnRpbmcuCgp2MTE6CiAqIE1vdmUgaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyIHRvIGludGVsX2VuZ2luZV9jcy5jCiAqIENvbW1pdCB1cGRhdGUuIChKb29u YXMgTGFodGluZW4pCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGlu QGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9n b3poa2luQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERt aXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+CkNjOiBQZXRlciBa aWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg ICAgfCAgNzggKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyAgICAgICAgIHwg NzA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlZy5oICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZW5naW5lX2NzLmMgIHwgIDM1ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmggfCAgMjUgKysKIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8 ICA1NyArKysKIDggZmlsZXMgY2hhbmdlZCwgOTA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQppbmRleCA1MTgyZTNkNTU1N2QuLjVjNjAxMzk2MWIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK QEAgLTI2LDYgKzI2LDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAogCiBpOTE1LSQoQ09ORklH X0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIGk5MTUtJChDT05GSUdfREVCVUdfRlMpICs9IGk5 MTVfZGVidWdmcy5vIGludGVsX3BpcGVfY3JjLm8KK2k5MTUtJChDT05GSUdfUEVSRl9FVkVOVFMp ICs9IGk5MTVfcG11Lm8KIAogIyBHRU0gY29kZQogaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5v IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDcwNTZiYjI5OWRjNi4uMDNiYmUyM2U0ZGY4 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTEyMDAsNiArMTIwMCw3IEBAIHN0YXRpYyB2 b2lkIGk5MTVfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07CiAKIAlpOTE1X2dl bV9zaHJpbmtlcl9pbml0KGRldl9wcml2KTsKKwlpOTE1X3BtdV9yZWdpc3RlcihkZXZfcHJpdik7 CiAKIAkvKgogCSAqIE5vdGlmeSBhIHZhbGlkIHN1cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCkBA IC0xMjU0LDYgKzEyNTUsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpbnRlbF9vcHJlZ2lvbl91bnJlZ2lz dGVyKGRldl9wcml2KTsKIAogCWk5MTVfcGVyZl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKwlpOTE1 X3BtdV91bnJlZ2lzdGVyKGRldl9wcml2KTsKIAogCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2X3By aXYpOwogCWk5MTVfZ3VjX2xvZ191bnJlZ2lzdGVyKGRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCmluZGV4IDYxNDNhNzA5YzYwNS4uYTQwYzMxNGVlZDVmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5j bHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5j bHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgogI2lu Y2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4K QEAgLTIxOTgsNiArMjE5OSw3MCBAQCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgewogCXVuc2ln bmVkIGludCBjZGNsaywgdmNvLCByZWY7CiB9OwogCitlbnVtIHsKKwlfX0k5MTVfU0FNUExFX0ZS RVFfQUNUID0gMCwKKwlfX0k5MTVfU0FNUExFX0ZSRVFfUkVRLAorCV9fSTkxNV9OVU1fUE1VX1NB TVBMRVJTCit9OworCisvKioKKyAqIEhvdyBtYW55IGRpZmZlcmVudCBldmVudHMgd2UgdHJhY2sg aW4gdGhlIGdsb2JhbCBQTVUgbWFzay4KKyAqCisgKiBJdCBpcyBhbHNvIHVzZWQgdG8ga25vdyB0 byBuZWVkZWQgbnVtYmVyIG9mIGV2ZW50IHJlZmVyZW5jZSBjb3VudGVycy4KKyAqLworI2RlZmlu ZSBJOTE1X1BNVV9NQVNLX0JJVFMgXAorCSgoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykgKyBc CisJIChJOTE1X1BNVV9MQVNUICsgMSAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpKQorCitzdHJ1Y3Qg aTkxNV9wbXUgeworCS8qKgorCSAqIEBub2RlOiBMaXN0IG5vZGUgZm9yIENQVSBob3RwbHVnIGhh bmRsaW5nLgorCSAqLworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CisJLyoqCisJICogQGJhc2U6 IFBNVSBiYXNlLgorCSAqLworCXN0cnVjdCBwbXUgYmFzZTsKKwkvKioKKwkgKiBAbG9jazogTG9j ayBwcm90ZWN0aW5nIGVuYWJsZSBtYXNrIGFuZCByZWYgY291bnQgaGFuZGxpbmcuCisJICovCisJ c3BpbmxvY2tfdCBsb2NrOworCS8qKgorCSAqIEB0aW1lcjogVGltZXIgZm9yIGludGVybmFsIGk5 MTUgUE1VIHNhbXBsaW5nLgorCSAqLworCXN0cnVjdCBocnRpbWVyIHRpbWVyOworCS8qKgorCSAq IEBlbmFibGU6IEJpdG1hc2sgb2YgYWxsIGN1cnJlbnRseSBlbmFibGVkIGV2ZW50cy4KKwkgKgor CSAqIEJpdHMgYXJlIGRlcml2ZWQgZnJvbSB1QVBJIGV2ZW50IG51bWJlcnMgaW4gYSB3YXkgdGhh dCBsb3cgMTYgYml0cworCSAqIGNvcnJlc3BvbmQgdG8gZW5naW5lIGV2ZW50IF9zYW1wbGVfIF90 eXBlXyAoSTkxNV9TQU1QTEVfUVVFVUVEIGlzCisJICogYml0IDApLCBhbmQgaGlnaGVyIGJpdHMg Y29ycmVzcG9uZCB0byBvdGhlciBldmVudHMgKGZvciBpbnN0YW5jZQorCSAqIEk5MTVfUE1VX0FD VFVBTF9GUkVRVUVOQ1kgaXMgYml0IDE2IGV0YykuCisJICoKKwkgKiBJbiBvdGhlciB3b3Jkcywg bG93IDE2IGJpdHMgYXJlIG5vdCBwZXIgZW5naW5lIGJ1dCBwZXIgZW5naW5lCisJICogc2FtcGxl ciB0eXBlLCB3aGlsZSB0aGUgdXBwZXIgYml0cyBhcmUgZGlyZWN0bHkgbWFwcGVkIHRvIG90aGVy CisJICogZXZlbnQgdHlwZXMuCisJICovCisJdTY0IGVuYWJsZTsKKwkvKioKKwkgKiBAZW5hYmxl X2NvdW50OiBSZWZlcmVuY2UgY291bnRzIGZvciB0aGUgZW5hYmxlZCBldmVudHMuCisJICoKKwkg KiBBcnJheSBpbmRpY2VzIGFyZSBtYXBwZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGJpdHMgaW4gdGhl IEBlbmFibGUgZmllbGQKKwkgKiBhbmQgdGhleSBhcmUgdXNlZCB0byBjb250cm9sIHNhbXBsaW5n IG9uL29mZiB3aGVuIG11bHRpcGxlIGNsaWVudHMKKwkgKiBhcmUgdXNpbmcgdGhlIFBNVSBBUEku CisJICovCisJdW5zaWduZWQgaW50IGVuYWJsZV9jb3VudFtJOTE1X1BNVV9NQVNLX0JJVFNdOwor CS8qKgorCSAqIEBzYW1wbGU6IEN1cnJlbnQgY291bnRlciB2YWx1ZSBmb3IgaTkxNSBldmVudHMg d2hpY2ggbmVlZCBzYW1wbGluZy4KKwkgKgorCSAqIFRoZXNlIGNvdW50ZXJzIGFyZSB1cGRhdGVk IGZyb20gdGhlIGk5MTUgUE1VIHNhbXBsaW5nIHRpbWVyLgorCSAqCisJICogT25seSBnbG9iYWwg Y291bnRlcnMgYXJlIGhlbGQgaGVyZSwgd2hpbGUgdGhlIHBlci1lbmdpbmUgb25lcyBhcmUgaW4K KwkgKiBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzLgorCSAqLworCXU2NCBzYW1wbGVbX19JOTE1X05V TV9QTVVfU0FNUExFUlNdOworfTsKKwogc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0cnVj dCBkcm1fZGV2aWNlIGRybTsKIApAQCAtMjI0Niw2ICsyMzExLDggQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2VfZGV2OwogCXN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICprZXJuZWxfY29udGV4dDsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmVbSTkxNV9OVU1fRU5HSU5FU107CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lX2Ns YXNzW01BWF9FTkdJTkVfQ0xBU1MgKyAxXQorCQkJCQkgICAgW01BWF9FTkdJTkVfSU5TVEFOQ0Ug KyAxXTsKIAlzdHJ1Y3QgaTkxNV92bWEgKnNlbWFwaG9yZTsKIAogCXN0cnVjdCBkcm1fZG1hX2hh bmRsZSAqc3RhdHVzX3BhZ2VfZG1haDsKQEAgLTI3MDgsNiArMjc3NSw4IEBAIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsKIAkJaW50CWlycTsKIAl9IGxwZV9hdWRpbzsKIAorCXN0cnVjdCBpOTE1 X3BtdSBwbXU7CisKIAkvKgogCSAqIE5PVEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24s IGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZb3VyIHBhdGNoCiAJICogd2lsbCBiZSByZWplY3RlZC4g SW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBwbGFjZS4KQEAgLTM5MzIsNiArNDAwMSwxNSBAQCBl eHRlcm4gdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCBpOTE1X3BlcmZfdW5yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCisvKiBpOTE1X3BtdS5jICovCisjaWZkZWYg Q09ORklHX1BFUkZfRVZFTlRTCit2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KTsKK3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcG11X3Jl Z2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KSB7fQorc3RhdGljIGlubGluZSB2 b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9 CisjZW5kaWYKKwogLyogaTkxNV9zdXNwZW5kLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9zYXZlX3N0 YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gaW50IGk5MTVf cmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j ZjE0MDZmYmMyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BtdS5jCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRl bF9yaW5nYnVmZmVyLmgiCisKKy8qIEZyZXF1ZW5jeSBmb3IgdGhlIHNhbXBsaW5nIHRpbWVyIGZv ciBldmVudHMgd2hpY2ggbmVlZCBpdC4gKi8KKyNkZWZpbmUgRlJFUVVFTkNZIDIwMAorI2RlZmlu ZSBQRVJJT0QgbWF4X3QodTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQorCisj ZGVmaW5lIEVOR0lORV9TQU1QTEVfTUFTSyBcCisJKEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpIHwg XAorCSBCSVQoSTkxNV9TQU1QTEVfQlVTWSkgfCBcCisJIEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8 IFwKKwkgQklUKEk5MTVfU0FNUExFX1NFTUEpKQorCisjZGVmaW5lIEVOR0lORV9TQU1QTEVfQklU UyAoMSA8PCBJOTE1X1BNVV9TQU1QTEVfQklUUykKKworc3RhdGljIGNwdW1hc2tfdCBpOTE1X3Bt dV9jcHVtYXNrID0gQ1BVX01BU0tfTk9ORTsKKworc3RhdGljIHU4IGVuZ2luZV9jb25maWdfc2Ft cGxlKHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyAmIEk5MTVfUE1VX1NBTVBMRV9NQVNL OworfQorCitzdGF0aWMgdTggZW5naW5lX2V2ZW50X3NhbXBsZShzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQpCit7CisJcmV0dXJuIGVuZ2luZV9jb25maWdfc2FtcGxlKGV2ZW50LT5hdHRyLmNvbmZp Zyk7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfY2xhc3Moc3RydWN0IHBlcmZfZXZlbnQg KmV2ZW50KQoreworCXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmlnID4+IEk5MTVfUE1VX0NMQVNT X1NISUZUKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfaW5zdGFuY2Uoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmlnID4+ IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBib29sIGlzX2VuZ2lu ZV9jb25maWcodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnIDwgX19JOTE1X1BNVV9PVEhF UigwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjb25maWdfZW5hYmxlZF9iaXQodTY0IGNv bmZpZykKK3sKKwlpZiAoaXNfZW5naW5lX2NvbmZpZyhjb25maWcpKQorCQlyZXR1cm4gZW5naW5l X2NvbmZpZ19zYW1wbGUoY29uZmlnKTsKKwllbHNlCisJCXJldHVybiBFTkdJTkVfU0FNUExFX0JJ VFMgKyAoY29uZmlnIC0gX19JOTE1X1BNVV9PVEhFUigwKSk7Cit9CisKK3N0YXRpYyB1NjQgY29u ZmlnX2VuYWJsZWRfbWFzayh1NjQgY29uZmlnKQoreworCXJldHVybiBCSVRfVUxMKGNvbmZpZ19l bmFibGVkX2JpdChjb25maWcpKTsKK30KKworc3RhdGljIGJvb2wgaXNfZW5naW5lX2V2ZW50KHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gaXNfZW5naW5lX2NvbmZpZyhldmVu dC0+YXR0ci5jb25maWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGV2ZW50X2VuYWJsZWRf Yml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gY29uZmlnX2VuYWJsZWRf Yml0KGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyBib29sIGdyYWJfZm9yY2V3YWtl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBib29sIGZ3KQoreworCWlmICghZncpCisJ CWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGk5MTUsIEZPUkNFV0FLRV9BTEwpOworCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGVuZ2luZXNfc2FtcGxlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisJYm9vbCBmdyA9IGZhbHNlOworCisJaWYgKChk ZXZfcHJpdi0+cG11LmVuYWJsZSAmIEVOR0lORV9TQU1QTEVfTUFTSykgPT0gMCkKKwkJcmV0dXJu OworCisJaWYgKCFkZXZfcHJpdi0+Z3QuYXdha2UpCisJCXJldHVybjsKKworCWlmICghaW50ZWxf cnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkKKwkJcmV0dXJuOworCisJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7CisJCXUzMiBjdXJyZW50X3NlcW5vID0g aW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpOworCQl1MzIgbGFzdF9zZXFubyA9IGludGVs X2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUpOworCQl1MzIgZW5hYmxlID0gZW5naW5lLT5wbXUu ZW5hYmxlOworCisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChjdXJyZW50X3NlcW5vLCBsYXN0X3Nl cW5vKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1FV RVVFRCkpICYmCisJCSAgICAobGFzdF9zZXFubyAtIDEgPiBjdXJyZW50X3NlcW5vKSkKKwkJCWVu Z2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9RVUVVRURdICs9IFBFUklPRDsKKworCQlpZiAo ZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX0JVU1kpKSB7CisJCQl1MzIgdmFsOworCisJCQlmdyA9 IGdyYWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7CisJCQl2YWwgPSBJOTE1X1JFQURfRlcoUklO R19NSV9NT0RFKGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCQlpZiAoISh2YWwgJiBNT0RFX0lETEUp KQorCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSArPSBQRVJJT0Q7CisJ CX0KKworCQlpZiAoZW5hYmxlICYgKEJJVChJOTE1X1NBTVBMRV9XQUlUKSB8IEJJVChJOTE1X1NB TVBMRV9TRU1BKSkpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2 X3ByaXYsIGZ3KTsKKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NUTChlbmdpbmUtPm1taW9f YmFzZSkpOworCQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfV0FJVCkpICYmCisJCQkg ICAgKHZhbCAmIFJJTkdfV0FJVCkpCisJCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExF X1dBSVRdICs9IFBFUklPRDsKKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1NFTUEp KSAmJgorCQkJICAgICh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSkKKwkJCQllbmdpbmUtPnBt dS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0gKz0gUEVSSU9EOworCQl9CisJfQorCisJaWYgKGZ3 KQorCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7 CisJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworfQorCitzdGF0aWMgdm9pZCBmcmVx dWVuY3lfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAo ZGV2X3ByaXYtPnBtdS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1V X0FDVFVBTF9GUkVRVUVOQ1kpKSB7CisJCXU2NCB2YWw7CisKKwkJdmFsID0gZGV2X3ByaXYtPnJw cy5jdXJfZnJlcTsKKwkJaWYgKGRldl9wcml2LT5ndC5hd2FrZSAmJgorCQkgICAgaW50ZWxfcnVu dGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkgeworCQkJdmFsID0gaW50ZWxfZ2V0X2Nh Z2YoZGV2X3ByaXYsCisJCQkJCSAgICAgSTkxNV9SRUFEX05PVFJBQ0UoR0VONl9SUFNUQVQxKSk7 CisJCQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CisJCX0KKwkJdmFsID0gaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7CisJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9T QU1QTEVfRlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPnBt dS5lbmFibGUgJgorCSAgICBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9G UkVRVUVOQ1kpKSB7CisJCXU2NCB2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgZGV2X3By aXYtPnJwcy5jdXJfZnJlcSk7CisKKwkJZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBM RV9GUkVRX1JFUV0gKz0gdmFsICogUEVSSU9EOworCX0KK30KKworc3RhdGljIGVudW0gaHJ0aW1l cl9yZXN0YXJ0IGk5MTVfc2FtcGxlKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlLCBwbXUudGltZXIpOworCisJaWYgKGk5MTUtPnBtdS5lbmFibGUg PT0gMCkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCisJZW5naW5lc19zYW1wbGUoaTkx NSk7CisJZnJlcXVlbmN5X3NhbXBsZShpOTE1KTsKKworCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0 aW1lciwgbnNfdG9fa3RpbWUoUEVSSU9EKSk7CisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKK30K Kworc3RhdGljIHU2NCBjb3VudF9pbnRlcnJ1cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQoreworCS8qIG9wZW4tY29kZWQga3N0YXRfaXJxcygpICovCisJc3RydWN0IGlycV9kZXNj ICpkZXNjID0gaXJxX3RvX2Rlc2MoaTkxNS0+ZHJtLnBkZXYtPmlycSk7CisJdTY0IHN1bSA9IDA7 CisJaW50IGNwdTsKKworCWlmICghZGVzYyB8fCAhZGVzYy0+a3N0YXRfaXJxcykKKwkJcmV0dXJu IDA7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlzdW0gKz0gKnBlcl9jcHVfcHRy KGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7CisKKwlyZXR1cm4gc3VtOworfQorCitzdGF0aWMgdm9p ZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlX QVJOX09OKGV2ZW50LT5wYXJlbnQpOworfQorCitzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0 KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFz ZSk7CisKKwlpZiAoIWludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LCBlbmdpbmVfZXZlbnRf Y2xhc3MoZXZlbnQpLAorCQkJCSAgICAgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpKQor CQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCkp IHsKKwljYXNlIEk5MTVfU0FNUExFX1FVRVVFRDoKKwljYXNlIEk5MTVfU0FNUExFX0JVU1k6CisJ Y2FzZSBJOTE1X1NBTVBMRV9XQUlUOgorCQlicmVhazsKKwljYXNlIEk5MTVfU0FNUExFX1NFTUE6 CisJCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50 LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwlpbnQgY3B1LCByZXQ7CisKKwlpZiAo ZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQorCQlyZXR1cm4gLUVOT0VOVDsK KworCS8qIHVuc3VwcG9ydGVkIG1vZGVzIGFuZCBmaWx0ZXJzICovCisJaWYgKGV2ZW50LT5hdHRy LnNhbXBsZV9wZXJpb2QpIC8qIG5vIHNhbXBsaW5nICovCisJCXJldHVybiAtRUlOVkFMOworCisJ aWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlp ZiAoZXZlbnQtPmNwdSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3B1ID0gY3B1bWFza19h bnlfYW5kKCZpOTE1X3BtdV9jcHVtYXNrLAorCQkJICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVt YXNrKGV2ZW50LT5jcHUpKTsKKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCXJldHVybiAtRU5P REVWOworCisJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsKKwkJcmV0ID0gZW5naW5lX2V2 ZW50X2luaXQoZXZlbnQpOworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJCXN3aXRjaCAoZXZlbnQt PmF0dHIuY29uZmlnKSB7CisJCWNhc2UgSTkxNV9QTVVfSU5URVJSVVBUUzoKKwkJCWJyZWFrOwor CQljYXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6CisJCQlpZiAoSVNfVkFMTEVZVklFVyhp OTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQorCQkJCSAvKiBSZXF1aXJlcyBhIG11dGV4IGZv ciBzYW1wbGluZyEgKi8KKwkJCQlyZXQgPSAtRU5PREVWOworCQljYXNlIEk5MTVfUE1VX1JFUVVF U1RFRF9GUkVRVUVOQ1k6CisJCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJCQlyZXQgPSAt RU5PREVWOworCQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfUkM2X1JFU0lERU5DWToKKwkJCWlm ICghSEFTX1JDNihpOTE1KSkKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCWNhc2Ug STkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6CisJCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZ OgorCQkJaWYgKCFIQVNfUkM2cChpOTE1KSkKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWV2ZW50LT5jcHUgPSBjcHU7CisJaWYgKCFldmVudC0+ cGFyZW50KQorCQlldmVudC0+ZGVzdHJveSA9IGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3k7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBfX2k5MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJ Y29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKwl1NjQg dmFsID0gMDsKKworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9 IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJ CQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0 YW5jZShldmVudCkpOworCisJCWlmIChXQVJOX09OX09OQ0UoIWVuZ2luZSkpIHsKKwkJCS8qIERv IG5vdGhpbmcgKi8KKwkJfSBlbHNlIHsKKwkJCXZhbCA9IGVuZ2luZS0+cG11LnNhbXBsZVtzYW1w bGVdOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsKKwkJ Y2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQkJdmFsID0gaTkxNS0+cG11LnNhbXBs ZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXTsKKwkJCWJyZWFrOworCQljYXNlIEk5MTVfUE1VX1JF UVVFU1RFRF9GUkVRVUVOQ1k6CisJCQl2YWwgPSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1Q TEVfRlJFUV9SRVFdOworCQkJYnJlYWs7CisJCWNhc2UgSTkxNV9QTVVfSU5URVJSVVBUUzoKKwkJ CXZhbCA9IGNvdW50X2ludGVycnVwdHMoaTkxNSk7CisJCQlicmVhazsKKwkJY2FzZSBJOTE1X1BN VV9SQzZfUkVTSURFTkNZOgorCQkJaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7CisJCQl2YWwg PSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsCisJCQkJCQkgICAgIElTX1ZBTExFWVZJRVco aTkxNSkgPworCQkJCQkJICAgICBWTFZfR1RfUkVOREVSX1JDNiA6CisJCQkJCQkgICAgIEdFTjZf R1RfR0ZYX1JDNik7CisJCQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1KTsKKwkJCWJyZWFrOwor CQljYXNlIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZOgorCQkJaW50ZWxfcnVudGltZV9wbV9nZXQo aTkxNSk7CisJCQl2YWwgPSBpbnRlbF9yYzZfcmVzaWRlbmN5X25zKGk5MTUsIEdFTjZfR1RfR0ZY X1JDNnApOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7CisJCQlicmVhazsKKwkJY2Fz ZSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1k6CisJCQlpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1 KTsKKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwgR0VONl9HVF9HRlhfUkM2 cHApOworCQkJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7CisJCQlicmVhazsKKwkJfQorCX0K KworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3JlYWQoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAm ZXZlbnQtPmh3OworCXU2NCBwcmV2LCBuZXc7CisKK2FnYWluOgorCXByZXYgPSBsb2NhbDY0X3Jl YWQoJmh3Yy0+cHJldl9jb3VudCk7CisJbmV3ID0gX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50 KTsKKworCWlmIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbmV3KSAh PSBwcmV2KQorCQlnb3RvIGFnYWluOworCisJbG9jYWw2NF9hZGQobmV3IC0gcHJldiwgJmV2ZW50 LT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250 YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVk IGludCBiaXQgPSBldmVudF9lbmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJLyoK KwkgKiBTdGFydCB0aGUgc2FtcGxpbmcgdGltZXIgd2hlbiBlbmFibGluZyB0aGUgZmlyc3QgZXZl bnQuCisJICovCisJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJaHJ0aW1lcl9zdGFydF9y YW5nZV9ucygmaTkxNS0+cG11LnRpbWVyLAorCQkJCSAgICAgICBuc190b19rdGltZShQRVJJT0Qp LCAwLAorCQkJCSAgICAgICBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwkvKgorCSAqIFVw ZGF0ZSB0aGUgYml0bWFzayBvZiBlbmFibGVkIGV2ZW50cyBhbmQgaW5jcmVtZW50CisJICogdGhl IGV2ZW50IHJlZmVyZW5jZSBjb3VudGVyLgorCSAqLworCUdFTV9CVUdfT04oYml0ID49IEk5MTVf UE1VX01BU0tfQklUUyk7CisJR0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0g PT0gfjApOworCWk5MTUtPnBtdS5lbmFibGUgfD0gQklUX1VMTChiaXQpOworCWk5MTUtPnBtdS5l bmFibGVfY291bnRbYml0XSsrOworCisJLyoKKwkgKiBGb3IgcGVyLWVuZ2luZSBldmVudHMgdGhl IGJpdG1hc2sgYW5kIHJlZmVyZW5jZSBjb3VudGluZworCSAqIGlzIHN0b3JlZCBwZXIgZW5naW5l LgorCSAqLworCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVu Z2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7CisKKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkg IGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5j ZShldmVudCkpOworCQlHRU1fQlVHX09OKCFlbmdpbmUpOworCQllbmdpbmUtPnBtdS5lbmFibGUg fD0gQklUKHNhbXBsZSk7CisKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExF X0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09 IH4wKTsKKwkJZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0rKzsKKwl9CisKKwkvKgor CSAqIFN0b3JlIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgc28gd2UgY2FuIHJlcG9ydCB0aGUg Y29ycmVjdCBkZWx0YQorCSAqIGZvciBhbGwgbGlzdGVuZXJzLiBFdmVuIHdoZW4gdGhlIGV2ZW50 IHdhcyBhbHJlYWR5IGVuYWJsZWQgYW5kIGhhcworCSAqIGFuIGV4aXN0aW5nIG5vbi16ZXJvIHZh bHVlLgorCSAqLworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgX19pOTE1X3Bt dV9ldmVudF9yZWFkKGV2ZW50KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5w bXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9kaXNhYmxlKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 CisJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJ dW5zaWduZWQgaW50IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50KTsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7 CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVf ZXZlbnRfc2FtcGxlKGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CisJCWVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdp bmVfZXZlbnRfY2xhc3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZl bnQpKTsKKwkJR0VNX0JVR19PTighZW5naW5lKTsKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkx NV9QTVVfU0FNUExFX0JJVFMpOworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3Vu dFtzYW1wbGVdID09IDApOworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3Vu dCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3Rl bmVyIG9uIGFuIGV2ZW50IGdvZXMgYXdheS4KKwkJICovCisJCWlmICgtLWVuZ2luZS0+cG11LmVu YWJsZV9jb3VudFtzYW1wbGVdID09IDApCisJCQllbmdpbmUtPnBtdS5lbmFibGUgJj0gfkJJVChz YW1wbGUpOworCX0KKworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklUUyk7CisJ R0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCk7CisJLyoKKwkgKiBE ZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkgKiBi aXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQgZ29lcyBhd2F5LgorCSAq LworCWlmICgtLWk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAwKQorCQlpOTE1LT5wbXUu ZW5hYmxlICY9IH5CSVRfVUxMKGJpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1 LT5wbXUubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdGFy dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9lbmFi bGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVf cG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJ aWYgKGZsYWdzICYgUEVSRl9FRl9VUERBVEUpCisJCWk5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQp OworCWk5MTVfcG11X2Rpc2FibGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IFBFUkZfSEVT X1NUT1BQRUQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQp CisJCWk5MTVfcG11X2V2ZW50X3N0YXJ0KGV2ZW50LCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCwgaW50IGZsYWdzKQoreworCWk5MTVfcG11X2V2ZW50X3N0b3AoZXZlbnQsIFBFUkZfRUZfVVBE QVRFKTsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHgoc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpOTE1 X3BtdV9mb3JtYXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldl9leHRfYXR0cmli dXRlICplYXR0cjsKKworCWVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0 X2F0dHJpYnV0ZSwgYXR0cik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjaGFyICop ZWF0dHItPnZhcik7Cit9CisKKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIoX25hbWUsIF9j b25maWcpIFwKKwkoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRy ID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVMTCksIFwKKwkJ ICAudmFyID0gKHZvaWQgKilfY29uZmlnLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKK3N0YXRp YyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsKKwlJOTE1X1BN VV9GT1JNQVRfQVRUUihpOTE1X2V2ZW50aWQsICJjb25maWc6MC00MiIpLAorCU5VTEwsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9mb3JtYXRfYXR0 cl9ncm91cCA9IHsKKwkubmFtZSA9ICJmb3JtYXQiLAorCS5hdHRycyA9IGk5MTVfcG11X2Zvcm1h dF9hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2V2ZW50X3Nob3coc3RydWN0 IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCit7CisJc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworCWVhdHRyID0g Y29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7CisJcmV0 dXJuIHNwcmludGYoYnVmLCAiY29uZmlnPTB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyllYXR0ci0+ dmFyKTsKK30KKworI2RlZmluZSBJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpIFwKKwko Jigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19BVFRSKF9u YW1lLCAwNDQ0LCBpOTE1X3BtdV9ldmVudF9zaG93LCBOVUxMKSwgXAorCQkgIC52YXIgPSAodm9p ZCAqKV9jb25maWcsIH0gXAorCX0pWzBdLmF0dHIuYXR0cikKKworI2RlZmluZSBJOTE1X0VWRU5U X1NUUihfbmFtZSwgX3N0cikgXAorCSgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHJbXSkg eyBcCisJCXsgLmF0dHIJICAgICA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgcGVyZl9ldmVudF9zeXNm c19zaG93LCBOVUxMKSwgXAorCQkgIC5pZAkgICAgID0gMCwgXAorCQkgIC5ldmVudF9zdHIgPSBf c3RyLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVChfbmFtZSwg X2NvbmZpZywgX3VuaXQpIFwKKwlJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpLCBcCisJ STkxNV9FVkVOVF9TVFIoX25hbWUudW5pdCwgX3VuaXQpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVf RVZFTlQoX25hbWUsIF9jbGFzcywgX2luc3RhbmNlLCBfc2FtcGxlKSBcCisJSTkxNV9FVkVOVF9B VFRSKF9uYW1lLCBfX0k5MTVfUE1VX0VOR0lORShfY2xhc3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkp LCBcCisJSTkxNV9FVkVOVF9TVFIoX25hbWUudW5pdCwgIm5zIikKKworI2RlZmluZSBJOTE1X0VO R0lORV9FVkVOVFMoX25hbWUsIF9jbGFzcywgX2luc3RhbmNlKSBcCisJSTkxNV9FTkdJTkVfRVZF TlQoX25hbWUjI19pbnN0YW5jZS1xdWV1ZWQsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBM RV9RVUVVRUQpLCBcCisJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19pbnN0YW5jZS1idXN5LCBf Y2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfQlVTWSksIFwKKwlJOTE1X0VOR0lORV9FVkVO VChfbmFtZSMjX2luc3RhbmNlLXNlbWEsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1X1NBTVBMRV9T RU1BKSwgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2Utd2FpdCwgX2NsYXNz LCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX1dBSVQpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICppOTE1X3BtdV9ldmVudHNfYXR0cnNbXSA9IHsKKwlJOTE1X0VOR0lORV9FVkVOVFMocmNzLCBJ OTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApLAorCUk5MTVfRU5HSU5FX0VWRU5UUyhiY3MsIEk5 MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2Y3MsIEk5MTVf RU5HSU5FX0NMQVNTX1ZJREVPLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmNzLCBJOTE1X0VO R0lORV9DTEFTU19WSURFTywgMSksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZlY3MsIEk5MTVfRU5H SU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApLAorCisJSTkxNV9FVkVOVChhY3R1YWwtZnJlcXVl bmN5LCAgICBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZLCAgICAiSHoiKSwKKwlJOTE1X0VWRU5U KHJlcXVlc3RlZC1mcmVxdWVuY3ksIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1ksICJIeiIp LAorCisJSTkxNV9FVkVOVF9BVFRSKGludGVycnVwdHMsIEk5MTVfUE1VX0lOVEVSUlVQVFMpLAor CisJSTkxNV9FVkVOVChyYzYtcmVzaWRlbmN5LCAgIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1ksICAg Im5zIiksCisJSTkxNV9FVkVOVChyYzZwLXJlc2lkZW5jeSwgIEk5MTVfUE1VX1JDNnBfUkVTSURF TkNZLCAgIm5zIiksCisJSTkxNV9FVkVOVChyYzZwcC1yZXNpZGVuY3ksIEk5MTVfUE1VX1JDNnBw X1JFU0lERU5DWSwgIm5zIiksCisKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAi ZXZlbnRzIiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9ldmVudHNfYXR0cnMsCit9OworCitzdGF0aWMg c3NpemVfdAoraTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJ CQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJ cmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgJmk5MTVfcG11X2NwdW1h c2spOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywgMDQ0NCwgaTkxNV9wbXVfZ2V0 X2F0dHJfY3B1bWFzaywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X2Nw dW1hc2tfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY3B1bWFzay5hdHRyLAorCU5VTEwsCit9Owor CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9jcHVtYXNrX2F0dHJfZ3Jv dXAgPSB7CisJLmF0dHJzID0gaTkxNV9jcHVtYXNrX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJfZ3JvdXBzW10gPSB7CisJJmk5 MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwK KwkmaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQg aTkxNV9wbXVfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAq bm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJdGFyZ2V0ID0gY3B1bWFza19hbnlf YW5kKCZpOTE1X3BtdV9jcHVtYXNrLCAmaTkxNV9wbXVfY3B1bWFzayk7CisJLyogU2VsZWN0IHRo ZSBmaXJzdCBvbmxpbmUgQ1BVIGFzIGEgZGVzaWduYXRlZCByZWFkZXIuICovCisJaWYgKHRhcmdl dCA+PSBucl9jcHVfaWRzKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmaTkxNV9wbXVfY3B1bWFz ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9jcHVfb2ZmbGluZSh1 bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaTkx NV9wbXUgKnBtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsK Kwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJaWYgKGNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1 KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spKSB7CisJCXRhcmdldCA9IGNwdW1hc2tfYW55X2J1dCh0 b3BvbG9neV9zaWJsaW5nX2NwdW1hc2soY3B1KSwgY3B1KTsKKwkJLyogTWlncmF0ZSBldmVudHMg aWYgdGhlcmUgaXMgYSB2YWxpZCB0YXJnZXQgKi8KKwkJaWYgKHRhcmdldCA8IG5yX2NwdV9pZHMp IHsKKwkJCWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkJCXBl cmZfcG11X21pZ3JhdGVfY29udGV4dCgmcG11LT5iYXNlLCBjcHUsIHRhcmdldCk7CisJCX0KKwl9 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlpbnQgcmV0OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8 PSAyKSB7CisJCURSTV9JTkZPKCJQTVUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBHUFUuIik7CisJ CXJldHVybjsKKwl9CisKKwlyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9Q RVJGX1g4Nl9VTkNPUkVfT05MSU5FLAorCQkJCSAgICAgICJwZXJmL3g4Ni9pbnRlbC9pOTE1Om9u bGluZSIsCisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29ubGluZSwKKwkJCQkgICAgICBpOTE1X3Bt dV9jcHVfb2ZmbGluZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaHBfc3RhdGU7CisKKwlyZXQg PSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElO RSwKKwkJCQkgICAgICAgJmk5MTUtPnBtdS5ub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9o cF9pbnN0YW5jZTsKKworCWk5MTUtPnBtdS5iYXNlLmF0dHJfZ3JvdXBzCT0gaTkxNV9wbXVfYXR0 cl9ncm91cHM7CisJaTkxNS0+cG11LmJhc2UudGFza19jdHhfbnIJPSBwZXJmX2ludmFsaWRfY29u dGV4dDsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0CT0gaTkxNV9wbXVfZXZlbnRfaW5pdDsK KwlpOTE1LT5wbXUuYmFzZS5hZGQJCT0gaTkxNV9wbXVfZXZlbnRfYWRkOworCWk5MTUtPnBtdS5i YXNlLmRlbAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7CisJaTkxNS0+cG11LmJhc2Uuc3RhcnQJCT0g aTkxNV9wbXVfZXZlbnRfc3RhcnQ7CisJaTkxNS0+cG11LmJhc2Uuc3RvcAkJPSBpOTE1X3BtdV9l dmVudF9zdG9wOworCWk5MTUtPnBtdS5iYXNlLnJlYWQJCT0gaTkxNV9wbXVfZXZlbnRfcmVhZDsK KwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pZHgJPSBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHg7CisK KwlzcGluX2xvY2tfaW5pdCgmaTkxNS0+cG11LmxvY2spOworCWhydGltZXJfaW5pdCgmaTkxNS0+ cG11LnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWk5MTUtPnBt dS50aW1lci5mdW5jdGlvbiA9IGk5MTVfc2FtcGxlOworCWk5MTUtPnBtdS5lbmFibGUgPSAwOwor CisJcmV0ID0gcGVyZl9wbXVfcmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlLCAiaTkxNSIsIC0xKTsK KwlpZiAocmV0ID09IDApCisJCXJldHVybjsKKworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQg PSBOVUxMOworCisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBf UEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJCQkJICAgICZpOTE1LT5wbXUubm9kZSkpOworCitl cnJfaHBfaW5zdGFuY2U6CisJY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX0FQX1BFUkZf WDg2X1VOQ09SRV9PTkxJTkUpOworCitlcnJfaHBfc3RhdGU6CisJRFJNX05PVEUoIkZhaWxlZCB0 byByZWdpc3RlciBQTVUhIChlcnI9JWQpXG4iLCByZXQpOworfQorCit2b2lkIGk5MTVfcG11X3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKCFpOTE1LT5w bXUuYmFzZS5ldmVudF9pbml0KQorCQlyZXR1cm47CisKKwlXQVJOX09OKGNwdWhwX3N0YXRlX3Jl bW92ZV9pbnN0YW5jZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FLAorCQkJCQkgICAg Jmk5MTUtPnBtdS5ub2RlKSk7CisJY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX0FQX1BF UkZfWDg2X1VOQ09SRV9PTkxJTkUpOworCisJaTkxNS0+cG11LmVuYWJsZSA9IDA7CisKKwlocnRp bWVyX2NhbmNlbCgmaTkxNS0+cG11LnRpbWVyKTsKKworCXBlcmZfcG11X3VucmVnaXN0ZXIoJmk5 MTUtPnBtdS5iYXNlKTsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDgyZjM2ZGQwY2Q5NC4uMTZlMzZiMmVlZjg3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBzdGF0aWMgaW5saW5lIGJv b2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykKICNkZWZpbmUgVklERU9fRU5I QU5DRU1FTlRfQ0xBU1MJMgogI2RlZmluZSBDT1BZX0VOR0lORV9DTEFTUwkzCiAjZGVmaW5lIE9U SEVSX0NMQVNTCQk0CisjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJNAorCisjZGVmaW5lIE1BWF9F TkdJTkVfSU5TVEFOQ0UgICAgMQogCiAvKiBQQ0kgY29uZmlnIHNwYWNlICovCiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggYTI4ZTJhODY0Y2YxLi4zNWMxMTdjM2Zh MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCkBAIC0yMDAsNiArMjAw LDE1IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAJR0VNX0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2luZV9j bGFzc2VzKSk7CiAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFz c107CiAKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+aW5zdGFuY2UgPiBN QVhfRU5HSU5FX0lOU1RBTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5f T04oZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKIAlHRU1fQlVHX09OKGRldl9wcml2LT5lbmdpbmVbaWRdKTsK IAllbmdpbmUgPSBremFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFl bmdpbmUpCkBAIC0yMjcsNiArMjM2LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmVu Z2luZS0+Y29udGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCisJZGV2X3ByaXYtPmVuZ2luZV9jbGFz c1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOwogCWRldl9wcml2LT5lbmdp bmVbaWRdID0gZW5naW5lOwogCXJldHVybiAwOwogfQpAQCAtMTU3OCw2ICsxNTg4LDMxIEBAIGJv b2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAJfQogfQogCitzdGF0aWMgdTggdXNlcl9jbGFzc19tYXBbSTkxNV9FTkdJTkVfQ0xB U1NfTUFYXSA9IHsKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfT1RIRVJdID0gT1RIRVJfQ0xBU1MsCisJ W0k5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUl0gPSBSRU5ERVJfQ0xBU1MsCisJW0k5MTVfRU5HSU5F X0NMQVNTX0NPUFldID0gQ09QWV9FTkdJTkVfQ0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJ REVPXSA9IFZJREVPX0RFQ09ERV9DTEFTUywKKwlbSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5I QU5DRV0gPSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUywKK307CisKK3N0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKgoraW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LCB1OCBjbGFzcywgdTggaW5zdGFuY2UpCit7CisJaWYgKGNsYXNzID49IEFSUkFZX1NJ WkUodXNlcl9jbGFzc19tYXApKQorCQlyZXR1cm4gTlVMTDsKKworCWNsYXNzID0gdXNlcl9jbGFz c19tYXBbY2xhc3NdOworCisJaWYgKFdBUk5fT05fT05DRShjbGFzcyA+IE1BWF9FTkdJTkVfQ0xB U1MpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChpbnN0YW5jZSA+IE1BWF9FTkdJTkVfSU5TVEFO Q0UpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGk5MTUtPmVuZ2luZV9jbGFzc1tjbGFzc11b aW5zdGFuY2VdOworfQorCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1Qp CiAjaW5jbHVkZSAic2VsZnRlc3RzL21vY2tfZW5naW5lLmMiCiAjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA1NmQ3YWU5ZjI5OGIuLjdhOTAxZTc2NmQw MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtMzMwLDYgKzMz MCwyOCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKIAkJSTkxNV9TRUxGVEVTVF9ERUNMQVJF KGJvb2wgbW9jayA6IDEpOwogCX0gYnJlYWRjcnVtYnM7CiAKKwlzdHJ1Y3QgeworCQkvKioKKwkJ ICogQGVuYWJsZTogQml0bWFzayBvZiBlbmFibGUgc2FtcGxlIGV2ZW50cyBvbiB0aGlzIGVuZ2lu ZS4KKwkJICoKKwkJICogQml0cyBjb3JyZXNwb25kIHRvIHNhbXBsZSBldmVudCB0eXBlcywgZm9y IGluc3RhbmNlCisJCSAqIEk5MTVfU0FNUExFX1FVRVVFRCBpcyBiaXQgMCBldGMuCisJCSAqLwor CQl1MzIgZW5hYmxlOworCQkvKioKKwkJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50 IGZvciB0aGUgZW5hYmxlZCBzYW1wbGVycy4KKwkJICoKKwkJICogSW5kZXggbnVtYmVyIGNvcnJl c3BvbmRzIHRvIHRoZSBiaXQgbnVtYmVyIGZyb20gQGVuYWJsZS4KKwkJICovCisJCXVuc2lnbmVk IGludCBlbmFibGVfY291bnRbSTkxNV9QTVVfU0FNUExFX0JJVFNdOworCQkvKioKKwkJICogQHNh bXBsZTogQ291bnRlciB2YWx1ZSBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCQkgKgorCQkgKiBPdXIg aW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXIgaW4gdGhpcyBmaWVsZC4K KwkJICovCisJCXU2NCBzYW1wbGVbSTkxNV9FTkdJTkVfU0FNUExFX01BWF07CisJfSBwbXU7CisK IAkvKgogCSAqIEEgcG9vbCBvZiBvYmplY3RzIHRvIHVzZSBhcyBzaGFkb3cgY29waWVzIG9mIGNs aWVudCBiYXRjaCBidWZmZXJzCiAJICogd2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMgZW5hYmxl ZC4gUHJldmVudHMgdGhlIGNsaWVudCBmcm9tCkBAIC04MzQsNCArODU2LDcgQEAgdm9pZCBpbnRl bF9lbmdpbmVzX3Jlc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSk7CiAKIGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVs X2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xh c3MsIHU4IGluc3RhbmNlKTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJt L2k5MTVfZHJtLmgKaW5kZXggZmUyNWEwMWM4MWYyLi42ODJhYmFmZWNjOGMgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmgKQEAgLTg2LDYgKzg2LDYzIEBAIGVudW0gaTkxNV9tb2NzX3RhYmxlX2luZGV4IHsKIAlJ OTE1X01PQ1NfQ0FDSEVELAogfTsKIAorZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsK KwlJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9IDAsCisJSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVS ID0gMSwKKwlJOTE1X0VOR0lORV9DTEFTU19DT1BZID0gMiwKKwlJOTE1X0VOR0lORV9DTEFTU19W SURFTyA9IDMsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsCisJSTkxNV9F TkdJTkVfQ0xBU1NfTUFYIC8qIG5vbi1BQkkgKi8KK307CisKKy8qKgorICogRE9DOiBwZXJmX2V2 ZW50cyBleHBvc2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RyaXZl cnMvaTkxNQorICoKKyAqLworCitlbnVtIGRybV9pOTE1X3BtdV9lbmdpbmVfc2FtcGxlIHsKKwlJ OTE1X1NBTVBMRV9RVUVVRUQgPSAwLAorCUk5MTVfU0FNUExFX0JVU1kgPSAxLAorCUk5MTVfU0FN UExFX1dBSVQgPSAyLAorCUk5MTVfU0FNUExFX1NFTUEgPSAzLAorCUk5MTVfRU5HSU5FX1NBTVBM RV9NQVggLyogbm9uLUFCSSAqLworfTsKKworI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfQklUUyAo NCkKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX01BU0sgKDB4ZikKKyNkZWZpbmUgSTkxNV9QTVVf U0FNUExFX0lOU1RBTkNFX0JJVFMgKDgpCisjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NISUZUIFwK KwkoSTkxNV9QTVVfU0FNUExFX0JJVFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0VfQklUUykK KworI2RlZmluZSBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBsZSkgXAor CSgoY2xhc3MpIDw8IEk5MTVfUE1VX0NMQVNTX1NISUZUIHwgXAorCShpbnN0YW5jZSkgPDwgSTkx NV9QTVVfU0FNUExFX0JJVFMgfCBcCisJKHNhbXBsZSkpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5H SU5FX1FVRVVFRChjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywg aW5zdGFuY2UsIEk5MTVfU0FNUExFX1FVRVVFRCkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVf QlVTWShjbGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFu Y2UsIEk5MTVfU0FNUExFX0JVU1kpCisKKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dBSVQoY2xh c3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1 X1NBTVBMRV9XQUlUKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9TRU1BKGNsYXNzLCBpbnN0 YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVf U0VNQSkKKworI2RlZmluZSBfX0k5MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VOR0lORSgw eGZmLCAweGZmLCAweGYpICsgMSArICh4KSkKKworI2RlZmluZSBJOTE1X1BNVV9BQ1RVQUxfRlJF UVVFTkNZCV9fSTkxNV9QTVVfT1RIRVIoMCkKKyNkZWZpbmUgSTkxNV9QTVVfUkVRVUVTVEVEX0ZS RVFVRU5DWQlfX0k5MTVfUE1VX09USEVSKDEpCisjZGVmaW5lIEk5MTVfUE1VX0lOVEVSUlVQVFMJ CV9fSTkxNV9QTVVfT1RIRVIoMikKKworI2RlZmluZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZCQlf X0k5MTVfUE1VX09USEVSKDMpCisjZGVmaW5lIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZCQlfX0k5 MTVfUE1VX09USEVSKDQpCisjZGVmaW5lIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWQlfX0k5MTVf UE1VX09USEVSKDUpCisKKyNkZWZpbmUgSTkxNV9QTVVfTEFTVCBJOTE1X1BNVV9SQzZwcF9SRVNJ REVOQ1kKKwogLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFy ZSBhdCBtb3N0IDI1NSBvZiB0aGVtLgogICovCiAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMg MjU1CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UKLS0gCjIuOS41CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK