From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 838E36ED01 for ; Thu, 16 Jan 2020 13:18:58 +0000 (UTC) From: Kunal Joshi Date: Thu, 16 Jan 2020 11:49:58 +0530 Message-Id: <1579155598-4024-3-git-send-email-kunal1.joshi@intel.com> In-Reply-To: <1579155598-4024-1-git-send-email-kunal1.joshi@intel.com> References: <1579155598-4024-1-git-send-email-kunal1.joshi@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 2/2] tests/kms_color_chamelium: add subtests to validate color. 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: Kunal Joshi , ville.syrjala@intel.com, petri.latvala@intel.com, daniel.vetter@intel.com List-ID: VG8gdmFsaWRhdGUgY29sb3Igc3VidGVzdHMgdXNpbmcgY2hhbWVsaXVtLCBzdWJ0ZXN0cyBtb2Rp ZmllZAp0byBkbyBmcmFtZSBkdW1wIGNvbXBhcmlzb24gaW5zdGVhZCBvZiBjcmMgY29tcGFyaXNv bi4KVGVzdHMgcmVxdWlyZSBjaGFtZWxpdW0gYW5kIHdpbGwgdmFsaWRhdGUgY29sb3IgZmVhdHVy ZXMKYXQgcGlwZSBsZXZlbC4KCih2MikKICAgICAgICBDb21wYXJpbmcgZnJhbWVkdW1wIHdpdGgg ZnJhbWVidWZmZXIgcmVmZXJlbmNlIGluc3RlYWQgb2YKICAgICAgICBjb21wYXJpbmcgdHdvIGZy YW1lZHVtcC4KClNpZ25lZC1vZmYtYnk6IEt1bmFsIEpvc2hpIDxrdW5hbDEuam9zaGlAaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBTd2F0aSBTaGFybWEgPHN3YXRpMi5zaGFybWFAaW50ZWwuY29t PgpTdWdnZXN0ZWQtYnk6IFVtYSBTaGFua2FyIDx1bWEuc2hhbmthckBpbnRlbC5jb20+Ci0tLQog dGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgICAgMSArCiB0ZXN0cy9rbXNfY29sb3JfY2hh bWVsaXVtLmMgfCAxMTMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgIDEgKwogMyBmaWxlcyBjaGFuZ2Vk LCAxMTMyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfY29sb3Jf Y2hhbWVsaXVtLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2Vm aWxlLmFtCmluZGV4IGZjMzA1MjQuLjUwZmM5ODkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxl LmFtCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0xMyw2ICsxMyw3IEBAIGVuZGlmCiBpZiBI QVZFX0NIQU1FTElVTQogVEVTVFNfcHJvZ3MgKz0gXAogCWttc19jaGFtZWxpdW0gXAorCWttc19j b2xvcl9jaGFtZWxpdW0gXAogCSQoTlVMTCkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2tt c19jb2xvcl9jaGFtZWxpdW0uYyBiL3Rlc3RzL2ttc19jb2xvcl9jaGFtZWxpdW0uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBjNmM1Ci0tLSAvZGV2L251bGwKKysrIGIv dGVzdHMva21zX2NvbG9yX2NoYW1lbGl1bS5jCkBAIC0wLDAgKzEsMTEzMCBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtdGVzdC5o IgorI2luY2x1ZGUgImlndC5oIgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBDb2xvciBG ZWF0dXJlcyBhdCBQaXBlIGxldmVsIik7CisKKy8qIEludGVybmFsICovCit0eXBlZGVmIHN0cnVj dCB7CisJZG91YmxlIHIsIGcsIGI7Cit9IGNvbG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlp bnQgZHJtX2ZkOworCXVpbnQzMl90IGRldmlkOworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKKwor CXVpbnQzMl90IGNvbG9yX2RlcHRoOworCXVpbnQ2NF90IGRlZ2FtbWFfbHV0X3NpemU7CisJdWlu dDY0X3QgZ2FtbWFfbHV0X3NpemU7CisKKwlzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW07CisJ c3RydWN0IGNoYW1lbGl1bV9wb3J0ICoqcG9ydHM7CisJaW50IHBvcnRfY291bnQ7Cit9IGRhdGFf dDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBzaXplOworCWRvdWJsZSBjb2VmZnNbXTsKK30g Z2FtbWFfbHV0X3Q7CisKK3N0YXRpYyB2b2lkIHBhaW50X2dyYWRpZW50X3JlY3RhbmdsZXMoZGF0 YV90ICpkYXRhLAorCQkJCSAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCQkgICAgICBj b2xvcl90ICpjb2xvcnMsCisJCQkJICAgICAgc3RydWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9f dCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlpbnQgaSwgbCA9 IG1vZGUtPmhkaXNwbGF5IC8gMzsKKwlpbnQgcm93c19yZW1haW5pbmcgPSBtb2RlLT5oZGlzcGxh eSAlIDM7CisKKwkvKiBQYWludCAzIGdyYWRpZW50IHJlY3RhbmdsZXMgd2l0aCByZWQvZ3JlZW4v Ymx1ZSBiZXR3ZWVuIDEuMCBhbmQKKwkgKiAwLjUuIFdlIHdhbnQgdG8gYXZvaWQgMCBzbyBlYWNo IG1heCBMVVRzIG9ubHkgYWZmZWN0IHRoZWlyIG93bgorCSAqIHJlY3RhbmdsZS4KKwkgKi8KKwlm b3IgKGkgPSAwIDsgaSA8IDM7IGkrKykgeworCQlpZ3RfcGFpbnRfY29sb3JfZ3JhZGllbnRfcmFu Z2UoY3IsIGkgKiBsLCAwLCBsLCBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgIGNvbG9yc1tp XS5yICE9IDAgPyAwLjIgOiAwLAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcgIT0gMCA/IDAuMiA6 IDAsCisJCQkJCSAgICAgICBjb2xvcnNbaV0uYiAhPSAwID8gMC4yIDogMCwKKwkJCQkJICAgICAg IGNvbG9yc1tpXS5yLAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcsCisJCQkJCSAgICAgICBjb2xv cnNbaV0uYik7CisJfQorCisJaWYgKHJvd3NfcmVtYWluaW5nID4gMCkKKwkJaWd0X3BhaW50X2Nv bG9yX2dyYWRpZW50X3JhbmdlKGNyLCBpICogbCwgMCwgcm93c19yZW1haW5pbmcsCisJCQkJCSAg ICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgIGNvbG9yc1tpLTFdLnIgIT0gMCA/IDAu MiA6IDAsCisJCQkJCSAgICAgICBjb2xvcnNbaS0xXS5nICE9IDAgPyAwLjIgOiAwLAorCQkJCQkg ICAgICAgY29sb3JzW2ktMV0uYiAhPSAwID8gMC4yIDogMCwKKwkJCQkJICAgICAgIGNvbG9yc1tp LTFdLnIsCisJCQkJCSAgICAgICBjb2xvcnNbaS0xXS5nLAorCQkJCQkgICAgICAgY29sb3JzW2kt MV0uYik7CisKKwlpZ3RfcHV0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiLCBjcik7Cit9CisK K3N0YXRpYyB2b2lkIHBhaW50X3JlY3RhbmdsZXMoZGF0YV90ICpkYXRhLAorCQkJICAgICBkcm1N b2RlTW9kZUluZm8gKm1vZGUsCisJCQkgICAgIGNvbG9yX3QgKmNvbG9ycywKKwkJCSAgICAgc3Ry dWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRh LT5kcm1fZmQsIGZiKTsKKwlpbnQgaSwgbCA9IG1vZGUtPmhkaXNwbGF5IC8gMzsKKwlpbnQgcm93 c19yZW1haW5pbmcgPSBtb2RlLT5oZGlzcGxheSAlIDM7CisKKwkvKiBQYWludCAzIHNvbGlkIHJl Y3RhbmdsZXMuICovCisJZm9yIChpID0gMCA7IGkgPCAzOyBpKyspIHsKKwkJaWd0X3BhaW50X2Nv bG9yKGNyLCBpICogbCwgMCwgbCwgbW9kZS0+dmRpc3BsYXksCisJCQkJY29sb3JzW2ldLnIsIGNv bG9yc1tpXS5nLCBjb2xvcnNbaV0uYik7CisJfQorCisJaWYgKHJvd3NfcmVtYWluaW5nID4gMCkK KwkJaWd0X3BhaW50X2NvbG9yKGNyLCBpICogbCwgMCwgcm93c19yZW1haW5pbmcsIG1vZGUtPnZk aXNwbGF5LAorCQkJCWNvbG9yc1tpLTFdLnIsIGNvbG9yc1tpLTFdLmcsIGNvbG9yc1tpLTFdLmIp OworCisJaWd0X3B1dF9jYWlyb19jdHgoZGF0YS0+ZHJtX2ZkLCBmYiwgY3IpOworfQorCitzdGF0 aWMgZ2FtbWFfbHV0X3QgKmFsbG9jX2x1dChpbnQgbHV0X3NpemUpCit7CisJZ2FtbWFfbHV0X3Qg KmdhbW1hOworCisJaWd0X2Fzc2VydF9sdCgwLCBsdXRfc2l6ZSk7CisKKwlnYW1tYSA9IG1hbGxv YyhzaXplb2YoKmdhbW1hKSArIGx1dF9zaXplICogc2l6ZW9mKGdhbW1hLT5jb2VmZnNbMF0pKTsK KwlpZ3RfYXNzZXJ0KGdhbW1hKTsKKwlnYW1tYS0+c2l6ZSA9IGx1dF9zaXplOworCisJcmV0dXJu IGdhbW1hOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2x1dChnYW1tYV9sdXRfdCAqZ2FtbWEpCit7 CisJaWYgKCFnYW1tYSkKKwkJcmV0dXJuOworCisJZnJlZShnYW1tYSk7Cit9CisKK3N0YXRpYyBn YW1tYV9sdXRfdCAqZ2VuZXJhdGVfdGFibGUoaW50IGx1dF9zaXplLCBkb3VibGUgZXhwKQorewor CWdhbW1hX2x1dF90ICpnYW1tYSA9IGFsbG9jX2x1dChsdXRfc2l6ZSk7CisJaW50IGk7CisKKwln YW1tYS0+Y29lZmZzWzBdID0gMC4wOworCWZvciAoaSA9IDE7IGkgPCBsdXRfc2l6ZTsgaSsrKQor CQlnYW1tYS0+Y29lZmZzW2ldID0gcG93KGkgKiAxLjAgLyAobHV0X3NpemUgLSAxKSwgZXhwKTsK KworCXJldHVybiBnYW1tYTsKK30KKworc3RhdGljIGdhbW1hX2x1dF90ICpnZW5lcmF0ZV90YWJs ZV9tYXgoaW50IGx1dF9zaXplKQoreworCWdhbW1hX2x1dF90ICpnYW1tYSA9IGFsbG9jX2x1dChs dXRfc2l6ZSk7CisJaW50IGk7CisKKwlnYW1tYS0+Y29lZmZzWzBdID0gMC4wOworCWZvciAoaSA9 IDE7IGkgPCBsdXRfc2l6ZTsgaSsrKQorCQlnYW1tYS0+Y29lZmZzW2ldID0gMS4wOworCisJcmV0 dXJuIGdhbW1hOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb2xvcl9sdXQgKmNvZWZmc190b19s dXQoZGF0YV90ICpkYXRhLAorCQkJCQkgICBjb25zdCBnYW1tYV9sdXRfdCAqZ2FtbWEsCisJCQkJ CSAgIHVpbnQzMl90IGNvbG9yX2RlcHRoLAorCQkJCQkgICBpbnQgb2ZmKQoreworCXN0cnVjdCBk cm1fY29sb3JfbHV0ICpsdXQ7CisJaW50IGksIGx1dF9zaXplID0gZ2FtbWEtPnNpemU7CisJdWlu dDMyX3QgbWF4X3ZhbHVlID0gKDEgPDwgMTYpIC0gMTsKKwl1aW50MzJfdCBtYXNrOworCisJaWYg KGlzX2k5MTVfZGV2aWNlKGRhdGEtPmRybV9mZCkpCisJCW1hc2sgPSAoKDEgPDwgY29sb3JfZGVw dGgpIC0gMSkgPDwgODsKKwllbHNlCisJCW1hc2sgPSBtYXhfdmFsdWU7CisKKwlsdXQgPSBtYWxs b2Moc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIGx1dF9zaXplKTsKKworCWlmIChJU19D SEVSUllWSUVXKGRhdGEtPmRldmlkKSkKKwkJbHV0X3NpemUgLT0gMTsKKwlmb3IgKGkgPSAwOyBp IDwgbHV0X3NpemU7IGkrKykgeworCQl1aW50MzJfdCB2ID0gKGdhbW1hLT5jb2VmZnNbaV0gKiBt YXhfdmFsdWUpOworCisJCXYgJj0gbWFzazsKKworCQlsdXRbaV0ucmVkID0gdjsKKwkJbHV0W2ld LmdyZWVuID0gdjsKKwkJbHV0W2ldLmJsdWUgPSB2OworCX0KKworCWlmIChJU19DSEVSUllWSUVX KGRhdGEtPmRldmlkKSkKKwkJbHV0W2x1dF9zaXplXS5yZWQgPQorCQkJbHV0W2x1dF9zaXplXS5n cmVlbiA9CisJCQlsdXRbbHV0X3NpemVdLmJsdWUgPSBsdXRbbHV0X3NpemUgLSAxXS5yZWQ7CisK KwlyZXR1cm4gbHV0OworfQorCitzdGF0aWMgdm9pZCBzZXRfZGVnYW1tYShkYXRhX3QgKmRhdGEs CisJCQlpZ3RfcGlwZV90ICpwaXBlLAorCQkJY29uc3QgZ2FtbWFfbHV0X3QgKmdhbW1hKQorewor CXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBjb2VmZnNfdG9fbHV0KGRhdGEsIGdhbW1hLAor CQkJCQkJICBkYXRhLT5jb2xvcl9kZXB0aCwgMCk7CisKKwlmcmVlKGx1dCk7Cit9CisKK3N0YXRp YyB2b2lkIHNldF9nYW1tYShkYXRhX3QgKmRhdGEsCisJCSAgICAgIGlndF9waXBlX3QgKnBpcGUs CisJCSAgICAgIGNvbnN0IGdhbW1hX2x1dF90ICpnYW1tYSkKK3sKKwlzaXplX3Qgc2l6ZSA9IHNp emVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBnYW1tYS0+c2l6ZTsKKwlzdHJ1Y3QgZHJtX2Nv bG9yX2x1dCAqbHV0ID0gY29lZmZzX3RvX2x1dChkYXRhLCBnYW1tYSwKKwkJCQkJCSAgZGF0YS0+ Y29sb3JfZGVwdGgsIDApOworCisJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUs IElHVF9DUlRDX0dBTU1BX0xVVCwgbHV0LCBzaXplKTsKKworCWZyZWUobHV0KTsKK30KKworc3Rh dGljIHZvaWQgc2V0X2N0bShpZ3RfcGlwZV90ICpwaXBlLCBjb25zdCBkb3VibGUgKmNvZWZmaWNp ZW50cykKK3sKKwlzdHJ1Y3QgZHJtX2NvbG9yX2N0bSBjdG07CisJaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjdG0ubWF0cml4KTsgaSsrKSB7CisJCWlmIChjb2VmZmljaWVu dHNbaV0gPCAwKSB7CisJCQljdG0ubWF0cml4W2ldID0KKwkJCQkoaW50NjRfdCkgKC1jb2VmZmlj aWVudHNbaV0gKgorCQkJCSgoaW50NjRfdCkgMUwgPDwgMzIpKTsKKwkJCWN0bS5tYXRyaXhbaV0g fD0gMVVMTCA8PCA2MzsKKwkJfSBlbHNlCisJCQljdG0ubWF0cml4W2ldID0KKwkJCQkoaW50NjRf dCkgKGNvZWZmaWNpZW50c1tpXSAqCisJCQkJKChpbnQ2NF90KSAxTCA8PCAzMikpOworCX0KKwor CWlndF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sICZjdG0s IHNpemVvZihjdG0pKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9wcm9wKGlndF9waXBlX3Qg KnBpcGUsIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCkKK3sKKwlpZiAoaWd0 X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIHByb3ApKQorCQlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9w cm9wX2Jsb2IocGlwZSwgcHJvcCwgTlVMTCwgMCk7Cit9CisKKyNkZWZpbmUgZGlzYWJsZV9kZWdh bW1hKHBpcGUpIGRpc2FibGVfcHJvcChwaXBlLCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCkKKyNkZWZp bmUgZGlzYWJsZV9nYW1tYShwaXBlKSBkaXNhYmxlX3Byb3AocGlwZSwgSUdUX0NSVENfR0FNTUFf TFVUKQorI2RlZmluZSBkaXNhYmxlX2N0bShwaXBlKSBkaXNhYmxlX3Byb3AocGlwZSwgSUdUX0NS VENfQ1RNKQorCisvKgorICogRHJhdyAzIGdyYWRpZW50IHJlY3RhbmdsZXMgaW4gcmVkLCBncmVl biBhbmQgYmx1ZSwgd2l0aCBhIG1heGVkIG91dAorICogZGVnYW1tYSBMVVQgYW5kIHZlcmlmeSB3 ZSBoYXZlIHRoZSBzYW1lIGZyYW1lIGR1bXAgYXMgZHJhd2luZyBzb2xpZCBjb2xvcgorICogcmVj dGFuZ2xlcyB3aXRoIGxpbmVhciBkZWdhbW1hIExVVC4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9w aXBlX2RlZ2FtbWEoZGF0YV90ICpkYXRhLAorCQkJICAgICAgaWd0X3BsYW5lX3QgKnByaW1hcnkp Cit7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZ2FtbWFfbHV0X3QgKmRlZ2FtbWFfbGluZWFy LCAqZGVnYW1tYV9mdWxsOworCWdhbW1hX2x1dF90ICpnYW1tYV9saW5lYXI7CisJY29sb3JfdCBy ZWRfZ3JlZW5fYmx1ZVtdID0geworCQl7IDEuMCwgMC4wLCAwLjAgfSwKKwkJeyAwLjAsIDEuMCwg MC4wIH0sCisJCXsgMC4wLCAwLjAsIDEuMCB9CisJfTsKKworCWludCBpOworCXN0cnVjdCBjaGFt ZWxpdW1fcG9ydCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07CisJYm9vbCB2YWxp ZF9vdXRwdXQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50OyBp KyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFtZWxpdW1fcG9ydF9n ZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFz X3Byb3AocHJpbWFyeS0+cGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQpKTsKKwlpZ3RfcmVxdWly ZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocHJpbWFyeS0+cGlwZSwgSUdUX0NSVENfR0FNTUFfTFVU KSk7CisKKwlkZWdhbW1hX2xpbmVhciA9IGdlbmVyYXRlX3RhYmxlKGRhdGEtPmRlZ2FtbWFfbHV0 X3NpemUsIDEuMCk7CisJZGVnYW1tYV9mdWxsID0gZ2VuZXJhdGVfdGFibGVfbWF4KGRhdGEtPmRl Z2FtbWFfbHV0X3NpemUpOworCisJZ2FtbWFfbGluZWFyID0gZ2VuZXJhdGVfdGFibGUoZGF0YS0+ Z2FtbWFfbHV0X3NpemUsIDEuMCk7CisKKwlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZSgm ZGF0YS0+ZGlzcGxheSwKKwkJCQkgICAgICBwcmltYXJ5LT5waXBlLT5waXBlLAorCQkJCSAgICAg IG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJCXN0cnVjdCBpZ3RfZmIgZmJf bW9kZXNldCwgZmIsIGZicmVmOworCQlzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmZyYW1l X2Z1bGxjb2xvcnM7CisJCWludCBmYl9pZCwgZmJfbW9kZXNldF9pZCwgZmJyZWZfaWQ7CisKKwkJ Zm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCXZhbGlkX291dHB1dCB8 PQorCQkJCShzdHJjbXAob3V0cHV0LT5uYW1lLCBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApOwor CQlpZiAoIXZhbGlkX291dHB1dCkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQlmb3IgKGkgPSAw OyBpIDwgZGF0YS0+cG9ydF9jb3VudDsgaSsrKQorCQkJCWlmIChzdHJjbXAob3V0cHV0LT5uYW1l LAorCQkJCQkgICBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApCisJCQkJCXBvcnQgPSBkYXRhLT5w b3J0c1tpXTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcHJpbWFyeS0+cGlwZS0+ cGlwZSk7CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwkJLyogQ3Jl YXRlIGEgZnJhbWVidWZmZXIgYXQgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gKi8KKwkJZmJfaWQg PSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwK KwkJCQkgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LAorCQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJICAgICAgJmZiKTsK KwkJaWd0X2Fzc2VydChmYl9pZCk7CisKKwkJZmJfbW9kZXNldF9pZCA9IGlndF9jcmVhdGVfZmIo ZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJICAgICAgbW9k ZS0+dmRpc3BsYXksCisJCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICAg IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICAgICZmYl9tb2Rlc2V0KTsKKwkJ aWd0X2Fzc2VydChmYl9tb2Rlc2V0X2lkKTsKKworCQlmYnJlZl9pZCA9IGlndF9jcmVhdGVfZmIo ZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJICAgICAgbW9k ZS0+dmRpc3BsYXksCisJCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICAg IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICAgICZmYnJlZik7CisJCWlndF9h c3NlcnQoZmJyZWZfaWQpOworCisJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiX21vZGVz ZXQpOworCQlkaXNhYmxlX2N0bShwcmltYXJ5LT5waXBlKTsKKwkJZGlzYWJsZV9kZWdhbW1hKHBy aW1hcnktPnBpcGUpOworCQlzZXRfZ2FtbWEoZGF0YSwgcHJpbWFyeS0+cGlwZSwgZ2FtbWFfbGlu ZWFyKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKworCQkvKiBEcmF3 IHNvbGlkIGNvbG9ycyB3aXRoIG5vIGRlZ2FtbWEgdHJhbnNmb3JtYXRpb24uICovCisJCXBhaW50 X3JlY3RhbmdsZXMoZGF0YSwgbW9kZSwgcmVkX2dyZWVuX2JsdWUsICZmYnJlZik7CisKKwkJLyog RHJhdyBhIGdyYWRpZW50IHdpdGggZGVnYW1tYSBMVVQgdG8gcmVtYXAgYWxsCisJCSAqIHZhbHVl cyB0byBtYXggcmVkL2dyZWVuL2JsdWUuCisJCSAqLworCQlwYWludF9ncmFkaWVudF9yZWN0YW5n bGVzKGRhdGEsIG1vZGUsIHJlZF9ncmVlbl9ibHVlLCAmZmIpOworCQlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksICZmYik7CisJCXNldF9kZWdhbW1hKGRhdGEsIHByaW1hcnktPnBpcGUsIGRlZ2Ft bWFfZnVsbCk7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJCWNoYW1l bGl1bV9jYXB0dXJlKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgMCwgMCwgMCwgMCwgMSk7CisJCWZy YW1lX2Z1bGxjb2xvcnMgPQorCQkJY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+ Y2hhbWVsaXVtLCAwKTsKKworCQkvKiBWZXJpZnkgdGhhdCB0aGUgZnJhbWVidWZmZXIgcmVmZXJl bmNlIG9mIHRoZSBzb2Z0d2FyZQorCQkgKiBjb21wdXRlZCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhl IGZyYW1lIGR1bXAgb2YgdGhlIGRlZ2FtbWEKKwkJICogTFVUIHRyYW5zZm9ybWF0aW9uIG91dHB1 dC4KKwkJICovCisJCWlndF9hc3NlcnQoY2hhbWVsaXVtX2ZyYW1lX21hdGNoX29yX2R1bXAoZGF0 YS0+Y2hhbWVsaXVtLCBwb3J0LAorCQkJCQkJCSBmcmFtZV9mdWxsY29sb3JzLAorCQkJCQkJCSAm ZmJyZWYsCisJCQkJCQkJIENIQU1FTElVTV9DSEVDS19BTkFMT0cpKTsKKworCQlpZ3RfcGxhbmVf c2V0X2ZiKHByaW1hcnksIE5VTEwpOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQ RV9OT05FKTsKKwl9CisKKwlmcmVlX2x1dChkZWdhbW1hX2xpbmVhcik7CisJZnJlZV9sdXQoZGVn YW1tYV9mdWxsKTsKKwlmcmVlX2x1dChnYW1tYV9saW5lYXIpOworfQorCisvKgorICogRHJhdyAz IGdyYWRpZW50IHJlY3RhbmdsZXMgaW4gcmVkLCBncmVlbiBhbmQgYmx1ZSwgd2l0aCBhIG1heGVk IG91dAorICogZ2FtbWEgTFVUIGFuZCB2ZXJpZnkgd2UgaGF2ZSB0aGUgc2FtZSBmcmFtZSBkdW1w IGFzIGRyYXdpbmcgc29saWQKKyAqIGNvbG9yIHJlY3RhbmdsZXMuCisgKi8KK3N0YXRpYyB2b2lk IHRlc3RfcGlwZV9nYW1tYShkYXRhX3QgKmRhdGEsCisJCQkgICAgaWd0X3BsYW5lX3QgKnByaW1h cnkpCit7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZ2FtbWFfbHV0X3QgKmdhbW1hX2Z1bGw7 CisJY29sb3JfdCByZWRfZ3JlZW5fYmx1ZVtdID0geworCQl7IDEuMCwgMC4wLCAwLjAgfSwKKwkJ eyAwLjAsIDEuMCwgMC4wIH0sCisJCXsgMC4wLCAwLjAsIDEuMCB9CisJfTsKKworCWludCBpOwor CXN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07 CisJYm9vbCB2YWxpZF9vdXRwdXQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5w b3J0X2NvdW50OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFt ZWxpdW1fcG9ydF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlpZ3RfcmVxdWlyZShpZ3Rf cGlwZV9vYmpfaGFzX3Byb3AocHJpbWFyeS0+cGlwZSwgSUdUX0NSVENfR0FNTUFfTFVUKSk7CisK KwlnYW1tYV9mdWxsID0gZ2VuZXJhdGVfdGFibGVfbWF4KGRhdGEtPmdhbW1hX2x1dF9zaXplKTsK KworCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LAorCQkJCSAg ICAgIHByaW1hcnktPnBpcGUtPnBpcGUsCisJCQkJICAgICAgb3V0cHV0KSB7CisJCWRybU1vZGVN b2RlSW5mbyAqbW9kZTsKKwkJc3RydWN0IGlndF9mYiBmYl9tb2Rlc2V0LCBmYiwgZmJyZWY7CisJ CXN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZnJhbWVfZnVsbGNvbG9yczsKKwkJaW50IGZi X2lkLCBmYl9tb2Rlc2V0X2lkLCBmYnJlZl9pZDsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ cG9ydF9jb3VudDsgaSsrKQorCQkJdmFsaWRfb3V0cHV0IHw9CisJCQkJKHN0cmNtcChvdXRwdXQt Pm5hbWUsIGNvbm5lY3RlZF9wb3J0c1tpXSkgPT0gMCk7CisJCWlmICghdmFsaWRfb3V0cHV0KQor CQkJY29udGludWU7CisJCWVsc2UKKwkJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50 OyBpKyspCisJCQkJaWYgKHN0cmNtcChvdXRwdXQtPm5hbWUsCisJCQkJCSAgIGNvbm5lY3RlZF9w b3J0c1tpXSkgPT0gMCkKKwkJCQkJcG9ydCA9IGRhdGEtPnBvcnRzW2ldOworCisJCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBwcmltYXJ5LT5waXBlLT5waXBlKTsKKwkJbW9kZSA9IGlndF9v dXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCQkvKiBDcmVhdGUgYSBmcmFtZWJ1ZmZlciBhdCB0 aGUgc2l6ZSBvZiB0aGUgb3V0cHV0LiAqLworCQlmYl9pZCA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ ZHJtX2ZkLAorCQkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJCSAgICAgIG1vZGUtPnZkaXNw bGF5LAorCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJICAgICAgTE9DQUxfRFJN X0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkgICAgICAmZmIpOworCQlpZ3RfYXNzZXJ0KGZiX2lkKTsK KworCQlmYl9tb2Rlc2V0X2lkID0gaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJCQkJCSAg ICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJCQkgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAg ICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwKKwkJCQkJICAgICAgJmZiX21vZGVzZXQpOworCQlpZ3RfYXNzZXJ0KGZiX21vZGVzZXRf aWQpOworCisJCWZicmVmX2lkID0gaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJCQkJICAg ICAgbW9kZS0+aGRpc3BsYXksCisJCQkJICAgICAgbW9kZS0+dmRpc3BsYXksCisJCQkJICAgICAg RFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LAorCQkJCSAgICAgICZmYnJlZik7CisJCWlndF9hc3NlcnQoZmJyZWZfaWQpOworCisJCWlndF9w bGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiX21vZGVzZXQpOworCQlkaXNhYmxlX2N0bShwcmltYXJ5 LT5waXBlKTsKKwkJZGlzYWJsZV9kZWdhbW1hKHByaW1hcnktPnBpcGUpOworCQlzZXRfZ2FtbWEo ZGF0YSwgcHJpbWFyeS0+cGlwZSwgZ2FtbWFfZnVsbCk7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgm ZGF0YS0+ZGlzcGxheSk7CisKKwkJLyogRHJhdyBzb2xpZCBjb2xvcnMgd2l0aCBubyBnYW1tYSB0 cmFuc2Zvcm1hdGlvbi4gKi8KKwkJcGFpbnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCByZWRfZ3Jl ZW5fYmx1ZSwgJmZicmVmKTsKKworCQkvKiBEcmF3IGEgZ3JhZGllbnQgd2l0aCBnYW1tYSBMVVQg dG8gcmVtYXAgYWxsIHZhbHVlcworCQkgKiB0byBtYXggcmVkL2dyZWVuL2JsdWUuCisJCSAqLwor CQlwYWludF9ncmFkaWVudF9yZWN0YW5nbGVzKGRhdGEsIG1vZGUsIHJlZF9ncmVlbl9ibHVlLCAm ZmIpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZmYik7CisJCWlndF9kaXNwbGF5X2Nv bW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJCWNoYW1lbGl1bV9jYXB0dXJlKGRhdGEtPmNoYW1lbGl1 bSwgcG9ydCwgMCwgMCwgMCwgMCwgMSk7CisJCWZyYW1lX2Z1bGxjb2xvcnMgPQorCQkJY2hhbWVs aXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+Y2hhbWVsaXVtLCAwKTsKKworCQkvKiBWZXJp ZnkgdGhhdCB0aGUgZnJhbWVidWZmZXIgcmVmZXJlbmNlIG9mIHRoZSBzb2Z0d2FyZQorCQkgKiBj b21wdXRlZCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlIGZyYW1lIGR1bXAgb2YgdGhlCisJCSAqIGRl Z2FtbWEgTFVUIHRyYW5zZm9ybWF0aW9uIG91dHB1dC4KKwkJICovCisJCWlndF9hc3NlcnQoY2hh bWVsaXVtX2ZyYW1lX21hdGNoX29yX2R1bXAoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LAorCQkJCQkJ CSBmcmFtZV9mdWxsY29sb3JzLAorCQkJCQkJCSAmZmJyZWYsCisJCQkJCQkJIENIQU1FTElVTV9D SEVDS19BTkFMT0cpKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCQlp Z3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKKwl9CisKKwlmcmVlX2x1dChn YW1tYV9mdWxsKTsKK30KKworLyoKKyAqIERyYXcgMyByZWN0YW5nbGVzIHVzaW5nIGJlZm9yZSBj b2xvcnMgd2l0aCB0aGUgY3RtIG1hdHJpeCBhcHBseSBhbmQgdmVyaWZ5CisgKiB0aGUgZnJhbWUg ZHVtcCBpcyBlcXVhbCB0byB1c2luZyBhZnRlciBjb2xvcnMgd2l0aCBhbiBpZGVudGlmeSBjdG0g bWF0cml4LgorICovCitzdGF0aWMgYm9vbCB0ZXN0X3BpcGVfY3RtKGRhdGFfdCAqZGF0YSwKKwkJ CSAgaWd0X3BsYW5lX3QgKnByaW1hcnksCisJCQkgIGNvbG9yX3QgKmJlZm9yZSwKKwkJCSAgY29s b3JfdCAqYWZ0ZXIsCisJCQkgIGRvdWJsZSAqY3RtX21hdHJpeCkKK3sKKwlnYW1tYV9sdXRfdCAq ZGVnYW1tYV9saW5lYXIsICpnYW1tYV9saW5lYXI7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisK KwlpbnQgaTsKKwlib29sIHJldCA9IHRydWU7CisJc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0 OworCWNoYXIgKmNvbm5lY3RlZF9wb3J0c1s0XTsKKwlib29sIHZhbGlkX291dHB1dCA9IGZhbHNl OworCisJaWd0X3JlcXVpcmUoaWd0X3BpcGVfb2JqX2hhc19wcm9wKHByaW1hcnktPnBpcGUsIElH VF9DUlRDX0NUTSkpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykK KwkJY29ubmVjdGVkX3BvcnRzW2ldID0KKwkJCShjaGFyICopIGNoYW1lbGl1bV9wb3J0X2dldF9u YW1lKGRhdGEtPnBvcnRzW2ldKTsKKworCWRlZ2FtbWFfbGluZWFyID0gZ2VuZXJhdGVfdGFibGUo ZGF0YS0+ZGVnYW1tYV9sdXRfc2l6ZSwgMS4wKTsKKwlnYW1tYV9saW5lYXIgPSBnZW5lcmF0ZV90 YWJsZShkYXRhLT5nYW1tYV9sdXRfc2l6ZSwgMS4wKTsKKworCWZvcl9lYWNoX3ZhbGlkX291dHB1 dF9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LAorCQkJCSAgICAgIHByaW1hcnktPnBpcGUtPnBpcGUs CisJCQkJICAgICAgb3V0cHV0KSB7CisJCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwkJc3RydWN0 IGlndF9mYiBmYl9tb2Rlc2V0LCBmYiwgZmJyZWY7CisJCXN0cnVjdCBjaGFtZWxpdW1fZnJhbWVf ZHVtcCAqZnJhbWVfaGFyZHdhcmU7CisJCWludCBmYl9pZCwgZmJfbW9kZXNldF9pZCwgZmJyZWZf aWQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCXZhbGlk X291dHB1dCB8PQorCQkJCShzdHJjbXAob3V0cHV0LT5uYW1lLCBjb25uZWN0ZWRfcG9ydHNbaV0p ID09IDApOworCQlpZiAoIXZhbGlkX291dHB1dCkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQlm b3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydF9jb3VudDsgaSsrKQorCQkJCWlmIChzdHJjbXAob3V0 cHV0LT5uYW1lLAorCQkJCQkgICBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApCisJCQkJCXBvcnQg PSBkYXRhLT5wb3J0c1tpXTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcHJpbWFy eS0+cGlwZS0+cGlwZSk7CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisK KwkJLyogQ3JlYXRlIGEgZnJhbWVidWZmZXIgYXQgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gKi8K KwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgICBtb2RlLT5o ZGlzcGxheSwKKwkJCQkgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LAorCQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJICAg ICAgJmZiKTsKKwkJaWd0X2Fzc2VydChmYl9pZCk7CisKKwkJZmJfbW9kZXNldF9pZCA9IGlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJ ICAgICAgbW9kZS0+dmRpc3BsYXksCisJCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJ CQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICAgICZmYl9tb2Rl c2V0KTsKKwkJaWd0X2Fzc2VydChmYl9tb2Rlc2V0X2lkKTsKKworCQlmYnJlZl9pZCA9IGlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJCSAg ICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJ ICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkgICAgICAmZmJyZWYpOworCQlp Z3RfYXNzZXJ0KGZicmVmX2lkKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZmYl9t b2Rlc2V0KTsKKworCQlpZiAobWVtY21wKGJlZm9yZSwgYWZ0ZXIsIHNpemVvZihjb2xvcl90KSkp IHsKKwkJCXNldF9kZWdhbW1hKGRhdGEsIHByaW1hcnktPnBpcGUsIGRlZ2FtbWFfbGluZWFyKTsK KwkJCXNldF9nYW1tYShkYXRhLCBwcmltYXJ5LT5waXBlLCBnYW1tYV9saW5lYXIpOworCQl9IGVs c2UgeworCQkJLyogRGlzYWJsZSBEZWdhbW1hIGFuZCBHYW1tYSBmb3IgY3RtIG1heCB0ZXN0ICov CisJCQlkaXNhYmxlX2RlZ2FtbWEocHJpbWFyeS0+cGlwZSk7CisJCQlkaXNhYmxlX2dhbW1hKHBy aW1hcnktPnBpcGUpOworCQl9CisKKwkJZGlzYWJsZV9jdG0ocHJpbWFyeS0+cGlwZSk7CisJCWln dF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisKKwkJcGFpbnRfcmVjdGFuZ2xlcyhk YXRhLCBtb2RlLCBhZnRlciwgJmZicmVmKTsKKworCQkvKiBXaXRoIENUTSB0cmFuc2Zvcm1hdGlv bi4gKi8KKwkJcGFpbnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCBiZWZvcmUsICZmYik7CisJCWln dF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsKKwkJc2V0X2N0bShwcmltYXJ5LT5waXBlLCBj dG1fbWF0cml4KTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKwkJY2hh bWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAwLCAxKTsKKwkJ ZnJhbWVfaGFyZHdhcmUgPQorCQkJY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoZGF0YS0+ Y2hhbWVsaXVtLCAwKTsKKworCQkvKiBWZXJpZnkgdGhhdCB0aGUgZnJhbWVidWZmZXIgcmVmZXJl bmNlIG9mIHRoZSBzb2Z0d2FyZQorCQkgKiBjb21wdXRlZCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhl IGZyYW1lIGR1bXAgb2YgdGhlIENUTQorCQkgKiBtYXRyaXggdHJhbnNmb3JtYXRpb24gb3V0cHV0 LgorCQkgKi8KKwkJcmV0ICY9IGNoYW1lbGl1bV9mcmFtZV9tYXRjaF9vcl9kdW1wKGRhdGEtPmNo YW1lbGl1bSwgcG9ydCwKKwkJCQkJCSAgICAgZnJhbWVfaGFyZHdhcmUsCisJCQkJCQkgICAgICZm YnJlZiwKKwkJCQkJCSAgICAgQ0hBTUVMSVVNX0NIRUNLX0FOQUxPRyk7CisKKwkJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJ UEVfTk9ORSk7CisJfQorCisJZnJlZV9sdXQoZGVnYW1tYV9saW5lYXIpOworCWZyZWVfbHV0KGdh bW1hX2xpbmVhcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BpcGVf bGltaXRlZF9yYW5nZV9jdG0oZGF0YV90ICpkYXRhLAorCQkJCQlpZ3RfcGxhbmVfdCAqcHJpbWFy eSkKK3sKKwlkb3VibGUgbGltaXRlZF9yZXN1bHQgPSAyMzUuMCAvIDI1NS4wOworCWNvbG9yX3Qg cmVkX2dyZWVuX2JsdWVfbGltaXRlZFtdID0geworCQl7IGxpbWl0ZWRfcmVzdWx0LCAwLjAsIDAu MCB9LAorCQl7IDAuMCwgbGltaXRlZF9yZXN1bHQsIDAuMCB9LAorCQl7IDAuMCwgMC4wLCBsaW1p dGVkX3Jlc3VsdCB9CisJfTsKKwljb2xvcl90IHJlZF9ncmVlbl9ibHVlX2Z1bGxbXSA9IHsKKwkJ eyAwLjUsIDAuMCwgMC4wIH0sCisJCXsgMC4wLCAwLjUsIDAuMCB9LAorCQl7IDAuMCwgMC4wLCAw LjUgfQorCX07CisJZG91YmxlIGN0bVtdID0geyAxLjAsIDAuMCwgMC4wLAorCQkJMC4wLCAxLjAs IDAuMCwKKwkJCTAuMCwgMC4wLCAxLjAgfTsKKwlnYW1tYV9sdXRfdCAqZGVnYW1tYV9saW5lYXIs ICpnYW1tYV9saW5lYXI7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJYm9vbCBoYXNfYnJvYWRj YXN0X3JnYl9vdXRwdXQgPSBmYWxzZTsKKworCWludCBpOworCXN0cnVjdCBjaGFtZWxpdW1fcG9y dCAqcG9ydDsKKwljaGFyICpjb25uZWN0ZWRfcG9ydHNbNF07CisJYm9vbCB2YWxpZF9vdXRwdXQg PSBmYWxzZTsKKworCWRlZ2FtbWFfbGluZWFyID0gZ2VuZXJhdGVfdGFibGUoZGF0YS0+ZGVnYW1t YV9sdXRfc2l6ZSwgMS4wKTsKKwlnYW1tYV9saW5lYXIgPSBnZW5lcmF0ZV90YWJsZShkYXRhLT5n YW1tYV9sdXRfc2l6ZSwgMS4wKTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0X2NvdW50 OyBpKyspCisJCWNvbm5lY3RlZF9wb3J0c1tpXSA9CisJCQkoY2hhciAqKSBjaGFtZWxpdW1fcG9y dF9nZXRfbmFtZShkYXRhLT5wb3J0c1tpXSk7CisKKwlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25f cGlwZSgmZGF0YS0+ZGlzcGxheSwKKwkJCQkgICAgICBwcmltYXJ5LT5waXBlLT5waXBlLAorCQkJ CSAgICAgIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJCXN0cnVjdCBpZ3Rf ZmIgZmJfbW9kZXNldCwgZmIsIGZicmVmOworCQlzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAg KmZyYW1lX2xpbWl0ZWQ7CisJCWludCBmYl9pZCwgZmJfbW9kZXNldF9pZCwgZmJyZWZfaWQ7CisK KwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRfY291bnQ7IGkrKykKKwkJCXZhbGlkX291dHB1 dCB8PQorCQkJCShzdHJjbXAob3V0cHV0LT5uYW1lLCBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDAp OworCQlpZiAoIXZhbGlkX291dHB1dCkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQlmb3IgKGkg PSAwOyBpIDwgZGF0YS0+cG9ydF9jb3VudDsgaSsrKQorCQkJCWlmIChzdHJjbXAob3V0cHV0LT5u YW1lLAorCQkJCSAgICBjb25uZWN0ZWRfcG9ydHNbaV0pID09IDApCisJCQkJCXBvcnQgPSBkYXRh LT5wb3J0c1tpXTsKKworCQlpZiAoIWlndF9vdXRwdXRfaGFzX3Byb3Aob3V0cHV0LCBJR1RfQ09O TkVDVE9SX0JST0FEQ0FTVF9SR0IpKQorCQkJY29udGludWU7CisKKwkJaGFzX2Jyb2FkY2FzdF9y Z2Jfb3V0cHV0ID0gdHJ1ZTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcHJpbWFy eS0+cGlwZS0+cGlwZSk7CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisK KwkJLyogQ3JlYXRlIGEgZnJhbWVidWZmZXIgYXQgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gKi8K KwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgICBtb2RlLT5o ZGlzcGxheSwKKwkJCQkgICAgICBtb2RlLT52ZGlzcGxheSwKKwkJCQkgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LAorCQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJICAg ICAgJmZiKTsKKwkJaWd0X2Fzc2VydChmYl9pZCk7CisKKwkJZmJfbW9kZXNldF9pZCA9IGlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJ ICAgICAgbW9kZS0+dmRpc3BsYXksCisJCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJ CQkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICAgICZmYl9tb2Rl c2V0KTsKKwkJaWd0X2Fzc2VydChmYl9tb2Rlc2V0X2lkKTsKKworCQlmYnJlZl9pZCA9IGlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LAorCQkJCSAg ICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJ ICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkgICAgICAmZmJyZWYpOworCQlp Z3RfYXNzZXJ0KGZicmVmX2lkKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZmYl9t b2Rlc2V0KTsKKworCQlzZXRfZGVnYW1tYShkYXRhLCBwcmltYXJ5LT5waXBlLCBkZWdhbW1hX2xp bmVhcik7CisJCXNldF9nYW1tYShkYXRhLCBwcmltYXJ5LT5waXBlLCBnYW1tYV9saW5lYXIpOwor CQlzZXRfY3RtKHByaW1hcnktPnBpcGUsIGN0bSk7CisKKwkJaWd0X291dHB1dF9zZXRfcHJvcF92 YWx1ZShvdXRwdXQsCisJCQkJCSAgSUdUX0NPTk5FQ1RPUl9CUk9BRENBU1RfUkdCLAorCQkJCQkg IEJST0FEQ0FTVF9SR0JfRlVMTCk7CisJCXBhaW50X3JlY3RhbmdsZXMoZGF0YSwgbW9kZSwgcmVk X2dyZWVuX2JsdWVfbGltaXRlZCwgJmZiKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAm ZmIpOworCQlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCisJCS8qIFNldCB0 aGUgb3V0cHV0IGludG8gbGltaXRlZCByYW5nZS4gKi8KKwkJaWd0X291dHB1dF9zZXRfcHJvcF92 YWx1ZShvdXRwdXQsCisJCQkJCSAgSUdUX0NPTk5FQ1RPUl9CUk9BRENBU1RfUkdCLAorCQkJCQkg IEJST0FEQ0FTVF9SR0JfMTZfMjM1KTsKKwkJcGFpbnRfcmVjdGFuZ2xlcyhkYXRhLCBtb2RlLCBy ZWRfZ3JlZW5fYmx1ZV9mdWxsLCAmZmIpOworCisJCS8qIEFuZCByZXNldC4uICovCisJCWlndF9v dXRwdXRfc2V0X3Byb3BfdmFsdWUob3V0cHV0LAorCQkJCQkgIElHVF9DT05ORUNUT1JfQlJPQURD QVNUX1JHQiwKKwkJCQkJICBCUk9BRENBU1RfUkdCX0ZVTEwpOworCQlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksIE5VTEwpOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05F KTsKKwkJY2hhbWVsaXVtX2NhcHR1cmUoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCAwLCAwLCAwLCAw LCAxKTsKKwkJZnJhbWVfbGltaXRlZCA9CisJCQljaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9mcmFt ZShkYXRhLT5jaGFtZWxpdW0sIDApOworCisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlIGZyYW1lYnVm ZmVyIHJlZmVyZW5jZSBvZiB0aGUgc29mdHdhcmUKKwkJICogY29tcHV0ZWQgb3V0cHV0IGlzIGVx dWFsIHRvIHRoZSBmcmFtZSBkdW1wIG9mIHRoZSBDVE0KKwkJICogbWF0cml4IHRyYW5zZm9ybWF0 aW9uIG91dHB1dC4KKwkJICovCisJCWlndF9hc3NlcnQoY2hhbWVsaXVtX2ZyYW1lX21hdGNoX29y X2R1bXAoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LAorCQkJCQkJCSBmcmFtZV9saW1pdGVkLAorCQkJ CQkJCSAmZmJyZWYsCisJCQkJCQkJIENIQU1FTElVTV9DSEVDS19BTkFMT0cpKTsKKworCX0KKwor CWZyZWVfbHV0KGdhbW1hX2xpbmVhcik7CisJZnJlZV9sdXQoZGVnYW1tYV9saW5lYXIpOworCisJ aWd0X3JlcXVpcmUoaGFzX2Jyb2FkY2FzdF9yZ2Jfb3V0cHV0KTsKK30KKworc3RhdGljIHZvaWQK K3J1bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwKQoreworCWlndF9w aXBlX3QgKnBpcGU7CisJaWd0X3BsYW5lX3QgKnByaW1hcnk7CisJZG91YmxlIGRlbHRhOworCWlu dCBpOworCWNvbG9yX3QgcmVkX2dyZWVuX2JsdWVbXSA9IHsKKwkJeyAxLjAsIDAuMCwgMC4wIH0s CisJCXsgMC4wLCAxLjAsIDAuMCB9LAorCQl7IDAuMCwgMC4wLCAxLjAgfQorCX07CisKKwlpZ3Rf Zml4dHVyZSB7CisKKwkJaWd0X3JlcXVpcmUocCA8IGRhdGEtPmRpc3BsYXkubl9waXBlcyk7CisK KwkJcGlwZSA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW3BdOworCQlpZ3RfcmVxdWlyZShwaXBlLT5u X3BsYW5lcyA+PSAwKTsKKworCQlwcmltYXJ5ID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUocGlw ZSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7CisKKwkJaWYgKGlndF9waXBlX29ial9oYXNfcHJv cCgmZGF0YS0+ZGlzcGxheS5waXBlc1twXSwKKwkJCQkJICBJR1RfQ1JUQ19ERUdBTU1BX0xVVF9T SVpFKSkgeworCQkJZGF0YS0+ZGVnYW1tYV9sdXRfc2l6ZSA9CisJCQkJaWd0X3BpcGVfb2JqX2dl dF9wcm9wKCZkYXRhLT5kaXNwbGF5LnBpcGVzW3BdLAorCQkJCQkJSUdUX0NSVENfREVHQU1NQV9M VVRfU0laRSk7CisJCQlpZ3RfYXNzZXJ0X2x0KDAsIGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUpOwor CQl9CisKKwkJaWYgKGlndF9waXBlX29ial9oYXNfcHJvcCgmZGF0YS0+ZGlzcGxheS5waXBlc1tw XSwKKwkJCQkJICBJR1RfQ1JUQ19HQU1NQV9MVVRfU0laRSkpIHsKKwkJCWRhdGEtPmdhbW1hX2x1 dF9zaXplID0KKwkJCQlpZ3RfcGlwZV9vYmpfZ2V0X3Byb3AoJmRhdGEtPmRpc3BsYXkucGlwZXNb cF0sCisJCQkJCQkgICAgICBJR1RfQ1JUQ19HQU1NQV9MVVRfU0laRSk7CisJCQlpZ3RfYXNzZXJ0 X2x0KDAsIGRhdGEtPmdhbW1hX2x1dF9zaXplKTsKKwkJfQorCisJCWlndF9kaXNwbGF5X3JlcXVp cmVfb3V0cHV0X29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHApOworCX0KKworCWRhdGEtPmNvbG9y X2RlcHRoID0gODsKKwlkZWx0YSA9IDEuMCAvICgxIDw8IGRhdGEtPmNvbG9yX2RlcHRoKTsKKwor CWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRp dHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tcmVkLXRvLWJsdWUiLCBr bXN0ZXN0X3BpcGVfbmFtZShwKSkgeworCQljb2xvcl90IGJsdWVfZ3JlZW5fYmx1ZVtdID0gewor CQkJeyAwLjAsIDAuMCwgMS4wIH0sCisJCQl7IDAuMCwgMS4wLCAwLjAgfSwKKwkJCXsgMC4wLCAw LjAsIDEuMCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMC4wLCAwLjAsIDAuMCwKKwkJCQkw LjAsIDEuMCwgMC4wLAorCQkJCTEuMCwgMC4wLCAxLjAgfTsKKwkJaWd0X2Fzc2VydCh0ZXN0X3Bp cGVfY3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkgYmx1ZV9ncmVlbl9i bHVlLCBjdG0pKTsKKwl9CisKKwlpZ3RfZGVzY3JpYmUoIkNvbXBhcmUgYWZ0ZXIgYXBwbHlpbmcg Y3RtIG1hdHJpeCAmIGlkZW50aXR5IG1hdHJpeCIpOworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMt Y3RtLWdyZWVuLXRvLXJlZCIsIGttc3Rlc3RfcGlwZV9uYW1lKHApKSB7CisJCWNvbG9yX3QgcmVk X3JlZF9ibHVlW10gPSB7CisJCQl7IDEuMCwgMC4wLCAwLjAgfSwKKwkJCXsgMS4wLCAwLjAsIDAu MCB9LAorCQkJeyAwLjAsIDAuMCwgMS4wIH0KKwkJfTsKKwkJZG91YmxlIGN0bVtdID0geyAxLjAs IDEuMCwgMC4wLAorCQkJCTAuMCwgMC4wLCAwLjAsCisJCQkJMC4wLCAwLjAsIDEuMCB9OworCQlp Z3RfYXNzZXJ0KHRlc3RfcGlwZV9jdG0oZGF0YSwgcHJpbWFyeSwgcmVkX2dyZWVuX2JsdWUsCisJ CQkJCSByZWRfcmVkX2JsdWUsIGN0bSkpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBh ZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRl c3RfZigicGlwZS0lcy1jdG0tYmx1ZS10by1yZWQiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkgewor CQljb2xvcl90IHJlZF9ncmVlbl9yZWRbXSA9IHsKKwkJCXsgMS4wLCAwLjAsIDAuMCB9LAorCQkJ eyAwLjAsIDEuMCwgMC4wIH0sCisJCQl7IDEuMCwgMC4wLCAwLjAgfQorCQl9OworCQlkb3VibGUg Y3RtW10gPSB7IDEuMCwgMC4wLCAxLjAsCisJCQkJMC4wLCAxLjAsIDAuMCwKKwkJCQkwLjAsIDAu MCwgMC4wIH07CisJCWlndF9hc3NlcnQodGVzdF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LCByZWRf Z3JlZW5fYmx1ZSwKKwkJCQkJIHJlZF9ncmVlbl9yZWQsIGN0bSkpOworCX0KKworCS8qIFdlIHRl c3RzIGEgZmV3IHZhbHVlcyBhcm91bmQgdGhlIGV4cGVjdGVkIHJlc3VsdCBiZWNhdXNlCisJICog dGhlIGl0IGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHdlJ3JlIGRlYWxpbmcgd2l0aCwgd2UgY2Fu CisJICogZWl0aGVyIGdldCBjbGFtcGVkIG9yIHJvdW5kZWQgdmFsdWVzIGFuZCB3ZSBhbHNvIG5l ZWQgdG8KKwkgKiBhY2NvdW50IGZvciBvZGQgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBMVVRzLgor CSAqLworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYg aWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tMC0yNSIsIGtt c3Rlc3RfcGlwZV9uYW1lKHApKSB7CisJCWNvbG9yX3QgZXhwZWN0ZWRfY29sb3JzW10gPSB7CisJ CQl7IDAuMCwgfSwgeyAwLjAsIH0sIHsgMC4wLCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsg MC4yNSwgMC4wLCAgMC4wLAorCQkJCSAwLjAsICAwLjI1LCAwLjAsCisJCQkJIDAuMCwgIDAuMCwg IDAuMjUgfTsKKwkJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKwkJZm9yIChpID0gMDsgaSA8IDU7 IGkrKykgeworCQkJZXhwZWN0ZWRfY29sb3JzWzBdLnIgPQorCQkJCWV4cGVjdGVkX2NvbG9yc1sx XS5nID0KKwkJCQlleHBlY3RlZF9jb2xvcnNbMl0uYiA9CisJCQkJMC4yNSArIGRlbHRhICogKGkg LSAyKTsKKwkJCXN1Y2Nlc3MgfD0gdGVzdF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LAorCQkJCQkJ IHJlZF9ncmVlbl9ibHVlLAorCQkJCQkJIGV4cGVjdGVkX2NvbG9ycywgY3RtKTsKKwkJfQorCQlp Z3RfYXNzZXJ0KHN1Y2Nlc3MpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBh cHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigi cGlwZS0lcy1jdG0tMC01Iiwga21zdGVzdF9waXBlX25hbWUocCkpIHsKKwkJY29sb3JfdCBleHBl Y3RlZF9jb2xvcnNbXSA9IHsKKwkJCXsgMC4wLCB9LCB7IDAuMCwgfSwgeyAwLjAsIH0KKwkJfTsK KwkJZG91YmxlIGN0bVtdID0geyAwLjUsIDAuMCwgMC4wLAorCQkJCSAwLjAsIDAuNSwgMC4wLAor CQkJCSAwLjAsIDAuMCwgMC41IH07CisJCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisJCWZvciAo aSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCWV4cGVjdGVkX2NvbG9yc1swXS5yID0KKwkJCQlleHBl Y3RlZF9jb2xvcnNbMV0uZyA9CisJCQkJZXhwZWN0ZWRfY29sb3JzWzJdLmIgPQorCQkJCTAuNSAr IGRlbHRhICogKGkgLSAyKTsKKwkJCXN1Y2Nlc3MgfD0gdGVzdF9waXBlX2N0bShkYXRhLCBwcmlt YXJ5LAorCQkJCQkJIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkJIGV4cGVjdGVkX2NvbG9ycywgY3Rt KTsKKwkJfQorCQlpZ3RfYXNzZXJ0KHN1Y2Nlc3MpOworCX0KKworCWlndF9kZXNjcmliZSgiQ29t cGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0 X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tMC03NSIsIGttc3Rlc3RfcGlwZV9uYW1lKHApKSB7CisJ CWNvbG9yX3QgZXhwZWN0ZWRfY29sb3JzW10gPSB7CisJCQl7IDAuMCwgfSwgeyAwLjAsIH0sIHsg MC4wLCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMC43NSwgMC4wLCAgMC4wLAorCQkJCSAw LjAsICAwLjc1LCAwLjAsCisJCQkJIDAuMCwgIDAuMCwgIDAuNzUgfTsKKwkJYm9vbCBzdWNjZXNz ID0gZmFsc2U7CisKKwkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQkJZXhwZWN0ZWRfY29s b3JzWzBdLnIgPQorCQkJCWV4cGVjdGVkX2NvbG9yc1sxXS5nID0KKwkJCQlleHBlY3RlZF9jb2xv cnNbMl0uYiA9CisJCQkJMC43NSArIGRlbHRhICogKGkgLSAzKTsKKwkJCXN1Y2Nlc3MgfD0gdGVz dF9waXBlX2N0bShkYXRhLCBwcmltYXJ5LAorCQkJCQkJIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkJ IGV4cGVjdGVkX2NvbG9ycywgY3RtKTsKKwkJfQorCQlpZ3RfYXNzZXJ0KHN1Y2Nlc3MpOworCX0K KworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4ICYgaWRl bnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tbWF4Iiwga21zdGVz dF9waXBlX25hbWUocCkpIHsKKwkJY29sb3JfdCBmdWxsX3JnYltdID0geworCQkJeyAxLjAsIDAu MCwgMC4wIH0sCisJCQl7IDAuMCwgMS4wLCAwLjAgfSwKKwkJCXsgMC4wLCAwLjAsIDEuMCB9CisJ CX07CisJCWRvdWJsZSBjdG1bXSA9IHsgMTAwLjAsICAgMC4wLCAgIDAuMCwKKwkJCQkgMC4wLCAg IDEwMC4wLCAgIDAuMCwKKwkJCQkgMC4wLCAgICAgMC4wLCAxMDAuMCB9OworCisJCS8qIENoZXJy eVZpZXcgZ2VuZXJhdGVzIHZhbHVlcyBvbiAxMGJpdHMgdGhhdCB3ZQorCQkgKiBwcm9kdWNlIHdp dGggYW4gOCBiaXRzIHBlciBjb2xvciBmcmFtZWJ1ZmZlci4KKwkJICovCisJCWlndF9yZXF1aXJl KCFJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSk7CisKKwkJaWd0X2Fzc2VydCh0ZXN0X3BpcGVf Y3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkgZnVsbF9yZ2IsIGN0bSkp OworCX0KKworCWlndF9kZXNjcmliZSgiQ29tcGFyZSBhZnRlciBhcHBseWluZyBjdG0gbWF0cml4 ICYgaWRlbnRpdHkgbWF0cml4Iik7CisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jdG0tbmVnYXRp dmUiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkgeworCQljb2xvcl90IGFsbF9ibGFja1tdID0gewor CQkJeyAwLjAsIDAuMCwgMC4wIH0sCisJCQl7IDAuMCwgMC4wLCAwLjAgfSwKKwkJCXsgMC4wLCAw LjAsIDAuMCB9CisJCX07CisJCWRvdWJsZSBjdG1bXSA9IHsgLTEuMCwgIDAuMCwgIDAuMCwKKwkJ CQkgMC4wLCAtMS4wLCAgMC4wLAorCQkJCSAwLjAsICAwLjAsIC0xLjAgfTsKKwkJaWd0X2Fzc2Vy dCh0ZXN0X3BpcGVfY3RtKGRhdGEsIHByaW1hcnksIHJlZF9ncmVlbl9ibHVlLAorCQkJCQkgYWxs X2JsYWNrLCBjdG0pKTsKKwl9CisKKwlpZ3RfZGVzY3JpYmUoIkNvbXBhcmUgYWZ0ZXIgYXBwbHlp bmcgY3RtIG1hdHJpeCAmIGlkZW50aXR5IG1hdHJpeCIpOworCWlndF9zdWJ0ZXN0X2YoInBpcGUt JXMtY3RtLWxpbWl0ZWQtcmFuZ2UiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkKKwkJdGVzdF9waXBl X2xpbWl0ZWRfcmFuZ2VfY3RtKGRhdGEsIHByaW1hcnkpOworCisJaWd0X2Rlc2NyaWJlKCJDb21w YXJlIG1heGVkIG91dCBnYW1tYSBMVVQgYW5kIHNvbGlkIGNvbG9yIGxpbmVhciBMVVQiKTsKKwlp Z3Rfc3VidGVzdF9mKCJwaXBlLSVzLWRlZ2FtbWEiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkKKwkJ dGVzdF9waXBlX2RlZ2FtbWEoZGF0YSwgcHJpbWFyeSk7CisKKwlpZ3RfZGVzY3JpYmUoIkNvbXBh cmUgbWF4ZWQgb3V0IGdhbW1hIExVVCBhbmQgc29saWQgY29sb3IgbGluZWFyIExVVCIpOworCWln dF9zdWJ0ZXN0X2YoInBpcGUtJXMtZ2FtbWEiLCBrbXN0ZXN0X3BpcGVfbmFtZShwKSkKKwkJdGVz dF9waXBlX2dhbW1hKGRhdGEsIHByaW1hcnkpOworCisJaWd0X2ZpeHR1cmUgeworCQlkaXNhYmxl X2RlZ2FtbWEocHJpbWFyeS0+cGlwZSk7CisJCWRpc2FibGVfZ2FtbWEocHJpbWFyeS0+cGlwZSk7 CisJCWRpc2FibGVfY3RtKHByaW1hcnktPnBpcGUpOworCQlpZ3RfZGlzcGxheV9jb21taXQoJmRh dGEtPmRpc3BsYXkpOworCX0KK30KKworc3RhdGljIGludAorcGlwZV9zZXRfcHJvcGVydHlfYmxv Yl9pZChpZ3RfcGlwZV90ICpwaXBlLAorCQkJICBlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0 aWVzIHByb3AsCisJCQkgIHVpbnQzMl90IGJsb2JfaWQpCit7CisJaW50IHJldDsKKworCWlndF9w aXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBwcm9wLCBOVUxMLCAwKTsKKworCWlndF9w aXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBwcm9wLCBibG9iX2lkKTsKKworCXJldCA9IGln dF9kaXNwbGF5X3RyeV9jb21taXQyKHBpcGUtPmRpc3BsYXksCisJCQkJICAgICAgcGlwZS0+ZGlz cGxheS0+aXNfYXRvbWljID8KKwkJCQkgICAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xFR0FD WSk7CisKKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgcHJvcCwgMCk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKGlndF9w aXBlX3QgKnBpcGUsCisJCSAgICAgICBlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzIHBy b3AsCisJCSAgICAgICB2b2lkICpwdHIsIHNpemVfdCBsZW5ndGgpCit7CisJaWd0X3BpcGVfb2Jq X3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIHByb3AsIHB0ciwgbGVuZ3RoKTsKKworCXJldHVybiBp Z3RfZGlzcGxheV90cnlfY29tbWl0MihwaXBlLT5kaXNwbGF5LAorCQkJCSAgICAgICBwaXBlLT5k aXNwbGF5LT5pc19hdG9taWMgPworCQkJCSAgICAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xF R0FDWSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2dhbW1hX2x1dF9zaXplcyhkYXRhX3Qg KmRhdGEpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWln dF9waXBlX3QgKnBpcGUgPSAmZGlzcGxheS0+cGlwZXNbMF07CisJc2l6ZV90IGdhbW1hX2x1dF9z aXplID0gZGF0YS0+Z2FtbWFfbHV0X3NpemUgKgorCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9y X2x1dCk7CisJc3RydWN0IGRybV9jb2xvcl9sdXQgKmdhbW1hX2x1dDsKKworCWlndF9yZXF1aXJl KGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQpKTsKKworCWdh bW1hX2x1dCA9IG1hbGxvYyhnYW1tYV9sdXRfc2l6ZSAqIDIpOworCisJaWd0X2Rpc3BsYXlfY29t bWl0MihkaXNwbGF5LAorCQkJICAgIGRpc3BsYXktPmlzX2F0b21pYyA/CisJCQkgICAgQ09NTUlU X0FUT01JQyA6IENPTU1JVF9MRUdBQ1kpOworCisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9w ZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FNTUFfTFVULAorCQkJCQkgICAg IGdhbW1hX2x1dCwgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBl X3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FNTUFfTFVULAor CQkJCQkgICAgIGdhbW1hX2x1dCwgZ2FtbWFfbHV0X3NpemUgKyAxKSwKKwkJCQkJICAgICAtRUlO VkFMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwKKwkJCQkJ ICAgICBJR1RfQ1JUQ19HQU1NQV9MVVQsCisJCQkJCSAgICAgZ2FtbWFfbHV0LAorCQkJCQkgICAg IGdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9l cShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsCisJCQkJCSAgICAgSUdUX0NSVENfR0FNTUFf TFVULAorCQkJCQkgICAgIGdhbW1hX2x1dCwKKwkJCQkJICAgICBnYW1tYV9sdXRfc2l6ZSArCisJ CQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSksCisJCQkJCSAgICAgLUVJTlZB TCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsCisJCQkJ CQlJR1RfQ1JUQ19HQU1NQV9MVVQsCisJCQkJCQlwaXBlLT5jcnRjX2lkKSwKKwkJCQkJCS1FSU5W QUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChwaXBlLAorCQkJ CQkJSUdUX0NSVENfR0FNTUFfTFVULAorCQkJCQkJNDA5NiAqIDQwOTYpLAorCQkJCQkJLUVJTlZB TCk7CisKKwlmcmVlKGdhbW1hX2x1dCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2RlZ2Ft bWFfbHV0X3NpemVzKGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0g JmRhdGEtPmRpc3BsYXk7CisJaWd0X3BpcGVfdCAqcGlwZSA9ICZkaXNwbGF5LT5waXBlc1swXTsK KwlzaXplX3QgZGVnYW1tYV9sdXRfc2l6ZSA9IGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUgKgorCQkJ CSAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KTsKKwlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAq ZGVnYW1tYV9sdXQ7CisKKwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocGlwZSwg SUdUX0NSVENfREVHQU1NQV9MVVQpKTsKKworCWRlZ2FtbWFfbHV0ID0gbWFsbG9jKGRlZ2FtbWFf bHV0X3NpemUgKiAyKTsKKworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwKKwkJCSAgICBk aXNwbGF5LT5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZ KTsKKworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JU Q19ERUdBTU1BX0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwgMSksIC1FSU5WQUwpOworCWln dF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19ERUdBTU1B X0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwgZGVnYW1tYV9sdXRfc2l6ZSArIDEpLAorCQkJ CQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihw aXBlLCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCwKKwkJCQkJICAgICBkZWdhbW1hX2x1dCwKKwkJCQkJ ICAgICBkZWdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fz c2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFfTFVU LAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0LAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0X3NpemUgKwor CQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkpLAorCQkJCQkgICAgIC1FSU5W QUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChwaXBlLCBJR1Rf Q1JUQ19ERUdBTU1BX0xVVCwKKwkJCQkJCXBpcGUtPmNydGNfaWQpLCAtRUlOVkFMKTsKKwlpZ3Rf YXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENfREVHQU1N QV9MVVQsCisJCQkJCQk0MDk2ICogNDA5NiksIC1FSU5WQUwpOworCisJZnJlZShkZWdhbW1hX2x1 dCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbnZhbGlkX2N0bV9tYXRyaXhfc2l6ZXMoZGF0YV90ICpk YXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rf cGlwZV90ICpwaXBlID0gJmRpc3BsYXktPnBpcGVzWzBdOworCXZvaWQgKnB0cjsKKworCWlndF9y ZXF1aXJlKGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlLCBJR1RfQ1JUQ19DVE0pKTsKKworCXB0 ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pICogNCk7CisKKwlpZ3RfYXNz ZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfQ1RNLCBwdHIsIDEp LAorCQkJCQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlf YmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRy bV9jb2xvcl9jdG0pICsgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShw aXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0NUTSwgcHRyLAorCQkJCQkgICAg IHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSkgLSAxKSwKKwkJCQkJICAgICAtRUlOVkFMKTsK KwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfQ1RN LCBwdHIsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfY3RtKSAqIDIpLAorCQkJ CQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9p ZChwaXBlLCBJR1RfQ1JUQ19DVE0sCisJCQkJCQlwaXBlLT5jcnRjX2lkKSwgLUVJTlZBTCk7CisJ aWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9DUlRDX0NU TSwKKwkJCQkJCTQwOTYgKiA0MDk2KSwgLUVJTlZBTCk7CisKKwlmcmVlKHB0cik7Cit9CisKK2ln dF9tYWluCit7CisJZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKworCWlndF9m aXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9B TlkpOworCQlpZiAoaXNfaTkxNV9kZXZpY2UoZGF0YS5kcm1fZmQpKQorCQkJZGF0YS5kZXZpZCA9 IGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOworCQlkYXRhLmNoYW1lbGl1bSA9IGNo YW1lbGl1bV9pbml0KGRhdGEuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5jaGFtZWxpdW0p OworCisJCWRhdGEucG9ydHMgPSBjaGFtZWxpdW1fZ2V0X3BvcnRzKGRhdGEuY2hhbWVsaXVtLAor CQkJCQkJICZkYXRhLnBvcnRfY291bnQpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21v ZGUoKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9mZCk7 CisJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCX0KKworCWZvcl9lYWNo X3BpcGVfc3RhdGljKHBpcGUpCisJCWlndF9zdWJ0ZXN0X2dyb3VwCisJCQlydW5fdGVzdHNfZm9y X3BpcGUoJmRhdGEsIHBpcGUpOworCWlndF9kZXNjcmliZSgiTmVnYXRpdmUgdGVzdCBjYXNlIGdh bW1hIGx1dCBzaXplIik7CisJaWd0X3N1YnRlc3RfZigicGlwZS1pbnZhbGlkLWdhbW1hLWx1dC1z aXplcyIpCisJCWludmFsaWRfZ2FtbWFfbHV0X3NpemVzKCZkYXRhKTsKKworCWlndF9kZXNjcmli ZSgiTmVnYXRpdmUgdGVzdCBjYXNlIGRlZ2FtbWEgbHV0IHNpemUiKTsKKwlpZ3Rfc3VidGVzdF9m KCJwaXBlLWludmFsaWQtZGVnYW1tYS1sdXQtc2l6ZXMiKQorCQlpbnZhbGlkX2RlZ2FtbWFfbHV0 X3NpemVzKCZkYXRhKTsKKworCWlndF9kZXNjcmliZSgiTmVnYXRpdmUgdGVzdCBjYXNlIGN0bSBt YXRyaXggc2l6ZSIpOworCWlndF9zdWJ0ZXN0X2YoInBpcGUtaW52YWxpZC1jdG0tbWF0cml4LXNp emVzIikKKwkJaW52YWxpZF9jdG1fbWF0cml4X3NpemVzKCZkYXRhKTsKKworCWlndF9maXh0dXJl IHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9CmRpZmYgLS1naXQg YS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IGE3OWQyMmIuLmEx MDg1NGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCkBAIC0yNTUsNiArMjU1LDcgQEAgZW5kaWYKIGlmIGNoYW1lbGl1bS5mb3VuZCgpCiAJdGVz dF9wcm9ncyArPSBbCiAJCSdrbXNfY2hhbWVsaXVtJywKKwkJJ2ttc19jb2xvcl9jaGFtZWxpdW0n LAogCV0KIAl0ZXN0X2RlcHMgKz0gY2hhbWVsaXVtCiBlbmRpZgotLSAKMi43LjQKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=