rds-database-auto-start-preventer 0.1.8 → 0.2.1

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.
@@ -1,6 +1,8 @@
1
1
  import { Construct } from 'constructs';
2
2
  /**
3
- * Tag-based criteria to select which RDS instances or clusters are subject to auto-start prevention.
3
+ * Tag-based criteria evaluated in the Lambda handler (not on the EventBridge rule).
4
+ * Resources whose tag value for {@link TargetResource.tagKey} is not in
5
+ * {@link TargetResource.tagValues} are skipped without calling StopDB*.
4
6
  */
5
7
  export interface TargetResource {
6
8
  /** Tag key to match (e.g. "Environment", "AutoStartPrevent"). */
@@ -27,12 +29,19 @@ export interface RDSDatabaseAutoStartPreventerProps {
27
29
  readonly secrets: Secrets;
28
30
  }
29
31
  /**
30
- * Construct that deploys EventBridge rules and a Durable Lambda to prevent RDS DB instances
31
- * and clusters from staying running after an auto-start event (RDS-EVENT-0154 / RDS-EVENT-0153).
32
+ * Deploys EventBridge rules and a Durable Lambda to stop matching RDS resources
33
+ * after auto-start events (RDS-EVENT-0154 / RDS-EVENT-0153).
34
+ *
35
+ * EventBridge rules match all auto-start events; tag filtering runs in the handler
36
+ * using `TagList` from `rds:DescribeDBInstances` / `rds:DescribeDBClusters`.
37
+ * IAM grants RDS describe and stop actions only (no Resource Groups Tagging API).
32
38
  */
33
39
  export declare class RDSDatabaseAutoStartPreventer extends Construct {
34
40
  /**
35
- * Creates the construct: Lambda (with Params and Secrets), EventBridge rules, and IAM.
41
+ * Creates the Durable Lambda, EventBridge rules, and IAM policies.
42
+ *
43
+ * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
44
+ * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
36
45
  *
37
46
  * @param scope - Parent construct.
38
47
  * @param id - Construct id.
@@ -45,13 +45,20 @@ 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
47
  /**
48
- * Construct that deploys EventBridge rules and a Durable Lambda to prevent RDS DB instances
49
- * and clusters from staying running after an auto-start event (RDS-EVENT-0154 / RDS-EVENT-0153).
48
+ * Deploys EventBridge rules and a Durable Lambda to stop matching RDS resources
49
+ * after auto-start events (RDS-EVENT-0154 / RDS-EVENT-0153).
50
+ *
51
+ * EventBridge rules match all auto-start events; tag filtering runs in the handler
52
+ * using `TagList` from `rds:DescribeDBInstances` / `rds:DescribeDBClusters`.
53
+ * IAM grants RDS describe and stop actions only (no Resource Groups Tagging API).
50
54
  */
51
55
  class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
52
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.1.8" };
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.2.1" };
53
57
  /**
54
- * Creates the construct: Lambda (with Params and Secrets), EventBridge rules, and IAM.
58
+ * Creates the Durable Lambda, EventBridge rules, and IAM policies.
59
+ *
60
+ * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
61
+ * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
55
62
  *
56
63
  * @param scope - Parent construct.
57
64
  * @param id - Construct id.
@@ -95,15 +102,7 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
95
102
  systemLogLevelV2: lambda.SystemLogLevel.INFO,
96
103
  applicationLogLevelV2: lambda.ApplicationLogLevel.INFO,
97
104
  });
98
- autoStartPreventFunction.addToRolePolicy(new iam.PolicyStatement({
99
- sid: 'GetResources',
100
- effect: iam.Effect.ALLOW,
101
- actions: [
102
- 'tag:GetResources',
103
- ],
104
- resources: ['*'],
105
- }));
106
- // Grant read access to the RDS API
105
+ // Grant RDS describe (status and TagList) and stop permissions to the handler role.
107
106
  autoStartPreventFunction.addToRolePolicy(new iam.PolicyStatement({
108
107
  sid: 'RdsAutoStartControl',
109
108
  effect: iam.Effect.ALLOW,
@@ -122,7 +121,7 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
122
121
  const enableRule = (() => {
123
122
  return props.enableRule === undefined || props.enableRule;
124
123
  })();
125
- // Convert the rule input to pass { event, params } to the Lambda (tag conditions are injected by the Rule).
124
+ // Pass the EventBridge event and tag filter params to the Lambda target input.
126
125
  const lambdaInput = events.RuleTargetInput.fromObject({
127
126
  event: events.EventField.fromPath('$'),
128
127
  params: {
@@ -169,4 +168,4 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
169
168
  }
170
169
  }
171
170
  exports.RDSDatabaseAutoStartPreventer = RDSDatabaseAutoStartPreventer;
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWdDaEY7OztHQUdHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSxzQkFBUzs7SUFFMUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QztRQUNqRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLDJCQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhHLG1HQUFtRztRQUNuRywwQ0FBMEM7UUFDMUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLHNEQUF3QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM5RixXQUFXLEVBQUUsZ0ZBQWdGO1lBQzdGLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEMsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsR0FBRztZQUNmLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGFBQWEsRUFBRTtnQkFDYixnQkFBZ0IsRUFBRSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLGVBQWUsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FB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QUFpQixFQUFFO1lBQ3ZDLFdBQVcsRUFBRSw4Q0FBOEM7WUFDM0QsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUI7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3hELGFBQWEsRUFBRSxDQUFDO29CQUNoQixLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsb0RBQW9EO1FBQ3BELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDdEMsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUNuQixVQUFVLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDcEMsTUFBTSxFQUFFO29CQUNOLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QjthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtvQkFDeEQsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxXQUFXO2lCQUNuQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTdISCxzRUE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3MvYXV0by1zdGFydC1wcmV2ZW50LWZ1bmN0aW9uJztcblxuLyoqXG4gKiBUYWctYmFzZWQgY3JpdGVyaWEgdG8gc2VsZWN0IHdoaWNoIFJEUyBpbnN0YW5jZXMgb3IgY2x1c3RlcnMgYXJlIHN1YmplY3QgdG8gYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggKGUuZy4gXCJFbnZpcm9ubWVudFwiLCBcIkF1dG9TdGFydFByZXZlbnRcIikuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IGluZGljYXRlIHRoZSByZXNvdXJjZSBzaG91bGQgYmUgcHJvdGVjdGVkIChlLmcuIFtcInByb2R1Y3Rpb25cIl0pLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIHNlY3JldHMgcmVxdWlyZWQgZm9yIG5vdGlmaWNhdGlvbnMgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhhdCBkZXBsb3lzIEV2ZW50QnJpZGdlIHJ1bGVzIGFuZCBhIER1cmFibGUgTGFtYmRhIHRvIHByZXZlbnQgUkRTIERCIGluc3RhbmNlc1xuICogYW5kIGNsdXN0ZXJzIGZyb20gc3RheWluZyBydW5uaW5nIGFmdGVyIGFuIGF1dG8tc3RhcnQgZXZlbnQgKFJEUy1FVkVOVC0wMTU0IC8gUkRTLUVWRU5ULTAxNTMpLlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBjb25zdHJ1Y3Q6IExhbWJkYSAod2l0aCBQYXJhbXMgYW5kIFNlY3JldHMpLCBFdmVudEJyaWRnZSBydWxlcywgYW5kIElBTS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgcmVzb3VyY2UgKHRhZyBrZXkvdmFsdWVzKSwgZW5hYmxlIHJ1bGUgZmxhZywgYW5kIHNlY3JldHMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHRoaXMsICdTbGFja1NlY3JldCcsIHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zLWJhc2VkIFJ1bm5pbmcgU2NoZWR1bGVyIChwcmV2aW91cyBTdGVwIEZ1bmN0aW9ucyBsb2dpYyBpbXBsZW1lbnRlZCBpbiBMYW1iZGEpLlxuICAgIC8vIER1cmFibGUgRXhlY3V0aW9uIHJlcXVpcmVzIE5vZGUuanMgMjIrLlxuICAgIGNvbnN0IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiA9IG5ldyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24odGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBmdW5jdGlvbiB0byBwcmV2ZW50IHRoZSBSRFMgRGF0YWJhc2Ugb3IgQ2x1c3RlciBmcm9tIHN0YXJ0aW5nIGF1dG9tYXRpY2FsbHkuJyxcbiAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICBkdXJhYmxlQ29uZmlnOiB7XG4gICAgICAgIGV4ZWN1dGlvblRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDIpLFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IER1cmF0aW9uLmRheXMoMSksXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHNsYWNrU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0Egcm9sZSB0byBjb250cm9sIHRoZSBSRFMgRGF0YWJhc2Ugb3IgQ2x1c3Rlci4nLFxuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeScpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICBsb2dHcm91cDogbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5USFJFRV9NT05USFMsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0UmVzb3VyY2VzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3RhZzpHZXRSZXNvdXJjZXMnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBSRFMgQVBJXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNBdXRvU3RhcnRDb250cm9sJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3JkczpEZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgICAgJ3JkczpEZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgICAncmRzOlN0b3BEQkluc3RhbmNlJyxcbiAgICAgICAgJ3JkczpTdG9wREJDbHVzdGVyJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgU2xhY2sgc2VjcmV0XG4gICAgc2xhY2tTZWNyZXQuZ3JhbnRSZWFkKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbik7XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMgPSBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIGNvbnN0IGVuYWJsZVJ1bGU6IGJvb2xlYW4gPSAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLmVuYWJsZVJ1bGUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVSdWxlO1xuICAgIH0pKCk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBydWxlIGlucHV0IHRvIHBhc3MgeyBldmVudCwgcGFyYW1zIH0gdG8gdGhlIExhbWJkYSAodGFnIGNvbmRpdGlvbnMgYXJlIGluamVjdGVkIGJ5IHRoZSBSdWxlKS5cbiAgICBjb25zdCBsYW1iZGFJbnB1dCA9IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQnKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgdGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIENsdXN0ZXIgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2RiIGNsdXN0ZXIgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgQ2x1c3RlciBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTUzJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUM7UUFDakYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDOUYsV0FBVyxFQUFFLGdGQUFnRjtZQUM3RixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUU7Z0JBQ2IsZ0JBQWdCLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxlQUFlLEVBQUUsc0JBQVEsQ0FBQyxJ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QUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtvQkFDeEQsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxXQUFXO2lCQUNuQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELE9BQU8sRUFBRSxVQUFVO1lBQ25CLFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLFVBQVUsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNwQyxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEhILHNFQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQtZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRhZy1iYXNlZCBjcml0ZXJpYSBldmFsdWF0ZWQgaW4gdGhlIExhbWJkYSBoYW5kbGVyIChub3Qgb24gdGhlIEV2ZW50QnJpZGdlIHJ1bGUpLlxuICogUmVzb3VyY2VzIHdob3NlIHRhZyB2YWx1ZSBmb3Ige0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ0tleX0gaXMgbm90IGluXG4gKiB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzfSBhcmUgc2tpcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIChlLmcuIFwiRW52aXJvbm1lbnRcIiwgXCJBdXRvU3RhcnRQcmV2ZW50XCIpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIHByb3RlY3RlZCAoZS5nLiBbXCJwcm9kdWN0aW9uXCJdKS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBzZWNyZXRzIHJlcXVpcmVkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgY29udGFpbmluZyBTbGFjayB0b2tlbiBhbmQgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgc2xhY2tTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBSRFMgZGF0YWJhc2UgYXV0by1zdGFydCBwcmV2ZW50ZXIgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgdXNlZCBmb3Igbm90aWZpY2F0aW9ucyAoZS5nLiBTbGFjaykuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG59XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgUkRTIGRlc2NyaWJlIGFuZCBzdG9wIGFjdGlvbnMgb25seSAobm8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgRHVyYWJsZSBMYW1iZGEsIEV2ZW50QnJpZGdlIHJ1bGVzLCBhbmQgSUFNIHBvbGljaWVzLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIHJlY2VpdmVzIGB7IGV2ZW50LCBwYXJhbXMgfWAgd2hlcmUgYHBhcmFtc2AgY2FycmllcyBgdGFnS2V5YCBhbmQgYHRhZ1ZhbHVlc2BcbiAgICogZnJvbSB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcy50YXJnZXRSZXNvdXJjZX0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc0FuZFNlY3JldHM6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgY2FjaGVTaXplOiA1MDAsXG4gICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIHJvbGUgdG8gY29udHJvbCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIuJyxcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3knKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWxWMjogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICAvLyBHcmFudCBSRFMgZGVzY3JpYmUgKHN0YXR1cyBhbmQgVGFnTGlzdCkgYW5kIHN0b3AgcGVybWlzc2lvbnMgdG8gdGhlIGhhbmRsZXIgcm9sZS5cbiAgICBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ1Jkc0F1dG9TdGFydENvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAncmRzOkRlc2NyaWJlREJJbnN0YW5jZXMnLFxuICAgICAgICAncmRzOkRlc2NyaWJlREJDbHVzdGVycycsXG4gICAgICAgICdyZHM6U3RvcERCSW5zdGFuY2UnLFxuICAgICAgICAncmRzOlN0b3BEQkNsdXN0ZXInLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQoYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcyA9IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuZW5hYmxlUnVsZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVJ1bGU7XG4gICAgfSkoKTtcblxuICAgIC8vIFBhc3MgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtcyB0byB0aGUgTGFtYmRhIHRhcmdldCBpbnB1dC5cbiAgICBjb25zdCBsYW1iZGFJbnB1dCA9IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQnKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgdGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIENsdXN0ZXIgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2RiIGNsdXN0ZXIgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgQ2x1c3RlciBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTUzJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +1,18 @@
1
1
  /**
2
- * Durable Lambda handler: on RDS auto-start events, waits for the resource to become available
3
- * (or already stopped), checks tag match, stops the instance/cluster if needed, then posts to Slack.
2
+ * Durable Lambda handler for RDS auto-start prevention.
4
3
  *
5
- * @param input - EventBridge event plus params (tagKey, tagValues).
4
+ * Workflow:
5
+ * 1. Wait 1 minute, then poll DescribeDB* until the resource leaves transitional statuses.
6
+ * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
7
+ * 3. If status is `available`, call StopDB* and poll until `stopped`.
8
+ * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
9
+ * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
10
+ *
11
+ * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
12
+ *
13
+ * @param input - `{ event, params }` from EventBridge, or a raw RDS event.
6
14
  * @param context - Durable execution context for steps and waits.
7
- * @returns Result with action ('stopped' | 'no-op'), finalStatus, account, region, identifier.
15
+ * @returns {@link StoppedResult} or {@link NoOpResult}.
16
+ * @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
8
17
  */
9
18
  export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;
@@ -5,12 +5,17 @@ const durable_execution_sdk_js_1 = require("@aws/durable-execution-sdk-js");
5
5
  const client_rds_1 = require("@aws-sdk/client-rds");
6
6
  const web_api_1 = require("@slack/web-api");
7
7
  const aws_lambda_secret_fetcher_1 = require("aws-lambda-secret-fetcher");
8
- /** Detect if the payload is the raw EventBridge event (has detail + detail-type). */
8
+ /** Type guard: input is a raw EventBridge RDS auto-start event. */
9
9
  const isRawEvent = (input) => typeof input === 'object' &&
10
10
  input != null &&
11
11
  'detail' in input &&
12
12
  'detail-type' in input;
13
- /** Build params from environment (set by CDK from targetResource). */
13
+ /**
14
+ * Builds tag filter parameters from `TAG_KEY` and `TAG_VALUES` environment variables.
15
+ *
16
+ * @returns Parsed tag key and values.
17
+ * @throws When required environment variables are missing or `TAG_VALUES` is not a JSON string array.
18
+ */
14
19
  const paramsFromEnv = () => {
15
20
  const tagKey = process.env.TAG_KEY;
16
21
  const tagValuesJson = process.env.TAG_VALUES;
@@ -29,7 +34,13 @@ const paramsFromEnv = () => {
29
34
  }
30
35
  return { tagKey, tagValues };
31
36
  };
32
- /** Normalize invocation input to AutoStartPreventInput (event + params). */
37
+ /**
38
+ * Normalizes invocation input to {@link AutoStartPreventInput}.
39
+ *
40
+ * @param input - `{ event, params }` or a raw EventBridge RDS event.
41
+ * @returns Event plus tag filter parameters.
42
+ * @throws When the payload shape is invalid.
43
+ */
33
44
  const normalizeInput = (input) => {
34
45
  if (isRawEvent(input)) {
35
46
  return { event: input, params: paramsFromEnv() };
@@ -43,8 +54,12 @@ const normalizeInput = (input) => {
43
54
  }
44
55
  throw new Error('Invalid input: expected RDS event or { event, params }.');
45
56
  };
57
+ /** Shared RDS client for describe and stop API calls. */
46
58
  const rdsClient = new client_rds_1.RDSClient({});
47
- /** RDS statuses that indicate a transition in progress; we poll every 5 minutes while in these states. */
59
+ /**
60
+ * RDS statuses that indicate an in-progress transition.
61
+ * The handler polls every 5 minutes while the resource remains in one of these states.
62
+ */
48
63
  const TRANSITIONAL_STATUSES = new Set([
49
64
  'starting',
50
65
  'configuring-enhanced-monitoring',
@@ -70,12 +85,21 @@ const matchTag = (params, tags) => {
70
85
  return params.tagValues.includes(value);
71
86
  };
72
87
  /**
73
- * Durable Lambda handler: on RDS auto-start events, waits for the resource to become available
74
- * (or already stopped), checks tag match, stops the instance/cluster if needed, then posts to Slack.
88
+ * Durable Lambda handler for RDS auto-start prevention.
75
89
  *
76
- * @param input - EventBridge event plus params (tagKey, tagValues).
90
+ * Workflow:
91
+ * 1. Wait 1 minute, then poll DescribeDB* until the resource leaves transitional statuses.
92
+ * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
93
+ * 3. If status is `available`, call StopDB* and poll until `stopped`.
94
+ * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
95
+ * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
96
+ *
97
+ * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
98
+ *
99
+ * @param input - `{ event, params }` from EventBridge, or a raw RDS event.
77
100
  * @param context - Durable execution context for steps and waits.
78
- * @returns Result with action ('stopped' | 'no-op'), finalStatus, account, region, identifier.
101
+ * @returns {@link StoppedResult} or {@link NoOpResult}.
102
+ * @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
79
103
  */
80
104
  exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (input, context) => {
81
105
  const { event, params } = normalizeInput(input);
@@ -99,9 +123,9 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
99
123
  if (!isInstance && !isCluster) {
100
124
  throw new Error(`Unsupported event: detail-type=${detailType}, SourceType=${detail.SourceType}, EventID=${detail.EventID}`);
101
125
  }
102
- // Step Functions の StartingWait (1 分待つ) に相当
126
+ // Initial delay before the first describe (allows RDS to report a stable status).
103
127
  await context.wait({ minutes: 1 });
104
- // Step Functions の DescribeTypeChoice + TagMatchChoice + StatusChoice の前半に相当
128
+ // Poll until the resource is no longer in a transitional status; capture status and TagList.
105
129
  const firstDescribe = await context.waitForCondition(async (_state, _ctx) => {
106
130
  if (isInstance) {
107
131
  const res = await rdsClient.send(new client_rds_1.DescribeDBInstancesCommand({
@@ -129,15 +153,15 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
129
153
  identifier: detail.SourceIdentifier,
130
154
  },
131
155
  waitStrategy: state => {
132
- // ステータスが遷移中であれば 5 分おきにポーリング
156
+ // Re-poll every 5 minutes while the status is still transitional.
133
157
  if (TRANSITIONAL_STATUSES.has(state.status)) {
134
158
  return { shouldContinue: true, delay: { minutes: 5 } };
135
159
  }
136
- // available / stopped / その他 → ここで一旦ループ終了し、後続ロジックへ
160
+ // available, stopped, or other terminal status — proceed to tag check and stop logic.
137
161
  return { shouldContinue: false };
138
162
  },
139
163
  });
140
- // タグが存在しない or マッチしない場合は何もせず終了
164
+ // Skip when TagList is missing or does not match tagKey / tagValues.
141
165
  if (!matchTag(params, firstDescribe.tags)) {
142
166
  return {
143
167
  action: 'no-op',
@@ -145,8 +169,9 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
145
169
  status: firstDescribe.status,
146
170
  };
147
171
  }
172
+ let didStop = false;
148
173
  let finalStatus = firstDescribe.status;
149
- // available の場合は stop API を呼び、その後 stopped になるまで待機
174
+ // When available, invoke StopDB* and poll until stopped.
150
175
  if (firstDescribe.status === 'available') {
151
176
  if (isInstance) {
152
177
  await context.step('stop-db-instance', async () => {
@@ -196,21 +221,29 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
196
221
  throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
197
222
  },
198
223
  });
224
+ didStop = true;
199
225
  finalStatus = stopped.status;
200
226
  }
201
- // stopped になっていなければ通知は出さない(Step Functions の Fail 相当)
227
+ // Already stopped without calling StopDB* (e.g. stopped by another process) — no Slack notification.
228
+ if (!didStop) {
229
+ if (finalStatus === 'stopped') {
230
+ return {
231
+ action: 'no-op',
232
+ reason: 'already stopped',
233
+ status: finalStatus,
234
+ };
235
+ }
236
+ throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
237
+ }
238
+ // Fail when StopDB* was called but the resource did not reach stopped.
202
239
  if (finalStatus !== 'stopped') {
203
240
  throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
204
241
  }
205
- // 通知用の account/region 取得(Slack 投稿用)
206
242
  const sourceArnParts = detail.SourceArn.split(':');
207
243
  const region = sourceArnParts[3];
208
244
  const account = sourceArnParts[4];
209
- // const sourceTypeHuman = humanReadableSourceType(detail.SourceType);
210
245
  const client = new web_api_1.WebClient(slackSecretValue.token);
211
246
  const channel = slackSecretValue.channel;
212
- // send slack message
213
- // const slackParentMessageResult =
214
247
  await context.step('post-slack-messages', async () => {
215
248
  return client.chat.postMessage({
216
249
  channel,
@@ -252,4 +285,4 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
252
285
  identifier: detail.SourceIdentifier,
253
286
  };
254
287
  });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQStDMUQscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUE4QixFQUFFLENBQ2hFLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDekIsS0FBSyxJQUFJLElBQUk7SUFDYixRQUFRLElBQUksS0FBSztJQUNqQixhQUFhLElBQUksS0FBSyxDQUFDO0FBRXpCLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxHQUFvQixFQUFFO0lBQzFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQzdDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksU0FBbUIsQ0FBQztJQUN4QixJQUFJLENBQUM7UUFDSCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQWEsQ0FBQztJQUNwRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRiw0RUFBNEU7QUFDNUUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQXlCLEVBQUU7SUFDL0QsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBOEIsQ0FBQztJQUNqRCxJQUNFLE9BQU8sU0FBUyxLQUFLLFFBQVE7UUFDN0IsU0FBUyxJQUFJLElBQUk7UUFDakIsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJO1FBQ3ZCLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUN4QixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUM7QUFtQkYsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDLDBHQUEwRztBQUMxRyxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BDLFVBQVU7SUFDVixpQ0FBaUM7SUFDakMsWUFBWTtJQUNaLFdBQVc7SUFDWCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUF1QixFQUFFLElBQVksRUFBVyxFQUFFO0lBQ2xFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQzdELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsT0FBTyxHQUFHLElBQUEsK0NBQW9CLEVBQ3pDLEtBQUssRUFBRSxLQUFjLEVBQUUsT0FBdUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVwRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQ3RELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNFLE9BQU8seUNBQWEsQ0FBQyxjQUFjLENBQWMsZUFBZSxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FDZCxVQUFVLEtBQUssdUJBQXVCO1FBQ3RDLE1BQU0sQ0FBQyxVQUFVLEtBQUssYUFBYTtRQUNuQyxNQUFNLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFDO0lBRXRDLE1BQU0sU0FBUyxHQUNiLFVBQVUsS0FBSyxzQkFBc0I7UUFDckMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQy9CLE1BQU0sQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLENBQUM7SUFFdEMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFVBQVUsZ0JBQWdCLE1BQU0sQ0FBQyxVQUFVLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVELDRDQUE0QztJQUM1QyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyw2RUFBNkU7SUFDN0UsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztnQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztnQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztZQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjtZQUNuRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTtTQUN4QyxDQUFDO0lBQ0osQ0FBQyxFQUNEO1FBQ0UsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDcEM7UUFDRCxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEIsNEJBQTRCO1lBQzVCLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6RCxDQUFDO1lBQ0Qsa0RBQWtEO1lBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQztLQUNGLENBQ0YsQ0FBQztJQUVGLDhCQUE4QjtJQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPO1lBQ0wsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsOEJBQThCO1lBQ3RDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFFdkMsa0RBQWtEO0lBQ2xELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ2xCLElBQUksa0NBQXFCLENBQUM7b0JBQ3hCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7aUJBQzlDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDL0MsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLGlDQUFvQixDQUFDO29CQUN2QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM3QyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUM1QyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3JCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUM5QixJQUFJLHVDQUEwQixDQUFDO29CQUM3QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM5QyxDQUFDLENBQ0gsQ0FBQztnQkFDRixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU87b0JBQ0wsTUFBTSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsSUFBSSxTQUFTO29CQUN6QyxVQUFVLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0I7aUJBQ2hFLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUM5QixJQUFJLHNDQUF5QixDQUFDO2dCQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2FBQzdDLENBQUMsQ0FDSCxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksU0FBUztnQkFDcEMsVUFBVSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2FBQ3BFLENBQUM7UUFDSixDQUFDLEVBQ0Q7WUFDRSxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNO2dCQUM1QixVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7YUFDckM7WUFDRCxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDL0UsQ0FBQztTQUNGLENBQ0YsQ0FBQztRQUVGLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsc0VBQXNFO0lBRXRFLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7SUFFekMscUJBQXFCO0lBQ3JCLG1DQUFtQztJQUNuQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUM3QixPQUFPO1lBQ1AsV0FBVyxFQUFFO2dCQUNYO29CQUNFLEtBQUssRUFBRSxTQUFTO29CQUNoQixPQUFPLEVBQUUseURBQXlELE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLGdCQUFnQixHQUFHO29CQUNqSCxNQUFNLEVBQUU7d0JBQ047NEJBQ0UsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLEtBQUssRUFBRSxPQUFPOzRCQUNkLEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxRQUFROzRCQUNmLEtBQUssRUFBRSxNQUFNOzRCQUNiLEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxNQUFNOzRCQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTs0QkFDeEIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLFlBQVk7NEJBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCOzRCQUM5QixLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsTUFBTSxFQUFFLFNBQVM7UUFDakIsV0FBVztRQUNYLE9BQU87UUFDUCxNQUFNO1FBQ04sVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7S0FDcEMsQ0FBQztBQUNKLENBQUMsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aER1cmFibGVFeGVjdXRpb24sIER1cmFibGVDb250ZXh0IH0gZnJvbSAnQGF3cy9kdXJhYmxlLWV4ZWN1dGlvbi1zZGstanMnO1xuaW1wb3J0IHtcbiAgUkRTQ2xpZW50LFxuICBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCxcbiAgU3RvcERCSW5zdGFuY2VDb21tYW5kLFxuICBTdG9wREJDbHVzdGVyQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJkcyc7XG5pbXBvcnQgeyBXZWJDbGllbnQgfSBmcm9tICdAc2xhY2svd2ViLWFwaSc7XG5pbXBvcnQgeyBzZWNyZXRGZXRjaGVyIH0gZnJvbSAnYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlcic7XG5cbi8qKlxuICogRGV0YWlsIHBheWxvYWQgb2YgYW4gUkRTIGF1dG8tc3RhcnQgZXZlbnQgZnJvbSBFdmVudEJyaWRnZSAoc3Vic2V0IHVzZWQgYnkgdGhpcyBoYW5kbGVyKS5cbiAqL1xuaW50ZXJmYWNlIFJkc0F1dG9TdGFydERldGFpbCB7XG4gIEV2ZW50SUQ6ICdSRFMtRVZFTlQtMDE1NCcgfCAnUkRTLUVWRU5ULTAxNTMnO1xuICBTb3VyY2VUeXBlOiAnREJfSU5TVEFOQ0UnIHwgJ0NMVVNURVInO1xuICBTb3VyY2VBcm46IHN0cmluZztcbiAgU291cmNlSWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJEUyBhdXRvLXN0YXJ0IGV2ZW50IGFzIHJlY2VpdmVkIGZyb20gRXZlbnRCcmlkZ2UuXG4gKi9cbmludGVyZmFjZSBSZHNBdXRvU3RhcnRFdmVudCB7XG4gICdkZXRhaWwtdHlwZSc6ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnIHwgJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JztcbiAgJ3NvdXJjZSc6ICdhd3MucmRzJztcbiAgJ2RldGFpbCc6IFJkc0F1dG9TdGFydERldGFpbDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGVxdWl2YWxlbnQgdG8gdGhvc2UgcHJldmlvdXNseSBwYXNzZWQgZnJvbSBTdGVwIEZ1bmN0aW9ucyAodGFnLWJhc2VkIGZpbHRlcmluZykuXG4gKi9cbmludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICB0YWdLZXk6IHN0cmluZztcbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBzZWNyZXQgc2hhcGUgc3RvcmVkIGluIFNlY3JldHMgTWFuYWdlciAodG9rZW4gYW5kIGNoYW5uZWwpLlxuICovXG5pbnRlcmZhY2UgU2xhY2tTZWNyZXQge1xuICB0b2tlbjogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW5wdXQgdG8gdGhlIExhbWJkYSBEdXJhYmxlIEZ1bmN0aW9uLiBFaXRoZXI6XG4gKiAtIEV2ZW50QnJpZGdlIHBhc3NlcyB0aGUgcmF3IFJEUyBldmVudDsgcGFyYW1zIGFyZSB0YWtlbiBmcm9tIGVudiAoVEFHX0tFWSwgVEFHX1ZBTFVFUykuXG4gKiAtIE9yIGNhbGxlciBjYW4gcGFzcyB7IGV2ZW50LCBwYXJhbXMgfSBkaXJlY3RseS5cbiAqL1xuaW50ZXJmYWNlIEF1dG9TdGFydFByZXZlbnRJbnB1dCB7XG4gIGV2ZW50OiBSZHNBdXRvU3RhcnRFdmVudDtcbiAgcGFyYW1zOiBBdXRvU3RhcnRQYXJhbXM7XG59XG5cbi8qKiBEZXRlY3QgaWYgdGhlIHBheWxvYWQgaXMgdGhlIHJhdyBFdmVudEJyaWRnZSBldmVudCAoaGFzIGRldGFpbCArIGRldGFpbC10eXBlKS4gKi9cbmNvbnN0IGlzUmF3RXZlbnQgPSAoaW5wdXQ6IHVua25vd24pOiBpbnB1dCBpcyBSZHNBdXRvU3RhcnRFdmVudCA9PlxuICB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmXG4gIGlucHV0ICE9IG51bGwgJiZcbiAgJ2RldGFpbCcgaW4gaW5wdXQgJiZcbiAgJ2RldGFpbC10eXBlJyBpbiBpbnB1dDtcblxuLyoqIEJ1aWxkIHBhcmFtcyBmcm9tIGVudmlyb25tZW50IChzZXQgYnkgQ0RLIGZyb20gdGFyZ2V0UmVzb3VyY2UpLiAqL1xuY29uc3QgcGFyYW1zRnJvbUVudiA9ICgpOiBBdXRvU3RhcnRQYXJhbXMgPT4ge1xuICBjb25zdCB0YWdLZXkgPSBwcm9jZXNzLmVudi5UQUdfS0VZO1xuICBjb25zdCB0YWdWYWx1ZXNKc29uID0gcHJvY2Vzcy5lbnYuVEFHX1ZBTFVFUztcbiAgaWYgKCF0YWdLZXkgfHwgIXRhZ1ZhbHVlc0pzb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIFRBR19LRVkgb3IgVEFHX1ZBTFVFUy4nKTtcbiAgfVxuICBsZXQgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICB0YWdWYWx1ZXMgPSBKU09OLnBhcnNlKHRhZ1ZhbHVlc0pzb24pIGFzIHN0cmluZ1tdO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RBR19WQUxVRVMgbXVzdCBiZSBhIEpTT04gYXJyYXkgb2Ygc3RyaW5ncy4nKTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkodGFnVmFsdWVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVEFHX1ZBTFVFUyBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLicpO1xuICB9XG4gIHJldHVybiB7IHRhZ0tleSwgdGFnVmFsdWVzIH07XG59O1xuXG4vKiogTm9ybWFsaXplIGludm9jYXRpb24gaW5wdXQgdG8gQXV0b1N0YXJ0UHJldmVudElucHV0IChldmVudCArIHBhcmFtcykuICovXG5jb25zdCBub3JtYWxpemVJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IEF1dG9TdGFydFByZXZlbnRJbnB1dCA9PiB7XG4gIGlmIChpc1Jhd0V2ZW50KGlucHV0KSkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnB1dCwgcGFyYW1zOiBwYXJhbXNGcm9tRW52KCkgfTtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGUgPSBpbnB1dCBhcyBBdXRvU3RhcnRQcmV2ZW50SW5wdXQ7XG4gIGlmIChcbiAgICB0eXBlb2YgY2FuZGlkYXRlID09PSAnb2JqZWN0JyAmJlxuICAgIGNhbmRpZGF0ZSAhPSBudWxsICYmXG4gICAgY2FuZGlkYXRlLmV2ZW50ICE9IG51bGwgJiZcbiAgICBjYW5kaWRhdGUucGFyYW1zICE9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIFJEUyBldmVudCBvciB7IGV2ZW50LCBwYXJhbXMgfS4nKTtcbn07XG5cbi8qKlxuICogQVdTLXN0eWxlIHRhZyAoS2V5L1ZhbHVlKS5cbiAqL1xuaW50ZXJmYWNlIFRhZyB7XG4gIEtleT86IHN0cmluZztcbiAgVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhdGUgdXNlZCB3aGVuIHBvbGxpbmcgUkRTIGRlc2NyaWJlIHJlc3VsdHMgKHN0YXR1cywgaWRlbnRpZmllciwgb3B0aW9uYWwgdGFncykuXG4gKi9cbmludGVyZmFjZSBQb2xsU3RhdGUge1xuICBzdGF0dXM6IHN0cmluZztcbiAgaWRlbnRpZmllcjogc3RyaW5nO1xuICB0YWdzPzogVGFnW107XG59XG5cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKiogUkRTIHN0YXR1c2VzIHRoYXQgaW5kaWNhdGUgYSB0cmFuc2l0aW9uIGluIHByb2dyZXNzOyB3ZSBwb2xsIGV2ZXJ5IDUgbWludXRlcyB3aGlsZSBpbiB0aGVzZSBzdGF0ZXMuICovXG5jb25zdCBUUkFOU0lUSU9OQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcbiAgJ3N0YXJ0aW5nJyxcbiAgJ2NvbmZpZ3VyaW5nLWVuaGFuY2VkLW1vbml0b3JpbmcnLFxuICAnYmFja2luZy11cCcsXG4gICdtb2RpZnlpbmcnLFxuICAnc3RvcHBpbmcnLFxuXSk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXNvdXJjZSBoYXMgYSB0YWcgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBhIHZhbHVlIGluIHRoZSBhbGxvd2VkIGxpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRhZyBrZXkgYW5kIGFsbG93ZWQgdmFsdWVzLlxuICogQHBhcmFtIHRhZ3MgLSBSZXNvdXJjZSB0YWcgbGlzdCAoZS5nLiBmcm9tIERlc2NyaWJlREJJbnN0YW5jZXMgLyBEZXNjcmliZURCQ2x1c3RlcnMpLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdGFnIG1hdGNoZXMuXG4gKi9cbmNvbnN0IG1hdGNoVGFnID0gKHBhcmFtczogQXV0b1N0YXJ0UGFyYW1zLCB0YWdzPzogVGFnW10pOiBib29sZWFuID0+IHtcbiAgaWYgKCF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gdGFncy5maW5kKHQgPT4gdC5LZXkgPT09IHBhcmFtcy50YWdLZXkpPy5WYWx1ZTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyYW1zLnRhZ1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGhhbmRsZXI6IG9uIFJEUyBhdXRvLXN0YXJ0IGV2ZW50cywgd2FpdHMgZm9yIHRoZSByZXNvdXJjZSB0byBiZWNvbWUgYXZhaWxhYmxlXG4gKiAob3IgYWxyZWFkeSBzdG9wcGVkKSwgY2hlY2tzIHRhZyBtYXRjaCwgc3RvcHMgdGhlIGluc3RhbmNlL2NsdXN0ZXIgaWYgbmVlZGVkLCB0aGVuIHBvc3RzIHRvIFNsYWNrLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIEV2ZW50QnJpZGdlIGV2ZW50IHBsdXMgcGFyYW1zICh0YWdLZXksIHRhZ1ZhbHVlcykuXG4gKiBAcGFyYW0gY29udGV4dCAtIER1cmFibGUgZXhlY3V0aW9uIGNvbnRleHQgZm9yIHN0ZXBzIGFuZCB3YWl0cy5cbiAqIEByZXR1cm5zIFJlc3VsdCB3aXRoIGFjdGlvbiAoJ3N0b3BwZWQnIHwgJ25vLW9wJyksIGZpbmFsU3RhdHVzLCBhY2NvdW50LCByZWdpb24sIGlkZW50aWZpZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gd2l0aER1cmFibGVFeGVjdXRpb24oXG4gIGFzeW5jIChpbnB1dDogdW5rbm93biwgY29udGV4dDogRHVyYWJsZUNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IGV2ZW50LCBwYXJhbXMgfSA9IG5vcm1hbGl6ZUlucHV0KGlucHV0KTtcbiAgICBjb25zdCB7IGRldGFpbCwgJ2RldGFpbC10eXBlJzogZGV0YWlsVHlwZSB9ID0gZXZlbnQ7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBwcm9jZXNzLmVudi5TTEFDS19TRUNSRVRfTkFNRTtcbiAgICBpZiAoIXNsYWNrU2VjcmV0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIFNMQUNLX1NFQ1JFVF9OQU1FLicpO1xuICAgIH1cbiAgICBjb25zdCBzbGFja1NlY3JldFZhbHVlID0gYXdhaXQgY29udGV4dC5zdGVwKCdmZXRjaC1zbGFjay1zZWNyZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZTxTbGFja1NlY3JldD4oc2xhY2tTZWNyZXROYW1lKTtcbiAgICB9KTtcblxuICAgIGlmICghc2xhY2tTZWNyZXRWYWx1ZT8udG9rZW4gfHwgIXNsYWNrU2VjcmV0VmFsdWU/LmNoYW5uZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2xhY2sgc2VjcmV0IG11c3QgY29udGFpbiB0b2tlbiBhbmQgY2hhbm5lbC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0luc3RhbmNlID1cbiAgICAgIGRldGFpbFR5cGUgPT09ICdSRFMgREIgSW5zdGFuY2UgRXZlbnQnICYmXG4gICAgICBkZXRhaWwuU291cmNlVHlwZSA9PT0gJ0RCX0lOU1RBTkNFJyAmJlxuICAgICAgZGV0YWlsLkV2ZW50SUQgPT09ICdSRFMtRVZFTlQtMDE1NCc7XG5cbiAgICBjb25zdCBpc0NsdXN0ZXIgPVxuICAgICAgZGV0YWlsVHlwZSA9PT0gJ1JEUyBEQiBDbHVzdGVyIEV2ZW50JyAmJlxuICAgICAgZGV0YWlsLlNvdXJjZVR5cGUgPT09ICdDTFVTVEVSJyAmJlxuICAgICAgZGV0YWlsLkV2ZW50SUQgPT09ICdSRFMtRVZFTlQtMDE1Myc7XG5cbiAgICBpZiAoIWlzSW5zdGFuY2UgJiYgIWlzQ2x1c3Rlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgZXZlbnQ6IGRldGFpbC10eXBlPSR7ZGV0YWlsVHlwZX0sIFNvdXJjZVR5cGU9JHtkZXRhaWwuU291cmNlVHlwZX0sIEV2ZW50SUQ9JHtkZXRhaWwuRXZlbnRJRH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIEZ1bmN0aW9ucyDjga4gU3RhcnRpbmdXYWl0ICgxIOWIhuW+heOBpCkg44Gr55u45b2TXG4gICAgYXdhaXQgY29udGV4dC53YWl0KHsgbWludXRlczogMSB9KTtcblxuICAgIC8vIFN0ZXAgRnVuY3Rpb25zIOOBriBEZXNjcmliZVR5cGVDaG9pY2UgKyBUYWdNYXRjaENob2ljZSArIFN0YXR1c0Nob2ljZSDjga7liY3ljYrjgavnm7jlvZNcbiAgICBjb25zdCBmaXJzdERlc2NyaWJlID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFBvbGxTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgdGFnczogKGRiPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChjbHVzdGVyPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiBzdGF0ZSA9PiB7XG4gICAgICAgICAgLy8g44K544OG44O844K/44K544GM6YG356e75Lit44Gn44GC44KM44GwIDUg5YiG44GK44GN44Gr44Od44O844Oq44Oz44KwXG4gICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhdmFpbGFibGUgLyBzdG9wcGVkIC8g44Gd44Gu5LuWIOKGkiDjgZPjgZPjgafkuIDml6bjg6vjg7zjg5fntYLkuobjgZfjgIHlvozntprjg63jgrjjg4Pjgq/jgbhcbiAgICAgICAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogZmFsc2UgfTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIOOCv+OCsOOBjOWtmOWcqOOBl+OBquOBhCBvciDjg57jg4Pjg4HjgZfjgarjgYTloLTlkIjjga/kvZXjgoLjgZvjgZrntYLkuoZcbiAgICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyxcbiAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsU3RhdHVzID0gZmlyc3REZXNjcmliZS5zdGF0dXM7XG5cbiAgICAvLyBhdmFpbGFibGUg44Gu5aC05ZCI44GvIHN0b3AgQVBJIOOCkuWRvOOBs+OAgeOBneOBruW+jCBzdG9wcGVkIOOBq+OBquOCi+OBvuOBp+W+heapn1xuICAgIGlmIChmaXJzdERlc2NyaWJlLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScpIHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IFN0b3BEQkNsdXN0ZXJDb21tYW5kKHtcbiAgICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcHBlZCA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxQb2xsU3RhdGU+KFxuICAgICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhaXRTdHJhdGVneTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogNSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3A6ICR7c3RhdGUuc3RhdHVzfWApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBmaW5hbFN0YXR1cyA9IHN0b3BwZWQuc3RhdHVzO1xuICAgIH1cblxuICAgIC8vIHN0b3BwZWQg44Gr44Gq44Gj44Gm44GE44Gq44GR44KM44Gw6YCa55+l44Gv5Ye644GV44Gq44GE77yIU3RlcCBGdW5jdGlvbnMg44GuIEZhaWwg55u45b2T77yJXG4gICAgaWYgKGZpbmFsU3RhdHVzICE9PSAnc3RvcHBlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgREIgc3RhdHVzIGlzIG5vdCBzdG9wcGVkIGFmdGVyIHByb2Nlc3Npbmc6ICR7ZmluYWxTdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgLy8g6YCa55+l55So44GuIGFjY291bnQvcmVnaW9uIOWPluW+l++8iFNsYWNrIOaKleeov+eUqO+8iVxuICAgIGNvbnN0IHNvdXJjZUFyblBhcnRzID0gZGV0YWlsLlNvdXJjZUFybi5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNvdXJjZUFyblBhcnRzWzNdO1xuICAgIGNvbnN0IGFjY291bnQgPSBzb3VyY2VBcm5QYXJ0c1s0XTtcblxuICAgIC8vIGNvbnN0IHNvdXJjZVR5cGVIdW1hbiA9IGh1bWFuUmVhZGFibGVTb3VyY2VUeXBlKGRldGFpbC5Tb3VyY2VUeXBlKTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJDbGllbnQoc2xhY2tTZWNyZXRWYWx1ZS50b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbDtcblxuICAgIC8vIHNlbmQgc2xhY2sgbWVzc2FnZVxuICAgIC8vIGNvbnN0IHNsYWNrUGFyZW50TWVzc2FnZVJlc3VsdCA9XG4gICAgYXdhaXQgY29udGV4dC5zdGVwKCdwb3N0LXNsYWNrLW1lc3NhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGNsaWVudC5jaGF0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgYXR0YWNobWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogJyMzNmE2NGYnLFxuICAgICAgICAgICAgcHJldGV4dDogYPCfmLQgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIGF1dG9tYXRpY2FsbHkgcnVubmluZyBSRFMgJHtkZXRhaWwuU291cmNlVHlwZX0gJHtkZXRhaWwuU291cmNlSWRlbnRpZmllcn0uYCxcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdBY2NvdW50JyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYWNjb3VudCxcbiAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnUmVnaW9uJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVnaW9uLFxuICAgICAgICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGV0YWlsLlNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0lkZW50aWZpZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbjogJ3N0b3BwZWQnLFxuICAgICAgZmluYWxTdGF0dXMsXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgaWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgfTtcbiAgfSxcbik7XG5cbiJdfQ==
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQTZFMUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUE4QixFQUFFLENBQ2hFLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDekIsS0FBSyxJQUFJLElBQUk7SUFDYixRQUFRLElBQUksS0FBSztJQUNqQixhQUFhLElBQUksS0FBSyxDQUFDO0FBRXpCOzs7OztHQUtHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBb0IsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUM3QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxJQUFJLFNBQW1CLENBQUM7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFhLENBQUM7SUFDcEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUs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Q2IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLE1BQU07NEJBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVOzRCQUN4QixLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsWUFBWTs0QkFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7NEJBQzlCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxNQUFNLEVBQUUsU0FBUztRQUNqQixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aXRoRHVyYWJsZUV4ZWN1dGlvbiwgRHVyYWJsZUNvbnRleHQgfSBmcm9tICdAYXdzL2R1cmFibGUtZXhlY3V0aW9uLXNkay1qcyc7XG5pbXBvcnQge1xuICBSRFNDbGllbnQsXG4gIERlc2NyaWJlREJJbnN0YW5jZXNDb21tYW5kLFxuICBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kLFxuICBTdG9wREJJbnN0YW5jZUNvbW1hbmQsXG4gIFN0b3BEQkNsdXN0ZXJDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcmRzJztcbmltcG9ydCB7IFdlYkNsaWVudCB9IGZyb20gJ0BzbGFjay93ZWItYXBpJztcbmltcG9ydCB7IHNlY3JldEZldGNoZXIgfSBmcm9tICdhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyJztcblxuLyoqXG4gKiBEZXRhaWwgcGF5bG9hZCBvZiBhbiBSRFMgYXV0by1zdGFydCBldmVudCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5pbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RGV0YWlsIHtcbiAgLyoqIEV2ZW50IElEOiBSRFMtRVZFTlQtMDE1NCAoREIgaW5zdGFuY2UpIG9yIFJEUy1FVkVOVC0wMTUzIChEQiBjbHVzdGVyKS4gKi9cbiAgRXZlbnRJRDogJ1JEUy1FVkVOVC0wMTU0JyB8ICdSRFMtRVZFTlQtMDE1Myc7XG4gIC8qKiBSZXNvdXJjZSB0eXBlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuICovXG4gIFNvdXJjZVR5cGU6ICdEQl9JTlNUQU5DRScgfCAnQ0xVU1RFUic7XG4gIC8qKiBBUk4gb2YgdGhlIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIuICovXG4gIFNvdXJjZUFybjogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyIGZyb20gdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VJZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUkRTIGF1dG8tc3RhcnQgZXZlbnQgYXMgcmVjZWl2ZWQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcgfCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnO1xuICAnc291cmNlJzogJ2F3cy5yZHMnO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCBvbiB0aGUgcmVzb3VyY2UuICovXG4gIHRhZ0tleTogc3RyaW5nO1xuICAvKiogQWxsb3dlZCB0YWcgdmFsdWVzOyB0aGUgcmVzb3VyY2UgaXMgcHJvY2Vzc2VkIG9ubHkgd2hlbiBpdHMgdGFnIHZhbHVlIGlzIGluIHRoaXMgbGlzdC4gKi9cbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICovXG5pbnRlcmZhY2UgU2xhY2tTZWNyZXQge1xuICAvKiogU2xhY2sgYm90IG9yIHVzZXIgT0F1dGggdG9rZW4uICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBDaGFubmVsIElEIG9yIG5hbWUgdG8gcG9zdCBub3RpZmljYXRpb25zIHRvLiAqL1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBoYW5kbGVyIGlucHV0OiBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIENESyBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGB7IGV2ZW50LCBwYXJhbXMgfWAgdmlhIEV2ZW50QnJpZGdlIHRhcmdldCBpbnB1dC5cbiAqIEEgcmF3IEV2ZW50QnJpZGdlIGV2ZW50IGFsb25lIGlzIGFsc28gYWNjZXB0ZWQ7IGBwYXJhbXNgIGFyZSB0aGVuIHJlYWQgZnJvbVxuICogYFRBR19LRVlgIGFuZCBgVEFHX1ZBTFVFU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5pbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuaW50ZXJmYWNlIE5vT3BSZXN1bHQge1xuICBhY3Rpb246ICduby1vcCc7XG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnIHwgJ2FscmVhZHkgc3RvcHBlZCc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gdGhpcyBpbnZvY2F0aW9uIGNhbGxlZCBTdG9wREIqIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKi9cbmludGVyZmFjZSBTdG9wcGVkUmVzdWx0IHtcbiAgYWN0aW9uOiAnc3RvcHBlZCc7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGEgcmF3IEV2ZW50QnJpZGdlIFJEUyBhdXRvLXN0YXJ0IGV2ZW50LiAqL1xuY29uc3QgaXNSYXdFdmVudCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIFJkc0F1dG9TdGFydEV2ZW50ID0+XG4gIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcbiAgaW5wdXQgIT0gbnVsbCAmJlxuICAnZGV0YWlsJyBpbiBpbnB1dCAmJlxuICAnZGV0YWlsLXR5cGUnIGluIGlucHV0O1xuXG4vKipcbiAqIEJ1aWxkcyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMgZnJvbSBgVEFHX0tFWWAgYW5kIGBUQUdfVkFMVUVTYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHJldHVybnMgUGFyc2VkIHRhZyBrZXkgYW5kIHZhbHVlcy5cbiAqIEB0aHJvd3MgV2hlbiByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG1pc3Npbmcgb3IgYFRBR19WQUxVRVNgIGlzIG5vdCBhIEpTT04gc3RyaW5nIGFycmF5LlxuICovXG5jb25zdCBwYXJhbXNGcm9tRW52ID0gKCk6IEF1dG9TdGFydFBhcmFtcyA9PiB7XG4gIGNvbnN0IHRhZ0tleSA9IHByb2Nlc3MuZW52LlRBR19LRVk7XG4gIGNvbnN0IHRhZ1ZhbHVlc0pzb24gPSBwcm9jZXNzLmVudi5UQUdfVkFMVUVTO1xuICBpZiAoIXRhZ0tleSB8fCAhdGFnVmFsdWVzSnNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgVEFHX0tFWSBvciBUQUdfVkFMVUVTLicpO1xuICB9XG4gIGxldCB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIHRhZ1ZhbHVlcyA9IEpTT04ucGFyc2UodGFnVmFsdWVzSnNvbikgYXMgc3RyaW5nW107XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignVEFHX1ZBTFVFUyBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLicpO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh0YWdWYWx1ZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUQUdfVkFMVUVTIG11c3QgYmUgYSBKU09OIGFycmF5IG9mIHN0cmluZ3MuJyk7XG4gIH1cbiAgcmV0dXJuIHsgdGFnS2V5LCB0YWdWYWx1ZXMgfTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBpbnZvY2F0aW9uIGlucHV0IHRvIHtAbGluayBBdXRvU3RhcnRQcmV2ZW50SW5wdXR9LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgb3IgYSByYXcgRXZlbnRCcmlkZ2UgUkRTIGV2ZW50LlxuICogQHJldHVybnMgRXZlbnQgcGx1cyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKiBAdGhyb3dzIFdoZW4gdGhlIHBheWxvYWQgc2hhcGUgaXMgaW52YWxpZC5cbiAqL1xuY29uc3Qgbm9ybWFsaXplSW5wdXQgPSAoaW5wdXQ6IHVua25vd24pOiBBdXRvU3RhcnRQcmV2ZW50SW5wdXQgPT4ge1xuICBpZiAoaXNSYXdFdmVudChpbnB1dCkpIHtcbiAgICByZXR1cm4geyBldmVudDogaW5wdXQsIHBhcmFtczogcGFyYW1zRnJvbUVudigpIH07XG4gIH1cbiAgY29uc3QgY2FuZGlkYXRlID0gaW5wdXQgYXMgQXV0b1N0YXJ0UHJldmVudElucHV0O1xuICBpZiAoXG4gICAgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiZcbiAgICBjYW5kaWRhdGUgIT0gbnVsbCAmJlxuICAgIGNhbmRpZGF0ZS5ldmVudCAhPSBudWxsICYmXG4gICAgY2FuZGlkYXRlLnBhcmFtcyAhPSBudWxsXG4gICkge1xuICAgIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0OiBleHBlY3RlZCBSRFMgZXZlbnQgb3IgeyBldmVudCwgcGFyYW1zIH0uJyk7XG59O1xuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmludGVyZmFjZSBUYWcge1xuICBLZXk/OiBzdHJpbmc7XG4gIFZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YXRlIHNuYXBzaG90IHdoaWxlIHBvbGxpbmcgUkRTIGRlc2NyaWJlIEFQSXMuXG4gKi9cbmludGVyZmFjZSBQb2xsU3RhdGUge1xuICAvKiogQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy4gKi9cbiAgc3RhdHVzOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIuICovXG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgLyoqIFRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2U7IHByZXNlbnQgb24gdGhlIGZpcnN0IHBvbGwgb25seS4gKi9cbiAgdGFncz86IFRhZ1tdO1xufVxuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIFJEUyBzdGF0dXNlcyB0aGF0IGluZGljYXRlIGFuIGluLXByb2dyZXNzIHRyYW5zaXRpb24uXG4gKiBUaGUgaGFuZGxlciBwb2xscyBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuY29uc3QgVFJBTlNJVElPTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXG4gICdzdGFydGluZycsXG4gICdjb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nJyxcbiAgJ2JhY2tpbmctdXAnLFxuICAnbW9kaWZ5aW5nJyxcbiAgJ3N0b3BwaW5nJyxcbl0pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIGEgdGFnIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgYSB2YWx1ZSBpbiB0aGUgYWxsb3dlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUYWcga2V5IGFuZCBhbGxvd2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB0YWdzIC0gUmVzb3VyY2UgdGFnIGxpc3QgKGUuZy4gZnJvbSBEZXNjcmliZURCSW5zdGFuY2VzIC8gRGVzY3JpYmVEQkNsdXN0ZXJzKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHRhZyBtYXRjaGVzLlxuICovXG5jb25zdCBtYXRjaFRhZyA9IChwYXJhbXM6IEF1dG9TdGFydFBhcmFtcywgdGFncz86IFRhZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmICghdGFncyB8fCB0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IHRhZ3MuZmluZCh0ID0+IHQuS2V5ID09PSBwYXJhbXMudGFnS2V5KT8uVmFsdWU7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcy50YWdWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xufTtcblxuLyoqXG4gKiBEdXJhYmxlIExhbWJkYSBoYW5kbGVyIGZvciBSRFMgYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICpcbiAqIFdvcmtmbG93OlxuICogMS4gV2FpdCAxIG1pbnV0ZSwgdGhlbiBwb2xsIERlc2NyaWJlREIqIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICogMi4gUmVhZCB0YWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlIGBUYWdMaXN0YDsgc2tpcCB3aGVuIHtAbGluayBtYXRjaFRhZ30gcmV0dXJucyBmYWxzZS5cbiAqIDMuIElmIHN0YXR1cyBpcyBgYXZhaWxhYmxlYCwgY2FsbCBTdG9wREIqIGFuZCBwb2xsIHVudGlsIGBzdG9wcGVkYC5cbiAqIDQuIElmIGFscmVhZHkgYHN0b3BwZWRgIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLCByZXR1cm4ge0BsaW5rIE5vT3BSZXN1bHR9IChubyBTbGFjayBub3RpZmljYXRpb24pLlxuICogNS4gUG9zdCB0byBTbGFjayBvbmx5IHdoZW4gU3RvcERCKiB3YXMgaW52b2tlZCBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICpcbiAqIFRhZyBtYXRjaGluZyB1c2VzIFJEUyBEZXNjcmliZSBBUElzIG9ubHk7IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBpcyBub3QgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UsIG9yIGEgcmF3IFJEUyBldmVudC5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgZXZlbnQgaXMgdW5zdXBwb3J0ZWQsIHNlY3JldHMgYXJlIGludmFsaWQsIG9yIHN0b3AgZGlkIG5vdCByZWFjaCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gd2l0aER1cmFibGVFeGVjdXRpb24oXG4gIGFzeW5jIChpbnB1dDogdW5rbm93biwgY29udGV4dDogRHVyYWJsZUNvbnRleHQpOiBQcm9taXNlPFN0b3BwZWRSZXN1bHQgfCBOb09wUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gICAgY29uc3QgeyBkZXRhaWwsICdkZXRhaWwtdHlwZSc6IGRldGFpbFR5cGUgfSA9IGV2ZW50O1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gcHJvY2Vzcy5lbnYuU0xBQ0tfU0VDUkVUX05BTUU7XG4gICAgaWYgKCFzbGFja1NlY3JldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBTTEFDS19TRUNSRVRfTkFNRS4nKTtcbiAgICB9XG4gICAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWU8U2xhY2tTZWNyZXQ+KHNsYWNrU2VjcmV0TmFtZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNsYWNrU2VjcmV0VmFsdWU/LnRva2VuIHx8ICFzbGFja1NlY3JldFZhbHVlPy5jaGFubmVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGNvbnRhaW4gdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbnN0YW5jZSA9XG4gICAgICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICAgICAgZGV0YWlsLlNvdXJjZVR5cGUgPT09ICdEQl9JTlNUQU5DRScgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTQnO1xuXG4gICAgY29uc3QgaXNDbHVzdGVyID1cbiAgICAgIGRldGFpbFR5cGUgPT09ICdSRFMgREIgQ2x1c3RlciBFdmVudCcgJiZcbiAgICAgIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnQ0xVU1RFUicgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4gICAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuc3VwcG9ydGVkIGV2ZW50OiBkZXRhaWwtdHlwZT0ke2RldGFpbFR5cGV9LCBTb3VyY2VUeXBlPSR7ZGV0YWlsLlNvdXJjZVR5cGV9LCBFdmVudElEPSR7ZGV0YWlsLkV2ZW50SUR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbCBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRlc2NyaWJlIChhbGxvd3MgUkRTIHRvIHJlcG9ydCBhIHN0YWJsZSBzdGF0dXMpLlxuICAgIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgICAvLyBQb2xsIHVudGlsIHRoZSByZXNvdXJjZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdHVzOyBjYXB0dXJlIHN0YXR1cyBhbmQgVGFnTGlzdC5cbiAgICBjb25zdCBmaXJzdERlc2NyaWJlID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFBvbGxTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgdGFnczogKGRiPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChjbHVzdGVyPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiBzdGF0ZSA9PiB7XG4gICAgICAgICAgLy8gUmUtcG9sbCBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHN0YXR1cyBpcyBzdGlsbCB0cmFuc2l0aW9uYWwuXG4gICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhdmFpbGFibGUsIHN0b3BwZWQsIG9yIG90aGVyIHRlcm1pbmFsIHN0YXR1cyDigJQgcHJvY2VlZCB0byB0YWcgY2hlY2sgYW5kIHN0b3AgbG9naWMuXG4gICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyxcbiAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3AgPSBmYWxzZTtcbiAgICBsZXQgZmluYWxTdGF0dXMgPSBmaXJzdERlc2NyaWJlLnN0YXR1cztcblxuICAgIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgcG9sbCB1bnRpbCBzdG9wcGVkLlxuICAgIGlmIChmaXJzdERlc2NyaWJlLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScpIHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IFN0b3BEQkNsdXN0ZXJDb21tYW5kKHtcbiAgICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcHBlZCA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxQb2xsU3RhdGU+KFxuICAgICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhaXRTdHJhdGVneTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogNSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3A6ICR7c3RhdGUuc3RhdHVzfWApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICAgIGZpbmFsU3RhdHVzID0gc3RvcHBlZC5zdGF0dXM7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICAgIGlmICghZGlkU3RvcCkge1xuICAgICAgaWYgKGZpbmFsU3RhdHVzID09PSAnc3RvcHBlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3Rpb246ICduby1vcCcsXG4gICAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgICB9XG5cbiAgICAvLyBGYWlsIHdoZW4gU3RvcERCKiB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVzb3VyY2UgZGlkIG5vdCByZWFjaCBzdG9wcGVkLlxuICAgIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERCIHN0YXR1cyBpcyBub3Qgc3RvcHBlZCBhZnRlciBwcm9jZXNzaW5nOiAke2ZpbmFsU3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUFyblBhcnRzID0gZGV0YWlsLlNvdXJjZUFybi5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNvdXJjZUFyblBhcnRzWzNdO1xuICAgIGNvbnN0IGFjY291bnQgPSBzb3VyY2VBcm5QYXJ0c1s0XTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJDbGllbnQoc2xhY2tTZWNyZXRWYWx1ZS50b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbDtcblxuICAgIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBjbGllbnQuY2hhdC5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6ICcjMzZhNjRmJyxcbiAgICAgICAgICAgIHByZXRleHQ6IGDwn5i0IFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBhdXRvbWF0aWNhbGx5IHJ1bm5pbmcgUkRTICR7ZGV0YWlsLlNvdXJjZVR5cGV9ICR7ZGV0YWlsLlNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFjY291bnQsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1JlZ2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2lvbixcbiAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRldGFpbC5Tb3VyY2VUeXBlLFxuICAgICAgICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246ICdzdG9wcGVkJyxcbiAgICAgIGZpbmFsU3RhdHVzLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgIH07XG4gIH0sXG4pO1xuXG4iXX0=
package/lib/index.d.ts CHANGED
@@ -1,2 +1,10 @@
1
+ /**
2
+ * RDS Database Auto Start Preventer — CDK construct library.
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.
6
+ *
7
+ * @module rds-database-auto-start-preventer
8
+ */
1
9
  export * from './constructs/rds-database-auto-start-preventer';
2
10
  export * from './stacks/rds-database-auto-start-prevent-stack';
package/lib/index.js CHANGED
@@ -14,6 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * RDS Database Auto Start Preventer — CDK construct library.
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.
22
+ *
23
+ * @module rds-database-auto-start-preventer
24
+ */
17
25
  __exportStar(require("./constructs/rds-database-auto-start-preventer"), exports);
18
26
  __exportStar(require("./stacks/rds-database-auto-start-prevent-stack"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlGQUErRDtBQUMvRCxpRkFBK0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhY2tzL3Jkcy1kYXRhYmFzZS1hdXRvLXN0YXJ0LXByZXZlbnQtc3RhY2snOyJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7O0dBT0c7QUFDSCxpRkFBK0Q7QUFDL0QsaUZBQStEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSRFMgRGF0YWJhc2UgQXV0byBTdGFydCBQcmV2ZW50ZXIg4oCUIENESyBjb25zdHJ1Y3QgbGlicmFyeS5cbiAqXG4gKiBTdG9wcyBSRFMgREIgaW5zdGFuY2VzIGFuZCBjbHVzdGVycyBhZnRlciBBV1MgYXV0by1zdGFydCBldmVudHMsIHdpdGggb3B0aW9uYWxcbiAqIHRhZy1iYXNlZCBmaWx0ZXJpbmcgaW4gdGhlIGhhbmRsZXIgYW5kIFNsYWNrIG5vdGlmaWNhdGlvbnMgb24gc3VjY2Vzc2Z1bCBzdG9wLlxuICpcbiAqIEBtb2R1bGUgcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjayc7XG4iXX0=
@@ -13,7 +13,7 @@ export interface RDSDatabaseAutoStartPreventStackProps extends StackProps {
13
13
  readonly secrets: Secrets;
14
14
  }
15
15
  /**
16
- * CDK Stack that deploys the RDS database auto start prevent (EventBridge Rule + Durable Lambda).
16
+ * CDK stack that deploys {@link RDSDatabaseAutoStartPreventer}.
17
17
  */
18
18
  export declare class RDSDatabaseAutoStartPreventStack extends Stack {
19
19
  /**
@@ -5,10 +5,10 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
6
6
  const rds_database_auto_start_preventer_1 = require("../constructs/rds-database-auto-start-preventer");
7
7
  /**
8
- * CDK Stack that deploys the RDS database auto start prevent (EventBridge Rule + Durable Lambda).
8
+ * CDK stack that deploys {@link RDSDatabaseAutoStartPreventer}.
9
9
  */
10
10
  class RDSDatabaseAutoStartPreventStack extends aws_cdk_lib_1.Stack {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventStack", version: "0.1.8" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventStack", version: "0.2.1" };
12
12
  /**
13
13
  * Creates the stack and the RDSDatabaseAutoStartPreventer construct.
14
14
  *
@@ -26,4 +26,4 @@ class RDSDatabaseAutoStartPreventStack extends aws_cdk_lib_1.Stack {
26
26
  }
27
27
  }
28
28
  exports.RDSDatabaseAutoStartPreventStack = RDSDatabaseAutoStartPreventStack;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNkNBQWdEO0FBRWhELHVHQUF5SDtBQWN6SDs7R0FFRztBQUNILE1BQWEsZ0NBQWlDLFNBQVEsbUJBQUs7O0lBQ3pEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEM7UUFDcEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxpRUFBNkIsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDdkUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoQkgsNEVBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIsIFRhcmdldFJlc291cmNlLCBTZWNyZXRzIH0gZnJvbSAnLi4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUkRTIGRhdGFiYXNlIGF1dG8gc3RhcnQgcHJldmVudCBDREsgc3RhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIGZvciBub3RpZmljYXRpb25zLiAqL1xuICByZWFkb25seSBzZWNyZXRzOiBTZWNyZXRzO1xufVxuXG4vKipcbiAqIENESyBTdGFjayB0aGF0IGRlcGxveXMgdGhlIFJEUyBkYXRhYmFzZSBhdXRvIHN0YXJ0IHByZXZlbnQgKEV2ZW50QnJpZGdlIFJ1bGUgKyBEdXJhYmxlIExhbWJkYSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHN0YWNrIGFuZCB0aGUgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgY29uc3RydWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBTdGFjayBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gU3RhY2sgcHJvcHMgKHRhcmdldCByZXNvdXJjZSwgZW5hYmxlIHJ1bGUsIHNlY3JldHMpLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudFN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIG5ldyBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlcih0aGlzLCAnUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXInLCB7XG4gICAgICB0YXJnZXRSZXNvdXJjZTogcHJvcHMudGFyZ2V0UmVzb3VyY2UsXG4gICAgICBlbmFibGVSdWxlOiBwcm9wcy5lbmFibGVSdWxlLFxuICAgICAgc2VjcmV0czogcHJvcHMuc2VjcmV0cyxcbiAgICB9KTtcbiAgfVxufSJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFja3MvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNkNBQWdEO0FBRWhELHVHQUF5SDtBQWN6SDs7R0FFRztBQUNILE1BQWEsZ0NBQWlDLFNBQVEsbUJBQUs7O0lBQ3pEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEM7UUFDcEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxpRUFBNkIsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDdkUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoQkgsNEVBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIsIFRhcmdldFJlc291cmNlLCBTZWNyZXRzIH0gZnJvbSAnLi4vY29uc3RydWN0cy9yZHMtZGF0YWJhc2UtYXV0by1zdGFydC1wcmV2ZW50ZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUkRTIGRhdGFiYXNlIGF1dG8gc3RhcnQgcHJldmVudCBDREsgc3RhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIGZvciBub3RpZmljYXRpb25zLiAqL1xuICByZWFkb25seSBzZWNyZXRzOiBTZWNyZXRzO1xufVxuXG4vKipcbiAqIENESyBzdGFjayB0aGF0IGRlcGxveXMge0BsaW5rIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc3RhY2sgYW5kIHRoZSBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlciBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIFN0YWNrIGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBTdGFjayBwcm9wcyAodGFyZ2V0IHJlc291cmNlLCBlbmFibGUgcnVsZSwgc2VjcmV0cykuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50U3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyKHRoaXMsICdSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlcicsIHtcbiAgICAgIHRhcmdldFJlc291cmNlOiBwcm9wcy50YXJnZXRSZXNvdXJjZSxcbiAgICAgIGVuYWJsZVJ1bGU6IHByb3BzLmVuYWJsZVJ1bGUsXG4gICAgICBzZWNyZXRzOiBwcm9wcy5zZWNyZXRzLFxuICAgIH0pO1xuICB9XG59Il19
package/package.json CHANGED
@@ -62,11 +62,11 @@
62
62
  "jest": "^30.4.2",
63
63
  "jest-junit": "^17",
64
64
  "jsii": "~5.9.0",
65
- "jsii-diff": "^1.137.0",
65
+ "jsii-diff": "^1.138.0",
66
66
  "jsii-docgen": "^10.5.0",
67
- "jsii-pacmak": "^1.137.0",
67
+ "jsii-pacmak": "^1.138.0",
68
68
  "jsii-rosetta": "~5.9.0",
69
- "projen": "^0.100.7",
69
+ "projen": "^0.101.4",
70
70
  "ts-jest": "^29.4.11",
71
71
  "ts-node": "^10.9.2",
72
72
  "typescript": "5.9.x"
@@ -97,7 +97,7 @@
97
97
  "publishConfig": {
98
98
  "access": "public"
99
99
  },
100
- "version": "0.1.8",
100
+ "version": "0.2.1",
101
101
  "jest": {
102
102
  "coverageProvider": "v8",
103
103
  "testMatch": [