From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: [PATCH 7/7] lib: add igt_draw Date: Wed, 25 Mar 2015 18:50:39 -0300 Message-ID: <1427320239-25667-7-git-send-email-przanoni@gmail.com> References: <1427320239-25667-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-f43.google.com (mail-qg0-f43.google.com [209.85.192.43]) by gabe.freedesktop.org (Postfix) with ESMTP id A194A6E943 for ; Wed, 25 Mar 2015 14:51:50 -0700 (PDT) Received: by qgep97 with SMTP id p97so66967607qge.1 for ; Wed, 25 Mar 2015 14:51:50 -0700 (PDT) In-Reply-To: <1427320239-25667-1-git-send-email-przanoni@gmail.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: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpGb3IgYWxsIHRo b3NlIElHVCB0ZXN0cyB0aGF0IG5lZWQgYW4gZWFzeSB3YXkgdG8gZHJhdyByZWN0YW5nbGVzIG9u CmJ1ZmZlcnMgdXNpbmcgZGlmZmVyZW50IG1ldGhvZHMuIEN1cnJlbnQgcGxhbm5lZCB1c2Vyczog RkJDIGFuZCBQU1IKQ1JDIHRlc3RzLgoKVGhlcmUgaXMgYWxzbyBhIGxpYi90ZXN0cy9pZ3RfZHJh dyBwcm9ncmFtIHRvIGNoZWNrIGlmIHRoZSBsaWJyYXJ5IGlzCnNhbmUuCgpTaWduZWQtb2ZmLWJ5 OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZp bGUuc291cmNlcyAgICAgICB8ICAgMiArCiBsaWIvaWd0X2RyYXcuYyAgICAgICAgICAgICB8IDQ2 NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3Rf ZHJhdy5oICAgICAgICAgICAgIHwgIDU0ICsrKysrKwogbGliL3Rlc3RzLy5naXRpZ25vcmUgICAg ICAgfCAgIDEgKwogbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogbGliL3Rlc3Rz L2lndF9kcmF3LmMgICAgICAgfCAyNDcgKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVz IGNoYW5nZWQsIDc3MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9k cmF3LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RyYXcuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi90ZXN0cy9pZ3RfZHJhdy5jCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJj ZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRleCAzZDkzNjI5Li44NWRjMzIxIDEwMDY0NAot LS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAt NTIsNiArNTIsOCBAQCBsaWJpbnRlbF90b29sc19sYV9TT1VSQ0VTID0gCVwKIAlpZ3RfZmIuaAkJ XAogCWlndF9jb3JlLmMJCVwKIAlpZ3RfY29yZS5oCQlcCisJaWd0X2RyYXcuYwkJXAorCWlndF9k cmF3LmgJCVwKIAkkKE5VTEwpCiAKIC5QSE9OWTogdmVyc2lvbi5oLnRtcApkaWZmIC0tZ2l0IGEv bGliL2lndF9kcmF3LmMgYi9saWIvaWd0X2RyYXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40ZWI3NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9kcmF3LmMKQEAg LTAsMCArMSw0NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8K KworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlICJpZ3RfZHJhdy5oIgorCisjaW5j bHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKKyNpbmNsdWRlICJp Z3RfY29yZS5oIgorI2luY2x1ZGUgImlndF9mYi5oIgorI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJz LmgiCisKKy8qKgorICogU0VDVElPTjppZ3RfZHJhdworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBk cmF3aW5nIGhlbHBlcnMgZm9yIHRlc3RzCisgKiBAdGl0bGU6IGktZy10IGRyYXcKKyAqIEBpbmNs dWRlOiBpZ3RfZHJhdy5oCisgKgorICogVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIHNvbWUgZnVuY3Rp b25zIGZvciBkcmF3aW5nIHJlY3RhbmdsZXMgb24gYnVmZmVycyB1c2luZworICogdGhlIG1hbnkg ZGlmZmVyZW50IGRyYXdpbmcgbWV0aG9kcyB3ZSBoYXZlLiBJdCBhbHNvIGNvbnRhaW5zIHNvbWUg d3JhcHBlcnMKKyAqIHRoYXQgbWFrZSB0aGUgcHJvY2VzcyBlYXNpZXIgaWYgeW91IGhhdmUgdGhl IGFic3RyYWN0IG9iamVjdHMgaW4gaGFuZC4KKyAqCisgKiBBbGwgZnVuY3Rpb25zIGFzc3VtZSB0 aGUgYnVmZmVycyBhcmUgaW4gdGhlIFhSR0IgODo4OjggZm9ybWF0LgorICoKKyAqLworCisvKiBT b21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBhdm9pZCBoYXZpbmcgdG8gcGFzcyB0b25z IG9mIHBhcmFtZXRlcnMKKyAqIGFyb3VuZCBldmVyeXRoaW5nLiAqLworc3RydWN0IGNtZF9kYXRh IHsKKwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQ7Cit9OworCitzdHJ1Y3QgYnVmX2RhdGEgeworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJf dCBzaXplOworCXVpbnQzMl90IHN0cmlkZTsKK307CisKK3N0cnVjdCByZWN0IHsKKwlpbnQgeDsK KwlpbnQgeTsKKwlpbnQgdzsKKwlpbnQgaDsKK307CisKK2NvbnN0IGNoYXIgKmlndF9kcmF3X2dl dF9tZXRob2RfbmFtZShlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2QpCit7CisJc3dpdGNoICht ZXRob2QpIHsKKwljYXNlIElHVF9EUkFXX01NQVBfQ1BVOgorCQlyZXR1cm4gIm1tYXAtY3B1IjsK KwljYXNlIElHVF9EUkFXX01NQVBfR1RUOgorCQlyZXR1cm4gIm1tYXAtZ3R0IjsKKwljYXNlIElH VF9EUkFXX1BXUklURToKKwkJcmV0dXJuICJwd3JpdGUiOworCWNhc2UgSUdUX0RSQVdfQkxUOgor CQlyZXR1cm4gImJsdCI7CisJY2FzZSBJR1RfRFJBV19SRU5ERVI6CisJCXJldHVybiAicmVuZGVy IjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQg c3dpenpsZV9hZGRyKGludCBhZGRyLCBpbnQgc3dpenpsZSkKK3sKKwlpbnQgYml0NjsKKworCWlm IChzd2l6emxlID09IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwKSB7CisJCWJpdDYgPSAoKGFkZHIg Pj4gNikgJiAxKSBeICgoYWRkciA+PiA5KSAmIDEpIF4KKwkJICAgICAgICgoYWRkciA+PiAxMCkg JiAxKTsKKwkJYWRkciAmPSB+KDEgPDwgNik7CisJCWFkZHIgfD0gKGJpdDYgPDwgNik7CisJfQor CisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIEl0J3MgYWxsIGluICJwaXhlbCBjb29yZGluYXRlcyIs IHNvIG1ha2Ugc3VyZSB5b3UgbXVsdGlwbHkvZGl2aWRlIGJ5IHRoZSBicHAKKyAqIGlmIHlvdSBu ZWVkIHRvLiAqLworc3RhdGljIGludCBsaW5lYXJfeF95X3RvX3RpbGVkX3BvcyhpbnQgeCwgaW50 IHksIHVpbnQzMl90IHN0cmlkZSwgaW50IHN3aXp6bGUpCit7CisJaW50IHhfdGlsZV9zaXplLCB5 X3RpbGVfc2l6ZTsKKwlpbnQgeF90aWxlX24sIHlfdGlsZV9uLCB4X3RpbGVfb2ZmLCB5X3RpbGVf b2ZmOworCWludCBsaW5lX3NpemUsIHRpbGVfc2l6ZTsKKwlpbnQgdGlsZV9uLCB0aWxlX29mZjsK KwlpbnQgdGlsZWRfcG9zLCB0aWxlc19wZXJfbGluZTsKKwlpbnQgYnBwOworCisJbGluZV9zaXpl ID0gc3RyaWRlOworCXhfdGlsZV9zaXplID0gNTEyOworCXlfdGlsZV9zaXplID0gODsKKwl0aWxl X3NpemUgPSB4X3RpbGVfc2l6ZSAqIHlfdGlsZV9zaXplOworCXRpbGVzX3Blcl9saW5lID0gbGlu ZV9zaXplIC8geF90aWxlX3NpemU7CisJYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsKKworCXlfdGls ZV9uID0geSAvIHlfdGlsZV9zaXplOworCXlfdGlsZV9vZmYgPSB5ICUgeV90aWxlX3NpemU7CisK Kwl4X3RpbGVfbiA9ICh4ICogYnBwKSAvIHhfdGlsZV9zaXplOworCXhfdGlsZV9vZmYgPSAoeCAq IGJwcCkgJSB4X3RpbGVfc2l6ZTsKKworCXRpbGVfbiA9IHlfdGlsZV9uICogdGlsZXNfcGVyX2xp bmUgKyB4X3RpbGVfbjsKKwl0aWxlX29mZiA9IHlfdGlsZV9vZmYgKiB4X3RpbGVfc2l6ZSArIHhf dGlsZV9vZmY7CisJdGlsZWRfcG9zID0gdGlsZV9uICogdGlsZV9zaXplICsgdGlsZV9vZmY7CisK Kwl0aWxlZF9wb3MgPSBzd2l6emxlX2FkZHIodGlsZWRfcG9zLCBzd2l6emxlKTsKKworCXJldHVy biB0aWxlZF9wb3MgLyBicHA7Cit9CisKKy8qIEl0J3MgYWxsIGluICJwaXhlbCBjb29yZGluYXRl cyIsIHNvIG1ha2Ugc3VyZSB5b3UgbXVsdGlwbHkvZGl2aWRlIGJ5IHRoZSBicHAKKyAqIGlmIHlv dSBuZWVkIHRvLiAqLworc3RhdGljIHZvaWQgdGlsZWRfcG9zX3RvX3hfeV9saW5lYXIoaW50IHRp bGVkX3BvcywgdWludDMyX3Qgc3RyaWRlLAorCQkJCSAgICBpbnQgc3dpenpsZSwgaW50ICp4LCBp bnQgKnkpCit7CisJaW50IHRpbGVfbiwgdGlsZV9vZmYsIHRpbGVzX3Blcl9saW5lLCBsaW5lX3Np emU7CisJaW50IHhfdGlsZV9vZmYsIHlfdGlsZV9vZmY7CisJaW50IHhfdGlsZV9uLCB5X3RpbGVf bjsKKwlpbnQgeF90aWxlX3NpemUsIHlfdGlsZV9zaXplLCB0aWxlX3NpemU7CisJaW50IGJwcDsK KworCXRpbGVkX3BvcyA9IHN3aXp6bGVfYWRkcih0aWxlZF9wb3MsIHN3aXp6bGUpOworCisJbGlu ZV9zaXplID0gc3RyaWRlOworCXhfdGlsZV9zaXplID0gNTEyOworCXlfdGlsZV9zaXplID0gODsK Kwl0aWxlX3NpemUgPSB4X3RpbGVfc2l6ZSAqIHlfdGlsZV9zaXplOworCXRpbGVzX3Blcl9saW5l ID0gbGluZV9zaXplIC8geF90aWxlX3NpemU7CisJYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsKKwor CXRpbGVfbiA9IHRpbGVkX3BvcyAvIHRpbGVfc2l6ZTsKKwl0aWxlX29mZiA9IHRpbGVkX3BvcyAl IHRpbGVfc2l6ZTsKKworCXlfdGlsZV9vZmYgPSB0aWxlX29mZiAvIHhfdGlsZV9zaXplOworCXhf dGlsZV9vZmYgPSB0aWxlX29mZiAlIHhfdGlsZV9zaXplOworCisJeF90aWxlX24gPSB0aWxlX24g JSB0aWxlc19wZXJfbGluZTsKKwl5X3RpbGVfbiA9IHRpbGVfbiAvIHRpbGVzX3Blcl9saW5lOwor CisJKnggPSAoeF90aWxlX24gKiB4X3RpbGVfc2l6ZSArIHhfdGlsZV9vZmYpIC8gYnBwOworCSp5 ID0geV90aWxlX24gKiB5X3RpbGVfc2l6ZSArIHlfdGlsZV9vZmY7Cit9CisKK3N0YXRpYyB2b2lk IGRyYXdfcmVjdF9tbWFwX2NwdShpbnQgZmQsIHN0cnVjdCBidWZfZGF0YSAqYnVmLCBzdHJ1Y3Qg cmVjdCAqcmVjdCwKKwkJCSAgICAgICB1aW50MzJfdCBjb2xvcikKK3sKKwl1aW50MzJfdCAqcHRy OworCWludCB4LCB5LCBwb3M7CisJdWludDMyX3QgdGlsaW5nLCBzd2l6emxlOworCisJZ2VtX3Nl dF9kb21haW4oZmQsIGJ1Zi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLAorCQkgICAgICAg STkxNV9HRU1fRE9NQUlOX0NQVSk7CisJZ2VtX2dldF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAm dGlsaW5nLCAmc3dpenpsZSk7CisKKwlwdHIgPSBnZW1fbW1hcF9fY3B1KGZkLCBidWYtPmhhbmRs ZSwgMCwgYnVmLT5zaXplLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0cik7CisKKwlmb3IgKHkgPSByZWN0 LT55OyB5IDwgcmVjdC0+eSArIHJlY3QtPmg7IHkrKykgeworCQlmb3IgKHggPSByZWN0LT54OyB4 IDwgcmVjdC0+eCArIHJlY3QtPnc7IHgrKykgeworCQkJaWYgKHRpbGluZykKKwkJCQlwb3MgPSBs aW5lYXJfeF95X3RvX3RpbGVkX3Bvcyh4LCB5LCBidWYtPnN0cmlkZSwKKwkJCQkJCQkgICAgICBz d2l6emxlKTsKKwkJCWVsc2UKKwkJCQlwb3MgPSAoeSAqIGJ1Zi0+c3RyaWRlIC8gc2l6ZW9mKHVp bnQzMl90KSkgKyB4OworCQkJcHRyW3Bvc10gPSBjb2xvcjsKKwkJfQorCX0KKworCWdlbV9zd19m aW5pc2goZmQsIGJ1Zi0+aGFuZGxlKTsKKworCWlndF9hc3NlcnQobXVubWFwKHB0ciwgYnVmLT5z aXplKSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgZHJhd19yZWN0X21tYXBfZ3R0KGludCBmZCwg c3RydWN0IGJ1Zl9kYXRhICpidWYsIHN0cnVjdCByZWN0ICpyZWN0LAorCQkJICAgICAgIHVpbnQz Ml90IGNvbG9yKQoreworCXVpbnQzMl90ICpwdHI7CisJaW50IHgsIHk7CisKKwlwdHIgPSBnZW1f bW1hcF9fZ3R0KGZkLCBidWYtPmhhbmRsZSwgYnVmLT5zaXplLAorCQkJICAgIFBST1RfUkVBRCB8 IFBST1RfV1JJVEUpOworCWlndF9hc3NlcnQocHRyKTsKKworCWZvciAoeSA9IHJlY3QtPnk7IHkg PCByZWN0LT55ICsgcmVjdC0+aDsgeSsrKSB7CisJCWludCBsaW5lX2JlZ2luID0geSAqIGJ1Zi0+ c3RyaWRlIC8gc2l6ZW9mKHVpbnQzMl90KTsKKwkJZm9yICh4ID0gcmVjdC0+eDsgeCA8IHJlY3Qt PnggKyByZWN0LT53OyB4KyspCisJCQlwdHJbbGluZV9iZWdpbiArIHhdID0gY29sb3I7CisJfQor CisJaWd0X2Fzc2VydChtdW5tYXAocHRyLCBidWYtPnNpemUpID09IDApOworfQorCitzdGF0aWMg dm9pZCBkcmF3X3JlY3RfcHdyaXRlX3VudGlsZWQoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1 ZiwKKwkJCQkgICAgIHN0cnVjdCByZWN0ICpyZWN0LCB1aW50MzJfdCBjb2xvcikKK3sKKwl1aW50 MzJfdCB0bXBbcmVjdC0+d107CisJaW50IGksIHksIG9mZnNldCwgYnBwOworCisJYnBwID0gc2l6 ZW9mKHVpbnQzMl90KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWN0LT53OyBpKyspCisJCXRtcFtp XSA9IGNvbG9yOworCisJZm9yICh5ID0gcmVjdC0+eTsgeSA8IHJlY3QtPnkgKyByZWN0LT5oOyB5 KyspIHsKKwkJb2Zmc2V0ID0gKHkgKiBidWYtPnN0cmlkZSkgKyAocmVjdC0+eCAqIGJwcCk7CisJ CWdlbV93cml0ZShmZCwgYnVmLT5oYW5kbGUsIG9mZnNldCwgdG1wLCByZWN0LT53ICogYnBwKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfcmVjdF9wd3JpdGVfdGlsZWQoaW50IGZkLCBzdHJ1 Y3QgYnVmX2RhdGEgKmJ1ZiwKKwkJCQkgICBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29s b3IsCisJCQkJICAgdWludDMyX3Qgc3dpenpsZSkKK3sKKwlpbnQgaTsKKwlpbnQgdGlsZWRfcG9z LCBicHAsIHgsIHk7CisJdWludDMyX3QgdG1wWzEwMjRdOworCWludCB0bXBfdXNlZCA9IDAsIHRt cF9zaXplID0gQVJSQVlfU0laRSh0bXApOworCWJvb2wgZmx1c2hfdG1wID0gZmFsc2U7CisJaW50 IHRtcF9zdGFydF9wb3MgPSAwOworCisJYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIElu c3RlYWQgb2YgZG9pbmcgb25lIHB3cml0ZSBwZXIgcGl4ZWwsIHdlIHRyeSB0byBncm91cCB0aGUg bWF4aW11bQorCSAqIGFtb3VudCBvZiBjb25zZWN1dGl2ZSBwaXhlbHMgd2UgY2FuIGluIGEgc2lu Z2xlIHB3cml0ZTogdGhhdCdzIHdoeSB3ZQorCSAqIHVzZSB0aGUgInRtcCIgdmFyaWFibGVzLiAq LworCWZvciAoaSA9IDA7IGkgPCB0bXBfc2l6ZTsgaSsrKQorCQl0bXBbaV0gPSBjb2xvcjsKKwor CWZvciAodGlsZWRfcG9zID0gMDsgdGlsZWRfcG9zIDwgYnVmLT5zaXplOyB0aWxlZF9wb3MgKz0g YnBwKSB7CisJCXRpbGVkX3Bvc190b194X3lfbGluZWFyKHRpbGVkX3BvcywgYnVmLT5zdHJpZGUs IHN3aXp6bGUsICZ4LCAmeSk7CisKKwkJaWYgKHggPj0gcmVjdC0+eCAmJiB4IDwgcmVjdC0+eCAr IHJlY3QtPncgJiYKKwkJICAgIHkgPj0gcmVjdC0+eSAmJiB5IDwgcmVjdC0+eSArIHJlY3QtPmgp IHsKKwkJCWlmICh0bXBfdXNlZCA9PSAwKQorCQkJCXRtcF9zdGFydF9wb3MgPSB0aWxlZF9wb3M7 CisJCQl0bXBfdXNlZCsrOworCQl9IGVsc2UgeworCQkJZmx1c2hfdG1wID0gdHJ1ZTsKKwkJfQor CisJCWlmICh0bXBfdXNlZCA9PSB0bXBfc2l6ZSB8fCAoZmx1c2hfdG1wICYmIHRtcF91c2VkID4g MCkpIHsKKwkJCWdlbV93cml0ZShmZCwgYnVmLT5oYW5kbGUsIHRtcF9zdGFydF9wb3MsIHRtcCwK KwkJCQkgIHRtcF91c2VkICogYnBwKTsKKwkJCWZsdXNoX3RtcCA9IGZhbHNlOworCQkJdG1wX3Vz ZWQgPSAwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkcmF3X3JlY3RfcHdyaXRlKGludCBm ZCwgc3RydWN0IGJ1Zl9kYXRhICpidWYsCisJCQkgICAgIHN0cnVjdCByZWN0ICpyZWN0LCB1aW50 MzJfdCBjb2xvcikKK3sKKwl1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7CisKKwlnZW1fZ2V0X3Rp bGluZyhmZCwgYnVmLT5oYW5kbGUsICZ0aWxpbmcsICZzd2l6emxlKTsKKworCWlmICh0aWxpbmcp CisJCWRyYXdfcmVjdF9wd3JpdGVfdGlsZWQoZmQsIGJ1ZiwgcmVjdCwgY29sb3IsIHN3aXp6bGUp OworCWVsc2UKKwkJZHJhd19yZWN0X3B3cml0ZV91bnRpbGVkKGZkLCBidWYsIHJlY3QsIGNvbG9y KTsKK30KKworc3RhdGljIHZvaWQgZHJhd19yZWN0X2JsdChpbnQgZmQsIHN0cnVjdCBjbWRfZGF0 YSAqY21kX2RhdGEsCisJCQkgIHN0cnVjdCBidWZfZGF0YSAqYnVmLCBzdHJ1Y3QgcmVjdCAqcmVj dCwKKwkJCSAgdWludDMyX3QgY29sb3IpCit7CisJZHJtX2ludGVsX2JvICpkc3Q7CisJc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlpbnQgYmx0X2NtZF9sZW4sIGJsdF9jbWRfdGls aW5nOworCXVpbnQzMl90IGRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7CisJaW50IGdl biA9IGludGVsX2dlbihkZXZpZCk7CisJdWludDMyX3QgdGlsaW5nLCBzd2l6emxlOworCWludCBw aXRjaDsKKworCWdlbV9nZXRfdGlsaW5nKGZkLCBidWYtPmhhbmRsZSwgJnRpbGluZywgJnN3aXp6 bGUpOworCisJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oY21kX2RhdGEtPmJ1Zm1nciwg ZmQsICIiLCBidWYtPmhhbmRsZSk7CisJaWd0X2Fzc2VydChkc3QpOworCisJYmF0Y2ggPSBpbnRl bF9iYXRjaGJ1ZmZlcl9hbGxvYyhjbWRfZGF0YS0+YnVmbWdyLCBkZXZpZCk7CisJaWd0X2Fzc2Vy dChiYXRjaCk7CisKKwlibHRfY21kX2xlbiA9IChnZW4gPj0gOCkgPyAgMHg1IDogMHg0OworCWJs dF9jbWRfdGlsaW5nID0gKHRpbGluZykgPyBYWV9DT0xPUl9CTFRfVElMRUQgOiAwOworCXBpdGNo ID0gKHRpbGluZykgPyBidWYtPnN0cmlkZSAvIDQgOiBidWYtPnN0cmlkZTsKKworCUJFR0lOX0JB VENIKDYsIDEpOworCU9VVF9CQVRDSChYWV9DT0xPUl9CTFRfQ01EX05PTEVOIHwgWFlfQ09MT1Jf QkxUX1dSSVRFX0FMUEhBIHwKKwkJICBYWV9DT0xPUl9CTFRfV1JJVEVfUkdCIHwgYmx0X2NtZF90 aWxpbmcgfCBibHRfY21kX2xlbik7CisJT1VUX0JBVENIKCgzIDw8IDI0KSB8ICgweEYwIDw8IDE2 KSB8IHBpdGNoKTsKKwlPVVRfQkFUQ0goKHJlY3QtPnkgPDwgMTYpIHwgcmVjdC0+eCk7CisJT1VU X0JBVENIKCgocmVjdC0+eSArIHJlY3QtPmgpIDw8IDE2KSB8IChyZWN0LT54ICsgcmVjdC0+dykp OworCWlmICh0aWxpbmcpCisJCU9VVF9SRUxPQ19GRU5DRUQoZHN0LCAwLCBJOTE1X0dFTV9ET01B SU5fUkVOREVSLCAwKTsKKwllbHNlCisJCU9VVF9SRUxPQyhkc3QsIDAsIEk5MTVfR0VNX0RPTUFJ Tl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChjb2xvcik7CisJQURWQU5DRV9CQVRDSCgpOworCisJ aW50ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gpOworCWdlbV9zeW5jKGZkLCBidWYtPmhhbmRs ZSk7CisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGRy YXdfcmVjdF9yZW5kZXIoaW50IGZkLCBzdHJ1Y3QgY21kX2RhdGEgKmNtZF9kYXRhLAorCQkJICAg ICBzdHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCisJCQkgICAgIHVpbnQz Ml90IGNvbG9yKQoreworCWRybV9pbnRlbF9ibyAqc3JjLCAqZHN0OworCXVpbnQzMl90IGRldmlk ID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7CisJaWd0X3JlbmRlcl9jb3B5ZnVuY190IHJlbmRl cmNvcHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhkZXZpZCk7CisJc3RydWN0IGlndF9idWYg c3JjX2J1ZiwgZHN0X2J1ZjsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOworCXVp bnQzMl90IHRpbGluZywgc3dpenpsZTsKKwlzdHJ1Y3QgYnVmX2RhdGEgdG1wOworCisJaWd0X3Nr aXBfb24oIXJlbmRlcmNvcHkpOworCisJZ2VtX2dldF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAm dGlsaW5nLCAmc3dpenpsZSk7CisKKwkvKiBXZSBjcmVhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGFu ZCBjb3B5IGZyb20gaXQgdXNpbmcgcmVuZGVyY29weS4gKi8KKwl0bXAuc2l6ZSA9IHJlY3QtPncg KiByZWN0LT5oICogc2l6ZW9mKHVpbnQzMl90KTsKKwl0bXAuaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgdG1wLnNpemUpOworCXRtcC5zdHJpZGUgPSByZWN0LT53ICogc2l6ZW9mKHVpbnQzMl90KTsK KwlkcmF3X3JlY3RfbW1hcF9jcHUoZmQsICZ0bXAsICYoc3RydWN0IHJlY3QpezAsIDAsIHJlY3Qt PncsIHJlY3QtPmh9LAorCQkJICAgY29sb3IpOworCisJc3JjID0gZ2VtX2hhbmRsZV90b19saWJk cm1fYm8oY21kX2RhdGEtPmJ1Zm1nciwgZmQsICIiLCB0bXAuaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0 KHNyYyk7CisJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oY21kX2RhdGEtPmJ1Zm1nciwg ZmQsICIiLCBidWYtPmhhbmRsZSk7CisJaWd0X2Fzc2VydChkc3QpOworCisJc3JjX2J1Zi5ibyA9 IHNyYzsKKwlzcmNfYnVmLnN0cmlkZSA9IHRtcC5zdHJpZGU7CisJc3JjX2J1Zi50aWxpbmcgPSBJ OTE1X1RJTElOR19OT05FOworCXNyY19idWYuc2l6ZSA9IHRtcC5zaXplOworCWRzdF9idWYuYm8g PSBkc3Q7CisJZHN0X2J1Zi5zdHJpZGUgPSBidWYtPnN0cmlkZTsKKwlkc3RfYnVmLnRpbGluZyA9 IHRpbGluZzsKKwlkc3RfYnVmLnNpemUgPSBidWYtPnNpemU7CisKKwliYXRjaCA9IGludGVsX2Jh dGNoYnVmZmVyX2FsbG9jKGNtZF9kYXRhLT5idWZtZ3IsIGRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJh dGNoKTsKKworCXJlbmRlcmNvcHkoYmF0Y2gsIGNtZF9kYXRhLT5jb250ZXh0LCAmc3JjX2J1Ziwg MCwgMCwgcmVjdC0+dywgcmVjdC0+aCwKKwkJICAgJmRzdF9idWYsIHJlY3QtPngsIHJlY3QtPnkp OworCisJZ2VtX3N5bmMoZmQsIGJ1Zi0+aGFuZGxlKTsKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVl KGJhdGNoKTsKKwlnZW1fY2xvc2UoZmQsIHRtcC5oYW5kbGUpOworfQorCisvKioKKyAqIGlndF9k cmF3X3JlY3Q6CisgKiBAZmQ6IHRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCisgKiBAYnVmbWdyOiB0 aGUgbGliZHJtIGJ1Zm1nciwgb25seSByZXF1aXJlZCBmb3IgSUdUX0RSQVdfQkxUIGFuZAorICog ICAgICAgICAgSUdUX0RSQVdfUkVOREVSCisgKiBAY29udGV4dDogdGhlIGNvbnRleHQsIGNhbiBi ZSBOVUxMIGlmIHlvdSBkb24ndCB3YW50IHRvIHRoaW5rIGFib3V0IGl0CisgKiBAYnVmX2hhbmRs ZTogdGhlIGhhbmRsZSBvZiB0aGUgYnVmZmVyIHdoZXJlIHlvdSdyZSBnb2luZyB0byBkcmF3IHRv CisgKiBAYnVmX3NpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIKKyAqIEBidWZfc3RyaWRlOiB0 aGUgc3RyaWRlIG9mIHRoZSBidWZmZXIKKyAqIEBtZXRob2Q6IG1ldGhvZCB5b3UncmUgZ29pbmcg dG8gdXNlIHRvIHdyaXRlIHRvIHRoZSBidWZmZXIKKyAqIEByZWN0X3g6IGhvcml6b250YWwgcG9z aXRpb24gb24gdGhlIGJ1ZmZlciB3aGVyZSB5b3VyIHJlY3RhbmdsZSBzdGFydHMKKyAqIEByZWN0 X3k6IHZlcnRpY2FsIHBvc2l0aW9uIG9uIHRoZSBidWZmZXIgd2hlcmUgeW91ciByZWN0YW5nbGUg c3RhcnRzCisgKiBAcmVjdF93OiB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCisgKiBAcmVjdF9oOiBo ZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQorICogQGNvbG9yOiBjb2xvciBvZiB0aGUgcmVjdGFuZ2xl CisgKgorICogVGhpcyBmdW5jdGlvbiBkcmF3cyBhIGNvbG9yZWQgcmVjdGFuZ2xlIG9uIHRoZSBk ZXN0aW5hdGlvbiBidWZmZXIsIGFsbG93aW5nCisgKiB5b3UgdG8gc3BlY2lmeSB0aGUgbWV0aG9k IHVzZWQgdG8gZHJhdyB0aGUgcmVjdGFuZ2xlLiBXZSBhc3N1bWUgMzIgYml0IHBpeGVscworICog d2l0aCA4IGJpdHMgcGVyIGNvbG9yLgorICovCit2b2lkIGlndF9kcmF3X3JlY3QoaW50IGZkLCBk cm1faW50ZWxfYnVmbWdyICpidWZtZ3IsIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAorCQkg ICB1aW50MzJfdCBidWZfaGFuZGxlLCB1aW50MzJfdCBidWZfc2l6ZSwgdWludDMyX3QgYnVmX3N0 cmlkZSwKKwkJICAgZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCBpbnQgcmVjdF94LCBpbnQg cmVjdF95LAorCQkgICBpbnQgcmVjdF93LCBpbnQgcmVjdF9oLCB1aW50MzJfdCBjb2xvcikKK3sK KwlzdHJ1Y3QgY21kX2RhdGEgY21kX2RhdGEgPSB7CisJCS5idWZtZ3IgPSBidWZtZ3IsCisJCS5j b250ZXh0ID0gY29udGV4dCwKKwl9OworCXN0cnVjdCBidWZfZGF0YSBidWYgPSB7CisJCS5oYW5k bGUgPSBidWZfaGFuZGxlLAorCQkuc2l6ZSA9IGJ1Zl9zaXplLAorCQkuc3RyaWRlID0gYnVmX3N0 cmlkZSwKKwl9OworCXN0cnVjdCByZWN0IHJlY3QgPSB7CisJCS54ID0gcmVjdF94LAorCQkueSA9 IHJlY3RfeSwKKwkJLncgPSByZWN0X3csCisJCS5oID0gcmVjdF9oLAorCX07CisKKwlzd2l0Y2gg KG1ldGhvZCkgeworCWNhc2UgSUdUX0RSQVdfTU1BUF9DUFU6CisJCWRyYXdfcmVjdF9tbWFwX2Nw dShmZCwgJmJ1ZiwgJnJlY3QsIGNvbG9yKTsKKwkJYnJlYWs7CisJY2FzZSBJR1RfRFJBV19NTUFQ X0dUVDoKKwkJZHJhd19yZWN0X21tYXBfZ3R0KGZkLCAmYnVmLCAmcmVjdCwgY29sb3IpOworCQli cmVhazsKKwljYXNlIElHVF9EUkFXX1BXUklURToKKwkJZHJhd19yZWN0X3B3cml0ZShmZCwgJmJ1 ZiwgJnJlY3QsIGNvbG9yKTsKKwkJYnJlYWs7CisJY2FzZSBJR1RfRFJBV19CTFQ6CisJCWRyYXdf cmVjdF9ibHQoZmQsICZjbWRfZGF0YSwgJmJ1ZiwgJnJlY3QsIGNvbG9yKTsKKwkJYnJlYWs7CisJ Y2FzZSBJR1RfRFJBV19SRU5ERVI6CisJCWRyYXdfcmVjdF9yZW5kZXIoZmQsICZjbWRfZGF0YSwg JmJ1ZiwgJnJlY3QsIGNvbG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChm YWxzZSk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBpZ3RfZHJhd19yZWN0X2ZiOgorICoK KyAqIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBpZ3RfZHJhd19yZWN0LCBidXQgeW91IGNh biBwYXNzIGFuIGlndF9mYiBpbnN0ZWFkCisgKiBvZiBtYW51YWxseSBwcm92aWRpbmcgaXRzIGRl dGFpbHMuIFNlZSBpZ3RfZHJhd19yZWN0LgorICovCit2b2lkIGlndF9kcmF3X3JlY3RfZmIoaW50 IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCSAgICAgIGRybV9pbnRlbF9jb250ZXh0 ICpjb250ZXh0LCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJICAgICAgZW51bSBpZ3RfZHJhd19tZXRo b2QgbWV0aG9kLCBpbnQgcmVjdF94LCBpbnQgcmVjdF95LAorCQkgICAgICBpbnQgcmVjdF93LCBp bnQgcmVjdF9oLCB1aW50MzJfdCBjb2xvcikKK3sKKwlpZ3RfZHJhd19yZWN0KGZkLCBidWZtZ3Is IGNvbnRleHQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgZmItPnN0cmlkZSwKKwkJICAgICAg bWV0aG9kLCByZWN0X3gsIHJlY3RfeSwgcmVjdF93LCByZWN0X2gsIGNvbG9yKTsKK30KKworLyoq CisgKiBpZ3RfZHJhd19maWxsX2ZiOgorICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgor ICogQGZiOiB0aGUgRkIgdGhhdCBpcyBnb2luZyB0byBiZSBmaWxsZWQKKyAqIEBjb2xvcjogdGhl IGNvbG9yIHlvdSdyZSBnb2luZyB0byBwYWludCBpdAorICoKKyAqIFRoaXMgZnVuY3Rpb24ganVz dCBwYWludHMgYW4gaWd0X2ZiIHVzaW5nIHRoZSBwcm92aWRlZCBjb2xvci4gSXQgYXNzdW1lcyAz MgorICogYml0IHBpeGVscyB3aXRoIDggYml0IGNvbG9ycy4KKyAqLwordm9pZCBpZ3RfZHJhd19m aWxsX2ZiKGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIsIHVpbnQzMl90IGNvbG9yKQoreworCWln dF9kcmF3X3JlY3RfZmIoZmQsIE5VTEwsIE5VTEwsIGZiLCBJR1RfRFJBV19NTUFQX0dUVCwKKwkJ CSAwLCAwLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIGNvbG9yKTsKK30KZGlmZiAtLWdpdCBhL2xp Yi9pZ3RfZHJhdy5oIGIvbGliL2lndF9kcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMzk5ZTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZHJhdy5oCkBAIC0w LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKwor I2lmbmRlZiBfX0lHVF9EUkFXX0hfXworI2RlZmluZSBfX0lHVF9EUkFXX0hfXworCisjaW5jbHVk ZSA8aW50ZWxfYnVmbWdyLmg+CisjaW5jbHVkZSAiaWd0X2ZiLmgiCisKK2VudW0gaWd0X2RyYXdf bWV0aG9kIHsKKwlJR1RfRFJBV19NTUFQX0NQVSwKKwlJR1RfRFJBV19NTUFQX0dUVCwKKwlJR1Rf RFJBV19QV1JJVEUsCisJSUdUX0RSQVdfQkxULAorCUlHVF9EUkFXX1JFTkRFUiwKKwlJR1RfRFJB V19NRVRIT0RfQ09VTlQsCit9OworCitjb25zdCBjaGFyICppZ3RfZHJhd19nZXRfbWV0aG9kX25h bWUoZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kKTsKKwordm9pZCBpZ3RfZHJhd19yZWN0KGlu dCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBkcm1faW50ZWxfY29udGV4dCAqY29udGV4 dCwKKwkJICAgdWludDMyX3QgYnVmX2hhbmRsZSwgdWludDMyX3QgYnVmX3NpemUsIHVpbnQzMl90 IGJ1Zl9zdHJpZGUsCisJCSAgIGVudW0gaWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwgaW50IHJlY3Rf eCwgaW50IHJlY3RfeSwKKwkJICAgaW50IHJlY3RfdywgaW50IHJlY3RfaCwgdWludDMyX3QgY29s b3IpOworCit2b2lkIGlndF9kcmF3X3JlY3RfZmIoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IsCisJCSAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaWd0X2Zi ICpmYiwKKwkJICAgICAgZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCBpbnQgcmVjdF94LCBp bnQgcmVjdF95LAorCQkgICAgICBpbnQgcmVjdF93LCBpbnQgcmVjdF9oLCB1aW50MzJfdCBjb2xv cik7CisKK3ZvaWQgaWd0X2RyYXdfZmlsbF9mYihpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1 aW50MzJfdCBjb2xvcik7CisKKyNlbmRpZiAvKiBfX0lHVF9EUkFXX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvbGliL3Rlc3RzLy5naXRpZ25vcmUgYi9saWIvdGVzdHMvLmdpdGlnbm9yZQppbmRleCBhNzQ1 YTIzLi44OGY2NjhhIDEwMDY0NAotLS0gYS9saWIvdGVzdHMvLmdpdGlnbm9yZQorKysgYi9saWIv dGVzdHMvLmdpdGlnbm9yZQpAQCAtMSw0ICsxLDUgQEAKICMgUGxlYXNlIGtlZXAgc29ydGVkIGFs cGhhYmV0aWNhbGx5CitpZ3RfZHJhdwogaWd0X2ZvcmtfaGVscGVyCiBpZ3RfaW52YWxpZF9zdWJ0 ZXN0X25hbWUKIGlndF9saXN0X29ubHkKZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIGIvbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZWNkNzNhZS4uZmY2NmQ5 ZCAxMDA2NDQKLS0tIGEvbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKQEAgLTEsNCArMSw1IEBACiBjaGVja19QUk9HUkFNUyA9IFwKKwlp Z3RfZHJhdyBcCiAJaWd0X25vX2V4aXQgXAogCWlndF9ub19leGl0X2xpc3Rfb25seSBcCiAJaWd0 X2ZvcmtfaGVscGVyIFwKZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9pZ3RfZHJhdy5jIGIvbGliL3Rl c3RzL2lndF9kcmF3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMGNj MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi90ZXN0cy9pZ3RfZHJhdy5jCkBAIC0wLDAgKzEsMjQ3 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKy8qIFRoaXMg cHJvZ3JhbSB0ZXN0cyB3aGV0aGVyIHRoZSBpZ3RfZHJhdyBsaWJyYXJ5IGFjdHVhbGx5IHdvcmtz LiAqLworCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlndF9hdXguaCIKKyNpbmNs dWRlICJpZ3RfZHJhdy5oIgorI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0 X2ZiLmgiCisjaW5jbHVkZSAiaWd0X2ttcy5oIgorCisjZGVmaW5lIE1BWF9DT05ORUNUT1JTIDMy CisKK3N0cnVjdCBtb2Rlc2V0X3BhcmFtcyB7CisJdWludDMyX3QgY3J0Y19pZDsKKwl1aW50MzJf dCBjb25uZWN0b3JfaWQ7CisJZHJtTW9kZU1vZGVJbmZvUHRyIG1vZGU7Cit9OworCitpbnQgZHJt X2ZkOworZHJtTW9kZVJlc1B0ciBkcm1fcmVzOworZHJtTW9kZUNvbm5lY3RvclB0ciBkcm1fY29u bmVjdG9yc1tNQVhfQ09OTkVDVE9SU107Citkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CitpZ3Rf cGlwZV9jcmNfdCAqcGlwZV9jcmM7CisKK2Jvb2wgaGFzX21ldGhvZF9iYXNlX2NyYyA9IGZhbHNl OworaWd0X2NyY190IG1ldGhvZF9iYXNlX2NyYzsKKworc3RydWN0IG1vZGVzZXRfcGFyYW1zIG1z OworCitzdGF0aWMgdm9pZCBmaW5kX21vZGVzZXRfcGFyYW1zKHZvaWQpCit7CisJaW50IGk7CisJ dWludDMyX3QgY29ubmVjdG9yX2lkID0gMCwgY3J0Y19pZDsKKwlkcm1Nb2RlTW9kZUluZm9QdHIg bW9kZSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHJtX3Jlcy0+Y291bnRfY29ubmVjdG9y czsgaSsrKSB7CisJCWRybU1vZGVDb25uZWN0b3JQdHIgYyA9IGRybV9jb25uZWN0b3JzW2ldOwor CisJCWlmIChjLT5jb3VudF9tb2RlcykgeworCQkJY29ubmVjdG9yX2lkID0gYy0+Y29ubmVjdG9y X2lkOworCQkJbW9kZSA9ICZjLT5tb2Rlc1swXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlndF9y ZXF1aXJlKGNvbm5lY3Rvcl9pZCk7CisKKwljcnRjX2lkID0gZHJtX3Jlcy0+Y3J0Y3NbMF07CisJ aWd0X2Fzc2VydChjcnRjX2lkKTsKKwlpZ3RfYXNzZXJ0KG1vZGUpOworCisJbXMuY29ubmVjdG9y X2lkID0gY29ubmVjdG9yX2lkOworCW1zLmNydGNfaWQgPSBjcnRjX2lkOworCW1zLm1vZGUgPSBt b2RlOworCit9CisKK3N0YXRpYyB2b2lkIGdldF9tZXRob2RfY3JjKGVudW0gaWd0X2RyYXdfbWV0 aG9kIG1ldGhvZCwgdWludDY0X3QgdGlsaW5nLAorCQkJICAgaWd0X2NyY190ICpjcmMpCit7CisJ c3RydWN0IGlndF9mYiBmYjsKKwlpbnQgcmM7CisKKwlpZ3RfY3JlYXRlX2ZiKGRybV9mZCwgbXMu bW9kZS0+aGRpc3BsYXksIG1zLm1vZGUtPnZkaXNwbGF5LAorCQkgICAgICBEUk1fRk9STUFUX1hS R0I4ODg4LCB0aWxpbmcsICZmYik7CisJaWd0X2RyYXdfcmVjdF9mYihkcm1fZmQsIGJ1Zm1nciwg TlVMTCwgJmZiLCBtZXRob2QsCisJCQkgMCwgMCwgZmIud2lkdGgsIGZiLmhlaWdodCwgMHhGRik7 CisKKwlpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVmbWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwK KwkJCSBmYi53aWR0aCAvIDQsIGZiLmhlaWdodCAvIDQsCisJCQkgZmIud2lkdGggLyAyLCBmYi5o ZWlnaHQgLyAyLCAweEZGMDApOworCWlndF9kcmF3X3JlY3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5V TEwsICZmYiwgbWV0aG9kLAorCQkJIGZiLndpZHRoIC8gOCwgZmIuaGVpZ2h0IC8gOCwKKwkJCSBm Yi53aWR0aCAvIDQsIGZiLmhlaWdodCAvIDQsIDB4RkYwMDAwKTsKKwlpZ3RfZHJhd19yZWN0X2Zi KGRybV9mZCwgYnVmbWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwKKwkJCSBmYi53aWR0aCAvIDIsIGZi LmhlaWdodCAvIDIsCisJCQkgZmIud2lkdGggLyAzLCBmYi5oZWlnaHQgLyAzLCAweEZGMDBGRik7 CisKKwlyYyA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgbXMuY3J0Y19pZCwgZmIuZmJfaWQsIDAs IDAsCisJCQkgICAgJm1zLmNvbm5lY3Rvcl9pZCwgMSwgbXMubW9kZSk7CisJaWd0X2Fzc2VydChy YyA9PSAwKTsKKworCWlndF9kZWJ1Z193YWl0X2Zvcl9rZXlwcmVzcygiY3JjIik7CisJaWd0X3Bp cGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCBjcmMpOworCisJa21zdGVzdF91bnNldF9hbGxf Y3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsKKwlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwgJmZiKTsKK30K Kworc3RhdGljIHZvaWQgZHJhd19tZXRob2Rfc3VidGVzdChlbnVtIGlndF9kcmF3X21ldGhvZCBt ZXRob2QsIHVpbnQ2NF90IHRpbGluZykKK3sKKwlpZ3RfY3JjX3QgY3JjOworCisJa21zdGVzdF91 bnNldF9hbGxfY3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsKKworCWZpbmRfbW9kZXNldF9wYXJhbXMo KTsKKworCS8qIFVzZSBJR1RfRFJBV19NTUFQX0dUVCBvbiBhbiB1bnRpbGVkIGJ1ZmZlciBhcyB0 aGUgcGFyYW1ldGVyIGZvcgorCSAqIGNvbXBhcmlzb24uIENhY2hlIHRoZSB2YWx1ZSBzbyB3ZSBk b24ndCByZWNvbXB1dGUgaXQgZm9yIGV2ZXJ5IHNpbmdsZQorCSAqIHN1YnRlc3QuICovCisJaWYg KCFoYXNfbWV0aG9kX2Jhc2VfY3JjKSB7CisJCWdldF9tZXRob2RfY3JjKElHVF9EUkFXX01NQVBf R1RULCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgICZtZXRob2RfYmFzZV9j cmMpOworCQloYXNfbWV0aG9kX2Jhc2VfY3JjID0gdHJ1ZTsKKwl9CisKKwlnZXRfbWV0aG9kX2Ny YyhtZXRob2QsIHRpbGluZywgJmNyYyk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJm1l dGhvZF9iYXNlX2NyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9maWxsX2NyYyh1aW50NjRfdCB0 aWxpbmcsIGlndF9jcmNfdCAqY3JjKQoreworCXN0cnVjdCBpZ3RfZmIgZmI7CisJaW50IHJjOwor CisJaWd0X2NyZWF0ZV9mYihkcm1fZmQsIG1zLm1vZGUtPmhkaXNwbGF5LCBtcy5tb2RlLT52ZGlz cGxheSwKKwkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdGlsaW5nLCAmZmIpOworCisJaWd0 X2RyYXdfZmlsbF9mYihkcm1fZmQsICZmYiwgMHhGRik7CisKKwlyYyA9IGRybU1vZGVTZXRDcnRj KGRybV9mZCwgbXMuY3J0Y19pZCwgZmIuZmJfaWQsIDAsIDAsCisJCQkgICAgJm1zLmNvbm5lY3Rv cl9pZCwgMSwgbXMubW9kZSk7CisJaWd0X2Fzc2VydChyYyA9PSAwKTsKKworCWlndF9kZWJ1Z193 YWl0X2Zvcl9rZXlwcmVzcygiY3JjIik7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVf Y3JjLCBjcmMpOworCisJa21zdGVzdF91bnNldF9hbGxfY3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsK KwlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwgJmZiKTsKK30KKworc3RhdGljIHZvaWQgZmlsbF9mYl9z dWJ0ZXN0KHZvaWQpCit7CisJaW50IHJjOworCXN0cnVjdCBpZ3RfZmIgZmI7CisJaWd0X2NyY190 IGJhc2VfY3JjLCBjcmM7CisKKwlrbXN0ZXN0X3Vuc2V0X2FsbF9jcnRjcyhkcm1fZmQsIGRybV9y ZXMpOworCisJZmluZF9tb2Rlc2V0X3BhcmFtcygpOworCisJaWd0X2NyZWF0ZV9mYihkcm1fZmQs IG1zLm1vZGUtPmhkaXNwbGF5LCBtcy5tb2RlLT52ZGlzcGxheSwKKwkJICAgICAgRFJNX0ZPUk1B VF9YUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwgJmZiKTsKKworCWlndF9kcmF3 X3JlY3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5VTEwsICZmYiwgSUdUX0RSQVdfTU1BUF9HVFQsCisJ CQkgMCwgMCwgZmIud2lkdGgsIGZiLmhlaWdodCwgMHhGRik7CisKKwlyYyA9IGRybU1vZGVTZXRD cnRjKGRybV9mZCwgbXMuY3J0Y19pZCwgZmIuZmJfaWQsIDAsIDAsCisJCQkgICAgJm1zLmNvbm5l Y3Rvcl9pZCwgMSwgbXMubW9kZSk7CisJaWd0X2Fzc2VydChyYyA9PSAwKTsKKworCWlndF9kZWJ1 Z193YWl0X2Zvcl9rZXlwcmVzcygiY3JjIik7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBp cGVfY3JjLCAmYmFzZV9jcmMpOworCisJZ2V0X2ZpbGxfY3JjKExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkUsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmMsICZiYXNlX2NyYyk7CisK KwlnZXRfZmlsbF9jcmMoTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsICZjcmMpOworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZjcmMsICZiYXNlX2NyYyk7CisKKwlrbXN0ZXN0X3Vuc2V0X2Fs bF9jcnRjcyhkcm1fZmQsIGRybV9yZXMpOworCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmIpOwor fQorCitzdGF0aWMgdm9pZCBzZXR1cF9lbnZpcm9ubWVudCh2b2lkKQoreworCWludCBpOworCisJ ZHJtX2ZkID0gZHJtX29wZW5fYW55X21hc3RlcigpOworCWlndF9yZXF1aXJlKGRybV9mZCA+PSAw KTsKKworCWRybV9yZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7CisJaWd0X2Fzc2Vy dChkcm1fcmVzLT5jb3VudF9jb25uZWN0b3JzIDw9IE1BWF9DT05ORUNUT1JTKTsKKworCWZvciAo aSA9IDA7IGkgPCBkcm1fcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspCisJCWRybV9jb25uZWN0 b3JzW2ldID0gZHJtTW9kZUdldENvbm5lY3Rvcihkcm1fZmQsCisJCQkJCQkJZHJtX3Jlcy0+Y29u bmVjdG9yc1tpXSk7CisKKwlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwlidWZt Z3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7CisJaWd0X2Fzc2Vy dChidWZtZ3IpOworCWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOwor CisJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KDAsIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9B VVRPKTsKK30KKworc3RhdGljIHZvaWQgdGVhcmRvd25fZW52aXJvbm1lbnQodm9pZCkKK3sKKwlp bnQgaTsKKworCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsKKworCWRybV9pbnRlbF9idWZt Z3JfZGVzdHJveShidWZtZ3IpOworCisJZm9yIChpID0gMDsgaSA8IGRybV9yZXMtPmNvdW50X2Nv bm5lY3RvcnM7IGkrKykKKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoZHJtX2Nvbm5lY3RvcnNbaV0p OworCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMoZHJtX3Jlcyk7CisJY2xvc2UoZHJtX2ZkKTsKK30K KworaWd0X21haW4KK3sKKwllbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2Q7CisKKwlpZ3RfZml4 dHVyZQorCQlzZXR1cF9lbnZpcm9ubWVudCgpOworCisJZm9yIChtZXRob2QgPSAwOyBtZXRob2Qg PCBJR1RfRFJBV19NRVRIT0RfQ09VTlQ7IG1ldGhvZCsrKSB7CisJCWlndF9zdWJ0ZXN0X2YoImRy YXctbWV0aG9kLSVzLXVudGlsZWQiLAorCQkJICAgICAgaWd0X2RyYXdfZ2V0X21ldGhvZF9uYW1l KG1ldGhvZCkpCisJCQlkcmF3X21ldGhvZF9zdWJ0ZXN0KG1ldGhvZCwgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSk7CisJCWlndF9zdWJ0ZXN0X2YoImRyYXctbWV0aG9kLSVzLXRpbGVkIiwKKwkJ CSAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFtZShtZXRob2QpKQorCQkJZHJhd19tZXRob2Rf c3VidGVzdChtZXRob2QsCisJCQkJCSAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCk7 CisJfQorCisJaWd0X3N1YnRlc3QoImZpbGwtZmIiKQorCQlmaWxsX2ZiX3N1YnRlc3QoKTsKKwor CWlndF9maXh0dXJlCisJCXRlYXJkb3duX2Vudmlyb25tZW50KCk7Cit9Ci0tIAoyLjEuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK