From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [RFC PATCH 04/42] drm/i915: introduce intel_memory_region Date: Thu, 14 Feb 2019 14:57:02 +0000 Message-ID: <20190214145740.14521-5-matthew.auld@intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0313C6E90E for ; Thu, 14 Feb 2019 14:57:47 +0000 (UTC) In-Reply-To: <20190214145740.14521-1-matthew.auld@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 List-Id: intel-gfx@lists.freedesktop.org U3VwcG9ydCBtZW1vcnkgcmVnaW9ucywgYXMgZGVmaW5lZCBieSBhIGdpdmVuIChzdGFydCwgZW5k KSwgYW5kIGFsbG93CmNyZWF0aW5nIEdFTSBvYmplY3RzIHdoaWNoIGFyZSBiYWNrZWQgYnkgc2Fp ZCByZWdpb24uCgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRl bC5jb20+ClNpZ25lZC1vZmYtYnk6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGxp bnV4LmludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4 LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAg ICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAg ICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCAgICAgICAg fCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jICAgIHwg MjMyICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5 X3JlZ2lvbi5oICAgIHwgMTI2ICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9odWdlX3BhZ2VzLmMgICB8ICA4MSArKysrKysKIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCiAuLi4vZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX21lbW9yeV9yZWdpb24uYyAgfCAxMjggKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jICB8ICA3MSArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5oICB8ICAzNSArKysKIDEyIGZpbGVzIGNoYW5nZWQs IDY4NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVn aW9uLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGU1Y2U4MTNkMTkzNi4uOTZiZTI2NGZhMzgy IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtODgsNiArODgsNyBAQCBpOTE1LXkgKz0gXAogCSAg aW50ZWxfZW5naW5lX2NzLm8gXAogCSAgaW50ZWxfaGFuZ2NoZWNrLm8gXAogCSAgaW50ZWxfbHJj Lm8gXAorCSAgaW50ZWxfbWVtb3J5X3JlZ2lvbi5vIFwKIAkgIGludGVsX21vY3MubyBcCiAJICBp bnRlbF9yaW5nYnVmZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8gXApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKaW5kZXggMTdmZTk0MmVhYWZhLi4wYmVhN2Q4ODkyODQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgImludGVsX3dvcGNtLmgiCiAjaW5j bHVkZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKICNpbmNsdWRlICJpbnRlbF91Yy5oIgorI2luY2x1 ZGUgImludGVsX21lbW9yeV9yZWdpb24uaCIKIAogI2luY2x1ZGUgImk5MTVfZ2VtLmgiCiAjaW5j bHVkZSAiaTkxNV9nZW1fY29udGV4dC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYjQy MWJjN2EyZTI2Li45Mjc2OGFiMjk0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNTcw Niw0ICs1NzA2LDUgQEAgaW50IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgYWxpZ24pCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5 MTVfZ2VtX29iamVjdC5jIgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9jb2hlcmVuY3ku YyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW0uYyIKKyNpbmNsdWRlICJzZWxmdGVzdHMv aW50ZWxfbWVtb3J5X3JlZ2lvbi5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X29iamVjdC5oCmluZGV4IGZhYjA0MDMzMWNkYi4uYWM1MmY2MWU4YWQxIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaApAQCAtODcsNiArODcsMTUgQEAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgewogCiAJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3Bz ICpvcHM7CiAKKwkvKioKKwkgKiBNZW1vcnkgcmVnaW9uIGZvciB0aGlzIG9iamVjdC4KKwkgKi8K KwlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtb3J5X3JlZ2lvbjsKKwkvKioKKwkgKiBM aXN0IG9mIG1lbW9yeSByZWdpb24gYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBvYmplY3QuCisJ ICovCisJc3RydWN0IGxpc3RfaGVhZCBibG9ja3M7CisKIAlzdHJ1Y3QgewogCQkvKioKIAkJICog QHZtYS5sb2NrOiBwcm90ZWN0IHRoZSBsaXN0L3RyZWUgb2Ygdm1hcwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uNDA1ZDZkNTExOTRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpbnRlbF9tZW1v cnlfcmVnaW9uLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIHZvaWQKK21lbW9y eV9yZWdpb25fZnJlZV9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ IHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpCit7CisKKwlzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxv Y2sgKmJsb2NrLCAqb247CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPm1lbW9yeV9yZWdp b24tPm1tX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJsb2NrLCBvbiwgJm9i ai0+YmxvY2tzLCBsaW5rKSB7CisJCWxpc3RfZGVsX2luaXQoJmJsb2NrLT5saW5rKTsKKwkJaTkx NV9nZW1fYnVkZHlfZnJlZSgmb2JqLT5tZW1vcnlfcmVnaW9uLT5tbSwgYmxvY2spOworCX0KKwor CXNnX2ZyZWVfdGFibGUocGFnZXMpOworCWtmcmVlKHBhZ2VzKTsKK30KKwordm9pZAoraTkxNV9t ZW1vcnlfcmVnaW9uX3B1dF9wYWdlc19idWRkeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAorCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpCit7CisJbXV0ZXhfbG9jaygmb2Jq LT5tZW1vcnlfcmVnaW9uLT5tbV9sb2NrKTsKKwltZW1vcnlfcmVnaW9uX2ZyZWVfcGFnZXMob2Jq LCBwYWdlcyk7CisJbXV0ZXhfdW5sb2NrKCZvYmotPm1lbW9yeV9yZWdpb24tPm1tX2xvY2spOwor CisJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOworfQorCitpbnQKK2k5MTVfbWVtb3J5X3JlZ2lvbl9n ZXRfcGFnZXNfYnVkZHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtID0gb2JqLT5tZW1vcnlfcmVnaW9uOworCXJlc291 cmNlX3NpemVfdCBzaXplID0gb2JqLT5iYXNlLnNpemU7CisJc3RydWN0IHNnX3RhYmxlICpzdDsK KwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBzZ19wYWdlX3NpemVzOwor CXVuc2lnbmVkIGxvbmcgbl9wYWdlczsKKworCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoc2l6ZSwg bWVtLT5tbS5taW5fc2l6ZSkpOworCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJm9iai0+YmxvY2tz KSk7CisKKwlzdCA9IGttYWxsb2Moc2l6ZW9mKCpzdCksIEdGUF9LRVJORUwpOworCWlmICghc3Qp CisJCXJldHVybiAtRU5PTUVNOworCisJbl9wYWdlcyA9IGRpdjY0X3U2NChzaXplLCBtZW0tPm1t Lm1pbl9zaXplKTsKKworCWlmIChzZ19hbGxvY190YWJsZShzdCwgbl9wYWdlcywgR0ZQX0tFUk5F TCkpIHsKKwkJa2ZyZWUoc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzZyA9IHN0LT5z Z2w7CisJc3QtPm5lbnRzID0gMDsKKwlzZ19wYWdlX3NpemVzID0gMDsKKworCW11dGV4X2xvY2so Jm1lbS0+bW1fbG9jayk7CisKKwlkbyB7CisJCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAq YmxvY2s7CisJCXVuc2lnbmVkIGludCBvcmRlcjsKKwkJdTY0IGJsb2NrX3NpemU7CisJCXU2NCBv ZmZzZXQ7CisKKwkJb3JkZXIgPSBmbHMobl9wYWdlcykgLSAxOworCQlHRU1fQlVHX09OKG9yZGVy ID4gbWVtLT5tbS5tYXhfb3JkZXIpOworCisJCWRvIHsKKwkJCWJsb2NrID0gaTkxNV9nZW1fYnVk ZHlfYWxsb2MoJm1lbS0+bW0sIG9yZGVyKTsKKwkJCWlmICghSVNfRVJSKGJsb2NrKSkKKwkJCQli cmVhazsKKworCQkJLyogWFhYOiBzb21lIGtpbmQgb2YgZXZpY3Rpb24gcGFzcywgbG9jYWwgdG8g dGhlIGRldmljZSAqLworCQkJaWYgKCFvcmRlci0tKQorCQkJCWdvdG8gZXJyX2ZyZWVfYmxvY2tz OworCQl9IHdoaWxlICgxKTsKKworCQluX3BhZ2VzIC09IDEgPDwgb3JkZXI7CisKKwkJSU5JVF9M SVNUX0hFQUQoJmJsb2NrLT5saW5rKTsKKwkJbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmb2JqLT5i bG9ja3MpOworCisJCWJsb2NrX3NpemUgPSBpOTE1X2dlbV9idWRkeV9ibG9ja19zaXplKCZtZW0t Pm1tLCBibG9jayk7CisJCW9mZnNldCA9IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX29mZnNldChibG9j ayk7CisKKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0gbWVtLT5yZWdpb24uc3RhcnQgKyBvZmZzZXQ7 CisJCXNnX2RtYV9sZW4oc2cpID0gYmxvY2tfc2l6ZTsKKworCQlzZy0+bGVuZ3RoID0gYmxvY2tf c2l6ZTsKKwkJc2dfcGFnZV9zaXplcyB8PSBibG9ja19zaXplOworCQlzdC0+bmVudHMrKzsKKwor CQlpZiAoIW5fcGFnZXMpIHsKKwkJCXNnX21hcmtfZW5kKHNnKTsKKwkJCWJyZWFrOworCQl9CisK KwkJc2cgPSBfX3NnX25leHQoc2cpOworCX0gd2hpbGUgKDEpOworCisJbXV0ZXhfdW5sb2NrKCZt ZW0tPm1tX2xvY2spOworCisJaTkxNV9zZ190cmltKHN0KTsKKworCV9faTkxNV9nZW1fb2JqZWN0 X3NldF9wYWdlcyhvYmosIHN0LCBzZ19wYWdlX3NpemVzKTsKKworCXJldHVybiAwOworCitlcnJf ZnJlZV9ibG9ja3M6CisJbWVtb3J5X3JlZ2lvbl9mcmVlX3BhZ2VzKG9iaiwgc3QpOworCW11dGV4 X3VubG9jaygmbWVtLT5tbV9sb2NrKTsKKwlyZXR1cm4gLUVOT1NQQzsKK30KKworaW50IGk5MTVf bWVtb3J5X3JlZ2lvbl9pbml0X2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0p Cit7CisJcmV0dXJuIGk5MTVfZ2VtX2J1ZGR5X2luaXQoJm1lbS0+bW0sIHJlc291cmNlX3NpemUo Jm1lbS0+cmVnaW9uKSwKKwkJCQkgICBtZW0tPm1pbl9wYWdlX3NpemUpOworfQorCit2b2lkIGk5 MTVfbWVtb3J5X3JlZ2lvbl9yZWxlYXNlX2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9u ICptZW0pCit7CisJaTkxNV9nZW1fYnVkZHlfZmluaSgmbWVtLT5tbSk7Cit9CisKK3N0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICoKK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6 ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOworCisJaWYgKCFtZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwor CisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIG1lbS0+bWluX3BhZ2Vfc2l6ZSk7CisKKwlHRU1fQlVH X09OKCFzaXplKTsKKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIEk5MTVfR1RUX01JTl9B TElHTk1FTlQpKTsKKworCWlmIChzaXplID4+IFBBR0VfU0hJRlQgPiBJTlRfTUFYKQorCQlyZXR1 cm4gRVJSX1BUUigtRTJCSUcpOworCisJaWYgKG92ZXJmbG93c190eXBlKHNpemUsIG9iai0+YmFz ZS5zaXplKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUUyQklHKTsKKworCW9iaiA9IG1lbS0+b3BzLT5v YmplY3RfY3JlYXRlKG1lbSwgc2l6ZSwgZmxhZ3MpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0 dXJuIG9iajsKKworCUlOSVRfTElTVF9IRUFEKCZvYmotPmJsb2Nrcyk7CisJb2JqLT5tZW1vcnlf cmVnaW9uID0gbWVtOworCisJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2Jq LCBvYmotPmNhY2hlX2xldmVsKTsKKworCXJldHVybiBvYmo7Cit9CisKK3N0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICoKK2ludGVsX21lbW9yeV9yZWdpb25fY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LAorCQkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkJICAgcmVz b3VyY2Vfc2l6ZV90IHNpemUsCisJCQkgICByZXNvdXJjZV9zaXplX3QgbWluX3BhZ2Vfc2l6ZSwK KwkJCSAgIHJlc291cmNlX3NpemVfdCBpb19zdGFydCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uX29wcyAqb3BzKQoreworCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9u ICptZW07CisJaW50IGVycjsKKworCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKCptZW0pLCBHRlBfS0VS TkVMKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW0tPmk5 MTUgPSBpOTE1OworCW1lbS0+cmVnaW9uID0gKHN0cnVjdCByZXNvdXJjZSlERUZJTkVfUkVTX01F TShzdGFydCwgc2l6ZSk7CisJbWVtLT5pb19zdGFydCA9IGlvX3N0YXJ0OworCW1lbS0+bWluX3Bh Z2Vfc2l6ZSA9IG1pbl9wYWdlX3NpemU7CisJbWVtLT5vcHMgPSBvcHM7CisKKwltdXRleF9pbml0 KCZtZW0tPm1tX2xvY2spOworCisJaWYgKG9wcy0+aW5pdCkgeworCQllcnIgPSBvcHMtPmluaXQo bWVtKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUobWVtKTsKKwkJCW1lbSA9IEVSUl9QVFIoZXJy KTsKKwkJfQorCX0KKworCXJldHVybiBtZW07Cit9CisKK3ZvaWQKK2ludGVsX21lbW9yeV9yZWdp b25fZGVzdHJveShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKQoreworCWlmIChtZW0t Pm9wcy0+cmVsZWFzZSkKKwkJbWVtLT5vcHMtPnJlbGVhc2UobWVtKTsKKworCWtmcmVlKG1lbSk7 Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKKyNpbmNsdWRl ICJzZWxmdGVzdHMvbW9ja19yZWdpb24uYyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbWVtb3J5X3JlZ2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNmQ4YTk1NGNhNzVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19JTlRFTF9NRU1PUllfUkVH SU9OX0hfXworI2RlZmluZSBfX0lOVEVMX01FTU9SWV9SRUdJT05fSF9fCisKKyNpbmNsdWRlIDxs aW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgImk5MTVfZ2VtX2J1ZGR5LmgiCisKK3N0cnVjdCBk cm1faTkxNV9wcml2YXRlOworc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7CitzdHJ1Y3QgaW50 ZWxfbWVtb3J5X3JlZ2lvbjsKK3N0cnVjdCBzZ190YWJsZTsKKworLyoqCisgKiAgQmFzZSBtZW1v cnkgdHlwZQorICovCitlbnVtIGludGVsX21lbW9yeV90eXBlIHsKKwlJTlRFTF9TTUVNID0gMCwK KwlJTlRFTF9MTUVNLAorCUlOVEVMX1NUT0xFTiwKK307CisKK2VudW0gaW50ZWxfcmVnaW9uX2lk IHsKKwlJTlRFTF9NRU1PUllfU01FTSA9IDAsCisJSU5URUxfTUVNT1JZX0xNRU0sCisJSU5URUxf TUVNT1JZX1NUT0xFTiwKKwlJTlRFTF9NRU1PUllfVUtOT1dOLCAvKiBTaG91bGQgYmUgbGFzdCAq LworfTsKKworI2RlZmluZSBSRUdJT05fU01FTSAgICAgQklUKElOVEVMX01FTU9SWV9TTUVNKQor I2RlZmluZSBSRUdJT05fTE1FTSAgICAgQklUKElOVEVMX01FTU9SWV9MTUVNKQorI2RlZmluZSBS RUdJT05fU1RPTEVOICAgQklUKElOVEVMX01FTU9SWV9TVE9MRU4pCisKKyNkZWZpbmUgSU5URUxf TUVNT1JZX1RZUEVfU0hJRlQgMTYKKworI2RlZmluZSBNRU1PUllfVFlQRV9GUk9NX1JFR0lPTihy KSAoaWxvZzIociA+PiBJTlRFTF9NRU1PUllfVFlQRV9TSElGVCkpCisjZGVmaW5lIE1FTU9SWV9J TlNUQU5DRV9GUk9NX1JFR0lPTihyKSAoaWxvZzIociAmIDB4ZmZmZikpCisKKy8qKgorICogTWVt b3J5IHJlZ2lvbnMgZW5jb2RlZCBhcyB0eXBlIHwgaW5zdGFuY2UKKyAqLworc3RhdGljIGNvbnN0 IHUzMiBpbnRlbF9yZWdpb25fbWFwW10gPSB7CisJW0lOVEVMX01FTU9SWV9TTUVNXSA9IEJJVChJ TlRFTF9TTUVNICsgSU5URUxfTUVNT1JZX1RZUEVfU0hJRlQpIHwgQklUKDApLAorCVtJTlRFTF9N RU1PUllfTE1FTV0gPSBCSVQoSU5URUxfTE1FTSArIElOVEVMX01FTU9SWV9UWVBFX1NISUZUKSB8 IEJJVCgwKSwKKwlbSU5URUxfTUVNT1JZX1NUT0xFTl0gPSBCSVQoSU5URUxfU1RPTEVOICsgSU5U RUxfTUVNT1JZX1RZUEVfU0hJRlQpIHwgQklUKDApLAorfTsKKworc3RydWN0IGludGVsX21lbW9y eV9yZWdpb25fb3BzIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlpbnQgKCppbml0KShzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKik7CisKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCisJKCpv YmplY3RfY3JlYXRlKShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqLAorCQkJIHJlc291cmNl X3NpemVfdCwKKwkJCSB1bnNpZ25lZCBpbnQpOworfTsKKworc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24geworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCisJY29uc3Qgc3RydWN0 IGludGVsX21lbW9yeV9yZWdpb25fb3BzICpvcHM7CisKKwlzdHJ1Y3QgaW9fbWFwcGluZyBpb21h cDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVnaW9uOworCisJc3RydWN0IGk5MTVfZ2VtX2J1ZGR5X21t IG1tOworCXN0cnVjdCBtdXRleCBtbV9sb2NrOworCisJcmVzb3VyY2Vfc2l6ZV90IGlvX3N0YXJ0 OworCXJlc291cmNlX3NpemVfdCBtaW5fcGFnZV9zaXplOworCisJdW5zaWduZWQgaW50IHR5cGU7 CisJdW5zaWduZWQgaW50IGluc3RhbmNlOworCXVuc2lnbmVkIGludCBpZDsKK307CisKK2ludCBp OTE1X21lbW9yeV9yZWdpb25faW5pdF9idWRkeShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAq bWVtKTsKK3ZvaWQgaTkxNV9tZW1vcnlfcmVnaW9uX3JlbGVhc2VfYnVkZHkoc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKm1lbSk7CisKK2ludCBpOTE1X21lbW9yeV9yZWdpb25fZ2V0X3BhZ2Vz X2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X21lbW9y eV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CisJCQkJCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMpOworCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3Jl Z2lvbiAqCitpbnRlbF9tZW1vcnlfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwKKwkJCSAgIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCSAgIHJlc291cmNlX3Np emVfdCBzaXplLAorCQkJICAgcmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3NpemUsCisJCQkgICBy ZXNvdXJjZV9zaXplX3QgaW9fc3RhcnQsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbl9vcHMgKm9wcyk7Cit2b2lkCitpbnRlbF9tZW1vcnlfcmVnaW9uX2Rlc3Ryb3koc3Ry dWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSk7CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICoKK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVjdCBpbnRlbF9tZW1vcnlf cmVnaW9uICptZW0sCisJCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHVu c2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9odWdlX3BhZ2VzLmMKaW5kZXggYjZkODQ5Mzk1OTJiLi5iMGM4YjQ5NTVmMTQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwpAQCAtNDU4LDYgKzQ1 OCw4NiBAQCBzdGF0aWMgaW50IGlndF9tb2NrX2V4aGF1c3RfZGV2aWNlX3N1cHBvcnRlZF9wYWdl cyh2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAorCitzdGF0aWMgaW50IGlndF9tb2NrX21l bW9yeV9yZWdpb25faHVnZV9wYWdlcyh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQt PnZtLmk5MTU7CisJdW5zaWduZWQgbG9uZyBzdXBwb3J0ZWQgPSBJTlRFTF9JTkZPKGk5MTUpLT5w YWdlX3NpemVzOworCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW07CisJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlpbnQgYml0 OworCWludCBlcnIgPSAwOworCisJbWVtID0gbW9ja19yZWdpb25fY3JlYXRlKGk5MTUsIDAsIFNa XzJHLAorCQkJCSBJOTE1X0dUVF9QQUdFX1NJWkVfNEssIDApOworCWlmIChJU19FUlIobWVtKSkg eworCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVy biBQVFJfRVJSKG1lbSk7CisJfQorCisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZzdXBwb3J0ZWQs IGlsb2cyKEk5MTVfR1RUX01BWF9QQUdFX1NJWkUpICsgMSkgeworCQl1bnNpZ25lZCBpbnQgcGFn ZV9zaXplID0gQklUKGJpdCk7CisJCXJlc291cmNlX3NpemVfdCBwaHlzOworCisJCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1lbSwgcGFnZV9zaXplLCAwKTsKKwkJaWYgKElT X0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJfRVJSKG9iaik7CisJCQlnb3RvIG91dF9kZXN0cm95 X2RldmljZTsKKwkJfQorCisJCXByX2luZm8oIm1lbW9yeSByZWdpb24gc3RhcnQoJXBhKVxuIiwK KwkJICAgICAgICAmb2JqLT5tZW1vcnlfcmVnaW9uLT5yZWdpb24uc3RhcnQpOworCQlwcl9pbmZv KCJjcmVhdGluZyBvYmplY3QsIHNpemU9JXhcbiIsIHBhZ2Vfc2l6ZSk7CisKKwkJdm1hID0gaTkx NV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPnZtLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2bWEp KSB7CisJCQllcnIgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF9wdXQ7CisJCX0KKworCQll cnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7CisJCWlmIChlcnIpCisJCQln b3RvIG91dF9jbG9zZTsKKworCQlwaHlzID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVz cyhvYmosIDApOworCQlpZiAoIUlTX0FMSUdORUQocGh5cywgcGFnZV9zaXplKSkgeworCQkJcHJf ZXJyKCJtZW1vcnkgcmVnaW9uIG1pc2FsaWduZWQoJXBhKVxuIiwgJnBoeXMpOworCQkJZXJyID0g LUVJTlZBTDsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJaWYgKHZtYS0+cGFnZV9zaXpl cy5ndHQgIT0gcGFnZV9zaXplKSB7CisJCQlwcl9lcnIoInBhZ2Vfc2l6ZXMuZ3R0PSV1LCBleHBl Y3RlZD0ldVxuIiwKKwkJCSAgICAgICB2bWEtPnBhZ2Vfc2l6ZXMuZ3R0LCBwYWdlX3NpemUpOwor CQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJaTkxNV92bWFf dW5waW4odm1hKTsKKwkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKworCQlpOTE1X2dlbV9vYmplY3Rf cHV0KG9iaik7CisJfQorCisJZ290byBvdXRfZGVzdHJveV9kZXZpY2U7CisKK291dF91bnBpbjoK KwlpOTE1X3ZtYV91bnBpbih2bWEpOworb3V0X2Nsb3NlOgorCWk5MTVfdm1hX2Nsb3NlKHZtYSk7 CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKK291dF9kZXN0cm95X2Rldmlj ZToKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVfZ2VtX2Ry YWluX2ZyZWVkX29iamVjdHMoaTkxNSk7CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CisJaW50ZWxfbWVtb3J5X3JlZ2lvbl9kZXN0cm95KG1lbSk7CisKKwlyZXR1cm4gZXJy OworfQorCiBzdGF0aWMgaW50IGlndF9tb2NrX3BwZ3R0X21pc2FsaWduZWRfZG1hKHZvaWQgKmFy ZykKIHsKIAlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBhcmc7CkBAIC0xNjk3LDYgKzE3 NzcsNyBAQCBpbnQgaTkxNV9nZW1faHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKHZvaWQpCiB7CiAJ c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKIAkJU1VCVEVTVChp Z3RfbW9ja19leGhhdXN0X2RldmljZV9zdXBwb3J0ZWRfcGFnZXMpLAorCQlTVUJURVNUKGlndF9t b2NrX21lbW9yeV9yZWdpb25faHVnZV9wYWdlcyksCiAJCVNVQlRFU1QoaWd0X21vY2tfcHBndHRf bWlzYWxpZ25lZF9kbWEpLAogCQlTVUJURVNUKGlndF9tb2NrX3BwZ3R0X2h1Z2VfZmlsbCksCiAJ CVNVQlRFU1QoaWd0X21vY2tfcHBndHRfNjRLKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCmluZGV4IDk4NGUwN2VkNjVlNS4u M2UzNGVlMjI1NWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKQEAgLTI1LDMgKzI1LDQgQEAgc2VsZnRlc3QoZ3R0LCBp OTE1X2dlbV9ndHRfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVfZ2Vt X2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvbnRleHRzLCBpOTE1X2dlbV9j b250ZXh0X21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoYnVkZHksIGk5MTVfZ2VtX2J1ZGR5X21v Y2tfc2VsZnRlc3RzKQorc2VsZnRlc3QobWVtb3J5X3JlZ2lvbiwgaW50ZWxfbWVtb3J5X3JlZ2lv bl9tb2NrX3NlbGZ0ZXN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uMmI4ZDI4MjE2ZDg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwpAQCAtMCwwICsxLDEyOCBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiLi4v aTkxNV9zZWxmdGVzdC5oIgorCisjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgiCisjaW5jbHVk ZSAibW9ja19jb250ZXh0LmgiCisjaW5jbHVkZSAibW9ja19kcm0uaCIKKworc3RhdGljIHZvaWQg Y2xvc2Vfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosICpvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShv YmosIG9uLCBvYmplY3RzLCBzdF9saW5rKSB7CisJCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3Bp bm5lZF9wYWdlcyhvYmopKQorCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJ CS8qIE5vIHBvbGx1dGluZyB0aGUgbWVtb3J5IHJlZ2lvbiBiZXR3ZWVuIHRlc3RzICovCisJCV9f aTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmosIEk5MTVfTU1fTk9STUFMKTsKKwkJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOworCQlsaXN0X2RlbCgmb2JqLT5zdF9saW5rKTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgaWd0X21vY2tfZmlsbCh2b2lkICphcmcpCit7CisJc3RydWN0IGludGVsX21l bW9yeV9yZWdpb24gKm1lbSA9IGFyZzsKKwlyZXNvdXJjZV9zaXplX3QgdG90YWwgPSByZXNvdXJj ZV9zaXplKCZtZW0tPnJlZ2lvbik7CisJcmVzb3VyY2Vfc2l6ZV90IHBhZ2Vfc2l6ZTsKKwlyZXNv dXJjZV9zaXplX3QgcmVtOworCXVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzOworCXVuc2lnbmVkIGxv bmcgcGFnZV9udW07CisJTElTVF9IRUFEKG9iamVjdHMpOworCWludCBlcnIgPSAwOworCisJcGFn ZV9zaXplID0gbWVtLT5tbS5taW5fc2l6ZTsKKwltYXhfcGFnZXMgPSB0b3RhbCAvIHBhZ2Vfc2l6 ZTsKKwlyZW0gPSB0b3RhbDsKKworCWZvcl9lYWNoX3ByaW1lX251bWJlcl9mcm9tKHBhZ2VfbnVt LCAxLCBtYXhfcGFnZXMpIHsKKwkJcmVzb3VyY2Vfc2l6ZV90IHNpemUgPSBwYWdlX251bSAqIHBh Z2Vfc2l6ZTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKworCQlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX3JlZ2lvbihtZW0sIHNpemUsIDApOworCQlpZiAoSVNfRVJS KG9iaikpIHsKKwkJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJy ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKSB7CisJCQlpOTE1 X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCQlicmVhazsKKwkJfQorCisJCWxpc3RfYWRkKCZvYmot PnN0X2xpbmssICZvYmplY3RzKTsKKwkJcmVtIC09IHNpemU7CisJfQorCisJaWYgKGVyciA9PSAt RU5PTUVNKQorCQllcnIgPSAwOworCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQlpZiAocGFnZV9u dW0gKiBwYWdlX3NpemUgPD0gcmVtKSB7CisJCQlwcl9lcnIoImlndF9tb2NrX2ZpbGwgZmFpbGVk LCBzcGFjZSBzdGlsbCBsZWZ0IGluIHJlZ2lvblxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9 IGVsc2UgeworCQkJZXJyID0gMDsKKwkJfQorCX0KKworCWNsb3NlX29iamVjdHMoJm9iamVjdHMp OworCisJcmV0dXJuIGVycjsKK30KKworaW50IGludGVsX21lbW9yeV9yZWdpb25fbW9ja19zZWxm dGVzdHModm9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1td ID0geworCQlTVUJURVNUKGlndF9tb2NrX2ZpbGwpLAorCX07CisJc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24gKm1lbTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKKwlpbnQgZXJy OworCisJaTkxNSA9IG1vY2tfZ2VtX2RldmljZSgpOworCWlmICghaTkxNSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwltZW0gPSBtb2NrX3JlZ2lvbl9jcmVhdGUoaTkxNSwgMCwgU1pfMkcsCisJCQkJ IEk5MTVfR1RUX1BBR0VfU0laRV80SywgMCk7CisJaWYgKElTX0VSUihtZW0pKSB7CisJCXByX2Vy cigiZmFpbGVkIHRvIGNyZWF0ZSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZXJyID0gUFRSX0VSUiht ZW0pOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKKwllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBtZW0pOworCW11dGV4X3Vu bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X2dlbV9kcmFpbl9mcmVlZF9v YmplY3RzKGk5MTUpOworCWludGVsX21lbW9yeV9yZWdpb25fZGVzdHJveShtZW0pOworCitvdXRf dW5yZWY6CisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCmluZGV4 IDg3NmY0ZTZkYWRhYy4uZjg5MDFjZDEyMTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk ZSAibW9ja19nZW1fb2JqZWN0LmgiCiAjaW5jbHVkZSAibW9ja19ndHQuaCIKICNpbmNsdWRlICJt b2NrX3VuY29yZS5oIgorI2luY2x1ZGUgIm1vY2tfcmVnaW9uLmgiCiAKIHZvaWQgbW9ja19kZXZp Y2VfZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMmM4MzcxMWY3ODBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMKQEAgLTAsMCArMSw3MSBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAibW9j a19yZWdpb24uaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29w cyBtb2NrX3JlZ2lvbl9vYmpfb3BzID0geworCS5nZXRfcGFnZXMgPSBpOTE1X21lbW9yeV9yZWdp b25fZ2V0X3BhZ2VzX2J1ZGR5LAorCS5wdXRfcGFnZXMgPSBpOTE1X21lbW9yeV9yZWdpb25fcHV0 X3BhZ2VzX2J1ZGR5LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoK K21vY2tfb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkg ICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbWVtLT5pOTE1OworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisKKwlpZiAoc2l6ZSA+IEJJVChtZW0tPm1tLm1heF9vcmRlcikg KiBtZW0tPm1tLm1pbl9zaXplKQorCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJb2JqID0g aTkxNV9nZW1fb2JqZWN0X2FsbG9jKGk5MTUpOworCWlmICghb2JqKQorCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKKworCWRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAm b2JqLT5iYXNlLCBzaXplKTsKKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZtb2NrX3JlZ2lv bl9vYmpfb3BzKTsKKworCW9iai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVSB8 IEk5MTVfR0VNX0RPTUFJTl9HVFQ7CisJb2JqLT5jYWNoZV9sZXZlbCA9IEhBU19MTEMoaTkxNSkg PyBJOTE1X0NBQ0hFX0xMQyA6IEk5MTVfQ0FDSEVfTk9ORTsKKworCXJldHVybiBvYmo7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgbW9ja19yZWdpb25f b3BzID0geworCS5pbml0ID0gaTkxNV9tZW1vcnlfcmVnaW9uX2luaXRfYnVkZHksCisJLnJlbGVh c2UgPSBpOTE1X21lbW9yeV9yZWdpb25fcmVsZWFzZV9idWRkeSwKKwkub2JqZWN0X2NyZWF0ZSA9 IG1vY2tfb2JqZWN0X2NyZWF0ZSwKK307CisKK3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoK K21vY2tfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJICAg cmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJICAg cmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3NpemUsCisJCSAgIHJlc291cmNlX3NpemVfdCBpb19z dGFydCkKK3sKKwlyZXR1cm4gaW50ZWxfbWVtb3J5X3JlZ2lvbl9jcmVhdGUoaTkxNSwgc3RhcnQs IHNpemUsIG1pbl9wYWdlX3NpemUsCisJCQkJCSAgaW9fc3RhcnQsICZtb2NrX3JlZ2lvbl9vcHMp OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVn aW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ3NzE4MzEzZmE1OAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5o CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg Ki8KKworI2lmbmRlZiBfX01PQ0tfUkVHSU9OX0gKKyNkZWZpbmUgX19NT0NLX1JFR0lPTl9ICisK K3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK21vY2tfcmVnaW9uX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkg ICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJICAgcmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3Np emUsCisJCSAgIHJlc291cmNlX3NpemVfdCBpb19zdGFydCk7CisKKyNlbmRpZiAvKiAhX19NT0NL X1JFR0lPTl9IICovCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeA==