From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBA276E030 for ; Tue, 22 May 2018 10:48:58 +0000 (UTC) Message-ID: <1526986136.27355.1.camel@intel.com> From: Mika Kahola Date: Tue, 22 May 2018 13:48:56 +0300 In-Reply-To: <1526646040-15636-1-git-send-email-juhapekka.heikkila@gmail.com> References: <1526646040-15636-1-git-send-email-juhapekka.heikkila@gmail.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_available_modes_crc: Test all modes on all planes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Juha-Pekka Heikkila , igt-dev@lists.freedesktop.org List-ID: cHVzaGVkLCB0aGFua3MgZm9yIHRoZSBwYXRjaCEKCk9uIEZyaSwgMjAxOC0wNS0xOCBhdCAxNToy MCArMDMwMCwgSnVoYS1QZWtrYSBIZWlra2lsYSB3cm90ZToKPiBBc2sgZnJvbSBrZXJuZWwgYWJv dXQgc3VwcG9ydGVkIG1vZGVzIGZvciBlYWNoIHBsYW5lIGFuZCB0cnkgc2V0dGluZwo+IHRoZW0g b24gZGlzcGxheSBhbmQgdmVyaWZ5IGZ1bmN0aW9uYWxpdHkgd2l0aCBjcmMuCj4gCj4gRFJNX0ZP Uk1BVF9BUkdCODg4OCBhbmQgRFJNX0ZPUk1BVF9BQkdSODg4OCBza2lwIGNyYyB0ZXN0aW5nIG9u Cj4gcHJpbWFyeSBhbmQgb3ZlcmxheSBwbGFuZXMgYmVjYXVzZSB0aGV5IHByb2R1Y2UgaW5jb3Jy ZWN0IGNyY3MgZnJvbQo+IGhhcmR3YXJlLiBEUk1fRk9STUFUX0FSR0I4ODg4IGlzIHRlc3RlZCBv biBjdXJzb3IgcGxhbmUuCj4gCj4gdjM6IGFkZHJlc3MgcmV2aWV3IGNvbW1lbnRzIGZyb20gTWlr YSBLYWhvbGEuCj4gU3RvcCBjcmMgYXQgZW5kIG9mIHRlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFVz ZSBsaWJkcm0gaW5zdGVhZAo+IG9mIG1peGluZyBpb2N0bCBhbmQgbGliZHJtLgo+IAo+IHYyOiBB ZGRyZXNzIHJldmlldyBjb21tZW50cyBmcm9tIE1pa2EgS2Fob2xhLgo+IEtlZXAgY3JjIHJ1bm5p bmcgZm9yIGFsbCB0ZXN0cyB3aGlsZSBvbiBzYW1lIHBpcGUsIHNldCB0aWxlIGhlaWdodAo+IHRv IDE2IGFuZCByZWFkIG9ubHkgb25lIGNyYyBwZXIgdGVzdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBK dWhhLVBla2thIEhlaWtraWxhIDxqdWhhcGVra2EuaGVpa2tpbGFAZ21haWwuY29tPgo+IFJldmll d2VkLWJ5OiBNaWthIEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgo+IC0tLQo+IAo+IEkg ZGlkbid0IGdvIGFkZGluZyBpZ3RfZXhpdCgpIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgYmVjYXVz ZSBJIHVzZQo+IGlndF9tYWluCj4gd2hpY2ggd2lsbCBkbyBpZ3RfZXhpdCgpIGZvciBtZS4KPiAK PiDCoHRlc3RzL01ha2VmaWxlLnNvdXJjZXPCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsK PiDCoHRlc3RzL2ttc19hdmFpbGFibGVfbW9kZXNfY3JjLmMgfCA1MjMKPiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqB0ZXN0cy9tZXNvbi5idWlsZMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsKPiDCoDMgZmlsZXMgY2hhbmdlZCwgNTI1 IGluc2VydGlvbnMoKykKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfYXZhaWxhYmxl X21vZGVzX2NyYy5jCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggZGRjYzE4Zi4uNmFhMDMwNiAxMDA2NDQKPiAt LS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwo+IEBAIC0xNzMsNiArMTczLDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gwqAJa21zX2F0b21pYyBc Cj4gwqAJa21zX2F0b21pY19pbnRlcnJ1cHRpYmxlIFwKPiDCoAlrbXNfYXRvbWljX3RyYW5zaXRp b24gXAo+ICsJa21zX2F2YWlsYWJsZV9tb2Rlc19jcmMgXAo+IMKgCWttc19idXN5IFwKPiDCoAlr bXNfY2NzIFwKPiDCoAlrbXNfY2h2X2N1cnNvcl9mYWlsIFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMv a21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYwo+IGIvdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19j cmMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGE1OGVlNQo+IC0t LSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9rbXNfYXZhaWxhYmxlX21vZGVzX2NyYy5jCj4gQEAg LTAsMCArMSw1MjMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9y YXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24KPiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gIlNvZnR3YXJl IiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0Cj4gbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiBzdWJsaWNlbnNlLAo+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbQo+IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcK PiB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwKPiBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAq Cj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKg SU4gTk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9SIE9USEVSCj4gKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAo+IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiZHJtX21vZGUuaCIKPiArI2luY2x1 ZGUgImRybV9mb3VyY2MuaCIKPiArI2luY2x1ZGUgImlndC5oIgo+ICsKPiArSUdUX1RFU1RfREVT Q1JJUFRJT04oIkNSQyB0ZXN0IGFsbCBkaWZmZXJlbnQgcGxhbmUgbW9kZXMgd2hpY2gKPiBrZXJu ZWwgYWR2ZXJ0aXNlcy4iKTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsKPiArCWludCBnZnhfZmQ7 Cj4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29t bWl0Owo+ICsKPiArCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIHByaW1hcnlf ZmI7Cj4gKwo+ICsJdW5pb24gewo+ICsJCWNoYXIgbmFtZVs1XTsKPiArCQl1aW50MzJfdCBkd29y ZDsKPiArCX0gZm9ybWF0Owo+ICsJYm9vbCBzZXBhcmF0ZXByaW1hcnlwbGFuZTsKPiArCj4gKwl1 aW50MzJfdCBnZW1faGFuZGxlOwo+ICsJdWludDMyX3QgZ2VtX2hhbmRsZV95dXY7Cj4gKwl1bnNp Z25lZCBpbnQgc2l6ZTsKPiArCXVuc2lnbmVkIGNoYXIqIGJ1ZjsKPiArCj4gKwkvKgo+ICsJwqAq IGNvbXBhcmlzb24gY3Jjcwo+ICsJwqAqLwo+ICsJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ ICsKPiArCWlndF9jcmNfdCBjdXJzb3JfY3JjOwo+ICsJaWd0X2NyY190IGZ1bGxzY3JlZW5fY3Jj Owo+ICt9IGRhdGFfdDsKPiArCj4gKwo+ICtzdGF0aWMgaW50IGRvX3dyaXRlKGludCBmZCwgaW50 IGhhbmRsZSwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9wd3JpdGUgd3JpdGU7Cj4gKwltZW1zZXQoJndyaXRlLCAweDAwLCBzaXplb2Yod3JpdGUpKTsK PiArCXdyaXRlLmhhbmRsZSA9IGhhbmRsZTsKPiArCXdyaXRlLmRhdGFfcHRyID0gKHVpbnRwdHJf dClidWY7Cj4gKwl3cml0ZS5zaXplID0gc2l6ZTsKPiArCXdyaXRlLm9mZnNldCA9IDA7Cj4gKwly ZXR1cm4gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFLCAmd3JpdGUpOwo+ ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgZ2VuZXJhdGVfY29tcGFyaXNvbl9jcmNfbGlzdChk YXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdAo+ICpvdXRwdXQpCj4gK3sKPiArCWRybU1vZGVNb2Rl SW5mbyAqbW9kZTsKPiArCXVpbnQ2NF90IHcsIGg7Cj4gKwlpbnQgZmJpZDsKPiArCWNhaXJvX3Qg KmNyOwo+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwo+ICsJbW9kZSA9IGlndF9vdXRwdXRf Z2V0X21vZGUob3V0cHV0KTsKPiArCWZiaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmdm eF9mZCwKPiArCQkJCcKgwqDCoG1vZGUtPmhkaXNwbGF5LAo+ICsJCQkJwqDCoMKgbW9kZS0+dmRp c3BsYXksCj4gKwkJCQnCoMKgwqBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChkYXQKPiBh LT5nZnhfZmQpKSA8IDkgPyBEUk1fRk9STUFUX1hSR0I4ODg4IDogRFJNX0ZPUk1BVF9BUkdCODg4 OCwKPiArCQkJCcKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQnCoMKgwqAw LCAwLCAwLAo+ICsJCQkJwqDCoMKgJmRhdGEtPnByaW1hcnlfZmIpOwo+ICsKPiArCWlndF9hc3Nl cnQoZmJpZCk7Cj4gKwo+ICsJZHJtR2V0Q2FwKGRhdGEtPmdmeF9mZCwgRFJNX0NBUF9DVVJTT1Jf V0lEVEgsICZ3KTsKPiArCWRybUdldENhcChkYXRhLT5nZnhfZmQsIERSTV9DQVBfQ1VSU09SX0hF SUdIVCwgJmgpOwo+ICsKPiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZGF0YS0+Z2Z4X2ZkLCAm ZGF0YS0+cHJpbWFyeV9mYik7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJwqDCoMKgwqAwLjAsIDAuMCwgMC4wKTsKPiAr CWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgdywgaCwgMS4wLCAxLjAsIDEuMCk7Cj4gKwlpZ3Rf YXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7Cj4gKwo+ICsJcHJpbWFyeSA9IGlndF9vdXRw dXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LAo+IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJ aWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gKwlpZ3RfZGlz cGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ICsKPiArCWlndF9w aXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7Cj4gKwlpZ3RfcGlwZV9jcmNfZ2V0X3Npbmds ZShkYXRhLT5waXBlX2NyYywgJmRhdGEtPmN1cnNvcl9jcmMpOwo+ICsJaWd0X3BsYW5lX3NldF9m YihwcmltYXJ5LCBOVUxMKTsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXks IGRhdGEtPmNvbW1pdCk7Cj4gKwo+ICsJaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZGF0 YS0+Z2Z4X2ZkKSkgPCA5ID8KPiArCQnCoMKgaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBtb2Rl LT5oZGlzcGxheSwgbW9kZS0KPiA+dmRpc3BsYXksIDEuMCwgMS4wLCAxLjApIDoKPiArCQnCoMKg aWd0X3BhaW50X2NvbG9yX2FscGhhKGNyLCAwLCAwLCBtb2RlLT5oZGlzcGxheSwKPiBtb2RlLT52 ZGlzcGxheSwgMS4wLCAxLjAsIDEuMCwgMS4wKTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBy aW1hcnksICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEt PmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwo+ICsJaWd0X3BpcGVfY3JjX2RyYWluKGRhdGEt PnBpcGVfY3JjKTsKPiArCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAm ZGF0YS0KPiA+ZnVsbHNjcmVlbl9jcmMpOwo+ICsKPiArCWNhaXJvX2Rlc3Ryb3koY3IpOwo+ICsJ aWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiArfQo+ICsK PiArLyoKPiArICogZmlsbF9pbl9mYiB0ZWxsIGluIHJldHVybiB2YWx1ZSBpZiBzZWxlY3RlZCBt b2RlIHNob3VsZCBiZQo+ICsgKiBwcm9jZWVkIHRvIGNyYyBjaGVjawo+ICsgKi8KPiArc3RhdGlj IGJvb2wgZmlsbF9pbl9mYihkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+IGln dF9wbGFuZV90ICpwbGFuZSwKPiArCQnCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGZvcm1hdCkKPiAr ewo+ICsJc2lnbmVkIGksIGMsIHdyaXRlc2l6ZTsKPiArCXVuc2lnbmVkIHNob3J0KiBwdGVtcF8x Nl9idWY7Cj4gKwl1bnNpZ25lZCBpbnQqIHB0ZW1wXzMyX2J1ZjsKPiArCj4gKwljb25zdCBzdHJ1 Y3Qgewo+ICsJCXVpbnQzMl90CWZvdXJjYzsKPiArCQljaGFyCQl6ZXJvcGFkZGluZzsKPiArCQll bnVtCQl7IEJZVEVTX1BQXzE9MSwKPiArCQkJCcKgwqBCWVRFU19QUF8yPTIsCj4gKwkJCQnCoMKg QllURVNfUFBfND00LAo+ICsJCQkJwqDCoE5WMTIsCj4gKyNpZiBkZWZpbmVkKERSTV9GT1JNQVRf UDAxMCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4gZGVmaW5lZChEUk1fRk9STUFU X1AwMTYpCj4gKwkJCQnCoMKgUDAxMCwKPiArI2VuZGlmCj4gKwkJCQnCoMKgU0tJUCB9IGJwcDsK PiArCQl1aW50MzJfdAl2YWx1ZTsKPiArCX0gZmlsbGVyc1tdID0gewo+ICsJCXsgRFJNX0ZPUk1B VF9DOCwgMCwgQllURVNfUFBfMSwgMHhmZn0sCj4gKwkJeyBEUk1fRk9STUFUX1JHQjU2NSwgMCwg QllURVNfUFBfMiwgMHhmZmZmfSwKPiArCQl7IERSTV9GT1JNQVRfWFJHQjg4ODgsIDAsIEJZVEVT X1BQXzQsIDB4ZmZmZmZmZmZ9LAo+ICsJCXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgMCwgQllURVNf UFBfNCwgMHhmZmZmZmZmZn0sCj4gKwo+ICsJCS8qCj4gKwkJwqAqIGZvbGxvd2luZyB0d28gYXJl IHNraXBwZWQgYmVjYXVzZSBibGVuZGluZyBzZWVtcwo+IHRvIHdvcmsKPiArCQnCoCogaW5jb3Jy ZWN0bHkgd2l0aCBleGNlcHRpb24gb2YgQVIyNCBvbiBjdXJzb3IKPiBwbGFuZS4KPiArCQnCoCog VGVzdCBzdGlsbCBjcmVhdGVzIHRoZSBwbGFuZXMsIGp1c3QgZmlsbGluZyBwbGFuZQo+ICsJCcKg KiBhbmQgZ2V0dGluZyBjcmMgaXMgc2tpcHBlZC4KPiArCQnCoCovCj4gKwkJeyBEUk1fRk9STUFU X0FSR0I4ODg4LCAwLCBTS0lQLCAweGZmZmZmZmZmfSwKPiArCQl7IERSTV9GT1JNQVRfQUJHUjg4 ODgsIDAsIFNLSVAsIDB4MDBmZmZmZmZ9LAo+ICsKPiArCQl7IERSTV9GT1JNQVRfWFJHQjIxMDEw MTAsIDAsIEJZVEVTX1BQXzQsCj4gMHhmZmZmZmZmZn0sCj4gKwkJeyBEUk1fRk9STUFUX1hCR1Iy MTAxMDEwLCAwLCBCWVRFU19QUF80LAo+IDB4ZmZmZmZmZmZ9LAo+ICsKPiArCQl7IERSTV9GT1JN QVRfWVVZViwgMCwgQllURVNfUFBfNCwgMHg4MGViODBlYn0sCj4gKwkJeyBEUk1fRk9STUFUX1lW WVUsIDAsIEJZVEVTX1BQXzQsIDB4ODBlYjgwZWJ9LAo+ICsJCXsgRFJNX0ZPUk1BVF9WWVVZLCAw LCBCWVRFU19QUF80LCAweGViODBlYjgwfSwKPiArCQl7IERSTV9GT1JNQVRfVVlWWSwgMCwgQllU RVNfUFBfNCwgMHhlYjgwZWI4MH0sCj4gKwo+ICsJCS8qCj4gKwkJwqAqIChzZW1pLSlwbGFuYXIg Zm9ybWF0cwo+ICsJCcKgKi8KPiArCQl7IERSTV9GT1JNQVRfTlYxMiwgMCwgTlYxMiwgMHg4MGVi fSwKPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMAo+ICsJCXsgRFJNX0ZPUk1BVF9QMDEwLCAwLCBQ MDEwLCAweDgwMDBlYjAwfSwKPiArI2VuZGlmCj4gKyNpZmRlZiBEUk1fRk9STUFUX1AwMTIKPiAr CQl7IERSTV9GT1JNQVRfUDAxMiwgMCwgUDAxMCwgMHg4MDAwZWIwMH0sCj4gKyNlbmRpZgo+ICsj aWZkZWYgRFJNX0ZPUk1BVF9QMDE2Cj4gKwkJeyBEUk1fRk9STUFUX1AwMTYsIDAsIFAwMTAsIDB4 ODAwMGViMDB9LAo+ICsjZW5kaWYKPiArCQl7IDAsIDAsIDAsIDAgfQo+ICsJfTsKPiArCj4gKwlm b3IoIGkgPSAwOyBmaWxsZXJzW2ldLmZvdXJjYyAhPSAwOyBpKysgKSB7Cj4gKwkJaWYoIGZpbGxl cnNbaV0uZm91cmNjID09IGZvcm1hdCApCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXN3aXRj aCAoZmlsbGVyc1tpXS5icHApIHsKPiArCWNhc2UgQllURVNfUFBfNDoKPiArCQlwdGVtcF8zMl9i dWYgPSAodW5zaWduZWQgaW50KilkYXRhLT5idWY7Cj4gKwkJZm9yIChjID0gMDsgYyA8IGRhdGEt PnNpemUvNDsgYysrKQo+ICsJCQlwdGVtcF8zMl9idWZbY10gPSBmaWxsZXJzW2ldLnZhbHVlOwo+ ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJZVEVTX1BQ XzI6Cj4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0KilkYXRhLT5idWY7Cj4gKwkJ Zm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ICsJCQlwdGVtcF8xNl9idWZbY10g PSAodW5zaWduZWQKPiBzaG9ydClmaWxsZXJzW2ldLnZhbHVlOwo+ICsJCXdyaXRlc2l6ZSA9IGRh dGEtPnNpemU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJZVEVTX1BQXzE6Cj4gKwkJbWVtc2V0KCh2 b2lkKilkYXRhLT5idWYsIGZpbGxlcnNbaV0udmFsdWUsIGRhdGEtCj4gPnNpemUpOwo+ICsJCXdy aXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE5WMTI6Cj4gKwkJbWVt c2V0KCh2b2lkKilkYXRhLT5idWYsIGZpbGxlcnNbaV0udmFsdWUmMHhmZiwKPiArCQnCoMKgwqDC oMKgwqDCoGRhdGEtPnNpemUpOwo+ICsKPiArCQltZW1zZXQoKHZvaWQqKShkYXRhLT5idWYrZGF0 YS0+c2l6ZSksCj4gKwkJwqDCoMKgwqDCoMKgwqAoZmlsbGVyc1tpXS52YWx1ZT4+OCkmMHhmZiwg ZGF0YS0+c2l6ZS8yKTsKPiArCj4gKwkJd3JpdGVzaXplID0gZGF0YS0+c2l6ZStkYXRhLT5zaXpl LzI7Cj4gKwkJYnJlYWs7Cj4gKyNpZiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5l ZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4gZGVmaW5lZChEUk1fRk9STUFUX1AwMTYpCj4gKwljYXNl IFAwMTA6Cj4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0KilkYXRhLT5idWY7Cj4g KwkJZm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ICsJCQlwdGVtcF8xNl9idWZb Y10gPSAodW5zaWduZWQKPiBzaG9ydClmaWxsZXJzW2ldLnZhbHVlJjB4ZmZmZjsKPiArCj4gKwkJ cHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0KikoZGF0YS0+YnVmK2RhdGEtCj4gPnNpemUp Owo+ICsJCWZvciAoYyA9IDA7IGMgPCBkYXRhLT5zaXplLzI7IGMrKykKPiArCQkJcHRlbXBfMTZf YnVmW2NdID0gKHVuc2lnbmVkCj4gc2hvcnQpKGZpbGxlcnNbaV0udmFsdWU+PjE2KSYweGZmZmY7 Cj4gKwo+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemUrZGF0YS0+c2l6ZS8yOwo+ICsJCWJyZWFr Owo+ICsjZW5kaWYKPiArCWNhc2UgU0tJUDoKPiArCQlpZiAoZmlsbGVyc1tpXS5mb3VyY2MgPT0g RFJNX0ZPUk1BVF9BUkdCODg4OCAmJgo+ICsJCcKgwqDCoMKgcGxhbmUtPnR5cGUgPT0gRFJNX1BM QU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJLyoKPiArCQnCoCogc3BlY2lhbCBmb3IgY3Vyc29yIHBs YW5lIHdoZXJlIGJsZW5kaW5nIHdvcmtzCj4gY29ycmVjdGx5Lgo+ICsJCcKgKi8KPiArCQkJcHRl bXBfMzJfYnVmID0gKHVuc2lnbmVkIGludCopZGF0YS0+YnVmOwo+ICsJCQlmb3IgKGMgPSAwOyBj IDwgZGF0YS0+c2l6ZS80OyBjKyspCj4gKwkJCQlwdGVtcF8zMl9idWZbY10gPSBmaWxsZXJzW2ld LnZhbHVlOwo+ICsJCQl3cml0ZXNpemUgPSBkYXRhLT5zaXplOwo+ICsJCQlicmVhazsKPiArCQl9 Cj4gKwkJaWd0X2luZm8oIkZvcm1hdCAlcyBDUkMgY29tcGFyaXNvbiBza2lwcGVkIGJ5Cj4gZGVz aWduLlxuIiwKPiArCQkJwqAoY2hhciopJmZpbGxlcnNbaV0uZm91cmNjKTsKPiArCj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfaW5mbygiVW5zdXBwb3J0ZWQgbW9kZSBm b3IgdGVzdCAlc1xuIiwKPiArCQkJwqAoY2hhciopJmZpbGxlcnNbaV0uZm91cmNjKTsKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZG9fd3JpdGUoZGF0YS0+Z2Z4X2ZkLCBkYXRhLT5n ZW1faGFuZGxlLCAodm9pZCopZGF0YS0+YnVmLAo+IHdyaXRlc2l6ZSk7Cj4gKwlyZXR1cm4gdHJ1 ZTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBib29sIHNldHVwX2ZiKGRhdGFfdCAqZGF0YSwgaWd0 X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90Cj4gKnBsYW5lLAo+ICsJCcKgwqDCoMKgwqB1 aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCXVpbnQ2 NF90IHcsIGg7Cj4gKwlzaWduZWQgcmV0LCBnZW1zaXplID0gMDsKPiArCXVuc2lnbmVkIHRpbGVf d2lkdGgsIHRpbGVfaGVpZ2h0LCBzdHJpZGU7Cj4gKwl1aW50MzJfdCBvZmZzZXRzWzRdID0ge307 Cj4gKwl1aW50MzJfdCogb2Zmc2V0cG9pbnRlciA9IE5VTEw7Cj4gKwo+ICsJbW9kZSA9IGlndF9v dXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVf VFlQRV9DVVJTT1IpIHsKPiArCQl3ID0gbW9kZS0+aGRpc3BsYXkgOwo+ICsJCWggPSBtb2RlLT52 ZGlzcGxheTsKPiArCX0gZWxzZSB7Cj4gKwkJZHJtR2V0Q2FwKGRhdGEtPmdmeF9mZCwgRFJNX0NB UF9DVVJTT1JfV0lEVEgsICZ3KTsKPiArCQlkcm1HZXRDYXAoZGF0YS0+Z2Z4X2ZkLCBEUk1fQ0FQ X0NVUlNPUl9IRUlHSFQsICZoKTsKPiArCX0KPiArCj4gKwlzd2l0Y2goZm9ybWF0KSB7Cj4gKyNp ZmRlZiBEUk1fRk9STUFUX1AwMTAKPiArCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgo+ICsjZW5kaWYK PiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMgo+ICsJY2FzZSBEUk1fRk9STUFUX1AwMTI6Cj4gKyNl bmRpZgo+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDE2Cj4gKwljYXNlIERSTV9GT1JNQVRfUDAxNjoK PiArI2VuZGlmCj4gKyNpZiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5lZChEUk1f Rk9STUFUX1AwMTIpIHx8Cj4gZGVmaW5lZChEUk1fRk9STUFUX1AwMTYpCj4gKwkJdGlsZV93aWR0 aCA9IDUxMjsKPiArCQl0aWxlX2hlaWdodCA9IDE2Owo+ICsJCXN0cmlkZSA9IEFMSUdOKHcqMiwg dGlsZV93aWR0aCk7Cj4gKwkJZGF0YS0+c2l6ZSA9IG9mZnNldHNbMV0gPSBzdHJpZGUqQUxJR04o aCwKPiB0aWxlX2hlaWdodCk7Cj4gKwkJZ2Vtc2l6ZSA9IGRhdGEtPnNpemUqMjsKPiArCQlvZmZz ZXRwb2ludGVyID0gKHVpbnQzMl90Kikmb2Zmc2V0czsKPiArCQlicmVhazsKPiArI2VuZGlmCj4g KwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCQl0aWxlX3dpZHRoID0gNTEyOwo+ICsJCXRpbGVf aGVpZ2h0ID0gMTY7Cj4gKwkJc3RyaWRlID0gQUxJR04odywgdGlsZV93aWR0aCk7Cj4gKwkJZGF0 YS0+c2l6ZSA9IG9mZnNldHNbMV0gPSBzdHJpZGUqQUxJR04oaCwKPiB0aWxlX2hlaWdodCk7Cj4g KwkJZ2Vtc2l6ZSA9IGRhdGEtPnNpemUqMjsKPiArCQlvZmZzZXRwb2ludGVyID0gKHVpbnQzMl90 Kikmb2Zmc2V0czsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJdGlsZV93aWR0aCA9IDUx MjsKPiArCQl0aWxlX2hlaWdodCA9IDE2Owo+ICsKPiArCQkvKgo+ICsJCcKgKiB3KjQgc28gdGhl cmUncyBlbm91Z2ggc3BhY2UKPiArCQnCoCovCj4gKwkJc3RyaWRlID0gQUxJR04odyo0LCB0aWxl X3dpZHRoKTsKPiArCQlkYXRhLT5zaXplID0gc3RyaWRlKkFMSUdOKGgsIHRpbGVfaGVpZ2h0KTsK PiArCQlvZmZzZXRwb2ludGVyID0gTlVMTDsKPiArCQlnZW1zaXplID0gZGF0YS0+c2l6ZTsKPiAr CQlicmVhazsKPiArCX0KPiArCj4gKwlkYXRhLT5nZW1faGFuZGxlID0gZ2VtX2NyZWF0ZShkYXRh LT5nZnhfZmQsIGdlbXNpemUpOwo+ICsJcmV0ID0gX19nZW1fc2V0X3RpbGluZyhkYXRhLT5nZnhf ZmQsIGRhdGEtPmdlbV9oYW5kbGUsCj4gKwkJCcKgwqDCoMKgwqDCoMKgSTkxNV9USUxJTkdfTk9O RSwgc3RyaWRlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJcmV0ID0g X19rbXNfYWRkZmIoZGF0YS0+Z2Z4X2ZkLCBkYXRhLT5nZW1faGFuZGxlLCB3LCBoLAo+ICsJCQnC oMKgc3RyaWRlLCBmb3JtYXQsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCcKgwqBv ZmZzZXRwb2ludGVyLAo+IExPQ0FMX0RSTV9NT0RFX0ZCX01PRElGSUVSUywKPiArCQkJwqDCoCZk YXRhLT5mYi5mYl9pZCk7Cj4gKwo+ICsJaWYocmV0IDwgMCkgewo+ICsJCWlndF9pbmZvKCJDcmVh dGluZyBmYiBmb3IgZm9ybWF0ICVzIGZhaWxlZCwgcmV0dXJuCj4gY29kZSAlZFxuIiwKPiArCQkJ wqAoY2hhciopJmRhdGEtPmZvcm1hdC5uYW1lLCByZXQpOwo+ICsKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwl9Cj4gKwo+ICsJZGF0YS0+ZmIud2lkdGggPSB3Owo+ICsJZGF0YS0+ZmIuaGVpZ2h0ID0g aDsKPiArCWRhdGEtPmZiLmdlbV9oYW5kbGUgPSBkYXRhLT5nZW1faGFuZGxlOwo+ICsJcmV0dXJu IHRydWU7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9pZCByZW1vdmVfZmIoZGF0YV90KiBkYXRh LCBpZ3Rfb3V0cHV0X3QqIG91dHB1dCwKPiBpZ3RfcGxhbmVfdCogcGxhbmUpCj4gK3sKPiArCWlm IChkYXRhLT5zZXBhcmF0ZXByaW1hcnlwbGFuZSkgewo+ICsJCWlndF9wbGFuZV90KiBwcmltYXJ5 ID0KPiBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwKPiArCQkJCQkJCQnCoERSTQo+ IF9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVM TCk7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5wcmltYXJ5X2ZiKTsK PiArCQlkYXRhLT5zZXBhcmF0ZXByaW1hcnlwbGFuZSA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCWln dF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+ZmIpOwo+ICsJZnJlZShkYXRhLT5idWYp Owo+ICsJZGF0YS0+YnVmID0gTlVMTDsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBib29sIHByZXBh cmVfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+ICsJCQnCoGlndF9w bGFuZV90ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8g Km1vZGU7Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArCj4gKwlpZiAocGxhbmUtPnR5cGUg IT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+ICsJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9t b2RlKG91dHB1dCk7Cj4gKwkJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5nZnhfZmQsCj4gKwkJ CQnCoMKgwqDCoG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJCcKgwqDCoMKg RFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJCcKgwqDCoMKgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwKPiArCQkJCcKgwqDCoMKgMCwgMCwgMCwKPiArCQkJCcKgwqDCoMKgJmRhdGEtPnByaW1h cnlfZmIpOwo+ICsKPiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRw dXQsCj4gKwkJCQkJCcKgwqDCoMKgRFJNX1BMQU5FX1RZUEVfUAo+IFJJTUFSWSk7Cj4gKwo+ICsJ CWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmRhdGEtPnByaW1hcnlfZmIpOwo+ICsJCWlndF9k aXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwkJZGF0YS0+ c2VwYXJhdGVwcmltYXJ5cGxhbmUgPSB0cnVlOwo+ICsJfQo+ICsKPiArCWlmICghc2V0dXBfZmIo ZGF0YSwgb3V0cHV0LCBwbGFuZSwgZm9ybWF0KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJ ZnJlZSgodm9pZCopZGF0YS0+YnVmKTsKPiArCWRhdGEtPmJ1ZiA9ICh1bnNpZ25lZCBjaGFyKilj YWxsb2MoZGF0YS0+c2l6ZSoyLCAxKTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsKPiAr c3RhdGljIGludAo+ICt0ZXN0X29uZV9tb2RlKGRhdGFfdCogZGF0YSwgaWd0X291dHB1dF90ICpv dXRwdXQsIGlndF9wbGFuZV90Kgo+IHBsYW5lLAo+ICsJwqDCoMKgwqDCoMKgaW50IG1vZGUpCj4g K3sKPiArCWlndF9jcmNfdCBjdXJyZW50X2NyYzsKPiArCXNpZ25lZCByVmFsID0gMDsKPiArCWJv b2wgZG9fY3JjOwo+ICsJY2hhciogY3JjY29tcGFyZVsyXTsKPiArCj4gKwlpZiAocHJlcGFyZV9j cnRjKGRhdGEsIG91dHB1dCwgcGxhbmUsIG1vZGUpKXsKPiArCQkvKgo+ICsJCcKgKiB3ZSBoYXZl IGZiIGZyb20gcHJlcGFyZV9jcnRjKC4uKSBzbyBub3cgZmlsbCBpdAo+IGluCj4gKwkJwqAqIGNv cnJlY3RseSBpbiBmaWxsX2luX2ZiKC4uKQo+ICsJCcKgKi8KPiArCQlkb19jcmMgPSBmaWxsX2lu X2ZiKGRhdGEsIG91dHB1dCwgcGxhbmUsIG1vZGUpOwo+ICsKPiArCQlpZ3RfcGxhbmVfc2V0X2Zi KHBsYW5lLCAmZGF0YS0+ZmIpOwo+ICsJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmIsIHBsYW5l LCBkYXRhLT5mYi53aWR0aCwKPiBkYXRhLT5mYi5oZWlnaHQpOwo+ICsJCWlndF9wbGFuZV9zZXRf c2l6ZShwbGFuZSwgZGF0YS0+ZmIud2lkdGgsIGRhdGEtCj4gPmZiLmhlaWdodCk7Cj4gKwkJaWd0 X2ZiX3NldF9wb3NpdGlvbigmZGF0YS0+ZmIsIHBsYW5lLCAwLCAwKTsKPiArCQlpZ3RfZGlzcGxh eV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ICsKPiArCQlpZiAoZG9f Y3JjKSB7Cj4gKwkJCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7Cj4gKwkJCWln dF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLAo+ICZjdXJyZW50X2NyYyk7Cj4g Kwo+ICsJCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJ CQlpZgo+ICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY3VycmVudF9jcmMsCj4gKwkJCQkJJmRhdGEt PmZ1bGxzY3JlZW5fY3JjKSkgewo+ICsJCQkJCWNyY2NvbXBhcmVbMF0gPQo+IGlndF9jcmNfdG9f c3RyaW5nKCZjdXJyZW50X2NyYyk7Cj4gKwkJCQkJY3JjY29tcGFyZVsxXSA9Cj4gaWd0X2NyY190 b19zdHJpbmcoJmRhdGEtPmZ1bGxzY3JlZW5fY3JjKTsKPiArCQkJCQlpZ3Rfd2FybigiY3JjIG1p c21hdGNoLgo+IHRhcmdldCAlLjhzLCByZXN1bHQgJS44cy5cbiIsIGNyY2NvbXBhcmVbMF0sIGNy Y2NvbXBhcmVbMV0pOwo+ICsJCQkJCWZyZWUoY3JjY29tcGFyZVswXSk7Cj4gKwkJCQkJZnJlZShj cmNjb21wYXJlWzFdKTsKPiArCQkJCQlyVmFsKys7Cj4gKwkJCQl9Cj4gKwkJCX0gZWxzZSB7Cj4g KwkJCQlpZgo+ICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY3VycmVudF9jcmMsCj4gKwkJCQkJJmRh dGEtPmN1cnNvcl9jcmMpKSB7Cj4gKwkJCQkJY3JjY29tcGFyZVswXSA9Cj4gaWd0X2NyY190b19z dHJpbmcoJmN1cnJlbnRfY3JjKTsKPiArCQkJCQljcmNjb21wYXJlWzFdID0KPiBpZ3RfY3JjX3Rv X3N0cmluZygmZGF0YS0+Y3Vyc29yX2NyYyk7Cj4gKwkJCQkJaWd0X3dhcm4oImNyYyBtaXNtYXRj aC4KPiB0YXJnZXQgJS44cywgcmVzdWx0ICUuOHMuXG4iLCBjcmNjb21wYXJlWzBdLCBjcmNjb21w YXJlWzFdKTsKPiArCQkJCQlmcmVlKGNyY2NvbXBhcmVbMF0pOwo+ICsJCQkJCWZyZWUoY3JjY29t cGFyZVsxXSk7Cj4gKwkJCQkJclZhbCsrOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfQo+ICsJCXJl bW92ZV9mYihkYXRhLCBvdXRwdXQsIHBsYW5lKTsKPiArCQlyZXR1cm4gclZhbDsKPiArCX0KPiAr CXJldHVybiAxOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9hdmFpbGFibGVf bW9kZXMoZGF0YV90KiBkYXRhKQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCWln dF9wbGFuZV90ICpwbGFuZTsKPiArCWludCBtb2RlaW5kZXg7Cj4gKwllbnVtIHBpcGUgcGlwZTsK PiArCWludCBpbnZhbGlkcyA9IDA7Cj4gKwlkcm1Nb2RlUGxhbmUgKm1vZGVQbGFuZTsKPiArCWNo YXIgcGxhbmV0eXBlWzNdWzhdID0geyJPVkVSTEFZXDAiLCAiUFJJTUFSWVwwIiwgIkNVUlNPUlww Igo+IH07Cj4gKwo+ICsJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlkX291dHB1dCgmZGF0YS0+ZGlz cGxheSwgcGlwZSwKPiBvdXRwdXQpIHsKPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwg cGlwZSk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+Y29t bWl0KTsKPiArCj4gKwkJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmdm eF9mZCwKPiBwaXBlLAo+ICsJCQkJCQnCoMKgSU5URUxfUElQRV9DUkNfU09VCj4gUkNFX0FVVE8p Owo+ICsKPiArCQlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwo+ICsKPiArCQkv Kgo+ICsJCcKgKiByZWdlbmVyYXRlIGNvbXBhcmlzb24gY3JjcyBmb3IgZWFjaCBwaXBlIGp1c3Qg aW4KPiBjYXNlLgo+ICsJCcKgKi8KPiArCQlnZW5lcmF0ZV9jb21wYXJpc29uX2NyY19saXN0KGRh dGEsIG91dHB1dCk7Cj4gKwo+ICsJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3Bs YXksIHBpcGUsIHBsYW5lKQo+IHsKPiArCQkJbW9kZVBsYW5lID0gZHJtTW9kZUdldFBsYW5lKGRh dGEtPmdmeF9mZCwKPiArCQkJCQkJwqDCoMKgwqBwbGFuZS0KPiA+ZHJtX3BsYW5lLT5wbGFuZV9p ZCk7Cj4gKwo+ICsJCQlmb3IgKG1vZGVpbmRleCA9IDA7Cj4gKwkJCcKgwqDCoMKgwqBtb2RlaW5k ZXggPCBtb2RlUGxhbmUtPmNvdW50X2Zvcm1hdHM7Cj4gKwkJCcKgwqDCoMKgwqBtb2RlaW5kZXgr Kykgewo+ICsJCQkJZGF0YS0+Zm9ybWF0LmR3b3JkID0gbW9kZVBsYW5lLQo+ID5mb3JtYXRzW21v ZGVpbmRleF07Cj4gKwo+ICsJCQkJaWd0X2luZm8oIlRlc3RpbmcgY29ubmVjdG9yICVzIHVzaW5n Cj4gcGlwZSAlcyIgXAo+ICsJCQkJCcKgIiBwbGFuZSBpbmRleCAlZCB0eXBlICVzCj4gbW9kZSAl c1xuIiwKPiArCQkJCQnCoGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+ICsJCQkJCcKga21zdGVz dF9waXBlX25hbWUocGlwZSksCj4gKwkJCQkJwqBwbGFuZS0+aW5kZXgsCj4gKwkJCQkJwqBwbGFu ZXR5cGVbcGxhbmUtPnR5cGVdLAo+ICsJCQkJCcKgKGNoYXIqKSZkYXRhLT5mb3JtYXQubmFtZSk7 Cj4gKwo+ICsJCQkJaW52YWxpZHMgKz0gdGVzdF9vbmVfbW9kZShkYXRhLAo+IG91dHB1dCwKPiAr CQkJCQkJCcKgwqBwbGFuZSwKPiArCQkJCQkJCcKgwqBtb2RlUGxhbmUtCj4gPmZvcm1hdHNbbW9k ZWluZGV4XSk7Cj4gKwkJCX0KPiArCQkJZHJtTW9kZUZyZWVQbGFuZShtb2RlUGxhbmUpOwo+ICsJ CX0KPiArCQlpZ3RfcGlwZV9jcmNfc3RvcChkYXRhLT5waXBlX2NyYyk7Cj4gKwkJaWd0X3BpcGVf Y3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEt PmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwl9Cj4gKwlpZ3RfYXNzZXJ0KGludmFsaWRzID09 IDApOwo+ICt9Cj4gKwo+ICsKPiAraWd0X21haW4KPiArewo+ICsJZGF0YV90IGRhdGEgPSB7fTsK PiArCj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ ICsJCWRhdGEuZ2Z4X2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwpOwo+ ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiArCQlpZ3RfZGlzcGxheV9pbml0 KCZkYXRhLmRpc3BsYXksIGRhdGEuZ2Z4X2ZkKTsKPiArCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhk YXRhLmdmeF9mZCk7Cj4gKwl9Cj4gKwo+ICsJZGF0YS5jb21taXQgPSBkYXRhLmRpc3BsYXkuaXNf YXRvbWljID8gQ09NTUlUX0FUT01JQyA6Cj4gQ09NTUlUX0xFR0FDWTsKPiArCj4gKwlpZ3Rfc3Vi dGVzdCgiYXZhaWxhYmxlX21vZGVfdGVzdF9jcmMiKSB7Cj4gKwkJdGVzdF9hdmFpbGFibGVfbW9k ZXMoJmRhdGEpOwo+ICsJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlrbXN0ZXN0X3Jlc3Rv cmVfdnRfbW9kZSgpOwo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gKwl9 Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWls ZAo+IGluZGV4IGVlMDM4NjYuLjgxYWUxNmYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVzb24uYnVp bGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC0xNDksNiArMTQ5LDcgQEAgdGVzdF9w cm9ncyA9IFsKPiDCoAkna21zX2F0b21pYycsCj4gwqAJJ2ttc19hdG9taWNfaW50ZXJydXB0aWJs ZScsCj4gwqAJJ2ttc19hdG9taWNfdHJhbnNpdGlvbicsCj4gKwkna21zX2F2YWlsYWJsZV9tb2Rl c19jcmMnLAo+IMKgCSdrbXNfYnVzeScsCj4gwqAJJ2ttc19jY3MnLAo+IMKgCSdrbXNfY2h2X2N1 cnNvcl9mYWlsJywKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK