@pipeline-builder/pipeline-core 3.4.93 → 3.4.95
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.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { createLogger } from '@pipeline-builder/api-core';
|
|
4
4
|
import { Duration, SecretValue, Stack } from 'aws-cdk-lib';
|
|
5
|
-
import { BuildEnvironmentVariableType, ComputeType as CDKComputeType, LinuxBuildImage } from 'aws-cdk-lib/aws-codebuild';
|
|
5
|
+
import { BuildEnvironmentVariableType, BuildSpec, ComputeType as CDKComputeType, LinuxBuildImage } from 'aws-cdk-lib/aws-codebuild';
|
|
6
6
|
import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
|
|
7
7
|
import { CodeBuildStep, ManualApprovalStep, ShellStep } from 'aws-cdk-lib/pipelines';
|
|
8
8
|
import { metadataForShellStep, metadataForCodeBuildStep, metadataForBuildEnvironment, networkConfigFromMetadata } from './metadata-builder.js';
|
|
@@ -420,9 +420,16 @@ export function createCodeBuildStep(options) {
|
|
|
420
420
|
log.warn(`Plugin "${plugin.name}" declares ${requiredSecrets.length} required secret(s) but no orgId is available. ` +
|
|
421
421
|
`Secrets will not be injected: ${requiredSecrets.map(s => s.name).join(', ')}`);
|
|
422
422
|
}
|
|
423
|
-
// Resolve plugin secrets as SECRETS_MANAGER env vars
|
|
424
|
-
|
|
425
|
-
|
|
423
|
+
// Resolve plugin secrets as SECRETS_MANAGER env vars — only REQUIRED ones.
|
|
424
|
+
// CodeBuild treats a SECRETS_MANAGER env var as MANDATORY: it fails the build
|
|
425
|
+
// at DOWNLOAD_SOURCE ("ResourceNotFoundException: can't find the specified
|
|
426
|
+
// secret") if the secret is absent. Auto-wiring an OPTIONAL secret
|
|
427
|
+
// (`required: false`, e.g. NVD_API_KEY / SEMGREP_APP_TOKEN) the operator hasn't
|
|
428
|
+
// created would therefore break every build — the exact opposite of "optional".
|
|
429
|
+
// Optional secrets are left for the plugin to read only where the operator has
|
|
430
|
+
// provisioned them (out-of-band env/secret), not force-injected here.
|
|
431
|
+
const secretEnvVars = (requiredSecrets.length && orgId)
|
|
432
|
+
? toSecretEnvVars(requiredSecrets, orgId)
|
|
426
433
|
: {};
|
|
427
434
|
const env = buildEnv(plugin, merged, customEnv);
|
|
428
435
|
// CodePipeline resolved variables — must be in CodeBuildStep.env (action-level),
|
|
@@ -492,6 +499,13 @@ export function createCodeBuildStep(options) {
|
|
|
492
499
|
...(timeout && { timeout: Duration.minutes(timeout) }),
|
|
493
500
|
env: actionEnv,
|
|
494
501
|
primaryOutputDirectory: plugin.primaryOutputDirectory ?? undefined,
|
|
502
|
+
// Pin the buildspec shell to POSIX /bin/sh so execution is identical to
|
|
503
|
+
// CodeBuild's default and portable across minimal base images (no bash
|
|
504
|
+
// dependency). Plugin specs are authored POSIX-clean to match — no bash-only
|
|
505
|
+
// `[[ ]]`, arrays, `read -ra <<<`, or `source`/`nvm use`/`sdk use`. A
|
|
506
|
+
// plugin-supplied partialBuildSpec (none today) would override this via the
|
|
507
|
+
// metadata spread below and must then set `env.shell` itself.
|
|
508
|
+
partialBuildSpec: BuildSpec.fromObject({ env: { shell: '/bin/sh' } }),
|
|
495
509
|
buildEnvironment: {
|
|
496
510
|
computeType,
|
|
497
511
|
buildImage: pluginBuildImage ?? resolveDefaultBuildImage(scope, orgId),
|
|
@@ -555,4 +569,4 @@ export function replaceNonAlphanumeric(input, replaceValue = '_') {
|
|
|
555
569
|
export function unwrapSecret(value) {
|
|
556
570
|
return typeof value === 'string' ? value : value.unsafeUnwrap();
|
|
557
571
|
}
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxXQUFXLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFxQixtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEUsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQUcsT0FBcUM7SUFDNUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBaUIsQ0FBQztBQUN2RCxDQUFDO0FB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O0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYSxFQUFFLGVBQXVCLEdBQUc7SUFDOUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBMkI7SUFDdEQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTZWNyZXRWYWx1ZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBDb21wdXRlVHlwZSBhcyBDREtDb21wdXRlVHlwZSwgTGludXhCdWlsZEltYWdlLCB0eXBlIElCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgTWFudWFsQXBwcm92YWxTdGVwLCBTaGVsbFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQXJ0aWZhY3RLZXkgfSBmcm9tICcuL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbWV0YWRhdGFGb3JTaGVsbFN0ZXAsIG1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcCwgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50LCBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1idWlsZGVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVOZXR3b3JrIH0gZnJvbSAnLi9uZXR3b3JrLmpzJztcbmltcG9ydCB7IFBsdWdpblR5cGUsIENvbXB1dGVUeXBlLCB0eXBlIE1ldGFEYXRhVHlwZSwgQ0RLX01FVEFEQVRBX1BSRUZJWCB9IGZyb20gJy4vcGlwZWxpbmUtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGRTdGVwT3B0aW9ucywgU3RlcEN1c3RvbWl6YXRpb24gfSBmcm9tICcuLi9waXBlbGluZS9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMgfSBmcm9tICcuLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWhlbHBlcnMnKTtcblxuLyoqXG4gKiBNZXJnZSBtdWx0aXBsZSBtZXRhZGF0YSBvYmplY3RzIGludG8gb25lLiBMYXRlciBzb3VyY2VzIG92ZXJyaWRlIGVhcmxpZXIgb25lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKC4uLnNvdXJjZXM6IEFycmF5PFBhcnRpYWw8TWV0YURhdGFUeXBlPj4pOiBNZXRhRGF0YVR5cGUge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4uc291cmNlcykgYXMgTWV0YURhdGFUeXBlO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdHJpbmdzLlxuICogS2V5cyBzdGFydGluZyB3aXRoICdhd3M6Y2RrOicgYXJlIHJlc2VydmVkIGZvciBDREsgY29uc3RydWN0IHByb3BzXG4gKiAocHJvY2Vzc2VkIGJ5IG1ldGFkYXRhIGV4dHJhY3Rpb24gZnVuY3Rpb25zKSBhbmQgYXJlIGV4Y2x1ZGVkIGhlcmUuXG4gKlxuICogQWxsIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgZm9yIENvZGVCdWlsZCBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoQ0RLX01FVEFEQVRBX1BSRUZJWCkpIHtcbiAgICAgIGVudltrZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gY29uZmlnLCBtZXJnZWQgbWV0YWRhdGEsIGFuZCBjdXN0b20gZW52LlxuICpcbiAqIE1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBwbHVnaW4uZW52IOKAlCBwbHVnaW4gZGVmYXVsdCBlbnYgdmFycyAobG93ZXN0IHByaW9yaXR5KVxuICogICAyLiBub24tbmFtZXNwYWNlZCBtZXRhZGF0YSBrZXlzIOKAlCBlLmcuIFBZVEhPTl9WRVJTSU9OLCBXT1JLRElSXG4gKiAgIDMuIGN1c3RvbUVudiDigJQgcGVyLXN0ZXAgY3VzdG9tIGVudiB2YXJzIChoaWdoZXN0IHByaW9yaXR5KVxuICovXG5jb25zdCBCT09UU1RSQVBfQ01EID0gJ2V4cG9ydCBXT1JLRElSPSR7V09SS0RJUjotLi99OyBjZCAke1dPUktESVJ9JztcblxuZnVuY3Rpb24gYnVpbGRFbnYocGx1Z2luOiBQbHVnaW4sIG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUsIGN1c3RvbUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGx1Z2luLmVudiA/PyB7fSksXG4gICAgLi4uZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhKSxcbiAgICAuLi4oY3VzdG9tRW52ID8/IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXcmFwIGJ1aWxkIGNvbW1hbmRzIGJhc2VkIG9uIGZhaWx1cmUgYmVoYXZpb3IuXG4gKiAtICdmYWlsJyAoZGVmYXVsdCk6IE5vIHdyYXBwaW5nIOKAlCBjb21tYW5kcyBmYWlsIHRoZSBwaXBlbGluZSBuYXR1cmFsbHkuXG4gKiAtICd3YXJuJzogUnVuIGNvbW1hbmRzIHdpdGggYHNldCArZWAsIGNhcHR1cmUgZmFpbHVyZXMsIGxvZyB3YXJuaW5ncywgY29udGludWUuXG4gKiAtICdpZ25vcmUnOiBBcHBlbmQgYHx8IHRydWVgIHRvIGVhY2ggY29tbWFuZCDigJQgZmFpbHVyZXMgYXJlIHNpbGVudGx5IHN3YWxsb3dlZC5cbiAqXG4gKiBPbmx5IGFwcGxpZWQgdG8gYnVpbGQgY29tbWFuZHMsIG5vdCBpbnN0YWxsIGNvbW1hbmRzIChpbnN0YWxsIGZhaWx1cmVzIHNob3VsZCBhbHdheXMgc3RvcCB0aGUgYnVpbGQpLlxuICovXG5mdW5jdGlvbiB3cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IoY29tbWFuZHM6IHN0cmluZ1tdLCBiZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogc3RyaW5nW10ge1xuICBpZiAoIWJlaGF2aW9yIHx8IGJlaGF2aW9yID09PSAnZmFpbCcpIHJldHVybiBjb21tYW5kcztcblxuICBpZiAoYmVoYXZpb3IgPT09ICdpZ25vcmUnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB0cnVlYCk7XG4gIH1cblxuICAvLyAnd2Fybic6IHJ1biBhbGwgY29tbWFuZHMsIGNhcHR1cmUgZmFpbHVyZXMsIGJ1dCBkb24ndCBzdG9wXG4gIHJldHVybiBbXG4gICAgJ3NldCArZScsXG4gICAgJ19TVEVQX0VYSVQ9MCcsXG4gICAgLi4uY29tbWFuZHMubWFwKGNtZCA9PiBgJHtjbWR9IHx8IHsgZWNobyBcIldBUk5JTkc6IENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XCI7IF9TVEVQX0VYSVQ9MTsgfWApLFxuICAgICdzZXQgLWUnLFxuICAgICdpZiBbIFwiJF9TVEVQX0VYSVRcIiAtbmUgMCBdOyB0aGVuIGVjaG8gXCJXQVJOSU5HOiBPbmUgb3IgbW9yZSBjb21tYW5kcyBpbiB0aGlzIHN0ZXAgZmFpbGVkXCI7IGZpJyxcbiAgXTtcbn1cblxuLyoqXG4gKiBCdWlsZCBib290c3RyYXAtcHJlZml4ZWQgaW5zdGFsbCBhbmQgYnVpbGQgY29tbWFuZHMgZnJvbSBwbHVnaW4gY29uZmlnLlxuICogRWFjaCBjb21tYW5kIGxpc3QgaXMgcHJlcGVuZGVkIHdpdGggYSBXT1JLRElSIGJvb3RzdHJhcCB0aGF0IGRlZmF1bHRzIHRvICcuLycuXG4gKiBXaGVuIGN1c3RvbSBjb21tYW5kcyBhcmUgcHJvdmlkZWQsIHRoZXkgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBCdWlsZCBjb21tYW5kcyBhcmUgb3B0aW9uYWxseSB3cmFwcGVkIGJ5IGZhaWx1cmVCZWhhdmlvciBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kcyhwbHVnaW46IFBsdWdpbiwgY3VzdG9tPzogU3RlcEN1c3RvbWl6YXRpb24sIGZhaWx1cmVCZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogeyBpbnN0YWxsQ29tbWFuZHM6IHN0cmluZ1tdOyBjb21tYW5kczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IFtcbiAgICAuLi4oY3VzdG9tPy5wcmVDb21tYW5kcyA/PyBbXSksXG4gICAgLi4uKHBsdWdpbi5jb21tYW5kcz8ubGVuZ3RoID8gcGx1Z2luLmNvbW1hbmRzIDogW10pLFxuICAgIC4uLihjdXN0b20/LnBvc3RDb21tYW5kcyA/PyBbXSksXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgIEJPT1RTVFJBUF9DTUQsXG4gICAgICAuLi4oY3VzdG9tPy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKGN1c3RvbT8ucG9zdEluc3RhbGxDb21tYW5kcyA/PyBbXSksXG4gICAgXSxcbiAgICBjb21tYW5kczogW0JPT1RTVFJBUF9DTUQsIC4uLndyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvcih1c2VyQ29tbWFuZHMsIGZhaWx1cmVCZWhhdmlvcildLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwbGFpbiBlbnYgcmVjb3JkIHRvIENvZGVCdWlsZCdzIGVudmlyb25tZW50VmFyaWFibGVzIGZvcm1hdCAoUExBSU5URVhUKS5cbiAqL1xuZnVuY3Rpb24gdG9Db2RlQnVpbGRFbnZWYXJzKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZW52KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB7IHZhbHVlIH1dKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBTRUNSRVRTX01BTkFHRVItdHlwZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gc2VjcmV0IGRlY2xhcmF0aW9ucy5cbiAqIFVzZXMgbmFtaW5nIGNvbnZlbnRpb246IHBpcGVsaW5lLWJ1aWxkZXIve29yZ0lkfS97c2VjcmV0TmFtZX1cbiAqIEVhY2ggb3JnIG1hbmFnZXMgdGhlc2Ugc2VjcmV0cyBpbiB0aGVpciBvd24gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuY29uc3QgVkFMSURfU0VDUkVUX05BTUUgPSAvXlthLXpBLVowLTkvXys9LkAtXSskLztcblxuZnVuY3Rpb24gdG9TZWNyZXRFbnZWYXJzKFxuICBzZWNyZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW4gfT4sXG4gIG9yZ0lkOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHNlY3JldHMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0UGF0aCA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgbmFtZSk7XG4gICAgICBpZiAoIVZBTElEX1NFQ1JFVF9OQU1FLnRlc3Qoc2VjcmV0UGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgcGF0aCBcIiR7c2VjcmV0UGF0aH1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc2VjcmV0UGF0aCxcbiAgICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ29kZUJ1aWxkIHN0ZXAgb3IgU2hlbGwgc3RlcCBiYXNlZCBvbiBwbHVnaW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBNZXRhZGF0YSBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gU3RlcC1sZXZlbCBtZXRhZGF0YSAoZnJvbSBvcHRpb25zLm1ldGFkYXRhKVxuICogICAyLiBQbHVnaW4gbWV0YWRhdGEgKGZyb20gcGx1Z2luLm1ldGFkYXRhIGluIGRhdGFiYXNlKVxuICpcbiAqIEVudmlyb25tZW50IG1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBQbHVnaW4gZW52IHZhcnMgKGZyb20gcGx1Z2luLmVudilcbiAqICAgMi4gQ3VzdG9tIGVudiB2YXJzIChmcm9tIG9wdGlvbnMuZW52KVxuICogICAzLiBXT1JLRElSIGZyb20gbWVyZ2VkIG1ldGFkYXRhXG4gKlxuICogQ0RLIHByb3Agc3ByZWFkIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICBwcm9ncmFtbWF0aWMgZGVmYXVsdHMgKGlucHV0LCBjb21tYW5kcywgZW52LCBuZXR3b3JrKSDihpIgbWV0YWRhdGEgb3ZlcnJpZGVzXG4gKlxuICogVGhpcyBtZWFucyBtZXRhZGF0YSBrZXlzIGxpa2UgYGF3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHNgXG4gKiB3aWxsIG92ZXJyaWRlIHRoZSBwbHVnaW4tZGVyaXZlZCBjb21tYW5kcyB3aGVuIGV4cGxpY2l0bHkgc2V0LlxuICovXG4vKipcbiAqIFJlc29sdmUgdGhlIENvZGVCdWlsZCBpbWFnZSB0byB1c2UgZm9yIGEgcGx1Z2luLlxuICpcbiAqIFN0cmF0ZWd5OlxuICogICAxLiBJZiB0aGUgcGx1Z2luIHNldHMgYGF3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6YnVpbGRJbWFnZWBcbiAqICAgICAgZXhwbGljaXRseSBpbiBtZXRhZGF0YSwgdGhlIG1ldGFkYXRhLWJ1aWxkZXIgcGFzc3Rocm91Z2ggaGFuZGxlcyBpdFxuICogICAgICAodmlhIGBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnRgKS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zXG4gKiAgICAgIGB1bmRlZmluZWRgIGFuZCB0aGUgbWV0YWRhdGEgd2lucy5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiB0aGUgcGx1Z2luIGhhcyBhIGBuYW1lYCtgdmVyc2lvbmAgQU5EIHRoZSByZWdpc3RyeVxuICogICAgICBjb25maWcgaXMgcG9wdWxhdGVkLCBidWlsZCBhIGBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KClgXG4gKiAgICAgIGltYWdlIHBvaW50aW5nIGF0IGA8cmVnaXN0cnktaG9zdD46PHBvcnQ+Lzxucz4vPG5hbWU+Ojx2ZXJzaW9uPmBcbiAqICAgICAgd2hlcmUgYDxucz5gIGlzIGBzeXN0ZW1gIG9yIGBvcmctPG9yZ0lkPmAuIENvZGVCdWlsZCBhdXRoZW50aWNhdGVzIGJ5XG4gKiAgICAgIHNlbmRpbmcgdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggdG9cbiAqICAgICAgYHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5YCdzIGAvdG9rZW5gIGVuZHBvaW50OyB0aGUgSldUIGluIGBwYXNzd29yZGBcbiAqICAgICAgcmVzb2x2ZXMgdG8gYSByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZy5cbiAqICAgMy4gSWYgYG1ldGFkYXRhX29ubHlgLCByZXR1cm4gYHVuZGVmaW5lZGAgc28gQ29kZUJ1aWxkIHVzZXMgaXRzIGRlZmF1bHRcbiAqICAgICAgKGBzdGFuZGFyZDo3LjBgKS5cbiAqXG4gKiBgc2NvcGVgIGFuZCBgb3JnSWRgIGFyZSByZXF1aXJlZDogdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGlzIG5hbWVkXG4gKiBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCwgYW5kIGBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMigpYFxuICogbmVlZHMgYSBDb25zdHJ1Y3QgdG8gYW5jaG9yIHRoZSBpbXBvcnRlZCBzZWNyZXQgdG8uXG4gKi9cbi8qKlxuICogSW4tY2x1c3RlciAvIGxvY2FsIHJlZ2lzdHJ5IGhvc3RuYW1lcyB0aGF0IEFXUyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKVxuICogY2Fubm90IHJlc29sdmUuIEJha2luZyBvbmUgb2YgdGhlc2UgaW50byBhIENvZGVCdWlsZCBpbWFnZSBVUkkgZ3VhcmFudGVlcyBhXG4gKiBgQlVJTERfQ09OVEFJTkVSX1VOQUJMRV9UT19QVUxMX0lNQUdFYCBmYWlsdXJlIGF0IGJ1aWxkIHRpbWUsIHNvIHdlIGZhaWwgdGhlXG4gKiBzeW50aCBmYXN0IGluc3RlYWQg4oCUIHdpdGggYSBtZXNzYWdlIHRoYXQgc2F5cyBob3cgdG8gZml4IGl0LlxuICovXG5jb25zdCBVTlJFQUNIQUJMRV9QVUxMX0hPU1RTID0gbmV3IFNldChbJ3JlZ2lzdHJ5JywgJ2xvY2FsaG9zdCcsICcxMjcuMC4wLjEnLCAnOjoxJywgJzAuMC4wLjAnXSk7XG5cbi8qKiBLdWJlcm5ldGVzIC8gbUROUyBzdWZmaXhlcyB0aGF0IG9ubHkgcmVzb2x2ZSBpbnNpZGUgdGhlIGNsdXN0ZXIvTEFOLiAqL1xuY29uc3QgVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUyA9IFsnLnN2YycsICcuc3ZjLmNsdXN0ZXIubG9jYWwnLCAnLmxvY2FsJ107XG5cbi8qKlxuICogUmVkdWNlIGEgcmVnaXN0cnkgaG9zdCB2YWx1ZSB0byBpdHMgYmFyZSBob3N0bmFtZSBmb3IgdGhlIHJlYWNoYWJpbGl0eSBjaGVjazpcbiAqIHN0cmlwIElQdjYgYnJhY2tldHMgYW5kIGFueSBgOnBvcnRgIHN1ZmZpeCAoYW4gb3BlcmF0b3IgbWF5IHB1dCBob3N0K3BvcnQgaW5cbiAqIG9uZSBmaWVsZCksIHNvIGByZWdpc3RyeTo1MDAwYCAvIGBbOjoxXTo1MDAwYCBhcmUgc3RpbGwgcmVjb2duaXplZC5cbiAqL1xuZnVuY3Rpb24gYmFyZUhvc3RuYW1lKHJhd0hvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBoID0gcmF3SG9zdC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGguc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgY29uc3QgZW5kID0gaC5pbmRleE9mKCddJyk7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHJldHVybiBoLnNsaWNlKDEsIGVuZCk7IC8vIFs6OjFdOjUwMDAgLT4gOjoxXG4gIH1cbiAgLy8gU3RyaXAgYSB0cmFpbGluZyA6cG9ydCBvbmx5IGZvciBub24tSVB2NiB2YWx1ZXMgKElQdjYgY29udGFpbnMgJzo6JyBvciA+MSAnOicpLlxuICBpZiAoaC5pbmNsdWRlcygnOicpICYmIChoLm1hdGNoKC86L2cpPy5sZW5ndGggPz8gMCkgPT09IDEpIGggPSBoLnNwbGl0KCc6JylbMF07XG4gIHJldHVybiBoO1xufVxuXG4vKiogVHJ1ZSB3aGVuIENvZGVCdWlsZCAob3V0LW9mLWNsdXN0ZXIpIGNvdWxkIG5vdCByZXNvbHZlIHRoaXMgcmVnaXN0cnkgaG9zdC4gKi9cbmZ1bmN0aW9uIGlzVW5yZWFjaGFibGVQdWxsSG9zdChyYXdIb3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgaCA9IGJhcmVIb3N0bmFtZShyYXdIb3N0KTtcbiAgaWYgKGggPT09ICcnKSByZXR1cm4gdHJ1ZTsgLy8gbm8gaG9zdCDihpIgbWFsZm9ybWVkIFVSSVxuICBpZiAoVU5SRUFDSEFCTEVfUFVMTF9IT1NUUy5oYXMoaCkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUy5zb21lKChzKSA9PiBoLmVuZHNXaXRoKHMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHRlcm5hbCAob3V0LW9mLWNsdXN0ZXIpIHJlZ2lzdHJ5IHB1bGwgaG9zdCArIGA6cG9ydGAgc3VmZml4IGZvclxuICogYSBDb2RlQnVpbGQgaW1hZ2UgVVJJLCBhbmQgZmFpbCBmYXN0IGlmIGl0IHJlc29sdmVkIHRvIGFuIGluLWNsdXN0ZXIvbG9jYWxcbiAqIGRlZmF1bHQgdGhhdCBDb2RlQnVpbGQgY2FuJ3QgcmVhY2guXG4gKlxuICogUHJlZmVycyBgcHVsbEhvc3RgL2BwdWxsUG9ydGAgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgZGVwbG95cy4gcGlwZWxpbmUtbWFuYWdlciBiYWtlc1xuICogdGhlIHJpZ2h0IHB1bGwgaG9zdCBpbnRvIHRoZSBzeW50aCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHBsYXRmb3JtIFVSTCBpdFxuICogZGVwbG95cyBhZ2FpbnN0IChgcHJvcHMucmVnaXN0cnlgKTsgdGhpcyBndWFyZCBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIG5laXRoZXJcbiAqIHRoYXQgbm9yIGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgL2BQTEFURk9STV9CQVNFX1VSTGAgd2FzIHN1cHBsaWVkLlxuICpcbiAqIEVzY2FwZSBoYXRjaDogYEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZWAgKGUuZy4gQ29kZUJ1aWxkIGluIGEgVlBDIHdob3NlXG4gKiBwcml2YXRlIEROUyBnZW51aW5lbHkgcmVzb2x2ZXMgdGhlIGluLWNsdXN0ZXIgbmFtZSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQoXG4gIHJlZ2lzdHJ5OiB7IGhvc3Q/OiBzdHJpbmc7IHBvcnQ/OiBudW1iZXI7IHB1bGxIb3N0Pzogc3RyaW5nOyBwdWxsUG9ydD86IG51bWJlciB9LFxuKTogeyBob3N0OiBzdHJpbmc7IHBvcnRQYXJ0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGhvc3QgPSByZWdpc3RyeS5wdWxsSG9zdCB8fCByZWdpc3RyeS5ob3N0IHx8ICcnO1xuICBjb25zdCBwb3J0ID0gcmVnaXN0cnkucHVsbFBvcnQgPz8gcmVnaXN0cnkucG9ydDtcbiAgaWYgKHByb2Nlc3MuZW52LkFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1QgIT09ICd0cnVlJyAmJiBpc1VucmVhY2hhYmxlUHVsbEhvc3QoaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0cnkgcHVsbCBob3N0IHJlc29sdmVkIHRvICcke2hvc3R9Jywgd2hpY2ggQVdTIENvZGVCdWlsZCBjYW5ub3QgcmVhY2gg4oCUIGl0IGlzIHRoZSBgICtcbiAgICAgICdpbi1jbHVzdGVyL2xvY2FsIGRlZmF1bHQuIFRoZSBzeW50aGVzaXplZCBwaXBlbGluZSB3b3VsZCBmYWlsIGF0IGJ1aWxkIHRpbWUgd2l0aCAnICtcbiAgICAgICdCVUlMRF9DT05UQUlORVJfVU5BQkxFX1RPX1BVTExfSU1BR0UuIFNldCB0aGUgcGxhdGZvcm1cXCdzIHB1YmxpYyBob3N0IHZpYSAnICtcbiAgICAgICdJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1Qgb3IgUExBVEZPUk1fQkFTRV9VUkwgYmVmb3JlIGRlcGxveWluZyDigJQgcGlwZWxpbmUtbWFuYWdlciBiYWtlcyAnICtcbiAgICAgICd0aGlzIGluIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIGl0IGRlcGxveXMgYWdhaW5zdC4gJyArXG4gICAgICAnU2V0IEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZSB0byBieXBhc3MgKGluLVZQQyBwcml2YXRlIEROUykuJyxcbiAgICApO1xuICB9XG4gIGNvbnN0IHBvcnRQYXJ0ID0gcG9ydCAmJiBwb3J0ICE9PSA4MCAmJiBwb3J0ICE9PSA0NDMgPyBgOiR7cG9ydH1gIDogJyc7XG4gIHJldHVybiB7IGhvc3QsIHBvcnRQYXJ0IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCwgcGx1Z2luOiBQbHVnaW4sIG9yZ0lkPzogc3RyaW5nKTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQge1xuICAvLyBgbWV0YWRhdGFfb25seWAgcGx1Z2lucyBsZWdpdGltYXRlbHkgaGF2ZSBubyBpbWFnZSDigJQgdGhlaXIgd29yayBydW5zXG4gIC8vIGluIHRoZSBkZWZhdWx0IENvZGVCdWlsZCBpbWFnZS4gUXVpZXQgc2tpcC5cbiAgaWYgKHBsdWdpbi5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBidWlsZF9pbWFnZSAvIHByZWJ1aWx0IHBsdWdpbnMgbXVzdCBoYXZlIG5hbWUgKyB2ZXJzaW9uIChEQiBjb25zdHJhaW50XG4gIC8vIG1ha2VzIGJvdGggTk9UIE5VTEwpLiBEZWZlbnNpdmUgY2hlY2sgaW4gY2FzZSBhIG1hbGZvcm1lZCByb3cgc2xpcHMgaW4uXG4gIGlmICghcGx1Z2luLm5hbWUgfHwgIXBsdWdpbi52ZXJzaW9uKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYnVpbGRUeXBlPSR7cGx1Z2luLmJ1aWxkVHlwZX0gYnV0IG1pc3NpbmcgbmFtZS92ZXJzaW9uIOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBydW4gb24gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAgYW5kIHdvblxcJ3QgaGF2ZSB0aGUgcGx1Z2luXFwncyBiYWtlZCB0b29scy4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCByZWdpc3RyeTtcbiAgdHJ5IHtcbiAgICByZWdpc3RyeSA9IENvbmZpZy5nZXQoJ3JlZ2lzdHJ5Jyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIENvbmZpZyBuYW1lc3BhY2Ugbm90IGxvYWRlZCAoZS5nLiwgdW5pdCB0ZXN0cyB3aXRob3V0IGZ1bGwgY29uZmlnKS5cbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfToke3BsdWdpbi52ZXJzaW9ufVwiIG5lZWRzIHRoZSByZWdpc3RyeSBjb25maWcgYnV0IGl0J3Mgbm90IGxvYWRlZCDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6OC4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCArIElNQUdFX1JFR0lTVFJZX1BPUlQgaW4gcGlwZWxpbmUtbWFuYWdlclxcJ3MgZW52aXJvbm1lbnQuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXJlZ2lzdHJ5Py5ob3N0KSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyBJTUFHRV9SRUdJU1RSWV9IT1NUIGJ1dCBpdCdzIGVtcHR5IOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBmYWxsIGJhY2sgdG8gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAuICcgK1xuICAgICAgJ1NldCBJTUFHRV9SRUdJU1RSWV9IT1NUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50IHRvIHVzZSB0aGUgcGx1Z2luIGltYWdlLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2NvcGUpIHtcbiAgICBsb2cud2FybihgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBpbWFnZSByZXNvbHV0aW9uIHNraXBwZWQ6IG5vIGNvbnN0cnVjdCBzY29wZSBwcm92aWRlZGApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBQZXItb3JnIGF1dGggcmVxdWlyZXMgb3JnSWQg4oCUIHRoZSBTZWNyZXQgaXMgbmFtZWQgcGVyIG9yZy5cbiAgaWYgKCFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBvcmdJZCBpcyByZXF1aXJlZCB0byBgICtcbiAgICAgICdyZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCB1c2VkIGZvciBDb2RlQnVpbGQgQmFzaWMgYXV0aC4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENvbXBvc2UgdGhlIGltYWdlIFVSSS4gTmFtZXNwYWNlIGJ5IG93bmVyc2hpcDpcbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgdGhlIHN5c3RlbSBvcmcg4oaSIGBzeXN0ZW0vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwgb24gYHN5c3RlbS8qYFxuICAvLyAgICAgdG8gYW55IGF1dGhlbnRpY2F0ZWQgb3JnIHVzZXIgKHJlYWQtb25seSBjYXRhbG9nIG9mIHNoYXJlZCBwbHVnaW5zKS5cbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgYSB0ZW5hbnQgb3JnIOKGkiBgb3JnLTxvcmdJZD4vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBUaGUgdG9rZW4gc2VydmljZSBncmFudHMgcHVsbCxwdXNoIG9ubHkgdG8gbWVtYmVycyBvZiB0aGF0IG9yZy5cbiAgLy8gVGhlIHBsdWdpbidzIG93biBgb3JnSWRgIChub3QgdGhlIGNhbGxlcidzKSBkZWNpZGVzIHRoZSBuYW1lc3BhY2Ug4oCUXG4gIC8vIHRlbmFudCBwaXBlbGluZXMgcHVsbGluZyBzaGFyZWQgc3lzdGVtIHBsdWdpbnMgc3RpbGwgZ2V0IHRoZSBgc3lzdGVtL2BcbiAgLy8gcGF0aCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW1hZ2UgYWN0dWFsbHkgbGl2ZXMuXG4gIC8vIFVzZSB0aGUgZXh0ZXJuYWwgcHVsbCBob3N0L3BvcnQ6IHRoaXMgaW1hZ2UgVVJJIGlzIGNvbnN1bWVkIGJ5IEFXU1xuICAvLyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKSwgd2hpY2ggY2FuJ3QgcmVzb2x2ZSB0aGUgaW4tY2x1c3RlclxuICAvLyBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQLiBGYWxsIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgL1xuICAvLyBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cyB3aGVyZSBubyBzZXBhcmF0ZSBwdWxsIGhvc3QgaXMgY29uZmlndXJlZC5cbiAgY29uc3QgeyBob3N0OiBwdWxsSG9zdCwgcG9ydFBhcnQgfSA9IHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQocmVnaXN0cnkpO1xuICBjb25zdCBTWVNURU1fT1JHX0lEID0gJ3N5c3RlbSc7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHBsdWdpbi5vcmdJZCA9PT0gU1lTVEVNX09SR19JRFxuICAgID8gJ3N5c3RlbSdcbiAgICA6IGBvcmctJHtwbHVnaW4ub3JnSWR9YDtcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtwdWxsSG9zdH0ke3BvcnRQYXJ0fS8ke25hbWVzcGFjZX0vJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1gO1xuXG4gIC8vIENvZGVCdWlsZCByZWFkcyBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBhbmQgc2VuZHMgaXRzXG4gIC8vIGB1c2VybmFtZWAvYHBhc3N3b3JkYCBmaWVsZHMgYXMgSFRUUCBCYXNpYyB0byB0aGUgcmVnaXN0cnkuIFRoZVxuICAvLyByZWdpc3RyeSBjaGFsbGVuZ2VzIHdpdGggYSBCZWFyZXIgcmVhbG0gcG9pbnRpbmcgYXRcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIERvY2tlciBjbGllbnQgZm9yd2FyZHNcbiAgLy8gdGhvc2UgY3JlZHMsIHRoZSBwYXNzd29yZCBpcyB2ZXJpZmllZCBhcyBhIHBsYXRmb3JtIEpXVCwgYW5kIGEgcmVnaXN0cnlcbiAgLy8gdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcgaXMgaXNzdWVkLlxuICAvL1xuICAvLyBTYW1lIFNlY3JldCBpcyByZWFkIGJ5IHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSAodmlhIHRoZSBgcGFzc3dvcmRgXG4gIC8vIGZpZWxkKSDigJQgb25lIFNlY3JldCBzZXJ2ZXMgYm90aCBmbG93cy5cbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsICdwbGF0Zm9ybScpO1xuICAvLyBDREsgY29uc3RydWN0IElEcyBhbGxvdyBvbmx5IFtBLVphLXowLTlfLV07IHNhbml0aXplIHRoZSBzZWNyZXQgbmFtZS5cbiAgY29uc3Qgc2VjcmV0Q29uc3RydWN0SWQgPSBgUGxhdGZvcm1DcmVkc18ke3NlY3JldE5hbWUucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJ18nKX1gO1xuICBjb25zdCBjcmVkZW50aWFsc1NlY3JldCA9IChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChzZWNyZXRDb25zdHJ1Y3RJZCkgYXMgU2VjcmV0IHwgdW5kZWZpbmVkKVxuICAgID8/IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHN0YWNrLCBzZWNyZXRDb25zdHJ1Y3RJZCwgc2VjcmV0TmFtZSk7XG5cbiAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoaW1hZ2VVcmksIHtcbiAgICBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzOiBjcmVkZW50aWFsc1NlY3JldCxcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZmFsbGJhY2sgQ29kZUJ1aWxkIGltYWdlIGZvciBzdGVwcyB3aXRob3V0IGEgcGx1Z2luLWJha2VkIG9uZS5cbiAqXG4gKiBSZWFkcyBgYXdzLmNvZGVCdWlsZC5kZWZhdWx0SW1hZ2VgIChlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApLlxuICogRGVmYXVsdDogYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgIOKAlCB0aGUgbG9jYWwgdGFnIGJ1aWx0IGJ5XG4gKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAuXG4gKlxuICogLSBBV1MgY3VyYXRlZCBpbWFnZSAoYGF3cy9jb2RlYnVpbGQvKmApOiB1c2UgdGhlIG1hdGNoaW5nIGBMaW51eEJ1aWxkSW1hZ2VgXG4gKiAgIGNvbnN0YW50IHNvIENESyBlbWl0cyBgaW1hZ2VQdWxsQ3JlZGVudGlhbHNUeXBlOiBDT0RFQlVJTERgLiBVc2luZ1xuICogICBgZnJvbURvY2tlclJlZ2lzdHJ5KClgIGhlcmUgd291bGQgc2V0IFNFUlZJQ0VfUk9MRSBjcmVkZW50aWFscywgd2hpY2hcbiAqICAgQ0ZOIHJlamVjdHMgd2l0aCBcImNhbm5vdCB1c2UgYSBDb2RlQnVpbGQgY3VyYXRlZCBpbWFnZSB3aXRoXG4gKiAgIGltYWdlUHVsbENyZWRlbnRpYWxzVHlwZSBTRVJWSUNFX1JPTEVcIi5cbiAqIC0gQmFyZSB0YWcgKG5vIGAvYCk6IGF1dG8tcHJlZml4ZWQgdG9cbiAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAqICAgd2l0aCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgYXMgQmFzaWMgYXV0aCDigJQgc2FtZSBwYXRoXG4gKiAgIGByZXNvbHZlUGx1Z2luSW1hZ2UoKWAgdXNlcyBmb3IgcGx1Z2luIGltYWdlcy4gTmVlZHMgYHNjb3BlYCArIGBvcmdJZGAuXG4gKiAtIEZ1bGx5LXF1YWxpZmllZCByZWdpc3RyeSBVUkkgKGNvbnRhaW5zIGAvYCk6IHVzZWQgYXMtaXMsIG5vIGF1dGggd2lyZWQuXG4gKiAtIE1pc3NpbmcgcmVnaXN0cnkgY29uZmlnIG9yIHNjb3BlL29yZ0lkIOKGkiBmYWxscyBiYWNrIHRvXG4gKiAgIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjguMGAgKGFzIGEgQ1VSQVRFRCBpbWFnZSwgc2VlIGFib3ZlKSwgd2l0aCBhXG4gKiAgIHdhcm5pbmcgc28gc3ludGggZGVncmFkZXMgZ3JhY2VmdWxseSBvbiBwYXJ0aWFsbHkgY29uZmlndXJlZCBlbnZzLlxuICovXG5jb25zdCBTVEFOREFSRF84XzAgPSAnYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAnO1xuXG4vKipcbiAqIGF3cy1jZGstbGliIDIuMjU4IGhhcyBubyBgTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzhfMGAgc3RhdGljIHlldCwgc28gdGhlXG4gKiBjdXJhdGVkIDguMCBmYWxsYmFjayByZXNvbHZlcyB2aWEgYGZyb21Db2RlQnVpbGRJbWFnZUlkYCAoc3RpbGwgQ09ERUJVSUxEIGNyZWRzKS5cbiAqL1xuY29uc3QgZmFsbGJhY2tCdWlsZEltYWdlID0gKCk6IElCdWlsZEltYWdlID0+IExpbnV4QnVpbGRJbWFnZS5mcm9tQ29kZUJ1aWxkSW1hZ2VJZChTVEFOREFSRF84XzApO1xuXG4vKipcbiAqIE1hcCBBV1MgY3VyYXRlZCBgYXdzL2NvZGVidWlsZC8qYCBpbWFnZSBzdHJpbmdzIHRvIHRoZSBtYXRjaGluZ1xuICogYExpbnV4QnVpbGRJbWFnZWAgc3RhdGljLiBFeHRlbmQgd2hlbiBuZXdlciBzdGFuZGFyZCBpbWFnZXMgc2hpcC5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIG5vbi1jdXJhdGVkIHN0cmluZ3Mg4oCUIGNhbGxlciBzaG91bGQgdXNlXG4gKiBgZnJvbURvY2tlclJlZ2lzdHJ5KClgIGZvciB0aG9zZS5cbiAqL1xuZnVuY3Rpb24gY3VyYXRlZExpbnV4QnVpbGRJbWFnZShpbWFnZUlkOiBzdHJpbmcpOiBJQnVpbGRJbWFnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaW1hZ2VJZC5zdGFydHNXaXRoKCdhd3MvY29kZWJ1aWxkLycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGltYWdlSWQpIHtcbiAgICBjYXNlICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjYuMCc6IHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfNl8wO1xuICAgIGNhc2UgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6NS4wJzogcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF81XzA7XG4gICAgLy8gTmV3ZXIgY29kZW5hbWVkIGltYWdlcyByb3V0ZSB0aHJvdWdoIGZyb21Db2RlQnVpbGRJbWFnZUlkLCB3aGljaFxuICAgIC8vIENESyBhbHNvIG1hcmtzIGFzIENPREVCVUlMRCBjcmVkZW50aWFscyAoY3VyYXRlZCkuXG4gICAgZGVmYXVsdDogcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tQ29kZUJ1aWxkSW1hZ2VJZChpbWFnZUlkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHNjb3BlPzogQ29uc3RydWN0LCBvcmdJZD86IHN0cmluZyk6IElCdWlsZEltYWdlIHtcbiAgbGV0IGNvbmZpZ3VyZWQ6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25maWd1cmVkID0gQ29uZmlnLmdldCgnYXdzJykuY29kZUJ1aWxkLmRlZmF1bHRJbWFnZTtcbiAgfSBjYXRjaCB7XG4gICAgY29uZmlndXJlZCA9IFNUQU5EQVJEXzhfMDtcbiAgfVxuXG4gIC8vIEFXUyBjdXJhdGVkIGltYWdlIOKGkiBDT0RFQlVJTEQgY3JlZGVudGlhbHMuIE1VU1QgZ28gdGhyb3VnaCB0aGVcbiAgLy8gTGludXhCdWlsZEltYWdlIGNvbnN0YW50cywgbm90IGZyb21Eb2NrZXJSZWdpc3RyeSgpLlxuICBjb25zdCBjdXJhdGVkID0gY3VyYXRlZExpbnV4QnVpbGRJbWFnZShjb25maWd1cmVkKTtcbiAgaWYgKGN1cmF0ZWQpIHJldHVybiBjdXJhdGVkO1xuXG4gIC8vIEZ1bGx5LXF1YWxpZmllZCBVUkkg4oCUIG9wZXJhdG9yIG93bnMgaXQuIE5vIHJlZ2lzdHJ5L1NlY3JldCB3aXJpbmcuXG4gIGlmIChjb25maWd1cmVkLmluY2x1ZGVzKCcvJykpIHtcbiAgICByZXR1cm4gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShjb25maWd1cmVkKTtcbiAgfVxuXG4gIC8vIEJhcmUgdGFnIOKGkiBhdXRvLXByZWZpeCB3aXRoIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSwgbWlycm9yaW5nXG4gIC8vIHJlc29sdmVQbHVnaW5JbWFnZSgpLiBCYWlsIHRvIHRoZSBjdXJhdGVkIHN0YW5kYXJkOjguMCBmYWxsYmFja1xuICAvLyAod2l0aCBhIHdhcm5pbmcpIGF0IGVhY2ggbWlzc2luZyBwcmVyZXF1aXNpdGUgc28gc3ludGggZGVncmFkZXNcbiAgLy8gZ3JhY2VmdWxseSBvbiBwYXJ0aWFsbHkgY29uZmlndXJlZCBlbnZpcm9ubWVudHMgaW5zdGVhZCBvZiBmYWlsaW5nLlxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRT0nJHtjb25maWd1cmVkfScgaXMgYSBiYXJlIHRhZyBidXQgcmVnaXN0cnkgY29uZmlnIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgYGZhbGxpbmcgYmFjayB0byAke1NUQU5EQVJEXzhfMH0uIFNldCBJTUFHRV9SRUdJU1RSWV9IT1NUICsgSU1BR0VfUkVHSVNUUllfUE9SVC5gLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG4gIGlmICghcmVnaXN0cnk/Lmhvc3QpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRT0nJHtjb25maWd1cmVkfScgaXMgYSBiYXJlIHRhZyBidXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpcyBlbXB0eSDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfOF8wfS5gLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG4gIGlmICghc2NvcGUgfHwgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0U9JyR7Y29uZmlndXJlZH0nIG5lZWRzIHNjb3BlK29yZ0lkIGZvciBTZWNyZXQgYXV0aCDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfOF8wfS4gKENhbGxlciBkaWQgbm90IHN1cHBseSB0aGVtLilgLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG5cbiAgLy8gVXNlIHRoZSBleHRlcm5hbCBwdWxsIGhvc3QvcG9ydCAobm90IHRoZSBpbi1jbHVzdGVyIGhvc3QpIOKAlCB0aGlzIFVSSSBpc1xuICAvLyBjb25zdW1lZCBieSBBV1MgQ29kZUJ1aWxkLCB3aGljaCBjYW4ndCByZXNvbHZlIHRoZSBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQLlxuICBjb25zdCB7IGhvc3Q6IHB1bGxIb3N0LCBwb3J0UGFydCB9ID0gcmVzb2x2ZUV4dGVybmFsUHVsbFRhcmdldChyZWdpc3RyeSk7XG4gIGNvbnN0IGltYWdlVXJpID0gYCR7cHVsbEhvc3R9JHtwb3J0UGFydH0vbGlicmFyeS8ke2NvbmZpZ3VyZWR9YDtcblxuICAvLyBTYW1lIFNlY3JldCBhcyByZXNvbHZlUGx1Z2luSW1hZ2Ug4oCUIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0LCBDb2RlQnVpbGRcbiAgLy8gc2VuZHMgaXQgYXMgQmFzaWMgYXV0aCwgaW1hZ2UtcmVnaXN0cnkgdmVyaWZpZXMgdGhlIEpXVCBpbiBgcGFzc3dvcmRgLlxuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgJ3BsYXRmb3JtJyk7XG4gIGNvbnN0IHNlY3JldENvbnN0cnVjdElkID0gYFBsYXRmb3JtQ3JlZHNfJHtzZWNyZXROYW1lLnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICdfJyl9YDtcbiAgY29uc3QgY3JlZGVudGlhbHNTZWNyZXQgPSAoc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoc2VjcmV0Q29uc3RydWN0SWQpIGFzIFNlY3JldCB8IHVuZGVmaW5lZClcbiAgICA/PyBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihzdGFjaywgc2VjcmV0Q29uc3RydWN0SWQsIHNlY3JldE5hbWUpO1xuXG4gIHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KGltYWdlVXJpLCB7XG4gICAgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsczogY3JlZGVudGlhbHNTZWNyZXQsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29kZUJ1aWxkU3RlcChvcHRpb25zOiBDb2RlQnVpbGRTdGVwT3B0aW9ucyk6IFNoZWxsU3RlcCB8IENvZGVCdWlsZFN0ZXAgfCBNYW51YWxBcHByb3ZhbFN0ZXAge1xuICBjb25zdCB7XG4gICAgaWQsIGlucHV0LCBtZXRhZGF0YSwgbmV0d29yaywgc2NvcGUsXG4gICAgcHJlSW5zdGFsbENvbW1hbmRzLCBwb3N0SW5zdGFsbENvbW1hbmRzLCBwcmVDb21tYW5kcywgcG9zdENvbW1hbmRzLFxuICAgIGVudjogY3VzdG9tRW52LCBhZGRpdGlvbmFsSW5wdXRzLCB0aW1lb3V0LCBmYWlsdXJlQmVoYXZpb3IsXG4gICAgYXJ0aWZhY3RNYW5hZ2VyLCBzdGFnZU5hbWUsIHN0YWdlQWxpYXMsIHBsdWdpbkFsaWFzLCBvcmdJZCwgcGlwZWxpbmVTY29wZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gUmVzb2x2ZSB7eyAuLi4gfX0gdGVtcGxhdGVzIGluIHBsdWdpbiBzcGVjIGZpZWxkcyBhZ2FpbnN0IHRoZSBwaXBlbGluZSBzY29wZS5cbiAgLy8gRXZlcnkgY2FsbCBnb2VzIHRocm91Z2ggdGhlIHJlc29sdmVyIOKAlCBwbHVnaW5zIHdpdGhvdXQgdGVtcGxhdGUgdG9rZW5zIGFyZVxuICAvLyBhIG5vLW9wIGZhc3QgcGF0aCBpbnNpZGUgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcygpLlxuICBjb25zdCBwbHVnaW4gPSByZXNvbHZlUGx1Z2luVGVtcGxhdGVzKG9wdGlvbnMucGx1Z2luLCBwaXBlbGluZVNjb3BlKTtcblxuICBjb25zdCBtZXJnZWQgPSBtZXJnZShtZXRhZGF0YSA/PyB7fSwgcGx1Z2luLm1ldGFkYXRhID8/IHt9KTtcblxuICAvLyBNYW51YWxBcHByb3ZhbFN0ZXA6IG5vIGNvbW1hbmRzLCBlbnYsIGNvbXB1dGUsIG9yIG5ldHdvcmsg4oCUIGp1c3QgaWQgKyBvcHRpb25hbCBjb21tZW50XG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5NQU5VQUxfQVBQUk9WQUxfU1RFUCkge1xuICAgIHJldHVybiBuZXcgTWFudWFsQXBwcm92YWxTdGVwKGlkLCB7XG4gICAgICBjb21tZW50OiB0eXBlb2YgbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgPT09ICdzdHJpbmcnID8gbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1tDcmVhdGVDb2RlQnVpbGRTdGVwXSBCdWlsZGluZyBzdGVwIHdpdGggbWVyZ2VkIG1ldGFkYXRhJyk7XG5cbiAgLy8gV2FybiBhYm91dCByZXF1aXJlZCBzZWNyZXRzIHdpdGhvdXQgb3JnSWQgKGNhbid0IHJlc29sdmUpXG4gIGNvbnN0IHJlcXVpcmVkU2VjcmV0cyA9IHBsdWdpbi5zZWNyZXRzPy5maWx0ZXIocyA9PiBzLnJlcXVpcmVkKSA/PyBbXTtcbiAgaWYgKHJlcXVpcmVkU2VjcmV0cy5sZW5ndGggPiAwICYmICFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgZGVjbGFyZXMgJHtyZXF1aXJlZFNlY3JldHMubGVuZ3RofSByZXF1aXJlZCBzZWNyZXQocykgYnV0IG5vIG9yZ0lkIGlzIGF2YWlsYWJsZS4gYCArXG4gICAgICBgU2VjcmV0cyB3aWxsIG5vdCBiZSBpbmplY3RlZDogJHtyZXF1aXJlZFNlY3JldHMubWFwKHMgPT4gcy5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgcGx1Z2luIHNlY3JldHMgYXMgU0VDUkVUU19NQU5BR0VSIGVudiB2YXJzXG4gIGNvbnN0IHNlY3JldEVudlZhcnMgPSAocGx1Z2luLnNlY3JldHM/Lmxlbmd0aCAmJiBvcmdJZClcbiAgICA/IHRvU2VjcmV0RW52VmFycyhwbHVnaW4uc2VjcmV0cywgb3JnSWQpXG4gICAgOiB7fTtcblxuICBjb25zdCBlbnYgPSBidWlsZEVudihwbHVnaW4sIG1lcmdlZCwgY3VzdG9tRW52KTtcblxuICAvLyBDb2RlUGlwZWxpbmUgcmVzb2x2ZWQgdmFyaWFibGVzIOKAlCBtdXN0IGJlIGluIENvZGVCdWlsZFN0ZXAuZW52IChhY3Rpb24tbGV2ZWwpLFxuICAvLyBub3QgYnVpbGRFbnZpcm9ubWVudC5lbnZpcm9ubWVudFZhcmlhYmxlcyAocHJvamVjdC1sZXZlbClcbiAgY29uc3QgYWN0aW9uRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIFBJUEVMSU5FX0VYRUNVVElPTl9JRDogJyN7Y29kZXBpcGVsaW5lLlBpcGVsaW5lRXhlY3V0aW9uSWR9JyxcbiAgfTtcblxuICBjb25zdCBvdXRwdXREaXIgPSBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeTtcbiAgY29uc3QgZW5zdXJlT3V0cHV0RGlyID0gKG91dHB1dERpciAmJiAhb3V0cHV0RGlyLmluY2x1ZGVzKCcqJykpXG4gICAgPyBbYG1rZGlyIC1wIFwiJHtvdXRwdXREaXJ9XCIgJiYgdG91Y2ggXCIke291dHB1dERpcn0vLmdpdGtlZXBcImBdXG4gICAgOiBbXTtcblxuICBjb25zdCB7IGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfSA9IGJ1aWxkQ29tbWFuZHMocGx1Z2luLCB7XG4gICAgcHJlSW5zdGFsbENvbW1hbmRzOiBbLi4uZW5zdXJlT3V0cHV0RGlyLCAuLi4ocHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKV0sXG4gICAgcG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICBwcmVDb21tYW5kcyxcbiAgICBwb3N0Q29tbWFuZHMsXG4gIH0sIGZhaWx1cmVCZWhhdmlvcik7XG5cbiAgY29uc3QgcHJvZ3JhbW1hdGljID0geyBpbnB1dCwgaW5zdGFsbENvbW1hbmRzLCBjb21tYW5kcyB9O1xuXG4gIC8vIFJlc29sdmUgdGhlIHBsdWdpbidzIHJ1bnRpbWUgaW1hZ2UuIENvZGVCdWlsZCBkZWZhdWx0cyB0b1xuICAvLyBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjBgIHdoZW4gbm8gYGJ1aWxkSW1hZ2VgIGlzIHNldCDigJQgdGhhdCdzIHRoZVxuICAvLyBBV1MtbWFuYWdlZCBVYnVudHUgaW1hZ2UgYW5kIERPRVMgTk9UIGhhdmUgYW55IHBsdWdpbi1iYWtlZCB0b29sc1xuICAvLyAocGlwZWxpbmUtbWFuYWdlciwgc255aywgdGVycmFmb3JtLCBldGMuKS4gV2lyaW5nIHRoZSBwbHVnaW4ncyBpbWFnZVxuICAvLyBoZXJlIG1lYW5zIENvZGVCdWlsZCBwdWxscyBmcm9tIG91ciBwcml2YXRlIHJlZ2lzdHJ5IGFuZCB0aGUgdG9vbHNcbiAgLy8gaW5zdGFsbGVkIGluIHRoZSBwbHVnaW4ncyBEb2NrZXJmaWxlIGFyZSBhY3R1YWxseSBhdmFpbGFibGUuXG4gIGNvbnN0IHBsdWdpbkJ1aWxkSW1hZ2UgPSByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGUsIHBsdWdpbiwgb3JnSWQpO1xuXG4gIC8vIFNoZWxsU3RlcCBicmFuY2guXG4gIC8vIFNoZWxsU3RlcCBpdHNlbGYgZG9lc24ndCBhY2NlcHQgYGJ1aWxkRW52aXJvbm1lbnRgL2BidWlsZEltYWdlYC4gQ0RLXG4gIC8vIHBpcGVsaW5lcyB3cmFwcyBTaGVsbFN0ZXBzIGluIGEgZGVmYXVsdCBDb2RlQnVpbGQgYWN0aW9uIHRoYXQgcnVucyBvblxuICAvLyBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjBgIOKAlCB3aGljaCB3b24ndCBoYXZlIHRoZSBwbHVnaW4ncyB0b29scy5cbiAgLy9cbiAgLy8gU28gd2hlbiBhIFNIRUxMX1NURVAgcGx1Z2luIERPRVMgaGF2ZSBhbiBpbWFnZSAoYmVjYXVzZSBpdHMgYXV0aG9yXG4gIC8vIGJha2VkIHRvb2xzIGludG8gYSBEb2NrZXJmaWxlKSwgd2UgUFJPTU9URSBpdCB0byBhIENvZGVCdWlsZFN0ZXAgd2l0aFxuICAvLyB0aGUgcmVzb2x2ZWQgaW1hZ2UuIFRoZSBwbHVnaW4gYXV0aG9yJ3MgaW50ZW50IChcInVzZSBteSBiYWtlZCB0b29sc1wiKVxuICAvLyBpcyBwcmVzZXJ2ZWQgd2l0aG91dCBmb3JjaW5nIHRoZW0gdG8gY2hhbmdlIHBsdWdpblR5cGUuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIHBsdWdpbiBoYXMgbm8gaW1hZ2UgKG9yIHJlZ2lzdHJ5IGlzbid0IGNvbmZpZ3VyZWQpLCB3ZSBrZWVwXG4gIC8vIHRoZSBvcmlnaW5hbCBTaGVsbFN0ZXAg4oCUIGl0J3MgbGlnaHRlciB3ZWlnaHQgYW5kIHRoZSBkZWZhdWx0XG4gIC8vIENvZGVCdWlsZCBpbWFnZSBpcyBmaW5lLlxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuU0hFTExfU1RFUCkge1xuICAgIGlmICghcGx1Z2luQnVpbGRJbWFnZSkge1xuICAgICAgcmV0dXJuIG5ldyBTaGVsbFN0ZXAoaWQsIHtcbiAgICAgICAgLi4ucHJvZ3JhbW1hdGljLFxuICAgICAgICBlbnY6IHsgLi4uZW52LCAuLi5hY3Rpb25FbnYgfSxcbiAgICAgICAgLi4ubWV0YWRhdGFGb3JTaGVsbFN0ZXAobWVyZ2VkKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFtDcmVhdGVDb2RlQnVpbGRTdGVwXSBTSEVMTF9TVEVQIHBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaGFzIGEgcmVnaXN0cnkgaW1hZ2Ug4oCUIHByb21vdGluZyB0byBDb2RlQnVpbGRTdGVwIHNvIHRoZSBwbHVnaW4gaW1hZ2UgaXMgYWN0dWFsbHkgdXNlZGApO1xuICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgQ29kZUJ1aWxkU3RlcCBwYXRoIGJlbG93LlxuICB9XG5cbiAgY29uc3QgY29tcHV0ZVR5cGUgPSBnZXRDb21wdXRlVHlwZShcbiAgICBwbHVnaW4uY29tcHV0ZVR5cGUgPz8gb3B0aW9ucy5kZWZhdWx0Q29tcHV0ZVR5cGUgPz8gJ1NNQUxMJyxcbiAgKTtcblxuICAvLyBTdGVwIG5ldHdvcms6IGV4cGxpY2l0IHN0ZXAgY29uZmlnIHdpbnMsIGVsc2UgdGhpcyBzdGVwJ3MgYGVjMjpuZXR3b3JrYCBtZXRhZGF0YS5cbiAgY29uc3QgcmVzb2x2ZWROZXR3b3JrID0gbmV0d29yayA/PyBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhKG1lcmdlZCk7XG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IHJlc29sdmVkTmV0d29ya1xuICAgID8gcmVzb2x2ZU5ldHdvcmsoc2NvcGUsIG9wdGlvbnMudW5pcXVlSWQsIHJlc29sdmVkTmV0d29yaylcbiAgICA6IHt9O1xuXG4gIC8vIE1ldGFkYXRhIHNwcmVhZCBsYXN0IHNvIGl0IGNhbiBvdmVycmlkZSBwcm9ncmFtbWF0aWMgZGVmYXVsdHMuXG4gIC8vIE5PVEU6IENhY2hpbmcgaXMgc3VwcG9ydGVkIHZpYSB0d28gbWV0YWRhdGEgcGF0aHM6XG4gIC8vICAgMS4gTWV0YWRhdGFLZXlzLkNBQ0hFICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScpIOKAlCBwYXNzZWQgZGlyZWN0bHlcbiAgLy8gICAgICBhcyB0aGUgQ29kZUJ1aWxkU3RlcCBgY2FjaGVgIHByb3AgKGV4cGVjdHMgYSBjb2RlYnVpbGQuQ2FjaGUgb2JqZWN0KS5cbiAgLy8gICAyLiBNZXRhZGF0YUtleXMuUEFSVElBTF9CVUlMRF9TUEVDICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJylcbiAgLy8gICAgICDigJQgcGFzc2VkIGFzIGBwYXJ0aWFsQnVpbGRTcGVjYCwgd2hpY2ggY2FuIGluY2x1ZGUgYSBgY2FjaGU6YCBzZWN0aW9uIGZvclxuICAvLyAgICAgIFMzIG9yIGxvY2FsIGNhY2hpbmcgKGUuZy4sIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHsgY2FjaGU6IHsgcGF0aHM6IFsuLi5dIH0gfSkpLlxuICBjb25zdCBzdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoaWQsIHtcbiAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgLi4ubmV0d29ya1Byb3BzLFxuICAgIC4uLihhZGRpdGlvbmFsSW5wdXRzICYmIHsgYWRkaXRpb25hbElucHV0cyB9KSxcbiAgICAuLi4odGltZW91dCAmJiB7IHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXModGltZW91dCkgfSksXG4gICAgZW52OiBhY3Rpb25FbnYsXG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgPz8gdW5kZWZpbmVkLFxuICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgIGNvbXB1dGVUeXBlLFxuICAgICAgYnVpbGRJbWFnZTogcGx1Z2luQnVpbGRJbWFnZSA/PyByZXNvbHZlRGVmYXVsdEJ1aWxkSW1hZ2Uoc2NvcGUsIG9yZ0lkKSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC4uLnRvQ29kZUJ1aWxkRW52VmFycyhlbnYpLFxuICAgICAgICAuLi5zZWNyZXRFbnZWYXJzLFxuICAgICAgfSxcbiAgICAgIC4uLm1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudChtZXJnZWQpLFxuICAgIH0sXG4gICAgLi4ubWV0YWRhdGFGb3JDb2RlQnVpbGRTdGVwKG1lcmdlZCksXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIHdpdGggYXJ0aWZhY3QgbWFuYWdlciBpZiBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5IGlzIHNldFxuICBpZiAocGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgJiYgYXJ0aWZhY3RNYW5hZ2VyICYmIHN0YWdlTmFtZSkge1xuICAgIGNvbnN0IGFydGlmYWN0S2V5OiBBcnRpZmFjdEtleSA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlQWxpYXM6IHN0YWdlQWxpYXMgPz8gYCR7c3RhZ2VOYW1lfS1hbGlhc2AsXG4gICAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHBsdWdpbkFsaWFzOiBwbHVnaW5BbGlhcyA/PyBgJHtwbHVnaW4ubmFtZX0tYWxpYXNgLFxuICAgICAgb3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSxcbiAgICB9O1xuICAgIGFydGlmYWN0TWFuYWdlci5hZGQoYXJ0aWZhY3RLZXksIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgb3IgQ29tcHV0ZVR5cGUgZW51bSB0byBDREsgQ29tcHV0ZVR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVUeXBlKGlucHV0OiBzdHJpbmcgfCBDREtDb21wdXRlVHlwZSA9ICdTTUFMTCcpOiBDREtDb21wdXRlVHlwZSB7XG4gIC8vIElmIGFscmVhZHkgYSBDREsgQ29tcHV0ZVR5cGUsIHJldHVybiBhcy1pc1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC50b1VwcGVyQ2FzZSgpIGFzIENvbXB1dGVUeXBlO1xuXG4gIGNvbnN0IG1hcHBpbmc6IFJlY29yZDxDb21wdXRlVHlwZSwgQ0RLQ29tcHV0ZVR5cGU+ID0ge1xuICAgIFtDb21wdXRlVHlwZS5TTUFMTF06IENES0NvbXB1dGVUeXBlLlNNQUxMLFxuICAgIFtDb21wdXRlVHlwZS5NRURJVU1dOiBDREtDb21wdXRlVHlwZS5NRURJVU0sXG4gICAgW0NvbXB1dGVUeXBlLkxBUkdFXTogQ0RLQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgW0NvbXB1dGVUeXBlLlgyX0xBUkdFXTogQ0RLQ29tcHV0ZVR5cGUuWDJfTEFSR0UsXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0ID0gbWFwcGluZ1tub3JtYWxpemVkXTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICBsb2cud2FybihgVW5rbm93biBjb21wdXRlIHR5cGUgXCIke2lucHV0fVwiLCBmYWxsaW5nIGJhY2sgdG8gU01BTExgKTtcbiAgICByZXR1cm4gQ0RLQ29tcHV0ZVR5cGUuU01BTEw7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgbGV0dGVycyBvciBudW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZVxuICogQHBhcmFtIGlucHV0IC0gVGhlIHN0cmluZyB0byBwcm9jZXNzXG4gKiBAcGFyYW0gcmVwbGFjZVZhbHVlIC0gVGhlIGNoYXJhY3RlcihzKSB0byByZXBsYWNlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aXRoIChkZWZhdWx0OiAnXycpXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHJlcGxhY2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTm9uQWxwaGFudW1lcmljKGlucHV0OiBzdHJpbmcsIHJlcGxhY2VWYWx1ZTogc3RyaW5nID0gJ18nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCByZXBsYWNlVmFsdWUpO1xufVxuXG4vKipcbiAqIFVud3JhcCBhIFNlY3JldFZhbHVlIHwgc3RyaW5nIGludG8gYSBwbGFpbiBzdHJpbmcuXG4gKiBXaGVuIGEgU2VjcmV0VmFsdWUgaXMgcHJvdmlkZWQgKGUuZy4gZnJvbSBTZWNyZXRzIE1hbmFnZXIpLCBjYWxscyB1bnNhZmVVbndyYXAoKVxuICogdG8gZXh0cmFjdCB0aGUgdW5kZXJseWluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFNlY3JldCh2YWx1ZTogU2VjcmV0VmFsdWUgfCBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdmFsdWUudW5zYWZlVW53cmFwKCk7XG59XG4iXX0=
|
|
572
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLGNBQWMsRUFBRSxlQUFlLEVBQW9CLE1BQU0sMkJBQTJCLENBQUM7QUFDdEosT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBcUIsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhFLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFHLE9BQXFDO0lBQzVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQWlCLENBQUM7QUFD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QUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxRQUFRO0tBQ2hELENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsS0FBSywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWEsRUFBRSxlQUF1QixHQUFHO0lBQzlFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQTJCO0lBQ3RELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU2VjcmV0VmFsdWUsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSBhcyBDREtDb21wdXRlVHlwZSwgTGludXhCdWlsZEltYWdlLCB0eXBlIElCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgTWFudWFsQXBwcm92YWxTdGVwLCBTaGVsbFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQXJ0aWZhY3RLZXkgfSBmcm9tICcuL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbWV0YWRhdGFGb3JTaGVsbFN0ZXAsIG1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcCwgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50LCBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1idWlsZGVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVOZXR3b3JrIH0gZnJvbSAnLi9uZXR3b3JrLmpzJztcbmltcG9ydCB7IFBsdWdpblR5cGUsIENvbXB1dGVUeXBlLCB0eXBlIE1ldGFEYXRhVHlwZSwgQ0RLX01FVEFEQVRBX1BSRUZJWCB9IGZyb20gJy4vcGlwZWxpbmUtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGRTdGVwT3B0aW9ucywgU3RlcEN1c3RvbWl6YXRpb24gfSBmcm9tICcuLi9waXBlbGluZS9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMgfSBmcm9tICcuLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWhlbHBlcnMnKTtcblxuLyoqXG4gKiBNZXJnZSBtdWx0aXBsZSBtZXRhZGF0YSBvYmplY3RzIGludG8gb25lLiBMYXRlciBzb3VyY2VzIG92ZXJyaWRlIGVhcmxpZXIgb25lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKC4uLnNvdXJjZXM6IEFycmF5PFBhcnRpYWw8TWV0YURhdGFUeXBlPj4pOiBNZXRhRGF0YVR5cGUge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4uc291cmNlcykgYXMgTWV0YURhdGFUeXBlO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdHJpbmdzLlxuICogS2V5cyBzdGFydGluZyB3aXRoICdhd3M6Y2RrOicgYXJlIHJlc2VydmVkIGZvciBDREsgY29uc3RydWN0IHByb3BzXG4gKiAocHJvY2Vzc2VkIGJ5IG1ldGFkYXRhIGV4dHJhY3Rpb24gZnVuY3Rpb25zKSBhbmQgYXJlIGV4Y2x1ZGVkIGhlcmUuXG4gKlxuICogQWxsIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgZm9yIENvZGVCdWlsZCBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoQ0RLX01FVEFEQVRBX1BSRUZJWCkpIHtcbiAgICAgIGVudltrZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBCdWlsZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gY29uZmlnLCBtZXJnZWQgbWV0YWRhdGEsIGFuZCBjdXN0b20gZW52LlxuICpcbiAqIE1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBwbHVnaW4uZW52IOKAlCBwbHVnaW4gZGVmYXVsdCBlbnYgdmFycyAobG93ZXN0IHByaW9yaXR5KVxuICogICAyLiBub24tbmFtZXNwYWNlZCBtZXRhZGF0YSBrZXlzIOKAlCBlLmcuIFBZVEhPTl9WRVJTSU9OLCBXT1JLRElSXG4gKiAgIDMuIGN1c3RvbUVudiDigJQgcGVyLXN0ZXAgY3VzdG9tIGVudiB2YXJzIChoaWdoZXN0IHByaW9yaXR5KVxuICovXG5jb25zdCBCT09UU1RSQVBfQ01EID0gJ2V4cG9ydCBXT1JLRElSPSR7V09SS0RJUjotLi99OyBjZCAke1dPUktESVJ9JztcblxuZnVuY3Rpb24gYnVpbGRFbnYocGx1Z2luOiBQbHVnaW4sIG1ldGFkYXRhOiBNZXRhRGF0YVR5cGUsIGN1c3RvbUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4ocGx1Z2luLmVudiA/PyB7fSksXG4gICAgLi4uZXh0cmFjdE1ldGFkYXRhRW52KG1ldGFkYXRhKSxcbiAgICAuLi4oY3VzdG9tRW52ID8/IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXcmFwIGJ1aWxkIGNvbW1hbmRzIGJhc2VkIG9uIGZhaWx1cmUgYmVoYXZpb3IuXG4gKiAtICdmYWlsJyAoZGVmYXVsdCk6IE5vIHdyYXBwaW5nIOKAlCBjb21tYW5kcyBmYWlsIHRoZSBwaXBlbGluZSBuYXR1cmFsbHkuXG4gKiAtICd3YXJuJzogUnVuIGNvbW1hbmRzIHdpdGggYHNldCArZWAsIGNhcHR1cmUgZmFpbHVyZXMsIGxvZyB3YXJuaW5ncywgY29udGludWUuXG4gKiAtICdpZ25vcmUnOiBBcHBlbmQgYHx8IHRydWVgIHRvIGVhY2ggY29tbWFuZCDigJQgZmFpbHVyZXMgYXJlIHNpbGVudGx5IHN3YWxsb3dlZC5cbiAqXG4gKiBPbmx5IGFwcGxpZWQgdG8gYnVpbGQgY29tbWFuZHMsIG5vdCBpbnN0YWxsIGNvbW1hbmRzIChpbnN0YWxsIGZhaWx1cmVzIHNob3VsZCBhbHdheXMgc3RvcCB0aGUgYnVpbGQpLlxuICovXG5mdW5jdGlvbiB3cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IoY29tbWFuZHM6IHN0cmluZ1tdLCBiZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogc3RyaW5nW10ge1xuICBpZiAoIWJlaGF2aW9yIHx8IGJlaGF2aW9yID09PSAnZmFpbCcpIHJldHVybiBjb21tYW5kcztcblxuICBpZiAoYmVoYXZpb3IgPT09ICdpZ25vcmUnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB0cnVlYCk7XG4gIH1cblxuICAvLyAnd2Fybic6IHJ1biBhbGwgY29tbWFuZHMsIGNhcHR1cmUgZmFpbHVyZXMsIGJ1dCBkb24ndCBzdG9wXG4gIHJldHVybiBbXG4gICAgJ3NldCArZScsXG4gICAgJ19TVEVQX0VYSVQ9MCcsXG4gICAgLi4uY29tbWFuZHMubWFwKGNtZCA9PiBgJHtjbWR9IHx8IHsgZWNobyBcIldBUk5JTkc6IENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XCI7IF9TVEVQX0VYSVQ9MTsgfWApLFxuICAgICdzZXQgLWUnLFxuICAgICdpZiBbIFwiJF9TVEVQX0VYSVRcIiAtbmUgMCBdOyB0aGVuIGVjaG8gXCJXQVJOSU5HOiBPbmUgb3IgbW9yZSBjb21tYW5kcyBpbiB0aGlzIHN0ZXAgZmFpbGVkXCI7IGZpJyxcbiAgXTtcbn1cblxuLyoqXG4gKiBCdWlsZCBib290c3RyYXAtcHJlZml4ZWQgaW5zdGFsbCBhbmQgYnVpbGQgY29tbWFuZHMgZnJvbSBwbHVnaW4gY29uZmlnLlxuICogRWFjaCBjb21tYW5kIGxpc3QgaXMgcHJlcGVuZGVkIHdpdGggYSBXT1JLRElSIGJvb3RzdHJhcCB0aGF0IGRlZmF1bHRzIHRvICcuLycuXG4gKiBXaGVuIGN1c3RvbSBjb21tYW5kcyBhcmUgcHJvdmlkZWQsIHRoZXkgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBCdWlsZCBjb21tYW5kcyBhcmUgb3B0aW9uYWxseSB3cmFwcGVkIGJ5IGZhaWx1cmVCZWhhdmlvciBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kcyhwbHVnaW46IFBsdWdpbiwgY3VzdG9tPzogU3RlcEN1c3RvbWl6YXRpb24sIGZhaWx1cmVCZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnKTogeyBpbnN0YWxsQ29tbWFuZHM6IHN0cmluZ1tdOyBjb21tYW5kczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IFtcbiAgICAuLi4oY3VzdG9tPy5wcmVDb21tYW5kcyA/PyBbXSksXG4gICAgLi4uKHBsdWdpbi5jb21tYW5kcz8ubGVuZ3RoID8gcGx1Z2luLmNvbW1hbmRzIDogW10pLFxuICAgIC4uLihjdXN0b20/LnBvc3RDb21tYW5kcyA/PyBbXSksXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsQ29tbWFuZHM6IFtcbiAgICAgIEJPT1RTVFJBUF9DTUQsXG4gICAgICAuLi4oY3VzdG9tPy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgLi4uKGN1c3RvbT8ucG9zdEluc3RhbGxDb21tYW5kcyA/PyBbXSksXG4gICAgXSxcbiAgICBjb21tYW5kczogW0JPT1RTVFJBUF9DTUQsIC4uLndyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvcih1c2VyQ29tbWFuZHMsIGZhaWx1cmVCZWhhdmlvcildLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBwbGFpbiBlbnYgcmVjb3JkIHRvIENvZGVCdWlsZCdzIGVudmlyb25tZW50VmFyaWFibGVzIGZvcm1hdCAoUExBSU5URVhUKS5cbiAqL1xuZnVuY3Rpb24gdG9Db2RlQnVpbGRFbnZWYXJzKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZW52KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB7IHZhbHVlIH1dKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBTRUNSRVRTX01BTkFHRVItdHlwZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBwbHVnaW4gc2VjcmV0IGRlY2xhcmF0aW9ucy5cbiAqIFVzZXMgbmFtaW5nIGNvbnZlbnRpb246IHBpcGVsaW5lLWJ1aWxkZXIve29yZ0lkfS97c2VjcmV0TmFtZX1cbiAqIEVhY2ggb3JnIG1hbmFnZXMgdGhlc2Ugc2VjcmV0cyBpbiB0aGVpciBvd24gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuY29uc3QgVkFMSURfU0VDUkVUX05BTUUgPSAvXlthLXpBLVowLTkvXys9LkAtXSskLztcblxuZnVuY3Rpb24gdG9TZWNyZXRFbnZWYXJzKFxuICBzZWNyZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcmVxdWlyZWQ6IGJvb2xlYW4gfT4sXG4gIG9yZ0lkOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmc7IHR5cGU6IEJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHNlY3JldHMubWFwKCh7IG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3Qgc2VjcmV0UGF0aCA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgbmFtZSk7XG4gICAgICBpZiAoIVZBTElEX1NFQ1JFVF9OQU1FLnRlc3Qoc2VjcmV0UGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgcGF0aCBcIiR7c2VjcmV0UGF0aH1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXJgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogc2VjcmV0UGF0aCxcbiAgICAgICAgICB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLlNFQ1JFVFNfTUFOQUdFUixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ29kZUJ1aWxkIHN0ZXAgb3IgU2hlbGwgc3RlcCBiYXNlZCBvbiBwbHVnaW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBNZXRhZGF0YSBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gU3RlcC1sZXZlbCBtZXRhZGF0YSAoZnJvbSBvcHRpb25zLm1ldGFkYXRhKVxuICogICAyLiBQbHVnaW4gbWV0YWRhdGEgKGZyb20gcGx1Z2luLm1ldGFkYXRhIGluIGRhdGFiYXNlKVxuICpcbiAqIEVudmlyb25tZW50IG1lcmdlIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICAxLiBQbHVnaW4gZW52IHZhcnMgKGZyb20gcGx1Z2luLmVudilcbiAqICAgMi4gQ3VzdG9tIGVudiB2YXJzIChmcm9tIG9wdGlvbnMuZW52KVxuICogICAzLiBXT1JLRElSIGZyb20gbWVyZ2VkIG1ldGFkYXRhXG4gKlxuICogQ0RLIHByb3Agc3ByZWFkIG9yZGVyIChsYXN0IHdpbnMpOlxuICogICBwcm9ncmFtbWF0aWMgZGVmYXVsdHMgKGlucHV0LCBjb21tYW5kcywgZW52LCBuZXR3b3JrKSDihpIgbWV0YWRhdGEgb3ZlcnJpZGVzXG4gKlxuICogVGhpcyBtZWFucyBtZXRhZGF0YSBrZXlzIGxpa2UgYGF3czpjZGs6cGlwZWxpbmVzOmNvZGVidWlsZHN0ZXA6Y29tbWFuZHNgXG4gKiB3aWxsIG92ZXJyaWRlIHRoZSBwbHVnaW4tZGVyaXZlZCBjb21tYW5kcyB3aGVuIGV4cGxpY2l0bHkgc2V0LlxuICovXG4vKipcbiAqIFJlc29sdmUgdGhlIENvZGVCdWlsZCBpbWFnZSB0byB1c2UgZm9yIGEgcGx1Z2luLlxuICpcbiAqIFN0cmF0ZWd5OlxuICogICAxLiBJZiB0aGUgcGx1Z2luIHNldHMgYGF3czpjZGs6Y29kZWJ1aWxkOmJ1aWxkZW52aXJvbm1lbnQ6YnVpbGRJbWFnZWBcbiAqICAgICAgZXhwbGljaXRseSBpbiBtZXRhZGF0YSwgdGhlIG1ldGFkYXRhLWJ1aWxkZXIgcGFzc3Rocm91Z2ggaGFuZGxlcyBpdFxuICogICAgICAodmlhIGBtZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnRgKS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zXG4gKiAgICAgIGB1bmRlZmluZWRgIGFuZCB0aGUgbWV0YWRhdGEgd2lucy5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiB0aGUgcGx1Z2luIGhhcyBhIGBuYW1lYCtgdmVyc2lvbmAgQU5EIHRoZSByZWdpc3RyeVxuICogICAgICBjb25maWcgaXMgcG9wdWxhdGVkLCBidWlsZCBhIGBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KClgXG4gKiAgICAgIGltYWdlIHBvaW50aW5nIGF0IGA8cmVnaXN0cnktaG9zdD46PHBvcnQ+Lzxucz4vPG5hbWU+Ojx2ZXJzaW9uPmBcbiAqICAgICAgd2hlcmUgYDxucz5gIGlzIGBzeXN0ZW1gIG9yIGBvcmctPG9yZ0lkPmAuIENvZGVCdWlsZCBhdXRoZW50aWNhdGVzIGJ5XG4gKiAgICAgIHNlbmRpbmcgdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggdG9cbiAqICAgICAgYHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5YCdzIGAvdG9rZW5gIGVuZHBvaW50OyB0aGUgSldUIGluIGBwYXNzd29yZGBcbiAqICAgICAgcmVzb2x2ZXMgdG8gYSByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZy5cbiAqICAgMy4gSWYgYG1ldGFkYXRhX29ubHlgLCByZXR1cm4gYHVuZGVmaW5lZGAgc28gQ29kZUJ1aWxkIHVzZXMgaXRzIGRlZmF1bHRcbiAqICAgICAgKGBzdGFuZGFyZDo3LjBgKS5cbiAqXG4gKiBgc2NvcGVgIGFuZCBgb3JnSWRgIGFyZSByZXF1aXJlZDogdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGlzIG5hbWVkXG4gKiBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCwgYW5kIGBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMigpYFxuICogbmVlZHMgYSBDb25zdHJ1Y3QgdG8gYW5jaG9yIHRoZSBpbXBvcnRlZCBzZWNyZXQgdG8uXG4gKi9cbi8qKlxuICogSW4tY2x1c3RlciAvIGxvY2FsIHJlZ2lzdHJ5IGhvc3RuYW1lcyB0aGF0IEFXUyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKVxuICogY2Fubm90IHJlc29sdmUuIEJha2luZyBvbmUgb2YgdGhlc2UgaW50byBhIENvZGVCdWlsZCBpbWFnZSBVUkkgZ3VhcmFudGVlcyBhXG4gKiBgQlVJTERfQ09OVEFJTkVSX1VOQUJMRV9UT19QVUxMX0lNQUdFYCBmYWlsdXJlIGF0IGJ1aWxkIHRpbWUsIHNvIHdlIGZhaWwgdGhlXG4gKiBzeW50aCBmYXN0IGluc3RlYWQg4oCUIHdpdGggYSBtZXNzYWdlIHRoYXQgc2F5cyBob3cgdG8gZml4IGl0LlxuICovXG5jb25zdCBVTlJFQUNIQUJMRV9QVUxMX0hPU1RTID0gbmV3IFNldChbJ3JlZ2lzdHJ5JywgJ2xvY2FsaG9zdCcsICcxMjcuMC4wLjEnLCAnOjoxJywgJzAuMC4wLjAnXSk7XG5cbi8qKiBLdWJlcm5ldGVzIC8gbUROUyBzdWZmaXhlcyB0aGF0IG9ubHkgcmVzb2x2ZSBpbnNpZGUgdGhlIGNsdXN0ZXIvTEFOLiAqL1xuY29uc3QgVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUyA9IFsnLnN2YycsICcuc3ZjLmNsdXN0ZXIubG9jYWwnLCAnLmxvY2FsJ107XG5cbi8qKlxuICogUmVkdWNlIGEgcmVnaXN0cnkgaG9zdCB2YWx1ZSB0byBpdHMgYmFyZSBob3N0bmFtZSBmb3IgdGhlIHJlYWNoYWJpbGl0eSBjaGVjazpcbiAqIHN0cmlwIElQdjYgYnJhY2tldHMgYW5kIGFueSBgOnBvcnRgIHN1ZmZpeCAoYW4gb3BlcmF0b3IgbWF5IHB1dCBob3N0K3BvcnQgaW5cbiAqIG9uZSBmaWVsZCksIHNvIGByZWdpc3RyeTo1MDAwYCAvIGBbOjoxXTo1MDAwYCBhcmUgc3RpbGwgcmVjb2duaXplZC5cbiAqL1xuZnVuY3Rpb24gYmFyZUhvc3RuYW1lKHJhd0hvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBoID0gcmF3SG9zdC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGguc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgY29uc3QgZW5kID0gaC5pbmRleE9mKCddJyk7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHJldHVybiBoLnNsaWNlKDEsIGVuZCk7IC8vIFs6OjFdOjUwMDAgLT4gOjoxXG4gIH1cbiAgLy8gU3RyaXAgYSB0cmFpbGluZyA6cG9ydCBvbmx5IGZvciBub24tSVB2NiB2YWx1ZXMgKElQdjYgY29udGFpbnMgJzo6JyBvciA+MSAnOicpLlxuICBpZiAoaC5pbmNsdWRlcygnOicpICYmIChoLm1hdGNoKC86L2cpPy5sZW5ndGggPz8gMCkgPT09IDEpIGggPSBoLnNwbGl0KCc6JylbMF07XG4gIHJldHVybiBoO1xufVxuXG4vKiogVHJ1ZSB3aGVuIENvZGVCdWlsZCAob3V0LW9mLWNsdXN0ZXIpIGNvdWxkIG5vdCByZXNvbHZlIHRoaXMgcmVnaXN0cnkgaG9zdC4gKi9cbmZ1bmN0aW9uIGlzVW5yZWFjaGFibGVQdWxsSG9zdChyYXdIb3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgaCA9IGJhcmVIb3N0bmFtZShyYXdIb3N0KTtcbiAgaWYgKGggPT09ICcnKSByZXR1cm4gdHJ1ZTsgLy8gbm8gaG9zdCDihpIgbWFsZm9ybWVkIFVSSVxuICBpZiAoVU5SRUFDSEFCTEVfUFVMTF9IT1NUUy5oYXMoaCkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gVU5SRUFDSEFCTEVfSE9TVF9TVUZGSVhFUy5zb21lKChzKSA9PiBoLmVuZHNXaXRoKHMpKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHRlcm5hbCAob3V0LW9mLWNsdXN0ZXIpIHJlZ2lzdHJ5IHB1bGwgaG9zdCArIGA6cG9ydGAgc3VmZml4IGZvclxuICogYSBDb2RlQnVpbGQgaW1hZ2UgVVJJLCBhbmQgZmFpbCBmYXN0IGlmIGl0IHJlc29sdmVkIHRvIGFuIGluLWNsdXN0ZXIvbG9jYWxcbiAqIGRlZmF1bHQgdGhhdCBDb2RlQnVpbGQgY2FuJ3QgcmVhY2guXG4gKlxuICogUHJlZmVycyBgcHVsbEhvc3RgL2BwdWxsUG9ydGAgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgZGVwbG95cy4gcGlwZWxpbmUtbWFuYWdlciBiYWtlc1xuICogdGhlIHJpZ2h0IHB1bGwgaG9zdCBpbnRvIHRoZSBzeW50aCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHBsYXRmb3JtIFVSTCBpdFxuICogZGVwbG95cyBhZ2FpbnN0IChgcHJvcHMucmVnaXN0cnlgKTsgdGhpcyBndWFyZCBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIG5laXRoZXJcbiAqIHRoYXQgbm9yIGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgL2BQTEFURk9STV9CQVNFX1VSTGAgd2FzIHN1cHBsaWVkLlxuICpcbiAqIEVzY2FwZSBoYXRjaDogYEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZWAgKGUuZy4gQ29kZUJ1aWxkIGluIGEgVlBDIHdob3NlXG4gKiBwcml2YXRlIEROUyBnZW51aW5lbHkgcmVzb2x2ZXMgdGhlIGluLWNsdXN0ZXIgbmFtZSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQoXG4gIHJlZ2lzdHJ5OiB7IGhvc3Q/OiBzdHJpbmc7IHBvcnQ/OiBudW1iZXI7IHB1bGxIb3N0Pzogc3RyaW5nOyBwdWxsUG9ydD86IG51bWJlciB9LFxuKTogeyBob3N0OiBzdHJpbmc7IHBvcnRQYXJ0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGhvc3QgPSByZWdpc3RyeS5wdWxsSG9zdCB8fCByZWdpc3RyeS5ob3N0IHx8ICcnO1xuICBjb25zdCBwb3J0ID0gcmVnaXN0cnkucHVsbFBvcnQgPz8gcmVnaXN0cnkucG9ydDtcbiAgaWYgKHByb2Nlc3MuZW52LkFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1QgIT09ICd0cnVlJyAmJiBpc1VucmVhY2hhYmxlUHVsbEhvc3QoaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0cnkgcHVsbCBob3N0IHJlc29sdmVkIHRvICcke2hvc3R9Jywgd2hpY2ggQVdTIENvZGVCdWlsZCBjYW5ub3QgcmVhY2gg4oCUIGl0IGlzIHRoZSBgICtcbiAgICAgICdpbi1jbHVzdGVyL2xvY2FsIGRlZmF1bHQuIFRoZSBzeW50aGVzaXplZCBwaXBlbGluZSB3b3VsZCBmYWlsIGF0IGJ1aWxkIHRpbWUgd2l0aCAnICtcbiAgICAgICdCVUlMRF9DT05UQUlORVJfVU5BQkxFX1RPX1BVTExfSU1BR0UuIFNldCB0aGUgcGxhdGZvcm1cXCdzIHB1YmxpYyBob3N0IHZpYSAnICtcbiAgICAgICdJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1Qgb3IgUExBVEZPUk1fQkFTRV9VUkwgYmVmb3JlIGRlcGxveWluZyDigJQgcGlwZWxpbmUtbWFuYWdlciBiYWtlcyAnICtcbiAgICAgICd0aGlzIGluIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIGl0IGRlcGxveXMgYWdhaW5zdC4gJyArXG4gICAgICAnU2V0IEFMTE9XX0lOQ0xVU1RFUl9QVUxMX0hPU1Q9dHJ1ZSB0byBieXBhc3MgKGluLVZQQyBwcml2YXRlIEROUykuJyxcbiAgICApO1xuICB9XG4gIGNvbnN0IHBvcnRQYXJ0ID0gcG9ydCAmJiBwb3J0ICE9PSA4MCAmJiBwb3J0ICE9PSA0NDMgPyBgOiR7cG9ydH1gIDogJyc7XG4gIHJldHVybiB7IGhvc3QsIHBvcnRQYXJ0IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGU6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCwgcGx1Z2luOiBQbHVnaW4sIG9yZ0lkPzogc3RyaW5nKTogSUJ1aWxkSW1hZ2UgfCB1bmRlZmluZWQge1xuICAvLyBgbWV0YWRhdGFfb25seWAgcGx1Z2lucyBsZWdpdGltYXRlbHkgaGF2ZSBubyBpbWFnZSDigJQgdGhlaXIgd29yayBydW5zXG4gIC8vIGluIHRoZSBkZWZhdWx0IENvZGVCdWlsZCBpbWFnZS4gUXVpZXQgc2tpcC5cbiAgaWYgKHBsdWdpbi5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBidWlsZF9pbWFnZSAvIHByZWJ1aWx0IHBsdWdpbnMgbXVzdCBoYXZlIG5hbWUgKyB2ZXJzaW9uIChEQiBjb25zdHJhaW50XG4gIC8vIG1ha2VzIGJvdGggTk9UIE5VTEwpLiBEZWZlbnNpdmUgY2hlY2sgaW4gY2FzZSBhIG1hbGZvcm1lZCByb3cgc2xpcHMgaW4uXG4gIGlmICghcGx1Z2luLm5hbWUgfHwgIXBsdWdpbi52ZXJzaW9uKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYnVpbGRUeXBlPSR7cGx1Z2luLmJ1aWxkVHlwZX0gYnV0IG1pc3NpbmcgbmFtZS92ZXJzaW9uIOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBydW4gb24gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAgYW5kIHdvblxcJ3QgaGF2ZSB0aGUgcGx1Z2luXFwncyBiYWtlZCB0b29scy4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCByZWdpc3RyeTtcbiAgdHJ5IHtcbiAgICByZWdpc3RyeSA9IENvbmZpZy5nZXQoJ3JlZ2lzdHJ5Jyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIENvbmZpZyBuYW1lc3BhY2Ugbm90IGxvYWRlZCAoZS5nLiwgdW5pdCB0ZXN0cyB3aXRob3V0IGZ1bGwgY29uZmlnKS5cbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfToke3BsdWdpbi52ZXJzaW9ufVwiIG5lZWRzIHRoZSByZWdpc3RyeSBjb25maWcgYnV0IGl0J3Mgbm90IGxvYWRlZCDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6OC4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCArIElNQUdFX1JFR0lTVFJZX1BPUlQgaW4gcGlwZWxpbmUtbWFuYWdlclxcJ3MgZW52aXJvbm1lbnQuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXJlZ2lzdHJ5Py5ob3N0KSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyBJTUFHRV9SRUdJU1RSWV9IT1NUIGJ1dCBpdCdzIGVtcHR5IOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBmYWxsIGJhY2sgdG8gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAuICcgK1xuICAgICAgJ1NldCBJTUFHRV9SRUdJU1RSWV9IT1NUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50IHRvIHVzZSB0aGUgcGx1Z2luIGltYWdlLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2NvcGUpIHtcbiAgICBsb2cud2FybihgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBpbWFnZSByZXNvbHV0aW9uIHNraXBwZWQ6IG5vIGNvbnN0cnVjdCBzY29wZSBwcm92aWRlZGApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBQZXItb3JnIGF1dGggcmVxdWlyZXMgb3JnSWQg4oCUIHRoZSBTZWNyZXQgaXMgbmFtZWQgcGVyIG9yZy5cbiAgaWYgKCFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBvcmdJZCBpcyByZXF1aXJlZCB0byBgICtcbiAgICAgICdyZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCB1c2VkIGZvciBDb2RlQnVpbGQgQmFzaWMgYXV0aC4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENvbXBvc2UgdGhlIGltYWdlIFVSSS4gTmFtZXNwYWNlIGJ5IG93bmVyc2hpcDpcbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgdGhlIHN5c3RlbSBvcmcg4oaSIGBzeXN0ZW0vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwgb24gYHN5c3RlbS8qYFxuICAvLyAgICAgdG8gYW55IGF1dGhlbnRpY2F0ZWQgb3JnIHVzZXIgKHJlYWQtb25seSBjYXRhbG9nIG9mIHNoYXJlZCBwbHVnaW5zKS5cbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgYSB0ZW5hbnQgb3JnIOKGkiBgb3JnLTxvcmdJZD4vPG5hbWU+Ojx2ZXJzaW9uPmAuXG4gIC8vICAgICBUaGUgdG9rZW4gc2VydmljZSBncmFudHMgcHVsbCxwdXNoIG9ubHkgdG8gbWVtYmVycyBvZiB0aGF0IG9yZy5cbiAgLy8gVGhlIHBsdWdpbidzIG93biBgb3JnSWRgIChub3QgdGhlIGNhbGxlcidzKSBkZWNpZGVzIHRoZSBuYW1lc3BhY2Ug4oCUXG4gIC8vIHRlbmFudCBwaXBlbGluZXMgcHVsbGluZyBzaGFyZWQgc3lzdGVtIHBsdWdpbnMgc3RpbGwgZ2V0IHRoZSBgc3lzdGVtL2BcbiAgLy8gcGF0aCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW1hZ2UgYWN0dWFsbHkgbGl2ZXMuXG4gIC8vIFVzZSB0aGUgZXh0ZXJuYWwgcHVsbCBob3N0L3BvcnQ6IHRoaXMgaW1hZ2UgVVJJIGlzIGNvbnN1bWVkIGJ5IEFXU1xuICAvLyBDb2RlQnVpbGQgKG91dC1vZi1jbHVzdGVyKSwgd2hpY2ggY2FuJ3QgcmVzb2x2ZSB0aGUgaW4tY2x1c3RlclxuICAvLyBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQLiBGYWxsIGJhY2sgdG8gYGhvc3RgL2Bwb3J0YCBmb3Igc2luZ2xlLWhvc3QgL1xuICAvLyBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cyB3aGVyZSBubyBzZXBhcmF0ZSBwdWxsIGhvc3QgaXMgY29uZmlndXJlZC5cbiAgY29uc3QgeyBob3N0OiBwdWxsSG9zdCwgcG9ydFBhcnQgfSA9IHJlc29sdmVFeHRlcm5hbFB1bGxUYXJnZXQocmVnaXN0cnkpO1xuICBjb25zdCBTWVNURU1fT1JHX0lEID0gJ3N5c3RlbSc7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHBsdWdpbi5vcmdJZCA9PT0gU1lTVEVNX09SR19JRFxuICAgID8gJ3N5c3RlbSdcbiAgICA6IGBvcmctJHtwbHVnaW4ub3JnSWR9YDtcbiAgY29uc3QgaW1hZ2VVcmkgPSBgJHtwdWxsSG9zdH0ke3BvcnRQYXJ0fS8ke25hbWVzcGFjZX0vJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1gO1xuXG4gIC8vIENvZGVCdWlsZCByZWFkcyBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBhbmQgc2VuZHMgaXRzXG4gIC8vIGB1c2VybmFtZWAvYHBhc3N3b3JkYCBmaWVsZHMgYXMgSFRUUCBCYXNpYyB0byB0aGUgcmVnaXN0cnkuIFRoZVxuICAvLyByZWdpc3RyeSBjaGFsbGVuZ2VzIHdpdGggYSBCZWFyZXIgcmVhbG0gcG9pbnRpbmcgYXRcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIERvY2tlciBjbGllbnQgZm9yd2FyZHNcbiAgLy8gdGhvc2UgY3JlZHMsIHRoZSBwYXNzd29yZCBpcyB2ZXJpZmllZCBhcyBhIHBsYXRmb3JtIEpXVCwgYW5kIGEgcmVnaXN0cnlcbiAgLy8gdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcgaXMgaXNzdWVkLlxuICAvL1xuICAvLyBTYW1lIFNlY3JldCBpcyByZWFkIGJ5IHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSAodmlhIHRoZSBgcGFzc3dvcmRgXG4gIC8vIGZpZWxkKSDigJQgb25lIFNlY3JldCBzZXJ2ZXMgYm90aCBmbG93cy5cbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsICdwbGF0Zm9ybScpO1xuICAvLyBDREsgY29uc3RydWN0IElEcyBhbGxvdyBvbmx5IFtBLVphLXowLTlfLV07IHNhbml0aXplIHRoZSBzZWNyZXQgbmFtZS5cbiAgY29uc3Qgc2VjcmV0Q29uc3RydWN0SWQgPSBgUGxhdGZvcm1DcmVkc18ke3NlY3JldE5hbWUucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJ18nKX1gO1xuICBjb25zdCBjcmVkZW50aWFsc1NlY3JldCA9IChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChzZWNyZXRDb25zdHJ1Y3RJZCkgYXMgU2VjcmV0IHwgdW5kZWZpbmVkKVxuICAgID8/IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHN0YWNrLCBzZWNyZXRDb25zdHJ1Y3RJZCwgc2VjcmV0TmFtZSk7XG5cbiAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoaW1hZ2VVcmksIHtcbiAgICBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzOiBjcmVkZW50aWFsc1NlY3JldCxcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZmFsbGJhY2sgQ29kZUJ1aWxkIGltYWdlIGZvciBzdGVwcyB3aXRob3V0IGEgcGx1Z2luLWJha2VkIG9uZS5cbiAqXG4gKiBSZWFkcyBgYXdzLmNvZGVCdWlsZC5kZWZhdWx0SW1hZ2VgIChlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApLlxuICogRGVmYXVsdDogYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgIOKAlCB0aGUgbG9jYWwgdGFnIGJ1aWx0IGJ5XG4gKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAuXG4gKlxuICogLSBBV1MgY3VyYXRlZCBpbWFnZSAoYGF3cy9jb2RlYnVpbGQvKmApOiB1c2UgdGhlIG1hdGNoaW5nIGBMaW51eEJ1aWxkSW1hZ2VgXG4gKiAgIGNvbnN0YW50IHNvIENESyBlbWl0cyBgaW1hZ2VQdWxsQ3JlZGVudGlhbHNUeXBlOiBDT0RFQlVJTERgLiBVc2luZ1xuICogICBgZnJvbURvY2tlclJlZ2lzdHJ5KClgIGhlcmUgd291bGQgc2V0IFNFUlZJQ0VfUk9MRSBjcmVkZW50aWFscywgd2hpY2hcbiAqICAgQ0ZOIHJlamVjdHMgd2l0aCBcImNhbm5vdCB1c2UgYSBDb2RlQnVpbGQgY3VyYXRlZCBpbWFnZSB3aXRoXG4gKiAgIGltYWdlUHVsbENyZWRlbnRpYWxzVHlwZSBTRVJWSUNFX1JPTEVcIi5cbiAqIC0gQmFyZSB0YWcgKG5vIGAvYCk6IGF1dG8tcHJlZml4ZWQgdG9cbiAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAqICAgd2l0aCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgYXMgQmFzaWMgYXV0aCDigJQgc2FtZSBwYXRoXG4gKiAgIGByZXNvbHZlUGx1Z2luSW1hZ2UoKWAgdXNlcyBmb3IgcGx1Z2luIGltYWdlcy4gTmVlZHMgYHNjb3BlYCArIGBvcmdJZGAuXG4gKiAtIEZ1bGx5LXF1YWxpZmllZCByZWdpc3RyeSBVUkkgKGNvbnRhaW5zIGAvYCk6IHVzZWQgYXMtaXMsIG5vIGF1dGggd2lyZWQuXG4gKiAtIE1pc3NpbmcgcmVnaXN0cnkgY29uZmlnIG9yIHNjb3BlL29yZ0lkIOKGkiBmYWxscyBiYWNrIHRvXG4gKiAgIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjguMGAgKGFzIGEgQ1VSQVRFRCBpbWFnZSwgc2VlIGFib3ZlKSwgd2l0aCBhXG4gKiAgIHdhcm5pbmcgc28gc3ludGggZGVncmFkZXMgZ3JhY2VmdWxseSBvbiBwYXJ0aWFsbHkgY29uZmlndXJlZCBlbnZzLlxuICovXG5jb25zdCBTVEFOREFSRF84XzAgPSAnYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjAnO1xuXG4vKipcbiAqIGF3cy1jZGstbGliIDIuMjU4IGhhcyBubyBgTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzhfMGAgc3RhdGljIHlldCwgc28gdGhlXG4gKiBjdXJhdGVkIDguMCBmYWxsYmFjayByZXNvbHZlcyB2aWEgYGZyb21Db2RlQnVpbGRJbWFnZUlkYCAoc3RpbGwgQ09ERUJVSUxEIGNyZWRzKS5cbiAqL1xuY29uc3QgZmFsbGJhY2tCdWlsZEltYWdlID0gKCk6IElCdWlsZEltYWdlID0+IExpbnV4QnVpbGRJbWFnZS5mcm9tQ29kZUJ1aWxkSW1hZ2VJZChTVEFOREFSRF84XzApO1xuXG4vKipcbiAqIE1hcCBBV1MgY3VyYXRlZCBgYXdzL2NvZGVidWlsZC8qYCBpbWFnZSBzdHJpbmdzIHRvIHRoZSBtYXRjaGluZ1xuICogYExpbnV4QnVpbGRJbWFnZWAgc3RhdGljLiBFeHRlbmQgd2hlbiBuZXdlciBzdGFuZGFyZCBpbWFnZXMgc2hpcC5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIG5vbi1jdXJhdGVkIHN0cmluZ3Mg4oCUIGNhbGxlciBzaG91bGQgdXNlXG4gKiBgZnJvbURvY2tlclJlZ2lzdHJ5KClgIGZvciB0aG9zZS5cbiAqL1xuZnVuY3Rpb24gY3VyYXRlZExpbnV4QnVpbGRJbWFnZShpbWFnZUlkOiBzdHJpbmcpOiBJQnVpbGRJbWFnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaW1hZ2VJZC5zdGFydHNXaXRoKCdhd3MvY29kZWJ1aWxkLycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGltYWdlSWQpIHtcbiAgICBjYXNlICdhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjYuMCc6IHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfNl8wO1xuICAgIGNhc2UgJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6NS4wJzogcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF81XzA7XG4gICAgLy8gTmV3ZXIgY29kZW5hbWVkIGltYWdlcyByb3V0ZSB0aHJvdWdoIGZyb21Db2RlQnVpbGRJbWFnZUlkLCB3aGljaFxuICAgIC8vIENESyBhbHNvIG1hcmtzIGFzIENPREVCVUlMRCBjcmVkZW50aWFscyAoY3VyYXRlZCkuXG4gICAgZGVmYXVsdDogcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tQ29kZUJ1aWxkSW1hZ2VJZChpbWFnZUlkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHNjb3BlPzogQ29uc3RydWN0LCBvcmdJZD86IHN0cmluZyk6IElCdWlsZEltYWdlIHtcbiAgbGV0IGNvbmZpZ3VyZWQ6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25maWd1cmVkID0gQ29uZmlnLmdldCgnYXdzJykuY29kZUJ1aWxkLmRlZmF1bHRJbWFnZTtcbiAgfSBjYXRjaCB7XG4gICAgY29uZmlndXJlZCA9IFNUQU5EQVJEXzhfMDtcbiAgfVxuXG4gIC8vIEFXUyBjdXJhdGVkIGltYWdlIOKGkiBDT0RFQlVJTEQgY3JlZGVudGlhbHMuIE1VU1QgZ28gdGhyb3VnaCB0aGVcbiAgLy8gTGludXhCdWlsZEltYWdlIGNvbnN0YW50cywgbm90IGZyb21Eb2NrZXJSZWdpc3RyeSgpLlxuICBjb25zdCBjdXJhdGVkID0gY3VyYXRlZExpbnV4QnVpbGRJbWFnZShjb25maWd1cmVkKTtcbiAgaWYgKGN1cmF0ZWQpIHJldHVybiBjdXJhdGVkO1xuXG4gIC8vIEZ1bGx5LXF1YWxpZmllZCBVUkkg4oCUIG9wZXJhdG9yIG93bnMgaXQuIE5vIHJlZ2lzdHJ5L1NlY3JldCB3aXJpbmcuXG4gIGlmIChjb25maWd1cmVkLmluY2x1ZGVzKCcvJykpIHtcbiAgICByZXR1cm4gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShjb25maWd1cmVkKTtcbiAgfVxuXG4gIC8vIEJhcmUgdGFnIOKGkiBhdXRvLXByZWZpeCB3aXRoIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSwgbWlycm9yaW5nXG4gIC8vIHJlc29sdmVQbHVnaW5JbWFnZSgpLiBCYWlsIHRvIHRoZSBjdXJhdGVkIHN0YW5kYXJkOjguMCBmYWxsYmFja1xuICAvLyAod2l0aCBhIHdhcm5pbmcpIGF0IGVhY2ggbWlzc2luZyBwcmVyZXF1aXNpdGUgc28gc3ludGggZGVncmFkZXNcbiAgLy8gZ3JhY2VmdWxseSBvbiBwYXJ0aWFsbHkgY29uZmlndXJlZCBlbnZpcm9ubWVudHMgaW5zdGVhZCBvZiBmYWlsaW5nLlxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRT0nJHtjb25maWd1cmVkfScgaXMgYSBiYXJlIHRhZyBidXQgcmVnaXN0cnkgY29uZmlnIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgYGZhbGxpbmcgYmFjayB0byAke1NUQU5EQVJEXzhfMH0uIFNldCBJTUFHRV9SRUdJU1RSWV9IT1NUICsgSU1BR0VfUkVHSVNUUllfUE9SVC5gLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG4gIGlmICghcmVnaXN0cnk/Lmhvc3QpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRT0nJHtjb25maWd1cmVkfScgaXMgYSBiYXJlIHRhZyBidXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpcyBlbXB0eSDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfOF8wfS5gLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG4gIGlmICghc2NvcGUgfHwgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0U9JyR7Y29uZmlndXJlZH0nIG5lZWRzIHNjb3BlK29yZ0lkIGZvciBTZWNyZXQgYXV0aCDigJQgYCArXG4gICAgICBgZmFsbGluZyBiYWNrIHRvICR7U1RBTkRBUkRfOF8wfS4gKENhbGxlciBkaWQgbm90IHN1cHBseSB0aGVtLilgLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrQnVpbGRJbWFnZSgpO1xuICB9XG5cbiAgLy8gVXNlIHRoZSBleHRlcm5hbCBwdWxsIGhvc3QvcG9ydCAobm90IHRoZSBpbi1jbHVzdGVyIGhvc3QpIOKAlCB0aGlzIFVSSSBpc1xuICAvLyBjb25zdW1lZCBieSBBV1MgQ29kZUJ1aWxkLCB3aGljaCBjYW4ndCByZXNvbHZlIHRoZSBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQLlxuICBjb25zdCB7IGhvc3Q6IHB1bGxIb3N0LCBwb3J0UGFydCB9ID0gcmVzb2x2ZUV4dGVybmFsUHVsbFRhcmdldChyZWdpc3RyeSk7XG4gIGNvbnN0IGltYWdlVXJpID0gYCR7cHVsbEhvc3R9JHtwb3J0UGFydH0vbGlicmFyeS8ke2NvbmZpZ3VyZWR9YDtcblxuICAvLyBTYW1lIFNlY3JldCBhcyByZXNvbHZlUGx1Z2luSW1hZ2Ug4oCUIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0LCBDb2RlQnVpbGRcbiAgLy8gc2VuZHMgaXQgYXMgQmFzaWMgYXV0aCwgaW1hZ2UtcmVnaXN0cnkgdmVyaWZpZXMgdGhlIEpXVCBpbiBgcGFzc3dvcmRgLlxuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgJ3BsYXRmb3JtJyk7XG4gIGNvbnN0IHNlY3JldENvbnN0cnVjdElkID0gYFBsYXRmb3JtQ3JlZHNfJHtzZWNyZXROYW1lLnJlcGxhY2UoL1teQS1aYS16MC05Xy1dL2csICdfJyl9YDtcbiAgY29uc3QgY3JlZGVudGlhbHNTZWNyZXQgPSAoc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoc2VjcmV0Q29uc3RydWN0SWQpIGFzIFNlY3JldCB8IHVuZGVmaW5lZClcbiAgICA/PyBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihzdGFjaywgc2VjcmV0Q29uc3RydWN0SWQsIHNlY3JldE5hbWUpO1xuXG4gIHJldHVybiBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KGltYWdlVXJpLCB7XG4gICAgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsczogY3JlZGVudGlhbHNTZWNyZXQsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29kZUJ1aWxkU3RlcChvcHRpb25zOiBDb2RlQnVpbGRTdGVwT3B0aW9ucyk6IFNoZWxsU3RlcCB8IENvZGVCdWlsZFN0ZXAgfCBNYW51YWxBcHByb3ZhbFN0ZXAge1xuICBjb25zdCB7XG4gICAgaWQsIGlucHV0LCBtZXRhZGF0YSwgbmV0d29yaywgc2NvcGUsXG4gICAgcHJlSW5zdGFsbENvbW1hbmRzLCBwb3N0SW5zdGFsbENvbW1hbmRzLCBwcmVDb21tYW5kcywgcG9zdENvbW1hbmRzLFxuICAgIGVudjogY3VzdG9tRW52LCBhZGRpdGlvbmFsSW5wdXRzLCB0aW1lb3V0LCBmYWlsdXJlQmVoYXZpb3IsXG4gICAgYXJ0aWZhY3RNYW5hZ2VyLCBzdGFnZU5hbWUsIHN0YWdlQWxpYXMsIHBsdWdpbkFsaWFzLCBvcmdJZCwgcGlwZWxpbmVTY29wZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gUmVzb2x2ZSB7eyAuLi4gfX0gdGVtcGxhdGVzIGluIHBsdWdpbiBzcGVjIGZpZWxkcyBhZ2FpbnN0IHRoZSBwaXBlbGluZSBzY29wZS5cbiAgLy8gRXZlcnkgY2FsbCBnb2VzIHRocm91Z2ggdGhlIHJlc29sdmVyIOKAlCBwbHVnaW5zIHdpdGhvdXQgdGVtcGxhdGUgdG9rZW5zIGFyZVxuICAvLyBhIG5vLW9wIGZhc3QgcGF0aCBpbnNpZGUgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcygpLlxuICBjb25zdCBwbHVnaW4gPSByZXNvbHZlUGx1Z2luVGVtcGxhdGVzKG9wdGlvbnMucGx1Z2luLCBwaXBlbGluZVNjb3BlKTtcblxuICBjb25zdCBtZXJnZWQgPSBtZXJnZShtZXRhZGF0YSA/PyB7fSwgcGx1Z2luLm1ldGFkYXRhID8/IHt9KTtcblxuICAvLyBNYW51YWxBcHByb3ZhbFN0ZXA6IG5vIGNvbW1hbmRzLCBlbnYsIGNvbXB1dGUsIG9yIG5ldHdvcmsg4oCUIGp1c3QgaWQgKyBvcHRpb25hbCBjb21tZW50XG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5NQU5VQUxfQVBQUk9WQUxfU1RFUCkge1xuICAgIHJldHVybiBuZXcgTWFudWFsQXBwcm92YWxTdGVwKGlkLCB7XG4gICAgICBjb21tZW50OiB0eXBlb2YgbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgPT09ICdzdHJpbmcnID8gbWVyZ2VkLkFQUFJPVkFMX0NPTU1FTlQgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1tDcmVhdGVDb2RlQnVpbGRTdGVwXSBCdWlsZGluZyBzdGVwIHdpdGggbWVyZ2VkIG1ldGFkYXRhJyk7XG5cbiAgLy8gV2FybiBhYm91dCByZXF1aXJlZCBzZWNyZXRzIHdpdGhvdXQgb3JnSWQgKGNhbid0IHJlc29sdmUpXG4gIGNvbnN0IHJlcXVpcmVkU2VjcmV0cyA9IHBsdWdpbi5zZWNyZXRzPy5maWx0ZXIocyA9PiBzLnJlcXVpcmVkKSA/PyBbXTtcbiAgaWYgKHJlcXVpcmVkU2VjcmV0cy5sZW5ndGggPiAwICYmICFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgZGVjbGFyZXMgJHtyZXF1aXJlZFNlY3JldHMubGVuZ3RofSByZXF1aXJlZCBzZWNyZXQocykgYnV0IG5vIG9yZ0lkIGlzIGF2YWlsYWJsZS4gYCArXG4gICAgICBgU2VjcmV0cyB3aWxsIG5vdCBiZSBpbmplY3RlZDogJHtyZXF1aXJlZFNlY3JldHMubWFwKHMgPT4gcy5uYW1lKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgcGx1Z2luIHNlY3JldHMgYXMgU0VDUkVUU19NQU5BR0VSIGVudiB2YXJzIOKAlCBvbmx5IFJFUVVJUkVEIG9uZXMuXG4gIC8vIENvZGVCdWlsZCB0cmVhdHMgYSBTRUNSRVRTX01BTkFHRVIgZW52IHZhciBhcyBNQU5EQVRPUlk6IGl0IGZhaWxzIHRoZSBidWlsZFxuICAvLyBhdCBET1dOTE9BRF9TT1VSQ0UgKFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbjogY2FuJ3QgZmluZCB0aGUgc3BlY2lmaWVkXG4gIC8vIHNlY3JldFwiKSBpZiB0aGUgc2VjcmV0IGlzIGFic2VudC4gQXV0by13aXJpbmcgYW4gT1BUSU9OQUwgc2VjcmV0XG4gIC8vIChgcmVxdWlyZWQ6IGZhbHNlYCwgZS5nLiBOVkRfQVBJX0tFWSAvIFNFTUdSRVBfQVBQX1RPS0VOKSB0aGUgb3BlcmF0b3IgaGFzbid0XG4gIC8vIGNyZWF0ZWQgd291bGQgdGhlcmVmb3JlIGJyZWFrIGV2ZXJ5IGJ1aWxkIOKAlCB0aGUgZXhhY3Qgb3Bwb3NpdGUgb2YgXCJvcHRpb25hbFwiLlxuICAvLyBPcHRpb25hbCBzZWNyZXRzIGFyZSBsZWZ0IGZvciB0aGUgcGx1Z2luIHRvIHJlYWQgb25seSB3aGVyZSB0aGUgb3BlcmF0b3IgaGFzXG4gIC8vIHByb3Zpc2lvbmVkIHRoZW0gKG91dC1vZi1iYW5kIGVudi9zZWNyZXQpLCBub3QgZm9yY2UtaW5qZWN0ZWQgaGVyZS5cbiAgY29uc3Qgc2VjcmV0RW52VmFycyA9IChyZXF1aXJlZFNlY3JldHMubGVuZ3RoICYmIG9yZ0lkKVxuICAgID8gdG9TZWNyZXRFbnZWYXJzKHJlcXVpcmVkU2VjcmV0cywgb3JnSWQpXG4gICAgOiB7fTtcblxuICBjb25zdCBlbnYgPSBidWlsZEVudihwbHVnaW4sIG1lcmdlZCwgY3VzdG9tRW52KTtcblxuICAvLyBDb2RlUGlwZWxpbmUgcmVzb2x2ZWQgdmFyaWFibGVzIOKAlCBtdXN0IGJlIGluIENvZGVCdWlsZFN0ZXAuZW52IChhY3Rpb24tbGV2ZWwpLFxuICAvLyBub3QgYnVpbGRFbnZpcm9ubWVudC5lbnZpcm9ubWVudFZhcmlhYmxlcyAocHJvamVjdC1sZXZlbClcbiAgY29uc3QgYWN0aW9uRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIFBJUEVMSU5FX0VYRUNVVElPTl9JRDogJyN7Y29kZXBpcGVsaW5lLlBpcGVsaW5lRXhlY3V0aW9uSWR9JyxcbiAgfTtcblxuICBjb25zdCBvdXRwdXREaXIgPSBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeTtcbiAgY29uc3QgZW5zdXJlT3V0cHV0RGlyID0gKG91dHB1dERpciAmJiAhb3V0cHV0RGlyLmluY2x1ZGVzKCcqJykpXG4gICAgPyBbYG1rZGlyIC1wIFwiJHtvdXRwdXREaXJ9XCIgJiYgdG91Y2ggXCIke291dHB1dERpcn0vLmdpdGtlZXBcImBdXG4gICAgOiBbXTtcblxuICBjb25zdCB7IGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfSA9IGJ1aWxkQ29tbWFuZHMocGx1Z2luLCB7XG4gICAgcHJlSW5zdGFsbENvbW1hbmRzOiBbLi4uZW5zdXJlT3V0cHV0RGlyLCAuLi4ocHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKV0sXG4gICAgcG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICBwcmVDb21tYW5kcyxcbiAgICBwb3N0Q29tbWFuZHMsXG4gIH0sIGZhaWx1cmVCZWhhdmlvcik7XG5cbiAgY29uc3QgcHJvZ3JhbW1hdGljID0geyBpbnB1dCwgaW5zdGFsbENvbW1hbmRzLCBjb21tYW5kcyB9O1xuXG4gIC8vIFJlc29sdmUgdGhlIHBsdWdpbidzIHJ1bnRpbWUgaW1hZ2UuIENvZGVCdWlsZCBkZWZhdWx0cyB0b1xuICAvLyBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjBgIHdoZW4gbm8gYGJ1aWxkSW1hZ2VgIGlzIHNldCDigJQgdGhhdCdzIHRoZVxuICAvLyBBV1MtbWFuYWdlZCBVYnVudHUgaW1hZ2UgYW5kIERPRVMgTk9UIGhhdmUgYW55IHBsdWdpbi1iYWtlZCB0b29sc1xuICAvLyAocGlwZWxpbmUtbWFuYWdlciwgc255aywgdGVycmFmb3JtLCBldGMuKS4gV2lyaW5nIHRoZSBwbHVnaW4ncyBpbWFnZVxuICAvLyBoZXJlIG1lYW5zIENvZGVCdWlsZCBwdWxscyBmcm9tIG91ciBwcml2YXRlIHJlZ2lzdHJ5IGFuZCB0aGUgdG9vbHNcbiAgLy8gaW5zdGFsbGVkIGluIHRoZSBwbHVnaW4ncyBEb2NrZXJmaWxlIGFyZSBhY3R1YWxseSBhdmFpbGFibGUuXG4gIGNvbnN0IHBsdWdpbkJ1aWxkSW1hZ2UgPSByZXNvbHZlUGx1Z2luSW1hZ2Uoc2NvcGUsIHBsdWdpbiwgb3JnSWQpO1xuXG4gIC8vIFNoZWxsU3RlcCBicmFuY2guXG4gIC8vIFNoZWxsU3RlcCBpdHNlbGYgZG9lc24ndCBhY2NlcHQgYGJ1aWxkRW52aXJvbm1lbnRgL2BidWlsZEltYWdlYC4gQ0RLXG4gIC8vIHBpcGVsaW5lcyB3cmFwcyBTaGVsbFN0ZXBzIGluIGEgZGVmYXVsdCBDb2RlQnVpbGQgYWN0aW9uIHRoYXQgcnVucyBvblxuICAvLyBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjBgIOKAlCB3aGljaCB3b24ndCBoYXZlIHRoZSBwbHVnaW4ncyB0b29scy5cbiAgLy9cbiAgLy8gU28gd2hlbiBhIFNIRUxMX1NURVAgcGx1Z2luIERPRVMgaGF2ZSBhbiBpbWFnZSAoYmVjYXVzZSBpdHMgYXV0aG9yXG4gIC8vIGJha2VkIHRvb2xzIGludG8gYSBEb2NrZXJmaWxlKSwgd2UgUFJPTU9URSBpdCB0byBhIENvZGVCdWlsZFN0ZXAgd2l0aFxuICAvLyB0aGUgcmVzb2x2ZWQgaW1hZ2UuIFRoZSBwbHVnaW4gYXV0aG9yJ3MgaW50ZW50IChcInVzZSBteSBiYWtlZCB0b29sc1wiKVxuICAvLyBpcyBwcmVzZXJ2ZWQgd2l0aG91dCBmb3JjaW5nIHRoZW0gdG8gY2hhbmdlIHBsdWdpblR5cGUuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIHBsdWdpbiBoYXMgbm8gaW1hZ2UgKG9yIHJlZ2lzdHJ5IGlzbid0IGNvbmZpZ3VyZWQpLCB3ZSBrZWVwXG4gIC8vIHRoZSBvcmlnaW5hbCBTaGVsbFN0ZXAg4oCUIGl0J3MgbGlnaHRlciB3ZWlnaHQgYW5kIHRoZSBkZWZhdWx0XG4gIC8vIENvZGVCdWlsZCBpbWFnZSBpcyBmaW5lLlxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuU0hFTExfU1RFUCkge1xuICAgIGlmICghcGx1Z2luQnVpbGRJbWFnZSkge1xuICAgICAgcmV0dXJuIG5ldyBTaGVsbFN0ZXAoaWQsIHtcbiAgICAgICAgLi4ucHJvZ3JhbW1hdGljLFxuICAgICAgICBlbnY6IHsgLi4uZW52LCAuLi5hY3Rpb25FbnYgfSxcbiAgICAgICAgLi4ubWV0YWRhdGFGb3JTaGVsbFN0ZXAobWVyZ2VkKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFtDcmVhdGVDb2RlQnVpbGRTdGVwXSBTSEVMTF9TVEVQIHBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaGFzIGEgcmVnaXN0cnkgaW1hZ2Ug4oCUIHByb21vdGluZyB0byBDb2RlQnVpbGRTdGVwIHNvIHRoZSBwbHVnaW4gaW1hZ2UgaXMgYWN0dWFsbHkgdXNlZGApO1xuICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgQ29kZUJ1aWxkU3RlcCBwYXRoIGJlbG93LlxuICB9XG5cbiAgY29uc3QgY29tcHV0ZVR5cGUgPSBnZXRDb21wdXRlVHlwZShcbiAgICBwbHVnaW4uY29tcHV0ZVR5cGUgPz8gb3B0aW9ucy5kZWZhdWx0Q29tcHV0ZVR5cGUgPz8gJ1NNQUxMJyxcbiAgKTtcblxuICAvLyBTdGVwIG5ldHdvcms6IGV4cGxpY2l0IHN0ZXAgY29uZmlnIHdpbnMsIGVsc2UgdGhpcyBzdGVwJ3MgYGVjMjpuZXR3b3JrYCBtZXRhZGF0YS5cbiAgY29uc3QgcmVzb2x2ZWROZXR3b3JrID0gbmV0d29yayA/PyBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhKG1lcmdlZCk7XG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IHJlc29sdmVkTmV0d29ya1xuICAgID8gcmVzb2x2ZU5ldHdvcmsoc2NvcGUsIG9wdGlvbnMudW5pcXVlSWQsIHJlc29sdmVkTmV0d29yaylcbiAgICA6IHt9O1xuXG4gIC8vIE1ldGFkYXRhIHNwcmVhZCBsYXN0IHNvIGl0IGNhbiBvdmVycmlkZSBwcm9ncmFtbWF0aWMgZGVmYXVsdHMuXG4gIC8vIE5PVEU6IENhY2hpbmcgaXMgc3VwcG9ydGVkIHZpYSB0d28gbWV0YWRhdGEgcGF0aHM6XG4gIC8vICAgMS4gTWV0YWRhdGFLZXlzLkNBQ0hFICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpjYWNoZScpIOKAlCBwYXNzZWQgZGlyZWN0bHlcbiAgLy8gICAgICBhcyB0aGUgQ29kZUJ1aWxkU3RlcCBgY2FjaGVgIHByb3AgKGV4cGVjdHMgYSBjb2RlYnVpbGQuQ2FjaGUgb2JqZWN0KS5cbiAgLy8gICAyLiBNZXRhZGF0YUtleXMuUEFSVElBTF9CVUlMRF9TUEVDICgnYXdzOmNkazpwaXBlbGluZXM6Y29kZWJ1aWxkc3RlcDpwYXJ0aWFsYnVpbGRzcGVjJylcbiAgLy8gICAgICDigJQgcGFzc2VkIGFzIGBwYXJ0aWFsQnVpbGRTcGVjYCwgd2hpY2ggY2FuIGluY2x1ZGUgYSBgY2FjaGU6YCBzZWN0aW9uIGZvclxuICAvLyAgICAgIFMzIG9yIGxvY2FsIGNhY2hpbmcgKGUuZy4sIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHsgY2FjaGU6IHsgcGF0aHM6IFsuLi5dIH0gfSkpLlxuICBjb25zdCBzdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoaWQsIHtcbiAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgLi4ubmV0d29ya1Byb3BzLFxuICAgIC4uLihhZGRpdGlvbmFsSW5wdXRzICYmIHsgYWRkaXRpb25hbElucHV0cyB9KSxcbiAgICAuLi4odGltZW91dCAmJiB7IHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXModGltZW91dCkgfSksXG4gICAgZW52OiBhY3Rpb25FbnYsXG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnkgPz8gdW5kZWZpbmVkLFxuICAgIC8vIFBpbiB0aGUgYnVpbGRzcGVjIHNoZWxsIHRvIFBPU0lYIC9iaW4vc2ggc28gZXhlY3V0aW9uIGlzIGlkZW50aWNhbCB0b1xuICAgIC8vIENvZGVCdWlsZCdzIGRlZmF1bHQgYW5kIHBvcnRhYmxlIGFjcm9zcyBtaW5pbWFsIGJhc2UgaW1hZ2VzIChubyBiYXNoXG4gICAgLy8gZGVwZW5kZW5jeSkuIFBsdWdpbiBzcGVjcyBhcmUgYXV0aG9yZWQgUE9TSVgtY2xlYW4gdG8gbWF0Y2gg4oCUIG5vIGJhc2gtb25seVxuICAgIC8vIGBbWyBdXWAsIGFycmF5cywgYHJlYWQgLXJhIDw8PGAsIG9yIGBzb3VyY2VgL2Budm0gdXNlYC9gc2RrIHVzZWAuIEFcbiAgICAvLyBwbHVnaW4tc3VwcGxpZWQgcGFydGlhbEJ1aWxkU3BlYyAobm9uZSB0b2RheSkgd291bGQgb3ZlcnJpZGUgdGhpcyB2aWEgdGhlXG4gICAgLy8gbWV0YWRhdGEgc3ByZWFkIGJlbG93IGFuZCBtdXN0IHRoZW4gc2V0IGBlbnYuc2hlbGxgIGl0c2VsZi5cbiAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7IGVudjogeyBzaGVsbDogJy9iaW4vc2gnIH0gfSksXG4gICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICBidWlsZEltYWdlOiBwbHVnaW5CdWlsZEltYWdlID8/IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZShzY29wZSwgb3JnSWQpLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgLi4udG9Db2RlQnVpbGRFbnZWYXJzKGVudiksXG4gICAgICAgIC4uLnNlY3JldEVudlZhcnMsXG4gICAgICB9LFxuICAgICAgLi4ubWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50KG1lcmdlZCksXG4gICAgfSxcbiAgICAuLi5tZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAobWVyZ2VkKSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgd2l0aCBhcnRpZmFjdCBtYW5hZ2VyIGlmIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0XG4gIGlmIChwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSAmJiBhcnRpZmFjdE1hbmFnZXIgJiYgc3RhZ2VOYW1lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RLZXk6IEFydGlmYWN0S2V5ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhczogc3RhZ2VBbGlhcyA/PyBgJHtzdGFnZU5hbWV9LWFsaWFzYCxcbiAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgcGx1Z2luQWxpYXM6IHBsdWdpbkFsaWFzID8/IGAke3BsdWdpbi5uYW1lfS1hbGlhc2AsXG4gICAgICBvdXRwdXREaXJlY3Rvcnk6IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5LFxuICAgIH07XG4gICAgYXJ0aWZhY3RNYW5hZ2VyLmFkZChhcnRpZmFjdEtleSwgc3RlcCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHN0cmluZyBvciBDb21wdXRlVHlwZSBlbnVtIHRvIENESyBDb21wdXRlVHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGUoaW5wdXQ6IHN0cmluZyB8IENES0NvbXB1dGVUeXBlID0gJ1NNQUxMJyk6IENES0NvbXB1dGVUeXBlIHtcbiAgLy8gSWYgYWxyZWFkeSBhIENESyBDb21wdXRlVHlwZSwgcmV0dXJuIGFzLWlzXG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IGlucHV0LnRvVXBwZXJDYXNlKCkgYXMgQ29tcHV0ZVR5cGU7XG5cbiAgY29uc3QgbWFwcGluZzogUmVjb3JkPENvbXB1dGVUeXBlLCBDREtDb21wdXRlVHlwZT4gPSB7XG4gICAgW0NvbXB1dGVUeXBlLlNNQUxMXTogQ0RLQ29tcHV0ZVR5cGUuU01BTEwsXG4gICAgW0NvbXB1dGVUeXBlLk1FRElVTV06IENES0NvbXB1dGVUeXBlLk1FRElVTSxcbiAgICBbQ29tcHV0ZVR5cGUuTEFSR0VdOiBDREtDb21wdXRlVHlwZS5MQVJHRSxcbiAgICBbQ29tcHV0ZVR5cGUuWDJfTEFSR0VdOiBDREtDb21wdXRlVHlwZS5YMl9MQVJHRSxcbiAgfTtcblxuICBjb25zdCByZXN1bHQgPSBtYXBwaW5nW25vcm1hbGl6ZWRdO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGNvbXB1dGUgdHlwZSBcIiR7aW5wdXR9XCIsIGZhbGxpbmcgYmFjayB0byBTTUFMTGApO1xuICAgIHJldHVybiBDREtDb21wdXRlVHlwZS5TTUFMTDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBsZXR0ZXJzIG9yIG51bWJlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgc3RyaW5nIHRvIHByb2Nlc3NcbiAqIEBwYXJhbSByZXBsYWNlVmFsdWUgLSBUaGUgY2hhcmFjdGVyKHMpIHRvIHJlcGxhY2Ugbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggKGRlZmF1bHQ6ICdfJylcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgcmVwbGFjZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VOb25BbHBoYW51bWVyaWMoaW5wdXQ6IHN0cmluZywgcmVwbGFjZVZhbHVlOiBzdHJpbmcgPSAnXycpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW15hLXpBLVowLTldL2csIHJlcGxhY2VWYWx1ZSk7XG59XG5cbi8qKlxuICogVW53cmFwIGEgU2VjcmV0VmFsdWUgfCBzdHJpbmcgaW50byBhIHBsYWluIHN0cmluZy5cbiAqIFdoZW4gYSBTZWNyZXRWYWx1ZSBpcyBwcm92aWRlZCAoZS5nLiBmcm9tIFNlY3JldHMgTWFuYWdlciksIGNhbGxzIHVuc2FmZVVud3JhcCgpXG4gKiB0byBleHRyYWN0IHRoZSB1bmRlcmx5aW5nIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwU2VjcmV0KHZhbHVlOiBTZWNyZXRWYWx1ZSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB2YWx1ZS51bnNhZmVVbndyYXAoKTtcbn1cbiJdfQ==
|
|
@@ -67,7 +67,13 @@ export class StageBuilder {
|
|
|
67
67
|
}
|
|
68
68
|
resolveStep(stepConfig, stageName, stageAlias) {
|
|
69
69
|
const plugin = this.pluginLookup.plugin(stepConfig.plugin);
|
|
70
|
-
|
|
70
|
+
// Per-step plugin config lives on the plugin reference (`plugin.metadata` —
|
|
71
|
+
// e.g. JAVA_VERSION/KOTLIN_VERSION/computetype overrides). pluginLookup.plugin()
|
|
72
|
+
// returns the resolved CATALOG plugin and drops the reference metadata in the
|
|
73
|
+
// pre-resolved path, so merge it here too — otherwise per-step overrides are
|
|
74
|
+
// silently ignored and the build falls back to plugin defaults.
|
|
75
|
+
// Order (last wins): global < plugin-ref metadata < step-level metadata.
|
|
76
|
+
const stepMetadata = merge(this.globalMetadata, stepConfig.plugin.metadata ?? {}, stepConfig.metadata ?? {});
|
|
71
77
|
const pluginAlias = stepConfig.plugin.alias ?? stepConfig.plugin.name;
|
|
72
78
|
if (stepConfig.inputArtifact && !this.artifactManager) {
|
|
73
79
|
throw new Error(`Step "${pluginAlias}" requires inputArtifact but no artifactManager is configured.`);
|
|
@@ -118,4 +124,4 @@ export class StageBuilder {
|
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFvQ3pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sS0FBSyxDQUFZO0lBQ2pCLFlBQVksQ0FBZTtJQUMzQixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUFlO0lBQzdCLGtCQUFrQixDQUFrQjtJQUNwQyxlQUFlLENBQW1CO0lBQ2xDLEtBQUssQ0FBVTtJQUNmLGFBQWEsQ0FBMEI7SUFFeEQsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FB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Q0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGx1Z2luTG9va3VwIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgbWVyZ2UgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhRGF0YVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBTdGFnZUJ1aWxkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZUJ1aWxkZXJQcm9wcyB7XG4gIC8qKiBDREsgY29uc3RydWN0IHNjb3BlIGZvciBjcmVhdGluZyBjaGlsZCBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqIFBsdWdpbiBsb29rdXAgc2VydmljZSBmb3IgcmVzb2x2aW5nIHBsdWdpbiByZWZlcmVuY2VzIHRvIENESyBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHBsdWdpbkxvb2t1cDogUGx1Z2luTG9va3VwO1xuXG4gIC8qKiBVbmlxdWUgSUQgZ2VuZXJhdG9yIGZvciBjcmVhdGluZyBkZXRlcm1pbmlzdGljIGNvbnN0cnVjdCBJRHMgKi9cbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuXG4gIC8qKiBHbG9iYWwgbWV0YWRhdGEgaW5oZXJpdGVkIGJ5IGFsbCBzdGFnZSBzdGVwcyAqL1xuICByZWFkb25seSBnbG9iYWxNZXRhZGF0YTogTWV0YURhdGFUeXBlO1xuXG4gIC8qKiBEZWZhdWx0IENvZGVCdWlsZCBjb21wdXRlIHR5cGUgZm9yIHN0ZXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBvbmUgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG5cbiAgLyoqIEFydGlmYWN0IG1hbmFnZXIgZm9yIHJlc29sdmluZyBpbnB1dCBhcnRpZmFjdCBrZXlzIHRvIEZpbGVTZXRzICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBzY29wZSB1c2VkIHRvIHJlc29sdmUgYHt7IHBpcGVsaW5lLiogfX1gIHRlbXBsYXRlIHRva2Vuc1xuICAgKiBpbnNpZGUgcGx1Z2luIHNwZWNzLiBSZXF1aXJlZCDigJQgcGFzc2VkIHRocm91Z2ggdG8gYGNyZWF0ZUNvZGVCdWlsZFN0ZXBgXG4gICAqIG9uIGV2ZXJ5IHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIGFkZHMgcGlwZWxpbmUgc3RhZ2VzICh3YXZlcykgdG8gYSBDb2RlUGlwZWxpbmUuXG4gKlxuICogRWFjaCBzdGFnZSBpcyByZXNvbHZlZCBmcm9tIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiAocGx1Z2luIG5hbWVzKVxuICogaW50byBDREsgQ29kZUJ1aWxkIHN0ZXBzIHZpYSBQbHVnaW5Mb29rdXAsIHRoZW4gYWRkZWQgYXMgYSB3YXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGFnZUJ1aWxkZXIgPSBuZXcgU3RhZ2VCdWlsZGVyKHtcbiAqICAgc2NvcGU6IHRoaXMsXG4gKiAgIHBsdWdpbkxvb2t1cCxcbiAqICAgdW5pcXVlSWQsXG4gKiAgIGdsb2JhbE1ldGFkYXRhOiBtZXJnZWRNZXRhZGF0YSxcbiAqIH0pO1xuICogc3RhZ2VCdWlsZGVyLmFkZFN0YWdlKHBpcGVsaW5lLCB7XG4gKiAgIHN0YWdlTmFtZTogJ0ludGVncmF0aW9uIFRlc3RzJyxcbiAqICAgYWxpYXM6ICdpbnRlZ3JhdGlvbicsXG4gKiAgIHN0ZXBzOiBbXG4gKiAgICAgeyBwbHVnaW46IHsgbmFtZTogJ2plc3QtaW50ZWdyYXRpb24nIH0gfSxcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnZTJlLXRlc3RzJywgYWxpYXM6ICdjeXByZXNzJyB9IH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RhZ2VCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbkxvb2t1cDogUGx1Z2luTG9va3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxNZXRhZGF0YTogTWV0YURhdGFUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RhZ2VCdWlsZGVyUHJvcHMpIHtcbiAgICB0aGlzLnNjb3BlID0gcHJvcHMuc2NvcGU7XG4gICAgdGhpcy5wbHVnaW5Mb29rdXAgPSBwcm9wcy5wbHVnaW5Mb29rdXA7XG4gICAgdGhpcy51bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuZ2xvYmFsTWV0YWRhdGEgPSBwcm9wcy5nbG9iYWxNZXRhZGF0YTtcbiAgICB0aGlzLmRlZmF1bHRDb21wdXRlVHlwZSA9IHByb3BzLmRlZmF1bHRDb21wdXRlVHlwZTtcbiAgICB0aGlzLmFydGlmYWN0TWFuYWdlciA9IHByb3BzLmFydGlmYWN0TWFuYWdlcjtcbiAgICB0aGlzLm9yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5waXBlbGluZVNjb3BlID0gcHJvcHMucGlwZWxpbmVTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHN0YWdlJ3MgcGx1Z2luLWJhc2VkIHN0ZXAgY29uZmlncyBpbnRvIENvZGVCdWlsZCBzdGVwc1xuICAgKiBhbmQgYWRkcyB0aGVtIGFzIGEgd2F2ZSB0byB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBhZGRTdGFnZShwaXBlbGluZTogQ29kZVBpcGVsaW5lLCBzdGFnZTogU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhZ2VBbGlhcyA9IHN0YWdlLmFsaWFzID8/IGAke3N0YWdlLnN0YWdlTmFtZX0tYWxpYXNgO1xuXG4gICAgY29uc3QgcHJlU3RlcHMgPSBzdGFnZS5zdGVwc1xuICAgICAgLmZpbHRlcihzID0+IChzLnBvc2l0aW9uID8/ICdwcmUnKSA9PT0gJ3ByZScpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcbiAgICBjb25zdCBwb3N0U3RlcHMgPSBzdGFnZS5zdGVwc1xuICAgICAgLmZpbHRlcihzID0+IHMucG9zaXRpb24gPT09ICdwb3N0JylcbiAgICAgIC5tYXAocyA9PiB0aGlzLnJlc29sdmVTdGVwKHMsIHN0YWdlLnN0YWdlTmFtZSwgc3RhZ2VBbGlhcykpO1xuXG4gICAgcGlwZWxpbmUuYWRkV2F2ZShzdGFnZUFsaWFzLCB7XG4gICAgICAuLi4ocHJlU3RlcHMubGVuZ3RoID4gMCAmJiB7IHByZTogcHJlU3RlcHMgfSksXG4gICAgICAuLi4ocG9zdFN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwb3N0OiBwb3N0U3RlcHMgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdGVwKHN0ZXBDb25maWc6IFN0YWdlT3B0aW9uc1snc3RlcHMnXVtudW1iZXJdLCBzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VBbGlhczogc3RyaW5nKSB7XG4gICAgY29uc3QgcGx1Z2luID0gdGhpcy5wbHVnaW5Mb29rdXAucGx1Z2luKHN0ZXBDb25maWcucGx1Z2luKTtcbiAgICBjb25zdCBzdGVwTWV0YWRhdGEgPSBtZXJnZSh0aGlzLmdsb2JhbE1ldGFkYXRhLCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICBjb25zdCBwbHVnaW5BbGlhcyA9IHN0ZXBDb25maWcucGx1Z2luLmFsaWFzID8/IHN0ZXBDb25maWcucGx1Z2luLm5hbWU7XG5cbiAgICBpZiAoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0ICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7cGx1Z2luQWxpYXN9XCIgcmVxdWlyZXMgaW5wdXRBcnRpZmFjdCBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cz8ubGVuZ3RoICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7cGx1Z2luQWxpYXN9XCIgcmVxdWlyZXMgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzIGJ1dCBubyBhcnRpZmFjdE1hbmFnZXIgaXMgY29uZmlndXJlZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyB0aGlzLmFydGlmYWN0TWFuYWdlci5nZXRPdXRwdXQoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW5wdXRzID0gc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzLm1hcCgoeyBhcnRpZmFjdCwgZGlyZWN0b3J5IH0pID0+IFtcbiAgICAgICAgICBkaXJlY3RvcnkgfHwgYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5LFxuICAgICAgICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyIS5nZXRPdXRwdXQoYXJ0aWZhY3QpLFxuICAgICAgICBdKSxcbiAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgaWQ6IHRoaXMudW5pcXVlSWQuZ2VuZXJhdGUoYHN0YWdlOiR7c3RhZ2VBbGlhc306JHtwbHVnaW5BbGlhc31gKSxcbiAgICAgIHVuaXF1ZUlkOiB0aGlzLnVuaXF1ZUlkLFxuICAgICAgcGx1Z2luLFxuICAgICAgbWV0YWRhdGE6IHN0ZXBNZXRhZGF0YSxcbiAgICAgIG5ldHdvcms6IHN0ZXBDb25maWcubmV0d29yayxcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxuICAgICAgZGVmYXVsdENvbXB1dGVUeXBlOiB0aGlzLmRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgIGlucHV0LFxuICAgICAgYWRkaXRpb25hbElucHV0cyxcbiAgICAgIGFydGlmYWN0TWFuYWdlcjogdGhpcy5hcnRpZmFjdE1hbmFnZXIsXG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzLFxuICAgICAgcGx1Z2luQWxpYXMsXG4gICAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlSW5zdGFsbENvbW1hbmRzLFxuICAgICAgcG9zdEluc3RhbGxDb21tYW5kczogc3RlcENvbmZpZy5wb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgICAgcHJlQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlQ29tbWFuZHMsXG4gICAgICBwb3N0Q29tbWFuZHM6IHN0ZXBDb25maWcucG9zdENvbW1hbmRzLFxuICAgICAgZW52OiBzdGVwQ29uZmlnLmVudixcbiAgICAgIHRpbWVvdXQ6IHN0ZXBDb25maWcudGltZW91dCA/PyBwbHVnaW4udGltZW91dCA/PyB1bmRlZmluZWQsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IChzdGVwQ29uZmlnLmZhaWx1cmVCZWhhdmlvciA/PyBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yKSBhcyAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyxcbiAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZTogdGhpcy5waXBlbGluZVNjb3BlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBhZGRzIG11bHRpcGxlIHN0YWdlcyBhcyB3YXZlcyB0byB0aGUgcGlwZWxpbmUsIGluIG9yZGVyLlxuICAgKi9cbiAgYWRkU3RhZ2VzKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlczogU3RhZ2VPcHRpb25zW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgdGhpcy5hZGRTdGFnZShwaXBlbGluZSwgc3RhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFvQ3pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sS0FBSyxDQUFZO0lBQ2pCLFlBQVksQ0FBZTtJQUMzQixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUFlO0lBQzdCLGtCQUFrQixDQUFrQjtJQUNwQyxlQUFlLENBQW1CO0lBQ2xDLEtBQUssQ0FBVTtJQUNmLGFBQWEsQ0FBMEI7SUFFeEQsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FB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c0I7UUFDdEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUgYXMgQ2RrQ29tcHV0ZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IENvZGVQaXBlbGluZSB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBsdWdpbkxvb2t1cCB9IGZyb20gJy4vcGx1Z2luLWxvb2t1cC5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvYXJ0aWZhY3QtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAsIG1lcmdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgU3RhZ2VCdWlsZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VCdWlsZGVyUHJvcHMge1xuICAvKiogQ0RLIGNvbnN0cnVjdCBzY29wZSBmb3IgY3JlYXRpbmcgY2hpbGQgY29uc3RydWN0cyAqL1xuICByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuXG4gIC8qKiBQbHVnaW4gbG9va3VwIHNlcnZpY2UgZm9yIHJlc29sdmluZyBwbHVnaW4gcmVmZXJlbmNlcyB0byBDREsgY29uc3RydWN0cyAqL1xuICByZWFkb25seSBwbHVnaW5Mb29rdXA6IFBsdWdpbkxvb2t1cDtcblxuICAvKiogVW5pcXVlIElEIGdlbmVyYXRvciBmb3IgY3JlYXRpbmcgZGV0ZXJtaW5pc3RpYyBjb25zdHJ1Y3QgSURzICovXG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcblxuICAvKiogR2xvYmFsIG1ldGFkYXRhIGluaGVyaXRlZCBieSBhbGwgc3RhZ2Ugc3RlcHMgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsTWV0YWRhdGE6IE1ldGFEYXRhVHlwZTtcblxuICAvKiogRGVmYXVsdCBDb2RlQnVpbGQgY29tcHV0ZSB0eXBlIGZvciBzdGVwcyB0aGF0IGRvbid0IHNwZWNpZnkgb25lICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuXG4gIC8qKiBBcnRpZmFjdCBtYW5hZ2VyIGZvciByZXNvbHZpbmcgaW5wdXQgYXJ0aWZhY3Qga2V5cyB0byBGaWxlU2V0cyAqL1xuICByZWFkb25seSBhcnRpZmFjdE1hbmFnZXI/OiBBcnRpZmFjdE1hbmFnZXI7XG5cbiAgLyoqIFRlbmFudCBpZGVudGlmaWVyIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgc2NvcGUgdXNlZCB0byByZXNvbHZlIGB7eyBwaXBlbGluZS4qIH19YCB0ZW1wbGF0ZSB0b2tlbnNcbiAgICogaW5zaWRlIHBsdWdpbiBzcGVjcy4gUmVxdWlyZWQg4oCUIHBhc3NlZCB0aHJvdWdoIHRvIGBjcmVhdGVDb2RlQnVpbGRTdGVwYFxuICAgKiBvbiBldmVyeSBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCBhZGRzIHBpcGVsaW5lIHN0YWdlcyAod2F2ZXMpIHRvIGEgQ29kZVBpcGVsaW5lLlxuICpcbiAqIEVhY2ggc3RhZ2UgaXMgcmVzb2x2ZWQgZnJvbSBoaWdoLWxldmVsIGNvbmZpZ3VyYXRpb24gKHBsdWdpbiBuYW1lcylcbiAqIGludG8gQ0RLIENvZGVCdWlsZCBzdGVwcyB2aWEgUGx1Z2luTG9va3VwLCB0aGVuIGFkZGVkIGFzIGEgd2F2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gKiAgIHNjb3BlOiB0aGlzLFxuICogICBwbHVnaW5Mb29rdXAsXG4gKiAgIHVuaXF1ZUlkLFxuICogICBnbG9iYWxNZXRhZGF0YTogbWVyZ2VkTWV0YWRhdGEsXG4gKiB9KTtcbiAqIHN0YWdlQnVpbGRlci5hZGRTdGFnZShwaXBlbGluZSwge1xuICogICBzdGFnZU5hbWU6ICdJbnRlZ3JhdGlvbiBUZXN0cycsXG4gKiAgIGFsaWFzOiAnaW50ZWdyYXRpb24nLFxuICogICBzdGVwczogW1xuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdqZXN0LWludGVncmF0aW9uJyB9IH0sXG4gKiAgICAgeyBwbHVnaW46IHsgbmFtZTogJ2UyZS10ZXN0cycsIGFsaWFzOiAnY3lwcmVzcycgfSB9LFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YWdlQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5Mb29rdXA6IFBsdWdpbkxvb2t1cDtcbiAgcHJpdmF0ZSByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsTWV0YWRhdGE6IE1ldGFEYXRhVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0Q29tcHV0ZVR5cGU/OiBDZGtDb21wdXRlVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcnRpZmFjdE1hbmFnZXI/OiBBcnRpZmFjdE1hbmFnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFN0YWdlQnVpbGRlclByb3BzKSB7XG4gICAgdGhpcy5zY29wZSA9IHByb3BzLnNjb3BlO1xuICAgIHRoaXMucGx1Z2luTG9va3VwID0gcHJvcHMucGx1Z2luTG9va3VwO1xuICAgIHRoaXMudW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLmdsb2JhbE1ldGFkYXRhID0gcHJvcHMuZ2xvYmFsTWV0YWRhdGE7XG4gICAgdGhpcy5kZWZhdWx0Q29tcHV0ZVR5cGUgPSBwcm9wcy5kZWZhdWx0Q29tcHV0ZVR5cGU7XG4gICAgdGhpcy5hcnRpZmFjdE1hbmFnZXIgPSBwcm9wcy5hcnRpZmFjdE1hbmFnZXI7XG4gICAgdGhpcy5vcmdJZCA9IHByb3BzLm9yZ0lkO1xuICAgIHRoaXMucGlwZWxpbmVTY29wZSA9IHByb3BzLnBpcGVsaW5lU2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBzdGFnZSdzIHBsdWdpbi1iYXNlZCBzdGVwIGNvbmZpZ3MgaW50byBDb2RlQnVpbGQgc3RlcHNcbiAgICogYW5kIGFkZHMgdGhlbSBhcyBhIHdhdmUgdG8gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgYWRkU3RhZ2UocGlwZWxpbmU6IENvZGVQaXBlbGluZSwgc3RhZ2U6IFN0YWdlT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWdlQWxpYXMgPSBzdGFnZS5hbGlhcyA/PyBgJHtzdGFnZS5zdGFnZU5hbWV9LWFsaWFzYDtcblxuICAgIGNvbnN0IHByZVN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiAocy5wb3NpdGlvbiA/PyAncHJlJykgPT09ICdwcmUnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiBzLnBvc2l0aW9uID09PSAncG9zdCcpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoc3RhZ2VBbGlhcywge1xuICAgICAgLi4uKHByZVN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwcmU6IHByZVN0ZXBzIH0pLFxuICAgICAgLi4uKHBvc3RTdGVwcy5sZW5ndGggPiAwICYmIHsgcG9zdDogcG9zdFN0ZXBzIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU3RlcChzdGVwQ29uZmlnOiBTdGFnZU9wdGlvbnNbJ3N0ZXBzJ11bbnVtYmVyXSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlQWxpYXM6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luTG9va3VwLnBsdWdpbihzdGVwQ29uZmlnLnBsdWdpbik7XG4gICAgLy8gUGVyLXN0ZXAgcGx1Z2luIGNvbmZpZyBsaXZlcyBvbiB0aGUgcGx1Z2luIHJlZmVyZW5jZSAoYHBsdWdpbi5tZXRhZGF0YWAg4oCUXG4gICAgLy8gZS5nLiBKQVZBX1ZFUlNJT04vS09UTElOX1ZFUlNJT04vY29tcHV0ZXR5cGUgb3ZlcnJpZGVzKS4gcGx1Z2luTG9va3VwLnBsdWdpbigpXG4gICAgLy8gcmV0dXJucyB0aGUgcmVzb2x2ZWQgQ0FUQUxPRyBwbHVnaW4gYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgbWV0YWRhdGEgaW4gdGhlXG4gICAgLy8gcHJlLXJlc29sdmVkIHBhdGgsIHNvIG1lcmdlIGl0IGhlcmUgdG9vIOKAlCBvdGhlcndpc2UgcGVyLXN0ZXAgb3ZlcnJpZGVzIGFyZVxuICAgIC8vIHNpbGVudGx5IGlnbm9yZWQgYW5kIHRoZSBidWlsZCBmYWxscyBiYWNrIHRvIHBsdWdpbiBkZWZhdWx0cy5cbiAgICAvLyBPcmRlciAobGFzdCB3aW5zKTogZ2xvYmFsIDwgcGx1Z2luLXJlZiBtZXRhZGF0YSA8IHN0ZXAtbGV2ZWwgbWV0YWRhdGEuXG4gICAgY29uc3Qgc3RlcE1ldGFkYXRhID0gbWVyZ2UodGhpcy5nbG9iYWxNZXRhZGF0YSwgc3RlcENvbmZpZy5wbHVnaW4ubWV0YWRhdGEgPz8ge30sIHN0ZXBDb25maWcubWV0YWRhdGEgPz8ge30pO1xuICAgIGNvbnN0IHBsdWdpbkFsaWFzID0gc3RlcENvbmZpZy5wbHVnaW4uYWxpYXMgPz8gc3RlcENvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgIGlmIChzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QgJiYgIXRoaXMuYXJ0aWZhY3RNYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdGVwIFwiJHtwbHVnaW5BbGlhc31cIiByZXF1aXJlcyBpbnB1dEFydGlmYWN0IGJ1dCBubyBhcnRpZmFjdE1hbmFnZXIgaXMgY29uZmlndXJlZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPy5sZW5ndGggJiYgIXRoaXMuYXJ0aWZhY3RNYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdGVwIFwiJHtwbHVnaW5BbGlhc31cIiByZXF1aXJlcyBhZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHMgYnV0IG5vIGFydGlmYWN0TWFuYWdlciBpcyBjb25maWd1cmVkLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0ICYmIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyXG4gICAgICA/IHRoaXMuYXJ0aWZhY3RNYW5hZ2VyLmdldE91dHB1dChzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnB1dHMgPSBzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cz8ubGVuZ3RoICYmIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyXG4gICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHMubWFwKCh7IGFydGlmYWN0LCBkaXJlY3RvcnkgfSkgPT4gW1xuICAgICAgICAgIGRpcmVjdG9yeSB8fCBhcnRpZmFjdC5vdXRwdXREaXJlY3RvcnksXG4gICAgICAgICAgdGhpcy5hcnRpZmFjdE1hbmFnZXIhLmdldE91dHB1dChhcnRpZmFjdCksXG4gICAgICAgIF0pLFxuICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gY3JlYXRlQ29kZUJ1aWxkU3RlcCh7XG4gICAgICBpZDogdGhpcy51bmlxdWVJZC5nZW5lcmF0ZShgc3RhZ2U6JHtzdGFnZUFsaWFzfToke3BsdWdpbkFsaWFzfWApLFxuICAgICAgdW5pcXVlSWQ6IHRoaXMudW5pcXVlSWQsXG4gICAgICBwbHVnaW4sXG4gICAgICBtZXRhZGF0YTogc3RlcE1ldGFkYXRhLFxuICAgICAgbmV0d29yazogc3RlcENvbmZpZy5uZXR3b3JrLFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXG4gICAgICBkZWZhdWx0Q29tcHV0ZVR5cGU6IHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgaW5wdXQsXG4gICAgICBhZGRpdGlvbmFsSW5wdXRzLFxuICAgICAgYXJ0aWZhY3RNYW5hZ2VyOiB0aGlzLmFydGlmYWN0TWFuYWdlcixcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlQWxpYXMsXG4gICAgICBwbHVnaW5BbGlhcyxcbiAgICAgIHByZUluc3RhbGxDb21tYW5kczogc3RlcENvbmZpZy5wcmVJbnN0YWxsQ29tbWFuZHMsXG4gICAgICBwb3N0SW5zdGFsbENvbW1hbmRzOiBzdGVwQ29uZmlnLnBvc3RJbnN0YWxsQ29tbWFuZHMsXG4gICAgICBwcmVDb21tYW5kczogc3RlcENvbmZpZy5wcmVDb21tYW5kcyxcbiAgICAgIHBvc3RDb21tYW5kczogc3RlcENvbmZpZy5wb3N0Q29tbWFuZHMsXG4gICAgICBlbnY6IHN0ZXBDb25maWcuZW52LFxuICAgICAgdGltZW91dDogc3RlcENvbmZpZy50aW1lb3V0ID8/IHBsdWdpbi50aW1lb3V0ID8/IHVuZGVmaW5lZCxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogKHN0ZXBDb25maWcuZmFpbHVyZUJlaGF2aW9yID8/IHBsdWdpbi5mYWlsdXJlQmVoYXZpb3IpIGFzICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnLFxuICAgICAgb3JnSWQ6IHRoaXMub3JnSWQsXG4gICAgICBwaXBlbGluZVNjb3BlOiB0aGlzLnBpcGVsaW5lU2NvcGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGFkZHMgbXVsdGlwbGUgc3RhZ2VzIGFzIHdhdmVzIHRvIHRoZSBwaXBlbGluZSwgaW4gb3JkZXIuXG4gICAqL1xuICBhZGRTdGFnZXMocGlwZWxpbmU6IENvZGVQaXBlbGluZSwgc3RhZ2VzOiBTdGFnZU9wdGlvbnNbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICB0aGlzLmFkZFN0YWdlKHBpcGVsaW5lLCBzdGFnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|