diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 77978c1..4bd713c 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2079,7 +2079,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // service-manager, which on linux has a dependency on user-sessions and process-manager. Refer to /modules folder for human readable versions. - duk_peval_string_noresult(ctx, "addModule('process-manager', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCgp2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsKCi8vIFVzZWQgb24gV2luZG93cyBhbmQgTGludXggdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgcHJvY2Vzc2VzCmZ1bmN0aW9uIHByb2Nlc3NNYW5hZ2VyKCkgewogICAgdGhpcy5fT2JqZWN0SUQgPSAncHJvY2Vzcy1tYW5hZ2VyJzsgLy8gVXNlZCBmb3IgZGVidWdnaW5nLCBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0IHR5cGUgYXQgcnVudGltZS4KICAgIAogICAgLy8gU2V0dXAgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNhbGxzLgogICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQogICAgewogICAgICAgIGNhc2UgJ3dpbjMyJzoKICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2V0TGFzdEVycm9yJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90Jyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyRmlyc3RXJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyTmV4dFcnKTsKICAgICAgICAgICAgYnJlYWs7CgljYXNlICdmcmVlYnNkJzoKICAgICAgICBjYXNlICdsaW51eCc6CiAgICAgICAgY2FzZSAnZGFyd2luJzoKICAgICAgICAgICAgdGhpcy5fY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyAocHJvY2Vzcy5wbGF0Zm9ybSArICcgbm90IHN1cHBvcnRlZCcpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHRoaXMuZW51bWVyYXRlUHJvY2Vzc2VzID0gZnVuY3Rpb24gZW51bWVyYXRlUHJvY2Vzc2VzKCkKICAgIHsKICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKICAgICAgICByZXQuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhwcykKICAgICAgICB7CiAgICAgICAgICAgIGNhbGxiYWNrLnByb20uX3Jlcyhwcyk7CiAgICAgICAgfQogICAgICAgIHJldC5jYWxsYmFjay5wcm9tID0gcmV0OwogICAgICAgIHRoaXMuZ2V0UHJvY2Vzc2VzKHJldC5jYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfQogICAgLy8gUmV0dXJuIGEgb2JqZWN0IG9mOiBwaWQgLT4gcHJvY2VzcyBpbmZvcm1hdGlvbi4KICAgIHRoaXMuZ2V0UHJvY2Vzc2VzID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc2VzKGNhbGxiYWNrKQogICAgewogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93ICgnRW51bWVyYXRpbmcgcHJvY2Vzc2VzIG9uICcgKyBwcm9jZXNzLnBsYXRmb3JtICsgJyBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnd2luMzInOiAvLyBXaW5kb3dzIHByb2Nlc3NlcwogICAgICAgICAgICAgICAgdmFyIHBpZDsKICAgICAgICAgICAgICAgIHZhciByZXRWYWwgPSB7fTsKICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5fa2VybmVsMzIuQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KDIsIDApOwogICAgICAgICAgICAgICAgdmFyIGluZm8gPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZT09OCA/IDU2OCA6IDU1Nik7CiAgICAgICAgICAgICAgICBpbmZvLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShpbmZvLl9zaXplLCAwKTsKICAgICAgICAgICAgICAgIHZhciBuZXh0UHJvY2VzcyA9IHRoaXMuX2tlcm5lbDMyLlByb2Nlc3MzMkZpcnN0VyhoLCBpbmZvKTsKICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0UHJvY2Vzcy5WYWwpIAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHBpZCA9IGluZm8uRGVyZWYoOCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0VmFsW3BpZF0gPSB7IHBpZDogcGlkLCBjbWQ6IGluZm8uRGVyZWYoR00uUG9pbnRlclNpemUgPT0gNCA/IDM2IDogNDQsIDI2MCkuV2lkZTJVVEY4IH07CiAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWxbcGlkXS51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocGlkKS5uYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaChlZSkKICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBuZXh0UHJvY2VzcyA9IHRoaXMuX2tlcm5lbDMyLlByb2Nlc3MzMk5leHRXKGgsIGluZm8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmFwcGx5KHRoaXMsIFtyZXRWYWxdKTsgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzogLy8gTGludXggcHJvY2Vzc2VzCiAgICAgICAgICAgICAgICB2YXIgcCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBwLnN0ZG91dC5zdHIgPSAnJzsgcC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ3BzIC1heCAtbyBwaWQgLW8gdXNlcjo5OSAtbyBjb21tYW5kIHwgdHIgJyArICInXFxuJyAnXFx0JyB8IGF3ayAtRiIgKyAnIlxcdCIgXCd7IHByaW50ZiAieyI7IGZvcihpPTI7aTxORjsrK2kpIHsgc3BsaXQoJGksdG9rLCIgIik7IHBpZD10b2tbMV07IHVzZXI9dG9rWzJdOyBjbWQ9c3Vic3RyKCRpLGxlbmd0aCh0b2tbMV0pKzEwMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgcC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7IHAuYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7IH0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2Rhcndpbic6CiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICAgICAgICAgIHZhciBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKICAgICAgICAgICAgICAgIHAucG0gPSB0aGlzOwogICAgICAgICAgICAgICAgcC5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgcC5hcmdzID0gW107CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgeyBwLmFyZ3MucHVzaChhcmd1bWVudHNbaV0pOyB9CiAgICAgICAgICAgICAgICBwLmNoaWxkID0gdGhpcy5fY2hpbGRQcm9jZXNzLmV4ZWNGaWxlKCIvYmluL3BzIiwgWyJwcyIsICIteGEiXSk7CiAgICAgICAgICAgICAgICBwLmNoaWxkLnByb21pc2UgPSBwOwogICAgICAgICAgICAgICAgcC5jaGlsZC5zdGRvdXQucHMgPSAnJzsKICAgICAgICAgICAgICAgIHAuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMucHMgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBwLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLnN0ZG91dC5wcy5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcGlkWCA9IGxpbmVzWzBdLnNwbGl0KCdQSUQnKVswXS5sZW5ndGggKyAzOwogICAgICAgICAgICAgICAgICAgIHZhciBjbWRYID0gbGluZXNbMF0uc3BsaXQoJ0NNRCcpWzBdLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0ge307CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPiAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRbbGluZXNbaV0uc3Vic3RyaW5nKDAsIHBpZFgpLnRyaW0oKV0gPSB7IHBpZDogbGluZXNbaV0uc3Vic3RyaW5nKDAsIHBpZFgpLnRyaW0oKSwgY21kOiBsaW5lc1tpXS5zdWJzdHJpbmcoY21kWCkgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhyZXQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHBzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYXJncy51bnNoaWZ0KHBzKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrLmFwcGx5KHRoaXMucG0sIHRoaXMuYXJncyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoJICAgIGNhc2UgJ2ZyZWVic2QnOgogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsKCQljaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykge3RoaXMuc3RyICs9IGMudG9TdHJpbmcoKTt9KTsKCQljaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzIC14YSB8IGF3ayAneyBwcmludGYgXCIlc1wiLCAkMTsgJDE9XCJcIjsgJDI9XCJcIjsgJDM9XCJcIjsgJDQ9XCJcIjsgcHJpbnRmIFwiJXNcXG5cIiwgJDA7IH0nIHwgYXdrICd7IHByaW50ZiBcIiVzXCIsICQxOyAkMT1cIlwiOyBwcmludGYgXCIlc1xcblwiLCAkMDsgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCQkKCQl2YXIgdG1wOwoJCXZhciByZXQgPSBbXTsKCQl2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKS5zcGxpdCgnXG4nKTsKCQlmb3IodmFyIGkgaW4gbGluZXMpCgkJewoJCQl0bXAgPSB7cGlkOiBsaW5lc1tpXS5zcGxpdCgnICcpLnNoaWZ0KCl9OwoJCQl0bXBbJ2NtZCddID0gbGluZXNbaV0uc3Vic3RyaW5nKHRtcC5waWQubGVuZ3RoICsgMSk7CgkJCXRtcFsncGlkJ10gPSBwYXJzZUludCh0bXBbJ3BpZCddKTsKCQkJaWYoIWlzTmFOKHRtcFsncGlkJ10pKQoJCQl7CgkJCQlyZXQucHVzaCh0bXApOwoJCQl9CgkJfQoJCWlmKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmFwcGx5KHRoaXMsIFtyZXRdKTsgfQoJCWJyZWFrOwogICAgICAgIH0KICAgIH07CgogICAgLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgcHJvY2VzcyBvbiBMaW51eAogICAgdGhpcy5nZXRQcm9jZXNzSW5mbyA9IGZ1bmN0aW9uIGdldFByb2Nlc3NJbmZvKHBpZCkKICAgIHsKICAgICAgICBzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyAoJ2dldFByb2Nlc3NJbmZvKCkgbm90IHN1cHBvcnRlZCBmb3IgJyArIHByb2Nlc3MucGxhdGZvcm0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzoKICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSByZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYygnL3Byb2MvJyArIHBpZCArICcvc3RhdHVzJyk7CiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHt9OwogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gc3RhdHVzLnRvU3RyaW5nKCkuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICBmb3IodmFyIGkgaW4gbGluZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmVzW2ldLnNwbGl0KCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7IHRva2Vuc1sxXSA9IHRva2Vuc1sxXS50cmltKCk7IH0KICAgICAgICAgICAgICAgICAgICBpbmZvW3Rva2Vuc1swXV0gPSB0b2tlbnNbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gKGluZm8pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfTsKCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtICE9ICd3aW4zMicpCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX3BncmVwJywgew0KICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBwZ3JlcCB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOwoKICAgICAgICBpZiAodGhpcy5fcGdyZXAgIT0gJycpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuZ2V0UHJvY2VzcyA9IGZ1bmN0aW9uIGdldFByb2Nlc3MoY21kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwZ3JlcCBnbm9tZS1zZXNzaW9uIHwgdHIgJ1xcbicgJ1xcdCcgfCIgKyAnIGF3ayAtRiJcXHQiIFwneyBwcmludGYgIlsiOyBmb3IoaT0xO2k8TkY7KytpKSB7IGlmKGk+MSkgeyBwcmludGYgIiwiOyB9IHByaW50ZiAiJWQiLCAkaTsgfSBwcmludGYgIl0iOyB9XCcnKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgIGlmIChjaGlsZC5zdGRlcnIuc3RyICE9ICcnKSB7IHRocm93IChjaGlsZC5zdGRlcnIuc3RyLnRyaW0oKSk7IH0NCiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycpIHsgdGhyb3cgKGNtZCArICcgbm90IGZvdW5kJyk7IH0NCg0KICAgICAgICAgICAgICAgIHJldHVybiAoSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuZ2V0UHJvY2Vzc0V4ID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc0V4KGNtZCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3BzIC1heCAtbyBwaWQgLW8gY29tbWFuZCB8IGdyZXAgJyArIGNtZCArICIgfCB0ciAnXFxuJyAnXFx0JyB8IGF3ayAtRiIgKyAnIlxcdCIgXCd7IHByaW50ZiAiWyI7IGZvcihpPTE7aTxORjsrK2kpIHsgc3BsaXQoJGksciwiICIpOyBpZihyWzJdIT0iZ3JlcCIpIHsgaWYoaT4xKSB7IHByaW50ZiAiLCI7IH0gcHJpbnRmICIlcyIsIHJbMV07IH0gfSBwcmludGYgIl0iOyB9XCcnKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93IChjbWQgKyAnIG5vdCBmb3VuZCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAoSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQp9Cgptb2R1bGUuZXhwb3J0cyA9IG5ldyBwcm9jZXNzTWFuYWdlcigpOwo=', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('process-manager', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCgp2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsKCi8vIFVzZWQgb24gV2luZG93cyBhbmQgTGludXggdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgcHJvY2Vzc2VzCmZ1bmN0aW9uIHByb2Nlc3NNYW5hZ2VyKCkgewogICAgdGhpcy5fT2JqZWN0SUQgPSAncHJvY2Vzcy1tYW5hZ2VyJzsgLy8gVXNlZCBmb3IgZGVidWdnaW5nLCBhbGxvd3MgeW91IHRvIGdldCB0aGUgb2JqZWN0IHR5cGUgYXQgcnVudGltZS4KICAgIAogICAgLy8gU2V0dXAgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNhbGxzLgogICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKQogICAgewogICAgICAgIGNhc2UgJ3dpbjMyJzoKICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2V0TGFzdEVycm9yJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90Jyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyRmlyc3RXJyk7CiAgICAgICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2VzczMyTmV4dFcnKTsKICAgICAgICAgICAgYnJlYWs7CgljYXNlICdmcmVlYnNkJzoKICAgICAgICBjYXNlICdsaW51eCc6CiAgICAgICAgY2FzZSAnZGFyd2luJzoKICAgICAgICAgICAgdGhpcy5fY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyAocHJvY2Vzcy5wbGF0Zm9ybSArICcgbm90IHN1cHBvcnRlZCcpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHRoaXMuZW51bWVyYXRlUHJvY2Vzc2VzID0gZnVuY3Rpb24gZW51bWVyYXRlUHJvY2Vzc2VzKCkKICAgIHsKICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKICAgICAgICByZXQuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhwcykKICAgICAgICB7CiAgICAgICAgICAgIGNhbGxiYWNrLnByb20uX3Jlcyhwcyk7CiAgICAgICAgfQogICAgICAgIHJldC5jYWxsYmFjay5wcm9tID0gcmV0OwogICAgICAgIHRoaXMuZ2V0UHJvY2Vzc2VzKHJldC5jYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfQogICAgLy8gUmV0dXJuIGEgb2JqZWN0IG9mOiBwaWQgLT4gcHJvY2VzcyBpbmZvcm1hdGlvbi4KICAgIHRoaXMuZ2V0UHJvY2Vzc2VzID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc2VzKGNhbGxiYWNrKQogICAgewogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93ICgnRW51bWVyYXRpbmcgcHJvY2Vzc2VzIG9uICcgKyBwcm9jZXNzLnBsYXRmb3JtICsgJyBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnd2luMzInOiAvLyBXaW5kb3dzIHByb2Nlc3NlcwogICAgICAgICAgICAgICAgdmFyIHBpZDsKICAgICAgICAgICAgICAgIHZhciByZXRWYWwgPSB7fTsKICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5fa2VybmVsMzIuQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KDIsIDApOwogICAgICAgICAgICAgICAgdmFyIGluZm8gPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZT09OCA/IDU2OCA6IDU1Nik7CiAgICAgICAgICAgICAgICBpbmZvLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShpbmZvLl9zaXplLCAwKTsKICAgICAgICAgICAgICAgIHZhciBuZXh0UHJvY2VzcyA9IHRoaXMuX2tlcm5lbDMyLlByb2Nlc3MzMkZpcnN0VyhoLCBpbmZvKTsKICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0UHJvY2Vzcy5WYWwpIAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHBpZCA9IGluZm8uRGVyZWYoOCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0VmFsW3BpZF0gPSB7IHBpZDogcGlkLCBjbWQ6IGluZm8uRGVyZWYoR00uUG9pbnRlclNpemUgPT0gNCA/IDM2IDogNDQsIDI2MCkuV2lkZTJVVEY4IH07CiAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWxbcGlkXS51c2VyID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFByb2Nlc3NPd25lck5hbWUocGlkKS5uYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaChlZSkKICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBuZXh0UHJvY2VzcyA9IHRoaXMuX2tlcm5lbDMyLlByb2Nlc3MzMk5leHRXKGgsIGluZm8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmFwcGx5KHRoaXMsIFtyZXRWYWxdKTsgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzogLy8gTGludXggcHJvY2Vzc2VzCiAgICAgICAgICAgICAgICB2YXIgcCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBwLnN0ZG91dC5zdHIgPSAnJzsgcC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgcC5zdGRlcnIuc3RyID0gJyc7IHAuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ3BzIC1heCAtbyBwaWQgLW8gdXNlcjo5OSAtbyBjb21tYW5kIHwgdHIgJyArICInXFxuJyAnXFx0JyB8IGF3ayAtRiIgKyAnIlxcdCIgXCd7IHByaW50ZiAieyI7IGZvcihpPTI7aTxORjsrK2kpIHsgc3BsaXQoJGksdG9rLCIgIik7IHBpZD10b2tbMV07IHVzZXI9dG9rWzJdOyBjbWQ9c3Vic3RyKCRpLGxlbmd0aCh0b2tbMV0pKzEwMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgcC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7IHAuYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7IH0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2Rhcndpbic6CiAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOgogICAgICAgICAgICAgICAgdmFyIHAgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgcC5zdGRvdXQuc3RyID0gJyc7IHAuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIHAuc3RkZXJyLnN0ciA9ICcnOyBwLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyB1c2VyIC1vIGNvbW1hbmQgfCB0ciAnICsgIidcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJ7IjsgZm9yKGk9MjtpPE5GOysraSkgeyBzcGxpdCgkaSx0b2ssIiAiKTsgcGlkPXRva1sxXTsgdXNlcj10b2tbMl07IGNtZD1zdWJzdHIoJGksbGVuZ3RoKHRva1sxXSkrbGVuZ3RoKHRva1syXSkrMik7IGdzdWIoL1xcXFwvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoLyIvLCJcXFxcXFxcXCYiLGNtZCk7IGdzdWIoL15bIF0rLywiIixjbWQpOyBwcmludGYgIiVzXFwiJXNcXCI6e1xcInBpZFxcIjpcXCIlc1xcIixcXCJ1c2VyXFwiOlxcIiVzXFwiLFxcImNtZFxcIjpcXCIlc1xcIn0iLChpIT0yPyIsIjoiIikscGlkLHBpZCx1c2VyLGNtZDsgfSBwcmludGYgIn0iOyB9XCdcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgcC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHAuYXJncyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7IHAuYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7IH0KDQogICAgICAgICAgICAgICAgICAgIHAuYXJncy51bnNoaWZ0KEpTT04ucGFyc2UocC5zdGRvdXQuc3RyKSk7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgcC5hcmdzKTsNCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBwcm9jZXNzIG9uIExpbnV4CiAgICB0aGlzLmdldFByb2Nlc3NJbmZvID0gZnVuY3Rpb24gZ2V0UHJvY2Vzc0luZm8ocGlkKQogICAgewogICAgICAgIHN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93ICgnZ2V0UHJvY2Vzc0luZm8oKSBub3Qgc3VwcG9ydGVkIGZvciAnICsgcHJvY2Vzcy5wbGF0Zm9ybSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnbGludXgnOgogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgcGlkICsgJy9zdGF0dXMnKTsKICAgICAgICAgICAgICAgIHZhciBpbmZvID0ge307CiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBzdGF0dXMudG9TdHJpbmcoKS5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgICAgIGZvcih2YXIgaSBpbiBsaW5lcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZXNbaV0uc3BsaXQoJzonKTsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHsgdG9rZW5zWzFdID0gdG9rZW5zWzFdLnRyaW0oKTsgfQogICAgICAgICAgICAgICAgICAgIGluZm9bdG9rZW5zWzBdXSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAoaW5mbyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9OwoKICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykKICAgIHsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfcGdyZXAnLCB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHBncmVwIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsNCiAgICAgICAgICAgIH0pKCkNCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLl9wZ3JlcCAhPSAnJykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5nZXRQcm9jZXNzID0gZnVuY3Rpb24gZ2V0UHJvY2VzcyhjbWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBncmVwIGdub21lLXNlc3Npb24gfCB0ciAnXFxuJyAnXFx0JyB8IiArICcgYXdrIC1GIlxcdCIgXCd7IHByaW50ZiAiWyI7IGZvcihpPTE7aTxORjsrK2kpIHsgaWYoaT4xKSB7IHByaW50ZiAiLCI7IH0gcHJpbnRmICIlZCIsICRpOyB9IHByaW50ZiAiXSI7IH1cJycpOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZGVyci5zdHIgIT0gJycpIHsgdGhyb3cgKGNoaWxkLnN0ZGVyci5zdHIudHJpbSgpKTsgfQ0KICAgICAgICAgICAgICAgIGlmIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJykgeyB0aHJvdyAoY21kICsgJyBub3QgZm91bmQnKTsgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7DQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5nZXRQcm9jZXNzRXggPSBmdW5jdGlvbiBnZXRQcm9jZXNzRXgoY21kKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgncHMgLWF4IC1vIHBpZCAtbyBjb21tYW5kIHwgZ3JlcCAnICsgY21kICsgIiB8IHRyICdcXG4nICdcXHQnIHwgYXdrIC1GIiArICciXFx0IiBcJ3sgcHJpbnRmICJbIjsgZm9yKGk9MTtpPE5GOysraSkgeyBzcGxpdCgkaSxyLCIgIik7IGlmKHJbMl0hPSJncmVwIikgeyBpZihpPjEpIHsgcHJpbnRmICIsIjsgfSBwcmludGYgIiVzIiwgclsxXTsgfSB9IHByaW50ZiAiXSI7IH1cJycpOw0KICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyb3cgKGNtZCArICcgbm90IGZvdW5kJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9Cn0KCm1vZHVsZS5leHBvcnRzID0gbmV3IHByb2Nlc3NNYW5hZ2VyKCk7Cv==', 'base64').toString());"); #if defined(_POSIX) && !defined(__APPLE__) && !defined(_FREEBSD) duk_peval_string_noresult(ctx, "addModule('linux-dbus', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnRyeSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJwZWVrIiwgeyB2YWx1ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMubGVuZ3RoID4gMCA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZCk7IH0gfSk7IH0gY2F0Y2ggKGUpIHsgfQoKCgpmdW5jdGlvbiBkYnVzKGFkZHJlc3MsIHVpZCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAnbGludXgtZGJ1cyc7CiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLCB0cnVlKQogICAgICAgIC5jcmVhdGVFdmVudCgnc2lnbmFsJyk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVpZCIsIHsgdmFsdWU6IHVpZCB9KTsKICAgIHRoaXMuX2NoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCIvYmluL3NoIiwgWyJzaCJdLCB7IHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLlRFUk0sIHVpZDogdWlkID09IG51bGwgPyAtMSA6IHVpZCB9KTsKICAgIHRoaXMuX2NoaWxkLnN0ZGluLndyaXRlKCdkYnVzLW1vbml0b3IgLS1zZXNzaW9uICJ0eXBlPVwnc2lnbmFsXCcsIGludGVyZmFjZT1cJycgKyBhZGRyZXNzICsgJ1wnIiB8ICggd2hpbGUgcmVhZCBYOyBkbyBlY2hvICIkWCI7IGRvbmUgKVxuJyk7CiAgICB0aGlzLl9jaGlsZC5zdGRvdXQuZGJ1cyA9IHRoaXM7CiAgICB0aGlzLl9jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspCiAgICB7CiAgICAgICAgLy8gUGFyc2UgREJVUyBEYXRhCiAgICAgICAgaWYgKCF0aGlzLnJlYWR5KSB7IHRoaXMucmVhZHkgPSB0cnVlOyByZXR1cm47IH0KCiAgICAgICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgdmFyIHRva2VucyA9IGNodW5rLnRvU3RyaW5nKCkuc3BsaXQoJ1xyXG4nKTsKICAgICAgICBmb3IgKHZhciBpIGluIHRva2VucykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0b2tlbnNbaV0gPT0gJycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEVuZCBvZiByZWNvcmQKICAgICAgICAgICAgICAgIHRoaXMuZGJ1cy5wcmVQYXJzZVJlY29yZHMobGluZXMpOwogICAgICAgICAgICAgICAgbGluZXMgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godG9rZW5zW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwogICAgdGhpcy5wcmVQYXJzZVJlY29yZHMgPSBmdW5jdGlvbiAobGluZXMpCiAgICB7CiAgICAgICAgdmFyIHJlY29yZCA9IFtdOwogICAgICAgIGZvciAodmFyIGkgaW4gbGluZXMpCiAgICAgICAgewogICAgICAgICAgICBpZihsaW5lc1tpXS5zdGFydHNXaXRoKCdzaWduYWwgJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKHJlY29yZC5sZW5ndGg+MCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlUmVjb3JkcyhyZWNvcmQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVjb3JkID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVjb3JkLnB1c2gobGluZXNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAocmVjb3JkLmxlbmd0aCA+IDApCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnBhcnNlUmVjb3JkcyhyZWNvcmQpOwogICAgICAgIH0KICAgIH0KICAgIHRoaXMucGFyc2VSZWNvcmRzID0gZnVuY3Rpb24gKGxpbmVzKQogICAgewogICAgICAgIGlmIChsaW5lc1swXS5zdGFydHNXaXRoKCdzaWduYWwgJykpCiAgICAgICAgewogICAgICAgICAgICB2YXIgc2lnbmFsID0ge307CiAgICAgICAgICAgIHZhciBzaWd0b2tlbnMgPSBsaW5lc1swXS5zcGxpdCgnICcpOwogICAgICAgICAgICBzaWd0b2tlbnMuc2hpZnQoKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc2lndG9rZW5zKSB7CiAgICAgICAgICAgICAgICB2YXIgc2lnaXRlbXMgPSBzaWd0b2tlbnNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgICAgIGlmIChzaWdpdGVtcy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgICAgIHNpZ25hbFtzaWdpdGVtc1swXV0gPSBzaWdpdGVtc1sxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGluZXMuc2hpZnQoKTsKICAgICAgICAgICAgc2lnbmFsLmRhdGEgPSBsaW5lczsKCiAgICAgICAgICAgIHRoaXMucGFyc2VTaWduYWwoc2lnbmFsKTsKICAgICAgICB9CiAgICB9CiAgICB0aGlzLnBhcnNlU2lnbmFsID0gZnVuY3Rpb24oc2lnbmFsKQogICAgewogICAgICAgIHZhciBkYXRhID0gc2lnbmFsLmRhdGE7CiAgICAgICAgc2lnbmFsLmRhdGEgPSBbXTsKCiAgICAgICAgZm9yKHZhciBpPTA7IGk8ZGF0YS5sZW5ndGg7ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkYXRhW2ldLnN0YXJ0c1dpdGgoJ2FycmF5ICcpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaWduYWwuZGF0YS5wdXNoKFtdKTsKICAgICAgICAgICAgICAgIGZvcihpPWkrMTsgaTxkYXRhLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VTaWduYWwyKGRhdGFbaV0sIHNpZ25hbC5kYXRhLnBlZWsoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlU2lnbmFsMihkYXRhW2ldLCBzaWduYWwuZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuZW1pdCgnc2lnbmFsJywgc2lnbmFsKTsKICAgIH0KICAgIHRoaXMucGFyc2VTaWduYWwyID0gZnVuY3Rpb24gKGlucHV0U3RyLCBvdXRBcnJheSkKICAgIHsKICAgICAgICBpZihpbnB1dFN0ci5zdGFydHNXaXRoKCdzdHJpbmcgJykpCiAgICAgICAgewogICAgICAgICAgICBvdXRBcnJheS5wdXNoKEpTT04ucGFyc2UoaW5wdXRTdHIuc2xpY2UoNykpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihpbnB1dFN0ci5zdGFydHNXaXRoKCdib29sZWFuICcpKQogICAgICAgIHsKICAgICAgICAgICAgb3V0QXJyYXkucHVzaChKU09OLnBhcnNlKGlucHV0U3RyLnNsaWNlKDgpKSk7CiAgICAgICAgfQogICAgfQp9Cgptb2R1bGUuZXhwb3J0cyA9IGRidXM7Cm1vZHVsZS5leHBvcnRzLmhhc1NlcnZpY2UgPSBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpDQp7DQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjYXQgL3Vzci9zaGFyZS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIHwgZ3JlcCAiJyArIG5hbWUgKyAnIiB8IGF3ayAtRj0gXCd7IGlmKCAkMj09IicgKyBuYW1lICsgJyIgKSB7IHByaW50ICQyOyB9IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICcnKTsNCn07Cv==', 'base64').toString());"); duk_peval_string_noresult(ctx, "addModule('linux-gnome-helpers', Buffer.from('CgpmdW5jdGlvbiBnbm9tZV9nZXRQcm94eVNldHRpbmdzKHVpZCkKewogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IGVudjogeyBIT01FOiByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0SG9tZUZvbGRlcih1aWQpIH19KTsKICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7CiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CgogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2dzZXR0aW5ncyBsaXN0LXJlY3Vyc2l2ZWx5IG9yZy5nbm9tZS5zeXN0ZW0ucHJveHkgfCB0ciAiXFxuIiAiXFx8IiB8IHRyICJcXFwnIiAiXFxgIiB8IGF3ayBcJ3sgY291bnQ9c3BsaXQoJDAsIHJlcywgInwiKTsnKQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2V4Yz0iW10iOycpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2ZvcihhPTA7YTxjb3VudDsrK2EpJyk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgneycpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3NwbGl0KHJlc1thXSwgbW9kZWNoZWNrLCAiICIpOycpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lmKG1vZGVjaGVja1syXSA9PSAibW9kZSIpJyk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgneycpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3NwbGl0KG1vZGVjaGVja1szXSwgcHJ4LCAiYCIpOyBtb2RlID0gcHJ4WzJdOycpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ30nKTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpZihtb2RlY2hlY2tbMV09PSJvcmcuZ25vbWUuc3lzdGVtLnByb3h5Lmh0dHAiICYmIG1vZGVjaGVja1syXT09Imhvc3QiKSB7IHNwbGl0KG1vZGVjaGVja1szXSwgaHN0LCAiYCIpOyBob3N0ID0gaHN0WzJdOyB9Jyk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgnaWYobW9kZWNoZWNrWzFdPT0ib3JnLmdub21lLnN5c3RlbS5wcm94eS5odHRwIiAmJiBtb2RlY2hlY2tbMl09PSJwb3J0IikgeyBwb3J0ID0gbW9kZWNoZWNrWzNdOyB9Jyk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgnaWYobW9kZWNoZWNrWzFdPT0ib3JnLmdub21lLnN5c3RlbS5wcm94eSIgJiYgbW9kZWNoZWNrWzJdPT0iaWdub3JlLWhvc3RzIikgeyBleGMgPSBzdWJzdHIocmVzW2FdLCAzNik7IGdzdWIoImAiLCAiXFwiIiwgZXhjKTsgfScpOwogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ30nKTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKCdwcmludGYgIntcXCJtb2RlXFwiOiBcXCIlc1xcIiwgXFwiaG9zdFxcIjogXFwiJXNcXCIsIFxcInBvcnRcXCI6ICVzLCBcXCJleGNlcHRpb25zXFwiOiAlc30iLCBtb2RlLCBob3N0LCBwb3J0LCBleGM7IH1cJ1xuZXhpdFxuJyk7CiAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgdHJ5CiAgICB7CiAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7CiAgICB9CiAgICBjYXRjaChlKQogICAgewogICAgICAgIHJldHVybiAoe30pOwogICAgfQp9CgpmdW5jdGlvbiBnbm9tZV9nZXREZXNrdG9wV2FsbHBhcGVyKHVpZCkKew0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyBlbnY6IHsgSE9NRTogcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEhvbWVGb2xkZXIodWlkKSB9IH0pOwogICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKCdnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLmJhY2tncm91bmQgcGljdHVyZS11cmlcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnNwbGl0KCdmaWxlOi8vJykucG9wKCk7DQogICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIuZW5kc1dpdGgoJyInKSB8fCBjaGlsZC5zdGRvdXQuc3RyLmVuZHNXaXRoKCInIikpDQogICAgew0KICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIuc3Vic3RyaW5nKDAsIGNoaWxkLnN0ZG91dC5zdHIubGVuZ3RoIC0gMSkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIpOw0KICAgIH0NCn0KCmZ1bmN0aW9uIGdub21lX3NldERlc2t0b3BXYWxscGFwZXIodWlkLCBmaWxlUGF0aCkKew0KICAgIGlmICghZmlsZVBhdGgpIHsgZmlsZVBhdGggPSAnL2Rldi9udWxsJzsgfQ0KDQogICAgdmFyIHYgPSB7IEhPTUU6IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRIb21lRm9sZGVyKHVpZCkgfTsNCiAgICB2YXIgcGlkcyA9IHJlcXVpcmUoJ3Byb2Nlc3MtbWFuYWdlcicpLmdldFByb2Nlc3MoJ2dub21lLXNlc3Npb24nKTsNCiAgICBmb3IgKHZhciBpIGluIHBpZHMpDQogICAgew0KICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKHBpZHNbaV0pOw0KICAgICAgICBpZiAoZS5VU0VSICYmIHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVaWQoZS5VU0VSKSE9dWlkKQ0KICAgICAgICB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICB2LkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyA9IGUuREJVU19TRVNTSU9OX0JVU19BRERSRVNTOw0KICAgICAgICBpZiAodi5EQlVTX1NFU1NJT05fQlVTX0FERFJFU1MpIHsgYnJlYWs7IH0NCiAgICB9DQoNCiAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10sIHsgdWlkOiB1aWQsIGVudjogdiB9KTsKICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKCdnc2V0dGluZ3Mgc2V0IG9yZy5nbm9tZS5kZXNrdG9wLmJhY2tncm91bmQgcGljdHVyZS11cmkgZmlsZTovLycgKyBmaWxlUGF0aCArICdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQp9Cgpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkKewogICAgY2FzZSAnbGludXgnOgogICAgICAgIG1vZHVsZS5leHBvcnRzID0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdldFByb3h5U2V0dGluZ3M6IGdub21lX2dldFByb3h5U2V0dGluZ3MsDQogICAgICAgICAgICAgICAgZ2V0RGVza3RvcFdhbGxwYXBlcjogZ25vbWVfZ2V0RGVza3RvcFdhbGxwYXBlciwNCiAgICAgICAgICAgICAgICBzZXREZXNrdG9wV2FsbHBhcGVyOiBnbm9tZV9zZXREZXNrdG9wV2FsbHBhcGVyDQogICAgICAgICAgICB9OwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ19sb2NhdGlvbicsIHsNCiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkKICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBnc2V0dGluZ3MgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOw0KICAgICAgICAgICAgfSkoKQ0KICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhdmFpbGFibGUnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX2xvY2F0aW9uIT0nJyA/IHRydWUgOiBmYWxzZSk7IH0gfSk7CiAgICAgICAgYnJlYWs7Cn0=', 'base64').toString());"); diff --git a/modules/process-manager.js b/modules/process-manager.js index a91367f..eff42fe 100644 --- a/modules/process-manager.js +++ b/modules/process-manager.js @@ -101,61 +101,23 @@ function processManager() { break; case 'darwin': - var promise = require('promise'); - var p = new promise(function (res, rej) { this._res = res; this._rej = rej; }); - p.pm = this; - p.callback = callback; - p.args = []; - for (var i = 1; i < arguments.length; ++i) { p.args.push(arguments[i]); } - p.child = this._childProcess.execFile("/bin/ps", ["ps", "-xa"]); - p.child.promise = p; - p.child.stdout.ps = ''; - p.child.stdout.on('data', function (chunk) { this.ps += chunk.toString(); }); - p.child.on('exit', function () + case 'freebsd': + var p = require('child_process').execFile('/bin/sh', ['sh']); + p.stdout.str = ''; p.stdout.on('data', function (c) { this.str += c.toString(); }); + p.stderr.str = ''; p.stderr.on('data', function (c) { this.str += c.toString(); }); + p.stdin.write('ps -axo pid -o user -o command | tr ' + "'\\n' '\\t' | awk -F" + '"\\t" \'{ printf "{"; for(i=2;i 0) - { - ret[lines[i].substring(0, pidX).trim()] = { pid: lines[i].substring(0, pidX).trim(), cmd: lines[i].substring(cmdX) }; - } - } - this.promise._res(ret); - }); - p.then(function (ps) - { - this.args.unshift(ps); - this.callback.apply(this.pm, this.args); - }); + p.args = []; + for (var i = 1; i < arguments.length; ++i) { p.args.push(arguments[i]); } + + p.args.unshift(JSON.parse(p.stdout.str)); + callback.apply(this, p.args); + } + break; - case 'freebsd': - var child = require('child_process').execFile('/bin/sh', ['sh']); - child.stderr.str = ''; - child.stderr.on('data', function (c) {this.str += c.toString();}); - child.stdout.str = ''; - child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stdin.write("ps -xa | awk '{ printf \"%s\", $1; $1=\"\"; $2=\"\"; $3=\"\"; $4=\"\"; printf \"%s\\n\", $0; }' | awk '{ printf \"%s\", $1; $1=\"\"; printf \"%s\\n\", $0; }'\nexit\n"); - child.waitExit(); - - var tmp; - var ret = []; - var lines = child.stdout.str.trim().split('\n'); - for(var i in lines) - { - tmp = {pid: lines[i].split(' ').shift()}; - tmp['cmd'] = lines[i].substring(tmp.pid.length + 1); - tmp['pid'] = parseInt(tmp['pid']); - if(!isNaN(tmp['pid'])) - { - ret.push(tmp); - } - } - if(callback) { callback.apply(this, [ret]); } - break; } };