@pipeline-builder/pipeline-manager 3.4.192 → 4.0.2
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/dist/agent/targets.d.ts +1 -1
- package/dist/agent/targets.js +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -4
- package/dist/commands/create-pipeline.js +6 -6
- package/dist/commands/get-pipeline.js +2 -2
- package/dist/commands/instantiate-template.d.ts +20 -0
- package/dist/commands/instantiate-template.d.ts.map +1 -0
- package/dist/commands/instantiate-template.js +274 -0
- package/dist/commands/list-pipelines.js +7 -7
- package/dist/commands/provision.js +3 -3
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/pipeline-template.d.ts +48 -0
- package/dist/types/pipeline-template.d.ts.map +1 -0
- package/dist/types/pipeline-template.js +4 -0
- package/dist/types/pipeline.d.ts +7 -5
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/types/pipeline.js +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +2 -1
- package/dist/utils/plugin-resolver.js +2 -2
- package/dist/utils/registry.js +3 -3
- package/package.json +4 -4
|
@@ -382,7 +382,7 @@ export async function bootstrapAndLocate(spec, bootstrap, bootstrapCmd, sparsePa
|
|
|
382
382
|
export async function resolveLoadsInteractively(target, url, region, cwd, bootstrapped, bootstrap, postStepFlags) {
|
|
383
383
|
const prompts = {
|
|
384
384
|
plugins: 'Load plugins?',
|
|
385
|
-
samples: 'Load sample
|
|
385
|
+
samples: 'Load sample pipeline templates?',
|
|
386
386
|
compliance: 'Load compliance rules?',
|
|
387
387
|
};
|
|
388
388
|
printSection('Optional post-install loads');
|
|
@@ -489,7 +489,7 @@ export function provision(program) {
|
|
|
489
489
|
// Post-install loads — each opt-in step also adds its deploy folder to the sparse clone.
|
|
490
490
|
.option('--with-plugins', 'Post-install: build + load plugins (adds deploy/plugins, deploy/codebuild)', false)
|
|
491
491
|
.option('--with-compliance', 'Post-install: load sample compliance rules/policies (adds deploy/compliance)', false)
|
|
492
|
-
.option('--with-samples', 'Post-install: load sample
|
|
492
|
+
.option('--with-samples', 'Post-install: load sample pipeline templates (adds deploy/samples)', false)
|
|
493
493
|
.option('--with-all', 'Post-install: plugins + compliance + samples', false)
|
|
494
494
|
.option('--build-bootstrap', 'Build + publish the CodeBuild bootstrap image during register (adds deploy/codebuild)', false)
|
|
495
495
|
.option('--with-smoke-test', 'Post-install: read-only API reachability check', false)
|
|
@@ -864,4 +864,4 @@ export function provision(program) {
|
|
|
864
864
|
}
|
|
865
865
|
});
|
|
866
866
|
}
|
|
867
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAsIHR5cGUgQm9vdHN0cmFwU3BlYyB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgc2hlbGxRdW90ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdkb2NrZXInO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgZm9yY2U/OiBib29sZWFuOyB5ZXM/OiBib29sZWFuOyBqc29uPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgc3RhY2tOYW1lOiBvcHRzLnN0YWNrTmFtZSxcbiAgICBjbHVzdGVyTmFtZTogb3B0cy5jbHVzdGVyTmFtZSxcbiAgICByZWdpb246IG9wdHMucmVnaW9uLFxuICAgIC8vIGVrcyB0ZWFyZG93biAoYmluL3NodXRkb3duLnNoKSBhbHNvIGNsZWFucyB1cCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcyBmb3JcbiAgICAvLyB0aGUgZG9tYWluLCBzbyBmb3J3YXJkIHRoZW0gd2hlbiBwcmVzZW50LlxuICAgIGRvbWFpbjogb3B0cy5kb21haW4sXG4gICAgaG9zdGVkWm9uZUlkOiBvcHRzLmhvc3RlZFpvbmVJZCxcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBhc3N1bWVZZXMgZm9yd2FyZHMgYSBuYXRpdmUgYC0teWVzYCB0byBhbnlcbiAgICAvLyBzY3JpcHQtYmFzZWQgdGVhcmRvd24gKGVjMiBkZWxldGUtc3RhY2sgaGFzIG5vIHByb21wdDsgZWtzIHNodXRkb3duLnNoIHNraXBzIGl0cyBvd24pLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICAvLyBCaW5kIHRoZSBjb25maXJtYXRpb24gdG8gdGhlIHJlc291cmNlIGFjdHVhbGx5IGRlc3Ryb3llZDogYSBjdXN0b20gbmFtZSAoZWMyXG4gICAgLy8gLS1zdGFjay1uYW1lIC8gZWtzIC0tY2x1c3Rlci1uYW1lKSBtdXN0IGJlIHR5cGVkIHZlcmJhdGltIHNvIGEgd3JvbmcgbmFtZSBjYW4ndCBiZVxuICAgIC8vIGNvbmZpcm1lZCBieSBoYWJpdDsgb3RoZXJ3aXNlIHRoZSB0YXJnZXQgaWQuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGFyZ2V0ID09PSAnZWtzJyA/IG9wdHMuY2x1c3Rlck5hbWUgOiBvcHRzLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25maXJtVG9rZW4gPSByZXNvdXJjZU5hbWUgPz8gdGFyZ2V0O1xuICAgIGNvbnN0IG5vdW4gPSB0YXJnZXQgPT09ICdla3MnID8gKG9wdHMuY2x1c3Rlck5hbWUgPyAnY2x1c3RlciBuYW1lJyA6ICd0YXJnZXQgaWQnKSA6IChvcHRzLnN0YWNrTmFtZSA/ICdzdGFjayBuYW1lJyA6ICd0YXJnZXQgaWQnKTtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke2NvbmZpcm1Ub2tlbn1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IGNvbmZpcm1Ub2tlbikge1xuICAgICAgcHJpbnRXYXJuaW5nKGBUaGF0IGRpZG4ndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCAke25vdW59IHRvIGNvbmZpcm0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICBpZiAoZG93bkNvZGUgIT09IDApIHtcbiAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIGRlcGxveSBjb21tYW5kIChyZWFsLCBzZWNyZXRzIHVubWFza2VkLCBzdHJlYW1lZCArIGNhcHR1cmVkKSB3aXRoIGFcbiAqIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIOKAlCB0aGUgZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQsIHNvIGEgZml4ZWRcbiAqIHJlLXJ1biByZXN1bWVzIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIuIFJldHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQgcGx1cyB0aGVcbiAqIChwb3NzaWJseSBmaXgtYWRqdXN0ZWQpIHBhcmFtcywgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyBmb3IgU0VTIGd1aWRhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVwbG95V2l0aFJldHJ5KFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIGN3ZDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhaU9wdHM6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH0sXG4gIG9wdHM6IHsgcmV0cmllcz86IHN0cmluZzsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IHN1Y2NlZWRlZDogYm9vbGVhbjsgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB7XG4gIC8vIEJvdW5kIHJldHJpZXMgc28gYW4gdW5hdHRlbmRlZCBgLS15ZXNgIHJ1biBjYW4ndCBhdXRvLXJlLXJ1biBhIDE14oCTMzAgbWluXG4gIC8vIGRlcGxveSBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIHRpbWVzIG9uIGEgcGVyc2lzdGVudGx5LXJldHJ5YWJsZSBzaWduYXR1cmUuXG4gIGNvbnN0IE1BWF9SRVRSSUVTID0gNTtcbiAgY29uc3QgcmVxdWVzdGVkUmV0cmllcyA9IE1hdGgubWF4KDAsIHBhcnNlSW50KG9wdHMucmV0cmllcyA/PyAnJywgMTApIHx8IDApO1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1pbihyZXF1ZXN0ZWRSZXRyaWVzLCBNQVhfUkVUUklFUyk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFXUyB0YXJnZXRzIHdpdGggYC0taW5pdCBhdXRvYDogdGhlIGRlcGxveSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgd2hlcmUgdG8gd2F0Y2guXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfSBlbHNlIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHNldHVwLnNoIHJ1bnMgaW5pdC1wbGF0Zm9ybSBpbiBpdHMgZmluYWwgcGhhc2UnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcywnKTtcbiAgICBwcmludEluZm8oJyAgb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKS4gUGFzcyAtLWluaXQgbWFudWFsIHRvIHJ1biBpdCB5b3Vyc2VsZiBpbnN0ZWFkLicpO1xuICB9XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQuc3RhcnRzV2l0aCgnc3RvcmUtdG9rZW4nKSB8fCBpZCA9PT0gJ2V2ZW50cycpO1xuICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZShzLmlkKSk7XG4gIGNvbnN0IHJlbW90ZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+IGlzUmVtb3RlKHMuaWQpKTtcbiAgaWYgKHJlbW90ZS5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICAgIC8vIEVDMiBydW5zIHRoZSBwbGF0Zm9ybSBhcyBhIGRlZGljYXRlZCBgbWluaWt1YmVgIHVzZXIgaW5zaWRlIHRoZSBpbnN0YW5jZTogdGhlXG4gICAgICAvLyBjbHVzdGVyLCBpdHMga3ViZWNvbmZpZywgYW5kIHRoZSBqd3Qtc2VjcmV0IGFsbCBiZWxvbmcgdG8gdGhhdCB1c2VyLCBhbmQgdGhlXG4gICAgICAvLyByZWdpc3RlciBzdGVwIGJ1aWxkcytwdXNoZXMgaW1hZ2VzIGFnYWluc3QgaXQuIFNvIGl0IE1VU1QgcnVuIG9uIHRoZSBib3ggYXNcbiAgICAgIC8vIGBtaW5pa3ViZWAg4oCUIHByaW50IHRoZSBleGFjdCBsYW5kaW5nIHNlcXVlbmNlIHJhdGhlciB0aGFuIGEgYmFyZSBjb21tYW5kLlxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBmaW5pc2ggc2V0dXAgT04gdGhlIGluc3RhbmNlIChpdCBidWlsZHMgaW1hZ2VzICsgcmVhZHMgdGhlIGNsdXN0ZXIsIHNvIGl0Jyk7XG4gICAgICBwcmludEluZm8oJ2Nhbm5vdCBydW4gZnJvbSBoZXJlKS4gTGFuZCBvbiB0aGUgYm94LCBiZWNvbWUgdGhlIGBtaW5pa3ViZWAgdXNlciwgdGhlbiBydW4gaXQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAgYXdzIHNzbSBzdGFydC1zZXNzaW9uIC0tdGFyZ2V0IDxJbnN0YW5jZUlkPiAgICAgICMgSW5zdGFuY2VJZCBzdGFjayBvdXRwdXQnKTtcbiAgICAgIHByaW50SW5mbygnICBzdWRvIC1pdSBtaW5pa3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvd25zIHRoZSBjbHVzdGVyICsgZG9ja2VyJyk7XG4gICAgICBwcmludEluZm8oJyAgY2QgL29wdC9waXBlbGluZS9waXBlbGluZS1idWlsZGVyICAgICAgICAgICAgICAgICMgdGhlIGRlcGxveWVkIGNoZWNrb3V0Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAgJHtzLmNvbW1hbmR9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVrczogaW5pdC1wbGF0Zm9ybSBwb3J0LWZvcndhcmRzIHRvIHN2Yy9uZ2lueCwgc28gcmVnaXN0ZXIgcnVucyBmcm9tIGFueXdoZXJlIHdpdGhcbiAgICAgIC8vIGt1YmVjdGwgYWNjZXNzIOKAlCBubyBpbi1WUEMgcmVxdWlyZW1lbnQgYW5kIG5vIHdhaXRpbmcgb24gdGhlIEFMQi9ETlMuIChBIC0td2l0aC1ldmVudHNcbiAgICAgIC8vIGJ1bmRsZSwgaWYgcHJlc2VudCwgYWRkaXRpb25hbGx5IG5lZWRzIEFXUyBjcmVkcyArIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybS4pXG4gICAgICBwcmludEluZm8oJ1xcbk5leHQg4oCUIHJ1biB3aXRoIGt1YmVjdGwgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIChpbiB0aGlzIG9yZGVyKTonKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICDigKIgJHtzLmxhYmVsfSDigJQgJHtzLmNvbW1hbmR9YCk7XG4gICAgfVxuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkLnN0YXJ0c1dpdGgoJ3N0b3JlLXRva2VuJyk7XG4gICAgICBjb25zdCBlbnYgPSBuZWVkc0NyZWRzID8geyAuLi5zLmVudiwgLi4uYWRtaW5FbnYgfSA6IHMuZW52O1xuICAgICAgLy8gTG9hZHMvc21va2UgYXJlIG5vaXN5ICsgbm9uLWludGVyYWN0aXZlIOKGkiBydW4gUVVJRVQgKGNhcHR1cmUsIHNob3cgb25seSBvblxuICAgICAgLy8gZmFpbHVyZSkuIEV4Y2VwdGlvbjogYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzIHByb21wdHMsIHNvIGl0IG11c3Qgc3RyZWFtLlxuICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICBjb25zdCBxdWlldCA9ICFpbnRlcmFjdGl2ZVJlZ2lzdGVyO1xuICAgICAgaWYgKHF1aWV0KSBwcmludEluZm8oYCR7cy5jb21tYW5kfVxcbiAg4oCmcnVubmluZyAob3V0cHV0IHNob3duIG9ubHkgaWYgaXQgZmFpbHMpYCk7XG4gICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgcXVpZXQsIGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFyc2UtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gKHdoZW4gLS1yZXBvLCBvciBhY2NlcHRlZCB2aWEgdGhlIGludGVyYWN0aXZlXG4gKiBvZmZlciksIHJlcG9pbnQgY3dkIGludG8gaXQsIGFuZCB2ZXJpZnkgdGhlIGRlcGxveSBlbnRyeXBvaW50IGV4aXN0cy4gT3ducyB0aGVcbiAqIGN3ZC9ib290c3RyYXBwZWQgc3RhdGUuIFNldHMgZXhpdENvZGUgb24gYSBoYXJkIGZhaWx1cmUgKGNsb25lIGVycm9yIC8gbWlzc2luZ1xuICogZW50cnlwb2ludCksIG1hdGNoaW5nIHRoZSBvbGQgaW5saW5lIGJlaGF2aW9yOyBhIHBsYWluIGRlY2xpbmUgbGVhdmVzIGV4aXRDb2RlXG4gKiB1bnRvdWNoZWQuIFJldHVybnMgb2s6ZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgYWJvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBbmRMb2NhdGUoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgYm9vdHN0cmFwQ21kOiBzdHJpbmcgfCBudWxsLFxuICBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHN0YXJ0Q3dkOiBzdHJpbmcsXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IGN3ZDogc3RyaW5nOyBib290c3RyYXBwZWQ6IGJvb2xlYW47IG9rOiBib29sZWFuIH0+IHtcbiAgbGV0IGN3ZCA9IHN0YXJ0Q3dkO1xuICBsZXQgYm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gIC8vIFNoYXJlZCBieSBgLS1yZXBvYCBhbmQgdGhlIGludGVyYWN0aXZlIG9mZmVyLiBSZXBvaW50cyBjd2QgKyBzZXRzIGJvb3RzdHJhcHBlZDtcbiAgLy8gYGJvb3RzdHJhcHBlZGAgcmVjb3JkcyB3aGV0aGVyIHdlIGNyZWF0ZWQgdGhlIGNsb25lICh2cy4gYW4gZXhpc3RpbmcgY2hlY2tvdXQpIOKAlFxuICAvLyBvbmx5IHRoZW4gY2FuIHRoZSBjYWxsZXIgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2ggbG9hZCBmb2xkZXJzLlxuICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICBwcmludEluZm8oY21kKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgYm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICBwcmludFN1Y2Nlc3MoYFJlcG8gaXMgcmVhZHkg4oCUIGNvbnRpbnVpbmcgZnJvbSAke2N3ZH1gKTtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRocy5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgc3BhcnNlIGNsb25lIGlzIG1pc3NpbmcgJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoYXQgcmVmIG1heSBub3QgaGF2ZSB0aG9zZSBmb2xkZXJzLiBUcnkgYSBkaWZmZXJlbnQgLS1yZWYuYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gYC0tcmVwb2A6IGNsb25lIHVwIGZyb250IChtdXN0IHByZWNlZGUgdGhlIGVudHJ5cG9pbnQgY2hlY2spLlxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRJbmZvKGBcXG5Cb290c3RyYXAg4oaSIGNsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IChzcGFyc2UpLmApO1xuICAgIGlmICghKGF3YWl0IGNvbmZpcm0oJ0dvIGFoZWFkIHdpdGggdGhlIGNsb25lPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4gUmUtcnVuIHdoZW5ldmVyIHlvdVxcJ3JlIHJlYWR5LicpO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZCB3ZSBoYXZlbid0XG4gIC8vIGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSkgc28gYSBmcmVzaCBtYWNoaW5lIGNhblxuICAvLyBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdHMueWVzO1xuICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIG9wdC1pbiBsb2Fkcywgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNvIHdlIG9ubHkgYXNrIG9uY2UgdGhlIG9wZXJhdG9yXG4gKiBoYXMgYWdyZWVkIHRvIHByb2NlZWQpLiBQcm9tcHRzIHBlciBsb2FkLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWRcbiAqIGZvbGRlcnMgaW50byBhIGJvb3RzdHJhcHBlZCBzcGFyc2UgY2xvbmUsIHRoZW4gcmUtcmVzb2x2ZXMgdGhlIHBvc3QtaW5zdGFsbCBzdGVwc1xuICogd2l0aCB0aGUgc2VsZWN0aW9ucy4gUmV0dXJucyB0aGUgY2hvc2VuIGlkcyArIHRoZSByZWNvbXB1dGVkIHN0ZXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGJvb3RzdHJhcHBlZDogYm9vbGVhbixcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBwb3N0U3RlcEZsYWdzOiB7IGluaXQ6IGJvb2xlYW47IGF1dG9Jbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICR7c2hlbGxRdW90ZShib290c3RyYXAucmVmKX1gO1xuICAgICAgcHJpbnRJbmZvKGFkZENtZCk7XG4gICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChhZGRDbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoZSBtYXRjaGluZyBsb2FkIHN0ZXAocykgbWF5IGZhaWwuIFJlLXJ1biB3aXRoIC0tcmVwbyB0byByZWZyZXNoIHRoZSBjbG9uZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICB0YXJnZXQsXG4gICAgdXJsLFxuICAgIHJlZ2lvbixcbiAgICBlbmFibGVkTG9hZElkczogY2hvc2VuLFxuICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgYnVpbGRCb290c3RyYXA6IHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgfHwgY2hvc2VuLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gIH0pO1xuICByZXR1cm4geyBlbmFibGVkTG9hZElkczogY2hvc2VuLCBzdGVwczogcmVzb2x2ZWQuc3RlcHMsIHNraXBwZWQ6IHJlc29sdmVkLnNraXBwZWQgfTtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2VjcmV0IHBhcmFtIHZhbHVlcyAoZS5nLiB0aGUgZ2hjciB0b2tlbikgZnJvbSBjYXB0dXJlZCBkZXBsb3kgb3V0cHV0XG4gKiBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgTExNIGZvciBkaWFnbm9zaXMuIFRoZSBkZXBsb3kgcnVucyB3aXRoIHNlY3JldHNcbiAqIHVubWFza2VkLCBzbyBhbHRob3VnaCB0aGUgY3VycmVudCBzY3JpcHRzIGRvbid0IGVjaG8gdGhlbSwgdGhpcyBrZWVwcyBhIGZ1dHVyZVxuICogc2NyaXB0J3Mgc3RyYXkgZWNobyAob3IgYSB2ZXJib3NlIHN1Yi10b29sKSBmcm9tIGNyb3NzaW5nIHRoZSB0aGlyZC1wYXJ0eS1MTE1cbiAqIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGxldCBvdXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIFsuLi5zcGVjLnJlcXVpcmVkLCAuLi5zcGVjLm9wdGlvbmFsXSkge1xuICAgIGlmICghaW5wdXQuc2VjcmV0KSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1tpbnB1dC5rZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+PSA0KSBvdXQgPSBvdXQuc3BsaXQodmFsdWUpLmpvaW4oJyoqKicpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcHJvdmlzaW9uYCBjb21tYW5kIOKAlCBhbiBBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBQaXBlbGluZVxuICogQnVpbGRlciBQTEFURk9STSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUykuIEl0IHByaW50cyB0aGUgYXNzZW1ibGVkIHBsYW5cbiAqIChwcmVyZXEgY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHkpIGFuZCB0aGVuIERFUExPWVMsIGdhdGVkIGJ5XG4gKiBjb25maXJtYXRpb24gcHJvbXB0cyAoYC0teWVzYCB0byBhdXRvLWFjY2VwdDsgYC0tanNvbmAgaXMgdGhlIG9ubHkgbm9uLWV4ZWN1dGluZ1xuICogbW9kZSwgcHJpbnRpbmcgdGhlIHBsYW4gZm9yIHRvb2xpbmcpLiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaFxuICogbWFjaGluZSBieSBzcGFyc2VseSBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgK1xuICogb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnMgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLFxuICogc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS4gYC0tdGVhcmRvd25gIHJlbW92ZXMgYSBkZXBsb3ltZW50IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUyk6IGRlcGxveXMgaXQgKGdhdGVkIGJ5IGNvbmZpcm1hdGlvbiBwcm9tcHRzKSwgb3IgLS10ZWFyZG93biB0byByZW1vdmUnKVxuICAgIC5vcHRpb24oJy10LCAtLXRhcmdldCA8dGFyZ2V0PicsIGBEZXBsb3kgdGFyZ2V0OiAke1RBUkdFVF9JRFMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctcCwgLS1wcm9tcHQgPHRleHQ+JywgJ05hdHVyYWwtbGFuZ3VhZ2UgZ29hbCAocGFyc2VkIGludG8gcGFyYW1zIHdoZW4gYW4gQUkga2V5IGlzIHNldCknKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1kZXBsb3ktbW9kZSA8bW9kZT4nLCAncHVibGljIHwgcHJpdmF0ZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1sZWFuJywgJ0VDMjogdHJpbSBvcHRpb25hbCBvYnNlcnZhYmlsaXR5L2FkbWluIHNlcnZpY2VzIHNvIHRoZSBjb3JlIHN0YWNrICsgbWVzaCBmaXRzIGEgdDMueGxhcmdlIChwYWlyIHdpdGggLS1pbnN0YW5jZS10eXBlIHQzLnhsYXJnZSknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChFQzIpIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlciAoc2V0IGl0IHRvIHJ1biBhIHNlY29uZCBlbnZpcm9ubWVudCknKVxuICAgIC5vcHRpb24oJy0tY2x1c3Rlci1uYW1lIDxuYW1lPicsICdFS1MgY2x1c3RlciBuYW1lIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlcicpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWluaXQgPG1vZGU+JywgJ1Bvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uOiBhdXRvIChERUZBVUxUIOKAlCByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXM7IG9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdCksIG1hbnVhbCAoZG9uXFwndCBzZWxmLWluaXQg4oCUIHN1cmZhY2UgdGhlIHN0ZXAgZm9yIHlvdSB0byBydW4sIGUuZy4gdG8gc2V0IHJlYWwgYWRtaW4gY3JlZHMpLCBvciBza2lwIChkbyBub3RoaW5nKS4gbG9jYWwvbWluaWt1YmUvZWtzIHJ1biBpbml0IHZpYSBwcm92aXNpb24gdW5sZXNzIHNraXAuJylcbiAgICAvLyBEZXByZWNhdGVkIGFsaWFzZXMg4oCUIGtlcHQgd29ya2luZyBmb3IgYmFjay1jb21wYXQ7IC0taW5pdCBpcyB0aGUgZG9jdW1lbnRlZCBmb3JtLlxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBza2lwJylcbiAgICAub3B0aW9uKCctLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBhdXRvJylcbiAgICAub3B0aW9uKCctLW5vLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBtYW51YWwnKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgcGxhbiBhcyBKU09OIGFuZCBleGl0IFdJVEhPVVQgcnVubmluZyAodGhlIG9ubHkgbm9uLWV4ZWN1dGluZyBtb2RlIOKAlCBmb3IgdG9vbGluZy9DSSBpbnNwZWN0aW9uKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc2luZ2xlIHBvc3QtZGVwbG95IGluaXQgbW9kZSAoYXV0b3xtYW51YWx8c2tpcCkgZnJvbSAtLWluaXQgb3IgaXRzXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgYWxpYXNlcy4gVHdvIGludGVybmFsIHNpZ25hbHMgZGVyaXZlIGZyb20gaXQ6IHdoZXRoZXIgaW5pdCBoYXBwZW5zIGF0XG4gICAgICAgIC8vIGFsbCwgYW5kIHdoZXRoZXIgdGhlIERFUExPWSBzZWxmLXJ1bnMgaXQgKHZzLiB3ZSBzdXJmYWNlIGl0KS5cbiAgICAgICAgY29uc3QgaW5pdE1vZGUgPSByZXNvbHZlSW5pdE1vZGUob3B0aW9ucyk7XG4gICAgICAgIGlmIChpbml0TW9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYEludmFsaWQgLS1pbml0IHZhbHVlICcke1N0cmluZyhvcHRpb25zLmluaXQpfScuIFVzZSBvbmUgb2Y6ICR7SU5JVF9NT0RFUy5qb2luKCcgfCAnKX0uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRFbmFibGVkID0gaW5pdE1vZGUgIT09ICdza2lwJzsgLy8gc2tpcCDihpIgbm8gcmVnaXN0ZXIvbG9hZHMgYXQgYWxsXG4gICAgICAgIGNvbnN0IHNlbGZJbml0ID0gaW5pdE1vZGUgPT09ICdhdXRvJzsgLy8gYXV0byDihpIgdGhlIGRlcGxveSBpbml0aWFsaXplcyBpdHNlbGZcblxuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgLy8gZWMyIExFQU4gbW9kZSAoYm9vbGVhbikg4oaSIGFzc2VtYmxlQ29tbWFuZCBlbWl0cyBgLS1sZWFuYCwgd2hpY2ggc2V0dXAuc2hcbiAgICAgICAgICAvLyBmb3J3YXJkcyB0byB0aGUgQ0ZOIGBMZWFuYCBwYXJhbS4gT25seSBlYzIncyBzcGVjIGxpc3RzIGl0OyBvdGhlciB0YXJnZXRzIGlnbm9yZSBpdC5cbiAgICAgICAgICBsZWFuOiBvcHRpb25zLmxlYW4gPT09IHRydWUsXG4gICAgICAgICAgLy8gRGVwbG95LXRpbWUgcmVzb3VyY2UgaWRlbnRpdHk6IGVjMiBlbWl0cyAtLXN0YWNrLW5hbWUgKGtleSBzdGFja05hbWUpLCBla3MgZW1pdHNcbiAgICAgICAgICAvLyAtLWNsdXN0ZXItbmFtZSAoa2V5IGNsdXN0ZXJOYW1lKS4gQm90aCBhbHNvIGRyaXZlIHRlYXJkb3duLiBVbmRlZmluZWQg4oaSIGRlZmF1bHRzLlxuICAgICAgICAgIHN0YWNrTmFtZTogb3B0aW9ucy5zdGFja05hbWUsXG4gICAgICAgICAgY2x1c3Rlck5hbWU6IG9wdGlvbnMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBlbWFpbC9ub0VtYWlsIGFyZSBjb2VyY2VkIEFGVEVSIHRoZSBOTCBtZXJnZSBiZWxvdyDigJQgcGFyc2VHb2FsIGNhbiByZXR1cm5cbiAgICAgICAgICAvLyBgZW1haWxgLCBzbyBwcmUtY29lcmNpbmcgaGVyZSAobmV2ZXItdW5kZWZpbmVkKSB3b3VsZCBsZXQgdGhlIG1lcmdlJ3NcbiAgICAgICAgICAvLyBgPT09IHVuZGVmaW5lZGAgZ3VhcmQgc2lsZW50bHkgZHJvcCBhbiBBSS1wYXJzZWQgZW1haWwgY2hvaWNlLiBMZWZ0IG91dCBvZlxuICAgICAgICAgIC8vIHRoaXMgbGl0ZXJhbCBvbiBwdXJwb3NlOyByZXNvbHZlZCBhIGZldyBsaW5lcyBkb3duLlxuICAgICAgICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgICAgICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgICAgICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICAgICAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAgICAgICAvLyBUaGUgQVdTIGRlcGxveXMgc2VsZi1pbml0IGJ5IGRlZmF1bHQgKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbFxuICAgICAgICAgIC8vIHBoYXNlKSwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGAgd2hlbiB0aGUgbW9kZSBpcyBOT1QgYXV0b1xuICAgICAgICAgIC8vIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBkZXBsb3kgaW5pdCBpdHNlbGZcIikuIGAtLWF1dG8taW5pdGAgKGEgbm8tb3AgcmVhZmZpcm0pXG4gICAgICAgICAgLy8gaXMgbmV2ZXIgZW1pdHRlZC4gT25seSBlYzIvZWtzIGNhcnJ5IHRoZXNlIGZsYWdzIGluIHRoZWlyIHNwZWM7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgICAgICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gdGhlIEFXUyB0YXJnZXRzIGluXG4gICAgICAgICAgLy8gcmVzb2x2ZVBvc3RTdGVwcywgc28gYSBzZWxmLWluaXRpYWxpemluZyBlYzIvZWtzIGRlcGxveSBkb2Vzbid0IGFsc28gcHJpbnQgYSBtYW51YWxcbiAgICAgICAgICAvLyByZWdpc3RlciBzdGVwLiBGb3IgbWFudWFsIG1vZGUgKG9yIGxvY2FsL21pbmlrdWJlKSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIC0tZGlhZ25vc2UgaXMgYSByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlOiByZXR1cm4gd2hldGhlciBvciBub3QgYSB0YXJnZXQgd2FzXG4gICAgICAgICAgLy8gZ2l2ZW4sIHNvIGl0IG5ldmVyIGZhbGxzIHRocm91Z2ggaW50byBhIChwb3NzaWJseSAtLXllcykgZGVwbG95LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChzZXR1cC5zaCdzIGZpbmFsIHBoYXNlIGhhcmRjb2Rlc1xuICAgICAgICAgIC8vIExPQURfKj15KS4gc2V0dXAuc2ggcnVucyB0aGUgbG9hZHMgaXRzZWxmIChvdmVyIGEga3ViZWN0bCBwb3J0LWZvcndhcmQpLCBidXQgd2VcbiAgICAgICAgICAvLyBzdGlsbCByZXNvbHZlIHRoZW0gaGVyZSBzbyB0aGUgc3BhcnNlIGNsb25lIGZldGNoZXMgdGhlIGZvbGRlcnMgc2V0dXAuc2ggYnVpbGRzXG4gICAgICAgICAgLy8gZnJvbS4gRXhwbGljaXQgYC0td2l0aC0qYCBmbGFncyBvdmVycmlkZTsgYC0taW5pdCBtYW51YWxgIC8gYC0taW5pdCBza2lwYCBvcHQgb3V0LlxuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAgIHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgPSBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluaWt1YmUvbG9jYWwga2VlcCB0aGUgaW50ZXJhY3RpdmUgcGlja2VyIChsb2NhbC1kZXY7IG5vIGAtLWluaXQgYXV0b2AgbG9hZCBwYXJpdHkpLlxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIC8vIEhhcmQtcmVxdWlyZSBwbHVnaW4gcHJlcmVxcyAoZS5nLiB5cSBvbiBtaW5pa3ViZSkgb25seSB3aGVuIHBsdWdpbnMgaXMgRVhQTElDSVRMWVxuICAgICAgICAvLyBzZWxlY3RlZCDigJQgTk9UIG9uIHRoZSB3aWxsUHJvbXB0TG9hZHMgZ3Vlc3MsIHdoaWNoIHdvdWxkIGJsb2NrL3Byb21wdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIHVzZXIgaGFzIGV2ZW4gYmVlbiBhc2tlZCB3aGV0aGVyIHRoZXkgd2FudCBwbHVnaW5zLiBJZiB0aGV5IHBpY2sgcGx1Z2lucyBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0LCB3ZSByZS1jaGVjayArIG9mZmVyIHRvIGZldGNoIHJpZ2h0IGFmdGVyIHRoYXQgc2VsZWN0aW9uIChiZWxvdykuXG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIC8vIEludGVyYWN0aXZlIGxvYWRzIGFyZSBjaG9zZW4gQUZURVIgdGhlIGNsb25lLCBzbyB0aGUgY2xvbmUgc3RheXMgbWluaW1hbCDigJRcbiAgICAgICAgLy8gZWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyBmZXRjaGVkIHRoZW4gdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICBjb25zdCBzcGFyc2VQYXRocyA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgZW5hYmxlZExvYWRJZHMpO1xuICAgICAgICBjb25zdCBib290c3RyYXAgPSByZXNvbHZlQm9vdHN0cmFwKFxuICAgICAgICAgIHsgcmVwbzogdHlwZW9mIG9wdGlvbnMucmVwbyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcG8gOiB1bmRlZmluZWQsIHJlZjogb3B0aW9ucy5yZWYsIHdvcmtkaXI6IG9wdGlvbnMud29ya2RpciwgZnVsbDogIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSB9LFxuICAgICAgICAgIHNwYXJzZVBhdGhzLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib290c3RyYXBDbWQgPSB3YW50Qm9vdHN0cmFwID8gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApIDogbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIFJlLXJlc29sdmVkXG4gICAgICAgIC8vIGFmdGVyIHRoZSBwb3N0LWNsb25lIGxvYWQgcHJvbXB0cyAoc2VlIGJlbG93KSB3aGVuIHRob3NlIHJ1biBpbnRlcmFjdGl2ZWx5LlxuICAgICAgICBsZXQgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbiBiZWxvdykuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBbnkgbWlzc2luZyByZXF1aXJlZCBwcmVyZXEgdGhhdCdzIGEgc2luZ2xlIHN0YXRpYyBiaW5hcnkgKGUuZy4geXEpXG4gICAgICAgIC8vIGNhbiBiZSBmZXRjaGVkIGludG8gdGhlIHRvb2xzIGNhY2hlIGluc3RlYWQgb2YgYSBzeXN0ZW0gaW5zdGFsbCDigJQgbm9cbiAgICAgICAgLy8gYnJldy9hcHQuIE9mZmVyIGl0LCB0aGVuIHJlLWNoZWNrICh0aGUgY2FjaGUgZGlyIGlzIGFscmVhZHkgb24gUEFUSCkuXG4gICAgICAgIGNvbnN0IGZldGNoYWJsZSA9IHByZXJlcXMuZmlsdGVyKChjKSA9PiAhYy5vayAmJiBjLnJlcXVpcmVkICYmIGlzRmV0Y2hhYmxlKGMubmFtZSkpO1xuICAgICAgICBpZiAoZmV0Y2hhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBuYW1lcyA9IGZldGNoYWJsZS5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtuYW1lc30gbm90IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIG9mZmljaWFsIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0gKG5vIHN5c3RlbSBpbnN0YWxsKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBmZXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgICAgICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgbWFudWFsbHkgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgICAvLyBOb3cgdGhhdCBwbHVnaW5zIG1heSBoYXZlIGJlZW4gcGlja2VkLCByZS1jaGVjayB0aGUgcGx1Z2luLXNwZWNpZmljIHByZXJlcXMgd2VcbiAgICAgICAgICAvLyBkZWxpYmVyYXRlbHkgZGlkbid0IGhhcmQtcmVxdWlyZSB1cCBmcm9udCAoZS5nLiB5cSBmb3IgbWluaWt1YmUgcGx1Z2luIGJ1aWxkcykuXG4gICAgICAgICAgLy8gT2ZmZXIgdG8gZmV0Y2ggYW55IGZldGNoYWJsZSBvbmU7IHdhcm4gKGRvbid0IGJsb2NrIOKAlCB0aGUgcGxhdGZvcm0gc3RpbGwgZGVwbG95cylcbiAgICAgICAgICAvLyBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCwgc28gdGhlIGxhdGVyIHBsdWdpbiBidWlsZCBkb2Vzbid0IGZhaWwgb3BhcXVlbHkuXG4gICAgICAgICAgaWYgKGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5HYXBzID0gcGx1Z2luUHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgIXByZXJlcXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBjLm5hbWUpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBwbHVnaW5HYXBzKSB7XG4gICAgICAgICAgICAgIGlmIChpc0ZldGNoYWJsZShjLm5hbWUpICYmIGF3YWl0IGNvbmZpcm0oYFxcbiR7Yy5uYW1lfSBpcyBuZWVkZWQgdG8gYnVpbGQgcGx1Z2lucyBidXQgaXNuJ3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IGJlZm9yZSB0aGUgcGx1Z2luIGJ1aWxkIHJ1bnMuYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGAke2MubmFtZX0gbWlzc2luZyDigJQgdGhlIHBsdWdpbiBsb2FkL2J1aWxkIHN0ZXAgbWF5IGZhaWwuICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9jYWwvbWluaWt1YmUncyBzZXR1cC5zaCBSRVFVSVJFUyBhIGAuZW52YCBhbmQgYWJvcnRzIHdpdGhvdXQgaXQg4oCUIGNyZWF0ZVxuICAgICAgICAvLyBpdCBmcm9tIC5lbnYuZXhhbXBsZSB3aXRoIGdlbmVyYXRlZCBzZWNyZXRzIHNvIHRoZSBkZXBsb3kgaXMgbm9uLWludGVyYWN0aXZlLlxuICAgICAgICAvLyBlYzIgYW5kIGVrcyBkb24ndCBoYXZlIHByb3Zpc2lvbiBnZW5lcmF0ZSBhIGxvY2FsIGAuZW52YDogZWMyIGJvb3RzdHJhcHMgaXRzXG4gICAgICAgIC8vIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLCBhbmQgZWtzJ3Mgc2V0dXAuc2ggY3JlYXRlcyB0aGUgazhzIHNlY3JldHMgaXRzZWxmXG4gICAgICAgIC8vIChhIGRlcGxveS9hd3MvZWtzLy5lbnYuZXhhbXBsZSArIHNlY3JldCBzdGVwIGlzIGEgc2V0dXAuc2ggVE9ETykuXG4gICAgICAgIGlmICgodGFyZ2V0ID09PSAnZG9ja2VyJyB8fCB0YXJnZXQgPT09ICdtaW5pa3ViZScpICYmIGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IHdpdGggYSBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCAoc2VlIHJ1bkRlcGxveVdpdGhSZXRyeSkuXG4gICAgICAgIGNvbnN0IHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfSA9IGF3YWl0IHJ1bkRlcGxveVdpdGhSZXRyeShzcGVjLCB1cmwsIGN3ZCwgcGFyYW1zLCBhaU9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXN1Y2NlZWRlZCkgeyBwcm9jZXNzLmV4aXRDb2RlID0gMTsgcmV0dXJuOyB9XG4gICAgICAgIHByaW50U3VjY2VzcygnRGVwbG95IGNvbW1hbmQgY29tcGxldGVkLicpO1xuXG4gICAgICAgIC8vIDdkLiBTRVMgcG9zdC1kZXBsb3kgZ3VpZGFuY2UgKGFzeW5jIERLSU0gKyBzYW5kYm94ICsgYm91bmNlIHRvcGljKS5cbiAgICAgICAgLy8gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFQgb24gQVdTIGRlcGxveXMsIHNvIHN1cmZhY2UgdGhlIGd1aWRhbmNlXG4gICAgICAgIC8vIGZvciBlYzIvZWtzIHVubGVzcyB0aGUgb3BlcmF0b3Igb3B0ZWQgb3V0IHdpdGggLS1uby1lbWFpbC5cbiAgICAgICAgY29uc3Qgc2VzUHJvdmlzaW9uZWQgPSAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICAvLyBNaW5pa3ViZSByZWFjaGVzIHRoZSBnYXRld2F5IHZpYSBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkIHRoYXQgc2V0dXAuc2hcbiAgICAgICAgICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gICAgICAgICAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICAvLyBGcmVzaCBFS1MgbGVnaXRpbWF0ZWx5IG5lZWRzIGxvbmdlciB0aGFuIHRoZSAzMDBzIGRlZmF1bHQ6IEthcnBlbnRlciBwcm92aXNpb25zXG4gICAgICAgICAgLy8gbm9kZXMsIH4xMCBzZXJ2aWNlcyBjb2xkLXB1bGwgaW1hZ2VzLCB0aGUgQUxCIHByb3Zpc2lvbnMgKH4yLTMgbWluKSwgYW5kIHRoZVxuICAgICAgICAgIC8vIFJvdXRlIDUzIGFsaWFzIHByb3BhZ2F0ZXMuIEdpdmUgaXQgMTUgbWluIGJlZm9yZSBzdXJmYWNpbmcgdGhlIG5vdC1yZWFjaGFibGUgbm90ZS5cbiAgICAgICAgICBjb25zdCBoZWFsdGhUaW1lb3V0TXMgPSB0YXJnZXQgPT09ICdla3MnID8gOTAwXzAwMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgdGltZW91dE1zOiBoZWFsdGhUaW1lb3V0TXMsIG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICAvLyBHcmVlbiBvbmx5IHdoZW4gZnVsbHkgcmVhZHk7IGEgXCJoZWFsdGggT0sgYnV0IC9yZWFkeSBuZXZlciBjYW1lXCIgcHJvY2VlZC1cbiAgICAgICAgICAvLyBhbnl3YXkgc3RhdGUgaXMgaGVhbHRoeTp0cnVlIGJ1dCBkZWdyYWRlZCDihpIgd2FybiBzbyBpdCBkb2Vzbid0IHJlYWQgYXMgZG9uZS5cbiAgICAgICAgICAoaGVhbHRoLmhlYWx0aHkgJiYgaGVhbHRoLnJlYWR5ID8gcHJpbnRTdWNjZXNzIDogcHJpbnRXYXJuaW5nKShgJHtoZWFsdGgudXJsfSDigJQgJHtoZWFsdGguZGV0YWlsfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2YuIFBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgKyBvcHQtaW4gbG9hZHMsIHNtb2tlIHRlc3QsIGV2ZW50cywgY3VzdG9tKS5cbiAgICAgICAgLy8gU2VlIHJ1blBvc3RTdGVwcyDigJQgaXQgc3VyZmFjZXMgcmVnaXN0ZXIgKyB0aGUgZXZlbnRzIGJ1bmRsZSBhcyBtYW51YWwgaW4tVlBDXG4gICAgICAgIC8vIG5leHQtc3RlcHMgb24gRUMyL0VLUyBpbnN0ZWFkIG9mIGF1dG8tcnVubmluZyAoYW5kIGZhaWxpbmcpIHRoZW0gbG9jYWxseS5cbiAgICAgICAgLy8gYXV0b1J1biAoc2tpcCB0aGUgc2Vjb25kIGNvbmZpcm0pIG9ubHkgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBQSUNLRUQgYSBsb2FkIGluIHRoZVxuICAgICAgICAvLyBpbnRlcmFjdGl2ZSBwcm9tcHQg4oCUIGRlY2xpbmluZyBldmVyeSBsb2FkIHNob3VsZG4ndCBzaWxlbnRseSBydW4gcmVnaXN0ZXIgdW5wcm9tcHRlZC5cbiAgICAgICAgY29uc3QgYXV0b1JhbkxvYWRzID0gd2lsbFByb21wdExvYWRzICYmIGVuYWJsZWRMb2FkSWRzLmxlbmd0aCA+IDA7XG4gICAgICAgIGF3YWl0IHJ1blBvc3RTdGVwcyhwb3N0U3RlcHMsIHNraXBwZWRTdGVwcywgdGFyZ2V0LCBjd2QsIGFkbWluRW52LCB7IHllczogb3B0aW9ucy55ZXMsIGF1dG9SdW46IGF1dG9SYW5Mb2FkcywgYXV0b0luaXQ6IHBvc3RTdGVwRmxhZ3MuYXV0b0luaXQgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3Byb3Zpc2lvbicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
867
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAsIHR5cGUgQm9vdHN0cmFwU3BlYyB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgc2hlbGxRdW90ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdkb2NrZXInO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgZm9yY2U/OiBib29sZWFuOyB5ZXM/OiBib29sZWFuOyBqc29uPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgc3RhY2tOYW1lOiBvcHRzLnN0YWNrTmFtZSxcbiAgICBjbHVzdGVyTmFtZTogb3B0cy5jbHVzdGVyTmFtZSxcbiAgICByZWdpb246IG9wdHMucmVnaW9uLFxuICAgIC8vIGVrcyB0ZWFyZG93biAoYmluL3NodXRkb3duLnNoKSBhbHNvIGNsZWFucyB1cCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcyBmb3JcbiAgICAvLyB0aGUgZG9tYWluLCBzbyBmb3J3YXJkIHRoZW0gd2hlbiBwcmVzZW50LlxuICAgIGRvbWFpbjogb3B0cy5kb21haW4sXG4gICAgaG9zdGVkWm9uZUlkOiBvcHRzLmhvc3RlZFpvbmVJZCxcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBhc3N1bWVZZXMgZm9yd2FyZHMgYSBuYXRpdmUgYC0teWVzYCB0byBhbnlcbiAgICAvLyBzY3JpcHQtYmFzZWQgdGVhcmRvd24gKGVjMiBkZWxldGUtc3RhY2sgaGFzIG5vIHByb21wdDsgZWtzIHNodXRkb3duLnNoIHNraXBzIGl0cyBvd24pLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICAvLyBCaW5kIHRoZSBjb25maXJtYXRpb24gdG8gdGhlIHJlc291cmNlIGFjdHVhbGx5IGRlc3Ryb3llZDogYSBjdXN0b20gbmFtZSAoZWMyXG4gICAgLy8gLS1zdGFjay1uYW1lIC8gZWtzIC0tY2x1c3Rlci1uYW1lKSBtdXN0IGJlIHR5cGVkIHZlcmJhdGltIHNvIGEgd3JvbmcgbmFtZSBjYW4ndCBiZVxuICAgIC8vIGNvbmZpcm1lZCBieSBoYWJpdDsgb3RoZXJ3aXNlIHRoZSB0YXJnZXQgaWQuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGFyZ2V0ID09PSAnZWtzJyA/IG9wdHMuY2x1c3Rlck5hbWUgOiBvcHRzLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25maXJtVG9rZW4gPSByZXNvdXJjZU5hbWUgPz8gdGFyZ2V0O1xuICAgIGNvbnN0IG5vdW4gPSB0YXJnZXQgPT09ICdla3MnID8gKG9wdHMuY2x1c3Rlck5hbWUgPyAnY2x1c3RlciBuYW1lJyA6ICd0YXJnZXQgaWQnKSA6IChvcHRzLnN0YWNrTmFtZSA/ICdzdGFjayBuYW1lJyA6ICd0YXJnZXQgaWQnKTtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke2NvbmZpcm1Ub2tlbn1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IGNvbmZpcm1Ub2tlbikge1xuICAgICAgcHJpbnRXYXJuaW5nKGBUaGF0IGRpZG4ndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCAke25vdW59IHRvIGNvbmZpcm0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICBpZiAoZG93bkNvZGUgIT09IDApIHtcbiAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIGRlcGxveSBjb21tYW5kIChyZWFsLCBzZWNyZXRzIHVubWFza2VkLCBzdHJlYW1lZCArIGNhcHR1cmVkKSB3aXRoIGFcbiAqIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIOKAlCB0aGUgZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQsIHNvIGEgZml4ZWRcbiAqIHJlLXJ1biByZXN1bWVzIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIuIFJldHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQgcGx1cyB0aGVcbiAqIChwb3NzaWJseSBmaXgtYWRqdXN0ZWQpIHBhcmFtcywgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyBmb3IgU0VTIGd1aWRhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVwbG95V2l0aFJldHJ5KFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIGN3ZDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhaU9wdHM6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH0sXG4gIG9wdHM6IHsgcmV0cmllcz86IHN0cmluZzsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IHN1Y2NlZWRlZDogYm9vbGVhbjsgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB7XG4gIC8vIEJvdW5kIHJldHJpZXMgc28gYW4gdW5hdHRlbmRlZCBgLS15ZXNgIHJ1biBjYW4ndCBhdXRvLXJlLXJ1biBhIDE14oCTMzAgbWluXG4gIC8vIGRlcGxveSBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIHRpbWVzIG9uIGEgcGVyc2lzdGVudGx5LXJldHJ5YWJsZSBzaWduYXR1cmUuXG4gIGNvbnN0IE1BWF9SRVRSSUVTID0gNTtcbiAgY29uc3QgcmVxdWVzdGVkUmV0cmllcyA9IE1hdGgubWF4KDAsIHBhcnNlSW50KG9wdHMucmV0cmllcyA/PyAnJywgMTApIHx8IDApO1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1pbihyZXF1ZXN0ZWRSZXRyaWVzLCBNQVhfUkVUUklFUyk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFXUyB0YXJnZXRzIHdpdGggYC0taW5pdCBhdXRvYDogdGhlIGRlcGxveSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgd2hlcmUgdG8gd2F0Y2guXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfSBlbHNlIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHNldHVwLnNoIHJ1bnMgaW5pdC1wbGF0Zm9ybSBpbiBpdHMgZmluYWwgcGhhc2UnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcywnKTtcbiAgICBwcmludEluZm8oJyAgb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKS4gUGFzcyAtLWluaXQgbWFudWFsIHRvIHJ1biBpdCB5b3Vyc2VsZiBpbnN0ZWFkLicpO1xuICB9XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQuc3RhcnRzV2l0aCgnc3RvcmUtdG9rZW4nKSB8fCBpZCA9PT0gJ2V2ZW50cycpO1xuICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZShzLmlkKSk7XG4gIGNvbnN0IHJlbW90ZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+IGlzUmVtb3RlKHMuaWQpKTtcbiAgaWYgKHJlbW90ZS5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICAgIC8vIEVDMiBydW5zIHRoZSBwbGF0Zm9ybSBhcyBhIGRlZGljYXRlZCBgbWluaWt1YmVgIHVzZXIgaW5zaWRlIHRoZSBpbnN0YW5jZTogdGhlXG4gICAgICAvLyBjbHVzdGVyLCBpdHMga3ViZWNvbmZpZywgYW5kIHRoZSBqd3Qtc2VjcmV0IGFsbCBiZWxvbmcgdG8gdGhhdCB1c2VyLCBhbmQgdGhlXG4gICAgICAvLyByZWdpc3RlciBzdGVwIGJ1aWxkcytwdXNoZXMgaW1hZ2VzIGFnYWluc3QgaXQuIFNvIGl0IE1VU1QgcnVuIG9uIHRoZSBib3ggYXNcbiAgICAgIC8vIGBtaW5pa3ViZWAg4oCUIHByaW50IHRoZSBleGFjdCBsYW5kaW5nIHNlcXVlbmNlIHJhdGhlciB0aGFuIGEgYmFyZSBjb21tYW5kLlxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBmaW5pc2ggc2V0dXAgT04gdGhlIGluc3RhbmNlIChpdCBidWlsZHMgaW1hZ2VzICsgcmVhZHMgdGhlIGNsdXN0ZXIsIHNvIGl0Jyk7XG4gICAgICBwcmludEluZm8oJ2Nhbm5vdCBydW4gZnJvbSBoZXJlKS4gTGFuZCBvbiB0aGUgYm94LCBiZWNvbWUgdGhlIGBtaW5pa3ViZWAgdXNlciwgdGhlbiBydW4gaXQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAgYXdzIHNzbSBzdGFydC1zZXNzaW9uIC0tdGFyZ2V0IDxJbnN0YW5jZUlkPiAgICAgICMgSW5zdGFuY2VJZCBzdGFjayBvdXRwdXQnKTtcbiAgICAgIHByaW50SW5mbygnICBzdWRvIC1pdSBtaW5pa3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvd25zIHRoZSBjbHVzdGVyICsgZG9ja2VyJyk7XG4gICAgICBwcmludEluZm8oJyAgY2QgL29wdC9waXBlbGluZS9waXBlbGluZS1idWlsZGVyICAgICAgICAgICAgICAgICMgdGhlIGRlcGxveWVkIGNoZWNrb3V0Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAgJHtzLmNvbW1hbmR9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVrczogaW5pdC1wbGF0Zm9ybSBwb3J0LWZvcndhcmRzIHRvIHN2Yy9uZ2lueCwgc28gcmVnaXN0ZXIgcnVucyBmcm9tIGFueXdoZXJlIHdpdGhcbiAgICAgIC8vIGt1YmVjdGwgYWNjZXNzIOKAlCBubyBpbi1WUEMgcmVxdWlyZW1lbnQgYW5kIG5vIHdhaXRpbmcgb24gdGhlIEFMQi9ETlMuIChBIC0td2l0aC1ldmVudHNcbiAgICAgIC8vIGJ1bmRsZSwgaWYgcHJlc2VudCwgYWRkaXRpb25hbGx5IG5lZWRzIEFXUyBjcmVkcyArIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybS4pXG4gICAgICBwcmludEluZm8oJ1xcbk5leHQg4oCUIHJ1biB3aXRoIGt1YmVjdGwgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIChpbiB0aGlzIG9yZGVyKTonKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICDigKIgJHtzLmxhYmVsfSDigJQgJHtzLmNvbW1hbmR9YCk7XG4gICAgfVxuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkLnN0YXJ0c1dpdGgoJ3N0b3JlLXRva2VuJyk7XG4gICAgICBjb25zdCBlbnYgPSBuZWVkc0NyZWRzID8geyAuLi5zLmVudiwgLi4uYWRtaW5FbnYgfSA6IHMuZW52O1xuICAgICAgLy8gTG9hZHMvc21va2UgYXJlIG5vaXN5ICsgbm9uLWludGVyYWN0aXZlIOKGkiBydW4gUVVJRVQgKGNhcHR1cmUsIHNob3cgb25seSBvblxuICAgICAgLy8gZmFpbHVyZSkuIEV4Y2VwdGlvbjogYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzIHByb21wdHMsIHNvIGl0IG11c3Qgc3RyZWFtLlxuICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICBjb25zdCBxdWlldCA9ICFpbnRlcmFjdGl2ZVJlZ2lzdGVyO1xuICAgICAgaWYgKHF1aWV0KSBwcmludEluZm8oYCR7cy5jb21tYW5kfVxcbiAg4oCmcnVubmluZyAob3V0cHV0IHNob3duIG9ubHkgaWYgaXQgZmFpbHMpYCk7XG4gICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgcXVpZXQsIGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFyc2UtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gKHdoZW4gLS1yZXBvLCBvciBhY2NlcHRlZCB2aWEgdGhlIGludGVyYWN0aXZlXG4gKiBvZmZlciksIHJlcG9pbnQgY3dkIGludG8gaXQsIGFuZCB2ZXJpZnkgdGhlIGRlcGxveSBlbnRyeXBvaW50IGV4aXN0cy4gT3ducyB0aGVcbiAqIGN3ZC9ib290c3RyYXBwZWQgc3RhdGUuIFNldHMgZXhpdENvZGUgb24gYSBoYXJkIGZhaWx1cmUgKGNsb25lIGVycm9yIC8gbWlzc2luZ1xuICogZW50cnlwb2ludCksIG1hdGNoaW5nIHRoZSBvbGQgaW5saW5lIGJlaGF2aW9yOyBhIHBsYWluIGRlY2xpbmUgbGVhdmVzIGV4aXRDb2RlXG4gKiB1bnRvdWNoZWQuIFJldHVybnMgb2s6ZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgYWJvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBbmRMb2NhdGUoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgYm9vdHN0cmFwQ21kOiBzdHJpbmcgfCBudWxsLFxuICBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHN0YXJ0Q3dkOiBzdHJpbmcsXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IGN3ZDogc3RyaW5nOyBib290c3RyYXBwZWQ6IGJvb2xlYW47IG9rOiBib29sZWFuIH0+IHtcbiAgbGV0IGN3ZCA9IHN0YXJ0Q3dkO1xuICBsZXQgYm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gIC8vIFNoYXJlZCBieSBgLS1yZXBvYCBhbmQgdGhlIGludGVyYWN0aXZlIG9mZmVyLiBSZXBvaW50cyBjd2QgKyBzZXRzIGJvb3RzdHJhcHBlZDtcbiAgLy8gYGJvb3RzdHJhcHBlZGAgcmVjb3JkcyB3aGV0aGVyIHdlIGNyZWF0ZWQgdGhlIGNsb25lICh2cy4gYW4gZXhpc3RpbmcgY2hlY2tvdXQpIOKAlFxuICAvLyBvbmx5IHRoZW4gY2FuIHRoZSBjYWxsZXIgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2ggbG9hZCBmb2xkZXJzLlxuICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICBwcmludEluZm8oY21kKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgYm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICBwcmludFN1Y2Nlc3MoYFJlcG8gaXMgcmVhZHkg4oCUIGNvbnRpbnVpbmcgZnJvbSAke2N3ZH1gKTtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRocy5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgc3BhcnNlIGNsb25lIGlzIG1pc3NpbmcgJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoYXQgcmVmIG1heSBub3QgaGF2ZSB0aG9zZSBmb2xkZXJzLiBUcnkgYSBkaWZmZXJlbnQgLS1yZWYuYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gYC0tcmVwb2A6IGNsb25lIHVwIGZyb250IChtdXN0IHByZWNlZGUgdGhlIGVudHJ5cG9pbnQgY2hlY2spLlxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRJbmZvKGBcXG5Cb290c3RyYXAg4oaSIGNsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IChzcGFyc2UpLmApO1xuICAgIGlmICghKGF3YWl0IGNvbmZpcm0oJ0dvIGFoZWFkIHdpdGggdGhlIGNsb25lPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4gUmUtcnVuIHdoZW5ldmVyIHlvdVxcJ3JlIHJlYWR5LicpO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZCB3ZSBoYXZlbid0XG4gIC8vIGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSkgc28gYSBmcmVzaCBtYWNoaW5lIGNhblxuICAvLyBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdHMueWVzO1xuICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIG9wdC1pbiBsb2Fkcywgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNvIHdlIG9ubHkgYXNrIG9uY2UgdGhlIG9wZXJhdG9yXG4gKiBoYXMgYWdyZWVkIHRvIHByb2NlZWQpLiBQcm9tcHRzIHBlciBsb2FkLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWRcbiAqIGZvbGRlcnMgaW50byBhIGJvb3RzdHJhcHBlZCBzcGFyc2UgY2xvbmUsIHRoZW4gcmUtcmVzb2x2ZXMgdGhlIHBvc3QtaW5zdGFsbCBzdGVwc1xuICogd2l0aCB0aGUgc2VsZWN0aW9ucy4gUmV0dXJucyB0aGUgY2hvc2VuIGlkcyArIHRoZSByZWNvbXB1dGVkIHN0ZXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGJvb3RzdHJhcHBlZDogYm9vbGVhbixcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBwb3N0U3RlcEZsYWdzOiB7IGluaXQ6IGJvb2xlYW47IGF1dG9Jbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmUgdGVtcGxhdGVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICR7c2hlbGxRdW90ZShib290c3RyYXAucmVmKX1gO1xuICAgICAgcHJpbnRJbmZvKGFkZENtZCk7XG4gICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChhZGRDbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoZSBtYXRjaGluZyBsb2FkIHN0ZXAocykgbWF5IGZhaWwuIFJlLXJ1biB3aXRoIC0tcmVwbyB0byByZWZyZXNoIHRoZSBjbG9uZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICB0YXJnZXQsXG4gICAgdXJsLFxuICAgIHJlZ2lvbixcbiAgICBlbmFibGVkTG9hZElkczogY2hvc2VuLFxuICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgYnVpbGRCb290c3RyYXA6IHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgfHwgY2hvc2VuLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gIH0pO1xuICByZXR1cm4geyBlbmFibGVkTG9hZElkczogY2hvc2VuLCBzdGVwczogcmVzb2x2ZWQuc3RlcHMsIHNraXBwZWQ6IHJlc29sdmVkLnNraXBwZWQgfTtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2VjcmV0IHBhcmFtIHZhbHVlcyAoZS5nLiB0aGUgZ2hjciB0b2tlbikgZnJvbSBjYXB0dXJlZCBkZXBsb3kgb3V0cHV0XG4gKiBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgTExNIGZvciBkaWFnbm9zaXMuIFRoZSBkZXBsb3kgcnVucyB3aXRoIHNlY3JldHNcbiAqIHVubWFza2VkLCBzbyBhbHRob3VnaCB0aGUgY3VycmVudCBzY3JpcHRzIGRvbid0IGVjaG8gdGhlbSwgdGhpcyBrZWVwcyBhIGZ1dHVyZVxuICogc2NyaXB0J3Mgc3RyYXkgZWNobyAob3IgYSB2ZXJib3NlIHN1Yi10b29sKSBmcm9tIGNyb3NzaW5nIHRoZSB0aGlyZC1wYXJ0eS1MTE1cbiAqIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGxldCBvdXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIFsuLi5zcGVjLnJlcXVpcmVkLCAuLi5zcGVjLm9wdGlvbmFsXSkge1xuICAgIGlmICghaW5wdXQuc2VjcmV0KSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1tpbnB1dC5rZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+PSA0KSBvdXQgPSBvdXQuc3BsaXQodmFsdWUpLmpvaW4oJyoqKicpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcHJvdmlzaW9uYCBjb21tYW5kIOKAlCBhbiBBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBQaXBlbGluZVxuICogQnVpbGRlciBQTEFURk9STSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUykuIEl0IHByaW50cyB0aGUgYXNzZW1ibGVkIHBsYW5cbiAqIChwcmVyZXEgY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHkpIGFuZCB0aGVuIERFUExPWVMsIGdhdGVkIGJ5XG4gKiBjb25maXJtYXRpb24gcHJvbXB0cyAoYC0teWVzYCB0byBhdXRvLWFjY2VwdDsgYC0tanNvbmAgaXMgdGhlIG9ubHkgbm9uLWV4ZWN1dGluZ1xuICogbW9kZSwgcHJpbnRpbmcgdGhlIHBsYW4gZm9yIHRvb2xpbmcpLiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaFxuICogbWFjaGluZSBieSBzcGFyc2VseSBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgK1xuICogb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnMgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLFxuICogc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS4gYC0tdGVhcmRvd25gIHJlbW92ZXMgYSBkZXBsb3ltZW50IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUyk6IGRlcGxveXMgaXQgKGdhdGVkIGJ5IGNvbmZpcm1hdGlvbiBwcm9tcHRzKSwgb3IgLS10ZWFyZG93biB0byByZW1vdmUnKVxuICAgIC5vcHRpb24oJy10LCAtLXRhcmdldCA8dGFyZ2V0PicsIGBEZXBsb3kgdGFyZ2V0OiAke1RBUkdFVF9JRFMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctcCwgLS1wcm9tcHQgPHRleHQ+JywgJ05hdHVyYWwtbGFuZ3VhZ2UgZ29hbCAocGFyc2VkIGludG8gcGFyYW1zIHdoZW4gYW4gQUkga2V5IGlzIHNldCknKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1kZXBsb3ktbW9kZSA8bW9kZT4nLCAncHVibGljIHwgcHJpdmF0ZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1sZWFuJywgJ0VDMjogdHJpbSBvcHRpb25hbCBvYnNlcnZhYmlsaXR5L2FkbWluIHNlcnZpY2VzIHNvIHRoZSBjb3JlIHN0YWNrICsgbWVzaCBmaXRzIGEgdDMueGxhcmdlIChwYWlyIHdpdGggLS1pbnN0YW5jZS10eXBlIHQzLnhsYXJnZSknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChFQzIpIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlciAoc2V0IGl0IHRvIHJ1biBhIHNlY29uZCBlbnZpcm9ubWVudCknKVxuICAgIC5vcHRpb24oJy0tY2x1c3Rlci1uYW1lIDxuYW1lPicsICdFS1MgY2x1c3RlciBuYW1lIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlcicpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWluaXQgPG1vZGU+JywgJ1Bvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uOiBhdXRvIChERUZBVUxUIOKAlCByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXM7IG9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdCksIG1hbnVhbCAoZG9uXFwndCBzZWxmLWluaXQg4oCUIHN1cmZhY2UgdGhlIHN0ZXAgZm9yIHlvdSB0byBydW4sIGUuZy4gdG8gc2V0IHJlYWwgYWRtaW4gY3JlZHMpLCBvciBza2lwIChkbyBub3RoaW5nKS4gbG9jYWwvbWluaWt1YmUvZWtzIHJ1biBpbml0IHZpYSBwcm92aXNpb24gdW5sZXNzIHNraXAuJylcbiAgICAvLyBEZXByZWNhdGVkIGFsaWFzZXMg4oCUIGtlcHQgd29ya2luZyBmb3IgYmFjay1jb21wYXQ7IC0taW5pdCBpcyB0aGUgZG9jdW1lbnRlZCBmb3JtLlxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBza2lwJylcbiAgICAub3B0aW9uKCctLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBhdXRvJylcbiAgICAub3B0aW9uKCctLW5vLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBtYW51YWwnKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZSB0ZW1wbGF0ZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgcGxhbiBhcyBKU09OIGFuZCBleGl0IFdJVEhPVVQgcnVubmluZyAodGhlIG9ubHkgbm9uLWV4ZWN1dGluZyBtb2RlIOKAlCBmb3IgdG9vbGluZy9DSSBpbnNwZWN0aW9uKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc2luZ2xlIHBvc3QtZGVwbG95IGluaXQgbW9kZSAoYXV0b3xtYW51YWx8c2tpcCkgZnJvbSAtLWluaXQgb3IgaXRzXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgYWxpYXNlcy4gVHdvIGludGVybmFsIHNpZ25hbHMgZGVyaXZlIGZyb20gaXQ6IHdoZXRoZXIgaW5pdCBoYXBwZW5zIGF0XG4gICAgICAgIC8vIGFsbCwgYW5kIHdoZXRoZXIgdGhlIERFUExPWSBzZWxmLXJ1bnMgaXQgKHZzLiB3ZSBzdXJmYWNlIGl0KS5cbiAgICAgICAgY29uc3QgaW5pdE1vZGUgPSByZXNvbHZlSW5pdE1vZGUob3B0aW9ucyk7XG4gICAgICAgIGlmIChpbml0TW9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYEludmFsaWQgLS1pbml0IHZhbHVlICcke1N0cmluZyhvcHRpb25zLmluaXQpfScuIFVzZSBvbmUgb2Y6ICR7SU5JVF9NT0RFUy5qb2luKCcgfCAnKX0uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRFbmFibGVkID0gaW5pdE1vZGUgIT09ICdza2lwJzsgLy8gc2tpcCDihpIgbm8gcmVnaXN0ZXIvbG9hZHMgYXQgYWxsXG4gICAgICAgIGNvbnN0IHNlbGZJbml0ID0gaW5pdE1vZGUgPT09ICdhdXRvJzsgLy8gYXV0byDihpIgdGhlIGRlcGxveSBpbml0aWFsaXplcyBpdHNlbGZcblxuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgLy8gZWMyIExFQU4gbW9kZSAoYm9vbGVhbikg4oaSIGFzc2VtYmxlQ29tbWFuZCBlbWl0cyBgLS1sZWFuYCwgd2hpY2ggc2V0dXAuc2hcbiAgICAgICAgICAvLyBmb3J3YXJkcyB0byB0aGUgQ0ZOIGBMZWFuYCBwYXJhbS4gT25seSBlYzIncyBzcGVjIGxpc3RzIGl0OyBvdGhlciB0YXJnZXRzIGlnbm9yZSBpdC5cbiAgICAgICAgICBsZWFuOiBvcHRpb25zLmxlYW4gPT09IHRydWUsXG4gICAgICAgICAgLy8gRGVwbG95LXRpbWUgcmVzb3VyY2UgaWRlbnRpdHk6IGVjMiBlbWl0cyAtLXN0YWNrLW5hbWUgKGtleSBzdGFja05hbWUpLCBla3MgZW1pdHNcbiAgICAgICAgICAvLyAtLWNsdXN0ZXItbmFtZSAoa2V5IGNsdXN0ZXJOYW1lKS4gQm90aCBhbHNvIGRyaXZlIHRlYXJkb3duLiBVbmRlZmluZWQg4oaSIGRlZmF1bHRzLlxuICAgICAgICAgIHN0YWNrTmFtZTogb3B0aW9ucy5zdGFja05hbWUsXG4gICAgICAgICAgY2x1c3Rlck5hbWU6IG9wdGlvbnMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBlbWFpbC9ub0VtYWlsIGFyZSBjb2VyY2VkIEFGVEVSIHRoZSBOTCBtZXJnZSBiZWxvdyDigJQgcGFyc2VHb2FsIGNhbiByZXR1cm5cbiAgICAgICAgICAvLyBgZW1haWxgLCBzbyBwcmUtY29lcmNpbmcgaGVyZSAobmV2ZXItdW5kZWZpbmVkKSB3b3VsZCBsZXQgdGhlIG1lcmdlJ3NcbiAgICAgICAgICAvLyBgPT09IHVuZGVmaW5lZGAgZ3VhcmQgc2lsZW50bHkgZHJvcCBhbiBBSS1wYXJzZWQgZW1haWwgY2hvaWNlLiBMZWZ0IG91dCBvZlxuICAgICAgICAgIC8vIHRoaXMgbGl0ZXJhbCBvbiBwdXJwb3NlOyByZXNvbHZlZCBhIGZldyBsaW5lcyBkb3duLlxuICAgICAgICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgICAgICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgICAgICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICAgICAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAgICAgICAvLyBUaGUgQVdTIGRlcGxveXMgc2VsZi1pbml0IGJ5IGRlZmF1bHQgKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbFxuICAgICAgICAgIC8vIHBoYXNlKSwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGAgd2hlbiB0aGUgbW9kZSBpcyBOT1QgYXV0b1xuICAgICAgICAgIC8vIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBkZXBsb3kgaW5pdCBpdHNlbGZcIikuIGAtLWF1dG8taW5pdGAgKGEgbm8tb3AgcmVhZmZpcm0pXG4gICAgICAgICAgLy8gaXMgbmV2ZXIgZW1pdHRlZC4gT25seSBlYzIvZWtzIGNhcnJ5IHRoZXNlIGZsYWdzIGluIHRoZWlyIHNwZWM7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgICAgICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gdGhlIEFXUyB0YXJnZXRzIGluXG4gICAgICAgICAgLy8gcmVzb2x2ZVBvc3RTdGVwcywgc28gYSBzZWxmLWluaXRpYWxpemluZyBlYzIvZWtzIGRlcGxveSBkb2Vzbid0IGFsc28gcHJpbnQgYSBtYW51YWxcbiAgICAgICAgICAvLyByZWdpc3RlciBzdGVwLiBGb3IgbWFudWFsIG1vZGUgKG9yIGxvY2FsL21pbmlrdWJlKSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIC0tZGlhZ25vc2UgaXMgYSByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlOiByZXR1cm4gd2hldGhlciBvciBub3QgYSB0YXJnZXQgd2FzXG4gICAgICAgICAgLy8gZ2l2ZW4sIHNvIGl0IG5ldmVyIGZhbGxzIHRocm91Z2ggaW50byBhIChwb3NzaWJseSAtLXllcykgZGVwbG95LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChzZXR1cC5zaCdzIGZpbmFsIHBoYXNlIGhhcmRjb2Rlc1xuICAgICAgICAgIC8vIExPQURfKj15KS4gc2V0dXAuc2ggcnVucyB0aGUgbG9hZHMgaXRzZWxmIChvdmVyIGEga3ViZWN0bCBwb3J0LWZvcndhcmQpLCBidXQgd2VcbiAgICAgICAgICAvLyBzdGlsbCByZXNvbHZlIHRoZW0gaGVyZSBzbyB0aGUgc3BhcnNlIGNsb25lIGZldGNoZXMgdGhlIGZvbGRlcnMgc2V0dXAuc2ggYnVpbGRzXG4gICAgICAgICAgLy8gZnJvbS4gRXhwbGljaXQgYC0td2l0aC0qYCBmbGFncyBvdmVycmlkZTsgYC0taW5pdCBtYW51YWxgIC8gYC0taW5pdCBza2lwYCBvcHQgb3V0LlxuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAgIHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgPSBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluaWt1YmUvbG9jYWwga2VlcCB0aGUgaW50ZXJhY3RpdmUgcGlja2VyIChsb2NhbC1kZXY7IG5vIGAtLWluaXQgYXV0b2AgbG9hZCBwYXJpdHkpLlxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIC8vIEhhcmQtcmVxdWlyZSBwbHVnaW4gcHJlcmVxcyAoZS5nLiB5cSBvbiBtaW5pa3ViZSkgb25seSB3aGVuIHBsdWdpbnMgaXMgRVhQTElDSVRMWVxuICAgICAgICAvLyBzZWxlY3RlZCDigJQgTk9UIG9uIHRoZSB3aWxsUHJvbXB0TG9hZHMgZ3Vlc3MsIHdoaWNoIHdvdWxkIGJsb2NrL3Byb21wdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIHVzZXIgaGFzIGV2ZW4gYmVlbiBhc2tlZCB3aGV0aGVyIHRoZXkgd2FudCBwbHVnaW5zLiBJZiB0aGV5IHBpY2sgcGx1Z2lucyBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0LCB3ZSByZS1jaGVjayArIG9mZmVyIHRvIGZldGNoIHJpZ2h0IGFmdGVyIHRoYXQgc2VsZWN0aW9uIChiZWxvdykuXG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIC8vIEludGVyYWN0aXZlIGxvYWRzIGFyZSBjaG9zZW4gQUZURVIgdGhlIGNsb25lLCBzbyB0aGUgY2xvbmUgc3RheXMgbWluaW1hbCDigJRcbiAgICAgICAgLy8gZWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyBmZXRjaGVkIHRoZW4gdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICBjb25zdCBzcGFyc2VQYXRocyA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgZW5hYmxlZExvYWRJZHMpO1xuICAgICAgICBjb25zdCBib290c3RyYXAgPSByZXNvbHZlQm9vdHN0cmFwKFxuICAgICAgICAgIHsgcmVwbzogdHlwZW9mIG9wdGlvbnMucmVwbyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcG8gOiB1bmRlZmluZWQsIHJlZjogb3B0aW9ucy5yZWYsIHdvcmtkaXI6IG9wdGlvbnMud29ya2RpciwgZnVsbDogIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSB9LFxuICAgICAgICAgIHNwYXJzZVBhdGhzLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib290c3RyYXBDbWQgPSB3YW50Qm9vdHN0cmFwID8gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApIDogbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIFJlLXJlc29sdmVkXG4gICAgICAgIC8vIGFmdGVyIHRoZSBwb3N0LWNsb25lIGxvYWQgcHJvbXB0cyAoc2VlIGJlbG93KSB3aGVuIHRob3NlIHJ1biBpbnRlcmFjdGl2ZWx5LlxuICAgICAgICBsZXQgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbiBiZWxvdykuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBbnkgbWlzc2luZyByZXF1aXJlZCBwcmVyZXEgdGhhdCdzIGEgc2luZ2xlIHN0YXRpYyBiaW5hcnkgKGUuZy4geXEpXG4gICAgICAgIC8vIGNhbiBiZSBmZXRjaGVkIGludG8gdGhlIHRvb2xzIGNhY2hlIGluc3RlYWQgb2YgYSBzeXN0ZW0gaW5zdGFsbCDigJQgbm9cbiAgICAgICAgLy8gYnJldy9hcHQuIE9mZmVyIGl0LCB0aGVuIHJlLWNoZWNrICh0aGUgY2FjaGUgZGlyIGlzIGFscmVhZHkgb24gUEFUSCkuXG4gICAgICAgIGNvbnN0IGZldGNoYWJsZSA9IHByZXJlcXMuZmlsdGVyKChjKSA9PiAhYy5vayAmJiBjLnJlcXVpcmVkICYmIGlzRmV0Y2hhYmxlKGMubmFtZSkpO1xuICAgICAgICBpZiAoZmV0Y2hhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBuYW1lcyA9IGZldGNoYWJsZS5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtuYW1lc30gbm90IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIG9mZmljaWFsIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0gKG5vIHN5c3RlbSBpbnN0YWxsKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBmZXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgICAgICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgbWFudWFsbHkgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgICAvLyBOb3cgdGhhdCBwbHVnaW5zIG1heSBoYXZlIGJlZW4gcGlja2VkLCByZS1jaGVjayB0aGUgcGx1Z2luLXNwZWNpZmljIHByZXJlcXMgd2VcbiAgICAgICAgICAvLyBkZWxpYmVyYXRlbHkgZGlkbid0IGhhcmQtcmVxdWlyZSB1cCBmcm9udCAoZS5nLiB5cSBmb3IgbWluaWt1YmUgcGx1Z2luIGJ1aWxkcykuXG4gICAgICAgICAgLy8gT2ZmZXIgdG8gZmV0Y2ggYW55IGZldGNoYWJsZSBvbmU7IHdhcm4gKGRvbid0IGJsb2NrIOKAlCB0aGUgcGxhdGZvcm0gc3RpbGwgZGVwbG95cylcbiAgICAgICAgICAvLyBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCwgc28gdGhlIGxhdGVyIHBsdWdpbiBidWlsZCBkb2Vzbid0IGZhaWwgb3BhcXVlbHkuXG4gICAgICAgICAgaWYgKGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5HYXBzID0gcGx1Z2luUHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgIXByZXJlcXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBjLm5hbWUpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBwbHVnaW5HYXBzKSB7XG4gICAgICAgICAgICAgIGlmIChpc0ZldGNoYWJsZShjLm5hbWUpICYmIGF3YWl0IGNvbmZpcm0oYFxcbiR7Yy5uYW1lfSBpcyBuZWVkZWQgdG8gYnVpbGQgcGx1Z2lucyBidXQgaXNuJ3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IGJlZm9yZSB0aGUgcGx1Z2luIGJ1aWxkIHJ1bnMuYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGAke2MubmFtZX0gbWlzc2luZyDigJQgdGhlIHBsdWdpbiBsb2FkL2J1aWxkIHN0ZXAgbWF5IGZhaWwuICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9jYWwvbWluaWt1YmUncyBzZXR1cC5zaCBSRVFVSVJFUyBhIGAuZW52YCBhbmQgYWJvcnRzIHdpdGhvdXQgaXQg4oCUIGNyZWF0ZVxuICAgICAgICAvLyBpdCBmcm9tIC5lbnYuZXhhbXBsZSB3aXRoIGdlbmVyYXRlZCBzZWNyZXRzIHNvIHRoZSBkZXBsb3kgaXMgbm9uLWludGVyYWN0aXZlLlxuICAgICAgICAvLyBlYzIgYW5kIGVrcyBkb24ndCBoYXZlIHByb3Zpc2lvbiBnZW5lcmF0ZSBhIGxvY2FsIGAuZW52YDogZWMyIGJvb3RzdHJhcHMgaXRzXG4gICAgICAgIC8vIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLCBhbmQgZWtzJ3Mgc2V0dXAuc2ggY3JlYXRlcyB0aGUgazhzIHNlY3JldHMgaXRzZWxmXG4gICAgICAgIC8vIChhIGRlcGxveS9hd3MvZWtzLy5lbnYuZXhhbXBsZSArIHNlY3JldCBzdGVwIGlzIGEgc2V0dXAuc2ggVE9ETykuXG4gICAgICAgIGlmICgodGFyZ2V0ID09PSAnZG9ja2VyJyB8fCB0YXJnZXQgPT09ICdtaW5pa3ViZScpICYmIGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IHdpdGggYSBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCAoc2VlIHJ1bkRlcGxveVdpdGhSZXRyeSkuXG4gICAgICAgIGNvbnN0IHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfSA9IGF3YWl0IHJ1bkRlcGxveVdpdGhSZXRyeShzcGVjLCB1cmwsIGN3ZCwgcGFyYW1zLCBhaU9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXN1Y2NlZWRlZCkgeyBwcm9jZXNzLmV4aXRDb2RlID0gMTsgcmV0dXJuOyB9XG4gICAgICAgIHByaW50U3VjY2VzcygnRGVwbG95IGNvbW1hbmQgY29tcGxldGVkLicpO1xuXG4gICAgICAgIC8vIDdkLiBTRVMgcG9zdC1kZXBsb3kgZ3VpZGFuY2UgKGFzeW5jIERLSU0gKyBzYW5kYm94ICsgYm91bmNlIHRvcGljKS5cbiAgICAgICAgLy8gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFQgb24gQVdTIGRlcGxveXMsIHNvIHN1cmZhY2UgdGhlIGd1aWRhbmNlXG4gICAgICAgIC8vIGZvciBlYzIvZWtzIHVubGVzcyB0aGUgb3BlcmF0b3Igb3B0ZWQgb3V0IHdpdGggLS1uby1lbWFpbC5cbiAgICAgICAgY29uc3Qgc2VzUHJvdmlzaW9uZWQgPSAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICAvLyBNaW5pa3ViZSByZWFjaGVzIHRoZSBnYXRld2F5IHZpYSBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkIHRoYXQgc2V0dXAuc2hcbiAgICAgICAgICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gICAgICAgICAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICAvLyBGcmVzaCBFS1MgbGVnaXRpbWF0ZWx5IG5lZWRzIGxvbmdlciB0aGFuIHRoZSAzMDBzIGRlZmF1bHQ6IEthcnBlbnRlciBwcm92aXNpb25zXG4gICAgICAgICAgLy8gbm9kZXMsIH4xMCBzZXJ2aWNlcyBjb2xkLXB1bGwgaW1hZ2VzLCB0aGUgQUxCIHByb3Zpc2lvbnMgKH4yLTMgbWluKSwgYW5kIHRoZVxuICAgICAgICAgIC8vIFJvdXRlIDUzIGFsaWFzIHByb3BhZ2F0ZXMuIEdpdmUgaXQgMTUgbWluIGJlZm9yZSBzdXJmYWNpbmcgdGhlIG5vdC1yZWFjaGFibGUgbm90ZS5cbiAgICAgICAgICBjb25zdCBoZWFsdGhUaW1lb3V0TXMgPSB0YXJnZXQgPT09ICdla3MnID8gOTAwXzAwMCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgdGltZW91dE1zOiBoZWFsdGhUaW1lb3V0TXMsIG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICAvLyBHcmVlbiBvbmx5IHdoZW4gZnVsbHkgcmVhZHk7IGEgXCJoZWFsdGggT0sgYnV0IC9yZWFkeSBuZXZlciBjYW1lXCIgcHJvY2VlZC1cbiAgICAgICAgICAvLyBhbnl3YXkgc3RhdGUgaXMgaGVhbHRoeTp0cnVlIGJ1dCBkZWdyYWRlZCDihpIgd2FybiBzbyBpdCBkb2Vzbid0IHJlYWQgYXMgZG9uZS5cbiAgICAgICAgICAoaGVhbHRoLmhlYWx0aHkgJiYgaGVhbHRoLnJlYWR5ID8gcHJpbnRTdWNjZXNzIDogcHJpbnRXYXJuaW5nKShgJHtoZWFsdGgudXJsfSDigJQgJHtoZWFsdGguZGV0YWlsfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2YuIFBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgKyBvcHQtaW4gbG9hZHMsIHNtb2tlIHRlc3QsIGV2ZW50cywgY3VzdG9tKS5cbiAgICAgICAgLy8gU2VlIHJ1blBvc3RTdGVwcyDigJQgaXQgc3VyZmFjZXMgcmVnaXN0ZXIgKyB0aGUgZXZlbnRzIGJ1bmRsZSBhcyBtYW51YWwgaW4tVlBDXG4gICAgICAgIC8vIG5leHQtc3RlcHMgb24gRUMyL0VLUyBpbnN0ZWFkIG9mIGF1dG8tcnVubmluZyAoYW5kIGZhaWxpbmcpIHRoZW0gbG9jYWxseS5cbiAgICAgICAgLy8gYXV0b1J1biAoc2tpcCB0aGUgc2Vjb25kIGNvbmZpcm0pIG9ubHkgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBQSUNLRUQgYSBsb2FkIGluIHRoZVxuICAgICAgICAvLyBpbnRlcmFjdGl2ZSBwcm9tcHQg4oCUIGRlY2xpbmluZyBldmVyeSBsb2FkIHNob3VsZG4ndCBzaWxlbnRseSBydW4gcmVnaXN0ZXIgdW5wcm9tcHRlZC5cbiAgICAgICAgY29uc3QgYXV0b1JhbkxvYWRzID0gd2lsbFByb21wdExvYWRzICYmIGVuYWJsZWRMb2FkSWRzLmxlbmd0aCA+IDA7XG4gICAgICAgIGF3YWl0IHJ1blBvc3RTdGVwcyhwb3N0U3RlcHMsIHNraXBwZWRTdGVwcywgdGFyZ2V0LCBjd2QsIGFkbWluRW52LCB7IHllczogb3B0aW9ucy55ZXMsIGF1dG9SdW46IGF1dG9SYW5Mb2FkcywgYXV0b0luaXQ6IHBvc3RTdGVwRmxhZ3MuYXV0b0luaXQgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3Byb3Zpc2lvbicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
package/dist/types/config.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface ApiConfig {
|
|
|
12
12
|
pipelineUrl: string;
|
|
13
13
|
/** URL path for pipeline list/query operations. */
|
|
14
14
|
pipelineListUrl: string;
|
|
15
|
+
/** URL path for the golden-path pipeline-template catalog (list/get/instantiate). */
|
|
16
|
+
pipelineTemplateUrl: string;
|
|
15
17
|
/** URL path for single-plugin CRUD operations. */
|
|
16
18
|
pluginUrl: string;
|
|
17
19
|
/** URL path for plugin list/query operations. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,wCAAwC;IACxC,GAAG,EAAE,SAAS,CAAC;IACf,kCAAkC;IAClC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,wCAAwC;IACxC,GAAG,EAAE,SAAS,CAAC;IACf,kCAAkC;IAClC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C"}
|
package/dist/types/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGxhdGZvcm0gQVBJIGNvbm5lY3Rpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQ29uZmlnIHtcbiAgLyoqIEJhc2UgVVJMIG9mIHRoZSBwbGF0Zm9ybSBBUEkgKGUuZy4sIGBodHRwczovL2FwaS5leGFtcGxlLmNvbWApLiAqL1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBFeHRlbmRlZCB0aW1lb3V0IGZvciBwbHVnaW4gdXBsb2FkIHJlcXVlc3RzIChsYXJnZSBmaWxlcykuICovXG4gIHVwbG9hZFRpbWVvdXQ/
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGxhdGZvcm0gQVBJIGNvbm5lY3Rpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQ29uZmlnIHtcbiAgLyoqIEJhc2UgVVJMIG9mIHRoZSBwbGF0Zm9ybSBBUEkgKGUuZy4sIGBodHRwczovL2FwaS5leGFtcGxlLmNvbWApLiAqL1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBFeHRlbmRlZCB0aW1lb3V0IGZvciBwbHVnaW4gdXBsb2FkIHJlcXVlc3RzIChsYXJnZSBmaWxlcykuICovXG4gIHVwbG9hZFRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBVUkwgcGF0aCBmb3Igc2luZ2xlLXBpcGVsaW5lIENSVUQgb3BlcmF0aW9ucy4gKi9cbiAgcGlwZWxpbmVVcmw6IHN0cmluZztcbiAgLyoqIFVSTCBwYXRoIGZvciBwaXBlbGluZSBsaXN0L3F1ZXJ5IG9wZXJhdGlvbnMuICovXG4gIHBpcGVsaW5lTGlzdFVybDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGggZm9yIHRoZSBnb2xkZW4tcGF0aCBwaXBlbGluZS10ZW1wbGF0ZSBjYXRhbG9nIChsaXN0L2dldC9pbnN0YW50aWF0ZSkuICovXG4gIHBpcGVsaW5lVGVtcGxhdGVVcmw6IHN0cmluZztcbiAgLyoqIFVSTCBwYXRoIGZvciBzaW5nbGUtcGx1Z2luIENSVUQgb3BlcmF0aW9ucy4gKi9cbiAgcGx1Z2luVXJsOiBzdHJpbmc7XG4gIC8qKiBVUkwgcGF0aCBmb3IgcGx1Z2luIGxpc3QvcXVlcnkgb3BlcmF0aW9ucy4gKi9cbiAgcGx1Z2luTGlzdFVybDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGggZm9yIHBsdWdpbiB1cGxvYWQgKG11bHRpcGFydCBQT1NUKS4gKi9cbiAgcGx1Z2luVXBsb2FkVXJsOiBzdHJpbmc7XG4gIC8qKiBXaGVuIGBmYWxzZWAsIGRpc2FibGVzIFRMUyBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uICovXG4gIHJlamVjdFVuYXV0aG9yaXplZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZm9yIHBsYXRmb3JtIEFQSSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIC8qKiBKV1QgYmVhcmVyIHRva2VuIG9idGFpbmVkIGZyb20gdGhlIHBsYXRmb3JtLiAqL1xuICB0b2tlbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXBsZXRlIENMSSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGNvbWJpbmluZyBBUEkgYW5kIGF1dGggc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgLyoqIFBsYXRmb3JtIEFQSSBjb25uZWN0aW9uIHNldHRpbmdzLiAqL1xuICBhcGk6IEFwaUNvbmZpZztcbiAgLyoqIEF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLiAqL1xuICBhdXRoOiBBdXRoQ29uZmlnO1xufVxuXG4vKipcbiAqIFRoZSBuYXJyb3cgc2xpY2Ugb2Yge0BsaW5rIENvbmZpZ30gdGhlIGRlcGxveS9yZWdpc3RyeSBwYXRocyByZWFkIG9mZlxuICogYGNsaWVudC5nZXRDb25maWcoKWAg4oCUIHRoZSBwaXBlbGluZSBlbmRwb2ludCArIHBsYXRmb3JtIGJhc2UgVVJMLiBOYW1lZCBzbyB0aGVcbiAqIGBkZXBsb3lgIGFuZCBgY3JlYXRlIC0tZGVwbG95YCBmbG93cyBzaGFyZSBvbmUgc2hhcGUgaW5zdGVhZCBvZiByZS1jYXN0aW5nIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtRGVwbG95Q29uZmlnIHtcbiAgYXBpOiB7IHBpcGVsaW5lVXJsOiBzdHJpbmc7IGJhc2VVcmw6IHN0cmluZyB9O1xufVxuIl19
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|