From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/9] drm/i915/pmu: Expose a PMU interface for perf queries Date: Wed, 11 Oct 2017 13:55:10 +0100 Message-ID: <20171011125517.1372-3-tvrtko.ursulin@linux.intel.com> References: <20171011125517.1372-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 BCB616E681 for ; Wed, 11 Oct 2017 12:55:27 +0000 (UTC) Received: by mail-wm0-x22b.google.com with SMTP id m72so4492974wmc.1 for ; Wed, 11 Oct 2017 05:55:27 -0700 (PDT) In-Reply-To: <20171011125517.1372-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 YXMgTGFodGluZW4pCgp2MTI6CiAqIE1vcmUgYWNjdXJhdGUgc2FtcGxpbmcuIChDaHJpcyBXaWxz b24pCiAqIFN0b3JlIGFuZCByZXBvcnQgZnJlcXVlbmN5IGluIE1IeiBmb3IgYmV0dGVyIHVzYWJp bGl0eSBmcm9tCiAgIHBlcmYgc3RhdC4KICogUmVtb3ZlZCBtZXRyaWNzOiBxdWV1ZWQsIGludGVy cnVwdHMsIHJjNiBjb3VudGVycy4KICogU2FtcGxlIGVuZ2luZSBidXN5bmVzcyBiYXNlZCBvbiBz ZXFubyBkaWZmZXJlbmNlIG9ubHkKICAgZm9yIGxlc3MgTU1JTyAoYW5kIGZvcmNld2FrZSkgb24g YWxsIHBsYXRmb3Jtcy4gKENocmlzIFdpbHNvbikKCnYxMzoKICogQ29tbWVudCBzcGVsbGluZywg dXNlIG11bF91MzJfdTMyIHRvIHdvcmsgYXJvdW5kIHBvdGVudGlhbCBHQ0MKICAgaXNzdWUgYW5k IHNvbW5lIGNvZGUgYWxpZ25tZW50IGNoYW5nZXMuIChDaHJpcyBXaWxzb24pCgp2MTQ6CiAqIFJl YmFzZS4KCnYxNToKICogUmViYXNlIGZvciBSUFMgcmVmYWN0b3JpbmcuCgpTaWduZWQtb2ZmLWJ5 OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KU2lnbmVkLW9mZi1ieTog VHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTog RG1pdHJ5IFJvZ296aGtpbiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJv Z296aGtpbkBpbnRlbC5jb20+CkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6QGluZnJhZGVhZC5v cmc+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BtdS5jICAgICAgICAgfCA2NTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmggICAgICAgICB8ICA5NiArKysrKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgIHwgICAzICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICB8ICAzNSArKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgIDI2ICsrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmggICAgICAgICAgICAgfCAgNDggKysrCiA5IGZpbGVzIGNoYW5nZWQsIDg4NCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCmluZGV4IDY2ZDIzYjYxOWRiMS4uZTk0Y2Q2OWI3MTVhIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCiAK IGk5MTUtJChDT05GSUdfQ09NUEFUKSAgICs9IGk5MTVfaW9jMzIubwogaTkxNS0kKENPTkZJR19E RUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9jcmMubworaTkxNS0kKENPTkZJ R19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubwogCiAjIEdFTSBjb2RlCiBpOTE1LXkgKz0gaTkx NV9jbWRfcGFyc2VyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggZjFlNjUxNzAzNzY0 Li42NTA2MGJkYzdiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTIxNSw2ICsxMjE1 LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRy bTsKIAogCWk5MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYpOworCWk5MTVfcG11X3JlZ2lz dGVyKGRldl9wcml2KTsKIAogCS8qCiAJICogTm90aWZ5IGEgdmFsaWQgc3VyZmFjZSBhZnRlciBt b2Rlc2V0dGluZywKQEAgLTEyNjksNiArMTI3MCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZHJpdmVy X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWludGVsX29w cmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV9wZXJmX3VucmVnaXN0ZXIoZGV2 X3ByaXYpOworCWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYpOwogCiAJaTkxNV90ZWFyZG93 bl9zeXNmcyhkZXZfcHJpdik7CiAJaTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggMGY1ZTMzNmE2N2Y0Li5jNTc3ZDgxMWQ1NjAgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4 L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4 L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgv cG1fcW9zLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDxsaW51 eC9zaG1lbV9mcy5oPgpAQCAtMjI3Miw2ICsyMjczLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgewogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICprZXJuZWxfY29udGV4dDsKIAkvKiBDb250 ZXh0IG9ubHkgdG8gYmUgdXNlZCBmb3IgaW5qZWN0aW5nIHByZWVtcHRpb24gY29tbWFuZHMgKi8K IAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqcHJlZW1wdF9jb250ZXh0OworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV0KKwkJCQkJICAg IFtNQVhfRU5HSU5FX0lOU1RBTkNFICsgMV07CiAJc3RydWN0IGk5MTVfdm1hICpzZW1hcGhvcmU7 CiAKIAlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnN0YXR1c19wYWdlX2RtYWg7CkBAIC0yNzQyLDYg KzI3NDUsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCWludAlpcnE7CiAJfSBscGVf YXVkaW87CiAKKwlzdHJ1Y3QgaTkxNV9wbXUgcG11OworCiAJLyoKIAkgKiBOT1RFOiBUaGlzIGlz IHRoZSBkcmkxL3VtcyBkdW5nZW9uLCBkb24ndCBhZGQgc3R1ZmYgaGVyZS4gWW91ciBwYXRjaAog CSAqIHdpbGwgYmUgcmVqZWN0ZWQuIEluc3RlYWQgbG9vayBmb3IgYSBiZXR0ZXIgcGxhY2UuCkBA IC0zOTg4LDYgKzM5OTMsMTUgQEAgZXh0ZXJuIHZvaWQgaTkxNV9wZXJmX2Zpbmkoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIGk5MTVfcGVyZl9yZWdpc3Rl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9w ZXJmX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAorLyog aTkxNV9wbXUuYyAqLworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwordm9pZCBpOTE1X3BtdV9y ZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cit2b2lkIGk5MTVfcG11X3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworI2Vsc2UKK3N0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KSB7fQorI2VuZGlmCisKIC8qIGk5MTVfc3VzcGVuZC5jICovCiBl eHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uYmYxZDM1MDkzYWVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwpAQCAtMCwwICsxLDY1OSBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyZl9l dmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgImk5MTVf ZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9wbXUuaCIKKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVy LmgiCisKKy8qIEZyZXF1ZW5jeSBmb3IgdGhlIHNhbXBsaW5nIHRpbWVyIGZvciBldmVudHMgd2hp Y2ggbmVlZCBpdC4gKi8KKyNkZWZpbmUgRlJFUVVFTkNZIDIwMAorI2RlZmluZSBQRVJJT0QgbWF4 X3QodTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQorCisjZGVmaW5lIEVOR0lO RV9TQU1QTEVfTUFTSyBcCisJKEJJVChJOTE1X1NBTVBMRV9CVVNZKSB8IFwKKwkgQklUKEk5MTVf U0FNUExFX1dBSVQpIHwgXAorCSBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpCisKKyNkZWZpbmUgRU5H SU5FX1NBTVBMRV9CSVRTICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9CSVRTKQorCitzdGF0aWMgY3B1 bWFza190IGk5MTVfcG11X2NwdW1hc2sgPSBDUFVfTUFTS19OT05FOworCitzdGF0aWMgdTggZW5n aW5lX2NvbmZpZ19zYW1wbGUodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYgSTkxNV9Q TVVfU0FNUExFX01BU0s7Cit9CisKK3N0YXRpYyB1OCBlbmdpbmVfZXZlbnRfc2FtcGxlKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoZXZl bnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVudF9jbGFzcyhzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+YXR0ci5jb25maWcgPj4g STkxNV9QTVVfQ0xBU1NfU0hJRlQpICYgMHhmZjsKK30KKworc3RhdGljIHU4IGVuZ2luZV9ldmVu dF9pbnN0YW5jZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIChldmVudC0+ YXR0ci5jb25maWcgPj4gSTkxNV9QTVVfU0FNUExFX0JJVFMpICYgMHhmZjsKK30KKworc3RhdGlj IGJvb2wgaXNfZW5naW5lX2NvbmZpZyh1NjQgY29uZmlnKQoreworCXJldHVybiBjb25maWcgPCBf X0k5MTVfUE1VX09USEVSKDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbmZpZ19lbmFi bGVkX2JpdCh1NjQgY29uZmlnKQoreworCWlmIChpc19lbmdpbmVfY29uZmlnKGNvbmZpZykpCisJ CXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShjb25maWcpOworCWVsc2UKKwkJcmV0dXJuIEVO R0lORV9TQU1QTEVfQklUUyArIChjb25maWcgLSBfX0k5MTVfUE1VX09USEVSKDApKTsKK30KKwor c3RhdGljIHU2NCBjb25maWdfZW5hYmxlZF9tYXNrKHU2NCBjb25maWcpCit7CisJcmV0dXJuIEJJ VF9VTEwoY29uZmlnX2VuYWJsZWRfYml0KGNvbmZpZykpOworfQorCitzdGF0aWMgYm9vbCBpc19l bmdpbmVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBpc19lbmdp bmVfY29uZmlnKGV2ZW50LT5hdHRyLmNvbmZpZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg ZXZlbnRfZW5hYmxlZF9iaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBj b25maWdfZW5hYmxlZF9iaXQoZXZlbnQtPmF0dHIuY29uZmlnKTsKK30KKworc3RhdGljIGJvb2wg Z3JhYl9mb3JjZXdha2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgZncpCit7 CisJaWYgKCFmdykKKwkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtF X0FMTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9zYW1wbGUo c3RydWN0IGk5MTVfcG11X3NhbXBsZSAqc2FtcGxlLCB1MzIgdW5pdCwgdTMyIHZhbCkKK3sKKwkv KgorCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBzdG9jaGFzdGljIHNhbXBsaW5nIGZvciB0aGVzZSBj b3VudGVycywKKwkgKiBhdmVyYWdlIHRoZSBkZWx0YSB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBm b3IgYmV0dGVyIGFjY3VyYWN5LgorCSAqLworCXNhbXBsZS0+Y3VyICs9IGRpdl91NjQobXVsX3Uz Ml91MzIoc2FtcGxlLT5wcmV2ICsgdmFsLCB1bml0KSwgMik7CisJc2FtcGxlLT5wcmV2ID0gdmFs OworfQorCitzdGF0aWMgdm9pZCBlbmdpbmVzX3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0g aW50ZWxfZW5naW5lX2lkIGlkOworCWJvb2wgZncgPSBmYWxzZTsKKworCWlmICgoZGV2X3ByaXYt PnBtdS5lbmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0spID09IDApCisJCXJldHVybjsKKworCWlm ICghZGV2X3ByaXYtPmd0LmF3YWtlKQorCQlyZXR1cm47CisKKwlpZiAoIWludGVsX3J1bnRpbWVf cG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCisJCXJldHVybjsKKworCWZvcl9lYWNoX2VuZ2lu ZShlbmdpbmUsIGRldl9wcml2LCBpZCkgeworCQl1MzIgY3VycmVudF9zZXFubyA9IGludGVsX2Vu Z2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKKwkJdTMyIGxhc3Rfc2Vxbm8gPSBpbnRlbF9lbmdpbmVf bGFzdF9zdWJtaXQoZW5naW5lKTsKKwkJdTMyIHZhbDsKKworCQl2YWwgPSAhaTkxNV9zZXFub19w YXNzZWQoY3VycmVudF9zZXFubywgbGFzdF9zZXFubyk7CisKKwkJdXBkYXRlX3NhbXBsZSgmZW5n aW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ldLAorCQkJICAgICAgUEVSSU9ELCB2YWwp OworCisJCWlmICh2YWwgJiYgKGVuZ2luZS0+cG11LmVuYWJsZSAmCisJCSAgICAoQklUKEk5MTVf U0FNUExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NFTUEpKSkpIHsKKwkJCWZ3ID0gZ3JhYl9m b3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsKKworCQkJdmFsID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ1RM KGVuZ2luZS0+bW1pb19iYXNlKSk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSAwOworCQl9CisKKwkJ dXBkYXRlX3NhbXBsZSgmZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX1dBSVRdLAorCQkJ ICAgICAgUEVSSU9ELCAhISh2YWwgJiBSSU5HX1dBSVQpKTsKKworCQl1cGRhdGVfc2FtcGxlKCZl bmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfU0VNQV0sCisJCQkgICAgICBQRVJJT0QsICEh KHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKTsKKwl9CisKKwlpZiAoZncpCisJCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKworCWludGVsX3J1 bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKK30KKworc3RhdGljIHZvaWQgZnJlcXVlbmN5X3NhbXBs ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT5w bXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9BQ1RVQUxfRlJF UVVFTkNZKSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IGRldl9wcml2LT5ndF9wbS5ycHMuY3Vy X2ZyZXE7CisJCWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYKKwkJICAgIGludGVsX3J1bnRpbWVf cG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpIHsKKwkJCXZhbCA9IGludGVsX2dldF9jYWdmKGRl dl9wcml2LAorCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkpOworCQkJ aW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOworCQl9CisKKwkJdXBkYXRlX3NhbXBsZSgm ZGV2X3ByaXYtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0sCisJCQkgICAgICAx LCBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKSk7CisJfQorCisJaWYgKGRldl9wcml2LT5w bXUuZW5hYmxlICYKKwkgICAgY29uZmlnX2VuYWJsZWRfbWFzayhJOTE1X1BNVV9SRVFVRVNURURf RlJFUVVFTkNZKSkgeworCQl1cGRhdGVfc2FtcGxlKCZkZXZfcHJpdi0+cG11LnNhbXBsZVtfX0k5 MTVfU0FNUExFX0ZSRVFfUkVRXSwgMSwKKwkJCSAgICAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LAorCQkJCQkgICAgIGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXEpKTsKKwl9Cit9CisKK3N0 YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpOTE1X3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0 aW1lcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9v ZihocnRpbWVyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgcG11LnRpbWVyKTsKKworCWlmIChp OTE1LT5wbXUuZW5hYmxlID09IDApCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWVu Z2luZXNfc2FtcGxlKGk5MTUpOworCWZyZXF1ZW5jeV9zYW1wbGUoaTkxNSk7CisKKwlocnRpbWVy X2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOworCXJldHVybiBIUlRJ TUVSX1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3koc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCVdBUk5fT04oZXZlbnQtPnBhcmVudCk7Cit9CisK K3N0YXRpYyBpbnQgZW5naW5lX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0KKwkJY29udGFpbmVyX29mKGV2ZW50 LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsKKworCWlmICghaW50ZWxfZW5naW5lX2xv b2t1cF91c2VyKGk5MTUsIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksCisJCQkJICAgICAgZW5n aW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNo IChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkgeworCWNhc2UgSTkxNV9TQU1QTEVfQlVTWToK KwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6CisJCWJyZWFrOworCWNhc2UgSTkxNV9TQU1QTEVfU0VN QToKKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZl bnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCWludCBjcHUsIHJldDsKKworCWlm IChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiAtRU5PRU5U OworCisJLyogdW5zdXBwb3J0ZWQgbW9kZXMgYW5kIGZpbHRlcnMgKi8KKwlpZiAoZXZlbnQtPmF0 dHIuc2FtcGxlX3BlcmlvZCkgLyogbm8gc2FtcGxpbmcgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAoaGFzX2JyYW5jaF9zdGFjayhldmVudCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwor CWlmIChldmVudC0+Y3B1IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHUgPSBjcHVtYXNr X2FueV9hbmQoJmk5MTVfcG11X2NwdW1hc2ssCisJCQkgICAgICB0b3BvbG9neV9zaWJsaW5nX2Nw dW1hc2soZXZlbnQtPmNwdSkpOworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQlyZXQgPSBlbmdpbmVf ZXZlbnRfaW5pdChldmVudCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwkJc3dpdGNoIChldmVu dC0+YXR0ci5jb25maWcpIHsKKwkJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZOgorCQkJ aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKKwkJCQkgLyog UmVxdWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmchICovCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJ Y2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOgorCQkJaWYgKElOVEVMX0dFTihpOTE1 KSA8IDYpCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0 ID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWlmICghZXZlbnQtPnBhcmVudCkKKwkJZXZlbnQtPmRl c3Ryb3kgPSBpOTE1X3BtdV9ldmVudF9kZXN0cm95OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB1NjQgX19pOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihldmVudC0+ cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdTY0IHZhbCA9IDA7CisKKwlpZiAoaXNf ZW5naW5lX2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxl KGV2ZW50KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9 IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xh c3MoZXZlbnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKworCQlp ZiAoV0FSTl9PTl9PTkNFKCFlbmdpbmUpKSB7CisJCQkvKiBEbyBub3RoaW5nICovCisJCX0gZWxz ZSB7CisJCQl2YWwgPSBlbmdpbmUtPnBtdS5zYW1wbGVbc2FtcGxlXS5jdXI7CisJCX0KKwl9IGVs c2UgeworCQlzd2l0Y2ggKGV2ZW50LT5hdHRyLmNvbmZpZykgeworCQljYXNlIEk5MTVfUE1VX0FD VFVBTF9GUkVRVUVOQ1k6CisJCQl2YWwgPQorCQkJICAgZGl2X3U2NChpOTE1LT5wbXUuc2FtcGxl W19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdLmN1ciwKKwkJCQkgICBGUkVRVUVOQ1kpOworCQkJYnJl YWs7CisJCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToKKwkJCXZhbCA9CisJCQkg ICBkaXZfdTY0KGk5MTUtPnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV0uY3VyLAor CQkJCSAgIEZSRVFVRU5DWSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB2YWw7Cit9 CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXU2NCBw cmV2LCBuZXc7CisKK2FnYWluOgorCXByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3Vu dCk7CisJbmV3ID0gX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50KTsKKworCWlmIChsb2NhbDY0 X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbmV3KSAhPSBwcmV2KQorCQlnb3RvIGFn YWluOworCisJbG9jYWw2NF9hZGQobmV3IC0gcHJldiwgJmV2ZW50LT5jb3VudCk7Cit9CisKK3N0 YXRpYyB2b2lkIGk5MTVfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPQorCQljb250YWluZXJfb2YoZXZlbnQtPnBt dSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOworCXVuc2lnbmVkIGludCBiaXQgPSBldmVudF9l bmFibGVkX2JpdChldmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTdGFydCB0aGUgc2Ft cGxpbmcgdGltZXIgd2hlbiBlbmFibGluZyB0aGUgZmlyc3QgZXZlbnQuCisJICovCisJaWYgKGk5 MTUtPnBtdS5lbmFibGUgPT0gMCkKKwkJaHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaTkxNS0+cG11 LnRpbWVyLAorCQkJCSAgICAgICBuc190b19rdGltZShQRVJJT0QpLCAwLAorCQkJCSAgICAgICBI UlRJTUVSX01PREVfUkVMX1BJTk5FRCk7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgYml0bWFzayBv ZiBlbmFibGVkIGV2ZW50cyBhbmQgaW5jcmVtZW50CisJICogdGhlIGV2ZW50IHJlZmVyZW5jZSBj b3VudGVyLgorCSAqLworCUdFTV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklUUyk7CisJ R0VNX0JVR19PTihpOTE1LT5wbXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gfjApOworCWk5MTUtPnBt dS5lbmFibGUgfD0gQklUX1VMTChiaXQpOworCWk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSsr OworCisJLyoKKwkgKiBGb3IgcGVyLWVuZ2luZSBldmVudHMgdGhlIGJpdG1hc2sgYW5kIHJlZmVy ZW5jZSBjb3VudGluZworCSAqIGlzIHN0b3JlZCBwZXIgZW5naW5lLgorCSAqLworCWlmIChpc19l bmdpbmVfZXZlbnQoZXZlbnQpKSB7CisJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1wbGUo ZXZlbnQpOworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisKKwkJZW5naW5lID0g aW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCisJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFz cyhldmVudCksCisJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOworCQlHRU1f QlVHX09OKCFlbmdpbmUpOworCQllbmdpbmUtPnBtdS5lbmFibGUgfD0gQklUKHNhbXBsZSk7CisK KwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExFX0JJVFMpOworCQlHRU1fQlVH X09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IH4wKTsKKwkJZW5naW5lLT5w bXUuZW5hYmxlX2NvdW50W3NhbXBsZV0rKzsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBjdXJy ZW50IGNvdW50ZXIgdmFsdWUgc28gd2UgY2FuIHJlcG9ydCB0aGUgY29ycmVjdCBkZWx0YQorCSAq IGZvciBhbGwgbGlzdGVuZXJzLiBFdmVuIHdoZW4gdGhlIGV2ZW50IHdhcyBhbHJlYWR5IGVuYWJs ZWQgYW5kIGhhcworCSAqIGFuIGV4aXN0aW5nIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCWxvY2Fs NjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgX19pOTE1X3BtdV9ldmVudF9yZWFkKGV2ZW50 KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3MpOwor fQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVu dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZihl dmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7CisJdW5zaWduZWQgaW50IGJpdCA9 IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7CisKKwlpZiAoaXNfZW5naW5l X2V2ZW50KGV2ZW50KSkgeworCQl1OCBzYW1wbGUgPSBlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50 KTsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCisJCWVuZ2luZSA9IGludGVs X2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAorCQkJCQkJICBlbmdpbmVfZXZlbnRfY2xhc3MoZXZl bnQpLAorCQkJCQkJICBlbmdpbmVfZXZlbnRfaW5zdGFuY2UoZXZlbnQpKTsKKwkJR0VNX0JVR19P TighZW5naW5lKTsKKwkJR0VNX0JVR19PTihzYW1wbGUgPj0gSTkxNV9QTVVfU0FNUExFX0JJVFMp OworCQlHRU1fQlVHX09OKGVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVdID09IDApOwor CQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVu YWJsZWQKKwkJICogYml0bWFzayB3aGVuIHRoZSBsYXN0IGxpc3RlbmVyIG9uIGFuIGV2ZW50IGdv ZXMgYXdheS4KKwkJICovCisJCWlmICgtLWVuZ2luZS0+cG11LmVuYWJsZV9jb3VudFtzYW1wbGVd ID09IDApCisJCQllbmdpbmUtPnBtdS5lbmFibGUgJj0gfkJJVChzYW1wbGUpOworCX0KKworCUdF TV9CVUdfT04oYml0ID49IEk5MTVfUE1VX01BU0tfQklUUyk7CisJR0VNX0JVR19PTihpOTE1LT5w bXUuZW5hYmxlX2NvdW50W2JpdF0gPT0gMCk7CisJLyoKKwkgKiBEZWNyZW1lbnQgdGhlIHJlZmVy ZW5jZSBjb3VudCBhbmQgY2xlYXIgdGhlIGVuYWJsZWQKKwkgKiBiaXRtYXNrIHdoZW4gdGhlIGxh c3QgbGlzdGVuZXIgb24gYW4gZXZlbnQgZ29lcyBhd2F5LgorCSAqLworCWlmICgtLWk5MTUtPnBt dS5lbmFibGVfY291bnRbYml0XSA9PSAwKQorCQlpOTE1LT5wbXUuZW5hYmxlICY9IH5CSVRfVUxM KGJpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpOTE1LT5wbXUubG9jaywgZmxhZ3Mp OworfQorCitzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVu dCAqZXZlbnQsIGludCBmbGFncykKK3sKKwlpOTE1X3BtdV9lbmFibGUoZXZlbnQpOworCWV2ZW50 LT5ody5zdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0b3Aoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgUEVSRl9F Rl9VUERBVEUpCisJCWk5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpOworCWk5MTVfcG11X2Rpc2Fi bGUoZXZlbnQpOworCWV2ZW50LT5ody5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQ7Cit9CisKK3N0 YXRpYyBpbnQgaTkxNV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50 IGZsYWdzKQoreworCWlmIChmbGFncyAmIFBFUkZfRUZfU1RBUlQpCisJCWk5MTVfcG11X2V2ZW50 X3N0YXJ0KGV2ZW50LCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTkx NV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQorewor CWk5MTVfcG11X2V2ZW50X3N0b3AoZXZlbnQsIFBFUkZfRUZfVVBEQVRFKTsKK30KKworc3RhdGlj IGludCBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQor eworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpOTE1X3BtdV9mb3JtYXRfc2hvdyhz dHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworCWVh dHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7 CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjaGFyICopZWF0dHItPnZhcik7Cit9CisK KyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIoX25hbWUsIF9jb25maWcpIFwKKwkoJigoc3Ry dWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19BVFRSKF9uYW1lLCAw NDQ0LCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVMTCksIFwKKwkJICAudmFyID0gKHZvaWQgKilf Y29uZmlnLCB9IFwKKwl9KVswXS5hdHRyLmF0dHIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsKKwlJOTE1X1BNVV9GT1JNQVRfQVRUUihpOTE1 X2V2ZW50aWQsICJjb25maWc6MC0yMCIpLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsKKwkubmFt ZSA9ICJmb3JtYXQiLAorCS5hdHRycyA9IGk5MTVfcG11X2Zvcm1hdF9hdHRycywKK307CisKK3N0 YXRpYyBzc2l6ZV90IGk5MTVfcG11X2V2ZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJ CSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0 IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsKKworCWVhdHRyID0gY29udGFpbmVyX29mKGF0dHIs IHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAi Y29uZmlnPTB4JWx4XG4iLCAodW5zaWduZWQgbG9uZyllYXR0ci0+dmFyKTsKK30KKworI2RlZmlu ZSBJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpIFwKKwkoJigoc3RydWN0IGRldl9leHRf YXR0cmlidXRlW10pIHsgXAorCQl7IC5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBpOTE1X3Bt dV9ldmVudF9zaG93LCBOVUxMKSwgXAorCQkgIC52YXIgPSAodm9pZCAqKV9jb25maWcsIH0gXAor CX0pWzBdLmF0dHIuYXR0cikKKworI2RlZmluZSBJOTE1X0VWRU5UX1NUUihfbmFtZSwgX3N0cikg XAorCSgmKChzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHJbXSkgeyBcCisJCXsgLmF0dHIJICAg ICA9IF9fQVRUUihfbmFtZSwgMDQ0NCwgcGVyZl9ldmVudF9zeXNmc19zaG93LCBOVUxMKSwgXAor CQkgIC5pZAkgICAgID0gMCwgXAorCQkgIC5ldmVudF9zdHIgPSBfc3RyLCB9IFwKKwl9KVswXS5h dHRyLmF0dHIpCisKKyNkZWZpbmUgSTkxNV9FVkVOVChfbmFtZSwgX2NvbmZpZywgX3VuaXQpIFwK KwlJOTE1X0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpLCBcCisJSTkxNV9FVkVOVF9TVFIoX25h bWUudW5pdCwgX3VuaXQpCisKKyNkZWZpbmUgSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUsIF9jbGFz cywgX2luc3RhbmNlLCBfc2FtcGxlKSBcCisJSTkxNV9FVkVOVF9BVFRSKF9uYW1lLCBfX0k5MTVf UE1VX0VOR0lORShfY2xhc3MsIF9pbnN0YW5jZSwgX3NhbXBsZSkpLCBcCisJSTkxNV9FVkVOVF9T VFIoX25hbWUudW5pdCwgIm5zIikKKworI2RlZmluZSBJOTE1X0VOR0lORV9FVkVOVFMoX25hbWUs IF9jbGFzcywgX2luc3RhbmNlKSBcCisJSTkxNV9FTkdJTkVfRVZFTlQoX25hbWUjI19pbnN0YW5j ZS1idXN5LCBfY2xhc3MsIF9pbnN0YW5jZSwgSTkxNV9TQU1QTEVfQlVTWSksIFwKKwlJOTE1X0VO R0lORV9FVkVOVChfbmFtZSMjX2luc3RhbmNlLXNlbWEsIF9jbGFzcywgX2luc3RhbmNlLCBJOTE1 X1NBTVBMRV9TRU1BKSwgXAorCUk5MTVfRU5HSU5FX0VWRU5UKF9uYW1lIyNfaW5zdGFuY2Utd2Fp dCwgX2NsYXNzLCBfaW5zdGFuY2UsIEk5MTVfU0FNUExFX1dBSVQpCisKK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICppOTE1X3BtdV9ldmVudHNfYXR0cnNbXSA9IHsKKwlJOTE1X0VOR0lORV9FVkVO VFMocmNzLCBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApLAorCUk5MTVfRU5HSU5FX0VWRU5U UyhiY3MsIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApLAorCUk5MTVfRU5HSU5FX0VWRU5UUyh2 Y3MsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSwKKwlJOTE1X0VOR0lORV9FVkVOVFModmNz LCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSksCisJSTkxNV9FTkdJTkVfRVZFTlRTKHZlY3Ms IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApLAorCisJSTkxNV9FVkVOVChhY3R1 YWwtZnJlcXVlbmN5LCAgICBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZLCAgICAiTUh6IiksCisJ STkxNV9FVkVOVChyZXF1ZXN0ZWQtZnJlcXVlbmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVF TkNZLCAiTUh6IiksCisKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1 dGVfZ3JvdXAgaTkxNV9wbXVfZXZlbnRzX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSAiZXZlbnRz IiwKKwkuYXR0cnMgPSBpOTE1X3BtdV9ldmVudHNfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVf dAoraTkxNV9wbXVfZ2V0X2F0dHJfY3B1bWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJu IGNwdW1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgJmk5MTVfcG11X2NwdW1hc2spOwor fQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3B1bWFzaywgMDQ0NCwgaTkxNV9wbXVfZ2V0X2F0dHJf Y3B1bWFzaywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X2NwdW1hc2tf YXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY3B1bWFzay5hdHRyLAorCU5VTEwsCit9OworCitzdGF0 aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9jcHVtYXNrX2F0dHJfZ3JvdXAgPSB7 CisJLmF0dHJzID0gaTkxNV9jcHVtYXNrX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJfZ3JvdXBzW10gPSB7CisJJmk5MTVfcG11 X2Zvcm1hdF9hdHRyX2dyb3VwLAorCSZpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCwKKwkmaTkx NV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgaTkxNV9w bXVfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkK K3sKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCisJdGFyZ2V0ID0gY3B1bWFza19hbnlfYW5kKCZp OTE1X3BtdV9jcHVtYXNrLCAmaTkxNV9wbXVfY3B1bWFzayk7CisJLyogU2VsZWN0IHRoZSBmaXJz dCBvbmxpbmUgQ1BVIGFzIGEgZGVzaWduYXRlZCByZWFkZXIuICovCisJaWYgKHRhcmdldCA+PSBu cl9jcHVfaWRzKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmaTkxNV9wbXVfY3B1bWFzayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3BtdV9jcHVfb2ZmbGluZSh1bnNpZ25l ZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaTkxNV9wbXUg KnBtdSA9IGhsaXN0X2VudHJ5X3NhZmUobm9kZSwgdHlwZW9mKCpwbXUpLCBub2RlKTsKKwl1bnNp Z25lZCBpbnQgdGFyZ2V0OworCisJaWYgKGNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1KGNwdSwg Jmk5MTVfcG11X2NwdW1hc2spKSB7CisJCXRhcmdldCA9IGNwdW1hc2tfYW55X2J1dCh0b3BvbG9n eV9zaWJsaW5nX2NwdW1hc2soY3B1KSwgY3B1KTsKKwkJLyogTWlncmF0ZSBldmVudHMgaWYgdGhl cmUgaXMgYSB2YWxpZCB0YXJnZXQgKi8KKwkJaWYgKHRhcmdldCA8IG5yX2NwdV9pZHMpIHsKKwkJ CWNwdW1hc2tfc2V0X2NwdSh0YXJnZXQsICZpOTE1X3BtdV9jcHVtYXNrKTsKKwkJCXBlcmZfcG11 X21pZ3JhdGVfY29udGV4dCgmcG11LT5iYXNlLCBjcHUsIHRhcmdldCk7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKK3sKKwlpbnQgcmV0OworCisJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKSB7 CisJCURSTV9JTkZPKCJQTVUgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBHUFUuIik7CisJCXJldHVy bjsKKwl9CisKKwlyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9BUF9QRVJGX1g4 Nl9VTkNPUkVfT05MSU5FLAorCQkJCSAgICAgICJwZXJmL3g4Ni9pbnRlbC9pOTE1Om9ubGluZSIs CisJCQkJICAgICAgaTkxNV9wbXVfY3B1X29ubGluZSwKKwkJCQkgICAgICBpOTE1X3BtdV9jcHVf b2ZmbGluZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaHBfc3RhdGU7CisKKwlyZXQgPSBjcHVo cF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElORSwKKwkJ CQkgICAgICAgJmk5MTUtPnBtdS5ub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ocF9pbnN0 YW5jZTsKKworCWk5MTUtPnBtdS5iYXNlLmF0dHJfZ3JvdXBzCT0gaTkxNV9wbXVfYXR0cl9ncm91 cHM7CisJaTkxNS0+cG11LmJhc2UudGFza19jdHhfbnIJPSBwZXJmX2ludmFsaWRfY29udGV4dDsK KwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0CT0gaTkxNV9wbXVfZXZlbnRfaW5pdDsKKwlpOTE1 LT5wbXUuYmFzZS5hZGQJCT0gaTkxNV9wbXVfZXZlbnRfYWRkOworCWk5MTUtPnBtdS5iYXNlLmRl bAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7CisJaTkxNS0+cG11LmJhc2Uuc3RhcnQJCT0gaTkxNV9w bXVfZXZlbnRfc3RhcnQ7CisJaTkxNS0+cG11LmJhc2Uuc3RvcAkJPSBpOTE1X3BtdV9ldmVudF9z dG9wOworCWk5MTUtPnBtdS5iYXNlLnJlYWQJCT0gaTkxNV9wbXVfZXZlbnRfcmVhZDsKKwlpOTE1 LT5wbXUuYmFzZS5ldmVudF9pZHgJPSBpOTE1X3BtdV9ldmVudF9ldmVudF9pZHg7CisKKwlzcGlu X2xvY2tfaW5pdCgmaTkxNS0+cG11LmxvY2spOworCWhydGltZXJfaW5pdCgmaTkxNS0+cG11LnRp bWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWk5MTUtPnBtdS50aW1l ci5mdW5jdGlvbiA9IGk5MTVfc2FtcGxlOworCWk5MTUtPnBtdS5lbmFibGUgPSAwOworCisJcmV0 ID0gcGVyZl9wbXVfcmVnaXN0ZXIoJmk5MTUtPnBtdS5iYXNlLCAiaTkxNSIsIC0xKTsKKwlpZiAo cmV0ID09IDApCisJCXJldHVybjsKKworCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxM OworCisJV0FSTl9PTihjcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9Y ODZfVU5DT1JFX09OTElORSwKKwkJCQkJICAgICZpOTE1LT5wbXUubm9kZSkpOworCitlcnJfaHBf aW5zdGFuY2U6CisJY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX0FQX1BFUkZfWDg2X1VO Q09SRV9PTkxJTkUpOworCitlcnJfaHBfc3RhdGU6CisJRFJNX05PVEUoIkZhaWxlZCB0byByZWdp c3RlciBQTVUhIChlcnI9JWQpXG4iLCByZXQpOworfQorCit2b2lkIGk5MTVfcG11X3VucmVnaXN0 ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKCFpOTE1LT5wbXUuYmFz ZS5ldmVudF9pbml0KQorCQlyZXR1cm47CisKKwlXQVJOX09OKGNwdWhwX3N0YXRlX3JlbW92ZV9p bnN0YW5jZShDUFVIUF9BUF9QRVJGX1g4Nl9VTkNPUkVfT05MSU5FLAorCQkJCQkgICAgJmk5MTUt PnBtdS5ub2RlKSk7CisJY3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX0FQX1BFUkZfWDg2 X1VOQ09SRV9PTkxJTkUpOworCisJaTkxNS0+cG11LmVuYWJsZSA9IDA7CisKKwlocnRpbWVyX2Nh bmNlbCgmaTkxNS0+cG11LnRpbWVyKTsKKworCXBlcmZfcG11X3VucmVnaXN0ZXIoJmk5MTUtPnBt dS5iYXNlKTsKKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0ID0gTlVMTDsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGY4 ODRkZDM0OTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w bXUuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisjaWZuZGVmIF9fSTkxNV9QTVVfSF9fCisjZGVmaW5lIF9fSTkxNV9QTVVfSF9fCisK K2VudW0geworCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1QgPSAwLAorCV9fSTkxNV9TQU1QTEVfRlJF UV9SRVEsCisJX19JOTE1X05VTV9QTVVfU0FNUExFUlMKK307CisKKy8qKgorICogSG93IG1hbnkg ZGlmZmVyZW50IGV2ZW50cyB3ZSB0cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLgorICoKKyAq IEl0IGlzIGFsc28gdXNlZCB0byBrbm93IHRvIG5lZWRlZCBudW1iZXIgb2YgZXZlbnQgcmVmZXJl bmNlIGNvdW50ZXJzLgorICovCisjZGVmaW5lIEk5MTVfUE1VX01BU0tfQklUUyBcCisJKCgxIDw8 IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSArIFwKKwkgKEk5MTVfUE1VX0xBU1QgKyAxIC0gX19JOTE1 X1BNVV9PVEhFUigwKSkpCisKK3N0cnVjdCBpOTE1X3BtdV9zYW1wbGUgeworCXU2NCBjdXI7CisJ dTMyIHByZXY7Cit9OworCitzdHJ1Y3QgaTkxNV9wbXUgeworCS8qKgorCSAqIEBub2RlOiBMaXN0 IG5vZGUgZm9yIENQVSBob3RwbHVnIGhhbmRsaW5nLgorCSAqLworCXN0cnVjdCBobGlzdF9ub2Rl IG5vZGU7CisJLyoqCisJICogQGJhc2U6IFBNVSBiYXNlLgorCSAqLworCXN0cnVjdCBwbXUgYmFz ZTsKKwkvKioKKwkgKiBAbG9jazogTG9jayBwcm90ZWN0aW5nIGVuYWJsZSBtYXNrIGFuZCByZWYg Y291bnQgaGFuZGxpbmcuCisJICovCisJc3BpbmxvY2tfdCBsb2NrOworCS8qKgorCSAqIEB0aW1l cjogVGltZXIgZm9yIGludGVybmFsIGk5MTUgUE1VIHNhbXBsaW5nLgorCSAqLworCXN0cnVjdCBo cnRpbWVyIHRpbWVyOworCS8qKgorCSAqIEBlbmFibGU6IEJpdG1hc2sgb2YgYWxsIGN1cnJlbnRs eSBlbmFibGVkIGV2ZW50cy4KKwkgKgorCSAqIEJpdHMgYXJlIGRlcml2ZWQgZnJvbSB1QVBJIGV2 ZW50IG51bWJlcnMgaW4gYSB3YXkgdGhhdCBsb3cgMTYgYml0cworCSAqIGNvcnJlc3BvbmQgdG8g ZW5naW5lIGV2ZW50IF9zYW1wbGVfIF90eXBlXyAoSTkxNV9TQU1QTEVfUVVFVUVEIGlzCisJICog Yml0IDApLCBhbmQgaGlnaGVyIGJpdHMgY29ycmVzcG9uZCB0byBvdGhlciBldmVudHMgKGZvciBp bnN0YW5jZQorCSAqIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kgaXMgYml0IDE2IGV0YykuCisJ ICoKKwkgKiBJbiBvdGhlciB3b3JkcywgbG93IDE2IGJpdHMgYXJlIG5vdCBwZXIgZW5naW5lIGJ1 dCBwZXIgZW5naW5lCisJICogc2FtcGxlciB0eXBlLCB3aGlsZSB0aGUgdXBwZXIgYml0cyBhcmUg ZGlyZWN0bHkgbWFwcGVkIHRvIG90aGVyCisJICogZXZlbnQgdHlwZXMuCisJICovCisJdTY0IGVu YWJsZTsKKwkvKioKKwkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVuY2UgY291bnRzIGZvciB0aGUg ZW5hYmxlZCBldmVudHMuCisJICoKKwkgKiBBcnJheSBpbmRpY2VzIGFyZSBtYXBwZWQgaW4gdGhl IHNhbWUgd2F5IGFzIGJpdHMgaW4gdGhlIEBlbmFibGUgZmllbGQKKwkgKiBhbmQgdGhleSBhcmUg dXNlZCB0byBjb250cm9sIHNhbXBsaW5nIG9uL29mZiB3aGVuIG11bHRpcGxlIGNsaWVudHMKKwkg KiBhcmUgdXNpbmcgdGhlIFBNVSBBUEkuCisJICovCisJdW5zaWduZWQgaW50IGVuYWJsZV9jb3Vu dFtJOTE1X1BNVV9NQVNLX0JJVFNdOworCS8qKgorCSAqIEBzYW1wbGU6IEN1cnJlbnQgYW5kIHBy ZXZpb3VzIChyYXcpIGNvdW50ZXJzIGZvciBzYW1wbGluZyBldmVudHMuCisJICoKKwkgKiBUaGVz ZSBjb3VudGVycyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0aW1lci4K KwkgKgorCSAqIE9ubHkgZ2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUsIHdoaWxlIHRoZSBw ZXItZW5naW5lIG9uZXMgYXJlIGluCisJICogc3RydWN0IGludGVsX2VuZ2luZV9jcy4KKwkgKi8K KwlzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlIHNhbXBsZVtfX0k5MTVfTlVNX1BNVV9TQU1QTEVSU107 Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IGQyZDBhODNjMDliNi4u NDFmZTY5OTQzYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE4Niw2ICsxODYsOSBA QCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykK ICNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MJMgogI2RlZmluZSBDT1BZX0VOR0lORV9D TEFTUwkzCiAjZGVmaW5lIE9USEVSX0NMQVNTCQk0CisjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJ NAorCisjZGVmaW5lIE1BWF9FTkdJTkVfSU5TVEFOQ0UgICAgMQogCiAvKiBQQ0kgY29uZmlnIHNw YWNlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggYTU5YjJh MzBmZjVhLi40YzdkN2FkZTk5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jCkBAIC0yMDIsNiArMjAyLDE1IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJR0VNX0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9T SVpFKGludGVsX2VuZ2luZV9jbGFzc2VzKSk7CiAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVf Y2xhc3Nlc1tpbmZvLT5jbGFzc107CiAKKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBN QVhfRU5HSU5FX0NMQVNTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoR0VNX1dBUk5fT04o aW5mby0+aW5zdGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoR0VNX1dBUk5fT04oZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11b aW5mby0+aW5zdGFuY2VdKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlHRU1fQlVHX09OKGRldl9w cml2LT5lbmdpbmVbaWRdKTsKIAllbmdpbmUgPSBremFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQ X0tFUk5FTCk7CiAJaWYgKCFlbmdpbmUpCkBAIC0yMjksNiArMjM4LDcgQEAgaW50ZWxfZW5naW5l X3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCUFUT01JQ19JTklU X05PVElGSUVSX0hFQUQoJmVuZ2luZS0+Y29udGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCisJZGV2 X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5l OwogCWRldl9wcml2LT5lbmdpbmVbaWRdID0gZW5naW5lOwogCXJldHVybiAwOwogfQpAQCAtMTc3 Niw2ICsxNzg2LDMxIEBAIHZvaWQgaW50ZWxfZW5naW5lX2R1bXAoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0pCiAJZHJtX3ByaW50ZihtLCAiXG4i KTsKIH0KIAorc3RhdGljIHU4IHVzZXJfY2xhc3NfbWFwW0k5MTVfRU5HSU5FX0NMQVNTX01BWF0g PSB7CisJW0k5MTVfRU5HSU5FX0NMQVNTX09USEVSXSA9IE9USEVSX0NMQVNTLAorCVtJOTE1X0VO R0lORV9DTEFTU19SRU5ERVJdID0gUkVOREVSX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19D T1BZXSA9IENPUFlfRU5HSU5FX0NMQVNTLAorCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBW SURFT19ERUNPREVfQ0xBU1MsCisJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0g VklERU9fRU5IQU5DRU1FTlRfQ0xBU1MsCit9OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoK K2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg dTggY2xhc3MsIHU4IGluc3RhbmNlKQoreworCWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJf Y2xhc3NfbWFwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFwW2Ns YXNzXTsKKworCWlmIChXQVJOX09OX09OQ0UoY2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwlpZiAoaW5zdGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKQorCQly ZXR1cm4gTlVMTDsKKworCXJldHVybiBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNl XTsKK30KKwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQogI2luY2x1 ZGUgInNlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmgKaW5kZXggMTcxODZmMDY3NDA4Li4yODliYjI1ZGQ5NjQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTUsNiArNSw3IEBACiAjaW5j bHVkZSAiaTkxNV9nZW1fYmF0Y2hfcG9vbC5oIgogI2luY2x1ZGUgImk5MTVfZ2VtX3JlcXVlc3Qu aCIKICNpbmNsdWRlICJpOTE1X2dlbV90aW1lbGluZS5oIgorI2luY2x1ZGUgImk5MTVfcG11Lmgi CiAjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgogCiBzdHJ1Y3QgZHJtX3ByaW50ZXI7CkBAIC0z MzcsNiArMzM4LDI4IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogCQlJOTE1X1NFTEZURVNU X0RFQ0xBUkUoYm9vbCBtb2NrIDogMSk7CiAJfSBicmVhZGNydW1iczsKIAorCXN0cnVjdCB7CisJ CS8qKgorCQkgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGVuYWJsZSBzYW1wbGUgZXZlbnRzIG9uIHRo aXMgZW5naW5lLgorCQkgKgorCQkgKiBCaXRzIGNvcnJlc3BvbmQgdG8gc2FtcGxlIGV2ZW50IHR5 cGVzLCBmb3IgaW5zdGFuY2UKKwkJICogSTkxNV9TQU1QTEVfUVVFVUVEIGlzIGJpdCAwIGV0Yy4K KwkJICovCisJCXUzMiBlbmFibGU7CisJCS8qKgorCQkgKiBAZW5hYmxlX2NvdW50OiBSZWZlcmVu Y2UgY291bnQgZm9yIHRoZSBlbmFibGVkIHNhbXBsZXJzLgorCQkgKgorCQkgKiBJbmRleCBudW1i ZXIgY29ycmVzcG9uZHMgdG8gdGhlIGJpdCBudW1iZXIgZnJvbSBAZW5hYmxlLgorCQkgKi8KKwkJ dW5zaWduZWQgaW50IGVuYWJsZV9jb3VudFtJOTE1X1BNVV9TQU1QTEVfQklUU107CisJCS8qKgor CQkgKiBAc2FtcGxlOiBDb3VudGVyIHZhbHVlcyBmb3Igc2FtcGxpbmcgZXZlbnRzLgorCQkgKgor CQkgKiBPdXIgaW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXJzIGluIHRo aXMgZmllbGQuCisJCSAqLworCQlzdHJ1Y3QgaTkxNV9wbXVfc2FtcGxlIHNhbXBsZVtJOTE1X0VO R0lORV9TQU1QTEVfTUFYXTsKKwl9IHBtdTsKKwogCS8qCiAJICogQSBwb29sIG9mIG9iamVjdHMg dG8gdXNlIGFzIHNoYWRvdyBjb3BpZXMgb2YgY2xpZW50IGJhdGNoIGJ1ZmZlcnMKIAkgKiB3aGVu IHRoZSBjb21tYW5kIHBhcnNlciBpcyBlbmFibGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20K QEAgLTg0Myw0ICs4NjYsNyBAQCBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAogdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCk7CiAK K3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgoraW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCBjbGFzcywgdTggaW5zdGFuY2UpOworCiAjZW5k aWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9k cm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCAxMjViZGU3 ZDk1MDQuLmQzNWFmOWZmNjM1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtODYsNiArODYsNTQgQEAg ZW51bSBpOTE1X21vY3NfdGFibGVfaW5kZXggewogCUk5MTVfTU9DU19DQUNIRUQsCiB9OwogCitl bnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgeworCUk5MTVfRU5HSU5FX0NMQVNTX09USEVS ID0gMCwKKwlJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIgPSAxLAorCUk5MTVfRU5HSU5FX0NMQVNT X0NPUFkgPSAyLAorCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPID0gMywKKwlJOTE1X0VOR0lORV9D TEFTU19WSURFT19FTkhBTkNFID0gNCwKKwlJOTE1X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFC SSAqLworfTsKKworLyoqCisgKiBET0M6IHBlcmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJv dWdoIC9zeXMvYnVzL2V2ZW50X3NvdXJjZXMvZHJpdmVycy9pOTE1CisgKgorICovCisKK2VudW0g ZHJtX2k5MTVfcG11X2VuZ2luZV9zYW1wbGUgeworCUk5MTVfU0FNUExFX0JVU1kgPSAwLAorCUk5 MTVfU0FNUExFX1dBSVQgPSAxLAorCUk5MTVfU0FNUExFX1NFTUEgPSAyLAorCUk5MTVfRU5HSU5F X1NBTVBMRV9NQVggLyogbm9uLUFCSSAqLworfTsKKworI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVf QklUUyAoNCkKKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX01BU0sgKDB4ZikKKyNkZWZpbmUgSTkx NV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMgKDgpCisjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NI SUZUIFwKKwkoSTkxNV9QTVVfU0FNUExFX0JJVFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0Vf QklUUykKKworI2RlZmluZSBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBs ZSkgXAorCSgoY2xhc3MpIDw8IEk5MTVfUE1VX0NMQVNTX1NISUZUIHwgXAorCShpbnN0YW5jZSkg PDwgSTkxNV9QTVVfU0FNUExFX0JJVFMgfCBcCisJKHNhbXBsZSkpCisKKyNkZWZpbmUgSTkxNV9Q TVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSBcCisJX19JOTE1X1BNVV9FTkdJTkUoY2xh c3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9CVVNZKQorCisjZGVmaW5lIEk5MTVfUE1VX0VOR0lO RV9XQUlUKGNsYXNzLCBpbnN0YW5jZSkgXAorCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0 YW5jZSwgSTkxNV9TQU1QTEVfV0FJVCkKKworI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfU0VNQShj bGFzcywgaW5zdGFuY2UpIFwKKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5 MTVfU0FNUExFX1NFTUEpCisKKyNkZWZpbmUgX19JOTE1X1BNVV9PVEhFUih4KSAoX19JOTE1X1BN VV9FTkdJTkUoMHhmZiwgMHhmZiwgMHhmKSArIDEgKyAoeCkpCisKKyNkZWZpbmUgSTkxNV9QTVVf QUNUVUFMX0ZSRVFVRU5DWQlfX0k5MTVfUE1VX09USEVSKDApCisjZGVmaW5lIEk5MTVfUE1VX1JF UVVFU1RFRF9GUkVRVUVOQ1kJX19JOTE1X1BNVV9PVEhFUigxKQorCisjZGVmaW5lIEk5MTVfUE1V X0xBU1QgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWQorCiAvKiBFYWNoIHJlZ2lvbiBpcyBh IG1pbmltdW0gb2YgMTZrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgMjU1IG9mIHRoZW0uCiAgKi8K ICNkZWZpbmUgSTkxNV9OUl9URVhfUkVHSU9OUyAyNTUJLyogdGFibGUgc2l6ZSAyayAtIG1heGlt dW0gZHVlIHRvIHVzZQotLSAKMi45LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=