diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 18482af..b1c7b27 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2217,11 +2217,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('agent-installer', Buffer.from('LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmZ1bmN0aW9uIGluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnLi4uSW5zdGFsbGluZyBzZXJ2aWNlJyk7DQogICAgdHJ5DQogICAgew0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxTZXJ2aWNlKA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG5hbWU6IHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnLA0KICAgICAgICAgICAgICAgIHRhcmdldDogcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ01lc2hBZ2VudCcgOiAnbWVzaGFnZW50JywNCiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgYmFja2dyb3VuZCBzZXJ2aWNlJywNCiAgICAgICAgICAgICAgICBzZXJ2aWNlUGF0aDogcHJvY2Vzcy5leGVjUGF0aCwNCiAgICAgICAgICAgICAgICBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywNCiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbXMNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIGNhdGNoKHNpZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXSAnICsgc2llKTsNCiAgICAgICAgcHJvY2Vzcy5leGl0KCk7DQogICAgfQ0KICAgIHZhciBzdmMgPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldFNlcnZpY2UocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJz8nTWVzaCBBZ2VudCc6J21lc2hhZ2VudCcpOw0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgc3ZjLmxvYWQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IHNldHRpbmcgdXAgbGF1bmNoIGFnZW50Li4uJyk7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG5hbWU6ICdtZXNoYWdlbnQnLA0KICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlUGF0aDogc3ZjLmFwcExvY2F0aW9uKCksDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0VHlwZTogJ0FVVE9fU1RBUlQnLA0KICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnTG9naW5XaW5kb3cnXSwNCiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogWycta3ZtMSddDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKHNpZSkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRVJST1JdICcgKyBzaWUpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICB2YXIgbG9jID0gc3ZjLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBXcml0aW5nIGZpcmV3YWxsIHJ1bGVzIGZvciBNZXNoIEFnZW50IFNlcnZpY2UuLi4nKTsNCg0KICAgICAgICB2YXIgcnVsZSA9IA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIERpc3BsYXlOYW1lOiAnTWVzaCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMgKFRDUC0xKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVENQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTAsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgTWFuYWdlbWVudCBUcmFmZmljJywNCiAgICAgICAgICAgICAgICBFZGdlVHJhdmVyc2FsUG9saWN5OiAnYWxsb3cnLA0KICAgICAgICAgICAgICAgIEVuYWJsZWQ6IHRydWUNCiAgICAgICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0gDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IE1hbmFnZW1lbnQgVHJhZmZpYyAoVENQLTIpJywNCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdpbmJvdW5kJywNCiAgICAgICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICAgICAgUHJvdG9jb2w6ICdUQ1AnLA0KICAgICAgICAgICAgICAgIFByb2ZpbGU6ICdQdWJsaWMsIFByaXZhdGUsIERvbWFpbicsDQogICAgICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MSwNCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogJ01lc2ggQ2VudHJhbCBBZ2VudCBNYW5hZ2VtZW50IFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOyANCg0KICAgICAgICBydWxlID0NCiAgICAgICAgew0KICAgICAgICAgICAgRGlzcGxheU5hbWU6ICdNZXNoIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljIChVRFAtMSknLA0KICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICBQcm9ncmFtOiBsb2MsDQogICAgICAgICAgICBQcm90b2NvbDogJ1VEUCcsDQogICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgTG9jYWxQb3J0OiAxNjk5MCwNCiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnTWVzaCBDZW50cmFsIEFnZW50IFBlZXItdG8tUGVlciBUcmFmZmljJywNCiAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICBFbmFibGVkOiB0cnVlDQogICAgICAgIH07DQogICAgICAgIHJlcXVpcmUoJ3dpbi1maXJld2FsbCcpLmFkZEZpcmV3YWxsUnVsZShydWxlKTsNCg0KICAgICAgICBydWxlID0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZTogJ01lc2ggQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMgKFVEUC0yKScsDQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaW5ib3VuZCcsDQogICAgICAgICAgICAgICAgUHJvZ3JhbTogbG9jLA0KICAgICAgICAgICAgICAgIFByb3RvY29sOiAnVURQJywNCiAgICAgICAgICAgICAgICBQcm9maWxlOiAnUHVibGljLCBQcml2YXRlLCBEb21haW4nLA0KICAgICAgICAgICAgICAgIExvY2FsUG9ydDogMTY5OTEsDQogICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdNZXNoIENlbnRyYWwgQWdlbnQgUGVlci10by1QZWVyIFRyYWZmaWMnLA0KICAgICAgICAgICAgICAgIEVkZ2VUcmF2ZXJzYWxQb2xpY3k6ICdhbGxvdycsDQogICAgICAgICAgICAgICAgRW5hYmxlZDogdHJ1ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgcmVxdWlyZSgnd2luLWZpcmV3YWxsJykuYWRkRmlyZXdhbGxSdWxlKHJ1bGUpOw0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgfQ0KICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBTdGFydGluZyBzZXJ2aWNlLi4uJyk7DQogICAgdHJ5DQogICAgew0KICAgICAgICBzdmMuc3RhcnQoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbT0tdXG4nKTsNCiAgICB9DQogICAgY2F0Y2goZWUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpIHsgc3ZjLmNsb3NlKCk7IH0NCiAgICBwcm9jZXNzLmV4aXQoKTsNCn0NCg0KZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKQ0Kew0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBsYXVuY2ggYWdlbnQuLi4nKTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBsYXVuY2hhZ2VudCA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQoJ21lc2hhZ2VudCcpOw0KICAgICAgICAgICAgbGF1bmNoYWdlbnQudW5sb2FkKCk7DQogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmMobGF1bmNoYWdlbnQucGxpc3QpOw0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRE9ORV1cbicpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChwYXJhbXMgIT0gbnVsbCkNCiAgICB7DQogICAgICAgIGluc3RhbGxTZXJ2aWNlKHBhcmFtcyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZTIocGFyYW1zKQ0Kew0KICAgIHZhciBzZWNvbmRhcnlhZ2VudCA9IGZhbHNlOw0KDQogICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFVuaW5zdGFsbGluZyBwcmV2aW91cyBpbnN0YWxsYXRpb24uLi4nKTsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIudW5pbnN0YWxsU2VydmljZShwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyAnTWVzaCBBZ2VudCcgOiAnbWVzaGFnZW50Jyk7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtFUlJPUl1cbicpOw0KICAgIH0NCg0KICAgIC8vIENoZWNrIGZvciBzZWNvbmRhcnkgYWdlbnQNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgICAtPiBDaGVja2luZyBmb3Igc2Vjb25kYXJ5IGFnZW50Li4uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgIHZhciBsb2MgPSBzLmFwcExvY2F0aW9uKCk7DQogICAgICAgIHMuY2xvc2UoKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbRk9VTkRdXG4nKTsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgICAgIC0+IFVuaW5zdGFsbGluZyBzZWNvbmRhcnkgYWdlbnQuLi4nKTsNCiAgICAgICAgc2Vjb25kYXJ5YWdlbnQgPSB0cnVlOw0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci51bmluc3RhbGxTZXJ2aWNlKCdtZXNoYWdlbnREaWFnbm9zdGljJyk7DQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtET05FXVxuJyk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgY2F0Y2ggKGUpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtOT05FXVxuJyk7DQogICAgfQ0KDQogICAgaWYoc2Vjb25kYXJ5YWdlbnQpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgICAgLT4gcmVtb3Zpbmcgc2Vjb25kYXJ5IGFnZW50IGZyb20gdGFzayBzY2hlZHVsZXIuLi4nKTsNCiAgICAgICAgdmFyIHAgPSByZXF1aXJlKCd0YXNrLXNjaGVkdWxlcicpLmRlbGV0ZSgnbWVzaGFnZW50RGlhZ25vc3RpYy9wZXJpb2RpY1N0YXJ0Jyk7DQogICAgICAgIHAuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgcC50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0RPTkVdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UzKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlMyh0aGlzLl9wYXJhbXMpOw0KICAgICAgICB9KTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdW5pbnN0YWxsU2VydmljZTMocGFyYW1zKTsNCiAgICB9DQp9DQpmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcykNCnsNCiAgICB2YXIgc3ZjID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICBpZiAoc3ZjLmlzUnVubmluZygpKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAgIC0+IFN0b3BwaW5nIFNlcnZpY2UuLi4nKTsNCiAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybT09J3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgc3ZjLnN0b3AoKS50aGVuKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgICAgIHN2Yy5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHRoaXMuX3BhcmFtcyk7DQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW0VSUk9SXVxuJyk7DQogICAgICAgICAgICAgICAgc3ZjLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgICAgIH0pLnBhcmVudFByb21pc2UuX3BhcmFtcyA9IHBhcmFtczsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN2Yy51bmxvYWQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzdmMuc3RvcCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbU1RPUFBFRF1cbicpOw0KICAgICAgICAgICAgdW5pbnN0YWxsU2VydmljZTIocGFyYW1zKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKSB7IHN2Yy5jbG9zZSgpOyB9DQogICAgICAgIHVuaW5zdGFsbFNlcnZpY2UyKHBhcmFtcyk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gc2VydmljZUV4aXN0cyhsb2MsIHBhcmFtcykNCnsNCiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtGT1VORDogJyArIGxvYyArICddXG4nKTsNCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgew0KICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnICAgLT4gQ2hlY2tpbmcgZmlyZXdhbGwgcnVsZXMgZm9yIHByZXZpb3VzIGluc3RhbGxhdGlvbi4uLicpOw0KICAgICAgICByZXF1aXJlKCd3aW4tZmlyZXdhbGwnKS5yZW1vdmVGaXJld2FsbFJ1bGUoeyBwcm9ncmFtOiBsb2MgfSkudGhlbihmdW5jdGlvbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBTVUNDRVNTDQogICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnIFtERUxFVEVEXVxuJyk7DQogICAgICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHRoaXMuX3BhcmFtcyk7DQogICAgICAgIH0sIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZBSUxFRA0KICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbTm8gUnVsZXMgRm91bmRdXG4nKTsNCiAgICAgICAgICAgIHVuaW5zdGFsbFNlcnZpY2UodGhpcy5fcGFyYW1zKTsNCiAgICAgICAgfSkucGFyZW50UHJvbWlzZS5fcGFyYW1zID0gcGFyYW1zOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB1bmluc3RhbGxTZXJ2aWNlKHBhcmFtcyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBmdWxsVW5pbnN0YWxsKCkNCnsNCiAgICBjb25zb2xlLnNldERlc3RpbmF0aW9uKGNvbnNvbGUuRGVzdGluYXRpb25zLkRJU0FCTEVEKTsNCg0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJy4uLkNoZWNraW5nIGZvciBwcmV2aW91cyBpbnN0YWxsYXRpb24nKTsNCiAgICAgICAgdmFyIHMgPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldFNlcnZpY2UocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInID8gJ01lc2ggQWdlbnQnIDogJ21lc2hhZ2VudCcpOw0KICAgICAgICB2YXIgbG9jID0gcy5hcHBMb2NhdGlvbigpOw0KICAgICAgICBzLmNsb3NlKCk7DQogICAgfQ0KICAgIGNhdGNoIChlKQ0KICAgIHsNCiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyBbTk9ORV1cbicpOw0KICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICB9DQogICAgc2VydmljZUV4aXN0cyhsb2MsIG51bGwpOw0KfQ0KDQpmdW5jdGlvbiBmdWxsSW5zdGFsbChqc29uU3RyaW5nKQ0Kew0KICAgIGNvbnNvbGUuc2V0RGVzdGluYXRpb24oY29uc29sZS5EZXN0aW5hdGlvbnMuRElTQUJMRUQpOw0KICAgIHZhciBwYXJtcyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7DQoNCiAgICB0cnkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcuLi5DaGVja2luZyBmb3IgcHJldmlvdXMgaW5zdGFsbGF0aW9uJyk7DQogICAgICAgIHZhciBzID0gcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5nZXRTZXJ2aWNlKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyA/ICdNZXNoIEFnZW50JyA6ICdtZXNoYWdlbnQnKTsNCiAgICAgICAgdmFyIGxvYyA9IHMuYXBwTG9jYXRpb24oKTsNCiAgICAgICAgcy5jbG9zZSgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCcgW05PTkVdXG4nKTsNCiAgICAgICAgaW5zdGFsbFNlcnZpY2UocGFybXMpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIHNlcnZpY2VFeGlzdHMobG9jLCBwYXJtcyk7DQp9DQoNCg0KbW9kdWxlLmV4cG9ydHMgPQ0KICAgIHsNCiAgICAgICAgZnVsbEluc3RhbGw6IGZ1bGxJbnN0YWxsLA0KICAgICAgICBmdWxsVW5pbnN0YWxsOiBmdWxsVW5pbnN0YWxsDQogICAgfTs=', 'base64').toString());"); // identifer: Refer to modules/identifers.js - char *_identifiers = ILibMemory_Allocate(32608, 0, NULL, NULL); - memcpy_s(_identifiers + 0, 18632, "LyoNCkNvcHlyaWdodCAyMDE5LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHRyaW1JZGVudGlmaWVycyh2YWwpDQp7DQogICAgZm9yKHZhciB2IGluIHZhbCkNCiAgICB7DQogICAgICAgIGlmICghdmFsW3ZdIHx8IHZhbFt2XSA9PSAnTm9uZScgfHwgdmFsW3ZdID09ICcnKSB7IGRlbGV0ZSB2YWxbdl07IH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbnV4X2lkZW50aWZpZXJzKCkNCnsNCiAgICB2YXIgaWRlbnRpZmllcnMgPSB7fTsNCiAgICB2YXIgcmV0ID0ge307DQogICAgdmFyIHZhbHVlcyA9IHt9Ow0KICAgIGlmICghcmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvc3lzL2NsYXNzL2RtaS9pZCcpKSB7IHRocm93ICgndGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIERNSSBzdGF0aXN0aWNzJyk7IH0NCiAgICB2YXIgZW50cmllcyA9IHJlcXVpcmUoJ2ZzJykucmVhZGRpclN5bmMoJy9zeXMvY2xhc3MvZG1pL2lkJyk7DQogICAgZm9yKHZhciBpIGluIGVudHJpZXMpDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5zdGF0U3luYygnL3N5cy9jbGFzcy9kbWkvaWQvJyArIGVudHJpZXNbaV0pLmlzRmlsZSgpKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXRbZW50cmllc1tpXV0gPSByZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYygnL3N5cy9jbGFzcy9kbWkvaWQvJyArIGVudHJpZXNbaV0pLnRvU3RyaW5nKCkudHJpbSgpOw0KDQogICAgICAgICAgICBpZiAocmV0W2VudHJpZXNbaV1dID09ICdOb25lJykgeyBkZWxldGUgcmV0W2VudHJpZXNbaV1dO30NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZGVudGlmaWVyc1snYmlvc19kYXRlJ10gPSByZXRbJ2Jpb3NfZGF0ZSddOw0KICAgIGlkZW50aWZpZXJzWydiaW9zX3ZlbmRvciddID0gcmV0WydiaW9zX3ZlbmRvciddOw0KICAgIGlkZW50aWZpZXJzWydiaW9zX3ZlcnNpb24nXSA9IHJldFsnYmlvc192ZXJzaW9uJ107DQogICAgaWRlbnRpZmllcnNbJ2JvYXJkX25hbWUnXSA9IHJldFsnYm9hcmRfbmFtZSddOw0KICAgIGlkZW50aWZpZXJzWydib2FyZF9zZXJpYWwnXSA9IHJldFsnYm9hcmRfc2VyaWFsJ107DQogICAgaWRlbnRpZmllcnNbJ2JvYXJkX3ZlbmRvciddID0gcmV0Wydib2FyZF92ZW5kb3InXTsNCiAgICBpZGVudGlmaWVyc1snYm9hcmRfdmVyc2lvbiddID0gcmV0Wydib2FyZF92ZXJzaW9uJ107DQogICAgaWRlbnRpZmllcnNbJ3Byb2R1Y3RfdXVpZCddID0gcmV0Wydwcm9kdWN0X3V1aWQnXTsNCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgIm1vZGVsIG5hbWUiIHwgJyArICJ0ciAnXFxuJyAnOicgfCBhd2sgLUY6ICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIGlkZW50aWZpZXJzWydjcHVfbmFtZSddID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCg0KICAgIC8vIEZldGNoIEdQVSBpbmZvDQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoImxzcGNpIHwgZ3JlcCAnIFZHQSAnIHwgdHIgJ1xcbicgJ2AnIHwgYXdrICd7IGE9c3BsaXQoJDAsbGluZXMiICsgJywiYCIpOyBwcmludGYgIlsiOyBmb3IoaT0xO2k8YTsrK2kpIHsgc3BsaXQobGluZXNbaV0sZ3B1LCJyOiAiKTsgcHJpbnRmICIlc1xcIiVzXFwiIiwgKGk9PTE/IiI6IiwiKSxncHVbMl07IH0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHRyeSB7IGlkZW50aWZpZXJzWydncHVfbmFtZSddID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7IH0gY2F0Y2ggKHh4KSB7IH0NCg0KICAgIC8vIEZldGNoIFN0b3JhZ2UgSW5mbw0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCJsc2h3IC1jbGFzcyBkaXNrIHwgdHIgJ1xcbicgJ2AnIHwgYXdrICciICsgJ3sgbGVuPXNwbGl0KCQwLGxpbmVzLCIqIik7IHByaW50ZiAiWyI7IGZvcihpPTI7aTw9bGVuOysraSkgeyBtb2RlbD0iIjsgY2FwdGlvbj0iIjsgc2l6ZT0iIjsgY2xlbj1zcGxpdChsaW5lc1tpXSxpdGVtLCJgIik7IGZvcihqPTI7ajxjbGVuOysraikgeyBzcGxpdChpdGVtW2pdLHRva2VucywiOiIpOyBzcGxpdCh0b2tlbnNbMV0sa2V5LCIgIik7IGlmKGtleVsxXT09ImRlc2NyaXB0aW9uIikgeyBjYXB0aW9uPXN1YnN0cih0b2tlbnNbMl0sMik7IH0gaWYoa2V5WzFdPT0icHJvZHVjdCIpIHsgbW9kZWw9c3Vic3RyKHRva2Vuc1syXSwyKTsgfSBpZihrZXlbMV09PSJzaXplIikgeyBzaXplPXN1YnN0cih0b2tlbnNbMl0sMik7ICB9IH0gaWYobW9kZWw9PSIiKSB7IG1vZGVsPWNhcHRpb247IH0gaWYoY2FwdGlvbiE9IiIgfHwgbW9kZWwhPSIiKSB7IHByaW50ZiAiJXN7XFwiQ2FwdGlvblxcIjpcXCIlc1xcIixcXCJNb2RlbFxcIjpcXCIlc1xcIixcXCJTaXplXFwiOlxcIiVzXFwifSIsKGk9PTI/IiI6IiwiKSxjYXB0aW9uLG1vZGVsLHNpemU7IH0gIH0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHRyeSB7IGlkZW50aWZpZXJzWydzdG9yYWdlX2RldmljZXMnXSA9IEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOyB9IGNhdGNoICh4eCkgeyB9DQoNCiAgICB2YWx1ZXMuaWRlbnRpZmllcnMgPSBpZGVudGlmaWVyczsNCiAgICB2YWx1ZXMubGludXggPSByZXQ7DQogICAgdHJpbUlkZW50aWZpZXJzKHZhbHVlcy5pZGVudGlmaWVycyk7DQogICAgcmV0dXJuICh2YWx1ZXMpOw0KfQ0KDQpmdW5jdGlvbiB3aW5kb3dzX3dtaWNfcmVzdWx0cyhzdHIpDQp7DQogICAgdmFyIGxpbmVzID0gc3RyLnRyaW0oKS5zcGxpdCgnXHJcbicpOw0KICAgIHZhciBrZXlzID0gbGluZXNbMF0uc3BsaXQoJywnKTsNCiAgICB2YXIgaSwga2V5LCBrZXl2YWw7DQogICAgdmFyIHRva2VuczsNCiAgICB2YXIgcmVzdWx0ID0gW107DQoNCiAgICBmb3IgKGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpDQogICAgew0KICAgICAgICB2YXIgb2JqID0ge307DQogICAgICAgIHRva2VucyA9IGxpbmVzW2ldLnNwbGl0KCcsJyk7DQogICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwga2V5cy5sZW5ndGg7ICsra2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAodG9rZW5zW2tleV0udHJpbSgpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG9ialtrZXlzW2tleV0udHJpbSgpXSA9IHRva2Vuc1trZXldLnRyaW0oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBkZWxldGUgb2JqLk5vZGU7DQogICAgICAgIHJlc3VsdC5wdXNoKG9iaik7DQogICAgfQ0KICAgIHJldHVybiAocmVzdWx0KTsNCn0NCg0KDQpmdW5jdGlvbiB3aW5kb3dzX2lkZW50aWZpZXJzKCkNCnsNCiAgICB2YXIgcmV0ID0geyB3aW5kb3dzOiB7fX07IHZhbHVlcyA9IHt9OyB2YXIgaXRlbXM7IHZhciBpOyB2YXIgaXRlbTsNCiAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ2Jpb3MnLCAnZ2V0JywgJy9WQUxVRSddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgIHZhciBpdGVtcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xyXHJcbicpOw0KICAgIGZvcihpIGluIGl0ZW1zKQ0KICAgIHsNCiAgICAgICAgaXRlbSA9IGl0ZW1zW2ldLnNwbGl0KCc9Jyk7DQogICAgICAgIHZhbHVlc1tpdGVtWzBdXSA9IGl0ZW1bMV07DQogICAgfQ0KDQogICAgcmV0WydpZGVudGlmaWVycyddID0ge307DQogICAgcmV0WydpZGVudGlmaWVycyddWydiaW9zX2RhdGUnXSA9IHZhbHVlc1snUmVsZWFzZURhdGUnXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2Jpb3NfdmVuZG9yJ10gPSB2YWx1ZXNbJ01hbnVmYWN0dXJlciddOw0KICAgIHJldFsnaWRlbnRpZmllcnMnXVsnYmlvc192ZXJzaW9uJ10gPSB2YWx1ZXNbJ1NNQklPU0JJT1NWZXJzaW9uJ107DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcd2JlbVxcd21pYy5leGUnLCBbJ3dtaWMnLCAnQkFTRUJPQVJEJywgJ2dldCcsICcvVkFMVUUnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICB2YXIgaXRlbXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcclxyXG4nKTsNCiAgICBmb3IgKGkgaW4gaXRlbXMpDQogICAgew0KICAgICAgICBpdGVtID0gaXRlbXNbaV0uc3BsaXQoJz0nKTsNCiAgICAgICAgdmFsdWVzW2l0ZW1bMF1dID0gaXRlbVsxXTsNCiAgICB9DQogICAgcmV0WydpZGVudGlmaWVycyddWydib2FyZF9uYW1lJ10gPSB2YWx1ZXNbJ1Byb2R1Y3QnXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3NlcmlhbCddID0gdmFsdWVzWydTZXJpYWxOdW1iZXInXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3ZlbmRvciddID0gdmFsdWVzWydNYW51ZmFjdHVyZXInXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3ZlcnNpb24nXSA9IHZhbHVlc1snVmVyc2lvbiddOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ0NTUHJvZHVjdCcsICdnZXQnLCAnL1ZBTFVFJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgdmFyIGl0ZW1zID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXHJcclxuJyk7DQogICAgZm9yIChpIGluIGl0ZW1zKQ0KICAgIHsNCiAgICAgICAgaXRlbSA9IGl0ZW1zW2ldLnNwbGl0KCc9Jyk7DQogICAgICAgIHZhbHVlc1tpdGVtWzBdXSA9IGl0ZW1bMV07DQogICAgfQ0KICAgIHJldFsnaWRlbnRpZmllcnMnXVsncHJvZHVjdF91dWlkJ10gPSB2YWx1ZXNbJ1VVSUQnXTsNCiAgICB0cmltSWRlbnRpZmllcnMocmV0LmlkZW50aWZpZXJzKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdNRU1PUllDSElQJywgJ0xJU1QnLCAnL0ZPUk1BVDpDU1YnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LndpbmRvd3MubWVtb3J5ID0gd2luZG93c193bWljX3Jlc3VsdHMoY2hpbGQuc3Rkb3V0LnN0cik7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcd2JlbVxcd21pYy5leGUnLCBbJ3dtaWMnLCAnT1MnLCAnR0VUJywgJy9GT1JNQVQ6Q1NWJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHJldC53aW5kb3dzLm9zaW5mbyA9IHdpbmRvd3Nfd21pY19yZXN1bHRzKGNoaWxkLnN0ZG91dC5zdHIpWzBdOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ1BBUlRJVElPTicsICdMSVNUJywgJy9GT1JNQVQ6Q1NWJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHJldC53aW5kb3dzLnBhcnRpdGlvbnMgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdDUFUnLCAnTElTVCcsICdCUklFRicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5jcHUgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdQQVRIJywgJ1dpbjMyX1ZpZGVvQ29udHJvbGxlcicsICdHRVQnLCAnTmFtZSxDdXJyZW50SG9yaXpvbnRhbFJlc29sdXRpb24sQ3VycmVudFZlcnRpY2FsUmVzb2x1dGlvbicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5ncHUgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdkaXNrZHJpdmUnLCAnTElTVCcsICdCUklFRicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5kcml2ZXMgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIC8vIEluc2VydCBHUFUgbmFtZXMNCiAgICByZXQuaWRlbnRpZmllcnMuZ3B1X25hbWUgPSBbXTsNCiAgICBmb3IgKHZhciBncHVpbmZvIGluIHJldC53aW5kb3dzLmdwdSkNCiAgICB7DQogICAgICAgIGlmIChyZXQud2luZG93cy5ncHVbZ3B1aW5mb10uTmFtZSkgeyByZXQuaWRlbnRpZmllcnMuZ3B1X25hbWUucHVzaChyZXQud2luZG93cy5ncHVbZ3B1aW5mb10uTmFtZSk7IH0NCiAgICB9DQoNCiAgICAvLyBJbnNlcnQgU3RvcmFnZSBEZXZpY2VzDQogICAgcmV0LmlkZW50aWZpZXJzLnN0b3JhZ2VfZGV2aWNlcyA9IFtdOw0KICAgIGZvciAodmFyIGR2IGluIHJldC53aW5kb3dzLmRyaXZlcykNCiAgICB7DQogICAgICAgIHJldC5pZGVudGlmaWVycy5zdG9yYWdlX2RldmljZXMucHVzaCh7IENhcHRpb246IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uQ2FwdGlvbiwgTW9kZWw6IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uTW9kZWwsIFNpemU6IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uU2l6ZSB9KTsNCiAgICB9DQoNCiAgICB0cnkgeyByZXQuaWRlbnRpZmllcnMuY3B1X25hbWUgPSByZXQud2luZG93cy5jcHVbMF0uTmFtZTsgfSBjYXRjaCAoeCkgeyB9DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KZnVuY3Rpb24gbWFjb3NfaWRlbnRpZmllcnMoKQ0Kew0KICAgIHZhciByZXQgPSB7IGlkZW50aWZpZXJzOiB7fSB9Ow0KICAgIHZhciBjaGlsZDsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBib2FyZC1pZCB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLmJvYXJkX25hbWUgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBJT1BsYXRmb3JtU2VyaWFsTnVtYmVyIHwgYXdrIC1GPSBcJ3sgc3BsaXQoJDIsIHJlcywgIlxcIiIpOyBwcmludCByZXNbMl07IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQuaWRlbnRpZmllcnMuYm9hcmRfc2VyaWFsID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpb3JlZyAtZDIgLWMgSU9QbGF0Zm9ybUV4cGVydERldmljZSB8IGdyZXAgbWFudWZhY3R1cmVyIHwgYXdrIC1GPSBcJ3sgc3BsaXQoJDIsIHJlcywgIlxcIiIpOyBwcmludCByZXNbMl07IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQuaWRlbnRpZmllcnMuYm9hcmRfdmVuZG9yID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpb3JlZyAtZDIgLWMgSU9QbGF0Zm9ybUV4cGVydERldmljZSB8IGdyZXAgdmVyc2lvbiB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLmJvYXJkX3ZlcnNpb24gPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBJT1BsYXRmb3JtVVVJRCB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLnByb2R1Y3RfdXVpZCA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KDQogICAgdHJpbUlkZW50aWZpZXJzKHJldC5pZGVudGlmaWVycyk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0geyBfT2JqZWN0SUQ6ICdpZGVudGlmaWVycycsIGdldDogbGludXhfaWRlbnRpZmllcnMgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgX09iamVjdElEOiAnaWRlbnRpZmllcnMnLCBnZXQ6IHdpbmRvd3NfaWRlbnRpZmllcnMgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7IF9PYmplY3RJRDogJ2lkZW50aWZpZXJzJywgZ2V0OiBtYWNvc19pZGVudGlmaWVycyB9Ow0KICAgICAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHRocm93ICgnVW5zdXBwb3J0ZWQgUGxhdGZvcm0nKTsgfSB9Ow0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLmlzRG9ja2VyID0gZnVuY3Rpb24gaXNEb2NrZXIoKQ0Kew0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdsaW51eCcpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCJjYXQgL3Byb2Mvc2VsZi9jZ3Jv", 16000); - memcpy_s(_identifiers + 16000, 2632, "dXAgfCB0ciAnXG4nICdgJyB8IGF3ayAtRidgJyAneyBzcGxpdCgkMSwgcmVzLCAiICsgJyIvIik7IGlmKHJlc1syXT09ImRvY2tlciIpe3ByaW50ICIxIjt9IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIgIT0gJycpOw0KfTsNCm1vZHVsZS5leHBvcnRzLmlzVk0gPSBmdW5jdGlvbiBpc1ZNKCkNCnsNCiAgICB2YXIgcmV0ID0gZmFsc2U7DQogICAgdmFyIGlkID0gdGhpcy5nZXQoKTsNCiAgICBpZiAoaWQubGludXggJiYgaWQubGludXguc3lzX3ZlbmRvcikNCiAgICB7DQogICAgICAgIHN3aXRjaCAoaWQubGludXguc3lzX3ZlbmRvcikNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnVk13YXJlLCBJbmMuJzoNCiAgICAgICAgICAgIGNhc2UgJ1FFTVUnOg0KICAgICAgICAgICAgY2FzZSAnWGVuJzoNCiAgICAgICAgICAgICAgICByZXQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaWQuaWRlbnRpZmllcnMuYmlvc192ZW5kb3IpDQogICAgew0KICAgICAgICBzd2l0Y2goaWQuaWRlbnRpZmllcnMuYmlvc192ZW5kb3IpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgJ1ZNd2FyZSwgSW5jLic6DQogICAgICAgICAgICBjYXNlICdYZW4nOg0KICAgICAgICAgICAgY2FzZSAnU2VhQklPUyc6DQogICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGlkLmlkZW50aWZpZXJzLmJvYXJkX3ZlbmRvciAmJiBpZC5pZGVudGlmaWVycy5ib2FyZF92ZW5kb3IgPT0gJ1ZNd2FyZSwgSW5jLicpIHsgcmV0ID0gdHJ1ZTsgfQ0KICAgIGlmIChpZC5pZGVudGlmaWVycy5ib2FyZF9uYW1lKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoIChpZC5pZGVudGlmaWVycy5ib2FyZF9uYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICBjYXNlICdWaXJ0dWFsQm94JzoNCiAgICAgICAgICAgIGNhc2UgJ1ZpcnR1YWwgTWFjaGluZSc6DQogICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInICYmICFyZXQpDQogICAgew0KICAgICAgICBmb3IodmFyIGkgaW4gaWQuaWRlbnRpZmllcnMuZ3B1X25hbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKGlkLmlkZW50aWZpZXJzLmdwdV9uYW1lW2ldLnN0YXJ0c1dpdGgoJ1ZNd2FyZSAnKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBpZiAoIXJldCkgeyByZXQgPSB0aGlzLmlzRG9ja2VyKCk7IH0NCiAgICByZXR1cm4gKHJldCk7DQp9Ow0KDQoNCi8vIGJpb3NfZGF0ZSA9IEJJT1MtPlJlbGVhc2VEYXRlDQovLyBiaW9zX3ZlbmRvciA9IEJJT1MtPk1hbnVmYWN0dXJlcg0KLy8gYmlvc192ZXJzaW9uID0gQklPUy0+U01CSU9TQklPU1ZlcnNpb24NCi8vIGJvYXJkX25hbWUgPSBCQVNFQk9BUkQtPlByb2R1Y3QgPSBpb3JlZy9ib2FyZC1pZA0KLy8gYm9hcmRfc2VyaWFsID0gQkFTRUJPQVJELT5TZXJpYWxOdW1iZXIgPSBpb3JlZy9zZXJpYWwtbnVtYmVyIHwgaW9yZWcvSU9QbGF0Zm9ybVNlcmlhbE51bWJlcg0KLy8gYm9hcmRfdmVuZG9yID0gQkFTRUJPQVJELT5NYW51ZmFjdHVyZXIgPSBpb3JlZy9tYW51ZmFjdHVyZXINCi8vIGJvYXJkX3ZlcnNpb24gPSBCQVNFQk9BUkQtPlZlcnNpb24NCg0K", 2632); - ILibBase64DecodeEx((unsigned char*)_identifiers, 18632, (unsigned char*)_identifiers + 18632); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "identifiers"); duk_push_string(ctx, _identifiers + 18632); + char *_identifiers = ILibMemory_Allocate(33350, 0, NULL, NULL); + memcpy_s(_identifiers + 0, 19056, "LyoNCkNvcHlyaWdodCAyMDE5LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24NCg0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQpsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCmZ1bmN0aW9uIHRyaW1JZGVudGlmaWVycyh2YWwpDQp7DQogICAgZm9yKHZhciB2IGluIHZhbCkNCiAgICB7DQogICAgICAgIGlmICghdmFsW3ZdIHx8IHZhbFt2XSA9PSAnTm9uZScgfHwgdmFsW3ZdID09ICcnKSB7IGRlbGV0ZSB2YWxbdl07IH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbnV4X2lkZW50aWZpZXJzKCkNCnsNCiAgICB2YXIgaWRlbnRpZmllcnMgPSB7fTsNCiAgICB2YXIgcmV0ID0ge307DQogICAgdmFyIHZhbHVlcyA9IHt9Ow0KICAgIGlmICghcmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvc3lzL2NsYXNzL2RtaS9pZCcpKSB7IHRocm93ICgndGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIERNSSBzdGF0aXN0aWNzJyk7IH0NCiAgICB2YXIgZW50cmllcyA9IHJlcXVpcmUoJ2ZzJykucmVhZGRpclN5bmMoJy9zeXMvY2xhc3MvZG1pL2lkJyk7DQogICAgZm9yKHZhciBpIGluIGVudHJpZXMpDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5zdGF0U3luYygnL3N5cy9jbGFzcy9kbWkvaWQvJyArIGVudHJpZXNbaV0pLmlzRmlsZSgpKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXRbZW50cmllc1tpXV0gPSByZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYygnL3N5cy9jbGFzcy9kbWkvaWQvJyArIGVudHJpZXNbaV0pLnRvU3RyaW5nKCkudHJpbSgpOw0KDQogICAgICAgICAgICBpZiAocmV0W2VudHJpZXNbaV1dID09ICdOb25lJykgeyBkZWxldGUgcmV0W2VudHJpZXNbaV1dO30NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZGVudGlmaWVyc1snYmlvc19kYXRlJ10gPSByZXRbJ2Jpb3NfZGF0ZSddOw0KICAgIGlkZW50aWZpZXJzWydiaW9zX3ZlbmRvciddID0gcmV0WydiaW9zX3ZlbmRvciddOw0KICAgIGlkZW50aWZpZXJzWydiaW9zX3ZlcnNpb24nXSA9IHJldFsnYmlvc192ZXJzaW9uJ107DQogICAgaWRlbnRpZmllcnNbJ2JvYXJkX25hbWUnXSA9IHJldFsnYm9hcmRfbmFtZSddOw0KICAgIGlkZW50aWZpZXJzWydib2FyZF9zZXJpYWwnXSA9IHJldFsnYm9hcmRfc2VyaWFsJ107DQogICAgaWRlbnRpZmllcnNbJ2JvYXJkX3ZlbmRvciddID0gcmV0Wydib2FyZF92ZW5kb3InXTsNCiAgICBpZGVudGlmaWVyc1snYm9hcmRfdmVyc2lvbiddID0gcmV0Wydib2FyZF92ZXJzaW9uJ107DQogICAgaWRlbnRpZmllcnNbJ3Byb2R1Y3RfdXVpZCddID0gcmV0Wydwcm9kdWN0X3V1aWQnXTsNCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgIm1vZGVsIG5hbWUiIHwgJyArICJ0ciAnXFxuJyAnOicgfCBhd2sgLUY6ICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIGlkZW50aWZpZXJzWydjcHVfbmFtZSddID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCg0KICAgIC8vIEZldGNoIEdQVSBpbmZvDQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoImxzcGNpIHwgZ3JlcCAnIFZHQSAnIHwgdHIgJ1xcbicgJ2AnIHwgYXdrICd7IGE9c3BsaXQoJDAsbGluZXMiICsgJywiYCIpOyBwcmludGYgIlsiOyBmb3IoaT0xO2k8YTsrK2kpIHsgc3BsaXQobGluZXNbaV0sZ3B1LCJyOiAiKTsgcHJpbnRmICIlc1xcIiVzXFwiIiwgKGk9PTE/IiI6IiwiKSxncHVbMl07IH0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHRyeSB7IGlkZW50aWZpZXJzWydncHVfbmFtZSddID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7IH0gY2F0Y2ggKHh4KSB7IH0NCg0KICAgIC8vIEZldGNoIFN0b3JhZ2UgSW5mbw0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCJsc2h3IC1jbGFzcyBkaXNrIHwgdHIgJ1xcbicgJ2AnIHwgYXdrICciICsgJ3sgbGVuPXNwbGl0KCQwLGxpbmVzLCIqIik7IHByaW50ZiAiWyI7IGZvcihpPTI7aTw9bGVuOysraSkgeyBtb2RlbD0iIjsgY2FwdGlvbj0iIjsgc2l6ZT0iIjsgY2xlbj1zcGxpdChsaW5lc1tpXSxpdGVtLCJgIik7IGZvcihqPTI7ajxjbGVuOysraikgeyBzcGxpdChpdGVtW2pdLHRva2VucywiOiIpOyBzcGxpdCh0b2tlbnNbMV0sa2V5LCIgIik7IGlmKGtleVsxXT09ImRlc2NyaXB0aW9uIikgeyBjYXB0aW9uPXN1YnN0cih0b2tlbnNbMl0sMik7IH0gaWYoa2V5WzFdPT0icHJvZHVjdCIpIHsgbW9kZWw9c3Vic3RyKHRva2Vuc1syXSwyKTsgfSBpZihrZXlbMV09PSJzaXplIikgeyBzaXplPXN1YnN0cih0b2tlbnNbMl0sMik7ICB9IH0gaWYobW9kZWw9PSIiKSB7IG1vZGVsPWNhcHRpb247IH0gaWYoY2FwdGlvbiE9IiIgfHwgbW9kZWwhPSIiKSB7IHByaW50ZiAiJXN7XFwiQ2FwdGlvblxcIjpcXCIlc1xcIixcXCJNb2RlbFxcIjpcXCIlc1xcIixcXCJTaXplXFwiOlxcIiVzXFwifSIsKGk9PTI/IiI6IiwiKSxjYXB0aW9uLG1vZGVsLHNpemU7IH0gIH0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHRyeSB7IGlkZW50aWZpZXJzWydzdG9yYWdlX2RldmljZXMnXSA9IEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOyB9IGNhdGNoICh4eCkgeyB9DQoNCiAgICB2YWx1ZXMuaWRlbnRpZmllcnMgPSBpZGVudGlmaWVyczsNCiAgICB2YWx1ZXMubGludXggPSByZXQ7DQogICAgdHJpbUlkZW50aWZpZXJzKHZhbHVlcy5pZGVudGlmaWVycyk7DQogICAgcmV0dXJuICh2YWx1ZXMpOw0KfQ0KDQpmdW5jdGlvbiB3aW5kb3dzX3dtaWNfcmVzdWx0cyhzdHIpDQp7DQogICAgdmFyIGxpbmVzID0gc3RyLnRyaW0oKS5zcGxpdCgnXHJcbicpOw0KICAgIHZhciBrZXlzID0gbGluZXNbMF0uc3BsaXQoJywnKTsNCiAgICB2YXIgaSwga2V5LCBrZXl2YWw7DQogICAgdmFyIHRva2VuczsNCiAgICB2YXIgcmVzdWx0ID0gW107DQoNCiAgICBmb3IgKGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpDQogICAgew0KICAgICAgICB2YXIgb2JqID0ge307DQogICAgICAgIHRva2VucyA9IGxpbmVzW2ldLnNwbGl0KCcsJyk7DQogICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwga2V5cy5sZW5ndGg7ICsra2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAodG9rZW5zW2tleV0udHJpbSgpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG9ialtrZXlzW2tleV0udHJpbSgpXSA9IHRva2Vuc1trZXldLnRyaW0oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBkZWxldGUgb2JqLk5vZGU7DQogICAgICAgIHJlc3VsdC5wdXNoKG9iaik7DQogICAgfQ0KICAgIHJldHVybiAocmVzdWx0KTsNCn0NCg0KDQpmdW5jdGlvbiB3aW5kb3dzX2lkZW50aWZpZXJzKCkNCnsNCiAgICB2YXIgcmV0ID0geyB3aW5kb3dzOiB7fX07IHZhbHVlcyA9IHt9OyB2YXIgaXRlbXM7IHZhciBpOyB2YXIgaXRlbTsNCiAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ2Jpb3MnLCAnZ2V0JywgJy9WQUxVRSddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgIHZhciBpdGVtcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xyXHJcbicpOw0KICAgIGZvcihpIGluIGl0ZW1zKQ0KICAgIHsNCiAgICAgICAgaXRlbSA9IGl0ZW1zW2ldLnNwbGl0KCc9Jyk7DQogICAgICAgIHZhbHVlc1tpdGVtWzBdXSA9IGl0ZW1bMV07DQogICAgfQ0KDQogICAgcmV0WydpZGVudGlmaWVycyddID0ge307DQogICAgcmV0WydpZGVudGlmaWVycyddWydiaW9zX2RhdGUnXSA9IHZhbHVlc1snUmVsZWFzZURhdGUnXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2Jpb3NfdmVuZG9yJ10gPSB2YWx1ZXNbJ01hbnVmYWN0dXJlciddOw0KICAgIHJldFsnaWRlbnRpZmllcnMnXVsnYmlvc192ZXJzaW9uJ10gPSB2YWx1ZXNbJ1NNQklPU0JJT1NWZXJzaW9uJ107DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcd2JlbVxcd21pYy5leGUnLCBbJ3dtaWMnLCAnQkFTRUJPQVJEJywgJ2dldCcsICcvVkFMVUUnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICB2YXIgaXRlbXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcclxyXG4nKTsNCiAgICBmb3IgKGkgaW4gaXRlbXMpDQogICAgew0KICAgICAgICBpdGVtID0gaXRlbXNbaV0uc3BsaXQoJz0nKTsNCiAgICAgICAgdmFsdWVzW2l0ZW1bMF1dID0gaXRlbVsxXTsNCiAgICB9DQogICAgcmV0WydpZGVudGlmaWVycyddWydib2FyZF9uYW1lJ10gPSB2YWx1ZXNbJ1Byb2R1Y3QnXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3NlcmlhbCddID0gdmFsdWVzWydTZXJpYWxOdW1iZXInXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3ZlbmRvciddID0gdmFsdWVzWydNYW51ZmFjdHVyZXInXTsNCiAgICByZXRbJ2lkZW50aWZpZXJzJ11bJ2JvYXJkX3ZlcnNpb24nXSA9IHZhbHVlc1snVmVyc2lvbiddOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ0NTUHJvZHVjdCcsICdnZXQnLCAnL1ZBTFVFJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgdmFyIGl0ZW1zID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXHJcclxuJyk7DQogICAgZm9yIChpIGluIGl0ZW1zKQ0KICAgIHsNCiAgICAgICAgaXRlbSA9IGl0ZW1zW2ldLnNwbGl0KCc9Jyk7DQogICAgICAgIHZhbHVlc1tpdGVtWzBdXSA9IGl0ZW1bMV07DQogICAgfQ0KICAgIHJldFsnaWRlbnRpZmllcnMnXVsncHJvZHVjdF91dWlkJ10gPSB2YWx1ZXNbJ1VVSUQnXTsNCiAgICB0cmltSWRlbnRpZmllcnMocmV0LmlkZW50aWZpZXJzKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdNRU1PUllDSElQJywgJ0xJU1QnLCAnL0ZPUk1BVDpDU1YnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LndpbmRvd3MubWVtb3J5ID0gd2luZG93c193bWljX3Jlc3VsdHMoY2hpbGQuc3Rkb3V0LnN0cik7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcd2JlbVxcd21pYy5leGUnLCBbJ3dtaWMnLCAnT1MnLCAnR0VUJywgJy9GT1JNQVQ6Q1NWJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHJldC53aW5kb3dzLm9zaW5mbyA9IHdpbmRvd3Nfd21pY19yZXN1bHRzKGNoaWxkLnN0ZG91dC5zdHIpWzBdOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5lbnZbJ3dpbmRpciddICsgJ1xcU3lzdGVtMzJcXHdiZW1cXHdtaWMuZXhlJywgWyd3bWljJywgJ1BBUlRJVElPTicsICdMSVNUJywgJy9GT1JNQVQ6Q1NWJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgIHJldC53aW5kb3dzLnBhcnRpdGlvbnMgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdDUFUnLCAnTElTVCcsICdCUklFRicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5jcHUgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdQQVRIJywgJ1dpbjMyX1ZpZGVvQ29udHJvbGxlcicsICdHRVQnLCAnTmFtZSxDdXJyZW50SG9yaXpvbnRhbFJlc29sdXRpb24sQ3VycmVudFZlcnRpY2FsUmVzb2x1dGlvbicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5ncHUgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZW52Wyd3aW5kaXInXSArICdcXFN5c3RlbTMyXFx3YmVtXFx3bWljLmV4ZScsIFsnd21pYycsICdkaXNrZHJpdmUnLCAnTElTVCcsICdCUklFRicsICcvRk9STUFUOkNTViddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQud2luZG93cy5kcml2ZXMgPSB3aW5kb3dzX3dtaWNfcmVzdWx0cyhjaGlsZC5zdGRvdXQuc3RyKTsNCg0KICAgIC8vIEluc2VydCBHUFUgbmFtZXMNCiAgICByZXQuaWRlbnRpZmllcnMuZ3B1X25hbWUgPSBbXTsNCiAgICBmb3IgKHZhciBncHVpbmZvIGluIHJldC53aW5kb3dzLmdwdSkNCiAgICB7DQogICAgICAgIGlmIChyZXQud2luZG93cy5ncHVbZ3B1aW5mb10uTmFtZSkgeyByZXQuaWRlbnRpZmllcnMuZ3B1X25hbWUucHVzaChyZXQud2luZG93cy5ncHVbZ3B1aW5mb10uTmFtZSk7IH0NCiAgICB9DQoNCiAgICAvLyBJbnNlcnQgU3RvcmFnZSBEZXZpY2VzDQogICAgcmV0LmlkZW50aWZpZXJzLnN0b3JhZ2VfZGV2aWNlcyA9IFtdOw0KICAgIGZvciAodmFyIGR2IGluIHJldC53aW5kb3dzLmRyaXZlcykNCiAgICB7DQogICAgICAgIHJldC5pZGVudGlmaWVycy5zdG9yYWdlX2RldmljZXMucHVzaCh7IENhcHRpb246IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uQ2FwdGlvbiwgTW9kZWw6IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uTW9kZWwsIFNpemU6IHJldC53aW5kb3dzLmRyaXZlc1tkdl0uU2l6ZSB9KTsNCiAgICB9DQoNCiAgICB0cnkgeyByZXQuaWRlbnRpZmllcnMuY3B1X25hbWUgPSByZXQud2luZG93cy5jcHVbMF0uTmFtZTsgfSBjYXRjaCAoeCkgeyB9DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KZnVuY3Rpb24gbWFjb3NfaWRlbnRpZmllcnMoKQ0Kew0KICAgIHZhciByZXQgPSB7IGlkZW50aWZpZXJzOiB7fSB9Ow0KICAgIHZhciBjaGlsZDsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBib2FyZC1pZCB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLmJvYXJkX25hbWUgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBJT1BsYXRmb3JtU2VyaWFsTnVtYmVyIHwgYXdrIC1GPSBcJ3sgc3BsaXQoJDIsIHJlcywgIlxcIiIpOyBwcmludCByZXNbMl07IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQuaWRlbnRpZmllcnMuYm9hcmRfc2VyaWFsID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpb3JlZyAtZDIgLWMgSU9QbGF0Zm9ybUV4cGVydERldmljZSB8IGdyZXAgbWFudWZhY3R1cmVyIHwgYXdrIC1GPSBcJ3sgc3BsaXQoJDIsIHJlcywgIlxcIiIpOyBwcmludCByZXNbMl07IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQuaWRlbnRpZmllcnMuYm9hcmRfdmVuZG9yID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQoNCiAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpb3JlZyAtZDIgLWMgSU9QbGF0Zm9ybUV4cGVydERldmljZSB8IGdyZXAgdmVyc2lvbiB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLmJvYXJkX3ZlcnNpb24gPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCg0KICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lvcmVnIC1kMiAtYyBJT1BsYXRmb3JtRXhwZXJ0RGV2aWNlIHwgZ3JlcCBJT1BsYXRmb3JtVVVJRCB8IGF3ayAtRj0gXCd7IHNwbGl0KCQyLCByZXMsICJcXCIiKTsgcHJpbnQgcmVzWzJdOyB9XCdcbmV4aXRcbicpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgcmV0LmlkZW50aWZpZXJzLnByb2R1Y3RfdXVpZCA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnc3lzY3RsIC1uIG1hY2hkZXAuY3B1LmJyYW5kX3N0cmluZ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXQuaWRlbnRpZmllcnMuY3B1X25hbWUgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKTsNCg0KDQogICAgdHJpbUlkZW50aWZpZXJzKHJldC5pZGVudGlmaWVycyk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0geyBfT2JqZWN0SUQ6ICdpZGVudGlmaWVycycsIGdldDogbGludXhfaWRlbnRpZmllcnMgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgX09iamVjdElEOiAnaWRlbnRpZmllcnMnLCBnZXQ6IHdpbmRvd3NfaWRlbnRpZmllcnMgfTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7IF9PYmplY3RJRDogJ2lkZW50aWZpZXJzJywgZ2V0OiBtYWNvc19pZGVudGlmaWVycyB9Ow0KICAgICAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHRocm93ICgnVW5zdXBwb3J0ZWQgUGxhdGZvcm0nKTsgfSB9Ow0KICAgICAgICBicmVhazsNCn0NCm1v", 16000); + memcpy_s(_identifiers + 16000, 3056, "ZHVsZS5leHBvcnRzLmlzRG9ja2VyID0gZnVuY3Rpb24gaXNEb2NrZXIoKQ0Kew0KICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdsaW51eCcpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCJjYXQgL3Byb2Mvc2VsZi9jZ3JvdXAgfCB0ciAnXG4nICdgJyB8IGF3ayAtRidgJyAneyBzcGxpdCgkMSwgcmVzLCAiICsgJyIvIik7IGlmKHJlc1syXT09ImRvY2tlciIpe3ByaW50ICIxIjt9IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIgIT0gJycpOw0KfTsNCm1vZHVsZS5leHBvcnRzLmlzVk0gPSBmdW5jdGlvbiBpc1ZNKCkNCnsNCiAgICB2YXIgcmV0ID0gZmFsc2U7DQogICAgdmFyIGlkID0gdGhpcy5nZXQoKTsNCiAgICBpZiAoaWQubGludXggJiYgaWQubGludXguc3lzX3ZlbmRvcikNCiAgICB7DQogICAgICAgIHN3aXRjaCAoaWQubGludXguc3lzX3ZlbmRvcikNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnVk13YXJlLCBJbmMuJzoNCiAgICAgICAgICAgIGNhc2UgJ1FFTVUnOg0KICAgICAgICAgICAgY2FzZSAnWGVuJzoNCiAgICAgICAgICAgICAgICByZXQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaWQuaWRlbnRpZmllcnMuYmlvc192ZW5kb3IpDQogICAgew0KICAgICAgICBzd2l0Y2goaWQuaWRlbnRpZmllcnMuYmlvc192ZW5kb3IpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgJ1ZNd2FyZSwgSW5jLic6DQogICAgICAgICAgICBjYXNlICdYZW4nOg0KICAgICAgICAgICAgY2FzZSAnU2VhQklPUyc6DQogICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGlkLmlkZW50aWZpZXJzLmJvYXJkX3ZlbmRvciAmJiBpZC5pZGVudGlmaWVycy5ib2FyZF92ZW5kb3IgPT0gJ1ZNd2FyZSwgSW5jLicpIHsgcmV0ID0gdHJ1ZTsgfQ0KICAgIGlmIChpZC5pZGVudGlmaWVycy5ib2FyZF9uYW1lKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoIChpZC5pZGVudGlmaWVycy5ib2FyZF9uYW1lKQ0KICAgICAgICB7DQogICAgICAgICAgICBjYXNlICdWaXJ0dWFsQm94JzoNCiAgICAgICAgICAgIGNhc2UgJ1ZpcnR1YWwgTWFjaGluZSc6DQogICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInICYmICFyZXQpDQogICAgew0KICAgICAgICBmb3IodmFyIGkgaW4gaWQuaWRlbnRpZmllcnMuZ3B1X25hbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKGlkLmlkZW50aWZpZXJzLmdwdV9uYW1lW2ldLnN0YXJ0c1dpdGgoJ1ZNd2FyZSAnKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgICBpZiAoIXJldCkgeyByZXQgPSB0aGlzLmlzRG9ja2VyKCk7IH0NCiAgICByZXR1cm4gKHJldCk7DQp9Ow0KDQoNCi8vIGJpb3NfZGF0ZSA9IEJJT1MtPlJlbGVhc2VEYXRlDQovLyBiaW9zX3ZlbmRvciA9IEJJT1MtPk1hbnVmYWN0dXJlcg0KLy8gYmlvc192ZXJzaW9uID0gQklPUy0+U01CSU9TQklPU1ZlcnNpb24NCi8vIGJvYXJkX25hbWUgPSBCQVNFQk9BUkQtPlByb2R1Y3QgPSBpb3JlZy9ib2FyZC1pZA0KLy8gYm9hcmRfc2VyaWFsID0gQkFTRUJPQVJELT5TZXJpYWxOdW1iZXIgPSBpb3JlZy9zZXJpYWwtbnVtYmVyIHwgaW9yZWcvSU9QbGF0Zm9ybVNlcmlhbE51bWJlcg0KLy8gYm9hcmRfdmVuZG9yID0gQkFTRUJPQVJELT5NYW51ZmFjdHVyZXIgPSBpb3JlZy9tYW51ZmFjdHVyZXINCi8vIGJvYXJkX3ZlcnNpb24gPSBCQVNFQk9BUkQtPlZlcnNpb24NCg0K", 3056); + ILibBase64DecodeEx((unsigned char*)_identifiers, 19056, (unsigned char*)_identifiers + 19056); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "identifiers"); duk_push_string(ctx, _identifiers + 19056); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_identifiers); diff --git a/modules/identifiers.js b/modules/identifiers.js index c011a91..768c361 100644 --- a/modules/identifiers.js +++ b/modules/identifiers.js @@ -229,6 +229,13 @@ function macos_identifiers() child.waitExit(); ret.identifiers.product_uuid = child.stdout.str.trim(); + child = require('child_process').execFile('/bin/sh', ['sh']); + child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); + child.stdin.write('sysctl -n machdep.cpu.brand_string\nexit\n'); + child.waitExit(); + ret.identifiers.cpu_name = child.stdout.str.trim(); + + trimIdentifiers(ret.identifiers); return (ret); }