rds-database-auto-start-preventer 0.3.5 → 0.4.0

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.
@@ -11,11 +11,15 @@ export interface TargetResource {
11
11
  readonly tagValues: string[];
12
12
  }
13
13
  /**
14
- * External secrets required for notifications (e.g. Slack).
14
+ * External secrets for notifications (e.g. Slack).
15
+ * Omit {@link Secrets.slackSecretName} to skip Slack notifications.
15
16
  */
16
17
  export interface Secrets {
17
- /** Name of the Secrets Manager secret containing Slack token and channel. */
18
- readonly slackSecretName: string;
18
+ /**
19
+ * Name of the Secrets Manager secret containing Slack token and channel.
20
+ * When omitted, the handler stops matching RDS resources and does not post to Slack.
21
+ */
22
+ readonly slackSecretName?: string;
19
23
  }
20
24
  /**
21
25
  * Props for the RDS database auto-start preventer construct.
@@ -47,6 +51,7 @@ export declare class RDSDatabaseAutoStartPreventer extends Construct {
47
51
  * @param scope - Parent construct.
48
52
  * @param id - Construct id.
49
53
  * @param props - Target resource (tag key/values), enable rule flag, and secrets.
54
+ * @throws When tagKey or a tag value is blank, tagValues is empty, or slackSecretName is present but blank.
50
55
  */
51
56
  constructor(scope: Construct, id: string, props: RDSDatabaseAutoStartPreventerProps);
52
57
  }
@@ -44,6 +44,37 @@ const logs = __importStar(require("aws-cdk-lib/aws-logs"));
44
44
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
45
45
  const constructs_1 = require("constructs");
46
46
  const auto_start_prevent_function_1 = require("../funcs/auto-start-prevent-function");
47
+ /**
48
+ * Returns true when a concrete string is empty or whitespace-only.
49
+ * Unresolved CDK tokens are treated as present because their value is unknown at synthesis.
50
+ *
51
+ * @param value - Prop string to check.
52
+ * @returns Whether the value is blank.
53
+ */
54
+ const isBlankText = (value) => !aws_cdk_lib_1.Token.isUnresolved(value) && value.trim().length === 0;
55
+ /**
56
+ * Rejects empty tag filters and Slack secret names before resources are created.
57
+ *
58
+ * @param props - Construct props to validate.
59
+ * @throws When tagKey or a tag value is blank, tagValues is empty, or slackSecretName is present but blank.
60
+ */
61
+ const validateProps = (props) => {
62
+ if (isBlankText(props.targetResource.tagKey)) {
63
+ throw new Error('targetResource.tagKey must be a non-empty string.');
64
+ }
65
+ if (props.targetResource.tagValues.length === 0) {
66
+ throw new Error('targetResource.tagValues must contain at least one value.');
67
+ }
68
+ for (const value of props.targetResource.tagValues) {
69
+ if (isBlankText(value)) {
70
+ throw new Error('targetResource.tagValues must not contain empty strings.');
71
+ }
72
+ }
73
+ const slackSecretName = props.secrets.slackSecretName;
74
+ if (slackSecretName !== undefined && isBlankText(slackSecretName)) {
75
+ throw new Error('secrets.slackSecretName must be a non-empty string.');
76
+ }
77
+ };
47
78
  /**
48
79
  * Deploys EventBridge rules and a Durable Lambda to stop matching RDS resources
49
80
  * after auto-start events (RDS-EVENT-0154 / RDS-EVENT-0153).
@@ -53,7 +84,7 @@ const auto_start_prevent_function_1 = require("../funcs/auto-start-prevent-funct
53
84
  * IAM grants RDS describe and stop actions only (no Resource Groups Tagging API).
54
85
  */
55
86
  class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
56
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.3.5" };
87
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.4.0" };
57
88
  /**
58
89
  * Creates the Durable Lambda, EventBridge rules, and IAM policies.
59
90
  *
@@ -64,10 +95,15 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
64
95
  * @param scope - Parent construct.
65
96
  * @param id - Construct id.
66
97
  * @param props - Target resource (tag key/values), enable rule flag, and secrets.
98
+ * @throws When tagKey or a tag value is blank, tagValues is empty, or slackSecretName is present but blank.
67
99
  */
68
100
  constructor(scope, id, props) {
69
101
  super(scope, id);
70
- const slackSecret = aws_secretsmanager_1.Secret.fromSecretNameV2(this, 'SlackSecret', props.secrets.slackSecretName);
102
+ validateProps(props);
103
+ const slackSecretName = props.secrets.slackSecretName;
104
+ const slackSecret = slackSecretName === undefined
105
+ ? undefined
106
+ : aws_secretsmanager_1.Secret.fromSecretNameV2(this, 'SlackSecret', slackSecretName);
71
107
  // Durable Functions-based Running Scheduler (previous Step Functions logic implemented in Lambda).
72
108
  // Durable Execution requires Node.js 22+.
73
109
  const autoStartPreventFunction = new auto_start_prevent_function_1.AutoStartPreventFunction(this, 'AutoStartPreventFunction', {
@@ -80,14 +116,18 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
80
116
  executionTimeout: aws_cdk_lib_1.Duration.hours(2),
81
117
  retentionPeriod: aws_cdk_lib_1.Duration.days(1),
82
118
  },
83
- environment: {
84
- SLACK_SECRET_NAME: slackSecret.secretName,
85
- },
86
- // Required by aws-lambda-secret-fetcher (^0.6+): Extension HTTP API + AWS_SESSION_TOKEN.
87
- paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
88
- cacheSize: 500,
89
- logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
90
- }),
119
+ environment: slackSecret === undefined
120
+ ? undefined
121
+ : {
122
+ SLACK_SECRET_NAME: slackSecret.secretName,
123
+ },
124
+ // Required by aws-lambda-secret-fetcher (^0.6+) when Slack is configured.
125
+ paramsAndSecrets: slackSecret === undefined
126
+ ? undefined
127
+ : lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
128
+ cacheSize: 500,
129
+ logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
130
+ }),
91
131
  role: new iam.Role(this, 'AutoStartPreventFunctionRole', {
92
132
  description: 'A role to control the RDS Database or Cluster.',
93
133
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
@@ -116,13 +156,12 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
116
156
  ],
117
157
  resources: ['*'],
118
158
  }));
119
- // Grant read access to the Slack secret
120
- slackSecret.grantRead(autoStartPreventFunction);
159
+ if (slackSecret !== undefined) {
160
+ slackSecret.grantRead(autoStartPreventFunction);
161
+ }
121
162
  // See: https://docs.aws.amazon.com/lambda/latest/dg/durable-getting-started-iac.html
122
163
  const autoStartPreventFunctionAlias = autoStartPreventFunction.addAlias('live');
123
- const enableRule = (() => {
124
- return props.enableRule === undefined || props.enableRule;
125
- })();
164
+ const enableRule = props.enableRule !== false;
126
165
  // Pass the EventBridge event and tag filter params to the Lambda target input.
127
166
  const lambdaInput = events.RuleTargetInput.fromObject({
128
167
  event: events.EventField.fromPath('$'),
@@ -170,4 +209,4 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
170
209
  }
171
210
  }
172
211
  exports.RDSDatabaseAutoStartPreventer = RDSDatabaseAutoStartPreventer;
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlDO1FBQ2pGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEcsbUdBQW1HO1FBQ25HLDBDQUEwQztRQUMxQyxNQUFNLHdCQUF3QixHQUFHLElBQUksc0RBQXdCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQzlGLFdBQVcsRUFBRSxnRkFBZ0Y7WUFDN0YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsZUFBZSxFQUFFLHNCQUFRLENBQUMs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LENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSx3Q0FBd0M7WUFDckQsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUI7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3hELGFBQWEsRUFBRSxDQUFDO29CQUNoQixLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUExSEgsc0VBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmNzL2F1dG8tc3RhcnQtcHJldmVudC1mdW5jdGlvbic7XG5cbi8qKlxuICogVGFnLWJhc2VkIGNyaXRlcmlhIGV2YWx1YXRlZCBpbiB0aGUgTGFtYmRhIGhhbmRsZXIgKG5vdCBvbiB0aGUgRXZlbnRCcmlkZ2UgcnVsZSkuXG4gKiBSZXNvdXJjZXMgd2hvc2UgdGFnIHZhbHVlIGZvciB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnS2V5fSBpcyBub3QgaW5cbiAqIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9IGFyZSBza2lwcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggKGUuZy4gXCJFbnZpcm9ubWVudFwiLCBcIkF1dG9TdGFydFByZXZlbnRcIikuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IGluZGljYXRlIHRoZSByZXNvdXJjZSBzaG91bGQgYmUgcHJvdGVjdGVkIChlLmcuIFtcInByb2R1Y3Rpb25cIl0pLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIHNlY3JldHMgcmVxdWlyZWQgZm9yIG5vdGlmaWNhdGlvbnMgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBEZXBsb3lzIEV2ZW50QnJpZGdlIHJ1bGVzIGFuZCBhIER1cmFibGUgTGFtYmRhIHRvIHN0b3AgbWF0Y2hpbmcgUkRTIHJlc291cmNlc1xuICogYWZ0ZXIgYXV0by1zdGFydCBldmVudHMgKFJEUy1FVkVOVC0wMTU0IC8gUkRTLUVWRU5ULTAxNTMpLlxuICpcbiAqIEV2ZW50QnJpZGdlIHJ1bGVzIG1hdGNoIGFsbCBhdXRvLXN0YXJ0IGV2ZW50czsgdGFnIGZpbHRlcmluZyBydW5zIGluIHRoZSBoYW5kbGVyXG4gKiB1c2luZyBgVGFnTGlzdGAgZnJvbSBgcmRzOkRlc2NyaWJlREJJbnN0YW5jZXNgIC8gYHJkczpEZXNjcmliZURCQ2x1c3RlcnNgLlxuICogSUFNIGdyYW50cyBSRFMgZGVzY3JpYmUgYW5kIHN0b3AgYWN0aW9ucyBvbmx5IChubyBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkpLlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBEdXJhYmxlIExhbWJkYSwgRXZlbnRCcmlkZ2UgcnVsZXMsIGFuZCBJQU0gcG9saWNpZXMuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgcmVjZWl2ZXMgYHsgZXZlbnQsIHBhcmFtcyB9YCB3aGVyZSBgcGFyYW1zYCBjYXJyaWVzIGB0YWdLZXlgIGFuZCBgdGFnVmFsdWVzYFxuICAgKiBmcm9tIHtAbGluayBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzLnRhcmdldFJlc291cmNlfS4gVGFnIGZpbHRlcnMgYXJlIHBhc3NlZFxuICAgKiBvbmx5IHZpYSB0aGF0IHBheWxvYWQgKG5vdCB2aWEgYFRBR19LRVlgIC8gYFRBR19WQUxVRVNgIGVudmlyb25tZW50IHZhcmlhYmxlcykuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIC8vIFJlcXVpcmVkIGJ5IGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgKF4wLjYrKTogRXh0ZW5zaW9uIEhUVFAgQVBJICsgQVdTX1NFU1NJT05fVE9LRU4uXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgIGNhY2hlU2l6ZTogNTAwLFxuICAgICAgICBsb2dMZXZlbDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5JTkZPLFxuICAgICAgfSksXG4gICAgICByb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvblJvbGUnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQSByb2xlIHRvIGNvbnRyb2wgdGhlIFJEUyBEYXRhYmFzZSBvciBDbHVzdGVyLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uTG9nR3JvdXAnLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSksXG4gICAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgc3lzdGVtTG9nTGV2ZWxWMjogbGFtYmRhLlN5c3RlbUxvZ0xldmVsLklORk8sXG4gICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsVjI6IGxhbWJkYS5BcHBsaWNhdGlvbkxvZ0xldmVsLklORk8sXG4gICAgfSk7XG4gICAgLy8gR3JhbnQgUkRTIGRlc2NyaWJlIChzdGF0dXMgYW5kIFRhZ0xpc3QpIGFuZCBzdG9wIHBlcm1pc3Npb25zIHRvIHRoZSBoYW5kbGVyIHJvbGUuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNBdXRvU3RhcnRDb250cm9sJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3JkczpEZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgICAgJ3JkczpEZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgICAncmRzOlN0b3BEQkluc3RhbmNlJyxcbiAgICAgICAgJ3JkczpTdG9wREJDbHVzdGVyJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgU2xhY2sgc2VjcmV0XG4gICAgc2xhY2tTZWNyZXQuZ3JhbnRSZWFkKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbik7XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMgPSBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIGNvbnN0IGVuYWJsZVJ1bGU6IGJvb2xlYW4gPSAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLmVuYWJsZVJ1bGUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVSdWxlO1xuICAgIH0pKCk7XG5cbiAgICAvLyBQYXNzIHRoZSBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbXMgdG8gdGhlIExhbWJkYSB0YXJnZXQgaW5wdXQuXG4gICAgY29uc3QgbGFtYmRhSW5wdXQgPSBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIEluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCSW5zdGFuY2VFdmVudCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncmRzIGRiIGluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZS4nLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLnJkcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTU0J10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIEV2ZW50QnJpZGdlIGJ5IFJEUyBEQiBDbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCQ2x1c3RlckV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdkYiBjbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZScsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIENsdXN0ZXIgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1MyddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuTGFtYmRhRnVuY3Rpb24oYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgICAgIGV2ZW50OiBsYW1iZGFJbnB1dCxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBNkQ7QUFDN0QsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQXNDaEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRSxDQUM3QyxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBRTFEOzs7OztHQUtHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUF5QyxFQUFRLEVBQUU7SUFDeEUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkQsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFD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RUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNyQyxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSx3Q0FBd0M7WUFDckQsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUI7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3hELGFBQWEsRUFBRSxDQUFDO29CQUNoQixLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFsSUgsc0VBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQtZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRhZy1iYXNlZCBjcml0ZXJpYSBldmFsdWF0ZWQgaW4gdGhlIExhbWJkYSBoYW5kbGVyIChub3Qgb24gdGhlIEV2ZW50QnJpZGdlIHJ1bGUpLlxuICogUmVzb3VyY2VzIHdob3NlIHRhZyB2YWx1ZSBmb3Ige0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ0tleX0gaXMgbm90IGluXG4gKiB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzfSBhcmUgc2tpcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIChlLmcuIFwiRW52aXJvbm1lbnRcIiwgXCJBdXRvU3RhcnRQcmV2ZW50XCIpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIHByb3RlY3RlZCAoZS5nLiBbXCJwcm9kdWN0aW9uXCJdKS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBzZWNyZXRzIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS5cbiAqIE9taXQge0BsaW5rIFNlY3JldHMuc2xhY2tTZWNyZXROYW1lfSB0byBza2lwIFNsYWNrIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0cyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGNvbnRhaW5pbmcgU2xhY2sgdG9rZW4gYW5kIGNoYW5uZWwuXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIGhhbmRsZXIgc3RvcHMgbWF0Y2hpbmcgUkRTIHJlc291cmNlcyBhbmQgZG9lcyBub3QgcG9zdCB0byBTbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHNsYWNrU2VjcmV0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBhIGNvbmNyZXRlIHN0cmluZyBpcyBlbXB0eSBvciB3aGl0ZXNwYWNlLW9ubHkuXG4gKiBVbnJlc29sdmVkIENESyB0b2tlbnMgYXJlIHRyZWF0ZWQgYXMgcHJlc2VudCBiZWNhdXNlIHRoZWlyIHZhbHVlIGlzIHVua25vd24gYXQgc3ludGhlc2lzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFByb3Agc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgYmxhbmsuXG4gKi9cbmNvbnN0IGlzQmxhbmtUZXh0ID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICFUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDA7XG5cbi8qKlxuICogUmVqZWN0cyBlbXB0eSB0YWcgZmlsdGVycyBhbmQgU2xhY2sgc2VjcmV0IG5hbWVzIGJlZm9yZSByZXNvdXJjZXMgYXJlIGNyZWF0ZWQuXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29uc3RydWN0IHByb3BzIHRvIHZhbGlkYXRlLlxuICogQHRocm93cyBXaGVuIHRhZ0tleSBvciBhIHRhZyB2YWx1ZSBpcyBibGFuaywgdGFnVmFsdWVzIGlzIGVtcHR5LCBvciBzbGFja1NlY3JldE5hbWUgaXMgcHJlc2VudCBidXQgYmxhbmsuXG4gKi9cbmNvbnN0IHZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpOiB2b2lkID0+IHtcbiAgaWYgKGlzQmxhbmtUZXh0KHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ0tleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgfVxuICBpZiAocHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUuJyk7XG4gIH1cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMpIHtcbiAgICBpZiAoaXNCbGFua1RleHQodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyBtdXN0IG5vdCBjb250YWluIGVtcHR5IHN0cmluZ3MuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNsYWNrU2VjcmV0TmFtZSA9IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lO1xuICBpZiAoc2xhY2tTZWNyZXROYW1lICE9PSB1bmRlZmluZWQgJiYgaXNCbGFua1RleHQoc2xhY2tTZWNyZXROYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2VjcmV0cy5zbGFja1NlY3JldE5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgUkRTIGRlc2NyaWJlIGFuZCBzdG9wIGFjdGlvbnMgb25seSAobm8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgRHVyYWJsZSBMYW1iZGEsIEV2ZW50QnJpZGdlIHJ1bGVzLCBhbmQgSUFNIHBvbGljaWVzLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIHJlY2VpdmVzIGB7IGV2ZW50LCBwYXJhbXMgfWAgd2hlcmUgYHBhcmFtc2AgY2FycmllcyBgdGFnS2V5YCBhbmQgYHRhZ1ZhbHVlc2BcbiAgICogZnJvbSB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcy50YXJnZXRSZXNvdXJjZX0uIFRhZyBmaWx0ZXJzIGFyZSBwYXNzZWRcbiAgICogb25seSB2aWEgdGhhdCBwYXlsb2FkIChub3QgdmlhIGBUQUdfS0VZYCAvIGBUQUdfVkFMVUVTYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCByZXNvdXJjZSAodGFnIGtleS92YWx1ZXMpLCBlbmFibGUgcnVsZSBmbGFnLCBhbmQgc2VjcmV0cy5cbiAgICogQHRocm93cyBXaGVuIHRhZ0tleSBvciBhIHRhZyB2YWx1ZSBpcyBibGFuaywgdGFnVmFsdWVzIGlzIGVtcHR5LCBvciBzbGFja1NlY3JldE5hbWUgaXMgcHJlc2VudCBidXQgYmxhbmsuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZTtcbiAgICBjb25zdCBzbGFja1NlY3JldCA9IHNsYWNrU2VjcmV0TmFtZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBzbGFja1NlY3JldE5hbWUpO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnMtYmFzZWQgUnVubmluZyBTY2hlZHVsZXIgKHByZXZpb3VzIFN0ZXAgRnVuY3Rpb25zIGxvZ2ljIGltcGxlbWVudGVkIGluIExhbWJkYSkuXG4gICAgLy8gRHVyYWJsZSBFeGVjdXRpb24gcmVxdWlyZXMgTm9kZS5qcyAyMisuXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uID0gbmV3IEF1dG9TdGFydFByZXZlbnRGdW5jdGlvbih0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uJywge1xuICAgICAgZGVzY3JpcHRpb246ICdBIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIFJEUyBEYXRhYmFzZSBvciBDbHVzdGVyIGZyb20gc3RhcnRpbmcgYXV0b21hdGljYWxseS4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgIGR1cmFibGVDb25maWc6IHtcbiAgICAgICAgZXhlY3V0aW9uVGltZW91dDogRHVyYXRpb24uaG91cnMoMiksXG4gICAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDogc2xhY2tTZWNyZXQgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICBTTEFDS19TRUNSRVRfTkFNRTogc2xhY2tTZWNyZXQuc2VjcmV0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIC8vIFJlcXVpcmVkIGJ5IGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgKF4wLjYrKSB3aGVuIFNsYWNrIGlzIGNvbmZpZ3VyZWQuXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBzbGFja1NlY3JldCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICAgIGNhY2hlU2l6ZTogNTAwLFxuICAgICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0Egcm9sZSB0byBjb250cm9sIHRoZSBSRFMgRGF0YWJhc2Ugb3IgQ2x1c3Rlci4nLFxuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeScpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICBsb2dHcm91cDogbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5USFJFRV9NT05USFMsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIC8vIEdyYW50IFJEUyBkZXNjcmliZSAoc3RhdHVzIGFuZCBUYWdMaXN0KSBhbmQgc3RvcCBwZXJtaXNzaW9ucyB0byB0aGUgaGFuZGxlciByb2xlLlxuICAgIGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnUmRzQXV0b1N0YXJ0Q29udHJvbCcsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdyZHM6RGVzY3JpYmVEQkluc3RhbmNlcycsXG4gICAgICAgICdyZHM6RGVzY3JpYmVEQkNsdXN0ZXJzJyxcbiAgICAgICAgJ3JkczpTdG9wREJJbnN0YW5jZScsXG4gICAgICAgICdyZHM6U3RvcERCQ2x1c3RlcicsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgaWYgKHNsYWNrU2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNsYWNrU2VjcmV0LmdyYW50UmVhZChhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcyA9IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgY29uc3QgZW5hYmxlUnVsZSA9IHByb3BzLmVuYWJsZVJ1bGUgIT09IGZhbHNlO1xuXG4gICAgLy8gUGFzcyB0aGUgRXZlbnRCcmlkZ2UgZXZlbnQgYW5kIHRhZyBmaWx0ZXIgcGFyYW1zIHRvIHRoZSBMYW1iZGEgdGFyZ2V0IGlucHV0LlxuICAgIGNvbnN0IGxhbWJkYUlucHV0ID0gZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgIGV2ZW50OiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJCcpLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICB0YWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIEV2ZW50QnJpZGdlIGJ5IFJEUyBEQiBJbnN0YW5jZSBhdXRvIHN0YXJ0IGV2ZW50XG4gICAgbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdEQkluc3RhbmNlRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3JkcyBkYiBpbnN0YW5jZSBhdXRvIHN0YXJ0IGV2ZW50IGNhdGNoIHJ1bGUuJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgSW5zdGFuY2UgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1NCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuTGFtYmRhRnVuY3Rpb24oYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgICAgIGV2ZW50OiBsYW1iZGFJbnB1dCxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgQ2x1c3RlciBhdXRvIHN0YXJ0IGV2ZW50XG4gICAgbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdEQkNsdXN0ZXJFdmVudCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnZGIgY2x1c3RlciBhdXRvIHN0YXJ0IGV2ZW50IGNhdGNoIHJ1bGUnLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLnJkcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ1JEUyBEQiBDbHVzdGVyIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTMnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -8,14 +8,14 @@ import { NoOpResult, StoppedResult } from './auto-start-prevent.predicates';
8
8
  * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
9
9
  * 3. If status is `available`, call StopDB* and wait until `stopped`.
10
10
  * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
11
- * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
11
+ * 5. When `SLACK_SECRET_NAME` is set, post to Slack only after StopDB* was invoked and the resource reached `stopped`. When it is unset, skip Slack.
12
12
  *
13
13
  * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
14
14
  *
15
15
  * @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
16
16
  * @param context - Durable execution context for steps and waits.
17
17
  * @returns {@link StoppedResult} or {@link NoOpResult}.
18
- * @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
18
+ * @throws When the payload is invalid, the event is unsupported, a configured Slack secret is invalid, or stop did not reach `stopped`.
19
19
  */
20
20
  export declare const processAutoStartPrevent: (input: unknown, context: DurableContext) => Promise<StoppedResult | NoOpResult>;
21
21
  export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;
@@ -17,28 +17,33 @@ const rdsClient = new client_rds_1.RDSClient({});
17
17
  * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
18
18
  * 3. If status is `available`, call StopDB* and wait until `stopped`.
19
19
  * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
20
- * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
20
+ * 5. When `SLACK_SECRET_NAME` is set, post to Slack only after StopDB* was invoked and the resource reached `stopped`. When it is unset, skip Slack.
21
21
  *
22
22
  * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
23
23
  *
24
24
  * @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
25
25
  * @param context - Durable execution context for steps and waits.
26
26
  * @returns {@link StoppedResult} or {@link NoOpResult}.
27
- * @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
27
+ * @throws When the payload is invalid, the event is unsupported, a configured Slack secret is invalid, or stop did not reach `stopped`.
28
28
  */
29
29
  const processAutoStartPrevent = async (input, context) => {
30
30
  const { event, params } = (0, auto_start_prevent_predicates_1.normalizeInput)(input);
31
31
  const { detail, 'detail-type': detailType } = event;
32
32
  const slackSecretName = strict_env_resolver_1.StrictEnvResolver.resolve('SLACK_SECRET_NAME', strict_env_resolver_1.StrictEnvType.String, {
33
33
  trim: true,
34
+ default: '',
34
35
  });
35
36
  // Requires AWS Parameters and Secrets Extension (ParamsAndSecrets layer) and
36
37
  // AWS_SESSION_TOKEN from the Lambda runtime (aws-lambda-secret-fetcher ^0.6+).
37
- const slackSecretValue = await context.step('fetch-slack-secret', async () => {
38
- return aws_lambda_secret_fetcher_1.secretFetcher.getSecretValue(slackSecretName);
39
- });
40
- if (!(0, auto_start_prevent_predicates_1.isSlackSecret)(slackSecretValue)) {
41
- throw new Error('Slack secret must be JSON with non-empty token and channel.');
38
+ let slackSecret;
39
+ if (slackSecretName.length > 0) {
40
+ const slackSecretValue = await context.step('fetch-slack-secret', async () => {
41
+ return aws_lambda_secret_fetcher_1.secretFetcher.getSecretValue(slackSecretName);
42
+ });
43
+ if (!(0, auto_start_prevent_predicates_1.isSlackSecret)(slackSecretValue)) {
44
+ throw new Error('Slack secret must be JSON with non-empty token and channel.');
45
+ }
46
+ slackSecret = slackSecretValue;
42
47
  }
43
48
  const isInstance = (0, auto_start_prevent_predicates_1.isDbInstanceAutoStart)(detailType, detail);
44
49
  const isCluster = (0, auto_start_prevent_predicates_1.isDbClusterAutoStart)(detailType, detail);
@@ -142,16 +147,19 @@ const processAutoStartPrevent = async (input, context) => {
142
147
  throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
143
148
  }
144
149
  const { region, account } = (0, auto_start_prevent_predicates_1.parseRdsSourceArn)(detail.SourceArn);
145
- const client = new web_api_1.WebClient(slackSecretValue.token);
146
- await context.step('post-slack-messages', async () => {
147
- return client.chat.postMessage((0, auto_start_prevent_predicates_1.buildSlackStopNotification)({
148
- channel: slackSecretValue.channel,
149
- sourceType: detail.SourceType,
150
- sourceIdentifier: detail.SourceIdentifier,
151
- account,
152
- region,
153
- }));
154
- });
150
+ if (slackSecret !== undefined) {
151
+ const channel = slackSecret.channel;
152
+ const client = new web_api_1.WebClient(slackSecret.token);
153
+ await context.step('post-slack-messages', async () => {
154
+ return client.chat.postMessage((0, auto_start_prevent_predicates_1.buildSlackStopNotification)({
155
+ channel,
156
+ sourceType: detail.SourceType,
157
+ sourceIdentifier: detail.SourceIdentifier,
158
+ account,
159
+ region,
160
+ }));
161
+ });
162
+ }
155
163
  return (0, auto_start_prevent_predicates_1.buildStoppedResult)({
156
164
  finalStatus,
157
165
  account,
@@ -161,4 +169,4 @@ const processAutoStartPrevent = async (input, context) => {
161
169
  };
162
170
  exports.processAutoStartPrevent = processAutoStartPrevent;
163
171
  exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(exports.processAutoStartPrevent);
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsbUZBa0J5QztBQUV6Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztJQUNILDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsT0FBTyx5Q0FBYSxDQUFDLGNBQWMsQ0FBYyxlQUFlLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFBLDZDQUFhLEVBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNqRixDQUFD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QUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7WUFDekIsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU87WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsT0FBTztZQUNQLE1BQU07U0FDUCxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFBLGtEQUFrQixFQUFDO1FBQ3hCLFdBQVc7UUFDWCxPQUFPO1FBQ1AsTUFBTTtRQUNOLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO0tBQ3BDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQS9LVyxRQUFBLHVCQUF1QiwyQkErS2xDO0FBRVcsUUFBQSxPQUFPLEdBQUcsSUFBQSwrQ0FBb0IsRUFBQywrQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aER1cmFibGVFeGVjdXRpb24sIER1cmFibGVDb250ZXh0IH0gZnJvbSAnQGF3cy9kdXJhYmxlLWV4ZWN1dGlvbi1zZGstanMnO1xuaW1wb3J0IHtcbiAgUkRTQ2xpZW50LFxuICBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCxcbiAgU3RvcERCSW5zdGFuY2VDb21tYW5kLFxuICBTdG9wREJDbHVzdGVyQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJkcyc7XG5pbXBvcnQgeyBXZWJDbGllbnQgfSBmcm9tICdAc2xhY2svd2ViLWFwaSc7XG5pbXBvcnQgeyBzZWNyZXRGZXRjaGVyIH0gZnJvbSAnYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlcic7XG5pbXBvcnQgeyBTdHJpY3RFbnZSZXNvbHZlciwgU3RyaWN0RW52VHlwZSB9IGZyb20gJ3N0cmljdC1lbnYtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24sXG4gIGJ1aWxkU3RvcHBlZFJlc3VsdCxcbiAgZGVjaWRlQWZ0ZXJUYWdNYXRjaCxcbiAgaXNEYkNsdXN0ZXJBdXRvU3RhcnQsXG4gIGlzRGJJbnN0YW5jZUF1dG9TdGFydCxcbiAgaXNTbGFja1NlY3JldCxcbiAgbWF0Y2hUYWcsXG4gIG5vcm1hbGl6ZUlucHV0LFxuICBOb09wUmVzdWx0LFxuICBwYXJzZVJkc1NvdXJjZUFybixcbiAgV2FpdFN0YXRlLFxuICBTbGFja1NlY3JldCxcbiAgU3RvcHBlZFJlc3VsdCxcbiAgVGFnLFxuICB0YWdNaXNtYXRjaE5vT3AsXG4gIHdhaXRTdHJhdGVneVVudGlsU3RhYmxlLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG59IGZyb20gJy4vYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMnO1xuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGhhbmRsZXIgZm9yIFJEUyBhdXRvLXN0YXJ0IHByZXZlbnRpb24uXG4gKlxuICogV29ya2Zsb3c6XG4gKiAxLiBXYWl0IDEgbWludXRlLCB0aGVuIHdhaXQgb24gRGVzY3JpYmVEQiogdW50aWwgdGhlIHJlc291cmNlIGxlYXZlcyB0cmFuc2l0aW9uYWwgc3RhdHVzZXMuXG4gKiAyLiBSZWFkIHRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2UgYFRhZ0xpc3RgOyBza2lwIHdoZW4ge0BsaW5rIG1hdGNoVGFnfSByZXR1cm5zIGZhbHNlLlxuICogMy4gSWYgc3RhdHVzIGlzIGBhdmFpbGFibGVgLCBjYWxsIFN0b3BEQiogYW5kIHdhaXQgdW50aWwgYHN0b3BwZWRgLlxuICogNC4gSWYgYWxyZWFkeSBgc3RvcHBlZGAgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiosIHJldHVybiB7QGxpbmsgTm9PcFJlc3VsdH0gKG5vIFNsYWNrIG5vdGlmaWNhdGlvbikuXG4gKiA1LiBQb3N0IHRvIFNsYWNrIG9ubHkgd2hlbiBTdG9wREIqIHdhcyBpbnZva2VkIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogVGFnIG1hdGNoaW5nIHVzZXMgUkRTIERlc2NyaWJlIEFQSXMgb25seTsgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGlzIG5vdCB1c2VkLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgZnJvbSBFdmVudEJyaWRnZSBJbnB1dFRyYW5zZm9ybWVyIChzYW1lIHNoYXBlIHJlcXVpcmVkIGZvciBkaXJlY3QgSW52b2tlKS5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBpbnZhbGlkLCByZXF1aXJlZCBlbnYgdmFycyBhcmUgbWlzc2luZywgdGhlIGV2ZW50IGlzIHVuc3VwcG9ydGVkLCBzZWNyZXRzIGFyZSBpbnZhbGlkLCBvciBzdG9wIGRpZCBub3QgcmVhY2ggYHN0b3BwZWRgLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0F1dG9TdGFydFByZXZlbnQgPSBhc3luYyAoXG4gIGlucHV0OiB1bmtub3duLFxuICBjb250ZXh0OiBEdXJhYmxlQ29udGV4dCxcbik6IFByb21pc2U8U3RvcHBlZFJlc3VsdCB8IE5vT3BSZXN1bHQ+ID0+IHtcbiAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gIGNvbnN0IHsgZGV0YWlsLCAnZGV0YWlsLXR5cGUnOiBkZXRhaWxUeXBlIH0gPSBldmVudDtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nLCB7XG4gICAgdHJpbTogdHJ1ZSxcbiAgfSk7XG4gIC8vIFJlcXVpcmVzIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIEV4dGVuc2lvbiAoUGFyYW1zQW5kU2VjcmV0cyBsYXllcikgYW5kXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOIGZyb20gdGhlIExhbWJkYSBydW50aW1lIChhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjYrKS5cbiAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlPFNsYWNrU2VjcmV0PihzbGFja1NlY3JldE5hbWUpO1xuICB9KTtcblxuICBpZiAoIWlzU2xhY2tTZWNyZXQoc2xhY2tTZWNyZXRWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGJlIEpTT04gd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbmNlID0gaXNEYkluc3RhbmNlQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG4gIGNvbnN0IGlzQ2x1c3RlciA9IGlzRGJDbHVzdGVyQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG5cbiAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgZXZlbnQ6IGRldGFpbC10eXBlPSR7ZGV0YWlsVHlwZX0sIFNvdXJjZVR5cGU9JHtkZXRhaWwuU291cmNlVHlwZX0sIEV2ZW50SUQ9JHtkZXRhaWwuRXZlbnRJRH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBJbml0aWFsIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgZGVzY3JpYmUgKGFsbG93cyBSRFMgdG8gcmVwb3J0IGEgc3RhYmxlIHN0YXR1cykuXG4gIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgLy8gV2FpdCB1bnRpbCB0aGUgcmVzb3VyY2UgaXMgbm8gbG9uZ2VyIGluIGEgdHJhbnNpdGlvbmFsIHN0YXR1czsgY2FwdHVyZSBzdGF0dXMgYW5kIFRhZ0xpc3QuXG4gIGNvbnN0IGZpcnN0RGVzY3JpYmUgPSBhd2FpdCBjb250ZXh0LndhaXRGb3JDb25kaXRpb248V2FpdFN0YXRlPihcbiAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYiA9IHJlcy5EQkluc3RhbmNlcz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGRiPy5EQkluc3RhbmNlSWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB0YWdzOiAoZGI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbHVzdGVyID0gcmVzLkRCQ2x1c3RlcnM/LlswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgaWRlbnRpZmllcjogY2x1c3Rlcj8uREJDbHVzdGVySWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgdGFnczogKGNsdXN0ZXI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICBzdGF0dXM6ICdzdGFydGluZycsXG4gICAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICAgIHdhaXRTdHJhdGVneTogd2FpdFN0cmF0ZWd5VW50aWxTdGFibGUsXG4gICAgfSxcbiAgKTtcblxuICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgaWYgKCFtYXRjaFRhZyhwYXJhbXMsIGZpcnN0RGVzY3JpYmUudGFncykpIHtcbiAgICByZXR1cm4gdGFnTWlzbWF0Y2hOb09wKGZpcnN0RGVzY3JpYmUuc3RhdHVzKTtcbiAgfVxuXG4gIGxldCBkaWRTdG9wID0gZmFsc2U7XG4gIGxldCBmaW5hbFN0YXR1cyA9IGZpcnN0RGVzY3JpYmUuc3RhdHVzO1xuXG4gIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgd2FpdCB1bnRpbCBzdG9wcGVkLlxuICBjb25zdCBhZnRlclRhZ01hdGNoID0gZGVjaWRlQWZ0ZXJUYWdNYXRjaChmaXJzdERlc2NyaWJlLnN0YXR1cyk7XG4gIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdzdG9wJykge1xuICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICBhd2FpdCBjb250ZXh0LnN0ZXAoJ3N0b3AtZGItaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgU3RvcERCQ2x1c3RlckNvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wcGVkID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFdhaXRTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiBjbHVzdGVyPy5TdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBzdGF0dXM6IGZpcnN0RGVzY3JpYmUuc3RhdHVzLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICBmaW5hbFN0YXR1cyA9IHN0b3BwZWQuc3RhdHVzO1xuICB9XG5cbiAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICBpZiAoIWRpZFN0b3ApIHtcbiAgICBpZiAoYWZ0ZXJUYWdNYXRjaC5raW5kID09PSAnbm8tb3AnKSB7XG4gICAgICByZXR1cm4gYWZ0ZXJUYWdNYXRjaC5yZXN1bHQ7XG4gICAgfVxuICAgIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhZnRlclRhZ01hdGNoLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhaWwgd2hlbiBTdG9wREIqIHdhcyBjYWxsZWQgYnV0IHRoZSByZXNvdXJjZSBkaWQgbm90IHJlYWNoIHN0b3BwZWQuXG4gIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBwYXJzZVJkc1NvdXJjZUFybihkZXRhaWwuU291cmNlQXJuKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgV2ViQ2xpZW50KHNsYWNrU2VjcmV0VmFsdWUudG9rZW4pO1xuXG4gIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gY2xpZW50LmNoYXQucG9zdE1lc3NhZ2UoXG4gICAgICBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbih7XG4gICAgICAgIGNoYW5uZWw6IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbCxcbiAgICAgICAgc291cmNlVHlwZTogZGV0YWlsLlNvdXJjZVR5cGUsXG4gICAgICAgIHNvdXJjZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICBhY2NvdW50LFxuICAgICAgICByZWdpb24sXG4gICAgICB9KSxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gYnVpbGRTdG9wcGVkUmVzdWx0KHtcbiAgICBmaW5hbFN0YXR1cyxcbiAgICBhY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHdpdGhEdXJhYmxlRXhlY3V0aW9uKHByb2Nlc3NBdXRvU3RhcnRQcmV2ZW50KTtcbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsbUZBa0J5QztBQUV6Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBQ0gsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxJQUFJLFdBQW9DLENBQUM7SUFDekMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNFLE9BQU8seUNBQWEsQ0FBQyxjQUFjLENBQWMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBQSw2Q0FBYSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxxREFBcUIsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxvREFBb0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFVBQVUsZ0JBQWdCLE1BQU0sQ0FBQyxVQUFVLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyw2RkFBNkY7SUFDN0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztnQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztnQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztZQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjtZQUNuRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTtTQUN4QyxDQUFDO0lBQ0osQ0FBQyxFQUNEO1FBQ0UsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDcEM7UUFDRCxZQUFZLEVBQUUsdURBQXVCO0tBQ3RDLENBQ0YsQ0FBQztJQUVGLHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsSUFBQSx3Q0FBUSxFQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLElBQUEsK0NBQWUsRUFBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRXZDLHlEQUF5RDtJQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFBLG1EQUFtQixFQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLGtDQUFxQixDQUFDO29CQUN4QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQy9DLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbEIsSUFBSSxpQ0FBb0IsQ0FBQztvQkFDdkIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDN0MsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDNUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztvQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDOUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztvQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztnQkFDNUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM3QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVM7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjthQUNwRSxDQUFDO1FBQ0osQ0FBQyxFQUNEO1lBQ0UsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2FBQ3JDO1lBQ0QsWUFBWSxFQUFFLHdEQUF3QjtTQUN2QyxDQUNGLENBQUM7UUFFRixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLGlEQUFpQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7Z0JBQ3pCLE9BQU87Z0JBQ1AsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxPQUFPO2dCQUNQLE1BQU07YUFDUCxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBQSxrREFBa0IsRUFBQztRQUN4QixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFyTFcsUUFBQSx1QkFBdUIsMkJBcUxsQztBQUVXLFFBQUEsT0FBTyxHQUFHLElBQUEsK0NBQW9CLEVBQUMsK0JBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhEdXJhYmxlRXhlY3V0aW9uLCBEdXJhYmxlQ29udGV4dCB9IGZyb20gJ0Bhd3MvZHVyYWJsZS1leGVjdXRpb24tc2RrLWpzJztcbmltcG9ydCB7XG4gIFJEU0NsaWVudCxcbiAgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQsXG4gIFN0b3BEQkluc3RhbmNlQ29tbWFuZCxcbiAgU3RvcERCQ2x1c3RlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yZHMnO1xuaW1wb3J0IHsgV2ViQ2xpZW50IH0gZnJvbSAnQHNsYWNrL3dlYi1hcGknO1xuaW1wb3J0IHsgc2VjcmV0RmV0Y2hlciB9IGZyb20gJ2F3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXInO1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIGJ1aWxkU2xhY2tTdG9wTm90aWZpY2F0aW9uLFxuICBidWlsZFN0b3BwZWRSZXN1bHQsXG4gIGRlY2lkZUFmdGVyVGFnTWF0Y2gsXG4gIGlzRGJDbHVzdGVyQXV0b1N0YXJ0LFxuICBpc0RiSW5zdGFuY2VBdXRvU3RhcnQsXG4gIGlzU2xhY2tTZWNyZXQsXG4gIG1hdGNoVGFnLFxuICBub3JtYWxpemVJbnB1dCxcbiAgTm9PcFJlc3VsdCxcbiAgcGFyc2VSZHNTb3VyY2VBcm4sXG4gIFdhaXRTdGF0ZSxcbiAgU2xhY2tTZWNyZXQsXG4gIFN0b3BwZWRSZXN1bHQsXG4gIFRhZyxcbiAgdGFnTWlzbWF0Y2hOb09wLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSxcbiAgd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkLFxufSBmcm9tICcuL2F1dG8tc3RhcnQtcHJldmVudC5wcmVkaWNhdGVzJztcblxuLyoqIFNoYXJlZCBSRFMgY2xpZW50IGZvciBkZXNjcmliZSBhbmQgc3RvcCBBUEkgY2FsbHMuICovXG5jb25zdCByZHNDbGllbnQgPSBuZXcgUkRTQ2xpZW50KHt9KTtcblxuLyoqXG4gKiBEdXJhYmxlIExhbWJkYSBoYW5kbGVyIGZvciBSRFMgYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICpcbiAqIFdvcmtmbG93OlxuICogMS4gV2FpdCAxIG1pbnV0ZSwgdGhlbiB3YWl0IG9uIERlc2NyaWJlREIqIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICogMi4gUmVhZCB0YWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlIGBUYWdMaXN0YDsgc2tpcCB3aGVuIHtAbGluayBtYXRjaFRhZ30gcmV0dXJucyBmYWxzZS5cbiAqIDMuIElmIHN0YXR1cyBpcyBgYXZhaWxhYmxlYCwgY2FsbCBTdG9wREIqIGFuZCB3YWl0IHVudGlsIGBzdG9wcGVkYC5cbiAqIDQuIElmIGFscmVhZHkgYHN0b3BwZWRgIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLCByZXR1cm4ge0BsaW5rIE5vT3BSZXN1bHR9IChubyBTbGFjayBub3RpZmljYXRpb24pLlxuICogNS4gV2hlbiBgU0xBQ0tfU0VDUkVUX05BTUVgIGlzIHNldCwgcG9zdCB0byBTbGFjayBvbmx5IGFmdGVyIFN0b3BEQiogd2FzIGludm9rZWQgYW5kIHRoZSByZXNvdXJjZSByZWFjaGVkIGBzdG9wcGVkYC4gV2hlbiBpdCBpcyB1bnNldCwgc2tpcCBTbGFjay5cbiAqXG4gKiBUYWcgbWF0Y2hpbmcgdXNlcyBSRFMgRGVzY3JpYmUgQVBJcyBvbmx5OyBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkgaXMgbm90IHVzZWQuXG4gKlxuICogQHBhcmFtIGlucHV0IC0gYHsgZXZlbnQsIHBhcmFtcyB9YCBmcm9tIEV2ZW50QnJpZGdlIElucHV0VHJhbnNmb3JtZXIgKHNhbWUgc2hhcGUgcmVxdWlyZWQgZm9yIGRpcmVjdCBJbnZva2UpLlxuICogQHBhcmFtIGNvbnRleHQgLSBEdXJhYmxlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBzdGVwcyBhbmQgd2FpdHMuXG4gKiBAcmV0dXJucyB7QGxpbmsgU3RvcHBlZFJlc3VsdH0gb3Ige0BsaW5rIE5vT3BSZXN1bHR9LlxuICogQHRocm93cyBXaGVuIHRoZSBwYXlsb2FkIGlzIGludmFsaWQsIHRoZSBldmVudCBpcyB1bnN1cHBvcnRlZCwgYSBjb25maWd1cmVkIFNsYWNrIHNlY3JldCBpcyBpbnZhbGlkLCBvciBzdG9wIGRpZCBub3QgcmVhY2ggYHN0b3BwZWRgLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0F1dG9TdGFydFByZXZlbnQgPSBhc3luYyAoXG4gIGlucHV0OiB1bmtub3duLFxuICBjb250ZXh0OiBEdXJhYmxlQ29udGV4dCxcbik6IFByb21pc2U8U3RvcHBlZFJlc3VsdCB8IE5vT3BSZXN1bHQ+ID0+IHtcbiAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gIGNvbnN0IHsgZGV0YWlsLCAnZGV0YWlsLXR5cGUnOiBkZXRhaWxUeXBlIH0gPSBldmVudDtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nLCB7XG4gICAgdHJpbTogdHJ1ZSxcbiAgICBkZWZhdWx0OiAnJyxcbiAgfSk7XG4gIC8vIFJlcXVpcmVzIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIEV4dGVuc2lvbiAoUGFyYW1zQW5kU2VjcmV0cyBsYXllcikgYW5kXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOIGZyb20gdGhlIExhbWJkYSBydW50aW1lIChhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjYrKS5cbiAgbGV0IHNsYWNrU2VjcmV0OiBTbGFja1NlY3JldCB8IHVuZGVmaW5lZDtcbiAgaWYgKHNsYWNrU2VjcmV0TmFtZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWU8U2xhY2tTZWNyZXQ+KHNsYWNrU2VjcmV0TmFtZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpc1NsYWNrU2VjcmV0KHNsYWNrU2VjcmV0VmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGJlIEpTT04gd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gICAgfVxuICAgIHNsYWNrU2VjcmV0ID0gc2xhY2tTZWNyZXRWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFuY2UgPSBpc0RiSW5zdGFuY2VBdXRvU3RhcnQoZGV0YWlsVHlwZSwgZGV0YWlsKTtcbiAgY29uc3QgaXNDbHVzdGVyID0gaXNEYkNsdXN0ZXJBdXRvU3RhcnQoZGV0YWlsVHlwZSwgZGV0YWlsKTtcblxuICBpZiAoIWlzSW5zdGFuY2UgJiYgIWlzQ2x1c3Rlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBldmVudDogZGV0YWlsLXR5cGU9JHtkZXRhaWxUeXBlfSwgU291cmNlVHlwZT0ke2RldGFpbC5Tb3VyY2VUeXBlfSwgRXZlbnRJRD0ke2RldGFpbC5FdmVudElEfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluaXRpYWwgZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBkZXNjcmliZSAoYWxsb3dzIFJEUyB0byByZXBvcnQgYSBzdGFibGUgc3RhdHVzKS5cbiAgYXdhaXQgY29udGV4dC53YWl0KHsgbWludXRlczogMSB9KTtcblxuICAvLyBXYWl0IHVudGlsIHRoZSByZXNvdXJjZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdHVzOyBjYXB0dXJlIHN0YXR1cyBhbmQgVGFnTGlzdC5cbiAgY29uc3QgZmlyc3REZXNjcmliZSA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxXYWl0U3RhdGU+KFxuICAgIGFzeW5jIChfc3RhdGUsIF9jdHgpID0+IHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiBkYj8uREJJbnN0YW5jZVN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChkYj8uVGFnTGlzdCA/PyBbXSkgYXMgVGFnW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICBuZXcgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCh7XG4gICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBjbHVzdGVyPy5TdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB0YWdzOiAoY2x1c3Rlcj8uVGFnTGlzdCA/PyBbXSkgYXMgVGFnW10sXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgaWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICB9LFxuICAgICAgd2FpdFN0cmF0ZWd5OiB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSxcbiAgICB9LFxuICApO1xuXG4gIC8vIFNraXAgd2hlbiBUYWdMaXN0IGlzIG1pc3Npbmcgb3IgZG9lcyBub3QgbWF0Y2ggdGFnS2V5IC8gdGFnVmFsdWVzLlxuICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgIHJldHVybiB0YWdNaXNtYXRjaE5vT3AoZmlyc3REZXNjcmliZS5zdGF0dXMpO1xuICB9XG5cbiAgbGV0IGRpZFN0b3AgPSBmYWxzZTtcbiAgbGV0IGZpbmFsU3RhdHVzID0gZmlyc3REZXNjcmliZS5zdGF0dXM7XG5cbiAgLy8gV2hlbiBhdmFpbGFibGUsIGludm9rZSBTdG9wREIqIGFuZCB3YWl0IHVudGlsIHN0b3BwZWQuXG4gIGNvbnN0IGFmdGVyVGFnTWF0Y2ggPSBkZWNpZGVBZnRlclRhZ01hdGNoKGZpcnN0RGVzY3JpYmUuc3RhdHVzKTtcbiAgaWYgKGFmdGVyVGFnTWF0Y2gua2luZCA9PT0gJ3N0b3AnKSB7XG4gICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IFN0b3BEQkluc3RhbmNlQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgY29udGV4dC5zdGVwKCdzdG9wLWRiLWNsdXN0ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBTdG9wREJDbHVzdGVyQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BwZWQgPSBhd2FpdCBjb250ZXh0LndhaXRGb3JDb25kaXRpb248V2FpdFN0YXRlPihcbiAgICAgIGFzeW5jIChfc3RhdGUsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCh7XG4gICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBkYj8uREJJbnN0YW5jZVN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kKHtcbiAgICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gcmVzLkRCQ2x1c3RlcnM/LlswXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IGNsdXN0ZXI/LlN0YXR1cyA/PyAndW5rbm93bicsXG4gICAgICAgICAgaWRlbnRpZmllcjogY2x1c3Rlcj8uREJDbHVzdGVySWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogZmlyc3REZXNjcmliZS5zdGF0dXMsXG4gICAgICAgICAgaWRlbnRpZmllcjogZmlyc3REZXNjcmliZS5pZGVudGlmaWVyLFxuICAgICAgICB9LFxuICAgICAgICB3YWl0U3RyYXRlZ3k6IHdhaXRTdHJhdGVneVVudGlsU3RvcHBlZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGRpZFN0b3AgPSB0cnVlO1xuICAgIGZpbmFsU3RhdHVzID0gc3RvcHBlZC5zdGF0dXM7XG4gIH1cblxuICAvLyBBbHJlYWR5IHN0b3BwZWQgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiogKGUuZy4gc3RvcHBlZCBieSBhbm90aGVyIHByb2Nlc3MpIOKAlCBubyBTbGFjayBub3RpZmljYXRpb24uXG4gIGlmICghZGlkU3RvcCkge1xuICAgIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICduby1vcCcpIHtcbiAgICAgIHJldHVybiBhZnRlclRhZ01hdGNoLnJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGFmdGVyVGFnTWF0Y2gua2luZCA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGFmdGVyVGFnTWF0Y2gubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmFpbCB3aGVuIFN0b3BEQiogd2FzIGNhbGxlZCBidXQgdGhlIHJlc291cmNlIGRpZCBub3QgcmVhY2ggc3RvcHBlZC5cbiAgaWYgKGZpbmFsU3RhdHVzICE9PSAnc3RvcHBlZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERCIHN0YXR1cyBpcyBub3Qgc3RvcHBlZCBhZnRlciBwcm9jZXNzaW5nOiAke2ZpbmFsU3RhdHVzfWApO1xuICB9XG5cbiAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IHBhcnNlUmRzU291cmNlQXJuKGRldGFpbC5Tb3VyY2VBcm4pO1xuXG4gIGlmIChzbGFja1NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0LmNoYW5uZWw7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFdlYkNsaWVudChzbGFja1NlY3JldC50b2tlbik7XG4gICAgYXdhaXQgY29udGV4dC5zdGVwKCdwb3N0LXNsYWNrLW1lc3NhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGNsaWVudC5jaGF0LnBvc3RNZXNzYWdlKFxuICAgICAgICBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICBzb3VyY2VUeXBlOiBkZXRhaWwuU291cmNlVHlwZSxcbiAgICAgICAgICBzb3VyY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkU3RvcHBlZFJlc3VsdCh7XG4gICAgZmluYWxTdGF0dXMsXG4gICAgYWNjb3VudCxcbiAgICByZWdpb24sXG4gICAgaWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSB3aXRoRHVyYWJsZUV4ZWN1dGlvbihwcm9jZXNzQXV0b1N0YXJ0UHJldmVudCk7XG4iXX0=
@@ -97,9 +97,11 @@ export interface StopWait {
97
97
  }
98
98
  /** Result of a durable waitStrategy. */
99
99
  export type WaitStrategyResult = ContinueWait | StopWait;
100
+ /** Minutes between describe calls while a status is transitional or stopping. */
101
+ export declare const WAIT_INTERVAL_MINUTES = 5;
100
102
  /**
101
103
  * RDS statuses that indicate an in-progress transition.
102
- * The handler waits every 5 minutes while the resource remains in one of these states.
104
+ * The handler waits {@link WAIT_INTERVAL_MINUTES} minutes while the resource remains in one of these states.
103
105
  */
104
106
  export declare const TRANSITIONAL_STATUSES: Set<string>;
105
107
  /**
@@ -162,14 +164,14 @@ export declare const isDbClusterAutoStart: (detailType: RdsAutoStartEvent["detai
162
164
  * Wait strategy while describing until the resource leaves transitional statuses.
163
165
  *
164
166
  * @param state - Latest wait state.
165
- * @returns Continue every 5 minutes while transitional; otherwise stop.
167
+ * @returns Continue at {@link WAIT_INTERVAL_MINUTES} while transitional; otherwise stop.
166
168
  */
167
169
  export declare const waitStrategyUntilStable: (state: WaitState) => WaitStrategyResult;
168
170
  /**
169
171
  * Wait strategy after StopDB* until the resource reaches `stopped`.
170
172
  *
171
173
  * @param state - Latest wait state.
172
- * @returns Stop when `stopped`; continue while transitional.
174
+ * @returns Stop when `stopped`; continue at {@link WAIT_INTERVAL_MINUTES} while transitional.
173
175
  * @throws When the status is neither stopped nor transitional.
174
176
  */
175
177
  export declare const waitStrategyUntilStopped: (state: WaitState) => WaitStrategyResult;
@@ -4,10 +4,12 @@
4
4
  * No AWS SDK, Durable context, env, or clock dependencies.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.buildStoppedResult = exports.buildSlackStopNotification = exports.parseRdsSourceArn = exports.tagMismatchNoOp = exports.decideAfterTagMatch = exports.waitStrategyUntilStopped = exports.waitStrategyUntilStable = exports.isDbClusterAutoStart = exports.isDbInstanceAutoStart = exports.matchTag = exports.normalizeInput = exports.isAutoStartPreventInput = exports.isSlackSecret = exports.isTransitionalStatus = exports.TRANSITIONAL_STATUSES = void 0;
7
+ exports.buildStoppedResult = exports.buildSlackStopNotification = exports.parseRdsSourceArn = exports.tagMismatchNoOp = exports.decideAfterTagMatch = exports.waitStrategyUntilStopped = exports.waitStrategyUntilStable = exports.isDbClusterAutoStart = exports.isDbInstanceAutoStart = exports.matchTag = exports.normalizeInput = exports.isAutoStartPreventInput = exports.isSlackSecret = exports.isTransitionalStatus = exports.TRANSITIONAL_STATUSES = exports.WAIT_INTERVAL_MINUTES = void 0;
8
+ /** Minutes between describe calls while a status is transitional or stopping. */
9
+ exports.WAIT_INTERVAL_MINUTES = 5;
8
10
  /**
9
11
  * RDS statuses that indicate an in-progress transition.
10
- * The handler waits every 5 minutes while the resource remains in one of these states.
12
+ * The handler waits {@link WAIT_INTERVAL_MINUTES} minutes while the resource remains in one of these states.
11
13
  */
12
14
  exports.TRANSITIONAL_STATUSES = new Set([
13
15
  'starting',
@@ -120,11 +122,11 @@ exports.isDbClusterAutoStart = isDbClusterAutoStart;
120
122
  * Wait strategy while describing until the resource leaves transitional statuses.
121
123
  *
122
124
  * @param state - Latest wait state.
123
- * @returns Continue every 5 minutes while transitional; otherwise stop.
125
+ * @returns Continue at {@link WAIT_INTERVAL_MINUTES} while transitional; otherwise stop.
124
126
  */
125
127
  const waitStrategyUntilStable = (state) => {
126
128
  if ((0, exports.isTransitionalStatus)(state.status)) {
127
- return { shouldContinue: true, delay: { minutes: 5 } };
129
+ return { shouldContinue: true, delay: { minutes: exports.WAIT_INTERVAL_MINUTES } };
128
130
  }
129
131
  return { shouldContinue: false };
130
132
  };
@@ -133,7 +135,7 @@ exports.waitStrategyUntilStable = waitStrategyUntilStable;
133
135
  * Wait strategy after StopDB* until the resource reaches `stopped`.
134
136
  *
135
137
  * @param state - Latest wait state.
136
- * @returns Stop when `stopped`; continue while transitional.
138
+ * @returns Stop when `stopped`; continue at {@link WAIT_INTERVAL_MINUTES} while transitional.
137
139
  * @throws When the status is neither stopped nor transitional.
138
140
  */
139
141
  const waitStrategyUntilStopped = (state) => {
@@ -141,7 +143,7 @@ const waitStrategyUntilStopped = (state) => {
141
143
  return { shouldContinue: false };
142
144
  }
143
145
  if ((0, exports.isTransitionalStatus)(state.status)) {
144
- return { shouldContinue: true, delay: { minutes: 5 } };
146
+ return { shouldContinue: true, delay: { minutes: exports.WAIT_INTERVAL_MINUTES } };
145
147
  }
146
148
  throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
147
149
  };
@@ -250,4 +252,4 @@ const buildStoppedResult = (args) => ({
250
252
  identifier: args.identifier,
251
253
  });
252
254
  exports.buildStoppedResult = buildStoppedResult;
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBMkdIOzs7R0FHRztBQUNVLFFBQUEscUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0MsVUFBVTtJQUNWLGlDQUFpQztJQUNqQyxZQUFZO0lBQ1osV0FBVztJQUNYLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQVcsRUFBRSxDQUM5RCw2QkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFEdkIsUUFBQSxvQkFBb0Isd0JBQ0c7QUFFcEM7Ozs7Ozs7O0dBUUc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBd0IsRUFBRTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVE7UUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQztBQVhXLFFBQUEsYUFBYSxpQkFXeEI7QUFFRjs7Ozs7R0FLRztBQUNJ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QUFDO0lBQ3BCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztJQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87SUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtDQUM1QixDQUFDLENBQUM7QUFYVSxRQUFBLGtCQUFrQixzQkFXNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgaGVscGVycyBmb3IgdGhlIFJEUyBhdXRvLXN0YXJ0IHByZXZlbnQgTGFtYmRhLlxuICogTm8gQVdTIFNESywgRHVyYWJsZSBjb250ZXh0LCBlbnYsIG9yIGNsb2NrIGRlcGVuZGVuY2llcy5cbiAqL1xuXG4vKipcbiAqIERldGFpbCBwYXlsb2FkIG9mIGFuIFJEUyBhdXRvLXN0YXJ0IGV2ZW50IGZyb20gRXZlbnRCcmlkZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RGV0YWlsIHtcbiAgLyoqIEV2ZW50IElEOiBSRFMtRVZFTlQtMDE1NCAoREIgaW5zdGFuY2UpIG9yIFJEUy1FVkVOVC0wMTUzIChEQiBjbHVzdGVyKS4gKi9cbiAgRXZlbnRJRDogJ1JEUy1FVkVOVC0wMTU0JyB8ICdSRFMtRVZFTlQtMDE1Myc7XG4gIC8qKiBSZXNvdXJjZSB0eXBlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuICovXG4gIFNvdXJjZVR5cGU6ICdEQl9JTlNUQU5DRScgfCAnQ0xVU1RFUic7XG4gIC8qKiBBUk4gb2YgdGhlIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIuICovXG4gIFNvdXJjZUFybjogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyIGZyb20gdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VJZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUkRTIGF1dG8tc3RhcnQgZXZlbnQgYXMgcmVjZWl2ZWQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZHNBdXRvU3RhcnRFdmVudCB7XG4gICdkZXRhaWwtdHlwZSc6ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnIHwgJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JztcbiAgJ3NvdXJjZSc6ICdhd3MucmRzJztcbiAgJ2RldGFpbCc6IFJkc0F1dG9TdGFydERldGFpbDtcbn1cblxuLyoqXG4gKiBUYWctYmFzZWQgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TdGFydFBhcmFtcyB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIG9uIHRoZSByZXNvdXJjZS4gKi9cbiAgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIHRhZyB2YWx1ZXM7IHRoZSByZXNvdXJjZSBpcyBwcm9jZXNzZWQgb25seSB3aGVuIGl0cyB0YWcgdmFsdWUgaXMgaW4gdGhpcyBsaXN0LiAqL1xuICB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNsYWNrIGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBTZWNyZXRzIE1hbmFnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tTZWNyZXQge1xuICAvKiogU2xhY2sgYm90IG9yIHVzZXIgT0F1dGggdG9rZW4uICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBDaGFubmVsIElEIG9yIG5hbWUgdG8gcG9zdCBub3RpZmljYXRpb25zIHRvLiAqL1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBoYW5kbGVyIGlucHV0OiBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TdGFydFByZXZlbnRJbnB1dCB7XG4gIGV2ZW50OiBSZHNBdXRvU3RhcnRFdmVudDtcbiAgcGFyYW1zOiBBdXRvU3RhcnRQYXJhbXM7XG59XG5cbi8qKlxuICogSGFuZGxlciByZXN1bHQgd2hlbiBubyBzdG9wIGFjdGlvbiB3YXMgdGFrZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9PcFJlc3VsdCB7XG4gIGFjdGlvbjogJ25vLW9wJztcbiAgcmVhc29uOiAndGFnIG5vdCBtYXRjaGVkIG9yIG5vdCBmb3VuZCcgfCAnYWxyZWFkeSBzdG9wcGVkJztcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGFuZGxlciByZXN1bHQgd2hlbiB0aGlzIGludm9jYXRpb24gY2FsbGVkIFN0b3BEQiogYW5kIHRoZSByZXNvdXJjZSByZWFjaGVkIGBzdG9wcGVkYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9wcGVkUmVzdWx0IHtcbiAgYWN0aW9uOiAnc3RvcHBlZCc7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBV1Mtc3R5bGUgdGFnIChLZXkvVmFsdWUpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4gIEtleT86IHN0cmluZztcbiAgVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhdGUgc25hcHNob3Qgd2hpbGUgd2FpdGluZyBvbiBSRFMgZGVzY3JpYmUgQVBJcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYWl0U3RhdGUge1xuICAvKiogQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy4gKi9cbiAgc3RhdHVzOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIuICovXG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgLyoqIFRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2U7IHByZXNlbnQgb24gdGhlIGZpcnN0IHdhaXQgY2hlY2sgb25seS4gKi9cbiAgdGFncz86IFRhZ1tdO1xufVxuXG4vKiogQ29udGludWUgd2FpdGluZyB3aXRoIGEgZGVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRpbnVlV2FpdCB7XG4gIHNob3VsZENvbnRpbnVlOiB0cnVlO1xuICBkZWxheTogeyBtaW51dGVzOiBudW1iZXIgfTtcbn1cblxuLyoqIFN0b3Agd2FpdGluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcFdhaXQge1xuICBzaG91bGRDb250aW51ZTogZmFsc2U7XG59XG5cbi8qKiBSZXN1bHQgb2YgYSBkdXJhYmxlIHdhaXRTdHJhdGVneS4gKi9cbmV4cG9ydCB0eXBlIFdhaXRTdHJhdGVneVJlc3VsdCA9IENvbnRpbnVlV2FpdCB8IFN0b3BXYWl0O1xuXG4vKipcbiAqIFJEUyBzdGF0dXNlcyB0aGF0IGluZGljYXRlIGFuIGluLXByb2dyZXNzIHRyYW5zaXRpb24uXG4gKiBUaGUgaGFuZGxlciB3YWl0cyBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TSVRJT05BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1xuICAnc3RhcnRpbmcnLFxuICAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycsXG4gICdiYWNraW5nLXVwJyxcbiAgJ21vZGlmeWluZycsXG4gICdzdG9wcGluZycsXG5dKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc3RhdHVzIGlzIHRyYW5zaXRpb25hbCBhbmQgd2FpdGluZyBzaG91bGQgY29udGludWUuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIEN1cnJlbnQgREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgaXNUcmFuc2l0aW9uYWxTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdHVzKTtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIGZvciBTbGFjayBjcmVkZW50aWFscyByZXR1cm5lZCBieSBgc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZWAuXG4gKlxuICogYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlciBeMC43IHBhcnNlcyBTZWNyZXRTdHJpbmcgd2l0aCBxdWlldC1qc29uLXBhcnNlciBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBzdHJpbmcgb24gaW52YWxpZCBKU09OLCBzbyBjYWxsZXJzIG11c3QgdmFsaWRhdGUgc2hhcGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgc2VjcmV0IGZldGNoZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHZhbHVlIGlzIGEgU2xhY2tTZWNyZXQgd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NsYWNrU2VjcmV0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2xhY2tTZWNyZXQgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKCd0b2tlbicgaW4gdmFsdWUpIHx8ICEoJ2NoYW5uZWwnIGluIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlLnRva2VuID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRva2VuLmxlbmd0aCA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUuY2hhbm5lbCA9PT0gJ3N0cmluZycgJiZcbiAgICB2YWx1ZS5jaGFubmVsLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGB7IGV2ZW50LCBwYXJhbXMgfWAgYXMgcHJvZHVjZWQgYnkgdGhlIEV2ZW50QnJpZGdlIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSYXcgTGFtYmRhIGludm9jYXRpb24gcGF5bG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgaW5wdXQgaGFzIG5vbi1udWxsIGV2ZW50IGFuZCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0F1dG9TdGFydFByZXZlbnRJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIEF1dG9TdGFydFByZXZlbnRJbnB1dCA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8IGlucHV0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ2V2ZW50JyBpbiBpbnB1dCkgfHwgISgncGFyYW1zJyBpbiBpbnB1dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlucHV0LmV2ZW50ICE9IG51bGwgJiYgaW5wdXQucGFyYW1zICE9IG51bGw7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgaW52b2NhdGlvbiBpbnB1dCB0byB7QGxpbmsgQXV0b1N0YXJ0UHJldmVudElucHV0fS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UgSW5wdXRUcmFuc2Zvcm1lciAob3IgdGhlIHNhbWUgc2hhcGUgb24gZGlyZWN0IEludm9rZSkuXG4gKiBAcmV0dXJucyBFdmVudCBwbHVzIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBub3QgYHsgZXZlbnQsIHBhcmFtcyB9YC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUlucHV0ID0gKGlucHV0OiB1bmtub3duKTogQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKGlzQXV0b1N0YXJ0UHJldmVudElucHV0KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHsgZXZlbnQsIHBhcmFtcyB9LicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlc291cmNlIGhhcyBhIHRhZyB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIGEgdmFsdWUgaW4gdGhlIGFsbG93ZWQgbGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGFnIGtleSBhbmQgYWxsb3dlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gdGFncyAtIFJlc291cmNlIHRhZyBsaXN0IChlLmcuIGZyb20gRGVzY3JpYmVEQkluc3RhbmNlcyAvIERlc2NyaWJlREJDbHVzdGVycykuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB0YWcgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoVGFnID0gKHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zLCB0YWdzPzogVGFnW10pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFncy5maW5kKHQgPT4gdC5LZXkgPT09IHBhcmFtcy50YWdLZXkpPy5WYWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyYW1zLnRhZ1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGluc3RhbmNlIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTQgb24gYSBEQiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGJJbnN0YW5jZUF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0RCX0lOU1RBTkNFJyAmJlxuICBkZXRhaWwuRXZlbnRJRCA9PT0gJ1JEUy1FVkVOVC0wMTU0JztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBkZXRhaWwgaWRlbnRpZmllcyBhIHN1cHBvcnRlZCBEQiBjbHVzdGVyIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTMgb24gYSBjbHVzdGVyLlxuICovXG5leHBvcnQgY29uc3QgaXNEYkNsdXN0ZXJBdXRvU3RhcnQgPSAoXG4gIGRldGFpbFR5cGU6IFJkc0F1dG9TdGFydEV2ZW50WydkZXRhaWwtdHlwZSddLFxuICBkZXRhaWw6IFJkc0F1dG9TdGFydERldGFpbCxcbik6IGJvb2xlYW4gPT5cbiAgZGV0YWlsVHlwZSA9PT0gJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0NMVVNURVInICYmXG4gIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4vKipcbiAqIFdhaXQgc3RyYXRlZ3kgd2hpbGUgZGVzY3JpYmluZyB1bnRpbCB0aGUgcmVzb3VyY2UgbGVhdmVzIHRyYW5zaXRpb25hbCBzdGF0dXNlcy5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBMYXRlc3Qgd2FpdCBzdGF0ZS5cbiAqIEByZXR1cm5zIENvbnRpbnVlIGV2ZXJ5IDUgbWludXRlcyB3aGlsZSB0cmFuc2l0aW9uYWw7IG90aGVyd2lzZSBzdG9wLlxuICovXG5leHBvcnQgY29uc3Qgd2FpdFN0cmF0ZWd5VW50aWxTdGFibGUgPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IFdhaXRTdHJhdGVneVJlc3VsdCA9PiB7XG4gIGlmIChpc1RyYW5zaXRpb25hbFN0YXR1cyhzdGF0ZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICB9XG4gIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xufTtcblxuLyoqXG4gKiBXYWl0IHN0cmF0ZWd5IGFmdGVyIFN0b3BEQiogdW50aWwgdGhlIHJlc291cmNlIHJlYWNoZXMgYHN0b3BwZWRgLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSAtIExhdGVzdCB3YWl0IHN0YXRlLlxuICogQHJldHVybnMgU3RvcCB3aGVuIGBzdG9wcGVkYDsgY29udGludWUgd2hpbGUgdHJhbnNpdGlvbmFsLlxuICogQHRocm93cyBXaGVuIHRoZSBzdGF0dXMgaXMgbmVpdGhlciBzdG9wcGVkIG5vciB0cmFuc2l0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQgPSAoc3RhdGU6IFdhaXRTdGF0ZSk6IFdhaXRTdHJhdGVneVJlc3VsdCA9PiB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICB9XG4gIGlmIChpc1RyYW5zaXRpb25hbFN0YXR1cyhzdGF0ZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgd2hpbGUgd2FpdGluZyBmb3Igc3RvcDogJHtzdGF0ZS5zdGF0dXN9YCk7XG59O1xuXG4vKipcbiAqIERlY2lzaW9uIGFmdGVyIHRoZSBmaXJzdCBkZXNjcmliZSBhbmQgYSBzdWNjZXNzZnVsIHRhZyBtYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgQWZ0ZXJUYWdNYXRjaERlY2lzaW9uID1cbiAgfCB7IGtpbmQ6ICdzdG9wJyB9XG4gIHwgeyBraW5kOiAnbm8tb3AnOyByZXN1bHQ6IE5vT3BSZXN1bHQgfVxuICB8IHsga2luZDogJ2Vycm9yJzsgbWVzc2FnZTogc3RyaW5nIH07XG5cbi8qKlxuICogRGVjaWRlcyB0aGUgbmV4dCBhY3Rpb24gd2hlbiB0YWdzIG1hdGNoZWQgYW5kIFN0b3BEQiogaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFN0YXR1cyBmcm9tIHRoZSBmaXJzdCBkZXNjcmliZSBhZnRlciBsZWF2aW5nIHRyYW5zaXRpb25hbCBzdGF0ZXMuXG4gKiBAcmV0dXJucyBTdG9wIHdoZW4gYGF2YWlsYWJsZWA7IG5vLW9wIHdoZW4gYWxyZWFkeSBgc3RvcHBlZGA7IG90aGVyd2lzZSBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlY2lkZUFmdGVyVGFnTWF0Y2ggPSAoc3RhdHVzOiBzdHJpbmcpOiBBZnRlclRhZ01hdGNoRGVjaXNpb24gPT4ge1xuICBpZiAoc3RhdHVzID09PSAnYXZhaWxhYmxlJykge1xuICAgIHJldHVybiB7IGtpbmQ6ICdzdG9wJyB9O1xuICB9XG4gIGlmIChzdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnbm8tb3AnLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGFjdGlvbjogJ25vLW9wJyxcbiAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAga2luZDogJ2Vycm9yJyxcbiAgICBtZXNzYWdlOiBgREIgc3RhdHVzIGlzIG5vdCBzdG9wcGVkIGFmdGVyIHByb2Nlc3Npbmc6ICR7c3RhdHVzfWAsXG4gIH07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbm8tb3AgcmVzdWx0IHVzZWQgd2hlbiB0YWdzIGRvIG5vdCBtYXRjaC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCByZXNvdXJjZSBzdGF0dXMuXG4gKiBAcmV0dXJucyBOby1vcCByZXN1bHQgd2l0aCB0YWcgbWlzbWF0Y2ggcmVhc29uLlxuICovXG5leHBvcnQgY29uc3QgdGFnTWlzbWF0Y2hOb09wID0gKHN0YXR1czogc3RyaW5nKTogTm9PcFJlc3VsdCA9PiAoe1xuICBhY3Rpb246ICduby1vcCcsXG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnLFxuICBzdGF0dXMsXG59KTtcblxuLyoqXG4gKiBQYXJzZXMgcmVnaW9uIGFuZCBhY2NvdW50IGZyb20gYW4gUkRTIHJlc291cmNlIEFSTiAoYGFybjphd3M6cmRzOnJlZ2lvbjphY2NvdW50Oi4uLmApLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VBcm4gLSBTb3VyY2VBcm4gZnJvbSB0aGUgUkRTIGV2ZW50IGRldGFpbC5cbiAqIEByZXR1cm5zIFJlZ2lvbiBhbmQgYWNjb3VudCBpZCBzZWdtZW50cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmRzU291cmNlQXJuID0gKHNvdXJjZUFybjogc3RyaW5nKTogeyByZWdpb246IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBwYXJ0cyA9IHNvdXJjZUFybi5zcGxpdCgnOicpO1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogcGFydHNbM10gPz8gJycsXG4gICAgYWNjb3VudDogcGFydHNbNF0gPz8gJycsXG4gIH07XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIFNsYWNrIHN0b3Atc3VjY2VzcyBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncyB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgc291cmNlVHlwZTogUmRzQXV0b1N0YXJ0RGV0YWlsWydTb3VyY2VUeXBlJ107XG4gIHNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNsYWNrIGBjaGF0LnBvc3RNZXNzYWdlYCBwYXlsb2FkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gQ2hhbm5lbCBhbmQgcmVzb3VyY2UgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgQXJndW1lbnRzIHN1aXRhYmxlIGZvciBgV2ViQ2xpZW50LmNoYXQucG9zdE1lc3NhZ2VgLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24gPSAoYXJnczogU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncykgPT4gKHtcbiAgY2hhbm5lbDogYXJncy5jaGFubmVsLFxuICBhdHRhY2htZW50czogW1xuICAgIHtcbiAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICBwcmV0ZXh0OiBg8J+YtCBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgYXV0b21hdGljYWxseSBydW5uaW5nIFJEUyAke2FyZ3Muc291cmNlVHlwZX0gJHthcmdzLnNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnUmVnaW9uJyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5yZWdpb24sXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1R5cGUnLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZVR5cGUsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0lkZW50aWZpZXInLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59KTtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1Y2Nlc3MgcmVzdWx0IGFmdGVyIFN0b3BEQiogcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBGaW5hbCBzdGF0dXMgYW5kIGlkZW50aXR5IGZpZWxkcy5cbiAqIEByZXR1cm5zIFN0b3BwZWRSZXN1bHQgZm9yIHRoZSBoYW5kbGVyIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU3RvcHBlZFJlc3VsdCA9IChhcmdzOiB7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn0pOiBTdG9wcGVkUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ3N0b3BwZWQnLFxuICBmaW5hbFN0YXR1czogYXJncy5maW5hbFN0YXR1cyxcbiAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICByZWdpb246IGFyZ3MucmVnaW9uLFxuICBpZGVudGlmaWVyOiBhcmdzLmlkZW50aWZpZXIsXG59KTtcbiJdfQ==
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBMkdILGlGQUFpRjtBQUNwRSxRQUFBLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUV2Qzs7O0dBR0c7QUFDVSxRQUFBLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNDLFVBQVU7SUFDVixpQ0FBaUM7SUFDakMsWUFBWTtJQUNaLFdBQVc7SUFDWCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFDSSxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBYyxFQUFXLEVBQUUsQ0FDOUQsNkJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRHZCLFFBQUEsb0JBQW9CLHdCQUNHO0FBRXBDOzs7Ozs7OztHQVFHO0FBQ0ksTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQXdCLEVBQUU7SUFDcEUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUNwQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1FBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFD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QUFDSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFLbEMsRUFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO0lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztJQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07SUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0NBQzVCLENBQUMsQ0FBQztBQVhVLFFBQUEsa0JBQWtCLHNCQVc1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBoZWxwZXJzIGZvciB0aGUgUkRTIGF1dG8tc3RhcnQgcHJldmVudCBMYW1iZGEuXG4gKiBObyBBV1MgU0RLLCBEdXJhYmxlIGNvbnRleHQsIGVudiwgb3IgY2xvY2sgZGVwZW5kZW5jaWVzLlxuICovXG5cbi8qKlxuICogRGV0YWlsIHBheWxvYWQgb2YgYW4gUkRTIGF1dG8tc3RhcnQgZXZlbnQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZHNBdXRvU3RhcnREZXRhaWwge1xuICAvKiogRXZlbnQgSUQ6IFJEUy1FVkVOVC0wMTU0IChEQiBpbnN0YW5jZSkgb3IgUkRTLUVWRU5ULTAxNTMgKERCIGNsdXN0ZXIpLiAqL1xuICBFdmVudElEOiAnUkRTLUVWRU5ULTAxNTQnIHwgJ1JEUy1FVkVOVC0wMTUzJztcbiAgLyoqIFJlc291cmNlIHR5cGUgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgU291cmNlVHlwZTogJ0RCX0lOU1RBTkNFJyB8ICdDTFVTVEVSJztcbiAgLyoqIEFSTiBvZiB0aGUgREIgaW5zdGFuY2Ugb3IgY2x1c3Rlci4gKi9cbiAgU291cmNlQXJuOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIgZnJvbSB0aGUgZXZlbnQuICovXG4gIFNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSRFMgYXV0by1zdGFydCBldmVudCBhcyByZWNlaXZlZCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcgfCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnO1xuICAnc291cmNlJzogJ2F3cy5yZHMnO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UGFyYW1zIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggb24gdGhlIHJlc291cmNlLiAqL1xuICB0YWdLZXk6IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgdGFnIHZhbHVlczsgdGhlIHJlc291cmNlIGlzIHByb2Nlc3NlZCBvbmx5IHdoZW4gaXRzIHRhZyB2YWx1ZSBpcyBpbiB0aGlzIGxpc3QuICovXG4gIHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2xhY2sgY3JlZGVudGlhbHMgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja1NlY3JldCB7XG4gIC8qKiBTbGFjayBib3Qgb3IgdXNlciBPQXV0aCB0b2tlbi4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIENoYW5uZWwgSUQgb3IgbmFtZSB0byBwb3N0IG5vdGlmaWNhdGlvbnMgdG8uICovXG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVkIGhhbmRsZXIgaW5wdXQ6IEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb09wUmVzdWx0IHtcbiAgYWN0aW9uOiAnbm8tb3AnO1xuICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyB8ICdhbHJlYWR5IHN0b3BwZWQnO1xuICBzdGF0dXM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIHRoaXMgaW52b2NhdGlvbiBjYWxsZWQgU3RvcERCKiBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BwZWRSZXN1bHQge1xuICBhY3Rpb246ICdzdG9wcGVkJztcbiAgZmluYWxTdGF0dXM6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgS2V5Pzogc3RyaW5nO1xuICBWYWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGF0ZSBzbmFwc2hvdCB3aGlsZSB3YWl0aW5nIG9uIFJEUyBkZXNjcmliZSBBUElzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRTdGF0ZSB7XG4gIC8qKiBDdXJyZW50IERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgc3RhdHVzLiAqL1xuICBzdGF0dXM6IHN0cmluZztcbiAgLyoqIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIgaWRlbnRpZmllci4gKi9cbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAvKiogVGFncyBmcm9tIHRoZSBkZXNjcmliZSByZXNwb25zZTsgcHJlc2VudCBvbiB0aGUgZmlyc3Qgd2FpdCBjaGVjayBvbmx5LiAqL1xuICB0YWdzPzogVGFnW107XG59XG5cbi8qKiBDb250aW51ZSB3YWl0aW5nIHdpdGggYSBkZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGludWVXYWl0IHtcbiAgc2hvdWxkQ29udGludWU6IHRydWU7XG4gIGRlbGF5OiB7IG1pbnV0ZXM6IG51bWJlciB9O1xufVxuXG4vKiogU3RvcCB3YWl0aW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9wV2FpdCB7XG4gIHNob3VsZENvbnRpbnVlOiBmYWxzZTtcbn1cblxuLyoqIFJlc3VsdCBvZiBhIGR1cmFibGUgd2FpdFN0cmF0ZWd5LiAqL1xuZXhwb3J0IHR5cGUgV2FpdFN0cmF0ZWd5UmVzdWx0ID0gQ29udGludWVXYWl0IHwgU3RvcFdhaXQ7XG5cbi8qKiBNaW51dGVzIGJldHdlZW4gZGVzY3JpYmUgY2FsbHMgd2hpbGUgYSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsIG9yIHN0b3BwaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFdBSVRfSU5URVJWQUxfTUlOVVRFUyA9IDU7XG5cbi8qKlxuICogUkRTIHN0YXR1c2VzIHRoYXQgaW5kaWNhdGUgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNpdGlvbi5cbiAqIFRoZSBoYW5kbGVyIHdhaXRzIHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TSVRJT05BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1xuICAnc3RhcnRpbmcnLFxuICAnY29uZmlndXJpbmctZW5oYW5jZWQtbW9uaXRvcmluZycsXG4gICdiYWNraW5nLXVwJyxcbiAgJ21vZGlmeWluZycsXG4gICdzdG9wcGluZycsXG5dKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc3RhdHVzIGlzIHRyYW5zaXRpb25hbCBhbmQgd2FpdGluZyBzaG91bGQgY29udGludWUuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIEN1cnJlbnQgREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBzdGF0dXMuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBzdGF0dXMgaXMgdHJhbnNpdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgaXNUcmFuc2l0aW9uYWxTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdHVzKTtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIGZvciBTbGFjayBjcmVkZW50aWFscyByZXR1cm5lZCBieSBgc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZWAuXG4gKlxuICogYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlciBeMC43IHBhcnNlcyBTZWNyZXRTdHJpbmcgd2l0aCBxdWlldC1qc29uLXBhcnNlciBhbmRcbiAqIGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBzdHJpbmcgb24gaW52YWxpZCBKU09OLCBzbyBjYWxsZXJzIG11c3QgdmFsaWRhdGUgc2hhcGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgc2VjcmV0IGZldGNoZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHZhbHVlIGlzIGEgU2xhY2tTZWNyZXQgd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NsYWNrU2VjcmV0ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2xhY2tTZWNyZXQgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKCd0b2tlbicgaW4gdmFsdWUpIHx8ICEoJ2NoYW5uZWwnIGluIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHZhbHVlLnRva2VuID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRva2VuLmxlbmd0aCA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUuY2hhbm5lbCA9PT0gJ3N0cmluZycgJiZcbiAgICB2YWx1ZS5jaGFubmVsLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGB7IGV2ZW50LCBwYXJhbXMgfWAgYXMgcHJvZHVjZWQgYnkgdGhlIEV2ZW50QnJpZGdlIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBSYXcgTGFtYmRhIGludm9jYXRpb24gcGF5bG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgaW5wdXQgaGFzIG5vbi1udWxsIGV2ZW50IGFuZCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0F1dG9TdGFydFByZXZlbnRJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIEF1dG9TdGFydFByZXZlbnRJbnB1dCA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8IGlucHV0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCEoJ2V2ZW50JyBpbiBpbnB1dCkgfHwgISgncGFyYW1zJyBpbiBpbnB1dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlucHV0LmV2ZW50ICE9IG51bGwgJiYgaW5wdXQucGFyYW1zICE9IG51bGw7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgaW52b2NhdGlvbiBpbnB1dCB0byB7QGxpbmsgQXV0b1N0YXJ0UHJldmVudElucHV0fS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UgSW5wdXRUcmFuc2Zvcm1lciAob3IgdGhlIHNhbWUgc2hhcGUgb24gZGlyZWN0IEludm9rZSkuXG4gKiBAcmV0dXJucyBFdmVudCBwbHVzIHRhZyBmaWx0ZXIgcGFyYW1ldGVycy5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBub3QgYHsgZXZlbnQsIHBhcmFtcyB9YC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUlucHV0ID0gKGlucHV0OiB1bmtub3duKTogQXV0b1N0YXJ0UHJldmVudElucHV0ID0+IHtcbiAgaWYgKGlzQXV0b1N0YXJ0UHJldmVudElucHV0KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHsgZXZlbnQsIHBhcmFtcyB9LicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlc291cmNlIGhhcyBhIHRhZyB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIGEgdmFsdWUgaW4gdGhlIGFsbG93ZWQgbGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGFnIGtleSBhbmQgYWxsb3dlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gdGFncyAtIFJlc291cmNlIHRhZyBsaXN0IChlLmcuIGZyb20gRGVzY3JpYmVEQkluc3RhbmNlcyAvIERlc2NyaWJlREJDbHVzdGVycykuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB0YWcgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoVGFnID0gKHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zLCB0YWdzPzogVGFnW10pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFncy5maW5kKHQgPT4gdC5LZXkgPT09IHBhcmFtcy50YWdLZXkpPy5WYWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyYW1zLnRhZ1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIGRldGFpbCBpZGVudGlmaWVzIGEgc3VwcG9ydGVkIERCIGluc3RhbmNlIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTQgb24gYSBEQiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGJJbnN0YW5jZUF1dG9TdGFydCA9IChcbiAgZGV0YWlsVHlwZTogUmRzQXV0b1N0YXJ0RXZlbnRbJ2RldGFpbC10eXBlJ10sXG4gIGRldGFpbDogUmRzQXV0b1N0YXJ0RGV0YWlsLFxuKTogYm9vbGVhbiA9PlxuICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0RCX0lOU1RBTkNFJyAmJlxuICBkZXRhaWwuRXZlbnRJRCA9PT0gJ1JEUy1FVkVOVC0wMTU0JztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBkZXRhaWwgaWRlbnRpZmllcyBhIHN1cHBvcnRlZCBEQiBjbHVzdGVyIGF1dG8tc3RhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRldGFpbFR5cGUgLSBFdmVudEJyaWRnZSBkZXRhaWwtdHlwZS5cbiAqIEBwYXJhbSBkZXRhaWwgLSBSRFMgZXZlbnQgZGV0YWlsLlxuICogQHJldHVybnMgVHJ1ZSBmb3IgUkRTLUVWRU5ULTAxNTMgb24gYSBjbHVzdGVyLlxuICovXG5leHBvcnQgY29uc3QgaXNEYkNsdXN0ZXJBdXRvU3RhcnQgPSAoXG4gIGRldGFpbFR5cGU6IFJkc0F1dG9TdGFydEV2ZW50WydkZXRhaWwtdHlwZSddLFxuICBkZXRhaWw6IFJkc0F1dG9TdGFydERldGFpbCxcbik6IGJvb2xlYW4gPT5cbiAgZGV0YWlsVHlwZSA9PT0gJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyAmJlxuICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0NMVVNURVInICYmXG4gIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4vKipcbiAqIFdhaXQgc3RyYXRlZ3kgd2hpbGUgZGVzY3JpYmluZyB1bnRpbCB0aGUgcmVzb3VyY2UgbGVhdmVzIHRyYW5zaXRpb25hbCBzdGF0dXNlcy5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBMYXRlc3Qgd2FpdCBzdGF0ZS5cbiAqIEByZXR1cm5zIENvbnRpbnVlIGF0IHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IHdoaWxlIHRyYW5zaXRpb25hbDsgb3RoZXJ3aXNlIHN0b3AuXG4gKi9cbmV4cG9ydCBjb25zdCB3YWl0U3RyYXRlZ3lVbnRpbFN0YWJsZSA9IChzdGF0ZTogV2FpdFN0YXRlKTogV2FpdFN0cmF0ZWd5UmVzdWx0ID0+IHtcbiAgaWYgKGlzVHJhbnNpdGlvbmFsU3RhdHVzKHN0YXRlLnN0YXR1cykpIHtcbiAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogV0FJVF9JTlRFUlZBTF9NSU5VVEVTIH0gfTtcbiAgfVxuICByZXR1cm4geyBzaG91bGRDb250aW51ZTogZmFsc2UgfTtcbn07XG5cbi8qKlxuICogV2FpdCBzdHJhdGVneSBhZnRlciBTdG9wREIqIHVudGlsIHRoZSByZXNvdXJjZSByZWFjaGVzIGBzdG9wcGVkYC5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBMYXRlc3Qgd2FpdCBzdGF0ZS5cbiAqIEByZXR1cm5zIFN0b3Agd2hlbiBgc3RvcHBlZGA7IGNvbnRpbnVlIGF0IHtAbGluayBXQUlUX0lOVEVSVkFMX01JTlVURVN9IHdoaWxlIHRyYW5zaXRpb25hbC5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgc3RhdHVzIGlzIG5laXRoZXIgc3RvcHBlZCBub3IgdHJhbnNpdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3Qgd2FpdFN0cmF0ZWd5VW50aWxTdG9wcGVkID0gKHN0YXRlOiBXYWl0U3RhdGUpOiBXYWl0U3RyYXRlZ3lSZXN1bHQgPT4ge1xuICBpZiAoc3RhdGUuc3RhdHVzID09PSAnc3RvcHBlZCcpIHtcbiAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogZmFsc2UgfTtcbiAgfVxuICBpZiAoaXNUcmFuc2l0aW9uYWxTdGF0dXMoc3RhdGUuc3RhdHVzKSkge1xuICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiB0cnVlLCBkZWxheTogeyBtaW51dGVzOiBXQUlUX0lOVEVSVkFMX01JTlVURVMgfSB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgd2hpbGUgd2FpdGluZyBmb3Igc3RvcDogJHtzdGF0ZS5zdGF0dXN9YCk7XG59O1xuXG4vKipcbiAqIERlY2lzaW9uIGFmdGVyIHRoZSBmaXJzdCBkZXNjcmliZSBhbmQgYSBzdWNjZXNzZnVsIHRhZyBtYXRjaC5cbiAqL1xuZXhwb3J0IHR5cGUgQWZ0ZXJUYWdNYXRjaERlY2lzaW9uID1cbiAgfCB7IGtpbmQ6ICdzdG9wJyB9XG4gIHwgeyBraW5kOiAnbm8tb3AnOyByZXN1bHQ6IE5vT3BSZXN1bHQgfVxuICB8IHsga2luZDogJ2Vycm9yJzsgbWVzc2FnZTogc3RyaW5nIH07XG5cbi8qKlxuICogRGVjaWRlcyB0aGUgbmV4dCBhY3Rpb24gd2hlbiB0YWdzIG1hdGNoZWQgYW5kIFN0b3BEQiogaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFN0YXR1cyBmcm9tIHRoZSBmaXJzdCBkZXNjcmliZSBhZnRlciBsZWF2aW5nIHRyYW5zaXRpb25hbCBzdGF0ZXMuXG4gKiBAcmV0dXJucyBTdG9wIHdoZW4gYGF2YWlsYWJsZWA7IG5vLW9wIHdoZW4gYWxyZWFkeSBgc3RvcHBlZGA7IG90aGVyd2lzZSBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlY2lkZUFmdGVyVGFnTWF0Y2ggPSAoc3RhdHVzOiBzdHJpbmcpOiBBZnRlclRhZ01hdGNoRGVjaXNpb24gPT4ge1xuICBpZiAoc3RhdHVzID09PSAnYXZhaWxhYmxlJykge1xuICAgIHJldHVybiB7IGtpbmQ6ICdzdG9wJyB9O1xuICB9XG4gIGlmIChzdGF0dXMgPT09ICdzdG9wcGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnbm8tb3AnLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGFjdGlvbjogJ25vLW9wJyxcbiAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAga2luZDogJ2Vycm9yJyxcbiAgICBtZXNzYWdlOiBgREIgc3RhdHVzIGlzIG5vdCBzdG9wcGVkIGFmdGVyIHByb2Nlc3Npbmc6ICR7c3RhdHVzfWAsXG4gIH07XG59O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbm8tb3AgcmVzdWx0IHVzZWQgd2hlbiB0YWdzIGRvIG5vdCBtYXRjaC5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gQ3VycmVudCByZXNvdXJjZSBzdGF0dXMuXG4gKiBAcmV0dXJucyBOby1vcCByZXN1bHQgd2l0aCB0YWcgbWlzbWF0Y2ggcmVhc29uLlxuICovXG5leHBvcnQgY29uc3QgdGFnTWlzbWF0Y2hOb09wID0gKHN0YXR1czogc3RyaW5nKTogTm9PcFJlc3VsdCA9PiAoe1xuICBhY3Rpb246ICduby1vcCcsXG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnLFxuICBzdGF0dXMsXG59KTtcblxuLyoqXG4gKiBQYXJzZXMgcmVnaW9uIGFuZCBhY2NvdW50IGZyb20gYW4gUkRTIHJlc291cmNlIEFSTiAoYGFybjphd3M6cmRzOnJlZ2lvbjphY2NvdW50Oi4uLmApLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VBcm4gLSBTb3VyY2VBcm4gZnJvbSB0aGUgUkRTIGV2ZW50IGRldGFpbC5cbiAqIEByZXR1cm5zIFJlZ2lvbiBhbmQgYWNjb3VudCBpZCBzZWdtZW50cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmRzU291cmNlQXJuID0gKHNvdXJjZUFybjogc3RyaW5nKTogeyByZWdpb246IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBwYXJ0cyA9IHNvdXJjZUFybi5zcGxpdCgnOicpO1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogcGFydHNbM10gPz8gJycsXG4gICAgYWNjb3VudDogcGFydHNbNF0gPz8gJycsXG4gIH07XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIFNsYWNrIHN0b3Atc3VjY2VzcyBub3RpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncyB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgc291cmNlVHlwZTogUmRzQXV0b1N0YXJ0RGV0YWlsWydTb3VyY2VUeXBlJ107XG4gIHNvdXJjZUlkZW50aWZpZXI6IHN0cmluZztcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNsYWNrIGBjaGF0LnBvc3RNZXNzYWdlYCBwYXlsb2FkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gQ2hhbm5lbCBhbmQgcmVzb3VyY2UgaWRlbnRpdHkgZmllbGRzLlxuICogQHJldHVybnMgQXJndW1lbnRzIHN1aXRhYmxlIGZvciBgV2ViQ2xpZW50LmNoYXQucG9zdE1lc3NhZ2VgLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24gPSAoYXJnczogU2xhY2tTdG9wTm90aWZpY2F0aW9uQXJncykgPT4gKHtcbiAgY2hhbm5lbDogYXJncy5jaGFubmVsLFxuICBhdHRhY2htZW50czogW1xuICAgIHtcbiAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICBwcmV0ZXh0OiBg8J+YtCBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgYXV0b21hdGljYWxseSBydW5uaW5nIFJEUyAke2FyZ3Muc291cmNlVHlwZX0gJHthcmdzLnNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgdmFsdWU6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnUmVnaW9uJyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5yZWdpb24sXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1R5cGUnLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZVR5cGUsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0lkZW50aWZpZXInLFxuICAgICAgICAgIHZhbHVlOiBhcmdzLnNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59KTtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIHN1Y2Nlc3MgcmVzdWx0IGFmdGVyIFN0b3BEQiogcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBGaW5hbCBzdGF0dXMgYW5kIGlkZW50aXR5IGZpZWxkcy5cbiAqIEByZXR1cm5zIFN0b3BwZWRSZXN1bHQgZm9yIHRoZSBoYW5kbGVyIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU3RvcHBlZFJlc3VsdCA9IChhcmdzOiB7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn0pOiBTdG9wcGVkUmVzdWx0ID0+ICh7XG4gIGFjdGlvbjogJ3N0b3BwZWQnLFxuICBmaW5hbFN0YXR1czogYXJncy5maW5hbFN0YXR1cyxcbiAgYWNjb3VudDogYXJncy5hY2NvdW50LFxuICByZWdpb246IGFyZ3MucmVnaW9uLFxuICBpZGVudGlmaWVyOiBhcmdzLmlkZW50aWZpZXIsXG59KTtcbiJdfQ==
package/lib/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * RDS Database Auto Start Preventer — CDK construct library.
3
3
  *
4
- * Stops RDS DB instances and clusters after AWS auto-start events, with optional
5
- * tag-based filtering in the handler and Slack notifications on successful stop.
4
+ * Stops RDS DB instances and clusters after AWS auto-start events. The handler
5
+ * filters by tags and, when a Slack secret name is set, posts to Slack after a
6
+ * successful stop.
6
7
  *
7
8
  * @module rds-database-auto-start-preventer
8
9
  */
package/lib/index.js CHANGED
@@ -17,11 +17,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  /**
18
18
  * RDS Database Auto Start Preventer — CDK construct library.
19
19
  *
20
- * Stops RDS DB instances and clusters after AWS auto-start events, with optional
21
- * tag-based filtering in the handler and Slack notifications on successful stop.
20
+ * Stops RDS DB instances and clusters after AWS auto-start events. The handler
21
+ * filters by tags and, when a Slack secret name is set, posts to Slack after a
22
+ * successful stop.
22
23
  *
23
24
  * @module rds-database-auto-start-preventer
24
25
  */
25
26
  __exportStar(require("./constructs/rds-database-auto-start-preventer"), exports);
26
27
  __exportStar(require("./stacks/rds-database-auto-start-prevent-stack"), exports);
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7O0dBT0c7QUFDSCxpRkFBK0Q7QUFDL0QsaUZBQStEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSRFMgRGF0YWJhc2UgQXV0byBTdGFydCBQcmV2ZW50ZXIg4oCUIENESyBjb25zdHJ1Y3QgbGlicmFyeS5cbiAqXG4gKiBTdG9wcyBSRFMgREIgaW5zdGFuY2VzIGFuZCBjbHVzdGVycyBhZnRlciBBV1MgYXV0by1zdGFydCBldmVudHMsIHdpdGggb3B0aW9uYWxcbiAqIHRhZy1iYXNlZCBmaWx0ZXJpbmcgaW4gdGhlIGhhbmRsZXIgYW5kIFNsYWNrIG5vdGlmaWNhdGlvbnMgb24gc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBtb2R1bGUgcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjayc7XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsaUZBQStEO0FBQy9ELGlGQUErRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUkRTIERhdGFiYXNlIEF1dG8gU3RhcnQgUHJldmVudGVyIOKAlCBDREsgY29uc3RydWN0IGxpYnJhcnkuXG4gKlxuICogU3RvcHMgUkRTIERCIGluc3RhbmNlcyBhbmQgY2x1c3RlcnMgYWZ0ZXIgQVdTIGF1dG8tc3RhcnQgZXZlbnRzLiBUaGUgaGFuZGxlclxuICogZmlsdGVycyBieSB0YWdzIGFuZCwgd2hlbiBhIFNsYWNrIHNlY3JldCBuYW1lIGlzIHNldCwgcG9zdHMgdG8gU2xhY2sgYWZ0ZXIgYVxuICogc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBtb2R1bGUgcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjayc7XG4iXX0=
@@ -9,7 +9,7 @@ export interface RDSDatabaseAutoStartPreventStackProps extends StackProps {
9
9
  readonly targetResource: TargetResource;
10
10
  /** Whether the EventBridge rules are enabled. Defaults to true if omitted. */
11
11
  readonly enableRule?: boolean;
12
- /** Secrets (e.g. Slack) for notifications. */
12
+ /** Secrets for notifications. Omit slackSecretName to skip Slack. */
13
13
  readonly secrets: Secrets;
14
14
  }
15
15
  /**