From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 25/28] tools: Utility for dealing with featuresets Date: Tue, 15 Mar 2016 15:35:21 +0000 Message-ID: <1458056124-8024-26-git-send-email-andrew.cooper3@citrix.com> References: <1458056124-8024-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458056124-8024-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org SXQgaXMgYWJsZSB0byByZXBvcnRzIHRoZSBjdXJyZW50IGZlYXR1cmVzZXRzOyBib3RoIHRoZSBz dGF0aWMgbWFza3MgYW5kCmR5bmFtaWMgZmVhdHVyZXNldHMgZnJvbSBYZW4sIG9yIHRvIGRlY29k ZSBhbiBhcmJpdHJhcnkgZmVhdHVyZXNldCBpbnRvCmAvcHJvYy9jcHVpbmZvYCBzdHlsZSBzdHJp bmdzLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT4KLS0tCkNDOiBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25AZXUuY2l0cml4LmNvbT4KQ0M6 IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cgp2MjogTm8gbGlua2luZyBoYWNrYXJ5Ci0t LQogLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAgMSArCiB0b29scy9taXNjL01ha2VmaWxlICAg IHwgICA0ICsKIHRvb2xzL21pc2MveGVuLWNwdWlkLmMgfCAzOTQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzOTkgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL21pc2MveGVuLWNwdWlkLmMKCmRp ZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCBiNDA0NTNlLi4yMGZmYTJk IDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTE3OSw2ICsxNzks NyBAQCB0b29scy9taXNjL2NwdXBlcmYvY3B1cGVyZi1wZXJmY250cgogdG9vbHMvbWlzYy9jcHVw ZXJmL2NwdXBlcmYteGVuCiB0b29scy9taXNjL3hjX3NoYWRvdwogdG9vbHMvbWlzYy94ZW5fY3B1 cGVyZgordG9vbHMvbWlzYy94ZW4tY3B1aWQKIHRvb2xzL21pc2MveGVuLWRldGVjdAogdG9vbHMv bWlzYy94ZW4tdG1lbS1saXN0LXBhcnNlCiB0b29scy9taXNjL3hlbnBlcmYKZGlmZiAtLWdpdCBh L3Rvb2xzL21pc2MvTWFrZWZpbGUgYi90b29scy9taXNjL01ha2VmaWxlCmluZGV4IGEyZWYwZWMu LmE5NGRhZDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21pc2MvTWFrZWZpbGUKKysrIGIvdG9vbHMvbWlz Yy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQCBDRkxBR1MgKz0gJChDRkxBR1NfeGVuaW5jbHVk ZSkKIENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5zdG9yZSkKIAogIyBFdmVyeXRoaW5nIHRvIGJl IGluc3RhbGxlZCBpbiByZWd1bGFyIGJpbi8KK0lOU1RBTExfQklOLSQoQ09ORklHX1g4NikgICAg ICArPSB4ZW4tY3B1aWQKIElOU1RBTExfQklOLSQoQ09ORklHX1g4NikgICAgICArPSB4ZW4tZGV0 ZWN0CiBJTlNUQUxMX0JJTiAgICAgICAgICAgICAgICAgICAgKz0geGVuY29ucwogSU5TVEFMTF9C SU4gICAgICAgICAgICAgICAgICAgICs9IHhlbmNvdl9zcGxpdApAQCAtNjgsNiArNjksOSBAQCBj bGVhbjoKIC5QSE9OWTogZGlzdGNsZWFuCiBkaXN0Y2xlYW46IGNsZWFuCiAKK3hlbi1jcHVpZDog eGVuLWNwdWlkLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhlbmN0 cmwpICQoTERMSUJTX2xpYnhlbmd1ZXN0KSAkKEFQUEVORF9MREZMQUdTKQorCiB4ZW4taHZtY3R4 OiB4ZW4taHZtY3R4Lm8KIAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhl bmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2MveGVuLWNw dWlkLmMgYi90b29scy9taXNjL3hlbi1jcHVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjYwOGM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9taXNjL3hlbi1jcHVp ZC5jCkBAIC0wLDAgKzEsMzk0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKworI2luY2x1ZGUgPHhlbmN0cmwuaD4KKworI2RlZmluZSBBUlJBWV9TSVpFKGEp IChzaXplb2YgYSAvIHNpemVvZiAqYSkKK3N0YXRpYyB1aW50MzJfdCBucl9mZWF0dXJlczsKKwor c3RhdGljIGNvbnN0IGNoYXIgKnN0cl8xZFszMl0gPQoreworICAgIFsgMF0gPSAiZnB1IiwgIFsg MV0gPSAidm1lIiwKKyAgICBbIDJdID0gImRlIiwgICBbIDNdID0gInBzZSIsCisgICAgWyA0XSA9 ICJ0c2MiLCAgWyA1XSA9ICJtc3IiLAorICAgIFsgNl0gPSAicGFlIiwgIFsgN10gPSAibWNlIiwK KyAgICBbIDhdID0gImN4OCIsICBbIDldID0gImFwaWMiLAorICAgIFsxMF0gPSAiUkVaIiwgIFsx MV0gPSAic3lzZW50ZXIiLAorICAgIFsxMl0gPSAibXRyciIsIFsxM10gPSAicGdlIiwKKyAgICBb MTRdID0gIm1jYSIsICBbMTVdID0gImNtb3YiLAorICAgIFsxNl0gPSAicGF0IiwgIFsxN10gPSAi cHNlMzYiLAorICAgIFsxOF0gPSAicHNuIiwgIFsxOV0gPSAiY2xmbHVzaCIsCisgICAgWzIwXSA9 ICJSRVoiLCAgWzIxXSA9ICJkcyIsCisgICAgWzIyXSA9ICJhY3BpIiwgWzIzXSA9ICJtbXgiLAor ICAgIFsyNF0gPSAiZnhzciIsIFsyNV0gPSAic3NlIiwKKyAgICBbMjZdID0gInNzZTIiLCBbMjdd ID0gInNzIiwKKyAgICBbMjhdID0gImh0dCIsICBbMjldID0gInRtIiwKKyAgICBbMzBdID0gImlh NjQiLCBbMzFdID0gInBiZSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyXzFjWzMyXSA9 Cit7CisgICAgWyAwXSA9ICJzc2UzIiwgICAgWyAxXSA9ICJwY2xtdWxxZHEiLAorICAgIFsgMl0g PSAiZHRlczY0IiwgIFsgM10gPSAibW9uaXRvciIsCisgICAgWyA0XSA9ICJkcy1jcGwiLCAgWyA1 XSA9ICJ2bXgiLAorICAgIFsgNl0gPSAic214IiwgICAgIFsgN10gPSAiZXN0IiwKKyAgICBbIDhd ID0gInRtMiIsICAgICBbIDldID0gInNzc2UzIiwKKyAgICBbMTBdID0gImNudHgtaWQiLCBbMTFd ID0gInNkZ2IiLAorICAgIFsxMl0gPSAiZm1hIiwgICAgIFsxM10gPSAiY3gxNiIsCisgICAgWzE0 XSA9ICJ4dHByIiwgICAgWzE1XSA9ICJwZGNtIiwKKyAgICBbMTZdID0gIlJFWiIsICAgICBbMTdd ID0gInBjaWQiLAorICAgIFsxOF0gPSAiZGNhIiwgICAgIFsxOV0gPSAic3NlNDEiLAorICAgIFsy MF0gPSAic3NlNDIiLCAgIFsyMV0gPSAieDJhcGljIiwKKyAgICBbMjJdID0gIm1vdmViZSIsICBb MjNdID0gInBvcGNudCIsCisgICAgWzI0XSA9ICJ0c2MtZGwiLCAgWzI1XSA9ICJhZXNuaSIsCisg ICAgWzI2XSA9ICJ4c2F2ZSIsICAgWzI3XSA9ICJvc3hzYXZlIiwKKyAgICBbMjhdID0gImF2eCIs ICAgICBbMjldID0gImYxNmMiLAorICAgIFszMF0gPSAicmRybmQiLCAgIFszMV0gPSAiaHlwZXIi LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0cl9lMWRbMzJdID0KK3sKKyAgICBbIDBdID0g ImZwdSIsICAgIFsgMV0gPSAidm1lIiwKKyAgICBbIDJdID0gImRlIiwgICAgIFsgM10gPSAicHNl IiwKKyAgICBbIDRdID0gInRzYyIsICAgIFsgNV0gPSAibXNyIiwKKyAgICBbIDZdID0gInBhZSIs ICAgIFsgN10gPSAibWNlIiwKKyAgICBbIDhdID0gImN4OCIsICAgIFsgOV0gPSAiYXBpYyIsCisg ICAgWzEwXSA9ICJSRVoiLCAgICBbMTFdID0gInN5c2NhbGwiLAorICAgIFsxMl0gPSAibXRyciIs ICAgWzEzXSA9ICJwZ2UiLAorICAgIFsxNF0gPSAibWNhIiwgICAgWzE1XSA9ICJjbW92IiwKKyAg ICBbMTZdID0gImZjbW92IiwgIFsxN10gPSAicHNlMzYiLAorICAgIFsxOF0gPSAiUkVaIiwgICAg WzE5XSA9ICJtcCIsCisgICAgWzIwXSA9ICJueCIsICAgICBbMjFdID0gIlJFWiIsCisgICAgWzIy XSA9ICJtbXgrIiwgICBbMjNdID0gIm1teCIsCisgICAgWzI0XSA9ICJmeHNyIiwgICBbMjVdID0g ImZ4c3IrIiwKKyAgICBbMjZdID0gInBnMWciLCAgIFsyN10gPSAicmR0c2NwIiwKKyAgICBbMjhd ID0gIlJFWiIsICAgIFsyOV0gPSAibG0iLAorICAgIFszMF0gPSAiM2Rub3crIiwgWzMxXSA9ICIz ZG5vdyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyX2UxY1szMl0gPQoreworICAgIFsg MF0gPSAibGFoZl9sbSIsICAgIFsgMV0gPSAiY21wIiwKKyAgICBbIDJdID0gInN2bSIsICAgICAg ICBbIDNdID0gImV4dGFwaWMiLAorICAgIFsgNF0gPSAiY3I4ZCIsICAgICAgIFsgNV0gPSAibHpj bnQiLAorICAgIFsgNl0gPSAic3NlNGEiLCAgICAgIFsgN10gPSAibXNzZSIsCisgICAgWyA4XSA9 ICIzZG5vd3BmIiwgICAgWyA5XSA9ICJvc3Z3IiwKKyAgICBbMTBdID0gImlicyIsICAgICAgICBb MTFdID0gInhvcCIsCisgICAgWzEyXSA9ICJza2luaXQiLCAgICAgWzEzXSA9ICJ3ZHQiLAorICAg IFsxNF0gPSAiUkVaIiwgICAgICAgIFsxNV0gPSAibHdwIiwKKyAgICBbMTZdID0gImZtYTQiLCAg ICAgICBbMTddID0gInRjZSIsCisgICAgWzE4XSA9ICJSRVoiLCAgICAgICAgWzE5XSA9ICJub2Rl aWQiLAorICAgIFsyMF0gPSAiUkVaIiwgICAgICAgIFsyMV0gPSAidGJtIiwKKyAgICBbMjJdID0g InRvcG9leHQiLCAgICBbMjNdID0gInBlcmZjdHJfY29yZSIsCisgICAgWzI0XSA9ICJwZXJmY3Ry X25iIiwgWzI1XSA9ICJSRVoiLAorICAgIFsyNl0gPSAiZGJ4IiwgICAgICAgIFsyN10gPSAicGVy ZnRzYyIsCisgICAgWzI4XSA9ICJwY3hfbDJpIiwgICAgWzI5XSA9ICJtb25pdG9yeCIsCisKKyAg ICBbMzAgLi4uIDMxXSA9ICJSRVoiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0cl83YjBb MzJdID0KK3sKKyAgICBbIDBdID0gImZzZ3NiYXNlIiwgWyAxXSA9ICJ0c2MtYWRqIiwKKyAgICBb IDJdID0gInNneCIsICAgICAgWyAzXSA9ICJibWkxIiwKKyAgICBbIDRdID0gImhsZSIsICAgICAg WyA1XSA9ICJhdngyIiwKKyAgICBbIDZdID0gIlJFWiIsICAgICAgWyA3XSA9ICJzbWVwIiwKKyAg ICBbIDhdID0gImJtaTIiLCAgICAgWyA5XSA9ICJlcm1zIiwKKyAgICBbMTBdID0gImludnBjaWQi LCAgWzExXSA9ICJydG0iLAorICAgIFsxMl0gPSAicHFtIiwgICAgICBbMTNdID0gImRlcGZwcCIs CisgICAgWzE0XSA9ICJtcHgiLCAgICAgIFsxNV0gPSAicHFlIiwKKyAgICBbMTZdID0gImF2eDUx MmYiLCAgWzE3XSA9ICJhdng1MTJkcSIsCisgICAgWzE4XSA9ICJyZHNlZWQiLCAgIFsxOV0gPSAi YWR4IiwKKyAgICBbMjBdID0gInNtYXAiLCAgICAgWzIxXSA9ICJhdng1MTJpZm1hIiwKKyAgICBb MjJdID0gInBjb21pdCIsICAgWzIzXSA9ICJjbGZsdXNob3B0IiwKKyAgICBbMjRdID0gImNsd2Ii LCAgICAgWzI1XSA9ICJwdCIsCisgICAgWzI2XSA9ICJhdng1MTJwZiIsIFsyN10gPSAiYXZ4NTEy ZXIiLAorICAgIFsyOF0gPSAiYXZ4NTEyY2QiLCBbMjldID0gInNoYSIsCisgICAgWzMwXSA9ICJh dng1MTJidyIsIFszMV0gPSAiYXZ4NTEydmwiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0 cl9EYTFbMzJdID0KK3sKKyAgICBbIDBdID0gInhzYXZlb3B0IiwgWyAxXSA9ICJ4c2F2ZWMiLAor ICAgIFsgMl0gPSAieGdldGJ2MSIsICBbIDNdID0gInhzYXZlcyIsCisKKyAgICBbNCAuLi4gMzFd ID0gIlJFWiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyXzdjMFszMl0gPQoreworICAg IFsgMF0gPSAicHJlY2h3dDEiLCBbIDFdID0gImF2eDUxMnZibWkiLAorICAgIFsgMl0gPSAiUkVa IiwgICAgICBbIDNdID0gInBrdSIsCisgICAgWyA0XSA9ICJvc3BrZSIsCisKKyAgICBbNSAuLi4g MzFdID0gIlJFWiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyX2U3ZFszMl0gPQorewor ICAgIFswIC4uLiA3XSA9ICJSRVoiLAorCisgICAgWyA4XSA9ICJpdHNjIiwKKworICAgIFs5IC4u LiAzMV0gPSAiUkVaIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJfZThiWzMyXSA9Cit7 CisgICAgWyAwXSA9ICJjbHplcm8iLAorCisgICAgWzEgLi4uIDMxXSA9ICJSRVoiLAorfTsKKwor c3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICph YmJyOworICAgIGNvbnN0IGNoYXIgKipzdHJzOworfSBkZWNvZGVzW10gPQoreworICAgIHsgIjB4 MDAwMDAwMDEuZWR4IiwgICAiMWQiLCAgc3RyXzFkIH0sCisgICAgeyAiMHgwMDAwMDAwMS5lY3gi LCAgICIxYyIsICBzdHJfMWMgfSwKKyAgICB7ICIweDgwMDAwMDAxLmVkeCIsICAgImUxZCIsIHN0 cl9lMWQgfSwKKyAgICB7ICIweDgwMDAwMDAxLmVjeCIsICAgImUxYyIsIHN0cl9lMWMgfSwKKyAg ICB7ICIweDAwMDAwMDBkOjEuZWF4IiwgIkRhMSIsIHN0cl9EYTEgfSwKKyAgICB7ICIweDAwMDAw MDA3OjAuZWJ4IiwgIjdiMCIsIHN0cl83YjAgfSwKKyAgICB7ICIweDAwMDAwMDA3OjAuZWN4Iiwg IjdjMCIsIHN0cl83YzAgfSwKKyAgICB7ICIweDgwMDAwMDA3LmVkeCIsICAgImU3ZCIsIHN0cl9l N2QgfSwKKyAgICB7ICIweDgwMDAwMDA4LmVieCIsICAgImU4YiIsIHN0cl9lOGIgfSwKK307CisK KyNkZWZpbmUgQ09MX0FMSUdOICIxOCIKKworc3RhdGljIHN0cnVjdCBmc2luZm8geworICAgIGNv bnN0IGNoYXIgKm5hbWU7CisgICAgdWludDMyX3QgbGVuOworICAgIHVpbnQzMl90ICpmczsKK30g ZmVhdHVyZXNldHNbXSA9Cit7CisgICAgW1hFTl9TWVNDVExfY3B1X2ZlYXR1cmVzZXRfaG9zdF0g PSB7ICJIb3N0IiwgMCwgTlVMTCB9LAorICAgIFtYRU5fU1lTQ1RMX2NwdV9mZWF0dXJlc2V0X3Jh d10gID0geyAiUmF3IiwgIDAsIE5VTEwgfSwKKyAgICBbWEVOX1NZU0NUTF9jcHVfZmVhdHVyZXNl dF9wdl0gICA9IHsgIlBWIiwgICAwLCBOVUxMIH0sCisgICAgW1hFTl9TWVNDVExfY3B1X2ZlYXR1 cmVzZXRfaHZtXSAgPSB7ICJIVk0iLCAgMCwgTlVMTCB9LAorfTsKKworc3RhdGljIHZvaWQgZHVt cF9sZWFmKHVpbnQzMl90IGxlYWYsIGNvbnN0IGNoYXIgKipzdHJzKQoreworICAgIHVuc2lnbmVk IGk7CisKKyAgICBpZiAoICFzdHJzICkKKyAgICB7CisgICAgICAgIHByaW50ZigiID8/PyIpOwor ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICggaSA9IDA7IGkgPCAzMjsgKytpICkK KyAgICAgICAgaWYgKCBsZWFmICYgKDF1IDw8IGkpICkKKyAgICAgICAgICAgIHByaW50ZigiICVz Iiwgc3Ryc1tpXSA/OiAiPz8/IiApOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfZmVhdHVyZXNl dChjb25zdCB1aW50MzJfdCAqZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1aW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXRh aWwpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBwcmludGYoIiUtIkNPTF9BTElHTiJz ICAgICAgICAiLCBuYW1lKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGxlbmd0aDsgKytpICkKKyAg ICAgICAgcHJpbnRmKCIlMDh4JWMiLCBmZWF0dXJlc1tpXSwKKyAgICAgICAgICAgICAgIGkgPCBs ZW5ndGggLSAxID8gJzonIDogJ1xuJyk7CisKKyAgICBpZiAoICFkZXRhaWwgKQorICAgICAgICBy ZXR1cm47CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGxlbmd0aCAmJiBpIDwgQVJSQVlfU0laRShk ZWNvZGVzKTsgKytpICkKKyAgICB7CisgICAgICAgIHByaW50ZigiICBbJTAydV0gJS0iQ09MX0FM SUdOInMiLCBpLCBkZWNvZGVzW2ldLm5hbWUgPzogIjxVTktOT1dOPiIpOworICAgICAgICBpZiAo IGRlY29kZXNbaV0ubmFtZSApCisgICAgICAgICAgICBkdW1wX2xlYWYoZmVhdHVyZXNbaV0sIGRl Y29kZXNbaV0uc3Rycyk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGdldF9mZWF0dXJlc2V0KHhjX2ludGVyZmFjZSAqeGNoLCB1bnNpZ25lZCBpbnQgaWR4 KQoreworICAgIHN0cnVjdCBmc2luZm8gKmYgPSAmZmVhdHVyZXNldHNbaWR4XTsKKworICAgIGYt PmxlbiA9IHhjX2dldF9jcHVfZmVhdHVyZXNldF9zaXplKCk7CisgICAgZi0+ZnMgPSBjYWxsb2Mo bnJfZmVhdHVyZXMsIHNpemVvZigqZi0+ZnMpKTsKKworICAgIGlmICggIWYtPmZzICkKKyAgICAg ICAgZXJyKDEsICJjYWxsb2MoLCBmZWF0dXJlc2V0KSIpOworCisgICAgaWYgKCB4Y19nZXRfY3B1 X2ZlYXR1cmVzZXQoeGNoLCBpZHgsICZmLT5sZW4sIGYtPmZzKSApCisgICAgICAgIGVycigxLCAi eGNfZ2V0X2ZlYXR1cmVzZXQoKSIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2luZm8oeGNfaW50 ZXJmYWNlICp4Y2gsIGJvb2wgZGV0YWlsKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg cHJpbnRmKCJucl9mZWF0dXJlczogJXVcbiIsIG5yX2ZlYXR1cmVzKTsKKworICAgIGlmICggIWRl dGFpbCApCisgICAgeworICAgICAgICBwcmludGYoIiAgICAgICAlIkNPTF9BTElHTiJzICIsICJL RVkiKTsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlY29kZXMpOyArK2kg KQorICAgICAgICAgICAgcHJpbnRmKCIlLThzICIsIGRlY29kZXNbaV0uYWJiciA/OiAiPz8/Iik7 CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuU3RhdGljIHNl dHM6XG4iKTsKKyAgICBkZWNvZGVfZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9mZWF0dXJl bWFzayhYQ19GRUFUVVJFTUFTS19LTk9XTiksCisgICAgICAgICAgICAgICAgICAgICAgbnJfZmVh dHVyZXMsICJLbm93biIsIGRldGFpbCk7CisgICAgZGVjb2RlX2ZlYXR1cmVzZXQoeGNfZ2V0X3N0 YXRpY19jcHVfZmVhdHVyZW1hc2soWENfRkVBVFVSRU1BU0tfU1BFQ0lBTCksCisgICAgICAgICAg ICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJTcGVjaWFsIiwgZGV0YWlsKTsKKyAgICBkZWNvZGVf ZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9mZWF0dXJlbWFzayhYQ19GRUFUVVJFTUFTS19Q ViksCisgICAgICAgICAgICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJQViBNYXNrIiwgZGV0YWls KTsKKyAgICBkZWNvZGVfZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9mZWF0dXJlbWFzayhY Q19GRUFUVVJFTUFTS19IVk1fU0hBRE9XKSwKKyAgICAgICAgICAgICAgICAgICAgICBucl9mZWF0 dXJlcywgIkhWTSBTaGFkb3cgTWFzayIsIGRldGFpbCk7CisgICAgZGVjb2RlX2ZlYXR1cmVzZXQo eGNfZ2V0X3N0YXRpY19jcHVfZmVhdHVyZW1hc2soWENfRkVBVFVSRU1BU0tfSFZNX0hBUCksCisg ICAgICAgICAgICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJIVk0gSGFwIE1hc2siLCBkZXRhaWwp OworCisgICAgcHJpbnRmKCJcbkR5bmFtaWMgc2V0czpcbiIpOworICAgIGZvciAoIGkgPSAwOyBp IDwgQVJSQVlfU0laRShmZWF0dXJlc2V0cyk7ICsraSApCisgICAgeworICAgICAgICBnZXRfZmVh dHVyZXNldCh4Y2gsIGkpOworCisgICAgICAgIGRlY29kZV9mZWF0dXJlc2V0KGZlYXR1cmVzZXRz W2ldLmZzLCBmZWF0dXJlc2V0c1tpXS5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZl YXR1cmVzZXRzW2ldLm5hbWUsIGRldGFpbCk7CisgICAgfQorCisgICAgZm9yICggaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGZlYXR1cmVzZXRzKTsgKytpICkKKyAgICAgICAgZnJlZShmZWF0dXJlc2V0 c1tpXS5mcyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBl bnVtIHsgTU9ERV9VTktOT1dOLCBNT0RFX0lORk8sIE1PREVfREVUQUlMLCBNT0RFX0lOVEVSUFJF VCB9CisgICAgbW9kZSA9IE1PREVfVU5LTk9XTjsKKworICAgIG5yX2ZlYXR1cmVzID0geGNfZ2V0 X2NwdV9mZWF0dXJlc2V0X3NpemUoKTsKKworICAgIGZvciAoIDs7ICkKKyAgICB7CisgICAgICAg IGludCBvcHRpb25faW5kZXggPSAwLCBjOworICAgICAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBs b25nX29wdGlvbnNbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgImhlbHAiLCBub19hcmd1 bWVudCwgTlVMTCwgJ2gnIH0sCisgICAgICAgICAgICB7ICJpbmZvIiwgbm9fYXJndW1lbnQsIE5V TEwsICdpJyB9LAorICAgICAgICAgICAgeyAiZGV0YWlsIiwgbm9fYXJndW1lbnQsIE5VTEwsICdk JyB9LAorICAgICAgICAgICAgeyAidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndicgfSwK KyAgICAgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9LAorICAgICAgICB9OworCisgICAgICAg IGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaGlkdiIsIGxvbmdfb3B0aW9ucywgJm9wdGlv bl9pbmRleCk7CisKKyAgICAgICAgaWYgKCBjID09IC0xICkKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgIHN3aXRjaCAoIGMgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgJ2gnOgorIG9w dGlvbl9lcnJvcjoKKyAgICAgICAgICAgIHByaW50ZigiVXNhZ2U6ICVzIFsgaW5mbyB8IGRldGFp bCB8IDxmZWF0dXJlc2V0PiogXVxuIiwgYXJndlswXSk7CisgICAgICAgICAgICByZXR1cm4gMDsK KworICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgIG1vZGUgPSBNT0RFX0lORk87CisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgY2FzZSAndic6Cisg ICAgICAgICAgICBtb2RlID0gTU9ERV9ERVRBSUw7CisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCJCYWQgb3B0aW9uICclYydcbiIsIGMp OworICAgICAgICAgICAgZ290byBvcHRpb25fZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBpZiAoIG1vZGUgPT0gTU9ERV9VTktOT1dOICkKKyAgICB7CisgICAgICAgIGlmICggb3B0aW5k ID09IGFyZ2MgKQorICAgICAgICAgICAgbW9kZSA9IE1PREVfSU5GTzsKKyAgICAgICAgZWxzZSBp ZiAoIG9wdGluZCA8IGFyZ2MgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFzdHJjbXAo YXJndltvcHRpbmRdLCAiaW5mbyIpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt b2RlID0gTU9ERV9JTkZPOworICAgICAgICAgICAgICAgIG9wdGluZCsrOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZWxzZSBpZiAoICFzdHJjbXAoYXJndltvcHRpbmRdLCAiZGV0YWlsIikg KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0RFVEFJTDsKKyAg ICAgICAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICBtb2RlID0gTU9ERV9JTlRFUlBSRVQ7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgbW9kZSA9IE1PREVfSU5URVJQUkVUOworICAgIH0KKworICAg IGlmICggbW9kZSA9PSBNT0RFX0lORk8gfHwgbW9kZSA9PSBNT0RFX0RFVEFJTCApCisgICAgewor ICAgICAgICB4Y19pbnRlcmZhY2UgKnhjaCA9IHhjX2ludGVyZmFjZV9vcGVuKDAsIDAsIDApOwor CisgICAgICAgIGlmICggIXhjaCApCisgICAgICAgICAgICBlcnIoMSwgInhjX2ludGVyZmFjZV9v cGVuIik7CisKKyAgICAgICAgaWYgKCB4Y19nZXRfY3B1X2ZlYXR1cmVzZXQoeGNoLCAwLCAmbnJf ZmVhdHVyZXMsIE5VTEwpICkKKyAgICAgICAgICAgIGVycigxLCAieGNfZ2V0X2ZlYXR1cmVzZXQo LCBOVUxMKSIpOworCisgICAgICAgIGR1bXBfaW5mbyh4Y2gsIG1vZGUgPT0gTU9ERV9ERVRBSUwp OworCisgICAgICAgIHhjX2ludGVyZmFjZV9jbG9zZSh4Y2gpOworICAgIH0KKyAgICBlbHNlCisg ICAgeworICAgICAgICB1aW50MzJfdCBmc1tucl9mZWF0dXJlcyArIDFdOworCisgICAgICAgIHdo aWxlICggb3B0aW5kIDwgYXJnYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnB0ciA9 IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGkgPSAwOworICAgICAg ICAgICAgaW50IG9mZnNldDsKKworICAgICAgICAgICAgbWVtc2V0KGZzLCAwLCBzaXplb2YoZnMp KTsKKworICAgICAgICAgICAgd2hpbGUgKCBzc2NhbmYocHRyLCAiJXglbiIsICZmc1tpXSwgJm9m ZnNldCkgPT0gMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAg ICAgICAgICAgIHB0ciArPSBvZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIGkgPT0gbnJf ZmVhdHVyZXMgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg IGlmICggKnB0ciA9PSAnOicgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgcHRyKys7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVjb2RlX2ZlYXR1cmVzZXQoZnMs IGksICJSYXciLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAi QlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRh YnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK