From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4DACA89EBB for ; Fri, 5 Apr 2019 12:52:20 +0000 (UTC) From: Maarten Lankhorst Date: Fri, 5 Apr 2019 14:52:16 +0200 Message-Id: <20190405125216.6133-2-maarten.lankhorst@linux.intel.com> In-Reply-To: <20190405125216.6133-1-maarten.lankhorst@linux.intel.com> References: <20190405125216.6133-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/2] tests/kms_chamelium: Fix *-cmp-random and *-crc-random tests, v3. 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 List-ID: VGhlIHJhbmRvbSB0ZXN0cyBhbGxvd2VkIHBvdGVudGlhbGx5IGludmFsaWQgdGhpbmdzOgotIDF4 MSBmYidzIHRvIGJlIGNyZWF0ZWQuIEZvcmNlIGEgbWluaW11bSBvZiAzMiBvbiBZVVYgc28gYSBz Y2FsZWQKICBwbGFuYXIgZm9ybWF0IHBsYW5lIHdpbGwgYmUgYXQgbGVhc3QgMTZ4MTYuIFRoaXMg d2lsbCBmaXgKICBzY2FsZWQvcGxhbmFyIGZvcm1hdCBzdXBwb3J0IGluIGk5MTUgYW5kIGF2b2lk IGEgZGl2IGJ5IHplcm8gd2hlbgogIGNhbGN1bGF0aW5nIGEgdmFsdWUgbW9kdWxvIGgvMiBhbmQg dy8yLgotIERvd25zY2FsaW5nIHRvIGFueSBhbW91bnQsIHJlc3RyaWN0IGl0IHRvIDJ4IHRvIG1h a2UgdGhlIHRlc3QgcGFzcy4KLSBTb21lIGh3IG1heSBub3QgYWxsb3cgc2NhbGluZywgaW4gdGhv c2UgY2FzZXMgd2Ugc2hvdWxkIGZhbGxiYWNrCiAgdG8gbm8gc2NhbGluZyBhdCBhbGwuCi0gQXR0 ZW1wdGluZyB0byBjb25maWd1cmUgYSBtaW5pbXVtIG9mIDQgcGxhbmVzLCBpbnN0ZWFkIG9mIGEg bWF4aW11bS4KICBUaGlzIGZhaWxzIHdpdGggYSBudWxsIHBvaW50ZXIgZGVyZWYgaWYgdGhlIGh3 IGRvZXNuJ3QgaGF2ZSA0CiAgY29uZmlndXJhYmxlIG92ZXJsYXkgcGxhbmVzLgoKQ2hhbmdlcyBz aW5jZSB2MToKLSBFbmZvcmNlIGEgbWluaW11bSBkaXNwbGF5ZWQgc2l6ZSBvZiAxNngxNiBmb3Ig aW50ZWwgb25seSwKICBvdGhlcndpc2UgaXQncyAxeDEuCi0gRml4IGNvbW1lbnRzLgpDaGFuZ2Vz IHNpbmNlIHYyOgotIEZpeCBjb21tZW50cyBoYXJkZXIuCi0gUGljayBhIHJhbmRvbSBmb3JtYXQg YW5kIGl0cyBtb2RpZmllciBmcm9tIHRoZSBwbGFuZSBpdHNlbGYsCiAgaW5zdGVhZCBvZiB1c2lu ZyBpZ3RfZm9ybWF0X2FycmF5X2ZpbGwoKS4gVGhpcyB3aWxsIGNhdXNlIHRoZSB0ZXN0CiAgdG8g dXNlIGFsbCB2YWxpZCBjb21iaW5hdGlvbnMgb2YgbW9kaWZpZXJzIGFuZCBmb3JtYXRzLgotIFNl dCBtaW5pbXVtIGRpbWVuc2lvbiB0byA4IGZvciAheXV2LCBhbmQgMTYgZm9yIFlVVi4KLSBHZW5l cmF0ZSBmb3JtYXQgLyBtb2RpZmllciBiZWZvcmUKCkNjOiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1 bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+ClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hv cnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMva21zX2No YW1lbGl1bS5jIHwgMzE4ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDE5MyBpbnNlcnRpb25zKCspLCAxMjUgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvdGVzdHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1lbGl1bS5j CmluZGV4IDJkYzEwNDlkMmRkYS4uYTU1YmQ4NmM3N2Y1IDEwMDY0NAotLS0gYS90ZXN0cy9rbXNf Y2hhbWVsaXVtLmMKKysrIGIvdGVzdHMva21zX2NoYW1lbGl1bS5jCkBAIC03MTAsMTcgKzcxMCw0 OCBAQCB0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVtcChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxp dW1fcG9ydCAqcG9ydCkKIAlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwogfQogCi1z dGF0aWMgdm9pZCBzZWxlY3RfdGlsZWRfbW9kaWZpZXIoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50 MzJfdCB3aWR0aCwKKworc3RhdGljIHZvaWQgcmFuZG9taXplX3BsYW5lX3N0cmlkZShkYXRhX3Qg KmRhdGEsCisJCQkJICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCQkgICB1 aW50MzJfdCBmb3JtYXQsIHVpbnQ2NF90IG1vZGlmaWVyLAorCQkJCSAgIHNpemVfdCAqc3RyaWRl KQoreworCXNpemVfdCBzdHJpZGVfbWluOworCXVpbnQzMl90IG1heF90aWxlX3cgPSA0LCB0aWxl X3csIHRpbGVfaDsKKwlpbnQgaTsKKwlzdHJ1Y3QgaWd0X2ZiIGR1bW15OworCisJc3RyaWRlX21p biA9IHdpZHRoICogaWd0X2Zvcm1hdF9wbGFuZV9icHAoZm9ybWF0LCAwKSAvIDg7CisKKwkvKiBS YW5kb21pemUgdGhlIHN0cmlkZSB0byBsZXNzIHRoYW4gdHdpY2UgdGhlIG1pbmltdW0uICovCisJ KnN0cmlkZSA9IChyYW5kKCkgJSBzdHJpZGVfbWluKSArIHN0cmlkZV9taW47CisKKwkvKgorCSAq IENyZWF0ZSBhIGR1bW15IEZCIHRvIGRldGVybWluZSBicHAgZm9yIGVhY2ggcGxhbmUsIGFuZCBj YWxjdWxhdGUKKwkgKiB0aGUgbWF4aW11bSB0aWxlIHdpZHRoIGZyb20gdGhhdC4KKwkgKi8KKwlp Z3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgNjQsIDY0LCBmb3JtYXQsIG1vZGlmaWVyLCAmZHVt bXkpOworCWZvciAoaSA9IDA7IGkgPCBkdW1teS5udW1fcGxhbmVzOyBpKyspIHsKKwkJaWd0X2dl dF9mYl90aWxlX3NpemUoZGF0YS0+ZHJtX2ZkLCBtb2RpZmllciwgZHVtbXkucGxhbmVfYnBwW2ld LCAmdGlsZV93LCAmdGlsZV9oKTsKKworCQlpZiAodGlsZV93ID4gbWF4X3RpbGVfdykKKwkJCW1h eF90aWxlX3cgPSB0aWxlX3c7CisJfQorCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZHVt bXkpOworCisJLyoKKwkgKiBQaXhtYW4gcmVxdWlyZXMgdGhlIHN0cmlkZSB0byBiZSBhbGlnbmVk IHRvIDMyLWJpdHMsIHdoaWNoIGlzCisJICogcmVmbGVjdGVkIGluIHRoZSBpbml0aWFsIHZhbHVl IG9mIG1heF90aWxlX3cgYW5kIHRoZSBodworCSAqIG1heSByZXF1aXJlIGEgbXVsdGlwbGUgb2Yg dGlsZSB3aWR0aCwgY2hvb3NlIGJpZ2dlc3Qgb2YgdGhlIDIuCisJICovCisJKnN0cmlkZSA9IEFM SUdOKCpzdHJpZGUsIG1heF90aWxlX3cpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdGlsZWRf bW9kaWZpZXIoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCB3aWR0aCwKIAkJCQkgIHVpbnQz Ml90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LAogCQkJCSAgdWludDY0X3QgKm1vZGlmaWVyKQog ewotCWlmIChpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwKLQkJCQkgICAg IERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1ZDNF9UX1RJTEVEKSkgewotCQlpZ3RfZGVidWcoIlNl bGVjdGluZyBWQzQgVC10aWxpbmdcbiIpOwotCi0JCSptb2RpZmllciA9IERSTV9GT1JNQVRfTU9E X0JST0FEQ09NX1ZDNF9UX1RJTEVEOwotCX0gZWxzZSBpZiAoaWd0X3BsYW5lX2hhc19mb3JtYXRf bW9kKHBsYW5lLCBmb3JtYXQsCi0JCQkJCSAgICBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5E MjU2KSkgeworCWlmICgqbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDI1 NikgewogCQkvKiBSYW5kb21pemUgdGhlIGNvbHVtbiBoZWlnaHQgdG8gbGVzcyB0aGFuIHR3aWNl IHRoZSBtaW5pbXVtLiAqLwogCQlzaXplX3QgY29sdW1uX2hlaWdodCA9IChyYW5kKCkgJSBoZWln aHQpICsgaGVpZ2h0OwogCkBAIC03MjgsOTAgKzc1OSw4NCBAQCBzdGF0aWMgdm9pZCBzZWxlY3Rf dGlsZWRfbW9kaWZpZXIoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCB3aWR0aCwKIAkJCSAg Y29sdW1uX2hlaWdodCk7CiAKIAkJKm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01f U0FORDI1Nl9DT0xfSEVJR0hUKGNvbHVtbl9oZWlnaHQpOwotCX0gZWxzZSB7Ci0JCSptb2RpZmll ciA9IERSTV9GT1JNQVRfTU9EX0xJTkVBUjsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJhbmRvbWl6 ZV9wbGFuZV9mb3JtYXRfc3RyaWRlKGlndF9wbGFuZV90ICpwbGFuZSwKLQkJCQkJICB1aW50MzJf dCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAotCQkJCQkgIHVpbnQzMl90ICpmb3JtYXQsIHVpbnQ2 NF90ICptb2RpZmllciwKLQkJCQkJICBzaXplX3QgKnN0cmlkZSwgYm9vbCBhbGxvd195dXYpCitz dGF0aWMgdm9pZCByYW5kb21pemVfcGxhbmVfc2V0dXAoZGF0YV90ICpkYXRhLCBpZ3RfcGxhbmVf dCAqcGxhbmUsCisJCQkJICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJCQkJICB1aW50MzJfdCAq d2lkdGgsIHVpbnQzMl90ICpoZWlnaHQsCisJCQkJICB1aW50MzJfdCAqZm9ybWF0LCB1aW50NjRf dCAqbW9kaWZpZXIsCisJCQkJICBib29sIGFsbG93X3l1dikKIHsKLQlzaXplX3Qgc3RyaWRlX21p bjsKLQl1aW50MzJfdCAqZm9ybWF0c19hcnJheTsKLQl1bnNpZ25lZCBpbnQgZm9ybWF0c19jb3Vu dDsKKwlpbnQgbWluX2RpbTsKKwl1aW50MzJfdCBpZHhbcGxhbmUtPmZvcm1hdF9tb2RfY291bnRd OwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IGk7Ci0JYm9vbCB0aWxl ZDsKLQlpbnQgaW5kZXg7Ci0KLQlpZ3RfZm9ybWF0X2FycmF5X2ZpbGwoJmZvcm1hdHNfYXJyYXks ICZmb3JtYXRzX2NvdW50LCBhbGxvd195dXYpOwogCiAJLyogRmlyc3QgcGFzcyB0byBjb3VudCB0 aGUgc3VwcG9ydGVkIGZvcm1hdHMuICovCi0JZm9yIChpID0gMDsgaSA8IGZvcm1hdHNfY291bnQ7 IGkrKykKLQkJaWYgKGlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9ybWF0c19hcnJh eVtpXSwKLQkJCQkJICAgICBEUk1fRk9STUFUX01PRF9MSU5FQVIpKQotCQkJY291bnQrKzsKKwlm b3IgKGkgPSAwOyBpIDwgcGxhbmUtPmZvcm1hdF9tb2RfY291bnQ7IGkrKykKKwkJaWYgKGlndF9m Yl9zdXBwb3J0ZWRfZm9ybWF0KHBsYW5lLT5mb3JtYXRzW2ldKSAmJgorCQkgICAgKGFsbG93X3l1 diB8fCAhaWd0X2Zvcm1hdF9pc195dXYocGxhbmUtPmZvcm1hdHNbaV0pKSkKKwkJCWlkeFtjb3Vu dCsrXSA9IGk7CiAKIAlpZ3RfYXNzZXJ0KGNvdW50ID4gMCk7CiAKLQlpbmRleCA9IHJhbmQoKSAl IGNvdW50OwotCi0JLyogU2Vjb25kIHBhc3MgdG8gZ2V0IHRoZSBpbmRleC10aCBzdXBwb3J0ZWQg Zm9ybWF0LiAqLwotCWZvciAoaSA9IDA7IGkgPCBmb3JtYXRzX2NvdW50OyBpKyspIHsKLQkJaWYg KCFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdHNfYXJyYXlbaV0sCi0JCQkJ CSAgICAgIERSTV9GT1JNQVRfTU9EX0xJTkVBUikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWlu ZGV4LS0pIHsKLQkJCSpmb3JtYXQgPSBmb3JtYXRzX2FycmF5W2ldOwotCQkJYnJlYWs7Ci0JCX0K LQl9Ci0KLQlmcmVlKGZvcm1hdHNfYXJyYXkpOworCWkgPSBpZHhbcmFuZCgpICUgY291bnRdOwor CSpmb3JtYXQgPSBwbGFuZS0+Zm9ybWF0c1tpXTsKKwkqbW9kaWZpZXIgPSBwbGFuZS0+bW9kaWZp ZXJzW2ldOwogCi0JaWd0X2Fzc2VydChpbmRleCA8IDApOworCXVwZGF0ZV90aWxlZF9tb2RpZmll cihwbGFuZSwgKndpZHRoLCAqaGVpZ2h0LCAqZm9ybWF0LCBtb2RpZmllcik7CiAKLQlzdHJpZGVf bWluID0gd2lkdGggKiBpZ3RfZm9ybWF0X3BsYW5lX2JwcCgqZm9ybWF0LCAwKSAvIDg7CisJLyoK KwkgKiBSYW5kb21pemUgd2lkdGggYW5kIGhlaWdodCBpbiB0aGUgbW9kZSBkaW1lbnNpb25zIHJh bmdlLgorCSAqCisJICogUmVzdHJpY3QgdG8gYSBtaW4gb2YgMiAqIG1pbl9kaW0sIHRoaXMgd2F5 IHNyY193L2ggYXJlIGFsd2F5cyBhdAorCSAqIGxlYXN0IG1pbl9kaW0sIGJlY2F1c2Ugc3JjX3cg PSB3aWR0aCAtIChyYW5kICUgdyAvIDIpLgorCSAqCisJICogVXNlIGEgbWluaW11bSBkaW1lbnNp b24gb2YgMTYgZm9yIFlVViwgYmVjYXVzZSBwbGFuYXIgWVVWCisJICogc3Vic2FtcGxlcyB0aGUg VVYgcGxhbmUuCisJICovCisJbWluX2RpbSA9IGlndF9mb3JtYXRfaXNfeXV2KCpmb3JtYXQpID8g MTYgOiA4OwogCi0JLyogUmFuZG9taXplIHRoZSBzdHJpZGUgdG8gbGVzcyB0aGFuIHR3aWNlIHRo ZSBtaW5pbXVtLiAqLwotCSpzdHJpZGUgPSAocmFuZCgpICUgc3RyaWRlX21pbikgKyBzdHJpZGVf bWluOworCSp3aWR0aCA9IG1heCgocmFuZCgpICUgbW9kZS0+aGRpc3BsYXkpICsgMSwgMiAqIG1p bl9kaW0pOworCSpoZWlnaHQgPSBtYXgoKHJhbmQoKSAlIG1vZGUtPnZkaXNwbGF5KSArIDEsIDIg KiBtaW5fZGltKTsKK30KIAotCS8qIFBpeG1hbiByZXF1aXJlcyB0aGUgc3RyaWRlIHRvIGJlIGFs aWduZWQgdG8gMzItYnl0ZSB3b3Jkcy4gKi8KLQkqc3RyaWRlID0gQUxJR04oKnN0cmlkZSwgc2l6 ZW9mKHVpbnQzMl90KSk7CitzdGF0aWMgdm9pZCBjb25maWd1cmVfcGxhbmUoaWd0X3BsYW5lX3Qg KnBsYW5lLCB1aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gsCisJCQkgICAgdWludDMyX3Qg c3JjX3gsIHVpbnQzMl90IHNyY195LCB1aW50MzJfdCBjcnRjX3csCisJCQkgICAgdWludDMyX3Qg Y3J0Y19oLCBpbnQzMl90IGNydGNfeCwgaW50MzJfdCBjcnRjX3ksCisJCQkgICAgc3RydWN0IGln dF9mYiAqZmIpCit7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOwogCi0JLyogUmFuZG9t aXplIHRoZSB1c2Ugb2YgYSB0aWxlZCBtb2RlIHdpdGggYSAxLzQgcHJvYmFiaWxpdHkuICovCi0J dGlsZWQgPSAoKHJhbmQoKSAlIDQpID09IDApOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxh bmUsIGNydGNfeCwgY3J0Y195KTsKKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNydGNfdywg Y3J0Y19oKTsKIAotCWlmICh0aWxlZCkKLQkJc2VsZWN0X3RpbGVkX21vZGlmaWVyKHBsYW5lLCB3 aWR0aCwgaGVpZ2h0LCAqZm9ybWF0LCBtb2RpZmllcik7Ci0JZWxzZQotCQkqbW9kaWZpZXIgPSBE Uk1fRk9STUFUX01PRF9MSU5FQVI7CisJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIHNy Y194LCBzcmNfeSk7CisJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgc3JjX3csIHNyY19oKTsK IH0KIAotc3RhdGljIHZvaWQgcmFuZG9taXplX3BsYW5lX2RpbWVuc2lvbnMoZHJtTW9kZU1vZGVJ bmZvICptb2RlLAotCQkJCSAgICAgICB1aW50MzJfdCAqd2lkdGgsIHVpbnQzMl90ICpoZWlnaHQs Ci0JCQkJICAgICAgIHVpbnQzMl90ICpzcmNfdywgdWludDMyX3QgKnNyY19oLAotCQkJCSAgICAg ICB1aW50MzJfdCAqc3JjX3gsIHVpbnQzMl90ICpzcmNfeSwKLQkJCQkgICAgICAgdWludDMyX3Qg KmNydGNfdywgdWludDMyX3QgKmNydGNfaCwKLQkJCQkgICAgICAgaW50MzJfdCAqY3J0Y194LCBp bnQzMl90ICpjcnRjX3ksCi0JCQkJICAgICAgIGJvb2wgYWxsb3dfc2NhbGluZykKK3N0YXRpYyB2 b2lkIHJhbmRvbWl6ZV9wbGFuZV9jb29yZGluYXRlcyhkYXRhX3QgKmRhdGEsIGlndF9wbGFuZV90 ICpwbGFuZSwKKwkJCQkJZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJCQlzdHJ1Y3QgaWd0X2Zi ICpmYiwKKwkJCQkJdWludDMyX3QgKnNyY193LCB1aW50MzJfdCAqc3JjX2gsCisJCQkJCXVpbnQz Ml90ICpzcmNfeCwgdWludDMyX3QgKnNyY195LAorCQkJCQl1aW50MzJfdCAqY3J0Y193LCB1aW50 MzJfdCAqY3J0Y19oLAorCQkJCQlpbnQzMl90ICpjcnRjX3gsIGludDMyX3QgKmNydGNfeSwKKwkJ CQkJYm9vbCBhbGxvd19zY2FsaW5nKQogeworCWJvb2wgaXNfeXV2ID0gaWd0X2Zvcm1hdF9pc195 dXYoZmItPmRybV9mb3JtYXQpOworCXVpbnQzMl90IHdpZHRoID0gZmItPndpZHRoLCBoZWlnaHQg PSBmYi0+aGVpZ2h0OwogCWRvdWJsZSByYXRpbzsKLQotCS8qIFJhbmRvbWl6ZSB3aWR0aCBhbmQg aGVpZ2h0IGluIHRoZSBtb2RlIGRpbWVuc2lvbnMgcmFuZ2UuICovCi0JKndpZHRoID0gKHJhbmQo KSAlIG1vZGUtPmhkaXNwbGF5KSArIDE7Ci0JKmhlaWdodCA9IChyYW5kKCkgJSBtb2RlLT52ZGlz cGxheSkgKyAxOworCWludCByZXQ7CiAKIAkvKiBSYW5kb21pemUgc291cmNlIG9mZnNldCBpbiB0 aGUgZmlyc3QgaGFsZiBvZiB0aGUgb3JpZ2luYWwgc2l6ZS4gKi8KLQkqc3JjX3ggPSByYW5kKCkg JSAoKndpZHRoIC8gMik7Ci0JKnNyY195ID0gcmFuZCgpICUgKCpoZWlnaHQgLyAyKTsKKwkqc3Jj X3ggPSByYW5kKCkgJSAod2lkdGggLyAyKTsKKwkqc3JjX3kgPSByYW5kKCkgJSAoaGVpZ2h0IC8g Mik7CiAKIAkvKiBUaGUgc291cmNlIHNpemUgb25seSBpbmNsdWRlcyB0aGUgYWN0aXZlIHNvdXJj ZSBhcmVhLiAqLwotCSpzcmNfdyA9ICp3aWR0aCAtICpzcmNfeDsKLQkqc3JjX2ggPSAqaGVpZ2h0 IC0gKnNyY195OworCSpzcmNfdyA9IHdpZHRoIC0gKnNyY194OworCSpzcmNfaCA9IGhlaWdodCAt ICpzcmNfeTsKIAogCWlmIChhbGxvd19zY2FsaW5nKSB7CiAJCSpjcnRjX3cgPSAocmFuZCgpICUg bW9kZS0+aGRpc3BsYXkpICsgMTsKQEAgLTgyMSwxNyArODQ2LDIyIEBAIHN0YXRpYyB2b2lkIHJh bmRvbWl6ZV9wbGFuZV9kaW1lbnNpb25zKGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKIAkJICogRG9u J3QgYm90aGVyIHdpdGggc2NhbGluZyBpZiBkaW1lbnNpb25zIGFyZSBxdWl0ZSBjbG9zZSBpbgog CQkgKiBvcmRlciB0byBnZXQgbm9uLXNjYWxpbmcgY2FzZXMgbW9yZSBmcmVxdWVudGx5LiBBbHNv IGxpbWl0CiAJCSAqIHNjYWxpbmcgdG8gM3ggdG8gYXZvaWQgYWdyZXNzaXZlIGZpbHRlcmluZyB0 aGF0IG1ha2VzCi0JCSAqIGNvbXBhcmlzb24gbGVzcyByZWxpYWJsZS4KKwkJICogY29tcGFyaXNv biBsZXNzIHJlbGlhYmxlLCBhbmQgZG9uJ3QgZ28gYWJvdmUgMnggZG93bnNhbXBsaW5nCisJCSAq IHRvIGF2b2lkIHBvc3NpYmxlIGh3IGxpbWl0YXRpb25zLgogCQkgKi8KIAogCQlyYXRpbyA9ICgo ZG91YmxlKSAqY3J0Y193IC8gKnNyY193KTsKLQkJaWYgKHJhdGlvID4gMC44ICYmIHJhdGlvIDwg MS4yKQorCQlpZiAocmF0aW8gPCAwLjUpCisJCQkqc3JjX3cgPSAqY3J0Y193ICogMjsKKwkJZWxz ZSBpZiAocmF0aW8gPiAwLjggJiYgcmF0aW8gPCAxLjIpCiAJCQkqY3J0Y193ID0gKnNyY193Owog CQllbHNlIGlmIChyYXRpbyA+IDMuMCkKIAkJCSpjcnRjX3cgPSAqc3JjX3cgKiAzOwogCiAJCXJh dGlvID0gKChkb3VibGUpICpjcnRjX2ggLyAqc3JjX2gpOwotCQlpZiAocmF0aW8gPiAwLjggJiYg cmF0aW8gPCAxLjIpCisJCWlmIChyYXRpbyA8IDAuNSkKKwkJCSpzcmNfaCA9ICpjcnRjX2ggKiAy OworCQllbHNlIGlmIChyYXRpbyA+IDAuOCAmJiByYXRpbyA8IDEuMikKIAkJCSpjcnRjX2ggPSAq c3JjX2g7CiAJCWVsc2UgaWYgKHJhdGlvID4gMy4wKQogCQkJKmNydGNfaCA9ICpzcmNfaCAqIDM7 CkBAIC04NDYsOCArODc2LDE1IEBAIHN0YXRpYyB2b2lkIHJhbmRvbWl6ZV9wbGFuZV9kaW1lbnNp b25zKGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKIAkJICogc2NhbGVkIGNsaXBwaW5nIG1heSByZXN1 bHQgaW4gZGVjaW1hbCBkaW1lbnNpb25zLCB0aGF0IG1vc3QKIAkJICogZHJpdmVycyBkb24ndCBz dXBwb3J0LgogCQkgKi8KLQkJKmNydGNfeCA9IHJhbmQoKSAlIChtb2RlLT5oZGlzcGxheSAtICpj cnRjX3cpOwotCQkqY3J0Y195ID0gcmFuZCgpICUgKG1vZGUtPnZkaXNwbGF5IC0gKmNydGNfaCk7 CisJCWlmICgqY3J0Y193IDwgbW9kZS0+aGRpc3BsYXkpCisJCQkqY3J0Y194ID0gcmFuZCgpICUg KG1vZGUtPmhkaXNwbGF5IC0gKmNydGNfdyk7CisJCWVsc2UKKwkJCSpjcnRjX3ggPSAwOworCisJ CWlmICgqY3J0Y19oIDwgbW9kZS0+dmRpc3BsYXkpCisJCQkqY3J0Y195ID0gcmFuZCgpICUgKG1v ZGUtPnZkaXNwbGF5IC0gKmNydGNfaCk7CisJCWVsc2UKKwkJCSpjcnRjX3kgPSAwOwogCX0gZWxz ZSB7CiAJCS8qCiAJCSAqIFJhbmRvbWl6ZSB0aGUgb24tY3J0YyBwb3NpdGlvbiBhbmQgYWxsb3cg dGhlIHBsYW5lIHRvIGdvCkBAIC04NTYsNiArODkzLDYyIEBAIHN0YXRpYyB2b2lkIHJhbmRvbWl6 ZV9wbGFuZV9kaW1lbnNpb25zKGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKIAkJKmNydGNfeCA9IChy YW5kKCkgJSBtb2RlLT5oZGlzcGxheSkgLSAqY3J0Y193IC8gMjsKIAkJKmNydGNfeSA9IChyYW5k KCkgJSBtb2RlLT52ZGlzcGxheSkgLSAqY3J0Y19oIC8gMjsKIAl9CisKKwljb25maWd1cmVfcGxh bmUocGxhbmUsICpzcmNfdywgKnNyY19oLCAqc3JjX3gsICpzcmNfeSwKKwkJCSpjcnRjX3csICpj cnRjX2gsICpjcnRjX3gsICpjcnRjX3ksIGZiKTsKKwlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29t bWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQkJICAgIERSTV9NT0RFX0FUT01JQ19URVNU X09OTFkgfAorCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsCisJCQkJCSAg ICBOVUxMKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuOworCisJLyogQ29vcmRpbmF0ZXMgYXJlIGxv Z2dlZCBpbiB0aGUgZHVtcGVkIGRlYnVnIGxvZywgc28gb25seSByZXBvcnQgdy9oIG9uIGZhaWx1 cmUgaGVyZS4gKi8KKwlpZ3RfYXNzZXJ0X2YocmV0ICE9IC1FTk9TUEMsIkZhaWx1cmUgaW4gdGVz dGNhc2UsIGludmFsaWQgY29vcmRpbmF0ZXMgb24gYSAldXgldSBmYlxuIiwgd2lkdGgsIGhlaWdo dCk7CisKKwkvKiBNYWtlIFlVViBjb29yZGluYXRlcyBhIG11bHRpcGxlIG9mIDIgYW5kIHJldHJ5 IHRoZSBtYXRoLiAqLworCWlmIChpc195dXYpIHsKKwkJKnNyY194ICY9IH4xOworCQkqc3JjX3kg Jj0gfjE7CisJCSpzcmNfdyAmPSB+MTsKKwkJKnNyY19oICY9IH4xOworCQkvKiBUbyBoYW5kbGUg MToxIHNjYWxpbmcsIGNsZWFyIGNydGNfdy9oIHRvby4gKi8KKwkJKmNydGNfdyAmPSB+MTsKKwkJ KmNydGNfaCAmPSB+MTsKKworCQlpZiAoKmNydGNfeCA8IDAgJiYgKCpjcnRjX3ggJiAxKSkKKwkJ CSgqY3J0Y194KSsrOworCQllbHNlCisJCQkqY3J0Y194ICY9IH4xOworCisJCS8qIElmIG5lZ2F0 aXZlLCByb3VuZCB1cCB0byAwIGluc3RlYWQgb2YgZG93biAqLworCQlpZiAoKmNydGNfeSA8IDAg JiYgKCpjcnRjX3kgJiAxKSkKKwkJCSgqY3J0Y195KSsrOworCQllbHNlCisJCQkqY3J0Y195ICY9 IH4xOworCisJCWNvbmZpZ3VyZV9wbGFuZShwbGFuZSwgKnNyY193LCAqc3JjX2gsICpzcmNfeCwg KnNyY195LCAqY3J0Y193LAorCQkJCSpjcnRjX2gsICpjcnRjX3gsICpjcnRjX3ksIGZiKTsKKwkJ cmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJ CQlEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwKKwkJCQkJCURSTV9NT0RFX0FUT01JQ19BTExP V19NT0RFU0VULAorCQkJCQkJTlVMTCk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuOworCX0KKwor CWlndF9hc3NlcnQoIXJldCB8fCBhbGxvd19zY2FsaW5nKTsKKwlpZ3RfaW5mbygiU2NhbGluZyBy YXRpbyAlZyAvICVnIGZhaWxlZCwgdHJ5aW5nIHdpdGhvdXQgc2NhbGluZy5cbiIsCisJCSAgKChk b3VibGUpICpjcnRjX3cgLyAqc3JjX3cpLCAoKGRvdWJsZSkgKmNydGNfaCAvICpzcmNfaCkpOwor CisJKmNydGNfdyA9ICpzcmNfdzsKKwkqY3J0Y19oID0gKnNyY19oOworCisJY29uZmlndXJlX3Bs YW5lKHBsYW5lLCAqc3JjX3csICpzcmNfaCwgKnNyY194LCAqc3JjX3ksICpjcnRjX3csCisJCQkq Y3J0Y19oLCAqY3J0Y194LCAqY3J0Y195LCBmYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21p YygmZGF0YS0+ZGlzcGxheSwKKwkJCQkgIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfAorCQkJ CSAgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9p ZCBibGl0X3BsYW5lX2NhaXJvKGRhdGFfdCAqZGF0YSwgY2Fpcm9fc3VyZmFjZV90ICpyZXN1bHQs CkBAIC05MTQsMjAgKzEwMDcsNiBAQCBzdGF0aWMgdm9pZCBibGl0X3BsYW5lX2NhaXJvKGRhdGFf dCAqZGF0YSwgY2Fpcm9fc3VyZmFjZV90ICpyZXN1bHQsCiAJY2Fpcm9fZGVzdHJveShjcik7CiB9 CiAKLXN0YXRpYyB2b2lkIGNvbmZpZ3VyZV9wbGFuZShpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQz Ml90IHNyY193LCB1aW50MzJfdCBzcmNfaCwKLQkJCSAgICB1aW50MzJfdCBzcmNfeCwgdWludDMy X3Qgc3JjX3ksIHVpbnQzMl90IGNydGNfdywKLQkJCSAgICB1aW50MzJfdCBjcnRjX2gsIGludDMy X3QgY3J0Y194LCBpbnQzMl90IGNydGNfeSwKLQkJCSAgICBzdHJ1Y3QgaWd0X2ZiICpmYikKLXsK LQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7Ci0KLQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9u KHBsYW5lLCBjcnRjX3gsIGNydGNfeSk7Ci0JaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjcnRj X3csIGNydGNfaCk7Ci0KLQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgc3JjX3gsIHNy Y195KTsKLQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBzcmNfdywgc3JjX2gpOwotfQotCiBz dGF0aWMgdm9pZCBwcmVwYXJlX3JhbmRvbWl6ZWRfcGxhbmUoZGF0YV90ICpkYXRhLAogCQkJCSAg ICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAogCQkJCSAgICAgaWd0X3BsYW5lX3QgKnBsYW5lLApA QCAtOTQ4LDUxICsxMDI3LDQ5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfcmFuZG9taXplZF9wbGFu ZShkYXRhX3QgKmRhdGEsCiAJYm9vbCB0aWxlZDsKIAlpbnQgZmJfaWQ7CiAKLQlyYW5kb21pemVf cGxhbmVfZGltZW5zaW9ucyhtb2RlLCAmb3ZlcmxheV9mYl93LCAmb3ZlcmxheV9mYl9oLAotCQkJ CSAgICZvdmVybGF5X3NyY193LCAmb3ZlcmxheV9zcmNfaCwKLQkJCQkgICAmb3ZlcmxheV9zcmNf eCwgJm92ZXJsYXlfc3JjX3ksCi0JCQkJICAgJm92ZXJsYXlfY3J0Y193LCAmb3ZlcmxheV9jcnRj X2gsCi0JCQkJICAgJm92ZXJsYXlfY3J0Y194LCAmb3ZlcmxheV9jcnRjX3ksCi0JCQkJICAgYWxs b3dfc2NhbGluZyk7CisJcmFuZG9taXplX3BsYW5lX3NldHVwKGRhdGEsIHBsYW5lLCBtb2RlLCAm b3ZlcmxheV9mYl93LCAmb3ZlcmxheV9mYl9oLAorCQkJICAgICAgJmZvcm1hdCwgJm1vZGlmaWVy LCBhbGxvd195dXYpOwogCi0JaWd0X2RlYnVnKCJQbGFuZSAlZDogZnJhbWVidWZmZXIgc2l6ZSAl ZHglZFxuIiwgaW5kZXgsCi0JCSAgb3ZlcmxheV9mYl93LCBvdmVybGF5X2ZiX2gpOwotCWlndF9k ZWJ1ZygiUGxhbmUgJWQ6IG9uLWNydGMgc2l6ZSAlZHglZFxuIiwgaW5kZXgsCi0JCSAgb3Zlcmxh eV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oKTsKLQlpZ3RfZGVidWcoIlBsYW5lICVkOiBvbi1jcnRj IHBvc2l0aW9uICVkeCVkXG4iLCBpbmRleCwKLQkJICBvdmVybGF5X2NydGNfeCwgb3ZlcmxheV9j cnRjX3kpOwotCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IGluLWZyYW1lYnVmZmVyIHNpemUgJWR4JWRc biIsIGluZGV4LAotCQkgIG92ZXJsYXlfc3JjX3csIG92ZXJsYXlfc3JjX2gpOwotCWlndF9kZWJ1 ZygiUGxhbmUgJWQ6IGluLWZyYW1lYnVmZmVyIHBvc2l0aW9uICVkeCVkXG4iLCBpbmRleCwKLQkJ ICBvdmVybGF5X3NyY194LCBvdmVybGF5X3NyY195KTsKKwl0aWxlZCA9IChtb2RpZmllciAhPSBM T0NBTF9EUk1fRk9STUFUX01PRF9OT05FKTsKKwlpZ3RfZGVidWcoIlBsYW5lICVkOiBmcmFtZWJ1 ZmZlciBzaXplICVkeCVkICVzIGZvcm1hdCAoJXMpXG4iLAorCQkgIGluZGV4LCBvdmVybGF5X2Zi X3csIG92ZXJsYXlfZmJfaCwKKwkJICBpZ3RfZm9ybWF0X3N0cihmb3JtYXQpLCB0aWxlZCA/ICJ0 aWxlZCIgOiAibGluZWFyIik7CiAKIAkvKiBHZXQgYSBwYXR0ZXJuIGZyYW1lYnVmZmVyIGZvciB0 aGUgb3ZlcmxheSBwbGFuZS4gKi8KIAlmYl9pZCA9IGNoYW1lbGl1bV9nZXRfcGF0dGVybl9mYihk YXRhLCBvdmVybGF5X2ZiX3csIG92ZXJsYXlfZmJfaCwKIAkJCQkJIERSTV9GT1JNQVRfWFJHQjg4 ODgsIDMyLCAmcGF0dGVybl9mYik7CiAJaWd0X2Fzc2VydChmYl9pZCA+IDApOwogCi0JcmFuZG9t aXplX3BsYW5lX2Zvcm1hdF9zdHJpZGUocGxhbmUsIG92ZXJsYXlfZmJfdywgb3ZlcmxheV9mYl9o LAotCQkJCSAgICAgICZmb3JtYXQsICZtb2RpZmllciwgJnN0cmlkZSwgYWxsb3dfeXV2KTsKLQot CXRpbGVkID0gKG1vZGlmaWVyICE9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUpOworCXJhbmRv bWl6ZV9wbGFuZV9zdHJpZGUoZGF0YSwgb3ZlcmxheV9mYl93LCBvdmVybGF5X2ZiX2gsCisJCQkg ICAgICAgZm9ybWF0LCBtb2RpZmllciwgJnN0cmlkZSk7CiAKLQlpZ3RfZGVidWcoIlBsYW5lICVk OiAlcyBmb3JtYXQgKCVzKSB3aXRoIHN0cmlkZSAlbGRcbiIsIGluZGV4LAotCQkgIGlndF9mb3Jt YXRfc3RyKGZvcm1hdCksIHRpbGVkID8gInRpbGVkIiA6ICJsaW5lYXIiLCBzdHJpZGUpOworCWln dF9kZWJ1ZygiUGxhbmUgJWQ6IHN0cmlkZSAlbGRcbiIsIGluZGV4LCBzdHJpZGUpOwogCiAJZmJf aWQgPSBpZ3RfZmJfY29udmVydF93aXRoX3N0cmlkZShvdmVybGF5X2ZiLCAmcGF0dGVybl9mYiwg Zm9ybWF0LAogCQkJCQkgICBtb2RpZmllciwgc3RyaWRlKTsKIAlpZ3RfYXNzZXJ0KGZiX2lkID4g MCk7CiAKKwlyYW5kb21pemVfcGxhbmVfY29vcmRpbmF0ZXMoZGF0YSwgcGxhbmUsIG1vZGUsIG92 ZXJsYXlfZmIsCisJCQkJICAgICZvdmVybGF5X3NyY193LCAmb3ZlcmxheV9zcmNfaCwKKwkJCQkg ICAgJm92ZXJsYXlfc3JjX3gsICZvdmVybGF5X3NyY195LAorCQkJCSAgICAmb3ZlcmxheV9jcnRj X3csICZvdmVybGF5X2NydGNfaCwKKwkJCQkgICAgJm92ZXJsYXlfY3J0Y194LCAmb3ZlcmxheV9j cnRjX3ksCisJCQkJICAgIGFsbG93X3NjYWxpbmcpOworCisJaWd0X2RlYnVnKCJQbGFuZSAlZDog aW4tZnJhbWVidWZmZXIgc2l6ZSAlZHglZFxuIiwgaW5kZXgsCisJCSAgb3ZlcmxheV9zcmNfdywg b3ZlcmxheV9zcmNfaCk7CisJaWd0X2RlYnVnKCJQbGFuZSAlZDogaW4tZnJhbWVidWZmZXIgcG9z aXRpb24gJWR4JWRcbiIsIGluZGV4LAorCQkgIG92ZXJsYXlfc3JjX3gsIG92ZXJsYXlfc3JjX3kp OworCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IG9uLWNydGMgc2l6ZSAlZHglZFxuIiwgaW5kZXgsCisJ CSAgb3ZlcmxheV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oKTsKKwlpZ3RfZGVidWcoIlBsYW5lICVk OiBvbi1jcnRjIHBvc2l0aW9uICVkeCVkXG4iLCBpbmRleCwKKwkJICBvdmVybGF5X2NydGNfeCwg b3ZlcmxheV9jcnRjX3kpOworCiAJYmxpdF9wbGFuZV9jYWlybyhkYXRhLCByZXN1bHRfc3VyZmFj ZSwgb3ZlcmxheV9zcmNfdywgb3ZlcmxheV9zcmNfaCwKIAkJCSBvdmVybGF5X3NyY194LCBvdmVy bGF5X3NyY195LAogCQkJIG92ZXJsYXlfY3J0Y193LCBvdmVybGF5X2NydGNfaCwKIAkJCSBvdmVy bGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3ksICZwYXR0ZXJuX2ZiKTsKIAotCWNvbmZpZ3VyZV9w bGFuZShwbGFuZSwgb3ZlcmxheV9zcmNfdywgb3ZlcmxheV9zcmNfaCwKLQkJCW92ZXJsYXlfc3Jj X3gsIG92ZXJsYXlfc3JjX3ksCi0JCQlvdmVybGF5X2NydGNfdywgb3ZlcmxheV9jcnRjX2gsCi0J CQlvdmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3ksIG92ZXJsYXlfZmIpOwotCiAJLyogUmVt b3ZlIHRoZSBvcmlnaW5hbCBwYXR0ZXJuIGZyYW1lYnVmZmVyLiAqLwogCWlndF9yZW1vdmVfZmIo ZGF0YS0+ZHJtX2ZkLCAmcGF0dGVybl9mYik7CiB9CkBAIC0xMDY4LDcgKzExNDUsNyBAQCBzdGF0 aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfcGxhbmVzX3JhbmRvbShkYXRhX3QgKmRhdGEsCiAJCWlndF9v dXRwdXRfY291bnRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX09WRVJMQVkpOwog CiAJLyogTGltaXQgdGhlIG51bWJlciBvZiBwbGFuZXMgdG8gYSByZWFzb25hYmxlIHNjZW5lLiAq LwotCW92ZXJsYXlfcGxhbmVzX21heCA9IG1heChvdmVybGF5X3BsYW5lc19tYXgsIDQpOworCW92 ZXJsYXlfcGxhbmVzX21heCA9IG1pbihvdmVybGF5X3BsYW5lc19tYXgsIDQpOwogCiAJb3Zlcmxh eV9wbGFuZXNfY291bnQgPSAocmFuZCgpICUgb3ZlcmxheV9wbGFuZXNfbWF4KSArIDE7CiAJaWd0 X2RlYnVnKCJVc2luZyAlZCBvdmVybGF5IHBsYW5lc1xuIiwgb3ZlcmxheV9wbGFuZXNfY291bnQp OwpAQCAtMTEyMSwxNyArMTE5OCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGlzcGxheV9wbGFuZXNf cmFuZG9tKGRhdGFfdCAqZGF0YSwKIAkJY2hhbWVsaXVtX2Rlc3Ryb3lfZnJhbWVfZHVtcChkdW1w KTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgb3ZlcmxheV9wbGFuZXNfY291bnQ7IGkrKykgewot CQlzdHJ1Y3QgaWd0X2ZiICpvdmVybGF5X2ZiID0gJm92ZXJsYXlfZmJzW2ldOwotCQlpZ3RfcGxh bmVfdCAqcGxhbmU7Ci0KLQkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlX2luZGV4 KG91dHB1dCwKLQkJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZLAotCQkJCQkJCWkpOwotCQlp Z3RfYXNzZXJ0KHBsYW5lKTsKLQotCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgb3Zlcmxh eV9mYik7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBvdmVybGF5X3BsYW5lc19jb3VudDsgaSsrKQor CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJm92ZXJsYXlfZmJzW2ldKTsKIAogCWZyZWUo b3ZlcmxheV9mYnMpOwogCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaWd0LWRldg==