From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: [PATCH 2/2] tests/kms_psr_sink_crc: Create test to test PSR by checking panel CRC. Date: Thu, 15 May 2014 20:13:58 -0400 Message-ID: <1400199238-2503-2-git-send-email-rodrigo.vivi@gmail.com> References: <1400199238-2503-1-git-send-email-rodrigo.vivi@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f45.google.com (mail-pa0-f45.google.com [209.85.220.45]) by gabe.freedesktop.org (Postfix) with ESMTP id 1807B6EF46 for ; Thu, 15 May 2014 17:14:03 -0700 (PDT) Received: by mail-pa0-f45.google.com with SMTP id ey11so1733210pad.32 for ; Thu, 15 May 2014 17:14:03 -0700 (PDT) In-Reply-To: <1400199238-2503-1-git-send-email-rodrigo.vivi@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org djI6IFdhaXQgcHNyIGVuYWJsZSB3aXRoIHRpbWVvdXQgYW5kIG1vcmUgc3VidGVzdCBhZGRlZC4K djM6IEFkZCB3YWl0IGZvciB2X2JsYW5rIGxlZXRpbmcgdGVzdCBtb3JlIHJlbGlhYmxlIGFuZCBw cmVwYXJpbmcgdG8KICAgIGFkZCBCYXl0cmFpbCBwZXItcGlwZSB0ZXN0cy4KdjQ6IENhbGwgYnVz eV9pb2N0bCBvbiBtbWFwX2d0dCB0byBtYXRjaCB0aGUgcmVhbCB1c2FnZSBhbmQgcmVtb3ZlIHRo ZSBuZWVkCiAgICBvZiBpbmFjdGl2YXRlIG9uIHNldF9kb21haW4sIHdoYXQgd2FzIHNlbWFudGlj YWxseSB3cm9uZy4KdjU6IEFkZGluZyBtb3JlIHRlc3QgY2FzZXMgdG8gY292ZXIgbW1hcF9ndHQg d2l0aCBhbmQgd2l0aG91dCBmb2xsb3dlZCBieQogICAgYnVzeSBpb2N0bCBhbmQgYWxzbyB3aXRo b3V0IGJ1c3kgYW5kIHdhaXRpbmcgMTAgc2Vjb25kcyBiZXR3ZWVuCiAgICBzZXRfZG9tYWluIGFu ZCBhY3R1YWwgd3JpdGUuCnY2OiByZWJhc2UgYWZ0ZXIga21zX3BsYW5lIGFkZGVkIGFuZCBkZWJ1 Z2ZzIGFwaSBjaGFuZ2VkLgogICAgUGx1cyBhZGRpbmcgbW9yZSB0ZXN0IGNhc2VzLgp2NzogU29t ZSByZXdvcmsgYW5kIHNwcml0ZSB0ZXN0IGFkZGVkCgpTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZp dmkgPHJvZHJpZ28udml2aUBnbWFpbC5jb20+Ci0tLQogdGVzdHMvQW5kcm9pZC5tayAgICAgICAg IHwgICAxICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICB8ICAgMSArCiB0ZXN0cy9rbXNfcHNy X3NpbmtfY3JjLmMgfCA2MjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjI1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9rbXNfcHNyX3NpbmtfY3JjLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9BbmRy b2lkLm1rIGIvdGVzdHMvQW5kcm9pZC5tawppbmRleCBiN2JmNTFlLi40NDAxYzNlIDEwMDY0NAot LS0gYS90ZXN0cy9BbmRyb2lkLm1rCisrKyBiL3Rlc3RzL0FuZHJvaWQubWsKQEAgLTY0LDYgKzY0 LDcgQEAgZWxzZQogICAgIGttc19mbGlwIFwKICAgICBrbXNfZmxpcF90aWxpbmcgXAogICAgIGtt c19waXBlX2NyY19iYXNpYyBcCisgICAga21zX3Bzcl9zaW5rX2NyYyBcCiAgICAga21zX2ZiY19j cmMgXAogICAgIGttc19zZXRtb2RlIFwKICAgICBrbXNfc2lua19jcmNfYmFzaWMgXApkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5k ZXggYzNkODcyMC4uNTFjNDIwNSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwor KysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC02Niw2ICs2Niw3IEBAIFRFU1RTX3Byb2dz X00gPSBcCiAJa21zX2ZsaXBfdGlsaW5nIFwKIAlrbXNfcGlwZV9jcmNfYmFzaWMgXAogCWttc19w bGFuZSBcCisJa21zX3Bzcl9zaW5rX2NyYyBcCiAJa21zX3JlbmRlciBcCiAJa21zX3NldG1vZGUg XAogCWttc19zaW5rX2NyY19iYXNpYyBcCmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcHNyX3Npbmtf Y3JjLmMgYi90ZXN0cy9rbXNfcHNyX3NpbmtfY3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNmUwNWUzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19wc3Jfc2lu a19jcmMuYwpAQCAtMCwwICsxLDYyMyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImRybV9m b3VyY2MuaCIKKworI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAiZHJtdGVz dC5oIgorI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImludGVsX2JhdGNoYnVm ZmVyLmgiCisjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgorI2luY2x1ZGUgImlndF9kZWJ1Z2Zz LmgiCisjaW5jbHVkZSAiaWd0X2ttcy5oIgorCitlbnVtIHRlc3RzIHsKKwlURVNUX1BBR0VfRkxJ UCwKKwlURVNUX01NQVBfQ1BVLAorCVRFU1RfTU1BUF9HVFQsCisJVEVTVF9NTUFQX0dUVF9OT19C VVNZLAorCVRFU1RfTU1BUF9HVFRfV0FJVElOR19OT19CVVNZLAorCVRFU1RfU0VURE9NQUlOX0ZM SVBfV0FJVF9XUklURV9HVFQsCisJVEVTVF9TRVRET01BSU5fRkxJUF9XQUlUX1dSSVRFX0NQVSwK KwlURVNUX0JMVCwKKwlURVNUX1JFTkRFUiwKKwlURVNUX0NPTlRFWFQsCisJVEVTVF9QQUdFX0ZM SVBfQU5EX01NQVBfQ1BVLAorCVRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVCwKKwlURVNUX1BB R0VfRkxJUF9BTkRfQkxULAorCVRFU1RfUEFHRV9GTElQX0FORF9SRU5ERVIsCisJVEVTVF9QQUdF X0ZMSVBfQU5EX0NPTlRFWFQsCisJVEVTVF9DVVJTT1JfTU9WRSwKKwlURVNUX1NQUklURSwKK307 CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZHJtX2ZkOworCWVudW0gdGVzdHMgdGVzdDsKKwlk cm1Nb2RlUmVzICpyZXNvdXJjZXM7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOworCWRybV9p bnRlbF9jb250ZXh0ICpjdHhbMl07CisJdWludDMyX3QgZGV2aWQ7CisJdWludDMyX3QgaGFuZGxl WzJdOworCXVpbnQzMl90IGNydGNfaWQ7CisJdWludDMyX3QgY3J0Y19pZHg7CisJdWludDMyX3Qg ZmJfaWRbM107CisJc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBjb25maWc7CisJaWd0 X2Rpc3BsYXlfdCBkaXNwbGF5OworCXN0cnVjdCBpZ3RfZmIgZmJbMl07CisJaWd0X3BsYW5lX3Qg KnBsYW5lWzJdOworfSBkYXRhX3Q7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0c19zdHIoZW51 bSB0ZXN0cyB0ZXN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdHNzW10gPSB7 CisJCVtURVNUX1BBR0VfRkxJUF0gPSAicGFnZV9mbGlwIiwKKwkJW1RFU1RfTU1BUF9DUFVdID0g Im1tYXBfY3B1IiwKKwkJW1RFU1RfTU1BUF9HVFRdID0gIm1tYXBfZ3R0IiwKKwkJW1RFU1RfTU1B UF9HVFRfTk9fQlVTWV0gPSAibW1hcF9ndHRfbm9fYnVzeSIsCisJCVtURVNUX01NQVBfR1RUX1dB SVRJTkdfTk9fQlVTWV0gPSAibW1hcF9ndHRfd2FpdGluZ19ub19idXN5IiwKKwkJW1RFU1RfU0VU RE9NQUlOX0ZMSVBfV0FJVF9XUklURV9HVFRdID0gInNldGRvbWFpbl9mbGlwX3dhaXRfd3JpdGVf Z3R0IiwKKwkJW1RFU1RfU0VURE9NQUlOX0ZMSVBfV0FJVF9XUklURV9DUFVdID0gInNldGRvbWFp bl9mbGlwX3dhaXRfd3JpdGVfY3B1IiwKKwkJW1RFU1RfQkxUXSA9ICJibHQiLAorCQlbVEVTVF9S RU5ERVJdID0gInJlbmRlciIsCisJCVtURVNUX0NPTlRFWFRdID0gImNvbnRleHQiLAorCQlbVEVT VF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVXSA9ICJwYWdlX2ZsaXBfYW5kX21tYXBfY3B1IiwKKwkJ W1RFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVF0gPSAicGFnZV9mbGlwX2FuZF9tbWFwX2d0dCIs CisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQkxUXSA9ICJwYWdlX2ZsaXBfYW5kX2JsdCIsCisJCVtU RVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSXSA9ICJwYWdlX2ZsaXBfYW5kX3JlbmRlciIsCisJCVtU RVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVF0gPSAicGFnZV9mbGlwX2FuZF9jb250ZXh0IiwKKwkJ W1RFU1RfQ1VSU09SX01PVkVdID0gImN1cnNvcl9tb3ZlIiwKKwkJW1RFU1RfU1BSSVRFXSA9ICJz cHJpdGUiLAorCX07CisKKwlyZXR1cm4gdGVzdHNzW3Rlc3RdOworfQorCitzdGF0aWMgdWludDMy X3QgY3JlYXRlX2ZiKGRhdGFfdCAqZGF0YSwKKwkJCSAgaW50IHcsIGludCBoLAorCQkJICBkb3Vi bGUgciwgZG91YmxlIGcsIGRvdWJsZSBiLAorCQkJICBzdHJ1Y3QgaWd0X2ZiICpmYikKK3sKKwl1 aW50MzJfdCBmYl9pZDsKKwljYWlyb190ICpjcjsKKworCWZiX2lkID0gaWd0X2NyZWF0ZV9mYihk YXRhLT5kcm1fZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB0cnVlLCBm Yik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEt PmRybV9mZCwgZmIpOworCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgdywgaCwgciwgZywgYik7 CisJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOworCWNhaXJvX2Rlc3Ryb3koY3Ip OworCisJcmV0dXJuIGZiX2lkOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfY3Vyc29yX2ZiKGRh dGFfdCAqZGF0YSwgc3RydWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3I7CisKKwlkYXRh LT5mYl9pZFsyXSA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCA2NCwgNjQsCisJCQkJICAg ICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIGZhbHNlLAorCQkJCSAgICAgICBmYik7CisJaWd0X2Fz c2VydChkYXRhLT5mYl9pZFsyXSk7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRy bV9mZCwgZmIpOworCWlndF9wYWludF9jb2xvcl9hbHBoYShjciwgMCwgMCwgNjQsIDY0LCAxLjAs IDEuMCwgMS4wLCAxLjApOworCWlndF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKK30K Kworc3RhdGljIGJvb2wKK2Nvbm5lY3Rvcl9zZXRfbW9kZShkYXRhX3QgKmRhdGEsIGRybU1vZGVN b2RlSW5mbyAqbW9kZSwgdWludDMyX3QgZmJfaWQpCit7CisJc3RydWN0IGttc3Rlc3RfY29ubmVj dG9yX2NvbmZpZyAqY29uZmlnID0gJmRhdGEtPmNvbmZpZzsKKwlpbnQgcmV0OworCisjaWYgMAor CWZwcmludGYoc3Rkb3V0LCAiVXNpbmcgcGlwZSAlYywgJWR4JWRcbiIsIHBpcGVfbmFtZShjb25m aWctPnBpcGUpLAorCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworI2VuZGlmCisK KwlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsCisJCQkgICAgIGNvbmZpZy0+Y3J0 Yy0+Y3J0Y19pZCwKKwkJCSAgICAgZmJfaWQsCisJCQkgICAgIDAsIDAsIC8qIHgsIHkgKi8KKwkJ CSAgICAgJmNvbmZpZy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfaWQsCisJCQkgICAgIDEsCisJCQkg ICAgIG1vZGUpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIGRpc3BsYXlfaW5pdChkYXRhX3QgKmRhdGEpCit7CisJaWd0X2Rpc3BsYXlfaW5p dCgmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZHJtX2ZkKTsKKwlkYXRhLT5yZXNvdXJjZXMgPSBkcm1N b2RlR2V0UmVzb3VyY2VzKGRhdGEtPmRybV9mZCk7CisJaWd0X2Fzc2VydChkYXRhLT5yZXNvdXJj ZXMpOworfQorCitzdGF0aWMgdm9pZCBkaXNwbGF5X2ZpbmkoZGF0YV90ICpkYXRhKQoreworCWln dF9kaXNwbGF5X2ZpbmkoJmRhdGEtPmRpc3BsYXkpOworCWRybU1vZGVTZXRDdXJzb3IoZGF0YS0+ ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLCAwLCAwLCAwKTsKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhk YXRhLT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgdm9pZCBmaWxsX2JsdChkYXRhX3QgKmRhdGEs IHVpbnQzMl90IGhhbmRsZSwgdW5zaWduZWQgY2hhciBjb2xvcikKK3sKKwlkcm1faW50ZWxfYm8g KmRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwKKwkJCQkJCSAgICBk YXRhLT5kcm1fZmQsCisJCQkJCQkgICAgIiIsIGhhbmRsZSk7CisJc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaDsKKworCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+ YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChiYXRjaCk7CisKKwlCRUdJTl9CQVRD SCg1KTsKKwlPVVRfQkFUQ0goQ09MT1JfQkxUX0NNRCk7CisJT1VUX0JBVENIKCgxIDw8IDI0KSB8 ICgweGYwIDw8IDE2KSB8IDApOworCU9VVF9CQVRDSCgxIDw8IDE2IHwgNCk7CisJT1VUX1JFTE9D KGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7 CisJT1VUX0JBVENIKGNvbG9yKTsKKwlBRFZBTkNFX0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1 ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7CisKKwln ZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNjcmF0 Y2hfYnVmX2luaXQoc3RydWN0IGlndF9idWYgKmJ1ZiwgZHJtX2ludGVsX2JvICpibykKK3sKKwli dWYtPmJvID0gYm87CisJYnVmLT5zdHJpZGUgPSA0MDk2OworCWJ1Zi0+dGlsaW5nID0gSTkxNV9U SUxJTkdfWDsKKwlidWYtPnNpemUgPSA0MDk2OworfQorCitzdGF0aWMgdm9pZCBleGVjX25vcChk YXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQp Cit7CisJZHJtX2ludGVsX2JvICpkc3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aDsKKworCWRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ ZHJtX2ZkLCAiIiwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGRzdCk7CisKKwliYXRjaCA9IGludGVs X2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3Nl cnQoYmF0Y2gpOworCisJLyogYWRkIHRoZSByZWxvYyB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCB3 aWxsIHRoaW5rIHdlIHdyaXRlIHRvIGRzdCAqLworCUJFR0lOX0JBVENIKDQpOworCU9VVF9CQVRD SChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlPVVRfQkFUQ0goTUlfTk9PUCk7CisJT1VUX1JFTE9D KGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7 CisJT1VUX0JBVENIKE1JX05PT1ApOworCUFEVkFOQ0VfQkFUQ0goKTsKKworCWludGVsX2JhdGNo YnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CisJaW50ZWxfYmF0Y2hi dWZmZXJfZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcmVuZGVyKGRhdGFfdCAq ZGF0YSwgdWludDMyX3QgaGFuZGxlLAorCQkJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsIHVu c2lnbmVkIGNoYXIgY29sb3IpCit7CisJZHJtX2ludGVsX2JvICpzcmMsICpkc3Q7CisJc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3QgaWd0X2J1ZiBzcmNfYnVmLCBkc3Rf YnVmOworCWNvbnN0IHVpbnQ4X3QgYnVmWzRdID0geyBjb2xvciwgY29sb3IsIGNvbG9yLCBjb2xv ciB9OworCWlndF9yZW5kZXJfY29weWZ1bmNfdCByZW5kZXJjb3B5ID0gaWd0X2dldF9yZW5kZXJf Y29weWZ1bmMoZGF0YS0+ZGV2aWQpOworCisJaWd0X3NraXBfb24oIXJlbmRlcmNvcHkpOworCisJ ZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oZGF0YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQs ICIiLCBoYW5kbGUpOworCWlndF9hc3NlcnQoZHN0KTsKKworCXNyYyA9IGRybV9pbnRlbF9ib19h bGxvYyhkYXRhLT5idWZtZ3IsICIiLCA0MDk2LCA0MDk2KTsKKwlpZ3RfYXNzZXJ0KHNyYyk7CisK KwlnZW1fd3JpdGUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmhhbmRsZSwgMCwgYnVmLCA0KTsKKworCXNj cmF0Y2hfYnVmX2luaXQoJnNyY19idWYsIHNyYyk7CisJc2NyYXRjaF9idWZfaW5pdCgmZHN0X2J1 ZiwgZHN0KTsKKworCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdy LCBkYXRhLT5kZXZpZCk7CisJaWd0X2Fzc2VydChiYXRjaCk7CisKKwlyZW5kZXJjb3B5KGJhdGNo LCBjb250ZXh0LAorCQkgICAmc3JjX2J1ZiwgMCwgMCwgMSwgMSwKKwkJICAgJmRzdF9idWYsIDAs IDApOworCisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7CisKKwlnZW1fYm9fYnVzeShk YXRhLT5kcm1fZmQsIGhhbmRsZSk7Cit9CisKK3N0YXRpYyBib29sIHBzcl9zaW5rX3N1cHBvcnQo ZGF0YV90ICpkYXRhKQoreworCWludCByZXQ7CisJRklMRSAqZmlsZTsKKwljaGFyIHN0cls0XTsK KworCWZpbGUgPSBpZ3RfZGVidWdmc19mb3BlbigiaTkxNV9lZHBfcHNyX3N0YXR1cyIsICJyIik7 CisJaWd0X3JlcXVpcmUoZmlsZSk7CisKKwlyZXQgPSBmc2NhbmYoZmlsZSwgIlNpbmtfU3VwcG9y dDogJXNcbiIsIHN0cik7CisJaWYgKHJldCA9PSAwKQorCSAgICBpZ3Rfc2tpcCgiaTkxNV9lZHBf cHNyX3N0YXR1cyBmb3JtYXQgbm90IHN1cHBvcnRlZCBieSB0aGlzIHRlc3QgY2FzZVxuIik7CisK KwlmY2xvc2UoZmlsZSk7CisJcmV0dXJuIHN0cmNtcChzdHIsICJ5ZXMiKSA9PSAwOworfQorCitz dGF0aWMgYm9vbCBwc3JfZW5hYmxlZChkYXRhX3QgKmRhdGEpCit7CisJaW50IHJldDsKKwlGSUxF ICpmaWxlOworCWNoYXIgc3RyWzRdOworCisJZmlsZSA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCJpOTE1 X2VkcF9wc3Jfc3RhdHVzIiwgInIiKTsKKwlpZ3RfcmVxdWlyZShmaWxlKTsKKworCXJldCA9IGZz Y2FuZihmaWxlLCAiU2lua19TdXBwb3J0OiAlc1xuIiwgc3RyKTsKKwlpZ3RfYXNzZXJ0KHJldCAh PSAwKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiU291cmNlX09LOiAlc1xuIiwgc3RyKTsKKwlp Z3RfYXNzZXJ0KHJldCAhPSAwKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiRW5hYmxlZDogJXNc biIsIHN0cik7CisJaWd0X2Fzc2VydChyZXQgIT0gMCk7CisKKwlmY2xvc2UoZmlsZSk7CisJcmV0 dXJuIHN0cmNtcChzdHIsICJ5ZXMiKSA9PSAwOworfQorCitzdGF0aWMgYm9vbCB3YWl0X3Bzcl9l bnRyeShkYXRhX3QgKmRhdGEsIGludCB0aW1lb3V0KQoreworCXdoaWxlICh0aW1lb3V0LS0pIHsK KwkJaWYgKHBzcl9lbmFibGVkKGRhdGEpKQorCQkJcmV0dXJuIHRydWU7CisJCXNsZWVwKDEpOwor CX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zaW5rX2NyYyhkYXRhX3Qg KmRhdGEsIGNoYXIgKmNyYykgeworCWludCByZXQ7CisJRklMRSAqZmlsZTsKKworCWZpbGUgPSBp Z3RfZGVidWdmc19mb3BlbigiaTkxNV9zaW5rX2NyY19lRFAxIiwgInIiKTsKKwlpZ3RfcmVxdWly ZShmaWxlKTsKKworCXJldCA9IGZzY2FuZihmaWxlLCAiJXNcbiIsIGNyYyk7CisJaWd0X3JlcXVp cmUocmV0ID4gMCk7CisKKwlmY2xvc2UoZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY3Jj KGRhdGFfdCAqZGF0YSkKK3sKKwl1aW50MzJfdCBoYW5kbGUgPSBkYXRhLT5oYW5kbGVbMF07CisJ Y2hhciByZWZfY3JjWzEyXTsKKwljaGFyIGNyY1sxMl07CisKKwlpZiAoZGF0YS0+dGVzdCA9PSBU RVNUX0NVUlNPUl9NT1ZFKSB7CisJCWlndF9hc3NlcnQoZHJtTW9kZVNldEN1cnNvcihkYXRhLT5k cm1fZmQsIGRhdGEtPmNydGNfaWQsCisJCQkJCSAgICBoYW5kbGUsIDY0LCA2NCkgPT0gMCk7CisJ CWlndF9hc3NlcnQoZHJtTW9kZU1vdmVDdXJzb3IoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lk LAorCQkJCQkgICAgIDEsIDEpID09IDApOworCX0KKworCXVzbGVlcCgzMDAwMDApOworCWlndF9h c3NlcnQod2FpdF9wc3JfZW50cnkoZGF0YSwgMTApKTsKKwlnZXRfc2lua19jcmMoZGF0YSwgcmVm X2NyYyk7CisKKwlzd2l0Y2ggKGRhdGEtPnRlc3QpIHsKKwkJdm9pZCAqcHRyOworCWNhc2UgVEVT VF9QQUdFX0ZMSVA6CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwg ZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09IDApOwor CQlicmVhazsKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0NQVToKKwkJaGFuZGxlID0g ZGF0YS0+aGFuZGxlWzFdOworCQlpZ3RfYXNzZXJ0KGRybU1vZGVQYWdlRmxpcChkYXRhLT5kcm1f ZmQsIGRhdGEtPmNydGNfaWQsCisJCQkJCSAgIGRhdGEtPmZiX2lkWzFdLCAwLCBOVUxMKSA9PSAw KTsKKwljYXNlIFRFU1RfTU1BUF9DUFU6CisJCXB0ciA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJt X2ZkLCBoYW5kbGUsIDQwOTYsIFBST1RfV1JJVEUpOworCQlnZW1fc2V0X2RvbWFpbihkYXRhLT5k cm1fZmQsIGhhbmRsZSwKKwkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9E T01BSU5fQ1BVKTsKKwkJc2xlZXAoMSk7CisJCW1lbXNldChwdHIsIDAsIDQpOworCQltdW5tYXAo cHRyLCA0MDk2KTsKKwkJc2xlZXAoMSk7CisJCWdlbV9zd19maW5pc2goZGF0YS0+ZHJtX2ZkLCBo YW5kbGUpOworCQlicmVhazsKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVDoKKwkJ aGFuZGxlID0gZGF0YS0+aGFuZGxlWzFdOworCQlpZ3RfYXNzZXJ0KGRybU1vZGVQYWdlRmxpcChk YXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCisJCQkJCSAgIGRhdGEtPmZiX2lkWzFdLCAwLCBO VUxMKSA9PSAwKTsKKwljYXNlIFRFU1RfTU1BUF9HVFQ6CisJCXB0ciA9IGdlbV9tbWFwX19ndHQo ZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQwOTYsIFBST1RfV1JJVEUpOworCQlnZW1fc2V0X2RvbWFp bihkYXRhLT5kcm1fZmQsIGhhbmRsZSwKKwkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJ OTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJbWVtc2V0KHB0ciwgMHhmZiwgNCk7CisJCW11bm1hcChw dHIsIDQwOTYpOworCQlnZW1fYm9fYnVzeShkYXRhLT5kcm1fZmQsIGhhbmRsZSk7CisJCWJyZWFr OworCWNhc2UgVEVTVF9NTUFQX0dUVF9OT19CVVNZOgorCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGRh dGEtPmRybV9mZCwgaGFuZGxlLCA0MDk2LCBQUk9UX1dSSVRFKTsKKwkJZ2VtX3NldF9kb21haW4o ZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsCisJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkx NV9HRU1fRE9NQUlOX0dUVCk7CisJCW1lbXNldChwdHIsIDB4ZmYsIDQpOworCQltdW5tYXAocHRy LCA0MDk2KTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX01NQVBfR1RUX1dBSVRJTkdfTk9fQlVTWToK KwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGhhbmRsZSwgNDA5NiwgUFJPVF9X UklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLAorCQkJICAgICAg IEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCQlmcHJpbnRmKHN0 ZG91dCwgIlNsZWVwaW5nIGZvciAxMCBzZWMuLi5cbiIpOworICAgICAgICAgICAgICAgIHNsZWVw KDEwKTsKKwkJbWVtc2V0KHB0ciwgMHhmZiwgNCk7CisJCW11bm1hcChwdHIsIDQwOTYpOworCQli cmVhazsKKwljYXNlIFRFU1RfU0VURE9NQUlOX0ZMSVBfV0FJVF9XUklURV9HVFQ6CisJCXB0ciA9 IGdlbV9tbWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIDQwOTYsIFBST1RfV1JJVEUpOwor CQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGhhbmRsZSwKKwkJCSAgICAgICBJOTE1X0dF TV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJZnByaW50ZihzdGRvdXQsICJT bGVlcGluZyBmb3IgMTAgc2VjLi4uXG4iKTsKKwkJc2xlZXAoMTApOworCQlmaWxsX2JsdChkYXRh LCBoYW5kbGUsIDB4ZmYpOworCQlpZ3RfYXNzZXJ0KHdhaXRfcHNyX2VudHJ5KGRhdGEsIDEwKSk7 CisJCWdldF9zaW5rX2NyYyhkYXRhLCByZWZfY3JjKTsKKwkJZnByaW50ZihzdGRvdXQsICJTbGVl cGluZyBmb3IgMTAgc2VjLi4uXG4iKTsKKwkJc2xlZXAoMTApOworCQltZW1zZXQocHRyLCAweGZm LCA0KTsKKwkJbXVubWFwKHB0ciwgNDA5Nik7CisJCWJyZWFrOworCWNhc2UgVEVTVF9TRVRET01B SU5fRkxJUF9XQUlUX1dSSVRFX0NQVToKKwkJcHRyID0gZ2VtX21tYXBfX2NwdShkYXRhLT5kcm1f ZmQsIGhhbmRsZSwgNDA5NiwgUFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRy bV9mZCwgaGFuZGxlLAorCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RP TUFJTl9DUFUpOworCQlmcHJpbnRmKHN0ZG91dCwgIlNsZWVwaW5nIGZvciAxMCBzZWMuLi5cbiIp OworCQlzbGVlcCgxMCk7CisJCWZpbGxfYmx0KGRhdGEsIGhhbmRsZSwgMHhmZik7CisJCWlndF9h c3NlcnQod2FpdF9wc3JfZW50cnkoZGF0YSwgMTApKTsKKwkJZ2V0X3NpbmtfY3JjKGRhdGEsIHJl Zl9jcmMpOworCQlmcHJpbnRmKHN0ZG91dCwgIlNsZWVwaW5nIGZvciAxMCBzZWMuLi5cbiIpOwor CQlzbGVlcCgxMCk7CisJCW1lbXNldChwdHIsIDB4ZmYsIDQpOworCQltdW5tYXAocHRyLCA0MDk2 KTsKKwkJZ2VtX3N3X2ZpbmlzaChkYXRhLT5kcm1fZmQsIGhhbmRsZSk7CisJCWJyZWFrOworCWNh c2UgVEVTVF9CTFQ6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfQkxUOgorCQlmaWxsX2JsdChk YXRhLCBoYW5kbGUsIDB4ZmYpOworCQlicmVhazsKKwljYXNlIFRFU1RfUkVOREVSOgorCWNhc2Ug VEVTVF9DT05URVhUOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX1JFTkRFUjoKKwljYXNlIFRF U1RfUEFHRV9GTElQX0FORF9DT05URVhUOgorCQlmaWxsX3JlbmRlcihkYXRhLCBoYW5kbGUsCisJ CQkgICAgKGRhdGEtPnRlc3QgPT0gVEVTVF9DT05URVhUIHx8CisJCQkgICAgIGRhdGEtPnRlc3Qg PT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpID8KKwkJCSAgICBkYXRhLT5jdHhbMV0gOiBO VUxMLCAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX0NVUlNPUl9NT1ZFOgorCQlpZ3RfYXNz ZXJ0KGRybU1vZGVNb3ZlQ3Vyc29yKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwgMSwgMikg PT0gMCk7CisJCWJyZWFrOworCWNhc2UgVEVTVF9TUFJJVEU6CisJCWlndF9wbGFuZV9zZXRfZmIo ZGF0YS0+cGxhbmVbMF0sICZkYXRhLT5mYlswXSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0 YS0+ZGlzcGxheSk7CisJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbMV0sICZkYXRhLT5m YlsxXSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJCWJyZWFrOwor CX0KKworCWlndF93YWl0X2Zvcl92YmxhbmsoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkeCk7 CisKKwlnZXRfc2lua19jcmMoZGF0YSwgY3JjKTsKKwlpZ3RfYXNzZXJ0KHN0cmNtcChyZWZfY3Jj LCBjcmMpICE9IDApOworfQorCitzdGF0aWMgYm9vbCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRh LCB1aW50MzJfdCBjb25uZWN0b3JfaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGttc3Rlc3Rf Z2V0X2Nvbm5lY3Rvcl9jb25maWcoZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICBjb25uZWN0b3JfaWQs CisJCQkJCSAgIDEgPDwgZGF0YS0+Y3J0Y19pZHgsCisJCQkJCSAgICZkYXRhLT5jb25maWcpOwor CWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWRhdGEtPmZiX2lkWzBdID0gY3JlYXRlX2Zi KGRhdGEsCisJCQkJICAgZGF0YS0+Y29uZmlnLmRlZmF1bHRfbW9kZS5oZGlzcGxheSwKKwkJCQkg ICBkYXRhLT5jb25maWcuZGVmYXVsdF9tb2RlLnZkaXNwbGF5LAorCQkJCSAgIDAuMCwgMS4wLCAw LjAsICZkYXRhLT5mYlswXSk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pZFswXSk7CisKKwlpZiAo ZGF0YS0+dGVzdCA9PSBURVNUX0NVUlNPUl9NT1ZFKQorCQljcmVhdGVfY3Vyc29yX2ZiKGRhdGEs ICZkYXRhLT5mYlswXSk7CisKKwlkYXRhLT5mYl9pZFsxXSA9IGNyZWF0ZV9mYihkYXRhLAorCQkJ CSAgIGRhdGEtPmNvbmZpZy5kZWZhdWx0X21vZGUuaGRpc3BsYXksCisJCQkJICAgZGF0YS0+Y29u ZmlnLmRlZmF1bHRfbW9kZS52ZGlzcGxheSwKKwkJCQkgICAxLjAsIDAuMCwgMC4wLCAmZGF0YS0+ ZmJbMV0pOworCWlndF9hc3NlcnQoZGF0YS0+ZmJfaWRbMV0pOworCisJZGF0YS0+aGFuZGxlWzBd ID0gZGF0YS0+ZmJbMF0uZ2VtX2hhbmRsZTsKKwlkYXRhLT5oYW5kbGVbMV0gPSBkYXRhLT5mYlsx XS5nZW1faGFuZGxlOworCisJLyogc2Nhbm91dCA9IGZiWzFdICovCisJY29ubmVjdG9yX3NldF9t b2RlKGRhdGEsICZkYXRhLT5jb25maWcuZGVmYXVsdF9tb2RlLAorCQkJICAgZGF0YS0+ZmJfaWRb MV0pOworCisJaWYgKGRhdGEtPnRlc3QgPT0gVEVTVF9DT05URVhUIHx8CisJICAgIGRhdGEtPnRl c3QgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJZGF0YS0+Y3R4WzBdID0gZHJt X2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShkYXRhLT5idWZtZ3IpOworCQlpZ3RfcmVxdWlyZShk YXRhLT5jdHhbMF0pOworCQlkYXRhLT5jdHhbMV0gPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3Jl YXRlKGRhdGEtPmJ1Zm1ncik7CisJCWlndF9yZXF1aXJlKGRhdGEtPmN0eFsxXSk7CisKKwkJZXhl Y19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMV0pOworCQlleGVjX25vcChk YXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFswXSk7CisJCWV4ZWNfbm9wKGRhdGEsIGRh dGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzFdKTsKKwkJZXhlY19ub3AoZGF0YSwgZGF0YS0+aGFu ZGxlWzBdLCBkYXRhLT5jdHhbMF0pOworCX0KKworCS8qIHNjYW5vdXQgPSBmYlswXSAqLworCWNv bm5lY3Rvcl9zZXRfbW9kZShkYXRhLCAmZGF0YS0+Y29uZmlnLmRlZmF1bHRfbW9kZSwKKwkJCSAg IGRhdGEtPmZiX2lkWzBdKTsKKworCWlmIChkYXRhLT50ZXN0ID09IFRFU1RfQ09OVEVYVCB8fAor CSAgICBkYXRhLT50ZXN0ID09IFRFU1RfUEFHRV9GTElQX0FORF9DT05URVhUKSB7CisJCWV4ZWNf bm9wKGRhdGEsIGRhdGEtPmZiWzBdLmdlbV9oYW5kbGUsIGRhdGEtPmN0eFswXSk7CisJfQorCisJ a21zdGVzdF9mcmVlX2Nvbm5lY3Rvcl9jb25maWcoJmRhdGEtPmNvbmZpZyk7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2NydGMoZGF0YV90ICpkYXRhKQoreworCWlm IChkYXRhLT50ZXN0ID09IFRFU1RfQ09OVEVYVCB8fAorCSAgICBkYXRhLT50ZXN0ID09IFRFU1Rf UEFHRV9GTElQX0FORF9DT05URVhUKSB7CisJCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95 KGRhdGEtPmN0eFswXSk7CisJCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGRhdGEtPmN0 eFsxXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X3Nwcml0ZShkYXRhX3QgKmRhdGEpCit7 CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9vdXRwdXRf dCAqb3V0cHV0OworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKworCWlndF9za2lwX29uKElTX0hB U1dFTEwoZGF0YS0+ZGV2aWQpKTsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxh eSwgb3V0cHV0KSB7CisJCWRybU1vZGVDb25uZWN0b3JQdHIgYyA9IG91dHB1dC0+Y29uZmlnLmNv bm5lY3RvcjsKKworCQlpZiAoYy0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9S X2VEUCB8fAorCQkgICAgYy0+Y29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQpCisJCQlj b250aW51ZTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOworCisJ CW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwkJaWd0X2NyZWF0ZV9jb2xv cl9mYihkYXRhLT5kcm1fZmQsCisJCQkJICAgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSwKKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdHJ1ZSwgLyogdGlsZWQgKi8KKwkJCQkg ICAgMC4wLCAxLjAsIDAuMCwKKwkJCQkgICAgJmRhdGEtPmZiWzBdKTsKKworCQlpZ3RfY3JlYXRl X2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgbW9kZS0+aGRpc3BsYXkvMiwgbW9kZS0+ dmRpc3BsYXkvMiwKKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdHJ1ZSwgLyogdGlsZWQg Ki8KKwkJCQkgICAgMS4wLCAwLjAsIDAuMCwKKwkJCQkgICAgJmRhdGEtPmZiWzFdKTsKKworCQlk YXRhLT5wbGFuZVswXSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgMCk7CisJCWRhdGEt PnBsYW5lWzFdID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCAxKTsKKworCQl0ZXN0X2Ny YyhkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGRhdGFfdCAqZGF0YSkKK3sK KwlpbnQgaSwgbjsKKwlkcm1Nb2RlQ29ubmVjdG9yUHRyIGM7CisJLyogQmF5dHJhaWwgc3VwcG9y dHMgcGVyLXBpcGUgUFNSIGNvbmZpZ3VyYXRpb24sIGhvd2V2ZXIgUFNSIG9uCisJICogUElQRV9C IGlzbid0IHdvcmtpbmcgcHJvcGVybHkuIFNvIGxldCdzIGtlZXAgaXQgZGlzYWJsZWQgZm9yIG5v dy4KKwkgKiBjcnRjcyA9IElTX1ZBTExFWVZJRVcoZGF0YS0+ZGV2aWQpPyAyIDogMTsgKi8KKwlp bnQgY3J0Y3MgPSAxOworCisJaWYgKGRhdGEtPnRlc3QgPT0gVEVTVF9TUFJJVEUpIHsKKwkJdGVz dF9zcHJpdGUoZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ cmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJdWludDMyX3QgY29ubmVjdG9y X2lkID0gZGF0YS0+cmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldOworCQljID0gZHJtTW9kZUdldENv bm5lY3RvcihkYXRhLT5kcm1fZmQsIGNvbm5lY3Rvcl9pZCk7CisKKwkJaWYgKGMtPmNvbm5lY3Rv cl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAgfHwKKwkJICAgIGMtPmNvbm5lY3Rpb24g IT0gRFJNX01PREVfQ09OTkVDVEVEKQorCQkJY29udGludWU7CisJCWZvciAobiA9IDA7IG4gPCBj cnRjczsgbisrKSB7CisJCQlkYXRhLT5jcnRjX2lkeCA9IG47CisJCQlkYXRhLT5jcnRjX2lkID0g ZGF0YS0+cmVzb3VyY2VzLT5jcnRjc1tuXTsKKworCQkJaWYgKCFwcmVwYXJlX2NydGMoZGF0YSwg Y29ubmVjdG9yX2lkKSkKKwkJCQljb250aW51ZTsKKworCQkJdGVzdF9jcmMoZGF0YSk7CisKKwkJ CWZpbmlzaF9jcnRjKGRhdGEpOworCQl9CisJfQorfQorCitpZ3RfbWFpbgoreworCWRhdGFfdCBk YXRhID0ge307CisJZW51bSB0ZXN0cyB0ZXN0OworCisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigp OworCisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueSgpOworCQlp Z3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2Ry bV9kZXZpZChkYXRhLmRybV9mZCk7CisKKwkJaWd0X2Fzc2VydChwc3Jfc2lua19zdXBwb3J0KCZk YXRhKSk7CisKKwkJZGF0YS5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEu ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLmJ1Zm1ncik7CisJCWRybV9pbnRlbF9i dWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShkYXRhLmJ1Zm1ncik7CisKKwkJZGlzcGxheV9pbml0KCZk YXRhKTsKKwl9CisKKwlmb3IgKHRlc3QgPSBURVNUX1BBR0VfRkxJUDsgdGVzdCA8PSBURVNUX1NQ UklURTsgdGVzdCsrKSB7CisJCWlndF9zdWJ0ZXN0X2YoIiVzIiwgdGVzdHNfc3RyKHRlc3QpKSB7 CisJCQlkYXRhLnRlc3QgPSB0ZXN0OworCQkJcnVuX3Rlc3QoJmRhdGEpOworCQl9CisJfQorCisJ aWd0X2ZpeHR1cmUgeworCQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koZGF0YS5idWZtZ3IpOwor CQlkaXNwbGF5X2ZpbmkoJmRhdGEpOworCX0KK30KLS0gCjEuOS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=