From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH igt v3 2/2] kms_fbc_crc: Add a CRC based FBC test Date: Mon, 25 Nov 2013 18:51:57 +0200 Message-ID: <1385398317-29810-2-git-send-email-ville.syrjala@linux.intel.com> References: <20131125151921.GA27344@phenom.ffwll.local> <1385398317-29810-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id A0F27FAA2F for ; Mon, 25 Nov 2013 08:52:05 -0800 (PST) In-Reply-To: <1385398317-29810-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCmtt c19mYmNfY3JjIHdpbGwgcGVyZm9ybSB2YXJpb3VzIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHNj YW5vdXQgYnVmZmVyCndoaWxjIEZCQyBpcyBlbmFibGVkLiBDUkMgY2hlY2tzIHdpbGwgYmUgdXNl ZCB0byBtYWtlIHN1cmUgdGhlCm1vZGlmY2F0aW9ucyB0byBzY2Fub3V0IGJ1ZmZlciBhcmUgZGV0 ZWN0ZWQuCgpUaGUgb3BlcmF0aW9ucyBpbmNsdWRlOgogLSBwYWdlIGZsaXAKIC0gR1RUIG1tYXAK IC0gQ1BVIG1tYXAKIC0gYmxpdAogLSByZW5kZXJjb3B5CiAtIGNvbnRleHQgc3dpdGNoICsgcmVu ZGVyY29weQogLSBjb21iaW5hdGlvbiBvZiBhIHBhZ2UgZmxpcCBhbmQgZWFjaCBvcGVyYXRpb24g bGlzdGVkIGFib3ZlCgp2MjogVXNlIGdlbV9zd19maW5pc2ggaW5zdGVhZCBvZiBkcm1Nb2RlRGly dHlGQiBhZnRlciBDUFUgYWNjZXNzCnYzOiBEcm9wIHB3cml0ZSB0ZXN0cywgY2FsbCBnZW1fYm9f YnVzeSgpIGFmdGVyIHJlbmRlcmluZywgZHJvcAogICAgc2V0X2RvbWFpbigpIGNhbGxzIGFmdGVy IG1tYXAgYWNjZXNzLCB3YWl0IGZvciAyIHZibGFua3MKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5 cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZp bGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNfZmJjX2NyYy5jICAgIHwgNTM5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdl ZCwgNTQwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfZmJjX2Ny Yy5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKaW5kZXggYTAyYjkzZC4uZDIwMTgwOSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC00OSw2ICs0OSw3IEBA IFRFU1RTX3Byb2dzX00gPSBcCiAJZ2VtX3dyaXRlX3JlYWRfcmluZ19zd2l0Y2ggXAogCWttc19h ZGRmYiBcCiAJa21zX2N1cnNvcl9jcmMgXAorCWttc19mYmNfY3JjIFwKIAlrbXNfZmxpcCBcCiAJ a21zX3BpcGVfY3JjX2Jhc2ljIFwKIAlrbXNfcmVuZGVyIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2tt c19mYmNfY3JjLmMgYi90ZXN0cy9rbXNfZmJjX2NyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjE4OTk4OGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfZmJjX2Ny Yy5jCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTMgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg KgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgor CisjaW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1 ZGUgImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1ZGUgInJlbmRl cmNvcHkuaCIKKworZW51bSB0ZXN0X21vZGUgeworCVRFU1RfUEFHRV9GTElQLAorCVRFU1RfTU1B UF9DUFUsCisJVEVTVF9NTUFQX0dUVCwKKwlURVNUX0JMVCwKKwlURVNUX1JFTkRFUiwKKwlURVNU X0NPTlRFWFQsCisJVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVLAorCVRFU1RfUEFHRV9GTElQ X0FORF9NTUFQX0dUVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfQkxULAorCVRFU1RfUEFHRV9GTElQ X0FORF9SRU5ERVIsCisJVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQsCit9OworCit0eXBlZGVm IHN0cnVjdCB7CisJc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBjb25maWc7CisJZHJt TW9kZU1vZGVJbmZvIG1vZGU7CisJc3RydWN0IGttc3Rlc3RfZmIgZmJbMl07Cit9IGNvbm5lY3Rv cl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGRybV9mZDsKKwlpZ3RfZGVidWdmc190IGRl YnVnZnM7CisJZHJtTW9kZVJlcyAqcmVzb3VyY2VzOworCUZJTEUgKmN0bDsKKwlpZ3RfY3JjX3Qg cmVmX2NyY1syXTsKKwlpZ3RfcGlwZV9jcmNfdCAqKnBpcGVfY3JjOworCWRybV9pbnRlbF9idWZt Z3IgKmJ1Zm1ncjsKKwlkcm1faW50ZWxfY29udGV4dCAqY3R4WzJdOworCXVpbnQzMl90IGRldmlk OworCXVpbnQzMl90IGhhbmRsZVsyXTsKKwl1aW50MzJfdCBjcnRjX2lkOworCXVpbnQzMl90IGNy dGNfaWR4OworCXVpbnQzMl90IGZiX2lkWzJdOworfSBkYXRhX3Q7CisKK3N0YXRpYyBjb25zdCBj aGFyICp0ZXN0X21vZGVfc3RyKGVudW0gdGVzdF9tb2RlIG1vZGUpCit7CisJc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCB0ZXN0X21vZGVzW10gPSB7CisJCVtURVNUX1BBR0VfRkxJUF0gPSAicGFn ZV9mbGlwIiwKKwkJW1RFU1RfTU1BUF9DUFVdID0gIm1tYXBfY3B1IiwKKwkJW1RFU1RfTU1BUF9H VFRdID0gIm1tYXBfZ3R0IiwKKwkJW1RFU1RfQkxUXSA9ICJibHQiLAorCQlbVEVTVF9SRU5ERVJd ID0gInJlbmRlciIsCisJCVtURVNUX0NPTlRFWFRdID0gImNvbnRleHQiLAorCQlbVEVTVF9QQUdF X0ZMSVBfQU5EX01NQVBfQ1BVXSA9ICJwYWdlX2ZsaXBfYW5kX21tYXBfY3B1IiwKKwkJW1RFU1Rf UEFHRV9GTElQX0FORF9NTUFQX0dUVF0gPSAicGFnZV9mbGlwX2FuZF9tbWFwX2d0dCIsCisJCVtU RVNUX1BBR0VfRkxJUF9BTkRfQkxUXSA9ICJwYWdlX2ZsaXBfYW5kX2JsdCIsCisJCVtURVNUX1BB R0VfRkxJUF9BTkRfUkVOREVSXSA9ICJwYWdlX2ZsaXBfYW5kX3JlbmRlciIsCisJCVtURVNUX1BB R0VfRkxJUF9BTkRfQ09OVEVYVF0gPSAicGFnZV9mbGlwX2FuZF9jb250ZXh0IiwKKwl9OworCisJ cmV0dXJuIHRlc3RfbW9kZXNbbW9kZV07Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVfZmIo ZGF0YV90ICpkYXRhLAorCQkJICBpbnQgdywgaW50IGgsCisJCQkgIGRvdWJsZSByLCBkb3VibGUg ZywgZG91YmxlIGIsCisJCQkgIHN0cnVjdCBrbXN0ZXN0X2ZiICpmYikKK3sKKwl1aW50MzJfdCBm Yl9pZDsKKwljYWlyb190ICpjcjsKKworCWZiX2lkID0ga21zdGVzdF9jcmVhdGVfZmIyKGRhdGEt PmRybV9mZCwgdywgaCwKKwkJCQkgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB0cnVlLCBmYik7CisJ aWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGttc3Rlc3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5k cm1fZmQsIGZiKTsKKwlrbXN0ZXN0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCB3LCBoLCByLCBnLCBi KTsKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7CisKKwlyZXR1cm4gZmJfaWQ7 Cit9CisKK3N0YXRpYyBib29sCitjb25uZWN0b3Jfc2V0X21vZGUoZGF0YV90ICpkYXRhLCBjb25u ZWN0b3JfdCAqY29ubmVjdG9yLAorCQkgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsIHVpbnQzMl90 IGZiX2lkKQoreworCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgKmNvbmZpZyA9ICZj b25uZWN0b3ItPmNvbmZpZzsKKwlpbnQgcmV0OworCisjaWYgMAorCWZwcmludGYoc3Rkb3V0LCAi VXNpbmcgcGlwZSAlYywgJWR4JWRcbiIsIHBpcGVfbmFtZShjb25maWctPnBpcGUpLAorCQltb2Rl LT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworI2VuZGlmCisKKwlyZXQgPSBkcm1Nb2RlU2V0 Q3J0YyhkYXRhLT5kcm1fZmQsCisJCQkgICAgIGNvbmZpZy0+Y3J0Yy0+Y3J0Y19pZCwKKwkJCSAg ICAgZmJfaWQsCisJCQkgICAgIDAsIDAsIC8qIHgsIHkgKi8KKwkJCSAgICAgJmNvbmZpZy0+Y29u bmVjdG9yLT5jb25uZWN0b3JfaWQsCisJCQkgICAgIDEsCisJCQkgICAgIG1vZGUpOworCWlndF9h c3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlf aW5pdChkYXRhX3QgKmRhdGEpCit7CisJZGF0YS0+cmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291 cmNlcyhkYXRhLT5kcm1fZmQpOworCWlndF9hc3NlcnQoZGF0YS0+cmVzb3VyY2VzKTsKKworCWRh dGEtPnBpcGVfY3JjID0gY2FsbG9jKGRhdGEtPnJlc291cmNlcy0+Y291bnRfY3J0Y3MsIHNpemVv ZihkYXRhLT5waXBlX2NyY1swXSkpOworfQorCitzdGF0aWMgdm9pZCBkaXNwbGF5X2ZpbmkoZGF0 YV90ICpkYXRhKQoreworCWZyZWUoZGF0YS0+cGlwZV9jcmMpOworfQorCitzdGF0aWMgdm9pZCBm aWxsX2JsdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgdW5zaWduZWQgY2hhciBjb2xv cikKK3sKKwlkcm1faW50ZWxfYm8gKmRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEt PmJ1Zm1nciwKKwkJCQkJCSAgICBkYXRhLT5kcm1fZmQsCisJCQkJCQkgICAgIiIsIGhhbmRsZSk7 CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKworCWJhdGNoID0gaW50ZWxfYmF0 Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChi YXRjaCk7CisKKwlCRUdJTl9CQVRDSCg1KTsKKwlPVVRfQkFUQ0goQ09MT1JfQkxUX0NNRCk7CisJ T1VUX0JBVENIKCgxIDw8IDI0KSB8ICgweGYwIDw8IDE2KSB8IDApOworCU9VVF9CQVRDSCgxIDw8 IDE2IHwgNCk7CisJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9H RU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VUX0JBVENIKGNvbG9yKTsKKwlBRFZBTkNFX0JBVENI KCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxfYmF0Y2hidWZm ZXJfZnJlZShiYXRjaCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9 CisKK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IHNjcmF0Y2hfYnVmICpidWYs IGRybV9pbnRlbF9ibyAqYm8pCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRlID0gNDA5 NjsKKwlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX1g7CisJYnVmLT5zaXplID0gNDA5NjsKK30K Kworc3RhdGljIHZvaWQgZXhlY19ub3AoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBoYW5kbGUsIGRy bV9pbnRlbF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9pbnRlbF9ibyAqZHN0OworCXN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisKKwlkc3QgPSBnZW1faGFuZGxlX3RvX2xpYmRy bV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGhhbmRsZSk7CisJaWd0X2Fzc2Vy dChkc3QpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3Is IGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCS8qIGFkZCB0aGUgcmVsb2Mg dG8gbWFrZSBzdXJlIHRoZSBrZXJuZWwgd2lsbCB0aGluayB3ZSB3cml0ZSB0byBkc3QgKi8KKwlC RUdJTl9CQVRDSCg0KTsKKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJT1VUX0JB VENIKE1JX05PT1ApOworCU9VVF9SRUxPQyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChNSV9OT09QKTsKKwlBRFZBTkNF X0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gs IGNvbnRleHQpOworCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworfQorCitzdGF0aWMg dm9pZCBmaWxsX3JlbmRlcihkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwKKwkJCWRybV9p bnRlbF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyIGNvbG9yKQoreworCWRybV9pbnRl bF9ibyAqc3JjLCAqZHN0OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJc3Ry dWN0IHNjcmF0Y2hfYnVmIHNyY19idWYsIGRzdF9idWY7CisJY29uc3QgdWludDhfdCBidWZbNF0g PSB7IGNvbG9yLCBjb2xvciwgY29sb3IsIGNvbG9yIH07CisJcmVuZGVyX2NvcHlmdW5jX3QgcmVu ZGVyY29weSA9IGdldF9yZW5kZXJfY29weWZ1bmMoZGF0YS0+ZGV2aWQpOworCisJaWd0X3NraXBf b24oIXJlbmRlcmNvcHkpOworCisJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oZGF0YS0+ YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZHN0KTsKKwor CXNyYyA9IGRybV9pbnRlbF9ib19hbGxvYyhkYXRhLT5idWZtZ3IsICIiLCA0MDk2LCA0MDk2KTsK KwlpZ3RfYXNzZXJ0KHNyYyk7CisKKwlnZW1fd3JpdGUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmhhbmRs ZSwgMCwgYnVmLCA0KTsKKworCXNjcmF0Y2hfYnVmX2luaXQoJnNyY19idWYsIHNyYyk7CisJc2Ny YXRjaF9idWZfaW5pdCgmZHN0X2J1ZiwgZHN0KTsKKworCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZm ZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChiYXRjaCk7 CisKKwlyZW5kZXJjb3B5KGJhdGNoLCBjb250ZXh0LAorCQkgICAmc3JjX2J1ZiwgMCwgMCwgMSwg MSwKKwkJICAgJmRzdF9idWYsIDAsIDApOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRj aCk7CisKKwlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9CisKK3N0YXRpYyBi b29sIGZiY19lbmFibGVkKGRhdGFfdCAqZGF0YSkKK3sKKwlGSUxFICpzdGF0dXM7CisJY2hhciBz dHJbNjRdID0ge307CisKKwlzdGF0dXMgPSBpZ3RfZGVidWdmc19mb3BlbigmZGF0YS0+ZGVidWdm cywgImk5MTVfZmJjX3N0YXR1cyIsICJyIik7CisJZnJlYWQoc3RyLCBzaXplb2Yoc3RyKSAtIDEs IDEsIHN0YXR1cyk7CisJZmNsb3NlKHN0YXR1cyk7CisJcmV0dXJuIHN0cnN0cihzdHIsICJGQkMg ZW5hYmxlZCIpICE9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY3JjKGRhdGFfdCAqZGF0 YSwgZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBi dWZbMV0gPSB7IDB4Y2MgfTsKKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMgPSBkYXRhLT5waXBl X2NyY1tkYXRhLT5jcnRjX2lkeF07CisJaWd0X2NyY190ICpjcmNzID0gTlVMTDsKKwl1aW50MzJf dCBoYW5kbGUgPSBkYXRhLT5oYW5kbGVbMF07CisKKwlpZ3RfYXNzZXJ0KGZiY19lbmFibGVkKGRh dGEpKTsKKworCWlmIChtb2RlID49IFRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0NQVSkgeworCQlo YW5kbGUgPSBkYXRhLT5oYW5kbGVbMV07CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRh dGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5V TEwpID09IDApOworCQl1c2xlZXAoMzAwMDAwKTsKKworCQlpZ3RfYXNzZXJ0KGZiY19lbmFibGVk KGRhdGEpKTsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwkJdm9pZCAqcHRyOworCWNhc2UgVEVT VF9QQUdFX0ZMSVA6CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwg ZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09IDApOwor CQlicmVhazsKKwljYXNlIFRFU1RfTU1BUF9DUFU6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRf TU1BUF9DUFU6CisJCXB0ciA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQw OTYsIFBST1RfV1JJVEUpOworCQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGhhbmRsZSwg STkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisJCW1lbXNldChwdHIs IDB4ZmYsIDQpOworCQltdW5tYXAocHRyLCA0MDk2KTsKKwkJZ2VtX3N3X2ZpbmlzaChkYXRhLT5k cm1fZmQsIGhhbmRsZSk7CisJCWJyZWFrOworCWNhc2UgVEVTVF9NTUFQX0dUVDoKKwljYXNlIFRF U1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVDoKKwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRhLT5k cm1fZmQsIGhhbmRsZSwgNDA5NiwgUFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEt PmRybV9mZCwgaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RU KTsKKwkJbWVtc2V0KHB0ciwgMHhmZiwgNCk7CisJCW11bm1hcChwdHIsIDQwOTYpOworCQlicmVh azsKKwljYXNlIFRFU1RfQkxUOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX0JMVDoKKwkJZmls bF9ibHQoZGF0YSwgaGFuZGxlLCAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX1JFTkRFUjoK KwljYXNlIFRFU1RfQ09OVEVYVDoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9SRU5ERVI6CisJ Y2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVDoKKwkJZmlsbF9yZW5kZXIoZGF0YSwgaGFu ZGxlLAorCQkJICAgIChtb2RlID09IFRFU1RfQ09OVEVYVCB8fCBtb2RlID09IFRFU1RfUEFHRV9G TElQX0FORF9DT05URVhUKSA/CisJCQkgICAgZGF0YS0+Y3R4WzFdIDogTlVMTCwgMHhmZik7CisJ CWJyZWFrOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgbmV3IGRh dGEgKHR3byB2YmxhbmtzCisJICogdG8gbGVhdmUgc29tZSBsZWV3YXkgZm9yIHRoZSBrZXJuZWwg aWYgd2UgZXZlciBkbworCSAqIHNvbWUga2luZCBvZiBkZWxheWVkIEZCQyBkaXNhYmxlIGZvciBH VFQgbW1hcHMuCisJICovCisJaWd0X3dhaXRfZm9yX3ZibGFuayhkYXRhLT5kcm1fZmQsIGRhdGEt PmNydGNfaWR4KTsKKwlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0 Y19pZHgpOworCisJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNf Z2V0X2NyY3MocGlwZV9jcmMsIDEsICZjcmNzKTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2Ny Yyk7CisJaWd0X2Fzc2VydCghaWd0X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNb MF0pKTsKKwlpZiAobW9kZSA9PSBURVNUX1BBR0VfRkxJUCkKKwkJaWd0X2Fzc2VydChpZ3RfY3Jj X2VxdWFsKCZjcmNzWzBdLCAmZGF0YS0+cmVmX2NyY1sxXSkpOworCWVsc2UKKwkJaWd0X2Fzc2Vy dCghaWd0X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNbMV0pKTsKKwlmcmVlKGNy Y3MpOworCisJLyoKKwkgKiBBbGxvdyB0aW1lIGZvciBGQkMgdG8ga2ljayBpbiBhZ2FpbiBpZiBp dAorCSAqIGdvdCBkaXNhYmxlZCBkdXJpbmcgZGlydHlmYiBvciBwYWdlIGZsaXAuCisJICovCisJ dXNsZWVwKDMwMDAwMCk7CisKKwlpZ3RfYXNzZXJ0KGZiY19lbmFibGVkKGRhdGEpKTsKKworCWln dF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9jcmNzKHBpcGVf Y3JjLCAxLCAmY3Jjcyk7CisJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOworCWlndF9hc3Nl cnQoIWlndF9jcmNfZXF1YWwoJmNyY3NbMF0sICZkYXRhLT5yZWZfY3JjWzBdKSk7CisJaWYgKG1v ZGUgPT0gVEVTVF9QQUdFX0ZMSVApCisJCWlndF9hc3NlcnQoaWd0X2NyY19lcXVhbCgmY3Jjc1sw XSwgJmRhdGEtPnJlZl9jcmNbMV0pKTsKKwllbHNlCisJCWlndF9hc3NlcnQoIWlndF9jcmNfZXF1 YWwoJmNyY3NbMF0sICZkYXRhLT5yZWZfY3JjWzFdKSk7CisJZnJlZShjcmNzKTsKK30KKworc3Rh dGljIGJvb2wgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgY29ubmVjdG9yX2lk LCBlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlp Z3RfY3JjX3QgKmNyY3MgPSBOVUxMOworCWNvbm5lY3Rvcl90IGNvbm5lY3RvcjsKKwlpbnQgcmV0 OworCisJcmV0ID0ga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhkYXRhLT5kcm1fZmQsCisJ CQkJCSAgIGNvbm5lY3Rvcl9pZCwKKwkJCQkJICAgMSA8PCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkJ ICAgJmNvbm5lY3Rvci5jb25maWcpOworCWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWln dF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjW2RhdGEtPmNydGNfaWR4XSk7CisJZGF0YS0+ cGlwZV9jcmNbZGF0YS0+Y3J0Y19pZHhdID0gTlVMTDsKKworCXBpcGVfY3JjID0gaWd0X3BpcGVf Y3JjX25ldygmZGF0YS0+ZGVidWdmcywKKwkJCQkgICAgZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRj X2lkeCwKKwkJCQkgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCWlmICghcGlwZV9j cmMpIHsKKwkJcHJpbnRmKCJhdXRvIGNyYyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29ubmVjdG9y IHdpdGggY3J0YyAlaVxuIiwKKwkJICAgICAgIGRhdGEtPmNydGNfaWR4KTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCWRhdGEtPnBpcGVfY3JjW2RhdGEtPmNydGNfaWR4XSA9IHBpcGVfY3JjOwor CisJZGF0YS0+ZmJfaWRbMF0gPSBjcmVhdGVfZmIoZGF0YSwKKwkJCQkgICBjb25uZWN0b3IuY29u ZmlnLmRlZmF1bHRfbW9kZS5oZGlzcGxheSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1 bHRfbW9kZS52ZGlzcGxheSwKKwkJCQkgICAwLjAsIDAuMCwgMC4wLCAmY29ubmVjdG9yLmZiWzBd KTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPmZiX2lkWzBdKTsKKworCWRhdGEtPmZiX2lkWzFdID0gY3Jl YXRlX2ZiKGRhdGEsCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUuaGRpc3Bs YXksCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkJ ICAgMC4xLCAwLjEsIDAuMSwgJmNvbm5lY3Rvci5mYlsxXSk7CisJaWd0X2Fzc2VydChkYXRhLT5m Yl9pZFsxXSk7CisKKwlkYXRhLT5oYW5kbGVbMF0gPSBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRs ZTsKKwlkYXRhLT5oYW5kbGVbMV0gPSBjb25uZWN0b3IuZmJbMV0uZ2VtX2hhbmRsZTsKKworCS8q IHNjYW5vdXQgPSBmYlsxXSAqLworCWNvbm5lY3Rvcl9zZXRfbW9kZShkYXRhLCAmY29ubmVjdG9y LCAmY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUsCisJCQkgICBkYXRhLT5mYl9pZFsxXSk7 CisJdXNsZWVwKDMwMDAwMCk7CisKKwlpZ3Rfc2tpcF9vbighZmJjX2VuYWJsZWQoZGF0YSkpOwor CisJaWd0X3dhaXRfZm9yX3ZibGFuayhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWR4KTsKKwor CS8qIGdldCByZWZlcmVuY2UgY3JjIGZvciBmYlsxXSAqLworCWlndF9waXBlX2NyY19zdGFydChw aXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9jcmNzKHBpcGVfY3JjLCAxLCAmY3Jjcyk7CisJ ZGF0YS0+cmVmX2NyY1sxXSA9IGNyY3NbMF07CisJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMp OworCWZyZWUoY3Jjcyk7CisKKwlpZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBU RVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkgeworCQlkYXRhLT5jdHhbMF0gPSBkcm1faW50ZWxf Z2VtX2NvbnRleHRfY3JlYXRlKGRhdGEtPmJ1Zm1ncik7CisJCWlndF9yZXF1aXJlKGRhdGEtPmN0 eFswXSk7CisJCWRhdGEtPmN0eFsxXSA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUoZGF0 YS0+YnVmbWdyKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS0+Y3R4WzFdKTsKKworCQkvKgorCQkgKiBE aXNhYmxlIEZCQyBSVCBhZGRyZXNzIGZvciBib3RoIGNvbnRleHRzCisJCSAqIChieSAicmVuZGVy aW5nIiB0byBhIG5vbi1zY2Fub3V0IGJ1ZmZlcikuCisJCSAqLworCQlleGVjX25vcChkYXRhLCBk YXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFsxXSk7CisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhh bmRsZVswXSwgZGF0YS0+Y3R4WzBdKTsKKwkJZXhlY19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBd LCBkYXRhLT5jdHhbMV0pOworCQlleGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEt PmN0eFswXSk7CisJfQorCisJLyogc2Nhbm91dCA9IGZiWzBdICovCisJY29ubmVjdG9yX3NldF9t b2RlKGRhdGEsICZjb25uZWN0b3IsICZjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZSwKKwkJ CSAgIGRhdGEtPmZiX2lkWzBdKTsKKwl1c2xlZXAoMzAwMDAwKTsKKworCWlndF9za2lwX29uKCFm YmNfZW5hYmxlZChkYXRhKSk7CisKKwlpZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9 PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkgeworCQkvKgorCQkgKiBtYWtlIGN0eFswXSBG QkMgUlQgYWRkcmVzcyBwb2ludCB0byBmYlswXSwgY3R4WzFdCisJCSAqIEZCQyBSVCBhZGRyZXNz IGlzIGxlZnQgYXMgZGlzYWJsZWQuCisJCSAqLworCQlleGVjX25vcChkYXRhLCBjb25uZWN0b3Iu ZmJbMF0uZ2VtX2hhbmRsZSwgZGF0YS0+Y3R4WzBdKTsKKwl9CisKKwlpZ3Rfd2FpdF9mb3JfdmJs YW5rKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZHgpOworCisJLyogZ2V0IHJlZmVyZW5jZSBj cmMgZm9yIGZiWzBdICovCisJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlw ZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIDEsICZjcmNzKTsKKwlkYXRhLT5yZWZfY3JjWzBdID0g Y3Jjc1swXTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2NyYyk7CisJZnJlZShjcmNzKTsKKwor CWttc3Rlc3RfZnJlZV9jb25uZWN0b3JfY29uZmlnKCZjb25uZWN0b3IuY29uZmlnKTsKKworCXJl dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfY3J0YyhkYXRhX3QgKmRhdGEsIGVu dW0gdGVzdF9tb2RlIG1vZGUpCit7CisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmNb ZGF0YS0+Y3J0Y19pZHhdKTsKKwlkYXRhLT5waXBlX2NyY1tkYXRhLT5jcnRjX2lkeF0gPSBOVUxM OworCisJaWYgKG1vZGUgPT0gVEVTVF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBf QU5EX0NPTlRFWFQpIHsKKwkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koZGF0YS0+Y3R4 WzBdKTsKKwkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koZGF0YS0+Y3R4WzFdKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGRhdGFfdCAqZGF0YSwgZW51bSB0ZXN0X21vZGUg bW9kZSkKK3sKKwlpbnQgaSwgbjsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5yZXNvdXJjZXMt PmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQl1aW50MzJfdCBjb25uZWN0b3JfaWQgPSBkYXRh LT5yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV07CisKKwkJZm9yIChuID0gMDsgbiA8IGRhdGEtPnJl c291cmNlcy0+Y291bnRfY3J0Y3M7IG4rKykgeworCQkJZGF0YS0+Y3J0Y19pZHggPSBuOworCQkJ ZGF0YS0+Y3J0Y19pZCA9IGRhdGEtPnJlc291cmNlcy0+Y3J0Y3Nbbl07CisKKwkJCWlmICghcHJl cGFyZV9jcnRjKGRhdGEsIGNvbm5lY3Rvcl9pZCwgbW9kZSkpCisJCQkJY29udGludWU7CisKKwkJ CWZwcmludGYoc3Rkb3V0LCAiQmVnaW5uaW5nICVzIG9uIGNydGMgJWQsIGNvbm5lY3RvciAlZFxu IiwKKwkJCQlpZ3Rfc3VidGVzdF9uYW1lKCksIGRhdGEtPmNydGNfaWQsIGNvbm5lY3Rvcl9pZCk7 CisJCQl0ZXN0X2NyYyhkYXRhLCBtb2RlKTsKKworCQkJZnByaW50ZihzdGRvdXQsICJcbiVzIG9u IGNydGMgJWQsIGNvbm5lY3RvciAlZDogUEFTU0VEXG5cbiIsCisJCQkJaWd0X3N1YnRlc3RfbmFt ZSgpLCBkYXRhLT5jcnRjX2lkLCBjb25uZWN0b3JfaWQpOworCisJCQlmaW5pc2hfY3J0YyhkYXRh LCBtb2RlKTsKKwkJfQorCX0KK30KKworaWd0X21haW4KK3sKKwlkYXRhX3QgZGF0YSA9IHt9Owor CWVudW0gdGVzdF9tb2RlIG1vZGU7CisKKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwlp Z3RfZml4dHVyZSB7CisJCXNpemVfdCB3cml0dGVuOworCQlpbnQgcmV0OworCQljb25zdCBjaGFy ICpjbWQgPSAicGlwZSBBIG5vbmUiOworCQljaGFyIGJ1Zls2NF07CisJCUZJTEUgKnN0YXR1czsK KworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueSgpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRy bV9mZCk7CisJCWlndF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWRhdGEuZGV2aWQgPSBp bnRlbF9nZXRfZHJtX2RldmlkKGRhdGEuZHJtX2ZkKTsKKworCQlpZ3RfZGVidWdmc19pbml0KCZk YXRhLmRlYnVnZnMpOworCQlkYXRhLmN0bCA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLmRlYnVn ZnMsCisJCQkJCSAgICAgImk5MTVfZGlzcGxheV9jcmNfY3RsIiwgInIrIik7CisJCWlndF9yZXF1 aXJlX2YoZGF0YS5jdGwsCisJCQkgICAgICAiTm8gZGlzcGxheV9jcmNfY3RsIGZvdW5kLCBrZXJu ZWwgdG9vIG9sZFxuIik7CisJCXdyaXR0ZW4gPSBmd3JpdGUoY21kLCAxLCBzdHJsZW4oY21kKSwg ZGF0YS5jdGwpOworCQlyZXQgPSBmZmx1c2goZGF0YS5jdGwpOworCQlpZ3RfcmVxdWlyZV9mKCh3 cml0dGVuID09IHN0cmxlbihjbWQpICYmIHJldCA9PSAwKSB8fCBlcnJubyAhPSBFTk9ERVYsCisJ CQkgICAgICAiQ1JDcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1cbiIpOworCisJCXN0 YXR1cyA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLmRlYnVnZnMsICJpOTE1X2ZiY19zdGF0dXMi LCAiciIpOworCQlpZ3RfcmVxdWlyZV9mKHN0YXR1cywgIk5vIGk5MTVfZmJjX3N0YXR1cyBmb3Vu ZFxuIik7CisJCWZyZWFkKGJ1Ziwgc2l6ZW9mKGJ1ZiksIDEsIHN0YXR1cyk7CisJCWZjbG9zZShz dGF0dXMpOworCQlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CisJCWlndF9yZXF1aXJlX2Yo IXN0cnN0cihidWYsICJ1bnN1cHBvcnRlZCBieSB0aGlzIGNoaXBzZXQiKSAmJgorCQkJICAgICAg IXN0cnN0cihidWYsICJkaXNhYmxlZCBwZXIgbW9kdWxlIHBhcmFtIikgJiYKKwkJCSAgICAgICFz dHJzdHIoYnVmLCAiZGlzYWJsZWQgcGVyIGNoaXAgZGVmYXVsdCIpLAorCQkJICAgICAgIkZCQyBu b3Qgc3VwcG9ydGVkL2VuYWJsZWRcbiIpOworCisJCWRhdGEuYnVmbWdyID0gZHJtX2ludGVsX2J1 Zm1ncl9nZW1faW5pdChkYXRhLmRybV9mZCwgNDA5Nik7CisJCWlndF9hc3NlcnQoZGF0YS5idWZt Z3IpOworCQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoZGF0YS5idWZtZ3IpOwor CisJCWRpc3BsYXlfaW5pdCgmZGF0YSk7CisJfQorCisJZm9yIChtb2RlID0gVEVTVF9QQUdFX0ZM SVA7IG1vZGUgPD0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQ7IG1vZGUrKykgeworCQlpZ3Rf c3VidGVzdF9mKCIlcyIsIHRlc3RfbW9kZV9zdHIobW9kZSkpIHsKKwkJCXJ1bl90ZXN0KCZkYXRh LCBtb2RlKTsKKwkJfQorCX0KKworCWlndF9maXh0dXJlIHsKKwkJZHJtX2ludGVsX2J1Zm1ncl9k ZXN0cm95KGRhdGEuYnVmbWdyKTsKKwkJZGlzcGxheV9maW5pKCZkYXRhKTsKKwkJZmNsb3NlKGRh dGEuY3RsKTsKKwl9Cit9Ci0tIAoxLjguMy4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=