diff --git a/meshservice/ServiceMain.c b/meshservice/ServiceMain.c index d759d0a..8a7f388 100644 --- a/meshservice/ServiceMain.c +++ b/meshservice/ServiceMain.c @@ -862,12 +862,31 @@ int wmain(int argc, char* wargv[]) #endif #ifndef _MINCORE else if (argc > 1 && memcmp(argv[1], "-update:", 8) == 0) - { - // Attempt to copy our own exe over the original exe - while (util_CopyFile(argv[0], argv[1] + 8, FALSE) == FALSE) Sleep(5000); + { + char *update = ILibMemory_Allocate(512, 0, NULL, NULL); + int updateLen = sprintf_s(update, 512, "require('agent-installer').update();"); + __try + { + agent = MeshAgent_Create(0); + agent->meshCoreCtx_embeddedScript = update; + agent->meshCoreCtx_embeddedScriptLen = updateLen; + MeshAgent_Start(agent, argc, argv); + retCode = agent->exitCode; + MeshAgent_Destroy(agent); + agent = NULL; + } + __except (ILib_WindowsExceptionFilterEx(GetExceptionCode(), GetExceptionInformation(), &winException)) + { + ILib_WindowsExceptionDebugEx(&winException); + } + wmain_free(argv); + return(retCode); - // Attempt to start the updated service up again - LaunchService(serviceFile); + //// Attempt to copy our own exe over the original exe + //while (util_CopyFile(argv[0], argv[1] + 8, FALSE) == FALSE) Sleep(5000); + + //// Attempt to start the updated service up again + //LaunchService(serviceFile); } else if (argc > 1 && (strcasecmp(argv[1], "-netinfo") == 0)) { diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 2848f87..454ddb9 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2227,11 +2227,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('default_route', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8NCg0KZnVuY3Rpb24gd2luZG93c19kZWZhdWx0Um91dGUoKQ0Kew0KICAgIHZhciByZXQgPSBudWxsOw0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIElQID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ0lwaGxwYXBpLmRsbCcpOw0KICAgIElQLkNyZWF0ZU1ldGhvZCgnR2V0SXBGb3J3YXJkVGFibGUnKTsNCg0KICAgIHZhciBzaXplID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgdmFyIHJlc3VsdCA9IElQLkdldElwRm9yd2FyZFRhYmxlKDAsIHNpemUsIDEpOw0KICAgIGlmKHJlc3VsdC5WYWwgPT0gMTIyKQ0KICAgIHsNCiAgICAgICAgdmFyIHRhYmxlID0gR00uQ3JlYXRlVmFyaWFibGUoc2l6ZS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKTsNCiAgICAgICAgcmVzdWx0ID0gSVAuR2V0SXBGb3J3YXJkVGFibGUodGFibGUsIHNpemUsIDEpOw0KICAgICAgICBpZihyZXN1bHQuVmFsID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBlbnRyaWVzID0gdGFibGUuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKTsNCiAgICAgICAgICAgIHZhciByb3c7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8ZW50cmllczsrK2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcm93ID0gdGFibGUuRGVyZWYoNCArIChpICogNTYpLCA1Nik7DQogICAgICAgICAgICAgICAgaWYgKHJvdy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpID09IDApDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IFJvdXRlDQogICAgICAgICAgICAgICAgICAgIGlmICghcmV0IHx8IHJldC5tZXRyaWMgPiByb3cuRGVyZWYoMzYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHsgaW50ZXJmYWNlOiByb3cuRGVyZWYoMTYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCksIG1ldHJpYzogcm93LkRlcmVmKDM2LCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpIH07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW51eF9kZWZhdWx0Um91dGUoKQ0Kew0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpcCByb3V0ZSB8IGdyZXAgZGVmYXVsdCB8IGF3ayBcJ3sgaWYoICQxPT0iZGVmYXVsdCIgJiYgJDQ9PSJkZXYiICkgeyBwcmludCAkNTsgfSB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IGludGVyZmFjZTogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCksIG1ldHJpYzogMSB9KTsNCn0NCg0KZnVuY3Rpb24gYnNkX2RlZmF1bHRSb3V0ZSgpDQp7DQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ25ldHN0YXQgLXJuIC1mIGluZXQgfCBncmVwIGRlZmF1bHQgfCBhd2sgXCd7IHByaW50ICRORiB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IGludGVyZmFjZTogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCksIG1ldHJpYzogMSB9KTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd3NfZGVmYXVsdFJvdXRlOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbGludXhfZGVmYXVsdFJvdXRlOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGJzZF9kZWZhdWx0Um91dGU7DQogICAgICAgIGJyZWFrOw0KfQ0KDQo=', 'base64').toString());"); // agent-instaler: Refer to modules/agent-installer.js - char *_agentinstaller = ILibMemory_Allocate(30192, 0, NULL, NULL); - memcpy_s(_agentinstaller + 0, 17252, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnLi4uSW5zdGFsbGluZyBzZXJ2aWNlJyk7DQoNCg0KICAgIHZhciBvcHRpb25zID0NCiAgICAgICAgew0KICAgICAgICAgICAgbmFtZTogcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ01lc2ggQWdlbnQnIDogJ21lc2hhZ2VudCcsDQogICAgICAgICAgICB0YXJnZXQ6IHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoQWdlbnQnIDogJ21lc2hhZ2VudCcsDQogICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgYmFja2dyb3VuZCBzZXJ2aWNlJywNCiAgICAgICAgICAgIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLA0KICAgICAgICAgICAgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsDQogICAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbXMNCiAgICAgICAgfTsNCiAgICB2YXIgaTsNCiAgICBpZiAoKGk9cGFyYW1zLmluZGV4T2YoJy0tX2xvY2FsU2VydmljZT0iMSInKSk+PTApDQogICAgew0KICAgICAgICAvLyBpbnN0YWxsIGluIHBsYWNlDQogICAgICAgIG9wdGlvbnMucGFyYW1ldGVycy5zcGxpY2UoaSwgMSk7DQogICAgICAgIG9wdGlvbnMuaW5zdGFsbEluUGxhY2UgPSB0cnVlOw0KICAgIH0NCiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5wYXJhbWV0ZXJzLmxlbmd0aDsgKytpKQ0KICAgIHsNCiAgICAgICAgaWYob3B0aW9ucy5wYXJhbWV0ZXJzW2ldLnN0YXJ0c1dpdGgoJy0taW5zdGFsbFBhdGg9JykpDQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuaW5zdGFsbFBhdGggPSBvcHRpb25zLnBhcmFtZXRlcnNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLmluc3RhbGxQYXRoLnN0YXJ0c1dpdGgoJyInKSkgeyBvcHRpb25zLmluc3RhbGxQYXRoID0gb3B0aW9ucy5pbnN0YWxsUGF0aC5zdWJzdHJpbmcoMSwgb3B0aW9ucy5pbnN0YWxsUGF0aC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgb3B0aW9ucy5wYXJhbWV0ZXJzLnNwbGljZShpLCAxKTsNCiAgICAgICAgICAgIG9wdGlvbnMuaW5zdGFsbEluUGxhY2UgPSBmYWxzZTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdHJ5DQogICAgew0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxTZXJ2aWNlKG9wdGlvbnMpOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIGNhdGNoKHNpZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXSAnICsgc2llKTsNCiAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgfQ0KICAgIHZhciBzdmMgPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldFNlcnZpY2UocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJz8nTWVzaCBBZ2VudCc6J21lc2hhZ2VudCcpOw0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgc3ZjLmxvYWQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IHNldHRpbmcgdXAgbGF1bmNoIGFnZW50Li4uJyk7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICdtZXNoYWdlbnQnLA0KICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlUGF0aDogc3ZjLmFwcExvY2F0aW9uKCksDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0VHlwZTogJ0FVVE9fU1RBUlQnLA0KICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnTG9naW5XaW5kb3cnXSwNCiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogWycta3ZtMSddDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKHNpZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRVJST1JdICcgKyBzaWUpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICB2YXIgbG9jID0gc3ZjLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBXcml0aW5nIGZpcmV3YWxsIHJ1bGVzIGZvciBNZXNoIEFnZW50IFNlcnZpY2UuLi4nKTsNCg0KICAgICAgICB2YXIgcnVsZSA9IA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIERpc3BsYXlOYW1lOiAnTWVzaCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMgKFRDUC0xKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVENQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTAsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgTWFuYWdlbWVudCBUcmFmZmljJywNCiAgICAgICAgICAgICAgICBFZGdlVHJhdmVyc2FsUG9saWN5OiAnYWxsb3cnLA0KICAgICAgICAgICAgICAgIEVuYWJsZWQ6IHRydWUNCiAgICAgICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0gDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IE1hbmFnZW1lbnQgVHJhZmZpYyAoVENQLTIpJywNCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdpbmJvdW5kJywNCiAgICAgICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICAgICAgUHJvdG9jb2w6ICdUQ1AnLA0KICAgICAgICAgICAgICAgIFByb2ZpbGU6ICdQdWJsaWMsIFByaXZhdGUsIERvbWFpbicsDQogICAgICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MSwNCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogJ01lc2ggQ2VudHJhbCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOyANCg0KICAgICAgICBydWxlID0NCiAgICAgICAgew0KICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljIChVRFAtMSknLA0KICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICBQcm90b2NvbDogJ1VEUCcsDQogICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MCwNCiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnTWVzaCBDZW50cmFsIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljJywNCiAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICBFbmFibGVkOiB0cnVlDQogICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMgKFVEUC0yKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVURQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTEsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBTdGFydGluZyBzZXJ2aWNlLi4uJyk7DQogICAgdHJ5DQogICAgew0KICAgICAgICBzdmMuc3RhcnQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbT0tdXG4nKTsNCiAgICB9DQogICAgY2F0Y2goZWUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpIHsgc3ZjLmNsb3NlKCk7IH0NCiAgICBwcm9jZXNzLmV4aXQoKTsNCn0NCg0KZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKQ0Kew0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBsYXVuY2ggYWdlbnQuLi4nKTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBsYXVuY2hhZ2VudCA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQoJ21lc2hhZ2VudCcpOw0KICAgICAgICAgICAgbGF1bmNoYWdlbnQudW5sb2FkKCk7DQogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmMobGF1bmNoYWdlbnQucGxpc3QpOw0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRE9ORV1cbicpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhcGFyYW1zLmluY2x1ZGVzKCdfc3RvcCcpKQ0KICAgIHsNCiAgICAgICAgaW5zdGFsbFNlcnZpY2UocGFyYW1zKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlMihwYXJhbXMpDQp7DQogICAgdmFyIHNlY29uZGFyeWFnZW50ID0gZmFsc2U7DQogICAgdmFyIGk7DQogICAgdmFyIGRhdGFGb2xkZXIgPSBudWxsOw0KICAgIHZhciBhcHBQcmVmaXggPSBudWxsOw0KDQogICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMuaW5jbHVkZXMoJy0tX2RlbGV0ZURhdGE9IjEiJykpDQogICAgew0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAocGFyYW1zW2ldLnN0YXJ0c1dpdGgoJ193b3JraW5nRGlyPScpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGRhdGFGb2xkZXIgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgICAgICBpZiAoZGF0YUZvbGRlci5zdGFydHNXaXRoKCciJykpIHsgZGF0YUZvbGRlciA9IGRhdGFGb2xkZXIuc3Vic3RyaW5nKDEsIGRhdGFGb2xkZXIubGVuZ3RoIC0gMSk7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChwYXJhbXNbaV0uc3RhcnRzV2l0aCgnX2FwcFByZWZpeD0nKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhcHBQcmVmaXggPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgICAgICBpZiAoYXBwUHJlZml4LnN0YXJ0c1dpdGgoJyInKSkgeyBhcHBQcmVmaXggPSBhcHBQcmVmaXguc3Vic3RyaW5nKDEsIGFwcFByZWZpeC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBwcmV2aW91cyBpbnN0YWxsYXRpb24uLi4nKTsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIudW5pbnN0YWxsU2VydmljZShwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnTWVzaCBBZ2VudCcgOiAnbWVzaGFnZW50Jyk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICAgICAgaWYgKGRhdGFGb2xkZXIgJiYgYXBwUHJlZml4KQ0KICAgICAgICB7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgLT4gRGVsZXRpbmcgYWdlbnQgZGF0YS4uLicpOw0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjZCAnICsgZGF0YUZvbGRlciArICdcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdybSAnICsgYXBwUHJlZml4ICsgJy4qXHJcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgICAgICAgDQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcc3lzdGVtMzJcXGNtZC5leGUnLCBbJy9DIGRlbCAiJyArIGRhdGFGb2xkZXIgKyAnXFwnICsgYXBwUHJlZml4ICsgJy4qIiddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIC8vIENoZWNrIGZvciBzZWNvbmRhcnkgYWdlbnQNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBDaGVja2luZyBmb3Igc2Vjb25kYXJ5IGFnZW50Li4uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgIHZhciBsb2MgPSBzLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHMuY2xvc2UoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRk9VTkRdXG4nKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgICAgIC0+IFVuaW5zdGFsbGluZyBzZWNvbmRhcnkgYWdlbnQuLi4nKTsNCiAgICAgICAgc2Vjb25kYXJ5YWdlbnQgPSB0cnVlOw0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci51bmluc3RhbGxTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtOT05FXVxuJyk7DQogICAgfQ0KDQogICAgaWYoc2Vjb25kYXJ5YWdlbnQpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgICAgLT4gcmVtb3Zpbmcgc2Vjb25kYXJ5IGFnZW50IGZyb20gdGFzayBzY2hlZHVsZXIuLi4nKTsNCiAgICAgICAgdmFyIHAgPSByZXF1aXJlKCd0YXNrLXNjaGVkdWxlcicpLmRlbGV0ZSgnbWVzaGFnZW50RGlhZ25vc3RpYy9wZXJpb2RpY1N0YXJ0Jyk7DQogICAgICAgIHAuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgcC50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UzKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlMyh0aGlzLl9wYXJhbXMpOw0KICAgICAgICB9KTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKTsNCiAgICB9DQp9DQpmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICB2YXIgc3ZjID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICBpZiAoc3ZjLmlzUnVubmluZygpKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFN0b3BwaW5nIFNlcnZpY2UuLi4nKTsNCiAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgc3ZjLnN0b3AoKS50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgICAgIHN2Yy5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHRoaXMuX3BhcmFtcyk7DQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICAgICAgc3ZjLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgICAgIH0pLnBhcmVudFByb21pc2UuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN2Yy51bmxvYWQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzdmMuc3RvcCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIocGFyYW1zKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKSB7IHN2Yy5jbG9zZSgpOyB9DQogICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHBhcmFtcyk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gc2VydmljZUV4aXN0cyhsb2MsIHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtGT1VORDogJyArIGxvYyArICddXG4nKTsNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgLT4gQ2hlY2tpbmcgZmlyZXdhbGwgcnVsZXMgZm9yIHByZXZpb3VzIGluc3RhbGxhdGlvbi4uLicpOw0KICAgICAgICByZXF1aXJlKCd3aW4tZmlyZXdhbGwnKS5yZW1vdmVGaXJld2FsbFJ1bGUoeyBwcm9ncmFtOiBsb2MgfSkudGhlbihmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBTVUNDRVNTDQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtERUxFVEVEXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZBSUxFRA0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbTm8gUnVsZXMgRm91bmRdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgfSkucGFyZW50UHJvbWlzZS5fcGFyYW1zID0gcGFyYW1zOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBmdWxsVW5pbnN0YWxsKGpzb25TdHJpbmcpDQp7DQogICAgY29uc29sZS5zZXREZXN0aW5hdGlvbihjb25zb2xlLkRlc3RpbmF0aW9ucy5ESVNBQkxFRCk7DQogICAgdmFyIHBhcm1zID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTsNCiAgICBwYXJtcy5wdXNoKCdfc3RvcCcpOw0KDQogICAgdHJ5DQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnLi4uQ2hlY2tpbmcgZm9yIHByZXZpb3VzIGluc3RhbGxhdGlvbicpOw0KICAgICAgICB2YXIgcyA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0U2VydmljZShwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnTWVzaCBBZ2VudCcgOiAnbWVzaGFnZW50Jyk7DQogICAgICAgIHZhciBsb2MgPSBzLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHZhciBhcHBQcmVmaXggPSBsb2Muc3BsaXQocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ1xcJyA6ICcvJykucG9wKCk7DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpIHsgYXBwUHJlZml4ID0gYXBwUHJlZml4LnN1YnN0cmluZygwLCBhcHBQcmVmaXgubGVuZ3RoIC0gNCk7IH0NCg0KICAgICAgICBwYXJtcy5w", 16000); - memcpy_s(_agentinstaller + 16000, 1252, "dXNoKCdfd29ya2luZ0Rpcj0nICsgcy5hcHBXb3JraW5nRGlyZWN0b3J5KCkpOw0KICAgICAgICBwYXJtcy5wdXNoKCdfYXBwUHJlZml4PScgKyBhcHBQcmVmaXgpOw0KDQogICAgICAgIHMuY2xvc2UoKTsNCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtOT05FXVxuJyk7DQogICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgIH0NCiAgICBzZXJ2aWNlRXhpc3RzKGxvYywgcGFybXMpOw0KfQ0KDQpmdW5jdGlvbiBmdWxsSW5zdGFsbChqc29uU3RyaW5nKQ0Kew0KICAgIGNvbnNvbGUuc2V0RGVzdGluYXRpb24oY29uc29sZS5EZXN0aW5hdGlvbnMuRElTQUJMRUQpOw0KICAgIHZhciBwYXJtcyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7DQoNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcuLi5DaGVja2luZyBmb3IgcHJldmlvdXMgaW5zdGFsbGF0aW9uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICAgICAgdmFyIGxvYyA9IHMuYXBwTG9jYXRpb24oKTsNCiAgICAgICAgcy5jbG9zZSgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW05PTkVdXG4nKTsNCiAgICAgICAgaW5zdGFsbFNlcnZpY2UocGFybXMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIHNlcnZpY2VFeGlzdHMobG9jLCBwYXJtcyk7DQp9DQoNCg0KbW9kdWxlLmV4cG9ydHMgPQ0KICAgIHsNCiAgICAgICAgZnVsbEluc3RhbGw6IGZ1bGxJbnN0YWxsLA0KICAgICAgICBmdWxsVW5pbnN0YWxsOiBmdWxsVW5pbnN0YWxsDQogICAgfTs=", 1252); - ILibBase64DecodeEx((unsigned char*)_agentinstaller, 17252, (unsigned char*)_agentinstaller + 17252); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "agent-installer"); duk_push_string(ctx, _agentinstaller + 17252); + char *_agentinstaller = ILibMemory_Allocate(33504, 0, NULL, NULL); + memcpy_s(_agentinstaller + 0, 19144, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnLi4uSW5zdGFsbGluZyBzZXJ2aWNlJyk7DQoNCg0KICAgIHZhciBvcHRpb25zID0NCiAgICAgICAgew0KICAgICAgICAgICAgbmFtZTogcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ01lc2ggQWdlbnQnIDogJ21lc2hhZ2VudCcsDQogICAgICAgICAgICB0YXJnZXQ6IHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoQWdlbnQnIDogJ21lc2hhZ2VudCcsDQogICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgYmFja2dyb3VuZCBzZXJ2aWNlJywNCiAgICAgICAgICAgIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLA0KICAgICAgICAgICAgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsDQogICAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbXMNCiAgICAgICAgfTsNCiAgICB2YXIgaTsNCiAgICBpZiAoKGk9cGFyYW1zLmluZGV4T2YoJy0tX2xvY2FsU2VydmljZT0iMSInKSk+PTApDQogICAgew0KICAgICAgICAvLyBpbnN0YWxsIGluIHBsYWNlDQogICAgICAgIG9wdGlvbnMucGFyYW1ldGVycy5zcGxpY2UoaSwgMSk7DQogICAgICAgIG9wdGlvbnMuaW5zdGFsbEluUGxhY2UgPSB0cnVlOw0KICAgIH0NCiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5wYXJhbWV0ZXJzLmxlbmd0aDsgKytpKQ0KICAgIHsNCiAgICAgICAgaWYob3B0aW9ucy5wYXJhbWV0ZXJzW2ldLnN0YXJ0c1dpdGgoJy0taW5zdGFsbFBhdGg9JykpDQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuaW5zdGFsbFBhdGggPSBvcHRpb25zLnBhcmFtZXRlcnNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLmluc3RhbGxQYXRoLnN0YXJ0c1dpdGgoJyInKSkgeyBvcHRpb25zLmluc3RhbGxQYXRoID0gb3B0aW9ucy5pbnN0YWxsUGF0aC5zdWJzdHJpbmcoMSwgb3B0aW9ucy5pbnN0YWxsUGF0aC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgb3B0aW9ucy5wYXJhbWV0ZXJzLnNwbGljZShpLCAxKTsNCiAgICAgICAgICAgIG9wdGlvbnMuaW5zdGFsbEluUGxhY2UgPSBmYWxzZTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgdHJ5DQogICAgew0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxTZXJ2aWNlKG9wdGlvbnMpOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIGNhdGNoKHNpZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXSAnICsgc2llKTsNCiAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgfQ0KICAgIHZhciBzdmMgPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldFNlcnZpY2UocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJz8nTWVzaCBBZ2VudCc6J21lc2hhZ2VudCcpOw0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgc3ZjLmxvYWQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IHNldHRpbmcgdXAgbGF1bmNoIGFnZW50Li4uJyk7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICdtZXNoYWdlbnQnLA0KICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlUGF0aDogc3ZjLmFwcExvY2F0aW9uKCksDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0VHlwZTogJ0FVVE9fU1RBUlQnLA0KICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnTG9naW5XaW5kb3cnXSwNCiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogWycta3ZtMSddDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKHNpZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRVJST1JdICcgKyBzaWUpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICB2YXIgbG9jID0gc3ZjLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBXcml0aW5nIGZpcmV3YWxsIHJ1bGVzIGZvciBNZXNoIEFnZW50IFNlcnZpY2UuLi4nKTsNCg0KICAgICAgICB2YXIgcnVsZSA9IA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIERpc3BsYXlOYW1lOiAnTWVzaCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMgKFRDUC0xKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVENQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTAsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgTWFuYWdlbWVudCBUcmFmZmljJywNCiAgICAgICAgICAgICAgICBFZGdlVHJhdmVyc2FsUG9saWN5OiAnYWxsb3cnLA0KICAgICAgICAgICAgICAgIEVuYWJsZWQ6IHRydWUNCiAgICAgICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0gDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IE1hbmFnZW1lbnQgVHJhZmZpYyAoVENQLTIpJywNCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdpbmJvdW5kJywNCiAgICAgICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICAgICAgUHJvdG9jb2w6ICdUQ1AnLA0KICAgICAgICAgICAgICAgIFByb2ZpbGU6ICdQdWJsaWMsIFByaXZhdGUsIERvbWFpbicsDQogICAgICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MSwNCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogJ01lc2ggQ2VudHJhbCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOyANCg0KICAgICAgICBydWxlID0NCiAgICAgICAgew0KICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljIChVRFAtMSknLA0KICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICBQcm90b2NvbDogJ1VEUCcsDQogICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MCwNCiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnTWVzaCBDZW50cmFsIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljJywNCiAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICBFbmFibGVkOiB0cnVlDQogICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMgKFVEUC0yKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVURQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTEsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBTdGFydGluZyBzZXJ2aWNlLi4uJyk7DQogICAgdHJ5DQogICAgew0KICAgICAgICBzdmMuc3RhcnQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbT0tdXG4nKTsNCiAgICB9DQogICAgY2F0Y2goZWUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpIHsgc3ZjLmNsb3NlKCk7IH0NCiAgICBwcm9jZXNzLmV4aXQoKTsNCn0NCg0KZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKQ0Kew0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBsYXVuY2ggYWdlbnQuLi4nKTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBsYXVuY2hhZ2VudCA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQoJ21lc2hhZ2VudCcpOw0KICAgICAgICAgICAgbGF1bmNoYWdlbnQudW5sb2FkKCk7DQogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmMobGF1bmNoYWdlbnQucGxpc3QpOw0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRE9ORV1cbicpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChwYXJhbXMgIT0gbnVsbCAmJiAhcGFyYW1zLmluY2x1ZGVzKCdfc3RvcCcpKQ0KICAgIHsNCiAgICAgICAgaW5zdGFsbFNlcnZpY2UocGFyYW1zKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlMihwYXJhbXMpDQp7DQogICAgdmFyIHNlY29uZGFyeWFnZW50ID0gZmFsc2U7DQogICAgdmFyIGk7DQogICAgdmFyIGRhdGFGb2xkZXIgPSBudWxsOw0KICAgIHZhciBhcHBQcmVmaXggPSBudWxsOw0KDQogICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMuaW5jbHVkZXMoJy0tX2RlbGV0ZURhdGE9IjEiJykpDQogICAgew0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAocGFyYW1zW2ldLnN0YXJ0c1dpdGgoJ193b3JraW5nRGlyPScpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGRhdGFGb2xkZXIgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgICAgICBpZiAoZGF0YUZvbGRlci5zdGFydHNXaXRoKCciJykpIHsgZGF0YUZvbGRlciA9IGRhdGFGb2xkZXIuc3Vic3RyaW5nKDEsIGRhdGFGb2xkZXIubGVuZ3RoIC0gMSk7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChwYXJhbXNbaV0uc3RhcnRzV2l0aCgnX2FwcFByZWZpeD0nKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhcHBQcmVmaXggPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVsxXTsNCiAgICAgICAgICAgICAgICBpZiAoYXBwUHJlZml4LnN0YXJ0c1dpdGgoJyInKSkgeyBhcHBQcmVmaXggPSBhcHBQcmVmaXguc3Vic3RyaW5nKDEsIGFwcFByZWZpeC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBwcmV2aW91cyBpbnN0YWxsYXRpb24uLi4nKTsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIudW5pbnN0YWxsU2VydmljZShwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnTWVzaCBBZ2VudCcgOiAnbWVzaGFnZW50Jyk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICAgICAgaWYgKGRhdGFGb2xkZXIgJiYgYXBwUHJlZml4KQ0KICAgICAgICB7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgLT4gRGVsZXRpbmcgYWdlbnQgZGF0YS4uLicpOw0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjZCAnICsgZGF0YUZvbGRlciArICdcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdybSAnICsgYXBwUHJlZml4ICsgJy4qXHJcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgICAgICAgDQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcc3lzdGVtMzJcXGNtZC5leGUnLCBbJy9DIGRlbCAiJyArIGRhdGFGb2xkZXIgKyAnXFwnICsgYXBwUHJlZml4ICsgJy4qIiddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIC8vIENoZWNrIGZvciBzZWNvbmRhcnkgYWdlbnQNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBDaGVja2luZyBmb3Igc2Vjb25kYXJ5IGFnZW50Li4uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgIHZhciBsb2MgPSBzLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHMuY2xvc2UoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRk9VTkRdXG4nKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgICAgIC0+IFVuaW5zdGFsbGluZyBzZWNvbmRhcnkgYWdlbnQuLi4nKTsNCiAgICAgICAgc2Vjb25kYXJ5YWdlbnQgPSB0cnVlOw0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci51bmluc3RhbGxTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtOT05FXVxuJyk7DQogICAgfQ0KDQogICAgaWYoc2Vjb25kYXJ5YWdlbnQpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgICAgLT4gcmVtb3Zpbmcgc2Vjb25kYXJ5IGFnZW50IGZyb20gdGFzayBzY2hlZHVsZXIuLi4nKTsNCiAgICAgICAgdmFyIHAgPSByZXF1aXJlKCd0YXNrLXNjaGVkdWxlcicpLmRlbGV0ZSgnbWVzaGFnZW50RGlhZ25vc3RpYy9wZXJpb2RpY1N0YXJ0Jyk7DQogICAgICAgIHAuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgcC50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UzKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlMyh0aGlzLl9wYXJhbXMpOw0KICAgICAgICB9KTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKTsNCiAgICB9DQp9DQpmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICB2YXIgc3ZjID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICBpZiAoc3ZjLmlzUnVubmluZygpKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFN0b3BwaW5nIFNlcnZpY2UuLi4nKTsNCiAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgc3ZjLnN0b3AoKS50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgICAgIHN2Yy5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHRoaXMuX3BhcmFtcyk7DQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICAgICAgc3ZjLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgICAgIH0pLnBhcmVudFByb21pc2UuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN2Yy51bmxvYWQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzdmMuc3RvcCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIocGFyYW1zKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKSB7IHN2Yy5jbG9zZSgpOyB9DQogICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHBhcmFtcyk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gc2VydmljZUV4aXN0cyhsb2MsIHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtGT1VORDogJyArIGxvYyArICddXG4nKTsNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgLT4gQ2hlY2tpbmcgZmlyZXdhbGwgcnVsZXMgZm9yIHByZXZpb3VzIGluc3RhbGxhdGlvbi4uLicpOw0KICAgICAgICByZXF1aXJlKCd3aW4tZmlyZXdhbGwnKS5yZW1vdmVGaXJld2FsbFJ1bGUoeyBwcm9ncmFtOiBsb2MgfSkudGhlbihmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBTVUNDRVNTDQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtERUxFVEVEXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZBSUxFRA0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbTm8gUnVsZXMgRm91bmRdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgfSkucGFyZW50UHJvbWlzZS5fcGFyYW1zID0gcGFyYW1zOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBmdWxsVW5pbnN0YWxsKGpzb25TdHJpbmcpDQp7DQogICAgY29uc29sZS5zZXREZXN0aW5hdGlvbihjb25zb2xlLkRlc3RpbmF0aW9ucy5ESVNBQkxFRCk7DQogICAgdmFyIHBhcm1zID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTsNCiAgICBwYXJtcy5wdXNoKCdfc3RvcCcpOw0KDQogICAgdHJ5DQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnLi4uQ2hlY2tpbmcgZm9yIHByZXZpb3VzIGluc3RhbGxhdGlvbicpOw0KICAgICAgICB2YXIgcyA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0U2VydmljZShwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnTWVzaCBBZ2VudCcgOiAnbWVzaGFnZW50Jyk7DQogICAgICAgIHZhciBsb2MgPSBzLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHZhciBhcHBQcmVmaXggPSBsb2Muc3BsaXQocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ1xcJyA6ICcvJykucG9wKCk7DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpIHsgYXBwUHJlZml4ID0gYXBwUHJlZml4LnN1YnN0cmluZygwLCBhcHBQcmVmaXgubGVuZ3RoIC0gNCk7IH0NCg0KICAgICAgICBwYXJtcy5w", 16000); + memcpy_s(_agentinstaller + 16000, 3144, "dXNoKCdfd29ya2luZ0Rpcj0nICsgcy5hcHBXb3JraW5nRGlyZWN0b3J5KCkpOw0KICAgICAgICBwYXJtcy5wdXNoKCdfYXBwUHJlZml4PScgKyBhcHBQcmVmaXgpOw0KDQogICAgICAgIHMuY2xvc2UoKTsNCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtOT05FXVxuJyk7DQogICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgIH0NCiAgICBzZXJ2aWNlRXhpc3RzKGxvYywgcGFybXMpOw0KfQ0KDQpmdW5jdGlvbiBmdWxsSW5zdGFsbChqc29uU3RyaW5nKQ0Kew0KICAgIGNvbnNvbGUuc2V0RGVzdGluYXRpb24oY29uc29sZS5EZXN0aW5hdGlvbnMuRElTQUJMRUQpOw0KICAgIHZhciBwYXJtcyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7DQoNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcuLi5DaGVja2luZyBmb3IgcHJldmlvdXMgaW5zdGFsbGF0aW9uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICAgICAgdmFyIGxvYyA9IHMuYXBwTG9jYXRpb24oKTsNCiAgICAgICAgcy5jbG9zZSgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW05PTkVdXG4nKTsNCiAgICAgICAgaW5zdGFsbFNlcnZpY2UocGFybXMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIHNlcnZpY2VFeGlzdHMobG9jLCBwYXJtcyk7DQp9DQoNCg0KbW9kdWxlLmV4cG9ydHMgPQ0KICAgIHsNCiAgICAgICAgZnVsbEluc3RhbGw6IGZ1bGxJbnN0YWxsLA0KICAgICAgICBmdWxsVW5pbnN0YWxsOiBmdWxsVW5pbnN0YWxsDQogICAgfTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCnsNCiAgICBmdW5jdGlvbiB3aW5fdXBkYXRlKCkNCiAgICB7DQogICAgICAgIHZhciBmaW5pID0gc2V0VGltZW91dChmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBJZiB0aGlzIGhpdHMsIGl0J3MgYmVjdWFzZSBzb21ldGhpbmcgd2VudCB3cm9uZy4uLiBTbyBqdXN0IGFib3J0DQogICAgICAgICAgICBwcm9jZXNzLl9leGl0KCk7DQogICAgICAgIH0sIDIwMDAwKTsNCg0KICAgICAgICB2YXIgdXBkYXRlTG9jYXRpb24gPSBwcm9jZXNzLmFyZ3ZbMV0uc3Vic3RyaW5nKDgpOw0KICAgICAgICB2YXIgc2VydmljZSA9IG51bGw7DQogICAgICAgIHZhciBzZXJ2aWNlTG9jYXRpb24gPSAiIjsNCg0KICAgICAgICBzZXJ2aWNlID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKCdNZXNoIEFnZW50Jyk7DQogICAgICAgIHNlcnZpY2VMb2NhdGlvbiA9IHNlcnZpY2UuYXBwTG9jYXRpb24oKTsNCg0KICAgICAgICB2YXIgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgc2VydmljZS5zdG9wKCkuZmluYWxseShmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Byb2Nlc3MtbWFuYWdlcicpLmVudW1lcmF0ZVByb2Nlc3NlcygpLnRoZW4oZnVuY3Rpb24gKHByb2MpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHByb2MpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jW3BdLnBhdGggPT0gc2VydmljZUxvY2F0aW9uKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbChwcm9jW3BdLnBpZCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnZnMnKS5jb3B5RmlsZVN5bmMocHJvY2Vzcy5leGVjUGF0aCwgdXBkYXRlTG9jYXRpb24pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChjZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5zdGFydCgpOw0KICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLl9leGl0KCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSwgMzAwMCk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzLnVwZGF0ZSA9IHdpbl91cGRhdGU7DQp9", 3144); + ILibBase64DecodeEx((unsigned char*)_agentinstaller, 19144, (unsigned char*)_agentinstaller + 19144); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "agent-installer"); duk_push_string(ctx, _agentinstaller + 19144); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_agentinstaller); diff --git a/microscript/ILibDuktape_ScriptContainer.c b/microscript/ILibDuktape_ScriptContainer.c index 3d253f5..8db2749 100644 --- a/microscript/ILibDuktape_ScriptContainer.c +++ b/microscript/ILibDuktape_ScriptContainer.c @@ -843,7 +843,7 @@ duk_ret_t ILibDuktape_ScriptContainer_Process_Kill(duk_context *ctx) int pid = duk_require_int(ctx, 0); #ifdef WIN32 - int len = sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "require('child_process').execFile(process.env['windir'] + '\\x5Csystem32\\x5Ccmd.exe', ['/C', 'taskkill /F /PID %d']);", pid); + int len = sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "require('child_process').execFile(process.env['windir'] + '\\x5Csystem32\\x5Ccmd.exe', ['/C', 'taskkill /F /PID %d']).waitExit();", pid); if (len > 0) { duk_eval_string(ctx, ILibScratchPad); // [child_process] diff --git a/modules/agent-installer.js b/modules/agent-installer.js index d19b85b..c719ead 100644 --- a/modules/agent-installer.js +++ b/modules/agent-installer.js @@ -406,4 +406,52 @@ module.exports = { fullInstall: fullInstall, fullUninstall: fullUninstall - }; \ No newline at end of file + }; + +if (process.platform == 'win32') +{ + function win_update() + { + var fini = setTimeout(function () + { + // If this hits, it's becuase something went wrong... So just abort + process._exit(); + }, 20000); + + var updateLocation = process.argv[1].substring(8); + var service = null; + var serviceLocation = ""; + + service = require('service-manager').manager.getService('Mesh Agent'); + serviceLocation = service.appLocation(); + + var t = setTimeout(function () + { + service.stop().finally(function () + { + require('process-manager').enumerateProcesses().then(function (proc) + { + for (var p in proc) + { + if (proc[p].path == serviceLocation) + { + process.kill(proc[p].pid); + } + } + + try + { + require('fs').copyFileSync(process.execPath, updateLocation); + } + catch (ce) + { + } + + service.start(); + process._exit(); + }); + }); + }, 3000); + } + module.exports.update = win_update; +} \ No newline at end of file