From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH igt 2/2] kms_fbc_crc: Add a CRC based FBC test Date: Thu, 21 Nov 2013 21:33:40 +0200 Message-ID: <1385062420-19782-2-git-send-email-ville.syrjala@linux.intel.com> References: <1385062420-19782-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 D860AFB76D for ; Thu, 21 Nov 2013 11:33:46 -0800 (PST) In-Reply-To: <1385062420-19782-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 ZWN0ZWQuCgpUaGUgb3BlcmF0aW9ucyBpbmNsdWRlOgogLSBwYWdlIGZsaXAKIC0gcHdyaXRlCiAt IEdUVCBtbWFwCiAtIENQVSBtbWFwCiAtIGJsaXQKIC0gcmVuZGVyY29weQogLSBjb250ZXh0IHN3 aXRjaCArIHJlbmRlcmNvcHkKIC0gY29tYmluYXRpb24gb2YgYSBwYWdlIGZsaXAgYW5kIGVhY2gg b3BlcmF0aW9uIGxpc3RlZCBhYm92ZQoKU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz IHwgICAxICsKIHRlc3RzL2ttc19mYmNfY3JjLmMgICAgfCA1NDQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1NDUgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19mYmNfY3JjLmMKCmRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpp bmRleCBhMDJiOTNkLi5kMjAxODA5IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTQ5LDYgKzQ5LDcgQEAgVEVTVFNfcHJv Z3NfTSA9IFwKIAlnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCBcCiAJa21zX2FkZGZiIFwKIAlr bXNfY3Vyc29yX2NyYyBcCisJa21zX2ZiY19jcmMgXAogCWttc19mbGlwIFwKIAlrbXNfcGlwZV9j cmNfYmFzaWMgXAogCWttc19yZW5kZXIgXApkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2ZiY19jcmMu YyBiL3Rlc3RzL2ttc19mYmNfY3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMzU1ZTMzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19mYmNfY3JjLmMKQEAgLTAs MCArMSw1NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKwor I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRl ICJkcm1fZm91cmNjLmgiCisKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X2Rl YnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAicmVuZGVyY29weS5oIgor CitlbnVtIHRlc3RfbW9kZSB7CisJVEVTVF9QQUdFX0ZMSVAsCisJVEVTVF9QV1JJVEUsCisJVEVT VF9NTUFQX0NQVSwKKwlURVNUX01NQVBfR1RULAorCVRFU1RfQkxULAorCVRFU1RfUkVOREVSLAor CVRFU1RfQ09OVEVYVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfUFdSSVRFLAorCVRFU1RfUEFHRV9G TElQX0FORF9NTUFQX0NQVSwKKwlURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9HVFQsCisJVEVTVF9Q QUdFX0ZMSVBfQU5EX0JMVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSLAorCVRFU1RfUEFH RV9GTElQX0FORF9DT05URVhULAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBrbXN0 ZXN0X2Nvbm5lY3Rvcl9jb25maWcgY29uZmlnOworCWRybU1vZGVNb2RlSW5mbyBtb2RlOworCXN0 cnVjdCBrbXN0ZXN0X2ZiIGZiWzJdOworfSBjb25uZWN0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3Qg eworCWludCBkcm1fZmQ7CisJaWd0X2RlYnVnZnNfdCBkZWJ1Z2ZzOworCWRybU1vZGVSZXMgKnJl c291cmNlczsKKwlGSUxFICpjdGw7CisJaWd0X2NyY190IHJlZl9jcmNbMl07CisJaWd0X3BpcGVf Y3JjX3QgKipwaXBlX2NyYzsKKwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtX2ludGVs X2NvbnRleHQgKmN0eFsyXTsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBoYW5kbGVbMl07 CisJdWludDMyX3QgY3J0Y19pZDsKKwl1aW50MzJfdCBjcnRjX2lkeDsKKwl1aW50MzJfdCBmYl9p ZFsyXTsKK30gZGF0YV90OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9tb2RlX3N0cihlbnVt IHRlc3RfbW9kZSBtb2RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9tb2Rl c1tdID0geworCQlbVEVTVF9QQUdFX0ZMSVBdID0gInBhZ2VfZmxpcCIsCisJCVtURVNUX1BXUklU RV0gPSAicHdyaXRlIiwKKwkJW1RFU1RfTU1BUF9DUFVdID0gIm1tYXBfY3B1IiwKKwkJW1RFU1Rf TU1BUF9HVFRdID0gIm1tYXBfZ3R0IiwKKwkJW1RFU1RfQkxUXSA9ICJibHQiLAorCQlbVEVTVF9S RU5ERVJdID0gInJlbmRlciIsCisJCVtURVNUX0NPTlRFWFRdID0gImNvbnRleHQiLAorCQlbVEVT VF9QQUdFX0ZMSVBfQU5EX1BXUklURV0gPSAicGFnZV9mbGlwX2FuZF9wd3JpdGUiLAorCQlbVEVT VF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVXSA9ICJwYWdlX2ZsaXBfYW5kX21tYXBfY3B1IiwKKwkJ W1RFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVF0gPSAicGFnZV9mbGlwX2FuZF9tbWFwX2d0dCIs CisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQkxUXSA9ICJwYWdlX2ZsaXBfYW5kX2JsdCIsCisJCVtU RVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSXSA9ICJwYWdlX2ZsaXBfYW5kX3JlbmRlciIsCisJCVtU RVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVF0gPSAicGFnZV9mbGlwX2FuZF9jb250ZXh0IiwKKwl9 OworCisJcmV0dXJuIHRlc3RfbW9kZXNbbW9kZV07Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVh dGVfZmIoZGF0YV90ICpkYXRhLAorCQkJICBpbnQgdywgaW50IGgsCisJCQkgIGRvdWJsZSByLCBk b3VibGUgZywgZG91YmxlIGIsCisJCQkgIHN0cnVjdCBrbXN0ZXN0X2ZiICpmYikKK3sKKwl1aW50 MzJfdCBmYl9pZDsKKwljYWlyb190ICpjcjsKKworCWZiX2lkID0ga21zdGVzdF9jcmVhdGVfZmIy KGRhdGEtPmRybV9mZCwgdywgaCwKKwkJCQkgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB0cnVlLCBm Yik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGttc3Rlc3RfZ2V0X2NhaXJvX2N0eChk YXRhLT5kcm1fZmQsIGZiKTsKKwlrbXN0ZXN0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCB3LCBoLCBy LCBnLCBiKTsKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7CisKKwlyZXR1cm4g ZmJfaWQ7Cit9CisKK3N0YXRpYyBib29sCitjb25uZWN0b3Jfc2V0X21vZGUoZGF0YV90ICpkYXRh LCBjb25uZWN0b3JfdCAqY29ubmVjdG9yLAorCQkgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsIHVp bnQzMl90IGZiX2lkKQoreworCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgKmNvbmZp ZyA9ICZjb25uZWN0b3ItPmNvbmZpZzsKKwlpbnQgcmV0OworCisjaWYgMAorCWZwcmludGYoc3Rk b3V0LCAiVXNpbmcgcGlwZSAlYywgJWR4JWRcbiIsIHBpcGVfbmFtZShjb25maWctPnBpcGUpLAor CQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworI2VuZGlmCisKKwlyZXQgPSBkcm1N b2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsCisJCQkgICAgIGNvbmZpZy0+Y3J0Yy0+Y3J0Y19pZCwK KwkJCSAgICAgZmJfaWQsCisJCQkgICAgIDAsIDAsIC8qIHgsIHkgKi8KKwkJCSAgICAgJmNvbmZp Zy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfaWQsCisJCQkgICAgIDEsCisJCQkgICAgIG1vZGUpOwor CWlndF9hc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRp c3BsYXlfaW5pdChkYXRhX3QgKmRhdGEpCit7CisJZGF0YS0+cmVzb3VyY2VzID0gZHJtTW9kZUdl dFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlndF9hc3NlcnQoZGF0YS0+cmVzb3VyY2VzKTsK KworCWRhdGEtPnBpcGVfY3JjID0gY2FsbG9jKGRhdGEtPnJlc291cmNlcy0+Y291bnRfY3J0Y3Ms IHNpemVvZihkYXRhLT5waXBlX2NyY1swXSkpOworfQorCitzdGF0aWMgdm9pZCBkaXNwbGF5X2Zp bmkoZGF0YV90ICpkYXRhKQoreworCWZyZWUoZGF0YS0+cGlwZV9jcmMpOworfQorCitzdGF0aWMg dm9pZCBmaWxsX2JsdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgdW5zaWduZWQgY2hh ciBjb2xvcikKK3sKKwlkcm1faW50ZWxfYm8gKmRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2Jv KGRhdGEtPmJ1Zm1nciwKKwkJCQkJCSAgICBkYXRhLT5kcm1fZmQsCisJCQkJCQkgICAgIiIsIGhh bmRsZSk7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKworCWJhdGNoID0gaW50 ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fz c2VydChiYXRjaCk7CisKKwlCRUdJTl9CQVRDSCg1KTsKKwlPVVRfQkFUQ0goQ09MT1JfQkxUX0NN RCk7CisJT1VUX0JBVENIKCgxIDw8IDI0KSB8ICgweGYwIDw8IDE2KSB8IDApOworCU9VVF9CQVRD SCgxIDw8IDE2IHwgNCk7CisJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwg STkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VUX0JBVENIKGNvbG9yKTsKKwlBRFZBTkNF X0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxfYmF0 Y2hidWZmZXJfZnJlZShiYXRjaCk7Cit9CisKKworc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5p dChzdHJ1Y3Qgc2NyYXRjaF9idWYgKmJ1ZiwgZHJtX2ludGVsX2JvICpibykKK3sKKwlidWYtPmJv ID0gYm87CisJYnVmLT5zdHJpZGUgPSA0MDk2OworCWJ1Zi0+dGlsaW5nID0gSTkxNV9USUxJTkdf WDsKKwlidWYtPnNpemUgPSA0MDk2OworfQorCitzdGF0aWMgdm9pZCBleGVjX25vcChkYXRhX3Qg KmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQpCit7CisJ ZHJtX2ludGVsX2JvICpkc3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwor CWRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZHJtX2Zk LCAiIiwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGRzdCk7CisKKwliYXRjaCA9IGludGVsX2JhdGNo YnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3NlcnQoYmF0 Y2gpOworCisJLyogYWRkIHRoZSByZWxvYyB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCB3aWxsIHRo aW5rIHdlIHdyaXRlIHRvIGRzdCAqLworCUJFR0lOX0JBVENIKDQpOworCU9VVF9CQVRDSChNSV9C QVRDSF9CVUZGRVJfRU5EKTsKKwlPVVRfQkFUQ0goTUlfTk9PUCk7CisJT1VUX1JFTE9DKGRzdCwg STkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VU X0JBVENIKE1JX05PT1ApOworCUFEVkFOQ0VfQkFUQ0goKTsKKworCWludGVsX2JhdGNoYnVmZmVy X2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CisJaW50ZWxfYmF0Y2hidWZmZXJf ZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcmVuZGVyKGRhdGFfdCAqZGF0YSwg dWludDMyX3QgaGFuZGxlLAorCQkJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVk IGNoYXIgY29sb3IpCit7CisJZHJtX2ludGVsX2JvICpzcmMsICpkc3Q7CisJc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3Qgc2NyYXRjaF9idWYgc3JjX2J1ZiwgZHN0X2J1 ZjsKKwljb25zdCB1aW50OF90IGJ1Zls0XSA9IHsgY29sb3IsIGNvbG9yLCBjb2xvciwgY29sb3Ig fTsKKwlyZW5kZXJfY29weWZ1bmNfdCByZW5kZXJjb3B5ID0gZ2V0X3JlbmRlcl9jb3B5ZnVuYyhk YXRhLT5kZXZpZCk7CisKKwlpZ3Rfc2tpcF9vbighcmVuZGVyY29weSk7CisKKwlkc3QgPSBnZW1f aGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGhhbmRs ZSk7CisJaWd0X2Fzc2VydChkc3QpOworCisJc3JjID0gZHJtX2ludGVsX2JvX2FsbG9jKGRhdGEt PmJ1Zm1nciwgIiIsIDQwOTYsIDQwOTYpOworCWlndF9hc3NlcnQoc3JjKTsKKworCWdlbV93cml0 ZShkYXRhLT5kcm1fZmQsIHNyYy0+aGFuZGxlLCAwLCBidWYsIDQpOworCisJc2NyYXRjaF9idWZf aW5pdCgmc3JjX2J1Ziwgc3JjKTsKKwlzY3JhdGNoX2J1Zl9pbml0KCZkc3RfYnVmLCBkc3QpOwor CisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRl dmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCXJlbmRlcmNvcHkoYmF0Y2gsIGNvbnRleHQs CisJCSAgICZzcmNfYnVmLCAwLCAwLCAxLCAxLAorCQkgICAmZHN0X2J1ZiwgMCwgMCk7CisKKwlp bnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKK30KKworc3RhdGljIGJvb2wgZmJjX2VuYWJs ZWQoZGF0YV90ICpkYXRhKQoreworCUZJTEUgKnN0YXR1czsKKwljaGFyIHN0cls2NF0gPSB7fTsK KworCXN0YXR1cyA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLT5kZWJ1Z2ZzLCAiaTkxNV9mYmNf c3RhdHVzIiwgInIiKTsKKwlmcmVhZChzdHIsIHNpemVvZihzdHIpIC0gMSwgMSwgc3RhdHVzKTsK KwlmY2xvc2Uoc3RhdHVzKTsKKwlyZXR1cm4gc3Ryc3RyKHN0ciwgIkZCQyBlbmFibGVkIikgIT0g TlVMTDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9jcmMoZGF0YV90ICpkYXRhLCBlbnVtIHRlc3Rf bW9kZSBtb2RlKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJ1ZlsxXSA9IHsgMHhj YyB9OworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYyA9IGRhdGEtPnBpcGVfY3JjW2RhdGEtPmNy dGNfaWR4XTsKKwlpZ3RfY3JjX3QgKmNyY3MgPSBOVUxMOworCXVpbnQzMl90IGhhbmRsZSA9IGRh dGEtPmhhbmRsZVswXTsKKwl1aW50MzJfdCBmYl9pZCA9IGRhdGEtPmZiX2lkWzBdOworCisJaWd0 X2Fzc2VydChmYmNfZW5hYmxlZChkYXRhKSk7CisKKwlpZiAobW9kZSA+PSBURVNUX1BBR0VfRkxJ UF9BTkRfUFdSSVRFKSB7CisJCWhhbmRsZSA9IGRhdGEtPmhhbmRsZVsxXTsKKwkJZmJfaWQgPSBk YXRhLT5mYl9pZFsxXTsKKwkJaWd0X2Fzc2VydChkcm1Nb2RlUGFnZUZsaXAoZGF0YS0+ZHJtX2Zk LCBkYXRhLT5jcnRjX2lkLAorCQkJCQkgICBkYXRhLT5mYl9pZFsxXSwgMCwgTlVMTCkgPT0gMCk7 CisJCXVzbGVlcCgzMDAwMDApOworCisJCWlndF9hc3NlcnQoZmJjX2VuYWJsZWQoZGF0YSkpOwor CX0KKworCXN3aXRjaCAobW9kZSkgeworCQl2b2lkICpwdHI7CisJY2FzZSBURVNUX1BBR0VfRkxJ UDoKKwkJaWd0X2Fzc2VydChkcm1Nb2RlUGFnZUZsaXAoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRj X2lkLAorCQkJCQkgICBkYXRhLT5mYl9pZFsxXSwgMCwgTlVMTCkgPT0gMCk7CisJCWJyZWFrOwor CWNhc2UgVEVTVF9QV1JJVEU6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfUFdSSVRFOgorCQln ZW1fd3JpdGUoZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDAsIGJ1ZiwgMSk7CisJCWlndF9hc3NlcnQo ZHJtTW9kZURpcnR5RkIoZGF0YS0+ZHJtX2ZkLCBmYl9pZCwgTlVMTCwgMCkgPT0gMCk7CisJCWJy ZWFrOworCWNhc2UgVEVTVF9NTUFQX0NQVToKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9NTUFQ X0NQVToKKwkJcHRyID0gZ2VtX21tYXBfX2NwdShkYXRhLT5kcm1fZmQsIGhhbmRsZSwgNDA5Niwg UFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1 X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwkJbWVtc2V0KHB0ciwgMHhm ZiwgNCk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1X0dFTV9E T01BSU5fR1RULCAwKTsKKwkJbXVubWFwKHB0ciwgNDA5Nik7CisJCWlndF9hc3NlcnQoZHJtTW9k ZURpcnR5RkIoZGF0YS0+ZHJtX2ZkLCBmYl9pZCwgTlVMTCwgMCkgPT0gMCk7CisJCWJyZWFrOwor CWNhc2UgVEVTVF9NTUFQX0dUVDoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVDoK KwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGhhbmRsZSwgNDA5NiwgUFJPVF9X UklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1X0dFTV9E T01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJbWVtc2V0KHB0ciwgMHhmZiwgNCk7 CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5f R1RULCAwKTsKKwkJbXVubWFwKHB0ciwgNDA5Nik7CisJCWJyZWFrOworCWNhc2UgVEVTVF9CTFQ6 CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfQkxUOgorCQlmaWxsX2JsdChkYXRhLCBoYW5kbGUs IDB4ZmYpOworCQlicmVhazsKKwljYXNlIFRFU1RfUkVOREVSOgorCWNhc2UgVEVTVF9DT05URVhU OgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX1JFTkRFUjoKKwljYXNlIFRFU1RfUEFHRV9GTElQ X0FORF9DT05URVhUOgorCQlmaWxsX3JlbmRlcihkYXRhLCBoYW5kbGUsCisJCQkgICAgKG1vZGUg PT0gVEVTVF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpID8K KwkJCSAgICBkYXRhLT5jdHhbMV0gOiBOVUxMLCAweGZmKTsKKwkJYnJlYWs7CisJfQorCisJLyog bWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgbmV3IGRhdGEgKi8KKwlpZ3Rfd2FpdF9mb3JfdmJs YW5rKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZHgpOworCisJaWd0X3BpcGVfY3JjX3N0YXJ0 KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIDEsICZjcmNzKTsK KwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2NyYyk7CisJaWd0X2Fzc2VydCghaWd0X2NyY19lcXVh bCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNbMF0pKTsKKwlpZiAobW9kZSA9PSBURVNUX1BBR0Vf RkxJUCkKKwkJaWd0X2Fzc2VydChpZ3RfY3JjX2VxdWFsKCZjcmNzWzBdLCAmZGF0YS0+cmVmX2Ny Y1sxXSkpOworCWVsc2UKKwkJaWd0X2Fzc2VydCghaWd0X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRh dGEtPnJlZl9jcmNbMV0pKTsKKwlmcmVlKGNyY3MpOworCisJLyoKKwkgKiBBbGxvdyB0aW1lIGZv ciBGQkMgdG8ga2ljayBpbiBhZ2FpbiBpZiBpdAorCSAqIGdvdCBkaXNhYmxlZCBkdXJpbmcgZGly dHlmYiBvciBwYWdlIGZsaXAuCisJICovCisJdXNsZWVwKDMwMDAwMCk7CisKKwlpZ3RfYXNzZXJ0 KGZiY19lbmFibGVkKGRhdGEpKTsKKworCWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7CisJ aWd0X3BpcGVfY3JjX2dldF9jcmNzKHBpcGVfY3JjLCAxLCAmY3Jjcyk7CisJaWd0X3BpcGVfY3Jj X3N0b3AocGlwZV9jcmMpOworCWlndF9hc3NlcnQoIWlndF9jcmNfZXF1YWwoJmNyY3NbMF0sICZk YXRhLT5yZWZfY3JjWzBdKSk7CisJaWYgKG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVApCisJCWlndF9h c3NlcnQoaWd0X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNbMV0pKTsKKwllbHNl CisJCWlndF9hc3NlcnQoIWlndF9jcmNfZXF1YWwoJmNyY3NbMF0sICZkYXRhLT5yZWZfY3JjWzFd KSk7CisJZnJlZShjcmNzKTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZV9jcnRjKGRhdGFfdCAq ZGF0YSwgdWludDMyX3QgY29ubmVjdG9yX2lkLCBlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCWln dF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlpZ3RfY3JjX3QgKmNyY3MgPSBOVUxMOworCWNvbm5l Y3Rvcl90IGNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0ga21zdGVzdF9nZXRfY29ubmVj dG9yX2NvbmZpZyhkYXRhLT5kcm1fZmQsCisJCQkJCSAgIGNvbm5lY3Rvcl9pZCwKKwkJCQkJICAg MSA8PCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkJICAgJmNvbm5lY3Rvci5jb25maWcpOworCWlmIChy ZXQpCisJCXJldHVybiBmYWxzZTsKKworCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3Jj W2RhdGEtPmNydGNfaWR4XSk7CisJZGF0YS0+cGlwZV9jcmNbZGF0YS0+Y3J0Y19pZHhdID0gTlVM TDsKKworCXBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldygmZGF0YS0+ZGVidWdmcywKKwkJCQkg ICAgZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkgICAgSU5URUxfUElQRV9DUkNf U09VUkNFX0FVVE8pOworCWlmICghcGlwZV9jcmMpIHsKKwkJcHJpbnRmKCJhdXRvIGNyYyBub3Qg c3VwcG9ydGVkIG9uIHRoaXMgY29ubmVjdG9yIHdpdGggY3J0YyAlaVxuIiwKKwkJICAgICAgIGRh dGEtPmNydGNfaWR4KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRhdGEtPnBpcGVfY3JjW2Rh dGEtPmNydGNfaWR4XSA9IHBpcGVfY3JjOworCisJZGF0YS0+ZmJfaWRbMF0gPSBjcmVhdGVfZmIo ZGF0YSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS5oZGlzcGxheSwKKwkJ CQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS52ZGlzcGxheSwKKwkJCQkgICAwLjAs IDAuMCwgMC4wLCAmY29ubmVjdG9yLmZiWzBdKTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPmZiX2lkWzBd KTsKKworCWRhdGEtPmZiX2lkWzFdID0gY3JlYXRlX2ZiKGRhdGEsCisJCQkJICAgY29ubmVjdG9y LmNvbmZpZy5kZWZhdWx0X21vZGUuaGRpc3BsYXksCisJCQkJICAgY29ubmVjdG9yLmNvbmZpZy5k ZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkJICAgMC4xLCAwLjEsIDAuMSwgJmNvbm5lY3Rvci5m YlsxXSk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pZFsxXSk7CisKKwlkYXRhLT5oYW5kbGVbMF0g PSBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRsZTsKKwlkYXRhLT5oYW5kbGVbMV0gPSBjb25uZWN0 b3IuZmJbMV0uZ2VtX2hhbmRsZTsKKworCS8qIHNjYW5vdXQgPSBmYlsxXSAqLworCWNvbm5lY3Rv cl9zZXRfbW9kZShkYXRhLCAmY29ubmVjdG9yLCAmY29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21v ZGUsCisJCQkgICBkYXRhLT5mYl9pZFsxXSk7CisJdXNsZWVwKDMwMDAwMCk7CisKKwlpZ3Rfc2tp cF9vbighZmJjX2VuYWJsZWQoZGF0YSkpOworCisJaWd0X3dhaXRfZm9yX3ZibGFuayhkYXRhLT5k cm1fZmQsIGRhdGEtPmNydGNfaWR4KTsKKworCS8qIGdldCByZWZlcmVuY2UgY3JjIGZvciBmYlsx XSAqLworCWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9j cmNzKHBpcGVfY3JjLCAxLCAmY3Jjcyk7CisJZGF0YS0+cmVmX2NyY1sxXSA9IGNyY3NbMF07CisJ aWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOworCWZyZWUoY3Jjcyk7CisKKwlpZiAobW9kZSA9 PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkgewor CQlkYXRhLT5jdHhbMF0gPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGRhdGEtPmJ1Zm1n cik7CisJCWlndF9yZXF1aXJlKGRhdGEtPmN0eFswXSk7CisJCWRhdGEtPmN0eFsxXSA9IGRybV9p bnRlbF9nZW1fY29udGV4dF9jcmVhdGUoZGF0YS0+YnVmbWdyKTsKKwkJaWd0X3JlcXVpcmUoZGF0 YS0+Y3R4WzFdKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIEZCQyBSVCBhZGRyZXNzIGZvciBib3Ro IGNvbnRleHRzCisJCSAqIChieSAicmVuZGVyaW5nIiB0byBhIG5vbi1zY2Fub3V0IGJ1ZmZlciku CisJCSAqLworCQlleGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFsxXSk7 CisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzBdKTsKKwkJZXhl Y19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMV0pOworCQlleGVjX25vcChk YXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFswXSk7CisJfQorCisJLyogc2Nhbm91dCA9 IGZiWzBdICovCisJY29ubmVjdG9yX3NldF9tb2RlKGRhdGEsICZjb25uZWN0b3IsICZjb25uZWN0 b3IuY29uZmlnLmRlZmF1bHRfbW9kZSwKKwkJCSAgIGRhdGEtPmZiX2lkWzBdKTsKKwl1c2xlZXAo MzAwMDAwKTsKKworCWlndF9za2lwX29uKCFmYmNfZW5hYmxlZChkYXRhKSk7CisKKwlpZiAobW9k ZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVCkg eworCQkvKgorCQkgKiBtYWtlIGN0eFswXSBGQkMgUlQgYWRkcmVzcyBwb2ludCB0byBmYlswXSwg Y3R4WzFdCisJCSAqIEZCQyBSVCBhZGRyZXNzIGlzIGxlZnQgYXMgZGlzYWJsZWQuCisJCSAqLwor CQlleGVjX25vcChkYXRhLCBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRsZSwgZGF0YS0+Y3R4WzBd KTsKKwl9CisKKwlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19p ZHgpOworCisJLyogZ2V0IHJlZmVyZW5jZSBjcmMgZm9yIGZiWzBdICovCisJaWd0X3BpcGVfY3Jj X3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIDEsICZj cmNzKTsKKwlkYXRhLT5yZWZfY3JjWzBdID0gY3Jjc1swXTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChw aXBlX2NyYyk7CisJZnJlZShjcmNzKTsKKworCWttc3Rlc3RfZnJlZV9jb25uZWN0b3JfY29uZmln KCZjb25uZWN0b3IuY29uZmlnKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBm aW5pc2hfY3J0YyhkYXRhX3QgKmRhdGEsIGVudW0gdGVzdF9tb2RlIG1vZGUpCit7CisJaWd0X3Bp cGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmNbZGF0YS0+Y3J0Y19pZHhdKTsKKwlkYXRhLT5waXBl X2NyY1tkYXRhLT5jcnRjX2lkeF0gPSBOVUxMOworCisJaWYgKG1vZGUgPT0gVEVTVF9DT05URVhU IHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJZHJtX2ludGVsX2dl bV9jb250ZXh0X2Rlc3Ryb3koZGF0YS0+Y3R4WzBdKTsKKwkJZHJtX2ludGVsX2dlbV9jb250ZXh0 X2Rlc3Ryb3koZGF0YS0+Y3R4WzFdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGRh dGFfdCAqZGF0YSwgZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwlpbnQgaSwgbjsKKworCWZvciAo aSA9IDA7IGkgPCBkYXRhLT5yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQl1 aW50MzJfdCBjb25uZWN0b3JfaWQgPSBkYXRhLT5yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV07CisK KwkJZm9yIChuID0gMDsgbiA8IGRhdGEtPnJlc291cmNlcy0+Y291bnRfY3J0Y3M7IG4rKykgewor CQkJZGF0YS0+Y3J0Y19pZHggPSBuOworCQkJZGF0YS0+Y3J0Y19pZCA9IGRhdGEtPnJlc291cmNl cy0+Y3J0Y3Nbbl07CisKKwkJCWlmICghcHJlcGFyZV9jcnRjKGRhdGEsIGNvbm5lY3Rvcl9pZCwg bW9kZSkpCisJCQkJY29udGludWU7CisKKwkJCWZwcmludGYoc3Rkb3V0LCAiQmVnaW5uaW5nICVz IG9uIGNydGMgJWQsIGNvbm5lY3RvciAlZFxuIiwKKwkJCQlpZ3Rfc3VidGVzdF9uYW1lKCksIGRh dGEtPmNydGNfaWQsIGNvbm5lY3Rvcl9pZCk7CisJCQl0ZXN0X2NyYyhkYXRhLCBtb2RlKTsKKwor CQkJZnByaW50ZihzdGRvdXQsICJcbiVzIG9uIGNydGMgJWQsIGNvbm5lY3RvciAlZDogUEFTU0VE XG5cbiIsCisJCQkJaWd0X3N1YnRlc3RfbmFtZSgpLCBkYXRhLT5jcnRjX2lkLCBjb25uZWN0b3Jf aWQpOworCisJCQlmaW5pc2hfY3J0YyhkYXRhLCBtb2RlKTsKKwkJfQorCX0KK30KKworaWd0X21h aW4KK3sKKwlkYXRhX3QgZGF0YSA9IHt9OworCWVudW0gdGVzdF9tb2RlIG1vZGU7CisKKwlpZ3Rf c2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCXNpemVfdCB3cml0dGVu OworCQlpbnQgcmV0OworCQljb25zdCBjaGFyICpjbWQgPSAicGlwZSBBIG5vbmUiOworCQljaGFy IGJ1Zls2NF07CisJCUZJTEUgKnN0YXR1czsKKworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2Fu eSgpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRybV9mZCk7CisJCWlndF9zZXRfdnRfZ3JhcGhpY3Nf bW9kZSgpOworCisJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEuZHJtX2Zk KTsKKworCQlpZ3RfZGVidWdmc19pbml0KCZkYXRhLmRlYnVnZnMpOworCQlkYXRhLmN0bCA9IGln dF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLmRlYnVnZnMsCisJCQkJCSAgICAgImk5MTVfZGlzcGxheV9j cmNfY3RsIiwgInIrIik7CisJCWlndF9yZXF1aXJlX2YoZGF0YS5jdGwsCisJCQkgICAgICAiTm8g ZGlzcGxheV9jcmNfY3RsIGZvdW5kLCBrZXJuZWwgdG9vIG9sZFxuIik7CisJCXdyaXR0ZW4gPSBm d3JpdGUoY21kLCAxLCBzdHJsZW4oY21kKSwgZGF0YS5jdGwpOworCQlyZXQgPSBmZmx1c2goZGF0 YS5jdGwpOworCQlpZ3RfcmVxdWlyZV9mKCh3cml0dGVuID09IHN0cmxlbihjbWQpICYmIHJldCA9 PSAwKSB8fCBlcnJubyAhPSBFTk9ERVYsCisJCQkgICAgICAiQ1JDcyBub3Qgc3VwcG9ydGVkIG9u IHRoaXMgcGxhdGZvcm1cbiIpOworCisJCXN0YXR1cyA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRh LmRlYnVnZnMsICJpOTE1X2ZiY19zdGF0dXMiLCAiciIpOworCQlpZ3RfcmVxdWlyZV9mKHN0YXR1 cywgIk5vIGk5MTVfZmJjX3N0YXR1cyBmb3VuZFxuIik7CisJCWZyZWFkKGJ1Ziwgc2l6ZW9mKGJ1 ZiksIDEsIHN0YXR1cyk7CisJCWZjbG9zZShzdGF0dXMpOworCQlidWZbc2l6ZW9mKGJ1ZikgLSAx XSA9ICdcMCc7CisJCWlndF9yZXF1aXJlX2YoIXN0cnN0cihidWYsICJ1bnN1cHBvcnRlZCBieSB0 aGlzIGNoaXBzZXQiKSAmJgorCQkJICAgICAgIXN0cnN0cihidWYsICJkaXNhYmxlZCBwZXIgbW9k dWxlIHBhcmFtIikgJiYKKwkJCSAgICAgICFzdHJzdHIoYnVmLCAiZGlzYWJsZWQgcGVyIGNoaXAg ZGVmYXVsdCIpLAorCQkJICAgICAgIkZCQyBub3Qgc3VwcG9ydGVkL2VuYWJsZWRcbiIpOworCisJ CWRhdGEuYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRhLmRybV9mZCwgNDA5 Nik7CisJCWlndF9hc3NlcnQoZGF0YS5idWZtZ3IpOworCQlkcm1faW50ZWxfYnVmbWdyX2dlbV9l bmFibGVfcmV1c2UoZGF0YS5idWZtZ3IpOworCisJCWRpc3BsYXlfaW5pdCgmZGF0YSk7CisJfQor CisJZm9yIChtb2RlID0gVEVTVF9QQUdFX0ZMSVA7IG1vZGUgPD0gVEVTVF9QQUdFX0ZMSVBfQU5E X0NPTlRFWFQ7IG1vZGUrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcyIsIHRlc3RfbW9kZV9zdHIo bW9kZSkpIHsKKwkJCXJ1bl90ZXN0KCZkYXRhLCBtb2RlKTsKKwkJfQorCX0KKworCWlndF9maXh0 dXJlIHsKKwkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEuYnVmbWdyKTsKKwkJZGlzcGxh eV9maW5pKCZkYXRhKTsKKwkJZmNsb3NlKGRhdGEuY3RsKTsKKwl9Cit9Ci0tIAoxLjguMy4yCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=