From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 36F196FD5D for ; Thu, 23 Jan 2020 14:59:31 +0000 (UTC) From: Kunal Joshi Date: Thu, 23 Jan 2020 13:30:40 +0530 Message-Id: <1579766442-20285-3-git-send-email-kunal1.joshi@intel.com> In-Reply-To: <1579766442-20285-1-git-send-email-kunal1.joshi@intel.com> References: <1579766442-20285-1-git-send-email-kunal1.joshi@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 2/4] Moved common function in kms_color and kms_color_chamelium to kms_color_helper.c 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: a21zX2NvbG9yIGFuZCBrbXNfY29sb3JfY2hhbWVsaXVtIHNoYXJlZCBjb21tb24gZnVuY3Rpb25z LgpNb3ZlZCB0aGVtIHRvIHRlc3RzL2ttc19jb2xvcl9oZWxwZXIuYyB0byBhdm9pZCBjb2RlIGR1 cGxpY2F0aW9uLgoKKHY0KQogICAgICAgIE1hZGUgYSBsaWJyYXJ5IGttc19jb2xvcl9oZWxwZXIu YyB3aGljaCBpcyBzcGVjaWZpYyB0bwogICAgICAgIGttc19jb2xvciBhbmQga21zX2NvbG9yX2No YW1lbGl1bS4KClNpZ25lZC1vZmYtYnk6IEt1bmFsIEpvc2hpIDxrdW5hbDEuam9zaGlAaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBTd2F0aSBTaGFybWEgPHN3YXRpMi5zaGFybWFAaW50ZWwuY29t PgpTdWdnZXN0ZWQtYnk6IFVtYSBTaGFua2FyIDx1bWEuc2hhbmthckBpbnRlbC5jb20+Ci0tLQog dGVzdHMvTWFrZWZpbGUuYW0gICAgICAgIHwgICAzICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMg ICB8ICAxMyArLQogdGVzdHMva21zX2NvbG9yLmMgICAgICAgIHwgMzgzICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRlc3RzL2ttc19jb2xvci5oICAgICAg ICB8IDEwNSArKysrKysrKysrKysrCiB0ZXN0cy9rbXNfY29sb3JfaGVscGVyLmMgfCAzODYgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29u LmJ1aWxkICAgICAgICB8ICAxOSArKy0KIDYgZmlsZXMgY2hhbmdlZCwgNTI1IGluc2VydGlvbnMo KyksIDM4NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfY29sb3Iu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19jb2xvcl9oZWxwZXIuYwoKZGlmZiAtLWdp dCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggZmMzMDUyNC4u ODdmZmVjMiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvTWFrZWZp bGUuYW0KQEAgLTEzLDExICsxMywxNCBAQCBlbmRpZgogaWYgSEFWRV9DSEFNRUxJVU0KIFRFU1RT X3Byb2dzICs9IFwKIAlrbXNfY2hhbWVsaXVtIFwKKwlrbXNfY29sb3JfY2hhbWVsaXVtIFwKIAkk KE5VTEwpCiBlbmRpZgogCiBURVNUU19wcm9ncyArPSB0ZXN0ZGlzcGxheQogCitURVNUU19wcm9n cyArPSBrbXNfY29sb3IKKwogaWYgQlVJTERfVEVTVFMKIHRlc3QtbGlzdC50eHQ6IE1ha2VmaWxl CiAJQGVjaG8gVEVTVExJU1QgPiAkQApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggODA2ZWIwMi4uYzliN2FlYSAxMDA2NDQK LS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CkBAIC0zNSw3ICszNSw2IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19iaWdfZmIgXAogCWttc19i dXN5IFwKIAlrbXNfY2NzIFwKLQlrbXNfY29sb3IgXAogCWttc19jb25jdXJyZW50IFwKIAlrbXNf Y29udGVudF9wcm90ZWN0aW9uXAogCWttc19jcnRjX2JhY2tncm91bmRfY29sb3IgXApAQCAtNTkw LDYgKzU4OSwxOCBAQCB0ZXN0ZGlzcGxheV9TT1VSQ0VTID0gXAogCXRlc3RkaXNwbGF5X2hvdHBs dWcuYyBcCiAJJChOVUxMKQogCitrbXNfY29sb3JfU09VUkNFUyA9IFwKKyAgICAgICAga21zX2Nv bG9yLmMgXAorICAgICAgICBrbXNfY29sb3IuaCBcCisgICAgICAgIGttc19jb2xvcl9oZWxwZXIu YyBcCisgICAgICAgICQoTlVMTCkKKwora21zX2NvbG9yX2NoYW1lbGl1bV9TT1VSQ0VTID0gXAor ICAgICAgICBrbXNfY29sb3JfY2hhbWVsaXVtLmMgXAorICAgICAgICBrbXNfY29sb3IuaCBcCisg ICAgICAgIGttc19jb2xvcl9oZWxwZXIuYyBcCisgICAgICAgICQoTlVMTCkKKwogY2hlY2tfU0NS SVBUUyA9IGlndF9jb21tYW5kX2xpbmUuc2ggXAogCSQoTlVMTCkKIApkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2NvbG9yLmMgYi90ZXN0cy9rbXNfY29sb3IuYwppbmRleCBiNGI1NzhhLi44NjRmNDJh IDEwMDY0NAotLS0gYS90ZXN0cy9rbXNfY29sb3IuYworKysgYi90ZXN0cy9rbXNfY29sb3IuYwpA QCAtMjIsMjUyICsyMiwxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1 ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiZHJtLmgiCi0jaW5jbHVkZSAiZHJtdGVzdC5oIgot I2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImttc19jb2xvci5oIgogCiBJR1RfVEVTVF9ERVND UklQVElPTigiVGVzdCBDb2xvciBGZWF0dXJlcyBhdCBQaXBlIGxldmVsIik7CiAKLS8qIEludGVy bmFsICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JZG91YmxlIHIsIGcsIGI7Ci19IGNvbG9yX3Q7Ci0K LXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgZHJtX2ZkOwotCXVpbnQzMl90IGRldmlkOwotCWlndF9k aXNwbGF5X3QgZGlzcGxheTsKLQlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Ci0KLQl1aW50MzJf dCBjb2xvcl9kZXB0aDsKLQl1aW50NjRfdCBkZWdhbW1hX2x1dF9zaXplOwotCXVpbnQ2NF90IGdh bW1hX2x1dF9zaXplOwotfSBkYXRhX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgc2l6ZTsK LQlkb3VibGUgY29lZmZzW107Ci19IGdhbW1hX2x1dF90OwotCi1zdGF0aWMgdm9pZCBwYWludF9n cmFkaWVudF9yZWN0YW5nbGVzKGRhdGFfdCAqZGF0YSwKLQkJCQkgICAgICBkcm1Nb2RlTW9kZUlu Zm8gKm1vZGUsCi0JCQkJICAgICAgY29sb3JfdCAqY29sb3JzLAotCQkJCSAgICAgIHN0cnVjdCBp Z3RfZmIgKmZiKQotewotCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19jdHgoZGF0YS0+ZHJt X2ZkLCBmYik7Ci0JaW50IGksIGwgPSBtb2RlLT5oZGlzcGxheSAvIDM7Ci0JaW50IHJvd3NfcmVt YWluaW5nID0gbW9kZS0+aGRpc3BsYXkgJSAzOwotCi0JLyogUGFpbnQgMyBncmFkaWVudCByZWN0 YW5nbGVzIHdpdGggcmVkL2dyZWVuL2JsdWUgYmV0d2VlbiAxLjAgYW5kCi0JICogMC41LiBXZSB3 YW50IHRvIGF2b2lkIDAgc28gZWFjaCBtYXggTFVUcyBvbmx5IGFmZmVjdCB0aGVpciBvd24KLQkg KiByZWN0YW5nbGUuCi0JICovCi0JZm9yIChpID0gMCA7IGkgPCAzOyBpKyspIHsKLQkJaWd0X3Bh aW50X2NvbG9yX2dyYWRpZW50X3JhbmdlKGNyLCBpICogbCwgMCwgbCwgbW9kZS0+dmRpc3BsYXks Ci0JCQkJCSAgICAgICBjb2xvcnNbaV0uciAhPSAwID8gMC4yIDogMCwKLQkJCQkJICAgICAgIGNv bG9yc1tpXS5nICE9IDAgPyAwLjIgOiAwLAotCQkJCQkgICAgICAgY29sb3JzW2ldLmIgIT0gMCA/ IDAuMiA6IDAsCi0JCQkJCSAgICAgICBjb2xvcnNbaV0uciwKLQkJCQkJICAgICAgIGNvbG9yc1tp XS5nLAotCQkJCQkgICAgICAgY29sb3JzW2ldLmIpOwotCX0KLQotCWlmIChyb3dzX3JlbWFpbmlu ZyA+IDApCi0JCWlndF9wYWludF9jb2xvcl9ncmFkaWVudF9yYW5nZShjciwgaSAqIGwsIDAsIHJv d3NfcmVtYWluaW5nLAotCQkJCQkgICAgICAgbW9kZS0+dmRpc3BsYXksCi0JCQkJCSAgICAgICBj b2xvcnNbaS0xXS5yICE9IDAgPyAwLjIgOiAwLAotCQkJCQkgICAgICAgY29sb3JzW2ktMV0uZyAh PSAwID8gMC4yIDogMCwKLQkJCQkJICAgICAgIGNvbG9yc1tpLTFdLmIgIT0gMCA/IDAuMiA6IDAs Ci0JCQkJCSAgICAgICBjb2xvcnNbaS0xXS5yLAotCQkJCQkgICAgICAgY29sb3JzW2ktMV0uZywK LQkJCQkJICAgICAgIGNvbG9yc1tpLTFdLmIpOwotCi0JaWd0X3B1dF9jYWlyb19jdHgoZGF0YS0+ ZHJtX2ZkLCBmYiwgY3IpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludF9yZWN0YW5nbGVzKGRhdGFf dCAqZGF0YSwKLQkJCSAgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAotCQkJICAgICBjb2xvcl90 ICpjb2xvcnMsCi0JCQkgICAgIHN0cnVjdCBpZ3RfZmIgKmZiKQotewotCWNhaXJvX3QgKmNyID0g aWd0X2dldF9jYWlyb19jdHgoZGF0YS0+ZHJtX2ZkLCBmYik7Ci0JaW50IGksIGwgPSBtb2RlLT5o ZGlzcGxheSAvIDM7Ci0JaW50IHJvd3NfcmVtYWluaW5nID0gbW9kZS0+aGRpc3BsYXkgJSAzOwot Ci0JLyogUGFpbnQgMyBzb2xpZCByZWN0YW5nbGVzLiAqLwotCWZvciAoaSA9IDAgOyBpIDwgMzsg aSsrKSB7Ci0JCWlndF9wYWludF9jb2xvcihjciwgaSAqIGwsIDAsIGwsIG1vZGUtPnZkaXNwbGF5 LAotCQkJCWNvbG9yc1tpXS5yLCBjb2xvcnNbaV0uZywgY29sb3JzW2ldLmIpOwotCX0KLQotCWlm IChyb3dzX3JlbWFpbmluZyA+IDApCi0JCWlndF9wYWludF9jb2xvcihjciwgaSAqIGwsIDAsIHJv d3NfcmVtYWluaW5nLCBtb2RlLT52ZGlzcGxheSwKLQkJCQljb2xvcnNbaS0xXS5yLCBjb2xvcnNb aS0xXS5nLCBjb2xvcnNbaS0xXS5iKTsKLQotCWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9m ZCwgZmIsIGNyKTsKLX0KLQotc3RhdGljIGdhbW1hX2x1dF90ICphbGxvY19sdXQoaW50IGx1dF9z aXplKQotewotCWdhbW1hX2x1dF90ICpnYW1tYTsKLQotCWlndF9hc3NlcnRfbHQoMCwgbHV0X3Np emUpOwotCi0JZ2FtbWEgPSBtYWxsb2Moc2l6ZW9mKCpnYW1tYSkgKyBsdXRfc2l6ZSAqIHNpemVv ZihnYW1tYS0+Y29lZmZzWzBdKSk7Ci0JaWd0X2Fzc2VydChnYW1tYSk7Ci0JZ2FtbWEtPnNpemUg PSBsdXRfc2l6ZTsKLQotCXJldHVybiBnYW1tYTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9sdXQo Z2FtbWFfbHV0X3QgKmdhbW1hKQotewotCWlmICghZ2FtbWEpCi0JCXJldHVybjsKLQotCWZyZWUo Z2FtbWEpOwotfQotCi1zdGF0aWMgZ2FtbWFfbHV0X3QgKmdlbmVyYXRlX3RhYmxlKGludCBsdXRf c2l6ZSwgZG91YmxlIGV4cCkKLXsKLQlnYW1tYV9sdXRfdCAqZ2FtbWEgPSBhbGxvY19sdXQobHV0 X3NpemUpOwotCWludCBpOwotCi0JZ2FtbWEtPmNvZWZmc1swXSA9IDAuMDsKLQlmb3IgKGkgPSAx OyBpIDwgbHV0X3NpemU7IGkrKykKLQkJZ2FtbWEtPmNvZWZmc1tpXSA9IHBvdyhpICogMS4wIC8g KGx1dF9zaXplIC0gMSksIGV4cCk7Ci0KLQlyZXR1cm4gZ2FtbWE7Ci19Ci0KLXN0YXRpYyBnYW1t YV9sdXRfdCAqZ2VuZXJhdGVfdGFibGVfbWF4KGludCBsdXRfc2l6ZSkKLXsKLQlnYW1tYV9sdXRf dCAqZ2FtbWEgPSBhbGxvY19sdXQobHV0X3NpemUpOwotCWludCBpOwotCi0JZ2FtbWEtPmNvZWZm c1swXSA9IDAuMDsKLQlmb3IgKGkgPSAxOyBpIDwgbHV0X3NpemU7IGkrKykKLQkJZ2FtbWEtPmNv ZWZmc1tpXSA9IDEuMDsKLQotCXJldHVybiBnYW1tYTsKLX0KLQotc3RhdGljIGdhbW1hX2x1dF90 ICpnZW5lcmF0ZV90YWJsZV96ZXJvKGludCBsdXRfc2l6ZSkKLXsKLQlnYW1tYV9sdXRfdCAqZ2Ft bWEgPSBhbGxvY19sdXQobHV0X3NpemUpOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGx1 dF9zaXplOyBpKyspCi0JCWdhbW1hLT5jb2VmZnNbaV0gPSAwLjA7Ci0KLQlyZXR1cm4gZ2FtbWE7 Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqY29lZmZzX3RvX2x1dChkYXRhX3Qg KmRhdGEsCi0JCQkJCSAgIGNvbnN0IGdhbW1hX2x1dF90ICpnYW1tYSwKLQkJCQkJICAgdWludDMy X3QgY29sb3JfZGVwdGgsCi0JCQkJCSAgIGludCBvZmYpCi17Ci0Jc3RydWN0IGRybV9jb2xvcl9s dXQgKmx1dDsKLQlpbnQgaSwgbHV0X3NpemUgPSBnYW1tYS0+c2l6ZTsKLQl1aW50MzJfdCBtYXhf dmFsdWUgPSAoMSA8PCAxNikgLSAxOwotCXVpbnQzMl90IG1hc2s7Ci0KLQlpZiAoaXNfaTkxNV9k ZXZpY2UoZGF0YS0+ZHJtX2ZkKSkKLQkJbWFzayA9ICgoMSA8PCBjb2xvcl9kZXB0aCkgLSAxKSA8 PCA4OwotCWVsc2UKLQkJbWFzayA9IG1heF92YWx1ZTsKLQotCWx1dCA9IG1hbGxvYyhzaXplb2Yo c3RydWN0IGRybV9jb2xvcl9sdXQpICogbHV0X3NpemUpOwotCi0JaWYgKElTX0NIRVJSWVZJRVco ZGF0YS0+ZGV2aWQpKQotCQlsdXRfc2l6ZSAtPSAxOwotCWZvciAoaSA9IDA7IGkgPCBsdXRfc2l6 ZTsgaSsrKSB7Ci0JCXVpbnQzMl90IHYgPSAoZ2FtbWEtPmNvZWZmc1tpXSAqIG1heF92YWx1ZSk7 Ci0KLQkJLyoKLQkJICogSGFyZHdhcmUgbWlnaHQgZW5jb2RlIGNvbG9ycyBvbiBhIGRpZmZlcmVu dCBudW1iZXIgb2YgYml0cwotCQkgKiB0aGFuIHdoYXQgaXMgaW4gb3VyIGZyYW1lYnVmZmVyICgx MCBvciAxMmJpdHMgZm9yIGV4YW1wbGUpLgotCQkgKiBNYXNrIHRoZSBsb3dlciBiaXRzIG5vdCBw cm92aWRlZCBieSB0aGUgZnJhbWVidWZmZXIgc28gd2UKLQkJICogY2FuIGRvIENSQyBjb21wYXJp c29ucy4KLQkJICovCi0JCXYgJj0gbWFzazsKLQotCQlsdXRbaV0ucmVkID0gdjsKLQkJbHV0W2ld LmdyZWVuID0gdjsKLQkJbHV0W2ldLmJsdWUgPSB2OwotCX0KLQotCWlmIChJU19DSEVSUllWSUVX KGRhdGEtPmRldmlkKSkKLQkJbHV0W2x1dF9zaXplXS5yZWQgPQotCQkJbHV0W2x1dF9zaXplXS5n cmVlbiA9Ci0JCQlsdXRbbHV0X3NpemVdLmJsdWUgPSBsdXRbbHV0X3NpemUgLSAxXS5yZWQ7Ci0K LQlyZXR1cm4gbHV0OwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZGVnYW1tYShkYXRhX3QgKmRhdGEs Ci0JCQlpZ3RfcGlwZV90ICpwaXBlLAotCQkJY29uc3QgZ2FtbWFfbHV0X3QgKmdhbW1hKQotewot CXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIGdhbW1hLT5zaXpl OwotCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBjb2VmZnNfdG9fbHV0KGRhdGEsIGdhbW1h LAotCQkJCQkJICBkYXRhLT5jb2xvcl9kZXB0aCwgMCk7Ci0KLQlpZ3RfcGlwZV9vYmpfcmVwbGFj ZV9wcm9wX2Jsb2IocGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQsIGx1dCwgc2l6ZSk7Ci0KLQlm cmVlKGx1dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9nYW1tYShkYXRhX3QgKmRhdGEsCi0JCSAg ICAgIGlndF9waXBlX3QgKnBpcGUsCi0JCSAgICAgIGNvbnN0IGdhbW1hX2x1dF90ICpnYW1tYSkK LXsKLQlzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBnYW1tYS0+ c2l6ZTsKLQlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0ID0gY29lZmZzX3RvX2x1dChkYXRhLCBn YW1tYSwKLQkJCQkJCSAgZGF0YS0+Y29sb3JfZGVwdGgsIDApOwotCi0JaWd0X3BpcGVfb2JqX3Jl cGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwgbHV0LCBzaXplKTsKLQot CWZyZWUobHV0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2N0bShpZ3RfcGlwZV90ICpwaXBlLCBj b25zdCBkb3VibGUgKmNvZWZmaWNpZW50cykKLXsKLQlzdHJ1Y3QgZHJtX2NvbG9yX2N0bSBjdG07 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdG0ubWF0cml4KTsgaSsr KSB7Ci0JCWlmIChjb2VmZmljaWVudHNbaV0gPCAwKSB7Ci0JCQljdG0ubWF0cml4W2ldID0KLQkJ CQkoaW50NjRfdCkgKC1jb2VmZmljaWVudHNbaV0gKiAoKGludDY0X3QpIDFMIDw8IDMyKSk7Ci0J CQljdG0ubWF0cml4W2ldIHw9IDFVTEwgPDwgNjM7Ci0JCX0gZWxzZQotCQkJY3RtLm1hdHJpeFtp XSA9Ci0JCQkJKGludDY0X3QpIChjb2VmZmljaWVudHNbaV0gKiAoKGludDY0X3QpIDFMIDw8IDMy KSk7Ci0JfQotCi0JaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRD X0NUTSwgJmN0bSwgc2l6ZW9mKGN0bSkpOwotfQotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX3Byb3Ao aWd0X3BpcGVfdCAqcGlwZSwgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wKQot ewotCWlmIChpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocGlwZSwgcHJvcCkpCi0JCWlndF9waXBlX29i al9yZXBsYWNlX3Byb3BfYmxvYihwaXBlLCBwcm9wLCBOVUxMLCAwKTsKLX0KLQotI2RlZmluZSBk aXNhYmxlX2RlZ2FtbWEocGlwZSkgZGlzYWJsZV9wcm9wKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFf TFVUKQotI2RlZmluZSBkaXNhYmxlX2dhbW1hKHBpcGUpIGRpc2FibGVfcHJvcChwaXBlLCBJR1Rf Q1JUQ19HQU1NQV9MVVQpCi0jZGVmaW5lIGRpc2FibGVfY3RtKHBpcGUpIGRpc2FibGVfcHJvcChw aXBlLCBJR1RfQ1JUQ19DVE0pCi0KLS8qCi0gKiBEcmF3IDMgZ3JhZGllbnQgcmVjdGFuZ2xlcyBp biByZWQsIGdyZWVuIGFuZCBibHVlLCB3aXRoIGEgbWF4ZWQgb3V0Ci0gKiBkZWdhbW1hIExVVCBh bmQgdmVyaWZ5IHdlIGhhdmUgdGhlIHNhbWUgQ1JDIGFzIGRyYXdpbmcgc29saWQgY29sb3IKLSAq IHJlY3RhbmdsZXMgd2l0aCBsaW5lYXIgZGVnYW1tYSBMVVQuCi0gKi8KIHN0YXRpYyB2b2lkIHRl c3RfcGlwZV9kZWdhbW1hKGRhdGFfdCAqZGF0YSwKIAkJCSAgICAgIGlndF9wbGFuZV90ICpwcmlt YXJ5KQogewpAQCAtNTMyLDE5ICsyOTAsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfbGVnYWN5 X2dhbW1hKGRhdGFfdCAqZGF0YSwKIAlmcmVlKGJsdWVfbHV0KTsKIH0KIAotc3RhdGljIGRybU1v ZGVQcm9wZXJ0eUJsb2JQdHIKLWdldF9ibG9iKGRhdGFfdCAqZGF0YSwgaWd0X3BpcGVfdCAqcGlw ZSwgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wKQotewotCXVpbnQ2NF90IHBy b3BfdmFsdWU7Ci0KLQlwcm9wX3ZhbHVlID0gaWd0X3BpcGVfb2JqX2dldF9wcm9wKHBpcGUsIHBy b3ApOwotCi0JaWYgKHByb3BfdmFsdWUgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4g ZHJtTW9kZUdldFByb3BlcnR5QmxvYihkYXRhLT5kcm1fZmQsIHByb3BfdmFsdWUpOwotfQotCiAv KgogICogVmVyaWZ5IHRoYXQgc2V0dGluZyB0aGUgbGVnYWN5IGdhbW1hIExVVCByZXNldHMgdGhl IGdhbW1hIExVVCBzZXQKICAqIHRocm91Z2ggdGhlIEdBTU1BX0xVVCBwcm9wZXJ0eS4KQEAgLTY2 MywxMSArNDA4LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9waXBlX2xlZ2FjeV9nYW1tYV9yZXNldChk YXRhX3QgKmRhdGEsCiAJZnJlZV9sdXQoZ2FtbWFfemVybyk7CiB9CiAKLXN0YXRpYyBib29sIGNy Y19lcXVhbChpZ3RfY3JjX3QgKmEsIGlndF9jcmNfdCAqYikKLXsKLSAgcmV0dXJuIG1lbWNtcChh LT5jcmMsIGItPmNyYywgc2l6ZW9mKGEtPmNyY1swXSkgKiBhLT5uX3dvcmRzKSA9PSAwOwotfQot CiAvKgogICogRHJhdyAzIHJlY3RhbmdsZXMgdXNpbmcgYmVmb3JlIGNvbG9ycyB3aXRoIHRoZSBj dG0gbWF0cml4IGFwcGx5IGFuZCB2ZXJpZnkKICAqIHRoZSBDUkMgaXMgZXF1YWwgdG8gdXNpbmcg YWZ0ZXIgY29sb3JzIHdpdGggYW4gaWRlbnRpZnkgY3RtIG1hdHJpeC4KQEAgLTEwODYsMTI3ICs4 MjYsNiBAQCBydW5fdGVzdHNfZm9yX3BpcGUoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcCkKIAl9 CiB9CiAKLXN0YXRpYyBpbnQKLXBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQoaWd0X3BpcGVfdCAq cGlwZSwgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wLCB1aW50MzJfdCBibG9i X2lkKQotewotCWludCByZXQ7Ci0KLQlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlw ZSwgcHJvcCwgTlVMTCwgMCk7Ci0KLQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwg cHJvcCwgYmxvYl9pZCk7Ci0KLQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihwaXBlLT5k aXNwbGF5LCBwaXBlLT5kaXNwbGF5LT5pc19hdG9taWMgPyBDT01NSVRfQVRPTUlDIDogQ09NTUlU X0xFR0FDWSk7Ci0KLQlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgcHJvcCwgMCk7 Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1waXBlX3NldF9wcm9wZXJ0eV9ibG9i KGlndF9waXBlX3QgKnBpcGUsIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCwg dm9pZCAqcHRyLCBzaXplX3QgbGVuZ3RoKQotewotCWlndF9waXBlX29ial9yZXBsYWNlX3Byb3Bf YmxvYihwaXBlLCBwcm9wLCBwdHIsIGxlbmd0aCk7Ci0KLQlyZXR1cm4gaWd0X2Rpc3BsYXlfdHJ5 X2NvbW1pdDIocGlwZS0+ZGlzcGxheSwgcGlwZS0+ZGlzcGxheS0+aXNfYXRvbWljID8gQ09NTUlU X0FUT01JQyA6IENPTU1JVF9MRUdBQ1kpOwotfQotCi1zdGF0aWMgdm9pZAotaW52YWxpZF9nYW1t YV9sdXRfc2l6ZXMoZGF0YV90ICpkYXRhKQotewotCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKLQlpZ3RfcGlwZV90ICpwaXBlID0gJmRpc3BsYXktPnBpcGVzWzBdOwot CXNpemVfdCBnYW1tYV9sdXRfc2l6ZSA9IGRhdGEtPmdhbW1hX2x1dF9zaXplICogc2l6ZW9mKHN0 cnVjdCBkcm1fY29sb3JfbHV0KTsKLQlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqZ2FtbWFfbHV0Owot Ci0JaWd0X3JlcXVpcmUoaWd0X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIElHVF9DUlRDX0dBTU1B X0xVVCkpOwotCi0JZ2FtbWFfbHV0ID0gbWFsbG9jKGdhbW1hX2x1dF9zaXplICogMik7Ci0KLQlp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGRpc3BsYXktPmlzX2F0b21pYyA/IENPTU1JVF9B VE9NSUMgOiBDT01NSVRfTEVHQUNZKTsKLQotCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVy dHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQsCi0JCQkJCSAgICAgZ2FtbWFfbHV0LCAx KSwKLQkJICAgICAgLUVJTlZBTCk7Ci0JaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9i bG9iKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwKLQkJCQkJICAgICBnYW1tYV9sdXQsIGdhbW1h X2x1dF9zaXplICsgMSksCi0JCSAgICAgIC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlwZV9z ZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQsCi0JCQkJCSAgICAgZ2Ft bWFfbHV0LCBnYW1tYV9sdXRfc2l6ZSAtIDEpLAotCQkgICAgICAtRUlOVkFMKTsKLQlpZ3RfYXNz ZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfR0FNTUFfTFVULAot CQkJCQkgICAgIGdhbW1hX2x1dCwgZ2FtbWFfbHV0X3NpemUgKyBzaXplb2Yoc3RydWN0IGRybV9j b2xvcl9sdXQpKSwKLQkJICAgICAgLUVJTlZBTCk7Ci0JaWd0X2Fzc2VydF9lcShwaXBlX3NldF9w cm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwgcGlwZS0+Y3J0Y19pZCks Ci0JCSAgICAgIC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxv Yl9pZChwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQsIDQwOTYgKiA0MDk2KSwKLQkJICAgICAgLUVJ TlZBTCk7Ci0KLQlmcmVlKGdhbW1hX2x1dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnZhbGlkX2Rl Z2FtbWFfbHV0X3NpemVzKGRhdGFfdCAqZGF0YSkKLXsKLQlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7Ci0JaWd0X3BpcGVfdCAqcGlwZSA9ICZkaXNwbGF5LT5waXBlc1sw XTsKLQlzaXplX3QgZGVnYW1tYV9sdXRfc2l6ZSA9IGRhdGEtPmRlZ2FtbWFfbHV0X3NpemUgKiBz aXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpOwotCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpkZWdh bW1hX2x1dDsKLQotCWlndF9yZXF1aXJlKGlndF9waXBlX29ial9oYXNfcHJvcChwaXBlLCBJR1Rf Q1JUQ19ERUdBTU1BX0xVVCkpOwotCi0JZGVnYW1tYV9sdXQgPSBtYWxsb2MoZGVnYW1tYV9sdXRf c2l6ZSAqIDIpOwotCi0JaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBkaXNwbGF5LT5pc19h dG9taWMgPyBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xFR0FDWSk7Ci0KLQlpZ3RfYXNzZXJ0X2Vx KHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQsCi0JCQkJ CSAgICAgZGVnYW1tYV9sdXQsIDEpLCAtRUlOVkFMKTsKLQlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0 X3Byb3BlcnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfREVHQU1NQV9MVVQsCi0JCQkJCSAgICAgZGVn YW1tYV9sdXQsIGRlZ2FtbWFfbHV0X3NpemUgKyAxKSwKLQkJICAgICAgLUVJTlZBTCk7Ci0JaWd0 X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFf TFVULAotCQkJCQkgICAgIGRlZ2FtbWFfbHV0LCBkZWdhbW1hX2x1dF9zaXplIC0gMSksCi0JCSAg ICAgIC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBl LCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCwKLQkJCQkJICAgICBkZWdhbW1hX2x1dCwgZGVnYW1tYV9s dXRfc2l6ZSArIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkpLAotCQkgICAgICAtRUlOVkFM KTsKLQlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NS VENfREVHQU1NQV9MVVQsIHBpcGUtPmNydGNfaWQpLAotCQkgICAgICAtRUlOVkFMKTsKLQlpZ3Rf YXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENfREVHQU1N QV9MVVQsIDQwOTYgKiA0MDk2KSwKLQkJICAgICAgLUVJTlZBTCk7Ci0KLQlmcmVlKGRlZ2FtbWFf bHV0KTsKLX0KLQotc3RhdGljIHZvaWQKLWludmFsaWRfY3RtX21hdHJpeF9zaXplcyhkYXRhX3Qg KmRhdGEpCi17Ci0JaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OwotCWln dF9waXBlX3QgKnBpcGUgPSAmZGlzcGxheS0+cGlwZXNbMF07Ci0Jdm9pZCAqcHRyOwotCi0JaWd0 X3JlcXVpcmUoaWd0X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIElHVF9DUlRDX0NUTSkpOwotCi0J cHRyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSkgKiA0KTsKLQotCWlndF9h c3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwg MSksCi0JCSAgICAgIC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlf YmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRy bV9jb2xvcl9jdG0pICsgMSksCi0JCSAgICAgIC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlw ZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwKLQkJCQkJICAgICBz aXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pIC0gMSksCi0JCSAgICAgIC1FSU5WQUwpOwotCWln dF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0 ciwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pICogMiksCi0JCSAgICAg IC1FSU5WQUwpOwotCWlndF9hc3NlcnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChwaXBl LCBJR1RfQ1JUQ19DVE0sIHBpcGUtPmNydGNfaWQpLAotCQkgICAgICAtRUlOVkFMKTsKLQlpZ3Rf YXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENfQ1RNLCA0 MDk2ICogNDA5NiksCi0JCSAgICAgIC1FSU5WQUwpOwotCi0JZnJlZShwdHIpOwotfQotCiBpZ3Rf bWFpbgogewogCWRhdGFfdCBkYXRhID0ge307CmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfY29sb3Iu aCBiL3Rlc3RzL2ttc19jb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmNlZTM4NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfY29sb3IuaApAQCAtMCwwICsx LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZu ZGVmIENPTE9SCisjZGVmaW5lIENPTE9SCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5j bHVkZSAiaWd0LmgiCisKKworLyogSW50ZXJuYWwgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlkb3Vi bGUgciwgZywgYjsKK30gY29sb3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBkcm1fZmQ7 CisJdWludDMyX3QgZGV2aWQ7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9waXBlX2Ny Y190ICpwaXBlX2NyYzsKKworCXVpbnQzMl90IGNvbG9yX2RlcHRoOworCXVpbnQ2NF90IGRlZ2Ft bWFfbHV0X3NpemU7CisJdWludDY0X3QgZ2FtbWFfbHV0X3NpemU7CisJI2lmZGVmIEhBVkVfQ0hB TUVMSVVNCisJc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtOworCXN0cnVjdCBjaGFtZWxpdW1f cG9ydCAqKnBvcnRzOworCWludCBwb3J0X2NvdW50OworCSNlbmRpZgorfSBkYXRhX3Q7CisKK3R5 cGVkZWYgc3RydWN0IHsKKwlpbnQgc2l6ZTsKKwlkb3VibGUgY29lZmZzW107Cit9IGdhbW1hX2x1 dF90OworCit2b2lkIHBhaW50X2dyYWRpZW50X3JlY3RhbmdsZXMoZGF0YV90ICpkYXRhLAorCQkJ ICAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCSAgICAgICBjb2xvcl90ICpjb2xvcnMs CisJCQkgICAgICAgc3RydWN0IGlndF9mYiAqZmIpOwordm9pZCBwYWludF9yZWN0YW5nbGVzKGRh dGFfdCAqZGF0YSwKKwkJICAgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkgICAgICBjb2xv cl90ICpjb2xvcnMsCisJCSAgICAgIHN0cnVjdCBpZ3RfZmIgKmZiKTsKK2dhbW1hX2x1dF90ICph bGxvY19sdXQoaW50IGx1dF9zaXplKTsKK3ZvaWQgZnJlZV9sdXQoZ2FtbWFfbHV0X3QgKmdhbW1h KTsKK2dhbW1hX2x1dF90ICpnZW5lcmF0ZV90YWJsZShpbnQgbHV0X3NpemUsIGRvdWJsZSBleHAp OworZ2FtbWFfbHV0X3QgKmdlbmVyYXRlX3RhYmxlX21heChpbnQgbHV0X3NpemUpOworZ2FtbWFf bHV0X3QgKmdlbmVyYXRlX3RhYmxlX3plcm8oaW50IGx1dF9zaXplKTsKK3N0cnVjdCBkcm1fY29s b3JfbHV0ICpjb2VmZnNfdG9fbHV0KGRhdGFfdCAqZGF0YSwKKwkJCQkgICAgY29uc3QgZ2FtbWFf bHV0X3QgKmdhbW1hLAorCQkJCSAgICB1aW50MzJfdCBjb2xvcl9kZXB0aCwKKwkJCQkgICAgaW50 IG9mZik7Cit2b2lkIHNldF9kZWdhbW1hKGRhdGFfdCAqZGF0YSwKKwkJIGlndF9waXBlX3QgKnBp cGUsCisJCSBjb25zdCBnYW1tYV9sdXRfdCAqZ2FtbWEpOwordm9pZCBzZXRfZ2FtbWEoZGF0YV90 ICpkYXRhLAorCSAgICAgICBpZ3RfcGlwZV90ICpwaXBlLAorCSAgICAgICBjb25zdCBnYW1tYV9s dXRfdCAqZ2FtbWEpOwordm9pZCBzZXRfY3RtKGlndF9waXBlX3QgKnBpcGUsIGNvbnN0IGRvdWJs ZSAqY29lZmZpY2llbnRzKTsKK3ZvaWQgZGlzYWJsZV9wcm9wKGlndF9waXBlX3QgKnBpcGUsIGVu dW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCk7CisKKyNkZWZpbmUgZGlzYWJsZV9k ZWdhbW1hKHBpcGUpIGRpc2FibGVfcHJvcChwaXBlLCBJR1RfQ1JUQ19ERUdBTU1BX0xVVCkKKyNk ZWZpbmUgZGlzYWJsZV9nYW1tYShwaXBlKSBkaXNhYmxlX3Byb3AocGlwZSwgSUdUX0NSVENfR0FN TUFfTFVUKQorI2RlZmluZSBkaXNhYmxlX2N0bShwaXBlKSBkaXNhYmxlX3Byb3AocGlwZSwgSUdU X0NSVENfQ1RNKQorCitkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGdldF9ibG9iKGRhdGFfdCAqZGF0 YSwgaWd0X3BpcGVfdCAqcGlwZSwKKwkJCQllbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVz IHByb3ApOworYm9vbCBjcmNfZXF1YWwoaWd0X2NyY190ICphLCBpZ3RfY3JjX3QgKmIpOworaW50 IHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQoaWd0X3BpcGVfdCAqcGlwZSwKKwkJCSAgICAgIGVu dW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCwKKwkJCSAgICAgIHVpbnQzMl90IGJs b2JfaWQpOworaW50IHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwKKwkJ CSAgIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCwKKwkJCSAgIHZvaWQgKnB0 ciwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIGludmFsaWRfZ2FtbWFfbHV0X3NpemVzKGRhdGFfdCAq ZGF0YSk7Cit2b2lkIGludmFsaWRfZGVnYW1tYV9sdXRfc2l6ZXMoZGF0YV90ICpkYXRhKTsKK3Zv aWQgaW52YWxpZF9jdG1fbWF0cml4X3NpemVzKGRhdGFfdCAqZGF0YSk7CisjZW5kaWYKKwpkaWZm IC0tZ2l0IGEvdGVzdHMva21zX2NvbG9yX2hlbHBlci5jIGIvdGVzdHMva21zX2NvbG9yX2hlbHBl ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTFhZTgKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy9rbXNfY29sb3JfaGVscGVyLmMKQEAgLTAsMCArMSwzODYgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImttc19j b2xvci5oIgorCit2b2lkIHBhaW50X2dyYWRpZW50X3JlY3RhbmdsZXMoZGF0YV90ICpkYXRhLAor CQkJICAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCSAgICAgICBjb2xvcl90ICpjb2xv cnMsCisJCQkgICAgICAgc3RydWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3IgPSBpZ3Rf Z2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlpbnQgaSwgbCA9IG1vZGUtPmhkaXNw bGF5IC8gMzsKKwlpbnQgcm93c19yZW1haW5pbmcgPSBtb2RlLT5oZGlzcGxheSAlIDM7CisKKwkv KiBQYWludCAzIGdyYWRpZW50IHJlY3RhbmdsZXMgd2l0aCByZWQvZ3JlZW4vYmx1ZSBiZXR3ZWVu IDEuMCBhbmQKKwkgKiAwLjUuIFdlIHdhbnQgdG8gYXZvaWQgMCBzbyBlYWNoIG1heCBMVVRzIG9u bHkgYWZmZWN0IHRoZWlyIG93bgorCSAqIHJlY3RhbmdsZS4KKwkgKi8KKwlmb3IgKGkgPSAwIDsg aSA8IDM7IGkrKykgeworCQlpZ3RfcGFpbnRfY29sb3JfZ3JhZGllbnRfcmFuZ2UoY3IsIGkgKiBs LCAwLCBsLCBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgICAgIGNvbG9yc1tpXS5yICE9IDAgPyAw LjIgOiAwLAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcgIT0gMCA/IDAuMiA6IDAsCisJCQkJCSAg ICAgICBjb2xvcnNbaV0uYiAhPSAwID8gMC4yIDogMCwKKwkJCQkJICAgICAgIGNvbG9yc1tpXS5y LAorCQkJCQkgICAgICAgY29sb3JzW2ldLmcsCisJCQkJCSAgICAgICBjb2xvcnNbaV0uYik7CisJ fQorCisJaWYgKHJvd3NfcmVtYWluaW5nID4gMCkKKwkJaWd0X3BhaW50X2NvbG9yX2dyYWRpZW50 X3JhbmdlKGNyLCBpICogbCwgMCwgcm93c19yZW1haW5pbmcsCisJCQkJCSAgICAgICBtb2RlLT52 ZGlzcGxheSwKKwkJCQkJICAgICAgIGNvbG9yc1tpLTFdLnIgIT0gMCA/IDAuMiA6IDAsCisJCQkJ CSAgICAgICBjb2xvcnNbaS0xXS5nICE9IDAgPyAwLjIgOiAwLAorCQkJCQkgICAgICAgY29sb3Jz W2ktMV0uYiAhPSAwID8gMC4yIDogMCwKKwkJCQkJICAgICAgIGNvbG9yc1tpLTFdLnIsCisJCQkJ CSAgICAgICBjb2xvcnNbaS0xXS5nLAorCQkJCQkgICAgICAgY29sb3JzW2ktMV0uYik7CisKKwlp Z3RfcHV0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiLCBjcik7Cit9CisKK3ZvaWQgcGFpbnRf cmVjdGFuZ2xlcyhkYXRhX3QgKmRhdGEsCisJCSAgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwK KwkJICAgICAgY29sb3JfdCAqY29sb3JzLAorCQkgICAgICBzdHJ1Y3QgaWd0X2ZiICpmYikKK3sK KwljYWlyb190ICpjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOworCWlu dCBpLCBsID0gbW9kZS0+aGRpc3BsYXkgLyAzOworCWludCByb3dzX3JlbWFpbmluZyA9IG1vZGUt PmhkaXNwbGF5ICUgMzsKKworCS8qIFBhaW50IDMgc29saWQgcmVjdGFuZ2xlcy4gKi8KKwlmb3Ig KGkgPSAwIDsgaSA8IDM7IGkrKykgeworCQlpZ3RfcGFpbnRfY29sb3IoY3IsIGkgKiBsLCAwLCBs LCBtb2RlLT52ZGlzcGxheSwKKwkJCQljb2xvcnNbaV0uciwgY29sb3JzW2ldLmcsIGNvbG9yc1tp XS5iKTsKKwl9CisKKwlpZiAocm93c19yZW1haW5pbmcgPiAwKQorCQlpZ3RfcGFpbnRfY29sb3Io Y3IsIGkgKiBsLCAwLCByb3dzX3JlbWFpbmluZywgbW9kZS0+dmRpc3BsYXksCisJCQkJY29sb3Jz W2ktMV0uciwgY29sb3JzW2ktMV0uZywgY29sb3JzW2ktMV0uYik7CisKKwlpZ3RfcHV0X2NhaXJv X2N0eChkYXRhLT5kcm1fZmQsIGZiLCBjcik7Cit9CisKK2dhbW1hX2x1dF90ICphbGxvY19sdXQo aW50IGx1dF9zaXplKQoreworCWdhbW1hX2x1dF90ICpnYW1tYTsKKworCWlndF9hc3NlcnRfbHQo MCwgbHV0X3NpemUpOworCisJZ2FtbWEgPSBtYWxsb2Moc2l6ZW9mKCpnYW1tYSkgKyBsdXRfc2l6 ZSAqIHNpemVvZihnYW1tYS0+Y29lZmZzWzBdKSk7CisJaWd0X2Fzc2VydChnYW1tYSk7CisJZ2Ft bWEtPnNpemUgPSBsdXRfc2l6ZTsKKworCXJldHVybiBnYW1tYTsKK30KKwordm9pZCBmcmVlX2x1 dChnYW1tYV9sdXRfdCAqZ2FtbWEpCit7CisJaWYgKCFnYW1tYSkKKwkJcmV0dXJuOworCisJZnJl ZShnYW1tYSk7Cit9CisKK2dhbW1hX2x1dF90ICpnZW5lcmF0ZV90YWJsZShpbnQgbHV0X3NpemUs IGRvdWJsZSBleHApCit7CisJZ2FtbWFfbHV0X3QgKmdhbW1hID0gYWxsb2NfbHV0KGx1dF9zaXpl KTsKKwlpbnQgaTsKKworCWdhbW1hLT5jb2VmZnNbMF0gPSAwLjA7CisJZm9yIChpID0gMTsgaSA8 IGx1dF9zaXplOyBpKyspCisJCWdhbW1hLT5jb2VmZnNbaV0gPSBwb3coaSAqIDEuMCAvIChsdXRf c2l6ZSAtIDEpLCBleHApOworCisJcmV0dXJuIGdhbW1hOworfQorCitnYW1tYV9sdXRfdCAqZ2Vu ZXJhdGVfdGFibGVfbWF4KGludCBsdXRfc2l6ZSkKK3sKKwlnYW1tYV9sdXRfdCAqZ2FtbWEgPSBh bGxvY19sdXQobHV0X3NpemUpOworCWludCBpOworCisJZ2FtbWEtPmNvZWZmc1swXSA9IDAuMDsK Kwlmb3IgKGkgPSAxOyBpIDwgbHV0X3NpemU7IGkrKykKKwkJZ2FtbWEtPmNvZWZmc1tpXSA9IDEu MDsKKworCXJldHVybiBnYW1tYTsKK30KKworZ2FtbWFfbHV0X3QgKmdlbmVyYXRlX3RhYmxlX3pl cm8oaW50IGx1dF9zaXplKQoreworCWdhbW1hX2x1dF90ICpnYW1tYSA9IGFsbG9jX2x1dChsdXRf c2l6ZSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykKKwkJZ2Ft bWEtPmNvZWZmc1tpXSA9IDAuMDsKKworCXJldHVybiBnYW1tYTsKK30KKworc3RydWN0IGRybV9j b2xvcl9sdXQgKmNvZWZmc190b19sdXQoZGF0YV90ICpkYXRhLAorCQkJCSAgICBjb25zdCBnYW1t YV9sdXRfdCAqZ2FtbWEsCisJCQkJICAgIHVpbnQzMl90IGNvbG9yX2RlcHRoLAorCQkJCSAgICBp bnQgb2ZmKQoreworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQ7CisJaW50IGksIGx1dF9zaXpl ID0gZ2FtbWEtPnNpemU7CisJdWludDMyX3QgbWF4X3ZhbHVlID0gKDEgPDwgMTYpIC0gMTsKKwl1 aW50MzJfdCBtYXNrOworCisJaWYgKGlzX2k5MTVfZGV2aWNlKGRhdGEtPmRybV9mZCkpCisJCW1h c2sgPSAoKDEgPDwgY29sb3JfZGVwdGgpIC0gMSkgPDwgODsKKwllbHNlCisJCW1hc2sgPSBtYXhf dmFsdWU7CisKKwlsdXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIGx1 dF9zaXplKTsKKworCWlmIChJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSkKKwkJbHV0X3NpemUg LT0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQl1aW50MzJfdCB2ID0g KGdhbW1hLT5jb2VmZnNbaV0gKiBtYXhfdmFsdWUpOworCisJCS8qCisJCSAqIEhhcmR3YXJlIG1p Z2h0IGVuY29kZSBjb2xvcnMgb24gYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJpdHMKKwkJICogdGhh biB3aGF0IGlzIGluIG91ciBmcmFtZWJ1ZmZlciAoMTAgb3IgMTJiaXRzIGZvciBleGFtcGxlKS4K KwkJICogTWFzayB0aGUgbG93ZXIgYml0cyBub3QgcHJvdmlkZWQgYnkgdGhlIGZyYW1lYnVmZmVy IHNvIHdlCisJCSAqIGNhbiBkbyBDUkMgY29tcGFyaXNvbnMuCisJCSAqLworCQl2ICY9IG1hc2s7 CisKKwkJbHV0W2ldLnJlZCA9IHY7CisJCWx1dFtpXS5ncmVlbiA9IHY7CisJCWx1dFtpXS5ibHVl ID0gdjsKKwl9CisKKwlpZiAoSVNfQ0hFUlJZVklFVyhkYXRhLT5kZXZpZCkpCisJCWx1dFtsdXRf c2l6ZV0ucmVkID0KKwkJCWx1dFtsdXRfc2l6ZV0uZ3JlZW4gPQorCQkJbHV0W2x1dF9zaXplXS5i bHVlID0gbHV0W2x1dF9zaXplIC0gMV0ucmVkOworCisJcmV0dXJuIGx1dDsKK30KKwordm9pZCBz ZXRfZGVnYW1tYShkYXRhX3QgKmRhdGEsCisJCSBpZ3RfcGlwZV90ICpwaXBlLAorCQkgY29uc3Qg Z2FtbWFfbHV0X3QgKmdhbW1hKQoreworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1f Y29sb3JfbHV0KSAqIGdhbW1hLT5zaXplOworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBj b2VmZnNfdG9fbHV0KGRhdGEsIGdhbW1hLAorCQkJCQkJICBkYXRhLT5jb2xvcl9kZXB0aCwgMCk7 CisKKwlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZSwgSUdUX0NSVENfREVHQU1N QV9MVVQsIGx1dCwgc2l6ZSk7CisKKwlmcmVlKGx1dCk7Cit9CisKK3ZvaWQgc2V0X2dhbW1hKGRh dGFfdCAqZGF0YSwKKwkgICAgICAgaWd0X3BpcGVfdCAqcGlwZSwgY29uc3QgZ2FtbWFfbHV0X3Qg KmdhbW1hKQoreworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAq IGdhbW1hLT5zaXplOworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBjb2VmZnNfdG9fbHV0 KGRhdGEsIGdhbW1hLAorCQkJCQkJICBkYXRhLT5jb2xvcl9kZXB0aCwgMCk7CisKKwlpZ3RfcGlw ZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZSwgSUdUX0NSVENfR0FNTUFfTFVULCBsdXQsIHNp emUpOworCisJZnJlZShsdXQpOworfQorCit2b2lkIHNldF9jdG0oaWd0X3BpcGVfdCAqcGlwZSwg Y29uc3QgZG91YmxlICpjb2VmZmljaWVudHMpCit7CisJc3RydWN0IGRybV9jb2xvcl9jdG0gY3Rt OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RtLm1hdHJpeCk7IGkr KykgeworCQlpZiAoY29lZmZpY2llbnRzW2ldIDwgMCkgeworCQkJY3RtLm1hdHJpeFtpXSA9CisJ CQkJKGludDY0X3QpICgtY29lZmZpY2llbnRzW2ldICoKKwkJCQkoKGludDY0X3QpIDFMIDw8IDMy KSk7CisJCQljdG0ubWF0cml4W2ldIHw9IDFVTEwgPDwgNjM7CisJCX0gZWxzZQorCQkJY3RtLm1h dHJpeFtpXSA9CisJCQkJKGludDY0X3QpIChjb2VmZmljaWVudHNbaV0gKgorCQkJCSgoaW50NjRf dCkgMUwgPDwgMzIpKTsKKwl9CisKKwlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlw ZSwgSUdUX0NSVENfQ1RNLCAmY3RtLCBzaXplb2YoY3RtKSk7Cit9CisKK3ZvaWQgZGlzYWJsZV9w cm9wKGlndF9waXBlX3QgKnBpcGUsIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJv cCkKK3sKKwlpZiAoaWd0X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIHByb3ApKQorCQlpZ3RfcGlw ZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZSwgcHJvcCwgTlVMTCwgMCk7Cit9CisKK2RybU1v ZGVQcm9wZXJ0eUJsb2JQdHIKK2dldF9ibG9iKGRhdGFfdCAqZGF0YSwgaWd0X3BpcGVfdCAqcGlw ZSwgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wKQoreworCXVpbnQ2NF90IHBy b3BfdmFsdWU7CisKKwlwcm9wX3ZhbHVlID0gaWd0X3BpcGVfb2JqX2dldF9wcm9wKHBpcGUsIHBy b3ApOworCisJaWYgKHByb3BfdmFsdWUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4g ZHJtTW9kZUdldFByb3BlcnR5QmxvYihkYXRhLT5kcm1fZmQsIHByb3BfdmFsdWUpOworfQorCiti b29sIGNyY19lcXVhbChpZ3RfY3JjX3QgKmEsIGlndF9jcmNfdCAqYikKK3sKKwlyZXR1cm4gbWVt Y21wKGEtPmNyYywgYi0+Y3JjLCBzaXplb2YoYS0+Y3JjWzBdKSAqIGEtPm5fd29yZHMpID09IDA7 Cit9CisKK2ludAorcGlwZV9zZXRfcHJvcGVydHlfYmxvYl9pZChpZ3RfcGlwZV90ICpwaXBlLAor CQkJICBlbnVtIGlndF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzIHByb3AsCisJCQkgIHVpbnQzMl90 IGJsb2JfaWQpCit7CisJaW50IHJldDsKKworCWlndF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxv YihwaXBlLCBwcm9wLCBOVUxMLCAwKTsKKworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShw aXBlLCBwcm9wLCBibG9iX2lkKTsKKworCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKHBp cGUtPmRpc3BsYXksCisJCQkJICAgICAgcGlwZS0+ZGlzcGxheS0+aXNfYXRvbWljID8KKwkJCQkg ICAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX0xFR0FDWSk7CisKKwlpZ3RfcGlwZV9vYmpfc2V0 X3Byb3BfdmFsdWUocGlwZSwgcHJvcCwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3Bp cGVfc2V0X3Byb3BlcnR5X2Jsb2IoaWd0X3BpcGVfdCAqcGlwZSwKKwkJICAgICAgIGVudW0gaWd0 X2F0b21pY19jcnRjX3Byb3BlcnRpZXMgcHJvcCwKKwkJICAgICAgIHZvaWQgKnB0ciwgc2l6ZV90 IGxlbmd0aCkKK3sKKwlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9wcm9wX2Jsb2IocGlwZSwgcHJvcCwg cHRyLCBsZW5ndGgpOworCisJcmV0dXJuIGlndF9kaXNwbGF5X3RyeV9jb21taXQyKHBpcGUtPmRp c3BsYXksCisJCQkJICAgICAgIHBpcGUtPmRpc3BsYXktPmlzX2F0b21pYyA/CisJCQkJICAgICAg IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZKTsKK30KKwordm9pZAoraW52YWxpZF9nYW1t YV9sdXRfc2l6ZXMoZGF0YV90ICpkYXRhKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKKwlpZ3RfcGlwZV90ICpwaXBlID0gJmRpc3BsYXktPnBpcGVzWzBdOwor CXNpemVfdCBnYW1tYV9sdXRfc2l6ZSA9IGRhdGEtPmdhbW1hX2x1dF9zaXplICoKKwkJCQlzaXpl b2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpOworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpnYW1tYV9s dXQ7CisKKwlpZ3RfcmVxdWlyZShpZ3RfcGlwZV9vYmpfaGFzX3Byb3AocGlwZSwgSUdUX0NSVENf R0FNTUFfTFVUKSk7CisKKwlnYW1tYV9sdXQgPSBtYWxsb2MoZ2FtbWFfbHV0X3NpemUgKiAyKTsK KworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwKKwkJCSAgICBkaXNwbGF5LT5pc19hdG9t aWMgPworCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfTEVHQUNZKTsKKworCWlndF9hc3Nl cnRfZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19HQU1NQV9MVVQsCisJ CQkJCSAgICAgZ2FtbWFfbHV0LCAxKSwgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3Nl dF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwKKwkJCQkJICAgICBnYW1t YV9sdXQsIGdhbW1hX2x1dF9zaXplICsgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fz c2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xVVCwK KwkJCQkJICAgICBnYW1tYV9sdXQsIGdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJ TlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9D UlRDX0dBTU1BX0xVVCwKKwkJCQkJICAgICBnYW1tYV9sdXQsIGdhbW1hX2x1dF9zaXplICsKKwkJ CQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpKSwKKwkJCQkJICAgICAtRUlOVkFM KTsKKwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NS VENfR0FNTUFfTFVULAorCQkgICAgICBwaXBlLT5jcnRjX2lkKSwgLUVJTlZBTCk7CisJaWd0X2Fz c2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9DUlRDX0dBTU1BX0xV VCwKKwkJICAgICAgNDA5NiAqIDQwOTYpLCAtRUlOVkFMKTsKKworCWZyZWUoZ2FtbWFfbHV0KTsK K30KKwordm9pZAoraW52YWxpZF9kZWdhbW1hX2x1dF9zaXplcyhkYXRhX3QgKmRhdGEpCit7CisJ aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9waXBlX3QgKnBp cGUgPSAmZGlzcGxheS0+cGlwZXNbMF07CisJc2l6ZV90IGRlZ2FtbWFfbHV0X3NpemUgPSBkYXRh LT5kZWdhbW1hX2x1dF9zaXplICoKKwkJCQkgIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCk7 CisJc3RydWN0IGRybV9jb2xvcl9sdXQgKmRlZ2FtbWFfbHV0OworCisJaWd0X3JlcXVpcmUoaWd0 X3BpcGVfb2JqX2hhc19wcm9wKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFfTFVUKSk7CisKKwlkZWdh bW1hX2x1dCA9IG1hbGxvYyhkZWdhbW1hX2x1dF9zaXplICogMik7CisKKwlpZ3RfZGlzcGxheV9j b21taXQyKGRpc3BsYXksIGRpc3BsYXktPmlzX2F0b21pYyA/CisJCQkgICAgQ09NTUlUX0FUT01J QyA6IENPTU1JVF9MRUdBQ1kpOworCisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9i bG9iKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFfTFVULAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0LCAx KSwgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUs IElHVF9DUlRDX0RFR0FNTUFfTFVULAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0LCBkZWdhbW1hX2x1 dF9zaXplICsgMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3Nl dF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFfTFVULAorCQkJCQkgICAgIGRl Z2FtbWFfbHV0LCBkZWdhbW1hX2x1dF9zaXplIC0gMSksCisJCQkJCSAgICAgLUVJTlZBTCk7CisJ aWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElHVF9DUlRDX0RFR0FN TUFfTFVULAorCQkJCQkgICAgIGRlZ2FtbWFfbHV0LCBkZWdhbW1hX2x1dF9zaXplICsKKwkJCQkJ ICAgICBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpKSwKKwkJCQkJICAgICAtRUlOVkFMKTsK KwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENf REVHQU1NQV9MVVQsCisJCQkJCQlwaXBlLT5jcnRjX2lkKSwgLUVJTlZBTCk7CisJaWd0X2Fzc2Vy dF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9DUlRDX0RFR0FNTUFfTFVU LAorCQkJCQkJNDA5NiAqIDQwOTYpLCAtRUlOVkFMKTsKKworCWZyZWUoZGVnYW1tYV9sdXQpOwor fQorCit2b2lkIGludmFsaWRfY3RtX21hdHJpeF9zaXplcyhkYXRhX3QgKmRhdGEpCit7CisJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9waXBlX3QgKnBpcGUg PSAmZGlzcGxheS0+cGlwZXNbMF07CisJdm9pZCAqcHRyOworCisJaWd0X3JlcXVpcmUoaWd0X3Bp cGVfb2JqX2hhc19wcm9wKHBpcGUsIElHVF9DUlRDX0NUTSkpOworCisJcHRyID0gbWFsbG9jKHNp emVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSkgKiA0KTsKKworCWlndF9hc3NlcnRfZXEocGlwZV9z ZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwgMSksCisJCQkJCSAgICAg LUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iKHBpcGUsIElH VF9DUlRDX0NUTSwgcHRyLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSkg KyAxKSwKKwkJCQkJICAgICAtRUlOVkFMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBpcGVfc2V0X3Byb3Bl cnR5X2Jsb2IocGlwZSwgSUdUX0NSVENfQ1RNLCBwdHIsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVj dCBkcm1fY29sb3JfY3RtKSAtIDEpLAorCQkJCQkgICAgIC1FSU5WQUwpOworCWlndF9hc3NlcnRf ZXEocGlwZV9zZXRfcHJvcGVydHlfYmxvYihwaXBlLCBJR1RfQ1JUQ19DVE0sIHB0ciwKKwkJCQkJ ICAgICBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pICogMiksCisJCQkJCSAgICAgLUVJTlZB TCk7CisJaWd0X2Fzc2VydF9lcShwaXBlX3NldF9wcm9wZXJ0eV9ibG9iX2lkKHBpcGUsIElHVF9D UlRDX0NUTSwKKwkJCQkJCXBpcGUtPmNydGNfaWQpLCAtRUlOVkFMKTsKKwlpZ3RfYXNzZXJ0X2Vx KHBpcGVfc2V0X3Byb3BlcnR5X2Jsb2JfaWQocGlwZSwgSUdUX0NSVENfQ1RNLAorCQkJCQkJNDA5 NiAqIDQwOTYpLCAtRUlOVkFMKTsKKworCWZyZWUocHRyKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVz dHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCBhNzlkMjJiLi5kODBjMWU4 IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApA QCAtMTksNyArMTksNiBAQCB0ZXN0X3Byb2dzID0gWwogCSdrbXNfYmlnX2ZiJywKIAkna21zX2J1 c3knLAogCSdrbXNfY2NzJywKLQkna21zX2NvbG9yJywKIAkna21zX2NvbmN1cnJlbnQnLAogCSdr bXNfY29udGVudF9wcm90ZWN0aW9uJywKIAkna21zX2NydGNfYmFja2dyb3VuZF9jb2xvcicsCkBA IC0zNTcsNiArMzU2LDI0IEBAIGV4ZWN1dGFibGUoJ3Rlc3RkaXNwbGF5JywgWyd0ZXN0ZGlzcGxh eS5jJywgJ3Rlc3RkaXNwbGF5X2hvdHBsdWcuYyddLAogCSAgIGluc3RhbGwgOiB0cnVlKQogdGVz dF9saXN0ICs9ICd0ZXN0ZGlzcGxheScKIAordGVzdF9leGVjdXRhYmxlcyArPSBleGVjdXRhYmxl KCdrbXNfY29sb3InLAorCSAgIFsgJ2ttc19jb2xvci5jJywgJ2ttc19jb2xvcl9oZWxwZXIuYycg XSwKKwkgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMsCisJICAgaW5zdGFsbF9kaXIgOiBsaWJl eGVjZGlyLAorCSAgIGluc3RhbGxfcnBhdGggOiBsaWJleGVjZGlyX3JwYXRoZGlyLAorCSAgIGlu c3RhbGwgOiB0cnVlKQordGVzdF9saXN0ICs9ICdrbXNfY29sb3InCisKK2lmIGNoYW1lbGl1bS5m b3VuZCgpCisJdGVzdF9leGVjdXRhYmxlcyArPSBleGVjdXRhYmxlKCdrbXNfY29sb3JfY2hhbWVs aXVtJywKKwkJCSAgICAgIFsgJ2ttc19jb2xvcl9jaGFtZWxpdW0uYycsICdrbXNfY29sb3JfaGVs cGVyLmMnIF0sCisJCQkgICAgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMgKyBbIGNoYW1lbGl1 bSBdLAorCQkJICAgICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAorCQkJICAgICAgaW5zdGFs bF9ycGF0aCA6IGxpYmV4ZWNkaXJfcnBhdGhkaXIsCisJCQkgICAgICBpbnN0YWxsIDogdHJ1ZSkK Kwl0ZXN0X2xpc3QgKz0gJ2ttc19jb2xvcl9jaGFtZWxpdW0nCitlbmRpZgorCiB0ZXN0X2V4ZWN1 dGFibGVzICs9IGV4ZWN1dGFibGUoJ3N3X3N5bmMnLCAnc3dfc3luYy5jJywKIAkgICBkZXBlbmRl bmNpZXMgOiB0ZXN0X2RlcHMgKyBbIGxpYmF0b21pYyBdLAogCSAgIGluc3RhbGxfZGlyIDogbGli ZXhlY2RpciwKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXYK