From dbbc47e751751a96c803e5bfb2218c6fcee80f26 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Tue, 28 Apr 2020 03:03:18 -0700 Subject: [PATCH] 1. Added work-around for Zenity timeout support detection for platforms that require DISPLAY to be set in env just to query metadata 2. Fixed bug where timeout work-around resulted in success instead of timeout --- microscript/ILibDuktape_Polyfills.c | 12 ++--- modules/message-box.js | 71 ++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index cd7b959..51bf0ca 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2169,12 +2169,12 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_taskscheduler); // message-box, refer to modules/message-box.js - char *_messagebox = ILibMemory_Allocate(63072, 0, NULL, NULL); - memcpy_s(_messagebox + 0, 36040, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQoNCmNvbnN0IE1CX0RFRkJVVFRPTjEgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfREVGQlVUVE9OMiAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7DQpjb25zdCBNQl9ERUZCVVRUT04zICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsNCmNvbnN0IE1CX0lDT05IQU5EICAgICAgICAgICAgICAgPSAweDAwMDAwMDEwOw0KY29uc3QgTUJfSUNPTlFVRVNUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMjA7DQpjb25zdCBNQl9JQ09ORVhDTEFNQVRJT04gICAgICAgID0gMHgwMDAwMDAzMDsNCmNvbnN0IE1CX0lDT05BU1RFUklTSyAgICAgICAgICAgPSAweDAwMDAwMDQwOw0KDQpjb25zdCBJRE9LICAgICA9IDE7DQpjb25zdCBJRENBTkNFTCA9IDI7DQpjb25zdCBJREFCT1JUICA9IDM7DQpjb25zdCBJRFJFVFJZICA9IDQ7DQpjb25zdCBJRElHTk9SRSA9IDU7DQpjb25zdCBJRFlFUyAgICA9IDY7DQpjb25zdCBJRE5PICAgICA9IDc7DQoNCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KdmFyIGNoaWxkU2NyaXB0ID0gIlwNCiAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykub24oJ2RhdGEnLCBmdW5jdGlvbiAoailcDQogICAgICAgIHtcDQogICAgICAgICAgICBzd2l0Y2goai5jb21tYW5kKVwNCiAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZUJveCc6XA0KICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpXA0KICAgICAgICAgICAgICAgICAgICB7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnTWVzc2FnZUJveEEnKTtcDQogICAgICAgICAgICAgICAgICAgICAgICB1c2VyMzIuTWVzc2FnZUJveEEuYXN5bmMoMCwgR00uQ3JlYXRlVmFyaWFibGUoai5jYXB0aW9uKSwgR00uQ3JlYXRlVmFyaWFibGUoai50aXRsZSksIGoubGF5b3V0KS50aGVuKFwNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHIpXA0KICAgICAgICAgICAgICAgICAgICAgICAge1wNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goci5WYWwpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElET0sudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRENBTkNFTC50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElEQUJPUlQudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFJFVFJZLnRvU3RyaW5nKCkgKyAiOlwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICsgSURJR05PUkUudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFlFUy50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKHIuVmFsKTtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgiICsgSUROTy50b1N0cmluZygpICsgIik7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7XA0KICAgICAgICAgICAgICAgICAgICB9XA0KICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICB9XA0KICAgICAgICB9KTtcDQogICAgIjsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7DQogICAgICAgIHZhciBwc2lkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgIGlmIChrZXJuZWwzMi5Qcm9jZXNzSWRUb1Nlc3Npb25JZChwcm9jZXNzLnBpZCwgcHNpZCkuVmFsID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdJbnRlcm5hbCBFcnJvcicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciBvcHRpb25zID0geyBleGVjdXRpb25UaW1lb3V0OiB0aW1lb3V0IH07DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbklkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuX3RpdGxlID0gdGl0bGU7DQogICAgICAgIHJldC5fY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZGF0YScsIGZ1bmN0aW9uIChqKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihqID09IElEWUVTIHx8IGogPT0gSURPSykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdEZW5pZWQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RpbWVvdXQnKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2VCb3gnLCBjYXB0aW9uOiBjYXB0aW9uLCB0aXRsZTogdGl0bGUsIGxheW91dDogbGF5b3V0IH0pOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpmdW5jdGlvbiBsaW51eF9tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd6ZW5pdHknLA0KICAgICAgICB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnICYmIHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL3Vzci9sb2NhbC9iaW4vemVuaXR5JykpIHsgbG9jYXRpb24gPSAnL3Vzci9sb2NhbC9iaW4vemVuaXR5JzsgfQ0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJykgeyByZXR1cm4gKG51bGwpOyB9DQoNCiAgICAgICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUobG9jYXRpb24gKyAnIC0taGVscC1hbGwgfCBncmVwIHRpbWVvdXRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0geyBwYXRoOiBsb2NhdGlvbiwgdGltZW91dDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfTsNCg0KICAgICAgICAgICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0LnZlcnNpb24gPSBKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHJldC52ZXJzaW9uID0gWzIsIDE2XTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsNCiAgICBpZiAoIXRoaXMuemVuaXR5KQ0KICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrZGlhbG9nJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMga2RpYWxvZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBudWxsIDogeyBwYXRoOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSB9KTsNCiAgICAgICAgICAgICAgICB9KSgpDQogICAgICAgICAgICB9KTsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd4bWVzc2FnZScsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHhtZXNzYWdlIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vdGlmeXNlbmQnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBub3RpZnktc2VuZCB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBudWxsIDogeyBwYXRoOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSB9KTsNCiAgICAgICAgICAgICAgICB9KSgpDQogICAgICAgICAgICB9KTsNCiAgICB9DQoNCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciB1aWQ7ICAgIA0KICAgICAgICB2YXIgeGluZm87DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oMCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoeGluZm8gPT0gbnVsbCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1RoaXMgc3lzdGVtIGNhbm5vdCBkaXNwbGF5IGEgdXNlciBkaWFsb2cgYm94IHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0aGlzLnplbml0eSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gR05PTUUvWkVOSVRZDQogICAgICAgICAgICBpZiAodGhpcy56ZW5pdHkudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy56ZW5pdHkucGF0aCwgWyd6ZW5pdHknLCBsYXlvdXQ9PW51bGw/Jy0tcXVlc3Rpb24nOictLXdhcm5pbmcnLCAnLS10aXRsZT0nICsgdGl0bGUsICctLXRleHQ9JyArIGNhcHRpb24sICctLXRpbWVvdXQ9JyArIHRpbWVvdXRdLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dCA9PSBudWxsID8gJy0tcXVlc3Rpb24nIDogJy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbl0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgYy5raWxsKCk7DQogICAgICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsgfQ0KICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZih0aGlzLmtkaWFsb2cpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdmcmVlYnNkJyAmJiBwcm9jZXNzLmVudlsnRElTUExBWSddKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLmtkaWFsb2cucGF0aCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCB0aXRsZSwgbGF5b3V0PT1udWxsPyctLXllc25vJzonLS1tc2dib3gnLCBjYXB0aW9uXSk7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHVpZCwgJ1hER19SVU5USU1FX0RJUicpOyBpZiAoeGRnID09IG51bGwpIHsgeGRnID0gJyc7IH0NCiAgICAgICAgICAgICAgICBpZiAoIXhpbmZvIHx8ICF4aW5mby5kaXNwbGF5IHx8ICF4aW5mby54YXV0aG9yaXR5KSB7IHJldC5fcmVqKCdJbnRlcmFsIEVycm9yLCBjb3VsZCBub3QgZGV0ZXJtaW5lIFgxMS9YREcgZW52Jyk7IHJldHVybiAocmV0KTsgfQ0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLmtkaWFsb2cucGF0aCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCB0aXRsZSwgbGF5b3V0ID09IG51bGwgPyAnLS15ZXNubycgOiAn", 16000); - memcpy_s(_messagebox + 16000, 20040, "LS1tc2dib3gnLCBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IERJU1BMQVk6IHhpbmZvLmRpc3BsYXksIFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHksIFhER19SVU5USU1FX0RJUjogeGRnIH0gfSk7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYy50aW1lb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgIH0sIHRpbWVvdXQgKiAxMDAwLCByZXQuY2hpbGQpOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAodGhpcy54bWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gdGl0bGUsIGNhcHRpb24sIHRpbWVvdXQsIGxheW91dA0KICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMueG1lc3NhZ2UucGF0aCwgWyd4bWVzc2FnZScsICctY2VudGVyJywgJy1idXR0b25zJywgbGF5b3V0ID09IG51bGwgPyAnTm86MSxZZXM6MicgOiAnT0s6MicsICctdGltZW91dCcsIHRpbWVvdXQudG9TdHJpbmcoKSwgJy1kZWZhdWx0JywgbGF5b3V0PT1udWxsPydObyc6J09LJywgJy10aXRsZScsIHRpdGxlLCBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgIH0pOw0KDQogICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdVbmFibGUgdG8gY3JlYXRlIGRpYWxvZyBib3gnKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicpDQp7DQogICAgZnVuY3Rpb24gdHJhbnNsYXRlT2JqZWN0KG9iaikNCiAgICB7DQogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsNCiAgICAgICAgdmFyIGIgPSBCdWZmZXIuYWxsb2Moai5sZW5ndGggKyA0KTsNCiAgICAgICAgYi53cml0ZVVJbnQzMkxFKGoubGVuZ3RoICsgNCk7DQogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7DQogICAgICAgIHJldHVybiAoYik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgdGhpcy5faW5pdElQQ0Jhc2UgPSBmdW5jdGlvbiBfaW5pdElQQ0Jhc2UoKQ0KICAgIHsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldC5wYXRoID0gJy92YXIvdG1wLycgKyBwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCkgKyAnX2V2JzsNCiAgICAgICAgdmFyIG47DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaCAoZSkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IDA7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgKytuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOw0KICAgICAgICByZXQudG1wU2VydmljZU5hbWUgPSAnbWVzaE5vdGlmaWNhdGlvblNlcnZlcicgKyBuOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICANCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSh0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0KQ0KICAgIHsNCiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyDQogICAgICAgIHZhciByZXQgPSB0aGlzLl9pbml0SVBDQmFzZSgpOw0KICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyByZXQudGltZW91dCA9IHRpbWVvdXQ7IHJldC5sYXlvdXQgPSBsYXlvdXQ7DQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVElNRU9VVCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbiA9PSAnWWVzJyB8fCBwLmJ1dHRvbiA9PSAnT0snKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMocC5idXR0b24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogdGhpcy5yZXQubGF5b3V0PT1udWxsP1snIlllcyInLCAnIk5vIiddOlsnIk9LIiddLCBidXR0b25EZWZhdWx0OiB0aGlzLnJldC5sYXlvdXQ9PW51bGw/MjoxLCB0aW1lb3V0OiB0aGlzLnJldC50aW1lb3V0IH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5sb2NrID0gZnVuY3Rpb24gbG9jaygpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdMT0NLJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snIH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkodGl0bGUsIGNhcHRpb24pDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IA0KICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsNCiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7DQogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGM7DQogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsNCiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgc3dpdGNoIChwLmNvbW1hbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgdGl0bGU6IHRoaXMucmV0LnRpdGxlLCBjYXB0aW9uOiB0aGlzLnJldC5jYXB0aW9uIH0pKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQogICAgdGhpcy5zdGFydENsaWVudCA9IGZ1bmN0aW9uIHN0YXJ0Q2xpZW50KG9wdGlvbnMpDQogICAgew0KICAgICAgICAvLyBDcmVhdGUgdGhlIENsaWVudA0KICAgICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgQ2xpZW50Li4uJyk7DQoNCiAgICAgICAgb3B0aW9ucy5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgb3B0aW9ucy51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB0aGlzLmNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucyk7DQogICAgICAgIHRoaXMuY2xpZW50Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgdGhpcy5jbGllbnQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdMT0NLJzoNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL01lbnVcXCBFeHRyYXMvVXNlci5tZW51L0NvbnRlbnRzL1Jlc291cmNlcy9DR1Nlc3Npb24gLXN1c3BlbmRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IG5vdGlmaWNhdGlvbiAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyJcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ05PVElGWScsIHN0YXR1czogMCB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnRElBTE9HJzoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBwLnRpbWVvdXQgPyAoJyBnaXZpbmcgdXAgYWZ0ZXIgJyArIHAudGltZW91dCkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGljb24gPSBwLmljb24gPyAoJ3dpdGggaWNvbiAnICsgcC5pY29uKSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9ucyA9IHAuYnV0dG9ucyA/ICgnYnV0dG9ucyB7JyArIHAuYnV0dG9ucy50b1N0cmluZygpICsgJ30nKSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b25EZWZhdWx0ICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMgKz0gKCcgZGVmYXVsdCBidXR0b24gJyArIHAuYnV0dG9uRGVmYXVsdCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IGRpYWxvZyAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyIgJyArIGljb24gKyAnICcgKyBidXR0b25zICsgdGltZW91dCArICdcJyB8IGF3ayBcJ3sgYz1zcGxpdCgkMCwgdG9rZW5zLCAiLCIpOyBzcGxpdCh0b2tlbnNbMV0sIHZhbCwgIjoiKTsgaWYoYz09MSkgeyBwcmludCB2YWxbMl0gfSBlbHNlIHsgc3BsaXQodG9rZW5zWzJdLCBndSwgIjoiKTsgaWYoZ3VbMl09PSJ0cnVlIikgeyBwcmludCAiX1RJTUVPVVRfIiB9IGVsc2UgeyBwcmludCB2YWxbMl0gIH0gIH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycgJiYgIXRoaXMuX3NoZWxsLnN0ZGVyci5zdHIuaW5jbHVkZXMoJ09wZW5HTCcpKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVs", 16000); - memcpy_s(_messagebox + 32000, 4040, "c2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpID09ICdfVElNRU9VVF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgYnV0dG9uOiB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyLnRyaW0oKSB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICB0aGlzLmNsaWVudC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pOw0KICAgICAgICB0aGlzLmNsaWVudC51bmluc3RhbGwgPSBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBOZWVkIHRvIHVuaW5zdGFsbCBvdXJzZWx2ZXMNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnLycpLnBvcCgpLCAnLWV4ZWMnLCAidmFyIHM9cmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRMYXVuY2hBZ2VudCgnIiArIHRoaXMuX29wdGlvbnMuc2VydmljZSArICInLCAiICsgdGhpcy5fb3B0aW9ucy51aWQgKyAiKTsgcy51bmxvYWQoKTsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKHMucGxpc3QpO3Byb2Nlc3MuZXhpdCgpOyJdLCB7IGRldGFjaGVkOiB0cnVlLCB0eXBlOiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5ERVRBQ0hFRCB9KTsNCiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgIH07DQogICAgICAgIHJldHVybiAodGhpcy5jbGllbnQpOw0KICAgIH07DQogICAgdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIgPSBmdW5jdGlvbiBzdGFydE1lc3NhZ2VTZXJ2ZXIob3B0aW9ucykNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMob3B0aW9ucy5wYXRoKSkgeyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMob3B0aW9ucy5wYXRoKTsgfQ0KICAgICAgICBvcHRpb25zLndyaXRhYmxlQWxsID0gdHJ1ZTsNCg0KICAgICAgICB2YXIgcmV0ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlU2VydmVyKCk7DQogICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICByZXQub3N2ZXJzaW9uID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykuZ2V0T1NWZXJzaW9uKCk7DQogICAgICAgIHJldC5fb3B0aW9ucyA9IG9wdGlvbnM7DQogICAgICAgIHJldC50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKG9iaikNCiAgICAgICAgew0KICAgICAgICAgICAgb2JqLmNsb3NlKCk7DQogICAgICAgICAgICBvYmouX29wdGlvbnMuX3JlaignQ29ubmVjdGlvbiB0aW1lb3V0Jyk7DQogICAgICAgIH0sIDUwMDAsIHJldCk7DQogICAgICAgIHJldC5saXN0ZW4ob3B0aW9ucyk7DQogICAgICAgIHJldC5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7DQogICAgICAgIH0pOw0KICAgICAgICByZXQub24oJ34nLCBmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmModGhpcy5fb3B0aW9ucy5wYXRoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5pbnN0YWxsTGF1bmNoQWdlbnQoDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgbmFtZTogb3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgc2VydmljZVBhdGg6IHByb2Nlc3MuZXhlY1BhdGgsIHN0YXJ0VHlwZTogJ0FVVE9fU1RBUlQnLCB1aWQ6IHJldC51aWQsDQogICAgICAgICAgICAgICAgc2Vzc2lvblR5cGVzOiBbJ0FxdWEnXSwgcGFyYW1ldGVyczogWyctZXhlYycsICJyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnN0YXJ0Q2xpZW50KHsgcGF0aDogJyIgKyBvcHRpb25zLnBhdGggKyAiJywgc2VydmljZTogJyIgKyBvcHRpb25zLnRtcFNlcnZpY2VOYW1lICsgIicgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOyJdDQogICAgICAgICAgICB9KTsNCiAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRMYXVuY2hBZ2VudChvcHRpb25zLnRtcFNlcnZpY2VOYW1lLCByZXQudWlkKS5sb2FkKCk7DQoNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07DQp9DQoNCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBtZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbGludXhfbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBtYWNvc19tZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KfQ0KDQoNCg0KDQoNCg0K", 4040); - ILibBase64DecodeEx((unsigned char*)_messagebox, 36040, (unsigned char*)_messagebox + 36040); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 36040); + char *_messagebox = ILibMemory_Allocate(67607, 0, NULL, NULL); + memcpy_s(_messagebox + 0, 38632, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQoNCmNvbnN0IE1CX0RFRkJVVFRPTjEgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfREVGQlVUVE9OMiAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7DQpjb25zdCBNQl9ERUZCVVRUT04zICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsNCmNvbnN0IE1CX0lDT05IQU5EICAgICAgICAgICAgICAgPSAweDAwMDAwMDEwOw0KY29uc3QgTUJfSUNPTlFVRVNUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMjA7DQpjb25zdCBNQl9JQ09ORVhDTEFNQVRJT04gICAgICAgID0gMHgwMDAwMDAzMDsNCmNvbnN0IE1CX0lDT05BU1RFUklTSyAgICAgICAgICAgPSAweDAwMDAwMDQwOw0KDQpjb25zdCBJRE9LICAgICA9IDE7DQpjb25zdCBJRENBTkNFTCA9IDI7DQpjb25zdCBJREFCT1JUICA9IDM7DQpjb25zdCBJRFJFVFJZICA9IDQ7DQpjb25zdCBJRElHTk9SRSA9IDU7DQpjb25zdCBJRFlFUyAgICA9IDY7DQpjb25zdCBJRE5PICAgICA9IDc7DQoNCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KdmFyIGNoaWxkU2NyaXB0ID0gIlwNCiAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykub24oJ2RhdGEnLCBmdW5jdGlvbiAoailcDQogICAgICAgIHtcDQogICAgICAgICAgICBzd2l0Y2goai5jb21tYW5kKVwNCiAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZUJveCc6XA0KICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpXA0KICAgICAgICAgICAgICAgICAgICB7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnTWVzc2FnZUJveEEnKTtcDQogICAgICAgICAgICAgICAgICAgICAgICB1c2VyMzIuTWVzc2FnZUJveEEuYXN5bmMoMCwgR00uQ3JlYXRlVmFyaWFibGUoai5jYXB0aW9uKSwgR00uQ3JlYXRlVmFyaWFibGUoai50aXRsZSksIGoubGF5b3V0KS50aGVuKFwNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHIpXA0KICAgICAgICAgICAgICAgICAgICAgICAge1wNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goci5WYWwpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElET0sudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRENBTkNFTC50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElEQUJPUlQudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFJFVFJZLnRvU3RyaW5nKCkgKyAiOlwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICsgSURJR05PUkUudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFlFUy50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKHIuVmFsKTtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgiICsgSUROTy50b1N0cmluZygpICsgIik7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7XA0KICAgICAgICAgICAgICAgICAgICB9XA0KICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICB9XA0KICAgICAgICB9KTtcDQogICAgIjsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7DQogICAgICAgIHZhciBwc2lkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgIGlmIChrZXJuZWwzMi5Qcm9jZXNzSWRUb1Nlc3Npb25JZChwcm9jZXNzLnBpZCwgcHNpZCkuVmFsID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdJbnRlcm5hbCBFcnJvcicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciBvcHRpb25zID0geyBleGVjdXRpb25UaW1lb3V0OiB0aW1lb3V0IH07DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbklkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuX3RpdGxlID0gdGl0bGU7DQogICAgICAgIHJldC5fY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZGF0YScsIGZ1bmN0aW9uIChqKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihqID09IElEWUVTIHx8IGogPT0gSURPSykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdEZW5pZWQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RpbWVvdXQnKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2VCb3gnLCBjYXB0aW9uOiBjYXB0aW9uLCB0aXRsZTogdGl0bGUsIGxheW91dDogbGF5b3V0IH0pOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpmdW5jdGlvbiBsaW51eF9tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd6ZW5pdHknLA0KICAgICAgICB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnICYmIHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL3Vzci9sb2NhbC9iaW4vemVuaXR5JykpIHsgbG9jYXRpb24gPSAnL3Vzci9sb2NhbC9iaW4vemVuaXR5JzsgfQ0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJykgeyByZXR1cm4gKG51bGwpOyB9DQoNCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0geyBwYXRoOiBsb2NhdGlvbiwgdGltZW91dDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidGltZW91dCIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUobG9jYXRpb24gKyAnIC0taGVscC1hbGwgfCBncmVwIHRpbWVvdXRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGUpIHsgY29uc29sZS5sb2coZSk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidmVyc2lvbiIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoWzIsIDE2XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVz", 16000); + memcpy_s(_messagebox + 16000, 22632, "dGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgIGMua2lsbCgpOw0KICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh0aGlzLnhtZXNzYWdlKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyB0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0DQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy54bWVzc2FnZS5wYXRoLCBbJ3htZXNzYWdlJywgJy1jZW50ZXInLCAnLWJ1dHRvbnMnLCBsYXlvdXQgPT0gbnVsbCA/ICdObzoxLFllczoyJyA6ICdPSzoyJywgJy10aW1lb3V0JywgdGltZW91dC50b1N0cmluZygpLCAnLWRlZmF1bHQnLCBsYXlvdXQ9PW51bGw/J05vJzonT0snLCAnLXRpdGxlJywgdGl0bGUsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7ICB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQoNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKGNvZGUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1VuYWJsZSB0byBjcmVhdGUgZGlhbG9nIGJveCcpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCnsNCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQ0KICAgIHsNCiAgICAgICAgdmFyIGogPSBKU09OLnN0cmluZ2lmeShvYmopOw0KICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOw0KICAgICAgICBiLndyaXRlVUludDMyTEUoai5sZW5ndGggKyA0KTsNCiAgICAgICAgQnVmZmVyLmZyb20oaikuY29weShiLCA0KTsNCiAgICAgICAgcmV0dXJuIChiKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIG1hY29zX21lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICB0aGlzLl9pbml0SVBDQmFzZSA9IGZ1bmN0aW9uIF9pbml0SVBDQmFzZSgpDQogICAgew0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOw0KICAgICAgICB2YXIgbjsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBuID0gMDsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKHJldC5wYXRoICsgbikpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICArK247DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0LnBhdGggPSByZXQucGF0aCArIG47DQogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IHJldC50aW1lb3V0ID0gdGltZW91dDsgcmV0LmxheW91dCA9IGxheW91dDsNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJQUxPRyc6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdUSU1FT1VUJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uID09ICdZZXMnIHx8IHAuYnV0dG9uID09ICdPSycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmJ1dHRvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpdGxlOiB0aGlzLnJldC50aXRsZSwgY2FwdGlvbjogdGhpcy5yZXQuY2FwdGlvbiwgaWNvbjogJ2NhdXRpb24nLCBidXR0b25zOiB0aGlzLnJldC5sYXlvdXQ9PW51bGw/WyciWWVzIicsICciTm8iJ106WyciT0siJ10sIGJ1dHRvbkRlZmF1bHQ6IHRoaXMucmV0LmxheW91dD09bnVsbD8yOjEsIHRpbWVvdXQ6IHRoaXMucmV0LnRpbWVvdXQgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLmxvY2sgPSBmdW5jdGlvbiBsb2NrKCkNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgDQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24gfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0Q2xpZW50ID0gZnVuY3Rpb24gc3RhcnRDbGllbnQob3B0aW9ucykNCiAgICB7DQogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50DQogICAgICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBDbGllbnQuLi4nKTsNCg0KICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICBvcHRpb25zLnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHRoaXMuY2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zKTsNCiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICB0aGlzLmNsaWVudC5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvTWVudVxcIEV4dHJhcy9Vc2VyLm1lbnUvQ29udGVudHMvUmVzb3VyY2VzL0NHU2Vzc2lvbiAtc3VzcGVuZFxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snLCBzdGF0dXM6IDAgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgbm90aWZpY2F0aW9uICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIlwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5f", 16000); + memcpy_s(_messagebox + 32000, 6632, "c2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IHAudGltZW91dCA/ICgnIGdpdmluZyB1cCBhZnRlciAnICsgcC50aW1lb3V0KSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7DQogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gcC5idXR0b25zID8gKCdidXR0b25zIHsnICsgcC5idXR0b25zLnRvU3RyaW5nKCkgKyAnfScpIDogJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbkRlZmF1bHQgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucyArPSAoJyBkZWZhdWx0IGJ1dHRvbiAnICsgcC5idXR0b25EZWZhdWx0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJyAmJiAhdGhpcy5fc2hlbGwuc3RkZXJyLnN0ci5pbmNsdWRlcygnT3BlbkdMJykpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpbWVvdXQ6IHRydWUgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSk7DQogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5pbnN0YWxsIG91cnNlbHZlcw0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlciA9IGZ1bmN0aW9uIHN0YXJ0TWVzc2FnZVNlcnZlcihvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhvcHRpb25zLnBhdGgpKSB7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhvcHRpb25zLnBhdGgpOyB9DQogICAgICAgIG9wdGlvbnMud3JpdGFibGVBbGwgPSB0cnVlOw0KDQogICAgICAgIHZhciByZXQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVTZXJ2ZXIoKTsNCiAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgcmV0Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgcmV0LnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAob2JqKQ0KICAgICAgICB7DQogICAgICAgICAgICBvYmouY2xvc2UoKTsNCiAgICAgICAgICAgIG9iai5fb3B0aW9ucy5fcmVqKCdDb25uZWN0aW9uIHRpbWVvdXQnKTsNCiAgICAgICAgfSwgNTAwMCwgcmV0KTsNCiAgICAgICAgcmV0Lmxpc3RlbihvcHRpb25zKTsNCiAgICAgICAgcmV0Lm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyh0aGlzLl9vcHRpb25zLnBhdGgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnRtcFNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aDogcHJvY2Vzcy5leGVjUGF0aCwgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsIHVpZDogcmV0LnVpZCwNCiAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnQXF1YSddLCBwYXJhbWV0ZXJzOiBbJy1leGVjJywgInJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc3RhcnRDbGllbnQoeyBwYXRoOiAnIiArIG9wdGlvbnMucGF0aCArICInLCBzZXJ2aWNlOiAnIiArIG9wdGlvbnMudG1wU2VydmljZU5hbWUgKyAiJyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7Il0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHJldC51aWQpLmxvYWQoKTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0KDQoNCg0KDQo=", 6632); + ILibBase64DecodeEx((unsigned char*)_messagebox, 38632, (unsigned char*)_messagebox + 38632); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 38632); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_messagebox); diff --git a/modules/message-box.js b/modules/message-box.js index acd61ac..3937791 100644 --- a/modules/message-box.js +++ b/modules/message-box.js @@ -155,26 +155,62 @@ function linux_messageBox() if (location == '' && require('fs').existsSync('/usr/local/bin/zenity')) { location = '/usr/local/bin/zenity'; } if (location == '') { return (null); } - child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); - child.stdin.write(location + ' --help-all | grep timeout\nexit\n'); - child.waitExit(); - var ret = { path: location, timeout: child.stdout.str.trim() == '' ? false : true }; + Object.defineProperty(ret, "timeout", { + get: function () + { + var uid, xinfo; + try + { + uid = require('user-sessions').consoleUid(); + xinfo = require('monitor-info').getXInfo(uid); + } + catch (e) + { + uid = 0; + xinfo = require('monitor-info').getXInfo(0); + } + if (xinfo == null) { return (false); } + var child = require('child_process').execFile('/bin/sh', ['sh'], { uid: uid, env: { XAUTHORITY: xinfo.xauthority ? xinfo.xauthority : "", DISPLAY: xinfo.display } }); + child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); + child.stdin.write(location + ' --help-all | grep timeout\nexit\n'); + child.stderr.on('data', function (e) { console.log(e); }); + child.waitExit(); + return (child.stdout.str.trim() == '' ? false : true); + } + }); - child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); - child.stdin.write(location + ' --version | awk -F. \'{ printf "[%s, %s]\\n", $1, $2; } \'\nexit\n'); - child.waitExit(); + Object.defineProperty(ret, "version", { + get: function () + { + var uid, xinfo; + try + { + uid = require('user-sessions').consoleUid(); + xinfo = require('monitor-info').getXInfo(uid); + } + catch (e) + { + uid = 0; + xinfo = require('monitor-info').getXInfo(0); + } + if (xinfo == null) { return (false); } - try - { - ret.version = JSON.parse(child.stdout.str.trim()); - } - catch(e) - { - ret.version = [2, 16]; - } + var child = require('child_process').execFile('/bin/sh', ['sh'], { uid: uid, env: { XAUTHORITY: xinfo.xauthority ? xinfo.xauthority : "", DISPLAY: xinfo.display } }); + child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); + child.stdin.write(location + ' --version | awk -F. \'{ printf "[%s, %s]\\n", $1, $2; } \'\nexit\n'); + child.waitExit(); + + try + { + return (JSON.parse(child.stdout.str.trim())); + } + catch (e) + { + return ([2, 16]); + } + } + }); return (ret); })() }); @@ -254,6 +290,7 @@ function linux_messageBox() ret.child = require('child_process').execFile(this.zenity.path, ['zenity', layout == null ? '--question' : '--warning', '--title=' + title, '--text=' + caption], { uid: uid, env: { XAUTHORITY: xinfo.xauthority ? xinfo.xauthority : "", DISPLAY: xinfo.display } }); ret.child.timeout = setTimeout(function (c) { + c.promise._rej('timeout'); c.timeout = null; c.kill(); }, timeout * 1000, ret.child);