@local-labs-jpollock/local-cli 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon-dist/package.json +1 -1
- package/lib/analytics.d.ts +55 -0
- package/lib/analytics.js +447 -0
- package/lib/index.js +110 -10
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -52,6 +52,7 @@ const child_process_1 = require("child_process");
|
|
|
52
52
|
const bootstrap_1 = require("./bootstrap");
|
|
53
53
|
const client_1 = require("./client");
|
|
54
54
|
const formatters_1 = require("./formatters");
|
|
55
|
+
const analytics = __importStar(require("./analytics"));
|
|
55
56
|
// Package info
|
|
56
57
|
const PACKAGE_NAME = '@local-labs-jpollock/local-cli';
|
|
57
58
|
const CURRENT_VERSION = require('../package.json').version;
|
|
@@ -1349,6 +1350,62 @@ wpe
|
|
|
1349
1350
|
}
|
|
1350
1351
|
});
|
|
1351
1352
|
// ===========================================
|
|
1353
|
+
// Analytics Commands
|
|
1354
|
+
// ===========================================
|
|
1355
|
+
const analyticsCmd = program.command('analytics').description('Manage anonymous usage analytics');
|
|
1356
|
+
analyticsCmd
|
|
1357
|
+
.command('status')
|
|
1358
|
+
.description('Show analytics status')
|
|
1359
|
+
.action(() => {
|
|
1360
|
+
const status = analytics.getStatus();
|
|
1361
|
+
console.log(`Analytics: ${status.enabled ? 'enabled' : 'disabled'}`);
|
|
1362
|
+
console.log(`Total events stored: ${status.eventCount}`);
|
|
1363
|
+
console.log(`Installation ID: ${status.installationId}`);
|
|
1364
|
+
});
|
|
1365
|
+
analyticsCmd
|
|
1366
|
+
.command('on')
|
|
1367
|
+
.description('Enable analytics')
|
|
1368
|
+
.action(() => {
|
|
1369
|
+
analytics.setAnalyticsEnabled(true);
|
|
1370
|
+
console.log('Analytics enabled. Thank you for helping improve lwp!');
|
|
1371
|
+
});
|
|
1372
|
+
analyticsCmd
|
|
1373
|
+
.command('off')
|
|
1374
|
+
.description('Disable analytics')
|
|
1375
|
+
.action(() => {
|
|
1376
|
+
analytics.setAnalyticsEnabled(false);
|
|
1377
|
+
console.log('Analytics disabled. No data will be collected.');
|
|
1378
|
+
});
|
|
1379
|
+
analyticsCmd
|
|
1380
|
+
.command('show')
|
|
1381
|
+
.description('View your analytics data')
|
|
1382
|
+
.option('--json', 'Output as JSON')
|
|
1383
|
+
.action((options) => {
|
|
1384
|
+
if (options.json) {
|
|
1385
|
+
const events = analytics.readEvents();
|
|
1386
|
+
console.log(JSON.stringify(events, null, 2));
|
|
1387
|
+
}
|
|
1388
|
+
else {
|
|
1389
|
+
console.log(analytics.getSummary());
|
|
1390
|
+
}
|
|
1391
|
+
});
|
|
1392
|
+
analyticsCmd
|
|
1393
|
+
.command('reset')
|
|
1394
|
+
.description('Delete all analytics data and regenerate installation ID')
|
|
1395
|
+
.action(() => {
|
|
1396
|
+
const count = analytics.getStatus().eventCount;
|
|
1397
|
+
analytics.resetAnalytics();
|
|
1398
|
+
console.log(`Deleted ${count} local events. Installation ID regenerated. Analytics disabled.`);
|
|
1399
|
+
});
|
|
1400
|
+
analyticsCmd
|
|
1401
|
+
.command('dashboard')
|
|
1402
|
+
.description('Open your personal analytics dashboard')
|
|
1403
|
+
.action(() => {
|
|
1404
|
+
const url = analytics.getDashboardUrl();
|
|
1405
|
+
console.log('Your analytics dashboard (expires in 1 hour):');
|
|
1406
|
+
console.log(url);
|
|
1407
|
+
});
|
|
1408
|
+
// ===========================================
|
|
1352
1409
|
// Helper Functions
|
|
1353
1410
|
// ===========================================
|
|
1354
1411
|
/**
|
|
@@ -1453,14 +1510,57 @@ program
|
|
|
1453
1510
|
process.exit(1);
|
|
1454
1511
|
}
|
|
1455
1512
|
});
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1513
|
+
/**
|
|
1514
|
+
* Get command path for analytics (e.g., "sites.list", "wp")
|
|
1515
|
+
*/
|
|
1516
|
+
function getCommandPath(command) {
|
|
1517
|
+
const parts = [];
|
|
1518
|
+
let current = command;
|
|
1519
|
+
while (current && current.name() !== 'lwp') {
|
|
1520
|
+
parts.unshift(current.name());
|
|
1521
|
+
current = current.parent;
|
|
1522
|
+
}
|
|
1523
|
+
return parts.join('.') || 'unknown';
|
|
1463
1524
|
}
|
|
1464
|
-
//
|
|
1465
|
-
|
|
1466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0M7QUFDeEMscUNBQXlDO0FBQ3pDLDZDQU9zQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNB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dCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qKlxuICogTG9jYWwgQ0xJIChsd3ApXG4gKlxuICogQ29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgTG9jYWwgV29yZFByZXNzIHNpdGVzLlxuICogQ29ubmVjdHMgZGlyZWN0bHkgdG8gTG9jYWwncyBHcmFwaFFMIHNlcnZlci5cbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IHsgR3JhcGhRTENsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7XG4gIGZvcm1hdFNpdGVMaXN0LFxuICBmb3JtYXRTaXRlRGV0YWlsLFxuICBmb3JtYXRTdWNjZXNzLFxuICBmb3JtYXRFcnJvcixcbiAgZ2V0T3V0cHV0Rm9ybWF0LFxuICBGb3JtYXR0ZXJPcHRpb25zLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiBub3cgLSBjYWNoZS5sYXN0Q2hlY2sgPCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwpIHtcbiAgICBpZiAoY2FjaGUubGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihjYWNoZS5sYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2NhY2hlLmxhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGZXRjaCBsYXRlc3QgdmVyc2lvbiAobm9uLWJsb2NraW5nLCBmaXJlIGFuZCBmb3JnZXQgZm9yIGNhY2hlKVxuICBmZXRjaExhdGVzdFZlcnNpb24oKVxuICAgIC50aGVuKChsYXRlc3RWZXJzaW9uKSA9PiB7XG4gICAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICAgIGlmIChsYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblxceDFiWzMzbVVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufVxceDFiWzBtYCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgd2UncmUgY29ubmVjdGVkIHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29ubmVjdGVkKG9wdGlvbnM6IEZvcm1hdHRlck9wdGlvbnMpOiBQcm9taXNlPEdyYXBoUUxDbGllbnQ+IHtcbiAgaWYgKGNsaWVudCkge1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBjb25zdCBzcGlubmVyID0gb3B0aW9ucy5xdWlldCA/IG51bGwgOiBvcmEoJ0Nvbm5lY3RpbmcgdG8gTG9jYWwuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYm9vdHN0cmFwKHtcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIudGV4dCA9IHN0YXR1cztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQuY29ubmVjdGlvbkluZm8pIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ZhaWxlZCB0byBjb25uZWN0Jyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKHJlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBzcGlubmVyPy5zdWNjZWVkKCdDb25uZWN0ZWQgdG8gTG9jYWwnKTtcbiAgICBjbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudChyZXN1bHQuY29ubmVjdGlvbkluZm8pO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciB0byBydW4gc2l0ZS1zcGVjaWZpYyBjb21tYW5kcyB3aXRoIGNvbW1vbiBib2lsZXJwbGF0ZVxuICpcbiAqIEhhbmRsZXM6IGNvbm5lY3Rpb24sIHNwaW5uZXIsIHNpdGUgbG9va3VwLCBlcnJvciBmb3JtYXR0aW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1blNpdGVDb21tYW5kPFQ+KFxuICBzaXRlTmFtZTogc3RyaW5nLFxuICBjb25maWc6IHtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBzdWNjZXNzTWVzc2FnZT86IChyZXN1bHQ6IFQpID0+IHN0cmluZztcbiAgfSxcbiAgZXhlY3V0ZTogKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZUlkOiBzdHJpbmcpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIi4uLmApLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGVOYW1lKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKGdxbCwgc2l0ZUlkKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjb25maWcuc3VjY2Vzc01lc3NhZ2VcbiAgICAgID8gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlKHJlc3VsdClcbiAgICAgIDogYCR7Y29uZmlnLmFjdGlvbn0gXCIke3NpdGVOYW1lfVwiIGNvbXBsZXRlZGA7XG4gICAgc3Bpbm5lcj8uc3VjY2VlZChtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXI/LmZhaWwoYEZhaWxlZCB0byAke2NvbmZpZy5hY3Rpb24udG9Mb3dlckNhc2UoKX0gXCIke3NpdGVOYW1lfVwiYCk7XG4gICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2x3cCcpXG4gIC5kZXNjcmlwdGlvbignQ29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgTG9jYWwgV29yZFByZXNzIGRldmVsb3BtZW50JylcbiAgLnZlcnNpb24oQ1VSUkVOVF9WRVJTSU9OKVxuICAuZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMoKTtcblxuLy8gR2xvYmFsIG9wdGlvbnNcbnByb2dyYW1cbiAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHRzIGFzIEpTT04nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ01pbmltYWwgb3V0cHV0IChJRHMvbmFtZXMgb25seSknKVxuICAub3B0aW9uKCctLW5vLWNvbG9yJywgJ0Rpc2FibGUgY29sb3JlZCBvdXRwdXQnKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVXBkYXRlIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIENMSSB0byB0aGUgbGF0ZXN0IHZlcnNpb24nKVxuICAub3B0aW9uKCctLWNoZWNrJywgJ09ubHkgY2hlY2sgZm9yIHVwZGF0ZXMsIGRvIG5vdCBpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIGlmIChvcHRpb25zLmNoZWNrKSB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDaGVja2luZyBmb3IgdXBkYXRlcy4uLicpLnN0YXJ0KCk7XG4gICAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG5cbiAgICAgIGlmICghbGF0ZXN0VmVyc2lvbikge1xuICAgICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBjaGVjayBmb3IgdXBkYXRlcycpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5SdW4gXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtIHRvIGluc3RhbGxgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgWW91J3JlIG9uIHRoZSBsYXRlc3QgdmVyc2lvbiAoJHtDVVJSRU5UX1ZFUlNJT059KWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1VwZGF0aW5nIENMSS4uLicpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUnVuIG5wbSB1cGRhdGVcbiAgICAgIGV4ZWNTeW5jKGBucG0gdXBkYXRlIC1nICR7UEFDS0FHRV9OQU1FfWAsIHsgc3RkaW86ICdwaXBlJyB9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQ0xJIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgIC8vIENoZWNrIG5ldyB2ZXJzaW9uXG4gICAgICBjb25zdCBuZXdWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuVXBkYXRlZCB0byB2ZXJzaW9uICR7bmV3VmVyc2lvbn1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ1VwZGF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1RyeSBydW5uaW5nOiBucG0gdXBkYXRlIC1nICcgKyBQQUNLQUdFX05BTUUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaXRlcyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBzaXRlcyA9IHByb2dyYW0uY29tbWFuZCgnc2l0ZXMnKS5kZXNjcmlwdGlvbignTWFuYWdlIFdvcmRQcmVzcyBzaXRlcycpO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhbGwgV29yZFByZXNzIHNpdGVzJylcbiAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN0YXR1cyAocnVubmluZ3xzdG9wcGVkfGFsbCknLCAnYWxsJylcbiAgLmFjdGlvbihhc3luYyAoY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkb21haW46IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PjtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIHNpdGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICBkb21haW5cbiAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGxldCBzaXRlc1RvU2hvdyA9IGRhdGEuc2l0ZXMubWFwKChzKSA9PiAoe1xuICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICBkb21haW46IHMuZG9tYWluLFxuICAgICAgICBzdGF0dXM6IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhdGg6IHMucGF0aCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gRmlsdGVyIGJ5IHN0YXR1cyBpZiBzcGVjaWZpZWRcbiAgICAgIGlmIChjbWRPcHRpb25zLnN0YXR1cyAhPT0gJ2FsbCcpIHtcbiAgICAgICAgc2l0ZXNUb1Nob3cgPSBzaXRlc1RvU2hvdy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzID09PSBjbWRPcHRpb25zLnN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVMaXN0KHNpdGVzVG9TaG93LCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZ2V0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGRldGFpbGVkIGluZm8gYWJvdXQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEZpcnN0IGZpbmQgdGhlIHNpdGUgYnkgbmFtZSBvciBJRFxuICAgICAgY29uc3Qgc2l0ZXNEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgZm91bmRTaXRlID0gc2l0ZXNEYXRhLnNpdGVzLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLmlkID09PSBzaXRlIHx8IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGUudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG5cbiAgICAgIGlmICghZm91bmRTaXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFNpdGUgbm90IGZvdW5kOiBcIiR7c2l0ZX1cImApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogYW55IH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7XG4gICAgICAgICAgc2l0ZShpZDogJGlkKSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgZG9tYWluXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgaHR0cFBvcnRcbiAgICAgICAgICAgIHhkZWJ1Z0VuYWJsZWRcbiAgICAgICAgICAgIHNlcnZpY2VzIHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgICAgICAgIHJvbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhvc3RDb25uZWN0aW9ucyB7XG4gICAgICAgICAgICAgIGhvc3RJZFxuICAgICAgICAgICAgICByZW1vdGVTaXRlSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaWQ6IGZvdW5kU2l0ZS5pZCB9XG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGRhdGEuc2l0ZSwgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3N0YXJ0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnU3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFN0YXJ0ZWQgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGdxbC5tdXRhdGUoYG11dGF0aW9uKCRpZDogSUQhKSB7IHN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVzdGFydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Jlc3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnUmVzdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVzdGFydGVkIFwiJHtzaXRlfVwiYCB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBncWwubXV0YXRlKGBtdXRhdGlvbigkaWQ6IElEISkgeyByZXN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdvcGVuIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignT3BlbiBzaXRlIGluIGJyb3dzZXInKVxuICAub3B0aW9uKCctLWFkbWluJywgJ09wZW4gV1AgQWRtaW4gaW5zdGVhZCBvZiBmcm9udGVuZCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ09wZW5pbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYE9wZW5lZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlblNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaW5wdXQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmNyZWF0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5jcmVhdGVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gY3JlYXRlIHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgQ3JlYXRlZCBcIiR7ZGF0YS5jcmVhdGVTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuY3JlYXRlU2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0NyZWF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdkZWxldGUgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBzaXRlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLm9wdGlvbignLS1rZWVwLWZpbGVzJywgJ0tlZXAgc2l0ZSBmaWxlcyAob25seSByZW1vdmUgZnJvbSBMb2NhbCknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdEZWxldGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgRGVsZXRlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGRlbGV0ZVNpdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogRGVsZXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGRlbGV0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IGlkOiBzaXRlSWQsIHRyYXNoRmlsZXM6ICFjbWRPcHRpb25zLmtlZXBGaWxlcyB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmRlbGV0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgQ2xvbmluZ2AsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGBDbG9uZWQgdG8gXCIke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVOYW1lfVwiICgke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVJZH0pYCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNsb25lU2l0ZToge1xuICAgICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICAgIG5ld1NpdGVJZDogc3RyaW5nO1xuICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDbG9uZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBjbG9uZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG5ld1NpdGVJZCBuZXdTaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG5ld05hbWUgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jbG9uZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnRXhwb3J0aW5nJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydFNpdGUub3V0cHV0UGF0aH1gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0UGF0aCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXhwb3J0U2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBzaXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdpbXBvcnQgPHppcEZpbGU+JylcbiAgLmRlc2NyaXB0aW9uKCdJbXBvcnQgc2l0ZSBmcm9tIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU2l0ZSBuYW1lIChkZWZhdWx0cyB0byB6aXAgZmlsZW5hbWUpJylcbiAgLmFjdGlvbihhc3luYyAoemlwRmlsZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgSW1wb3J0aW5nIHNpdGUuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICBpbXBvcnRTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNpdGVJZDogc3RyaW5nOyBzaXRlTmFtZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgaW1wb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgc2l0ZUlkIHNpdGVOYW1lIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyB6aXBQYXRoOiB6aXBGaWxlLCBzaXRlTmFtZTogY21kT3B0aW9ucy5uYW1lIH0gfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmltcG9ydFNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5pbXBvcnRTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gaW1wb3J0IHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgSW1wb3J0ZWQgXCIke2RhdGEuaW1wb3J0U2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmltcG9ydFNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVuYW1lIDxzaXRlPiA8bmV3TmFtZT4nKVxuICAuZGVzY3JpcHRpb24oJ1JlbmFtZSBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuZXdOYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdSZW5hbWluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVuYW1lZCB0byBcIiR7bmV3TmFtZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogTWNwUmVuYW1lU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG1jcFJlbmFtZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1jcFJlbmFtZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5hbWUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3NsIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignVHJ1c3QgU1NMIGNlcnRpZmljYXRlIGZvciBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdUcnVzdGluZyBTU0wgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBTU0wgY2VydGlmaWNhdGUgdHJ1c3RlZCBmb3IgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0cnVzdFNzbDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBUcnVzdFNzbElucHV0ISkge1xuICAgICAgICAgIHRydXN0U3NsKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50cnVzdFNzbC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNoYW5nZVBocFZlcnNpb246IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IENoYW5nZVBocFZlcnNpb25JbnB1dCEpIHtcbiAgICAgICAgICBjaGFuZ2VQaHBWZXJzaW9uKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIHBocFZlcnNpb246IHZlcnNpb24gfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICAgIGBYZGVidWcgJHtkYXRhLnRvZ2dsZVhkZWJ1Zy5lbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICAvLyBJZiBubyBmbGFnIHNwZWNpZmllZCwgZ2V0IGN1cnJlbnQgc3RhdGUgYW5kIHRvZ2dsZVxuICAgICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmICh0YXJnZXRFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzaXRlRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGU6IHsgeGRlYnVnRW5hYmxlZDogYm9vbGVhbiB9IH0+KFxuICAgICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLFxuICAgICAgICAgICAgeyBpZDogc2l0ZUlkIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFRvZ2dsZVhkZWJ1Z0lucHV0ISkge1xuICAgICAgICAgIHRvZ2dsZVhkZWJ1ZyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZW5hYmxlZCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnRvZ2dsZVhkZWJ1Zy5lcnJvciB8fCAnRmFpbGVkIHRvIHRvZ2dsZSBYZGVidWcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xvZ3MgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgc2l0ZSBsb2dzJylcbiAgLm9wdGlvbignLXQsIC0tdHlwZSA8dHlwZT4nLCAnTG9nIHR5cGUgKHBocHxuZ2lueHxteXNxbCknLCAncGhwJylcbiAgLm9wdGlvbignLW4sIC0tbGluZXMgPG4+JywgJ051bWJlciBvZiBsaW5lcycsICc1MCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgIGdldFNpdGVMb2dzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGxvZ3M6IHN0cmluZ1tdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBHZXRTaXRlTG9nc0lucHV0ISkge1xuICAgICAgICAgIGdldFNpdGVMb2dzKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBsb2dzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGxvZ1R5cGU6IGNtZE9wdGlvbnMudHlwZSwgbGluZXM6IHBhcnNlSW50KGNtZE9wdGlvbnMubGluZXMsIDEwKSB9IH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTaXRlTG9ncy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTaXRlTG9ncy5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBsb2dzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFNpdGVMb2dzLmxvZ3MsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gbG9ncyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncy5mb3JFYWNoKChsaW5lKSA9PiBjb25zb2xlLmxvZyhsaW5lKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AtQ0xJIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnd3AgPHNpdGU+IFthcmdzLi4uXScpXG4gIC5kZXNjcmlwdGlvbignUnVuIFdQLUNMSSBjb21tYW5kcyBhZ2FpbnN0IGEgc2l0ZScpXG4gIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ0xvYWQgcGx1Z2lucyAobXVzdCBjb21lIGJlZm9yZSBzaXRlIG5hbWUpJylcbiAgLm9wdGlvbignLS13aXRoLXRoZW1lcycsICdMb2FkIHRoZW1lcyAobXVzdCBjb21lIGJlZm9yZSBzaXRlIG5hbWUpJylcbiAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gIC5wYXNzVGhyb3VnaE9wdGlvbnMoKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBhcmdzLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIHNpdGVJZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc2tpcFBsdWdpbnM6ICFjbWRPcHRpb25zLndpdGhQbHVnaW5zLFxuICAgICAgICBza2lwVGhlbWVzOiAhY21kT3B0aW9ucy53aXRoVGhlbWVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICB3cENsaTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogV3BDbGlJbnB1dCEpIHtcbiAgICAgICAgICB3cENsaShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0IGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dCB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEud3BDbGkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BDbGkuZXJyb3IgfHwgJ1dQLUNMSSBjb21tYW5kIGZhaWxlZCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhkYXRhLndwQ2xpLm91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5mbyBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luZm8nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgTG9jYWwgYXBwbGljYXRpb24gaW5mbycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEdldCBzaXRlcyBjb3VudCBhbmQgYmFzaWMgaW5mb1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIHN0YXR1cyB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBydW5uaW5nID0gZGF0YS5zaXRlcy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJykubGVuZ3RoO1xuICAgICAgY29uc3Qgc3RvcHBlZCA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncnVubmluZycpLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgdG90YWxTaXRlczogZGF0YS5zaXRlcy5sZW5ndGgsXG4gICAgICAgIHJ1bm5pbmdTaXRlczogcnVubmluZyxcbiAgICAgICAgc3RvcHBlZFNpdGVzOiBzdG9wcGVkLFxuICAgICAgICBncmFwaHFsRW5kcG9pbnQ6IGNsaWVudD8uWyd1cmwnXSB8fCAnY29ubmVjdGVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoaW5mbywgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VydmljZXMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzZXJ2aWNlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhdmFpbGFibGUgc2VydmljZSB2ZXJzaW9ucycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBsaXN0U2VydmljZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIHNlcnZpY2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfT47XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0U2VydmljZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2VydmljZXMgeyByb2xlIG5hbWUgdmVyc2lvbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0U2VydmljZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFNlcnZpY2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHN2YyBvZiBkYXRhLmxpc3RTZXJ2aWNlcy5zZXJ2aWNlcykge1xuICAgICAgICAgIGlmICghZ3JvdXBlZFtzdmMucm9sZV0pIGdyb3VwZWRbc3ZjLnJvbGVdID0gW107XG4gICAgICAgICAgZ3JvdXBlZFtzdmMucm9sZV0ucHVzaChgJHtzdmMudmVyc2lvbn0gKCR7c3ZjLm5hbWV9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbcm9sZSwgdmVyc2lvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiR7cm9sZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJvbGUuc2xpY2UoMSl9IFZlcnNpb25zOmApO1xuICAgICAgICAgIHZlcnNpb25zLmZvckVhY2goKHYpID0+IGNvbnNvbGUubG9nKGAgIC0gJHt2fWApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJsdWVwcmludHMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBibHVlcHJpbnRzID0gcHJvZ3JhbS5jb21tYW5kKCdibHVlcHJpbnRzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBibHVlcHJpbnRzJyk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIGJsdWVwcmludHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgYmx1ZXByaW50czogeyBzdWNjZXNzOiBib29sZWFuOyBibHVlcHJpbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGJsdWVwcmludHMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYmx1ZXByaW50cyB7IG5hbWUgfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEuYmx1ZXByaW50cy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5ibHVlcHJpbnRzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBibHVlcHJpbnRzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIGJsdWVwcmludHMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnQmx1ZXByaW50czonKTtcbiAgICAgICAgZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMuZm9yRWFjaCgoYikgPT4gY29uc29sZS5sb2coYCAgLSAke2IubmFtZX1gKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmx1ZXByaW50c1xuICAuY29tbWFuZCgnc2F2ZSA8c2l0ZT4gPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdTYXZlIGEgc2l0ZSBhcyBhIGJsdWVwcmludCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ1NhdmluZyBibHVlcHJpbnQgZnJvbScsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU2F2ZWQgYmx1ZXByaW50IFwiJHtuYW1lfVwiYCB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBzYXZlQmx1ZXByaW50OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBTYXZlQmx1ZXByaW50SW5wdXQhKSB7XG4gICAgICAgICAgc2F2ZUJsdWVwcmludChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBuYW1lIH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuc2F2ZUJsdWVwcmludC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuc2F2ZUJsdWVwcmludC5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgYmx1ZXByaW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdGFiYXNlIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGRiID0gcHJvZ3JhbS5jb21tYW5kKCdkYicpLmRlc2NyaXB0aW9uKCdEYXRhYmFzZSBvcGVyYXRpb25zJyk7XG5cbmRiLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBkYXRhYmFzZSB0byBTUUwgZmlsZScpXG4gIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8cGF0aD4nLCAnT3V0cHV0IGZpbGUgcGF0aCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ0V4cG9ydGluZyBkYXRhYmFzZSBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgZXhwb3J0RGF0YWJhc2U6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydERhdGFiYXNlLm91dHB1dFBhdGh9YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGV4cG9ydERhdGFiYXNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG91dHB1dFBhdGg6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydERhdGFiYXNlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0RGF0YWJhc2UoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG91dHB1dFBhdGggZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvdXRwdXRQYXRoOiBjbWRPcHRpb25zLm91dHB1dCB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmV4cG9ydERhdGFiYXNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5leHBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBkYXRhYmFzZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5kYi5jb21tYW5kKCdpbXBvcnQgPHNpdGU+IDxzcWxGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IFNRTCBmaWxlIGludG8gZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzcWxGaWxlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdJbXBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdEYXRhYmFzZSBpbXBvcnRlZCBzdWNjZXNzZnVsbHknIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIHNxbFBhdGg6IHNxbEZpbGUgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5pbXBvcnREYXRhYmFzZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuaW1wb3J0RGF0YWJhc2UuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgZGF0YWJhc2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuZGIuY29tbWFuZCgnYWRtaW5lciA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ09wZW4gQWRtaW5lciBkYXRhYmFzZSBVSScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ09wZW5pbmcgQWRtaW5lciBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ09wZW5lZCBBZG1pbmVyJyB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBncWwubXV0YXRlKFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuQWRtaW5lcklucHV0ISkge1xuICAgICAgICAgIG9wZW5BZG1pbmVyKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQgfSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhY2t1cHMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgYmFja3VwcyA9IHByb2dyYW0uY29tbWFuZCgnYmFja3VwcycpLmRlc2NyaXB0aW9uKCdDbG91ZCBiYWNrdXAgb3BlcmF0aW9ucycpO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIGJhY2t1cCBzZXJ2aWNlIGF2YWlsYWJpbGl0eScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBiYWNrdXBTdGF0dXM6IHtcbiAgICAgICAgICBhdmFpbGFibGU6IGJvb2xlYW47XG4gICAgICAgICAgZmVhdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgICAgZHJvcGJveDogYW55O1xuICAgICAgICAgIGdvb2dsZURyaXZlOiBhbnk7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBiYWNrdXBTdGF0dXMge1xuICAgICAgICAgICAgYXZhaWxhYmxlXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZFxuICAgICAgICAgICAgZHJvcGJveCB7IGF1dGhlbnRpY2F0ZWQgYWNjb3VudElkIGVtYWlsIH1cbiAgICAgICAgICAgIGdvb2dsZURyaXZlIHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJhY2t1cFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZGF0YS5iYWNrdXBTdGF0dXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXAgU3RhdHVzOmApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBBdmFpbGFibGU6ICR7c3RhdHVzLmF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgRmVhdHVyZSBFbmFibGVkOiAke3N0YXR1cy5mZWF0dXJlRW5hYmxlZCA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgaWYgKHN0YXR1cy5kcm9wYm94KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgXFxuICBEcm9wYm94OiAke3N0YXR1cy5kcm9wYm94LmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5kcm9wYm94LmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMuZ29vZ2xlRHJpdmUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAgIEdvb2dsZSBEcml2ZTogJHtzdGF0dXMuZ29vZ2xlRHJpdmUuYXV0aGVudGljYXRlZCA/IGBDb25uZWN0ZWQgKCR7c3RhdHVzLmdvb2dsZURyaXZlLmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnbGlzdCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYmFja3VwcyBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGxpc3RCYWNrdXBzOiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBiYWNrdXBzOiBBcnJheTx7IHNuYXBzaG90SWQ6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IG5vdGU6IHN0cmluZyB9PjtcbiAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchKSB7XG4gICAgICAgICAgbGlzdEJhY2t1cHMoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBiYWNrdXBzIHsgc25hcHNob3RJZCB0aW1lc3RhbXAgbm90ZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0QmFja3Vwcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5saXN0QmFja3Vwcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3QgYmFja3VwcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGlzdEJhY2t1cHMuYmFja3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIGJhY2t1cHMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQmFja3VwcyAoJHtjbWRPcHRpb25zLnByb3ZpZGVyfSk6YCk7XG4gICAgICAgIGZvciAoY29uc3QgYmFja3VwIG9mIGRhdGEubGlzdEJhY2t1cHMuYmFja3Vwcykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShiYWNrdXAudGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7YmFja3VwLnNuYXBzaG90SWR9IC0gJHtkYXRlfSR7YmFja3VwLm5vdGUgPyBgIC0gJHtiYWNrdXAubm90ZX1gIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdjcmVhdGUgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy1uLCAtLW5vdGUgPG5vdGU+JywgJ0JhY2t1cCBub3RlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnQ3JlYXRpbmcgYmFja3VwIGZvcicsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjcmVhdGVCYWNrdXA6IHsgc25hcHNob3RJZDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgQmFja3VwIGNyZWF0ZWQ6ICR7ZGF0YS5jcmVhdGVCYWNrdXAuc25hcHNob3RJZH1gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgY3JlYXRlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNuYXBzaG90SWQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJG5vdGU6IFN0cmluZykge1xuICAgICAgICAgIGNyZWF0ZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIG5vdGU6ICRub3RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzIHNuYXBzaG90SWQgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBub3RlOiBjbWRPcHRpb25zLm5vdGUgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuY3JlYXRlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jcmVhdGVCYWNrdXAuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3Jlc3RvcmUgPHNpdGU+IDxzbmFwc2hvdElkPicpXG4gIC5kZXNjcmlwdGlvbignUmVzdG9yZSBmcm9tIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUmVzdG9yaW5nIGJhY2t1cCBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcmVzdG9yZUJhY2t1cDogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGRhdGEucmVzdG9yZUJhY2t1cC5tZXNzYWdlIHx8ICdCYWNrdXAgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHJlc3RvcmVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICByZXN0b3JlQmFja3VwKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlciwgc25hcHNob3RJZDogJHNuYXBzaG90SWQsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5yZXN0b3JlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5yZXN0b3JlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPiA8c25hcHNob3RJZD4nKVxuICAuZGVzY3JpcHRpb24oJ0RlbGV0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnRGVsZXRpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnQmFja3VwIGRlbGV0ZWQnIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBkZWxldGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5kZWxldGVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AgRW5naW5lIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IHdwZSA9IHByb2dyYW0uY29tbWFuZCgnd3BlJykuZGVzY3JpcHRpb24oJ1dQIEVuZ2luZSBzeW5jIG9wZXJhdGlvbnMnKTtcblxud3BlXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgd3BlU3RhdHVzOiB7XG4gICAgICAgICAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICAgIGFjY291bnROYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICB3cGVTdGF0dXMge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZFxuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICAgIGFjY291bnRJZFxuICAgICAgICAgICAgYWNjb3VudE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS53cGVTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEud3BlU3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBDb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBFbWFpbDogJHtzdGF0dXMuZW1haWx9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQWNjb3VudDogJHtzdGF0dXMuYWNjb3VudE5hbWV9ICgke3N0YXR1cy5hY2NvdW50SWR9KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5XUCBFbmdpbmU6IE5vdCBjb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBSdW4gJ2x3cCB3cGUgbG9naW4nIHRvIGF1dGhlbnRpY2F0ZWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignQXV0aGVudGljYXRlIHdpdGggV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBPcGVuaW5nIFdQIEVuZ2luZSBsb2dpbi4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgIHdwZUF1dGhlbnRpY2F0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlbWFpbDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICB9PihgXG4gICAgICAgIG11dGF0aW9uIHtcbiAgICAgICAgICB3cGVBdXRoZW50aWNhdGUgeyBzdWNjZXNzIGVtYWlsIG1lc3NhZ2UgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLndwZUF1dGhlbnRpY2F0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BlQXV0aGVudGljYXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gYXV0aGVudGljYXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYEF1dGhlbnRpY2F0ZWQgYXMgJHtkYXRhLndwZUF1dGhlbnRpY2F0ZS5lbWFpbH1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbG9nb3V0JylcbiAgLmRlc2NyaXB0aW9uKCdMb2dvdXQgZnJvbSBXUCBFbmdpbmUnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYExvZ2dpbmcgb3V0Li4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgd3BlTG9nb3V0OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbiB7XG4gICAgICAgICAgd3BlTG9nb3V0IHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEud3BlTG9nb3V0LnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnTG9nb3V0IGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BlTG9nb3V0LmVycm9yIHx8ICdGYWlsZWQgdG8gbG9nb3V0JykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoJ0xvZ2dlZCBvdXQgZnJvbSBXUCBFbmdpbmUnKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdMb2dvdXQgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3NpdGVzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IFdQIEVuZ2luZSBzaXRlcycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBsaXN0V3BlU2l0ZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+O1xuICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuICAgICAgfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgbGlzdFdwZVNpdGVzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIHNpdGVzIHsgaWQgbmFtZSBlbnZpcm9ubWVudCBwcmltYXJ5RG9tYWluIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLmxpc3RXcGVTaXRlcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5saXN0V3BlU2l0ZXMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IHNpdGVzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIFdQIEVuZ2luZSBzaXRlcyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5XUCBFbmdpbmUgU2l0ZXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgc2l0ZSBvZiBkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7c2l0ZS5uYW1lfSAoJHtzaXRlLmVudmlyb25tZW50fSkgLSAke3NpdGUucHJpbWFyeURvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbGluayA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgV1AgRW5naW5lIGNvbm5lY3Rpb24gZm9yIGEgbG9jYWwgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0V3BlTGluazoge1xuICAgICAgICAgIGxpbmtlZDogYm9vbGVhbjtcbiAgICAgICAgICBzaXRlTmFtZTogc3RyaW5nO1xuICAgICAgICAgIGNvbm5lY3Rpb25zOiBBcnJheTx7XG4gICAgICAgICAgICByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZztcbiAgICAgICAgICAgIGluc3RhbGxOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAgICAgICAgICAgcHJpbWFyeURvbWFpbjogc3RyaW5nO1xuICAgICAgICAgIH0+O1xuICAgICAgICB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgIGxpbmtlZFxuICAgICAgICAgICAgc2l0ZU5hbWVcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIGluc3RhbGxOYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBzaXRlSWQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0V3BlTGluaywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRhdGEuZ2V0V3BlTGluaztcbiAgICAgICAgaWYgKCFsaW5rLmxpbmtlZCB8fCBsaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBXUCBFbmdpbmUgQ29ubmVjdGlvbnM6YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uIG9mIGxpbmsuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29ubi5pbnN0YWxsTmFtZX0gKCR7Y29ubi5lbnZpcm9ubWVudH0pIC0gJHtjb25uLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElEOiAke2Nvbm4ucmVtb3RlSW5zdGFsbElkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVzaCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1c2ggbG9jYWwgc2l0ZSB0byBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUHVzaGluZyB0byBXUCBFbmdpbmUnLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVzaFRvV3BlOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+XG4gICAgICAgICAgZGF0YS5wdXNoVG9XcGUubWVzc2FnZSB8fCAnUHVzaGVkIHRvIFdQIEVuZ2luZScsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgICAgIGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgICB9PihcbiAgICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgICAgICAgICB7IHNpdGVJZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHB1c2hUb1dwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGxvY2FsU2l0ZUlkOiBJRCEsICRyZW1vdGVJbnN0YWxsSWQ6IElEISwgJGluY2x1ZGVTcWw6IEJvb2xlYW4sICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgcHVzaFRvV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG9jYWxTaXRlSWQ6IHNpdGVJZCxcbiAgICAgICAgICAgIHJlbW90ZUluc3RhbGxJZCxcbiAgICAgICAgICAgIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEucHVzaFRvV3BlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5wdXNoVG9XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdXNoIHRvIFdQIEVuZ2luZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1bGwgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdWxsIGZyb20gV1AgRW5naW5lIHRvIGxvY2FsIHNpdGUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUHVsbGluZyBmcm9tIFdQIEVuZ2luZSBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVsbEZyb21XcGU6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBkYXRhLnB1bGxGcm9tV3BlLm1lc3NhZ2UgfHwgJ1B1bGxlZCBmcm9tIFdQIEVuZ2luZScsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgICAgIGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgICB9PihcbiAgICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgICAgICAgICB7IHNpdGVJZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHB1bGxGcm9tV3BlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbikge1xuICAgICAgICAgIHB1bGxGcm9tV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGxvY2FsU2l0ZUlkOiBzaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogY21kT3B0aW9ucy5zcWwgfHwgZmFsc2UgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEucHVsbEZyb21XcGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1bGxGcm9tV3BlLmVycm9yIHx8ICdGYWlsZWQgdG8gcHVsbCBmcm9tIFdQIEVuZ2luZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2hpc3RvcnkgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHN5bmMgaGlzdG9yeSBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLWwsIC0tbGltaXQgPG4+JywgJ051bWJlciBvZiBldmVudHMgdG8gc2hvdycsICcxMCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0U3luY0hpc3Rvcnk6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIGV2ZW50czogQXJyYXk8e1xuICAgICAgICAgICAgcmVtb3RlSW5zdGFsbE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJGxpbWl0OiBJbnQpIHtcbiAgICAgICAgICBnZXRTeW5jSGlzdG9yeShzaXRlSWQ6ICRzaXRlSWQsIGxpbWl0OiAkbGltaXQpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGV2ZW50cyB7IHJlbW90ZUluc3RhbGxOYW1lIHRpbWVzdGFtcCBkaXJlY3Rpb24gc3RhdHVzIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICB7IHNpdGVJZCwgbGltaXQ6IHBhcnNlSW50KGNtZE9wdGlvbnMubGltaXQsIDEwKSB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEuZ2V0U3luY0hpc3Rvcnkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuZ2V0U3luY0hpc3RvcnkuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgc3luYyBoaXN0b3J5JykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIHN5bmMgaGlzdG9yeSBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5TeW5jIEhpc3Rvcnk6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZXZlbnQudGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgIGNvbnN0IGFycm93ID0gZXZlbnQuZGlyZWN0aW9uID09PSAncHVzaCcgPyAn4oaSJyA6ICfihpAnO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7ZGF0ZX0gJHthcnJvd30gJHtldmVudC5yZW1vdGVJbnN0YWxsTmFtZX0gKCR7ZXZlbnQuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnZGlmZiA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgZmlsZSBjaGFuZ2VzIGJldHdlZW4gbG9jYWwgYW5kIFdQIEVuZ2luZScpXG4gIC5vcHRpb24oJy1kLCAtLWRpcmVjdGlvbiA8ZGlyPicsICdEaXJlY3Rpb24gKHB1c2h8cHVsbCknLCAncHVzaCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0U2l0ZUNoYW5nZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIGFkZGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjtcbiAgICAgICAgICBtb2RpZmllZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47XG4gICAgICAgICAgZGVsZXRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47XG4gICAgICAgICAgdG90YWxDaGFuZ2VzOiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihcbiAgICAgICAgYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRkaXJlY3Rpb246IFN0cmluZykge1xuICAgICAgICAgIGdldFNpdGVDaGFuZ2VzKHNpdGVJZDogJHNpdGVJZCwgZGlyZWN0aW9uOiAkZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBhZGRlZCB7IHBhdGggfVxuICAgICAgICAgICAgbW9kaWZpZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIGRlbGV0ZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlc1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgc2l0ZUlkLCBkaXJlY3Rpb246IGNtZE9wdGlvbnMuZGlyZWN0aW9uIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTaXRlQ2hhbmdlcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTaXRlQ2hhbmdlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBjaGFuZ2VzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFNpdGVDaGFuZ2VzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZGF0YS5nZXRTaXRlQ2hhbmdlcztcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkNoYW5nZXMgdG8gJHtjbWRPcHRpb25zLmRpcmVjdGlvbn0gKCR7Y2hhbmdlcy50b3RhbENoYW5nZXN9IHRvdGFsKTpgKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgQWRkZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5hZGRlZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgICsgJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLm1vZGlmaWVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBNb2RpZmllZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLm1vZGlmaWVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgfiAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgRGVsZXRlZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLmRlbGV0ZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICAtICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50b3RhbENoYW5nZXMgPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnICBObyBjaGFuZ2VzIGRldGVjdGVkLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSGVscGVyIEZ1bmN0aW9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEZpbmQgc2l0ZSBJRCBieSBuYW1lIG9yIElEXG4gKlxuICogT3B0aW1pemF0aW9uOiBGaXJzdCB0cmllcyBkaXJlY3QgSUQgbG9va3VwIChPKDEpKSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvXG4gKiBmZXRjaGluZyBhbGwgc2l0ZXMgZm9yIG5hbWUgbWF0Y2hpbmcgKE8obikpLiBUaGlzIHNpZ25pZmljYW50bHkgaW1wcm92ZXNcbiAqIHBlcmZvcm1hbmNlIHdoZW4gdXNlcnMgc3BlY2lmeSBzaXRlIElEcyBkaXJlY3RseS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFNpdGVJZChncWw6IEdyYXBoUUxDbGllbnQsIHNpdGVRdWVyeTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gVHJ5IGRpcmVjdCBJRCBsb29rdXAgZmlyc3QgLSBtdWNoIGZhc3RlciBmb3IgZXhhY3QgSUQgbWF0Y2hlc1xuICB0cnkge1xuICAgIGNvbnN0IGRpcmVjdExvb2t1cCA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGU6IHsgaWQ6IHN0cmluZyB9IHwgbnVsbCB9PihcbiAgICAgIGBxdWVyeSBHZXRTaXRlQnlJZCgkaWQ6IElEISkgeyBzaXRlKGlkOiAkaWQpIHsgaWQgfSB9YCxcbiAgICAgIHsgaWQ6IHNpdGVRdWVyeSB9XG4gICAgKTtcblxuICAgIGlmIChkaXJlY3RMb29rdXAuc2l0ZSkge1xuICAgICAgcmV0dXJuIGRpcmVjdExvb2t1cC5zaXRlLmlkO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSUQgbG9va3VwIGZhaWxlZCwgZmFsbCB0aHJvdWdoIHRvIG5hbWUgc2VhcmNoXG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gZmV0Y2hpbmcgYWxsIHNpdGVzIGZvciBuYW1lIG1hdGNoaW5nXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4gfT4oYFxuICAgIHF1ZXJ5IHsgc2l0ZXMgeyBpZCBuYW1lIH0gfVxuICBgKTtcblxuICBjb25zdCBzaXRlID0gZGF0YS5zaXRlcy5maW5kKChzKSA9PiBzLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzaXRlUXVlcnkudG9Mb3dlckNhc2UoKSkpO1xuXG4gIGlmICghc2l0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlUXVlcnl9XCJgKTtcbiAgfVxuXG4gIHJldHVybiBzaXRlLmlkO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTa2lsbCBDb21tYW5kIChmb3IgQUkgYXNzaXN0YW50cylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2tpbGwnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgQ2xhdWRlIENvZGUgc2tpbGwgZm9yIEFJIGFzc2lzdGFudCBpbnRlZ3JhdGlvbicpXG4gIC5hcmd1bWVudCgnW2FjdGlvbl0nLCAnQWN0aW9uOiBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGgnLCAnaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGFjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc2tpbGxOYW1lID0gJ2x3cCc7XG4gICAgY29uc3QgdXNlclNraWxsc0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuY2xhdWRlJywgJ3NraWxscycsIHNraWxsTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZFNraWxsRGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ3NraWxsJyk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnaW5zdGFsbCc6IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgc2tpbGwgaXMgYnVuZGxlZFxuICAgICAgICBjb25zdCBidW5kbGVkU2tpbGxGaWxlID0gcGF0aC5qb2luKGJ1bmRsZWRTa2lsbERpciwgJ1NLSUxMLm1kJyk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhidW5kbGVkU2tpbGxGaWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1NraWxsIG5vdCBmb3VuZCBpbiBwYWNrYWdlLiBQbGVhc2UgcmVpbnN0YWxsIHRoZSBDTEkuJykpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB1c2VyIHNraWxscyBkaXJlY3RvcnlcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGguZGlybmFtZSh1c2VyU2tpbGxzRGlyKSkpIHtcbiAgICAgICAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgaW5zdGFsbGVkXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgU2tpbGwgYWxyZWFkeSBpbnN0YWxsZWQgYXQgJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgc3ltbGluayB0byBidW5kbGVkIHNraWxsXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZnMuc3ltbGlua1N5bmMoYnVuZGxlZFNraWxsRGlyLCB1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBJbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwgdG8gJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ2xhdWRlIENvZGUgd2lsbCBub3cgcmVjb2duaXplIGx3cCBjb21tYW5kcy4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVHJ5IGFza2luZzogXCJMaXN0IG15IExvY2FsIHNpdGVzXCIgb3IgXCJTdGFydCB0aGUgYmxvZyBzaXRlXCInKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIC8vIElmIHN5bWxpbmsgZmFpbHMsIGNvcHkgdGhlIGZpbGVzXG4gICAgICAgICAgZnMubWtkaXJTeW5jKHVzZXJTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhidW5kbGVkU2tpbGxGaWxlLCBwYXRoLmpvaW4odXNlclNraWxsc0RpciwgJ1NLSUxMLm1kJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICd1bmluc3RhbGwnOiB7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh1c2VyU2tpbGxzRGlyKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTa2lsbCBub3QgaW5zdGFsbGVkLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBpZiAoc3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5ybVN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoJ1VuaW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsLicpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYEZhaWxlZCB0byB1bmluc3RhbGw6ICR7ZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwYXRoJzoge1xuICAgICAgICBjb25zb2xlLmxvZyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFVua25vd24gYWN0aW9uOiAke2FjdGlvbn0uIFVzZSBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGguYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gQ2hlY2sgZm9yIHVwZGF0ZXMgKHNraXAgZm9yIHVwZGF0ZSBjb21tYW5kIGl0c2VsZiBhbmQgcXVpZXQgbW9kZSlcbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5jb25zdCBpc1VwZGF0ZUNvbW1hbmQgPSBhcmdzWzBdID09PSAndXBkYXRlJztcbmNvbnN0IGlzUXVpZXQgPSBhcmdzLmluY2x1ZGVzKCctLXF1aWV0JykgfHwgYXJncy5pbmNsdWRlcygnLS1qc29uJyk7XG5cbmlmICghaXNVcGRhdGVDb21tYW5kICYmICFpc1F1aWV0KSB7XG4gIC8vIEZpcmUgYW5kIGZvcmdldCAtIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgY2hlY2tGb3JVcGRhdGVzKCkuY2F0Y2goKCkgPT4ge30pO1xufVxuXG4vLyBQYXJzZSBhbmQgZXhlY3V0ZVxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
|
|
1525
|
+
// ===========================================
|
|
1526
|
+
// Main Entry Point
|
|
1527
|
+
// ===========================================
|
|
1528
|
+
async function main() {
|
|
1529
|
+
const args = process.argv.slice(2);
|
|
1530
|
+
const isUpdateCommand = args[0] === 'update';
|
|
1531
|
+
const isQuiet = args.includes('--quiet') || args.includes('--json');
|
|
1532
|
+
// Check for updates (skip for update command itself and quiet mode)
|
|
1533
|
+
if (!isUpdateCommand && !isQuiet) {
|
|
1534
|
+
// Fire and forget - don't block startup
|
|
1535
|
+
checkForUpdates().catch(() => { });
|
|
1536
|
+
}
|
|
1537
|
+
// Show opt-in prompt on first run (skip for certain commands)
|
|
1538
|
+
const skipPromptCommands = ['update', 'analytics', '--help', '-h', '--version', '-V'];
|
|
1539
|
+
const shouldSkipPrompt = args.length === 0 || skipPromptCommands.some((cmd) => args[0] === cmd);
|
|
1540
|
+
if (!shouldSkipPrompt && !analytics.hasBeenPrompted()) {
|
|
1541
|
+
await analytics.showOptInPrompt();
|
|
1542
|
+
}
|
|
1543
|
+
// Set up analytics tracking hooks
|
|
1544
|
+
// preAction receives (thisCommand, actionCommand) - we want actionCommand
|
|
1545
|
+
program.hook('preAction', (thisCommand, actionCommand) => {
|
|
1546
|
+
const commandPath = getCommandPath(actionCommand);
|
|
1547
|
+
analytics.startTracking(commandPath);
|
|
1548
|
+
});
|
|
1549
|
+
program.hook('postAction', () => {
|
|
1550
|
+
analytics.finishTracking(true);
|
|
1551
|
+
});
|
|
1552
|
+
// Parse and execute
|
|
1553
|
+
try {
|
|
1554
|
+
await program.parseAsync(process.argv);
|
|
1555
|
+
}
|
|
1556
|
+
catch (error) {
|
|
1557
|
+
analytics.finishTracking(false);
|
|
1558
|
+
throw error;
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
// Run main
|
|
1562
|
+
main().catch((error) => {
|
|
1563
|
+
console.error((0, formatters_1.formatError)(error.message || 'An unexpected error occurred'));
|
|
1564
|
+
process.exit(1);
|
|
1565
|
+
});
|
|
1566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0M7QUFDeEMscUNBQXlDO0FBQ3pDLDZDQU9zQjtBQUN0Qix1REFBeUM7QUFFekMsZUFBZTtBQUNmLE1BQU0sWUFBWSxHQUFHLGdDQUFnQyxDQUFDO0FBQ3RELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMzRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDdkUsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXO0FBRTlELE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0FBRTlCLHdDQUF3QztBQUN4QyxJQUFJLE1BQU0sR0FBeUIsSUFBSSxDQUFDO0FBV3hDOztHQUVHO0FBQ0gsU0FBUyxlQUFlO0lBQ3RCLElBQUksQ0FBQztRQUNILElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDJCQUEyQjtJQUM3QixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7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Q0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUM5QixTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0JBQW9CO0lBQ3BCLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxXQUFXO0FBQ1gsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7SUFDNUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLyoqXG4gKiBMb2NhbCBDTEkgKGx3cClcbiAqXG4gKiBDb21tYW5kLWxpbmUgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBMb2NhbCBXb3JkUHJlc3Mgc2l0ZXMuXG4gKiBDb25uZWN0cyBkaXJlY3RseSB0byBMb2NhbCdzIEdyYXBoUUwgc2VydmVyLlxuICovXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBib290c3RyYXAgfSBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0U2l0ZUxpc3QsXG4gIGZvcm1hdFNpdGVEZXRhaWwsXG4gIGZvcm1hdFN1Y2Nlc3MsXG4gIGZvcm1hdEVycm9yLFxuICBnZXRPdXRwdXRGb3JtYXQsXG4gIEZvcm1hdHRlck9wdGlvbnMsXG59IGZyb20gJy4vZm9ybWF0dGVycyc7XG5pbXBvcnQgKiBhcyBhbmFseXRpY3MgZnJvbSAnLi9hbmFseXRpY3MnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiBub3cgLSBjYWNoZS5sYXN0Q2hlY2sgPCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwpIHtcbiAgICBpZiAoY2FjaGUubGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihjYWNoZS5sYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2NhY2hlLmxhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGZXRjaCBsYXRlc3QgdmVyc2lvbiAobm9uLWJsb2NraW5nLCBmaXJlIGFuZCBmb3JnZXQgZm9yIGNhY2hlKVxuICBmZXRjaExhdGVzdFZlcnNpb24oKVxuICAgIC50aGVuKChsYXRlc3RWZXJzaW9uKSA9PiB7XG4gICAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICAgIGlmIChsYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblxceDFiWzMzbVVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufVxceDFiWzBtYCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgd2UncmUgY29ubmVjdGVkIHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29ubmVjdGVkKG9wdGlvbnM6IEZvcm1hdHRlck9wdGlvbnMpOiBQcm9taXNlPEdyYXBoUUxDbGllbnQ+IHtcbiAgaWYgKGNsaWVudCkge1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBjb25zdCBzcGlubmVyID0gb3B0aW9ucy5xdWlldCA/IG51bGwgOiBvcmEoJ0Nvbm5lY3RpbmcgdG8gTG9jYWwuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYm9vdHN0cmFwKHtcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIudGV4dCA9IHN0YXR1cztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQuY29ubmVjdGlvbkluZm8pIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ZhaWxlZCB0byBjb25uZWN0Jyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKHJlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBzcGlubmVyPy5zdWNjZWVkKCdDb25uZWN0ZWQgdG8gTG9jYWwnKTtcbiAgICBjbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudChyZXN1bHQuY29ubmVjdGlvbkluZm8pO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciB0byBydW4gc2l0ZS1zcGVjaWZpYyBjb21tYW5kcyB3aXRoIGNvbW1vbiBib2lsZXJwbGF0ZVxuICpcbiAqIEhhbmRsZXM6IGNvbm5lY3Rpb24sIHNwaW5uZXIsIHNpdGUgbG9va3VwLCBlcnJvciBmb3JtYXR0aW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1blNpdGVDb21tYW5kPFQ+KFxuICBzaXRlTmFtZTogc3RyaW5nLFxuICBjb25maWc6IHtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBzdWNjZXNzTWVzc2FnZT86IChyZXN1bHQ6IFQpID0+IHN0cmluZztcbiAgfSxcbiAgZXhlY3V0ZTogKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZUlkOiBzdHJpbmcpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIi4uLmApLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGVOYW1lKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKGdxbCwgc2l0ZUlkKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjb25maWcuc3VjY2Vzc01lc3NhZ2VcbiAgICAgID8gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlKHJlc3VsdClcbiAgICAgIDogYCR7Y29uZmlnLmFjdGlvbn0gXCIke3NpdGVOYW1lfVwiIGNvbXBsZXRlZGA7XG4gICAgc3Bpbm5lcj8uc3VjY2VlZChtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXI/LmZhaWwoYEZhaWxlZCB0byAke2NvbmZpZy5hY3Rpb24udG9Mb3dlckNhc2UoKX0gXCIke3NpdGVOYW1lfVwiYCk7XG4gICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2x3cCcpXG4gIC5kZXNjcmlwdGlvbignQ29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgTG9jYWwgV29yZFByZXNzIGRldmVsb3BtZW50JylcbiAgLnZlcnNpb24oQ1VSUkVOVF9WRVJTSU9OKVxuICAuZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMoKTtcblxuLy8gR2xvYmFsIG9wdGlvbnNcbnByb2dyYW1cbiAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHRzIGFzIEpTT04nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ01pbmltYWwgb3V0cHV0IChJRHMvbmFtZXMgb25seSknKVxuICAub3B0aW9uKCctLW5vLWNvbG9yJywgJ0Rpc2FibGUgY29sb3JlZCBvdXRwdXQnKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVXBkYXRlIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIENMSSB0byB0aGUgbGF0ZXN0IHZlcnNpb24nKVxuICAub3B0aW9uKCctLWNoZWNrJywgJ09ubHkgY2hlY2sgZm9yIHVwZGF0ZXMsIGRvIG5vdCBpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIGlmIChvcHRpb25zLmNoZWNrKSB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDaGVja2luZyBmb3IgdXBkYXRlcy4uLicpLnN0YXJ0KCk7XG4gICAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG5cbiAgICAgIGlmICghbGF0ZXN0VmVyc2lvbikge1xuICAgICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBjaGVjayBmb3IgdXBkYXRlcycpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5SdW4gXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtIHRvIGluc3RhbGxgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgWW91J3JlIG9uIHRoZSBsYXRlc3QgdmVyc2lvbiAoJHtDVVJSRU5UX1ZFUlNJT059KWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1VwZGF0aW5nIENMSS4uLicpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUnVuIG5wbSB1cGRhdGVcbiAgICAgIGV4ZWNTeW5jKGBucG0gdXBkYXRlIC1nICR7UEFDS0FHRV9OQU1FfWAsIHsgc3RkaW86ICdwaXBlJyB9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQ0xJIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgIC8vIENoZWNrIG5ldyB2ZXJzaW9uXG4gICAgICBjb25zdCBuZXdWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuVXBkYXRlZCB0byB2ZXJzaW9uICR7bmV3VmVyc2lvbn1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ1VwZGF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1RyeSBydW5uaW5nOiBucG0gdXBkYXRlIC1nICcgKyBQQUNLQUdFX05BTUUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaXRlcyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBzaXRlcyA9IHByb2dyYW0uY29tbWFuZCgnc2l0ZXMnKS5kZXNjcmlwdGlvbignTWFuYWdlIFdvcmRQcmVzcyBzaXRlcycpO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhbGwgV29yZFByZXNzIHNpdGVzJylcbiAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN0YXR1cyAocnVubmluZ3xzdG9wcGVkfGFsbCknLCAnYWxsJylcbiAgLmFjdGlvbihhc3luYyAoY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkb21haW46IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PjtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIHNpdGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICBkb21haW5cbiAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGxldCBzaXRlc1RvU2hvdyA9IGRhdGEuc2l0ZXMubWFwKChzKSA9PiAoe1xuICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICBkb21haW46IHMuZG9tYWluLFxuICAgICAgICBzdGF0dXM6IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhdGg6IHMucGF0aCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gRmlsdGVyIGJ5IHN0YXR1cyBpZiBzcGVjaWZpZWRcbiAgICAgIGlmIChjbWRPcHRpb25zLnN0YXR1cyAhPT0gJ2FsbCcpIHtcbiAgICAgICAgc2l0ZXNUb1Nob3cgPSBzaXRlc1RvU2hvdy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzID09PSBjbWRPcHRpb25zLnN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVMaXN0KHNpdGVzVG9TaG93LCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZ2V0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGRldGFpbGVkIGluZm8gYWJvdXQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEZpcnN0IGZpbmQgdGhlIHNpdGUgYnkgbmFtZSBvciBJRFxuICAgICAgY29uc3Qgc2l0ZXNEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgZm91bmRTaXRlID0gc2l0ZXNEYXRhLnNpdGVzLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLmlkID09PSBzaXRlIHx8IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGUudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG5cbiAgICAgIGlmICghZm91bmRTaXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFNpdGUgbm90IGZvdW5kOiBcIiR7c2l0ZX1cImApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogYW55IH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7XG4gICAgICAgICAgc2l0ZShpZDogJGlkKSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgZG9tYWluXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgaHR0cFBvcnRcbiAgICAgICAgICAgIHhkZWJ1Z0VuYWJsZWRcbiAgICAgICAgICAgIHNlcnZpY2VzIHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgICAgICAgIHJvbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhvc3RDb25uZWN0aW9ucyB7XG4gICAgICAgICAgICAgIGhvc3RJZFxuICAgICAgICAgICAgICByZW1vdGVTaXRlSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaWQ6IGZvdW5kU2l0ZS5pZCB9XG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGRhdGEuc2l0ZSwgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3N0YXJ0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnU3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFN0YXJ0ZWQgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGdxbC5tdXRhdGUoYG11dGF0aW9uKCRpZDogSUQhKSB7IHN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVzdGFydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Jlc3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnUmVzdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVzdGFydGVkIFwiJHtzaXRlfVwiYCB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBncWwubXV0YXRlKGBtdXRhdGlvbigkaWQ6IElEISkgeyByZXN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdvcGVuIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignT3BlbiBzaXRlIGluIGJyb3dzZXInKVxuICAub3B0aW9uKCctLWFkbWluJywgJ09wZW4gV1AgQWRtaW4gaW5zdGVhZCBvZiBmcm9udGVuZCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ09wZW5pbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYE9wZW5lZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlblNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaW5wdXQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmNyZWF0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5jcmVhdGVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gY3JlYXRlIHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgQ3JlYXRlZCBcIiR7ZGF0YS5jcmVhdGVTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuY3JlYXRlU2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0NyZWF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdkZWxldGUgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBzaXRlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLm9wdGlvbignLS1rZWVwLWZpbGVzJywgJ0tlZXAgc2l0ZSBmaWxlcyAob25seSByZW1vdmUgZnJvbSBMb2NhbCknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdEZWxldGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgRGVsZXRlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGRlbGV0ZVNpdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogRGVsZXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGRlbGV0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IGlkOiBzaXRlSWQsIHRyYXNoRmlsZXM6ICFjbWRPcHRpb25zLmtlZXBGaWxlcyB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmRlbGV0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgQ2xvbmluZ2AsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGBDbG9uZWQgdG8gXCIke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVOYW1lfVwiICgke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVJZH0pYCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNsb25lU2l0ZToge1xuICAgICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICAgIG5ld1NpdGVJZDogc3RyaW5nO1xuICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDbG9uZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBjbG9uZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG5ld1NpdGVJZCBuZXdTaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG5ld05hbWUgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jbG9uZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnRXhwb3J0aW5nJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydFNpdGUub3V0cHV0UGF0aH1gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0UGF0aCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXhwb3J0U2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBzaXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdpbXBvcnQgPHppcEZpbGU+JylcbiAgLmRlc2NyaXB0aW9uKCdJbXBvcnQgc2l0ZSBmcm9tIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU2l0ZSBuYW1lIChkZWZhdWx0cyB0byB6aXAgZmlsZW5hbWUpJylcbiAgLmFjdGlvbihhc3luYyAoemlwRmlsZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgSW1wb3J0aW5nIHNpdGUuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICBpbXBvcnRTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNpdGVJZDogc3RyaW5nOyBzaXRlTmFtZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgaW1wb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgc2l0ZUlkIHNpdGVOYW1lIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyB6aXBQYXRoOiB6aXBGaWxlLCBzaXRlTmFtZTogY21kT3B0aW9ucy5uYW1lIH0gfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmltcG9ydFNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5pbXBvcnRTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gaW1wb3J0IHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgSW1wb3J0ZWQgXCIke2RhdGEuaW1wb3J0U2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmltcG9ydFNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVuYW1lIDxzaXRlPiA8bmV3TmFtZT4nKVxuICAuZGVzY3JpcHRpb24oJ1JlbmFtZSBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuZXdOYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdSZW5hbWluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVuYW1lZCB0byBcIiR7bmV3TmFtZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogTWNwUmVuYW1lU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG1jcFJlbmFtZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1jcFJlbmFtZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5hbWUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3NsIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignVHJ1c3QgU1NMIGNlcnRpZmljYXRlIGZvciBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdUcnVzdGluZyBTU0wgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBTU0wgY2VydGlmaWNhdGUgdHJ1c3RlZCBmb3IgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0cnVzdFNzbDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBUcnVzdFNzbElucHV0ISkge1xuICAgICAgICAgIHRydXN0U3NsKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50cnVzdFNzbC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNoYW5nZVBocFZlcnNpb246IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IENoYW5nZVBocFZlcnNpb25JbnB1dCEpIHtcbiAgICAgICAgICBjaGFuZ2VQaHBWZXJzaW9uKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIHBocFZlcnNpb246IHZlcnNpb24gfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICAgIGBYZGVidWcgJHtkYXRhLnRvZ2dsZVhkZWJ1Zy5lbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICAvLyBJZiBubyBmbGFnIHNwZWNpZmllZCwgZ2V0IGN1cnJlbnQgc3RhdGUgYW5kIHRvZ2dsZVxuICAgICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmICh0YXJnZXRFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzaXRlRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGU6IHsgeGRlYnVnRW5hYmxlZDogYm9vbGVhbiB9IH0+KFxuICAgICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLFxuICAgICAgICAgICAgeyBpZDogc2l0ZUlkIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFRvZ2dsZVhkZWJ1Z0lucHV0ISkge1xuICAgICAgICAgIHRvZ2dsZVhkZWJ1ZyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZW5hYmxlZCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnRvZ2dsZVhkZWJ1Zy5lcnJvciB8fCAnRmFpbGVkIHRvIHRvZ2dsZSBYZGVidWcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xvZ3MgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgc2l0ZSBsb2dzJylcbiAgLm9wdGlvbignLXQsIC0tdHlwZSA8dHlwZT4nLCAnTG9nIHR5cGUgKHBocHxuZ2lueHxteXNxbCknLCAncGhwJylcbiAgLm9wdGlvbignLW4sIC0tbGluZXMgPG4+JywgJ051bWJlciBvZiBsaW5lcycsICc1MCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgIGdldFNpdGVMb2dzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGxvZ3M6IHN0cmluZ1tdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBHZXRTaXRlTG9nc0lucHV0ISkge1xuICAgICAgICAgIGdldFNpdGVMb2dzKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBsb2dzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGxvZ1R5cGU6IGNtZE9wdGlvbnMudHlwZSwgbGluZXM6IHBhcnNlSW50KGNtZE9wdGlvbnMubGluZXMsIDEwKSB9IH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTaXRlTG9ncy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTaXRlTG9ncy5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBsb2dzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFNpdGVMb2dzLmxvZ3MsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gbG9ncyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncy5mb3JFYWNoKChsaW5lKSA9PiBjb25zb2xlLmxvZyhsaW5lKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AtQ0xJIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnd3AgPHNpdGU+IFthcmdzLi4uXScpXG4gIC5kZXNjcmlwdGlvbignUnVuIFdQLUNMSSBjb21tYW5kcyBhZ2FpbnN0IGEgc2l0ZScpXG4gIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ0xvYWQgcGx1Z2lucyAobXVzdCBjb21lIGJlZm9yZSBzaXRlIG5hbWUpJylcbiAgLm9wdGlvbignLS13aXRoLXRoZW1lcycsICdMb2FkIHRoZW1lcyAobXVzdCBjb21lIGJlZm9yZSBzaXRlIG5hbWUpJylcbiAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gIC5wYXNzVGhyb3VnaE9wdGlvbnMoKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBhcmdzLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIHNpdGVJZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc2tpcFBsdWdpbnM6ICFjbWRPcHRpb25zLndpdGhQbHVnaW5zLFxuICAgICAgICBza2lwVGhlbWVzOiAhY21kT3B0aW9ucy53aXRoVGhlbWVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICB3cENsaTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogV3BDbGlJbnB1dCEpIHtcbiAgICAgICAgICB3cENsaShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0IGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dCB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEud3BDbGkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BDbGkuZXJyb3IgfHwgJ1dQLUNMSSBjb21tYW5kIGZhaWxlZCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhkYXRhLndwQ2xpLm91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5mbyBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luZm8nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgTG9jYWwgYXBwbGljYXRpb24gaW5mbycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEdldCBzaXRlcyBjb3VudCBhbmQgYmFzaWMgaW5mb1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIHN0YXR1cyB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBydW5uaW5nID0gZGF0YS5zaXRlcy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJykubGVuZ3RoO1xuICAgICAgY29uc3Qgc3RvcHBlZCA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncnVubmluZycpLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgdG90YWxTaXRlczogZGF0YS5zaXRlcy5sZW5ndGgsXG4gICAgICAgIHJ1bm5pbmdTaXRlczogcnVubmluZyxcbiAgICAgICAgc3RvcHBlZFNpdGVzOiBzdG9wcGVkLFxuICAgICAgICBncmFwaHFsRW5kcG9pbnQ6IGNsaWVudD8uWyd1cmwnXSB8fCAnY29ubmVjdGVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoaW5mbywgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VydmljZXMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzZXJ2aWNlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhdmFpbGFibGUgc2VydmljZSB2ZXJzaW9ucycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBsaXN0U2VydmljZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIHNlcnZpY2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfT47XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0U2VydmljZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2VydmljZXMgeyByb2xlIG5hbWUgdmVyc2lvbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0U2VydmljZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFNlcnZpY2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHN2YyBvZiBkYXRhLmxpc3RTZXJ2aWNlcy5zZXJ2aWNlcykge1xuICAgICAgICAgIGlmICghZ3JvdXBlZFtzdmMucm9sZV0pIGdyb3VwZWRbc3ZjLnJvbGVdID0gW107XG4gICAgICAgICAgZ3JvdXBlZFtzdmMucm9sZV0ucHVzaChgJHtzdmMudmVyc2lvbn0gKCR7c3ZjLm5hbWV9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbcm9sZSwgdmVyc2lvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiR7cm9sZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJvbGUuc2xpY2UoMSl9IFZlcnNpb25zOmApO1xuICAgICAgICAgIHZlcnNpb25zLmZvckVhY2goKHYpID0+IGNvbnNvbGUubG9nKGAgIC0gJHt2fWApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJsdWVwcmludHMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBibHVlcHJpbnRzID0gcHJvZ3JhbS5jb21tYW5kKCdibHVlcHJpbnRzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBibHVlcHJpbnRzJyk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIGJsdWVwcmludHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgYmx1ZXByaW50czogeyBzdWNjZXNzOiBib29sZWFuOyBibHVlcHJpbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGJsdWVwcmludHMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYmx1ZXByaW50cyB7IG5hbWUgfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEuYmx1ZXByaW50cy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5ibHVlcHJpbnRzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBibHVlcHJpbnRzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIGJsdWVwcmludHMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnQmx1ZXByaW50czonKTtcbiAgICAgICAgZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMuZm9yRWFjaCgoYikgPT4gY29uc29sZS5sb2coYCAgLSAke2IubmFtZX1gKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmx1ZXByaW50c1xuICAuY29tbWFuZCgnc2F2ZSA8c2l0ZT4gPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdTYXZlIGEgc2l0ZSBhcyBhIGJsdWVwcmludCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ1NhdmluZyBibHVlcHJpbnQgZnJvbScsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU2F2ZWQgYmx1ZXByaW50IFwiJHtuYW1lfVwiYCB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBzYXZlQmx1ZXByaW50OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBTYXZlQmx1ZXByaW50SW5wdXQhKSB7XG4gICAgICAgICAgc2F2ZUJsdWVwcmludChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBuYW1lIH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuc2F2ZUJsdWVwcmludC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuc2F2ZUJsdWVwcmludC5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgYmx1ZXByaW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdGFiYXNlIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGRiID0gcHJvZ3JhbS5jb21tYW5kKCdkYicpLmRlc2NyaXB0aW9uKCdEYXRhYmFzZSBvcGVyYXRpb25zJyk7XG5cbmRiLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBkYXRhYmFzZSB0byBTUUwgZmlsZScpXG4gIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8cGF0aD4nLCAnT3V0cHV0IGZpbGUgcGF0aCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ0V4cG9ydGluZyBkYXRhYmFzZSBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgZXhwb3J0RGF0YWJhc2U6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydERhdGFiYXNlLm91dHB1dFBhdGh9YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGV4cG9ydERhdGFiYXNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG91dHB1dFBhdGg6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydERhdGFiYXNlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0RGF0YWJhc2UoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG91dHB1dFBhdGggZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvdXRwdXRQYXRoOiBjbWRPcHRpb25zLm91dHB1dCB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmV4cG9ydERhdGFiYXNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5leHBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBkYXRhYmFzZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5kYi5jb21tYW5kKCdpbXBvcnQgPHNpdGU+IDxzcWxGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IFNRTCBmaWxlIGludG8gZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzcWxGaWxlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdJbXBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdEYXRhYmFzZSBpbXBvcnRlZCBzdWNjZXNzZnVsbHknIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIHNxbFBhdGg6IHNxbEZpbGUgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5pbXBvcnREYXRhYmFzZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuaW1wb3J0RGF0YWJhc2UuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgZGF0YWJhc2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuZGIuY29tbWFuZCgnYWRtaW5lciA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ09wZW4gQWRtaW5lciBkYXRhYmFzZSBVSScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ09wZW5pbmcgQWRtaW5lciBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ09wZW5lZCBBZG1pbmVyJyB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBncWwubXV0YXRlKFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuQWRtaW5lcklucHV0ISkge1xuICAgICAgICAgIG9wZW5BZG1pbmVyKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQgfSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhY2t1cHMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgYmFja3VwcyA9IHByb2dyYW0uY29tbWFuZCgnYmFja3VwcycpLmRlc2NyaXB0aW9uKCdDbG91ZCBiYWNrdXAgb3BlcmF0aW9ucycpO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIGJhY2t1cCBzZXJ2aWNlIGF2YWlsYWJpbGl0eScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBiYWNrdXBTdGF0dXM6IHtcbiAgICAgICAgICBhdmFpbGFibGU6IGJvb2xlYW47XG4gICAgICAgICAgZmVhdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgICAgZHJvcGJveDogYW55O1xuICAgICAgICAgIGdvb2dsZURyaXZlOiBhbnk7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBiYWNrdXBTdGF0dXMge1xuICAgICAgICAgICAgYXZhaWxhYmxlXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZFxuICAgICAgICAgICAgZHJvcGJveCB7IGF1dGhlbnRpY2F0ZWQgYWNjb3VudElkIGVtYWlsIH1cbiAgICAgICAgICAgIGdvb2dsZURyaXZlIHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJhY2t1cFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZGF0YS5iYWNrdXBTdGF0dXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXAgU3RhdHVzOmApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBBdmFpbGFibGU6ICR7c3RhdHVzLmF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgRmVhdHVyZSBFbmFibGVkOiAke3N0YXR1cy5mZWF0dXJlRW5hYmxlZCA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgaWYgKHN0YXR1cy5kcm9wYm94KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgXFxuICBEcm9wYm94OiAke3N0YXR1cy5kcm9wYm94LmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5kcm9wYm94LmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMuZ29vZ2xlRHJpdmUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAgIEdvb2dsZSBEcml2ZTogJHtzdGF0dXMuZ29vZ2xlRHJpdmUuYXV0aGVudGljYXRlZCA/IGBDb25uZWN0ZWQgKCR7c3RhdHVzLmdvb2dsZURyaXZlLmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnbGlzdCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYmFja3VwcyBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGxpc3RCYWNrdXBzOiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBiYWNrdXBzOiBBcnJheTx7IHNuYXBzaG90SWQ6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IG5vdGU6IHN0cmluZyB9PjtcbiAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchKSB7XG4gICAgICAgICAgbGlzdEJhY2t1cHMoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBiYWNrdXBzIHsgc25hcHNob3RJZCB0aW1lc3RhbXAgbm90ZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0QmFja3Vwcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5saXN0QmFja3Vwcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3QgYmFja3VwcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGlzdEJhY2t1cHMuYmFja3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIGJhY2t1cHMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQmFja3VwcyAoJHtjbWRPcHRpb25zLnByb3ZpZGVyfSk6YCk7XG4gICAgICAgIGZvciAoY29uc3QgYmFja3VwIG9mIGRhdGEubGlzdEJhY2t1cHMuYmFja3Vwcykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShiYWNrdXAudGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7YmFja3VwLnNuYXBzaG90SWR9IC0gJHtkYXRlfSR7YmFja3VwLm5vdGUgPyBgIC0gJHtiYWNrdXAubm90ZX1gIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdjcmVhdGUgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy1uLCAtLW5vdGUgPG5vdGU+JywgJ0JhY2t1cCBub3RlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnQ3JlYXRpbmcgYmFja3VwIGZvcicsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjcmVhdGVCYWNrdXA6IHsgc25hcHNob3RJZDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgQmFja3VwIGNyZWF0ZWQ6ICR7ZGF0YS5jcmVhdGVCYWNrdXAuc25hcHNob3RJZH1gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgY3JlYXRlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNuYXBzaG90SWQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJG5vdGU6IFN0cmluZykge1xuICAgICAgICAgIGNyZWF0ZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIG5vdGU6ICRub3RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzIHNuYXBzaG90SWQgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBub3RlOiBjbWRPcHRpb25zLm5vdGUgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuY3JlYXRlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jcmVhdGVCYWNrdXAuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3Jlc3RvcmUgPHNpdGU+IDxzbmFwc2hvdElkPicpXG4gIC5kZXNjcmlwdGlvbignUmVzdG9yZSBmcm9tIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUmVzdG9yaW5nIGJhY2t1cCBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcmVzdG9yZUJhY2t1cDogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGRhdGEucmVzdG9yZUJhY2t1cC5tZXNzYWdlIHx8ICdCYWNrdXAgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHJlc3RvcmVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICByZXN0b3JlQmFja3VwKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlciwgc25hcHNob3RJZDogJHNuYXBzaG90SWQsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5yZXN0b3JlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5yZXN0b3JlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPiA8c25hcHNob3RJZD4nKVxuICAuZGVzY3JpcHRpb24oJ0RlbGV0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnRGVsZXRpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnQmFja3VwIGRlbGV0ZWQnIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBkZWxldGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5kZWxldGVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AgRW5naW5lIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IHdwZSA9IHByb2dyYW0uY29tbWFuZCgnd3BlJykuZGVzY3JpcHRpb24oJ1dQIEVuZ2luZSBzeW5jIG9wZXJhdGlvbnMnKTtcblxud3BlXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgd3BlU3RhdHVzOiB7XG4gICAgICAgICAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICAgIGFjY291bnROYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICB3cGVTdGF0dXMge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZFxuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICAgIGFjY291bnRJZFxuICAgICAgICAgICAgYWNjb3VudE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS53cGVTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEud3BlU3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBDb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBFbWFpbDogJHtzdGF0dXMuZW1haWx9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQWNjb3VudDogJHtzdGF0dXMuYWNjb3VudE5hbWV9ICgke3N0YXR1cy5hY2NvdW50SWR9KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5XUCBFbmdpbmU6IE5vdCBjb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBSdW4gJ2x3cCB3cGUgbG9naW4nIHRvIGF1dGhlbnRpY2F0ZWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignQXV0aGVudGljYXRlIHdpdGggV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBPcGVuaW5nIFdQIEVuZ2luZSBsb2dpbi4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgIHdwZUF1dGhlbnRpY2F0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlbWFpbDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICB9PihgXG4gICAgICAgIG11dGF0aW9uIHtcbiAgICAgICAgICB3cGVBdXRoZW50aWNhdGUgeyBzdWNjZXNzIGVtYWlsIG1lc3NhZ2UgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLndwZUF1dGhlbnRpY2F0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BlQXV0aGVudGljYXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gYXV0aGVudGljYXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYEF1dGhlbnRpY2F0ZWQgYXMgJHtkYXRhLndwZUF1dGhlbnRpY2F0ZS5lbWFpbH1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbG9nb3V0JylcbiAgLmRlc2NyaXB0aW9uKCdMb2dvdXQgZnJvbSBXUCBFbmdpbmUnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYExvZ2dpbmcgb3V0Li4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgd3BlTG9nb3V0OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbiB7XG4gICAgICAgICAgd3BlTG9nb3V0IHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEud3BlTG9nb3V0LnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnTG9nb3V0IGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BlTG9nb3V0LmVycm9yIHx8ICdGYWlsZWQgdG8gbG9nb3V0JykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoJ0xvZ2dlZCBvdXQgZnJvbSBXUCBFbmdpbmUnKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdMb2dvdXQgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3NpdGVzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IFdQIEVuZ2luZSBzaXRlcycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBsaXN0V3BlU2l0ZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+O1xuICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuICAgICAgfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgbGlzdFdwZVNpdGVzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIHNpdGVzIHsgaWQgbmFtZSBlbnZpcm9ubWVudCBwcmltYXJ5RG9tYWluIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLmxpc3RXcGVTaXRlcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5saXN0V3BlU2l0ZXMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IHNpdGVzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIFdQIEVuZ2luZSBzaXRlcyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5XUCBFbmdpbmUgU2l0ZXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgc2l0ZSBvZiBkYXRhLmxpc3RXcGVTaXRlcy5zaXRlcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7c2l0ZS5uYW1lfSAoJHtzaXRlLmVudmlyb25tZW50fSkgLSAke3NpdGUucHJpbWFyeURvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbGluayA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgV1AgRW5naW5lIGNvbm5lY3Rpb24gZm9yIGEgbG9jYWwgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0V3BlTGluazoge1xuICAgICAgICAgIGxpbmtlZDogYm9vbGVhbjtcbiAgICAgICAgICBzaXRlTmFtZTogc3RyaW5nO1xuICAgICAgICAgIGNvbm5lY3Rpb25zOiBBcnJheTx7XG4gICAgICAgICAgICByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZztcbiAgICAgICAgICAgIGluc3RhbGxOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAgICAgICAgICAgcHJpbWFyeURvbWFpbjogc3RyaW5nO1xuICAgICAgICAgIH0+O1xuICAgICAgICB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgIGxpbmtlZFxuICAgICAgICAgICAgc2l0ZU5hbWVcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIGluc3RhbGxOYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBzaXRlSWQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0V3BlTGluaywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRhdGEuZ2V0V3BlTGluaztcbiAgICAgICAgaWYgKCFsaW5rLmxpbmtlZCB8fCBsaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBXUCBFbmdpbmUgQ29ubmVjdGlvbnM6YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uIG9mIGxpbmsuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29ubi5pbnN0YWxsTmFtZX0gKCR7Y29ubi5lbnZpcm9ubWVudH0pIC0gJHtjb25uLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElEOiAke2Nvbm4ucmVtb3RlSW5zdGFsbElkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVzaCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1c2ggbG9jYWwgc2l0ZSB0byBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUHVzaGluZyB0byBXUCBFbmdpbmUnLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVzaFRvV3BlOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+XG4gICAgICAgICAgZGF0YS5wdXNoVG9XcGUubWVzc2FnZSB8fCAnUHVzaGVkIHRvIFdQIEVuZ2luZScsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgICAgIGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgICB9PihcbiAgICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgICAgICAgICB7IHNpdGVJZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHB1c2hUb1dwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGxvY2FsU2l0ZUlkOiBJRCEsICRyZW1vdGVJbnN0YWxsSWQ6IElEISwgJGluY2x1ZGVTcWw6IEJvb2xlYW4sICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgcHVzaFRvV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG9jYWxTaXRlSWQ6IHNpdGVJZCxcbiAgICAgICAgICAgIHJlbW90ZUluc3RhbGxJZCxcbiAgICAgICAgICAgIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEucHVzaFRvV3BlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5wdXNoVG9XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdXNoIHRvIFdQIEVuZ2luZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1bGwgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdWxsIGZyb20gV1AgRW5naW5lIHRvIGxvY2FsIHNpdGUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnUHVsbGluZyBmcm9tIFdQIEVuZ2luZSBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVsbEZyb21XcGU6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBkYXRhLnB1bGxGcm9tV3BlLm1lc3NhZ2UgfHwgJ1B1bGxlZCBmcm9tIFdQIEVuZ2luZScsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgICAgIGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgICB9PihcbiAgICAgICAgICAgIGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgICAgICAgICB7IHNpdGVJZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIHB1bGxGcm9tV3BlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbikge1xuICAgICAgICAgIHB1bGxGcm9tV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGxvY2FsU2l0ZUlkOiBzaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogY21kT3B0aW9ucy5zcWwgfHwgZmFsc2UgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEucHVsbEZyb21XcGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1bGxGcm9tV3BlLmVycm9yIHx8ICdGYWlsZWQgdG8gcHVsbCBmcm9tIFdQIEVuZ2luZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2hpc3RvcnkgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHN5bmMgaGlzdG9yeSBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLWwsIC0tbGltaXQgPG4+JywgJ051bWJlciBvZiBldmVudHMgdG8gc2hvdycsICcxMCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0U3luY0hpc3Rvcnk6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIGV2ZW50czogQXJyYXk8e1xuICAgICAgICAgICAgcmVtb3RlSW5zdGFsbE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJGxpbWl0OiBJbnQpIHtcbiAgICAgICAgICBnZXRTeW5jSGlzdG9yeShzaXRlSWQ6ICRzaXRlSWQsIGxpbWl0OiAkbGltaXQpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGV2ZW50cyB7IHJlbW90ZUluc3RhbGxOYW1lIHRpbWVzdGFtcCBkaXJlY3Rpb24gc3RhdHVzIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICB7IHNpdGVJZCwgbGltaXQ6IHBhcnNlSW50KGNtZE9wdGlvbnMubGltaXQsIDEwKSB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEuZ2V0U3luY0hpc3Rvcnkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuZ2V0U3luY0hpc3RvcnkuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgc3luYyBoaXN0b3J5JykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vIHN5bmMgaGlzdG9yeSBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5TeW5jIEhpc3Rvcnk6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZXZlbnQudGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgIGNvbnN0IGFycm93ID0gZXZlbnQuZGlyZWN0aW9uID09PSAncHVzaCcgPyAn4oaSJyA6ICfihpAnO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7ZGF0ZX0gJHthcnJvd30gJHtldmVudC5yZW1vdGVJbnN0YWxsTmFtZX0gKCR7ZXZlbnQuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnZGlmZiA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgZmlsZSBjaGFuZ2VzIGJldHdlZW4gbG9jYWwgYW5kIFdQIEVuZ2luZScpXG4gIC5vcHRpb24oJy1kLCAtLWRpcmVjdGlvbiA8ZGlyPicsICdEaXJlY3Rpb24gKHB1c2h8cHVsbCknLCAncHVzaCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgZ2V0U2l0ZUNoYW5nZXM6IHtcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICAgIGFkZGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjtcbiAgICAgICAgICBtb2RpZmllZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47XG4gICAgICAgICAgZGVsZXRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47XG4gICAgICAgICAgdG90YWxDaGFuZ2VzOiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihcbiAgICAgICAgYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRkaXJlY3Rpb246IFN0cmluZykge1xuICAgICAgICAgIGdldFNpdGVDaGFuZ2VzKHNpdGVJZDogJHNpdGVJZCwgZGlyZWN0aW9uOiAkZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBhZGRlZCB7IHBhdGggfVxuICAgICAgICAgICAgbW9kaWZpZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIGRlbGV0ZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlc1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgc2l0ZUlkLCBkaXJlY3Rpb246IGNtZE9wdGlvbnMuZGlyZWN0aW9uIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTaXRlQ2hhbmdlcy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTaXRlQ2hhbmdlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBjaGFuZ2VzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFNpdGVDaGFuZ2VzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZGF0YS5nZXRTaXRlQ2hhbmdlcztcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkNoYW5nZXMgdG8gJHtjbWRPcHRpb25zLmRpcmVjdGlvbn0gKCR7Y2hhbmdlcy50b3RhbENoYW5nZXN9IHRvdGFsKTpgKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgQWRkZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5hZGRlZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgICsgJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLm1vZGlmaWVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBNb2RpZmllZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLm1vZGlmaWVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgfiAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgRGVsZXRlZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLmRlbGV0ZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICAtICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50b3RhbENoYW5nZXMgPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnICBObyBjaGFuZ2VzIGRldGVjdGVkLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQW5hbHl0aWNzIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGFuYWx5dGljc0NtZCA9IHByb2dyYW0uY29tbWFuZCgnYW5hbHl0aWNzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBhbm9ueW1vdXMgdXNhZ2UgYW5hbHl0aWNzJyk7XG5cbmFuYWx5dGljc0NtZFxuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGFuYWx5dGljcyBzdGF0dXMnKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhbmFseXRpY3MuZ2V0U3RhdHVzKCk7XG4gICAgY29uc29sZS5sb2coYEFuYWx5dGljczogJHtzdGF0dXMuZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCk7XG4gICAgY29uc29sZS5sb2coYFRvdGFsIGV2ZW50cyBzdG9yZWQ6ICR7c3RhdHVzLmV2ZW50Q291bnR9YCk7XG4gICAgY29uc29sZS5sb2coYEluc3RhbGxhdGlvbiBJRDogJHtzdGF0dXMuaW5zdGFsbGF0aW9uSWR9YCk7XG4gIH0pO1xuXG5hbmFseXRpY3NDbWRcbiAgLmNvbW1hbmQoJ29uJylcbiAgLmRlc2NyaXB0aW9uKCdFbmFibGUgYW5hbHl0aWNzJylcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgYW5hbHl0aWNzLnNldEFuYWx5dGljc0VuYWJsZWQodHJ1ZSk7XG4gICAgY29uc29sZS5sb2coJ0FuYWx5dGljcyBlbmFibGVkLiBUaGFuayB5b3UgZm9yIGhlbHBpbmcgaW1wcm92ZSBsd3AhJyk7XG4gIH0pO1xuXG5hbmFseXRpY3NDbWRcbiAgLmNvbW1hbmQoJ29mZicpXG4gIC5kZXNjcmlwdGlvbignRGlzYWJsZSBhbmFseXRpY3MnKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBhbmFseXRpY3Muc2V0QW5hbHl0aWNzRW5hYmxlZChmYWxzZSk7XG4gICAgY29uc29sZS5sb2coJ0FuYWx5dGljcyBkaXNhYmxlZC4gTm8gZGF0YSB3aWxsIGJlIGNvbGxlY3RlZC4nKTtcbiAgfSk7XG5cbmFuYWx5dGljc0NtZFxuICAuY29tbWFuZCgnc2hvdycpXG4gIC5kZXNjcmlwdGlvbignVmlldyB5b3VyIGFuYWx5dGljcyBkYXRhJylcbiAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCBhcyBKU09OJylcbiAgLmFjdGlvbigob3B0aW9ucykgPT4ge1xuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGFuYWx5dGljcy5yZWFkRXZlbnRzKCk7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShldmVudHMsIG51bGwsIDIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYW5hbHl0aWNzLmdldFN1bW1hcnkoKSk7XG4gICAgfVxuICB9KTtcblxuYW5hbHl0aWNzQ21kXG4gIC5jb21tYW5kKCdyZXNldCcpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGFsbCBhbmFseXRpY3MgZGF0YSBhbmQgcmVnZW5lcmF0ZSBpbnN0YWxsYXRpb24gSUQnKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCBjb3VudCA9IGFuYWx5dGljcy5nZXRTdGF0dXMoKS5ldmVudENvdW50O1xuICAgIGFuYWx5dGljcy5yZXNldEFuYWx5dGljcygpO1xuICAgIGNvbnNvbGUubG9nKGBEZWxldGVkICR7Y291bnR9IGxvY2FsIGV2ZW50cy4gSW5zdGFsbGF0aW9uIElEIHJlZ2VuZXJhdGVkLiBBbmFseXRpY3MgZGlzYWJsZWQuYCk7XG4gIH0pO1xuXG5hbmFseXRpY3NDbWRcbiAgLmNvbW1hbmQoJ2Rhc2hib2FyZCcpXG4gIC5kZXNjcmlwdGlvbignT3BlbiB5b3VyIHBlcnNvbmFsIGFuYWx5dGljcyBkYXNoYm9hcmQnKVxuICAuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCB1cmwgPSBhbmFseXRpY3MuZ2V0RGFzaGJvYXJkVXJsKCk7XG4gICAgY29uc29sZS5sb2coJ1lvdXIgYW5hbHl0aWNzIGRhc2hib2FyZCAoZXhwaXJlcyBpbiAxIGhvdXIpOicpO1xuICAgIGNvbnNvbGUubG9nKHVybCk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIZWxwZXIgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmluZCBzaXRlIElEIGJ5IG5hbWUgb3IgSURcbiAqXG4gKiBPcHRpbWl6YXRpb246IEZpcnN0IHRyaWVzIGRpcmVjdCBJRCBsb29rdXAgKE8oMSkpIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG9cbiAqIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZyAoTyhuKSkuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXByb3Zlc1xuICogcGVyZm9ybWFuY2Ugd2hlbiB1c2VycyBzcGVjaWZ5IHNpdGUgSURzIGRpcmVjdGx5LlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kU2l0ZUlkKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZVF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBUcnkgZGlyZWN0IElEIGxvb2t1cCBmaXJzdCAtIG11Y2ggZmFzdGVyIGZvciBleGFjdCBJRCBtYXRjaGVzXG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0TG9va3VwID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyBpZDogc3RyaW5nIH0gfCBudWxsIH0+KFxuICAgICAgYHF1ZXJ5IEdldFNpdGVCeUlkKCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyBpZCB9IH1gLFxuICAgICAgeyBpZDogc2l0ZVF1ZXJ5IH1cbiAgICApO1xuXG4gICAgaWYgKGRpcmVjdExvb2t1cC5zaXRlKSB7XG4gICAgICByZXR1cm4gZGlyZWN0TG9va3VwLnNpdGUuaWQ7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJRCBsb29rdXAgZmFpbGVkLCBmYWxsIHRocm91Z2ggdG8gbmFtZSBzZWFyY2hcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBmZXRjaGluZyBhbGwgc2l0ZXMgZm9yIG5hbWUgbWF0Y2hpbmdcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB9PihgXG4gICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gIGApO1xuXG4gIGNvbnN0IHNpdGUgPSBkYXRhLnNpdGVzLmZpbmQoKHMpID0+IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGVRdWVyeS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgaWYgKCFzaXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTaXRlIG5vdCBmb3VuZDogXCIke3NpdGVRdWVyeX1cImApO1xuICB9XG5cbiAgcmV0dXJuIHNpdGUuaWQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNraWxsIENvbW1hbmQgKGZvciBBSSBhc3Npc3RhbnRzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdza2lsbCcpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBDbGF1ZGUgQ29kZSBza2lsbCBmb3IgQUkgYXNzaXN0YW50IGludGVncmF0aW9uJylcbiAgLmFyZ3VtZW50KCdbYWN0aW9uXScsICdBY3Rpb246IGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aCcsICdpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAoYWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBza2lsbE5hbWUgPSAnbHdwJztcbiAgICBjb25zdCB1c2VyU2tpbGxzRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5jbGF1ZGUnLCAnc2tpbGxzJywgc2tpbGxOYW1lKTtcbiAgICBjb25zdCBidW5kbGVkU2tpbGxEaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnc2tpbGwnKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdpbnN0YWxsJzoge1xuICAgICAgICAvLyBDaGVjayBpZiBza2lsbCBpcyBidW5kbGVkXG4gICAgICAgIGNvbnN0IGJ1bmRsZWRTa2lsbEZpbGUgPSBwYXRoLmpvaW4oYnVuZGxlZFNraWxsRGlyLCAnU0tJTEwubWQnKTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGJ1bmRsZWRTa2lsbEZpbGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcignU2tpbGwgbm90IGZvdW5kIGluIHBhY2thZ2UuIFBsZWFzZSByZWluc3RhbGwgdGhlIENMSS4nKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVzZXIgc2tpbGxzIGRpcmVjdG9yeVxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUodXNlclNraWxsc0RpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModXNlclNraWxsc0RpcikpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBTa2lsbCBhbHJlYWR5IGluc3RhbGxlZCBhdCAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBzeW1saW5rIHRvIGJ1bmRsZWQgc2tpbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5zeW1saW5rU3luYyhidW5kbGVkU2tpbGxEaXIsIHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdUcnkgYXNraW5nOiBcIkxpc3QgbXkgTG9jYWwgc2l0ZXNcIiBvciBcIlN0YXJ0IHRoZSBibG9nIHNpdGVcIicpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgc3ltbGluayBmYWlscywgY29weSB0aGUgZmlsZXNcbiAgICAgICAgICBmcy5ta2RpclN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGJ1bmRsZWRTa2lsbEZpbGUsIHBhdGguam9pbih1c2VyU2tpbGxzRGlyLCAnU0tJTEwubWQnKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgSW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsIHRvICR7dXNlclNraWxsc0Rpcn1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbkNsYXVkZSBDb2RlIHdpbGwgbm93IHJlY29nbml6ZSBsd3AgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3VuaW5zdGFsbCc6IHtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1NraWxsIG5vdCBpbnN0YWxsZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gZnMubHN0YXRTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModXNlclNraWxsc0Rpcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLnJtU3luYyh1c2VyU2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcygnVW5pbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwuJykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgRmFpbGVkIHRvIHVuaW5zdGFsbDogJHtlcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BhdGgnOiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgVW5rbm93biBhY3Rpb246ICR7YWN0aW9ufS4gVXNlIGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aC5gKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vKipcbiAqIEdldCBjb21tYW5kIHBhdGggZm9yIGFuYWx5dGljcyAoZS5nLiwgXCJzaXRlcy5saXN0XCIsIFwid3BcIilcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tbWFuZFBhdGgoY29tbWFuZDogQ29tbWFuZCk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudDogQ29tbWFuZCB8IG51bGwgPSBjb21tYW5kO1xuICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50Lm5hbWUoKSAhPT0gJ2x3cCcpIHtcbiAgICBwYXJ0cy51bnNoaWZ0KGN1cnJlbnQubmFtZSgpKTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJy4nKSB8fCAndW5rbm93bic7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1haW4gRW50cnkgUG9pbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgY29uc3QgaXNVcGRhdGVDb21tYW5kID0gYXJnc1swXSA9PT0gJ3VwZGF0ZSc7XG4gIGNvbnN0IGlzUXVpZXQgPSBhcmdzLmluY2x1ZGVzKCctLXF1aWV0JykgfHwgYXJncy5pbmNsdWRlcygnLS1qc29uJyk7XG5cbiAgLy8gQ2hlY2sgZm9yIHVwZGF0ZXMgKHNraXAgZm9yIHVwZGF0ZSBjb21tYW5kIGl0c2VsZiBhbmQgcXVpZXQgbW9kZSlcbiAgaWYgKCFpc1VwZGF0ZUNvbW1hbmQgJiYgIWlzUXVpZXQpIHtcbiAgICAvLyBGaXJlIGFuZCBmb3JnZXQgLSBkb24ndCBibG9jayBzdGFydHVwXG4gICAgY2hlY2tGb3JVcGRhdGVzKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgLy8gU2hvdyBvcHQtaW4gcHJvbXB0IG9uIGZpcnN0IHJ1biAoc2tpcCBmb3IgY2VydGFpbiBjb21tYW5kcylcbiAgY29uc3Qgc2tpcFByb21wdENvbW1hbmRzID0gWyd1cGRhdGUnLCAnYW5hbHl0aWNzJywgJy0taGVscCcsICctaCcsICctLXZlcnNpb24nLCAnLVYnXTtcbiAgY29uc3Qgc2hvdWxkU2tpcFByb21wdCA9IGFyZ3MubGVuZ3RoID09PSAwIHx8IHNraXBQcm9tcHRDb21tYW5kcy5zb21lKChjbWQpID0+IGFyZ3NbMF0gPT09IGNtZCk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJvbXB0ICYmICFhbmFseXRpY3MuaGFzQmVlblByb21wdGVkKCkpIHtcbiAgICBhd2FpdCBhbmFseXRpY3Muc2hvd09wdEluUHJvbXB0KCk7XG4gIH1cblxuICAvLyBTZXQgdXAgYW5hbHl0aWNzIHRyYWNraW5nIGhvb2tzXG4gIC8vIHByZUFjdGlvbiByZWNlaXZlcyAodGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmQpIC0gd2Ugd2FudCBhY3Rpb25Db21tYW5kXG4gIHByb2dyYW0uaG9vaygncHJlQWN0aW9uJywgKHRoaXNDb21tYW5kLCBhY3Rpb25Db21tYW5kKSA9PiB7XG4gICAgY29uc3QgY29tbWFuZFBhdGggPSBnZXRDb21tYW5kUGF0aChhY3Rpb25Db21tYW5kKTtcbiAgICBhbmFseXRpY3Muc3RhcnRUcmFja2luZyhjb21tYW5kUGF0aCk7XG4gIH0pO1xuXG4gIHByb2dyYW0uaG9vaygncG9zdEFjdGlvbicsICgpID0+IHtcbiAgICBhbmFseXRpY3MuZmluaXNoVHJhY2tpbmcodHJ1ZSk7XG4gIH0pO1xuXG4gIC8vIFBhcnNlIGFuZCBleGVjdXRlXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYW5hbHl0aWNzLmZpbmlzaFRyYWNraW5nKGZhbHNlKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vLyBSdW4gbWFpblxubWFpbigpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnKSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuIl19
|