From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: [PATCH] scripts/add_maintainers.pl: New script Date: Tue, 15 May 2018 18:10:28 +0100 Message-ID: <1526404228-8834-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fIdTJ-0003A0-D6 for xen-devel@lists.xenproject.org; Tue, 15 May 2018 17:10:45 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Lars Kurth , Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBwcm92aWRlcyBh IG11Y2ggYmV0dGVyIHdvcmtmbG93IHdoZW4gdXNpbmcgZ2l0IGZvcm1hdC1wYXRjaCBhbmQKZ2l0 IHNlbmQtZW1haWwsIHdpdGggZ2V0X21haW50YWluZXIucGwuCgpUaGUgdG9vbCBjb3ZlcnMgc3Rl cCAyIG9mIHRoZSBmb2xsb3dpbmcgd29ya2Zsb3cKCiAgU3RlcCAxOiBnaXQgZm9ybWF0LXBhdGNo IC4uLiAtbyA8cGF0Y2hkaXI+IC4uLgogIFN0ZXAgMjogLi9zY3JpcHRzL2FkZF9tYWludGFpbmVy cy5wbCAtZCA8cGF0Y2hkaXI+CiAgICAgICAgICBUaGlzIG92ZXJ3cml0ZXMgICoucGF0Y2ggZmls ZXMgaW4gPHBhdGNoZGlyPgogIFN0ZXAgMzogZ2l0IHNlbmQtZW1haWwgLXRvIHhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZyA8cGF0Y2hkaXI+LyoucGF0Y2h4bQoKSSBtYW51YWxseSB0ZXN0 ZWQgYWxsIG9wdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbiBjb21iaW5hdGlvbnMKb24gTWFjLgoK Q2hhbmdlcyBzaW5jZSB2MToKLSBBZGRlZCBSQUIgKGluZGljYXRlZCBieSBKdWVyZ2VuIG9uIElS QyB0aGF0IHRoaXMgaXMgT0spCi0gUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzCi0gUmVuYW1l ZCAtLXByZWZpeCB0byAtLXJlcm9sbC1jb3VudAotIENsZWFuZWQgdXAgc2hvcnQgb3B0aW9ucyAt diwgLi4uIHRvIGJlIGluIGxpbmUgd2l0aCBnaXQKLSBBZGRlZCAtLXRhZ3N8LXQgb3B0aW9uIHRv IGFkZCBBQiwgUkFCIGFuZCBSQiBlbWFpbHMgdG8gQ0MgbGlzdAotIEFkZGVkIC0taW5zZXJ0fC1p IG1vZGUgdG8gYWxsb3cgZm9yIHBlb3BsZSBhZGRpbmcgQ0NzIHRvIGNvbW1pdCBtZXNzYWdlCiAg aW5zdGVhZCBvZiB0aGUgZS1tYWlsIGhlYWRlciAodGhlIGhlYWRlciBpcyB0aGUgZGVmYXVsdCkK LSBNb3ZlZCBjb21tb24gY29kZSBpbnRvIGZ1bmN0aW9ucwotIEFkZGVkIGxvZ2ljLCBzdWNoIHRo YXQgdGhlIHRvb2wgb25seSBpbnNlcnQncyBUbzogYW5kIENjOiBzdGF0ZW1lbnRzCiAgd2hpY2gg d2VyZSBub3QgdGhlcmUgYmVmb3JlLCBhbGxvd2luZyBmb3IgcnVubmluZyB0aGUgdG9vbCBtdWx0 aXBsZSB0aW1lcwogIG9uIHRoZSBzYW1lIDxwYXRjaGRpcj4KCkNoYW5nZXMgc2luY2UgdjI6Ci0g RGVsZXRlZCAtLXZlcnNpb24gYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSBBZGRlZCBzdWJy b3V0aW5lIHByb3RvdHlwZXMKLSBSZW1vdmVkIEFUIGFuZCBAbGlzdHMgZGVjbGFyYXRpb24gYW5k IHVzZWQgXEAgaW4gbGl0ZXJhbHMKLSBDaGFuZ2VkIHVzYWdlIG1lc3NhZ2UgYW5kIG9wdGlvbnMg YmFzZWQgb24gZmVlZGJhY2sKLSBJbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIFJlbW92ZWQgb2Nj dXJhbmNlcyBvZiBpbmRleCgpIGFuZCByZXBsYWNlZCB3aXRoIHJlZ2V4Ci0gUmVtb3ZlZCBub24t cGVybCBpZGlvbXMKLSBNb3ZlZCB1bmlxIHN0YXRlbWVudHMgdG8gbm9ybWFsaXplIGFuZCBhZGRl ZCBpbmZvIG9uIHdoYXQgbm9ybWFsaXplIGRvZXMKLSBSZWFkIEw6IHRhZ3MgZnJvbSBNQUlOVEFJ TkVSUyBmaWxlIGluc3RlYWQgb2YgdXNpbmcgaGV1cmlzdGljCi0gRml4ZWQgaXNzdWVzIHJlbGF0 ZWQgdG8gbWV0YWNoYXJhY3RlcnMgaW4gZ2V0bWFpbnRhaW5lcnMoKQotIEFsbG93IG11bHRpcGxl IC1hIHwgLS1hcmcgdmFsdWVzIChiZWNhdXNlIG9mIHRoaXMgcmVuYW1lZCAtLWFyZ3MpCi0gSWRl bnRpZnkgdGFncyB2aWEgcmVnZXgKLSBDQydzIGZyb20gdGFncyBhcmUgb25seSBpbnNlcnRlZCBp biB0aGUgbWFpbCBoZWFkZXIsIG5ldmVyIHRoZSBib2R5Ci0gVGhhdCBpcyB1bmxlc3MgdGhlIG5l dyBvcHRpb24gLS10YWdzY2MgaXMgdXNlZAotIEFkZGVkIHBvbGljeSBwcm9jZXNzaW5nIHdoaWNo IGluY2x1ZGVzIHJld29ya2luZyBpbnNlcnQoKQotIFJlcGxhY2VkIC1pfC0taW5zZXJ0IHdpdGgg LXB8LS1pbnNwYXRjaCBhbmQgLWN8LS1pbnNjb3ZlciBub3cgdXNpbmcgcG9saWNpZXMKLSBBZGRl ZCBuZXcgcG9saWNpZXMgdG8gY292ZXIgZm9yIGFsbCB1c2VyIHJlcXVlc3RzCi0gUmV3cm90ZSBo ZWxwIG1lc3NhZ2UgdG8gY2VudGVyIGFyb3VuZCB1c2FnZSBvZiBwb2xpY2llcwotIFJlb3JkZXJl ZCBzb21lIGNvZGUgKGUuZy4gaGVscCBzdHJpbmcgZmlyc3QgdG8gbWFrZSBjb2RlIG1vcmUgZWFz aWx5IHJlYWRhYmxlKQoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBNYWRlIGhlbHAgbWVzc2FnZSBjbGVh cmVyCi0gUmVwbGFjZWQgUFJPQ0VTU0lORyBQT0xJQ1kgd2l0aCBMT0NBVElPTgotIFJlbmFtZWQg LS1pbnNwYXRjaCAodG9wfGNjYm9keXxjYy0tLXxub25lKSB8IC1wICh0b3B8Y2Nib2R5fGNjLS0t fG5vbmUpCiAgdG8gLS1wYXRjaGNjIChoZWFkZXJ8Y29tbWl0fGNvbW1lbnR8bm9uZSkgfCAtcCAo aGVhZGVyfGNvbW1pdHxjb21tZW50fG5vbmUpCi0gUmVuYW1lZCAtLWluc2NvdmVyICh0b3B8Y2Nl bmR8bm9uZSkgfCAtYyAodG9wfGNjZW5kfG5vbmUpCiAgdG8gLS1jb3ZlcmNjIChoZWFkZXJ8ZW5k fG5vbmUpIHwgLWMgKGhlYWRlcnxlbmR8bm9uZSkKLSBSZW5hbWVkIHZhcmlhYmxlcyBhbmQgZnVu Y3Rpb25zIGluIHRoZSBjb2RlIHRvIG1hdGNoIHRoZSBvcHRpb25zCi0gQ2hhbmdlZCAkcGF0Y2hf cHJlZml4IHByb2Nlc3NpbmcKLSBDaGFuZ2VkIHNlYXJjaCBleHByZXNzaW9uIGZvciBpZGVudGlm eWluZyBjb3ZlciBsZXR0ZXJzCi0gUmVuYW1lZCAkcmVhZG1haWxpbmdsaXN0cyB0byAkZ2V0bWFp bGluZ2xpc3RzX2RvbmUKLSBVc2UgYXJyYXkgZm9ybSBvZiBvcGVuCi0gTW9yZSBmaWxlIGVycm9y IGhhbmRsaW5nICh1c2luZyBJTzo6SGFuZGxlKQotIEZpeGVkIGJ1Z2d5IEFORCBpbiBpZiBzdGF0 ZW1lbnQKLSBSZW1vdmVkIGNoZWNrIHdoZXRoZXIgZ2V0bWFpbnRhaW5lcnMgZXhpc3RzIGZvciBm dXR1cmUgcHJvb2ZpbmcKLSBBZGQgbG9naWMgdG8gd29yayBvdXQgLS1yZXJvbGwtY291bnQKCkNo YW5nZXMgc2luY2UgdjQ6Ci0gU3RyaXAgc29tZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gdGhl IGNvZGUKLSB3cml0ZWZpbGUoKSBub3cgdXNlcyB0aGUgLnRtcC1hbmQtcmVuYW1lIHBhdHRlcm4g dG8gYXZvaWQgZGF0YSBsb3NzCi0gUHJvdmlkZSAtLWdldC1tYWludGFpbmVycz0gb3B0aW9uIHRv IHNwZWNpZnkgcmVwbGFjZW1lbnQgZm9yCiAgZ2V0X21haW50YWluZXJzLnBsLiAgVGhpcyBpcyB1 c2VmdWwgZm9yIElhbidzIHVzZWNhc2UsIHNpbmNlIGl0CiAgYWxsb3dzIC0tZ2V0LW1haW50YWlu ZXJzPXRydWUsIHRvIGF2b2lkIGFkZGluZyBhbnkgTUFJTlRBSU5FUlMtYmFzZWQKICBpbmZvIGFu eXdoZXJlIHdoaWxlIHN0aWxsIGFkZGluZyBvdGhlciBDQ3MgKGVnIGZyb20gLXQpIGV2ZXJ5d2hl cmUuCi0gUmVmYWN0b3Igbm9ybWFsaXplKCkgc29tZXdoYXQgc28gdGhhdCBpdCB1c2VzIG9ubHkg JXNlZW4sIGFuZAogIGRvZXMgbm90IGFueSBsb25nZXIgbW9kaWZ5IGl0cyBhcmd1bWVudCBhcnJh eXMuCi0gRGUtZHVwZSBjYXNlLWluc2Vuc2l0aXZlbHkgKGJ5IG1ha2luZyBub3JtYWxpemUgdXNl IGxjKS4KCkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzog R2VvcmdlIER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgpDYzogSWFuIEphY2tz b24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hA c3VzZS5jb20+CkNjOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDYzogS29u cmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgpDYzogU3RlZmFubyBT dGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogVGltIERlZWdhbiA8dGltQHhl bi5vcmc+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBM YXJzIEt1cnRoIDxsYXJzLmt1cnRoQGNpdHJpeC5jb20+ClJlbGVhc2UtYWNrZWQtYnk6IEp1ZXJn ZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4KU2lnbmVkLW9mZi1ieTogSWFuIEphY2tzb24gPElh bi5KYWNrc29uQGV1LmNpdHJpeC5jb20+Ci0tLQogc2NyaXB0cy9hZGRfbWFpbnRhaW5lcnMucGwg fCA1NDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNTQ4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzY3JpcHRz L2FkZF9tYWludGFpbmVycy5wbAoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYWRkX21haW50YWluZXJz LnBsIGIvc2NyaXB0cy9hZGRfbWFpbnRhaW5lcnMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uMGY0YTRjZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvYWRkX21haW50 YWluZXJzLnBsCkBAIC0wLDAgKzEsNTQ4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgKGMpIDIw MTgsIExhcnMgS3VydGggPGxhcnMua3VydGhAY2l0cml4LmNvbT4KKyMKKyMgQWRkIG1haW50YWlu ZXJzIHRvIHBhdGNoZXMgZ2VuZXJhdGVkIHdpdGggZ2l0IGZvcm1hdC1wYXRjaAorIworIyBVc2Fn ZTogcGVybCBzY3JpcHRzL2FkZF9tYWludGFpbmVycy5wbCBbT1BUSU9OU10gLXBhdGNoZGlyIDxw YXRjaGRpcj4KKyMKKyMgUHJlcmVxdWlzaXRlczogRXhlY3V0ZQorIyAgICAgICAgICAgICAgICBn aXQgZm9ybWF0LXBhdGNoIC4uLiAtbyA8cGF0Y2hkaXI+IC4uLgorIworIyAgICAgICAgICAgICAg ICAuL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwgaXMgcHJlc2VudCBpbiB0aGUgdHJlZQorIwor IyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9u IDIKKwordXNlIHN0cmljdDsKKwordXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9f YWJicmV2KTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBMaXN0OjpNb3JlVXRpbHMgcXcodW5p cSk7Cit1c2UgSU86OkhhbmRsZTsKKworc3ViIGdldG1haW50YWluZXJzICgkJCQpOworc3ViIGdl dHRhZ3Nmcm9tcGF0Y2ggKCQkJDskKTsKK3N1YiBub3JtYWxpemUgKCQkKTsKK3N1YiBpbnNlcnQg KCQkJCQpOworc3ViIGhhc3RhZyAoJCQpOworCisjIFRvb2wgVmFyaWFibGVzCitteSAkdG9vbCA9 ICQwOworbXkgJHVzYWdlID0gPDxFT1Q7CitPUFRJT05TOgorLS0tLS0tLS0KK1VTQUdFOiAkdG9v bCBbb3B0aW9uc10gKC0tcGF0Y2hkaXIgfCAtZCkgPHBhdGNoZGlyPgorCisgIC0tcmVyb2xsLWNv dW50IDxuPiB8IC12IDxuPgorICAgIENob29zZSBwYXRjaCBmaWxlcyBmb3Igc3BlY2lmaWMgdmVy c2lvbi4gVGhpcyByZXN1bHRzIGludG8gdGhlCisgICAgZm9sbG93aW5nIGZpbHRlcnMgb24gPHBh dGNoZGlyPgorICAgIDA6IGRlZmF1bHQgLSAqLnBhdGNoCisgICAgPjE6IHY8bj4qLnBhdGNoCisK KyAgLS1wYXRjaGNjIChoZWFkZXJ8Y29tbWl0fGNvbW1lbnR8bm9uZSkgfCAtcCAoaGVhZGVyfGNv bW1pdHxjb21tZW50fG5vbmUpCisKKyAgICBJbnNlcnQgQ0MgbGluZXMgaW50byAqLnBhdGNoIGZp bGVzIGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisgICAgV2hlbiBgbm9uZWAgaXMgc3BlY2lm aWVkLCB0aGUgKi5wYXRjaCBmaWxlcyBhcmUgbm90IGNoYW5nZWQuCisgICAgU2VlIExPQ0FUSU9O UyBmb3IgYSBkZWZpbml0aW9uIG9mIHRoZSB2YXJpb3VzIGxvY2F0aW9ucy4KKworICAgIFRoZSBk ZWZhdWx0IGlzIGBoZWFkZXJgLgorCisgIC0tY292ZXJjYyAoaGVhZGVyfGVuZHxub25lKSB8IC1j IChoZWFkZXJ8ZW5kfG5vbmUpCisKKyAgICBJbnNlcnQgQ0MgbGluZXMgaW50byBjb3ZlciBsZXR0 ZXIgaW4gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gU2VlCisgICAgV2hlbiBgbm9uZWAgaXMgc3Bl Y2lmaWVkLCB0aGUgY292ZXIgbGV0dGVyIGlzIG5vdCBjaGFuZ2VkLgorICAgIExPQ0FUSU9OUyBm b3IgYSBkZWZpbml0aW9uIG9mIHRoZSB2YXJpb3VzIGxvY2F0aW9ucy4KKworICAgIFRoZSBkZWZh dWx0IGlzIGBoZWFkZXJgLgorCisgIC0tdGFnc2NjCisKKyAgICBJbiBhZGRpdGlvbiB0byB0aGUg b3V0cHV0IG9mIGdldF9tYWludGFpbmVyLnBsLCBpbmNsdWRlIGVtYWlsCisgICAgYWRkcmVzc2Vz IGZyb20gY29tbWl0IHRhZ3MgKGUuZy4sIFJldmlld2VkLWJ5LCBUZXN0ZWQtYnksIC4uLikgaW4K KyAgICB0aGUgbGlzdCBvZiBDQyBsaW5lcyB0byBpbnNlcnQuCisKKyAgICBUaGVzZSBleHRyYSBs aW5lcyB3aWxsIGJlIGluc2VydGVkIGFzIHNwZWNpZmllZCBieSB0aGUgLS1wYXRjaGNjCisgICAg YW5kIC0tY292ZXJjYyBvcHRpb25zLiBXaGVuIHVzZWQgd2l0aCBgLS1wYXRjaGNjIGNvbW1pdGAs CisgICAgdGhpcyB3aWxsIGR1cGxpY2F0ZSBlLW1haWwgYWRkcmVzc2VzIGluIHRoZSBjb21taXQg bWVzc2FnZS4KKworICAtLXRhZ3MgfCAtdAorCisgICAgQXMgYWJvdmUsIGJ1dCB0aGUgaW5zZXJ0 IGxvY2F0aW9uIGlzIHNwZWNpYWwtY2FzZWQ6IGUtbWFpbCBhZGRyZXNzZXMKKyAgICB3aWxsIGFs d2F5cyBiZSBpbnNlcnRlZCBpbnRvIHRoZSBgaGVhZGVyYCBvZiBwYXRjaGVzIGFuZCB0aGUgY292 ZXIgbGV0dGVyLgorCisgIC0tYXJnIDxhcmd1bWVudD4gfCAtYSA8YXJndW1lbnQ+IC4uLgorICAg IEFyZ3VtZW50cyBwYXNzZWQgb24gdG8gZ2V0X21haW50YWluZXIucGwKKyAgICBUaGlzIG9wdGlv biBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywgZS5nLiAtYSA8YTE+IC1hIDxhMj4gLi4uCisK KyAgLS12ZXJib3NlCisgICAgU2hvdyBtb3JlIG91dHB1dAorCisgIC0taGVscCB8IC1oCisgICAg U2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KKworTE9DQVRJT05TOgorLS0tLS0tLS0tLQorCisg ICoucGF0Y2ggYW5kIGNvdmVyIGxldHRlcnMgZmlsZXMgY29uc2lzdCBvZiBzZXZlcmFsIHNlY3Rp b25zIHJlbGV2YW50CisgICB0byBwcm9jZXNzaW5nOgorCisgIDxoZWFkZXI+OiAgVGhpcyBpcyB0 aGUgZW1haWwgaGVhZGVyIGNvbnRhaW5pbmcgZW1haWwgcmVsYXRlZCBpbmZvcm1hdGlvbgorICAg ICAgICAgICAgIEl0IGVuZHMgd2l0aCB0aGUgU3ViamVjdDogbGluZQorCisgIDxjb21taXQ+OiBU aGlzIGlzIHRoZSBlbWFpbCBib2R5IHRoYXQgZW5kcyB1cCBpbiB0aGUgY29tbWl0IG1lc3NhZ2Uu CisgICAgICAgICAgICAgSXQgZW5kcyB3aXRoIC0tLS4gIENDIGxpbmVzIGFkZGVkIGhlcmUgd2ls bCBiZSBjaGVja2VkCisgICAgICAgICAgICAgaW50byB0aGUgZ2l0IHRyZWUgb24gY29tbWl0LiAg T25seSBhcHBsaWNhYmxlIHRvIG5vcm1hbAorICAgICAgICAgICAgIHBhdGNoIGZpbGVzLgorCisg IDxjb21tZW50PjogVGhpcyBpcyB0aGUgJ2NvbW1lbnQgZm9yIHJldmlld2Vycycgc2VjdGlvbiwg YWZ0ZXIgdGhlCisgICAgICAgICAgICAgLS0tIGJ1dCBiZWZvcmUgdGhlIGRpZmYgYWN0dWFsbHkg c3RhcnRzLiBDQ3MgYWRkZWQgaGVyZQorICAgICAgICAgICAgIGFyZSBwcm9jZXNzZWQgYnkgZ2l0 IHNlbmQtZW1haWwsIGJ1dCBhcmUgbm90IGNoZWNrZWQgaW50bworICAgICAgICAgICAgIHRoZSBn aXQgdHJlZSBvbiBjb21taXQuICBPbmx5IGFwcGxpY2FibGUgdG8gbm9ybWFsIHBhdGNoCisgICAg ICAgICAgICAgZmlsZXMuCisKKyAgPGVuZD46ICAgICBUaGUgcGFydCBvZiBhIGNvdmVyIGxldHRl ciBqdXN0IGJlZm9yZSBgLS0gYCAod2hpY2ggbm9ybWFsbHkKKyAgICAgICAgICAgICBiZWdpbnMg YSBkaWZmc3RhdCkuICBPbmx5IGFwcGxpY2FibGUgdG8gY292ZXIgbGV0dGVycy4KKworICBERUZB VUxUIEJFSEFWSU9VUjoKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICogZ2V0X21haW50YWluZXIg aXMgY2FsbGVkIG9uIGVhY2ggcGF0Y2ggdG8gZmluZCBlbWFpbCBhZGRyZXNzZXMKKyAgICBvZiBt YWludGFpbmVycy9yZXZpZXdlcnMgZm9yIHRoYXQgcGF0Y2gKKyAgKiBBbGwgb2YgdGhlIGFib3Zl IGFkZHJlc3NlcyBhcmUgYWRkZWQgdG8gdGhlIENDIG1haWwgaGVhZGVycworICAgIG9mIGVhY2gg cGF0Y2gKKyAgKiBBbGwgb2YgdGhlIGFib3ZlIGFkZHJlc3NlcyBhcmUgYWRkZWQgdG8gdGhlIEND IG1haWwgaGVhZGVycworICAgIG9mIHRoZSBjb3ZlciBsZXR0ZXIKKworV09SS0ZMT1c6CistLS0t LS0tLS0KKyAgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIHRo ZSBmb2xsb3dpbmcgd29ya2Zsb3cKKworICBTdGVwIDE6IGdpdCBmb3JtYXQtcGF0Y2ggLi4uIC1v IDxwYXRjaGRpcj4gLi4uCisgIFN0ZXAgMjogLi9zY3JpcHRzL2FkZF9tYWludGFpbmVycy5wbCAt ZCA8cGF0Y2hkaXI+CisgICAgICAgICAgVGhpcyBvdmVyd3JpdGVzICoucGF0Y2ggZmlsZXMgaW4g PHBhdGNoZGlyPiBidXQgbWFrZXMgYSBiYWNrdXAKKyAgU3RlcCAzOiBnaXQgc2VuZC1lbWFpbCAt dG8geGVuLWRldmVsXEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyA8cGF0Y2hkaXI+LyoucGF0Y2gKK0VP VAorCisjIENvbnN0YW50cyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gTE9DQVRJT05TCisKKyMg Q29uc3RhbnRzIGZvciAtcHwtLXBhdGNoY2MgYW5kIC1jfC0tY292ZXJjYyBvcHRpb24gcHJvY2Vz c2luZworbXkgQHBsb2NhdGlvbnM9ICgiaGVhZGVyIiwgImNvbW1pdCIsICJjb21tZW50IiwgIm5v bmUiKTsKK215IEBjbG9jYXRpb25zPSAoImhlYWRlciIsICJlbmQiLCAibm9uZSIpOworCisjIEhh c2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbW9kZSB2YWx1ZSBtYXBzIG9udG8gd2hpY2gg c2VhcmNoIHN0cmluZworbXkgJWluc3NlYXJjaCA9ICgKKyAgICAiaGVhZGVyIiAgPT4gIkRhdGU6 IiwgICAgICAgICAgIyBJbnNlcnQgYmVmb3JlIERhdGU6CisgICAgImNvbW1pdCIgID0+ICJTaWdu ZWQtb2ZmLWJ5OiIsICMgSW5zZXJ0IGJlZm9yZSBTaWduZWQtb2ZmLWJ5OgorICAgICJjb21tZW50 IiA9PiAiLS0tIiwgICAgICAgICAgICAjIEluc2VydCBhZnRlciAtLS0KKyAgICAiZW5kIiAgICAg PT4gIi0tICIsICAgICAgICAgICAgIyBJbnNlcnQgYmVmb3JlICctLSAnCispOworCisjIEhhc2gg aXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBmb3IgYSBnaXZlbiBtb2RlIHdlIGluc2VydCBD Q3MgYWZ0ZXIKKyMgdGhlIHNlYXJjaCBzdHJpbmcgb3IgYmVmb3JlCitteSAlaW5zYWZ0ZXIgPSAo CisgICAgImhlYWRlciIgID0+IDAsCisgICAgImNvbW1pdCIgID0+IDAsCisgICAgImNvbW1lbnQi ID0+IDEsCisgICAgImVuZCIgICAgID0+IDAsCispOworCisjIFRoZSBmb2xsb3dpbmcgc3Vicm91 dGluZXMgdGFrZSBhIGFyZWZlcmVuY2UgdG8gYXJyYXlzIG9mCisjIC0gQGhlYWRlcjogY29udGFp bnMgQ0NzIGZyb20gKi1ieTogdGFncyBhbmQgVE9zIGZyb20gbWFpbGluZyBsaXN0cworIyAtIEBj YzogIGNvbnRhaW5zIGFsbCBvdGhlciBDQydzCisjIEl0IHdpbGwgdGhlbiBhcHBseSB0aGUgY29y ZWN0IGxvY2F0aW9ucyBvbiB0aGUgaW5wdXQgZmlsZQorCitzdWIgYXBwbHlsb2NhdGlvbl9oZWFk ZXIgKCQkJCkgeworICAgIG15ICgkZmlsZSwgJHJoZWFkZXIsICRyY2MpID0gQF87CisgICAgbXkg JGluc2VydCA9IGpvaW4oIlxuIiwgdW5pcSAoQCRyaGVhZGVyLCBAJHJjYykpOworICAgIGluc2Vy dCgkZmlsZSAsICRpbnNlcnQsICRpbnNzZWFyY2h7aGVhZGVyfSwgJGluc2FmdGVye2hlYWRlcn0p OworfQorCitzdWIgYXBwbHltaXhlZGxvY2F0aW9uICgkJCQkKSB7CisgICAgbXkgKCRmaWxlLCAk cmhlYWRlciwgJHJjYywgJG1vZGUpID0gQF87CisgICAgbXkgJGhlYWRlciA9IGpvaW4oIlxuIiwg QCRyaGVhZGVyKTsKKyAgICBteSAkY2MgID0gam9pbigiXG4iLCBAJHJjYyk7CisgICAgIyBJbnNl cnQgc25pcHBldHMgaW50byBmaWxlcworICAgIGluc2VydCgkZmlsZSAsICRjYywgJGluc3NlYXJj aHskbW9kZX0sICRpbnNhZnRlcnskbW9kZX0pOworICAgICMgVGhlIGhlYWRlcgorICAgIGluc2Vy dCgkZmlsZSAsICRoZWFkZXIsICRpbnNzZWFyY2h7aGVhZGVyfSwgJGluc2FmdGVye2hlYWRlcn0p OworfQorCitzdWIgYXBwbHlsb2NhdGlvbl9jb21taXQoJCQkKSB7CisgICAgbXkgKCRmaWxlLCAk cmhlYWRlciwgJHJjYykgPSBAXzsKKyAgICBhcHBseW1peGVkbG9jYXRpb24oJGZpbGUsICRyaGVh ZGVyLCAkcmNjLCAiY29tbWl0Iik7Cit9CisKKyMgVXNlIGEgZGlmZmVyZW50IG5hbWUgdG8gbWFr ZSBzdXJlIHBlcmwgZG9lc24ndCB0aHJvdyBhIHN5bnRheCBlcnJvcgorc3ViIGFwcGx5bG9jYXRp b25fY29tbWVudCAoJCQkKSB7CisgICAgbXkgKCRmaWxlLCAkcmhlYWRlciwgJHJjYykgPSBAXzsK KyAgICBhcHBseW1peGVkbG9jYXRpb24oJGZpbGUsICRyaGVhZGVyLCAkcmNjLCAiY29tbWVudCIp OworfQorCitzdWIgYXBwbHlsb2NhdGlvbl9lbmQgKCQkJCkgeworICAgIG15ICgkZmlsZSwgJHJo ZWFkZXIsICRyY2MpID0gQF87CisgICAgYXBwbHltaXhlZGxvY2F0aW9uKCRmaWxlLCAkcmhlYWRl ciwgJHJjYywgImVuZCIpOworfQorCitzdWIgYXBwbHlsb2NhdGlvbl9ub25lICgkJCQpIHsKKyAg ICByZXR1cm47Cit9CisKKyMgSGFzaCBmb3IgbG9jYXRpb24gZnVuY3Rpb25zCitteSAlYXBwbHls b2NhdGlvbiA9ICgKKyAgICAiaGVhZGVyIiAgPT4gXCZhcHBseWxvY2F0aW9uX2hlYWRlciwKKyAg ICAiY29tbWl0IiAgPT4gXCZhcHBseWxvY2F0aW9uX2NvbW1pdCwKKyAgICAiY29tbWVudCIgPT4g XCZhcHBseWxvY2F0aW9uX2NvbW1lbnQsCisgICAgImVuZCIgICAgID0+IFwmYXBwbHlsb2NhdGlv bl9lbmQsCisgICAgIm5vbmUiICAgID0+IFwmYXBwbHlsb2NhdGlvbl9ub25lLAorKTsKKworIyBB cmd1bWVudHMgLyBPcHRpb25zCitteSAkaGVscCA9IDA7CitteSAkcGF0Y2hfZGlyID0gMDsKK215 IEBnZXRfbWFpbnRhaW5lcl9hcmdzID0gKCk7CitteSAkdmVyYm9zZSA9IDA7CitteSAkcmVyb2xs Y291bnQgPSAwOworbXkgJHRhZ3MgPSAwOworbXkgJHRhZ3NjYyA9IDA7CitteSAkcGxvY2F0aW9u ID0gImhlYWRlciI7CitteSAkY2xvY2F0aW9uID0gImhlYWRlciI7CisKKyMgQ29uc3RhbnRzCisj IEtlZXAgdGhlc2UgYXMgY29uc3RhbnRzLCBpbiBjYXNlIHdlIHdhbnQgdG8gbWFrZSB0aGVzZSBj b25maWd1cmFibGUKKyMgaW4gZnV0dXJlCitteSAkQ0MgICAgICAgICAgICAgICAgICA9ICJDYzoi OyAjIE5vdGU6IGdpdC1zZW5kLW1haWwgcmVxdWlyZXMgQ2M6CitteSAkVE8gICAgICAgICAgICAg ICAgICA9ICJUbzoiOworbXkgJGNvdmVyX2xldHRlciAgICAgICAgPSAiMDAwMC1jb3Zlci1sZXR0 ZXIucGF0Y2giOworbXkgJGdldF9tYWludGFpbmVyICAgICAgPSAiLi9zY3JpcHRzL2dldF9tYWlu dGFpbmVyLnBsIjsKK215ICRwYXRjaF9leHQgICAgICAgICAgID0gIi5wYXRjaCI7CitteSAkbWFp bnRhaW5lcnMgICAgICAgICA9ICJNQUlOVEFJTkVSUyI7CisKK2lmICghR2V0T3B0aW9ucygKKyAg ICAgICAgICAgICAgICAnZHxwYXRjaGRpcj1zJyAgICAgPT4gXCRwYXRjaF9kaXIsCisgICAgICAg ICAgICAgICAgJ3Z8cmVyb2xsLWNvdW50PWknID0+IFwkcmVyb2xsY291bnQsCisgICAgICAgICAg ICAgICAgJ3B8cGF0Y2hjYz1zJyAgICAgID0+IFwkcGxvY2F0aW9uLAorICAgICAgICAgICAgICAg ICdjfGNvdmVyY2M9cycgICAgICA9PiBcJGNsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAndHx0 YWdzJyAgICAgICAgICAgPT4gXCR0YWdzLAorICAgICAgICAgICAgICAgICd0YWdzY2MnICAgICAg ICAgICA9PiBcJHRhZ3NjYywKKyAgICAgICAgICAgICAgICAnYXxhcmc9cycgICAgICAgICAgPT4g XEBnZXRfbWFpbnRhaW5lcl9hcmdzLAorICAgICAgICAgICAgICAgICdnZXQtbWFpbnRhaW5lcnM9 cycgPT4gXCRnZXRfbWFpbnRhaW5lciwKKyAgICAgICAgICAgICAgICAndmVyYm9zZScgICAgICAg ICAgPT4gXCR2ZXJib3NlLAorICAgICAgICAgICAgICAgICdofGhlbHAnICAgICAgICAgICA9PiBc JGhlbHAsCisgICAgICAgICAgICAgICAgKSkgeworICAgIGRpZSAiJHRvb2w6IGludmFsaWQgYXJn dW1lbnQgLSB1c2UgLS1oZWxwIGlmIG5lY2Vzc2FyeVxuIjsKK30KKworaWYgKCRoZWxwKSB7Cisg ICAgcHJpbnQgJHVzYWdlOworICAgIGV4aXQgMDsKK30KKworaWYgKCEkcGF0Y2hfZGlyKSB7Cisg ICAgZGllICIkdG9vbDogRGlyZWN0b3J5IC1kfC0tcGF0Y2hkaXIgbm90IHNwZWNpZmllZFxuIjsK K30KKworaWYgKCEgLWUgJHBhdGNoX2RpcikgeworICAgIGRpZSAiJHRvb2w6IERpcmVjdG9yeSAk cGF0Y2hfZGlyIGRvZXMgbm90IGV4aXN0XG4iOworfQorCisjIENhbGN1bGF0ZSB0aGUgJHBhdGNo X3ByZWZpeAorbXkgJHBhdGNoX3ByZWZpeCA9ICIiOworaWYgKCRyZXJvbGxjb3VudCA9PSAwKSB7 CisgICAgIyBJZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSAtdiBhbmQgd2UgYXJlIGhlcmUsIHRo ZW4KKyAgICAjIC0gZWl0aGVyIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkKKyAgICAjIC0gb3IgaXQg Y29udGFpbnMgc29tZSB2ZXJzaW9uIG9mIGEgcGF0Y2gKKyAgICAjIEluIHRoaXMgY2FzZSB3ZSBz ZWFyY2ggZm9yIHRoZSBmaXJzdCBwYXRjaCBhbmQKKyAgICAjIHdvcmsgb3V0IHRoZSB2ZXJzaW9u CisgICAgJCE9MDsKKyAgICBteSBAY292ZXJsZXR0ZXJzID0gZ2xvYigkcGF0Y2hfZGlyLicvKicu JHBhdGNoX2V4dCk7CisgICAgaWYgKCEkISAmJiBzY2FsYXIgQGNvdmVybGV0dGVycykgeworICAg ICAgICBpZiAoJGNvdmVybGV0dGVyc1swXSA9fiAvXC92KFswLTldKyktXFEkY292ZXJfbGV0dGVy XEUvKSB7CisgICAgICAgICAgICAkcmVyb2xsY291bnQgPSAkMTsKKyAgICAgICAgfQorICAgIH0K K30KK2lmICgkcmVyb2xsY291bnQgPiAwKSB7CisgICAgJHBhdGNoX3ByZWZpeCA9ICJ2Ii4kcmVy b2xsY291bnQuIi0iOworfQorCitpZiAoICEgZ3JlcCAkXyBlcSAkcGxvY2F0aW9uLCBAcGxvY2F0 aW9ucykgeworICAgIGRpZSAiJHRvb2w6IEludmFsaWQgLXB8LS1wYXRjaGNjIHZhbHVlXG4iOwor fQoraWYgKCAhIGdyZXAgJF8gZXEgJGNsb2NhdGlvbiwgQGNsb2NhdGlvbnMpIHsKKyAgICBkaWUg IiR0b29sOiBJbnZhbGlkIC1jfC0tY292ZXJjYyB2YWx1ZVxuIjsKK30KKworIyBHZXQgdGhlIGxp c3Qgb2YgcGF0Y2hlcworbXkgJGhhc19jb3Zlcl9sZXR0ZXIgPSAwOworbXkgJGNvdmVyX2xldHRl cl9maWxlOworbXkgJHBhdHRlcm4gPSAkcGF0Y2hfZGlyLicvJy4kcGF0Y2hfcHJlZml4LidbMC05 XVswLTldWzAtOV1bMC05XSonLiRwYXRjaF9leHQ7CisKKyQhPTA7CitteSBAcGF0Y2hlcyA9IGds b2IoJHBhdHRlcm4pOworaWYgKCQhKSB7CisgICAgZGllICIkdG9vbDogRGlyZWN0b3J5ICRwYXRj aF9kaXIgY29udGFpbnMgbm8gcGF0Y2hlc1xuIjsKK30KK2lmICghc2NhbGFyIEBwYXRjaGVzKSB7 CisgICAgZGllICIkdG9vbDogRGlyZWN0b3J5ICRwYXRjaF9kaXIgY29udGFpbnMgbm8gbWF0Y2hp bmcgcGF0Y2hlcy5cbiIuCisgICAgICAgICAiUGxlYXNlIHRyeSAtLXJlcm9sbC1jb3VudCA8bj4g fCAtdiA8bj5cbiI7Cit9CisKKyMgRG8gdGhlIGFjdHVhbCBwcm9jZXNzaW5nCitteSAkZmlsZTsK K215IEBjb21iaW5lZF9oZWFkZXI7CitteSBAY29tYmluZWRfY2M7CisKK2ZvcmVhY2ggbXkgJGZp bGUgKEBwYXRjaGVzKSB7CisgICAgaWYgKCRmaWxlID1+IC9cL1xRJHBhdGNoX3ByZWZpeCRjb3Zl cl9sZXR0ZXJcRS8pIHsKKyAgICAgICAgJGhhc19jb3Zlcl9sZXR0ZXIgPSAxOworICAgICAgICAk Y292ZXJfbGV0dGVyX2ZpbGUgPSAkZmlsZTsKKyAgICB9IGVsc2UgeworICAgICAgICBteSBAaGVh ZGVyOyAgICAgIyBUbzogbGlzdHMgcmV0dXJuZWQgYnkgZ2V0X21haW50YWluZXJzLnBsCisgICAg ICAgIG15IEBoZWFkZXJwYXRjaDsjIFRvOiBlbnRyaWVzIGluICoucGF0Y2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWxzbyBpbmNsdWRlcyBD QydzIGZyb20gdGFncyBhcyB3ZSBkbyBub3Qgd2FudAorICAgICAgICAgICAgICAgICAgICAgICAg IyBlbnRyaWVzIGluIHRoZSBib2R5IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMg Q0M6IGxhcnMua3VydGhAY2l0cml4LmNvbQorICAgICAgICAgICAgICAgICAgICAgICAgIyAuLi4K KyAgICAgICAgICAgICAgICAgICAgICAgICMgVGVzdGVkLWJ5OiBsYXJzLmt1cnRoQGNpdHJpeC5j b20KKworICAgICAgICBteSBAY2M7ICAgICAgICAgIyBDYzogbWFpbnRhaW5lcnMgcmV0dXJuZWQg YnkgZ2V0X21haW50YWluZXJzLnBsCisgICAgICAgIG15IEBjY3BhdGNoOyAgICAjIENjOiBlbnRy aWVzIGluICoucGF0Y2gKKyAgICAgICAgbXkgQGV4dHJhcGF0Y2g7ICMgQ2M6IGZvciBBQiwgUkIs IFJBQiBpbiAqLnBhdGNoCisKKyAgICAgICAgcHJpbnQgIlByb2Nlc3Npbmc6ICIuYmFzZW5hbWUo JGZpbGUpLiJcbiI7CisKKyAgICAgICAgIyBSZWFkIHRhZ3MgZnJvbSBvdXRwdXQgb2YgZ2V0X21h aW50YWluZXJzLnBsCisgICAgICAgICMgTGlzdHMgZ28gaW50byBAaGVhZGVyIGFuZCBldmVyeXRo aW5nIGVsc2UgaW50byBAY2MKKyAgICAgICAgZ2V0bWFpbnRhaW5lcnMoJGZpbGUsIFxAaGVhZGVy LCBcQGNjKTsKKworICAgICAgICAjIFJlYWQgYWxsIGxpbmVzIHdpdGggQ0MgJiBUTyBmcm9tIHRo ZSBwYXRjaCBmaWxlICh0aGVzZSB3aWxsCisgICAgICAgICMgbGlrZWx5IGNvbWUgZnJvbSB0aGUg Y29tbWl0IG1lc3NhZ2UpLiBBbHNvIHJlYWQgdGFncy4KKyAgICAgICAgZ2V0dGFnc2Zyb21wYXRj aCgkZmlsZSwgXEBoZWFkZXJwYXRjaCwgXEBjY3BhdGNoLCBcQGV4dHJhcGF0Y2gpOworCisgICAg ICAgICMgV2l0aCAtdHwtLXRhZ3Mgb25seSBhZGQgQGV4dHJhcGF0Y2ggdG8gQGhlYWRlciBhbmQg QGNvbWJpbmVkX2hlYWRlcgorICAgICAgICAjIFdpdGggLS10YWdzY2MgdHJlYXQgdGFncyBhcyBD QyB0aGF0IGNhbWUgZnJvbSB0aGUgKi5wYXRjaCBmaWxlCisgICAgICAgIGlmICgkdGFncyAmJiAh JHRhZ3NjYykgeworICAgICAgICAgICAgIyBDb3B5IHRoZXNlIGFsd2F5cyBvbnRvIHRoZSBUTyBy ZWxhdGVkIGFycmF5cworICAgICAgICAgICAgcHVzaCBAaGVhZGVyLCBAZXh0cmFwYXRjaDsKKyAg ICAgICAgICAgIHB1c2ggQGNvbWJpbmVkX2hlYWRlciwgQGV4dHJhcGF0Y2g7CisgICAgICAgIH0g ZWxzaWYgKCR0YWdzY2MpIHsKKyAgICAgICAgICAgICMgVHJlYXQgdGhlc2UgYXMgaWYgdGhleSBj YW1lIGZyb20gQ0MncworICAgICAgICAgICAgcHVzaCBAY2NwYXRjaCwgQGV4dHJhcGF0Y2g7Cisg ICAgICAgICAgICBwdXNoIEBjb21iaW5lZF9jYywgQGV4dHJhcGF0Y2g7CisgICAgICAgIH0KKwor ICAgICAgICAjIEluIHRoaXMgc2VjdGlvbiB3ZSBub3JtYWxpemUgdGhlIGxpc3RzLiBXZSByZW1v dmUgZW50cmllcworICAgICAgICAjIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIHBhdGNoLCBmcm9t IEBjYyBhbmQgQHRvCisgICAgICAgIG15IEBoZWFkZXJfb25seSA9IG5vcm1hbGl6ZShcQGhlYWRl ciwgXEBoZWFkZXJwYXRjaCk7CisgICAgICAgIG15IEBjY19vbmx5ICA9IG5vcm1hbGl6ZShcQGNj LCBcQGNjcGF0Y2gpOworCisgICAgICAgICMgQXBwbHkgdGhlIGxvY2F0aW9uCisgICAgICAgICRh cHBseWxvY2F0aW9ueyRwbG9jYXRpb259KCRmaWxlLCBcQGhlYWRlcl9vbmx5LCBcQGNjX29ubHkp OworICAgIH0KK30KKworIyBEZWFsIHdpdGggdGhlIGNvdmVyIGxldHRlcgoraWYgKCRoYXNfY292 ZXJfbGV0dGVyKSB7CisgICAgbXkgQGhlYWRlcnBhdGNoOyAgICMgRW50cmllcyBpbnNlcnRlZCBh dCB0aGUgaGVhZGVyCisgICAgbXkgQGNjcGF0Y2g7ICAgICMgQ2M6IGVudHJpZXMgaW4gKi5wYXRj aAorCisgICAgcHJpbnQgIlByb2Nlc3Npbmc6ICIuYmFzZW5hbWUoJGNvdmVyX2xldHRlcl9maWxl KS4iXG4iOworCisgICAgIyBSZWFkIGFsbCBsaW5lcyB3aXRoIENDICYgVE8gZnJvbSB0aGUgcGF0 Y2ggZmlsZSBzdWNoIHRoYXQgc3Vic2VxdWVudAorICAgICMgY2FsbHMgZG9uJ3QgbGVhZCB0byBk dXBsaWNhdGlvbgorICAgIGdldHRhZ3Nmcm9tcGF0Y2goJGNvdmVyX2xldHRlcl9maWxlLCBcQGhl YWRlcnBhdGNoLCBcQGNjcGF0Y2gpOworCisgICAgIyBJbiB0aGlzIHNlY3Rpb24gd2Ugbm9ybWFs aXplIHRoZSBsaXN0cy4gV2UgcmVtb3ZlIGVudHJpZXMKKyAgICAjIHRoYXQgYXJlIGFscmVhZHkg aW4gdGhlIHBhdGNoLCBmcm9tIEBjYyBhbmQgQHRvCisgICAgbXkgQGhlYWRlcl9vbmx5ID0gbm9y bWFsaXplKFxAY29tYmluZWRfaGVhZGVyLCBcQGhlYWRlcnBhdGNoKTsKKyAgICBteSBAY2Nfb25s eSAgPSBub3JtYWxpemUoXEBjb21iaW5lZF9jYywgXEBjY3BhdGNoKTsKKworICAgICMgQXBwbHkg dGhlIGxvY2F0aW9uCisgICAgJGFwcGx5bG9jYXRpb257JGNsb2NhdGlvbn0oJGNvdmVyX2xldHRl cl9maWxlLCBcQGhlYWRlcl9vbmx5LCBcQGNjX29ubHkpOworCisgICAgcHJpbnQgIlxuRG9uJ3Qg Zm9yZ2V0IHRvIGFkZCB0aGUgc3ViamVjdCBhbmQgbWVzc2FnZSB0byAiLgorICAgICAgICAgICRj b3Zlcl9sZXR0ZXJfZmlsZS4iXG4iOworfQorCitwcmludCAiVGhlbiBwZXJmb3JtOlxuIi4KKyAg ICAgICJnaXQgc2VuZC1lbWFpbCAtdG8geGVuLWRldmVsXEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyAi LgorICAgICAgJHBhdGNoX2Rpci4nLycuJHBhdGNoX3ByZWZpeC4iKi5wYXRjaCIuIlxuIjsKKwor ZXhpdCAwOworCitteSAkZ2V0bWFpbGluZ2xpc3RzX2RvbmUgPSAwOworbXkgQG1haWxpbmdsaXN0 cyA9ICgpOworCitzdWIgZ2V0bWFpbGluZ2xpc3RzICgpIHsKKyAgICMgUmVhZCBtYWlsaW5nIGxp c3QgZnJvbSBNQUlOVEFJTkVSUyBmaWxlIGFuZCBjb3B5CisgICAjIGEgbGlzdCBvZiBlLW1haWwg YWRkcmVzc2VzIHRvIEBtYWlsaW5nbGlzdHMKKyAgICBpZiAoISRnZXRtYWlsaW5nbGlzdHNfZG9u ZSkgeworICAgICAgICBpZiAoLWUgJG1haW50YWluZXJzKSB7CisgICAgICAgICAgICBteSAkZmg7 CisgICAgICAgICAgICBteSAkbGluZTsKKyAgICAgICAgICAgIG9wZW4oJGZoLCAiPCIsICRtYWlu dGFpbmVycykgb3IgZGllICQhOworICAgICAgICAgICAgd2hpbGUgKG15ICRsaW5lID0gPCRmaD4p IHsKKyAgICAgICAgICAgICAgICBjaG9tcCAkbGluZTsKKyAgICAgICAgICAgICAgICBpZiAoJGxp bmUgPX4gL15MOltbOmJsYW5rOl1dKy9tKSB7CisgICAgICAgICAgICAgICAgICAgcHVzaCBAbWFp bGluZ2xpc3RzLCAkJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICAkZmgtPmVycm9yIGFuZCBkaWUgJCE7CisgICAgICAgICAgICBjbG9zZSAkZmggb3IgZGll ICQhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIldhcm5pbmc6IGZpbGUg JyRtYWludGFpbmVycycgZG9lcyBub3QgZXhpc3RcbiI7CisgICAgICAgICAgICBwcmludCAiV2Fy bmluZzogTWFpbGluZyBsaXN0cyB3aWxsIGJlIHRyZWF0ZWQgYXMgQ0Mnc1xuIjsKKyAgICAgICAg fQorICAgICMgRG9uJ3QgdHJ5IGFnYWluLCBldmVuIGlmIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGRv ZXMgbm90IGV4aXN0CisgICAgJGdldG1haWxpbmdsaXN0c19kb25lID0gMTsKKyAgICAjIFJlbW92 ZSBhbnkgZHVwbGljYXRlcworICAgIEBtYWlsaW5nbGlzdHMgPSB1bmlxIEBtYWlsaW5nbGlzdHM7 CisgICAgfQorfQorCitzdWIgaXNtYWlsaW5nbGlzdCAoJCkgeworICAgIG15ICgkY2hlY2spID0g QF87CisgICAgIyBHZXQgdGhlIG1haWxpbmcgbGlzdCBpbmZvcm1hdGlvbgorICAgIGdldG1haWxp bmdsaXN0cygpOworICAgICMgRG8gdGhlIGNoZWNrCisgICAgaWYgKCBncmVwIHsgJF8gZXEgJGNo ZWNrfSBAbWFpbGluZ2xpc3RzKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1 cm4gMDsKK30KKworc3ViIGdldG1haW50YWluZXJzICgkJCQpIHsKKyAgICBteSAoJGZpbGUsICRy dG8sICRyY2MpID0gQF87CisgICAgbXkgJGZoOworICAgIG9wZW4oJGZoLCAiLXwiLCAkZ2V0X21h aW50YWluZXIsIEBnZXRfbWFpbnRhaW5lcl9hcmdzLCAnLWYnLCAkZmlsZSkKKyAgICAgICAgb3Ig ZGllICJGYWlsZWQgdG8gb3BlbiAnJGdldF9tYWludGFpbmVyJ1xuIjsKKyAgICB3aGlsZShteSAk bGluZSA9IDwkZmg+KSB7CisgICAgICAgIGNob21wICRsaW5lOworICAgICAgICAjIEtlZXAgbGlz dHMgYW5kIENDJ3Mgc2VwYXJhdGVseSBhcyB3ZSBkb250IHdhbnQgdGhlbSBpbgorICAgICAgICAj IHRoZSBjb21taXQgbWVzc2FnZSB1bmRlciBhIENjOiBsaW5lCisgICAgICAgIGlmIChpc21haWxp bmdsaXN0KCRsaW5lKSkgeworICAgICAgICAgICAgcHVzaCBAJHJ0bywgJFRPLiIgIi4kbGluZTsK KyAgICAgICAgICAgIHB1c2ggQGNvbWJpbmVkX2hlYWRlciwgJFRPLiIgIi4kbGluZTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2ggQCRyY2MsICRDQy4iICIuJGxpbmU7CisgICAg ICAgICAgICBwdXNoIEBjb21iaW5lZF9jYywgJENDLiIgIi4kbGluZTsKKyAgICAgICAgfQorICAg IH0KKyAgICAkZmgtPmVycm9yIGFuZCBkaWUgJCE7CisgICAgY2xvc2UgJGZoIG9yIGRpZSAkITsK K30KKworc3ViIGdldHRhZ3Nmcm9tcGF0Y2ggKCQkJDskKSB7CisgICAgbXkgKCRmaWxlLCAkcnRv LCAkcmNjLCAkcmV4dHJhKSA9IEBfOworICAgIG15ICRmaDsKKworICAgIG9wZW4oJGZoLCAiPCIs ICRmaWxlKQorICAgICAgICBvciBkaWUgIkZhaWxlZCB0byBvcGVuICckZmlsZSdcbiI7CisgICAg d2hpbGUobXkgJGxpbmUgPSA8JGZoPikgeworICAgICAgICBjaG9tcCAkbGluZTsKKyAgICAgICAg bXkgJG5saW5lOworCisgICAgICAgIGlmIChoYXN0YWcoJGxpbmUsICRUTykpIHsKKyAgICAgICAg ICAgIHB1c2ggQCRydG8sICRsaW5lOworICAgICAgICAgICAgcHVzaCBAY29tYmluZWRfaGVhZGVy LCAkbGluZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzdGFnKCRsaW5lLCAkQ0MpKSB7Cisg ICAgICAgICAgICBwdXNoIEAkcmNjLCAkbGluZTsKKyAgICAgICAgICAgIHB1c2ggQGNvbWJpbmVk X2NjLCAkbGluZTsKKyAgICAgICAgfQorICAgICAgICAjIElmIHRoZXJlIGlzIGFuICRyZXh0cmEs IHRoZW4gZ2V0IHZhcmlvdXMgdGFncyBhbmQgYWRkCisgICAgICAgICMgZW1haWwgYWRkcmVzc2Vz IHRvIHRoZSBDQyBsaXN0CisgICAgICAgIGlmICgkcmV4dHJhICYmICRsaW5lID1+IC9eWy0wLTlh LXpdKy1ieTpbWzpibGFuazpdXSsvbWkpIHsKKyAgICAgICAgICAgIHB1c2ggQCRyZXh0cmEsICRD Qy4iICIuJCc7CisgICAgICAgIH0KKyAgICB9CisgICAgJGZoLT5lcnJvciBhbmQgZGllICQhOwor ICAgIGNsb3NlICRmaCBvciBkaWUgJCE7Cit9CisKK3N1YiBoYXN0YWcgKCQkKSB7CisgICAgbXkg KCRsaW5lLCAkdGFnKSA9IEBfOworICAgIGlmICgkbGluZSA9fiBte15cUSR0YWdcRX1pKSB7Cisg ICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIG5vcm1hbGl6 ZSAoJCQpIHsKKyAgICBteSAoJHJhLCAkcmIpID0gQF87CisgICAgIyBUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgdG8gbm9ybWFsaXplIGxpc3RzIG9mIHRhZ3Mgb3IgQ0MgLyBUTyBsaXN0cworICAgICMg SXQgcmV0dXJucyBhIGxpc3Qgb2YgdGhlIHVuaXF1ZSBlbGVtZW50cworICAgICMgaW4gQCRyYSwg ZXhjbHVkaW5nIGFueSB3aGljaCBhcmUgaW4gQCRyYi4KKyAgICAjIENvbXBhcmlzb25zIGFyZSBj YXNlLWluc2Vuc2l0aXZlLgorICAgIG15IEBhb25seSA9ICgpOworICAgIG15ICVzZWVuOworICAg IG15ICRpdGVtOworCisgICAgZm9yZWFjaCAkaXRlbSAoQCRyYikgeworICAgICAgICAkc2Vlbnts YygkaXRlbSl9ID0gMTsKKyAgICB9CisgICAgZm9yZWFjaCAkaXRlbSAoQCRyYSkgeworICAgICAg ICB1bmxlc3MgKCRzZWVue2xjKCRpdGVtKX0rKykgeworICAgICAgICAgICAgIyBpdCdzIG5vdCBp biAlc2Vlbiwgc28gYWRkIHRvIEBhb25seQorICAgICAgICAgICAgcHVzaCBAYW9ubHksICRpdGVt OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEBhb25seTsKK30KKworc3ViIHJlYWRm aWxlICgkKSB7CisgICAgbXkgKCRmaWxlKSA9IEBfOworICAgIG15ICRmaDsKKyAgICBteSAkY29u dGVudDsKKyAgICBvcGVuKCRmaCwgIjwiLCAkZmlsZSkKKyAgICAgICAgIG9yIGRpZSAiQ291bGQg bm90IG9wZW4gZmlsZSAnJGZpbGUnICQhIjsKKyAgICAkY29udGVudCA9IGRvIHsgbG9jYWwgJC87 IDwkZmg+IH07CisgICAgJGZoLT5lcnJvciBhbmQgZGllICQhOworICAgIGNsb3NlICRmaCBvciBk aWUgJCE7CisKKyAgICByZXR1cm4gJGNvbnRlbnQ7Cit9CisKK3N1YiB3cml0ZWZpbGUgKCQkKSB7 CisgICAgbXkgKCRjb250ZW50LCAkZmlsZSkgPSBAXzsKKyAgICBteSAkZmg7CisgICAgb3Blbigk ZmgsICI+IiwgIiRmaWxlLnRtcCIpCisgICAgICAgICBvciBkaWUgIkNvdWxkIG5vdCBvcGVuIGZp bGUgJyRmaWxlLnRtcCcgJCEiOworICAgIHByaW50ICRmaCAkY29udGVudCBvciBkaWUgJCE7Cisg ICAgY2xvc2UgJGZoIG9yIGRpZSAkITsKKyAgICByZW5hbWUgIiRmaWxlLnRtcCIsICRmaWxlIG9y IGRpZSAiQ291bGQgbm90IHJlbmFtZSAnJGZpbGUnIGludG8gcGxhY2UgJCEiOworfQorCitzdWIg aW5zZXJ0ICgkJCQkKSB7CisgICAgbXkgKCRmaWxlLCAkaW5zZXJ0LCAkZGVsaW1pdGVyLCAkaW5z YWZ0ZXIpID0gQF87CisgICAgbXkgJGNvbnRlbnQ7CisKKyAgICBpZiAoJGluc2VydCBlcSAiIikg eworICAgICAgICAjIE5vdGhpbmcgdG8gaW5zZXJ0CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgIyBSZWFkIGZpbGUKKyAgICAkY29udGVudCA9IHJlYWRmaWxlKCRmaWxlKSBvciBkaWUgJCE7 CisKKyAgICAjIFNwbGl0IHRoZSBzdHJpbmcgYW5kIGdlbmVyYXRlIG5ldyBjb250ZW50CisgICAg aWYgKCRjb250ZW50ID1+IC9eXFEkZGVsaW1pdGVyXEUvbWkpIHsKKyAgICAgICAgaWYgKCRpbnNh ZnRlcikgeworICAgICAgICAgICAgd3JpdGVmaWxlKCRgLiRkZWxpbWl0ZXIuIlxuIi4kaW5zZXJ0 LiJcbiIuJCcsICRmaWxlKTsKKworICAgICAgICAgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAg ICAgICAgICAgcHJpbnQgIlxuSW5zZXJ0ZWQgaW50byAiLmJhc2VuYW1lKCRmaWxlKS4nIGFmdGVy ICInLgorICAgICAgICAgICAgICAgICAgICAgICRkZWxpbWl0ZXIuIiciLiJcbi0tLS0tXG4iLiRp bnNlcnQuIlxuLS0tLS1cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICB3cml0ZWZpbGUoJGAuJGluc2VydC4iXG4iLiRkZWxpbWl0ZXIuJCcsICRmaWxlKTsK KworICAgICAgICAgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIlxu SW5zZXJ0ZWQgaW50byAiLmJhc2VuYW1lKCRmaWxlKS4nIGJlZm9yZSAiJy4KKyAgICAgICAgICAg ICAgICAgICAgICAkZGVsaW1pdGVyLiInIi4iXG4tLS0tLVxuIi4kaW5zZXJ0LiJcbi0tLS0tXG4i OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgIHByaW50 ICJFcnJvcjogRGlkbid0IGZpbmQgJyRkZWxpbWl0ZXInIGluICckZmlsZSdcbiI7CisgICAgfQor fQotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs