From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 15/19] drm/i915/selftests: basic huge page tests Date: Wed, 21 Jun 2017 21:33:41 +0100 Message-ID: <20170621203345.26320-16-matthew.auld@intel.com> References: <20170621203345.26320-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id A5B396E59C for ; Wed, 21 Jun 2017 20:34:05 +0000 (UTC) In-Reply-To: <20170621203345.26320-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 U2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpDYzog Sm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAgICAgICAgfCA2MDQgKysrKysrKysrKysr KysrKysrKysrCiAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3Rz LmggICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDYwNiBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGM0YTI3YjRmNDE5Yy4uNmNjZWQyODNlOWRlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTU0MTMsNiArNTQxMyw3IEBAIGk5MTVfZ2VtX29i amVjdF9nZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKICNp bmNsdWRlICJzZWxmdGVzdHMvc2NhdHRlcmxpc3QuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvbW9j a19nZW1fZGV2aWNlLmMiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2h1Z2VfZ2VtX29iamVjdC5jIgor I2luY2x1ZGUgInNlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5 MTVfZ2VtX29iamVjdC5jIgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9jb2hlcmVuY3ku YyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1 Z2VfcGFnZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTA0MzcwNDU4MDQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdl cy5jCkBAIC0wLDAgKzEsNjA0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlIDxsaW51 eC9wcmltZV9udW1iZXJzLmg+CisKKyNpbmNsdWRlICJtb2NrX2RybS5oIgorCitzdGF0aWMgdW5z aWduZWQgaW50IHBhZ2Vfc2l6ZXNbXSA9IHsKKwlJOTE1X0dUVF9QQUdFX1NJWkVfMUcsCisJSTkx NV9HVFRfUEFHRV9TSVpFXzJNLAorCUk5MTVfR1RUX1BBR0VfU0laRV82NEssCisJSTkxNV9HVFRf UEFHRV9TSVpFXzRLLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGFyZ2VzdF9wYWdl X3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJCSAgdW5zaWduZWQgaW50 IHJlbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhZ2Vfc2l6 ZXMpOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZXNbaV07CisK KwkJaWYgKEhBU19QQUdFX1NJWkUoaTkxNSwgcGFnZV9zaXplKSAmJiByZW0gPj0gcGFnZV9zaXpl KQorCQkJcmV0dXJuIHBhZ2Vfc2l6ZTsKKwl9CisKKwlHRU1fQlVHX09OKDEpOworfQorCitzdGF0 aWMgc3RydWN0IHNnX3RhYmxlICoKK2Zha2VfZ2V0X2h1Z2VfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHVuc2lnbmVkIGludCAqc2dfbWFzaykKK3sKKyNkZWZp bmUgR0ZQIChHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSkKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJY29u c3QgdW5zaWduZWQgbG9uZyBtYXggPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0 cnVjdCBzZ190YWJsZSAqc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl0eXBlb2Yob2Jq LT5iYXNlLnNpemUpIHJlbTsKKworCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQKTsKKwlp ZiAoIXN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChzZ19hbGxvY190YWJs ZShzdCwgbWF4LCBHRlApKSB7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisJfQorCisJLyoKKwkgKiBVc2UgdGhlIG9wdGltYWwgcGFnZSBzaXplZCBjaHVua3MgdG8g ZmlsbCBpbiB0aGUgc2cgdGFibGUgZnJvbSBsYXJnZQorCSAqIHRvIHNtYWxsLgorCSAqLworCXJl bSA9IG9iai0+YmFzZS5zaXplOworCXNnID0gc3QtPnNnbDsKKwlzdC0+bmVudHMgPSAwOworCWRv IHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IGdldF9sYXJnZXN0X3BhZ2Vfc2l6ZShpOTE1 LCByZW0pOworCQl1bnNpZ25lZCBpbnQgbGVuID0gcGFnZV9zaXplICogKHJlbSAvIHBhZ2Vfc2l6 ZSk7CisKKwkJc2ctPm9mZnNldCA9IDA7CisJCXNnLT5sZW5ndGggPSBsZW47CisJCXNnX2RtYV9s ZW4oc2cpID0gbGVuOworCQlzZ19kbWFfYWRkcmVzcyhzZykgPSBwYWdlX3NpemU7CisKKwkJKnNn X21hc2sgfD0gbGVuOworCisJCXN0LT5uZW50cysrOworCisJCXJlbSAtPSBsZW47CisJCWlmICgh cmVtKSB7CisJCQlzZ19tYXJrX2VuZChzZyk7CisJCQlicmVhazsKKwkJfQorCisJCXNnID0gc2df bmV4dChzZyk7CisJfSB3aGlsZSAoMSk7CisKKwlvYmotPm1tLm1hZHYgPSBJOTE1X01BRFZfRE9O VE5FRUQ7CisKKwlyZXR1cm4gc3Q7CisjdW5kZWYgR0ZQCit9CisKK3N0YXRpYyB2b2lkIGZha2Vf ZnJlZV9odWdlX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0 cnVjdCBzZ190YWJsZSAqcGFnZXMpCit7CisJc2dfZnJlZV90YWJsZShwYWdlcyk7CisJa2ZyZWUo cGFnZXMpOworfQorCitzdGF0aWMgdm9pZCBmYWtlX3B1dF9odWdlX3BhZ2VzKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJc3RydWN0IHNnX3RhYmxlICpwYWdlcykKK3sKKwlm YWtlX2ZyZWVfaHVnZV9wYWdlcyhvYmosIHBhZ2VzKTsKKwlvYmotPm1tLmRpcnR5ID0gZmFsc2U7 CisJb2JqLT5tbS5tYWR2ID0gSTkxNV9NQURWX1dJTExORUVEOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGZha2Vfb3BzID0geworCS5mbGFncyA9IEk5 MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFLAorCS5nZXRfcGFnZXMgPSBmYWtlX2dldF9odWdl X3BhZ2VzLAorCS5wdXRfcGFnZXMgPSBmYWtlX3B1dF9odWdlX3BhZ2VzLAorfTsKKworc3RhdGlj IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKK2Zha2VfaHVnZV9wYWdlZF9vYmplY3Qoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU2NCBzaXplKQoreworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisKKwlHRU1fQlVHX09OKCFzaXplKTsKKwlHRU1fQlVHX09OKCFJ U19BTElHTkVEKHNpemUsIEk5MTVfR1RUX1BBR0VfU0laRSkpOworCisJaWYgKG92ZXJmbG93c190 eXBlKHNpemUsIG9iai0+YmFzZS5zaXplKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUUyQklHKTsKKwor CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhpOTE1KTsKKwlpZiAoIW9iaikKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUt PmRybSwgJm9iai0+YmFzZSwgc2l6ZSk7CisJaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmZmFr ZV9vcHMpOworCisJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7 CisJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5j YWNoZV9sZXZlbCA9IEk5MTVfQ0FDSEVfTk9ORTsKKworCXJldHVybiBvYmo7Cit9CisKK3N0YXRp YyBpbnQgaWd0X3BwZ3R0X2h1Z2VfZmlsbCh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdf cHBndHQgKnBwZ3R0ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBn dHQtPmJhc2UuaTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXVuc2ln bmVkIGxvbmcgbWF4X3BhZ2VzID0gcHBndHQtPmJhc2UudG90YWwgPj4gUEFHRV9TSElGVDsKKwl1 bnNpZ25lZCBsb25nIHBhZ2VfbnVtOworCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwlpbnQgZXJy OworCisJZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20ocGFnZV9udW0sIDEsIG1heF9wYWdlcykg eworCQl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfZ3R0ID0gMDsKKwkJc3RydWN0IGk5MTVfdm1hICp2 bWE7CisJCXR5cGVvZihvYmotPmJhc2Uuc2l6ZSkgc2l6ZTsKKwkJaW50IGk7CisKKwkJb2JqID0g ZmFrZV9odWdlX3BhZ2VkX29iamVjdChpOTE1LCBwYWdlX251bSA8PCBQQUdFX1NISUZUKTsKKwkJ aWYgKElTX0VSUihvYmopKQorCQkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKworCQlHRU1fQlVHX09O KG9iai0+YmFzZS5zaXplICE9IHBhZ2VfbnVtIDw8IFBBR0VfU0hJRlQpOworCisJCWVyciA9IGk5 MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3B1 dDsKKworCQlHRU1fQlVHX09OKCFvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cpOworCisJCXZtYSA9IGk5 MTVfdm1hX2luc3RhbmNlKG9iaiwgJnBwZ3R0LT5iYXNlLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2 bWEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQor CisJCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwkJaWYgKGVycikg eworCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJ R0VNX0JVR19PTihvYmotPm1tLnBhZ2Vfc2l6ZXMuZ3R0KTsKKwkJR0VNX0JVR19PTighdm1hLT5w YWdlX3NpemVzLnNnKTsKKwkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnBoeXMpOworCisJ CXNpemUgPSBvYmotPmJhc2Uuc2l6ZTsKKworCQkvKiBGaWd1cmUgb3V0IHRoZSBleHBlY3RlZCBn dHQgcGFnZSBzaXplIGtub3dpbmcgdGhhdCB3ZSBnbyBmcm9tCisJCSAqIGxhcmdlc3QgdG8gc21h bGxlc3QgcGFnZSBzaXplIHNnIGNodW5rcywgYW5kIHRoYXQgd2UgYWxpZ24gdG8KKwkJICogdGhl IGxhcmdlc3QgcGFnZSBzaXplLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo cGFnZV9zaXplcyk7ICsraSkgeworCQkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6 ZXNbaV07CisKKwkJCWlmIChIQVNfUEFHRV9TSVpFKGk5MTUsIHBhZ2Vfc2l6ZSkgJiYgc2l6ZSA+ PSBwYWdlX3NpemUpIHsKKwkJCQlleHBlY3RlZF9ndHQgfD0gcGFnZV9zaXplOworCQkJCXNpemUg Jj0gcGFnZV9zaXplLTE7CisJCQl9CisJCX0KKworCQlHRU1fQlVHX09OKCFleHBlY3RlZF9ndHQp OworCQlHRU1fQlVHX09OKHNpemUpOworCisJCWlmIChleHBlY3RlZF9ndHQgJiBJOTE1X0dUVF9Q QUdFX1NJWkVfNEspCisJCQlleHBlY3RlZF9ndHQgJj0gfkk5MTVfR1RUX1BBR0VfU0laRV82NEs7 CisKKwkJaWYgKGk5MTVfdm1faXNfNDhiaXQoJnBwZ3R0LT5iYXNlKSkgeworCQkJR0VNX0JVR19P Tih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IGV4cGVjdGVkX2d0dCk7CisKKwkJCWlmICh2bWEtPnBh Z2Vfc2l6ZXMuc2cgJiBJOTE1X0dUVF9QQUdFX1NJWkVfNjRLKSB7CisJCQkJR0VNX0JVR19PTigh SVNfQUxJR05FRCh2bWEtPm5vZGUuc3RhcnQsCisJCQkJCQkgICAgICAgSTkxNV9HVFRfUEFHRV9T SVpFXzJNKSk7CisJCQkJR0VNX0JVR19PTighSVNfQUxJR05FRCh2bWEtPm5vZGUuc2l6ZSwKKwkJ CQkJCSAgICAgICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ CUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0dCAhPSBJOTE1X0dUVF9QQUdFX1NJWkVfNEsp OworCQkJR0VNX0JVR19PTih2bWEtPm5vZGUuc2l6ZSAhPSBwYWdlX251bSA8PCBQQUdFX1NISUZU KTsKKwkJfQorCisJCWk5MTVfdm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7 CisKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVj dF9wdXQob2JqKTsKKworCQlpZiAoaWd0X3RpbWVvdXQoZW5kX3RpbWUsCisJCQkJIiVzIHRpbWVk IG91dCBhdCBzaXplICVseFxuIiwKKwkJCQlfX2Z1bmNfXywgb2JqLT5iYXNlLnNpemUpKQorCQkJ YnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK291dF91bnBpbjoKKwlpOTE1X2dlbV9vYmplY3Rf dW5waW5fcGFnZXMob2JqKTsKK291dF9wdXQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwor CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGlndF9wcGd0dF9taXNhbGlnbmVkX2Rt YSh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJnOworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwl1bnNpZ25l ZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZV9tYXNrOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGVycjsKKwlpbnQgYml0OworCisJ LyogU2FuaXR5IGNoZWNrIGRtYSBtaXNhbGlnbm1lbnQgZm9yIGh1Z2UgcGFnZXMgLS0gdGhlIGRt YSBhZGRyZXNzZXMgd2UKKwkgKiBpbnNlcnQgaW50byB0aGUgcGFnaW5nIHN0cnVjdHVyZXMgbmVl ZCB0byBhbHdheXMgcmVzcGVjdCB0aGUgcGFnZQorCSAqIHNpemUgYWxpZ25tZW50LgorCSAqLwor CisJYml0ID0gaWxvZzIoSTkxNV9HVFRfUEFHRV9TSVpFXzY0Syk7CisKKwlmb3JfZWFjaF9zZXRf Yml0X2Zyb20oYml0LCAmc3VwcG9ydGVkLCBCSVRTX1BFUl9MT05HKSB7CisJCUlHVF9USU1FT1VU KGVuZF90aW1lKTsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IEJJVChiaXQpOworCQl1bnNp Z25lZCBpbnQgZmxhZ3MgPSBQSU5fVVNFUiB8IFBJTl9PRkZTRVRfRklYRUQ7CisJCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgc2l6 ZSA9CisJCQlyb3VuZF91cChwYWdlX3NpemUsIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkgPDwgMTsK KworCQlvYmogPSBmYWtlX2h1Z2VfcGFnZWRfb2JqZWN0KGk5MTUsIHNpemUpOworCQlpZiAoSVNf RVJSKG9iaikpCisJCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJCUdFTV9CVUdfT04ob2JqLT5i YXNlLnNpemUgIT0gc2l6ZSk7CisKKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhv YmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJCUdFTV9CVUdfT04oIShvYmot Pm1tLnBhZ2Vfc2l6ZXMuc2cgJiBwYWdlX3NpemUpKTsKKworCQkvKiBGb3JjZSB0aGUgcGFnZSBz aXplIGZvciB0aGlzIG9iamVjdCAqLworCQlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSBwYWdlX3Np emU7CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwp OworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJCWdvdG8g b3V0X3VucGluOworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgZmxhZ3Mp OworCQlpZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBvdXRfdW5w aW47CisJCX0KKworCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gcGFnZV9zaXpl KTsKKworCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1h KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VucGluOworCisJCS8qIFRyeSBhbGwgdGhlIG90 aGVyIHZhbGlkIG9mZnNldHMgdW50aWwgdGhlIG5leHQgYm91bmRhcnkgLS0KKwkJICogc2hvdWxk IGFsd2F5cyBmYWxsIGJhY2sgdG8gdXNpbmcgNEsgcGFnZXMuCisJCSAqLworCQlmb3IgKG9mZnNl dCA9IDQwOTY7IG9mZnNldCA8IHBhZ2Vfc2l6ZTsgb2Zmc2V0ICs9IDQwOTYpIHsKKwkJCWVyciA9 IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIGZsYWdzIHwgb2Zmc2V0KTsKKwkJCWlmIChlcnIpIHsK KwkJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJCWdvdG8gb3V0X3VucGluOworCQkJfQorCisJ CQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gSTkxNV9HVFRfUEFHRV9TSVpFXzRL KTsKKworCQkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJCWVyciA9IGk5MTVfdm1hX3VuYmluZCh2 bWEpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF91bnBpbjsKKworCQkJaWYgKGlndF90aW1l b3V0KGVuZF90aW1lLAorCQkJCQkiJXMgdGltZWQgb3V0IGF0IG9mZnNldCAleCB3aXRoIHBhZ2Ut c2l6ZSAleFxuIiwKKwkJCQkJX19mdW5jX18sIG9mZnNldCwgcGFnZV9zaXplKSkKKwkJCQlicmVh azsKKwkJfQorCisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkxNV9nZW1fb2JqZWN0X3Vu cGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9CisKKwlyZXR1 cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOwor b3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQor CitzdGF0aWMgaW50IGlndF9wcGd0dF82NEsodm9pZCAqYXJnKQoreworCXN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBw Z3R0LT5iYXNlLmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1 Y3Qgb2JqZWN0X2luZm8geworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJdW5zaWduZWQgaW50IGd0 dDsKKwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwl9IG9iamVjdHNbXSA9IHsKKwkJLyogQ2FzZXMg d2l0aCBmb3JjZWQgcGFkZGluZy9hbGlnbm1lbnQgKi8KKwkJeworCQkJLnNpemUgPSBTWl82NEss CisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9 LAorCQl7CisJCQkuc2l6ZSA9IFNaXzY0SyArIFNaXzRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BB R0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLgorCQl9LAorCQl7CisJCQkuc2l6ZSA9IFNaXzJN IC0gU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzRLLAorCQkJLm9mZnNldCA9 IDAsCisJCX0sCisJCXsKKwkJCS5zaXplID0gU1pfMk0gKyBTWl82NEssCisJCQkuZ3R0ID0gSTkx NV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQl7CisJCQkuc2l6 ZSA9IFNaXzJNICsgU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SyB8IEk5 MTVfR1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQkvKiBUcnkgd2l0 aG91dCBhbnkgZm9yY2VkIHBhZGRpbmcvYWxpZ25tZW50ICovCisJCXsKKwkJCS5zaXplID0gU1pf NjRLLAorCQkJLm9mZnNldCA9IFNaXzJNLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80 SywKKwkJfSwKKwkJeworCQkJLnNpemUgPSBTWl8xMjhLLAorCQkJLm9mZnNldCA9IFNaXzJNIC0g U1pfNjRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJfSwKKwl9OworCWlu dCBpOworCWludCBlcnI7CisKKwlpZiAoIUhBU19QQUdFX1NJWkUoaTkxNSwgSTkxNV9HVFRfUEFH RV9TSVpFXzY0SykpCisJCXJldHVybiAwOworCisJR0VNX0JVR19PTighaTkxNV92bV9pc180OGJp dCgmcHBndHQtPmJhc2UpKTsKKworCS8qIFNhbml0eSBjaGVjayBzb21lIG9mIHRoZSB0cmlja2lu ZXNzIHdpdGggNjRLIHBhZ2VzIC0tIGVpdGhlciB3ZSBjYW4KKwkgKiBzYWZlbHkgbWFyayB0aGUg d2hvbGUgcGFnZS10YWJsZSgyTSBibG9jaykgYXMgNjRLLCBvciB3ZSBoYXZlIHRvCisJICogYWx3 YXlzIGZhbGxiYWNrIHRvIDRLLgorCSAqLworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo b2JqZWN0cyk7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IG9iamVjdHNbaV0uc2l6ZTsK KwkJdW5zaWduZWQgaW50IGV4cGVjdGVkX2d0dCA9IG9iamVjdHNbaV0uZ3R0OworCQl1bnNpZ25l ZCBpbnQgb2Zmc2V0ID0gb2JqZWN0c1tpXS5vZmZzZXQ7CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1h OworCQlpbnQgZmxhZ3MgPSBQSU5fVVNFUjsKKworCQlvYmogPSBmYWtlX2h1Z2VfcGFnZWRfb2Jq ZWN0KGk5MTUsIHNpemUpOworCQlpZiAoSVNfRVJSKG9iaikpCisJCQlyZXR1cm4gUFRSX0VSUihv YmopOworCisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwkJaWYgKGVy cikKKwkJCWdvdG8gb3V0X3B1dDsKKworCQlHRU1fQlVHX09OKCFvYmotPm1tLnBhZ2Vfc2l6ZXMu c2cpOworCisJCS8qIERpc2FibGUgMk0gcGFnZXMgLS0gV2Ugb25seSB3YW50IHRvIHVzZSA2NEsv NEsgcGFnZXMgZm9yCisJCSAqIHRoaXMgdGVzdC4KKwkJICovCisJCW9iai0+bW0ucGFnZV9zaXpl cy5zZyAmPSB+STkxNV9HVFRfUEFHRV9TSVpFXzJNOworCisJCXZtYSA9IGk5MTVfdm1hX2luc3Rh bmNlKG9iaiwgJnBwZ3R0LT5iYXNlLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2bWEpKSB7CisJCQll cnIgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCWlmIChvZmZz ZXQpCisJCQlmbGFncyB8PSBQSU5fT0ZGU0VUX0ZJWEVEIHwgb2Zmc2V0OworCisJCWVyciA9IGk5 MTVfdm1hX3Bpbih2bWEsIDAsIDAsIGZsYWdzKTsKKwkJaWYgKGVycikgeworCQkJaTkxNV92bWFf Y2xvc2Uodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJR0VNX0JVR19PTihvYmot Pm1tLnBhZ2Vfc2l6ZXMuZ3R0KTsKKwkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnNnKTsK KwkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnBoeXMpOworCisJCUdFTV9CVUdfT04odm1h LT5wYWdlX3NpemVzLmd0dCAhPSBleHBlY3RlZF9ndHQpOworCisJCWlmICghb2Zmc2V0ICYmIHZt YS0+cGFnZV9zaXplcy5zZyAmIEk5MTVfR1RUX1BBR0VfU0laRV82NEspIHsKKwkJCUdFTV9CVUdf T04oIUlTX0FMSUdORUQodm1hLT5ub2RlLnN0YXJ0LAorCQkJCQkgICAgICAgSTkxNV9HVFRfUEFH RV9TSVpFXzJNKSk7CisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zaXplLAor CQkJCQkgICAgICAgSTkxNV9HVFRfUEFHRV9TSVpFXzJNKSk7CisJCX0KKworCQlpOTE1X3ZtYV91 bnBpbih2bWEpOworCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCisJCWk5MTVfZ2VtX29iamVjdF91 bnBpbl9wYWdlcyhvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJfQorCisJcmV0 dXJuIDA7CisKK291dF91bnBpbjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsK K291dF9wdXQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIGludCBpZ3RfcHBndHRfZ2VtZnNfaHVnZSh2b2lkICphcmcpCit7CisJc3RydWN0 IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OworCXVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZXNbXSA9IHsKKwkJSTkxNV9HVFRfUEFHRV9TSVpF XzJNLAorCQlJOTE1X0dUVF9QQUdFX1NJWkVfMk0gKyBJOTE1X0dUVF9QQUdFX1NJWkVfNEssCisJ fTsKKwlpbnQgZXJyOworCWludCBpOworCisJaWYgKCFIQVNfUEFHRV9TSVpFKGk5MTUsIEk5MTVf R1RUX1BBR0VfU0laRV8yTSkgfHwKKwkgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5U X0hVR0VfUEFHRUNBQ0hFKSB8fAorCSAgICAhaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCisJ CXJldHVybiAwOworCisJLyogU2FuaXR5IGNoZWNrIFRIUCB0aHJvdWdoIGdlbWZzICovCisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3Rfc2l6ZXMpOyArK2kpIHsKKwkJdW5zaWdu ZWQgaW50IHNpemUgPSBvYmplY3Rfc2l6ZXNbaV07CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwor CisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgc2l6ZSk7CisJCWlmIChJU19F UlIob2JqKSkKKwkJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwkJZXJyID0gaTkxNV9nZW1fb2Jq ZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJCUdF TV9CVUdfT04oIW9iai0+bW0ucGFnZV9zaXplcy5zZyk7CisKKwkJaWYgKG9iai0+bW0ucGFnZV9z aXplcy5zZyA8IHNpemUpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGh1Z2UgcGFn ZXNcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJ dm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwpOworCQlpZiAo SVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJCWdvdG8gb3V0X3VucGlu OworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOworCQlp ZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBvdXRfdW5waW47CisJ CX0KKworCQkvKiBUT0RPOiBtYXliZSB3ZSBzaG91bGQgdHJ5IHdyaXRpbmcgdG8gdGhlIG9iaiBm cm9tIHRoZSBncHUKKwkJICogcG92LCBzaW5jZSB3ZSByZXF1aXJlIHZhcmlvdXMgdGhpbmdzIHRv IGJlIGVuYWJsZWQvZGlzYWJsZWQKKwkJICogZm9yIGh1Z2UtcGFnZXMgdG8gd29yayBjb3JyZWN0 bHkuIEFsc28gaWYgd2UgZm9yY2UgaHVnZS1wYWdlcworCQkgKiBmb3IgZ2VtZnMgd2Ugc2hvdWxk IGJlIGFibGUgdG8gZXhlcmNpc2UgNjRLIHBhZ2VzLCBzaW5jZSB0aGlzCisJCSAqIHNob3VsZCBh bHdheXMgZ2l2ZSB1cyBhIDY0SyBhbGlnbmVkIG1lbW9yeSByZWdpb24uCisJCSAqLworCisJCUdF TV9CVUdfT04ob2JqLT5tbS5wYWdlX3NpemVzLmd0dCk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFn ZV9zaXplcy5zZyk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5waHlzKTsKKworCQlp ZiAoaTkxNV92bV9pc180OGJpdCgmcHBndHQtPmJhc2UpKSB7CisJCQlHRU1fQlVHX09OKHZtYS0+ cGFnZV9zaXplcy5ndHQgIT0gc2l6ZSk7CisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+ bm9kZS5zdGFydCwgSTkxNV9HVFRfUEFHRV9TSVpFXzJNKSk7CisJCQlHRU1fQlVHX09OKCFJU19B TElHTkVEKHZtYS0+bm9kZS5zaXplLCBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJfSBlbHNl IHsKKwkJCUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0dCAhPSBJOTE1X0dUVF9QQUdFX1NJ WkVfNEspOworCQkJR0VNX0JVR19PTih2bWEtPm5vZGUuc2l6ZSAhPSBzaXplKTsKKwkJfQorCisJ CWk5MTVfdm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkxNV9n ZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsK Kwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9w YWdlcyhvYmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1 cm4gZXJyOworfQorCitpbnQgaTkxNV9nZW1faHVnZV9wYWdlX2xpdmVfc2VsZnRlc3RzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5 MTVfc3VidGVzdCB0ZXN0c1tdID0geworCQlTVUJURVNUKGlndF9wcGd0dF9odWdlX2ZpbGwpLAor CQlTVUJURVNUKGlndF9wcGd0dF9taXNhbGlnbmVkX2RtYSksCisJCVNVQlRFU1QoaWd0X3BwZ3R0 XzY0SyksCisJCVNVQlRFU1QoaWd0X3BwZ3R0X2dlbWZzX2h1Z2UpLAorCX07CisJc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0OworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKKwlpbnQgcmV0Owor CisJZmlsZSA9IG1vY2tfZmlsZShkZXZfcHJpdik7CisJaWYgKElTX0VSUihmaWxlKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZmlsZSk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9t dXRleCk7CisJcHBndHQgPSBpOTE1X3BwZ3R0X2NyZWF0ZShkZXZfcHJpdiwgZmlsZS0+ZHJpdmVy X3ByaXYsICJtb2NrIik7CisJaWYgKElTX0VSUihwcGd0dCkpIHsKKwkJcmV0ID0gUFRSX0VSUihw cGd0dCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBpOTE1X3N1YnRlc3RzKHRl c3RzLCBwcGd0dCk7CisKKwlpOTE1X3BwZ3R0X2Nsb3NlKCZwcGd0dC0+YmFzZSk7CisJaTkxNV9w cGd0dF9wdXQocHBndHQpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJbW9ja19maWxlX2ZyZWUoZGV2X3ByaXYsIGZpbGUpOwor CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCmluZGV4IDE4YjE3NGQ4NTVjYS4uNmI0OWNiYjQ5NTM1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVf c2VsZnRlc3RzLmgKQEAgLTE1LDUgKzE1LDYgQEAgc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1f b2JqZWN0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoZG1hYnVmLCBpOTE1X2dlbV9kbWFidWZf bGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChjb2hlcmVuY3ksIGk5MTVfZ2VtX2NvaGVyZW5jeV9s aXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGd0dCwgaTkxNV9nZW1fZ3R0X2xpdmVfc2VsZnRlc3Rz KQorc2VsZnRlc3QoaHVnZSwgaTkxNV9nZW1faHVnZV9wYWdlX2xpdmVfc2VsZnRlc3RzKQogc2Vs ZnRlc3QoY29udGV4dHMsIGk5MTVfZ2VtX2NvbnRleHRfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVz dChoYW5nY2hlY2ssIGludGVsX2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cykKLS0gCjIuOS40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK