From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 99C316E896 for ; Mon, 11 Nov 2019 10:11:41 +0000 (UTC) From: Petri Latvala Date: Mon, 11 Nov 2019 12:11:35 +0200 Message-Id: <20191111101135.27625-1-petri.latvala@intel.com> In-Reply-To: <20191024110546.25569-2-petri.latvala@intel.com> References: <20191024110546.25569-2-petri.latvala@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 1/8] lib: Introduce dynamic subsubtests 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: RHluYW1pYyBzdWJzdWJ0ZXN0cywgb3Igc3VidGVzdHMgb2Ygc3VidGVzdHMsIGFyZSBpbmRpdmlk dWFsIHBpZWNlcyBvZgp0ZXN0cyB0aGF0IGFyZSBub3Qgc3RhdGljYWxseSBhdmFpbGFibGUgYWxs IHRoZSB0aW1lLgoKQSBnb29kIGV4YW1wbGUgb2YgYSBuZWVkIGZvciBhIGR5bmFtaWMgc3Vic3Vi dGVzdCBpcyBpOTE1IGVuZ2luZQpsaXN0aW5nOiBBIG5vcm1hbCBzdWJ0ZXN0IGZvciBlYWNoIGVu Z2luZSBjbGFzcyAoImJzZCIpLCBhbmQgYSBkeW5hbWljCnN1YnN1YnRlc3QgZm9yIGVhY2ggaW5z dGFuY2UgKCJic2QwIiwgImJzZDIiLCBldGMpLiBPciBhIG5vcm1hbApzdWJ0ZXN0IGZvciBhbiBv cGVyYXRpb24gd2l0aCBhIGR5bmFtaWMgc3Vic3VidGVzdCBmb3IgZXZlcnkgZW5naW5lCnRoZXJl IGlzLgoKQW5vdGhlciBleGFtcGxlIGlzIGR5bmFtaWMgc3Vic3VidGVzdHMgZm9yIHBpcGVzOiBJ bnN0ZWFkIG9mIHVzaW5nCmZvcmVhY2hfcGlwZV9zdGF0aWMsIG1ha2Ugb25lIHN1YnRlc3QgYW5k IHVzZSBmb3JlYWNoX3BpcGUgd2l0aApkeW5hbWljIHN1YnN1YnRlc3RzIGZvciBlYWNoIHBpcGUu Cgp2MjogUmViYXNlIGFuZCBhZGFwdCB0byBpZ3RfZGVzY3JpYmUgY2hhbmdlcwoKdjM6IFJlbmFt ZSB0byBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHMgJgogICAgaWd0X2R5bmFt aWNfc3Vic3VidGVzdCwgYmV0dGVyIGRvY3MsIG1ha2UgaWd0X2Rlc2NyaWJlIGZhaWwgbG91ZGx5 CiAgICBpZiBpdCdzIHVzZWQgaW4gYW4gaW1wb3NzaWJsZSBjb250ZXh0LgoKdjQ6IE1lbnRpb24g ZHluYW1pYyBibG9ja3MgaW4gdGhlIHdhcm5pbmcgZm9yIGxvbmdqbXAgaW4gY29yZSBkb2NzLgoK U2lnbmVkLW9mZi1ieTogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+ClJl dmlld2VkLWJ5OiBBcmthZGl1c3ogSGlsZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+Ci0t LQogbGliL2lndF9jb3JlLmMgfCAxNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLQogbGliL2lndF9jb3JlLmggfCAxMjMgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyNTggaW5zZXJ0aW9ucygrKSwg MjcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9jb3JlLmMgYi9saWIvaWd0X2Nv cmUuYwppbmRleCA3YmQ1YWZhNS4uMWUxYjhhYTEgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfY29yZS5j CisrKyBiL2xpYi9pZ3RfY29yZS5jCkBAIC0xMjUsMTIgKzEyNSwxNCBAQAogICogICB0byBpbnRl cmFjdGluZyB3aXRoIHRoZSBrZXJuZWwgZHJpdmVyIG11c3QgYmUgcmVpbml0aWFsaXplZCB0byBh dm9pZCBzdWNoCiAgKiAgIGlzc3Vlcy4KICAqCi0gKiAtIENvZGUgYmxvY2tzIHdpdGggbWFnaWMg Y29udHJvbCBmbG93IGFyZSBpbXBsZW1lbnRlZCB3aXRoIHNldGptcCgpIGFuZAotICogICBsb25n am1wKCkuIFRoaXMgYXBwbGllcyB0byAjaWd0X2ZpeHR1cmUgYW5kICNpZ3Rfc3VidGVzdCBibG9j a3MgYW5kIGFsbCB0aGUKLSAqICAgdGhyZWUgdmFyaWFudHMgdG8gZmluaXNoIHRlc3Q6IGlndF9z dWNjZXNzKCksIGlndF9za2lwKCkgYW5kIGlndF9mYWlsKCkuCi0gKiAgIE1vc3RseSB0aGlzIGlz IG9mIG5vIGNvbmNlcm4sIGV4Y2VwdCB3aGVuIHN1Y2ggYSBjb250cm9sIGJsb2NrIGNoYW5nZXMK LSAqICAgc3RhY2sgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIHNhbWUgZnVuY3Rpb24gYXMgdGhl IGNvbnRyb2wgYmxvY2sgcmVzaWRlcy4KLSAqICAgQW55IHN0b3JlL2xvYWQgYmVoYXZpb3VyIGFm dGVyIGEgbG9uZ2ptcCgpIGlzIGlsbC1kZWZpbmVkIGZvciB0aGVzZQorICogLSBDb2RlIGJsb2Nr cyB3aXRoIG1hZ2ljIGNvbnRyb2wgZmxvdyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBzZXRqbXAoKQor ICogICBhbmQgbG9uZ2ptcCgpLiBUaGlzIGFwcGxpZXMgdG8gI2lndF9maXh0dXJlLCAjaWd0X3N1 YnRlc3QsCisgKiAgICNpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHMgYW5kICNp Z3RfZHluYW1pY19zdWJzdWJ0ZXN0CisgKiAgIGJsb2NrcyBhbmQgYWxsIHRoZSB0aHJlZSB2YXJp YW50cyB0byBmaW5pc2ggdGVzdDogaWd0X3N1Y2Nlc3MoKSwKKyAqICAgaWd0X3NraXAoKSBhbmQg aWd0X2ZhaWwoKS4gTW9zdGx5IHRoaXMgaXMgb2Ygbm8gY29uY2VybiwgZXhjZXB0CisgKiAgIHdo ZW4gc3VjaCBhIGNvbnRyb2wgYmxvY2sgY2hhbmdlcyBzdGFjayB2YXJpYWJsZXMgZGVmaW5lZCBp biB0aGUKKyAqICAgc2FtZSBmdW5jdGlvbiBhcyB0aGUgY29udHJvbCBibG9jayByZXNpZGVzLiAg QW55IHN0b3JlL2xvYWQKKyAqICAgYmVoYXZpb3VyIGFmdGVyIGEgbG9uZ2ptcCgpIGlzIGlsbC1k ZWZpbmVkIGZvciB0aGVzZQogICogICB2YXJpYWJsZXMuIEF2b2lkIHN1Y2ggY29kZS4KICAqCiAg KiAgIFF1b3RpbmcgdGhlIG1hbiBwYWdlIGZvciBsb25nam1wKCk6CkBAIC0yNjMsOSArMjY1LDEy IEBAIGJvb2wgaWd0X3NraXBfY3JjX2NvbXBhcmU7CiBzdGF0aWMgYm9vbCBsaXN0X3N1YnRlc3Rz ID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBkZXNjcmliZV9zdWJ0ZXN0cyA9IGZhbHNlOwogc3RhdGlj IGNoYXIgKnJ1bl9zaW5nbGVfc3VidGVzdCA9IE5VTEw7CitzdGF0aWMgY2hhciAqcnVuX3Npbmds ZV9keW5hbWljX3N1YnRlc3QgPSBOVUxMOwogc3RhdGljIGJvb2wgcnVuX3NpbmdsZV9zdWJ0ZXN0 X2ZvdW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3QgY2hhciAqaW5fc3VidGVzdCA9IE5VTEw7Citz dGF0aWMgY29uc3QgY2hhciAqaW5fZHluYW1pY19zdWJ0ZXN0ID0gTlVMTDsKIHN0YXRpYyBzdHJ1 Y3QgdGltZXNwZWMgc3VidGVzdF90aW1lOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBkeW5hbWlj X3N1YnRlc3RfdGltZTsKIHN0YXRpYyBjbG9ja2lkX3QgaWd0X2Nsb2NrID0gKGNsb2NraWRfdCkt MTsKIHN0YXRpYyBib29sIGluX2ZpeHR1cmUgPSBmYWxzZTsKIHN0YXRpYyBib29sIHRlc3Rfd2l0 aF9zdWJ0ZXN0cyA9IGZhbHNlOwpAQCAtMzAwLDYgKzMwNSw3IEBAIGVudW0gewogCU9QVF9MSVNU X1NVQlRFU1RTID0gNTAwLAogCU9QVF9ERVNDUklCRV9TVUJURVNUUywKIAlPUFRfUlVOX1NVQlRF U1QsCisJT1BUX1JVTl9EWU5BTUlDX1NVQlRFU1QsCiAJT1BUX0RFU0NSSVBUSU9OLAogCU9QVF9E RUJVRywKIAlPUFRfSU5URVJBQ1RJVkVfREVCVUcsCkBAIC0zMjMsNiArMzI5LDggQEAgY2hhciAq aWd0X2ZyYW1lX2R1bXBfcGF0aDsKIAogc3RhdGljIGJvb2wgc3RkZXJyX25lZWRzX3NlbnRpbmVs ID0gZmFsc2U7CiAKK3N0YXRpYyBpbnQgX2lndF9keW5hbWljX3Rlc3RzX2V4ZWN1dGVkID0gLTE7 CisKIGNvbnN0IGNoYXIgKmlndF90ZXN0X25hbWUodm9pZCkKIHsKIAlyZXR1cm4gY29tbWFuZF9z dHI7CkBAIC0zNTQsNyArMzYyLDkgQEAgc3RhdGljIHZvaWQgX2lndF9sb2dfYnVmZmVyX2R1bXAo dm9pZCkKIHsKIAl1aW50OF90IGk7CiAKLQlpZiAoaW5fc3VidGVzdCkKKwlpZiAoaW5fZHluYW1p Y19zdWJ0ZXN0KQorCQlmcHJpbnRmKHN0ZGVyciwgIkR5bmFtaWMgc3VidGVzdCAlcyBmYWlsZWQu XG4iLCBpbl9keW5hbWljX3N1YnRlc3QpOworCWVsc2UgaWYgKGluX3N1YnRlc3QpCiAJCWZwcmlu dGYoc3RkZXJyLCAiU3VidGVzdCAlcyBmYWlsZWQuXG4iLCBpbl9zdWJ0ZXN0KTsKIAllbHNlCiAJ CWZwcmludGYoc3RkZXJyLCAiVGVzdCAlcyBmYWlsZWQuXG4iLCBjb21tYW5kX3N0cik7CkBAIC02 MzksNiArNjQ5LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2UoY29uc3QgY2hhciAqaGVscF9z dHIsIGJvb2wgb3V0cHV0X29uX3N0ZGVycikKIAlmcHJpbnRmKGYsICJVc2FnZTogJXMgW09QVElP TlNdXG4iLCBjb21tYW5kX3N0cik7CiAJZnByaW50ZihmLCAiICAtLWxpc3Qtc3VidGVzdHNcbiIK IAkJICAgIiAgLS1ydW4tc3VidGVzdCA8cGF0dGVybj5cbiIKKwkJICAgIiAgLS1keW5hbWljLXN1 YnRlc3QgPHBhdHRlcm4+XG4iCiAJCSAgICIgIC0tZGVidWdbPWxvZy1kb21haW5dXG4iCiAJCSAg ICIgIC0taW50ZXJhY3RpdmUtZGVidWdbPWRvbWFpbl1cbiIKIAkJICAgIiAgLS1za2lwLWNyYy1j b21wYXJlXG4iCkBAIC03ODEsNiArNzkyLDcgQEAgc3RhdGljIGludCBjb21tb25faW5pdChpbnQg KmFyZ2MsIGNoYXIgKiphcmd2LAogCQl7Imxpc3Qtc3VidGVzdHMiLCAgICAgbm9fYXJndW1lbnQs ICAgICAgIE5VTEwsIE9QVF9MSVNUX1NVQlRFU1RTfSwKIAkJeyJkZXNjcmliZSIsICAgICAgICAg IG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRfREVTQ1JJQkVfU1VCVEVTVFN9LAogCQl7InJ1 bi1zdWJ0ZXN0IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVF9SVU5fU1VCVEVT VH0sCisJCXsiZHluYW1pYy1zdWJ0ZXN0IiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BU X1JVTl9EWU5BTUlDX1NVQlRFU1R9LAogCQl7ImhlbHAtZGVzY3JpcHRpb24iLCAgbm9fYXJndW1l bnQsICAgICAgIE5VTEwsIE9QVF9ERVNDUklQVElPTn0sCiAJCXsiZGVidWciLCAgICAgICAgICAg ICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFQlVHfSwKIAkJeyJpbnRlcmFjdGl2ZS1k ZWJ1ZyIsIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRfSU5URVJBQ1RJVkVfREVCVUd9LApA QCAtOTAwLDYgKzkxMiwxMSBAQCBzdGF0aWMgaW50IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hh ciAqKmFyZ3YsCiAJCQlpZiAoIWxpc3Rfc3VidGVzdHMpCiAJCQkJcnVuX3NpbmdsZV9zdWJ0ZXN0 ID0gc3RyZHVwKG9wdGFyZyk7CiAJCQlicmVhazsKKwkJY2FzZSBPUFRfUlVOX0RZTkFNSUNfU1VC VEVTVDoKKwkJCWFzc2VydChvcHRhcmcpOworCQkJaWYgKCFsaXN0X3N1YnRlc3RzKQorCQkJCXJ1 bl9zaW5nbGVfZHluYW1pY19zdWJ0ZXN0ID0gc3RyZHVwKG9wdGFyZyk7CisJCQlicmVhazsKIAkJ Y2FzZSBPUFRfREVTQ1JJUFRJT046CiAJCQlwcmludF90ZXN0X2Rlc2NyaXB0aW9uKCk7CiAJCQly ZXQgPSAtMTsKQEAgLTEwODQsNiArMTEwMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2lndF9wcmludF9k ZXNjcmlwdGlvbihjb25zdCBjaGFyICpzdWJ0ZXN0X25hbWUsIGNvbnN0IGNoYXIgKmZpbGUsCiAJ CXByaW50ZigiJXNOTyBET0NVTUVOVEFUSU9OIVxuXG4iLCBpbmRlbnQpOwogfQogCitzdGF0aWMg Ym9vbCB2YWxpZF9uYW1lX2Zvcl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkKK3sK KwlpbnQgaTsKKworCS8qIGNoZWNrIHRoZSBzdWJ0ZXN0IG5hbWUgb25seSBjb250YWlucyBhLXos IEEtWiwgMC05LCAnLScgYW5kICdfJyAqLworCWZvciAoaSA9IDA7IHN1YnRlc3RfbmFtZVtpXSAh PSAnXDAnOyBpKyspCisJCWlmIChzdWJ0ZXN0X25hbWVbaV0gIT0gJ18nICYmIHN1YnRlc3RfbmFt ZVtpXSAhPSAnLScKKwkJICAgICYmICFpc2FsbnVtKHN1YnRlc3RfbmFtZVtpXSkpCisJCQlyZXR1 cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIE5vdGU6IFRlc3RjYXNlcyB3 aGljaCB1c2UgdGhlc2UgaGVscGVycyBNVVNUIE5PVCBvdXRwdXQgYW55dGhpbmcgdG8gc3Rkb3V0 CiAgKiBvdXRzaWRlIG9mIHBsYWNlcyBwcm90ZWN0ZWQgYnkgaWd0X3J1bl9zdWJ0ZXN0IGNoZWNr cyAtIHRoZSBwaWdsaXQKQEAgLTEwOTEsMTggKzExMjEsMTMgQEAgc3RhdGljIHZvaWQgX19pZ3Rf cHJpbnRfZGVzY3JpcHRpb24oY29uc3QgY2hhciAqc3VidGVzdF9uYW1lLCBjb25zdCBjaGFyICpm aWxlLAogICovCiBib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFt ZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpCiB7Ci0JaW50IGk7Ci0KIAlhc3Nl cnQoIWlndF9jYW5fZmFpbCgpKTsKIAotCS8qIGNoZWNrIHRoZSBzdWJ0ZXN0IG5hbWUgb25seSBj b250YWlucyBhLXosIEEtWiwgMC05LCAnLScgYW5kICdfJyAqLwotCWZvciAoaSA9IDA7IHN1YnRl c3RfbmFtZVtpXSAhPSAnXDAnOyBpKyspCi0JCWlmIChzdWJ0ZXN0X25hbWVbaV0gIT0gJ18nICYm IHN1YnRlc3RfbmFtZVtpXSAhPSAnLScKLQkJICAgICYmICFpc2FsbnVtKHN1YnRlc3RfbmFtZVtp XSkpIHsKLQkJCWlndF9jcml0aWNhbCgiSW52YWxpZCBzdWJ0ZXN0IG5hbWUgXCIlc1wiLlxuIiwK LQkJCQkgICAgIHN1YnRlc3RfbmFtZSk7Ci0JCQlpZ3RfZXhpdCgpOwotCQl9CisJaWYgKCF2YWxp ZF9uYW1lX2Zvcl9zdWJ0ZXN0KHN1YnRlc3RfbmFtZSkpIHsKKwkJaWd0X2NyaXRpY2FsKCJJbnZh bGlkIHN1YnRlc3QgbmFtZSBcIiVzXCIuXG4iLAorCQkJICAgICBzdWJ0ZXN0X25hbWUpOworCQlp Z3RfZXhpdCgpOworCX0KIAogCWlmIChydW5fc2luZ2xlX3N1YnRlc3QpIHsKIAkJaWYgKHV3aWxk bWF0KHN1YnRlc3RfbmFtZSwgcnVuX3NpbmdsZV9zdWJ0ZXN0KSA9PSAwKSB7CkBAIC0xMTQ5LDYg KzExNzQsMzYgQEAgYm9vbCBfX2lndF9ydW5fc3VidGVzdChjb25zdCBjaGFyICpzdWJ0ZXN0X25h bWUsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW4KIAlyZXR1cm4gKGluX3N1YnRlc3Qg PSBzdWJ0ZXN0X25hbWUpOwogfQogCitib29sIF9faWd0X3J1bl9keW5hbWljX3N1YnRlc3QoY29u c3QgY2hhciAqZHluYW1pY19zdWJ0ZXN0X25hbWUpCit7CisJYXNzZXJ0KGluX3N1YnRlc3QpOwor CWFzc2VydChfaWd0X2R5bmFtaWNfdGVzdHNfZXhlY3V0ZWQgPj0gMCk7CisKKwlpZiAoIXZhbGlk X25hbWVfZm9yX3N1YnRlc3QoZHluYW1pY19zdWJ0ZXN0X25hbWUpKSB7CisJCQlpZ3RfY3JpdGlj YWwoIkludmFsaWQgZHluYW1pYyBzdWJ0ZXN0IG5hbWUgXCIlc1wiLlxuIiwKKwkJCQkgICAgIGR5 bmFtaWNfc3VidGVzdF9uYW1lKTsKKwkJCWlndF9leGl0KCk7CisJfQorCisJaWYgKHJ1bl9zaW5n bGVfZHluYW1pY19zdWJ0ZXN0ICYmCisJICAgIHV3aWxkbWF0KGR5bmFtaWNfc3VidGVzdF9uYW1l LCBydW5fc2luZ2xlX2R5bmFtaWNfc3VidGVzdCkgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWd0X2ttc2coS01TR19JTkZPICIlczogc3RhcnRpbmcgZHluYW1pYyBzdWJ0ZXN0ICVzXG4iLAor CQkgY29tbWFuZF9zdHIsIGR5bmFtaWNfc3VidGVzdF9uYW1lKTsKKwlpZ3RfaW5mbygiU3RhcnRp bmcgZHluYW1pYyBzdWJ0ZXN0OiAlc1xuIiwgZHluYW1pY19zdWJ0ZXN0X25hbWUpOworCWZmbHVz aChzdGRvdXQpOworCWlmIChzdGRlcnJfbmVlZHNfc2VudGluZWwpCisJCWZwcmludGYoc3RkZXJy LCAiU3RhcnRpbmcgZHluYW1pYyBzdWJ0ZXN0OiAlc1xuIiwgZHluYW1pY19zdWJ0ZXN0X25hbWUp OworCisJX2lndF9sb2dfYnVmZmVyX3Jlc2V0KCk7CisKKwlfaWd0X2R5bmFtaWNfdGVzdHNfZXhl Y3V0ZWQrKzsKKworCWlndF9nZXR0aW1lKCZkeW5hbWljX3N1YnRlc3RfdGltZSk7CisJcmV0dXJu IChpbl9keW5hbWljX3N1YnRlc3QgPSBkeW5hbWljX3N1YnRlc3RfbmFtZSk7Cit9CisKIC8qKgog ICogaWd0X3N1YnRlc3RfbmFtZToKICAqCkBAIC0xMjAzLDI2ICsxMjU4LDUzIEBAIHZvaWQgX19p Z3Rfc3VidGVzdF9ncm91cF9yZXN0b3JlKGludCBzYXZlLCBpbnQgZGVzYykKIHN0YXRpYyBib29s IHNraXBwZWRfb25lID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBzdWNjZWVkZWRfb25lID0gZmFsc2U7 CiBzdGF0aWMgYm9vbCBmYWlsZWRfb25lID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkeW5hbWljX2Zh aWxlZF9vbmUgPSBmYWxzZTsKKworYm9vbCBfX2lndF9lbnRlcl9keW5hbWljX2NvbnRhaW5lcih2 b2lkKQoreworCV9pZ3RfZHluYW1pY190ZXN0c19leGVjdXRlZCA9IDA7CisJZHluYW1pY19mYWls ZWRfb25lID0gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KIAogc3RhdGljIHZvaWQgZXhpdF9z dWJ0ZXN0KGNvbnN0IGNoYXIgKikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIHN0YXRpYyB2 b2lkIGV4aXRfc3VidGVzdChjb25zdCBjaGFyICpyZXN1bHQpCiB7CiAJc3RydWN0IHRpbWVzcGVj IG5vdzsKKwljb25zdCBjaGFyICpzdWJ0ZXN0X3RleHQgPSBpbl9keW5hbWljX3N1YnRlc3QgPyAi RHluYW1pYyBzdWJ0ZXN0IiA6ICJTdWJ0ZXN0IjsKKwljb25zdCBjaGFyICoqc3VidGVzdF9uYW1l ID0gaW5fZHluYW1pY19zdWJ0ZXN0ID8gJmluX2R5bmFtaWNfc3VidGVzdCA6ICZpbl9zdWJ0ZXN0 OworCXN0cnVjdCB0aW1lc3BlYyAqdGhlbnRpbWUgPSBpbl9keW5hbWljX3N1YnRlc3QgPyAmZHlu YW1pY19zdWJ0ZXN0X3RpbWUgOiAmc3VidGVzdF90aW1lOworCWptcF9idWYgKmptcHRhcmdldCA9 IGluX2R5bmFtaWNfc3VidGVzdCA/ICZpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1ZiA6ICZp Z3Rfc3VidGVzdF9qbXBidWY7CiAKIAlpZ3RfZ2V0dGltZSgmbm93KTsKLQlpZ3RfaW5mbygiJXNT dWJ0ZXN0ICVzOiAlcyAoJS4zZnMpJXNcbiIsCisKKwlpZ3RfaW5mbygiJXMlcyAlczogJXMgKCUu M2ZzKSVzXG4iLAogCQkgKCFfX2lndF9wbGFpbl9vdXRwdXQpID8gIlx4MWJbMW0iIDogIiIsCi0J CSBpbl9zdWJ0ZXN0LCByZXN1bHQsIGlndF90aW1lX2VsYXBzZWQoJnN1YnRlc3RfdGltZSwgJm5v dyksCisJCSBzdWJ0ZXN0X3RleHQsICpzdWJ0ZXN0X25hbWUsIHJlc3VsdCwKKwkJIGlndF90aW1l X2VsYXBzZWQodGhlbnRpbWUsICZub3cpLAogCQkgKCFfX2lndF9wbGFpbl9vdXRwdXQpID8gIlx4 MWJbMG0iIDogIiIpOwogCWZmbHVzaChzdGRvdXQpOwogCWlmIChzdGRlcnJfbmVlZHNfc2VudGlu ZWwpCi0JCWZwcmludGYoc3RkZXJyLCAiU3VidGVzdCAlczogJXMgKCUuM2ZzKVxuIiwKLQkJCWlu X3N1YnRlc3QsIHJlc3VsdCwgaWd0X3RpbWVfZWxhcHNlZCgmc3VidGVzdF90aW1lLCAmbm93KSk7 CisJCWZwcmludGYoc3RkZXJyLCAiJXMgJXM6ICVzICglLjNmcylcbiIsCisJCQlzdWJ0ZXN0X3Rl eHQsICpzdWJ0ZXN0X25hbWUsCisJCQlyZXN1bHQsIGlndF90aW1lX2VsYXBzZWQodGhlbnRpbWUs ICZub3cpKTsKIAogCWlndF90ZXJtaW5hdGVfc3BpbnMoKTsKIAotCWluX3N1YnRlc3QgPSBOVUxM OwotCXNpZ2xvbmdqbXAoaWd0X3N1YnRlc3Rfam1wYnVmLCAxKTsKKwlpZiAoIWluX2R5bmFtaWNf c3VidGVzdCkKKwkJX2lndF9keW5hbWljX3Rlc3RzX2V4ZWN1dGVkID0gLTE7CisKKwkvKgorCSAq IERvbid0IGtlZXAgdGhlIGFib3ZlIHRleHQgaW4gdGhlIGxvZyBpZiBleGl0aW5nIGEgZHluYW1p YworCSAqIHN1YnN1YnRlc3QsIHRoZSBzdWJ0ZXN0IHdvdWxkIHByaW50IGl0IGFnYWluIG90aGVy d2lzZQorCSAqLworCWlmIChpbl9keW5hbWljX3N1YnRlc3QpCisJCV9pZ3RfbG9nX2J1ZmZlcl9y ZXNldCgpOworCisJKnN1YnRlc3RfbmFtZSA9IE5VTEw7CisKKwlzaWdsb25nam1wKCpqbXB0YXJn ZXQsIDEpOwogfQogCiAvKioKQEAgLTEyNTMsNiArMTMzNSw3IEBAIHZvaWQgaWd0X3NraXAoY29u c3QgY2hhciAqZiwgLi4uKQogCX0KIAogCWlmIChpbl9zdWJ0ZXN0KSB7CisJCS8qIERvaW5nIHRo ZSBzYW1lIGV2ZW4gaWYgaW5zaWRlIGEgZHluYW1pYyBzdWJ0ZXN0ICovCiAJCWV4aXRfc3VidGVz dCgiU0tJUCIpOwogCX0gZWxzZSBpZiAodGVzdF93aXRoX3N1YnRlc3RzKSB7CiAJCXNraXBfc3Vi dGVzdHNfaGVuY2Vmb3J0aCA9IFNLSVA7CkBAIC0xMzA5LDcgKzEzOTIsMjIgQEAgdm9pZCBfX2ln dF9za2lwX2NoZWNrKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lLAogICovCiB2b2lk IGlndF9zdWNjZXNzKHZvaWQpCiB7Ci0Jc3VjY2VlZGVkX29uZSA9IHRydWU7CisJaWYgKGluX3N1 YnRlc3QgJiYgIWluX2R5bmFtaWNfc3VidGVzdCAmJiBfaWd0X2R5bmFtaWNfdGVzdHNfZXhlY3V0 ZWQgPj0gMCkgeworCQkvKgorCQkgKiBXZSdyZSBleGl0aW5nIGEgZHluYW1pYyBjb250YWluZXIs IHlpZWxkIGEgcmVzdWx0CisJCSAqIGFjY29yZGluZyB0byB0aGUgZHluYW1pYyB0ZXN0cyB0aGF0 IGdvdAorCQkgKiBleGVjdXRlZC4KKwkJICovCisJCWlmIChkeW5hbWljX2ZhaWxlZF9vbmUpCisJ CQlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKKworCQlpZiAoX2lndF9keW5hbWljX3Rlc3Rz X2V4ZWN1dGVkID09IDApCisJCQlpZ3Rfc2tpcCgiTm8gZHluYW1pYyB0ZXN0cyBleGVjdXRlZC5c biIpOworCX0KKworCWlmICghaW5fZHluYW1pY19zdWJ0ZXN0KQorCQlzdWNjZWVkZWRfb25lID0g dHJ1ZTsKKwogCWlmIChpbl9zdWJ0ZXN0KQogCQlleGl0X3N1YnRlc3QoIlNVQ0NFU1MiKTsKIH0K QEAgLTEzNDAsMTAgKzE0MzgsMTcgQEAgdm9pZCBpZ3RfZmFpbChpbnQgZXhpdGNvZGUpCiAJaWYg KGluX2F0ZXhpdF9oYW5kbGVyKQogCQlfZXhpdChJR1RfRVhJVF9GQUlMVVJFKTsKIAotCWlmICgh ZmFpbGVkX29uZSkKLQkJaWd0X2V4aXRjb2RlID0gZXhpdGNvZGU7CisJaWYgKGluX2R5bmFtaWNf c3VidGVzdCkgeworCQlkeW5hbWljX2ZhaWxlZF9vbmUgPSB0cnVlOworCX0gZWxzZSB7CisJCS8q IER5bmFtaWMgc3VidGVzdCBjb250YWluZXJzIG11c3Qgbm90IGZhaWwgZXhwbGljaXRseSAqLwor CQlhc3NlcnQoX2lndF9keW5hbWljX3Rlc3RzX2V4ZWN1dGVkIDwgMCB8fCBkeW5hbWljX2ZhaWxl ZF9vbmUpOwogCi0JZmFpbGVkX29uZSA9IHRydWU7CisJCWlmICghZmFpbGVkX29uZSkKKwkJCWln dF9leGl0Y29kZSA9IGV4aXRjb2RlOworCisJCWZhaWxlZF9vbmUgPSB0cnVlOworCX0KIAogCS8q IFNpbGVudCBleGl0LCBwYXJlbnQgd2lsbCBkbyB0aGUgeWVsbGluZy4gKi8KIAlpZiAodGVzdF9j aGlsZCkKQEAgLTE0MTksNiArMTUyNCw5IEBAIHZvaWQgaWd0X2Rlc2NyaWJlX2YoY29uc3QgY2hh ciAqZm10LCAuLi4pCiAJaW50IHJldDsKIAl2YV9saXN0IGFyZ3M7CiAKKwlpZiAoaW5fc3VidGVz dCAmJiBfaWd0X2R5bmFtaWNfdGVzdHNfZXhlY3V0ZWQgPj0gMCkKKwkJYXNzZXJ0KCEiRG9jdW1l bnRpbmcgZHluYW1pYyBzdWJzdWJ0ZXN0cyBpcyBpbXBvc3NpYmxlLiBEb2N1bWVudCB0aGUgc3Vi dGVzdCBpbnN0ZWFkLiIpOworCiAJaWYgKCFkZXNjcmliZV9zdWJ0ZXN0cykKIAkJcmV0dXJuOwog CmRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUuaCBiL2xpYi9pZ3RfY29yZS5oCmluZGV4IGU4YjYx MTI4Li44NmJjMWI0MSAxMDA2NDQKLS0tIGEvbGliL2lndF9jb3JlLmgKKysrIGIvbGliL2lndF9j b3JlLmgKQEAgLTE0Niw2ICsxNDYsNyBAQCB2b2lkIF9faWd0X2ZpeHR1cmVfZW5kKHZvaWQpIF9f YXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAKIC8qIHN1YnRlc3QgaW5mcmFzdHJ1Y3R1cmUgKi8K IGptcF9idWYgaWd0X3N1YnRlc3Rfam1wYnVmOworam1wX2J1ZiBpZ3RfZHluYW1pY19zdWJzdWJ0 ZXN0X2ptcGJ1ZjsKIHR5cGVkZWYgaW50ICgqaWd0X29wdF9oYW5kbGVyX3QpKGludCBvcHQsIGlu dCBvcHRfaW5kZXgsIHZvaWQgKmRhdGEpOwogI2RlZmluZSBJR1RfT1BUX0hBTkRMRVJfU1VDQ0VT UyAwCiAjZGVmaW5lIElHVF9PUFRfSEFORExFUl9FUlJPUiAtMgpAQCAtMTc3LDYgKzE3OCw4IEBA IGludCBpZ3Rfc3VidGVzdF9pbml0X3BhcnNlX29wdHMoaW50ICphcmdjLCBjaGFyICoqYXJndiwK IAlpZ3Rfc3VidGVzdF9pbml0X3BhcnNlX29wdHMoJmFyZ2MsIGFyZ3YsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOwogCiBib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1 YnRlc3RfbmFtZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpOworYm9vbCBfX2ln dF9lbnRlcl9keW5hbWljX2NvbnRhaW5lcih2b2lkKTsKK2Jvb2wgX19pZ3RfcnVuX2R5bmFtaWNf c3VidGVzdChjb25zdCBjaGFyICpkeW5hbWljX3N1YnRlc3RfbmFtZSk7CiAjZGVmaW5lIF9faWd0 X3Rva2VuY2F0Mih4LCB5KSB4ICMjIHkKIAogLyoqCkBAIC0yMjYsNiArMjI5LDEyNiBAQCBib29s IF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSwgY29uc3QgY2hhciAq ZmlsZSwgY29uc3QgaW50IGxpbgogI2RlZmluZSBpZ3Rfc3VidGVzdF9mKGYuLi4pIFwKIAlfX2ln dF9zdWJ0ZXN0X2YoaWd0X3Rva2VuY2F0KF9fdG1wY2hhciwgX19MSU5FX18pLCBmKQogCisvKioK KyAqIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0czoKKyAqIEBuYW1lOiBuYW1l IG9mIHRoZSBzdWJ0ZXN0CisgKgorICogVGhpcyBpcyBhIG1hZ2ljIGNvbnRyb2wgZmxvdyBibG9j ayB3aGljaCBkZW5vdGVzIGEgc3VidGVzdCBjb2RlCisgKiBibG9jayB0aGF0IGNvbnRhaW5zIGR5 bmFtaWMgc3Vic3VidGVzdHMuIFRoZSBfZiB2YXJpYW50IGFjY2VwdHMgYQorICogcHJpbnRmIGZv cm1hdCBzdHJpbmcsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nCisgKiBjb21iaW5h dG9yaWFsIHRlc3RzLgorICoKKyAqIFNlZSBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3Vi dGVzdHNfZigpIGZvciBkb2N1bWVudGF0aW9uLgorICovCisjZGVmaW5lIGlndF9zdWJ0ZXN0X3dp dGhfZHluYW1pY19zdWJzdWJ0ZXN0cyhuYW1lKSBmb3IgKDsgX19pZ3RfcnVuX3N1YnRlc3QoKG5h bWUpLCBfX0ZJTEVfXywgX19MSU5FX18pICYmIFwKKwkJCQkJCQkgX19pZ3RfZW50ZXJfZHluYW1p Y19jb250YWluZXIoKSAmJiBcCisJCQkJCQkJIChzaWdzZXRqbXAoaWd0X3N1YnRlc3Rfam1wYnVm LCAxKSA9PSAwKTsgXAorCQkJCQkJIGlndF9zdWNjZXNzKCkpCisjZGVmaW5lIF9faWd0X3N1YnRl c3Rfd2l0aF9keW5hbWljX3N1YnN1YnRlc3RzX2YodG1wLCBmb3JtYXQuLi4pIFwKKwlmb3IgKGNo YXIgdG1wIFsyNTZdOyBcCisJICAgICBzbnByaW50ZiggdG1wICwgc2l6ZW9mKCB0bXAgKSwgXAor CQkgICAgICBmb3JtYXQpLCBcCisJICAgICAgIF9faWd0X3J1bl9zdWJ0ZXN0KHRtcCwgX19GSUxF X18sIF9fTElORV9fICkgJiYgXAorCSAgICAgX19pZ3RfZW50ZXJfZHluYW1pY19jb250YWluZXIo KSAmJiBcCisJICAgICAoc2lnc2V0am1wKGlndF9zdWJ0ZXN0X2ptcGJ1ZiwgMSkgPT0gMCk7IFwK KwkgICAgIGlndF9zdWNjZXNzKCkpCisKKy8qKgorICogaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWlj X3N1YnN1YnRlc3RzX2Y6CisgKiBALi4uOiBmb3JtYXQgc3RyaW5nIGFuZCBvcHRpb25hbCBhcmd1 bWVudHMKKyAqCisgKiBUaGlzIGlzIGEgbWFnaWMgY29udHJvbCBmbG93IGJsb2NrIHdoaWNoIGRl bm90ZXMgYSBzdWJ0ZXN0IGNvZGUKKyAqIGJsb2NrIHRoYXQgY29udGFpbnMgZHluYW1pYyBzdWJz dWJ0ZXN0cy4gVGhlIF9mIHZhcmlhbnQgYWNjZXB0cyBhCisgKiBwcmludGYgZm9ybWF0IHN0cmlu Zywgd2hpY2ggaXMgdXNlZnVsIGZvciBjb25zdHJ1Y3RpbmcKKyAqIGNvbWJpbmF0b3JpYWwgdGVz dHMuCisgKgorICogRHluYW1pYyBzdWJzdWJ0ZXN0cyBhcmUgdG8gYmUgdXNlZCB3aGVuIHJlcG9y dGluZyBzZXZlcmFsIGFzcGVjdHMKKyAqIG9mIHNvbWV0aGluZyBzZXBhcmF0ZWx5IGlzIGRlc2ly ZWQsIGJ1dCBrbm93aW5nIHRoZSBmdWxsIHBvc3NpYmxlCisgKiBzZXQgYmVmb3JlaGFuZCBpcyBl aXRoZXIgdG9vIGJpZyBvZiBhIHNldCBvciBqdXN0IHBsYWluCisgKiBpbXBvc3NpYmxlLiBPdGhl cndpc2UsIHVzZSBub3JtYWwgc3VidGVzdHMuIEFuIGVhc3kgZXhhbXBsZSBpcworICogcGVyZm9y bWluZyBhbiBvcGVyYXRpb24gc2VwYXJhdGVseSBmb3IgZWFjaCBLTVMgcGlwZTogQSBzdWJ0ZXN0 IHBlcgorICogcGlwZSByZXF1aXJlcyBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgcG9zc2libGUgcGlw ZSBpZGVudGlmaWVycywKKyAqIGNoZWNraW5nIGlmIHRoZSBwaXBlIGV4aXN0cyBmb3IgdGhlIHRl c3RlZCBkZXZpY2UgYW5kIHNraXBwaW5nIGlmCisgKiBkb2VzIG5vdCwgYW5kIHRoZW4gcGVyZm9y bWluZyB0aGUgb3BlcmF0aW9uLiBXaXRoIGR5bmFtaWMKKyAqIHN1YnN1YnRlc3RzIGluc3RlYWQs IHRoZXJlIHdvdWxkIGJlIGEgc2luZ2xlIHN1YnRlc3QgZm9yIHRoZQorICogb3BlcmF0aW9uIHRo YXQgbG9vcHMgb3ZlciB0aGUgcGlwZXMgYXZhaWxhYmxlLCBlbnRlcnMgYSBkeW5hbWljCisgKiBz dWJzdWJ0ZXN0IGZvciBlYWNoIHBpcGUgYW5kIHBlcmZvcm1zIHRoZSBvcGVyYXRpb24gZm9yIHRo YXQgcGlwZQorICogaW4gdGhlcmUuCisgKgorICogVGhlIHJlc3VsdCBvZiBhIHN1YnRlc3QgaWd0 X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1YnN1YnRlc3RzIHdpbGwgYmUKKyAqICogU0tJUCwgaWYg bm8gZHluYW1pYyBzdWJzdWJ0ZXN0cyBhcmUgZW50ZXJlZAorICogKiBQQVNTLCBpZiBfYWxsXyBk eW5hbWljIHN1YnN1YnRlc3RzIFBBU1MKKyAqICogRkFJTCwgaWYgX2FueV8gZHluYW1pYyBzdWJz dWJ0ZXN0cyBGQUlMCisgKgorICogV2l0aGluIGEgaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljX3N1 YnN1YnRlc3RzIGJsb2NrLCBleHBsaWNpdAorICogZmFpbHVyZSAoZS5nLiBpZ3RfYXNzZXJ0KSBp cyBub3QgYWxsb3dlZCwgb25seSBkeW5hbWljIHN1YnN1YnRlc3RzCisgKiB0aGVtc2VsdmVzIHdp bGwgcHJvZHVjZSB0ZXN0IHJlc3VsdHMuIGlndF9za2lwKCkvaWd0X3JlcXVpcmUoKSBpcworICog YWxsb3dlZC4gRXhhbXBsZToKKyAqCisgKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgorICogaWd0 X21haW4KKyAqIHsKKyAqICAgICBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vic3VidGVzdHMo ImVuZ2luZS10ZXN0cyIpIHsKKyAqICAgICAgICAgICAgICAgaWd0X3JlcXVpcmUoaXNfYXdlc29t ZShmZCkpOyAvLyByZXF1aXJlcyBvayBoZXJlCisgKgorICogICAgICAgICAgICAgICBmb3JfZWFj aF9lbmdpbmUoZmQsIGUpIHsKKyAqICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZHluYW1pY19z dWJ0ZXN0X2YoIiVzIiwgZS0+bmFtZSkgeworICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWd0X2Fzc2VydCh3b3JrcyhlKSk7IC8vIGFzc2VydHMgb2sgaGVyZQorICogICAgICAgICAg ICAgICAgICAgICAgIH0KKyAqICAgICAgICAgICAgICAgfQorICogICAgICAgfQorICogfQorICog XXwKKyAqCisgKiBMaWtlIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0cygpLCBi dXQgYWxzbyBhY2NlcHRzIGEgcHJpbnRmCisgKiBmb3JtYXQgc3RyaW5nIGluc3RlYWQgb2YgYSBz dGF0aWMgc3RyaW5nLgorICovCisjZGVmaW5lIGlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJz dWJ0ZXN0c19mKGYuLi4pIFwKKwlfX2lndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19zdWJzdWJ0ZXN0 c19mKGlndF90b2tlbmNhdChfX3RtcGNoYXIsIF9fTElORV9fKSwgZikKKworLyoqCisgKiBpZ3Rf ZHluYW1pY19zdWJzdWJ0ZXN0OgorICogQG5hbWU6IG5hbWUgb2YgdGhlIGR5bmFtaWMgc3VidGVz dAorICoKKyAqIFRoaXMgaXMgYSBtYWdpYyBjb250cm9sIGZsb3cgYmxvY2sgd2hpY2ggZGVub3Rl cyBhIGR5bmFtaWMKKyAqIHN1YnRlc3Qtb2YtYS1zdWJ0ZXN0IGNvZGUgYmxvY2suIFdpdGhpbiB0 aGF0IGNvZGUgYmxvY2sKKyAqIGlndF9za2lwfHN1Y2Nlc3Mgd2lsbCBvbmx5IGJhaWwgb3V0IG9m IHRoZSBkeW5hbWljIHN1YnRlc3QuIFRoZSBfZgorICogdmFyaWFudCBhY2NlcHRzIGEgcHJpbnRm IGZvcm1hdCBzdHJpbmcsIHdoaWNoIGlzIHVzZWZ1bCBmb3IKKyAqIGNvbnN0cnVjdGluZyBjb21i aW5hdG9yaWFsIHRlc3RzLgorICoKKyAqIFNlZSBpZ3Rfc3VidGVzdF93aXRoX2R5bmFtaWNfc3Vi c3VidGVzdHNfZigpIGZvciBkb2N1bWVudGF0aW9uIG9uCisgKiBkeW5hbWljIHN1YnN1YnRlc3Rz LgorICovCisjZGVmaW5lIGlndF9keW5hbWljX3N1YnN1YnRlc3QobmFtZSkgZm9yICg7IF9faWd0 X3J1bl9keW5hbWljX3N1YnRlc3QoKG5hbWUpKSAmJiBcCisJCQkJCSAgKHNpZ3NldGptcChpZ3Rf ZHluYW1pY19zdWJzdWJ0ZXN0X2ptcGJ1ZiwgMSkgPT0gMCk7IFwKKwkJCQkgIGlndF9zdWNjZXNz KCkpCisjZGVmaW5lIF9faWd0X2R5bmFtaWNfc3Vic3VidGVzdF9mKHRtcCwgZm9ybWF0Li4uKSBc CisJZm9yIChjaGFyIHRtcCBbMjU2XTsgXAorCSAgICAgc25wcmludGYoIHRtcCAsIHNpemVvZigg dG1wICksIFwKKwkJICAgICAgZm9ybWF0KSwgXAorCSAgICAgX19pZ3RfcnVuX2R5bmFtaWNfc3Vi dGVzdCggdG1wICkgJiYgXAorCSAgICAgKHNpZ3NldGptcChpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0 X2ptcGJ1ZiwgMSkgPT0gMCk7IFwKKwkgICAgIGlndF9zdWNjZXNzKCkpCisKKy8qKgorICogaWd0 X2R5bmFtaWNfc3Vic3VidGVzdF9mOgorICogQC4uLjogZm9ybWF0IHN0cmluZyBhbmQgb3B0aW9u YWwgYXJndW1lbnRzCisgKgorICogVGhpcyBpcyBhIG1hZ2ljIGNvbnRyb2wgZmxvdyBibG9jayB3 aGljaCBkZW5vdGVzIGEgZHluYW1pYworICogc3VidGVzdC1vZi1hLXN1YnRlc3QgY29kZSBibG9j ay4gV2l0aGluIHRoYXQgY29kZSBibG9jaworICogaWd0X3NraXB8c3VjY2VzcyB3aWxsIG9ubHkg YmFpbCBvdXQgb2YgdGhlIGR5bmFtaWMgc3VidGVzdC4gVGhlIF9mCisgKiB2YXJpYW50IGFjY2Vw dHMgYSBwcmludGYgZm9ybWF0IHN0cmluZywgd2hpY2ggaXMgdXNlZnVsIGZvcgorICogY29uc3Ry dWN0aW5nIGNvbWJpbmF0b3JpYWwgdGVzdHMuCisgKgorICogU2VlIGlndF9zdWJ0ZXN0X3dpdGhf ZHluYW1pY19zdWJzdWJ0ZXN0c19mKCkgZm9yIGRvY3VtZW50YXRpb24gb24KKyAqIGR5bmFtaWMg c3Vic3VidGVzdHMuCisgKgorICogTGlrZSBpZ3RfZHluYW1pY19zdWJzdWJ0ZXN0KCksIGJ1dCBh bHNvIGFjY2VwdHMgYSBwcmludGYgZm9ybWF0IHN0cmluZworICogaW5zdGVhZCBvZiBhIHN0YXRp YyBzdHJpbmcuCisgKi8KKyNkZWZpbmUgaWd0X2R5bmFtaWNfc3Vic3VidGVzdF9mKGYuLi4pIFwK KwlfX2lndF9keW5hbWljX3N1YnN1YnRlc3RfZihpZ3RfdG9rZW5jYXQoX190bXBjaGFyLCBfX0xJ TkVfXyksIGYpCisKIGNvbnN0IGNoYXIgKmlndF9zdWJ0ZXN0X25hbWUodm9pZCk7CiBib29sIGln dF9vbmx5X2xpc3Rfc3VidGVzdHModm9pZCk7CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0 LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2