From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A1C06E93B for ; Mon, 20 Jan 2020 12:41:34 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 20 Jan 2020 14:39:23 +0200 Message-Id: <20200120123923.11822-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v6] tools: Add an intel_dbuf_map tool 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: martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: QXMgaW4gbW9kZXJuIHBsYXRmb3JtcyBtb3JlIERpc3BsYXkgYnVmZmVyCnNsaWNlcy9waXBlcyBh cmUgY29taW5nLCB3aGljaCBoYXZlIGRpZmZlcmVudApwaXBlIGFmZmluaXRpZXMgYW5kIG90aGVy IGNvbnN0cmFpbnRzLCBzbyBCU3BlYwpjb250YWlucyB0aGVpciBjb25uZWN0aW9uIGluIGZvcm0g b2YgYSBHcmFwaC4KClNvIHdlIGNhbiBnZW5lcmF0ZSBvcHRpbWFsIERCdWYgYXNzaWdubWVudCwK ZnJvbSB0aGUgZ3JhcGggd2hpY2ggd2UgaGF2ZSBpbiBCU3BlYywgdG8gYXZvaWQKbWFudWFsIGNh bGN1bGF0aW9ucyBwcm9uZSB0byBodW1hbiBlcnJvciBhbmQKY29weS1wYXN0aW5nLiBUaGUgZ2Vu ZXJhdGVkIHRhYmxlIGlzIGluIEMgZm9ybQphbmQgY2FuIGJlIHVzZWQgaW4gaTkxNSBkcml2ZXIg cmlnaHRhd2F5IGFuZCBhbHNvCmZvciB2ZXJpZmljYXRpb24uCgp2MjogUmVtb3ZlZCB1bnVzZWQg aSwgaiwgbWFkZSBzb21lIGZ1bmN0aW9ucyBzdGF0aWMsCiAgICB0byBtYWtlIENJIGNoZWNrZXJz IGEgYml0IGhhcHBpZXIuIEFsc28gaGFkIHRvCiAgICBjaGFuZ2UgSUdUX0xJU1QgdG8gSUdUX0xJ U1RfSEVBRCBhbmQgb3RoZXIgc3R1ZmYsCiAgICBhcyBmdW5jdGlvbnMgc2VlbSB0byBiZSByZW5h bWVkIGluIGxhdGVzdCBtYXN0ZXIuCgp2MzogQWRkZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAi LS1ncmFwaCIgYW5kCiAgICAic2xpY2VzX3Blcl9waXBlIiB3aGljaCBhbGxvdyB0byBkZWZpbmUg YW5kCiAgICBnZXQgREJ1ZiBhc3NpZ25tZW50IGZyb20gZ3JhcGggd2l0aG91dCByZWNvbXBpbGlu ZwogICAgdGhlIHRvb2wsIGJ1dCByaWdodCBhd2F5LgogICAgRXhhbXBsZSB1c2FnZToKICAgIGlu dGVsX2RidWZfbWFwIC0tZ3JhcGggUElQRV9BLURCVUZfUzEtREJVRl9TMi1QSVBFX0ItUElQRV9D IC0tc2xpY2VzX3Blcl9waXBlIDIKCiAgICBHZW5lcmF0ZXMgb3V0cHV0OgogICAgR3JhcGg6CiAg ICBUeXBlIFBJUEUgaWQgMAogICAgICAgICgxKS0+CiAgICAgICAgICAgICBUeXBlIERCVUZfU0xJ Q0UgaWQgMAogICAgICAgICAgICAgICAgKDEpLT4KICAgICAgICAgICAgICAgICAgICBUeXBlIERC VUZfU0xJQ0UgaWQgMQogICAgICAgICAgICAgICAgICAgICAgICAoMSktPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHlwZSBQSVBFIGlkIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMSktPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIFBJUEUg aWQgMgogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21iaW5hdGlv bnMgMSk6CiAgICB7IEJJVChQSVBFX0EpLCB7IERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQsIDAs IDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21i aW5hdGlvbnMgMSk6CiAgICB7IEJJVChQSVBFX0IpLCB7IDAsIERCVUZfUzJfQklUIHwgREJVRl9T MV9CSVQsIDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMih0b3Rh bCBjb21iaW5hdGlvbnMgMik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQiksIHsgREJV Rl9TMV9CSVQsIERCVUZfUzJfQklULCAwLCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdpdGggbGVh c3Qgd2VpZ2h0IDUodG90YWwgY29tYmluYXRpb25zIDEpOgogICAgeyBCSVQoUElQRV9DKSwgeyAw LCAwLCBEQlVGX1MyX0JJVCB8IERCVUZfUzFfQklULCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdp dGggbGVhc3Qgd2VpZ2h0IDModG90YWwgY29tYmluYXRpb25zIDIpOgogICAgeyBCSVQoUElQRV9B KSB8IEJJVChQSVBFX0MpLCB7IERCVUZfUzFfQklULCAwLCBEQlVGX1MyX0JJVCwgMCB9IH0sCiAg ICBDb21iaW5hdGlvbiB3aXRoIGxlYXN0IHdlaWdodCA0KHRvdGFsIGNvbWJpbmF0aW9ucyAyKToK ICAgIHsgQklUKFBJUEVfQikgfCBCSVQoUElQRV9DKSwgeyAwLCBEQlVGX1MyX0JJVCwgREJVRl9T MV9CSVQsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgNCh0b3RhbCBj b21iaW5hdGlvbnMgNik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikgfCBCSVQoUElQ RV9DKSwgeyBEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQsIERCVUZfUzJfQklULCAwIH0gfSwKCnY0 OiAtIE1pbm9yIHJlZmFjdG9yaW5nLCBzaW1wbGlmaWVkIGFsZ29yaXRobSwgcmVtb3ZlZCByZWR1 bmRhbnQgbGlzdAogICAgICB1c2FnZQogICAgLSBGaXhlZCB0aXRsZQogICAgLSBBZGRlZCBkZWJ1 ZyBvcHRpb24KICAgIC0gUmVtb3ZlZCB1bm5lZWRlZCBBUlJBWV9TSVpFIGRlZmluaXRpb24sIHdo aWNoIGFscmVhZHkgZXhpc3RzCiAgICAgIChKdWhhLVBla2thIEhlaWtraWzDpCkKCnY1OiAtIFN3 aXRjaGVkIHRvIG5hbWVkIHBpcGUgYXJyYXkgaW5pdGlhbGl6YXRpb24sIHRvIG1hdGNoIGN1cnJl bnQKICAgICAga2VybmVsIGNvZGUuCiAgICAtIE1pbm9yIGNvZGUgcmVmYWN0b3JpbmcuCgp2Njog LSBTd2l0Y2hlZCB0byBuYW1lZCBpbml0aWFsaXplciBmb3IgZGJ1Zl9tYXNrIGZpZWxkLgoKU2ln bmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRl bC5jb20+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t PgotLS0KIHRvb2xzL2ludGVsX2RidWZfbWFwLmMgfCA4ODUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIHRvb2xzL21lc29uLmJ1aWxkICAgICAgfCAgIDEgKwogMiBm aWxlcyBjaGFuZ2VkLCA4ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L2ludGVsX2RidWZfbWFwLmMKCmRpZmYgLS1naXQgYS90b29scy9pbnRlbF9kYnVmX21hcC5jIGIv dG9vbHMvaW50ZWxfZGJ1Zl9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uZWU0Y2RiYjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pbnRlbF9kYnVmX21hcC5jCkBA IC0wLDAgKzEsODg1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICog QXV0aG9yczoKKyAqICAgIFN0YW5pc2xhdiBMaXNvdnNraXkgPHN0YW5pc2xhdi5saXNvdnNraXlA aW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiaWd0 LmgiCisKK2VudW0gTm9kZVR5cGUgeworCURCVUZfU0xJQ0UsCisJUElQRQorfTsKKworY29uc3Qg Y2hhciAqbm9kZV90eXBlX3RvX3N0cltdID0geyAiREJVRl9TTElDRSIsICJQSVBFIiB9OworCisj ZGVmaW5lIE1BWF9DT05ORUNUSU9OUyAxMAorI2RlZmluZSBNQVhfTk9ERVMgMTAKKyNkZWZpbmUg TUFYX0VER0VTIChNQVhfTk9ERVMgKiAyKQorCitzdHJ1Y3QgR3JhcGhFZGdlOworCisvKgorICog R3JhcGggbm9kZSwgd2hpY2ggY2FuIGJlIERCdWYgb3IgUGlwZQorICovCitzdHJ1Y3QgR3JhcGhO b2RlIHsKKwlpbnQgaWQ7CisJZW51bSBOb2RlVHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB1c2Vf Y291bnQ7CisJaW50IHZpc2l0ZWQ7CisJc3RydWN0IEdyYXBoRWRnZSAqY29ubmVjdGlvbnNbTUFY X0NPTk5FQ1RJT05TXTsKKwlpbnQgbnVtX2Nvbm5lY3Rpb25zOworfTsKKworc3RhdGljIHN0cnVj dCBHcmFwaE5vZGUgKmFsbF9ub2Rlc1tNQVhfTk9ERVNdOworc3RhdGljIHN0cnVjdCBHcmFwaEVk Z2UgKmFsbF9lZGdlc1tNQVhfRURHRVNdOworc3RhdGljIGludCBudW1fbm9kZXM7CitzdGF0aWMg aW50IG51bV9lZGdlczsKKworLyoKKyAqIEdyYXBoIGVkZ2UsIHdoaWNoIGNvbm5lY3RzIEdyYXBo IG5vZGVzCisgKiBhbmQgaGFzIGEgd2VpZ2h0IHByb3BlcnR5LgorICovCitzdHJ1Y3QgR3JhcGhF ZGdlIHsKKwl1bnNpZ25lZCBpbnQgd2VpZ2h0OworCXN0cnVjdCBHcmFwaE5vZGUgKm5vZGU7Cit9 OworCitzdGF0aWMgc3RydWN0IEdyYXBoTm9kZSAqY3JlYXRlX2dyYXBoX25vZGUoZW51bSBOb2Rl VHlwZSB0eXBlLCBpbnQgaWQpCit7CisJc3RydWN0IEdyYXBoTm9kZSAqbm9kZSA9IDA7CisKKwlp ZiAobnVtX25vZGVzID49IE1BWF9OT0RFUykgeworCQlpZ3RfaW5mbygiVG9vIG11Y2ggbm9kZXMg JWQiLCBudW1fbm9kZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlub2RlID0gbWFsbG9jKHNp emVvZihzdHJ1Y3QgR3JhcGhOb2RlKSk7CisJbm9kZS0+dHlwZSA9IHR5cGU7CisJbm9kZS0+aWQg PSBpZDsKKwlub2RlLT51c2VfY291bnQgPSAwOworCW5vZGUtPnZpc2l0ZWQgPSAwOworCW1lbXNl dChub2RlLT5jb25uZWN0aW9ucywgMCwKKwkJCU1BWF9DT05ORUNUSU9OUyAqIHNpemVvZihzdHJ1 Y3QgR3JhcGhFZGdlICopKTsKKwlub2RlLT5udW1fY29ubmVjdGlvbnMgPSAwOworCisJYWxsX25v ZGVzW251bV9ub2Rlc10gPSBub2RlOworCW51bV9ub2RlcysrOworCisJcmV0dXJuIG5vZGU7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhFZGdlICpjcmVhdGVfZ3JhcGhfZWRnZShpbnQgd2VpZ2h0 LCBzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQoreworCXN0cnVjdCBHcmFwaEVkZ2UgKmVkZ2UgPSAw OworCisJaWYgKG51bV9lZGdlcyA+PSBNQVhfRURHRVMpIHsKKwkJaWd0X2luZm8oIlRvbyBtdWNo IGVkZ2VzICVkIiwgbnVtX2VkZ2VzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZWRnZSA9IG1h bGxvYyhzaXplb2Yoc3RydWN0IEdyYXBoRWRnZSkpOworCisJZWRnZS0+bm9kZSA9IG5vZGU7CisJ ZWRnZS0+d2VpZ2h0ID0gd2VpZ2h0OworCisJYWxsX2VkZ2VzW251bV9lZGdlc10gPSBlZGdlOwor CW51bV9lZGdlcysrOworCisJcmV0dXJuIGVkZ2U7Cit9CisKK3N0YXRpYyB2b2lkIGNvbm5lY3Rf bm9kZXMoc3RydWN0IEdyYXBoTm9kZSAqbm9kZTEsIHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUyLCBp bnQgd2VpZ2h0KQoreworCXN0cnVjdCBHcmFwaEVkZ2UgKmVkZ2UxOworCXN0cnVjdCBHcmFwaEVk Z2UgKmVkZ2UyOworCisJaWYgKG5vZGUxLT5udW1fY29ubmVjdGlvbnMgPj0gTUFYX0NPTk5FQ1RJ T05TKSB7CisJCWlndF9pbmZvKCJOb2RlICVkIGhhcyB0b28gbXVjaCBjb25uZWN0aW9uc1xuIiwg bm9kZTEtPmlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChub2RlMi0+bnVtX2Nvbm5lY3Rpb25z ID49IE1BWF9DT05ORUNUSU9OUykgeworCQlpZ3RfaW5mbygiTm9kZSAlZCBoYXMgdG9vIG11Y2gg Y29ubmVjdGlvbnNcbiIsIG5vZGUyLT5pZCk7CisJCXJldHVybjsKKwl9CisKKwllZGdlMSA9IGNy ZWF0ZV9ncmFwaF9lZGdlKHdlaWdodCwgbm9kZTEpOworCWVkZ2UyID0gY3JlYXRlX2dyYXBoX2Vk Z2Uod2VpZ2h0LCBub2RlMik7CisKKwlub2RlMS0+Y29ubmVjdGlvbnNbbm9kZTEtPm51bV9jb25u ZWN0aW9uc10gPSBlZGdlMjsKKwlub2RlMS0+bnVtX2Nvbm5lY3Rpb25zKys7CisJbm9kZTItPmNv bm5lY3Rpb25zW25vZGUyLT5udW1fY29ubmVjdGlvbnNdID0gZWRnZTE7CisJbm9kZTItPm51bV9j b25uZWN0aW9ucysrOworfQorCitzdGF0aWMgdm9pZCByZXNldF9ub2RlKHN0cnVjdCBHcmFwaE5v ZGUgKm5vZGUpCit7CisJbm9kZS0+dXNlX2NvdW50ID0gMDsKKwlub2RlLT52aXNpdGVkID0gMDsK KwltZW1zZXQobm9kZS0+Y29ubmVjdGlvbnMsIDAsCisJCU1BWF9DT05ORUNUSU9OUyAqIHNpemVv ZihzdHJ1Y3QgR3JhcGhFZGdlICopKTsKKwlub2RlLT5udW1fY29ubmVjdGlvbnMgPSAwOworfQor CitzdGF0aWMgdm9pZCBkZXN0cm95X25vZGUoc3RydWN0IEdyYXBoTm9kZSAqbm9kZSkKK3sKKwlm cmVlKG5vZGUpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2VkZ2Uoc3RydWN0IEdyYXBoRWRn ZSAqZWRnZSkKK3sKKwlmcmVlKGVkZ2UpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF9l ZGdlcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lZGdlczsgaSsr KSB7CisJCWRlc3Ryb3lfZWRnZShhbGxfZWRnZXNbaV0pOworCX0KKwludW1fZWRnZXMgPSAwOwor fQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF9ub2Rlcyh2b2lkKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IG51bV9ub2RlczsgaSsrKSB7CisJCWRlc3Ryb3lfbm9kZShhbGxfbm9k ZXNbaV0pOworCX0KKwludW1fbm9kZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCByZXNldF9hbGxf bm9kZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWRlc3Ryb3lfYWxsX2VkZ2VzKCk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbnVtX25vZGVzOyBpKyspIHsKKwkJcmVzZXRfbm9kZShhbGxfbm9kZXNbaV0p OworCX0KK30KKworLyoKKyAqIFRyYXZlcnNlIGFuZCB0cnkgdG8gcHJpbnQgZ3JhcGggaW4gYQor ICogc29tZXdoYXQgZ3JhcGhpY2FsIGZvcm0uCisgKi8KK3N0YXRpYyB2b2lkIHRyYXZlcnNlX2dy YXBoKHN0cnVjdCBHcmFwaE5vZGUgKnN0YXJ0X25vZGUsCisJCQkgICBpbnQgZGVwdGgpCit7CisJ aW50IGksIHNwYWNlOworCisJaWYgKCFkZXB0aCkKKwkJaWd0X2luZm8oIkdyYXBoOiBcbiIpOwor CisJZm9yIChzcGFjZSA9IDA7IHNwYWNlIDwgZGVwdGggKiA0OyBzcGFjZSsrKQorCQlpZ3RfaW5m bygiICIpOworCisJc3RhcnRfbm9kZS0+dmlzaXRlZCsrOworCWlndF9pbmZvKCJUeXBlICVzIGlk ICVkXG4iLCBub2RlX3R5cGVfdG9fc3RyW3N0YXJ0X25vZGUtPnR5cGVdLAorCQkgc3RhcnRfbm9k ZS0+aWQpOworCWZvciAoaSA9IDA7IGkgPCBzdGFydF9ub2RlLT5udW1fY29ubmVjdGlvbnM7IGkr KykgeworCQlpZiAoIXN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldLT5ub2RlLT52aXNpdGVkKSB7 CisJCQlmb3IgKHNwYWNlID0gMDsgc3BhY2UgPCAoZGVwdGggKyAxKSAqIDQ7IHNwYWNlKyspCisJ CQkJaWd0X2luZm8oIiAiKTsKKwkJCWlndF9pbmZvKCIoJWQpLT4gXG4iLCBzdGFydF9ub2RlLT5j b25uZWN0aW9uc1tpXS0+d2VpZ2h0KTsKKwkJCXRyYXZlcnNlX2dyYXBoKHN0YXJ0X25vZGUtPmNv bm5lY3Rpb25zW2ldLT5ub2RlLCBkZXB0aCsyKTsKKwkJCXN0YXJ0X25vZGUtPmNvbm5lY3Rpb25z W2ldLT5ub2RlLT52aXNpdGVkLS07CisJCX0KKwl9Cit9CisKK2Jvb2wgZGVidWcgPSBmYWxzZTsK Kworc3RhdGljIHZvaWQgcHJpbnRfbm9kZV9kZWJ1ZyhzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQor eworCWlndF9pbmZvKCIlcyBub2RlICVkIHZpc2l0ZWQgJWQgdXNlIGNvdW50ICVkXG4iLAorCQkg bm9kZV90eXBlX3RvX3N0cltub2RlLT50eXBlXSwgbm9kZS0+aWQsCisJCSBub2RlLT52aXNpdGVk LAorCQkgbm9kZS0+dXNlX2NvdW50KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjdXJz aXZlbHkgc2VhcmNoZXMgZm9yIGEgZnJlZSBEQnVmIHNsaWNlCisgKiBmb3IgY29ycmVzcG9uZGVu dCBwaXBlLCBiYXNlZCBvbiBkaWZmZXJlbnQgY29uc3RyYWludHMsIGxpa2UKKyAqIHdlaWdodCwg dXNhZ2UgY291bnQuIFRoaXMgYWxnb3JpdGhtIGlzICJncmVlZHkiIHdoaWNoIG1lYW5zCisgKiB0 aGF0IGl0IGFjY291bnRzIGZvciBsb2NhbCBvcHRpbXVtIG9ubHksIHdoaWNoIG1lYW5zIHRoYXQK KyAqIHRvdGFsIGNvbXBhcmlzb24gaGFzIHRvIGJlIGRvbmUgaW4gdGhlIGVuZC4KKyAqIEluIGdy YXBoIHRoZW9yeSB0aGlzIGlzIGNhbGxlZCBicmVhZHRoLWZpcnN0IHNlYXJjaC4KKyAqIEFzIHRo aXMgYWxnb3JpdGhtIHRyaWVzIHRvIHV0aWxpemUgbmVhcmVzdCBuZWlnaGJvdXJzIGZpcnN0Cisg KiBpdCBhbGxvd3MgdG8gc2tpcCBtYW55IHVucmVxdWlyZWQgcGF0aCBjYWxjdWxhdGlvbnMgd2hp Y2gKKyAqIHdvdWxkIGJlIG5lZWRlZCBpZiB3ZSByZWFsbHkgd291bGQgYnVpbGQgYSBtYXRyaXgg bGlrZToKKyAqICAgUGlwZSAtIERCVUYKKyAqICAgICAgICAgMCAgICAxCisgKiAgIDAgICAgIDEg ICAgMgorICoKKyAqICAgMSAgICAgMiAgICAxCisgKiBUaGVuIHdlIHdvdWxkIGhhdmUgdG8gZ28g dGhvdXJnaCBhbGwgTiBEYnVmICogTiBQaXBlcyAqIE4gUGlwZXMhCisgKiB0byBjaGVjayBhbGwg cG9zc2libGUgcGlwZSBhY2NvbW9kYXRpb25zLgorICogRm9yIGFib3ZlIG1hdHJpeCB0aGUgYWxn b3JpdGhtIHdvdWxkIGltbWVkaWF0ZWx5IHJldHVybiBzbGljZSAwCisgKiBmb3IgcGlwZSAwIGFu ZCBzbGljZSAxIGZvciBwaXBlIDEgYXMgbmVhcmVzdCBuZWlnaGJvdXJzLCBza2lwcGluZworICog dW5uZWNjZXNzYXJ5IHBhdGhzIGZvciBwaXBlMCAtIHNsaWNlMSwgcGlwZTEgLSBzbGljZTAuCisg KiBBbnl3YXkgZm9yIG1vcmUgY29tcGxleCBjYXNlcywgbGlrZToKKyAqICBQaXBlIC0gREJVRgor ICogICAgICAgICAwICAgIDEKKyAqICAgMCAgICAgMSAgICAxCisgKgorICogICAxICAgICAyICAg IDEKKyAqIGNoZWNraW5nIGZvciBhbGwgcG9zc2libGUgYWNjb21vZGF0aW9ucyBpcyBzdGlsbCBu ZWVkZWQuIEhvd2V2ZXIKKyAqIG5lYXJlc3QgImdyZWVkeSIgYXBwcm9hY2ggZmlyc3Qgc3RpbGwg YWxsb3dzIHRvIGZpbHRlciBvdXQgc29tZSBvZgorICogdGhlIHJlZHVuZGFudCBjb21iaW5hdGlv bnMsIHdoaWNoIHdvdWxkIGJlIHNlZW4gaWYgZnVsbCBtYXRyaXggaXMgYnVpbHQuCisgKiBJbnN0 ZWFkIHdlIHNhdmUgdGltZSBieSBqdXN0IGNob29zaW5nIHRoZSBuZWFyZXN0IG9uZXMgZmlyc3Qg d2hpY2gKKyAqIGFyZSBleHBlY3RlZCB0byBoYXZlIGxvd2VyIGNvc3QoZ3JlZWR5IGFwcHJvYWNo KSwgaG93ZXZlciB0aGVuCisgKiB3ZSB3aWxsIHN0aWxsIGNoZWNrIGFsbCBwb3NzaWJsZSBhY2Nv bW9kYXRpb25zIGFzIHdlIHdvdWxkIGRvIHdpdGgKKyAqIGZ1bGwgbWF0cml4IGFwcHJvYWNoLgor ICovCitzdGF0aWMgc3RydWN0IEdyYXBoTm9kZSAqZmluZF9zbGljZV9mb3JfcGlwZShzdHJ1Y3Qg R3JhcGhOb2RlICpzdGFydF9ub2RlLAorCQkJCQkgICAgIGludCBhY2Nfd2VpZ2h0LCBpbnQgbWF4 X3VzZV9jb3VudCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX3dlaWdodCwKKwkJCQkJ ICAgICBpbnQgZGVwdGgsCisJCQkJCSAgICAgaW50ICpza2lwKQoreworCWludCBpOworCXN0cnVj dCBHcmFwaE5vZGUgKm5vZGUgPSBOVUxMOworCisJaWYgKGRlYnVnKSB7CisJCWlndF9pbmZvKCJF bnRlcmluZyBub2RlKHJlc3Vyc2lvbiBkZXB0aCAlZCBza2lwcyAlZCk6IFxuIiwKKwkJCSBkZXB0 aCwgKnNraXApOworCQlwcmludF9ub2RlX2RlYnVnKHN0YXJ0X25vZGUpOworCQlpZ3RfaW5mbygi QWNjdW11bGF0ZWQgd2VpZ2h0ICVkIG1heCB1c2UgY291bnQgJWRcbiIsCisJCQkgYWNjX3dlaWdo dCwgbWF4X3VzZV9jb3VudCk7CisJfQorCisJc3RhcnRfbm9kZS0+dmlzaXRlZCsrOworCisJLyoK KwkgKiBJdGVyYXRlIHRocm91Z2ggbmVpZ2hib3VyaW5nIHNsaWNlcyhncmFwaCBicmVhZHRoLWZp cnN0IHNlYXJjaCksCisJICogY2hlY2tpbmcgaWYgaXQncyB1c2UgY291bnQgYWxsb3dzIHVzYWdl IGFuZCBza2lwIGlmIG5lZWRlZCwKKwkgKiBza2lwcyBhcmUgbmVlZGVkIHdoZW4gd2UgdXNlIG11 bHRpcGxlIHNsaWNlcyBmb3IKKwkgKiBzYW1lIHBpcGUgdG8gcHJldmVudCBhbGdvcml0aG0gZnJv bSByZXR1cm5pbmcgdGhlCisJICogc2FtZSBEQnVmLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBz dGFydF9ub2RlLT5udW1fY29ubmVjdGlvbnM7IGkrKykgeworCQlzdHJ1Y3QgR3JhcGhFZGdlICpj dXJfZWRnZSA9IHN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldOworCisJCWlmIChkZWJ1Zykgewor CQkJaWd0X2luZm8oIiAgICBOZWlnaGJvdXIgbm9kZTogIik7CisJCQlwcmludF9ub2RlX2RlYnVn KGN1cl9lZGdlLT5ub2RlKTsKKwkJfQorCisJCWlmIChjdXJfZWRnZS0+bm9kZS0+dHlwZSAhPSBE QlVGX1NMSUNFKQorCQkJY29udGludWU7CisKKwkJaWYgKGN1cl9lZGdlLT5ub2RlLT51c2VfY291 bnQgPCBtYXhfdXNlX2NvdW50KSB7CisJCQlpZiAoISgqc2tpcCkpIHsKKwkJCQljdXJfZWRnZS0+ bm9kZS0+dXNlX2NvdW50Kys7CisJCQkJKnRvdGFsX3dlaWdodCA9IGFjY193ZWlnaHQgKyBjdXJf ZWRnZS0+d2VpZ2h0OworCQkJCW5vZGUgPSBjdXJfZWRnZS0+bm9kZTsKKwkJCQlnb3RvIG91dDsK KwkJCX0KKwkJfQorCisJCWlmICgqc2tpcCkKKwkJCSgqc2tpcCktLTsKKwl9CisKKwkvKgorCSAq IElmIGNvdWxkbid0IGZpbmQgc3VpdGFibGUgREJ1ZiBub2RlIGZyb20gb3VyCisJICogbmVpZ2hi b3VycywgaGF2ZSB0byBjb250aW51ZSBmdXJ0aGVyLCBjaGVja2luZworCSAqIHZpc2l0ZWQgZmxh ZywgdG8gcHJldmVudCBsb29wcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhcnRfbm9kZS0+ bnVtX2Nvbm5lY3Rpb25zOyBpKyspIHsKKwkJc3RydWN0IEdyYXBoRWRnZSAqY3VyX2VkZ2UgPSBz dGFydF9ub2RlLT5jb25uZWN0aW9uc1tpXTsKKworCQlpZiAoY3VyX2VkZ2UtPm5vZGUtPnZpc2l0 ZWQpCisJCQljb250aW51ZTsKKworCQlub2RlID0gZmluZF9zbGljZV9mb3JfcGlwZShjdXJfZWRn ZS0+bm9kZSwKKwkJCQkJICAgYWNjX3dlaWdodCArIGN1cl9lZGdlLT53ZWlnaHQsCisJCQkJCSAg IG1heF91c2VfY291bnQsIHRvdGFsX3dlaWdodCwKKwkJCQkJICAgZGVwdGggKyAxLCBza2lwKTsK KwkJY3VyX2VkZ2UtPm5vZGUtPnZpc2l0ZWQtLTsKKwkJaWYgKG5vZGUpCisJCQlnb3RvIG91dDsK Kwl9CisKK291dDoKKwlpZiAoZGVidWcpCisJCWlndF9pbmZvKCJMZWF2aW5nIG5vZGUgJWRcbiIs IHN0YXJ0X25vZGUtPmlkKTsKKworCS8qIElmIHdlIGFyZSBhdCByZWN1cnNpb24gZGVwdGggMCAt IHJlbGVhc2UgdGhlIHJvb3Qgbm9kZSAqLworCWlmIChkZXB0aCA9PSAwKQorCQlzdGFydF9ub2Rl LT52aXNpdGVkID0gMDsKKworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgaW50IGh3ZWlnaHQz MihpbnQgbWFzaykKK3sKKwlpbnQgaTsKKwlpbnQgY291bnQgPSAwOworCisJZm9yIChpID0gMDsg aSA8IDMyOyBpKyspCisJCWlmICgoMTw8aSkgJiBtYXNrKQorCQkJY291bnQgKz0gMTsKKwlyZXR1 cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgSTkxNV9NQVhfUElQRVMgNAorI2RlZmluZSBJOTE1X01B WF9TTElDRVNfUEVSX1BJUEUgNAorI2RlZmluZSBJOTE1X01BWF9TTElDRVMgKEk5MTVfTUFYX1BJ UEVTICogSTkxNV9NQVhfU0xJQ0VTX1BFUl9QSVBFKQorCitjb25zdCBjaGFyICpwaXBlX25hbWVz W10gPSB7ICJQSVBFX0EiLCAiUElQRV9CIiwgIlBJUEVfQyIsICJQSVBFX0QiIH07Citjb25zdCBj aGFyICpzbGljZV9uYW1lc1tdID0geyAiREJVRl9TMSIsICJEQlVGX1MyIiwgIkRCVUZfUzMiLCAi REJVRl9TNCIgfTsKKworc3RhdGljIGludCBmYWN0b3JpYWwoaW50IG4pCit7CisJaWYgKG4gPD0g MSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIG4gKiBmYWN0b3JpYWwobiAtIDEpOworfQorCitzdGF0 aWMgdm9pZCBkb19zd2FwKHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlX25vZGVzLCBpbnQgbSwgaW50 IG4pCit7CisJKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBtKSBePSAqKCh1bnNpZ25l ZCBsb25nICopcGlwZV9ub2RlcyArIG4pOworCSooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25vZGVz ICsgbikgXj0gKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBtKTsKKwkqKCh1bnNpZ25l ZCBsb25nICopcGlwZV9ub2RlcyArIG0pIF49ICooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25vZGVz ICsgbik7Cit9CisKK3N0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiB7CisJdW5zaWduZWQgaW50 IHRvdGFsX3dlaWdodDsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlX25vZGVzW0k5MTVfTUFYX1BJ UEVTXTsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpzbGljZXNbSTkxNV9NQVhfU0xJQ0VTXTsKK307CisK K3N0cnVjdCBJdGVyYXRlQ29udGV4dCB7CisJc3RydWN0IFBpcGVOb2Rlc0NvbWJpbmF0aW9uIG1p bl9jb21iOworCWludCBtYXhfdXNlX2NvdW50OworCWludCBudW1fcGlwZXM7CisJaW50IG51bV9z bGljZXM7CisJaW50IHNsaWNlc19wZXJfcGlwZTsKKwlpbnQgbWF4X2NvbWJpbmF0aW9uczsKK307 CisKK3N0cnVjdCBQaXBlREJ1ZiB7CisJc3RydWN0IEdyYXBoTm9kZSAqcGlwZTsKKwlzdHJ1Y3Qg R3JhcGhOb2RlICpkYnVmW0k5MTVfTUFYX1NMSUNFU19QRVJfUElQRV07Cit9OworCitzdGF0aWMg dm9pZCBwcmludF9waXBlX25vZGVzKHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlX25vZGVzKQorewor CWludCBpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICgh cGlwZV9ub2Rlc1tpXSkKKwkJCWlndF9pbmZvKCIobnVsbCkiKTsKKwkJZWxzZQorCQkJaWd0X2lu Zm8oIiVkIiwgcGlwZV9ub2Rlc1tpXS0+aWQpOworCQlpZiAoIGkgPCAoSTkxNV9NQVhfUElQRVMg LSAxKSkKKwkJCWlndF9pbmZvKCIgLCIpOworCX0KKwlpZ3RfaW5mbygiXG4iKTsKK30KKworCitz dGF0aWMgdm9pZCBjb21wYXJlX3dlaWdodChzdHJ1Y3QgSXRlcmF0ZUNvbnRleHQgKmN0eCwKKwkJ CSAgIHN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiAqY29tYikKK3sKKwl1bnNpZ25lZCBpbnQg d2VpZ2h0OworCWludCBqID0gMDsKKwlpbnQgcGlwZSA9IDA7CisJaW50IHNraXAgPSAwOworCWlu dCBzbGljZV9udW0gPSAwOworCisJY29tYi0+dG90YWxfd2VpZ2h0ID0gMDsKKworCWlmIChkZWJ1 ZykgeworCQlpZ3RfaW5mbygiQ29tYmluYXRpb246ICIpOworCQlwcmludF9waXBlX25vZGVzKGNv bWItPnBpcGVfbm9kZXMpOworCX0KKworCS8qCisJICogR2V0IGEgZnJlZSBEQnVmIHNsaWNlIGZv ciBlYWNoIHBpcGUsIHRoZW4KKwkgKiBjYWxjdWxhdGUgdG90YWwgd2VpZ2h0LCB3aGljaCB3aWxs IGJlCisJICogdGhlbiBjb21wYXJlZCB0byBtaW5pbWFsIHdlaWdodCB0byBmaW5kCisJICogY29t YmluYXRpb24gd2l0aCB0b3RhbCBtaW5pbWFsIHdlaWdodC4KKwkgKi8KKwl3aGlsZSAocGlwZSA8 IEk5MTVfTUFYX1BJUEVTKSB7CisJCWlmIChjb21iLT5waXBlX25vZGVzW3BpcGVdKSB7CisJCQlj b21iLT5zbGljZXNbal0gPQorCQkJICAgIGZpbmRfc2xpY2VfZm9yX3BpcGUoY29tYi0+cGlwZV9u b2Rlc1twaXBlXSwKKwkJCQkJCTAsIGN0eC0+bWF4X3VzZV9jb3VudCwKKwkJCQkJCSZ3ZWlnaHQs IDAsICZza2lwKTsKKwkJCWlmIChjb21iLT5zbGljZXNbal0pIHsKKwkJCQlpZiAoZGVidWcpCisJ CQkJCWlndF9pbmZvKCJGb3VuZCBEQnVmIHNsaWNlICVkIGZvciBwaXBlICVkXG4iLAorCQkJCQkJ IGNvbWItPnNsaWNlc1tqXS0+aWQsCisJCQkJCQkgY29tYi0+cGlwZV9ub2Rlc1twaXBlXS0+aWQp OworCQkJCWlmIChzbGljZV9udW0gPCBjdHgtPnNsaWNlc19wZXJfcGlwZSkKKwkJCQkJc2tpcCsr OworCQkJCWNvbWItPnRvdGFsX3dlaWdodCArPSB3ZWlnaHQ7CisJCQl9IGVsc2UKKwkJCQlicmVh azsKKwkJCXNsaWNlX251bSsrOworCisJCQlpZiAoc2xpY2VfbnVtID49IGN0eC0+c2xpY2VzX3Bl cl9waXBlKSB7CisJCQkJc2xpY2VfbnVtID0gMDsKKwkJCQlwaXBlKys7CisJCQkJc2tpcCA9IDA7 CisJCQl9CisJCQlqKys7CisJCX0gZWxzZSB7CisJCQlwaXBlKys7CisJCQlqICs9IGN0eC0+c2xp Y2VzX3Blcl9waXBlOworCQkJc2tpcCA9IDA7CisJCX0KKwl9CisKKwlpZiAoZGVidWcpCisJCWln dF9pbmZvKCJUb3RhbCB3ZWlnaHQgJWRcbiIsIGNvbWItPnRvdGFsX3dlaWdodCk7CisKKwlmb3Ig KGogPSAwOyBqIDwgSTkxNV9NQVhfU0xJQ0VTOyBqKyspIHsKKwkJaWYgKGNvbWItPnNsaWNlc1tq XSkKKwkJCWNvbWItPnNsaWNlc1tqXS0+dXNlX2NvdW50ID0gMDsKKwl9CisKKwlpZiAoY3R4LT5t aW5fY29tYi50b3RhbF93ZWlnaHQgPiBjb21iLT50b3RhbF93ZWlnaHQpIHsKKwkJbWVtY3B5KCZj dHgtPm1pbl9jb21iLCBjb21iLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBQaXBlTm9kZXNDb21i aW5hdGlvbikpOworCX0KK30KKworLyoKKyAqIEdlbmVyYXRlIGFsbCBwb3NzaWJsZSBjb21iaW5h dGlvbnMgZm9yIGVsZW1lbnRzIGluCisgKiBwaXBlIGFycmF5KHRvdGFsIGlzIGNhbGN1bGF0ZWQg YXMgbiEpLgorICovCitzdGF0aWMgdm9pZCBpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoc3RydWN0 IEl0ZXJhdGVDb250ZXh0ICpjdHgsCisJCQkJICAgICBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9u b2RlcywKKwkJCQkgICAgIGludCBzdGFydCwgaW50IHN0ZXAsCisJCQkJICAgICB2b2lkICgqZnVu Yykoc3RydWN0IEl0ZXJhdGVDb250ZXh0ICpjdHgsCisJCQkJICAgICBzdHJ1Y3QgUGlwZU5vZGVz Q29tYmluYXRpb24gKmNvbWIpKQoreworCWludCBpLCBqOworCXN0cnVjdCBHcmFwaE5vZGUgKm5v ZGVzW0k5MTVfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24gY29tYjsK KworCW1lbWNweShjb21iLnBpcGVfbm9kZXMsIHBpcGVfbm9kZXMsCisJICAgICAgIEk5MTVfTUFY X1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCW1lbXNldChjb21iLnNsaWNl cywgMCwKKwkgICAgICAgSTkxNV9NQVhfU0xJQ0VTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUg KikpOworCisJaWYgKGZ1bmMpCisJCSgqZnVuYykoY3R4LCAmY29tYik7CisKKwlpZiAoKHN0ZXAg PT0gMCkgfHwgKGN0eC0+bnVtX3BpcGVzID09IDEpKQorCQlyZXR1cm47CisKKwlmb3IgKGogPSBz dGVwOyBqID4gMDsgai0tKSB7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgSTkxNV9NQVhfUElQRVMg LSBqOyBpKyspIHsKKwkJCWlmICghcGlwZV9ub2Rlc1tpXSB8fCAhcGlwZV9ub2Rlc1tpICsgal0p CisJCQkJY29udGludWU7CisJCQltZW1jcHkobm9kZXMsIHBpcGVfbm9kZXMsCisJCQkgICAgICAg STkxNV9NQVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisJCQlkb19zd2Fw KG5vZGVzLCBpLCBpICsgaik7CisJCQlpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoY3R4LCBub2Rl cywgaSArIDEsCisJCQkJCQkgc3RlcCAtIDEsIGZ1bmMpOworCQl9CisJfQorfQorCisvKgorICog VGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuZCBwcmludHMgb3B0aW1hbAorICogd2VpZ2h0LWJh c2VkIERCdWYgYXNzaWdubWVudCBmb3IgYWN0aXZlIHBpcGVzLgorICovCitzdGF0aWMgaW50Citw cmludF9kYnVmX21hc2tfZm9yX3BpcGVzKGludCBhY3RpdmVfcGlwZXMsCisJCQkgIHN0cnVjdCBH cmFwaE5vZGUgKipwaXBlX25vZGVzLAorCQkJICBpbnQgbnVtX3NsaWNlcykKK3sKKwlpbnQgaTsK KwlpbnQgbnVtX3BpcGVzID0gaHdlaWdodDMyKGFjdGl2ZV9waXBlcyksIHBpcGVzX2NvdW50Owor CWludCBtYXhfdXNlX2NvdW50ID0gbnVtX3NsaWNlcyA8IG51bV9waXBlcyA/IDIgOiAxOworCWlu dCBwaXBlID0gMDsKKwlpbnQgc2xpY2VzX3Blcl9waXBlID0gbWF4KG51bV9zbGljZXMgLyBudW1f cGlwZXMsIDEpOworCXN0cnVjdCBJdGVyYXRlQ29udGV4dCBjdHg7CisJc3RydWN0IFBpcGVEQnVm IHBpcGVfZGJ1ZltJOTE1X01BWF9QSVBFU107CisKKwltZW1jcHkoY3R4Lm1pbl9jb21iLnBpcGVf bm9kZXMsIHBpcGVfbm9kZXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopICog STkxNV9NQVhfUElQRVMpOworCW1lbXNldChjdHgubWluX2NvbWIuc2xpY2VzLCAwLAorCSAgICAg ICBJOTE1X01BWF9TTElDRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisJY3R4Lm1p bl9jb21iLnRvdGFsX3dlaWdodCA9IH4wOworCWN0eC5tYXhfdXNlX2NvdW50ID0gbWF4X3VzZV9j b3VudDsKKwljdHgubnVtX3BpcGVzID0gbnVtX3BpcGVzOworCWN0eC5udW1fc2xpY2VzID0gbnVt X3NsaWNlczsKKwljdHguc2xpY2VzX3Blcl9waXBlID0gc2xpY2VzX3Blcl9waXBlOworCWN0eC5t YXhfY29tYmluYXRpb25zID0gZmFjdG9yaWFsKG51bV9waXBlcyk7CisKKwlpdGVyYXRlX2FsbF9j b21iaW5hdGlvbnMoJmN0eCwgcGlwZV9ub2RlcywKKwkJCQkgMCwgSTkxNV9NQVhfUElQRVMgLSAx LCBjb21wYXJlX3dlaWdodCk7CisKKwlpZiAoZGVidWcpCisJCWlndF9pbmZvKCJDb21iaW5hdGlv biB3aXRoIGxlYXN0IHdlaWdodCAlZCh0b3RhbCBjb21iaW5hdGlvbnMgJWQpOlxuIiwKKwkJICAg ICAgICAgY3R4Lm1pbl9jb21iLnRvdGFsX3dlaWdodCwgY3R4Lm1heF9jb21iaW5hdGlvbnMpOwor CisJbWVtc2V0KHBpcGVfZGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBQaXBlREJ1ZikgKiBJOTE1X01B WF9QSVBFUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhfUElQRVM7IGkrKykgeworCQlp ZiAoY3R4Lm1pbl9jb21iLnBpcGVfbm9kZXNbaV0pIHsKKwkJCWludCBwaXBlX2luZGV4ID0gY3R4 Lm1pbl9jb21iLnBpcGVfbm9kZXNbaV0tPmlkOworCisJCQlwaXBlX2RidWZbcGlwZV9pbmRleF0u cGlwZSA9IGN0eC5taW5fY29tYi5waXBlX25vZGVzW2ldOworCQkJbWVtY3B5KCZwaXBlX2RidWZb cGlwZV9pbmRleF0uZGJ1ZiwKKwkJCSAgICAgICAmY3R4Lm1pbl9jb21iLnNsaWNlc1tpICogc2xp Y2VzX3Blcl9waXBlXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSAqIHNs aWNlc19wZXJfcGlwZSk7CisJCX0KKwl9CisKKwlpZ3RfaW5mbygiXHRcdHtcbiIpOworCXBpcGUg PSAwOworCWlndF9pbmZvKCJcdFx0XHRcdC5hY3RpdmVfcGlwZXMgPSAiKTsKKwlmb3IgKGkgPSAw OyBpIDwgSTkxNV9NQVhfUElQRVM7IGkrKykgeworCQlpZiAocGlwZV9kYnVmW2ldLnBpcGUpIHsK KwkJCWlndF9pbmZvKCJCSVQoJXMpIiwgcGlwZV9uYW1lc1twaXBlX2RidWZbaV0ucGlwZS0+aWRd KTsKKwkJCWlmIChwaXBlIDwgKG51bV9waXBlcyAtIDEpKQorCQkJCWlndF9pbmZvKCIgfCAiKTsK KwkJCXBpcGUrKzsKKwkJfQorCX0KKwlpZ3RfaW5mbygiLFxuXHRcdFx0XHQuZGJ1Zl9tYXNrID0g e1xuIik7CisJbnVtX3BpcGVzID0gMDsKKwlmb3IgKHBpcGUgPSAwOyBwaXBlIDwgSTkxNV9NQVhf UElQRVM7IHBpcGUrKykKKwkJaWYgKHBpcGVfZGJ1ZltwaXBlXS5waXBlKQorCQkJbnVtX3BpcGVz Kys7CisKKwlwaXBlc19jb3VudCA9IDA7CisJZm9yIChwaXBlID0gMDsgcGlwZSA8IEk5MTVfTUFY X1BJUEVTOyBwaXBlKyspIHsKKwkJaWYgKHBpcGVfZGJ1ZltwaXBlXS5waXBlKSB7CisJCQlpZ3Rf aW5mbygiXHRcdFx0XHRcdFx0WyVzXSA9ICIsIHBpcGVfbmFtZXNbcGlwZV9kYnVmW3BpcGVdLnBp cGUtPmlkXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2xpY2VzX3Blcl9waXBlOyBpKyspIHsKKwkJ CQlpbnQgc2xpY2VfaW5kZXhfY29udmVydGVkOworCQkJCXN0cnVjdCBHcmFwaE5vZGUgKm5leHRf c2xpY2UgPQorCQkJCQkJcGlwZV9kYnVmW3BpcGVdLmRidWZbaSsxXTsKKwkJCQlib29sIG5vdF9s YXN0ID0gaSA8IChzbGljZXNfcGVyX3BpcGUgLSAxKTsKKworCQkJCWlmICghcGlwZV9kYnVmW3Bp cGVdLmRidWZbaV0pCisJCQkJCWJyZWFrOworCisJCQkJc2xpY2VfaW5kZXhfY29udmVydGVkID0K KwkJCQkJcGlwZV9kYnVmW3BpcGVdLmRidWZbaV0tPmlkOworCisJCQkJaWYgKG5vdF9sYXN0ICYm IG5leHRfc2xpY2UpIHsKKwkJCQkJaWd0X2luZm8oIkJJVChEQlVGX1MlZCkgfCAiLAorCQkJCQkJ IHNsaWNlX2luZGV4X2NvbnZlcnRlZCArIDEpOworCQkJCX0gZWxzZSB7CisJCQkJCWlndF9pbmZv KCJCSVQoREJVRl9TJWQpIiwKKwkJCQkJCSBzbGljZV9pbmRleF9jb252ZXJ0ZWQgKyAxKTsKKwkJ CQl9CisJCQkJcGlwZXNfY291bnQrKzsKKwkJCX0KKwkJCWlmIChwaXBlc19jb3VudCA8IG51bV9w aXBlcykgeworCQkJCQlpZ3RfaW5mbygiLFxuIik7CisJCQl9CisJCQllbHNlCisJCQkJYnJlYWs7 CisJCX0KKwl9CisJaWd0X2luZm8oIlxuXHRcdFx0XHR9XG5cdFx0fSxcbiIpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RhYmxlKHN0cnVjdCBHcmFwaE5vZGUgKipwaXBl cywgaW50IG51bV9waXBlcywKKwkJCXN0cnVjdCBHcmFwaE5vZGUgKipzbGljZXMsIGludCBudW1f c2xpY2VzLAorCQkJaW50IHNsaWNlc19wZXJfcGlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsK KwlpbnQgbnVtX2NvbWJpbmF0aW9ucyA9IDEgPDwgbnVtX3BpcGVzOworCisJaWYgKG51bV9waXBl cyA+IEk5MTVfTUFYX1BJUEVTKSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBwaXBlcyAlZFxuIiwg bnVtX3BpcGVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChudW1fc2xpY2VzID4gSTkxNV9NQVhf U0xJQ0VTKSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBzbGljZXMgJWRcbiIsIG51bV9zbGljZXMp OworCQlyZXR1cm47CisJfQorCisJaWd0X2luZm8oIi8qIEF1dG9nZW5lcmF0ZWQgd2l0aCBpZ3Qv dG9vbHMvaW50ZWxfZGJ1Zl9tYXAgdG9vbDogKi9cbiIpOworCWlndF9pbmZvKCJ7XG4iKTsKKwlm b3IgKGkgPSAxOyBpIDwgbnVtX2NvbWJpbmF0aW9uczsgaSsrKSB7CisJCXN0cnVjdCBHcmFwaE5v ZGUgKnRtcFtJOTE1X01BWF9QSVBFU107CisKKwkJbWVtY3B5KHRtcCwgcGlwZXMsIEk5MTVfTUFY X1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCisJCWZvciAoaiA9IDA7IGog PCBJOTE1X01BWF9TTElDRVM7IGorKykgeworCQkJaWYgKHNsaWNlc1tqXSkKKwkJCQlzbGljZXNb al0tPnVzZV9jb3VudCA9IDA7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgSTkxNV9NQVhfUElQ RVM7IGorKykgeworCQkJaWYgKCEoaSAmICgxIDw8IGopKSkgeworCQkJCXRtcFtqXSA9IDA7CisJ CQl9CisJCX0KKworCQlpZiAocHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpLCB0bXAsIG51bV9z bGljZXMpKQorCQkJYnJlYWs7CisJfQorCWlndF9pbmZvKCJ9O1xuIik7Cit9CisKK2VudW0gb3B0 IHsKKwlPUFRfVU5LTk9XTiA9ICc/JywKKwlPUFRfRU5EID0gLTEsCisJT1BUX0dFTiwKKwlPUFRf VVNBR0UsCisJT1BUX0dSQVBILAorCU9QVF9ERUJVRywKKwlPUFRfU0xJQ0VTX1BFUl9QSVBFCit9 OworCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICp0b29sbmFtZSkKK3sKKwlmcHJpbnRm KHN0ZGVyciwgInVzYWdlOiAlcyIsIHRvb2xuYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBbLS1n ZW49PEdFTj5dIgorCQkJIiBbLS1zbGljZXNfcGVyX3BpcGU9PG51bWJlcj5dIgorCQkJIiBbLS1n cmFwaD1cIlBJUEVfQS1EQlVGX1MxLVBJUEVfQi0uLi5cIl0iCisJCQkiIFstLWRlYnVnXSIKKwkJ CSIgWy0taGVscF1cbiIpOworfQorCitzdGF0aWMgaW50IHBpcGVfc3RyX3RvX251bShjb25zdCBj aGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwaXBl X25hbWVzKTsgaSsrKSB7CisJCWlmICghc3RyY21wKHN0ciwgcGlwZV9uYW1lc1tpXSkpIHsKKwkJ CXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBkYnVmX3N0 cl90b19udW0oY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoc2xpY2VfbmFtZXMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoc3RyLCBzbGlj ZV9uYW1lc1tpXSkpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKwor I2RlZmluZSBNQVhfR1JBUEhfU1RSIDgwCisKK3N0YXRpYyB2b2lkIHBhcnNlX2dyYXBoX3N0cihj aGFyICpncmFwaF9zdHIsIHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlcywKKwkJCSAgICBzdHJ1Y3Qg R3JhcGhOb2RlICoqc2xpY2VzLCBpbnQgKm51bV9zbGljZXMsCisJCQkgICAgaW50ICpudW1fcGlw ZXMpCit7CisJY2hhciogdG9rZW4gPSBzdHJ0b2soZ3JhcGhfc3RyLCAiLSIpOworCXN0cnVjdCBH cmFwaE5vZGUgKmN1cl9ub2RlID0gTlVMTCwgKmxhc3Rfbm9kZSA9IE5VTEw7CisJaW50IG5fcGlw ZXMgPSAwLCBuX3NsaWNlcyA9IDA7CisKKwl3aGlsZSAodG9rZW4gIT0gTlVMTCkgeworCQlpbnQg aW5kZXg7CisKKwkJaW5kZXggPSBwaXBlX3N0cl90b19udW0odG9rZW4pOworCisJCWxhc3Rfbm9k ZSA9IGN1cl9ub2RlOworCQlpZiAoaW5kZXggPj0gMCkgeworCQkJY3VyX25vZGUgPSBwaXBlc1tp bmRleF07CisJCQluX3BpcGVzKys7CisJCX0gZWxzZSB7CisJCQlpbmRleCA9IGRidWZfc3RyX3Rv X251bSh0b2tlbik7CisJCQlpZiAoaW5kZXggPj0gMCkgeworCQkJCWN1cl9ub2RlID0gc2xpY2Vz W2luZGV4XTsKKwkJCQluX3NsaWNlcysrOworCQkJfQorCQl9CisJCWlmIChsYXN0X25vZGUgJiYg Y3VyX25vZGUpCisJCQljb25uZWN0X25vZGVzKGxhc3Rfbm9kZSwgY3VyX25vZGUsIDEpOworCisJ CXRva2VuID0gc3RydG9rKE5VTEwsICItIik7CisJfQorCSpudW1fc2xpY2VzID0gbl9zbGljZXM7 CisJKm51bV9waXBlcyA9IG5fcGlwZXM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlc1tJOTE1X01BWF9QSVBFU107CisJc3Ry dWN0IEdyYXBoTm9kZSAqc2xpY2VzW0k5MTVfTUFYX1NMSUNFU107CisJc3RydWN0IEdyYXBoTm9k ZSAqcGlwZUEsICpwaXBlQiwgKnBpcGVDLCAqcGlwZUQ7CisJc3RydWN0IEdyYXBoTm9kZSAqc2xp Y2UxLCAqc2xpY2UyLCAqc2xpY2UzLCAqc2xpY2U0OworCWludCBnZW4gPSAxMiwgaW5kZXg7CisJ ZW51bSBvcHQgb3B0OworCWNoYXIgKmVuZHA7CisJY2hhciBncmFwaF9zdHJbTUFYX0dSQVBIX1NU Ul07CisJaW50IHNsaWNlc19wZXJfcGlwZSA9IEk5MTVfTUFYX1NMSUNFU19QRVJfUElQRTsKKwlj b25zdCBjaGFyICp0b29sbmFtZSA9IGFyZ3ZbMF07CisJc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0 aW9uc1tdID0geworCQl7ICJnZW4iLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCU9QVF9HRU4g fSwKKwkJeyAiZ3JhcGgiLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCU9QVF9HUkFQSCB9LAor CQl7ICJzbGljZXNfcGVyX3BpcGUiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJT1BUX1NMSUNF U19QRVJfUElQRSB9LAorCQl7ICJoZWxwIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJT1BUX1VTQUdF IH0sCisJCXsgImRlYnVnIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJT1BUX0RFQlVHIH0sCisJCXsg MCB9CisJfTsKKworCW51bV9lZGdlcyA9IDA7CisJbnVtX25vZGVzID0gMDsKKworCWZvciAob3B0 ID0gMDsgb3B0ICE9IE9QVF9FTkQ7ICkgeworCQlvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiIiwgb3B0aW9ucywgJmluZGV4KTsKKworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlIE9QVF9H RU46CisJCQlnZW4gPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHAsIDApOworCQkJYnJlYWs7CisJCWNh c2UgT1BUX1NMSUNFU19QRVJfUElQRToKKwkJCXNsaWNlc19wZXJfcGlwZSA9IG1pbihzdHJ0b3Vs KG9wdGFyZywgJmVuZHAsIDApLAorCQkJCQkgICAgICBJOTE1X01BWF9TTElDRVNfUEVSX1BJUEUp OworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0RFQlVHOgorCQkJZGVidWcgPSB0cnVlOworCQkJYnJl YWs7CisJCWNhc2UgT1BUX0dSQVBIOgorCQkJc3RybmNweShncmFwaF9zdHIsIG9wdGFyZywgTUFY X0dSQVBIX1NUUik7CisJCQlncmFwaF9zdHJbTUFYX0dSQVBIX1NUUiAtIDFdID0gMDsKKwkJCWdl biA9IDA7CisJCWNhc2UgT1BUX0VORDoKKwkJCWJyZWFrOworCQljYXNlIE9QVF9VU0FHRTogLyog ZmFsbC10aHJvdWdoICovCisJCWNhc2UgT1BUX1VOS05PV046CisJCQl1c2FnZSh0b29sbmFtZSk7 CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCXBpcGVBID0gY3JlYXRlX2dyYXBo X25vZGUoUElQRSwgMCk7CisJcGlwZUIgPSBjcmVhdGVfZ3JhcGhfbm9kZShQSVBFLCAxKTsKKwlw aXBlQyA9IGNyZWF0ZV9ncmFwaF9ub2RlKFBJUEUsIDIpOworCXBpcGVEID0gY3JlYXRlX2dyYXBo X25vZGUoUElQRSwgMyk7CisJc2xpY2UxID0gY3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwg MCk7CisJc2xpY2UyID0gY3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwgMSk7CisJc2xpY2Uz ID0gY3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwgMik7CisJc2xpY2U0ID0gY3JlYXRlX2dy YXBoX25vZGUoREJVRl9TTElDRSwgMyk7CisKKwltZW1zZXQocGlwZXMsIDAsIEk5MTVfTUFYX1BJ UEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCW1lbXNldChzbGljZXMsIDAsIEk5 MTVfTUFYX1NMSUNFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopKTsKKworCWlmICghZ2Vu KSB7CisJCWludCBudW1fc2xpY2VzID0gMCwgbnVtX3BpcGVzID0gMDsKKwkJLyoKKwkJICogUHJl cGFyZSB0byBnZW5lcmF0ZSBhc3NpZ25tZW50cyBmb3IgSUNMLCB3aGljaAorCQkgKiBoYXMgMyBw aXBlcyBhbmQgMiBEQnVmIHNsaWNlcy4KKwkJICovCisJCXNsaWNlc1swXSA9IHNsaWNlMTsKKwkJ c2xpY2VzWzFdID0gc2xpY2UyOworCQlzbGljZXNbMl0gPSBzbGljZTM7CisJCXNsaWNlc1szXSA9 IHNsaWNlNDsKKwkJcGlwZXNbMF0gPSBwaXBlQTsKKwkJcGlwZXNbMV0gPSBwaXBlQjsKKwkJcGlw ZXNbMl0gPSBwaXBlQzsKKwkJcGlwZXNbM10gPSBwaXBlRDsKKworCQlwYXJzZV9ncmFwaF9zdHIo Z3JhcGhfc3RyLCBwaXBlcywgc2xpY2VzLCAmbnVtX3NsaWNlcywKKwkJCQkmbnVtX3BpcGVzKTsK KworCQl0cmF2ZXJzZV9ncmFwaChwaXBlc1swXSwgMCk7CisKKwkJcHJpbnRfdGFibGUocGlwZXMs IG51bV9waXBlcywgc2xpY2VzLCBudW1fc2xpY2VzLCBzbGljZXNfcGVyX3BpcGUpOworCisJfSBl bHNlIGlmIChnZW4gPT0gMTEpIHsKKworCQkvKgorCQkgKiBQcmVwYXJlIHRvIGdlbmVyYXRlIGFz c2lnbm1lbnRzIGZvciBJQ0wsIHdoaWNoCisJCSAqIGhhcyAzIHBpcGVzIGFuZCAyIERCdWYgc2xp Y2VzLgorCQkgKi8KKwkJc2xpY2VzWzBdID0gc2xpY2UxOworCQlzbGljZXNbMV0gPSBzbGljZTI7 CisJCXBpcGVzWzBdID0gcGlwZUE7CisJCXBpcGVzWzFdID0gcGlwZUI7CisJCXBpcGVzWzJdID0g cGlwZUM7CisKKwkJLyoKKwkJICogQlNwZWMgMTI3MTYuIEdlbmVyYXRlIERCdWYgU2xpY2VzIHRh YmxlIGZvciBJQ0wsCisJCSAqIEdyYXBoKGVhY2ggZWRnZSBhc3N1bWVkIHRvIGhhdmUgd2VpZ2h0 IDEpOgorCQkgKiBQaXBlQSAtIERCVUZfUzEgLSBQaXBlQiAtIFBpcGVDIC0gREJVRl9TMgorCQkg Ki8KKwkJY29ubmVjdF9ub2RlcyhwaXBlQSwgc2xpY2UxLCAxKTsKKwkJY29ubmVjdF9ub2Rlcyhz bGljZTEsIHBpcGVCLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhwaXBlQiwgcGlwZUMsIDEpOworCQlj b25uZWN0X25vZGVzKHBpcGVDLCBzbGljZTIsIDEpOworCisJCXRyYXZlcnNlX2dyYXBoKHBpcGVB LCAwKTsKKworCQlwcmludF90YWJsZShwaXBlcywgMywgc2xpY2VzLCAyLCAyKTsKKworCX0gZWxz ZSBpZiAoZ2VuID09IDEyKSB7CisKKwkJLyoKKwkJICogUHJlcGFyZSB0byBnZW5lcmF0ZSBhc3Np Z25tZW50cyBmb3IgVEdMLCB3aGljaAorCQkgKiBoYXMgNCBwaXBlcyBhbmQgMiBEQnVmIHNsaWNl cy4KKwkJICovCisJCXNsaWNlc1swXSA9IHNsaWNlMTsKKwkJc2xpY2VzWzFdID0gc2xpY2UyOwor CQlwaXBlc1swXSA9IHBpcGVBOworCQlwaXBlc1sxXSA9IHBpcGVCOworCQlwaXBlc1syXSA9IHBp cGVDOworCQlwaXBlc1szXSA9IHBpcGVEOworCisJCS8qCisJCSAqIEJTcGVjIDQ5MjU1LiBHZW5l cmF0ZSBEQnVmIFNsaWNlcyB0YWJsZSBmb3IgVEdMLgorCQkgKiBHcmFwaChlYWNoIGVkZ2UgYXNz dW1lZCB0byBoYXZlIHdlaWdodCAxKToKKwkJICogUGlwZUQgLSBEQlVGX1MyIC0gUGlwZUMgLSBQ aXBlQSAtIERCVUZfUzEgLSBQaXBlQgorCQkgKi8KKwkJY29ubmVjdF9ub2RlcyhwaXBlRCwgc2xp Y2UyLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhzbGljZTIsIHBpcGVDLCAxKTsKKwkJY29ubmVjdF9u b2RlcyhwaXBlQywgcGlwZUEsIDEpOworCQljb25uZWN0X25vZGVzKHBpcGVBLCBzbGljZTEsIDEp OworCQljb25uZWN0X25vZGVzKHNsaWNlMSwgcGlwZUIsIDEpOworCisJCXRyYXZlcnNlX2dyYXBo KHBpcGVBLCAwKTsKKworCQlwcmludF90YWJsZShwaXBlcywgNCwgc2xpY2VzLCAyLCAyKTsKKwl9 CisKKwlyZXNldF9hbGxfbm9kZXMoKTsKKworCS8qCisJICogRnVydGhlciBwbGF0Zm9ybXMgY2Fu IGdlbmVyYXRlIHRhYmxlIHNhbWUgd2F5LgorCSAqLworCisJZGVzdHJveV9hbGxfbm9kZXMoKTsK KworCXJldHVybiAgMDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29s cy9tZXNvbi5idWlsZAppbmRleCA3NDgyMmEzMy4uNjQ0ZDE0MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xz L21lc29uLmJ1aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBAIC0zNSw2ICszNSw3IEBAIHRv b2xzX3Byb2dzID0gWwogCSdpbnRlbF93YXRlcm1hcmsnLAogCSdpbnRlbF9nZW1faW5mbycsCiAJ J2ludGVsX2d2dGdfdGVzdCcsCisJJ2ludGVsX2RidWZfbWFwJywKIAknZHBjZF9yZWcnLAogCSds c2dwdScsCiBdCi0tIAoyLjI0LjEuNDg1LmdhZDA1YTNkOGU1CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXYK