@local-labs-jpollock/local-cli 0.0.3 → 0.0.5
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/lib/main/index.js +12 -10
- package/addon-dist/lib/main/mcp/tools/exportDatabase.js +1 -1
- package/addon-dist/lib/main/mcp/tools/helpers.js +2 -7
- package/addon-dist/lib/main/mcp/tools/importDatabase.js +1 -1
- package/addon-dist/lib/main/mcp/tools/renameSite.js +1 -1
- package/addon-dist/lib/main/mcp/tools/wpCli.js +1 -1
- package/addon-dist/lib/renderer/index.js +3 -2
- package/addon-dist/package.json +1 -1
- package/lib/bootstrap/index.js +1 -1
- package/lib/client/GraphQLClient.js +1 -1
- package/lib/index.js +69 -26
- package/package.json +1 -1
- package/skill/SKILL.md +40 -2
package/lib/index.js
CHANGED
|
@@ -91,10 +91,10 @@ function writeUpdateCache(cache) {
|
|
|
91
91
|
async function fetchLatestVersion() {
|
|
92
92
|
try {
|
|
93
93
|
const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {
|
|
94
|
-
headers: {
|
|
94
|
+
headers: { Accept: 'application/json' },
|
|
95
95
|
});
|
|
96
96
|
if (response.ok) {
|
|
97
|
-
const data = await response.json();
|
|
97
|
+
const data = (await response.json());
|
|
98
98
|
return data.version;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -124,7 +124,7 @@ async function checkForUpdates() {
|
|
|
124
124
|
const cache = readUpdateCache();
|
|
125
125
|
const now = Date.now();
|
|
126
126
|
// Skip if checked recently
|
|
127
|
-
if (cache &&
|
|
127
|
+
if (cache && now - cache.lastCheck < UPDATE_CHECK_INTERVAL) {
|
|
128
128
|
if (cache.latestVersion && isNewerVersion(cache.latestVersion, CURRENT_VERSION)) {
|
|
129
129
|
console.log(`\n\x1b[33mUpdate available: ${CURRENT_VERSION} → ${cache.latestVersion}\x1b[0m`);
|
|
130
130
|
console.log(`Run: \x1b[36mlwp update\x1b[0m\n`);
|
|
@@ -132,13 +132,15 @@ async function checkForUpdates() {
|
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
134
|
// Fetch latest version (non-blocking, fire and forget for cache)
|
|
135
|
-
fetchLatestVersion()
|
|
135
|
+
fetchLatestVersion()
|
|
136
|
+
.then((latestVersion) => {
|
|
136
137
|
writeUpdateCache({ lastCheck: now, latestVersion });
|
|
137
138
|
if (latestVersion && isNewerVersion(latestVersion, CURRENT_VERSION)) {
|
|
138
139
|
console.log(`\n\x1b[33mUpdate available: ${CURRENT_VERSION} → ${latestVersion}\x1b[0m`);
|
|
139
140
|
console.log(`Run: \x1b[36mlwp update\x1b[0m\n`);
|
|
140
141
|
}
|
|
141
|
-
})
|
|
142
|
+
})
|
|
143
|
+
.catch(() => {
|
|
142
144
|
// Silently ignore update check failures
|
|
143
145
|
});
|
|
144
146
|
}
|
|
@@ -342,7 +344,9 @@ sites
|
|
|
342
344
|
.description('Start a site')
|
|
343
345
|
.action(async (site) => {
|
|
344
346
|
await runSiteCommand(site, { action: 'Starting', successMessage: () => `Started "${site}"` }, async (gql, siteId) => {
|
|
345
|
-
return gql.mutate(`mutation($id: ID!) { startSite(id: $id) { id status } }`, {
|
|
347
|
+
return gql.mutate(`mutation($id: ID!) { startSite(id: $id) { id status } }`, {
|
|
348
|
+
id: siteId,
|
|
349
|
+
});
|
|
346
350
|
});
|
|
347
351
|
});
|
|
348
352
|
sites
|
|
@@ -358,7 +362,9 @@ sites
|
|
|
358
362
|
.description('Restart a site')
|
|
359
363
|
.action(async (site) => {
|
|
360
364
|
await runSiteCommand(site, { action: 'Restarting', successMessage: () => `Restarted "${site}"` }, async (gql, siteId) => {
|
|
361
|
-
return gql.mutate(`mutation($id: ID!) { restartSite(id: $id) { id status } }`, {
|
|
365
|
+
return gql.mutate(`mutation($id: ID!) { restartSite(id: $id) { id status } }`, {
|
|
366
|
+
id: siteId,
|
|
367
|
+
});
|
|
362
368
|
});
|
|
363
369
|
});
|
|
364
370
|
sites
|
|
@@ -441,7 +447,10 @@ sites
|
|
|
441
447
|
.command('clone <site> <newName>')
|
|
442
448
|
.description('Clone a site')
|
|
443
449
|
.action(async (site, newName) => {
|
|
444
|
-
await runSiteCommand(site, {
|
|
450
|
+
await runSiteCommand(site, {
|
|
451
|
+
action: `Cloning`,
|
|
452
|
+
successMessage: (data) => `Cloned to "${data.cloneSite.newSiteName}" (${data.cloneSite.newSiteId})`,
|
|
453
|
+
}, async (gql, siteId) => {
|
|
445
454
|
const data = await gql.mutate(`
|
|
446
455
|
mutation($input: CloneSiteInput!) {
|
|
447
456
|
cloneSite(input: $input) { success newSiteId newSiteName error }
|
|
@@ -458,7 +467,10 @@ sites
|
|
|
458
467
|
.description('Export site to zip file')
|
|
459
468
|
.option('-o, --output <path>', 'Output file path')
|
|
460
469
|
.action(async (site, cmdOptions) => {
|
|
461
|
-
await runSiteCommand(site, {
|
|
470
|
+
await runSiteCommand(site, {
|
|
471
|
+
action: 'Exporting',
|
|
472
|
+
successMessage: (data) => `Exported to ${data.exportSite.outputPath}`,
|
|
473
|
+
}, async (gql, siteId) => {
|
|
462
474
|
const data = await gql.mutate(`
|
|
463
475
|
mutation($input: ExportSiteInput!) {
|
|
464
476
|
exportSite(input: $input) { success outputPath error }
|
|
@@ -533,7 +545,10 @@ sites
|
|
|
533
545
|
.command('php <site> <version>')
|
|
534
546
|
.description('Change PHP version for a site')
|
|
535
547
|
.action(async (site, version) => {
|
|
536
|
-
await runSiteCommand(site, {
|
|
548
|
+
await runSiteCommand(site, {
|
|
549
|
+
action: `Changing PHP to ${version} for`,
|
|
550
|
+
successMessage: () => `PHP version changed to ${version}`,
|
|
551
|
+
}, async (gql, siteId) => {
|
|
537
552
|
const data = await gql.mutate(`
|
|
538
553
|
mutation($input: ChangePhpVersionInput!) {
|
|
539
554
|
changePhpVersion(input: $input) { success error }
|
|
@@ -553,7 +568,10 @@ sites
|
|
|
553
568
|
.action(async (site, cmdOptions) => {
|
|
554
569
|
const enabled = cmdOptions.on ? true : cmdOptions.off ? false : undefined;
|
|
555
570
|
const action = enabled === undefined ? 'Toggling' : enabled ? 'Enabling' : 'Disabling';
|
|
556
|
-
await runSiteCommand(site, {
|
|
571
|
+
await runSiteCommand(site, {
|
|
572
|
+
action: `${action} Xdebug for`,
|
|
573
|
+
successMessage: (data) => `Xdebug ${data.toggleXdebug.enabled ? 'enabled' : 'disabled'}`,
|
|
574
|
+
}, async (gql, siteId) => {
|
|
557
575
|
// If no flag specified, get current state and toggle
|
|
558
576
|
let targetEnabled = enabled;
|
|
559
577
|
if (targetEnabled === undefined) {
|
|
@@ -614,18 +632,26 @@ sites
|
|
|
614
632
|
program
|
|
615
633
|
.command('wp <site> [args...]')
|
|
616
634
|
.description('Run WP-CLI commands against a site')
|
|
635
|
+
.option('--with-plugins', 'Load plugins (must come before site name)')
|
|
636
|
+
.option('--with-themes', 'Load themes (must come before site name)')
|
|
617
637
|
.allowUnknownOption()
|
|
618
638
|
.passThroughOptions()
|
|
619
|
-
.action(async (site, args) => {
|
|
639
|
+
.action(async (site, args, cmdOptions) => {
|
|
620
640
|
const globalOpts = program.opts();
|
|
621
641
|
try {
|
|
622
642
|
const gql = await ensureConnected(globalOpts);
|
|
623
643
|
const siteId = await findSiteId(gql, site);
|
|
644
|
+
const input = {
|
|
645
|
+
siteId,
|
|
646
|
+
args,
|
|
647
|
+
skipPlugins: !cmdOptions.withPlugins,
|
|
648
|
+
skipThemes: !cmdOptions.withThemes,
|
|
649
|
+
};
|
|
624
650
|
const data = await gql.mutate(`
|
|
625
651
|
mutation($input: WpCliInput!) {
|
|
626
652
|
wpCli(input: $input) { success output error }
|
|
627
653
|
}
|
|
628
|
-
`, { input
|
|
654
|
+
`, { input });
|
|
629
655
|
if (!data.wpCli.success) {
|
|
630
656
|
console.error((0, formatters_1.formatError)(data.wpCli.error || 'WP-CLI command failed'));
|
|
631
657
|
process.exit(1);
|
|
@@ -773,12 +799,14 @@ blueprints
|
|
|
773
799
|
// Database Commands
|
|
774
800
|
// ===========================================
|
|
775
801
|
const db = program.command('db').description('Database operations');
|
|
776
|
-
db
|
|
777
|
-
.command('export <site>')
|
|
802
|
+
db.command('export <site>')
|
|
778
803
|
.description('Export database to SQL file')
|
|
779
804
|
.option('-o, --output <path>', 'Output file path')
|
|
780
805
|
.action(async (site, cmdOptions) => {
|
|
781
|
-
await runSiteCommand(site, {
|
|
806
|
+
await runSiteCommand(site, {
|
|
807
|
+
action: 'Exporting database for',
|
|
808
|
+
successMessage: (data) => `Exported to ${data.exportDatabase.outputPath}`,
|
|
809
|
+
}, async (gql, siteId) => {
|
|
782
810
|
const data = await gql.mutate(`
|
|
783
811
|
mutation($input: ExportDatabaseInput!) {
|
|
784
812
|
exportDatabase(input: $input) { success outputPath error }
|
|
@@ -790,8 +818,7 @@ db
|
|
|
790
818
|
return data;
|
|
791
819
|
});
|
|
792
820
|
});
|
|
793
|
-
db
|
|
794
|
-
.command('import <site> <sqlFile>')
|
|
821
|
+
db.command('import <site> <sqlFile>')
|
|
795
822
|
.description('Import SQL file into database')
|
|
796
823
|
.action(async (site, sqlFile) => {
|
|
797
824
|
await runSiteCommand(site, { action: 'Importing database for', successMessage: () => 'Database imported successfully' }, async (gql, siteId) => {
|
|
@@ -806,8 +833,7 @@ db
|
|
|
806
833
|
return data;
|
|
807
834
|
});
|
|
808
835
|
});
|
|
809
|
-
db
|
|
810
|
-
.command('adminer <site>')
|
|
836
|
+
db.command('adminer <site>')
|
|
811
837
|
.description('Open Adminer database UI')
|
|
812
838
|
.action(async (site) => {
|
|
813
839
|
await runSiteCommand(site, { action: 'Opening Adminer for', successMessage: () => 'Opened Adminer' }, async (gql, siteId) => {
|
|
@@ -909,7 +935,10 @@ backups
|
|
|
909
935
|
.option('-p, --provider <provider>', 'Backup provider (dropbox|googleDrive)', 'dropbox')
|
|
910
936
|
.option('-n, --note <note>', 'Backup note')
|
|
911
937
|
.action(async (site, cmdOptions) => {
|
|
912
|
-
await runSiteCommand(site, {
|
|
938
|
+
await runSiteCommand(site, {
|
|
939
|
+
action: 'Creating backup for',
|
|
940
|
+
successMessage: (data) => `Backup created: ${data.createBackup.snapshotId}`,
|
|
941
|
+
}, async (gql, siteId) => {
|
|
913
942
|
const data = await gql.mutate(`
|
|
914
943
|
mutation($siteId: ID!, $provider: String!, $note: String) {
|
|
915
944
|
createBackup(siteId: $siteId, provider: $provider, note: $note) {
|
|
@@ -929,7 +958,10 @@ backups
|
|
|
929
958
|
.option('-p, --provider <provider>', 'Backup provider (dropbox|googleDrive)', 'dropbox')
|
|
930
959
|
.option('-y, --yes', 'Skip confirmation')
|
|
931
960
|
.action(async (site, snapshotId, cmdOptions) => {
|
|
932
|
-
await runSiteCommand(site, {
|
|
961
|
+
await runSiteCommand(site, {
|
|
962
|
+
action: 'Restoring backup for',
|
|
963
|
+
successMessage: (data) => data.restoreBackup.message || 'Backup restored successfully',
|
|
964
|
+
}, async (gql, siteId) => {
|
|
933
965
|
const data = await gql.mutate(`
|
|
934
966
|
mutation($siteId: ID!, $provider: String!, $snapshotId: String!, $confirm: Boolean) {
|
|
935
967
|
restoreBackup(siteId: $siteId, provider: $provider, snapshotId: $snapshotId, confirm: $confirm) {
|
|
@@ -1144,7 +1176,10 @@ wpe
|
|
|
1144
1176
|
.option('--sql', 'Include database')
|
|
1145
1177
|
.option('-y, --yes', 'Skip confirmation')
|
|
1146
1178
|
.action(async (site, cmdOptions) => {
|
|
1147
|
-
await runSiteCommand(site, {
|
|
1179
|
+
await runSiteCommand(site, {
|
|
1180
|
+
action: 'Pushing to WP Engine',
|
|
1181
|
+
successMessage: (data) => data.pushToWpe.message || 'Pushed to WP Engine',
|
|
1182
|
+
}, async (gql, siteId) => {
|
|
1148
1183
|
// Get remote install ID if not provided
|
|
1149
1184
|
let remoteInstallId = cmdOptions.remote;
|
|
1150
1185
|
if (!remoteInstallId) {
|
|
@@ -1166,7 +1201,12 @@ wpe
|
|
|
1166
1201
|
success message error
|
|
1167
1202
|
}
|
|
1168
1203
|
}
|
|
1169
|
-
`, {
|
|
1204
|
+
`, {
|
|
1205
|
+
localSiteId: siteId,
|
|
1206
|
+
remoteInstallId,
|
|
1207
|
+
includeSql: cmdOptions.sql || false,
|
|
1208
|
+
confirm: cmdOptions.yes || false,
|
|
1209
|
+
});
|
|
1170
1210
|
if (!data.pushToWpe.success) {
|
|
1171
1211
|
throw new Error(data.pushToWpe.error || 'Failed to push to WP Engine');
|
|
1172
1212
|
}
|
|
@@ -1179,7 +1219,10 @@ wpe
|
|
|
1179
1219
|
.option('-r, --remote <installId>', 'Remote install ID')
|
|
1180
1220
|
.option('--sql', 'Include database')
|
|
1181
1221
|
.action(async (site, cmdOptions) => {
|
|
1182
|
-
await runSiteCommand(site, {
|
|
1222
|
+
await runSiteCommand(site, {
|
|
1223
|
+
action: 'Pulling from WP Engine for',
|
|
1224
|
+
successMessage: (data) => data.pullFromWpe.message || 'Pulled from WP Engine',
|
|
1225
|
+
}, async (gql, siteId) => {
|
|
1183
1226
|
// Get remote install ID if not provided
|
|
1184
1227
|
let remoteInstallId = cmdOptions.remote;
|
|
1185
1228
|
if (!remoteInstallId) {
|
|
@@ -1420,4 +1463,4 @@ if (!isUpdateCommand && !isQuiet) {
|
|
|
1420
1463
|
}
|
|
1421
1464
|
// Parse and execute
|
|
1422
1465
|
program.parse();
|
|
1423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0Q7QUFDeEQscUNBQXlDO0FBQ3pDLDZDQVFzQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNB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QUFDLENBQUM7WUFDbEIsQ0FBQztZQUNELE1BQU07UUFDUixDQUFDO1FBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQixNQUFNO1FBQ1IsQ0FBQztRQUVEO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsbUJBQW1CLE1BQU0sb0NBQW9DLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsb0VBQW9FO0FBQ3BFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXBFLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyx3Q0FBd0M7SUFDeEMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIExvY2FsIENMSSAobHdwKVxuICpcbiAqIENvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIExvY2FsIFdvcmRQcmVzcyBzaXRlcy5cbiAqIENvbm5lY3RzIGRpcmVjdGx5IHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGJvb3RzdHJhcCwgQ29ubmVjdGlvbkluZm8gfSBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0U2l0ZUxpc3QsXG4gIGZvcm1hdFNpdGVEZXRhaWwsXG4gIGZvcm1hdFN1Y2Nlc3MsXG4gIGZvcm1hdEVycm9yLFxuICBnZXRPdXRwdXRGb3JtYXQsXG4gIEZvcm1hdHRlck9wdGlvbnMsXG4gIFNpdGVJbmZvLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiAobm93IC0gY2FjaGUubGFzdENoZWNrKSA8IFVQREFURV9DSEVDS19JTlRFUlZBTCkge1xuICAgIGlmIChjYWNoZS5sYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGNhY2hlLmxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5cXHgxYlszM21VcGRhdGUgYXZhaWxhYmxlOiAke0NVUlJFTlRfVkVSU0lPTn0g4oaSICR7Y2FjaGUubGF0ZXN0VmVyc2lvbn1cXHgxYlswbWApO1xuICAgICAgY29uc29sZS5sb2coYFJ1bjogXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtXFxuYCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZldGNoIGxhdGVzdCB2ZXJzaW9uIChub24tYmxvY2tpbmcsIGZpcmUgYW5kIGZvcmdldCBmb3IgY2FjaGUpXG4gIGZldGNoTGF0ZXN0VmVyc2lvbigpLnRoZW4oKGxhdGVzdFZlcnNpb24pID0+IHtcbiAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICBpZiAobGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byBMb2NhbCdzIEdyYXBoUUwgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNvbm5lY3RlZChvcHRpb25zOiBGb3JtYXR0ZXJPcHRpb25zKTogUHJvbWlzZTxHcmFwaFFMQ2xpZW50PiB7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9wdGlvbnMucXVpZXQgPyBudWxsIDogb3JhKCdDb25uZWN0aW5nIHRvIExvY2FsLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcCh7XG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnRleHQgPSBzdGF0dXM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2VzcyB8fCAhcmVzdWx0LmNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lcj8uc3VjY2VlZCgnQ29ubmVjdGVkIHRvIExvY2FsJyk7XG4gICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQocmVzdWx0LmNvbm5lY3Rpb25JbmZvKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgc3Bpbm5lcj8uZmFpbCgnRmFpbGVkIHRvIGNvbm5lY3QnKTtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcnVuIHNpdGUtc3BlY2lmaWMgY29tbWFuZHMgd2l0aCBjb21tb24gYm9pbGVycGxhdGVcbiAqXG4gKiBIYW5kbGVzOiBjb25uZWN0aW9uLCBzcGlubmVyLCBzaXRlIGxvb2t1cCwgZXJyb3IgZm9ybWF0dGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBydW5TaXRlQ29tbWFuZDxUPihcbiAgc2l0ZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgc3VjY2Vzc01lc3NhZ2U/OiAocmVzdWx0OiBUKSA9PiBzdHJpbmc7XG4gIH0sXG4gIGV4ZWN1dGU6IChncWw6IEdyYXBoUUxDbGllbnQsIHNpdGVJZDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgJHtjb25maWcuYWN0aW9ufSBcIiR7c2l0ZU5hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlTmFtZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZShncWwsIHNpdGVJZCk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlXG4gICAgICA/IGNvbmZpZy5zdWNjZXNzTWVzc2FnZShyZXN1bHQpXG4gICAgICA6IGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIiBjb21wbGV0ZWRgO1xuICAgIHNwaW5uZXI/LnN1Y2NlZWQobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKGBGYWlsZWQgdG8gJHtjb25maWcuYWN0aW9uLnRvTG93ZXJDYXNlKCl9IFwiJHtzaXRlTmFtZX1cImApO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5wcm9ncmFtXG4gIC5uYW1lKCdsd3AnKVxuICAuZGVzY3JpcHRpb24oJ0NvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExvY2FsIFdvcmRQcmVzcyBkZXZlbG9wbWVudCcpXG4gIC52ZXJzaW9uKENVUlJFTlRfVkVSU0lPTilcbiAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKCk7XG5cbi8vIEdsb2JhbCBvcHRpb25zXG5wcm9ncmFtXG4gIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgcmVzdWx0cyBhcyBKU09OJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdNaW5pbWFsIG91dHB1dCAoSURzL25hbWVzIG9ubHkpJylcbiAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0Jyk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVwZGF0ZSBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJylcbiAgLm9wdGlvbignLS1jaGVjaycsICdPbmx5IGNoZWNrIGZvciB1cGRhdGVzLCBkbyBub3QgaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBpZiAob3B0aW9ucy5jaGVjaykge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ2hlY2tpbmcgZm9yIHVwZGF0ZXMuLi4nKS5zdGFydCgpO1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuXG4gICAgICBpZiAoIWxhdGVzdFZlcnNpb24pIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgY2hlY2sgZm9yIHVwZGF0ZXMnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdlclZlcnNpb24obGF0ZXN0VmVyc2lvbiwgQ1VSUkVOVF9WRVJTSU9OKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuUnVuIFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbSB0byBpbnN0YWxsYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFlvdSdyZSBvbiB0aGUgbGF0ZXN0IHZlcnNpb24gKCR7Q1VSUkVOVF9WRVJTSU9OfSlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGRhdGluZyBDTEkuLi4nKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJ1biBucG0gdXBkYXRlXG4gICAgICBleGVjU3luYyhgbnBtIHVwZGF0ZSAtZyAke1BBQ0tBR0VfTkFNRX1gLCB7IHN0ZGlvOiAncGlwZScgfSk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0NMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBDaGVjayBuZXcgdmVyc2lvblxuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuICAgICAgaWYgKG5ld1ZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblVwZGF0ZWQgdG8gdmVyc2lvbiAke25ld1ZlcnNpb259YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lci5mYWlsKCdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKCdUcnkgcnVubmluZzogbnBtIHVwZGF0ZSAtZyAnICsgUEFDS0FHRV9OQU1FKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2l0ZXMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgc2l0ZXMgPSBwcm9ncmFtLmNvbW1hbmQoJ3NpdGVzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBXb3JkUHJlc3Mgc2l0ZXMnKTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIFdvcmRQcmVzcyBzaXRlcycpXG4gIC5vcHRpb24oJy0tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdGF0dXMgKHJ1bm5pbmd8c3RvcHBlZHxhbGwpJywgJ2FsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgc2l0ZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgbGV0IHNpdGVzVG9TaG93ID0gZGF0YS5zaXRlcy5tYXAoKHMpID0+ICh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgIGRvbWFpbjogcy5kb21haW4sXG4gICAgICAgIHN0YXR1czogcy5zdGF0dXMudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgYnkgc3RhdHVzIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKGNtZE9wdGlvbnMuc3RhdHVzICE9PSAnYWxsJykge1xuICAgICAgICBzaXRlc1RvU2hvdyA9IHNpdGVzVG9TaG93LmZpbHRlcigocykgPT4gcy5zdGF0dXMgPT09IGNtZE9wdGlvbnMuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0U2l0ZUxpc3Qoc2l0ZXNUb1Nob3csIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdnZXQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgZGV0YWlsZWQgaW5mbyBhYm91dCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgLy8gRmlyc3QgZmluZCB0aGUgc2l0ZSBieSBuYW1lIG9yIElEXG4gICAgICBjb25zdCBzaXRlc0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBmb3VuZFNpdGUgPSBzaXRlc0RhdGEuc2l0ZXMuZmluZChcbiAgICAgICAgKHMpID0+IHMuaWQgPT09IHNpdGUgfHwgcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFmb3VuZFNpdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlfVwiYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiBhbnkgfT4oYFxuICAgICAgICBxdWVyeSgkaWQ6IElEISkge1xuICAgICAgICAgIHNpdGUoaWQ6ICRpZCkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIGh0dHBQb3J0XG4gICAgICAgICAgICB4ZGVidWdFbmFibGVkXG4gICAgICAgICAgICBzZXJ2aWNlcyB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgdmVyc2lvblxuICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob3N0Q29ubmVjdGlvbnMge1xuICAgICAgICAgICAgICBob3N0SWRcbiAgICAgICAgICAgICAgcmVtb3RlU2l0ZUlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlkOiBmb3VuZFNpdGUuaWQgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoZGF0YS5zaXRlLCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RhcnRTaXRlKGlkOiAkaWQpIHsgaWQgc3RhdHVzIH0gfWAsIHsgaWQ6IHNpdGVJZCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3Jlc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0YXJ0IGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1Jlc3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFJlc3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgcmVzdGFydFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ29wZW4gPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIHNpdGUgaW4gYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tYWRtaW4nLCAnT3BlbiBXUCBBZG1pbiBpbnN0ZWFkIG9mIGZyb250ZW5kJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnT3BlbmluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgT3BlbmVkIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG9wZW5TaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQgfSk7XG5cbiAgICAgIGlmICghZGF0YS5jcmVhdGVTaXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQ3JlYXRlIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuY3JlYXRlU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBzaXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYENyZWF0ZWQgXCIke2RhdGEuY3JlYXRlU2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmNyZWF0ZVNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGEgc2l0ZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5vcHRpb24oJy0ta2VlcC1maWxlcycsICdLZWVwIHNpdGUgZmlsZXMgKG9ubHkgcmVtb3ZlIGZyb20gTG9jYWwpJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYERlbGV0ZWQgXCIke3NpdGV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IERlbGV0ZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBkZWxldGVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgaWQ6IHNpdGVJZCwgdHJhc2hGaWxlczogIWNtZE9wdGlvbnMua2VlcEZpbGVzIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgQ2xvbmluZ2AsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiBgQ2xvbmVkIHRvIFwiJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlTmFtZX1cIiAoJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlSWR9KWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNsb25lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBuZXdTaXRlSWQ6IHN0cmluZzsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ2xvbmVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgY2xvbmVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBuZXdTaXRlSWQgbmV3U2l0ZU5hbWUgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNsb25lU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT4gYEV4cG9ydGVkIHRvICR7ZGF0YS5leHBvcnRTaXRlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydFNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBleHBvcnRTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBleHBvcnQgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnaW1wb3J0IDx6aXBGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IHNpdGUgZnJvbSB6aXAgZmlsZScpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1NpdGUgbmFtZSAoZGVmYXVsdHMgdG8gemlwIGZpbGVuYW1lKScpXG4gIC5hY3Rpb24oYXN5bmMgKHppcEZpbGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYEltcG9ydGluZyBzaXRlLi4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0U2l0ZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydFNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgemlwUGF0aDogemlwRmlsZSwgc2l0ZU5hbWU6IGNtZE9wdGlvbnMubmFtZSB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEuaW1wb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmltcG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgc2l0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBJbXBvcnRlZCBcIiR7ZGF0YS5pbXBvcnRTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuaW1wb3J0U2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdyZW5hbWUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignUmVuYW1lIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5ld05hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1JlbmFtaW5nJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBSZW5hbWVkIHRvIFwiJHtuZXdOYW1lfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBNY3BSZW5hbWVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tY3BSZW5hbWVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuYW1lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3NzbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1RydXN0IFNTTCBjZXJ0aWZpY2F0ZSBmb3IgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnVHJ1c3RpbmcgU1NMIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU1NMIGNlcnRpZmljYXRlIHRydXN0ZWQgZm9yIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgdHJ1c3RTc2w6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVHJ1c3RTc2xJbnB1dCEpIHtcbiAgICAgICAgICB0cnVzdFNzbChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgICAgaWYgKCFkYXRhLnRydXN0U3NsLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY2hhbmdlUGhwVmVyc2lvbjogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQhKSB7XG4gICAgICAgICAgY2hhbmdlUGhwVmVyc2lvbihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgcGhwVmVyc2lvbjogdmVyc2lvbiB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNoYW5nZVBocFZlcnNpb24uc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PiBgWGRlYnVnICR7ZGF0YS50b2dnbGVYZGVidWcuZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIElmIG5vIGZsYWcgc3BlY2lmaWVkLCBnZXQgY3VycmVudCBzdGF0ZSBhbmQgdG9nZ2xlXG4gICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICBpZiAodGFyZ2V0RW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNpdGVEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyB4ZGVidWdFbmFibGVkOiBib29sZWFuIH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLCB7IGlkOiBzaXRlSWQgfSk7XG4gICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVG9nZ2xlWGRlYnVnSW5wdXQhKSB7XG4gICAgICAgICAgdG9nZ2xlWGRlYnVnKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlbmFibGVkIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9KTtcbiAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS50b2dnbGVYZGVidWcuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0b2dnbGUgWGRlYnVnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdsb2dzIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IHNpdGUgbG9ncycpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ0xvZyB0eXBlIChwaHB8bmdpbnh8bXlzcWwpJywgJ3BocCcpXG4gIC5vcHRpb24oJy1uLCAtLWxpbmVzIDxuPicsICdOdW1iZXIgb2YgbGluZXMnLCAnNTAnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBnZXRTaXRlTG9nczogeyBzdWNjZXNzOiBib29sZWFuOyBsb2dzOiBzdHJpbmdbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogR2V0U2l0ZUxvZ3NJbnB1dCEpIHtcbiAgICAgICAgICBnZXRTaXRlTG9ncyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgbG9ncyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBsb2dUeXBlOiBjbWRPcHRpb25zLnR5cGUsIGxpbmVzOiBwYXJzZUludChjbWRPcHRpb25zLmxpbmVzLCAxMCkgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVMb2dzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVMb2dzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGxvZ3MnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFNpdGVMb2dzLmxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBsb2dzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmZvckVhY2goKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUC1DTEkgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3cCA8c2l0ZT4gW2FyZ3MuLi5dJylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gV1AtQ0xJIGNvbW1hbmRzIGFnYWluc3QgYSBzaXRlJylcbiAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gIC5wYXNzVGhyb3VnaE9wdGlvbnMoKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBhcmdzKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwQ2xpOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG91dHB1dDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBXcENsaUlucHV0ISkge1xuICAgICAgICAgIHdwQ2xpKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXQgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgYXJncyB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEud3BDbGkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BDbGkuZXJyb3IgfHwgJ1dQLUNMSSBjb21tYW5kIGZhaWxlZCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhkYXRhLndwQ2xpLm91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5mbyBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luZm8nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgTG9jYWwgYXBwbGljYXRpb24gaW5mbycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEdldCBzaXRlcyBjb3VudCBhbmQgYmFzaWMgaW5mb1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIHN0YXR1cyB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBydW5uaW5nID0gZGF0YS5zaXRlcy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJykubGVuZ3RoO1xuICAgICAgY29uc3Qgc3RvcHBlZCA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncnVubmluZycpLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgdG90YWxTaXRlczogZGF0YS5zaXRlcy5sZW5ndGgsXG4gICAgICAgIHJ1bm5pbmdTaXRlczogcnVubmluZyxcbiAgICAgICAgc3RvcHBlZFNpdGVzOiBzdG9wcGVkLFxuICAgICAgICBncmFwaHFsRW5kcG9pbnQ6IGNsaWVudD8uWyd1cmwnXSB8fCAnY29ubmVjdGVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoaW5mbywgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VydmljZXMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzZXJ2aWNlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhdmFpbGFibGUgc2VydmljZSB2ZXJzaW9ucycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBsaXN0U2VydmljZXM6IHsgc3VjY2VzczogYm9vbGVhbjsgc2VydmljZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0U2VydmljZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2VydmljZXMgeyByb2xlIG5hbWUgdmVyc2lvbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0U2VydmljZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFNlcnZpY2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHN2YyBvZiBkYXRhLmxpc3RTZXJ2aWNlcy5zZXJ2aWNlcykge1xuICAgICAgICAgIGlmICghZ3JvdXBlZFtzdmMucm9sZV0pIGdyb3VwZWRbc3ZjLnJvbGVdID0gW107XG4gICAgICAgICAgZ3JvdXBlZFtzdmMucm9sZV0ucHVzaChgJHtzdmMudmVyc2lvbn0gKCR7c3ZjLm5hbWV9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbcm9sZSwgdmVyc2lvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiR7cm9sZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJvbGUuc2xpY2UoMSl9IFZlcnNpb25zOmApO1xuICAgICAgICAgIHZlcnNpb25zLmZvckVhY2goKHYpID0+IGNvbnNvbGUubG9nKGAgIC0gJHt2fWApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJsdWVwcmludHMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBibHVlcHJpbnRzID0gcHJvZ3JhbS5jb21tYW5kKCdibHVlcHJpbnRzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBibHVlcHJpbnRzJyk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIGJsdWVwcmludHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgYmx1ZXByaW50czogeyBzdWNjZXNzOiBib29sZWFuOyBibHVlcHJpbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBibHVlcHJpbnRzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGJsdWVwcmludHMgeyBuYW1lIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLmJsdWVwcmludHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuYmx1ZXByaW50cy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3QgYmx1ZXByaW50cycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBibHVlcHJpbnRzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0JsdWVwcmludHM6Jyk7XG4gICAgICAgIGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLmZvckVhY2goKGIpID0+IGNvbnNvbGUubG9nKGAgIC0gJHtiLm5hbWV9YCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ3NhdmUgPHNpdGU+IDxuYW1lPicpXG4gIC5kZXNjcmlwdGlvbignU2F2ZSBhIHNpdGUgYXMgYSBibHVlcHJpbnQnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTYXZpbmcgYmx1ZXByaW50IGZyb20nLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFNhdmVkIGJsdWVwcmludCBcIiR7bmFtZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHNhdmVCbHVlcHJpbnQ6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogU2F2ZUJsdWVwcmludElucHV0ISkge1xuICAgICAgICAgIHNhdmVCbHVlcHJpbnQoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG5hbWUgfSB9KTtcbiAgICAgIGlmICghZGF0YS5zYXZlQmx1ZXByaW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuc2F2ZUJsdWVwcmludC5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgYmx1ZXByaW50Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdGFiYXNlIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGRiID0gcHJvZ3JhbS5jb21tYW5kKCdkYicpLmRlc2NyaXB0aW9uKCdEYXRhYmFzZSBvcGVyYXRpb25zJyk7XG5cbmRiXG4gIC5jb21tYW5kKCdleHBvcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdFeHBvcnQgZGF0YWJhc2UgdG8gU1FMIGZpbGUnKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPHBhdGg+JywgJ091dHB1dCBmaWxlIHBhdGgnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdFeHBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydERhdGFiYXNlOiB7IG91dHB1dFBhdGg6IHN0cmluZyB9IH0pID0+IGBFeHBvcnRlZCB0byAke2RhdGEuZXhwb3J0RGF0YWJhc2Uub3V0cHV0UGF0aH1gIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBleHBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydERhdGFiYXNlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0RGF0YWJhc2UoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG91dHB1dFBhdGggZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgb3V0cHV0UGF0aDogY21kT3B0aW9ucy5vdXRwdXQgfSB9KTtcbiAgICAgIGlmICghZGF0YS5leHBvcnREYXRhYmFzZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydERhdGFiYXNlLmVycm9yIHx8ICdGYWlsZWQgdG8gZXhwb3J0IGRhdGFiYXNlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmRiXG4gIC5jb21tYW5kKCdpbXBvcnQgPHNpdGU+IDxzcWxGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IFNRTCBmaWxlIGludG8gZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzcWxGaWxlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdJbXBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdEYXRhYmFzZSBpbXBvcnRlZCBzdWNjZXNzZnVsbHknIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBpbXBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBzcWxQYXRoOiBzcWxGaWxlIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuaW1wb3J0RGF0YWJhc2Uuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5pbXBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGltcG9ydCBkYXRhYmFzZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5kYlxuICAuY29tbWFuZCgnYWRtaW5lciA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ09wZW4gQWRtaW5lciBkYXRhYmFzZSBVSScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ09wZW5pbmcgQWRtaW5lciBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ09wZW5lZCBBZG1pbmVyJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuQWRtaW5lcklucHV0ISkge1xuICAgICAgICAgIG9wZW5BZG1pbmVyKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkIH0gfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWNrdXBzIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGJhY2t1cHMgPSBwcm9ncmFtLmNvbW1hbmQoJ2JhY2t1cHMnKS5kZXNjcmlwdGlvbignQ2xvdWQgYmFja3VwIG9wZXJhdGlvbnMnKTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdDaGVjayBiYWNrdXAgc2VydmljZSBhdmFpbGFiaWxpdHknKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgYmFja3VwU3RhdHVzOiB7IGF2YWlsYWJsZTogYm9vbGVhbjsgZmVhdHVyZUVuYWJsZWQ6IGJvb2xlYW47IGRyb3Bib3g6IGFueTsgZ29vZ2xlRHJpdmU6IGFueSB9IH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGJhY2t1cFN0YXR1cyB7XG4gICAgICAgICAgICBhdmFpbGFibGVcbiAgICAgICAgICAgIGZlYXR1cmVFbmFibGVkXG4gICAgICAgICAgICBkcm9wYm94IHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgICAgZ29vZ2xlRHJpdmUgeyBhdXRoZW50aWNhdGVkIGFjY291bnRJZCBlbWFpbCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuYmFja3VwU3RhdHVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBkYXRhLmJhY2t1cFN0YXR1cztcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkJhY2t1cCBTdGF0dXM6YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEF2YWlsYWJsZTogJHtzdGF0dXMuYXZhaWxhYmxlID8gJ1llcycgOiAnTm8nfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBGZWF0dXJlIEVuYWJsZWQ6ICR7c3RhdHVzLmZlYXR1cmVFbmFibGVkID8gJ1llcycgOiAnTm8nfWApO1xuICAgICAgICBpZiAoc3RhdHVzLmRyb3Bib3gpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuICBEcm9wYm94OiAke3N0YXR1cy5kcm9wYm94LmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5kcm9wYm94LmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMuZ29vZ2xlRHJpdmUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBHb29nbGUgRHJpdmU6ICR7c3RhdHVzLmdvb2dsZURyaXZlLmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5nb29nbGVEcml2ZS5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2xpc3QgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGJhY2t1cHMgZm9yIGEgc2l0ZScpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBsaXN0QmFja3VwczogeyBzdWNjZXNzOiBib29sZWFuOyBiYWNrdXBzOiBBcnJheTx7IHNuYXBzaG90SWQ6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IG5vdGU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchKSB7XG4gICAgICAgICAgbGlzdEJhY2t1cHMoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBiYWNrdXBzIHsgc25hcHNob3RJZCB0aW1lc3RhbXAgbm90ZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyIH0pO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdEJhY2t1cHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdEJhY2t1cHMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IGJhY2t1cHMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdEJhY2t1cHMuYmFja3VwcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBiYWNrdXBzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkJhY2t1cHMgKCR7Y21kT3B0aW9ucy5wcm92aWRlcn0pOmApO1xuICAgICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmFja3VwLnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2JhY2t1cC5zbmFwc2hvdElkfSAtICR7ZGF0ZX0ke2JhY2t1cC5ub3RlID8gYCAtICR7YmFja3VwLm5vdGV9YCA6ICcnfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnY3JlYXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgYmFja3VwJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAub3B0aW9uKCctbiwgLS1ub3RlIDxub3RlPicsICdCYWNrdXAgbm90ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ0NyZWF0aW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgY3JlYXRlQmFja3VwOiB7IHNuYXBzaG90SWQ6IHN0cmluZyB9IH0pID0+IGBCYWNrdXAgY3JlYXRlZDogJHtkYXRhLmNyZWF0ZUJhY2t1cC5zbmFwc2hvdElkfWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNyZWF0ZUJhY2t1cDogeyBzdWNjZXNzOiBib29sZWFuOyBzbmFwc2hvdElkOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJG5vdGU6IFN0cmluZykge1xuICAgICAgICAgIGNyZWF0ZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIG5vdGU6ICRub3RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzIHNuYXBzaG90SWQgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgbm90ZTogY21kT3B0aW9ucy5ub3RlIH0pO1xuICAgICAgaWYgKCFkYXRhLmNyZWF0ZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNyZWF0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgncmVzdG9yZSA8c2l0ZT4gPHNuYXBzaG90SWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0b3JlIGZyb20gYmFja3VwJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAub3B0aW9uKCcteSwgLS15ZXMnLCAnU2tpcCBjb25maXJtYXRpb24nKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzbmFwc2hvdElkLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdSZXN0b3JpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyByZXN0b3JlQmFja3VwOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IGRhdGEucmVzdG9yZUJhY2t1cC5tZXNzYWdlIHx8ICdCYWNrdXAgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5JyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcmVzdG9yZUJhY2t1cDogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgcmVzdG9yZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIHNuYXBzaG90SWQ6ICRzbmFwc2hvdElkLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIHNuYXBzaG90SWQsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnJlc3RvcmVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5yZXN0b3JlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPiA8c25hcHNob3RJZD4nKVxuICAuZGVzY3JpcHRpb24oJ0RlbGV0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnQmFja3VwIGRlbGV0ZWQnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBkZWxldGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UgfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZGVsZXRlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gZGVsZXRlIGJhY2t1cCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUCBFbmdpbmUgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgd3BlID0gcHJvZ3JhbS5jb21tYW5kKCd3cGUnKS5kZXNjcmlwdGlvbignV1AgRW5naW5lIHN5bmMgb3BlcmF0aW9ucycpO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3N0YXR1cycpXG4gIC5kZXNjcmlwdGlvbignQ2hlY2sgV1AgRW5naW5lIGF1dGhlbnRpY2F0aW9uIHN0YXR1cycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyB3cGVTdGF0dXM6IHsgYXV0aGVudGljYXRlZDogYm9vbGVhbjsgZW1haWw6IHN0cmluZzsgYWNjb3VudElkOiBzdHJpbmc7IGFjY291bnROYW1lOiBzdHJpbmcgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICB3cGVTdGF0dXMge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZFxuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICAgIGFjY291bnRJZFxuICAgICAgICAgICAgYWNjb3VudE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS53cGVTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEud3BlU3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBDb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBFbWFpbDogJHtzdGF0dXMuZW1haWx9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQWNjb3VudDogJHtzdGF0dXMuYWNjb3VudE5hbWV9ICgke3N0YXR1cy5hY2NvdW50SWR9KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5XUCBFbmdpbmU6IE5vdCBjb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBSdW4gJ2x3cCB3cGUgbG9naW4nIHRvIGF1dGhlbnRpY2F0ZWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignQXV0aGVudGljYXRlIHdpdGggV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBPcGVuaW5nIFdQIEVuZ2luZSBsb2dpbi4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwZUF1dGhlbnRpY2F0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlbWFpbDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbiB7XG4gICAgICAgICAgd3BlQXV0aGVudGljYXRlIHsgc3VjY2VzcyBlbWFpbCBtZXNzYWdlIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS53cGVBdXRoZW50aWNhdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUF1dGhlbnRpY2F0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGF1dGhlbnRpY2F0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBBdXRoZW50aWNhdGVkIGFzICR7ZGF0YS53cGVBdXRoZW50aWNhdGUuZW1haWx9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xvZ291dCcpXG4gIC5kZXNjcmlwdGlvbignTG9nb3V0IGZyb20gV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBMb2dnaW5nIG91dC4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwZUxvZ291dDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24ge1xuICAgICAgICAgIHdwZUxvZ291dCB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLndwZUxvZ291dC5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0xvZ291dCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUxvZ291dC5lcnJvciB8fCAnRmFpbGVkIHRvIGxvZ291dCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKCdMb2dnZWQgb3V0IGZyb20gV1AgRW5naW5lJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnTG9nb3V0IGZhaWxlZCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdzaXRlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBXUCBFbmdpbmUgc2l0ZXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdFdwZVNpdGVzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+OyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGxpc3RXcGVTaXRlcyB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBzaXRlcyB7IGlkIG5hbWUgZW52aXJvbm1lbnQgcHJpbWFyeURvbWFpbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0V3BlU2l0ZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFdwZVNpdGVzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzaXRlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBXUCBFbmdpbmUgc2l0ZXMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuV1AgRW5naW5lIFNpdGVzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IHNpdGUgb2YgZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke3NpdGUubmFtZX0gKCR7c2l0ZS5lbnZpcm9ubWVudH0pIC0gJHtzaXRlLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xpbmsgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IFdQIEVuZ2luZSBjb25uZWN0aW9uIGZvciBhIGxvY2FsIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFdwZUxpbms6IHsgbGlua2VkOiBib29sZWFuOyBzaXRlTmFtZTogc3RyaW5nOyBjb25uZWN0aW9uczogQXJyYXk8eyByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZzsgaW5zdGFsbE5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgbGlua2VkXG4gICAgICAgICAgICBzaXRlTmFtZVxuICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgaW5zdGFsbE5hbWUgZW52aXJvbm1lbnQgcHJpbWFyeURvbWFpbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCB9KTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0V3BlTGluaywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRhdGEuZ2V0V3BlTGluaztcbiAgICAgICAgaWYgKCFsaW5rLmxpbmtlZCB8fCBsaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBXUCBFbmdpbmUgQ29ubmVjdGlvbnM6YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uIG9mIGxpbmsuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29ubi5pbnN0YWxsTmFtZX0gKCR7Y29ubi5lbnZpcm9ubWVudH0pIC0gJHtjb25uLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElEOiAke2Nvbm4ucmVtb3RlSW5zdGFsbElkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVzaCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1c2ggbG9jYWwgc2l0ZSB0byBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUHVzaGluZyB0byBXUCBFbmdpbmUnLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVzaFRvV3BlOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IGRhdGEucHVzaFRvV3BlLm1lc3NhZ2UgfHwgJ1B1c2hlZCB0byBXUCBFbmdpbmUnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgLy8gR2V0IHJlbW90ZSBpbnN0YWxsIElEIGlmIG5vdCBwcm92aWRlZFxuICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgY29uc3QgbGlua0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISkge1xuICAgICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgYCwgeyBzaXRlSWQgfSk7XG4gICAgICAgIGlmIChsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdGVJbnN0YWxsSWQgPSBsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zWzBdLnJlbW90ZUluc3RhbGxJZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcHVzaFRvV3BlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRsb2NhbFNpdGVJZDogSUQhLCAkcmVtb3RlSW5zdGFsbElkOiBJRCEsICRpbmNsdWRlU3FsOiBCb29sZWFuLCAkY29uZmlybTogQm9vbGVhbikge1xuICAgICAgICAgIHB1c2hUb1dwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGxvY2FsU2l0ZUlkOiBzaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogY21kT3B0aW9ucy5zcWwgfHwgZmFsc2UsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnB1c2hUb1dwZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1c2hUb1dwZS5lcnJvciB8fCAnRmFpbGVkIHRvIHB1c2ggdG8gV1AgRW5naW5lJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVsbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1bGwgZnJvbSBXUCBFbmdpbmUgdG8gbG9jYWwgc2l0ZScpXG4gIC5vcHRpb24oJy1yLCAtLXJlbW90ZSA8aW5zdGFsbElkPicsICdSZW1vdGUgaW5zdGFsbCBJRCcpXG4gIC5vcHRpb24oJy0tc3FsJywgJ0luY2x1ZGUgZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdQdWxsaW5nIGZyb20gV1AgRW5naW5lIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBwdWxsRnJvbVdwZTogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnB1bGxGcm9tV3BlLm1lc3NhZ2UgfHwgJ1B1bGxlZCBmcm9tIFdQIEVuZ2luZScgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAvLyBHZXQgcmVtb3RlIGluc3RhbGwgSUQgaWYgbm90IHByb3ZpZGVkXG4gICAgICBsZXQgcmVtb3RlSW5zdGFsbElkID0gY21kT3B0aW9ucy5yZW1vdGU7XG4gICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICBjb25zdCBsaW5rRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfSB9PihgXG4gICAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9ucyB7IHJlbW90ZUluc3RhbGxJZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLCB7IHNpdGVJZCB9KTtcbiAgICAgICAgaWYgKGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXRlIGlzIG5vdCBsaW5rZWQgdG8gV1AgRW5naW5lLiBVc2UgLS1yZW1vdGUgdG8gc3BlY2lmeSBpbnN0YWxsIElELicpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW90ZUluc3RhbGxJZCA9IGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnNbMF0ucmVtb3RlSW5zdGFsbElkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBwdWxsRnJvbVdwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbikge1xuICAgICAgICAgIHB1bGxGcm9tV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBsb2NhbFNpdGVJZDogc2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnB1bGxGcm9tV3BlLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucHVsbEZyb21XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdWxsIGZyb20gV1AgRW5naW5lJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnaGlzdG9yeSA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgc3luYyBoaXN0b3J5IGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctbCwgLS1saW1pdCA8bj4nLCAnTnVtYmVyIG9mIGV2ZW50cyB0byBzaG93JywgJzEwJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRTeW5jSGlzdG9yeTogeyBzdWNjZXNzOiBib29sZWFuOyBldmVudHM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbE5hbWU6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IGRpcmVjdGlvbjogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJGxpbWl0OiBJbnQpIHtcbiAgICAgICAgICBnZXRTeW5jSGlzdG9yeShzaXRlSWQ6ICRzaXRlSWQsIGxpbWl0OiAkbGltaXQpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGV2ZW50cyB7IHJlbW90ZUluc3RhbGxOYW1lIHRpbWVzdGFtcCBkaXJlY3Rpb24gc3RhdHVzIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgbGltaXQ6IHBhcnNlSW50KGNtZE9wdGlvbnMubGltaXQsIDEwKSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFN5bmNIaXN0b3J5LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFN5bmNIaXN0b3J5LmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IHN5bmMgaGlzdG9yeScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBzeW5jIGhpc3RvcnkgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuU3luYyBIaXN0b3J5OicpO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zdCBhcnJvdyA9IGV2ZW50LmRpcmVjdGlvbiA9PT0gJ3B1c2gnID8gJ+KGkicgOiAn4oaQJztcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2RhdGV9ICR7YXJyb3d9ICR7ZXZlbnQucmVtb3RlSW5zdGFsbE5hbWV9ICgke2V2ZW50LnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2RpZmYgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGZpbGUgY2hhbmdlcyBiZXR3ZWVuIGxvY2FsIGFuZCBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3Rpb24gPGRpcj4nLCAnRGlyZWN0aW9uIChwdXNofHB1bGwpJywgJ3B1c2gnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFNpdGVDaGFuZ2VzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGFkZGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgbW9kaWZpZWQ6IEFycmF5PHsgcGF0aDogc3RyaW5nIH0+OyBkZWxldGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgdG90YWxDaGFuZ2VzOiBudW1iZXI7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRkaXJlY3Rpb246IFN0cmluZykge1xuICAgICAgICAgIGdldFNpdGVDaGFuZ2VzKHNpdGVJZDogJHNpdGVJZCwgZGlyZWN0aW9uOiAkZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBhZGRlZCB7IHBhdGggfVxuICAgICAgICAgICAgbW9kaWZpZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIGRlbGV0ZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlc1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBkaXJlY3Rpb246IGNtZE9wdGlvbnMuZGlyZWN0aW9uIH0pO1xuXG4gICAgICBpZiAoIWRhdGEuZ2V0U2l0ZUNoYW5nZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuZ2V0U2l0ZUNoYW5nZXMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgY2hhbmdlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTaXRlQ2hhbmdlcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRhdGEuZ2V0U2l0ZUNoYW5nZXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5DaGFuZ2VzIHRvICR7Y21kT3B0aW9ucy5kaXJlY3Rpb259ICgke2NoYW5nZXMudG90YWxDaGFuZ2VzfSB0b3RhbCk6YCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIEFkZGVkOicpO1xuICAgICAgICAgIGNoYW5nZXMuYWRkZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICArICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5tb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgTW9kaWZpZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5tb2RpZmllZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgIH4gJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIERlbGV0ZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5kZWxldGVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgLSAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxDaGFuZ2VzID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJyAgTm8gY2hhbmdlcyBkZXRlY3RlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaW5kIHNpdGUgSUQgYnkgbmFtZSBvciBJRFxuICpcbiAqIE9wdGltaXphdGlvbjogRmlyc3QgdHJpZXMgZGlyZWN0IElEIGxvb2t1cCAoTygxKSkgYmVmb3JlIGZhbGxpbmcgYmFjayB0b1xuICogZmV0Y2hpbmcgYWxsIHNpdGVzIGZvciBuYW1lIG1hdGNoaW5nIChPKG4pKS4gVGhpcyBzaWduaWZpY2FudGx5IGltcHJvdmVzXG4gKiBwZXJmb3JtYW5jZSB3aGVuIHVzZXJzIHNwZWNpZnkgc2l0ZSBJRHMgZGlyZWN0bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRTaXRlSWQoZ3FsOiBHcmFwaFFMQ2xpZW50LCBzaXRlUXVlcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFRyeSBkaXJlY3QgSUQgbG9va3VwIGZpcnN0IC0gbXVjaCBmYXN0ZXIgZm9yIGV4YWN0IElEIG1hdGNoZXNcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RMb29rdXAgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiB7IGlkOiBzdHJpbmcgfSB8IG51bGwgfT4oXG4gICAgICBgcXVlcnkgR2V0U2l0ZUJ5SWQoJGlkOiBJRCEpIHsgc2l0ZShpZDogJGlkKSB7IGlkIH0gfWAsXG4gICAgICB7IGlkOiBzaXRlUXVlcnkgfVxuICAgICk7XG5cbiAgICBpZiAoZGlyZWN0TG9va3VwLnNpdGUpIHtcbiAgICAgIHJldHVybiBkaXJlY3RMb29rdXAuc2l0ZS5pZDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElEIGxvb2t1cCBmYWlsZWQsIGZhbGwgdGhyb3VnaCB0byBuYW1lIHNlYXJjaFxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZ1xuICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgYCk7XG5cbiAgY29uc3Qgc2l0ZSA9IGRhdGEuc2l0ZXMuZmluZChcbiAgICAocykgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZVF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICk7XG5cbiAgaWYgKCFzaXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTaXRlIG5vdCBmb3VuZDogXCIke3NpdGVRdWVyeX1cImApO1xuICB9XG5cbiAgcmV0dXJuIHNpdGUuaWQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNraWxsIENvbW1hbmQgKGZvciBBSSBhc3Npc3RhbnRzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdza2lsbCcpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBDbGF1ZGUgQ29kZSBza2lsbCBmb3IgQUkgYXNzaXN0YW50IGludGVncmF0aW9uJylcbiAgLmFyZ3VtZW50KCdbYWN0aW9uXScsICdBY3Rpb246IGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aCcsICdpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAoYWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBza2lsbE5hbWUgPSAnbHdwJztcbiAgICBjb25zdCB1c2VyU2tpbGxzRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5jbGF1ZGUnLCAnc2tpbGxzJywgc2tpbGxOYW1lKTtcbiAgICBjb25zdCBidW5kbGVkU2tpbGxEaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnc2tpbGwnKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdpbnN0YWxsJzoge1xuICAgICAgICAvLyBDaGVjayBpZiBza2lsbCBpcyBidW5kbGVkXG4gICAgICAgIGNvbnN0IGJ1bmRsZWRTa2lsbEZpbGUgPSBwYXRoLmpvaW4oYnVuZGxlZFNraWxsRGlyLCAnU0tJTEwubWQnKTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGJ1bmRsZWRTa2lsbEZpbGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcignU2tpbGwgbm90IGZvdW5kIGluIHBhY2thZ2UuIFBsZWFzZSByZWluc3RhbGwgdGhlIENMSS4nKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVzZXIgc2tpbGxzIGRpcmVjdG9yeVxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUodXNlclNraWxsc0RpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModXNlclNraWxsc0RpcikpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBTa2lsbCBhbHJlYWR5IGluc3RhbGxlZCBhdCAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBzeW1saW5rIHRvIGJ1bmRsZWQgc2tpbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5zeW1saW5rU3luYyhidW5kbGVkU2tpbGxEaXIsIHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdUcnkgYXNraW5nOiBcIkxpc3QgbXkgTG9jYWwgc2l0ZXNcIiBvciBcIlN0YXJ0IHRoZSBibG9nIHNpdGVcIicpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgc3ltbGluayBmYWlscywgY29weSB0aGUgZmlsZXNcbiAgICAgICAgICBmcy5ta2RpclN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGJ1bmRsZWRTa2lsbEZpbGUsIHBhdGguam9pbih1c2VyU2tpbGxzRGlyLCAnU0tJTEwubWQnKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgSW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsIHRvICR7dXNlclNraWxsc0Rpcn1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbkNsYXVkZSBDb2RlIHdpbGwgbm93IHJlY29nbml6ZSBsd3AgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3VuaW5zdGFsbCc6IHtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1NraWxsIG5vdCBpbnN0YWxsZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gZnMubHN0YXRTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModXNlclNraWxsc0Rpcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLnJtU3luYyh1c2VyU2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcygnVW5pbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwuJykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgRmFpbGVkIHRvIHVuaW5zdGFsbDogJHtlcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BhdGgnOiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgVW5rbm93biBhY3Rpb246ICR7YWN0aW9ufS4gVXNlIGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aC5gKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBDaGVjayBmb3IgdXBkYXRlcyAoc2tpcCBmb3IgdXBkYXRlIGNvbW1hbmQgaXRzZWxmIGFuZCBxdWlldCBtb2RlKVxuY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbmNvbnN0IGlzVXBkYXRlQ29tbWFuZCA9IGFyZ3NbMF0gPT09ICd1cGRhdGUnO1xuY29uc3QgaXNRdWlldCA9IGFyZ3MuaW5jbHVkZXMoJy0tcXVpZXQnKSB8fCBhcmdzLmluY2x1ZGVzKCctLWpzb24nKTtcblxuaWYgKCFpc1VwZGF0ZUNvbW1hbmQgJiYgIWlzUXVpZXQpIHtcbiAgLy8gRmlyZSBhbmQgZm9yZ2V0IC0gZG9uJ3QgYmxvY2sgc3RhcnR1cFxuICBjaGVja0ZvclVwZGF0ZXMoKS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbi8vIFBhcnNlIGFuZCBleGVjdXRlXG5wcm9ncmFtLnBhcnNlKCk7XG4iXX0=
|
|
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
|