From 86bef3de68a7f9e4da8c49b09286318b738e63ab Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Mon, 1 Jun 2020 14:24:06 -0700 Subject: [PATCH] Added missing 'return' statement. --- microscript/ILibDuktape_Polyfills.c | 12 ++++++------ modules/heci.js | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 78805ad..1f746c0 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2276,12 +2276,12 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_identifiers); #ifndef _NOHECI - char *_heci = ILibMemory_Allocate(57652, 0, NULL, NULL); - memcpy_s(_heci + 0, 32944, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgR00gPSBudWxsOw0KdmFyIHNldHVwID0gbnVsbDsNCnZhciBrZXJuZWwzMiA9IG51bGw7DQp2YXIgZHVwbGV4ID0gcmVxdWlyZSgnc3RyZWFtJykuRHVwbGV4Ow0KDQoNCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQp7DQogICAgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICBzZXR1cCA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdTZXR1cEFQSS5kbGwnKTsNCiAgICBzZXR1cC5DcmVhdGVNZXRob2QoJ1NldHVwRGlHZXRDbGFzc0RldnNBJyk7DQogICAgc2V0dXAuQ3JlYXRlTWV0aG9kKCdTZXR1cERpRW51bURldmljZUludGVyZmFjZXMnKTsNCiAgICBzZXR1cC5DcmVhdGVNZXRob2QoJ1NldHVwRGlHZXREZXZpY2VJbnRlcmZhY2VEZXRhaWxBJyk7DQogICAgc2V0dXAuQ3JlYXRlTWV0aG9kKCdTZXR1cERpRGVzdHJveURldmljZUluZm9MaXN0Jyk7DQoNCiAgICBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdLZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlSGFuZGxlJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdDcmVhdGVFdmVudEEnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0NyZWF0ZUZpbGVBJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdEZXZpY2VJb0NvbnRyb2wnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldE92ZXJsYXBwZWRSZXN1bHQnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1JlYWRGaWxlJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdXcml0ZUZpbGUnKTsNCn0NCg0KdmFyIERJR0NGX0RFRkFVTFQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7ICANCnZhciBESUdDRl9QUkVTRU5UICAgICAgICAgICAgICAgPSAweDAwMDAwMDAyOw0KdmFyIERJR0NGX0FMTENMQVNTRVMgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQp2YXIgRElHQ0ZfUFJPRklMRSAgICAgICAgICAgICAgID0gMHgwMDAwMDAwODsNCnZhciBESUdDRl9ERVZJQ0VJTlRFUkZBQ0UgICAgICAgPSAweDAwMDAwMDEwOw0KdmFyIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIgICA9IDEyMjsgICAgDQp2YXIgR0VORVJJQ19SRUFEICAgICAgICAgICAgICAgID0gMHg4MDAwMDAwMDsNCnZhciBHRU5FUklDX1dSSVRFICAgICAgICAgICAgICAgPSAweDQwMDAwMDAwOw0KdmFyIEZJTEVfU0hBUkVfUkVBRCAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7ICANCnZhciBGSUxFX1NIQVJFX1dSSVRFICAgICAgICAgICAgPSAweDAwMDAwMDAyOyAgDQp2YXIgT1BFTl9FWElTVElORyAgICAgICAgICAgICAgID0gMzsNCnZhciBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCAgICAgICAgPSAweDQwMDAwMDAwOw0KdmFyIEVSUk9SX0lPX1BFTkRJTkcgICAgICAgICAgICA9IDk5NzsNCg0KZnVuY3Rpb24gaGVjaV9jcmVhdGUoKQ0Kew0KICAgIHZhciByZXQgPSBuZXcgZHVwbGV4KA0KICAgIHsNCiAgICAgICAgJ3dyaXRlJzogZnVuY3Rpb24gKGNodW5rLCBmbHVzaCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA+IHRoaXMuTWF4QnVmZmVyU2l6ZSkgeyB0aHJvdyAoJ0J1ZmZlciB0b28gbGFyZ2UnKTsgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fd3JpdGVvdmVybGFwcGVkID09IG51bGwpIHsgdGhyb3cgKCdOb3QgQ29ubmVjdGVkJyk7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdXcml0ZXMudW5zaGlmdCh7IGJ1ZmZlcjogY2h1bmssIGZsdXNoOiBmbHVzaCB9KTsNCg0KICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdXcml0ZXMubGVuZ3RoID09IDEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgLy8gS2lja3N0YXJ0IHRoZSB3cml0ZQ0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAnZmluYWwnOiBmdW5jdGlvbiAoZmx1c2gpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgIH0sDQogICAgICAgICdyZWFkJzogZnVuY3Rpb24oc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRidWZmZXIgPSBwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyBHTS5DcmVhdGVWYXJpYWJsZSh0aGlzLk1heEJ1ZmZlclNpemUpIDogQnVmZmVyLmFsbG9jKHRoaXMuTWF4QnVmZmVyU2l6ZSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1JlYWQoKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5SZWFkRmlsZSh0aGlzLl9kZXNjcmlwdG9yLCB0aGlzLl9yZWFkYnVmZmVyLCB0aGlzLl9yZWFkYnVmZmVyLl9zaXplLCAwLCB0aGlzLl9yZWFkb3ZlcmxhcHBlZCk7DQogICAgICAgICAgICBpZihyZXN1bHQuVmFsICE9IDAgfHwgcmVzdWx0Ll9MYXN0RXJyb3IgPT0gRVJST1JfSU9fUEVORElORykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZighdGhpcy5fckRlc2NyaXB0b3JFdmVudCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JEZXNjcmlwdG9yRXZlbnQgPSByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykuYWRkRGVzY3JpcHRvcih0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQsIHsgbWV0YWRhdGE6ICdoZWNpLnNlc3Npb24gW3JlYWRdJyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fckRlc2NyaXB0b3JFdmVudC5zZXNzaW9uID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fckRlc2NyaXB0b3JFdmVudC5vbignc2lnbmFsZWQnLCBmdW5jdGlvbiAoc3RhdHVzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMgIT0gJ05PTkUnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoJz4+PiBoZWNpLnNlc3Npb24gc2lnbmFsZWQgd2l0aCBzdGF0dXM6ICcgKyBzdGF0dXMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5wdXNoKG51bGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlc1JlYWQgPSBHTS5DcmVhdGVWYXJpYWJsZSg0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigocmVzdWx0PWtlcm5lbDMyLkdldE92ZXJsYXBwZWRSZXN1bHQodGhpcy5zZXNzaW9uLl9kZXNjcmlwdG9yLCB0aGlzLnNlc3Npb24uX3JlYWRvdmVybGFwcGVkLCBieXRlc1JlYWQsIDApKS5WYWwgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5zZXNzaW9uLl9yZWFkYnVmZmVyLnRvQnVmZmVyKCkuc2xpY2UoMCwgYnl0ZXNSZWFkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoYnVmZmVyLmxlbmd0aCArICcgYnl0ZXMgUkVBRCcpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1c2hSZXN1bHQgPSB0aGlzLnNlc3Npb24ucHVzaChidWZmZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSAhPSAwICYmIHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGg+MCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubG9jayBhIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzIoJ3BlbmRpbmdXcml0ZUNvdW50OiAnICsgdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLl9wcm9jZXNzV3JpdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzIoJ1dyaXRlL0ZsdXNoJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVzaFJlc3VsdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiByZWFkIG1vcmUsIGJlY2F1c2UgZGF0YSBpcyBzdGlsbCBmbG93aW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5SZWFkRmlsZSh0aGlzLnNlc3Npb24uX2Rlc2NyaXB0b3IsIHRoaXMuc2Vzc2lvbi5fcmVhZGJ1ZmZlciwgdGhpcy5zZXNzaW9uLl9yZWFkYnVmZmVyLl9zaXplLCAwLCB0aGlzLnNlc3Npb24uX3JlYWRvdmVybGFwcGVkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0LlZhbCAhPSAwIHx8IHJlc3VsdC5fTGFzdEVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdTb21ldHlwZSBvZiBlcnJvcjogJyArIHJlc3VsdC5fTGFzdEVycm9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5wdXNoKG51bGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1JFQURfT1ZFUkxBUFBFRF9FUlJPUjogJyArIHJlc3VsdC5fTGFzdEVycm9yICsgJyBvbiAnICsgdGhpcy5zZXNzaW9uLl9oYXNoQ29kZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZSBPdGhlciBFcnJvcjogJyArIHJlc3VsdC5fTGFzdEVycm9yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIHJldC5fT2JqZWN0SUQgPSAnaGVjaS5zZXNzaW9uJzsNCiAgICByZXQuYnVmZmVyTW9kZSA9IDE7DQogICAgcmV0Ll9pb2N0bHMgPSBbXTsNCiAgICByZXQuX3BlbmRpbmdXcml0ZXMgPSBbXTsNCiAgICByZXQuaGVjaVBhcmVudCA9IHRoaXM7DQoNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY29ubmVjdCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnZXJyb3InKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjb25uZWN0JywgZnVuY3Rpb24gX2Nvbm5lY3QoZ3VpZCwgb3B0aW9ucykNCiAgICAgICAgew0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnY29ubmVjdCgpJyk7DQogICAgICAgICAgICB0aGlzLmRvSW9jdGwodGhpcy5oZWNpUGFyZW50LklPQ1RMLkNMSUVOVF9DT05ORUNULCBndWlkLCBCdWZmZXIuYWxsb2MoMTYpLCBmdW5jdGlvbiBfb25jb25uZWN0KHN0YXR1cywgYnVmZmVyLCBvcHQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoc3RhdHVzIT0wKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnSEVDSSBDb25uZWN0aW9uIEVycm9yIFsnICsgdGhpcy5MYXN0RXJyb3IgKyAnXScpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgJ0hFQ0kgQ29ubmVjdGlvbiBFcnJvciBbJyArIHRoaXMuTGFzdEVycm9yICsgJ10nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihidWZmZXIubGVuZ3RoIDw9NCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsICdIRUNJIENvbm5lY3Rpb24gRXJyb3IgW0lOVkFMSUQgUkVTUE9OU0VdJyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJNYXhCdWZmZXJTaXplIiwgeyB2YWx1ZTogYnVmZmVyLnJlYWRVSW50MzJMRSgpIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHQ7DQoNCiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZG92ZXJsYXBwZWQgPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gMzIgOiAyMCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKEdNLlBvaW50ZXJTaXplID09IDggPyAzMiA6IDIwKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZG92ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQucG9pbnRlckJ1ZmZlcigpLmNvcHkodGhpcy5fcmVhZG92ZXJsYXBwZWQuRGVyZWYoR00uUG9pbnRlclNpemUgPT0gOCA/IDI0IDogMTYsIEdNLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVvdmVybGFwcGVkLmhFdmVudC5wb2ludGVyQnVmZmVyKCkuY29weSh0aGlzLl93cml0ZW92ZXJsYXBwZWQuRGVyZWYoR00uUG9pbnRlclNpemUgPT0gOCA/IDI0IDogMTYsIEdNLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnQ29ubmVjdGVkLCBidWZmZXIgc2l6ZTogJyArIHRoaXMuTWF4QnVmZmVyU2l6ZSk7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZCh0aGlzLk1heEJ1ZmZlclNpemUpOw0KICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpOw0KICAgICAgICAgICAgfSwgb3B0aW9ucyk7DQogICAgICAgIH0pDQogICAgICAgIC5hZGRNZXRob2QoJ2Rlc2NyaXB0b3JQYXRoJywgZnVuY3Rpb24gX2Rlc2NyaXB0b3JQYXRoKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvZGV2L21laScpKSB7IHJldHVybiAoJy9kZXYvbWVpJyk7IH0NCiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvZGV2L21laTAnKSkgeyByZXR1cm4gKCcvZGV2L21laTAnKTsgfQ0KICAgICAgICAgICAgICAgIHRocm93ICgnSEVDSSBub3Qgc3VwcG9ydGVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKSB7IHRocm93ICgnSEVDSSBub3Qgc3VwcG9ydGVkJyk7IH0NCg0KICAgICAgICAgICAgdmFyIHJlc3VsdDsNCiAgICAgICAgICAgIHZhciBpaTsNCiAgICAgICAgICAgIHZhciBkZXZpY2VEZXRhaWw7DQogICAgICAgICAgICB2YXIgYnVmZmVyU2l6ZSA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOyAgLy8gRFdPUkQNCiAgICAgICAgICAgIHZhciBoZWNpZ3VpZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKHRoaXMuaGVjaVBhcmVudC5HVUlEUy5IRUNJKTsNCiAgICAgICAgICAgIHZhciBkZXZpY2VJbmZvID0gc2V0dXAuU2V0dXBEaUdldENsYXNzRGV2c0EoaGVjaWd1aWQsIDAsIDAsIERJR0NGX1BSRVNFTlQgfCBESUdDRl9ERVZJQ0VJTlRFUkZBQ0UpOw0KICAgICAgICAgICAgaWYgKGRldmljZUluZm8uVmFsID09IC0xKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJy4uLiBVbmFibGUgdG8gYWNxdWlyZSBbZGV2aWNlSW5mb10nKTsNCiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VuYWJsZSB0byBhY3F1aXJlIFtkZXZpY2VJbmZvXScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGFjcXVpcmVkIFtkZXZpY2VJbmZvXScpOw0KDQoNCiAgICAgICAgICAgIHZhciBpbnRlcmZhY2VEYXRhID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMjgpOw0KICAgICAgICAgICAgaW50ZXJmYWNlRGF0YS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaW50ZXJmYWNlRGF0YS5fc2l6ZSwgMCk7DQoNCiAgICAgICAgICAgIGZvciAoaWkgPSAwOyBzZXR1cC5TZXR1cERpRW51bURldmljZUludGVyZmFjZXMoZGV2aWNlSW5mbywgMCwgaGVjaWd1aWQsIGlpLCBpbnRlcmZhY2VEYXRhKS5WYWwgIT0gMDsgKytpaSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAvLyBGb3VuZCBvdXIgZGV2aWNlIGluc3RhbmNlDQogICAgICAgICAgICAgICAgaWYgKChyZXN1bHQgPSBzZXR1cC5TZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsQShkZXZpY2VJbmZvLCBpbnRlcmZhY2VEYXRhLCAwLCAwLCBidWZmZXJTaXplLCAwKSkuVmFsID09IDApDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Ll9MYXN0RXJyb3IgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIGJpZyBlbm91Z2ggYnVmZmVyIHRvIGdldCBkZXRhaWwgZGF0YQ0KICAgICAgICAgICAgICAgIGRldmljZURldGFpbCA9IEdNLkNyZWF0ZVZhcmlhYmxlKGJ1ZmZlclNpemUudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSk7DQogICAgICAgICAgICAgICAgZGV2aWNlRGV0YWlsLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gOCA6IDUsIDApOw0KDQogICAgICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHRvIGdldCB0aGUgZGV2aWNlIGludGVyZmFjZSBkZXRhaWwgaW5mbw0KICAgICAgICAgICAgICAgIGlmIChzZXR1cC5TZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsQShkZXZpY2VJbmZvLCBpbnRlcmZhY2VEYXRhLCBkZXZpY2VEZXRhaWwsIGJ1ZmZlclNpemUsIDAsIDApLlZhbCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgZGV2aWNlRGV0YWlsID0gTlVMTDsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2V0dXAuU2V0dXBEaURlc3Ryb3lEZXZpY2VJbmZvTGlzdChkZXZpY2VJbmZvKTsNCiAgICAgICAgICAgIGlmIChkZXZpY2VEZXRhaWwgPT0gbnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCcuLi4gZmFpbGVkIHRvIGFjcXVpcmUgW2RldmljZURldGFpbF0nKTsNCiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VuYWJsZSB0byBhY3F1aXJlIFtkZXZpY2VEZXRhaWxdJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBkZXZQYXRoID0gZGV2aWNlRGV0YWlsLkRlcmVmKDQsIEdNLlBvaW50ZXJTaXplKTsNCiAgICAgICAgICAgIHJldHVybiAoZGV2UGF0aC5TdHJpbmcpOw0KICAgICAgICB9KQ0KICAgICAgICAuYWRkTWV0aG9kKCdjcmVhdGVEZXNjcmlwdG9yJywgZnVuY3Rpb24gX2NyZWF0ZURlc2NyaXB0b3IocGF0aCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJlcXVpcmUoJ2ZzJykub3BlblN5bmMocGF0aCwgcmVxdWlyZSgnZnMnKS5jb25zdGFudHMuT19SRFdSIHwgcmVxdWlyZSgnZnMnKS5jb25zdGFudHMuT19OT05CTE9DSykpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykgeyB0aHJvdyAoJ0hFQ0kgbm90IHN1cHBvcnRlZCcpOyB9DQoNCiAgICAgICAgICAgIHZhciBkZXZQYXRoID0gR00uQ3JlYXRlVmFyaWFibGUo", 16000); - memcpy_s(_heci + 16000, 16944, "cGF0aCk7DQogICAgICAgICAgICB2YXIgcmV0ID0ga2VybmVsMzIuQ3JlYXRlRmlsZUEoZGV2UGF0aCwgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwgRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURSwgMCwgT1BFTl9FWElTVElORywgRklMRV9GTEFHX09WRVJMQVBQRUQsIDApOw0KICAgICAgICAgICAgaWYgKHJldC5WYWwgPT0gLTEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGZhaWxlZCB0byBhY3F1aXJlIFtkZXNjcmlwdG9yXScpOw0KICAgICAgICAgICAgICAgIHRocm93ICgnZmFpbGVkIHRvIGFjcXVpcmUgZGVzY3JpcHRvcicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGFjcXVpcmVkIFtERVNDUklQVE9SXScpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9KTsNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9vdmVybGFwcGVkID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMjApOw0KICAgICAgICByZXQuX292ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KDQogICAgICAgIHZhciBvdmVybGFwcGVkX2V2ZW50cHRyID0gcmV0Ll9vdmVybGFwcGVkLkRlcmVmKEdNLlBvaW50ZXJTaXplID09IDggPyAyNCA6IDE2LCBHTS5Qb2ludGVyU2l6ZSkudG9CdWZmZXIoKTsNCiAgICAgICAgcmV0Ll9vdmVybGFwcGVkLmhFdmVudC5wb2ludGVyQnVmZmVyKCkuY29weShvdmVybGFwcGVkX2V2ZW50cHRyKTsNCiAgICB9DQogICAgcmV0LmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiBkaXNjb25uZWN0KCkNCiAgICB7DQogICAgICAgIC8vIENsZWFuIHVwIGFsbCBIYW5kbGVzIGFuZCBEZXNjcmlwdG9ycw0KICAgICAgICBjb25zb2xlLmluZm8xKCdESVNDT05ORUNUIG9uICcgKyB0aGlzLl9oYXNoQ29kZSgpKTsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5fZGVzY3JpcHRvciAhPSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykuY2xvc2VTeW5jKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIGRvSW9jdGwoKSANCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICBpZiAodGhpcy5fZGVzY3JpcHRvckV2ZW50KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGFwcGVkKSB7IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX292ZXJsYXBwZWQuaEV2ZW50KTsgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3JFdmVudCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGhpcy5fb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl9vdmVybGFwcGVkLmhFdmVudCk7DQogICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcHBlZCA9IG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAvLyBSZWFkDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgaWYgKHRoaXMuX3JEZXNjcmlwdG9yRXZlbnQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRvdmVybGFwcGVkKSB7IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX3JlYWRvdmVybGFwcGVkLmhFdmVudCk7IH0NCiAgICAgICAgICAgICAgICB0aGlzLl9yRGVzY3JpcHRvckV2ZW50ID0gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRvdmVybGFwcGVkID0gbnVsbDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIFdyaXRlDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgaWYgKHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCkgeyByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykucmVtb3ZlRGVzY3JpcHRvcih0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50KTsgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50KTsNCiAgICAgICAgICAgICAgICB0aGlzLl93cml0ZW92ZXJsYXBwZWQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gSEVDSQ0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdG9yKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGtlcm5lbDMyLkNsb3NlSGFuZGxlKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfTsNCiAgICByZXQuZG9Jb2N0bCA9IGZ1bmN0aW9uIGRvSW9jdGwoY29kZSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlciwgY2FsbGJhY2spDQogICAgew0KICAgICAgICBpZiAodHlwZW9mIChjYWxsYmFjaykgIT0gJ2Z1bmN0aW9uJykgeyB0aHJvdyAoJ0NhbGxiYWNrIG5vdCBzcGVjaWZpZWQnKTsgfQ0KDQogICAgICAgIHZhciBpOw0KICAgICAgICB2YXIgcGFybXMgPSBbXTsNCiAgICAgICAgZm9yIChpID0gNDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkNCiAgICAgICAgew0KICAgICAgICAgICAgcGFybXMucHVzaChhcmd1bWVudHNbaV0pOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAob3V0cHV0QnVmZmVyLmxlbmd0aCA8IGlucHV0QnVmZmVyLmxlbmd0aCkgeyB0aHJvdyAoJ291dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsJyk7IH0NCiAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5maWxsKDApOw0KICAgICAgICAgICAgaW5wdXRCdWZmZXIuY29weShvdXRwdXRCdWZmZXIpOw0KICAgICAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0b3IgPT0gbnVsbCkgeyB0aGlzLl9kZXNjcmlwdG9yID0gdGhpcy5jcmVhdGVEZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvclBhdGgoKSk7IH0NCiAgICAgICAgICAgIHZhciByZXQgPSByZXF1aXJlKCdpb2N0bCcpKHRoaXMuX2Rlc2NyaXB0b3IsIGNvZGUsIG91dHB1dEJ1ZmZlcik7DQogICAgICAgICAgICBwYXJtcy51bnNoaWZ0KG91dHB1dEJ1ZmZlcik7DQogICAgICAgICAgICBwYXJtcy51bnNoaWZ0KHJldCk7DQogICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBwYXJtcyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLl9pb2N0bHMudW5zaGlmdCh7IGNvZGU6IGNvZGUsIGlucHV0OiBpbnB1dEJ1ZmZlciwgb3V0cHV0OiBvdXRwdXRCdWZmZXIsIGNhbGxiYWNrOiBjYWxsYmFjaywgcGFybXM6IHBhcm1zIH0pOw0KICAgICAgICBpZih0aGlzLl9pb2N0bHMubGVuZ3RoID09IDEpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZpcnN0IElPQ1RMLCBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGZpcnN0IG9uZQ0KICAgICAgICAgICAgdGhpcy5fc2VuZCh0aGlzLl9pb2N0bHMucGVlaygpKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICByZXQuX3NlbmQgPSBmdW5jdGlvbiBfc2VuZChvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYodGhpcy5fZGVzY3JpcHRvciA9PSBudWxsKSANCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvciA9IHRoaXMuY3JlYXRlRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3JQYXRoKCkpOyANCiAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHRoaXMuX292ZXJsYXBwZWQuaEV2ZW50LCB7bWV0YWRhdGE6ICdoZWNpJ30pOw0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvckV2ZW50LnNlc3Npb24gPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvckV2ZW50Lm9uKCdzaWduYWxlZCcsIGZ1bmN0aW9uKHN0YXR1cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2Vzc2lvbi5faW9jdGxzLnBvcCgpOw0KICAgICAgICAgICAgICAgIGlmKHN0YXR1cyA9PSAnTk9ORScpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNSZWFkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5HZXRPdmVybGFwcGVkUmVzdWx0KHRoaXMuc2Vzc2lvbi5fZGVzY3JpcHRvciwgdGhpcy5zZXNzaW9uLl9vdmVybGFwcGVkLCBieXRlc1JlYWQsIDApOw0KICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQuVmFsICE9IDApDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBkYXRhLm91dHB1dDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5zbGljZSgwLGJ5dGVzUmVhZC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChvdXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXJtcy51bnNoaWZ0KDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLkxhc3RFcnJvciA9ICdOT05FJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChudWxsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdCgxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5MYXN0RXJyb3IgPSAnT1ZFUkxBUFBFRF9FUlJPUjogJyArIHJlc3VsdC5fTGFzdEVycm9yOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChudWxsKTsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXJtcy51bnNoaWZ0KDEpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uTGFzdEVycm9yID0gc3RhdHVzOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkodGhpcy5zZXNzaW9uLCBkYXRhLnBhcm1zKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2godWUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZih0aGlzLnNlc3Npb24uX2lvY3Rscy5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU3RpbGwgbW9yZSBJT0NUTHMgdG8gc2VuZA0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uX3NlbmQodGhpcy5zZXNzaW9uLl9pb2N0bHMucGVlaygpKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBrZXJuZWwzMi5EZXZpY2VJb0NvbnRyb2wodGhpcy5fZGVzY3JpcHRvciwgb3B0aW9ucy5jb2RlLCBHTS5DcmVhdGVWYXJpYWJsZShvcHRpb25zLmlucHV0KSwgb3B0aW9ucy5pbnB1dC5sZW5ndGgsIEdNLkNyZWF0ZVZhcmlhYmxlKG9wdGlvbnMub3V0cHV0KSwgb3B0aW9ucy5vdXRwdXQubGVuZ3RoLCAwLCB0aGlzLl9vdmVybGFwcGVkKTsNCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZSgpDQogICAgew0KICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9wZW5kaW5nV3JpdGVzLnBlZWsoKTsNCiAgICAgICAgY29uc29sZS5pbmZvMygnX1dSSVRJTkc6ICcgKyBjaHVuay5idWZmZXIubGVuZ3RoICsgJyBieXRlcycgKyAnIG9uICcgKyB0aGlzLl9oYXNoQ29kZSgpKTsNCg0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgcmVzdWx0ID0ga2VybmVsMzIuV3JpdGVGaWxlKHRoaXMuX2Rlc2NyaXB0b3IsIEdNLkNyZWF0ZVZhcmlhYmxlKGNodW5rLmJ1ZmZlciksIGNodW5rLmJ1ZmZlci5sZW5ndGgsIDAsIHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCk7DQogICAgICAgICAgICBpZiAocmVzdWx0LlZhbCAhPSAwIHx8IHJlc3VsdC5fTGFzdEVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl93RGVzY3JpcHRvckV2ZW50KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd0Rlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZC5oRXZlbnQsIHsgbWV0YWRhdGE6ICdoZWNpLnNlc3Npb24gW3dyaXRlXScgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQuc2Vzc2lvbiA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQub24oJ3NpZ25hbGVkJywgdGhpcy5fcHJvY2Vzc1dyaXRlX3NpZ25hbGVkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnV3JpdGUgRXJyb3I6ICcgKyByZXN1bHQuX0xhc3RFcnJvcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXF1aXJlKCdmcycpLndyaXRlKHRoaXMuX2Rlc2NyaXB0b3IsIGNodW5rLmJ1ZmZlciwgdGhpcy5fcHJvY2Vzc1dyaXRlX2xpbnV4X3NpZ25hbGVkLCB7IG1ldGFkYXRhOiAnaGVjaS5zZXNzaW9uJywgc2Vzc2lvbjogdGhpcyB9KTsNCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlX2xpbnV4X3NpZ25hbGVkID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZV9saW51eF9zaWduYWxlZChzdGF0dXMsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyLCBvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYoc3RhdHVzID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoYnl0ZXNXcml0dGVuICsgJyBieXRlcyB3cml0dGVuJyk7DQogICAgICAgICAgICBjb25zb2xlLmluZm8zKCdub1BpcGVsaW5lID0gJyArIG9wdGlvbnMuc2Vzc2lvbi5fb3B0aW9ucy5ub1BpcGVsaW5lLCBvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSA9PSBudWxsIHx8IG9wdGlvbnMuc2Vzc2lvbi5fb3B0aW9ucy5ub1BpcGVsaW5lID09IGZhbHNlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBpdGVtID0gb3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbi5fcHJvY2Vzc1dyaXRlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoJ1dyaXRlL0ZsdXNoJyk7DQogICAgICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlX3NpZ25hbGVkID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZV9zaWduYWxlZChzdGF0dXMpDQogICAgew0KICAgICAgICBjb25zb2xlLmluZm8zKCdXcml0ZSBTaWduYWxlZDogJyArIHN0YXR1cyk7DQogICAgICAgIGlmKHN0YXR1cyA9PSAnTk9ORScpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5vIEVycm9ycw0KICAgICAgICAgICAgdmFyIGJ5dGVzV3JpdHRlbiA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGtlcm5lbDMyLkdldE92ZXJsYXBwZWRSZXN1bHQodGhpcy5zZXNzaW9uLl9kZXNjcmlwdG9yLCB0aGlzLnNlc3Npb24uX3dyaXRlb3ZlcmxhcHBlZCwgYnl0ZXNXcml0dGVuLCAwKTsNCiAgICAgICAgICAgIGlmKHJlc3VsdC5WYWwgIT0gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8zKGJ5dGVzV3JpdHRlbi50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpICsgJyBieXRlcyB3cml0dGVuJyk7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMygnbm9QaXBlbGluZSA9ICcgKyB0aGlzLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSwgdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgaWYodGhpcy5zZXNzaW9uLl9vcHRpb25zLm5vUGlwZWxpbmU9PW51bGwgfHwgdGhpcy5zZXNzaW9uLl9vcHRpb25zLm5vUGlwZWxpbmUgPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5wb3AoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uX3Byb2Nlc3NXcml0ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMygnV3JpdGUvRmx1c2gnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQogICAgcmV0Ll9wcm9jZXNzUmVhZF9yZWFkU2V0X3NpbmsgPSBmdW5jdGlvbiBfcHJvY2Vzc1JlYWRfcmVhZFNldF9zaW5rKHN0YXR1cywgYnl0ZXNSZWFkLCBidWZmZXIsIG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsgb3B0aW9ucy5zZXNzaW9uLnB1c2gobnVsbCk7IHJldHVybjsgfQ0KICAgICAgICBjb25zb2xlLmluZm8zKGJ5dGVzUmVhZCArICcgYnl0ZXMgcmVhZCcpOw0KDQogICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCBieXRlc1JlYWQpOw0KICAgICAgICB2YXIgcHVzaFJlc3VsdCA9IG9wdGlvbnMuc2Vzc2lvbi5wdXNoKGJ1ZmZlcik7DQogICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSAhPSAwICYmIG9wdGlvbnMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBVbmxvY2sgYSB3cml0ZQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMygncGVuZGluZ1dyaXRlQ291bnQ6ICcgKyBvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoKTsNCiAgICAgICAgICAgIHZhciBpdGVtID0gb3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KDQogICAgICAgICAgICBpZiAob3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5zZXNzaW9uLl9wcm9jZXNzV3JpdGUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8zKCdXcml0ZS9GbHVzaCcpOw0KICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChwdXNoUmVzdWx0KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBXZSBjYW4gcmVhZCBtb3JlLCBiZWNhdXNlIGRhdGEgaXMgc3RpbGwgZmxvd2luZw0KICAgICAgICAgICAgb3B0aW9ucy5zZXNzaW9uLl9wcm9jZXNzUmVhZCgpOw0KICAgICAgICB9DQogICAgfTsNCiAgICByZXQuX3Byb2Nlc3NSZWFkID0gZnVuY3Rpb24gX3Byb2Nlc3NSZWFkKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdG9yID09IG51bGwpIHsgcmV0dXJuOyB9DQogICAgICAgIHJlcXVpcmUoJ2ZzJykucmVhZCh0aGlzLl9kZXNjcmlwdG9yLCB7IG1ldGFkYXRhOiAnaGVjaS5zZXNzaW9uJywgYnVmZmVyOiB0aGlzLl9yZWFkYnVmZmVyLCBzZXNzaW9uOiB0aGlzIH0sIHRoaXMuX3Byb2Nlc3NSZWFkX3JlYWRTZXRfc2luayk7DQogICAgfTsNCiAgICByZXQub25jZSgnficsIGZ1bmN0aW9uICgpIHsgdGhpcy5kaXNjb25uZWN0KCk7IH0pOw0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KdmFyIGlvY3RsID0ge307DQppZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQp7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlvY3RsLCAnSEVDSV9WRVJTSU9OJywgeyB2YWx1ZTogMHg4MDAwRTAwMCB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW9jdGwsICdDTElFTlRfQ09OTkVDVCcsIHsgdmFsdWU6IDB4ODAwMEUwMDQgfSk7DQp9DQppZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQp7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlvY3RsLCAnSEVDSV9WRVJTSU9OJywgeyB2YWx1ZTogMHgwMCB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW9jdGwsICdDTElFTlRfQ09OTkVDVCcsIHsgdmFsdWU6IDB4MDEgfSk7DQp9DQoNCnZhciBndWlkcyA9IHt9Ow0KT2JqZWN0LmRlZmluZVByb3BlcnR5KGd1aWRzLCAnQU1UJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJzI4MDBGODEyQjdCNDJENEJBQ0E4NDZF", 16000); - memcpy_s(_heci + 32000, 944, "MEZGNjU4MTRDJywgJ2hleCcpIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KGd1aWRzLCAnTE1FJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJ0RCQTQzMzY3NzYwNDdCNEVCM0FGQkNGQzI5QkVFN0E3JywgJ2hleCcpIH0pOw0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCnsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3VpZHMsICdIRUNJJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJzM0RkZEMUUyNTgzNEE5NDk4OERBOEU2OTE1Q0U5QkU1JywgJ2hleCcpIH0pOw0KfQ0KDQoNCm1vZHVsZS5leHBvcnRzID0geyBfT2JqZWN0SUQ6ICdoZWNpJywgSU9DVEw6IGlvY3RsLCBHVUlEUzogZ3VpZHMsIGNyZWF0ZTogaGVjaV9jcmVhdGUgfTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgInN1cHBvcnRlZCIsIHsNCiAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgew0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHAgPSB0aGlzLmNyZWF0ZSgpLmRlc2NyaXB0b3JQYXRoKCk7DQogICAgICAgICAgICB2YXIgZCA9IHRoaXMuY3JlYXRlKCkuY3JlYXRlRGVzY3JpcHRvcihwKTsNCiAgICAgICAgICAgIHJldHVybih0cnVlKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsNCiAgICAgICAgfQ0KICAgIH0NCn0pOw==", 944); - ILibBase64DecodeEx((unsigned char*)_heci, 32944, (unsigned char*)_heci + 32944); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "heci"); duk_push_string(ctx, _heci + 32944); + char *_heci = ILibMemory_Allocate(57701, 0, NULL, NULL); + memcpy_s(_heci + 0, 32972, "LyoNCkNvcHlyaWdodCAyMDIwIEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgR00gPSBudWxsOw0KdmFyIHNldHVwID0gbnVsbDsNCnZhciBrZXJuZWwzMiA9IG51bGw7DQp2YXIgZHVwbGV4ID0gcmVxdWlyZSgnc3RyZWFtJykuRHVwbGV4Ow0KDQoNCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQp7DQogICAgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICBzZXR1cCA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdTZXR1cEFQSS5kbGwnKTsNCiAgICBzZXR1cC5DcmVhdGVNZXRob2QoJ1NldHVwRGlHZXRDbGFzc0RldnNBJyk7DQogICAgc2V0dXAuQ3JlYXRlTWV0aG9kKCdTZXR1cERpRW51bURldmljZUludGVyZmFjZXMnKTsNCiAgICBzZXR1cC5DcmVhdGVNZXRob2QoJ1NldHVwRGlHZXREZXZpY2VJbnRlcmZhY2VEZXRhaWxBJyk7DQogICAgc2V0dXAuQ3JlYXRlTWV0aG9kKCdTZXR1cERpRGVzdHJveURldmljZUluZm9MaXN0Jyk7DQoNCiAgICBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdLZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlSGFuZGxlJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdDcmVhdGVFdmVudEEnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0NyZWF0ZUZpbGVBJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdEZXZpY2VJb0NvbnRyb2wnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldE92ZXJsYXBwZWRSZXN1bHQnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1JlYWRGaWxlJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdXcml0ZUZpbGUnKTsNCn0NCg0KdmFyIERJR0NGX0RFRkFVTFQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7ICANCnZhciBESUdDRl9QUkVTRU5UICAgICAgICAgICAgICAgPSAweDAwMDAwMDAyOw0KdmFyIERJR0NGX0FMTENMQVNTRVMgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQp2YXIgRElHQ0ZfUFJPRklMRSAgICAgICAgICAgICAgID0gMHgwMDAwMDAwODsNCnZhciBESUdDRl9ERVZJQ0VJTlRFUkZBQ0UgICAgICAgPSAweDAwMDAwMDEwOw0KdmFyIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIgICA9IDEyMjsgICAgDQp2YXIgR0VORVJJQ19SRUFEICAgICAgICAgICAgICAgID0gMHg4MDAwMDAwMDsNCnZhciBHRU5FUklDX1dSSVRFICAgICAgICAgICAgICAgPSAweDQwMDAwMDAwOw0KdmFyIEZJTEVfU0hBUkVfUkVBRCAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7ICANCnZhciBGSUxFX1NIQVJFX1dSSVRFICAgICAgICAgICAgPSAweDAwMDAwMDAyOyAgDQp2YXIgT1BFTl9FWElTVElORyAgICAgICAgICAgICAgID0gMzsNCnZhciBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCAgICAgICAgPSAweDQwMDAwMDAwOw0KdmFyIEVSUk9SX0lPX1BFTkRJTkcgICAgICAgICAgICA9IDk5NzsNCg0KZnVuY3Rpb24gaGVjaV9jcmVhdGUoKQ0Kew0KICAgIHZhciByZXQgPSBuZXcgZHVwbGV4KA0KICAgIHsNCiAgICAgICAgJ3dyaXRlJzogZnVuY3Rpb24gKGNodW5rLCBmbHVzaCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA+IHRoaXMuTWF4QnVmZmVyU2l6ZSkgeyB0aHJvdyAoJ0J1ZmZlciB0b28gbGFyZ2UnKTsgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fd3JpdGVvdmVybGFwcGVkID09IG51bGwpIHsgdGhyb3cgKCdOb3QgQ29ubmVjdGVkJyk7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdXcml0ZXMudW5zaGlmdCh7IGJ1ZmZlcjogY2h1bmssIGZsdXNoOiBmbHVzaCB9KTsNCg0KICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdXcml0ZXMubGVuZ3RoID09IDEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgLy8gS2lja3N0YXJ0IHRoZSB3cml0ZQ0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAnZmluYWwnOiBmdW5jdGlvbiAoZmx1c2gpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgIH0sDQogICAgICAgICdyZWFkJzogZnVuY3Rpb24oc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRidWZmZXIgPSBwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicgPyBHTS5DcmVhdGVWYXJpYWJsZSh0aGlzLk1heEJ1ZmZlclNpemUpIDogQnVmZmVyLmFsbG9jKHRoaXMuTWF4QnVmZmVyU2l6ZSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1JlYWQoKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5SZWFkRmlsZSh0aGlzLl9kZXNjcmlwdG9yLCB0aGlzLl9yZWFkYnVmZmVyLCB0aGlzLl9yZWFkYnVmZmVyLl9zaXplLCAwLCB0aGlzLl9yZWFkb3ZlcmxhcHBlZCk7DQogICAgICAgICAgICBpZihyZXN1bHQuVmFsICE9IDAgfHwgcmVzdWx0Ll9MYXN0RXJyb3IgPT0gRVJST1JfSU9fUEVORElORykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZighdGhpcy5fckRlc2NyaXB0b3JFdmVudCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JEZXNjcmlwdG9yRXZlbnQgPSByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykuYWRkRGVzY3JpcHRvcih0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQsIHsgbWV0YWRhdGE6ICdoZWNpLnNlc3Npb24gW3JlYWRdJyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fckRlc2NyaXB0b3JFdmVudC5zZXNzaW9uID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fckRlc2NyaXB0b3JFdmVudC5vbignc2lnbmFsZWQnLCBmdW5jdGlvbiAoc3RhdHVzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMgIT0gJ05PTkUnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoJz4+PiBoZWNpLnNlc3Npb24gc2lnbmFsZWQgd2l0aCBzdGF0dXM6ICcgKyBzdGF0dXMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5wdXNoKG51bGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlc1JlYWQgPSBHTS5DcmVhdGVWYXJpYWJsZSg0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigocmVzdWx0PWtlcm5lbDMyLkdldE92ZXJsYXBwZWRSZXN1bHQodGhpcy5zZXNzaW9uLl9kZXNjcmlwdG9yLCB0aGlzLnNlc3Npb24uX3JlYWRvdmVybGFwcGVkLCBieXRlc1JlYWQsIDApKS5WYWwgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5zZXNzaW9uLl9yZWFkYnVmZmVyLnRvQnVmZmVyKCkuc2xpY2UoMCwgYnl0ZXNSZWFkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoYnVmZmVyLmxlbmd0aCArICcgYnl0ZXMgUkVBRCcpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1c2hSZXN1bHQgPSB0aGlzLnNlc3Npb24ucHVzaChidWZmZXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSAhPSAwICYmIHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGg+MCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubG9jayBhIHdyaXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzIoJ3BlbmRpbmdXcml0ZUNvdW50OiAnICsgdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLl9wcm9jZXNzV3JpdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzIoJ1dyaXRlL0ZsdXNoJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVzaFJlc3VsdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiByZWFkIG1vcmUsIGJlY2F1c2UgZGF0YSBpcyBzdGlsbCBmbG93aW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5SZWFkRmlsZSh0aGlzLnNlc3Npb24uX2Rlc2NyaXB0b3IsIHRoaXMuc2Vzc2lvbi5fcmVhZGJ1ZmZlciwgdGhpcy5zZXNzaW9uLl9yZWFkYnVmZmVyLl9zaXplLCAwLCB0aGlzLnNlc3Npb24uX3JlYWRvdmVybGFwcGVkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0LlZhbCAhPSAwIHx8IHJlc3VsdC5fTGFzdEVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdTb21ldHlwZSBvZiBlcnJvcjogJyArIHJlc3VsdC5fTGFzdEVycm9yKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5wdXNoKG51bGwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1JFQURfT1ZFUkxBUFBFRF9FUlJPUjogJyArIHJlc3VsdC5fTGFzdEVycm9yICsgJyBvbiAnICsgdGhpcy5zZXNzaW9uLl9oYXNoQ29kZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZSBPdGhlciBFcnJvcjogJyArIHJlc3VsdC5fTGFzdEVycm9yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIHJldC5fT2JqZWN0SUQgPSAnaGVjaS5zZXNzaW9uJzsNCiAgICByZXQuYnVmZmVyTW9kZSA9IDE7DQogICAgcmV0Ll9pb2N0bHMgPSBbXTsNCiAgICByZXQuX3BlbmRpbmdXcml0ZXMgPSBbXTsNCiAgICByZXQuaGVjaVBhcmVudCA9IHRoaXM7DQoNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY29ubmVjdCcpDQogICAgICAgIC5jcmVhdGVFdmVudCgnZXJyb3InKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjb25uZWN0JywgZnVuY3Rpb24gX2Nvbm5lY3QoZ3VpZCwgb3B0aW9ucykNCiAgICAgICAgew0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnY29ubmVjdCgpJyk7DQogICAgICAgICAgICB0aGlzLmRvSW9jdGwodGhpcy5oZWNpUGFyZW50LklPQ1RMLkNMSUVOVF9DT05ORUNULCBndWlkLCBCdWZmZXIuYWxsb2MoMTYpLCBmdW5jdGlvbiBfb25jb25uZWN0KHN0YXR1cywgYnVmZmVyLCBvcHQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoc3RhdHVzIT0wKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnSEVDSSBDb25uZWN0aW9uIEVycm9yIFsnICsgdGhpcy5MYXN0RXJyb3IgKyAnXScpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgJ0hFQ0kgQ29ubmVjdGlvbiBFcnJvciBbJyArIHRoaXMuTGFzdEVycm9yICsgJ10nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihidWZmZXIubGVuZ3RoIDw9NCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsICdIRUNJIENvbm5lY3Rpb24gRXJyb3IgW0lOVkFMSUQgUkVTUE9OU0VdJyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJNYXhCdWZmZXJTaXplIiwgeyB2YWx1ZTogYnVmZmVyLnJlYWRVSW50MzJMRSgpIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHQ7DQoNCiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZG92ZXJsYXBwZWQgPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gMzIgOiAyMCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKEdNLlBvaW50ZXJTaXplID09IDggPyAzMiA6IDIwKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZG92ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQucG9pbnRlckJ1ZmZlcigpLmNvcHkodGhpcy5fcmVhZG92ZXJsYXBwZWQuRGVyZWYoR00uUG9pbnRlclNpemUgPT0gOCA/IDI0IDogMTYsIEdNLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVvdmVybGFwcGVkLmhFdmVudC5wb2ludGVyQnVmZmVyKCkuY29weSh0aGlzLl93cml0ZW92ZXJsYXBwZWQuRGVyZWYoR00uUG9pbnRlclNpemUgPT0gOCA/IDI0IDogMTYsIEdNLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnQ29ubmVjdGVkLCBidWZmZXIgc2l6ZTogJyArIHRoaXMuTWF4QnVmZmVyU2l6ZSk7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVhZCh0aGlzLk1heEJ1ZmZlclNpemUpOw0KICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdCcpOw0KICAgICAgICAgICAgfSwgb3B0aW9ucyk7DQogICAgICAgIH0pDQogICAgICAgIC5hZGRNZXRob2QoJ2Rlc2NyaXB0b3JQYXRoJywgZnVuY3Rpb24gX2Rlc2NyaXB0b3JQYXRoKCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvZGV2L21laScpKSB7IHJldHVybiAoJy9kZXYvbWVpJyk7IH0NCiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCcvZGV2L21laTAnKSkgeyByZXR1cm4gKCcvZGV2L21laTAnKTsgfQ0KICAgICAgICAgICAgICAgIHRocm93ICgnSEVDSSBub3Qgc3VwcG9ydGVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKSB7IHRocm93ICgnSEVDSSBub3Qgc3VwcG9ydGVkJyk7IH0NCg0KICAgICAgICAgICAgdmFyIHJlc3VsdDsNCiAgICAgICAgICAgIHZhciBpaTsNCiAgICAgICAgICAgIHZhciBkZXZpY2VEZXRhaWw7DQogICAgICAgICAgICB2YXIgYnVmZmVyU2l6ZSA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOyAgLy8gRFdPUkQNCiAgICAgICAgICAgIHZhciBoZWNpZ3VpZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKHRoaXMuaGVjaVBhcmVudC5HVUlEUy5IRUNJKTsNCiAgICAgICAgICAgIHZhciBkZXZpY2VJbmZvID0gc2V0dXAuU2V0dXBEaUdldENsYXNzRGV2c0EoaGVjaWd1aWQsIDAsIDAsIERJR0NGX1BSRVNFTlQgfCBESUdDRl9ERVZJQ0VJTlRFUkZBQ0UpOw0KICAgICAgICAgICAgaWYgKGRldmljZUluZm8uVmFsID09IC0xKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJy4uLiBVbmFibGUgdG8gYWNxdWlyZSBbZGV2aWNlSW5mb10nKTsNCiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VuYWJsZSB0byBhY3F1aXJlIFtkZXZpY2VJbmZvXScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGFjcXVpcmVkIFtkZXZpY2VJbmZvXScpOw0KDQoNCiAgICAgICAgICAgIHZhciBpbnRlcmZhY2VEYXRhID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMjgpOw0KICAgICAgICAgICAgaW50ZXJmYWNlRGF0YS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaW50ZXJmYWNlRGF0YS5fc2l6ZSwgMCk7DQoNCiAgICAgICAgICAgIGZvciAoaWkgPSAwOyBzZXR1cC5TZXR1cERpRW51bURldmljZUludGVyZmFjZXMoZGV2aWNlSW5mbywgMCwgaGVjaWd1aWQsIGlpLCBpbnRlcmZhY2VEYXRhKS5WYWwgIT0gMDsgKytpaSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAvLyBGb3VuZCBvdXIgZGV2aWNlIGluc3RhbmNlDQogICAgICAgICAgICAgICAgaWYgKChyZXN1bHQgPSBzZXR1cC5TZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsQShkZXZpY2VJbmZvLCBpbnRlcmZhY2VEYXRhLCAwLCAwLCBidWZmZXJTaXplLCAwKSkuVmFsID09IDApDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Ll9MYXN0RXJyb3IgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIGJpZyBlbm91Z2ggYnVmZmVyIHRvIGdldCBkZXRhaWwgZGF0YQ0KICAgICAgICAgICAgICAgIGRldmljZURldGFpbCA9IEdNLkNyZWF0ZVZhcmlhYmxlKGJ1ZmZlclNpemUudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSk7DQogICAgICAgICAgICAgICAgZGV2aWNlRGV0YWlsLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gOCA6IDUsIDApOw0KDQogICAgICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHRvIGdldCB0aGUgZGV2aWNlIGludGVyZmFjZSBkZXRhaWwgaW5mbw0KICAgICAgICAgICAgICAgIGlmIChzZXR1cC5TZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsQShkZXZpY2VJbmZvLCBpbnRlcmZhY2VEYXRhLCBkZXZpY2VEZXRhaWwsIGJ1ZmZlclNpemUsIDAsIDApLlZhbCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgZGV2aWNlRGV0YWlsID0gTlVMTDsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2V0dXAuU2V0dXBEaURlc3Ryb3lEZXZpY2VJbmZvTGlzdChkZXZpY2VJbmZvKTsNCiAgICAgICAgICAgIGlmIChkZXZpY2VEZXRhaWwgPT0gbnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCcuLi4gZmFpbGVkIHRvIGFjcXVpcmUgW2RldmljZURldGFpbF0nKTsNCiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VuYWJsZSB0byBhY3F1aXJlIFtkZXZpY2VEZXRhaWxdJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBkZXZQYXRoID0gZGV2aWNlRGV0YWlsLkRlcmVmKDQsIEdNLlBvaW50ZXJTaXplKTsNCiAgICAgICAgICAgIHJldHVybiAoZGV2UGF0aC5TdHJpbmcpOw0KICAgICAgICB9KQ0KICAgICAgICAuYWRkTWV0aG9kKCdjcmVhdGVEZXNjcmlwdG9yJywgZnVuY3Rpb24gX2NyZWF0ZURlc2NyaXB0b3IocGF0aCkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJlcXVpcmUoJ2ZzJykub3BlblN5bmMocGF0aCwgcmVxdWlyZSgnZnMnKS5jb25zdGFudHMuT19SRFdSIHwgcmVxdWlyZSgnZnMnKS5jb25zdGFudHMuT19OT05CTE9DSykpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ3dpbjMyJykgeyB0aHJvdyAoJ0hFQ0kgbm90IHN1cHBvcnRlZCcpOyB9DQoNCiAgICAgICAgICAgIHZhciBkZXZQYXRoID0gR00uQ3JlYXRlVmFyaWFibGUo", 16000); + memcpy_s(_heci + 16000, 16972, "cGF0aCk7DQogICAgICAgICAgICB2YXIgcmV0ID0ga2VybmVsMzIuQ3JlYXRlRmlsZUEoZGV2UGF0aCwgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwgRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURSwgMCwgT1BFTl9FWElTVElORywgRklMRV9GTEFHX09WRVJMQVBQRUQsIDApOw0KICAgICAgICAgICAgaWYgKHJldC5WYWwgPT0gLTEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGZhaWxlZCB0byBhY3F1aXJlIFtkZXNjcmlwdG9yXScpOw0KICAgICAgICAgICAgICAgIHRocm93ICgnZmFpbGVkIHRvIGFjcXVpcmUgZGVzY3JpcHRvcicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnLi4uIGFjcXVpcmVkIFtERVNDUklQVE9SXScpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9KTsNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9vdmVybGFwcGVkID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMjApOw0KICAgICAgICByZXQuX292ZXJsYXBwZWQuaEV2ZW50ID0ga2VybmVsMzIuQ3JlYXRlRXZlbnRBKDAsIDEsIDAsIDApOw0KDQogICAgICAgIHZhciBvdmVybGFwcGVkX2V2ZW50cHRyID0gcmV0Ll9vdmVybGFwcGVkLkRlcmVmKEdNLlBvaW50ZXJTaXplID09IDggPyAyNCA6IDE2LCBHTS5Qb2ludGVyU2l6ZSkudG9CdWZmZXIoKTsNCiAgICAgICAgcmV0Ll9vdmVybGFwcGVkLmhFdmVudC5wb2ludGVyQnVmZmVyKCkuY29weShvdmVybGFwcGVkX2V2ZW50cHRyKTsNCiAgICB9DQogICAgcmV0LmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiBkaXNjb25uZWN0KCkNCiAgICB7DQogICAgICAgIC8vIENsZWFuIHVwIGFsbCBIYW5kbGVzIGFuZCBEZXNjcmlwdG9ycw0KICAgICAgICBjb25zb2xlLmluZm8xKCdESVNDT05ORUNUIG9uICcgKyB0aGlzLl9oYXNoQ29kZSgpKTsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5fZGVzY3JpcHRvciAhPSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykuY2xvc2VTeW5jKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIGRvSW9jdGwoKSANCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICBpZiAodGhpcy5fZGVzY3JpcHRvckV2ZW50KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGFwcGVkKSB7IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX292ZXJsYXBwZWQuaEV2ZW50KTsgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3JFdmVudCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGhpcy5fb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl9vdmVybGFwcGVkLmhFdmVudCk7DQogICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcHBlZCA9IG51bGw7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vDQogICAgICAgICAgICAvLyBSZWFkDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgaWYgKHRoaXMuX3JEZXNjcmlwdG9yRXZlbnQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRvdmVybGFwcGVkKSB7IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5yZW1vdmVEZXNjcmlwdG9yKHRoaXMuX3JlYWRvdmVybGFwcGVkLmhFdmVudCk7IH0NCiAgICAgICAgICAgICAgICB0aGlzLl9yRGVzY3JpcHRvckV2ZW50ID0gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl9yZWFkb3ZlcmxhcHBlZC5oRXZlbnQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRvdmVybGFwcGVkID0gbnVsbDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIFdyaXRlDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgaWYgKHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCkgeyByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykucmVtb3ZlRGVzY3JpcHRvcih0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50KTsgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBrZXJuZWwzMi5DbG9zZUhhbmRsZSh0aGlzLl93cml0ZW92ZXJsYXBwZWQuaEV2ZW50KTsNCiAgICAgICAgICAgICAgICB0aGlzLl93cml0ZW92ZXJsYXBwZWQgPSBudWxsOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gSEVDSQ0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdG9yKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGtlcm5lbDMyLkNsb3NlSGFuZGxlKHRoaXMuX2Rlc2NyaXB0b3IpOw0KICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfTsNCiAgICByZXQuZG9Jb2N0bCA9IGZ1bmN0aW9uIGRvSW9jdGwoY29kZSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlciwgY2FsbGJhY2spDQogICAgew0KICAgICAgICBpZiAodHlwZW9mIChjYWxsYmFjaykgIT0gJ2Z1bmN0aW9uJykgeyB0aHJvdyAoJ0NhbGxiYWNrIG5vdCBzcGVjaWZpZWQnKTsgfQ0KDQogICAgICAgIHZhciBpOw0KICAgICAgICB2YXIgcGFybXMgPSBbXTsNCiAgICAgICAgZm9yIChpID0gNDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkNCiAgICAgICAgew0KICAgICAgICAgICAgcGFybXMucHVzaChhcmd1bWVudHNbaV0pOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAob3V0cHV0QnVmZmVyLmxlbmd0aCA8IGlucHV0QnVmZmVyLmxlbmd0aCkgeyB0aHJvdyAoJ291dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsJyk7IH0NCiAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5maWxsKDApOw0KICAgICAgICAgICAgaW5wdXRCdWZmZXIuY29weShvdXRwdXRCdWZmZXIpOw0KICAgICAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0b3IgPT0gbnVsbCkgeyB0aGlzLl9kZXNjcmlwdG9yID0gdGhpcy5jcmVhdGVEZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvclBhdGgoKSk7IH0NCiAgICAgICAgICAgIHZhciByZXQgPSByZXF1aXJlKCdpb2N0bCcpKHRoaXMuX2Rlc2NyaXB0b3IsIGNvZGUsIG91dHB1dEJ1ZmZlcik7DQogICAgICAgICAgICBwYXJtcy51bnNoaWZ0KG91dHB1dEJ1ZmZlcik7DQogICAgICAgICAgICBwYXJtcy51bnNoaWZ0KHJldCk7DQogICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBwYXJtcyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLl9pb2N0bHMudW5zaGlmdCh7IGNvZGU6IGNvZGUsIGlucHV0OiBpbnB1dEJ1ZmZlciwgb3V0cHV0OiBvdXRwdXRCdWZmZXIsIGNhbGxiYWNrOiBjYWxsYmFjaywgcGFybXM6IHBhcm1zIH0pOw0KICAgICAgICBpZih0aGlzLl9pb2N0bHMubGVuZ3RoID09IDEpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIEZpcnN0IElPQ1RMLCBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGZpcnN0IG9uZQ0KICAgICAgICAgICAgdGhpcy5fc2VuZCh0aGlzLl9pb2N0bHMucGVlaygpKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICByZXQuX3NlbmQgPSBmdW5jdGlvbiBfc2VuZChvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYodGhpcy5fZGVzY3JpcHRvciA9PSBudWxsKSANCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvciA9IHRoaXMuY3JlYXRlRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3JQYXRoKCkpOyANCiAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHRoaXMuX292ZXJsYXBwZWQuaEV2ZW50LCB7bWV0YWRhdGE6ICdoZWNpJ30pOw0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvckV2ZW50LnNlc3Npb24gPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvckV2ZW50Lm9uKCdzaWduYWxlZCcsIGZ1bmN0aW9uKHN0YXR1cykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2Vzc2lvbi5faW9jdGxzLnBvcCgpOw0KICAgICAgICAgICAgICAgIGlmKHN0YXR1cyA9PSAnTk9ORScpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNSZWFkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBrZXJuZWwzMi5HZXRPdmVybGFwcGVkUmVzdWx0KHRoaXMuc2Vzc2lvbi5fZGVzY3JpcHRvciwgdGhpcy5zZXNzaW9uLl9vdmVybGFwcGVkLCBieXRlc1JlYWQsIDApOw0KICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQuVmFsICE9IDApDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBkYXRhLm91dHB1dDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5zbGljZSgwLGJ5dGVzUmVhZC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChvdXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXJtcy51bnNoaWZ0KDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLkxhc3RFcnJvciA9ICdOT05FJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChudWxsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdCgxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5MYXN0RXJyb3IgPSAnT1ZFUkxBUFBFRF9FUlJPUjogJyArIHJlc3VsdC5fTGFzdEVycm9yOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGRhdGEucGFybXMudW5zaGlmdChudWxsKTsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXJtcy51bnNoaWZ0KDEpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uTGFzdEVycm9yID0gc3RhdHVzOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkodGhpcy5zZXNzaW9uLCBkYXRhLnBhcm1zKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2godWUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZih0aGlzLnNlc3Npb24uX2lvY3Rscy5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU3RpbGwgbW9yZSBJT0NUTHMgdG8gc2VuZA0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uX3NlbmQodGhpcy5zZXNzaW9uLl9pb2N0bHMucGVlaygpKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBrZXJuZWwzMi5EZXZpY2VJb0NvbnRyb2wodGhpcy5fZGVzY3JpcHRvciwgb3B0aW9ucy5jb2RlLCBHTS5DcmVhdGVWYXJpYWJsZShvcHRpb25zLmlucHV0KSwgb3B0aW9ucy5pbnB1dC5sZW5ndGgsIEdNLkNyZWF0ZVZhcmlhYmxlKG9wdGlvbnMub3V0cHV0KSwgb3B0aW9ucy5vdXRwdXQubGVuZ3RoLCAwLCB0aGlzLl9vdmVybGFwcGVkKTsNCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZSgpDQogICAgew0KICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9wZW5kaW5nV3JpdGVzLnBlZWsoKTsNCiAgICAgICAgY29uc29sZS5pbmZvMygnX1dSSVRJTkc6ICcgKyBjaHVuay5idWZmZXIubGVuZ3RoICsgJyBieXRlcycgKyAnIG9uICcgKyB0aGlzLl9oYXNoQ29kZSgpKTsNCg0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgcmVzdWx0ID0ga2VybmVsMzIuV3JpdGVGaWxlKHRoaXMuX2Rlc2NyaXB0b3IsIEdNLkNyZWF0ZVZhcmlhYmxlKGNodW5rLmJ1ZmZlciksIGNodW5rLmJ1ZmZlci5sZW5ndGgsIDAsIHRoaXMuX3dyaXRlb3ZlcmxhcHBlZCk7DQogICAgICAgICAgICBpZiAocmVzdWx0LlZhbCAhPSAwIHx8IHJlc3VsdC5fTGFzdEVycm9yID09IEVSUk9SX0lPX1BFTkRJTkcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl93RGVzY3JpcHRvckV2ZW50KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd0Rlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHRoaXMuX3dyaXRlb3ZlcmxhcHBlZC5oRXZlbnQsIHsgbWV0YWRhdGE6ICdoZWNpLnNlc3Npb24gW3dyaXRlXScgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQuc2Vzc2lvbiA9IHRoaXM7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dEZXNjcmlwdG9yRXZlbnQub24oJ3NpZ25hbGVkJywgdGhpcy5fcHJvY2Vzc1dyaXRlX3NpZ25hbGVkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnV3JpdGUgRXJyb3I6ICcgKyByZXN1bHQuX0xhc3RFcnJvcik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICByZXF1aXJlKCdmcycpLndyaXRlKHRoaXMuX2Rlc2NyaXB0b3IsIGNodW5rLmJ1ZmZlciwgdGhpcy5fcHJvY2Vzc1dyaXRlX2xpbnV4X3NpZ25hbGVkLCB7IG1ldGFkYXRhOiAnaGVjaS5zZXNzaW9uJywgc2Vzc2lvbjogdGhpcyB9KTsNCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlX2xpbnV4X3NpZ25hbGVkID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZV9saW51eF9zaWduYWxlZChzdGF0dXMsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyLCBvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYoc3RhdHVzID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoYnl0ZXNXcml0dGVuICsgJyBieXRlcyB3cml0dGVuJyk7DQogICAgICAgICAgICBjb25zb2xlLmluZm8zKCdub1BpcGVsaW5lID0gJyArIG9wdGlvbnMuc2Vzc2lvbi5fb3B0aW9ucy5ub1BpcGVsaW5lLCBvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSA9PSBudWxsIHx8IG9wdGlvbnMuc2Vzc2lvbi5fb3B0aW9ucy5ub1BpcGVsaW5lID09IGZhbHNlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBpdGVtID0gb3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoID4gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbi5fcHJvY2Vzc1dyaXRlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzMoJ1dyaXRlL0ZsdXNoJyk7DQogICAgICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9Ow0KICAgIHJldC5fcHJvY2Vzc1dyaXRlX3NpZ25hbGVkID0gZnVuY3Rpb24gX3Byb2Nlc3NXcml0ZV9zaWduYWxlZChzdGF0dXMpDQogICAgew0KICAgICAgICBjb25zb2xlLmluZm8zKCdXcml0ZSBTaWduYWxlZDogJyArIHN0YXR1cyk7DQogICAgICAgIGlmKHN0YXR1cyA9PSAnTk9ORScpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5vIEVycm9ycw0KICAgICAgICAgICAgdmFyIGJ5dGVzV3JpdHRlbiA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGtlcm5lbDMyLkdldE92ZXJsYXBwZWRSZXN1bHQodGhpcy5zZXNzaW9uLl9kZXNjcmlwdG9yLCB0aGlzLnNlc3Npb24uX3dyaXRlb3ZlcmxhcHBlZCwgYnl0ZXNXcml0dGVuLCAwKTsNCiAgICAgICAgICAgIGlmKHJlc3VsdC5WYWwgIT0gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8zKGJ5dGVzV3JpdHRlbi50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpICsgJyBieXRlcyB3cml0dGVuJyk7DQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMygnbm9QaXBlbGluZSA9ICcgKyB0aGlzLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSwgdGhpcy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgaWYodGhpcy5zZXNzaW9uLl9vcHRpb25zLm5vUGlwZWxpbmU9PW51bGwgfHwgdGhpcy5zZXNzaW9uLl9vcHRpb25zLm5vUGlwZWxpbmUgPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5wb3AoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uX3Byb2Nlc3NXcml0ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMygnV3JpdGUvRmx1c2gnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQogICAgcmV0Ll9wcm9jZXNzUmVhZF9yZWFkU2V0X3NpbmsgPSBmdW5jdGlvbiBfcHJvY2Vzc1JlYWRfcmVhZFNldF9zaW5rKHN0YXR1cywgYnl0ZXNSZWFkLCBidWZmZXIsIG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsgb3B0aW9ucy5zZXNzaW9uLnB1c2gobnVsbCk7IHJldHVybjsgfQ0KICAgICAgICBjb25zb2xlLmluZm8zKGJ5dGVzUmVhZCArICcgYnl0ZXMgcmVhZCcpOw0KDQogICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCBieXRlc1JlYWQpOw0KICAgICAgICB2YXIgcHVzaFJlc3VsdCA9IG9wdGlvbnMuc2Vzc2lvbi5wdXNoKGJ1ZmZlcik7DQogICAgICAgIGlmIChvcHRpb25zLnNlc3Npb24uX29wdGlvbnMubm9QaXBlbGluZSAhPSAwICYmIG9wdGlvbnMuc2Vzc2lvbi5fcGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBVbmxvY2sgYSB3cml0ZQ0KICAgICAgICAgICAgY29uc29sZS5pbmZvMygncGVuZGluZ1dyaXRlQ291bnQ6ICcgKyBvcHRpb25zLnNlc3Npb24uX3BlbmRpbmdXcml0ZXMubGVuZ3RoKTsNCiAgICAgICAgICAgIHZhciBpdGVtID0gb3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLnBvcCgpOw0KDQogICAgICAgICAgICBpZiAob3B0aW9ucy5zZXNzaW9uLl9wZW5kaW5nV3JpdGVzLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5zZXNzaW9uLl9wcm9jZXNzV3JpdGUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8zKCdXcml0ZS9GbHVzaCcpOw0KICAgICAgICAgICAgICAgIGl0ZW0uZmx1c2goKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChwdXNoUmVzdWx0KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBXZSBjYW4gcmVhZCBtb3JlLCBiZWNhdXNlIGRhdGEgaXMgc3RpbGwgZmxvd2luZw0KICAgICAgICAgICAgb3B0aW9ucy5zZXNzaW9uLl9wcm9jZXNzUmVhZCgpOw0KICAgICAgICB9DQogICAgfTsNCiAgICByZXQuX3Byb2Nlc3NSZWFkID0gZnVuY3Rpb24gX3Byb2Nlc3NSZWFkKCkNCiAgICB7DQogICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdG9yID09IG51bGwpIHsgcmV0dXJuOyB9DQogICAgICAgIHJlcXVpcmUoJ2ZzJykucmVhZCh0aGlzLl9kZXNjcmlwdG9yLCB7IG1ldGFkYXRhOiAnaGVjaS5zZXNzaW9uJywgYnVmZmVyOiB0aGlzLl9yZWFkYnVmZmVyLCBzZXNzaW9uOiB0aGlzIH0sIHRoaXMuX3Byb2Nlc3NSZWFkX3JlYWRTZXRfc2luayk7DQogICAgfTsNCiAgICByZXQub25jZSgnficsIGZ1bmN0aW9uICgpIHsgdGhpcy5kaXNjb25uZWN0KCk7IH0pOw0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KdmFyIGlvY3RsID0ge307DQppZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQp7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlvY3RsLCAnSEVDSV9WRVJTSU9OJywgeyB2YWx1ZTogMHg4MDAwRTAwMCB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW9jdGwsICdDTElFTlRfQ09OTkVDVCcsIHsgdmFsdWU6IDB4ODAwMEUwMDQgfSk7DQp9DQppZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQp7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGlvY3RsLCAnSEVDSV9WRVJTSU9OJywgeyB2YWx1ZTogMHgwMCB9KTsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW9jdGwsICdDTElFTlRfQ09OTkVDVCcsIHsgdmFsdWU6IDB4MDEgfSk7DQp9DQoNCnZhciBndWlkcyA9IHt9Ow0KT2JqZWN0LmRlZmluZVByb3BlcnR5KGd1aWRzLCAnQU1UJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJzI4", 16000); + memcpy_s(_heci + 32000, 972, "MDBGODEyQjdCNDJENEJBQ0E4NDZFMEZGNjU4MTRDJywgJ2hleCcpIH0pOw0KT2JqZWN0LmRlZmluZVByb3BlcnR5KGd1aWRzLCAnTE1FJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJ0RCQTQzMzY3NzYwNDdCNEVCM0FGQkNGQzI5QkVFN0E3JywgJ2hleCcpIH0pOw0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCnsNCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3VpZHMsICdIRUNJJywgeyB2YWx1ZTogQnVmZmVyLmZyb20oJzM0RkZEMUUyNTgzNEE5NDk4OERBOEU2OTE1Q0U5QkU1JywgJ2hleCcpIH0pOw0KfQ0KDQoNCm1vZHVsZS5leHBvcnRzID0geyBfT2JqZWN0SUQ6ICdoZWNpJywgSU9DVEw6IGlvY3RsLCBHVUlEUzogZ3VpZHMsIGNyZWF0ZTogaGVjaV9jcmVhdGUgfTsNCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgInN1cHBvcnRlZCIsIHsNCiAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgew0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHAgPSB0aGlzLmNyZWF0ZSgpLmRlc2NyaXB0b3JQYXRoKCk7DQogICAgICAgICAgICB2YXIgZCA9IHRoaXMuY3JlYXRlKCkuY3JlYXRlRGVzY3JpcHRvcihwKTsNCiAgICAgICAgICAgIHJldHVybih0cnVlKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsNCiAgICAgICAgfQ0KICAgIH0NCn0pOw==", 972); + ILibBase64DecodeEx((unsigned char*)_heci, 32972, (unsigned char*)_heci + 32972); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "heci"); duk_push_string(ctx, _heci + 32972); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_heci); #endif diff --git a/modules/heci.js b/modules/heci.js index 2ff0590..e54cf01 100644 --- a/modules/heci.js +++ b/modules/heci.js @@ -474,6 +474,7 @@ function heci_create() { console.info1('Write Error: ' + result._LastError); } + return; } require('fs').write(this._descriptor, chunk.buffer, this._processWrite_linux_signaled, { metadata: 'heci.session', session: this });