@aligent/cdk-aspects 0.5.2 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @aligent/cdk-aspects
2
2
 
3
+ ## 0.5.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1639](https://github.com/aligent/cdk-constructs/pull/1639) [`060f291`](https://github.com/aligent/cdk-constructs/commit/060f29103f3fd2146bd2d88de54d0e2009f55910) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps-dev): bump ts-jest from 29.4.6 to 29.4.9 in the testing-tools group across 1 directory
8
+
9
+ - [#1642](https://github.com/aligent/cdk-constructs/pull/1642) [`d760efe`](https://github.com/aligent/cdk-constructs/commit/d760efe3baec8e33df1b49415de815e2bfd128e5) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps): bump the aws group across 1 directory with 11 updates
10
+
11
+ - [#1658](https://github.com/aligent/cdk-constructs/pull/1658) [`9da935e`](https://github.com/aligent/cdk-constructs/commit/9da935eaf79dd4fa6a07fc1d183fbe04c5c74501) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates
12
+
13
+ ## 0.5.4
14
+
15
+ ### Patch Changes
16
+
17
+ - [#1660](https://github.com/aligent/cdk-constructs/pull/1660) [`d2fb7aa`](https://github.com/aligent/cdk-constructs/commit/d2fb7aa1c03fcf4257d8f5883bf5765510885486) Thanks [@toddhainsworth](https://github.com/toddhainsworth)! - Fixed `StepFunctionsDefaultsAspect` missing IAM grants for CloudWatch Logs delivery. The aspect was setting `loggingConfiguration` directly on the L1 `CfnStateMachine`, bypassing CDK's IAM grant mechanism. The state machine role now receives the required `logs:*` permissions, preventing the `"IAM Role is not authorized to access the Log Destination"` CloudFormation error on deployment.
18
+
19
+ ## 0.5.3
20
+
21
+ ### Patch Changes
22
+
23
+ - [#1661](https://github.com/aligent/cdk-constructs/pull/1661) [`25cf7c9`](https://github.com/aligent/cdk-constructs/commit/25cf7c9fc6427a9c5a15f01928ee2121c03a3ec7) Thanks [@toddhainsworth](https://github.com/toddhainsworth)! - Fixed `ResourcePrefixAspect` failing synthesis when a prefixed resource name exceeds the AWS maximum length. The aspect now truncates the name and appends an 8-character SHA-256 hash to maintain uniqueness, and emits a `cdk synth` warning identifying the original and truncated name. This prevents L3 constructs (e.g. `BucketDeployment`) from generating child resources that the user has no control over causing failed deployments.
24
+
25
+ - [#1654](https://github.com/aligent/cdk-constructs/pull/1654) [`99d96c9`](https://github.com/aligent/cdk-constructs/commit/99d96c95b237b9b1d9e341957d621025e0c3bd6a) Thanks [@kai-nguyen-aligent](https://github.com/kai-nguyen-aligent)! - ### `@aligent/cdk-nodejs-function-from-entry` (minor)
26
+ - **Changed base class from `Function` to `NodejsFunction`** — the construct now extends `NodejsFunction` (and accepts `NodejsFunctionProps`) instead of the generic `Function`, enabling Node.js-specific bundling options. The parent `entry` prop is omitted to avoid conflicts with the custom typed `entry`.
27
+ - **Added `NoInfer` to the `entry` generic parameter** — prevents TypeScript from incorrectly inferring `TPrefix` from the `entry` value; the prefix is now inferred solely from `sourcePrefix`.
28
+ - **Made `runtime` optional** — consumers no longer need to explicitly pass a runtime.
29
+ - **Improved path traversal validation** — replaced the simple relative-path check with a `findServiceRoot` helper that walks up to a configurable `rootParentDir` ancestor, giving clearer error messages on invalid paths.
30
+ - **Added `rootParentDir` prop** (default: `'services'`) to control the allowed root for asset resolution.
31
+
32
+ ### `@aligent/cdk-step-function-from-file` (minor)
33
+ - **Added `NoInfer` to the `filepath` generic parameter** — prevents unintended type inference from the `filepath` value.
34
+ - **Improved path traversal validation** — uses the same `findServiceRoot` approach as the Lambda construct for consistent, configurable path safety checks.
35
+ - **Added `rootParentDir` prop** (default: `'services'`) to control the allowed root for asset resolution.
36
+
37
+ ### `@aligent/cdk-aspects` (patch)
38
+ - **Updated `NodeJsFunctionDefaultsAspect` JSDoc** — clarified that the configured runtime is always applied to ensure consistency, while other defaults (tracing, memory, timeout, source maps) are only applied when not already set.
39
+
3
40
  ## 0.5.2
4
41
 
5
42
  ### Patch Changes
package/README.md CHANGED
@@ -105,6 +105,64 @@ const stack = new Stack(app, "MyStack");
105
105
  Aspects.of(stack).add(new MicroserviceChecks());
106
106
  ```
107
107
 
108
+ ## Resource Prefix
109
+
110
+ Automatically prefixes physical resource names across supported AWS resource types. Ensures all resources in a stack share a consistent naming scheme (e.g. `myapp-prod-orders-function`), which is especially useful for identifying resources by environment or service in the AWS console.
111
+
112
+ ### Features
113
+
114
+ - Prefixes names for Lambda functions, S3 buckets, DynamoDB tables, SQS queues, SNS topics, IAM roles, SSM parameters, Step Functions, EventBridge rules, and more
115
+ - Handles resource-specific naming rules: S3 names are lowercased, FIFO queues/topics preserve the `.fifo` suffix, SSM parameters use path-style prefixes (`/prefix/name`)
116
+ - **Automatic truncation**: if a prefixed name would exceed AWS's maximum length for that resource type, the aspect truncates the name and appends an 8-character SHA-256 hash to maintain uniqueness. A CDK warning is emitted for each truncated resource. This prevents L3 constructs (e.g. `BucketDeployment`) from generating child resources that cause synthesis failures.
117
+ - Idempotent: already-prefixed resources are skipped
118
+ - Supports an exclusion list to skip specific resource types
119
+
120
+ ### Usage
121
+
122
+ ```typescript
123
+ import { Aspects } from "aws-cdk-lib";
124
+ import { ResourcePrefixAspect } from "@aligent/cdk-aspects";
125
+
126
+ const stage = new ApplicationStage(app, "prod");
127
+ Aspects.of(stage).add(new ResourcePrefixAspect({ prefix: "myapp-prod" }));
128
+ ```
129
+
130
+ Excluding specific resource types:
131
+
132
+ ```typescript
133
+ Aspects.of(stage).add(
134
+ new ResourcePrefixAspect({
135
+ prefix: "myapp-prod",
136
+ exclude: ["AWS::IAM::Role"],
137
+ })
138
+ );
139
+ ```
140
+
141
+ ### Truncation behaviour
142
+
143
+ When a prefixed name exceeds the AWS maximum for its resource type, the aspect:
144
+
145
+ 1. Hashes the full (pre-truncation) name with SHA-256 and takes the first 8 hex characters
146
+ 2. Truncates the name to fit within the limit, preserving any required suffix (e.g. `.fifo`)
147
+ 3. Emits a `cdk synth` warning identifying the original and truncated name
148
+
149
+ This applies to all overflows, including explicitly user-set names. The warning tells you which resources were affected so you can shorten the base name or prefix if desired.
150
+
151
+ Example warning:
152
+ ```
153
+ [ResourcePrefixAspect] "myapp-prod-VeryLongGeneratedFunctionName" (72 chars) exceeds the maximum allowed length of 64. Name has been truncated to "myapp-prod-VeryLongGenerate-a3f9c2d1". Shorten the resource base name or your prefix ("myapp-prod") to avoid truncation.
154
+ ```
155
+
156
+ ### Critical notes
157
+
158
+ - **Apply to each `Stage`, not the `App`**: CDK Stage constructs create synthesis boundaries. Apply the aspect to each Stage individually.
159
+ - **Aspect priority with versioning**: when combining with `LambdaAndStepFunctionVersioningAspect`, apply this aspect first using CDK's priority system (lower number = runs first):
160
+
161
+ ```typescript
162
+ Aspects.of(stage).add(new ResourcePrefixAspect({ prefix: "myapp" }), { priority: 100 });
163
+ Aspects.of(stage).add(new LambdaAndStepFunctionVersioningAspect(), { priority: 200 });
164
+ ```
165
+
108
166
  ## Version Functions
109
167
 
110
168
  An aspect that automatically adds versioning and aliases to Lambda functions and Step Functions.
@@ -40,10 +40,12 @@ export declare class NodeJsFunctionDefaultsAspect implements IAspect {
40
40
  */
41
41
  constructor(config: Config);
42
42
  /**
43
- * Visits a construct and applies runtime and tracing settings if it's a NodejsFunction
43
+ * Visits a construct and applies defaults if it's a Node.js Lambda function.
44
44
  *
45
- * Applies configuration-specific runtime, tracing, and environment settings to Node.js
46
- * Lambda functions that don't already have these properties explicitly set.
45
+ * The configured runtime is **always** applied to
46
+ * ensure consistency across the stack even if the function already
47
+ * specifies a Node.js runtime. Tracing, memory, timeout, and source map
48
+ * settings are only applied when not already explicitly set.
47
49
  *
48
50
  * @param node - The construct to potentially modify
49
51
  */
@@ -43,10 +43,12 @@ class NodeJsFunctionDefaultsAspect {
43
43
  };
44
44
  }
45
45
  /**
46
- * Visits a construct and applies runtime and tracing settings if it's a NodejsFunction
46
+ * Visits a construct and applies defaults if it's a Node.js Lambda function.
47
47
  *
48
- * Applies configuration-specific runtime, tracing, and environment settings to Node.js
49
- * Lambda functions that don't already have these properties explicitly set.
48
+ * The configured runtime is **always** applied to
49
+ * ensure consistency across the stack even if the function already
50
+ * specifies a Node.js runtime. Tracing, memory, timeout, and source map
51
+ * settings are only applied when not already explicitly set.
50
52
  *
51
53
  * @param node - The construct to potentially modify
52
54
  */
@@ -72,4 +74,4 @@ class NodeJsFunctionDefaultsAspect {
72
74
  }
73
75
  }
74
76
  exports.NodeJsFunctionDefaultsAspect = NodeJsFunctionDefaultsAspect;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm9kZWpzLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVEQUF1RTtBQUN2RSxxRUFBK0Q7QUFVL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSw0QkFBNEI7SUFHdkM7Ozs7T0FJRztJQUNILFlBQVksTUFBYzs7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEdBQUcsTUFBTTtZQUNULFNBQVMsRUFBRSxNQUFBLE1BQU0sQ0FBQyxTQUFTLG1DQUFJLElBQUk7WUFDbkMsVUFBVSxFQUFFLE1BQUEsTUFBTSxDQUFDLFVBQVUsbUNBQUksR0FBRztZQUNwQyxPQUFPLEVBQUUsTUFBQSxNQUFNLENBQUMsT0FBTyxtQ0FBSSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLElBQUksWUFBWSxrQ0FBYyxFQUFFLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUEyQixDQUFDO1lBRTFELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2pELENBQUM7WUFFRCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMzRCxXQUFXLENBQUMsYUFBYSxHQUFHLEVBQUUsSUFBSSxFQUFFLG9CQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsQ0FBQztZQUVELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hELFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3JELFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDNUMsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWxERCxvRUFrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElBc3BlY3QgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENmbkZ1bmN0aW9uLCBSdW50aW1lLCBUcmFjaW5nIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW50ZXJmYWNlIENvbmZpZyB7XG4gIHJ1bnRpbWU6IFJ1bnRpbWU7XG4gIHNvdXJjZU1hcD86IGJvb2xlYW47XG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXNwZWN0IHRoYXQgYXV0b21hdGljYWxseSBhcHBsaWVzIGNvbmZpZ3VyYXRpb24tYXdhcmUgZGVmYXVsdHMgdG8gTm9kZS5qcyBMYW1iZGEgZnVuY3Rpb25zXG4gKlxuICogVmlzaXRzIGFsbCBjb25zdHJ1Y3RzIGluIHRoZSBzY29wZSBhbmQgYXV0b21hdGljYWxseSBhcHBsaWVzIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgcnVudGltZSwgdHJhY2luZywgYW5kIGVudmlyb25tZW50IHNldHRpbmdzIHRvIE5vZGUuanMgTGFtYmRhIGZ1bmN0aW9ucy5cbiAqIERpZmZlcmVudCBjb25maWd1cmF0aW9ucyBjYW4gb3B0aW1pemUgZm9yIGRpZmZlcmVudCBwcmlvcml0aWVzIHN1Y2ggYXMgYnVpbGQgc3BlZWQsIGJ1bmRsZSBzaXplLCBvciBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBBcHBseSBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRlZmF1bHRzIHRvIGFsbCBOb2RlLmpzIGZ1bmN0aW9uc1xuICogQXNwZWN0cy5vZihhcHApLmFkZChuZXcgTm9kZUpzRnVuY3Rpb25EZWZhdWx0c0FzcGVjdCh7XG4gKiAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzI0X1gsXG4gKiAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAqIH0pKTtcbiAqXG4gKiAvLyBGdW5jdGlvbnMgYXV0b21hdGljYWxseSBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHNcbiAqIG5ldyBOb2RlanNGdW5jdGlvbihzdGFjaywgJ015RnVuY3Rpb24nLCB7XG4gKiAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KCdzcmMvbGFtYmRhJyksXG4gKiAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAqICAgLy8gcnVudGltZSwgdHJhY2luZywgYW5kIHNvdXJjZSBtYXAgc3VwcG9ydCBhcHBsaWVkIGF1dG9tYXRpY2FsbHlcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19sYW1iZGFfbm9kZWpzLk5vZGVqc0Z1bmN0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIE5vZGVKc0Z1bmN0aW9uRGVmYXVsdHNBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFJlcXVpcmVkPENvbmZpZz47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTm9kZUpzRnVuY3Rpb25EZWZhdWx0c0FzcGVjdFxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBpZGVudGlmaWVyIHVzZWQgdG8gc2VsZWN0IGFwcHJvcHJpYXRlIGRlZmF1bHRzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIHNvdXJjZU1hcDogY29uZmlnLnNvdXJjZU1hcCA/PyB0cnVlLFxuICAgICAgbWVtb3J5U2l6ZTogY29uZmlnLm1lbW9yeVNpemUgPz8gMjU2LFxuICAgICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgPz8gMyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0cyBhIGNvbnN0cnVjdCBhbmQgYXBwbGllcyBydW50aW1lIGFuZCB0cmFjaW5nIHNldHRpbmdzIGlmIGl0J3MgYSBOb2RlanNGdW5jdGlvblxuICAgKlxuICAgKiBBcHBsaWVzIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgcnVudGltZSwgdHJhY2luZywgYW5kIGVudmlyb25tZW50IHNldHRpbmdzIHRvIE5vZGUuanNcbiAgICogTGFtYmRhIGZ1bmN0aW9ucyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSB0aGVzZSBwcm9wZXJ0aWVzIGV4cGxpY2l0bHkgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBjb25zdHJ1Y3QgdG8gcG90ZW50aWFsbHkgbW9kaWZ5XG4gICAqL1xuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlanNGdW5jdGlvbikge1xuICAgICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBub2RlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkZ1bmN0aW9uO1xuXG4gICAgICBpZiAoY2ZuRnVuY3Rpb24pIHtcbiAgICAgICAgY2ZuRnVuY3Rpb24ucnVudGltZSA9IHRoaXMuY29uZmlnLnJ1bnRpbWUubmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNmbkZ1bmN0aW9uICYmIGNmbkZ1bmN0aW9uLnRyYWNpbmdDb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjZm5GdW5jdGlvbi50cmFjaW5nQ29uZmlnID0geyBtb2RlOiBUcmFjaW5nLkFDVElWRSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZuRnVuY3Rpb24gJiYgY2ZuRnVuY3Rpb24ubWVtb3J5U2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNmbkZ1bmN0aW9uLm1lbW9yeVNpemUgPSB0aGlzLmNvbmZpZy5tZW1vcnlTaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZuRnVuY3Rpb24gJiYgY2ZuRnVuY3Rpb24udGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNmbkZ1bmN0aW9uLnRpbWVvdXQgPSB0aGlzLmNvbmZpZy50aW1lb3V0O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25maWcuc291cmNlTWFwKSB7XG4gICAgICAgIG5vZGUuYWRkRW52aXJvbm1lbnQoXCJOT0RFX09QVElPTlNcIiwgXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm9kZWpzLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVEQUF1RTtBQUN2RSxxRUFBK0Q7QUFVL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSw0QkFBNEI7SUFHdkM7Ozs7T0FJRztJQUNILFlBQVksTUFBYzs7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEdBQUcsTUFBTTtZQUNULFNBQVMsRUFBRSxNQUFBLE1BQU0sQ0FBQyxTQUFTLG1DQUFJLElBQUk7WUFDbkMsVUFBVSxFQUFFLE1BQUEsTUFBTSxDQUFDLFVBQVUsbUNBQUksR0FBRztZQUNwQyxPQUFPLEVBQUUsTUFBQSxNQUFNLENBQUMsT0FBTyxtQ0FBSSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLElBQWdCO1FBQ3BCLElBQUksSUFBSSxZQUFZLGtDQUFjLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQTJCLENBQUM7WUFFMUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDakQsQ0FBQztZQUVELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNELFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxJQUFJLEVBQUUsb0JBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxDQUFDO1lBRUQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEQsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNsRCxDQUFDO1lBRUQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckQsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUM1QyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBcERELG9FQW9EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgSUFzcGVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ2ZuRnVuY3Rpb24sIFJ1bnRpbWUsIFRyYWNpbmcgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgQ29uZmlnIHtcbiAgcnVudGltZTogUnVudGltZTtcbiAgc291cmNlTWFwPzogYm9vbGVhbjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBc3BlY3QgdGhhdCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgY29uZmlndXJhdGlvbi1hd2FyZSBkZWZhdWx0cyB0byBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbnNcbiAqXG4gKiBWaXNpdHMgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHNjb3BlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBydW50aW1lLCB0cmFjaW5nLCBhbmQgZW52aXJvbm1lbnQgc2V0dGluZ3MgdG8gTm9kZS5qcyBMYW1iZGEgZnVuY3Rpb25zLlxuICogRGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGNhbiBvcHRpbWl6ZSBmb3IgZGlmZmVyZW50IHByaW9yaXRpZXMgc3VjaCBhcyBidWlsZCBzcGVlZCwgYnVuZGxlIHNpemUsIG9yIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEFwcGx5IGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgZGVmYXVsdHMgdG8gYWxsIE5vZGUuanMgZnVuY3Rpb25zXG4gKiBBc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBOb2RlSnNGdW5jdGlvbkRlZmF1bHRzQXNwZWN0KHtcbiAqICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjRfWCxcbiAqICAgc291cmNlTWFwOiB0cnVlLFxuICogfSkpO1xuICpcbiAqIC8vIEZ1bmN0aW9ucyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgY29uZmlndXJhdGlvbiBkZWZhdWx0c1xuICogbmV3IE5vZGVqc0Z1bmN0aW9uKHN0YWNrLCAnTXlGdW5jdGlvbicsIHtcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoJ3NyYy9sYW1iZGEnKSxcbiAqICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICogICAvLyBydW50aW1lLCB0cmFjaW5nLCBhbmQgc291cmNlIG1hcCBzdXBwb3J0IGFwcGxpZWQgYXV0b21hdGljYWxseVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2xhbWJkYV9ub2RlanMuTm9kZWpzRnVuY3Rpb24uaHRtbFxuICovXG5leHBvcnQgY2xhc3MgTm9kZUpzRnVuY3Rpb25EZWZhdWx0c0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUmVxdWlyZWQ8Q29uZmlnPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBOb2RlSnNGdW5jdGlvbkRlZmF1bHRzQXNwZWN0XG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGlkZW50aWZpZXIgdXNlZCB0byBzZWxlY3QgYXBwcm9wcmlhdGUgZGVmYXVsdHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgc291cmNlTWFwOiBjb25maWcuc291cmNlTWFwID8/IHRydWUsXG4gICAgICBtZW1vcnlTaXplOiBjb25maWcubWVtb3J5U2l6ZSA/PyAyNTYsXG4gICAgICB0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyAzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRzIGEgY29uc3RydWN0IGFuZCBhcHBsaWVzIGRlZmF1bHRzIGlmIGl0J3MgYSBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyZWQgcnVudGltZSBpcyAqKmFsd2F5cyoqIGFwcGxpZWQgdG9cbiAgICogZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgc3RhY2sg4oCUIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGFscmVhZHlcbiAgICogc3BlY2lmaWVzIGEgTm9kZS5qcyBydW50aW1lLiBUcmFjaW5nLCBtZW1vcnksIHRpbWVvdXQsIGFuZCBzb3VyY2UgbWFwXG4gICAqIHNldHRpbmdzIGFyZSBvbmx5IGFwcGxpZWQgd2hlbiBub3QgYWxyZWFkeSBleHBsaWNpdGx5IHNldC5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgLSBUaGUgY29uc3RydWN0IHRvIHBvdGVudGlhbGx5IG1vZGlmeVxuICAgKi9cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgTm9kZWpzRnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gbm9kZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5GdW5jdGlvbjtcblxuICAgICAgaWYgKGNmbkZ1bmN0aW9uKSB7XG4gICAgICAgIGNmbkZ1bmN0aW9uLnJ1bnRpbWUgPSB0aGlzLmNvbmZpZy5ydW50aW1lLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZm5GdW5jdGlvbiAmJiBjZm5GdW5jdGlvbi50cmFjaW5nQ29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2ZuRnVuY3Rpb24udHJhY2luZ0NvbmZpZyA9IHsgbW9kZTogVHJhY2luZy5BQ1RJVkUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNmbkZ1bmN0aW9uICYmIGNmbkZ1bmN0aW9uLm1lbW9yeVNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjZm5GdW5jdGlvbi5tZW1vcnlTaXplID0gdGhpcy5jb25maWcubWVtb3J5U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNmbkZ1bmN0aW9uICYmIGNmbkZ1bmN0aW9uLnRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gdGhpcy5jb25maWcudGltZW91dDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNvdXJjZU1hcCkge1xuICAgICAgICBub2RlLmFkZEVudmlyb25tZW50KFwiTk9ERV9PUFRJT05TXCIsIFwiLS1lbmFibGUtc291cmNlLW1hcHNcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StepFunctionsDefaultsAspect = void 0;
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
4
5
  const aws_logs_1 = require("aws-cdk-lib/aws-logs");
5
6
  const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions");
6
7
  /**
@@ -48,27 +49,46 @@ class StepFunctionsDefaultsAspect {
48
49
  // For EXPRESS state machines, configure logging if not already set
49
50
  if (cfnStateMachine.stateMachineType === aws_stepfunctions_1.StateMachineType.EXPRESS &&
50
51
  cfnStateMachine.loggingConfiguration === undefined) {
51
- // Create a log group for the state machine
52
52
  const logGroup = new aws_logs_1.LogGroup(node, "LogGroup", {
53
53
  logGroupName: `/aws/vendedlogs/states/${node.node.id}`,
54
54
  });
55
- // Get the underlying CFN log group to access its ARN
56
- const cfnLogGroup = logGroup.node.defaultChild;
57
55
  cfnStateMachine.loggingConfiguration = {
58
56
  destinations: [
59
57
  {
60
58
  cloudWatchLogsLogGroup: {
61
- logGroupArn: cfnLogGroup.attrArn,
59
+ logGroupArn: logGroup.logGroupArn,
62
60
  },
63
61
  },
64
62
  ],
65
63
  level: aws_stepfunctions_1.LogLevel.ALL,
66
64
  includeExecutionData: true,
67
65
  };
66
+ // Grant the state machine role the permissions required to deliver logs.
67
+ // Mirrors what CDK's StateMachine.buildLoggingConfiguration() does internally.
68
+ //
69
+ // resources: ["*"] is intentional — all eight actions are vended-log-delivery
70
+ // control-plane APIs that operate at the account level and do not support
71
+ // resource-level scoping against a specific log group ARN.
72
+ // See: https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html
73
+ // https://docs.aws.amazon.com/step-functions/latest/dg/cw-logs.html
74
+ node.addToRolePolicy(new aws_iam_1.PolicyStatement({
75
+ effect: aws_iam_1.Effect.ALLOW,
76
+ actions: [
77
+ "logs:CreateLogDelivery",
78
+ "logs:GetLogDelivery",
79
+ "logs:UpdateLogDelivery",
80
+ "logs:DeleteLogDelivery",
81
+ "logs:ListLogDeliveries",
82
+ "logs:PutResourcePolicy",
83
+ "logs:DescribeResourcePolicies",
84
+ "logs:DescribeLogGroups",
85
+ ],
86
+ resources: ["*"],
87
+ }));
68
88
  }
69
89
  }
70
90
  }
71
91
  }
72
92
  }
73
93
  exports.StepFunctionsDefaultsAspect = StepFunctionsDefaultsAspect;
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGVwLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBNkQ7QUFDN0QscUVBS3VDO0FBR3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLDJCQUEyQjtJQUN0Qzs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLElBQUksWUFBWSxnQ0FBWSxFQUFFLENBQUM7WUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUErQixDQUFDO1lBRWxFLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLG1DQUFtQztnQkFDbkMsSUFBSSxlQUFlLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3ZELGVBQWUsQ0FBQyxvQkFBb0IsR0FBRzt3QkFDckMsT0FBTyxFQUFFLElBQUk7cUJBQ2QsQ0FBQztnQkFDSixDQUFDO2dCQUVELG1FQUFtRTtnQkFDbkUsSUFDRSxlQUFlLENBQUMsZ0JBQWdCLEtBQUssb0NBQWdCLENBQUMsT0FBTztvQkFDN0QsZUFBZSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFDbEQsQ0FBQztvQkFDRCwyQ0FBMkM7b0JBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksbUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO3dCQUM5QyxZQUFZLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO3FCQUN2RCxDQUFDLENBQUM7b0JBRUgscURBQXFEO29CQUNyRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQTJCLENBQUM7b0JBRTlELGVBQWUsQ0FBQyxvQkFBb0IsR0FBRzt3QkFDckMsWUFBWSxFQUFFOzRCQUNaO2dDQUNFLHNCQUFzQixFQUFFO29DQUN0QixXQUFXLEVBQUUsV0FBVyxDQUFDLE9BQU87aUNBQ2pDOzZCQUNGO3lCQUNGO3dCQUNELEtBQUssRUFBRSw0QkFBUSxDQUFDLEdBQUc7d0JBQ25CLG9CQUFvQixFQUFFLElBQUk7cUJBQzNCLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbERELGtFQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgSUFzcGVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ2ZuTG9nR3JvdXAsIExvZ0dyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQge1xuICBDZm5TdGF0ZU1hY2hpbmUsXG4gIExvZ0xldmVsLFxuICBTdGF0ZU1hY2hpbmUsXG4gIFN0YXRlTWFjaGluZVR5cGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9uc1wiO1xuaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogQXNwZWN0IHRoYXQgYXV0b21hdGljYWxseSBhcHBsaWVzIHRyYWNpbmcgYW5kIGxvZ2dpbmcgc2V0dGluZ3MgdG8gU3RlcCBGdW5jdGlvbnNcbiAqXG4gKiBWaXNpdHMgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHNjb3BlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgWC1SYXkgdHJhY2luZyB0byBhbGxcbiAqIHN0YXRlIG1hY2hpbmVzLiBGb3IgRVhQUkVTUyBzdGF0ZSBtYWNoaW5lcywgYXV0b21hdGljYWxseSBjcmVhdGVzIGxvZyBncm91cHMgYW5kXG4gKiBjb25maWd1cmVzIGNvbXByZWhlbnNpdmUgbG9nZ2luZyBmb3IgZW5oYW5jZWQgb2JzZXJ2YWJpbGl0eS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQXBwbHkgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBkZWZhdWx0cyB0byBhbGwgU3RlcCBGdW5jdGlvbnNcbiAqIEFzcGVjdHMub2YoYXBwKS5hZGQobmV3IFN0ZXBGdW5jdGlvbkRlZmF1bHRzQXNwZWN0KCkpO1xuICpcbiAqIC8vIFN0ZXAgRnVuY3Rpb25zIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCBkZWZhdWx0c1xuICogbmV3IFN0YXRlTWFjaGluZShzdGFjaywgJ015V29ya2Zsb3cnLCB7XG4gKiAgIHN0YXRlTWFjaGluZVR5cGU6IFN0YXRlTWFjaGluZVR5cGUuRVhQUkVTUyxcbiAqICAgZGVmaW5pdGlvbkJvZHk6IERlZmluaXRpb25Cb2R5LmZyb21GaWxlKCd3b3JrZmxvdy5hc2wueWFtbCcpLFxuICogICAvLyB0cmFjaW5nIGVuYWJsZWQgYW5kIGxvZ2dpbmcgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGZvciBFWFBSRVNTXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3Nfc3RlcGZ1bmN0aW9ucy5TdGF0ZU1hY2hpbmUuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgU3RlcEZ1bmN0aW9uc0RlZmF1bHRzQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIC8qKlxuICAgKiBWaXNpdHMgYSBjb25zdHJ1Y3QgYW5kIGFwcGxpZXMgdHJhY2luZyBhbmQgbG9nZ2luZyBzZXR0aW5ncyBpZiBpdCdzIGEgU3RhdGVNYWNoaW5lXG4gICAqXG4gICAqIEVuYWJsZXMgWC1SYXkgdHJhY2luZyBmb3IgYWxsIHN0YXRlIG1hY2hpbmVzLiBGb3IgRVhQUkVTUyBzdGF0ZSBtYWNoaW5lcyB0aGF0IGRvbid0XG4gICAqIGFscmVhZHkgaGF2ZSBsb2dnaW5nIGNvbmZpZ3VyZWQsIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBsb2cgZ3JvdXBzIGFuZCBjb25maWd1cmVzXG4gICAqIGNvbXByZWhlbnNpdmUgbG9nZ2luZyB3aXRoIGZ1bGwgZXhlY3V0aW9uIGRhdGEgY2FwdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIG5vZGUgLSBUaGUgY29uc3RydWN0IHRvIHBvdGVudGlhbGx5IG1vZGlmeVxuICAgKi9cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgU3RhdGVNYWNoaW5lKSB7XG4gICAgICBjb25zdCBjZm5TdGF0ZU1hY2hpbmUgPSBub2RlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblN0YXRlTWFjaGluZTtcblxuICAgICAgaWYgKGNmblN0YXRlTWFjaGluZSkge1xuICAgICAgICAvLyBBcHBseSB0cmFjaW5nIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoY2ZuU3RhdGVNYWNoaW5lLnRyYWNpbmdDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjZm5TdGF0ZU1hY2hpbmUudHJhY2luZ0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgRVhQUkVTUyBzdGF0ZSBtYWNoaW5lcywgY29uZmlndXJlIGxvZ2dpbmcgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjZm5TdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lVHlwZSA9PT0gU3RhdGVNYWNoaW5lVHlwZS5FWFBSRVNTICYmXG4gICAgICAgICAgY2ZuU3RhdGVNYWNoaW5lLmxvZ2dpbmdDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbG9nIGdyb3VwIGZvciB0aGUgc3RhdGUgbWFjaGluZVxuICAgICAgICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKG5vZGUsIFwiTG9nR3JvdXBcIiwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy8ke25vZGUubm9kZS5pZH1gLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIENGTiBsb2cgZ3JvdXAgdG8gYWNjZXNzIGl0cyBBUk5cbiAgICAgICAgICBjb25zdCBjZm5Mb2dHcm91cCA9IGxvZ0dyb3VwLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkxvZ0dyb3VwO1xuXG4gICAgICAgICAgY2ZuU3RhdGVNYWNoaW5lLmxvZ2dpbmdDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTG9nc0xvZ0dyb3VwOiB7XG4gICAgICAgICAgICAgICAgICBsb2dHcm91cEFybjogY2ZuTG9nR3JvdXAuYXR0ckFybixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxldmVsOiBMb2dMZXZlbC5BTEwsXG4gICAgICAgICAgICBpbmNsdWRlRXhlY3V0aW9uRGF0YTogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGVwLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBOEQ7QUFDOUQsbURBQWdEO0FBQ2hELHFFQUt1QztBQUd2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSwyQkFBMkI7SUFDdEM7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsSUFBSSxJQUFJLFlBQVksZ0NBQVksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBK0IsQ0FBQztZQUVsRSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixtQ0FBbUM7Z0JBQ25DLElBQUksZUFBZSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN2RCxlQUFlLENBQUMsb0JBQW9CLEdBQUc7d0JBQ3JDLE9BQU8sRUFBRSxJQUFJO3FCQUNkLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxtRUFBbUU7Z0JBQ25FLElBQ0UsZUFBZSxDQUFDLGdCQUFnQixLQUFLLG9DQUFnQixDQUFDLE9BQU87b0JBQzdELGVBQWUsQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLEVBQ2xELENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7d0JBQzlDLFlBQVksRUFBRSwwQkFBMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7cUJBQ3ZELENBQUMsQ0FBQztvQkFFSCxlQUFlLENBQUMsb0JBQW9CLEdBQUc7d0JBQ3JDLFlBQVksRUFBRTs0QkFDWjtnQ0FDRSxzQkFBc0IsRUFBRTtvQ0FDdEIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2lDQUNsQzs2QkFDRjt5QkFDRjt3QkFDRCxLQUFLLEVBQUUsNEJBQVEsQ0FBQyxHQUFHO3dCQUNuQixvQkFBb0IsRUFBRSxJQUFJO3FCQUMzQixDQUFDO29CQUVGLHlFQUF5RTtvQkFDekUsK0VBQStFO29CQUMvRSxFQUFFO29CQUNGLDhFQUE4RTtvQkFDOUUsMEVBQTBFO29CQUMxRSwyREFBMkQ7b0JBQzNELHlHQUF5RztvQkFDekcseUVBQXlFO29CQUN6RSxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLHlCQUFlLENBQUM7d0JBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7d0JBQ3BCLE9BQU8sRUFBRTs0QkFDUCx3QkFBd0I7NEJBQ3hCLHFCQUFxQjs0QkFDckIsd0JBQXdCOzRCQUN4Qix3QkFBd0I7NEJBQ3hCLHdCQUF3Qjs0QkFDeEIsd0JBQXdCOzRCQUN4QiwrQkFBK0I7NEJBQy9CLHdCQUF3Qjt5QkFDekI7d0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO3FCQUNqQixDQUFDLENBQ0gsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF2RUQsa0VBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJQXNwZWN0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBMb2dHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHtcbiAgQ2ZuU3RhdGVNYWNoaW5lLFxuICBMb2dMZXZlbCxcbiAgU3RhdGVNYWNoaW5lLFxuICBTdGF0ZU1hY2hpbmVUeXBlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnNcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0cmFjaW5nIGFuZCBsb2dnaW5nIHNldHRpbmdzIHRvIFN0ZXAgRnVuY3Rpb25zXG4gKlxuICogVmlzaXRzIGFsbCBjb25zdHJ1Y3RzIGluIHRoZSBzY29wZSBhbmQgYXV0b21hdGljYWxseSBhcHBsaWVzIFgtUmF5IHRyYWNpbmcgdG8gYWxsXG4gKiBzdGF0ZSBtYWNoaW5lcy4gRm9yIEVYUFJFU1Mgc3RhdGUgbWFjaGluZXMsIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBsb2cgZ3JvdXBzIGFuZFxuICogY29uZmlndXJlcyBjb21wcmVoZW5zaXZlIGxvZ2dpbmcgZm9yIGVuaGFuY2VkIG9ic2VydmFiaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEFwcGx5IGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgZGVmYXVsdHMgdG8gYWxsIFN0ZXAgRnVuY3Rpb25zXG4gKiBBc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBTdGVwRnVuY3Rpb25EZWZhdWx0c0FzcGVjdCgpKTtcbiAqXG4gKiAvLyBTdGVwIEZ1bmN0aW9ucyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgZGVmYXVsdHNcbiAqIG5ldyBTdGF0ZU1hY2hpbmUoc3RhY2ssICdNeVdvcmtmbG93Jywge1xuICogICBzdGF0ZU1hY2hpbmVUeXBlOiBTdGF0ZU1hY2hpbmVUeXBlLkVYUFJFU1MsXG4gKiAgIGRlZmluaXRpb25Cb2R5OiBEZWZpbml0aW9uQm9keS5mcm9tRmlsZSgnd29ya2Zsb3cuYXNsLnlhbWwnKSxcbiAqICAgLy8gdHJhY2luZyBlbmFibGVkIGFuZCBsb2dnaW5nIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBmb3IgRVhQUkVTU1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX3N0ZXBmdW5jdGlvbnMuU3RhdGVNYWNoaW5lLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIFN0ZXBGdW5jdGlvbnNEZWZhdWx0c0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICAvKipcbiAgICogVmlzaXRzIGEgY29uc3RydWN0IGFuZCBhcHBsaWVzIHRyYWNpbmcgYW5kIGxvZ2dpbmcgc2V0dGluZ3MgaWYgaXQncyBhIFN0YXRlTWFjaGluZVxuICAgKlxuICAgKiBFbmFibGVzIFgtUmF5IHRyYWNpbmcgZm9yIGFsbCBzdGF0ZSBtYWNoaW5lcy4gRm9yIEVYUFJFU1Mgc3RhdGUgbWFjaGluZXMgdGhhdCBkb24ndFxuICAgKiBhbHJlYWR5IGhhdmUgbG9nZ2luZyBjb25maWd1cmVkLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgbG9nIGdyb3VwcyBhbmQgY29uZmlndXJlc1xuICAgKiBjb21wcmVoZW5zaXZlIGxvZ2dpbmcgd2l0aCBmdWxsIGV4ZWN1dGlvbiBkYXRhIGNhcHR1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIGNvbnN0cnVjdCB0byBwb3RlbnRpYWxseSBtb2RpZnlcbiAgICovXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFN0YXRlTWFjaGluZSkge1xuICAgICAgY29uc3QgY2ZuU3RhdGVNYWNoaW5lID0gbm9kZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5TdGF0ZU1hY2hpbmU7XG5cbiAgICAgIGlmIChjZm5TdGF0ZU1hY2hpbmUpIHtcbiAgICAgICAgLy8gQXBwbHkgdHJhY2luZyBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgaWYgKGNmblN0YXRlTWFjaGluZS50cmFjaW5nQ29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2ZuU3RhdGVNYWNoaW5lLnRyYWNpbmdDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIEVYUFJFU1Mgc3RhdGUgbWFjaGluZXMsIGNvbmZpZ3VyZSBsb2dnaW5nIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2ZuU3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZVR5cGUgPT09IFN0YXRlTWFjaGluZVR5cGUuRVhQUkVTUyAmJlxuICAgICAgICAgIGNmblN0YXRlTWFjaGluZS5sb2dnaW5nQ29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKG5vZGUsIFwiTG9nR3JvdXBcIiwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy8ke25vZGUubm9kZS5pZH1gLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2ZuU3RhdGVNYWNoaW5lLmxvZ2dpbmdDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbG91ZFdhdGNoTG9nc0xvZ0dyb3VwOiB7XG4gICAgICAgICAgICAgICAgICBsb2dHcm91cEFybjogbG9nR3JvdXAubG9nR3JvdXBBcm4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuQUxMLFxuICAgICAgICAgICAgaW5jbHVkZUV4ZWN1dGlvbkRhdGE6IHRydWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIEdyYW50IHRoZSBzdGF0ZSBtYWNoaW5lIHJvbGUgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGRlbGl2ZXIgbG9ncy5cbiAgICAgICAgICAvLyBNaXJyb3JzIHdoYXQgQ0RLJ3MgU3RhdGVNYWNoaW5lLmJ1aWxkTG9nZ2luZ0NvbmZpZ3VyYXRpb24oKSBkb2VzIGludGVybmFsbHkuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyByZXNvdXJjZXM6IFtcIipcIl0gaXMgaW50ZW50aW9uYWwg4oCUIGFsbCBlaWdodCBhY3Rpb25zIGFyZSB2ZW5kZWQtbG9nLWRlbGl2ZXJ5XG4gICAgICAgICAgLy8gY29udHJvbC1wbGFuZSBBUElzIHRoYXQgb3BlcmF0ZSBhdCB0aGUgYWNjb3VudCBsZXZlbCBhbmQgZG8gbm90IHN1cHBvcnRcbiAgICAgICAgICAvLyByZXNvdXJjZS1sZXZlbCBzY29waW5nIGFnYWluc3QgYSBzcGVjaWZpYyBsb2cgZ3JvdXAgQVJOLlxuICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaGxvZ3MuaHRtbFxuICAgICAgICAgIC8vICAgICAgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9jdy1sb2dzLmh0bWxcbiAgICAgICAgICBub2RlLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpHZXRMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpVcGRhdGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZWxldGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpMaXN0TG9nRGVsaXZlcmllc1wiLFxuICAgICAgICAgICAgICAgIFwibG9nczpQdXRSZXNvdXJjZVBvbGljeVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZVJlc291cmNlUG9saWNpZXNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -61,8 +61,13 @@ export declare class ResourcePrefixAspect implements IAspect {
61
61
  */
62
62
  private buildPrefixedName;
63
63
  /**
64
- * Validates resource-specific naming requirements that AWS enforces.
65
- * Throws synthesis errors for violations.
64
+ * Truncates a prefixed name to fit within maxLength by hashing the original
65
+ * for uniqueness. Emits a CDK warning when truncation occurs.
66
+ */
67
+ private truncateToFit;
68
+ /**
69
+ * Validates resource-specific structural naming requirements that AWS enforces.
70
+ * Length violations are handled upstream by truncateToFit.
66
71
  */
67
72
  private validateResourceName;
68
73
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResourcePrefixAspect = void 0;
4
+ const crypto_1 = require("crypto");
4
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
6
  /**
6
7
  * Maps CloudFormation resource types to their name property and AWS length limits.
@@ -108,8 +109,11 @@ class ResourcePrefixAspect {
108
109
  if (this.isAlreadyPrefixed(baseName)) {
109
110
  return;
110
111
  }
111
- const finalName = this.buildPrefixedName(baseName, resourceType, cfnProperties);
112
- const hasError = this.validateResourceName(finalName, resourceType, maxLength, node);
112
+ const prefixedName = this.buildPrefixedName(baseName, resourceType, cfnProperties);
113
+ // Truncation applies to all overflows — including user-set names — because L3
114
+ // constructs can generate names the user has no direct control over.
115
+ const finalName = this.truncateToFit(prefixedName, maxLength, node);
116
+ const hasError = this.validateResourceName(finalName, resourceType, node);
113
117
  if (hasError)
114
118
  return;
115
119
  node.addPropertyOverride(cfnName, finalName);
@@ -156,12 +160,29 @@ class ResourcePrefixAspect {
156
160
  return `${this.prefix}-${baseName}`;
157
161
  }
158
162
  /**
159
- * Validates resource-specific naming requirements that AWS enforces.
160
- * Throws synthesis errors for violations.
163
+ * Truncates a prefixed name to fit within maxLength by hashing the original
164
+ * for uniqueness. Emits a CDK warning when truncation occurs.
161
165
  */
162
- validateResourceName(name, cfnResourceType, maxLength, node) {
166
+ truncateToFit(name, maxLength, node) {
167
+ if (name.length <= maxLength)
168
+ return name;
169
+ const hash = (0, crypto_1.createHash)("sha256").update(name).digest("hex").slice(0, 8);
170
+ // Preserve .fifo suffix — AWS requires it at the end of FIFO resource names
171
+ const suffix = name.endsWith(".fifo") ? ".fifo" : "";
172
+ const nameWithoutSuffix = suffix ? name.slice(0, -suffix.length) : name;
173
+ // 1 accounts for the dash separator before the hash
174
+ const budget = maxLength - hash.length - 1 - suffix.length;
175
+ const truncated = nameWithoutSuffix.slice(0, budget) + "-" + hash + suffix;
176
+ aws_cdk_lib_1.Annotations.of(node).addWarning(`[ResourcePrefixAspect] "${name}" (${name.length} chars) exceeds the maximum allowed length of ${maxLength}. ` +
177
+ `Name has been truncated to "${truncated}". Shorten the resource base name or your prefix ("${this.prefix}") to avoid truncation.`);
178
+ return truncated;
179
+ }
180
+ /**
181
+ * Validates resource-specific structural naming requirements that AWS enforces.
182
+ * Length violations are handled upstream by truncateToFit.
183
+ */
184
+ validateResourceName(name, cfnResourceType, node) {
163
185
  let hasError = false;
164
- // S3 bucket names cannot contain underscores
165
186
  if (cfnResourceType === "AWS::S3::Bucket") {
166
187
  if (name !== name.toLowerCase()) {
167
188
  aws_cdk_lib_1.Annotations.of(node).addError(`[ResourcePrefixAspect] S3 bucket name "${name}" contains uppercase letters. ` +
@@ -174,14 +195,8 @@ class ResourcePrefixAspect {
174
195
  hasError = true;
175
196
  }
176
197
  }
177
- if (name.length > maxLength) {
178
- aws_cdk_lib_1.Annotations.of(node).addError(`[ResourcePrefixAspect] "${name}" (${name.length} chars) exceeds the ` +
179
- `maximum allowed length of ${maxLength} for ${cfnResourceType}. ` +
180
- `Shorten the resource base name or your prefix ("${this.prefix}").`);
181
- hasError = true;
182
- }
183
198
  return hasError;
184
199
  }
185
200
  }
186
201
  exports.ResourcePrefixAspect = ResourcePrefixAspect;
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1RTtBQWdDdkU7OztHQUdHO0FBQ0gsTUFBTSxlQUFlLEdBQXVDO0lBQzFELFVBQVU7SUFDVix1QkFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUVuRSxVQUFVO0lBQ1YsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDM0Qsc0JBQXNCLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDaEUsNEJBQTRCLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFFdEUsWUFBWTtJQUNaLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzFELGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRTNELDJCQUEyQjtJQUMzQix1QkFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUM1RCxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2RCx5QkFBeUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUM3RCxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN0RCxrQ0FBa0MsRUFBRTtRQUNsQyxPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFNBQVMsRUFBRSxFQUFFO0tB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aEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXJCLDZDQUE2QztRQUM3QyxJQUFJLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyx5QkFBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQzNCLDBDQUEwQyxJQUFJLGdDQUFnQztvQkFDNUUsc0NBQXNDLENBQ3pDLENBQUM7Z0JBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNsQixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMENBQTBDLElBQUksMEJBQTBCO29CQUN0RSwrREFBK0QsQ0FDbEUsQ0FBQztnQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMkJBQTJCLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxzQkFBc0I7Z0JBQ3BFLDZCQUE2QixTQUFTLFFBQVEsZUFBZSxJQUFJO2dCQUNqRSxtREFBbUQsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUN0RSxDQUFDO1lBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBL0pELG9EQStKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VOYW1lQ29uZmlnIHtcbiAgLyoqIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSByZXNvdXJjZSdzIHBoeXNpY2FsIG5hbWUgKi9cbiAgY2ZuTmFtZTogc3RyaW5nO1xuICAvKiogTWF4aW11bSBhbGxvd2VkIGNoYXJhY3RlciBsZW5ndGggZm9yIHRoaXMgcmVzb3VyY2UgdHlwZSAqL1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbnNpb24gdHlwZSB0byBhY2Nlc3MgaW50ZXJuYWwgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyBvbiBDZm5SZXNvdXJjZS5cbiAqXG4gKiBDREsgZG9lcyBub3QgcHJvdmlkZSBhIHB1YmxpYyBBUEkgdG8gcmVhZCByYXcgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyB0aGF0IGhhdmVcbiAqIGJlZW4gc2V0IG9uIGEgQ2ZuUmVzb3VyY2UuIFRoZSBwcm9wZXJ0aWVzIGBfY2ZuUHJvcGVydGllc2AgYW5kIGBjZm5Qcm9wZXJ0aWVzYCBhcmVcbiAqIHByb3RlY3RlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgQ2ZuUmVzb3VyY2UgY2xhc3MgaGllcmFyY2h5LlxuICpcbiAqIFdlIGludmVzdGlnYXRlZCB1c2luZyBDREsncyBwdWJsaWMgQVBJcywgYnV0IHRoZXJlIGlzIG5vIHB1YmxpYyBtZXRob2QgdG8gcmV0cmlldmVcbiAqIHRoZSByYXcgcHJvcGVydHkgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHNldCAoZS5nLiwgdmlhIGNvbnN0cnVjdG9yIHByb3BzIG9yIGFkZFByb3BlcnR5T3ZlcnJpZGUpLlxuICogVGhlIG9ubHkgcHVibGljIEFQSXMgYXJlIGZvciB3cml0aW5nIChhZGRQcm9wZXJ0eU92ZXJyaWRlLCBhZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUpIG9yXG4gKiBnZXR0aW5nIGF0dHJpYnV0ZSByZWZlcmVuY2VzIChnZXRBdHQpLCBub3QgZm9yIHJlYWRpbmcgbGl0ZXJhbCBwcm9wZXJ0eSB2YWx1ZXMuXG4gKlxuICogVGhpcyB0eXBlIGFzc2VydGlvbiBpcyBzYWZlIGJlY2F1c2U6XG4gKiAtIFdlIG9ubHkgcmVhZCB0aGVzZSBwcm9wZXJ0aWVzLCBuZXZlciBtb2RpZnkgdGhlbVxuICogLSBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgdXNlciBleHBsaWNpdGx5IHNldCBhIG5hbWUgcHJvcGVydHkgYmVmb3JlIGFwcGx5aW5nIG91ciBwcmVmaXhcbiAqIC0gVGhlIHByb3BlcnRpZXMgZXhpc3QgYXQgcnVudGltZSBhbmQgYXJlIHBhcnQgb2YgQ0RLJ3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25cbiAqL1xudHlwZSBDZm5SZXNvdXJjZVdpdGhQcm9wcyA9IENmblJlc291cmNlICYge1xuICByZWFkb25seSBfY2ZuUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBjZm5Qcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG4vKipcbiAqIE1hcHMgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSBhbmQgQVdTIGxlbmd0aCBsaW1pdHMuXG4gKiBTb3VyY2VzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtdGVtcGxhdGUtcmVzb3VyY2UtdHlwZS1yZWYuaHRtbFxuICovXG5jb25zdCBSRVNPVVJDRV9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTmFtZUNvbmZpZz4gPSB7XG4gIC8vIENvbXB1dGVcbiAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIjogeyBjZm5OYW1lOiBcIkZ1bmN0aW9uTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gU3RvcmFnZVxuICBcIkFXUzo6UzM6OkJ1Y2tldFwiOiB7IGNmbk5hbWU6IFwiQnVja2V0TmFtZVwiLCBtYXhMZW5ndGg6IDYzIH0sXG4gIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIjogeyBjZm5OYW1lOiBcIlRhYmxlTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcblxuICAvLyBNZXNzYWdpbmdcbiAgXCJBV1M6OlNRUzo6UXVldWVcIjogeyBjZm5OYW1lOiBcIlF1ZXVlTmFtZVwiLCBtYXhMZW5ndGg6IDgwIH0sXG4gIFwiQVdTOjpTTlM6OlRvcGljXCI6IHsgY2ZuTmFtZTogXCJUb3BpY05hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcblxuICAvLyBFdmVudGluZyAmIE9yY2hlc3RyYXRpb25cbiAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcbiAgXCJBV1M6OkV2ZW50czo6UnVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpFdmVudHM6OkNvbm5lY3Rpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6UGlwZXM6OlBpcGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCI6IHtcbiAgICBjZm5OYW1lOiBcIlN0YXRlTWFjaGluZU5hbWVcIixcbiAgICBtYXhMZW5ndGg6IDgwLFxuICB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlR3JvdXBcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIEFQSVxuICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6VXNhZ2VQbGFuXCI6IHsgY2ZuTmFtZTogXCJVc2FnZVBsYW5OYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5OjpBcGlLZXlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcblxuICAvLyBTZWNyZXRzICYgQ29uZmlnXG4gIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpTU006OlBhcmFtZXRlclwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDIwNDggfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6QXBwbGljYXRpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6QXBwQ29uZmlnOjpFbnZpcm9ubWVudFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gTm90aWZpY2F0aW9uc1xuICBcIkFXUzo6Tm90aWZpY2F0aW9uczo6Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblwiOiB7XG4gICAgY2ZuTmFtZTogXCJOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA2NCxcbiAgfSxcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gIFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiOiB7IGNmbk5hbWU6IFwiTG9nR3JvdXBOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiOiB7IGNmbk5hbWU6IFwiQWxhcm1OYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gSUFNXG4gIFwiQVdTOjpJQU06OlJvbGVcIjogeyBjZm5OYW1lOiBcIlJvbGVOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZSBuYW1lcy5cbiAgICogZS5nLiAnbXlhcHAtcHJvZCcg4oaSICdteWFwcC1wcm9kLW9yZGVycydcbiAgICovXG4gIHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlcyB0byBza2lwIGVudGlyZWx5LlxuICAgKiBlLmcuIFsnQVdTOjpJQU06OlJvbGUnXSB0byBsZWF2ZSBJQU0gcm9sZSBuYW1lcyB1bnRvdWNoZWQuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZXMgYWNyb3NzIEFXUyByZXNvdXJjZXMuXG4gKlxuICogQHJlbWFya3NcbiAqICoqQ3JpdGljYWwgSW1wbGVtZW50YXRpb24gTm90ZXM6KipcbiAqXG4gKiAxLiAqKlN0YWdlIFN5bnRoZXNpcyBCb3VuZGFyaWVzKio6XG4gKiAgICAtIENESyBgU3RhZ2VgIGNvbnN0cnVjdHMgY3JlYXRlIHN5bnRoZXNpcyBib3VuZGFyaWVzIHRoYXQgcHJldmVudCBBcHAtbGV2ZWwgYXNwZWN0c1xuICogICAgICBmcm9tIHRyYXZlcnNpbmcgaW50byB0aGVtXG4gKiAgICAtIFRoaXMgYXNwZWN0IE1VU1QgYmUgYXBwbGllZCB0byBlYWNoIFN0YWdlIGluZGl2aWR1YWxseSwgbm90IHRvIHRoZSBBcHBcbiAqICAgIC0gRXhhbXBsZTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3Qoey4uLn0pKWBcbiAqXG4gKiAyLiAqKlByb3BlcnR5IE5hbWUgQ2FzaW5nKio6XG4gKiAgICAtIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdXNlIFBhc2NhbENhc2UgKGUuZy4sIGBGdW5jdGlvbk5hbWVgLCBgQnVja2V0TmFtZWApXG4gKiAgICAtIFVzaW5nIGNhbWVsQ2FzZSAoZS5nLiwgYGZ1bmN0aW9uTmFtZWApIHdpbGwgY2F1c2UgZXJyb3JzIHdpdGggdmVyc2lvbmluZyBhc3BlY3RzXG4gKiAgICAtIFdoZW4gdXNpbmcgYGFkZFByb3BlcnR5T3ZlcnJpZGUoKWAsIGFsd2F5cyB1c2UgdGhlIGV4YWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IG5hbWVcbiAqXG4gKiAzLiAqKkFzcGVjdCBQcmlvcml0eSB3aXRoIFZlcnNpb25pbmcqKjpcbiAqICAgIC0gV2hlbiBjb21iaW5pbmcgd2l0aCBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0LCBhcHBseSB0aGlzIGFzcGVjdCBCRUZPUkUgdmVyc2lvbmluZ1xuICogICAgLSBVc2UgQ0RLJ3MgcHJpb3JpdHkgc3lzdGVtOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHByZWZpeEFzcGVjdCwgeyBwcmlvcml0eTogMTAwIH0pYFxuICogICAgLSBUaGVuOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHZlcnNpb25pbmdBc3BlY3QsIHsgcHJpb3JpdHk6IDIwMCB9KWBcbiAqICAgIC0gTG93ZXIgcHJpb3JpdHkgbnVtYmVycyBydW4gZmlyc3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29ycmVjdCB1c2FnZSB3aXRoIHN0YWdpbmdcbiAqIGNvbnN0IHN0YWdlID0gbmV3IEFwcGxpY2F0aW9uU3RhZ2UoYXBwLCAncHJvZCcpO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBSZXNvdXJjZVByZWZpeEFzcGVjdCh7IHByZWZpeDogJ215YXBwJyB9KSwgeyBwcmlvcml0eTogMTAwIH0pO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0KCksIHsgcHJpb3JpdHk6IDIwMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcmVmaXhBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJlZml4IHx8ICEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLnByZWZpeCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZVByZWZpeEFzcGVjdDogcHJlZml4IG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgZ290IFwiJHtwcm9wcy5wcmVmaXh9XCJgXG4gICAgICApO1xuXG4gICAgdGhpcy5wcmVmaXggPSBwcm9wcy5wcmVmaXg7XG4gICAgdGhpcy5leGNsdWRlID0gbmV3IFNldChwcm9wcy5leGNsdWRlID8/IFtdKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpKSByZXR1cm47XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBub2RlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBjb25maWcgPSBSRVNPVVJDRV9DT05GSUdbcmVzb3VyY2VUeXBlXTtcblxuICAgIGlmICghY29uZmlnIHx8IHRoaXMuZXhjbHVkZS5oYXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2ZuTmFtZSwgbWF4TGVuZ3RoIH0gPSBjb25maWc7XG4gICAgY29uc3QgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLl9jZm5Qcm9wZXJ0aWVzID8/XG4gICAgICAobm9kZSBhcyBDZm5SZXNvdXJjZVdpdGhQcm9wcykuY2ZuUHJvcGVydGllcyA/P1xuICAgICAge307XG5cbiAgICAvLyBHZXQgYW55IGV4cGxpY2l0bHkgc2V0IG5hbWUsIG9yIGRlcml2ZSBvbmUgZnJvbSB0aGUgbG9naWNhbCBJRFxuICAgIGNvbnN0IGV4aXN0aW5nTmFtZSA9XG4gICAgICB0eXBlb2YgY2ZuUHJvcGVydGllc1tjZm5OYW1lXSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGNmblByb3BlcnRpZXNbY2ZuTmFtZV1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBleGlzdGluZ05hbWUgPz8gdGhpcy5kZXJpdmVOYW1lRnJvbUxvZ2ljYWxJZChub2RlKTtcblxuICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZWZpeGVkKGJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHRoaXMuYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgICBiYXNlTmFtZSxcbiAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgIGNmblByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLnZhbGlkYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgZmluYWxOYW1lLFxuICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgbm9kZVxuICAgICk7XG5cbiAgICBpZiAoaGFzRXJyb3IpIHJldHVybjtcblxuICAgIG5vZGUuYWRkUHJvcGVydHlPdmVycmlkZShjZm5OYW1lLCBmaW5hbE5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FscmVhZHlQcmVmaXhlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmFtZS5zdGFydHNXaXRoKGAke3RoaXMucHJlZml4fS1gKSB8fCBuYW1lLnN0YXJ0c1dpdGgoYC8ke3RoaXMucHJlZml4fS9gKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlcml2ZU5hbWVGcm9tTG9naWNhbElkKG5vZGU6IENmblJlc291cmNlKSB7XG4gICAgY29uc3QgbG9naWNhbElkID0gU3RhY2sub2Yobm9kZSkuZ2V0TG9naWNhbElkKG5vZGUpO1xuICAgIHJldHVybiBsb2dpY2FsSWRcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csIFwiLVwiKSAvLyBub24tYWxwaGFudW1lcmljIOKGkiBkYXNoXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTsgLy8gdHJpbSBsZWFkaW5nL3RyYWlsaW5nIGRhc2hlc1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgcHJlZml4ZWQgbmFtZSwgaGFuZGxpbmcgc3BlY2lhbCBjYXNlcyBmb3Igc3BlY2lmaWMgcmVzb3VyY2UgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlTmFtZSAtIFRoZSBiYXNlIHJlc291cmNlIG5hbWUgKHdpdGhvdXQgcHJlZml4KVxuICAgKiBAcGFyYW0gY2ZuUmVzb3VyY2VUeXBlIC0gVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVcbiAgICogQHBhcmFtIGNmblByb3BlcnRpZXMgLSBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgZmluYWwgcHJlZml4ZWQgbmFtZSB3aXRoIGFueSBzcGVjaWFsIGNhc2UgaGFuZGxpbmcgYXBwbGllZFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFByZWZpeGVkTmFtZShcbiAgICBiYXNlTmFtZTogc3RyaW5nLFxuICAgIGNmblJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIGNmblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IHN0cmluZyB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBGSUZPIHF1ZXVlcyBtdXN0IGVuZCB3aXRoIC5maWZvIHN1ZmZpeFxuICAgIGlmIChcbiAgICAgIGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNRUzo6UXVldWVcIiAmJlxuICAgICAgY2ZuUHJvcGVydGllcy5maWZvUXVldWUgPT09IHRydWUgJiZcbiAgICAgICFiYXNlTmFtZS5lbmRzV2l0aChcIi5maWZvXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7YmFzZU5hbWV9LmZpZm9gO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyB0b3BpY3MgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTTlM6OlRvcGljXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1RvcGljID09PSB0cnVlICYmXG4gICAgICAhYmFzZU5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfS5maWZvYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFNTTSBwYXJhbWV0ZXIgbmFtZXMgdXNlIHBhdGgtc3R5bGUgcHJlZml4XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgLyR7dGhpcy5wcmVmaXh9LyR7YmFzZU5hbWV9YDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFMzIGJ1Y2tldCBuYW1lIGJlIGxvd2VyY2FzZSBvbmx5XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBzaW1wbGUgcHJlZml4XG4gICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHJlc291cmNlLXNwZWNpZmljIG5hbWluZyByZXF1aXJlbWVudHMgdGhhdCBBV1MgZW5mb3JjZXMuXG4gICAqIFRocm93cyBzeW50aGVzaXMgZXJyb3JzIGZvciB2aW9sYXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlc291cmNlTmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2ZuUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgbm9kZTogSUNvbnN0cnVjdFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgIC8vIFMzIGJ1Y2tldCBuYW1lcyBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3Jlc1xuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTMzo6QnVja2V0XCIpIHtcbiAgICAgIGlmIChuYW1lICE9PSBuYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2Yobm9kZSkuYWRkRXJyb3IoXG4gICAgICAgICAgYFtSZXNvdXJjZVByZWZpeEFzcGVjdF0gUzMgYnVja2V0IG5hbWUgXCIke25hbWV9XCIgY29udGFpbnMgdXBwZXJjYXNlIGxldHRlcnMuIGAgK1xuICAgICAgICAgICAgYEJ1Y2tldCBuYW1lcyBtdXN0IGJlIGxvd2VyY2FzZSBvbmx5LmBcbiAgICAgICAgKTtcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZS5pbmNsdWRlcyhcIl9cIikpIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2Yobm9kZSkuYWRkRXJyb3IoXG4gICAgICAgICAgYFtSZXNvdXJjZVByZWZpeEFzcGVjdF0gUzMgYnVja2V0IG5hbWUgXCIke25hbWV9XCIgY29udGFpbnMgdW5kZXJzY29yZXMuIGAgK1xuICAgICAgICAgICAgYEJ1Y2tldCBuYW1lcyBjYW5ub3QgY29udGFpbiB1bmRlcnNjb3Jlcy4gVXNlIGh5cGhlbnMgaW5zdGVhZC5gXG4gICAgICAgICk7XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZEVycm9yKFxuICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBcIiR7bmFtZX1cIiAoJHtuYW1lLmxlbmd0aH0gY2hhcnMpIGV4Y2VlZHMgdGhlIGAgK1xuICAgICAgICAgIGBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBmb3IgJHtjZm5SZXNvdXJjZVR5cGV9LiBgICtcbiAgICAgICAgICBgU2hvcnRlbiB0aGUgcmVzb3VyY2UgYmFzZSBuYW1lIG9yIHlvdXIgcHJlZml4IChcIiR7dGhpcy5wcmVmaXh9XCIpLmBcbiAgICAgICk7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0Vycm9yO1xuICB9XG59XG4iXX0=
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUNwQyw2Q0FBdUU7QUFnQ3ZFOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUF1QztJQUMxRCxVQUFVO0lBQ1YsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFbkUsVUFBVTtJQUNWLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzNELHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ2hFLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRXRFLFlBQVk7SUFDWixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUUzRCwyQkFBMkI7SUFDM0IsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDNUQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkQseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDN0Qsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdEQsa0NBQWtDLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixTQUFT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Ozs7T0FHRztJQUNLLG9CQUFvQixDQUMxQixJQUFZLEVBQ1osZUFBdUIsRUFDdkIsSUFBZ0I7UUFFaEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXJCLElBQUksZUFBZSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMENBQTBDLElBQUksZ0NBQWdDO29CQUM1RSxzQ0FBc0MsQ0FDekMsQ0FBQztnQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUMzQiwwQ0FBMEMsSUFBSSwwQkFBMEI7b0JBQ3RFLCtEQUErRCxDQUNsRSxDQUFDO2dCQUNGLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFoTEQsb0RBZ0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VOYW1lQ29uZmlnIHtcbiAgLyoqIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSByZXNvdXJjZSdzIHBoeXNpY2FsIG5hbWUgKi9cbiAgY2ZuTmFtZTogc3RyaW5nO1xuICAvKiogTWF4aW11bSBhbGxvd2VkIGNoYXJhY3RlciBsZW5ndGggZm9yIHRoaXMgcmVzb3VyY2UgdHlwZSAqL1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbnNpb24gdHlwZSB0byBhY2Nlc3MgaW50ZXJuYWwgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyBvbiBDZm5SZXNvdXJjZS5cbiAqXG4gKiBDREsgZG9lcyBub3QgcHJvdmlkZSBhIHB1YmxpYyBBUEkgdG8gcmVhZCByYXcgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllcyB0aGF0IGhhdmVcbiAqIGJlZW4gc2V0IG9uIGEgQ2ZuUmVzb3VyY2UuIFRoZSBwcm9wZXJ0aWVzIGBfY2ZuUHJvcGVydGllc2AgYW5kIGBjZm5Qcm9wZXJ0aWVzYCBhcmVcbiAqIHByb3RlY3RlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgQ2ZuUmVzb3VyY2UgY2xhc3MgaGllcmFyY2h5LlxuICpcbiAqIFdlIGludmVzdGlnYXRlZCB1c2luZyBDREsncyBwdWJsaWMgQVBJcywgYnV0IHRoZXJlIGlzIG5vIHB1YmxpYyBtZXRob2QgdG8gcmV0cmlldmVcbiAqIHRoZSByYXcgcHJvcGVydHkgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHNldCAoZS5nLiwgdmlhIGNvbnN0cnVjdG9yIHByb3BzIG9yIGFkZFByb3BlcnR5T3ZlcnJpZGUpLlxuICogVGhlIG9ubHkgcHVibGljIEFQSXMgYXJlIGZvciB3cml0aW5nIChhZGRQcm9wZXJ0eU92ZXJyaWRlLCBhZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUpIG9yXG4gKiBnZXR0aW5nIGF0dHJpYnV0ZSByZWZlcmVuY2VzIChnZXRBdHQpLCBub3QgZm9yIHJlYWRpbmcgbGl0ZXJhbCBwcm9wZXJ0eSB2YWx1ZXMuXG4gKlxuICogVGhpcyB0eXBlIGFzc2VydGlvbiBpcyBzYWZlIGJlY2F1c2U6XG4gKiAtIFdlIG9ubHkgcmVhZCB0aGVzZSBwcm9wZXJ0aWVzLCBuZXZlciBtb2RpZnkgdGhlbVxuICogLSBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgdXNlciBleHBsaWNpdGx5IHNldCBhIG5hbWUgcHJvcGVydHkgYmVmb3JlIGFwcGx5aW5nIG91ciBwcmVmaXhcbiAqIC0gVGhlIHByb3BlcnRpZXMgZXhpc3QgYXQgcnVudGltZSBhbmQgYXJlIHBhcnQgb2YgQ0RLJ3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25cbiAqL1xudHlwZSBDZm5SZXNvdXJjZVdpdGhQcm9wcyA9IENmblJlc291cmNlICYge1xuICByZWFkb25seSBfY2ZuUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBjZm5Qcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG4vKipcbiAqIE1hcHMgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSBhbmQgQVdTIGxlbmd0aCBsaW1pdHMuXG4gKiBTb3VyY2VzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtdGVtcGxhdGUtcmVzb3VyY2UtdHlwZS1yZWYuaHRtbFxuICovXG5jb25zdCBSRVNPVVJDRV9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTmFtZUNvbmZpZz4gPSB7XG4gIC8vIENvbXB1dGVcbiAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIjogeyBjZm5OYW1lOiBcIkZ1bmN0aW9uTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gU3RvcmFnZVxuICBcIkFXUzo6UzM6OkJ1Y2tldFwiOiB7IGNmbk5hbWU6IFwiQnVja2V0TmFtZVwiLCBtYXhMZW5ndGg6IDYzIH0sXG4gIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIjogeyBjZm5OYW1lOiBcIlRhYmxlTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcblxuICAvLyBNZXNzYWdpbmdcbiAgXCJBV1M6OlNRUzo6UXVldWVcIjogeyBjZm5OYW1lOiBcIlF1ZXVlTmFtZVwiLCBtYXhMZW5ndGg6IDgwIH0sXG4gIFwiQVdTOjpTTlM6OlRvcGljXCI6IHsgY2ZuTmFtZTogXCJUb3BpY05hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcblxuICAvLyBFdmVudGluZyAmIE9yY2hlc3RyYXRpb25cbiAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcbiAgXCJBV1M6OkV2ZW50czo6UnVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpFdmVudHM6OkNvbm5lY3Rpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6UGlwZXM6OlBpcGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCI6IHtcbiAgICBjZm5OYW1lOiBcIlN0YXRlTWFjaGluZU5hbWVcIixcbiAgICBtYXhMZW5ndGg6IDgwLFxuICB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlR3JvdXBcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIEFQSVxuICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6VXNhZ2VQbGFuXCI6IHsgY2ZuTmFtZTogXCJVc2FnZVBsYW5OYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5OjpBcGlLZXlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcblxuICAvLyBTZWNyZXRzICYgQ29uZmlnXG4gIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpTU006OlBhcmFtZXRlclwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDIwNDggfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6QXBwbGljYXRpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6QXBwQ29uZmlnOjpFbnZpcm9ubWVudFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gTm90aWZpY2F0aW9uc1xuICBcIkFXUzo6Tm90aWZpY2F0aW9uczo6Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblwiOiB7XG4gICAgY2ZuTmFtZTogXCJOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA2NCxcbiAgfSxcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gIFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiOiB7IGNmbk5hbWU6IFwiTG9nR3JvdXBOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiOiB7IGNmbk5hbWU6IFwiQWxhcm1OYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gSUFNXG4gIFwiQVdTOjpJQU06OlJvbGVcIjogeyBjZm5OYW1lOiBcIlJvbGVOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZSBuYW1lcy5cbiAgICogZS5nLiAnbXlhcHAtcHJvZCcg4oaSICdteWFwcC1wcm9kLW9yZGVycydcbiAgICovXG4gIHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlcyB0byBza2lwIGVudGlyZWx5LlxuICAgKiBlLmcuIFsnQVdTOjpJQU06OlJvbGUnXSB0byBsZWF2ZSBJQU0gcm9sZSBuYW1lcyB1bnRvdWNoZWQuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZXMgYWNyb3NzIEFXUyByZXNvdXJjZXMuXG4gKlxuICogQHJlbWFya3NcbiAqICoqQ3JpdGljYWwgSW1wbGVtZW50YXRpb24gTm90ZXM6KipcbiAqXG4gKiAxLiAqKlN0YWdlIFN5bnRoZXNpcyBCb3VuZGFyaWVzKio6XG4gKiAgICAtIENESyBgU3RhZ2VgIGNvbnN0cnVjdHMgY3JlYXRlIHN5bnRoZXNpcyBib3VuZGFyaWVzIHRoYXQgcHJldmVudCBBcHAtbGV2ZWwgYXNwZWN0c1xuICogICAgICBmcm9tIHRyYXZlcnNpbmcgaW50byB0aGVtXG4gKiAgICAtIFRoaXMgYXNwZWN0IE1VU1QgYmUgYXBwbGllZCB0byBlYWNoIFN0YWdlIGluZGl2aWR1YWxseSwgbm90IHRvIHRoZSBBcHBcbiAqICAgIC0gRXhhbXBsZTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3Qoey4uLn0pKWBcbiAqXG4gKiAyLiAqKlByb3BlcnR5IE5hbWUgQ2FzaW5nKio6XG4gKiAgICAtIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdXNlIFBhc2NhbENhc2UgKGUuZy4sIGBGdW5jdGlvbk5hbWVgLCBgQnVja2V0TmFtZWApXG4gKiAgICAtIFVzaW5nIGNhbWVsQ2FzZSAoZS5nLiwgYGZ1bmN0aW9uTmFtZWApIHdpbGwgY2F1c2UgZXJyb3JzIHdpdGggdmVyc2lvbmluZyBhc3BlY3RzXG4gKiAgICAtIFdoZW4gdXNpbmcgYGFkZFByb3BlcnR5T3ZlcnJpZGUoKWAsIGFsd2F5cyB1c2UgdGhlIGV4YWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IG5hbWVcbiAqXG4gKiAzLiAqKkFzcGVjdCBQcmlvcml0eSB3aXRoIFZlcnNpb25pbmcqKjpcbiAqICAgIC0gV2hlbiBjb21iaW5pbmcgd2l0aCBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0LCBhcHBseSB0aGlzIGFzcGVjdCBCRUZPUkUgdmVyc2lvbmluZ1xuICogICAgLSBVc2UgQ0RLJ3MgcHJpb3JpdHkgc3lzdGVtOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHByZWZpeEFzcGVjdCwgeyBwcmlvcml0eTogMTAwIH0pYFxuICogICAgLSBUaGVuOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHZlcnNpb25pbmdBc3BlY3QsIHsgcHJpb3JpdHk6IDIwMCB9KWBcbiAqICAgIC0gTG93ZXIgcHJpb3JpdHkgbnVtYmVycyBydW4gZmlyc3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29ycmVjdCB1c2FnZSB3aXRoIHN0YWdpbmdcbiAqIGNvbnN0IHN0YWdlID0gbmV3IEFwcGxpY2F0aW9uU3RhZ2UoYXBwLCAncHJvZCcpO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBSZXNvdXJjZVByZWZpeEFzcGVjdCh7IHByZWZpeDogJ215YXBwJyB9KSwgeyBwcmlvcml0eTogMTAwIH0pO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0KCksIHsgcHJpb3JpdHk6IDIwMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcmVmaXhBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJlZml4IHx8ICEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLnByZWZpeCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZVByZWZpeEFzcGVjdDogcHJlZml4IG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgZ290IFwiJHtwcm9wcy5wcmVmaXh9XCJgXG4gICAgICApO1xuXG4gICAgdGhpcy5wcmVmaXggPSBwcm9wcy5wcmVmaXg7XG4gICAgdGhpcy5leGNsdWRlID0gbmV3IFNldChwcm9wcy5leGNsdWRlID8/IFtdKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpKSByZXR1cm47XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBub2RlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBjb25maWcgPSBSRVNPVVJDRV9DT05GSUdbcmVzb3VyY2VUeXBlXTtcblxuICAgIGlmICghY29uZmlnIHx8IHRoaXMuZXhjbHVkZS5oYXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2ZuTmFtZSwgbWF4TGVuZ3RoIH0gPSBjb25maWc7XG4gICAgY29uc3QgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLl9jZm5Qcm9wZXJ0aWVzID8/XG4gICAgICAobm9kZSBhcyBDZm5SZXNvdXJjZVdpdGhQcm9wcykuY2ZuUHJvcGVydGllcyA/P1xuICAgICAge307XG5cbiAgICAvLyBHZXQgYW55IGV4cGxpY2l0bHkgc2V0IG5hbWUsIG9yIGRlcml2ZSBvbmUgZnJvbSB0aGUgbG9naWNhbCBJRFxuICAgIGNvbnN0IGV4aXN0aW5nTmFtZSA9XG4gICAgICB0eXBlb2YgY2ZuUHJvcGVydGllc1tjZm5OYW1lXSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGNmblByb3BlcnRpZXNbY2ZuTmFtZV1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBleGlzdGluZ05hbWUgPz8gdGhpcy5kZXJpdmVOYW1lRnJvbUxvZ2ljYWxJZChub2RlKTtcblxuICAgIGlmICh0aGlzLmlzQWxyZWFkeVByZWZpeGVkKGJhc2VOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgICBiYXNlTmFtZSxcbiAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgIGNmblByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gVHJ1bmNhdGlvbiBhcHBsaWVzIHRvIGFsbCBvdmVyZmxvd3Mg4oCUIGluY2x1ZGluZyB1c2VyLXNldCBuYW1lcyDigJQgYmVjYXVzZSBMM1xuICAgIC8vIGNvbnN0cnVjdHMgY2FuIGdlbmVyYXRlIG5hbWVzIHRoZSB1c2VyIGhhcyBubyBkaXJlY3QgY29udHJvbCBvdmVyLlxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHRoaXMudHJ1bmNhdGVUb0ZpdChwcmVmaXhlZE5hbWUsIG1heExlbmd0aCwgbm9kZSk7XG5cbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMudmFsaWRhdGVSZXNvdXJjZU5hbWUoZmluYWxOYW1lLCByZXNvdXJjZVR5cGUsIG5vZGUpO1xuXG4gICAgaWYgKGhhc0Vycm9yKSByZXR1cm47XG5cbiAgICBub2RlLmFkZFByb3BlcnR5T3ZlcnJpZGUoY2ZuTmFtZSwgZmluYWxOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbHJlYWR5UHJlZml4ZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUuc3RhcnRzV2l0aChgJHt0aGlzLnByZWZpeH0tYCkgfHwgbmFtZS5zdGFydHNXaXRoKGAvJHt0aGlzLnByZWZpeH0vYClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXJpdmVOYW1lRnJvbUxvZ2ljYWxJZChub2RlOiBDZm5SZXNvdXJjZSkge1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IFN0YWNrLm9mKG5vZGUpLmdldExvZ2ljYWxJZChub2RlKTtcbiAgICByZXR1cm4gbG9naWNhbElkXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKy9nLCBcIi1cIikgLy8gbm9uLWFscGhhbnVtZXJpYyDihpIgZGFzaFxuICAgICAgLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7IC8vIHRyaW0gbGVhZGluZy90cmFpbGluZyBkYXNoZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHByZWZpeGVkIG5hbWUsIGhhbmRsaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHNwZWNpZmljIHJlc291cmNlIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gYmFzZU5hbWUgLSBUaGUgYmFzZSByZXNvdXJjZSBuYW1lICh3aXRob3V0IHByZWZpeClcbiAgICogQHBhcmFtIGNmblJlc291cmNlVHlwZSAtIFRoZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSB0eXBlXG4gICAqIEBwYXJhbSBjZm5Qcm9wZXJ0aWVzIC0gVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgVGhlIGZpbmFsIHByZWZpeGVkIG5hbWUgd2l0aCBhbnkgc3BlY2lhbCBjYXNlIGhhbmRsaW5nIGFwcGxpZWRcbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgYmFzZU5hbWU6IHN0cmluZyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBjZm5Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBzdHJpbmcge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyBxdWV1ZXMgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTUVM6OlF1ZXVlXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1F1ZXVlID09PSB0cnVlICYmXG4gICAgICAhYmFzZU5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke2Jhc2VOYW1lfS5maWZvYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IEZJRk8gdG9waWNzIG11c3QgZW5kIHdpdGggLmZpZm8gc3VmZml4XG4gICAgaWYgKFxuICAgICAgY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6U05TOjpUb3BpY1wiICYmXG4gICAgICBjZm5Qcm9wZXJ0aWVzLmZpZm9Ub3BpYyA9PT0gdHJ1ZSAmJlxuICAgICAgIWJhc2VOYW1lLmVuZHNXaXRoKFwiLmZpZm9cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX0uZmlmb2A7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTU00gcGFyYW1ldGVyIG5hbWVzIHVzZSBwYXRoLXN0eWxlIHByZWZpeFxuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTU006OlBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gYC8ke3RoaXMucHJlZml4fS8ke2Jhc2VOYW1lfWA7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTMyBidWNrZXQgbmFtZSBiZSBsb3dlcmNhc2Ugb25seVxuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTMzo6QnVja2V0XCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX1gLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogc2ltcGxlIHByZWZpeFxuICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtiYXNlTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlcyBhIHByZWZpeGVkIG5hbWUgdG8gZml0IHdpdGhpbiBtYXhMZW5ndGggYnkgaGFzaGluZyB0aGUgb3JpZ2luYWxcbiAgICogZm9yIHVuaXF1ZW5lc3MuIEVtaXRzIGEgQ0RLIHdhcm5pbmcgd2hlbiB0cnVuY2F0aW9uIG9jY3Vycy5cbiAgICovXG4gIHByaXZhdGUgdHJ1bmNhdGVUb0ZpdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgbm9kZTogSUNvbnN0cnVjdFxuICApOiBzdHJpbmcge1xuICAgIGlmIChuYW1lLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHJldHVybiBuYW1lO1xuXG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcblxuICAgIC8vIFByZXNlcnZlIC5maWZvIHN1ZmZpeCDigJQgQVdTIHJlcXVpcmVzIGl0IGF0IHRoZSBlbmQgb2YgRklGTyByZXNvdXJjZSBuYW1lc1xuICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKSA/IFwiLmZpZm9cIiA6IFwiXCI7XG4gICAgY29uc3QgbmFtZVdpdGhvdXRTdWZmaXggPSBzdWZmaXggPyBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKSA6IG5hbWU7XG5cbiAgICAvLyAxIGFjY291bnRzIGZvciB0aGUgZGFzaCBzZXBhcmF0b3IgYmVmb3JlIHRoZSBoYXNoXG4gICAgY29uc3QgYnVkZ2V0ID0gbWF4TGVuZ3RoIC0gaGFzaC5sZW5ndGggLSAxIC0gc3VmZml4Lmxlbmd0aDtcbiAgICBjb25zdCB0cnVuY2F0ZWQgPSBuYW1lV2l0aG91dFN1ZmZpeC5zbGljZSgwLCBidWRnZXQpICsgXCItXCIgKyBoYXNoICsgc3VmZml4O1xuXG4gICAgQW5ub3RhdGlvbnMub2Yobm9kZSkuYWRkV2FybmluZyhcbiAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFwiJHtuYW1lfVwiICgke25hbWUubGVuZ3RofSBjaGFycykgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGxlbmd0aCBvZiAke21heExlbmd0aH0uIGAgK1xuICAgICAgICBgTmFtZSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gXCIke3RydW5jYXRlZH1cIi4gU2hvcnRlbiB0aGUgcmVzb3VyY2UgYmFzZSBuYW1lIG9yIHlvdXIgcHJlZml4IChcIiR7dGhpcy5wcmVmaXh9XCIpIHRvIGF2b2lkIHRydW5jYXRpb24uYFxuICAgICk7XG5cbiAgICByZXR1cm4gdHJ1bmNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyByZXNvdXJjZS1zcGVjaWZpYyBzdHJ1Y3R1cmFsIG5hbWluZyByZXF1aXJlbWVudHMgdGhhdCBBV1MgZW5mb3JjZXMuXG4gICAqIExlbmd0aCB2aW9sYXRpb25zIGFyZSBoYW5kbGVkIHVwc3RyZWFtIGJ5IHRydW5jYXRlVG9GaXQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmVzb3VyY2VOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBub2RlOiBJQ29uc3RydWN0XG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgaWYgKG5hbWUgIT09IG5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1cHBlcmNhc2UgbGV0dGVycy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIG9ubHkuYFxuICAgICAgICApO1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lLmluY2x1ZGVzKFwiX1wiKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1bmRlcnNjb3Jlcy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzLiBVc2UgaHlwaGVucyBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNFcnJvcjtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aligent/cdk-aspects",
3
- "version": "0.5.2",
3
+ "version": "0.5.5",
4
4
  "description": "Collection of CDK Asppects",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -21,14 +21,14 @@
21
21
  "devDependencies": {
22
22
  "@types/jest": "^29.5.10",
23
23
  "@types/node": "^20.19.39",
24
- "aws-cdk": "^2.1019.1",
24
+ "aws-cdk": "^2.1119.0",
25
25
  "jest": "^29.7.0",
26
- "ts-jest": "^29.1.1",
26
+ "ts-jest": "^29.4.9",
27
27
  "ts-node": "^10.9.1",
28
28
  "typescript": "^5.3.2"
29
29
  },
30
30
  "dependencies": {
31
- "aws-cdk-lib": "^2.201.0",
31
+ "aws-cdk-lib": "^2.251.0",
32
32
  "constructs": "^10.5.0",
33
33
  "esbuild": "^0.28.0",
34
34
  "source-map-support": "^0.5.21"