From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 18/21] tools: Utility for dealing with featuresets Date: Fri, 8 Apr 2016 21:31:54 +0100 Message-ID: <1460147517-11706-19-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-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: <1460147517-11706-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 List-Id: xen-devel@lists.xenproject.org SXQgaXMgYWJsZSB0byByZXBvcnRzIHRoZSBjdXJyZW50IGZlYXR1cmVzZXRzOyBib3RoIHRoZSBz dGF0aWMgbWFza3MgYW5kCmR5bmFtaWMgZmVhdHVyZXNldHMgZnJvbSBYZW4sIG9yIHRvIGRlY29k ZSBhbiBhcmJpdHJhcnkgZmVhdHVyZXNldCBpbnRvCmAvcHJvYy9jcHVpbmZvYCBzdHlsZSBzdHJp bmdzLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5 OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+Ci0tLQpDQzog SWFuIEphY2tzb24gPElhbi5KYWNrc29uQGV1LmNpdHJpeC5jb20+Cgp2MjogTm8gbGlua2luZyBo YWNrYXJ5CnY2OiBSZW9yZGVyIHN3aXRjaCBzdGF0ZW1lbnQgdG8gYXZvaWQgYmFja3dhcmRzIGdv dG8uCi0tLQogLmdpdGlnbm9yZSAgICAgICAgICAgICB8ICAgMSArCiB0b29scy9taXNjL01ha2Vm aWxlICAgIHwgICA0ICsKIHRvb2xzL21pc2MveGVuLWNwdWlkLmMgfCAzOTIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAz OTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL21pc2MveGVuLWNwdWlk LmMKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCBiNDA0NTNlLi4y MGZmYTJkIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTE3OSw2 ICsxNzksNyBAQCB0b29scy9taXNjL2NwdXBlcmYvY3B1cGVyZi1wZXJmY250cgogdG9vbHMvbWlz Yy9jcHVwZXJmL2NwdXBlcmYteGVuCiB0b29scy9taXNjL3hjX3NoYWRvdwogdG9vbHMvbWlzYy94 ZW5fY3B1cGVyZgordG9vbHMvbWlzYy94ZW4tY3B1aWQKIHRvb2xzL21pc2MveGVuLWRldGVjdAog dG9vbHMvbWlzYy94ZW4tdG1lbS1saXN0LXBhcnNlCiB0b29scy9taXNjL3hlbnBlcmYKZGlmZiAt LWdpdCBhL3Rvb2xzL21pc2MvTWFrZWZpbGUgYi90b29scy9taXNjL01ha2VmaWxlCmluZGV4IGEy ZWYwZWMuLmE5NGRhZDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21pc2MvTWFrZWZpbGUKKysrIGIvdG9v bHMvbWlzYy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQCBDRkxBR1MgKz0gJChDRkxBR1NfeGVu aW5jbHVkZSkKIENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5zdG9yZSkKIAogIyBFdmVyeXRoaW5n IHRvIGJlIGluc3RhbGxlZCBpbiByZWd1bGFyIGJpbi8KK0lOU1RBTExfQklOLSQoQ09ORklHX1g4 NikgICAgICArPSB4ZW4tY3B1aWQKIElOU1RBTExfQklOLSQoQ09ORklHX1g4NikgICAgICArPSB4 ZW4tZGV0ZWN0CiBJTlNUQUxMX0JJTiAgICAgICAgICAgICAgICAgICAgKz0geGVuY29ucwogSU5T VEFMTF9CSU4gICAgICAgICAgICAgICAgICAgICs9IHhlbmNvdl9zcGxpdApAQCAtNjgsNiArNjks OSBAQCBjbGVhbjoKIC5QSE9OWTogZGlzdGNsZWFuCiBkaXN0Y2xlYW46IGNsZWFuCiAKK3hlbi1j cHVpZDogeGVuLWNwdWlkLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xp YnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbmd1ZXN0KSAkKEFQUEVORF9MREZMQUdTKQorCiB4ZW4t aHZtY3R4OiB4ZW4taHZtY3R4Lm8KIAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJT X2xpYnhlbmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL21pc2Mv eGVuLWNwdWlkLmMgYi90b29scy9taXNjL3hlbi1jcHVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjQ0OTkxZjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9taXNjL3hl bi1jcHVpZC5jCkBAIC0wLDAgKzEsMzkyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNs dWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHhlbmN0cmwuaD4KKworI2RlZmluZSBBUlJBWV9T SVpFKGEpIChzaXplb2YgYSAvIHNpemVvZiAqYSkKK3N0YXRpYyB1aW50MzJfdCBucl9mZWF0dXJl czsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0cl8xZFszMl0gPQoreworICAgIFsgMF0gPSAiZnB1 IiwgIFsgMV0gPSAidm1lIiwKKyAgICBbIDJdID0gImRlIiwgICBbIDNdID0gInBzZSIsCisgICAg WyA0XSA9ICJ0c2MiLCAgWyA1XSA9ICJtc3IiLAorICAgIFsgNl0gPSAicGFlIiwgIFsgN10gPSAi bWNlIiwKKyAgICBbIDhdID0gImN4OCIsICBbIDldID0gImFwaWMiLAorICAgIFsxMF0gPSAiUkVa IiwgIFsxMV0gPSAic3lzZW50ZXIiLAorICAgIFsxMl0gPSAibXRyciIsIFsxM10gPSAicGdlIiwK KyAgICBbMTRdID0gIm1jYSIsICBbMTVdID0gImNtb3YiLAorICAgIFsxNl0gPSAicGF0IiwgIFsx N10gPSAicHNlMzYiLAorICAgIFsxOF0gPSAicHNuIiwgIFsxOV0gPSAiY2xmbHVzaCIsCisgICAg WzIwXSA9ICJSRVoiLCAgWzIxXSA9ICJkcyIsCisgICAgWzIyXSA9ICJhY3BpIiwgWzIzXSA9ICJt bXgiLAorICAgIFsyNF0gPSAiZnhzciIsIFsyNV0gPSAic3NlIiwKKyAgICBbMjZdID0gInNzZTIi LCBbMjddID0gInNzIiwKKyAgICBbMjhdID0gImh0dCIsICBbMjldID0gInRtIiwKKyAgICBbMzBd ID0gImlhNjQiLCBbMzFdID0gInBiZSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyXzFj WzMyXSA9Cit7CisgICAgWyAwXSA9ICJzc2UzIiwgICAgWyAxXSA9ICJwY2xtdWxxZHEiLAorICAg IFsgMl0gPSAiZHRlczY0IiwgIFsgM10gPSAibW9uaXRvciIsCisgICAgWyA0XSA9ICJkcy1jcGwi LCAgWyA1XSA9ICJ2bXgiLAorICAgIFsgNl0gPSAic214IiwgICAgIFsgN10gPSAiZXN0IiwKKyAg ICBbIDhdID0gInRtMiIsICAgICBbIDldID0gInNzc2UzIiwKKyAgICBbMTBdID0gImNudHgtaWQi LCBbMTFdID0gInNkZ2IiLAorICAgIFsxMl0gPSAiZm1hIiwgICAgIFsxM10gPSAiY3gxNiIsCisg ICAgWzE0XSA9ICJ4dHByIiwgICAgWzE1XSA9ICJwZGNtIiwKKyAgICBbMTZdID0gIlJFWiIsICAg ICBbMTddID0gInBjaWQiLAorICAgIFsxOF0gPSAiZGNhIiwgICAgIFsxOV0gPSAic3NlNDEiLAor ICAgIFsyMF0gPSAic3NlNDIiLCAgIFsyMV0gPSAieDJhcGljIiwKKyAgICBbMjJdID0gIm1vdmVi ZSIsICBbMjNdID0gInBvcGNudCIsCisgICAgWzI0XSA9ICJ0c2MtZGwiLCAgWzI1XSA9ICJhZXNu aSIsCisgICAgWzI2XSA9ICJ4c2F2ZSIsICAgWzI3XSA9ICJvc3hzYXZlIiwKKyAgICBbMjhdID0g ImF2eCIsICAgICBbMjldID0gImYxNmMiLAorICAgIFszMF0gPSAicmRybmQiLCAgIFszMV0gPSAi aHlwZXIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0cl9lMWRbMzJdID0KK3sKKyAgICBb IDBdID0gImZwdSIsICAgIFsgMV0gPSAidm1lIiwKKyAgICBbIDJdID0gImRlIiwgICAgIFsgM10g PSAicHNlIiwKKyAgICBbIDRdID0gInRzYyIsICAgIFsgNV0gPSAibXNyIiwKKyAgICBbIDZdID0g InBhZSIsICAgIFsgN10gPSAibWNlIiwKKyAgICBbIDhdID0gImN4OCIsICAgIFsgOV0gPSAiYXBp YyIsCisgICAgWzEwXSA9ICJSRVoiLCAgICBbMTFdID0gInN5c2NhbGwiLAorICAgIFsxMl0gPSAi bXRyciIsICAgWzEzXSA9ICJwZ2UiLAorICAgIFsxNF0gPSAibWNhIiwgICAgWzE1XSA9ICJjbW92 IiwKKyAgICBbMTZdID0gImZjbW92IiwgIFsxN10gPSAicHNlMzYiLAorICAgIFsxOF0gPSAiUkVa IiwgICAgWzE5XSA9ICJtcCIsCisgICAgWzIwXSA9ICJueCIsICAgICBbMjFdID0gIlJFWiIsCisg ICAgWzIyXSA9ICJtbXgrIiwgICBbMjNdID0gIm1teCIsCisgICAgWzI0XSA9ICJmeHNyIiwgICBb MjVdID0gImZ4c3IrIiwKKyAgICBbMjZdID0gInBnMWciLCAgIFsyN10gPSAicmR0c2NwIiwKKyAg ICBbMjhdID0gIlJFWiIsICAgIFsyOV0gPSAibG0iLAorICAgIFszMF0gPSAiM2Rub3crIiwgWzMx XSA9ICIzZG5vdyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyX2UxY1szMl0gPQorewor ICAgIFsgMF0gPSAibGFoZl9sbSIsICAgIFsgMV0gPSAiY21wIiwKKyAgICBbIDJdID0gInN2bSIs ICAgICAgICBbIDNdID0gImV4dGFwaWMiLAorICAgIFsgNF0gPSAiY3I4ZCIsICAgICAgIFsgNV0g PSAibHpjbnQiLAorICAgIFsgNl0gPSAic3NlNGEiLCAgICAgIFsgN10gPSAibXNzZSIsCisgICAg WyA4XSA9ICIzZG5vd3BmIiwgICAgWyA5XSA9ICJvc3Z3IiwKKyAgICBbMTBdID0gImlicyIsICAg ICAgICBbMTFdID0gInhvcCIsCisgICAgWzEyXSA9ICJza2luaXQiLCAgICAgWzEzXSA9ICJ3ZHQi LAorICAgIFsxNF0gPSAiUkVaIiwgICAgICAgIFsxNV0gPSAibHdwIiwKKyAgICBbMTZdID0gImZt YTQiLCAgICAgICBbMTddID0gInRjZSIsCisgICAgWzE4XSA9ICJSRVoiLCAgICAgICAgWzE5XSA9 ICJub2RlaWQiLAorICAgIFsyMF0gPSAiUkVaIiwgICAgICAgIFsyMV0gPSAidGJtIiwKKyAgICBb MjJdID0gInRvcG9leHQiLCAgICBbMjNdID0gInBlcmZjdHJfY29yZSIsCisgICAgWzI0XSA9ICJw ZXJmY3RyX25iIiwgWzI1XSA9ICJSRVoiLAorICAgIFsyNl0gPSAiZGJ4IiwgICAgICAgIFsyN10g PSAicGVyZnRzYyIsCisgICAgWzI4XSA9ICJwY3hfbDJpIiwgICAgWzI5XSA9ICJtb25pdG9yeCIs CisKKyAgICBbMzAgLi4uIDMxXSA9ICJSRVoiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0 cl83YjBbMzJdID0KK3sKKyAgICBbIDBdID0gImZzZ3NiYXNlIiwgWyAxXSA9ICJ0c2MtYWRqIiwK KyAgICBbIDJdID0gInNneCIsICAgICAgWyAzXSA9ICJibWkxIiwKKyAgICBbIDRdID0gImhsZSIs ICAgICAgWyA1XSA9ICJhdngyIiwKKyAgICBbIDZdID0gIlJFWiIsICAgICAgWyA3XSA9ICJzbWVw IiwKKyAgICBbIDhdID0gImJtaTIiLCAgICAgWyA5XSA9ICJlcm1zIiwKKyAgICBbMTBdID0gImlu dnBjaWQiLCAgWzExXSA9ICJydG0iLAorICAgIFsxMl0gPSAicHFtIiwgICAgICBbMTNdID0gImRl cGZwcCIsCisgICAgWzE0XSA9ICJtcHgiLCAgICAgIFsxNV0gPSAicHFlIiwKKyAgICBbMTZdID0g ImF2eDUxMmYiLCAgWzE3XSA9ICJhdng1MTJkcSIsCisgICAgWzE4XSA9ICJyZHNlZWQiLCAgIFsx OV0gPSAiYWR4IiwKKyAgICBbMjBdID0gInNtYXAiLCAgICAgWzIxXSA9ICJhdng1MTJpZm1hIiwK KyAgICBbMjJdID0gInBjb21pdCIsICAgWzIzXSA9ICJjbGZsdXNob3B0IiwKKyAgICBbMjRdID0g ImNsd2IiLCAgICAgWzI1XSA9ICJwdCIsCisgICAgWzI2XSA9ICJhdng1MTJwZiIsIFsyN10gPSAi YXZ4NTEyZXIiLAorICAgIFsyOF0gPSAiYXZ4NTEyY2QiLCBbMjldID0gInNoYSIsCisgICAgWzMw XSA9ICJhdng1MTJidyIsIFszMV0gPSAiYXZ4NTEydmwiLAorfTsKKworc3RhdGljIGNvbnN0IGNo YXIgKnN0cl9EYTFbMzJdID0KK3sKKyAgICBbIDBdID0gInhzYXZlb3B0IiwgWyAxXSA9ICJ4c2F2 ZWMiLAorICAgIFsgMl0gPSAieGdldGJ2MSIsICBbIDNdID0gInhzYXZlcyIsCisKKyAgICBbNCAu Li4gMzFdID0gIlJFWiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyXzdjMFszMl0gPQor eworICAgIFsgMF0gPSAicHJlY2h3dDEiLCBbIDFdID0gImF2eDUxMnZibWkiLAorICAgIFsgMl0g PSAiUkVaIiwgICAgICBbIDNdID0gInBrdSIsCisgICAgWyA0XSA9ICJvc3BrZSIsCisKKyAgICBb NSAuLi4gMzFdID0gIlJFWiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RyX2U3ZFszMl0g PQoreworICAgIFswIC4uLiA3XSA9ICJSRVoiLAorCisgICAgWyA4XSA9ICJpdHNjIiwKKworICAg IFs5IC4uLiAzMV0gPSAiUkVaIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJfZThiWzMy XSA9Cit7CisgICAgWyAwXSA9ICJjbHplcm8iLAorCisgICAgWzEgLi4uIDMxXSA9ICJSRVoiLAor fTsKKworc3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBj aGFyICphYmJyOworICAgIGNvbnN0IGNoYXIgKipzdHJzOworfSBkZWNvZGVzW10gPQoreworICAg IHsgIjB4MDAwMDAwMDEuZWR4IiwgICAiMWQiLCAgc3RyXzFkIH0sCisgICAgeyAiMHgwMDAwMDAw MS5lY3giLCAgICIxYyIsICBzdHJfMWMgfSwKKyAgICB7ICIweDgwMDAwMDAxLmVkeCIsICAgImUx ZCIsIHN0cl9lMWQgfSwKKyAgICB7ICIweDgwMDAwMDAxLmVjeCIsICAgImUxYyIsIHN0cl9lMWMg fSwKKyAgICB7ICIweDAwMDAwMDBkOjEuZWF4IiwgIkRhMSIsIHN0cl9EYTEgfSwKKyAgICB7ICIw eDAwMDAwMDA3OjAuZWJ4IiwgIjdiMCIsIHN0cl83YjAgfSwKKyAgICB7ICIweDAwMDAwMDA3OjAu ZWN4IiwgIjdjMCIsIHN0cl83YzAgfSwKKyAgICB7ICIweDgwMDAwMDA3LmVkeCIsICAgImU3ZCIs IHN0cl9lN2QgfSwKKyAgICB7ICIweDgwMDAwMDA4LmVieCIsICAgImU4YiIsIHN0cl9lOGIgfSwK K307CisKKyNkZWZpbmUgQ09MX0FMSUdOICIxOCIKKworc3RhdGljIHN0cnVjdCBmc2luZm8gewor ICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgdWludDMyX3QgbGVuOworICAgIHVpbnQzMl90ICpm czsKK30gZmVhdHVyZXNldHNbXSA9Cit7CisgICAgW1hFTl9TWVNDVExfY3B1X2ZlYXR1cmVzZXRf aG9zdF0gPSB7ICJIb3N0IiwgMCwgTlVMTCB9LAorICAgIFtYRU5fU1lTQ1RMX2NwdV9mZWF0dXJl c2V0X3Jhd10gID0geyAiUmF3IiwgIDAsIE5VTEwgfSwKKyAgICBbWEVOX1NZU0NUTF9jcHVfZmVh dHVyZXNldF9wdl0gICA9IHsgIlBWIiwgICAwLCBOVUxMIH0sCisgICAgW1hFTl9TWVNDVExfY3B1 X2ZlYXR1cmVzZXRfaHZtXSAgPSB7ICJIVk0iLCAgMCwgTlVMTCB9LAorfTsKKworc3RhdGljIHZv aWQgZHVtcF9sZWFmKHVpbnQzMl90IGxlYWYsIGNvbnN0IGNoYXIgKipzdHJzKQoreworICAgIHVu c2lnbmVkIGk7CisKKyAgICBpZiAoICFzdHJzICkKKyAgICB7CisgICAgICAgIHByaW50ZigiID8/ PyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICggaSA9IDA7IGkgPCAzMjsg KytpICkKKyAgICAgICAgaWYgKCBsZWFmICYgKDF1IDw8IGkpICkKKyAgICAgICAgICAgIHByaW50 ZigiICVzIiwgc3Ryc1tpXSA/OiAiPz8/IiApOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfZmVh dHVyZXNldChjb25zdCB1aW50MzJfdCAqZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBkZXRhaWwpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBwcmludGYoIiUtIkNPTF9B TElHTiJzICAgICAgICAiLCBuYW1lKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGxlbmd0aDsgKytp ICkKKyAgICAgICAgcHJpbnRmKCIlMDh4JWMiLCBmZWF0dXJlc1tpXSwKKyAgICAgICAgICAgICAg IGkgPCBsZW5ndGggLSAxID8gJzonIDogJ1xuJyk7CisKKyAgICBpZiAoICFkZXRhaWwgKQorICAg ICAgICByZXR1cm47CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGxlbmd0aCAmJiBpIDwgQVJSQVlf U0laRShkZWNvZGVzKTsgKytpICkKKyAgICB7CisgICAgICAgIHByaW50ZigiICBbJTAydV0gJS0i Q09MX0FMSUdOInMiLCBpLCBkZWNvZGVzW2ldLm5hbWUgPzogIjxVTktOT1dOPiIpOworICAgICAg ICBpZiAoIGRlY29kZXNbaV0ubmFtZSApCisgICAgICAgICAgICBkdW1wX2xlYWYoZmVhdHVyZXNb aV0sIGRlY29kZXNbaV0uc3Rycyk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIGdldF9mZWF0dXJlc2V0KHhjX2ludGVyZmFjZSAqeGNoLCB1bnNpZ25lZCBp bnQgaWR4KQoreworICAgIHN0cnVjdCBmc2luZm8gKmYgPSAmZmVhdHVyZXNldHNbaWR4XTsKKwor ICAgIGYtPmxlbiA9IHhjX2dldF9jcHVfZmVhdHVyZXNldF9zaXplKCk7CisgICAgZi0+ZnMgPSBj YWxsb2MobnJfZmVhdHVyZXMsIHNpemVvZigqZi0+ZnMpKTsKKworICAgIGlmICggIWYtPmZzICkK KyAgICAgICAgZXJyKDEsICJjYWxsb2MoLCBmZWF0dXJlc2V0KSIpOworCisgICAgaWYgKCB4Y19n ZXRfY3B1X2ZlYXR1cmVzZXQoeGNoLCBpZHgsICZmLT5sZW4sIGYtPmZzKSApCisgICAgICAgIGVy cigxLCAieGNfZ2V0X2ZlYXR1cmVzZXQoKSIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2luZm8o eGNfaW50ZXJmYWNlICp4Y2gsIGJvb2wgZGV0YWlsKQoreworICAgIHVuc2lnbmVkIGludCBpOwor CisgICAgcHJpbnRmKCJucl9mZWF0dXJlczogJXVcbiIsIG5yX2ZlYXR1cmVzKTsKKworICAgIGlm ICggIWRldGFpbCApCisgICAgeworICAgICAgICBwcmludGYoIiAgICAgICAlIkNPTF9BTElHTiJz ICIsICJLRVkiKTsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlY29kZXMp OyArK2kgKQorICAgICAgICAgICAgcHJpbnRmKCIlLThzICIsIGRlY29kZXNbaV0uYWJiciA/OiAi Pz8/Iik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuU3Rh dGljIHNldHM6XG4iKTsKKyAgICBkZWNvZGVfZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9m ZWF0dXJlbWFzayhYQ19GRUFUVVJFTUFTS19LTk9XTiksCisgICAgICAgICAgICAgICAgICAgICAg bnJfZmVhdHVyZXMsICJLbm93biIsIGRldGFpbCk7CisgICAgZGVjb2RlX2ZlYXR1cmVzZXQoeGNf Z2V0X3N0YXRpY19jcHVfZmVhdHVyZW1hc2soWENfRkVBVFVSRU1BU0tfU1BFQ0lBTCksCisgICAg ICAgICAgICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJTcGVjaWFsIiwgZGV0YWlsKTsKKyAgICBk ZWNvZGVfZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9mZWF0dXJlbWFzayhYQ19GRUFUVVJF TUFTS19QViksCisgICAgICAgICAgICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJQViBNYXNrIiwg ZGV0YWlsKTsKKyAgICBkZWNvZGVfZmVhdHVyZXNldCh4Y19nZXRfc3RhdGljX2NwdV9mZWF0dXJl bWFzayhYQ19GRUFUVVJFTUFTS19IVk1fU0hBRE9XKSwKKyAgICAgICAgICAgICAgICAgICAgICBu cl9mZWF0dXJlcywgIkhWTSBTaGFkb3cgTWFzayIsIGRldGFpbCk7CisgICAgZGVjb2RlX2ZlYXR1 cmVzZXQoeGNfZ2V0X3N0YXRpY19jcHVfZmVhdHVyZW1hc2soWENfRkVBVFVSRU1BU0tfSFZNX0hB UCksCisgICAgICAgICAgICAgICAgICAgICAgbnJfZmVhdHVyZXMsICJIVk0gSGFwIE1hc2siLCBk ZXRhaWwpOworCisgICAgcHJpbnRmKCJcbkR5bmFtaWMgc2V0czpcbiIpOworICAgIGZvciAoIGkg PSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlc2V0cyk7ICsraSApCisgICAgeworICAgICAgICBn ZXRfZmVhdHVyZXNldCh4Y2gsIGkpOworCisgICAgICAgIGRlY29kZV9mZWF0dXJlc2V0KGZlYXR1 cmVzZXRzW2ldLmZzLCBmZWF0dXJlc2V0c1tpXS5sZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGZlYXR1cmVzZXRzW2ldLm5hbWUsIGRldGFpbCk7CisgICAgfQorCisgICAgZm9yICggaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGZlYXR1cmVzZXRzKTsgKytpICkKKyAgICAgICAgZnJlZShmZWF0 dXJlc2V0c1tpXS5mcyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK KyAgICBlbnVtIHsgTU9ERV9VTktOT1dOLCBNT0RFX0lORk8sIE1PREVfREVUQUlMLCBNT0RFX0lO VEVSUFJFVCB9CisgICAgbW9kZSA9IE1PREVfVU5LTk9XTjsKKworICAgIG5yX2ZlYXR1cmVzID0g eGNfZ2V0X2NwdV9mZWF0dXJlc2V0X3NpemUoKTsKKworICAgIGZvciAoIDs7ICkKKyAgICB7Cisg ICAgICAgIGludCBvcHRpb25faW5kZXggPSAwLCBjOworICAgICAgICBzdGF0aWMgc3RydWN0IG9w dGlvbiBsb25nX29wdGlvbnNbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHsgImhlbHAiLCBu b19hcmd1bWVudCwgTlVMTCwgJ2gnIH0sCisgICAgICAgICAgICB7ICJpbmZvIiwgbm9fYXJndW1l bnQsIE5VTEwsICdpJyB9LAorICAgICAgICAgICAgeyAiZGV0YWlsIiwgbm9fYXJndW1lbnQsIE5V TEwsICdkJyB9LAorICAgICAgICAgICAgeyAidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn dicgfSwKKyAgICAgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9LAorICAgICAgICB9OworCisg ICAgICAgIGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaGlkdiIsIGxvbmdfb3B0aW9ucywg Jm9wdGlvbl9pbmRleCk7CisKKyAgICAgICAgaWYgKCBjID09IC0xICkKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgIHN3aXRjaCAoIGMgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICBwcmludGYoIkJhZCBvcHRpb24gJyVjJ1xuIiwgYyk7CisgICAgICAgICAg ICAvKiBGYWxsdGhvdWdoICovCisgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgcHJpbnRm KCJVc2FnZTogJXMgWyBpbmZvIHwgZGV0YWlsIHwgPGZlYXR1cmVzZXQ+KiBdXG4iLCBhcmd2WzBd KTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAg ICAgbW9kZSA9IE1PREVfSU5GTzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug J2QnOgorICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIG1vZGUgPSBNT0RFX0RFVEFJTDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBtb2RlID09 IE1PREVfVU5LTk9XTiApCisgICAgeworICAgICAgICBpZiAoIG9wdGluZCA9PSBhcmdjICkKKyAg ICAgICAgICAgIG1vZGUgPSBNT0RFX0lORk87CisgICAgICAgIGVsc2UgaWYgKCBvcHRpbmQgPCBh cmdjICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhc3RyY21wKGFyZ3Zbb3B0aW5kXSwg ImluZm8iKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW9kZSA9IE1PREVfSU5G TzsKKyAgICAgICAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UgaWYgKCAhc3RyY21wKGFyZ3Zbb3B0aW5kXSwgImRldGFpbCIpICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBtb2RlID0gTU9ERV9ERVRBSUw7CisgICAgICAgICAgICAgICAg b3B0aW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgbW9kZSA9IE1PREVfSU5URVJQUkVUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIG1vZGUgPSBNT0RFX0lOVEVSUFJFVDsKKyAgICB9CisKKyAgICBpZiAoIG1vZGUgPT0g TU9ERV9JTkZPIHx8IG1vZGUgPT0gTU9ERV9ERVRBSUwgKQorICAgIHsKKyAgICAgICAgeGNfaW50 ZXJmYWNlICp4Y2ggPSB4Y19pbnRlcmZhY2Vfb3BlbigwLCAwLCAwKTsKKworICAgICAgICBpZiAo ICF4Y2ggKQorICAgICAgICAgICAgZXJyKDEsICJ4Y19pbnRlcmZhY2Vfb3BlbiIpOworCisgICAg ICAgIGlmICggeGNfZ2V0X2NwdV9mZWF0dXJlc2V0KHhjaCwgMCwgJm5yX2ZlYXR1cmVzLCBOVUxM KSApCisgICAgICAgICAgICBlcnIoMSwgInhjX2dldF9mZWF0dXJlc2V0KCwgTlVMTCkiKTsKKwor ICAgICAgICBkdW1wX2luZm8oeGNoLCBtb2RlID09IE1PREVfREVUQUlMKTsKKworICAgICAgICB4 Y19pbnRlcmZhY2VfY2xvc2UoeGNoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg dWludDMyX3QgZnNbbnJfZmVhdHVyZXMgKyAxXTsKKworICAgICAgICB3aGlsZSAoIG9wdGluZCA8 IGFyZ2MgKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpwdHIgPSBhcmd2W29wdGluZCsr XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpID0gMDsKKyAgICAgICAgICAgIGludCBvZmZz ZXQ7CisKKyAgICAgICAgICAgIG1lbXNldChmcywgMCwgc2l6ZW9mKGZzKSk7CisKKyAgICAgICAg ICAgIHdoaWxlICggc3NjYW5mKHB0ciwgIiV4JW4iLCAmZnNbaV0sICZvZmZzZXQpID09IDEgKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBwdHIg Kz0gb2Zmc2V0OworCisgICAgICAgICAgICAgICAgaWYgKCBpID09IG5yX2ZlYXR1cmVzICkKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiAoICpwdHIgPT0g JzonICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHB0cisrOyBjb250 aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGRlY29kZV9mZWF0dXJlc2V0KGZzLCBpLCAiUmF3IiwgdHJ1 ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==