Skip to content

Instantly share code, notes, and snippets.

@jcarlosgarcia
Created February 16, 2016 13:50
Show Gist options
  • Save jcarlosgarcia/848f69c4870a0164c9b9 to your computer and use it in GitHub Desktop.
Save jcarlosgarcia/848f69c4870a0164c9b9 to your computer and use it in GitHub Desktop.
import base64
code="aW1wb3J0IHB5bW9uZ28NCmltcG9ydCByYW5kb20NCmltcG9ydCByZQ0KaW1wb3J0IHN0cmluZw0KaW1wb3J0IHN5cw0KaW1wb3J0IGdldG9wdA0KaW1wb3J0IHBwcmludA0KDQojIENvcHlyaWdodCAyMDE1DQojIE1vbmdvREIsIEluYy4NCiMgQXV0aG9yOiBBbmRyZXcgRXJsaWNoc29uICAgYWplQDEwZ2VuLmNvbQ0KIw0KIyBJZiB5b3UgYXJlIGEgc3R1ZGVudCBhbmQgcmVhZGluZyB0aGlzIGNvZGUsIHR1cm4gYmFjayBub3csIGJlZm9yZQ0KIyB0aGUgTW9uZ29EQiBnb2RzIHNtaXRlIHlvdS4NCg0KY29ubmVjdGlvbiA9IE5vbmUNCmRiID0gTm9uZQ0KbW9uZ29zdHIgPSAibW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNyINCmRiX25hbWUgPSAiYWRtaW4iDQpyc19uYW1lID0gIm0xMDEiDQoNCiMgdGhpcyBzY3JpcHQgd2lsbCBjaGVjayB0aGF0IGEgcmVwbGljYSBzZXQgd2l0aCB0aHJlZSBub2RlcyBpcyBydW5uaW5nIG9uIGEgaG9zdA0KDQojIGNvbW1hbmQgbGluZSBhcmcgcGFyc2luZyB0byBtYWtlIGZvbGtzIGhhcHB5IHdobyB3YW50IHRvIHJ1biBhdCBtb25nb2xhYnMgb3IgbW9uZ29ocQ0KIyB0aGlzIGZ1bmN0aW9ucyB1c2VzIGdsb2JhbCB2YXJzIHRvIGNvbW11bmljYXRlLiBmb3JnaXZlIG1lLg0KZGVmIGFyZ19wYXJzaW5nKGFyZ3YpOg0KDQogICAgZ2xvYmFsIHdlYmhvc3QNCiAgICBnbG9iYWwgbW9uZ29zdHINCiAgICBnbG9iYWwgZGJfbmFtZQ0KDQogICAgdHJ5Og0KICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmd2LCAiLXA6LW06LWQ6IikNCiAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOg0KICAgICAgICBwcmludCgidXNhZ2UgdmFsaWRhdGUucHkgLW0gbW9uZ29Db25uZWN0U3RyaW5nIikNCiAgICAgICAgcHJpbnQoIlx0bW9uZ29Db25uZWN0aW9uU3RyaW5nIGRlZmF1bHQgdG8gezB9Ii5mb3JtYXQobW9uZ29zdHIpKQ0KICAgICAgICBwcmludCgiXHRkYXRhYmFzZU5hbWUgZGVmYXVsdHMgdG8gezB9Ii5mb3JtYXQoZGJfbmFtZSkpDQogICAgICAgIHN5cy5leGl0KDIpDQogICAgZm9yIG9wdCwgYXJnIGluIG9wdHM6DQogICAgICAgIGlmIChvcHQgPT0gJy1oJyk6DQogICAgICAgICAgICBwcmludCgidXNhZ2UgdmFsaWRhdGUucHkgLW0gbW9uZ29Db25uZWN0U3RyaW5nIC1kIGRhdGFiYXNlTmFtZSIpDQogICAgICAgICAgICBzeXMuZXhpdCgyKQ0KICAgICAgICBlbGlmIG9wdCBpbiAoIi1tIik6DQogICAgICAgICAgICBtb25nb3N0ciA9IGFyZw0KICAgICAgICAgICAgcHJpbnQoIk92ZXJyaWRpbmcgTW9uZ29EQiBjb25uZWN0aW9uIHN0cmluZyB0byBiZSAiLCBtb25nb3N0cikNCiAgICAgICAgZWxpZiBvcHQgaW4gKCItZCIpOg0KICAgICAgICAgICAgZGJfbmFtZSA9IGFyZw0KICAgICAgICAgICAgcHJpbnQoIk92ZXJyaWRpbmcgTW9uZ29EQiBkYXRhYmFzZSB0byBiZSAiLCBkYl9uYW1lKQ0KDQojIGdldHMgdGhlIHJlcGxpY2Egc2V0IHN0YXR1cw0KZGVmIGdldF9yc19zdGF0dXMoKToNCiAgICBkYiA9IGNvbm5lY3Rpb24uYWRtaW4NCiAgICBycyA9IGRiLmNvbW1hbmQoInJlcGxTZXRHZXRTdGF0dXMiKQ0KICAgIHJldHVybiBycw0KDQojIGdldHMgdGhlIHJlcGxpY2Egc3RhdGUgY29uZmlnDQpkZWYgZ2V0X3JzX2NvbmZpZ3VyYXRpb24oKToNCiAgICBkYiA9IGNvbm5lY3Rpb24ubG9jYWwNCiAgICBjb2xsID0gZGIuc3lzdGVtLnJlcGxzZXQNCiAgICByZXR1cm4gY29sbC5maW5kX29uZSgpDQoNCmRlZiByZXBsX3NldF9ydW5uaW5nKG51bV9ub2Rlcyk6DQoNCiAgICB0cnk6DQogICAgICAgIHJzID0gZ2V0X3JzX3N0YXR1cygpDQogICAgICAgIGNvbmYgPSBnZXRfcnNfY29uZmlndXJhdGlvbigpDQogICAgICAgIGhvc3RzICA9IGNvbm5lY3Rpb24uaG9zdHMNCiAgICBleGNlcHQ6DQogICAgICAgIHByaW50KCJjYW4ndCBxdWVyeSBNb25nb0RCLi5pcyBpdCBydW5uaW5nPyIpDQogICAgICAgIHJhaXNlDQogICAgICAgIHJldHVybiBGYWxzZQ0KDQogICAgaWYgKHJzWydvayddICE9IDEpOg0KICAgICAgICBwcmludCgiU29ycnksIG9rIGlzIG5vdCAxIGZvciBycy5zdGF0dXMoKSIpDQogICAgICAgIHByaW50KCJIZXJlIGlzIHdoYXQgSSBnZXQ6IikNCiAgICAgICAgcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQ0KICAgICAgICBwcC5wcHJpbnQocnMpDQogICAgICAgIHJldHVybiBGYWxzZQ0KDQogICAgaWYgKGxlbihyc1snbWVtYmVycyddKSAhPSBudW1fbm9kZXMpOg0KICAgICAgICBwcmludCgiU29ycnksIHRoZXJlIG5lZWQgdG8gYmUgdGhyZWUgbWVtYmVycyBvZiB0aGUgcmVwbGljYSBzZXQuIikNCiAgICAgICAgcHJpbnQoImhlcmUgaXMgdGhlIG1lbmJlcnMgYXJyYXkgSSBzZWUiKQ0KDQogICAgICAgIHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoZGVwdGg9NikNCiAgICAgICAgcHAucHByaW50KHJzWydtZW1iZXJzJ10pDQogICAgICAgIHJldHVybiBGYWxzZQ0KICAgIA0KICAgIHByaW50KCJMb29rcyBnb29kLiBSZXBsaWNhIHNldCB3aXRoIHRocmVlIG5vZGVzIHJ1bm5pbmciKQ0KICAgIHJldHVybiBUcnVlDQoNCmRlZiBncmFjZWZ1bF9leGl0KGkpOg0KICAgIGNvbm5lY3Rpb24uY2xvc2UoKQ0KICAgIHN5cy5leGl0KGkpDQoNCiMgbWFpbiBzZWN0aW9uIG9mIHRoZSBjb2RlDQpkZWYgbWFpbihhcmd2KToNCiAgICAgICAgICAgIA0KICAgIGFyZ19wYXJzaW5nKGFyZ3YpDQogICAgZ2xvYmFsIGNvbm5lY3Rpb24NCiAgICBnbG9iYWwgZGINCg0KICAgIHByaW50KCJXZWxjb21lIHRvIHRoZSBIVyA2LnggcmVwbGljYSBDaGVja2VyLiBNeSBqb2IgaXMgdG8gbWFrZSBzdXJlIHlvdSBzdGFydGVkIGEgcmVwbGljYSBzZXQgd2l0aCB0aHJlZSBub2RlcyIpDQoNCiAgICAjIGNvbm5lY3QgdG8gdGhlIGRiIChtb25nb3N0ciB3YXMgc2V0IGluIGFyZ19wYXJzaW5nKQ0KICAgIHRyeToNCiAgICAgICAgY29ubmVjdGlvbiA9IHB5bW9uZ28uTW9uZ29DbGllbnQobW9uZ29zdHIsIHJlcGxpY2FTZXQ9cnNfbmFtZSkNCiAgICAgICAgZGIgPSBjb25uZWN0aW9uW2RiX25hbWVdDQogICAgZXhjZXB0Og0KICAgICAgICBwcmludCgiY2FuJ3QgY29ubmVjdCB0byBNb25nb0RCIHJlcGxpY2EiLHJzX25hbWUsIiBzZXQgdXNpbmciLCBtb25nb3N0ciwgIi4gSXMgaXQgcnVubmluZz8iKQ0KICAgICAgICBleGl0KDIpICAgICAjIG5vIGdyYWNlZnVsIGV4aXQgaWYgaXQgaXMgbm90IGNvbm5lY3RlZA0KICAgICAgICANCiAgICBpZiAobm90IHJlcGxfc2V0X3J1bm5pbmcoMykpOg0KICAgICAgICBwcmludCgiU29ycnksIHRoZSByZXBsaWNhIHNldCBkb2VzIG5vdCBzZWVtIHRvIGJlIHJ1bm5pbmciKQ0KICAgICAgICBncmFjZWZ1bF9leGl0KDEpDQogICAgDQogICAgIyBpZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBpbiBjbGVhcnRleHQsIHlvdSBhcmUgdmlvbGF0aW5nIHRoZSBob25vciBjb2RlLg0KICAgICMgWW91IGNhbiBzdGlsbCByZWRlZW0geW91cnNlbGYuIEdldCBpdCB3b3JraW5nIGFuZCBkb24ndCBzdWJtaXQgdGhlIHZhbGlkYXRpb24gY29kZSB1bnRpbCB5b3UgZG8uDQogICAgIyBBbGwgYSBtYW4gaGFzIGF0IHRoZSBlbmQgb2YgdGhlIGRheSBpcyBoaXMgd29yZC4NCiAgICBwcmludCgiVGVzdHMgUGFzc2VkIGZvciBIVyA2LjUuIFlvdXIgSFcgNi41IHZhbGlkYXRpb24gY29kZSBpcyBranZqa2wzMjkwbWYwbTIwZjJramp2IikNCiAgICBncmFjZWZ1bF9leGl0KDApDQoNCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgbWFpbihzeXMuYXJndlsxOl0pDQo="
eval(compile(base64.b64decode(code), "<string>", 'exec'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment