-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dextensify
1 lines (1 loc) · 14 KB
/
Dextensify
1
data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDx0aXRsZT5EZXh0ZW5zaWZ5PC90aXRsZT4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPgogICAgPHN0eWxlPgogICAgICAqIHsKICAgICAgICBmb250LWZhbWlseTogU2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogI2Q0ZDNkYTsKICAgICAgfQogICAgICBhIHsKICAgICAgICBjb2xvcjogIzZkYWViZDsKICAgICAgfQogICAgICBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogIzRmOWViMDsKICAgICAgfSAgICAgIAogICAgICBwcmUsIGNvZGUgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFlMjMyNDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQogICAgICBwcmUgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQogICAgICBwcmUgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQogICAgICBib2R5IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWUyMzI0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzYyNmM7CiAgICAgICAgcGFkZGluZzogNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXI6IHRyYW5zcGFyZW50OwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQogICAgICAjbWFpbl9kaXYgewogICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjsKCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI1MmIyZDsKCiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMTZweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIAogICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICAgIH0KICAgICAgI2J1dHRvbnNfY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgIGxldCBmcm9tX2lkID0gaWQgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICBsZXQgZXh0ZW5zaW9ucyA9IHsKICAgICAgICAic2VjdXJseV9uZXciOiB7CiAgICAgICAgICBuYW1lOiAiU2VjdXJseSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vam9mbG1rY2NpYmtvb3BsYWVvaW5lY2pibWRlYmdsYWIvZm9udHMvTWV0cm9wb2xpcy5jc3MiCiAgICAgICAgfSwKICAgICAgICAic2VjdXJseV9vbGQiOiB7CiAgICAgICAgICBuYW1lOiAiU2VjdXJseSAob2xkKSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vaWhlb2JhZ2prZmtsbmxpa2dpaGFubGhjZGRqb2loa2cvZm9udHMvTWV0cm9wb2xpcy5jc3MiCiAgICAgICAgfSwKICAgICAgICAiZ29ndWFyZGlhbiI6IHsKICAgICAgICAgIG5hbWU6ICJHb2d1YXJkaWFuIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9oYWxkbGdsZHBsZ25nZ2tqYWFmaGVsZ2lhZ2xhZmFuaC95b3V0dWJlX2luamVjdGlvbi5qcyIKICAgICAgICB9LAogICAgICAgICJsYW5zY2hvb2wiOiB7CiAgICAgICAgICBuYW1lOiAiTEFOU2Nob29sIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9iYWxlaW9qbmpwZ2Vvam9oaGhmYmljaGNvZGdsam1uai9ibG9ja2VkLmh0bWwiCiAgICAgICAgfSwKICAgICAgICAibGluZXdpemUiOiB7CiAgICAgICAgICBuYW1lOiAiTGluZXdpemUiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2RkZmJraHBtY2RiY2llamVuZmNvbGFhaWVibmpjYmZjL2JhY2tncm91bmQvYXNzZXRzL3BhZ2VzL2RlZmF1bHQtYmxvY2tlZC5odG1sIgogICAgICAgIH0sCiAgICAgICAgImJsb2Nrc2kiOiB7CiAgICAgICAgICBuYW1lOiAiQmxvY2tzaSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vZ2hscG1sZG1qamhtZGdtbmVvYWliYmVna2pqYm9uYmsvcGFnZXMvYmxvY2tQYWdlLmh0bWwiCiAgICAgICAgfSwKICAgICAgICAiZm9ydGlndWFyZCI6IHsKICAgICAgICAgIG5hbWU6ICJGb3J0aWd1YXJkIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9pZ2JncGVobmJtaGdkZ2piaGtrcGVkb21tZ21mYmVhby95b3V0dWJlX2luamVjdGlvbi5qcyIKICAgICAgICB9LAogICAgICAgICJjaXNjbyI6IHsKICAgICAgICAgIG5hbWU6ICJDaXNjbyBVbWJyZWxsYSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vamNkaG1vamZlY2pmbWJkcGNoaWhiZWlsb2hnbmJkY2kvYmxvY2tlZC5odG1sIgogICAgICAgIH0sCiAgICAgICAgImNvbnRlbnRrZWVwZXIiOiB7CiAgICAgICAgICBuYW1lOiAiQ29udGVudEtlZXBlciIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vamRvZ3BoYWtvbmRmZG1jYW5wYXBmYWhrZG9tYWljZmEvaW1nL2NrYXV0aDE5eC5wbmciCiAgICAgICAgfSwKICAgICAgICAiY29udGVudGtlZXBlcmczIjogewogICAgICAgICAgbmFtZTogIkNLLUF1dGhlbnRpY2F0b3IgRzMiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL29kb2FucG5vbmlsb2dvZmdnYW9oaGtka2RnYmhkbGpwL2ltZy9ja2F1dGgxOXgucG5nIgogICAgICAgIH0sCiAgICAgICAgInNlY3VybHljbGFzc3Jvb20iOiB7CiAgICAgICAgICBuYW1lOiAiU2VjdXJseSBDbGFzc3Jvb20iLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2pmYmVjZm1pZWdjamRkZW5qaGxiaGxpa2NiZm1uYWZkL25vdGZvdW5kLmh0bWwiCiAgICAgICAgfSwKICAgICAgICAiaGFwYXJhIjogewogICAgICAgICAgbmFtZTogIkhhcGFyYSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8va2JvaGFmY29wZnBpZ2tqZGltZGNkZ2VubGhrbWhibmMvYmxvY2tlZC5odG1sIgogICAgICAgIH0sCiAgICAgICAgImhhcGFyYS1uZXctaWQiOiB7CiAgICAgICAgICBuYW1lOiAiSGFwYXJhIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9hY2VvcGFjZ2FlcGRjZWxvaG9iaWNwZmZiYmVqbmZhYy9ibG9ja2VkLmh0bWwiCiAgICAgICAgfSwKICAgICAgICAiaWJvc3MiOiB7CiAgICAgICAgICBuYW1lOiAiaWJvc3MiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2ttZmZlaGJpZGxhbGliZmVrbGFlZm5ja3BpZGJvZGZmL3Jlc3RyaWN0ZWQuaHRtbCIKICAgICAgICB9LAogICAgICAgICJsaWdodHNwZWVkZmlsdGVyYWdlbnQiOiB7CiAgICAgICAgICBuYW1lOiAiTGlnaHRzcGVlZCBGaWx0ZXIgQWdlbnQiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2Fka2Nwa3BnaGFobWJvcGtqY2hvYmllY2tlb2FvZWVtL2ljb24tMTI4LnBuZyIKICAgICAgICB9LAogICAgICAgICJsaWdodHNwZWVkY2xhc3Nyb29tIjogewogICAgICAgICAgbmFtZTogIkxpZ2h0c3BlZWQgQ2xhc3Nyb29tIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9ra2JtZGdqZ2djZGFqY2tkbGJuZ2Rqb25wY2hwYWllYS9hc3NldHMvaWNvbi1jbGFzc3Jvb20tMTI4LnBuZyIKICAgICAgICB9LAogICAgICAgICJpbnRlcmNsYXNzIjogewogICAgICAgICAgbmFtZTogIkludGVyQ0xBU1MgRmlsdGVyaW5nIFNlcnZpY2UiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2piZGRnamdsZ2trbmVvbm5pbmVhb2hkaGFiamJnb3BpL3BhZ2VzL21lc3NhZ2UtcGFnZS5odG1sIgogICAgICAgIH0sCiAgICAgICAgImludGVyc2FmZSI6IHsKICAgICAgICAgIG5hbWU6ICJJbnRlclNhZmUgR2F0ZXdheUNvbm5lY3Rpb24gQWdlbnQiLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2Vjam9naGNjbmpsb2RqbG1rZ21uYm5rZGNibmpnZGVuL3Jlc291cmNlcy9vcHRpb25zLmpzIgogICAgICAgIH0sCiAgICAgICAgImxvaWxvIjogewogICAgICAgICAgbmFtZTogIuODreOCpOODrVdlYuODleOCo+ODq+OCv+ODvC9Mb2lMbyBXZWIgRmlsdGVycyIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vcGFiamxiamNnbGRuZG5wam5va2pha2Jkb2ZqZ25maWEvaW1hZ2UvYWxsb3dfaWNvbi9zaGllbGRfZ3JlZW5fMTI4eDEyOC5wbmciCiAgICAgICAgfSwKICAgICAgICAiZ29waGVyX2J1ZGR5IjogewogICAgICAgICAgbmFtZTogIkdvcGhlciBCdWRkeSIsCiAgICAgICAgICB1cmw6ICJjaHJvbWUtZXh0ZW5zaW9uOi8vY2diYmJqbWdkcG5pZmlqY29uaGFtZ2dqZWhsYW1jaWYvaW1hZ2VzL2dvcGhlci1idWRkeV8xMjh4MTI4X2NvbG9yLnBuZyIKICAgICAgICB9LAogICAgICAgICJsYW5zY2hvb2xfaGVscGVyIjogewogICAgICAgICAgbmFtZTogIkxhblNjaG9vbCBXZWIgSGVscGVyIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9ob25qY25lZmVrZm5vbXBhbXBjcG1jZGFkaWJtamhsay9ibG9ja2VkLmh0bWwiCiAgICAgICAgfSwKICAgICAgICAiaW10bGF6YXJ1cyI6IHsKICAgICAgICAgIG5hbWU6ICJJTVRMYXphcnVzIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9jZ2lnb3BqYWtrZWNsaGdnY2hnbmhtcG1oZ2hjYm5hZi9tb2RlbHMvbW9kZWwuanNvbiIKICAgICAgICB9LAogICAgICAgICJpbXBlcm9fYmFja2Ryb3AiOiB7CiAgICAgICAgICBuYW1lOiAiSW1wZXJvIEJhY2tkcm9wIiwKICAgICAgICAgIHVybDogImNocm9tZS1leHRlbnNpb246Ly9qanBtamNjcGVtbGxubWdpYW9qYW9jZ25ha3BtZmdqZy9saWNlbnNlcy5odG1sIgogICAgICAgIH0sCiAgICAgICAgIm1vYmlsZV9ndWFyZGlhbiI6IHsKICAgICAgICAgIG5hbWU6ICJNb2JpbGUgR3VhcmRpYW4iLAogICAgICAgICAgdXJsOiAiY2hyb21lLWV4dGVuc2lvbjovL2ZnbWFmaGRvaGprZGhmYWFjZ2JnY2xtZmdrZ29rZ21iL2Jsb2NrLmh0bWwiCiAgICAgICAgfSwKICAgICAgfTsKCiAgICAgIGxldCBmcmFtZXM7CgogICAgICBhc3luYyBmdW5jdGlvbiBjaGVja191cmwodXJsKSB7CiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgbGV0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgNTAwKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IGZldGNoKHVybCwge3NpZ25hbDogY29udHJvbGxlci5zaWduYWx9KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGxldCBlcnJvcl9tc2cgPSBlcnJvcisiIjsKICAgICAgICAgIHJldHVybiBlcnJvcl9tc2cuaW5jbHVkZXMoIkFib3J0RXJyb3IiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGFzeW5jIGZ1bmN0aW9uIGRldGVjdF9leHRlbnNpb25zKCkgewogICAgICAgIGxldCBkZXRlY3RlZCA9IFtdOwogICAgICAgIGZvciAobGV0IGV4dGVuc2lvbiBvZiBPYmplY3QudmFsdWVzKGV4dGVuc2lvbnMpKSB7CiAgICAgICAgICBsZXQgZXhpc3RzID0gYXdhaXQgY2hlY2tfdXJsKGV4dGVuc2lvbi51cmwpOwogICAgICAgICAgaWYgKGV4aXN0cykgewogICAgICAgICAgICBkZXRlY3RlZC5wdXNoKGV4dGVuc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZXRlY3RlZDsKICAgICAgfQoKICAgICAgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsKICAgICAgICBsZXQgZGV0ZWN0ZWQgPSBhd2FpdCBkZXRlY3RfZXh0ZW5zaW9ucygpOwogICAgICAgIGxldCBidXR0b25zX2NvbnRhaW5lciA9IGZyb21faWQoImJ1dHRvbnNfY29udGFpbmVyIikKCiAgICAgICAgaWYgKCF3aW5kb3cuY2hyb21lKSB7CiAgICAgICAgICBidXR0b25zX2NvbnRhaW5lci5pbm5lckhUTUwgPSBgPHA+PGI+RXJyb3I6IFlvdSBhcmUgbm90IHJ1bm5pbmcgYSBDaHJvbWl1bS1iYXNlZCBicm93c2VyLjwvYj48L3A+YDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGV0ZWN0ZWQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBidXR0b25zX2NvbnRhaW5lci5pbm5lckhUTUwgPSBgPHA+PGI+RXJyb3I6IE5vIHN1cHBvcnRlZCBleHRlbnNpb25zIGRldGVjdGVkLjwvYj48L3A+YDsKICAgICAgICAgIGJ1dHRvbnNfY29udGFpbmVyLmlubmVySFRNTCArPSBgPHAgc3R5bGU9Im1hcmdpbi10b3A6IC0xNnB4OyI+SWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24gYWRkZWQsIHBsZWFzZSBtYWtlIGFuIGlzc3VlIG9uIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWRpbmcyMjEwL2RleHRlbnNpZnkiPkdpdGh1YiByZXBvc2l0b3J5PC9hPiwgYW5kIHByb3ZpZGUgdGhlIGV4dGVuc2lvbiBJRCBhbmQgbWFuaWZlc3QuPC9wPmA7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgYnV0dG9uc19jb250YWluZXIuaW5uZXJIVE1MID0gIiIKICAgICAgICB9CgogICAgICAgIGZvciAobGV0IGV4dGVuc2lvbiBvZiBkZXRlY3RlZCkgewogICAgICAgICAgbGV0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgYnV0dG9uLmlubmVyVGV4dCA9IGBGcmVlemUgJHtleHRlbnNpb24ubmFtZX1gOwogICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICAgIGJ1dHRvbl9oYW5kbGVyKGV4dGVuc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgICBidXR0b25zX2NvbnRhaW5lci5hcHBlbmQoYnV0dG9uKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGJ1dHRvbl9oYW5kbGVyKGV4dGVuc2lvbikgewogICAgICAgIGxldCBjYW5jZWwgPSAhY29uZmlybSgiQWZ0ZXIgaGl0dGluZyBPSywgdGhlcmUgd2lsbCBiZSBhIDUgc2Vjb25kIGRlbGF5IHVudGlsIHRoZSBleHRlbnNpb24gc3RhcnRzIGJlaW5nIGZyb3plbi4gU3dpdGNoIHRvIGFub3RoZXIgdGFiIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgdGhlIGVudGlyZSBkZXZpY2UgZnJvbSBsb2NraW5nIHVwLiIpOwogICAgICAgIGlmIChjYW5jZWwpIHJldHVybjsKCiAgICAgICAgZnJhbWVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcmF0ZS12YWx1ZSIpLnZhbHVlOwogICAgICAgIGlmIChmcmFtZXMgPT0gdW5kZWZpbmVkIHx8IGZyYW1lcyA9PSAnJykgewogICAgICAgICAgY29uc29sZS5sb2coJ0ZyYW1lcyBkZWZhdWx0aW5nIHRvIDUwIScpOwogICAgICAgICAgZnJhbWVzID0gNTA7CiAgICAgICAgfQoKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGNyZWF0ZV9pZnJhbWVzKGV4dGVuc2lvbik7CiAgICAgICAgfSwgNTAwMCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9pZnJhbWVzKGV4dGVuc2lvbikgewogICAgICAgIGxldCBpZnJhbWVzID0gW10KICAgICAgICBsZXQgaXRlcmF0aW9ucyA9IDU7CiAgICAgICAgbGV0IHB1YmxpY191cmwgPSBleHRlbnNpb24udXJsOwogICAgICAgIAogICAgICAgIAogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBsZXQgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChpZnJhbWUpOwogICAgICAgICAgaWZyYW1lcy5wdXNoKGlmcmFtZSk7CgogICAgICAgICAgLy9sZXQgc3ViZnJhbWVfY291bnQgPSBNYXRoLm1heCgyLCAyMDAgLSBpdGVyYXRpb25zKTsKCiAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZnJhbWVzOyBpKyspIHsKICAgICAgICAgICAgbGV0IHN1YmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICAgICAgIHN1YmZyYW1lLnNyYyA9IHB1YmxpY191cmw7CiAgICAgICAgICAgIHN1YmZyYW1lLnN0eWxlLndpZHRoID0gc3ViZnJhbWUuc3R5bGUuaGVpZ2h0ID0gIjFweCI7CiAgICAgICAgICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmQoc3ViZnJhbWUpOwogICAgICAgICAgfQoKICAgICAgICAgIHdoaWxlIChpZnJhbWVzLmxlbmd0aCA+IE1hdGgubWF4KDMsIDEwLWl0ZXJhdGlvbnMpKSB7CiAgICAgICAgICAgIGlmcmFtZXNbMF0ucmVtb3ZlKCk7CiAgICAgICAgICAgIGlmcmFtZXMuc2hpZnQoKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpdGVyYXRpb25zKys7CiAgICAgICAgfQogICAgICB9CgogICAgICB3aW5kb3cub25sb2FkID0gbWFpbjsKICAgIDwvc2NyaXB0PgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgaWQ9Im1haW5fZGl2Ij4KICAgICAgPGgxIHN0eWxlPSJtYXJnaW4tdG9wOiA4cHgiPkRleHRlbnNpZnk8L2gxPgogICAgICA8cD5EZXh0ZW5zaWZ5IGlzIGFuIGV4cGxvaXQgd2hpY2ggbGV0cyB5b3UgZGlzYWJsZSBtb3N0IGFkbWluLWluc3RhbGxlZCBDaHJvbWUgZXh0ZW5zaW9ucyBmcm9tIGFueSB3ZWJwYWdlLjwvcD4KICAgICAgPGgyPkluc3RydWN0aW9uczwvaDI+CiAgICAgIDxvbD4KICAgICAgICA8bGk+T3BlbiBjaHJvbWU6Ly9leHRlbnNpb25zIGluIGEgbmV3IHRhYi4gS2VlcCB0aGlzIHBhZ2Ugb3Blbi48L2xpPgogICAgICAgIDxsaT5HbyB0byB0aGUgc2V0dGluZ3MgcGFnZSBmb3IgdGhlIGV4dGVuc2lvbiB5b3Ugd2FudCB0byBkaXNhYmxlLjwvbGk+CiAgICAgICAgPGxpPk9uIHRoZSBEZXh0ZW5zaWZ5IHBhZ2UsIGNsaWNrIHRoZSAiZnJlZXplIGV4dGVuc2lvbiIgYnV0dG9uLiBJbW1lZGlhdGVseSBzd2l0Y2ggYmFjayB0byB0aGUgY2hyb21lOi8vZXh0ZW5zaW9ucyB0YWIuPC9saT4KICAgICAgICA8bGk+QmFjayBvbiB0aGUgY2hyb21lOi8vZXh0ZW5zaW9ucyBwYWdlLCBzcGFtIHRoZSAiYWxsb3cgYWNjZXNzIHRvIGZpbGUgVVJMcyIgc3dpdGNoIGZvciBhIGZldyBzZWNvbmRzLjwvbGk+CiAgICAgICAgPGxpPlRoZSBleHRlbnNpb24gc2hvdWxkIG5vdyBiZSB0ZW1wb3JhcmlseSBkaXNhYmxlZC4gRm9yIHRoaXMgZWZmZWN0IHRvIHBlcnNpc3QsIGZsaXAgdGhlICJhbGxvdyBhY2Nlc3MgdG8gZmlsZSBVUkxzIiBhZ2FpbiBldmVyeSBmZXcgbWludXRlcywgb3IgaWYgcGFnZXMgc3RhcnQgZ2V0dGluZyBibG9ja2VkIGFnYWluLjwvbGk+CiAgICAgICAgPGxpPllvdSBtYXkgYWxzbyBuZWVkIHRvIHJlb3BlbiB0aGlzIHBhZ2UgZXZlcnkgb25jZSBpbiBhIHdoaWxlIHRvIHByZXZlbnQgYW4gdW5hdm9pZGFibGUgbWVtb3J5IGxlYWsgZnJvbSBjcmFzaGluZyB0aGUgc3lzdGVtLjwvbGk+CiAgICAgIDwvb2w+CiAgICAgIDxwPkR1cmluZyB0aGlzIHByb2Nlc3MsIHlvdXIgQ2hyb21lYm9vayBtYXkgaGFuZyBtb21lbnRhcmlseS4gVGhpcyBpcyBub3JtYWwsIGFuZCBpdCBzaG91bGQgcmVzb2x2ZSBpdHNlbGYgYWZ0ZXIgYSBmZXcgc2Vjb25kcy48L3A+CiAgICAgIDwhLS0gPGgyPk9wdGlvbnM8L2gyPiAtLT4KICAgICAgPGRpdiBpZD0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgIDxsYWJlbCBmb3I9ImZyYW1lcyI+PGgzPkZyYW1lcmF0ZTo8L2gzPjwvbGFiZWw+CiAgICAgICAgPHA+RnJhbWVyYXRlIGF0IHdoaWNoIGRleHRlbnNpZnkgZnJlZXplcyBleHRlbnRpb25zLiBUaGUgZGVmYXVsdCBpcyA1MCwgYnV0IHRoYXQgY2FuIGJlIGhhcmQgdG8gZGVhbCB3aXRoLgogICAgICAgIEkgcmVjb21tZW5kIHVzaW5nIDEwMDAgaW5zdGVhZCBvZiA1MCB0byBwcmV2ZW50IHlvdXIgY29tcHV0ZXIgZnJvbSBjcmFzaGluZy4KICAgICAgICA8L3A+PGJyPgogICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJmcmFtZXJhdGUtdmFsdWUiIG5hbWU9ImZyYW1lcyIgcmVxdWlyZWQgbWlubGVuZ3RoPSIxIiBtYXhsZW5ndGg9IjIiIHNpemU9IjEwIiAvPgogICAgICA8L2Rpdj4KICAgICAgPGJyPiA8YnI+CiAgICAgIDxkaXYgaWQ9ImJ1dHRvbnNfY29udGFpbmVyIj4KICAgICAgICA8cD48aT5EZXRlY3RpbmcgZXh0ZW5zaW9ucy4uLjwvaT48L3A+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGJyPgogICAgICA8aHI+CiAgICAgICAgICBPcmlnaW5hbCBjb2RlIGJ5IDxhIGhyZWY9Imh0dHBzOi8vYWRpbmcuZGV2IiB0YXJnZXQ9Il9ibGFuayI+YWRpbmcyMjEwPC9hPi48YnI+CiAgICAgICAgICBVcGRhdGVkIGFuZCBpbXByb3ZlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vU1RQdjIyIiB0YXJnZXQ9Il9ibGFuayI+U1RQdjIyPC9hPiA8YnI+CiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vU1RQdjIyL0RleHRlbnNpZnkiIHRhcmdldD0iX2JsYW5rIj5TdWJtaXQgYW4gaXNzdWU8L2E+CiAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij48aT5NSVQgTGljZW5jZSBWZXJzaW9uIDEuMS4yPC9pPjwvcD4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgoK