From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 6/9] gcov: userspace tools to extract and split gcov data Date: Mon, 10 Oct 2016 10:40:35 +0100 Message-ID: <1476092438-24895-7-git-send-email-wei.liu2@citrix.com> References: <1476092438-24895-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1btX4j-0005jK-6E for xen-devel@lists.xenproject.org; Mon, 10 Oct 2016 09:40:49 +0000 In-Reply-To: <1476092438-24895-1-git-send-email-wei.liu2@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: Wei Liu , philippe.gabriel@citrix.com, Ian Jackson List-Id: xen-devel@lists.xenproject.org UHJvdmlkZSB0d28gdG9vbHM6IGEgc21hbGwgQyBwcm9ncmFtIHRvIGV4dHJhY3QgZGF0YSBmcm9t IGh5cGVydmlzb3IgYW5kCmEgcHl0aG9uIHNjcmlwdCB0byBzcGxpdCBkYXRhIGludG8gbXVsdGlw bGUgZmlsZXMuCgpUaGUgZmlsZSB4ZW5jb3YuYyBpcyBzYWx2YWdlZCBhbmQgbW9kaWZpZWQgZnJv bSB0aGUgb3JpZ2luYWwgeGVuY292LmMuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWkubGl1 MkBjaXRyaXguY29tPgotLS0KdjI6IGZpeCBJTlNUQUxMX0JJTiB0eXBvCgpDYzogSWFuIEphY2tz b24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+Ci0tLQogdG9vbHMvbWlzYy9NYWtlZmlsZSAg ICAgfCAgIDYgKysKIHRvb2xzL21pc2MveGVuY292LmMgICAgIHwgMTQ4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbWlzYy94ZW5jb3Zfc3Bs aXQgfCAxMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdl ZCwgMjU0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9taXNjL3hlbmNv di5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgdG9vbHMvbWlzYy94ZW5jb3Zfc3BsaXQKCmRpZmYgLS1n aXQgYS90b29scy9taXNjL01ha2VmaWxlIGIvdG9vbHMvbWlzYy9NYWtlZmlsZQppbmRleCA1YmE2 NjcyLi44MTUyZjdiIDEwMDY0NAotLS0gYS90b29scy9taXNjL01ha2VmaWxlCisrKyBiL3Rvb2xz L21pc2MvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAgQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhl bnN0b3JlKQogSU5TVEFMTF9CSU4tJChDT05GSUdfWDg2KSAgICAgICs9IHhlbi1jcHVpZAogSU5T VEFMTF9CSU4tJChDT05GSUdfWDg2KSAgICAgICs9IHhlbi1kZXRlY3QKIElOU1RBTExfQklOICAg ICAgICAgICAgICAgICAgICArPSB4ZW5jb25zCitJTlNUQUxMX0JJTiAgICAgICAgICAgICAgICAg ICAgKz0geGVuY292X3NwbGl0CiBJTlNUQUxMX0JJTiArPSAkKElOU1RBTExfQklOLXkpCiAKICMg RXZlcnl0aGluZyB0byBiZSBpbnN0YWxsZWQgaW4gcmVndWxhciBzYmluLwpAQCAtMjQsNiArMjUs NyBAQCBJTlNUQUxMX1NCSU4tJChDT05GSUdfWDg2KSAgICAgKz0geGVuLWxvd21lbWQKIElOU1RB TExfU0JJTi0kKENPTkZJR19YODYpICAgICArPSB4ZW4tbWZuZHVtcAogSU5TVEFMTF9TQklOICAg ICAgICAgICAgICAgICAgICs9IHhlbi1yaW5nd2F0Y2gKIElOU1RBTExfU0JJTiAgICAgICAgICAg ICAgICAgICArPSB4ZW4tdG1lbS1saXN0LXBhcnNlCitJTlNUQUxMX1NCSU4gICAgICAgICAgICAg ICAgICAgKz0geGVuY292CiBJTlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVubG9j a3Byb2YKIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW5wZXJmCiBJTlNUQUxM X1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVucG0KQEAgLTQxLDYgKzQzLDcgQEAgVEFSR0VU U19BTEwgOj0gJChJTlNUQUxMX0JJTikgJChJTlNUQUxMX1NCSU4pICQoSU5TVEFMTF9QUklWQklO KQogVEFSR0VUU19DT1BZICs9IHhlbi1idWd0b29sCiBUQVJHRVRTX0NPUFkgKz0geGVuLXJpbmd3 YXRjaAogVEFSR0VUU19DT1BZICs9IHhlbmNvbnMKK1RBUkdFVFNfQ09QWSArPSB4ZW5jb3Zfc3Bs aXQKIFRBUkdFVFNfQ09QWSArPSB4ZW5wdm5ldGJvb3QKIAogIyBFdmVyeXRoaW5nIHdoaWNoIG5l ZWRzIHRvIGJlIGJ1aWx0CkBAIC0xMDIsNCArMTA1LDcgQEAgeGVuLWxpdmVwYXRjaDogeGVuLWxp dmVwYXRjaC5vCiB4ZW4tbG93bWVtZDogeGVuLWxvd21lbWQubwogCSQoQ0MpICQoTERGTEFHUykg LW8gJEAgJDwgJChMRExJQlNfbGlieGVuZXZ0Y2huKSAkKExETElCU19saWJ4ZW5jdHJsKSAkKExE TElCU19saWJ4ZW5zdG9yZSkgJChBUFBFTkRfTERGTEFHUykKIAoreGVuY292OiB4ZW5jb3Yubwor CSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuY3RybCkgJChBUFBFTkRf TERGTEFHUykKKwogLWluY2x1ZGUgJChERVBTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzYy94ZW5j b3YuYyBiL3Rvb2xzL21pc2MveGVuY292LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZDgzYmM2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL21pc2MveGVuY292LmMKQEAg LTAsMCArMSwxNDggQEAKKy8qCisgKiB4ZW5jb3Y6IGV4dHJhY3QgdGVzdCBjb3ZlcmFnZSBpbmZv cm1hdGlvbiBmcm9tIFhlbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTYsIENpdHJp eCBTeXN0ZW1zIFImRCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisg KiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRo aXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor ICovCisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0 ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8eGVuY3RybC5oPgorCitzdGF0aWMgeGNfaW50ZXJmYWNl ICp4Y2ggPSBOVUxMOworCitpbnQgZ2Nvdl9zeXNjdGwoaW50IG9wLCBzdHJ1Y3QgeGVuX3N5c2N0 bCAqc3lzY3RsLAorICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19oeXBlcmNhbGxfYnVmZmVyICpi dWYsIHVpbnQzMl90IGJ1Zl9zaXplKQoreworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JVRkZFUl9B UkdVTUVOVChidWYpOworCisgICAgbWVtc2V0KHN5c2N0bCwgMCwgc2l6ZW9mKCpzeXNjdGwpKTsK KyAgICBzeXNjdGwtPmNtZCA9IFhFTl9TWVNDVExfZ2Nvdl9vcDsKKworICAgIHN5c2N0bC0+dS5n Y292X29wLmNtZCA9IG9wOworICAgIHN5c2N0bC0+dS5nY292X29wLnNpemUgPSBidWZfc2l6ZTsK KyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwtPnUuZ2Nvdl9vcC5idWZmZXIsIGJ1Zik7 CisKKyAgICByZXR1cm4geGNfc3lzY3RsKHhjaCwgc3lzY3RsKTsKK30KKworc3RhdGljIHZvaWQg Z2Nvdl9yZWFkKGNvbnN0IGNoYXIgKmZuKQoreworICAgIHN0cnVjdCB4ZW5fc3lzY3RsIHN5czsK KyAgICB1aW50MzJfdCB0b3RhbF9sZW47CisgICAgREVDTEFSRV9IWVBFUkNBTExfQlVGRkVSKHVp bnQ4X3QsIHApOworICAgIEZJTEUgKmY7CisKKyAgICBpZiAoZ2Nvdl9zeXNjdGwoWEVOX1NZU0NU TF9HQ09WX2dldF9zaXplLCAmc3lzLCBOVUxMLCAwKSA8IDApCisgICAgICAgIGVycigxLCAiZ2V0 dGluZyB0b3RhbCBsZW5ndGgiKTsKKyAgICB0b3RhbF9sZW4gPSBzeXMudS5nY292X29wLnNpemU7 CisKKyAgICAvKiBTaG91bGRuJ3QgZXhjZWVkIGEgZmV3IGh1bmRyZWQga2lsb2J5dGVzICovCisg ICAgaWYgKHRvdGFsX2xlbiA+IDh1ICogMTAyNHUgKiAxMDI0dSkKKyAgICAgICAgZXJyeCgxLCAi Z2NvdiBkYXRhIHRvbyBiaWcgJXUgYnl0ZXNcbiIsIHRvdGFsX2xlbik7CisKKyAgICBwID0geGNf aHlwZXJjYWxsX2J1ZmZlcl9hbGxvYyh4Y2gsIHAsIHRvdGFsX2xlbik7CisgICAgaWYgKCFwKQor ICAgICAgICBlcnIoMSwgImFsbG9jYXRpbmcgYnVmZmVyIik7CisKKyAgICBtZW1zZXQocCwgMCwg dG90YWxfbGVuKTsKKyAgICBpZiAoZ2Nvdl9zeXNjdGwoWEVOX1NZU0NUTF9HQ09WX3JlYWQsICZz eXMsIEhZUEVSQ0FMTF9CVUZGRVIocCksCisgICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbikg PCAwKQorICAgICAgICBlcnIoMSwgImdldHRpbmcgZ2NvdiBkYXRhIik7CisKKyAgICBpZiAoIXN0 cmNtcChmbiwgIi0iKSkKKyAgICAgICAgZiA9IHN0ZG91dDsKKyAgICBlbHNlCisgICAgICAgIGYg PSBmb3BlbihmbiwgInciKTsKKworICAgIGlmICghZikKKyAgICAgICAgZXJyKDEsICJvcGVuaW5n IG91dHB1dCBmaWxlIik7CisKKyAgICBpZiAoZndyaXRlKHAsIDEsIHRvdGFsX2xlbiwgZikgIT0g dG90YWxfbGVuKQorICAgICAgICBlcnIoMSwgIndyaXRpbmcgZ2NvdiBkYXRhIHRvIGZpbGUiKTsK KworICAgIGlmIChmICE9IHN0ZG91dCkKKyAgICAgICAgZmNsb3NlKGYpOworCisgICAgeGNfaHlw ZXJjYWxsX2J1ZmZlcl9mcmVlKHhjaCwgcCk7Cit9CisKK3N0YXRpYyB2b2lkIGdjb3ZfcmVzZXQo dm9pZCkKK3sKKyAgICBzdHJ1Y3QgeGVuX3N5c2N0bCBzeXM7CisKKyAgICBpZiAoZ2Nvdl9zeXNj dGwoWEVOX1NZU0NUTF9HQ09WX3Jlc2V0LCAmc3lzLCBOVUxMLCAwKSA8IDApCisgICAgICAgIGVy cigxLCAicmVzZXR0aW5nIGdjb3YgaW5mb3JtYXRpb24iKTsKK30KKworc3RhdGljIHZvaWQgdXNh Z2UoaW50IGV4aXRfY29kZSkKK3sKKyAgICBGSUxFICpvdXQgPSBleGl0X2NvZGUgPyBzdGRlcnIg OiBzdGRvdXQ7CisKKyAgICBmcHJpbnRmKG91dCwgInhlbmNvdiB7cmVzZXR8cmVhZH0gWzxmaWxl bmFtZT5dXG4iCisgICAgICAgICJcdHJlc2V0ICAgICAgIHJlc2V0IGluZm9ybWF0aW9uXG4iCisg ICAgICAgICJcdHJlYWQgICAgICAgIHJlYWQgaW5mb3JtYXRpb24gZnJvbSB4ZW4gdG8gZmlsZW5h bWVcbiIKKyAgICAgICAgIlx0ZmlsZW5hbWUgICAgb3B0aW9uYWwgZmlsZW5hbWUgKGRlZmF1bHQg b3V0cHV0KVxuIgorICAgICAgICApOworICAgIGV4aXQoZXhpdF9jb2RlKTsKK30KKworaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7CisKKyAgICB3aGlsZSAo KG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaCIpKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2gg KG9wdCkgeworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHVzYWdlKDApOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZSgxKTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGFyZ3YgKz0gb3B0aW5kOworICAgIGFyZ2MgLT0gb3B0aW5k OworICAgIGlmIChhcmdjIDw9IDApCisgICAgICAgIHVzYWdlKDEpOworCisgICAgeGNoID0geGNf aW50ZXJmYWNlX29wZW4oTlVMTCwgTlVMTCwgMCk7CisgICAgaWYgKCF4Y2gpCisgICAgICAgIGVy cigxLCAib3BlbmluZyB4YyBpbnRlcmZhY2UiKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwg InJlc2V0IikgPT0gMCkKKyAgICAgICAgZ2Nvdl9yZXNldCgpOworICAgIGVsc2UgaWYgKCBzdHJj bXAoYXJndlswXSwgInJlYWQiKSA9PSAwICkKKyAgICAgICAgZ2Nvdl9yZWFkKGFyZ2MgPiAxID8g YXJndlsxXSA6ICItIik7CisgICAgZWxzZQorICAgICAgICB1c2FnZSgxKTsKKworICAgIHhjX2lu dGVyZmFjZV9jbG9zZSh4Y2gpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2 YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2lj LW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzYy94ZW5jb3Zfc3BsaXQgYi90b29scy9t aXNjL3hlbmNvdl9zcGxpdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzA2 ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbWlzYy94ZW5jb3Zfc3BsaXQKQEAgLTAsMCAr MSwxMDAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKK2ltcG9ydCBzeXMsIG9zLCBvcy5wYXRoIGFz IHBhdGgsIHN0cnVjdCwgZXJybm8KK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgor CitkZWYgeGVuY292X3NwbGl0KG9wdHMpOgorICAgICIiIlNwbGl0IGlucHV0IGludG8gbXVsdGlw bGUgZ2NkYSBmaWxlcyIiIgorCisgICAgIyBDaGVjayBuYXRpdmUgYnl0ZSBvcmRlciBhbmQgZXhw bGljaXRseSBzcGVjaWZ5IGl0LiAgVGhlICJuYXRpdmUiCisgICAgIyBieXRlIG9yZGVyIGluIHN0 cnVjdCBtb2R1bGUgdGFrZXMgaW50byBhY2NvdW50IHBhZGRpbmcgd2hpbGUgdGhlCisgICAgIyBk YXRhIGlzIGFsd2F5cyBwYWNrZWQuCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoK KyAgICAgICAgYm9fcHJlZml4ID0gJzwnCisgICAgZWxzZToKKyAgICAgICAgYm9fcHJlZml4ID0g Jz4nCisKKyAgICBpbnB1dF9maWxlID0gb3B0cy5hcmdzWzBdCisKKyAgICBmID0gb3BlbihpbnB1 dF9maWxlKQorCisgICAgIyBNYWdpYyBudW1iZXIKKyAgICBzID0gZi5yZWFkKDQpCisgICAgbWFn aWMsID0gc3RydWN0LnVucGFjayhib19wcmVmaXggKyAiSSIsIHMpCisgICAgIyBTZWUgcHVibGlj L3N5c2N0bC5oIGZvciBtYWdpYyBudW1iZXIgLS0gIlhDT1YiCisgICAgaWYgbWFnaWMgIT0gMHg1 ODQzNGY1NjoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJbnZhbGlkIG1hZ2ljIG51bWJlciIp CisKKyAgICAjIFRoZSByZXN0IGlzIHplcm8gb3IgbW9yZSByZWNvcmRzCisgICAgY29udGVudCA9 IGYucmVhZCgpCisKKyAgICBmLmNsb3NlKCkKKworICAgIHdoaWxlIGNvbnRlbnQ6CisgICAgICAg IG9mZiA9IGNvbnRlbnQuZmluZCgnXHgwMCcpCisgICAgICAgIGZtdCA9IGJvX3ByZWZpeCArIHN0 cihvZmYpICsgJ3MnCisgICAgICAgIGZuLCA9IHN0cnVjdC51bnBhY2tfZnJvbShmbXQsIGNvbnRl bnQpCisgICAgICAgIGNvbnRlbnQgPSBjb250ZW50W29mZisxOl0KKworICAgICAgICBmbXQgPSBi b19wcmVmaXggKyAnSScKKyAgICAgICAgc3osID0gc3RydWN0LnVucGFja19mcm9tKGZtdCwgY29u dGVudCkKKyAgICAgICAgY29udGVudCA9IGNvbnRlbnRbc3RydWN0LmNhbGNzaXplKGZtdCk6XQor CisgICAgICAgIGZtdCA9IGJvX3ByZWZpeCArIHN0cihzeikgKyAncycKKyAgICAgICAgcGF5bG9h ZCwgPSBzdHJ1Y3QudW5wYWNrX2Zyb20oZm10LCBjb250ZW50KQorICAgICAgICBjb250ZW50ID0g Y29udGVudFtzejpdCisKKyAgICAgICAgIyBDcmVhdGUgYW5kIHN0b3JlIGZpbGVzCisgICAgICAg IGlmIG9wdHMub3V0cHV0X2RpciA9PSAnLic6CisgICAgICAgICAgICBvcHRzLm91dHB1dF9kaXIg PSBvcy5nZXRjd2QoKQorCisgICAgICAgIGRpciA9IG9wdHMub3V0cHV0X2RpciArIHBhdGguZGly bmFtZShmbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyKQorICAg ICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8u RUVYSVNUIGFuZCBvcy5wYXRoLmlzZGlyKGRpcik6CisgICAgICAgICAgICAgICAgcGFzcworICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGZ1bGxfcGF0 aCA9IGRpciArICcvJyArIHBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgIGYgPSBvcGVuKGZ1bGxf cGF0aCwgInciKQorICAgICAgICBmLndyaXRlKHBheWxvYWQpCisgICAgICAgIGYuY2xvc2UoKQor CitkZWYgbWFpbigpOgorICAgICIiIiBNYWluIGVudHJ5cG9pbnQgIiIiCisKKyAgICAjIENoYW5n ZSBzdGRvdXQgdG8gYmUgbGluZS1idWZmZXJlZC4KKyAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVu KHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMSkKKworICAgICMgTm9ybWFsaXNlICRDV0QgdG8g dGhlIGRpcmVjdG9yeSB0aGlzIHNjcmlwdCBpcyBpbgorICAgICMgb3MuY2hkaXIocGF0aC5kaXJu YW1lKHBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorCisgICAgcGFyc2VyID0gT3B0aW9uUGFy c2VyKAorICAgICAgICB1c2FnZSA9ICIlcHJvZyBbT1BUSU9OU10gPElOUFVUPiIsCisgICAgICAg IGRlc2NyaXB0aW9uID0gIlV0aWxpdHkgdG8gc3BsaXQgeGVuY292IGRhdGEgZmlsZSIsCisgICAg ICAgICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dC1kaXIiLCBhY3Rpb24gPSAi c3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAib3V0cHV0X2RpciIsIGRlZmF1 bHQgPSAiLiIsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJzdHJpbmciLAorICAgICAg ICAgICAgICAgICAgICAgIGhlbHAgPSAoJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB0byBwbGFjZSBv dXRwdXQgZmlsZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0cyB0 byBjdXJyZW50IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIG9w dHMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgb3B0cy5hcmdzID0gYXJncworCisg ICAgeGVuY292X3NwbGl0KG9wdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAg ICB0cnk6CisgICAgICAgIHN5cy5leGl0KG1haW4oKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBl OgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJFcnJvcjoiLCBlCisgICAgICAgIHN5cy5l eGl0KDEpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuZXhpdCgx KQorCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=