From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id D938C890B6 for ; Mon, 17 Jun 2019 10:54:56 +0000 (UTC) From: Arkadiusz Hiler Date: Mon, 17 Jun 2019 13:54:39 +0300 Message-Id: <20190617105443.8264-1-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 1/5] lib/igt_core: Add support for subtest descriptions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Petri Latvala List-ID: VGhpcyBwYXRjaCBhZGRzIGlndF9kZXNjcmlwdGlvbigpIHdoaWNoIGF0dGFjaGVzIGEgZGVzY3Jp cHRpb24gdG8gdGhlCmZvbGxvd2luZyBpZ3Rfc3VidGVzdCBvciBpZ3Rfc3VidGVzdF9ncm91cCBi bG9jay4KCkRlc2NyaXB0aW9ucyBhcmUgYWNjZXNzaWJsZSB2aWEgJy4vdGVzdCAtLWRlc2NyaWJl Wz1wYXR0ZXJuXScKClN1YnRlc3QgZGVzY3JpcHRpb24gaXMgaXRzIG93biBpZ3RfZGVzY3JpYmUg YXMgd2VsbCBhcyBpZ3RfZGVzY3JpYmVzCm9mIGFsbCB0aGUgcGFyZW50aW5nIGlndF9zdWJ0ZXN0 X2dyb3Vwcywgc3RhcnRpbmcgZnJvbSB0aGUgb3V0ZXJtb3N0CnNjb3BlLgoKRXhhbXBsZXMgb2Yg Y29kZSBhbmQgcHJvZHVjZWQgb3V0cHV0cyBhcmUgaW5jbHVkZWQgaW4KbGliL3Rlc3QvaWd0X2Rl c2NyaWJlLmMgYW5kIGFzIGEgZG9jdW1lbnRhdGlvbiBjb21tZW50IG9uIGlndF9kZXNjcmliZSgp Cm1hY3JvLgoKQ2M6IFBldHJpIExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBcmthZGl1c3ogSGlsZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+Ci0t LQogbGliL2lndF9jb3JlLmMgICAgICAgICAgIHwgMTc5ICsrKysrKysrKysrKysrKysrKysrKysr Ky0tCiBsaWIvaWd0X2NvcmUuaCAgICAgICAgICAgfCAxMzcgKysrKysrKysrKysrKysrKysrLS0K IGxpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYyB8IDI2NiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGxpYi90ZXN0cy9tZXNvbi5idWlsZCAgICB8ICAgMSArCiA0IGZpbGVz IGNoYW5nZWQsIDU2MiBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmMKCmRpZmYgLS1naXQgYS9saWIvaWd0X2Nv cmUuYyBiL2xpYi9pZ3RfY29yZS5jCmluZGV4IDZiOWYwNDI1Li44YjFjN2IyZiAxMDA2NDQKLS0t IGEvbGliL2lndF9jb3JlLmMKKysrIGIvbGliL2lndF9jb3JlLmMKQEAgLTcwLDYgKzcwLDcgQEAK ICNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKICNpbmNsdWRlICJpZ3Rfc3lzcnEuaCIKICNpbmNsdWRl ICJpZ3RfcmMuaCIKKyNpbmNsdWRlICJpZ3RfbGlzdC5oIgogCiAjZGVmaW5lIFVOV19MT0NBTF9P TkxZCiAjaW5jbHVkZSA8bGlidW53aW5kLmg+CkBAIC0yNTksNiArMjYwLDcgQEAgY29uc3QgY2hh ciAqaWd0X2ludGVyYWN0aXZlX2RlYnVnOwogCiAvKiBzdWJ0ZXN0cyBoZWxwZXJzICovCiBzdGF0 aWMgYm9vbCBsaXN0X3N1YnRlc3RzID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkZXNjcmliZV9zdWJ0 ZXN0cyA9IGZhbHNlOwogc3RhdGljIGNoYXIgKnJ1bl9zaW5nbGVfc3VidGVzdCA9IE5VTEw7CiBz dGF0aWMgYm9vbCBydW5fc2luZ2xlX3N1YnRlc3RfZm91bmQgPSBmYWxzZTsKIHN0YXRpYyBjb25z dCBjaGFyICppbl9zdWJ0ZXN0ID0gTlVMTDsKQEAgLTI3MSw2ICsyNzMsMTYgQEAgc3RhdGljIGVu dW0gewogCUNPTlQgPSAwLCBTS0lQLCBGQUlMCiB9IHNraXBfc3VidGVzdHNfaGVuY2Vmb3J0aCA9 IENPTlQ7CiAKK3N0YXRpYyBjaGFyIF9fY3VycmVudF9kZXNjcmlwdGlvbls0MDk2XTsKKworc3Ry dWN0IGRlc2NyaXB0aW9uX25vZGUgeworCWNoYXIgZGVzY1tzaXplb2YoX19jdXJyZW50X2Rlc2Ny aXB0aW9uKV07CisJc3RydWN0IGlndF9saXN0IGxpbms7Cit9OworCitzdGF0aWMgc3RydWN0IGln dF9saXN0IHN1Ymdyb3VwX2Rlc2NyaXB0aW9uczsKKworCiBib29sIF9faWd0X3BsYWluX291dHB1 dCA9IGZhbHNlOwogCiAvKiBmb3JrIHN1cHBvcnQgc3RhdGUgKi8KQEAgLTI4NSw2ICsyOTcsNyBA QCBlbnVtIHsKIAkgKiBjb25mbGljdCB3aXRoIGNvcmUgb25lcwogCSAqLwogCU9QVF9MSVNUX1NV QlRFU1RTID0gNTAwLAorCU9QVF9ERVNDUklCRV9TVUJURVNUUywKIAlPUFRfUlVOX1NVQlRFU1Qs CiAJT1BUX0RFU0NSSVBUSU9OLAogCU9QVF9ERUJVRywKQEAgLTUyOCwxMCArNTQxLDU5IEBAIHN0 YXRpYyB2b2lkIGNvbW1vbl9leGl0X2hhbmRsZXIoaW50IHNpZykKIAlhc3NlcnQoc2lnICE9IDAg fHwgaWd0X2V4aXRfY2FsbGVkKTsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfbGluZV93cmFwcGlu Zyhjb25zdCBjaGFyICppbmRlbnQsIGNvbnN0IGNoYXIgKnRleHQpCit7CisJY2hhciAqY29weSwg KmN1cnIsICpuZXh0X3NwYWNlOworCWludCBjdXJyZW50X2xpbmVfbGVuZ3RoID0gMDsKKwlib29s IGRvbmUgPSBmYWxzZTsKKworCWNvbnN0IGludCB0b3RhbF9saW5lX2xlbmd0aCA9IDgwOworCWNv bnN0IGludCBsaW5lX2xlbmd0aCA9IHRvdGFsX2xpbmVfbGVuZ3RoIC0gc3RybGVuKGluZGVudCk7 CisKKwljb3B5ID0gbWFsbG9jKHN0cmxlbih0ZXh0KSArIDEpOworCW1lbWNweShjb3B5LCB0ZXh0 LCBzdHJsZW4odGV4dCkgKyAxKTsKKworCWN1cnIgPSBjb3B5OworCisJcHJpbnRmKCIlcyIsIGlu ZGVudCk7CisKKwl3aGlsZSAoIWRvbmUpIHsKKwkJbmV4dF9zcGFjZSA9IHN0cmNocihjdXJyLCAn ICcpOworCisJCWlmICghbmV4dF9zcGFjZSkgeyAvKiBubyBtb3JlIHNwYWNlcywgcHJpbnQgZXZl cnl0aGluZyB0aGF0IGlzIGxlZnQgKi8KKwkJCWRvbmUgPSB0cnVlOworCQkJbmV4dF9zcGFjZSA9 IHN0cmNocihjdXJyLCAnXDAnKTsKKwkJfQorCisJCSpuZXh0X3NwYWNlID0gJ1wwJzsKKworCQlp ZiAoKG5leHRfc3BhY2UgLSBjdXJyKSArIGN1cnJlbnRfbGluZV9sZW5ndGggPiBsaW5lX2xlbmd0 aCAmJiBjdXJyICE9IGNvcHkpIHsKKwkJCXByaW50ZigiXG4lcyIsIGluZGVudCk7CisJCQljdXJy ZW50X2xpbmVfbGVuZ3RoID0gMDsKKwkJfQorCisJCWlmIChjdXJyZW50X2xpbmVfbGVuZ3RoID09 IDApCisJCQlwcmludGYoIiVzIiwgY3Vycik7IC8qIGZpcnN0IHdvcmQgaW4gYSBsaW5lLCBkb24n dCBzcGFjZSBvdXQgKi8KKwkJZWxzZQorCQkJcHJpbnRmKCIgJXMiLCBjdXJyKTsKKworCQljdXJy ZW50X2xpbmVfbGVuZ3RoICs9IG5leHRfc3BhY2UgLSBjdXJyOworCQljdXJyID0gbmV4dF9zcGFj ZSArIDE7CisJfQorCisJcHJpbnRmKCJcbiIpOworCisJZnJlZShjb3B5KTsKK30KKworCiBzdGF0 aWMgdm9pZCBwcmludF90ZXN0X2Rlc2NyaXB0aW9uKHZvaWQpCiB7Ci0JaWYgKCZfX2lndF90ZXN0 X2Rlc2NyaXB0aW9uKQotCQlwcmludGYoIiVzXG4iLCBfX2lndF90ZXN0X2Rlc2NyaXB0aW9uKTsK KwlpZiAoJl9faWd0X3Rlc3RfZGVzY3JpcHRpb24pIHsKKwkJcHJpbnRfbGluZV93cmFwcGluZygi IiwgX19pZ3RfdGVzdF9kZXNjcmlwdGlvbik7CisJCWlmIChkZXNjcmliZV9zdWJ0ZXN0cykKKwkJ CXByaW50ZigiXG4iKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X3ZlcnNpb24odm9pZCkK QEAgLTU1OCw2ICs2MjAsNyBAQCBzdGF0aWMgdm9pZCBwcmludF91c2FnZShjb25zdCBjaGFyICpo ZWxwX3N0ciwgYm9vbCBvdXRwdXRfb25fc3RkZXJyKQogCQkgICAiICAtLWRlYnVnWz1sb2ctZG9t YWluXVxuIgogCQkgICAiICAtLWludGVyYWN0aXZlLWRlYnVnWz1kb21haW5dXG4iCiAJCSAgICIg IC0taGVscC1kZXNjcmlwdGlvblxuIgorCQkgICAiICAtLWRlc2NyaWJlXG4iCiAJCSAgICIgIC0t aGVscHwtaFxuIik7CiAJaWYgKGhlbHBfc3RyKQogCQlmcHJpbnRmKGYsICIlc1xuIiwgaGVscF9z dHIpOwpAQCAtNjcxLDYgKzczNCw3IEBAIHN0YXRpYyBpbnQgY29tbW9uX2luaXQoaW50ICphcmdj LCBjaGFyICoqYXJndiwKIAlpbnQgYywgb3B0aW9uX2luZGV4ID0gMCwgaSwgeDsKIAlzdGF0aWMg c3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKIAkJeyJsaXN0LXN1YnRlc3RzIiwgICAg IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfTElTVF9TVUJURVNUU30sCisJCXsiZGVzY3Jp YmUiLCAgICAgICAgICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFU0NSSUJFX1NVQlRF U1RTfSwKIAkJeyJydW4tc3VidGVzdCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBP UFRfUlVOX1NVQlRFU1R9LAogCQl7ImhlbHAtZGVzY3JpcHRpb24iLCAgbm9fYXJndW1lbnQsICAg ICAgIE5VTEwsIE9QVF9ERVNDUklQVElPTn0sCiAJCXsiZGVidWciLCAgICAgICAgICAgICBvcHRp b25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFQlVHfSwKQEAgLTY4Nyw2ICs3NTEsNyBAQCBzdGF0 aWMgaW50IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsCiAJaW50IHJldCA9IDA7 CiAKIAljb21tb25faW5pdF9lbnYoKTsKKwlpZ3RfbGlzdF9pbml0KCZzdWJncm91cF9kZXNjcmlw dGlvbnMpOwogCiAJY29tbWFuZF9zdHIgPSBhcmd2WzBdOwogCWlmIChzdHJyY2hyKGNvbW1hbmRf c3RyLCAnLycpKQpAQCAtNzc3LDYgKzg0MiwxMyBAQCBzdGF0aWMgaW50IGNvbW1vbl9pbml0KGlu dCAqYXJnYywgY2hhciAqKmFyZ3YsCiAJCQlpZiAoIXJ1bl9zaW5nbGVfc3VidGVzdCkKIAkJCQls aXN0X3N1YnRlc3RzID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlIE9QVF9ERVNDUklCRV9TVUJU RVNUUzoKKwkJCWlmIChvcHRhcmcpCisJCQkJcnVuX3NpbmdsZV9zdWJ0ZXN0ID0gc3RyZHVwKG9w dGFyZyk7CisJCQlsaXN0X3N1YnRlc3RzID0gdHJ1ZTsKKwkJCWRlc2NyaWJlX3N1YnRlc3RzID0g dHJ1ZTsKKwkJCXByaW50X3Rlc3RfZGVzY3JpcHRpb24oKTsKKwkJCWJyZWFrOwogCQljYXNlIE9Q VF9SVU5fU1VCVEVTVDoKIAkJCWFzc2VydChvcHRhcmcpOwogCQkJaWYgKCFsaXN0X3N1YnRlc3Rz KQpAQCAtOTM0LDEyICsxMDA2LDQxIEBAIHZvaWQgaWd0X3NpbXBsZV9pbml0X3BhcnNlX29wdHMo aW50ICphcmdjLCBjaGFyICoqYXJndiwKIAkJICAgIGV4dHJhX29wdF9oYW5kbGVyLCBoYW5kbGVy X2RhdGEpOwogfQogCitzdGF0aWMgdm9pZCBfY2xlYXJfY3VycmVudF9kZXNjcmlwdGlvbih2b2lk KSB7CisJX19jdXJyZW50X2Rlc2NyaXB0aW9uWzBdID0gJ1wwJzsKK30KKworI2RlZmluZSBfX0lO REVOVCAiICAiCitzdGF0aWMgdm9pZCBfX2lndF9wcmludF9kZXNjcmlwdGlvbihjb25zdCBjaGFy ICpzdWJ0ZXN0X25hbWUsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lKQoreworCXN0 cnVjdCBkZXNjcmlwdGlvbl9ub2RlICpkZXNjOworCWJvb2wgaGFzX2RvYyA9IGZhbHNlOworCisJ cHJpbnRmKCJTVUIgJXMgJXM6JWQ6XG4iLCBzdWJ0ZXN0X25hbWUsIGZpbGUsIGxpbmUpOworCisJ aWd0X2xpc3RfZm9yX2VhY2goZGVzYywgJnN1Ymdyb3VwX2Rlc2NyaXB0aW9ucywgbGluaykgewor CQlwcmludF9saW5lX3dyYXBwaW5nKF9fSU5ERU5ULCBkZXNjLT5kZXNjKTsKKwkJcHJpbnRmKCJc biIpOworCQloYXNfZG9jID0gdHJ1ZTsKKwl9CisKKwlpZiAoX19jdXJyZW50X2Rlc2NyaXB0aW9u WzBdICE9ICdcMCcpIHsKKwkJcHJpbnRfbGluZV93cmFwcGluZyhfX0lOREVOVCwgX19jdXJyZW50 X2Rlc2NyaXB0aW9uKTsKKwkJcHJpbnRmKCJcbiIpOworCQloYXNfZG9jID0gdHJ1ZTsKKwl9CisK KwlpZiAoIWhhc19kb2MpCisJCXByaW50ZigiJXNOTyBET0NVTUVOVEFUSU9OIVxuXG4iLCBfX0lO REVOVCk7Cit9CisjdW5kZWYgX19JTkRFTlQKKwogLyoKICAqIE5vdGU6IFRlc3RjYXNlcyB3aGlj aCB1c2UgdGhlc2UgaGVscGVycyBNVVNUIE5PVCBvdXRwdXQgYW55dGhpbmcgdG8gc3Rkb3V0CiAg KiBvdXRzaWRlIG9mIHBsYWNlcyBwcm90ZWN0ZWQgYnkgaWd0X3J1bl9zdWJ0ZXN0IGNoZWNrcyAt IHRoZSBwaWdsaXQKICAqIHJ1bm5lciBhZGRzIGV2ZXJ5IGxpbmUgdG8gdGhlIHN1YnRlc3QgbGlz dC4KICAqLwotYm9vbCBfX2lndF9ydW5fc3VidGVzdChjb25zdCBjaGFyICpzdWJ0ZXN0X25hbWUp Citib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSwgY29uc3Qg Y2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpCiB7CiAJaW50IGk7CiAKQEAgLTk1NCwxOCArMTA1 NSwyNSBAQCBib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkK IAkJCWlndF9leGl0KCk7CiAJCX0KIAotCWlmIChsaXN0X3N1YnRlc3RzKSB7Ci0JCXByaW50Zigi JXNcbiIsIHN1YnRlc3RfbmFtZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlpZiAocnVuX3Np bmdsZV9zdWJ0ZXN0KSB7Ci0JCWlmICh1d2lsZG1hdChzdWJ0ZXN0X25hbWUsIHJ1bl9zaW5nbGVf c3VidGVzdCkgPT0gMCkKKwkJaWYgKHV3aWxkbWF0KHN1YnRlc3RfbmFtZSwgcnVuX3NpbmdsZV9z dWJ0ZXN0KSA9PSAwKSB7CisJCQlfY2xlYXJfY3VycmVudF9kZXNjcmlwdGlvbigpOwogCQkJcmV0 dXJuIGZhbHNlOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlydW5fc2luZ2xlX3N1YnRlc3RfZm91 bmQgPSB0cnVlOworCQl9CiAJfQogCisJaWYgKGRlc2NyaWJlX3N1YnRlc3RzKSB7CisJCV9faWd0 X3ByaW50X2Rlc2NyaXB0aW9uKHN1YnRlc3RfbmFtZSwgZmlsZSwgbGluZSk7CisJCV9jbGVhcl9j dXJyZW50X2Rlc2NyaXB0aW9uKCk7CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKGxpc3Rf c3VidGVzdHMpIHsKKwkJcHJpbnRmKCIlc1xuIiwgc3VidGVzdF9uYW1lKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCiAJaWYgKHNraXBfc3VidGVzdHNfaGVuY2Vmb3J0aCkgewogCQlwcmludGYo IiVzU3VidGVzdCAlczogJXMlc1xuIiwKIAkJICAgICAgICghX19pZ3RfcGxhaW5fb3V0cHV0KSA/ ICJceDFiWzFtIiA6ICIiLCBzdWJ0ZXN0X25hbWUsCkBAIC0xMDE0LDE1ICsxMTIyLDMyIEBAIGJv b2wgaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cyh2b2lkKQogCXJldHVybiBsaXN0X3N1YnRlc3RzOwog fQogCi12b2lkIF9faWd0X3N1YnRlc3RfZ3JvdXBfc2F2ZShpbnQgKnNhdmUpCisKKwordm9pZCBf X2lndF9zdWJ0ZXN0X2dyb3VwX3NhdmUoaW50ICpzYXZlLCBpbnQgKmRlc2MpCiB7CiAJYXNzZXJ0 KHRlc3Rfd2l0aF9zdWJ0ZXN0cyk7CiAKKwlpZiAoX19jdXJyZW50X2Rlc2NyaXB0aW9uWzBdICE9 ICdcMCcpIHsKKwkJc3RydWN0IGRlc2NyaXB0aW9uX25vZGUgKm5ldyA9IGNhbGxvYygxLCBzaXpl b2YoKm5ldykpOworCQltZW1jcHkobmV3LT5kZXNjLCBfX2N1cnJlbnRfZGVzY3JpcHRpb24sIHNp emVvZihfX2N1cnJlbnRfZGVzY3JpcHRpb24pKTsKKwkJaWd0X2xpc3RfYWRkX3RhaWwoJm5ldy0+ bGluaywgJnN1Ymdyb3VwX2Rlc2NyaXB0aW9ucyk7CisJCV9jbGVhcl9jdXJyZW50X2Rlc2NyaXB0 aW9uKCk7CisJCSpkZXNjID0gdHJ1ZTsKKwl9CisKIAkqc2F2ZSA9IHNraXBfc3VidGVzdHNfaGVu Y2Vmb3J0aDsKIH0KIAotdm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUoaW50IHNhdmUp Cit2b2lkIF9faWd0X3N1YnRlc3RfZ3JvdXBfcmVzdG9yZShpbnQgc2F2ZSwgaW50IGRlc2MpCiB7 CisJaWYgKGRlc2MpIHsKKwkJc3RydWN0IGRlc2NyaXB0aW9uX25vZGUgKmxhc3QgPQorCQkJaWd0 X2xpc3RfbGFzdF9lbnRyeSgmc3ViZ3JvdXBfZGVzY3JpcHRpb25zLCBsYXN0LCBsaW5rKTsKKwkJ aWd0X2xpc3RfZGVsKCZsYXN0LT5saW5rKTsKKwkJZnJlZShsYXN0KTsKKwl9CisKIAlza2lwX3N1 YnRlc3RzX2hlbmNlZm9ydGggPSBzYXZlOwogfQogCkBAIC0xMjI5LDYgKzEzNTQsMzQgQEAgYm9v bCBpZ3RfY2FuX2ZhaWwodm9pZCkKIAlyZXR1cm4gIXRlc3Rfd2l0aF9zdWJ0ZXN0cyB8fCBpbl9m aXh0dXJlIHx8IGluX3N1YnRlc3Q7CiB9CiAKKy8qKgorICogaWd0X2Rlc2NyaWJlX2Y6CisgKiBA Zm10OiBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgZGVzY3JpcHRpb24KKyAqIEAuLi46IGFyZ3Vt ZW50IHVzZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBBdHRhY2ggYSBkZXNjcmlwdGlv biB0byB0aGUgZm9sbG93aW5nICNpZ3Rfc3VidGVzdCBvciAjaWd0X3N1YnRlc3RfZ3JvdXAKKyAq IGJsb2NrLgorICoKKyAqIENoZWNrICNpZ3RfZGVzY3JpYmUgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKi8KK3ZvaWQgaWd0X2Rlc2NyaWJlX2YoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50 IHJldDsKKwl2YV9saXN0IGFyZ3M7CisKKwlpZiAoIWRlc2NyaWJlX3N1YnRlc3RzKQorCQlyZXR1 cm47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCisJcmV0ID0gdnNucHJpbnRmKF9fY3VycmVu dF9kZXNjcmlwdGlvbiwgc2l6ZW9mKF9fY3VycmVudF9kZXNjcmlwdGlvbiksIGZtdCwgYXJncyk7 CisKKwl2YV9lbmQoYXJncyk7CisKKwlhc3NlcnQocmV0IDwgc2l6ZW9mKF9fY3VycmVudF9kZXNj cmlwdGlvbikpOworfQorCiBzdGF0aWMgYm9vbCBydW5uaW5nX3VuZGVyX2dkYih2b2lkKQogewog CWNoYXIgcGF0aG5hbWVbMzBdLCBidWZbMTAyNF07CkBAIC0xNTQwLDcgKzE2OTMsNyBAQCB2b2lk IGlndF9leGl0KHZvaWQpCiAJCWdfa2V5X2ZpbGVfZnJlZShpZ3Rfa2V5X2ZpbGUpOwogCiAJaWYg KHJ1bl9zaW5nbGVfc3VidGVzdCAmJiAhcnVuX3NpbmdsZV9zdWJ0ZXN0X2ZvdW5kKSB7Ci0JCWln dF93YXJuKCJVbmtub3duIHN1YnRlc3Q6ICVzXG4iLCBydW5fc2luZ2xlX3N1YnRlc3QpOworCQlp Z3RfY3JpdGljYWwoIlVua25vd24gc3VidGVzdDogJXNcbiIsIHJ1bl9zaW5nbGVfc3VidGVzdCk7 CiAJCWV4aXQoSUdUX0VYSVRfSU5WQUxJRCk7CiAJfQogCmRpZmYgLS1naXQgYS9saWIvaWd0X2Nv cmUuaCBiL2xpYi9pZ3RfY29yZS5oCmluZGV4IDg4YTk1ZWMyLi4xYjM3ZjE0MiAxMDA2NDQKLS0t IGEvbGliL2lndF9jb3JlLmgKKysrIGIvbGliL2lndF9jb3JlLmgKQEAgLTE3NCw3ICsxNzQsNyBA QCBpbnQgaWd0X3N1YnRlc3RfaW5pdF9wYXJzZV9vcHRzKGludCAqYXJnYywgY2hhciAqKmFyZ3Ys CiAjZGVmaW5lIGlndF9zdWJ0ZXN0X2luaXQoYXJnYywgYXJndikgXAogCWlndF9zdWJ0ZXN0X2lu aXRfcGFyc2Vfb3B0cygmYXJnYywgYXJndiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CiAKLWJvb2wgX19pZ3RfcnVuX3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lKTsKK2Jv b2wgX19pZ3RfcnVuX3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lLCBjb25zdCBjaGFy ICpmaWxlLCBjb25zdCBpbnQgbGluZSk7CiAjZGVmaW5lIF9faWd0X3Rva2VuY2F0Mih4LCB5KSB4 ICMjIHkKIAogLyoqCkBAIC0xOTgsMTQgKzE5OCwxNCBAQCBib29sIF9faWd0X3J1bl9zdWJ0ZXN0 KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSk7CiAgKgogICogVGhpcyBpcyBhIHNpbXBsZXIgdmVy c2lvbiBvZiBpZ3Rfc3VidGVzdF9mKCkKICAqLwotI2RlZmluZSBpZ3Rfc3VidGVzdChuYW1lKSBm b3IgKDsgX19pZ3RfcnVuX3N1YnRlc3QoKG5hbWUpKSAmJiBcCisjZGVmaW5lIGlndF9zdWJ0ZXN0 KG5hbWUpIGZvciAoOyBfX2lndF9ydW5fc3VidGVzdCgobmFtZSksIF9fRklMRV9fLCBfX0xJTkVf XykgJiYgXAogCQkJCSAgIChzaWdzZXRqbXAoaWd0X3N1YnRlc3Rfam1wYnVmLCAxKSA9PSAwKTsg XAogCQkJCSAgIGlndF9zdWNjZXNzKCkpCiAjZGVmaW5lIF9faWd0X3N1YnRlc3RfZih0bXAsIGZv cm1hdC4uLikgXAogCWZvciAoY2hhciB0bXAgWzI1Nl07IFwKIAkgICAgIHNucHJpbnRmKCB0bXAg LCBzaXplb2YoIHRtcCApLCBcCiAJCSAgICAgIGZvcm1hdCksIFwKLQkgICAgIF9faWd0X3J1bl9z dWJ0ZXN0KCB0bXAgKSAmJiBcCisJICAgICBfX2lndF9ydW5fc3VidGVzdCh0bXAsIF9fRklMRV9f LCBfX0xJTkVfXykgJiYgXAogCSAgICAgKHNpZ3NldGptcChpZ3Rfc3VidGVzdF9qbXBidWYsIDEp ID09IDApOyBcCiAJICAgICBpZ3Rfc3VjY2VzcygpKQogCkBAIC0yMjcsOCArMjI3LDggQEAgYm9v bCBfX2lndF9ydW5fc3VidGVzdChjb25zdCBjaGFyICpzdWJ0ZXN0X25hbWUpOwogY29uc3QgY2hh ciAqaWd0X3N1YnRlc3RfbmFtZSh2b2lkKTsKIGJvb2wgaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cyh2 b2lkKTsKIAotdm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3VwX3NhdmUoaW50ICopOwotdm9pZCBfX2ln dF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUoaW50KTsKK3ZvaWQgX19pZ3Rfc3VidGVzdF9ncm91cF9z YXZlKGludCAqLCBpbnQgKik7Cit2b2lkIF9faWd0X3N1YnRlc3RfZ3JvdXBfcmVzdG9yZShpbnQs IGludCk7CiAvKioKICAqIGlndF9zdWJ0ZXN0X2dyb3VwOgogICoKQEAgLTI0NSwxMSArMjQ1LDE0 IEBAIHZvaWQgX19pZ3Rfc3VidGVzdF9ncm91cF9yZXN0b3JlKGludCk7CiAgKiBncm91cCB3aWxs IGZhaWwgb3Igc2tpcC4gU3VidGVzdCBncm91cHMgY2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZC4K ICAqLwogI2RlZmluZSBpZ3Rfc3VidGVzdF9ncm91cCBmb3IgKGludCBpZ3RfdG9rZW5jYXQoX190 bXBpbnQsX19MSU5FX18pID0gMCwgXAotCQkJICAgICAgIGlndF90b2tlbmNhdChfX3NhdmUsX19M SU5FX18pID0gMDsgXAorCQkJICAgICAgIGlndF90b2tlbmNhdChfX3NhdmUsX19MSU5FX18pID0g MCwgXAorCQkJICAgICAgIGlndF90b2tlbmNhdChfX2Rlc2MsX19MSU5FX18pID0gMDsgXAogCQkJ ICAgICAgIGlndF90b2tlbmNhdChfX3RtcGludCxfX0xJTkVfXykgPCAxICYmIFwKLQkJCSAgICAg ICAoX19pZ3Rfc3VidGVzdF9ncm91cF9zYXZlKCYgaWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVf XykgKSwgdHJ1ZSk7IFwKKwkJCSAgICAgICAoX19pZ3Rfc3VidGVzdF9ncm91cF9zYXZlKCYgaWd0 X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXyksIFwKKwkJCQkJCQkgJiBpZ3RfdG9rZW5jYXQoX19k ZXNjLF9fTElORV9fKSApLCB0cnVlKTsgXAogCQkJICAgICAgIGlndF90b2tlbmNhdChfX3RtcGlu dCxfX0xJTkVfXykgKyssIFwKLQkJCSAgICAgICBfX2lndF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUo aWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXykgKSkKKwkJCSAgICAgICBfX2lndF9zdWJ0ZXN0 X2dyb3VwX3Jlc3RvcmUoaWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXyksIFwKKwkJCQkJCQkg ICBpZ3RfdG9rZW5jYXQoX19kZXNjLF9fTElORV9fKSkpCiAKIC8qKgogICogaWd0X21haW5fYXJn czoKQEAgLTM4NSw2ICszODgsMTI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZ3RfaWdub3JlX3dh cm4oYm9vbCB2YWx1ZSkKIHsKIH0KIAorX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwg MikpKQordm9pZCBpZ3RfZGVzY3JpYmVfZihjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qKgor ICogaWd0X2Rlc2NyaWJlOgorICogQGRzYzogc3RyaW5nIGNvbnRhaW5pbmcgZGVzY3JpcHRpb24K KyAqCisgKiBBdHRhY2ggYSBkZXNjcmlwdGlvbiB0byB0aGUgZm9sbG93aW5nICNpZ3Rfc3VidGVz dCBvciAjaWd0X3N1YnRlc3RfZ3JvdXAKKyAqIGJsb2NrLgorICoKKyAqIFRoZSBkZXNjcmlwdGlv biBzaG91bGQgY29tcGxlbWVudCB0aGUgdGVzdC9zdWJ0ZXN0IG5hbWUgYW5kIHByb3ZpZGUgbW9y ZQorICogY29udGV4dCBvbiB3aGF0IGlzIGJlaW5nIHRlc3RlZC4gSXQgc2hvdWxkIGV4cGxhaW4g dGhlIGlkZWEgb2YgdGhlIHRlc3QgYW5kCisgKiBkbyBub3QgbWVudGlvbiBpbXBsZW1lbnRhdGlv biBkZXRhaWxzLCBzbyB0aGF0IGl0IG5ldmVyIGdvZXMgb3V0IG9mIGRhdGUuCisgKgorICogRE86 CisgKiAgKiBmb2N1cyBvbiB0aGUgdXNlcnNwYWNlJ3MgcGVyc3BlY3RpdmUKKyAqICAqIHRyeSB0 byBjYXB0dXJlIHRoZSByZWFzb24gZm9yIHRoZSB0ZXN0J3MgZXhpc3RlbmNlCisgKiAgKiBiZSBi cmllZgorICoKKyAqIERPTidUOgorICogICogdHJ5IHRvIHRyYW5zbGF0ZSB0aGUgY29kZSBpbnRv IEVuZ2xpc2gKKyAqICAqIGV4cGxhaW4gYWxsIHRoZSBjaGVja3MgdGhlIHRlc3QgZG9lcworICog ICogZGVsdmUgb24gdGhlIGltcGxlbWVudGF0aW9uCisgKgorICogR29vZCBleGFtcGxlczoKKyAq ICAqICJtYWtlIHN1cmUgdGhhdCBsZWdhY3kgY3Vyc29yIHVwZGF0ZXMgZG8gbm90IHN0YWxsIGF0 b21pYyBjb21taXRzIgorICogICogImNoZWNrIHRoYXQgYXRvbWljIHVwZGF0ZXMgb2YgbWFueSBw bGFuZXMgYXJlIGluZGVlZCBhdG9taWMgYW5kIHRha2UKKyAqICAgICBlZmZlY3QgaW1tZWRpYXRl bHkgYWZ0ZXIgdGhlIGNvbW1pdCIKKyAqICAqICJtYWtlIHN1cmUgdGhhdCB0aGUgbWV0YS1kYXRh IGV4cG9zZWQgYnkgdGhlIGtlcm5lbCB0byB0aGUgdXNlcnNwYWNlCisgKiAgICAgaXMgY29ycmVj dCBhbmQgbWF0Y2hlcyB0aGUgdXNlZCBFRElEIgorICoKKyAqIEJhZCBleGFtcGxlczoKKyAqICAq ICJzcGF3biAxMCB0aHJlYWRzLCBlYWNoIHBpbm5pbmcgY3B1IGNvcmUgd2l0aCBhIGJ1c3kgbG9v cC4uLiIKKyAqICAqICJyYW5kb21seSBnZW5lcmF0ZSBob2xlcyBpbiBhIHByaW1hcnkgcGxhbmUg dGhlbiB0cnkgdG8gY292ZXIgZWFjaCBob2xlCisgKiAgICB3aXRoIGEgcGxhbmUgYW5kIG1ha2Ug c3VyZSB0aGF0IENSQyBtYXRjaGVzLCBkbyAyNSBnYXppbGxpb24gcm91bmRzIG9mCisgKiAgICB0 aGF0Li4uIgorICoKKyAqCisgKiBSZXN1bHRpbmcgI2lndF9zdWJ0ZXN0IGRvY3VtZW50YXRpb24g aXMgYSBjb25jYXRlbmF0aW9uIG9mIGl0cyBvd24KKyAqIGRlc2NyaXB0aW9uIGFuZCBhbGwgdGhl IHBhcmVudGluZyAjaWd0X3N1YnRlc3RfZ3JvdXAgZGVzY3JpcHRpb25zLCBzdGFydGluZworICog ZnJvbSB0aGUgb3V0ZXJtb3N0IG9uZS4gRXhhbXBsZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9 IkMiIC0tPgorICogI2luY2x1ZGUgImlndC5oIgorICoKKyAqIElHVF9URVNUX0RFU0NSSVBUSU9O KCJHbG9iYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdob2xlIGJpbmFyeSIpOworICogaWd0X21haW4K KyAqIHsKKyAqIAlpZ3RfZGVzY3JpYmUoIkRlc2Mgb2YgdGhlIHN1Ymdyb3VwIHdpdGggQSBhbmQg QiIpOworICogCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKyAqIAkJaWd0X2Rlc2NyaWJlKCJEZXNjIG9m IHRoZSBzdWJ0ZXN0IEEiKTsKKyAqIAkJaWd0X3N1YnRlc3QoInN1YnRlc3QtYSIpIHsKKyAqIAkJ CS4uLgorICogCQl9CisgKgorICogCQlpZ3RfZGVzY3JpYmUoIkRlc2Mgb2YgdGhlIHN1YnRlc3Qg QiIpOworICogCQlpZ3Rfc3VidGVzdCgic3VidGVzdC1iIikgeworICogCQkJLi4uCisgKiAJCX0K KyAqIAl9CisgKgorICogCWlndF9kZXNjcmliZSgiRGVzYyBvZiB0aGUgc3VidGVzdCBDIik7Cisg KiAJaWd0X3N1YnRlc3QoInN1YnRlc3QtYyIpIHsKKyAqIAkJLi4uCisgKiAJfQorICogfQorICog XXwKKyAqCisgKiBJdCdzIHdpbGwgYWNjZXNzaWJsZSB2aWEgLS1kZXNjcmliZSBjb21tYW5kIGxp bmUgc3dpdGNoOgorICoKKyAqIHxbCisgKiAkIHRlc3QgLS1kZXNjcmliZQorICogR2xvYmFsIGRl c2NyaXB0aW9uIG9mIHRoZSB3aG9sZSBiaW5hcnkKKyAqCisgKiBTVUIgc3VidGVzdC1hIHRlc3Qu Yzo1OgorICogICBEZXNjIG9mIHRoZSBzdWJncm91cCB3aXRoIEEgYW5kIEIKKyAqCisgKiAgIERl c2Mgb2YgdGhlIHN1YnRlc3QgQQorICoKKyAqIFNVQiBzdWJ0ZXN0LWIgdGVzdC5jOjEwOgorICog ICBEZXNjIG9mIHRoZSBzdWJncm91cCB3aXRoIEEgYW5kIEIKKyAqCisgKiAgIERlc2Mgb2YgdGhl IHN1YnRlc3QgQgorICoKKyAqIFNVQiBzdWJ0ZXN0LWMgdGVzdC5jOjE1OgorICogICBEZXNjIG9m IHRoZSBzdWJ0ZXN0IEMKKyAqIF18CisgKgorICogRXZlcnkgc2luZ2xlICNpZ3Rfc3VidGVzdCBk b2VzIG5vdCBoYXZlIHRvIGJlIHByZWNlZGVkIHdpdGggYSAjaWd0X2Rlc2NyaWJlCisgKiBhcyBs b25nIGFzIGl0IGhhcyBnb29kLWVub3VnaCBleHBsYW5hdGlvbiBwcm92aWRlZCBvbiB0aGUgI2ln dF9zdWJ0ZXN0X2dyb3VwCisgKiBsZXZlbC4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqIHxbPCEt LSBsYW5ndWFnZT0iQyIgLS0+CisgKiAjaW5jbHVkZSAiaWd0LmgiCisgKgorICogaWd0X21haW4K KyAqIHsKKyAqIAlpZ3RfZGVzY3JpYmUoImNoZWNrIHh5eiB3aXRoIGRpZmZlcmVudCB0aWxpbmdz Iik7CisgKiAJaWd0X3N1YnRlc3RfZ3JvdXAgeworICogCQkvLyBubyBuZWVkIGZvciBleHRyYSBk ZXNjcmlwdGlvbiwgZ3JvdXAgaXMgZW5vdWdoIGFuZCB0aWxpbmcgaXMKKyAqIAkJLy8gb2J2aW91 cyBmcm9tIHRoZSB0ZXN0IG5hbWUKKyAqIAkJaWd0X3N1YnRlc3QoImZvby10aWxpbmcteCIpIHsK KyAqIAkJCS4uLgorICogCQl9CisgKgorICogCQlpZ3Rfc3VidGVzdCgiZm9vLXRpbGluZy15Iikg eworICogCQkJLi4uCisgKiAJCX0KKyAqIAl9CisgKiB9CisgKiBdfAorICoKKyAqLworI2RlZmlu ZSBpZ3RfZGVzY3JpYmUoZHNjKSBcCisJaWd0X2Rlc2NyaWJlX2YoIiVzIiwgZHNjKQorCiAvKioK ICAqIGlndF9hc3NlcnQ6CiAgKiBAZXhwcjogY29uZGl0aW9uIHRvIHRlc3QKZGlmZiAtLWdpdCBh L2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYyBiL2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYTlmODU3YmIKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImRybXRl c3QuaCIKKyNpbmNsdWRlICJpZ3RfdGVzdHNfY29tbW9uLmgiCisKK0lHVF9URVNUX0RFU0NSSVBU SU9OKCJ0aGUgdG9wIGxldmVsIGRlc2NyaXB0aW9uIik7CitzdGF0aWMgdm9pZCBmYWtlX21haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsK KworCWlndF9kZXNjcmliZSgiQmFzaWMgQSIpOworCWlndF9zdWJ0ZXN0KCJBIikKKwkJOworCisJ aWd0X2ZpeHR1cmUKKwkJcHJpbnRmKCJzaG91bGQgbm90IGJlIGV4ZWN1dGVkIVxuIik7CisKKwlp Z3RfZGVzY3JpYmUoIkdyb3VwIHdpdGggQiwgQyAmIEQiKTsKKwlpZ3Rfc3VidGVzdF9ncm91cCB7 CisJCWlndF9kZXNjcmliZSgiQmFzaWMgQiIpOworCQlpZ3Rfc3VidGVzdCgiQiIpCisJCQk7CisK KwkJaWYgKCFpZ3Rfb25seV9saXN0X3N1YnRlc3RzKCkpCisJCQlwcmludGYoInNob3VsZCBub3Qg YmUgZXhlY3V0ZWQhXG4iKTsKKworCQlpZ3RfZGVzY3JpYmUoIkdyb3VwIHdpdGggQyAmIEQiKTsK KwkJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQkJaWd0X2Rlc2NyaWJlKCJCYXNpYyBDIik7CisJCQlp Z3Rfc3VidGVzdCgiQyIpCisJCQkJcHJpbnRmKCJzaG91bGQgbm90IGJlIGV4ZWN1dGVkIVxuIik7 CisKKwkJCS8vIE5PIERPQworCQkJaWd0X3N1YnRlc3QoIkQiKQorCQkJCTsKKwkJfQorCX0KKwor CS8vIE5PIERPQworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJLy8gTk8gRE9DCisJCWlndF9zdWJ0 ZXN0KCJFIikKKwkJCTsKKwl9CisKKwkvLyBOTyBET0MKKwlpZ3Rfc3VidGVzdCgiRiIpCisJCTsK KworCWlndF9kZXNjcmliZSgidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0 IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICIKKwkJICAgICAidGhpcyBk ZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkg aW4gdGhlIHRlcm1pbmFsICIKKwkJICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28g bG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICIKKwkJICAg ICAidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2Vs ZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICIKKwkJICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91 bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFs ICIKKwkJICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdy YXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsIik7CisJaWd0X3N1YnRlc3QoIkciKQor CQk7CisKKwlpZ3RfZGVzY3JpYmUoInZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVu dGhvdWdoaXRzcGFzdHRoZXdycHBpbmdsaW1pdCIKKwkJICAgICAidmVyeWxvbmd3b3JkdGhhdHNo b3VkbGJlcHJpbnRlZGV2ZW50aG91Z2hpdHNwYXN0dGhld3JhcHBpbmdsaW1pdCAiCisJCSAgICAg InZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVudGhvdWdoaXRzcGFzdHRoZXdyYXBw aW5nbGltaXQiCisJCSAgICAgInZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVudGhv dWdoaXRzcGFzdHRoZXdyYXBwaW5nbGltaXQiKTsKKwlpZ3Rfc3VidGVzdCgiRiIpCisJCTsKKwor CWlndF9leGl0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIERFU0NSSUJFX0FMTF9PVVRQVVRb XSA9IFwKKwkidGhlIHRvcCBsZXZlbCBkZXNjcmlwdGlvblxuIgorCSJcbiIKKwkiU1VCIEEgLi4v bGliL3Rlc3RzL2lndF9kZXNjcmliZS5jOjM2OlxuIgorCSIgIEJhc2ljIEFcbiIKKwkiXG4iCisJ IlNVQiBCIC4uL2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYzo0NTpcbiIKKwkiICBHcm91cCB3aXRo IEIsIEMgJiBEXG4iCisJIlxuIgorCSIgIEJhc2ljIEJcbiIKKwkiXG4iCisJIlNVQiBDIC4uL2xp Yi90ZXN0cy9pZ3RfZGVzY3JpYmUuYzo1NDpcbiIKKwkiICBHcm91cCB3aXRoIEIsIEMgJiBEXG4i CisJIlxuIgorCSIgIEdyb3VwIHdpdGggQyAmIERcbiIKKwkiXG4iCisJIiAgQmFzaWMgQ1xuIgor CSJcbiIKKwkiU1VCIEQgLi4vbGliL3Rlc3RzL2lndF9kZXNjcmliZS5jOjU4OlxuIgorCSIgIEdy b3VwIHdpdGggQiwgQyAmIERcbiIKKwkiXG4iCisJIiAgR3JvdXAgd2l0aCBDICYgRFxuIgorCSJc biIKKwkiU1VCIEUgLi4vbGliL3Rlc3RzL2lndF9kZXNjcmliZS5jOjY2OlxuIgorCSIgIE5PIERP Q1VNRU5UQVRJT04hXG4iCisJIlxuIgorCSJTVUIgRiAuLi9saWIvdGVzdHMvaWd0X2Rlc2NyaWJl LmM6NzE6XG4iCisJIiAgTk8gRE9DVU1FTlRBVElPTiFcbiIKKwkiXG4iCisJIlNVQiBHIC4uL2xp Yi90ZXN0cy9pZ3RfZGVzY3JpYmUuYzo4MDpcbiIKKwkiICB0aGlzIGRlc2NyaXB0aW9uIHNob3Vs ZCBiZSBzbyBsb25nIHRoYXQgaXQgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwg dGhpc1xuIgorCSIgIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBzbyBsb25nIHRoYXQgaXQgd3JhcHMg aXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwgdGhpcyBkZXNjcmlwdGlvblxuIgorCSIgIHNo b3VsZCBiZSBzbyBsb25nIHRoYXQgaXQgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWlu YWwgdGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc29cbiIKKwkiICBsb25nIHRoYXQgaXQgd3Jh cHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwgdGhpcyBkZXNjcmlwdGlvbiBzaG91bGQg YmUgc28gbG9uZyB0aGF0IGl0XG4iCisJIiAgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVy bWluYWwgdGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0 c2VsZlxuIgorCSIgIG5pY2VseSBpbiB0aGUgdGVybWluYWxcbiIKKwkiXG4iCisJIlNVQiBGIC4u L2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYzo4NzpcbiIKKwkiICB2ZXJ5bG9uZ3dvcmR0aGF0c2hv dWRsYmVwcmludGVkZXZlbnRob3VnaGl0c3Bhc3R0aGV3cnBwaW5nbGltaXR2ZXJ5bG9uZ3dvcmR0 aGF0c2hvdWRsYmVwcmludGVkZXZlbnRob3VnaGl0c3Bhc3R0aGV3cmFwcGluZ2xpbWl0XG4iCisJ IiAgdmVyeWxvbmd3b3JkdGhhdHNob3VkbGJlcHJpbnRlZGV2ZW50aG91Z2hpdHNwYXN0dGhld3Jh cHBpbmdsaW1pdHZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVudGhvdWdoaXRzcGFz dHRoZXdyYXBwaW5nbGltaXRcblxuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgSlVTVF9DX09VVFBV VFtdID0gXAorCSJ0aGUgdG9wIGxldmVsIGRlc2NyaXB0aW9uXG4iCisJIlxuIgorCSJTVUIgQyAu Li9saWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmM6NTQ6XG4iCisJIiAgR3JvdXAgd2l0aCBCLCBDICYg RFxuIgorCSJcbiIKKwkiICBHcm91cCB3aXRoIEMgJiBEXG4iCisJIlxuIgorCSIgIEJhc2ljIENc biIKKwkiXG4iOworCitzdGF0aWMgdm9pZCBhc3NlcnRfcGlwZV9lbXB0eShpbnQgZmQpCit7CisJ Y2hhciBidWZbNV07CisJaW50ZXJuYWxfYXNzZXJ0KDAgPT0gcmVhZChmZCwgYnVmLCBzaXplb2Yo YnVmKSkpOworfQorCitzdGF0aWMgdm9pZCByZWFkX3dob2xlX3BpcGUoaW50IGZkLCBjaGFyICpi dWYsIHNpemVfdCBidWZsZW4pCit7CisJc3NpemVfdCByZWFkbGVuOworCW9mZl90IG9mZnNldDsK KworCW9mZnNldCA9IDA7CisJd2hpbGUgKChyZWFkbGVuID0gcmVhZChmZCwgYnVmK29mZnNldCwg YnVmbGVuLW9mZnNldCkpKSB7CisJCWludGVybmFsX2Fzc2VydChyZWFkbGVuICE9IC0xKTsKKwkJ b2Zmc2V0ICs9IHJlYWRsZW47CisJfQorfQorCitzdGF0aWMgcGlkX3QgZG9fZm9yayhpbnQgYXJn YywgY2hhciAqKmFyZ3YsIGludCAqb3V0LCBpbnQgKmVycikKK3sKKwlpbnQgb3V0ZmRbMl0sIGVy cmZkWzJdOworCXBpZF90IHBpZDsKKworCWludGVybmFsX2Fzc2VydChwaXBlKG91dGZkKSAhPSAt MSk7CisJaW50ZXJuYWxfYXNzZXJ0KHBpcGUoZXJyZmQpICE9IC0xKTsKKworCXBpZCA9IGZvcmso KTsKKwlpbnRlcm5hbF9hc3NlcnQocGlkICE9IC0xKTsKKworCWlmIChwaWQgPT0gMCkgeworCQl3 aGlsZSAoKGR1cDIob3V0ZmRbMV0sIFNURE9VVF9GSUxFTk8pID09IC0xKSAmJiAoZXJybm8gPT0g RUlOVFIpKSB7fQorCQl3aGlsZSAoKGR1cDIoZXJyZmRbMV0sIFNUREVSUl9GSUxFTk8pID09IC0x KSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7fQorCisJCWZha2VfbWFpbihhcmdjLCBhcmd2KTsKKwor CQlleGl0KC0xKTsKKwl9IGVsc2UgeworCQkvKiBjbG9zZSB0aGUgd3JpdGluZyBlbmRzICovCisJ CWNsb3NlKG91dGZkWzFdKTsKKwkJY2xvc2UoZXJyZmRbMV0pOworCisJCSpvdXQgPSBvdXRmZFsw XTsKKwkJKmVyciA9IGVycmZkWzBdOworCisJCXJldHVybiBwaWQ7CisJfQorfQorCitzdGF0aWMg aW50IF93YWl0KHBpZF90IHBpZCwgaW50ICpzdGF0dXMpIHsKKwlpbnQgcmV0OworCisJZG8gewor CQlyZXQgPSB3YWl0cGlkKHBpZCwgc3RhdHVzLCAwKTsKKwl9IHdoaWxlIChyZXQgPT0gLTEgJiYg ZXJybm8gPT0gRUlOVFIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQoreworCWNoYXIgcHJvZ1tdID0gImlndF9kZXNjcmliZSI7CisJaW50IHN0 YXR1czsKKwlpbnQgb3V0ZmQsIGVycmZkOworCisJLyogZGVzY3JpYmUgYWxsIHN1YnRlc3QgKi8g eworCQlzdGF0aWMgY2hhciBvdXRbNDA5Nl07CisJCWNoYXIgYXJnW10gPSAiLS1kZXNjcmliZSI7 CisJCWNoYXIgKmZha2VfYXJndltdID0ge3Byb2csIGFyZ307CisJCWludCBmYWtlX2FyZ2MgPSBB UlJBWV9TSVpFKGZha2VfYXJndik7CisKKwkJcGlkX3QgcGlkID0gZG9fZm9yayhmYWtlX2FyZ2Ms IGZha2VfYXJndiwgJm91dGZkLCAmZXJyZmQpOworCisJCXJlYWRfd2hvbGVfcGlwZShvdXRmZCwg b3V0LCBzaXplb2Yob3V0KSk7CisJCWFzc2VydF9waXBlX2VtcHR5KGVycmZkKTsKKworCQlpbnRl cm5hbF9hc3NlcnQoX3dhaXQocGlkLCAmc3RhdHVzKSAhPSAtMSk7CisJCWludGVybmFsX2Fzc2Vy dChXRVhJVFNUQVRVUyhzdGF0dXMpID09IElHVF9FWElUX1NVQ0NFU1MpOworCQlpbnRlcm5hbF9h c3NlcnQoMCA9PSBzdHJjbXAoREVTQ1JJQkVfQUxMX09VVFBVVCwgb3V0KSk7CisKKwkJY2xvc2Uo b3V0ZmQpOworCQljbG9zZShlcnJmZCk7CisJfQorCisJLyogZGVzY3JpYmUgQyB1c2luZyBhIHBh dHRlcm4gKi8geworCQlzdGF0aWMgY2hhciBvdXRbNDA5Nl07CisJCWNoYXIgYXJnW10gPSAiLS1k ZXNjcmliZT1DIjsKKwkJY2hhciAqZmFrZV9hcmd2W10gPSB7cHJvZywgYXJnfTsKKwkJaW50IGZh a2VfYXJnYyA9IEFSUkFZX1NJWkUoZmFrZV9hcmd2KTsKKworCQlwaWRfdCBwaWQgPSBkb19mb3Jr KGZha2VfYXJnYywgZmFrZV9hcmd2LCAmb3V0ZmQsICZlcnJmZCk7CisKKwkJcmVhZF93aG9sZV9w aXBlKG91dGZkLCBvdXQsIHNpemVvZihvdXQpKTsKKwkJYXNzZXJ0X3BpcGVfZW1wdHkoZXJyZmQp OworCisJCWludGVybmFsX2Fzc2VydChfd2FpdChwaWQsICZzdGF0dXMpICE9IC0xKTsKKwkJaW50 ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gSUdUX0VYSVRfU1VDQ0VTUyk7CisJ CWludGVybmFsX2Fzc2VydCgwID09IHN0cmNtcChKVVNUX0NfT1VUUFVULCBvdXQpKTsKKworCQlj bG9zZShvdXRmZCk7CisJCWNsb3NlKGVycmZkKTsKKwl9CisKKwkvKiBmYWlsIGRlc2NyaWJpbmcg d2l0aCBhIGJhZCBwYXR0ZXJuICovIHsKKwkJc3RhdGljIGNoYXIgZXJyWzQwOTZdOworCQljaGFy IGFyZ1tdID0gIi0tZGVzY3JpYmU9WiI7CisJCWNoYXIgKmZha2VfYXJndltdID0ge3Byb2csIGFy Z307CisJCWludCBmYWtlX2FyZ2MgPSBBUlJBWV9TSVpFKGZha2VfYXJndik7CisKKwkJcGlkX3Qg cGlkID0gZG9fZm9yayhmYWtlX2FyZ2MsIGZha2VfYXJndiwgJm91dGZkLCAmZXJyZmQpOworCisJ CXJlYWRfd2hvbGVfcGlwZShlcnJmZCwgZXJyLCBzaXplb2YoZXJyKSk7CisKKwkJaW50ZXJuYWxf YXNzZXJ0KF93YWl0KHBpZCwgJnN0YXR1cykgIT0gLTEpOworCQlpbnRlcm5hbF9hc3NlcnQoV0VY SVRTVEFUVVMoc3RhdHVzKSA9PSBJR1RfRVhJVF9JTlZBTElEKTsKKwkJaW50ZXJuYWxfYXNzZXJ0 KHN0cnN0cihlcnIsICJVbmtub3duIHN1YnRlc3Q6IFoiKSk7CisKKwkJY2xvc2Uob3V0ZmQpOwor CQljbG9zZShlcnJmZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdGVz dHMvbWVzb24uYnVpbGQgYi9saWIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggYjkzMGVlNmUuLjRk OTA3ZTM0IDEwMDY0NAotLS0gYS9saWIvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvbGliL3Rlc3Rz L21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQCBsaWJfdGVzdHMgPSBbCiAJJ2lndF9jYW5fZmFp bCcsCiAJJ2lndF9jYW5fZmFpbF9zaW1wbGUnLAogCSdpZ3RfY29uZmxpY3RpbmdfYXJncycsCisJ J2lndF9kZXNjcmliZScsCiAJJ2lndF9lZGlkJywKIAknaWd0X2V4aXRfaGFuZGxlcicsCiAJJ2ln dF9mb3JrJywKLS0gCjIuMjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3Qt ZGV2