From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id EAF676E5F3 for ; Thu, 6 Sep 2018 07:24:14 +0000 (UTC) From: Gwan-gyeong Mun Date: Thu, 6 Sep 2018 10:24:00 +0300 Message-Id: <20180906072400.7963-6-gwan-gyeong.mun@intel.com> In-Reply-To: <20180906072400.7963-1-gwan-gyeong.mun@intel.com> References: <20180906072400.7963-1-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RESEND,v3 5/5] kms_plane: Add clipping subtests 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: juha-pekka.heikkila@intel.com List-ID: RnJvbTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoKQWRkIHBsYW5lIGNsaXBwaW5n IHN1YnRlc3RzIGRpc3BsYXlpbmcgYSBzaW5nbGUgY2xpcHBlZCBwbGFuZSwgd2l0aCB0aGUKZm9s bG93aW5nIHRlc3QgY2FzZXM6CmEpIHBsYW5lIGNvdmVyaW5nIHRoZSB3aG9sZSBzY3JlZW4sIHNv IHRoYXQgY2xpcHBpbmcgaXMgZG9uZSBhdCBhbGwgNAogICBzY3JlZW4gZWRnZXMKYikgcGxhbmUg YXQgZWl0aGVyIG9mIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiBjbGlwcGVkLCBzbyB0aGF0 IGEKICAgNHg0IHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKYykgcGxhbmUgYXQg ZWl0aGVyIG9mIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiBjbGlwcGVkLCBzbyB0aGF0IGEK ICAgMngyIHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKCkVhY2ggb2YgdGhlIGFi b3ZlIGNhc2VzIGFyZSB0ZXN0ZWQgd2l0aCBhbGwgc3VwcG9ydGVkIHRpbGluZyBtb2RlcywKcm90 YXRpb24gZGVncmVlcywgZGlmZmVyaW5nIHBpeGVsIGZvcm1hdCBzaXplcyAob25seSAxNiBicHAg YW5kIDMyIGJwcApmb3Igbm93KSBhbmQgY2VydGFpbiBwbGFuZXMuIFdoaWxlIHRoZSBhKSBhbmQg YikgY2FzZXMgYWJvdmUgYXJlCnN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zIGMpIGlzIG5vdCBm dWxseSBzdXBwb3J0ZWQgb24gR0xLIGFuZCBDTkwKKHdoaWNoIHdhcyB0aGUgcHJpbWFyeSBtb3Rp dmF0aW9uIGZvciB0aGlzIHRlc3RjYXNlKS4KCnYyOgotIEFkZCBtaXNzaW5nIHJlc2V0IGZvciB0 aGUgb3V0cHV0IHBpcGUgYWZ0ZXIgZmluaXNoaW5nIHRoZSB0ZXN0IGZvciBhCiAgZ2l2ZW4gb3V0 cHV0LCBmaXhpbmcgdGhlCiAgIkRQLTEgYW5kIGVEUC0xIGFyZSBib3RoIHRyeWluZyB0byB1c2Ug cGlwZSBBIiB0eXBlIG9mIGVycm9ycy4KLSBVc2UgLUVSQU5HRSBpbnN0ZWFkIG9mIC1FSU5WQUwg dG8gY2hlY2sgdGhlIHJldHVybiBjb2RlIGZvcgogIHVuc3VwcG9ydGVkIHBsYW5lIFggcG9zaXRp b25zLCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGtlcm5lbCBjb2RlLgotIEFkZCBjb21tZW50IGV4cGxh aW5pbmcgdGhlIGRlcGVuZGVuY2llcyB3aGVuIGRvaW5nIGEgdW5pdmVyc2FsCiAgY29tbWl0LgoK djM6IChHd2FuLWd5ZW9uZykKLSBBZGQgbWlzc2luZyByZWxlYXNlIG9mIGZyYW1lYnVmZmVyIG9u IGNyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfZGlzcGxheSgpCiAgZnVuY3Rpb24uCi0gQWRk IHVzaW5nIG11bHRpIHBsYW5lcyBwZXIgc2luZ2xlIGRpc3BsYXkgY29tbWl0IG9uIGNsaXBwaW5n IHRlc3Qgb2YKICA0IGNvcm5lcnMuIChEYW5pZWwpCiAgSXQgZW5hYmxlcyB0aGUgaW1wcm92aW5n IG9mIHRlc3Qgc3BlZWQuIElmIG51bWJlciBvZiBwbGFuZXMgaXMgb3ZlcgogIHRoYW4gNCwgaXQg dXNlcyBmb3VyIHBsYW5lcyBmcm9tIGZpcnN0IHBsYW5lIHRvIG5leHQgZm91ciBwbGFuZXMuCiAg KDQgcGxhbmVzIG1ha2UgdGVzdGluZyBvZiA0IGNvcm5lcnMgcG9zc2libGUgYXMgMSBkaXNwbGF5 IGNvbW1pdC4pCiAgSWYgbnVtYmVyIG9mIHBsYW5lcyBpcyBvdmVyIHRoYW4gMiBhbmQgbGVzcyB0 aGFuIDQsIGl0IHVzZXMgdHdvIHBsYW5lcwogIGZyb20gZmlyc3QgcGxhbmUgdG8gbmV4dCB0d28g cGxhbmVzLiAoMiBwbGFuZXMgbWFrZSB0ZXN0aW5nIG9mIDQgY29ybmVycwogIHBvc3NpYmxlIGFz IDIgZGlzcGxheSBjb21taXQuKSBSZXN0IG9mIGNhc2VzIGl0IHVzZXMgb25seSBmaXJzdCBwbGFu ZS4KICAoMSBwbGFuZSBtYWtlcyB0ZXN0aW5nIG9mIDQgY29ybmVycyBwb3NzaWJsZSBhcyA0IGRp c3BsYXkgY29tbWl0LikKICBJdCBjaGFuZ2VzIHRvIHVzaW5nIG9mIGNlcnRhaW4gcGxhbmVzIGZy b20gdXNpbmcgb2YgYWxsIHN1cHBvcnRlZCBwbGFuZXMuCiAgQW5kIGEgY3Vyc29yIHBsYW5lIGNh biBiZSBvbmUgb2YgdGVzdCBwbGFuZXMuCgpTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUu ZGVha0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEd3YW4tZ3llb25nIE11biA8Z3dhbi1neWVv bmcubXVuQGludGVsLmNvbT4KQ2M6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+ CkNjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t PgpDYzogSnVoYS1QZWtrYSBIZWlra2lsw6QgPGp1aGEtcGVra2EuaGVpa2tpbGFAaW50ZWwuY29t PgpSZXZpZXdlZC1ieTogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwuY29t PiAodjEpCi0tLQogdGVzdHMva21zX3BsYW5lLmMgfCA1MjkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDUyOSBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lLmMgYi90ZXN0cy9rbXNfcGxhbmUuYwpp bmRleCAzZDA4ODkzZi4uZWE2MmVmZWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19wbGFuZS5jCisr KyBiL3Rlc3RzL2ttc19wbGFuZS5jCkBAIC00MSwxMSArNDEsNDAgQEAgdHlwZWRlZiBzdHJ1Y3Qg ewogCWludCBkcm1fZmQ7CiAJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OwogCWlndF9waXBlX2NyY190 ICpwaXBlX2NyYzsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50NjRfdCBtYXhfY3VydzsKKwl1aW50 NjRfdCBtYXhfY3VyaDsKIH0gZGF0YV90OwogCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHg7CisJ aW50IHk7CisJaW50IHNpemU7Cit9IHNxdWFyZV90OworCiBzdGF0aWMgY29sb3JfdCByZWQgICA9 IHsgMS4wZiwgMC4wZiwgMC4wZiB9Owogc3RhdGljIGNvbG9yX3QgZ3JlZW4gPSB7IDAuMGYsIDEu MGYsIDAuMGYgfTsKK3N0YXRpYyBjb2xvcl90IHllbGxvdyA9IHsgMS4wZiwgMS4wZiwgMC4wZiB9 Owogc3RhdGljIGNvbG9yX3QgYmx1ZSAgPSB7IDAuMGYsIDAuMGYsIDEuMGYgfTsKK3N0YXRpYyBj b2xvcl90IHdoaXRlID0geyAxLjBmLCAxLjBmLCAxLjBmIH07CitzdGF0aWMgc3F1YXJlX3QgY2xp cF9zcXVhcmVzWzRdOworCisvKgorICogU2l6ZSBvZiBhIHNxdWFyZSBwbGFuZSB1c2VkIHRvIHRl c3QgY2xpcHBpbmcgYXQgdGhlIDQgY291cm5lcnMgb2YgdGhlCisgKiBkaXNwbGF5LgorICovCisj ZGVmaW5lIENMSVBQRURfUExBTkVfU01BTExfU0laRQk2NAorCisvKgorICogVmlzaWJsZSBwbGFu ZSBzaXplIGFmdGVyIGNsaXBwaW5nIHRoYXQgd29ya3Mgb24gYWxsIHBsYXRmb3JtcyBmb3IgYWxs IHBsYW5lCisgKiBwb3NpdGlvbnMuCisgKiBUaGUgZXhjZXB0aW9ucyBhcmUgR0xLL0NOTCB3aGVy ZSB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMgbWFueSBwaXhlbHMKKyAqIHZpc2libGUgZnJv bSB0aGUgcGxhbmUgYWZ0ZXIgaXQncyBjbGlwcGVkIHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ugb2Yg dGhlCisgKiBzY3JlZW4uIE5vdCBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIG1heSB0cmlnZ2VyIEZJ Rk8gdW5kZXJmbG93cyBhbmQgc2NyZWVuCisgKiBjb3JydXB0aW9uLiBUaGUgY3Vyc29yIHBsYW5l IGlzIGFuIGV4Y2VwdGlvbiB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGlzIHByb2JsZW0KKyAqIGV2ZW4g b24gR0xLL0NOTC4KKyAqLworI2RlZmluZSBDTElQUEVEX1BMQU5FX01JTl9WQUxJRAkJNAogCiAv KgogICogQ29tbW9uIGNvZGUgYWNyb3NzIGFsbCB0ZXN0cywgYWN0aW5nIG9uIGRhdGFfdApAQCAt MTUxLDYgKzE4MCw2OSBAQCBjcmVhdGVfZmJfZm9yX21vZGVfX3Bvc2l0aW9uKGRhdGFfdCAqZGF0 YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAogCWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9m ZCwgZmIsIGNyKTsKIH0KIAorLyoKKyAqIENyZWF0ZSBhIHNxdWFyZSBGQiBmb3IgdGhlIHBsYW5l IGluIHRoZSBjbGlwcGluZyB0ZXN0LCBkaXZpZGVkIGludG8gNAorICogcXVhcnRlcnMgc29saWQg ZmlsbGVkIHdpdGggZGlmZmVyZW50IGNvbG9ycy4gVXNlIHRoZSBnaXZlbiB0aWxpbmcsIGZvcm1h dAorICogYW5kIHNpemUgYW5kIHJvdGF0ZSB0aGUgRkIgY2xvY2t3aXNlIHdpdGggdGhlIGdpdmVu IHJvdGF0aW9uIGRlZ3JlZXMsIHNvCisgKiB0aGF0IHRoZSBjb3VudGVyY2xvY2t3aXNlIHJvdGF0 aW9uIHdpdGggdGhlIHNhbWUgZGVncmVlcyBkb25lIGJ5IHRoZSBIVworICogd2lsbCBhbHdheXMg cmVzdWx0IGluIHRoZSBzYW1lIHJlZmVyZW5jZSBGQiBpbWFnZS4KKyAqLworc3RhdGljIHZvaWQK K2NyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YV90ICpkYXRhLCBpZ3Rfcm90 YXRpb25fdCByb3RhdGlvbiwKKwkJCQkgICB1aW50NjRfdCB0aWxpbmcsCisJCQkJICAgdWludDMy X3QgZm9ybWF0LAorCQkJCSAgIGludCBzaXplLAorCQkJCSAgIHN0cnVjdCBpZ3RfZmIgKmZiIC8q IG91dCAqLykKK3sKKwljb2xvcl90IGNvcm5lcnNbXSA9IHsgcmVkLCB3aGl0ZSwgeWVsbG93LCBi bHVlIH07CisJY29sb3JfdCBjb2xvcjsKKwl1bnNpZ25lZCBpbnQgZmJfaWQ7CisJY2Fpcm9fdCAq Y3I7CisJY29uc3QgaW50IHFzaXplID0gc2l6ZSAvIDI7CisJaW50IGlkeDsKKworCWZiX2lkID0g aWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsIHNpemUsIHNpemUsIGZvcm1hdCwgdGlsaW5nLCBm Yik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEt PmRybV9mZCwgZmIpOworCisJc3dpdGNoIChyb3RhdGlvbikgeworCWNhc2UgSUdUX1JPVEFUSU9O XzA6CisJCWlkeCA9IDA7CisJCWJyZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZHgg PSAzOworCQlicmVhazsKKwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlkeCA9IDI7CisJCWJy ZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKKwkJaWR4ID0gMTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJaWd0X2Fzc2VydCgwKTsKKwl9CisKKwljb2xvciA9IGNvcm5lcnNbaWR4XTsKKwlp Z3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIHFzaXplLCBxc2l6ZSwKKwkJCWNvbG9yLnJlZCwgY29s b3IuZ3JlZW4sIGNvbG9yLmJsdWUpOworCisJY29sb3IgPSBjb3JuZXJzWygrK2lkeCkgJSA0XTsK KwlpZ3RfcGFpbnRfY29sb3IoY3IsIHFzaXplLCAwLCBxc2l6ZSwgcXNpemUsCisJCQljb2xvci5y ZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKKworCWNvbG9yID0gY29ybmVyc1soKytpZHgp ICUgNF07CisJaWd0X3BhaW50X2NvbG9yKGNyLCBxc2l6ZSwgcXNpemUsIHFzaXplLCBxc2l6ZSwK KwkJCWNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOworCisJY29sb3IgPSBjb3Ju ZXJzWygrK2lkeCkgJSA0XTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIHFzaXplLCBxc2l6ZSwg cXNpemUsCisJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKKworCWlndF9h c3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKKwljYWlyb19kZXN0cm95KGNyKTsKK30KKwog ZW51bSB7CiAJVEVTVF9QT1NJVElPTl9GVUxMWV9DT1ZFUkVEID0gMSA8PCAwLAogCVRFU1RfRFBN UyA9IDEgPDwgMSwKQEAgLTU1NCw2ICs2NDYsNDI3IEBAIHRlc3RfcGl4ZWxfZm9ybWF0cyhkYXRh X3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQogCX0KIH0KIAorc3RhdGljIGJvb2wKK2JvZ3VzX3Bs YW5lX2NvbmYodWludDMyX3QgZGV2aWQsIGlndF9wbGFuZV90ICpwbGFuZV9vYmosCisJCSBpbnQg aGRpc3BsYXksIGludCBwbGFuZV94LCBpbnQgcGxhbmVfd2lkdGgpCit7CisJaWYgKCEoSVNfR0VN SU5JTEFLRShkZXZpZCkgfHwgSVNfQ0FOTk9OTEFLRShkZXZpZCkpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAocGxhbmVfb2JqLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKHBsYW5lX3ggKyBwbGFuZV93aWR0aCA+PSBDTElQUEVEX1BMQU5F X01JTl9WQUxJRCAmJgorCSAgICBwbGFuZV94IDw9IGhkaXNwbGF5IC0gQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg Ym9vbAorc3VwcG9ydGVkX3BsYW5lX2NvbmYoZGF0YV90ICpkYXRhLCBpbnQgcGxhbmVfdHlwZSwg dWludDY0X3QgdGlsaW5nLAorCQkgICAgIHVpbnQzMl90IGZvcm1hdCwgaWd0X3JvdGF0aW9uX3Qg cm90YXRpb24sCisJCSAgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkgICAgIGludCBwbGFu ZV94LCBpbnQgcGxhbmVfeSwgaW50IHBsYW5lX3NpemUpCit7CisJaWYgKGludGVsX2dlbihkYXRh LT5kZXZpZCkgPCA5ICYmCisJICAgIHRpbGluZyAhPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbiBHRU48OSB0aGUgcHJpbWFyeSBwbGFuZSBtdXN0 IGNvdmVyIHRoZSBmdWxsIHNjcmVlbi4gKi8KKwlpZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA8 IDkgJiYKKwkgICAgcGxhbmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZICYmCisJICAg IChwbGFuZV94ID4gMCB8fCBwbGFuZV95ID4gMCB8fAorCSAgICAgKHBsYW5lX3ggKyBwbGFuZV9z aXplIDwgbW9kZS0+aGRpc3BsYXkpIHx8CisJICAgICAocGxhbmVfeSArIHBsYW5lX3NpemUgPCBt b2RlLT52ZGlzcGxheSkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGxhbmVfdHlwZSA9PSBE Uk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKKwkJLyogRm9yIGN1cnNvciBwbGFuZXMgb25seSBsaW5l YXIvYWxwaGEgZm9ybWF0IGlzIHN1cHBvcnRlZC4gKi8KKwkJaWYgKHRpbGluZyAhPSBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FIHx8CisJCSAgICBmb3JtYXQgIT0gRFJNX0ZPUk1BVF9BUkdCODg4 OCkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAocGxhbmVfc2l6ZSA+IGRhdGEtPm1heF9jdXJ3 IHx8IHBsYW5lX3NpemUgPiBkYXRhLT5tYXhfY3VyaCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVs c2UgeworCQkvKgorCQkgKiBGb3Igbm9uLWN1cnNvciBwbGFuZXMgZm9ybWF0cyB3aXRoIGFscGhh IG1heSByZXN1bHQgaW4KKwkJICogdW5kZXRlcm1pbmlzdGljIENSQ3MsIHdlIHVzZSB0aGUgc2Ft ZSBzaXplZAorCQkgKiBub24tYWxwaGEgWFJHQjg4ODggZm9ybWF0IGluc3RlYWQuCisJCSAqLwor CQlpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODgpCisJCQlyZXR1cm4gZmFsc2U7CisK KwkJaWYgKGZvcm1hdCA9PSBEUk1fRk9STUFUX1JHQjU2NSAmJgorCQkgICAgaW50ZWxfZ2VuKGRh dGEtPmRldmlkKSA8IDkgJiYKKwkJICAgICFJU19WQUxMRVlWSUVXKGRhdGEtPmRldmlkKSAmJiAh SVNfQ0hFUlJZVklFVyhkYXRhLT5kZXZpZCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyog UkdCNTY1IHdpdGggcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiAqLworCWlmIChm b3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I1NjUgJiYgcm90YXRpb24gIT0gSUdUX1JPVEFUSU9OXzAp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRlIGEg c3F1YXJlIHJlZmVyZW5jZSBGQiBmb3IgdGhlIHdob2xlIHNjcmVlbiBpbiB0aGUgY2xpcHBpbmcg dGVzdCwKKyAqIHdpdGggdGhlIGdpdmVuIHRlc3QgcGxhbmUgcG9zaXRpb24gYW5kIHNpemUuIFNl ZQorICogY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZSgpIGZvciB0aGUgbGF5b3V0 IG9mIHRoZSB0ZXN0IHBsYW5lLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2ZiX2Zvcl9tb2Rl X19jbGlwcGluZ19kaXNwbGF5KGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAor CQkJCSAgICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywKKwkJCQkgICAgIGludCBjbGlwX3NxdWFy ZXNfY250LAorCQkJCSAgICAgc3RydWN0IGlndF9mYiAqZmIgLyogb3V0ICovKQoreworCWludCBw bGFuZTsKKwlzdHJ1Y3QgaWd0X2ZiIHBsYW5lX2Zic1s0XTsKKwl1bnNpZ25lZCBpbnQgZmJfaWQ7 CisJY2Fpcm9fdCAqY3I7CisJY2Fpcm9fc3VyZmFjZV90ICpzcmNzWzRdOworCisJZmJfaWQgPSBp Z3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKKwkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LCBtb2Rl LT52ZGlzcGxheSwKKwkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkgICAgICBMT0NB TF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgZmIpOworCWlndF9hc3NlcnQoZmJfaWQp OworCisJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlpZ3RfcGFp bnRfY29sb3IoY3IsIDAsIDAsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCTAs IDAsIDApOworCisJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgY2xpcF9zcXVhcmVzX2NudDsgcGxh bmUrKykgeworCQljcmVhdGVfZmJfZm9yX21vZGVfX2NsaXBwaW5nX3BsYW5lKGRhdGEsIElHVF9S T1RBVElPTl8wLAorCQkJCQkJICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkJCSAg IERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCQkgICBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemUs CisJCQkJCQkgICAmcGxhbmVfZmJzW3BsYW5lXSk7CisKKwkJc3Jjc1twbGFuZV0gPSBpZ3RfZ2V0 X2NhaXJvX3N1cmZhY2UoZGF0YS0+ZHJtX2ZkLAorCQkJCQkJICAgJnBsYW5lX2Zic1twbGFuZV0p OworCQljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyY3NbcGxhbmVdLAorCQkJCQkgY2xp cF9zcXVhcmVzW3BsYW5lXS54LAorCQkJCQkgY2xpcF9zcXVhcmVzW3BsYW5lXS55KTsKKwkJY2Fp cm9fcmVjdGFuZ2xlKGNyLAorCQkJCWNsaXBfc3F1YXJlc1twbGFuZV0ueCwKKwkJCQljbGlwX3Nx dWFyZXNbcGxhbmVdLnksCisJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplLAorCQkJCWNsaXBf c3F1YXJlc1twbGFuZV0uc2l6ZSk7CisJCWNhaXJvX2ZpbGwoY3IpOworCX0KKworCWlndF9hc3Nl cnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKKwljYWlyb19kZXN0cm95KGNyKTsKKworCWZvciAo cGxhbmUgPSAwOyBwbGFuZSA8IGNsaXBfc3F1YXJlc19jbnQ7IHBsYW5lKyspIHsKKwkJY2Fpcm9f c3VyZmFjZV9kZXN0cm95KHNyY3NbcGxhbmVdKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1f ZmQsICZwbGFuZV9mYnNbcGxhbmVdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3BsYW5l X2NsaXBwaW5nX2Zvcm1hdChkYXRhX3QgKmRhdGEsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwKKwkJ CSAgIGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAor CQkJICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywKKwkJCSAgIGludCBjbGlwX3NxdWFyZXNfY250 LAorCQkJICAgdWludDY0X3QgdGlsaW5nLAorCQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24s CisJCQkgICB1aW50MzJfdCBmb3JtYXQsCisJCQkgICBpZ3RfY3JjX3QgKnJlZmVyZW5jZV9jcmMp Cit7CisJaW50IHBsYW5lOworCWlndF9wbGFuZV90ICpwbGFuZV9vYmpzWzRdOworCXN0cnVjdCBp Z3RfZmIgcGxhbmVfZmJzWzRdOworCWlndF9jcmNfdCBjcmM7CisJaW50IHJldDsKKwlib29sIGJv Z3VzX3BsYW5lcyA9IGZhbHNlOworCisJbWVtc2V0KHBsYW5lX29ianMsIDAsIHNpemVvZihwbGFu ZV9vYmpzKSk7CisKKwlpZ3RfZGVidWcoInJvdGF0aW9uICVzIHRpbGluZyAlcyBmb3JtYXQgJXNc biIsCisJCSAgaWd0X3JvdGF0aW9uX2RlZ3JlZXNfc3RyKHJvdGF0aW9uKSwKKwkJICBpZ3RfdGls aW5nX3N0cih0aWxpbmcpLAorCQkgIGlndF9mb3JtYXRfc3RyKGZvcm1hdCkpOworCisJaWd0X291 dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCisJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwg Y2xpcF9zcXVhcmVzX2NudCA7IHBsYW5lKyspIHsKKwkJaWd0X3BsYW5lX3QgKm9iaiA9IGlndF9v dXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgcGxhbmUpOworCQlzdHJ1Y3QgaWd0X2ZiICpmYiA9ICZw bGFuZV9mYnNbcGxhbmVdOworCQlpbnQgeCA9IGNsaXBfc3F1YXJlc1twbGFuZV0ueDsKKwkJaW50 IHkgPSBjbGlwX3NxdWFyZXNbcGxhbmVdLnk7CisJCWludCBzaXplID0gY2xpcF9zcXVhcmVzW3Bs YW5lXS5zaXplOworCQl1aW50NjRfdCBfdGlsaW5nID0gdGlsaW5nOworCQl1aW50MzJfdCBfZm9y bWF0ID0gZm9ybWF0OworCisJCWlmIChvYmotPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09S KSB7CisJCQlfdGlsaW5nID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKKwkJCV9mb3JtYXQg PSBEUk1fRk9STUFUX0FSR0I4ODg4OworCQl9CisKKwkJaWYgKCFzdXBwb3J0ZWRfcGxhbmVfY29u ZihkYXRhLCBvYmotPnR5cGUsIF90aWxpbmcsIF9mb3JtYXQsCisJCQkJCSAgcm90YXRpb24sIG1v ZGUsIHgsIHksIHNpemUpKQorCQkJZ290byBvdXQ7CisKKwkJY3JlYXRlX2ZiX2Zvcl9tb2RlX19j bGlwcGluZ19wbGFuZShkYXRhLCByb3RhdGlvbixfdGlsaW5nLAorCQkJCQkJICAgX2Zvcm1hdCwg c2l6ZSwgZmIpOworCisJCWlndF9wbGFuZV9zZXRfZmIob2JqLCBmYik7CisJCWlndF9mYl9zZXRf cG9zaXRpb24oZmIsIG9iaiwgMCwgMCk7CisKKwkJaWd0X3BsYW5lX3NldF9zaXplKG9iaiwgc2l6 ZSwgc2l6ZSk7CisJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ob2JqLCByb3RhdGlvbik7CisJCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ob2JqLCB4LCB5KTsKKworCQlwbGFuZV9vYmpzW3BsYW5lXSA9 IG9iajsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCBhIHVuaXZlcnNhbCBjb21taXQgZG9lc24n dCBzdXBwb3J0IGZ1bGwgbW9kZXNldHMsIHNvIHdlCisJICogaGF2ZSB0byBtYWtlIHN1cmUgdGhh dCB0aGUgZm9sbG93aW5nIG9ubHkgbmVlZHMgdG8gY29tbWl0IGNoYW5nZXMKKwkgKiB0aGF0IGFy ZSBjb21wYXRpYmxlIHdpdGggYSBmYXN0c2V0LiBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkLAor CSAqIHNpbmNlIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2UgdG9vayB0aGUgcmVmZXJl bmNlIENSQyB3aGljaAorCSAqIGxlZnQgdGhlIGRpc3BsYXkgZW5hYmxlZCB3aXRoIHRoZSBtb2Rl IHdlIHJlcXVpcmUgaGVyZSBhbmQKKwkgKiBhZnRlcndhcmRzIHdlIG9ubHkgY2hhbmdlIHBsYW5l IHBhcmFtZXRlcnMgKEZCLCBwb3NpdGlvbiwgcm90YXRpb24KKwkgKiBldGMuKS4KKwkgKi8KKwly ZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX1VOSVZF UlNBTCk7CisKKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBjbGlwX3NxdWFyZXNfY250OyBwbGFu ZSsrKSB7CisJCWlmKCFib2d1c19wbGFuZV9jb25mKGRhdGEtPmRldmlkLCBwbGFuZV9vYmpzW3Bs YW5lXSwKKwkJICAgbW9kZS0+aGRpc3BsYXksIGNsaXBfc3F1YXJlc1twbGFuZV0ueCwKKwkJICAg Y2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplKSkgeworCQkJYm9ndXNfcGxhbmVzID0gdHJ1ZTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJaWYgKGJvZ3VzX3BsYW5lcykgeworCQlpZ3RfYXNzZXJ0KHJl dCA9PSAwKTsKKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3Jj KTsKKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwocmVmZXJlbmNlX2NyYywgJmNyYyk7CisJfSBlbHNl IHsKKwkJaWd0X2Fzc2VydChyZXQgPT0gLUVSQU5HRSk7CisJfQorCitvdXQ6CisJZm9yIChwbGFu ZSA9IDA7IHBsYW5lIDwgY2xpcF9zcXVhcmVzX2NudDsgcGxhbmUrKykgeworCQlpZiAoIXBsYW5l X29ianNbcGxhbmVdKQorCQkJY29udGludWU7CisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmVfb2Jq c1twbGFuZV0sIE5VTEwpOworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lX29ianNbcGxh bmVdLCBJR1RfUk9UQVRJT05fMCk7CisJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmVfb2Jq c1twbGFuZV0sIDAsIDApOworCisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcGxhbmVf ZmJzW3BsYW5lXSk7CisJfQorCisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5Z KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlKGRhdGFfdCAq ZGF0YSwgZW51bSBwaXBlIHBpcGUsCisJCQkgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9k ZU1vZGVJbmZvICptb2RlLAorCQkJICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywgaW50IGNsaXBf c3F1YXJlc19jbnQpCit7CisJY29uc3Qgc3RydWN0IHsKKwkJdWludDY0X3QgdGlsaW5nOworCQlp Z3Rfcm90YXRpb25fdCByb3RhdGlvbjsKKwl9IHJvdGF0aW9uc1tdID0geworCQl7IExPQ0FMX0RS TV9GT1JNQVRfTU9EX05PTkUsCQlJR1RfUk9UQVRJT05fMCB9LAorCisJCXsgTE9DQUxfSTkxNV9G T1JNQVRfTU9EX1hfVElMRUQsCUlHVF9ST1RBVElPTl8wIH0sCisKKwkJeyBMT0NBTF9JOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKKwkJeyBMT0NBTF9JOTE1X0ZPUk1B VF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0sCisJCXsgTE9DQUxfSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQsCUlHVF9ST1RBVElPTl8xODAgfSwKKwkJeyBMT0NBTF9JOTE1X0ZPUk1BVF9N T0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzI3MCB9LAorCisJCXsgTE9DQUxfSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9LAorCQl7IExPQ0FMX0k5MTVfRk9STUFUX01P RF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0sCisJCXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMTgwIH0sCisJCXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMjcwIH0sCisJfTsKKwljb25zdCB1aW50MzJfdCBmb3Jt YXRzW10gPSB7CisJCURSTV9GT1JNQVRfUkdCNTY1LAorCQlEUk1fRk9STUFUX1hSR0I4ODg4LAor CQlEUk1fRk9STUFUX0FSR0I4ODg4LAorCX07CisKKwlpZ3RfZmJfdCByZWZlcmVuY2VfZmI7CisJ aWd0X2NyY190IHJlZmVyZW5jZV9jcmM7CisKKwlmb3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwg Y2xpcF9zcXVhcmVzX2NudDsgcGxhbmUrKykgeworCQlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0 b3IgJXMgbW9kZSAlZHglZCB1c2luZyBwaXBlICVzOiAlZHglZEAlZCwlZFxuIiwKKwkJCSBpZ3Rf b3V0cHV0X25hbWUob3V0cHV0KSwKKwkJCSBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXks CisJCQkga21zdGVzdF9waXBlX25hbWUocGlwZSksCisJCQkgY2xpcF9zcXVhcmVzW3BsYW5lXS5z aXplLCBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemUsCisJCQkgY2xpcF9zcXVhcmVzW3BsYW5lXS54 LCBjbGlwX3NxdWFyZXNbcGxhbmVdLnkpOworCX0KKworCXRlc3RfaW5pdChkYXRhLCBwaXBlKTsK KworCWNyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfZGlzcGxheShkYXRhLCBtb2RlLAorCQkJ CQkgICAgIGNsaXBfc3F1YXJlcywKKwkJCQkJICAgICBjbGlwX3NxdWFyZXNfY250LAorCQkJCQkg ICAgICZyZWZlcmVuY2VfZmIpOworCisJdGVzdF9ncmFiX2NyY19mb3JfZmIyKGRhdGEsIG91dHB1 dCwgcGlwZSwgJnJlZmVyZW5jZV9mYiwKKwkJCSAgICAgICZyZWZlcmVuY2VfY3JjLCBDT01NSVRf VU5JVkVSU0FMKTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcmVmZXJlbmNlX2Zi KTsKKworCWZvciAoaW50IHJvdGF0aW9uID0gMDsgcm90YXRpb24gPCBBUlJBWV9TSVpFKHJvdGF0 aW9ucyk7IHJvdGF0aW9uKyspCisJCWZvciAoaW50IGZvcm1hdCA9IDA7IGZvcm1hdCA8IEFSUkFZ X1NJWkUoZm9ybWF0cyk7IGZvcm1hdCsrKQorCQkJdGVzdF9wbGFuZV9jbGlwcGluZ19mb3JtYXQo ZGF0YSwgcGlwZSwgb3V0cHV0LAorCQkJCQkJICAgbW9kZSwKKwkJCQkJCSAgIGNsaXBfc3F1YXJl cywKKwkJCQkJCSAgIGNsaXBfc3F1YXJlc19jbnQsCisJCQkJCQkgICByb3RhdGlvbnNbcm90YXRp b25dLnRpbGluZywKKwkJCQkJCSAgIHJvdGF0aW9uc1tyb3RhdGlvbl0ucm90YXRpb24sCisJCQkJ CQkgICBmb3JtYXRzW2Zvcm1hdF0sCisJCQkJCQkgICAmcmVmZXJlbmNlX2NyYyk7CisKKwl0ZXN0 X2ZpbmkoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFy ZXMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwKKwkJCSAgICBpZ3Rfb3V0cHV0X3QgKm91 dHB1dCwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJICAgIHNxdWFyZV90ICpjbGlwX3NxdWFy ZXMsIGludCBjbGlwX3NxdWFyZXNfY250KQoreworCXN3aXRjaCAoY2xpcF9zcXVhcmVzX2NudCkg eworCWNhc2UgNDoKKwkgICAgdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmUoZGF0YSwgcGlwZSwg b3V0cHV0LCBtb2RlLAorCQkJCSAgICAgICBjbGlwX3NxdWFyZXMsIGNsaXBfc3F1YXJlc19jbnQp OworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIHRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJl KGRhdGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKKwkJCQkgICAgICAgY2xpcF9zcXVhcmVzLCBjbGlw X3NxdWFyZXNfY250KTsKKwkgICAgdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmUoZGF0YSwgcGlw ZSwgb3V0cHV0LCBtb2RlLAorCQkJCSAgICAgICBjbGlwX3NxdWFyZXMgKyBjbGlwX3NxdWFyZXNf Y250LAorCQkJCSAgICAgICBjbGlwX3NxdWFyZXNfY250KTsKKwkgICAgYnJlYWs7CisJY2FzZSAx OgorCWRlZmF1bHQ6CisJICAgIGZvciAoaW50IGkgPSAwOyBpICA8IDQ7IGkrKykgeworCQl0ZXN0 X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUsCisJCQkJCSAg IGNsaXBfc3F1YXJlcyArIGksCisJCQkJCSAgIGNsaXBfc3F1YXJlc19jbnQpOworCSAgICB9CisJ ICAgIGJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcGxhbmVfY2xpcHBpbmcoZGF0 YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlp bnQgY29ubmVjdGVkX291dHMgPSAwOworCisJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUo JmRhdGEtPmRpc3BsYXksIHBpcGUsIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7 CisJCWludCBzcV9zaXplOworCQlpbnQgbWF4X3BsYW5lcyA9IGRhdGEtPmRpc3BsYXkucGlwZXNb cGlwZV0ubl9wbGFuZXM7CisJCWludCBjbGlwX3NxdWFyZXNfY250OworCisJCWNsaXBfc3F1YXJl c19jbnQgPSBtYXhfcGxhbmVzID49IDQgPworCQkJCSAgIDQgOiBtYXhfcGxhbmVzID49IDIgPyAy IDogMTsKKworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisJCW1vZGUgPSBp Z3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwkJLyoKKwkJICogVGVzdCB3aXRoIGEgc3F1 YXJlIHBsYW5lIGJpZ2dlciB0aGFuIGVpdGhlciB0aGUgd2lkdGggb3IKKwkJICogaGVpZ2h0IG9m IHRoZSBtb2RlLiBUaGlzIHNob3VsZCBwYXNzIG9uIGFsbCBwbGF0Zm9ybXMuCisJCSAqLworCQlz cV9zaXplID0gbW9kZS0+aGRpc3BsYXkgPiBtb2RlLT52ZGlzcGxheSA/CisJCQkgIG1vZGUtPmhk aXNwbGF5IDogbW9kZS0+dmRpc3BsYXk7CisKKwkJY2xpcF9zcXVhcmVzWzBdLnggPSAtMjsKKwkJ Y2xpcF9zcXVhcmVzWzBdLnkgPSAtMjsKKwkJY2xpcF9zcXVhcmVzWzBdLnNpemUgPSBzcV9zaXpl ICsgNDsKKworCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRhLCBwaXBlLCBvdXRwdXQs IG1vZGUsCisJCQkJCSAgIGNsaXBfc3F1YXJlcywgMSk7CisKKwkJLyoKKwkJICogVGVzdCBwb3Np dGlvbnMgaW4gdGhlIDQgY29ybmVycyBvZiB0aGUgc2NyZWVuIHdpdGggYQorCQkgKiBDTElQUEVE X1BMQU5FX01JTl9WQUxJRCB4IENMSVBQRURfUExBTkVfTUlOX1ZBTElEIHNxdWFyZQorCQkgKiB2 aXNpYmxlIGZyb20gdGhlIHBsYW5lLiBUaGVzZSBzaG91bGQgcGFzcyBvbiBhbGwgcGxhdGZvcm1z LgorCQkgKi8KKwkJY2xpcF9zcXVhcmVzWzBdLnggPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpF ICsKKwkJCQkgICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOworCQljbGlwX3NxdWFyZXNbMF0u eSA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKworCQkJCSAgICAgQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQ7CisJCWNsaXBfc3F1YXJlc1swXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9T SVpFOworCisJCWNsaXBfc3F1YXJlc1sxXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSAr CisJCQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKKwkJY2xpcF9zcXVhcmVzWzFdLnkg PSBtb2RlLT52ZGlzcGxheSAtCisJCQkJICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOworCQlj bGlwX3NxdWFyZXNbMV0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKKworCQljbGlw X3NxdWFyZXNbMl0ueCA9IG1vZGUtPmhkaXNwbGF5IC0KKwkJCQkgICAgQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQ7CisJCWNsaXBfc3F1YXJlc1syXS55ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0la RSArCisJCQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKKwkJY2xpcF9zcXVhcmVzWzJd LnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7CisKKwkJY2xpcF9zcXVhcmVzWzNdLngg PSBtb2RlLT5oZGlzcGxheSAtCisJCQkJICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOworCQlj bGlwX3NxdWFyZXNbM10ueSA9IG1vZGUtPnZkaXNwbGF5IC0KKwkJCQkgICAgQ0xJUFBFRF9QTEFO RV9NSU5fVkFMSUQ7CisJCWNsaXBfc3F1YXJlc1szXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFM TF9TSVpFOworCisJCXRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlcyhkYXRhLCBwaXBlLCBvdXRw dXQsIG1vZGUsCisJCQkJCSAgICBjbGlwX3NxdWFyZXMsIGNsaXBfc3F1YXJlc19jbnQpOworCisJ CS8qCisJCSAqIFRlc3QgcG9zaXRpb25zIGluIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiB3 aXRoIGEKKwkJICogMiB4IDIgc3F1YXJlIHZpc2libGUgZnJvbSB0aGUgcGxhbmUuIFRoZXNlIGFy ZSB2YWxpZCBvbiBhbGwKKwkJICogcGxhdGZvcm1zIGV4Y2VwdCBvbiBHTEsvQ05MIHdoZXJlIGxl c3MgdGhhbgorCQkgKiBDTElQUEVEX1BMQU5FX01JTl9WQUxJRCBwaXhlbHMgdmlzaWJsZSBvbiB0 aGUgbGVmdC9yaWdodAorCQkgKiBlZGdlcyBvZiB0aGUgc2NyZWVuIG1heSBjYXVzZSBGSUZPIHVu ZGVyZmxvdyBhbmQgZGlzcGxheQorCQkgKiBjb3JydXB0aW9uLgorCQkgKgorCQkgKiBUaGUgY3Vy c29yIHBsYW5lIGlzIGFuIGV4Y2VwdGlvbiB3aXRob3V0IHRoaXMgcHJvYmxlbS4KKwkJICoKKwkJ ICogVXNlIDIgeCAyIHNpemUgYXMgb3RoZXIgKG9kZCkgc2l6ZXMgbWF5IHJlc3VsdCBpbiBhbgor CQkgKiBpbmNvcnJlY3QgQ1JDIGZvciB0aGUgY3Vyc29yIHBsYW5lIGV2ZW4gdGhvdWdoIGl0IGRp c3BsYXlzCisJCSAqIGNvcnJlY3RseSBhbmQgY2F1c2VzIG5vIHVuZGVyZmxvdy4KKwkJICovCisJ CWNsaXBfc3F1YXJlc1swXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNs aXBfc3F1YXJlc1swXS55ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNsaXBf c3F1YXJlc1swXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOworCisJCWNsaXBfc3F1 YXJlc1sxXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNsaXBfc3F1YXJl c1sxXS55ID0gbW9kZS0+dmRpc3BsYXkgLSAyOworCQljbGlwX3NxdWFyZXNbMV0uc2l6ZSA9IENM SVBQRURfUExBTkVfU01BTExfU0laRTsKKworCQljbGlwX3NxdWFyZXNbMl0ueCA9IG1vZGUtPmhk aXNwbGF5IC0gMjsKKwkJY2xpcF9zcXVhcmVzWzJdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9T SVpFICsgMjsKKwkJY2xpcF9zcXVhcmVzWzJdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJ WkU7CisKKwkJY2xpcF9zcXVhcmVzWzNdLnggPSBtb2RlLT5oZGlzcGxheSAtIDI7CisJCWNsaXBf c3F1YXJlc1szXS55ID0gbW9kZS0+dmRpc3BsYXkgLSAyOworCQljbGlwX3NxdWFyZXNbM10uc2l6 ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKKworCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3Nx dWFyZXMoZGF0YSwgcGlwZSwgb3V0cHV0LCBtb2RlLAorCQkJCQkgICAgY2xpcF9zcXVhcmVzLCBj bGlwX3NxdWFyZXNfY250KTsKKworCQljb25uZWN0ZWRfb3V0cysrOworCX0KKworCWlndF9za2lw X29uKGNvbm5lY3RlZF9vdXRzID09IDApOworfQorCiBzdGF0aWMgdm9pZAogcnVuX3Rlc3RzX2Zv cl9waXBlX3BsYW5lKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCiB7CkBAIC01OTAsNiAr MTEwMyw5IEBAIHJ1bl90ZXN0c19mb3JfcGlwZV9wbGFuZShkYXRhX3QgKmRhdGEsIGVudW0gcGlw ZSBwaXBlKQogCQkgICAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKIAkJdGVzdF9wbGFuZV9w YW5uaW5nKGRhdGEsIHBpcGUsIFRFU1RfUEFOTklOR19CT1RUT01fUklHSFQgfAogCQkJCQkgICAg ICAgVEVTVF9TVVNQRU5EX1JFU1VNRSk7CisJaWd0X3N1YnRlc3RfZigicGxhbmUtY2xpcHBpbmct cGlwZS0lcy1wbGFuZXMiLAorCQkgICAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJdGVz dF9wbGFuZV9jbGlwcGluZyhkYXRhLCBwaXBlKTsKIH0KIAogCkBAIC02MDIsOCArMTExOCwyMSBA QCBpZ3RfbWFpbgogCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKIAogCWlndF9maXh0dXJlIHsK KwkJaW50IHJldDsKKwogCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJ VkVSX0lOVEVMKTsKIAorCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLmRy bV9mZCk7CisKKwkJZGF0YS5tYXhfY3VydyA9IDY0OworCQlkYXRhLm1heF9jdXJoID0gNjQ7CisJ CXJldCA9IGRybUdldENhcChkYXRhLmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsCisJCQkJ JmRhdGEubWF4X2N1cncpOworCQlpZ3RfYXNzZXJ0KHJldCA9PSAwIHx8IGVycm5vID09IEVJTlZB TCk7CisJCXJldCA9IGRybUdldENhcChkYXRhLmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hU LAorCQkJCSZkYXRhLm1heF9jdXJoKTsKKwkJaWd0X2Fzc2VydChyZXQgPT0gMCB8fCBlcnJubyA9 PSBFSU5WQUwpOworCiAJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKIAogCQlpZ3Rf cmVxdWlyZV9waXBlX2NyYyhkYXRhLmRybV9mZCk7Ci0tIAoyLjE4LjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=