cdk-local-lambda 0.1.2 → 0.1.3
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/README.md +18 -0
- package/lib/aspect/live-lambda-aspect.d.ts +8 -2
- package/lib/aspect/live-lambda-aspect.js +10 -8
- package/lib/index.d.ts +2 -2
- package/lib/index.js +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -95,6 +95,24 @@ To deploy the bootstrap stack separately:
|
|
|
95
95
|
npx cll bootstrap --profile my-profile --region us-west-2
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
+
## Options
|
|
99
|
+
|
|
100
|
+
### Conditional Configuration
|
|
101
|
+
|
|
102
|
+
Use `isInLocalMode()` to conditionally configure your constructs when running locally:
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { isInLocalMode } from "cdk-local-lambda"
|
|
106
|
+
|
|
107
|
+
new lambda.Function(this, "MyFunction", {
|
|
108
|
+
// Longer timeout for local debugging
|
|
109
|
+
timeout: isInLocalMode()
|
|
110
|
+
? cdk.Duration.minutes(5)
|
|
111
|
+
: cdk.Duration.seconds(30),
|
|
112
|
+
// ... other props
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
|
|
98
116
|
## Troubleshooting
|
|
99
117
|
|
|
100
118
|
### "No functions found with live-lambda tags yet"
|
|
@@ -73,9 +73,15 @@ export declare class LiveLambdaAspect implements cdk.IAspect {
|
|
|
73
73
|
private transformFunction;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
76
|
+
* Check if local mode is enabled (CDK_LOCAL_LAMBDA=true).
|
|
77
|
+
* Use this in your constructs for conditional configuration.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* timeout: isInLocalMode()
|
|
81
|
+
* ? cdk.Duration.minutes(5)
|
|
82
|
+
* : cdk.Duration.seconds(30)
|
|
77
83
|
*/
|
|
78
|
-
export declare function
|
|
84
|
+
export declare function isInLocalMode(): boolean;
|
|
79
85
|
/**
|
|
80
86
|
* Apply live lambda aspect to a CDK app or stack if live mode is enabled.
|
|
81
87
|
*
|
|
@@ -194,8 +194,6 @@ export class LiveLambdaAspect {
|
|
|
194
194
|
`arn:aws:ssm:${stack.region}:${stack.account}:parameter${ssmBasePath}/*`,
|
|
195
195
|
],
|
|
196
196
|
}));
|
|
197
|
-
// Increase timeout to allow for local debugging
|
|
198
|
-
cfnFunction.timeout = 300; // 5 minutes
|
|
199
197
|
// Replace the Docker image with the bridge image
|
|
200
198
|
cfnFunction.code = {
|
|
201
199
|
imageUri: bridgeImageUri,
|
|
@@ -245,8 +243,6 @@ export class LiveLambdaAspect {
|
|
|
245
243
|
`arn:aws:ssm:${stack.region}:${stack.account}:parameter${ssmBasePath}/*`,
|
|
246
244
|
],
|
|
247
245
|
}));
|
|
248
|
-
// Increase timeout to allow for local debugging
|
|
249
|
-
cfnFunction.timeout = 300; // 5 minutes
|
|
250
246
|
// Replace the code with bridge handler from bootstrap stack's S3 bucket
|
|
251
247
|
cfnFunction.code = {
|
|
252
248
|
s3Bucket: bridgeBucket,
|
|
@@ -256,9 +252,15 @@ export class LiveLambdaAspect {
|
|
|
256
252
|
}
|
|
257
253
|
}
|
|
258
254
|
/**
|
|
259
|
-
*
|
|
255
|
+
* Check if local mode is enabled (CDK_LOCAL_LAMBDA=true).
|
|
256
|
+
* Use this in your constructs for conditional configuration.
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* timeout: isInLocalMode()
|
|
260
|
+
* ? cdk.Duration.minutes(5)
|
|
261
|
+
* : cdk.Duration.seconds(30)
|
|
260
262
|
*/
|
|
261
|
-
export function
|
|
263
|
+
export function isInLocalMode() {
|
|
262
264
|
return process.env.CDK_LOCAL_LAMBDA === "true";
|
|
263
265
|
}
|
|
264
266
|
/**
|
|
@@ -268,11 +270,11 @@ export function isLiveModeEnabled() {
|
|
|
268
270
|
* @param props Optional configuration for the live lambda aspect
|
|
269
271
|
*/
|
|
270
272
|
export function applyLiveLambdaAspect(scope, props = {}) {
|
|
271
|
-
if (!
|
|
273
|
+
if (!isInLocalMode()) {
|
|
272
274
|
console.log("[LiveLambda] Live mode not enabled (set CDK_LOCAL_LAMBDA=true to enable)");
|
|
273
275
|
return;
|
|
274
276
|
}
|
|
275
277
|
console.log("[LiveLambda] Live mode enabled - transforming Lambda functions");
|
|
276
278
|
cdk.Aspects.of(scope).add(new LiveLambdaAspect(props));
|
|
277
279
|
}
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEtBQWlCLEVBQ2pCLFFBQStCLEVBQUU7SUFFakMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUNULDBFQUEwRSxDQUMzRSxDQUFBO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7SUFDN0UsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDREsgQXNwZWN0IHRvIHRyYW5zZm9ybSBMYW1iZGEgZnVuY3Rpb25zIGZvciBsaXZlIGRlYnVnZ2luZ1xuICpcbiAqIFdoZW4gYXBwbGllZCB0byBhIENESyBhcHAvc3RhY2ssIHRoaXMgYXNwZWN0OlxuICogMS4gUmVwbGFjZXMgTGFtYmRhIGNvZGUgd2l0aCB0aGUgYnJpZGdlIGhhbmRsZXIgZnJvbSB0aGUgYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gKiAyLiBHcmFudHMgSUFNIHBlcm1pc3Npb25zIGZvciBBcHBTeW5jIEV2ZW50c1xuICogMy4gQWRkcyBhIHRhZyB3aXRoIHRoZSBsb2NhbCBoYW5kbGVyIHBhdGggZm9yIHRoZSBkYWVtb24gdG8gZGlzY292ZXJcbiAqXG4gKiBUaGUgYnJpZGdlIHVzZXMgQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FIChhdXRvLWluamVjdGVkIGJ5IExhbWJkYSkgZm9yIGNoYW5uZWwgcm91dGluZy5cbiAqIFRoZSBkYWVtb24gZGlzY292ZXJzIGZ1bmN0aW9ucyBieSBxdWVyeWluZyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGUgbGl2ZS1sYW1iZGEgdGFnLlxuICovXG5cbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiXG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQge1xuICBMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLFxuICBMSVZFX0xBTUJEQV9UQUcsXG4gIFNTTV9CQVNFX1BBVEgsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXMuanNcIlxuaW1wb3J0IHtcbiAgZ2V0RG9ja2VyQ29udGV4dFBhdGgsXG4gIGlzRG9ja2VySW1hZ2VGdW5jdGlvbixcbn0gZnJvbSBcIi4vZG9ja2VyLWZ1bmN0aW9uLWhvb2suanNcIlxuaW1wb3J0IHsgZ2V0RW50cnlQYXRoLCBnZXRIYW5kbGVyTmFtZSB9IGZyb20gXCIuL25vZGVqcy1mdW5jdGlvbi1ob29rLmpzXCJcblxuLy8gUmVnZXggdG8gc3RyaXAgZmlsZSBleHRlbnNpb24gZnJvbSBlbnRyeSBwYXRoXG5jb25zdCBFWFRFTlNJT05fUkVHRVggPSAvXFwuKHRzfGpzfG1qc3xjanN8bXRzfGN0cykkL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIExpdmVMYW1iZGFBc3BlY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXZlTGFtYmRhQXNwZWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgdG8gdXNlIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdXNlcyB0aGUgc3RhY2sgbmFtZSBmcm9tIHRoZSBmdW5jdGlvbidzIHN0YWNrLlxuICAgKi9cbiAgc3RhY2tOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBQYXR0ZXJuIHRvIG1hdGNoIGZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gdHJhbnNmb3JtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGFsbCBMYW1iZGEgZnVuY3Rpb25zIGFyZSB0cmFuc2Zvcm1lZC5cbiAgICovXG4gIGZ1bmN0aW9uUGF0dGVybj86IFJlZ0V4cFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogRnVuY3Rpb24gY29uc3RydWN0IElEcyB0byBleGNsdWRlIGZyb20gdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICBleGNsdWRlRnVuY3Rpb25zPzogc3RyaW5nW11cbn1cblxuLyoqXG4gKiBDREsgQXNwZWN0IHRoYXQgdHJhbnNmb3JtcyBMYW1iZGEgZnVuY3Rpb25zIGZvciBsaXZlIGRlYnVnZ2luZy5cbiAqXG4gKiBVc2FnZSBpbiBiaW4vYXBwLnRzOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAqIGNvbnN0IHN0YWNrID0gbmV3IE15U3RhY2soYXBwLCAnTXlTdGFjaycpO1xuICpcbiAqIGlmIChwcm9jZXNzLmVudi5DREtfTE9DQUxfTEFNQkRBID09PSAndHJ1ZScpIHtcbiAqICAgY2RrLkFzcGVjdHMub2YoYXBwKS5hZGQobmV3IExpdmVMYW1iZGFBc3BlY3QoKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExpdmVMYW1iZGFBc3BlY3QgaW1wbGVtZW50cyBjZGsuSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wc1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlZEZ1bmN0aW9uczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgTGFtYmRhIEZ1bmN0aW9uIHVzaW5nIGR1Y2stdHlwaW5nIGluc3RlYWQgb2YgaW5zdGFuY2VvZlxuICAgIC8vIFRoaXMgYXZvaWRzIGlzc3VlcyB3aXRoIG11bHRpcGxlIGNvcGllcyBvZiBhd3MtY2RrLWxpYiBiZWluZyBsb2FkZWRcbiAgICBpZiAoIXRoaXMuaXNMYW1iZGFGdW5jdGlvbihub2RlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzdCB0byBsYW1iZGEuRnVuY3Rpb24gZm9yIHR5cGUgY2hlY2tpbmcgKHdlJ3ZlIHZlcmlmaWVkIGl0J3MgYSBMYW1iZGEpXG4gICAgY29uc3QgZm4gPSBub2RlIGFzIHVua25vd24gYXMgbGFtYmRhLkZ1bmN0aW9uXG5cbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkIChhc3BlY3RzIGNhbiB2aXNpdCBtdWx0aXBsZSB0aW1lcylcbiAgICBjb25zdCBub2RlSWQgPSBub2RlLm5vZGUuYWRkclxuICAgIGlmICh0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5oYXMobm9kZUlkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgZnVuY3Rpb24gSUQgZnJvbSB0aGUgY29uc3RydWN0IHBhdGhcbiAgICBjb25zdCBmdW5jdGlvbklkID0gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uSWQoZm4pXG5cbiAgICAvLyBDaGVjayBleGNsdXNpb24gbGlzdFxuICAgIGlmICh0aGlzLnByb3BzLmV4Y2x1ZGVGdW5jdGlvbnM/LmluY2x1ZGVzKGZ1bmN0aW9uSWQpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFNraXBwaW5nIGV4Y2x1ZGVkIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENoZWNrIHBhdHRlcm4gbWF0Y2hcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmZ1bmN0aW9uUGF0dGVybiAmJlxuICAgICAgIXRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuLnRlc3QoZnVuY3Rpb25JZClcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgbm9uLW1hdGNoaW5nIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTmFtZSA9IHRoaXMucHJvcHMuc3RhY2tOYW1lIHx8IGNkay5TdGFjay5vZihmbikuc3RhY2tOYW1lXG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgRG9ja2VySW1hZ2VGdW5jdGlvblxuICAgIGNvbnN0IGlzRG9ja2VyRnVuY3Rpb24gPSBpc0RvY2tlckltYWdlRnVuY3Rpb24oZm4pXG5cbiAgICBpZiAoaXNEb2NrZXJGdW5jdGlvbikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gVHJhbnNmb3JtaW5nIERvY2tlckltYWdlRnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gLFxuICAgICAgKVxuICAgICAgdGhpcy50cmFuc2Zvcm1Eb2NrZXJGdW5jdGlvbihmbiwgc3RhY2tOYW1lLCBmdW5jdGlvbklkKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgaGFuZGxlciBwYXRocyBiZWZvcmUgd2UgbW9kaWZ5IGFueXRoaW5nXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aHMgPSB0aGlzLmdldEhhbmRsZXJQYXRocyhmbilcblxuICAgICAgLy8gU2tpcCB1bnN1cHBvcnRlZCBmdW5jdGlvbnMgKG5vdCBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgICAgaWYgKCFoYW5kbGVyUGF0aHMpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuYWRkKG5vZGVJZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfSA9IGhhbmRsZXJQYXRoc1xuXG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFRyYW5zZm9ybWluZyBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG5cbiAgICAgIC8vIFRyYW5zZm9ybSB0aGUgZnVuY3Rpb25cbiAgICAgIHRoaXMudHJhbnNmb3JtRnVuY3Rpb24oXG4gICAgICAgIGZuLFxuICAgICAgICBzdGFja05hbWUsXG4gICAgICAgIGZ1bmN0aW9uSWQsXG4gICAgICAgIG9yaWdpbmFsSGFuZGxlcixcbiAgICAgICAgbG9jYWxIYW5kbGVyLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmFkZChub2RlSWQpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb25zdHJ1Y3QgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcuXG4gICAqIFRoaXMgYXZvaWRzIGluc3RhbmNlb2YgaXNzdWVzIHdoZW4gbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwcml2YXRlIGlzTGFtYmRhRnVuY3Rpb24obm9kZTogSUNvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGJ5IGNvbnN0cnVjdG9yIG5hbWUgLSBoYW5kbGVzIEZ1bmN0aW9uLCBEb2NrZXJJbWFnZUZ1bmN0aW9uLCBOb2RlanNGdW5jdGlvbiwgZXRjLlxuICAgIC8vIEFsc28gaGFuZGxlcyBvdXIgcGF0Y2hlZCB2ZXJzaW9ucyBsaWtlIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IG5vZGUuY29uc3RydWN0b3IubmFtZVxuICAgIC8vIENESyBhcHBlbmRzIFwiMlwiIHRvIGNsYXNzIG5hbWVzIGluIHNvbWUgdmVyc2lvbnNcbiAgICBjb25zdCBpc0Z1bmN0aW9uID1cbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJGdW5jdGlvblwiIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiRnVuY3Rpb24yXCIgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5lbmRzV2l0aChcIkZ1bmN0aW9uXCIpIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuZW5kc1dpdGgoXCJGdW5jdGlvbjJcIikgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5pbmNsdWRlcyhcIkZ1bmN0aW9uXCIpIC8vIENhdGNoIHBhdGNoZWQgdmVyc2lvbnMgbGlrZSBEb2NrZXJJbWFnZUZ1bmN0aW9uV2l0aENhcHR1cmVcblxuICAgIGlmICghaXNGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gRXhjbHVkZSBDZm5GdW5jdGlvbiAodGhlIEwxIGNvbnN0cnVjdClcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lID09PSBcIkNmbkZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIFZlcmlmeSBpdCBoYXMgZXhwZWN0ZWQgTGFtYmRhIEZ1bmN0aW9uIHByb3BlcnRpZXNcbiAgICBjb25zdCBtYXliZUZ1bmN0aW9uID0gbm9kZSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGZ1bmN0aW9uTmFtZT86IHVua25vd25cbiAgICAgIGZ1bmN0aW9uQXJuPzogdW5rbm93blxuICAgICAgbm9kZT86IHsgZGVmYXVsdENoaWxkPzogdW5rbm93biB9XG4gICAgfVxuXG4gICAgLy8gTXVzdCBoYXZlIGZ1bmN0aW9uTmFtZSBhbmQgZnVuY3Rpb25Bcm4gKElGdW5jdGlvbiBpbnRlcmZhY2UpXG4gICAgaWYgKCFtYXliZUZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSB8fCAhbWF5YmVGdW5jdGlvbi5mdW5jdGlvbkFybikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gTXVzdCBoYXZlIGEgZGVmYXVsdENoaWxkICh0aGUgQ2ZuRnVuY3Rpb24pXG4gICAgaWYgKCFtYXliZUZ1bmN0aW9uLm5vZGU/LmRlZmF1bHRDaGlsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGdW5jdGlvbklkKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiBzdHJpbmcge1xuICAgIC8vIFVzZSB0aGUgY29uc3RydWN0IElEIGFzIHRoZSBmdW5jdGlvbiBJRFxuICAgIC8vIEZvciBuZXN0ZWQgY29uc3RydWN0cywgam9pbiB3aXRoIGRhc2hlc1xuICAgIGNvbnN0IHBhcnRzID0gZm4ubm9kZS5wYXRoLnNwbGl0KFwiL1wiKVxuICAgIC8vIFNraXAgZmlyc3QgcGFydCAoQXBwKSBhbmQgdGFrZSB0aGUgcmVzdFxuICAgIGNvbnN0IHJlbGV2YW50UGFydHMgPSBwYXJ0cy5zbGljZSgxKVxuICAgIHJldHVybiByZWxldmFudFBhcnRzLmpvaW4oXCItXCIpLnJlcGxhY2UoL1teYS16QS1aMC05LV0vZywgXCItXCIpXG4gIH1cblxuICAvKipcbiAgICogR2V0IGhhbmRsZXIgcGF0aHMgZm9yIGEgZnVuY3Rpb24uXG4gICAqIFJldHVybnMgYm90aCB0aGUgb3JpZ2luYWwgaGFuZGxlciAoYXMgc2V0IGluIENmbkZ1bmN0aW9uKSBhbmQgdGhlIGxvY2FsIGhhbmRsZXIgcGF0aC5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChlLmcuLCBub3QgYSBOb2RlanNGdW5jdGlvbikuXG4gICAqL1xuICBwcml2YXRlIGdldEhhbmRsZXJQYXRocyhmbjogbGFtYmRhLkZ1bmN0aW9uKToge1xuICAgIG9yaWdpbmFsSGFuZGxlcjogc3RyaW5nXG4gICAgbG9jYWxIYW5kbGVyOiBzdHJpbmdcbiAgfSB8IG51bGwge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgb3JpZ2luYWxIYW5kbGVyID0gY2ZuRnVuY3Rpb24uaGFuZGxlciB8fCBcImluZGV4LmhhbmRsZXJcIlxuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gZm4ubm9kZS5pZFxuXG4gICAgLy8gQ2hlY2sgaWYgY2FwdHVyZWQgYnkgdGhlIE5vZGVqc0Z1bmN0aW9uIGhvb2tcbiAgICBjb25zdCBlbnRyeVBhdGggPSBnZXRFbnRyeVBhdGgoZm4pXG4gICAgY29uc3QgaGFuZGxlck5hbWUgPSBnZXRIYW5kbGVyTmFtZShmbikgfHwgXCJoYW5kbGVyXCJcbiAgICBpZiAoZW50cnlQYXRoKSB7XG4gICAgICAvLyBDb252ZXJ0IGVudHJ5IHBhdGggdG8gbG9jYWwgaGFuZGxlciBwYXRoXG4gICAgICAvLyBlLmcuLCBcImZ1bmN0aW9ucy9zMy13cml0ZXIvaGFuZGxlci50c1wiICsgXCJoYW5kbGVyXCIgLT4gXCJmdW5jdGlvbnMvczMtd3JpdGVyL2hhbmRsZXIuaGFuZGxlclwiXG4gICAgICBjb25zdCBsb2NhbEhhbmRsZXIgPSBgJHtlbnRyeVBhdGgucmVwbGFjZShFWFRFTlNJT05fUkVHRVgsIFwiXCIpfS4ke2hhbmRsZXJOYW1lfWBcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIFVzaW5nIGNhcHR1cmVkIGVudHJ5IGZvciAke2NvbnN0cnVjdElkfTogJHtsb2NhbEhhbmRsZXJ9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiB7IG9yaWdpbmFsSGFuZGxlciwgbG9jYWxIYW5kbGVyIH1cbiAgICB9XG5cbiAgICAvLyBObyBoYW5kbGVyIHBhdGggZm91bmQgLSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKG5vdCBhIE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24pXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0xpdmVMYW1iZGFdIFNraXBwaW5nIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIFwiJHtjb25zdHJ1Y3RJZH1cIjogYCArXG4gICAgICAgIGBub3QgYSBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uIChvciBib290c3RyYXAgaG9vayB3YXMgbm90IGluc3RhbGxlZCBlYXJseSBlbm91Z2gpYCxcbiAgICApXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBEb2NrZXJJbWFnZUZ1bmN0aW9uIHRvIHVzZSB0aGUgYnJpZGdlIERvY2tlciBpbWFnZS5cbiAgICogU3RvcmVzIHRoZSBsb2NhbCBEb2NrZXIgY29udGV4dCBwYXRoIGluIGEgdGFnIGZvciB0aGUgZGFlbW9uIHRvIGJ1aWxkL3J1biBsb2NhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Eb2NrZXJGdW5jdGlvbihcbiAgICBmbjogbGFtYmRhLkZ1bmN0aW9uLFxuICAgIF9zdGFja05hbWU6IHN0cmluZyxcbiAgICBmdW5jdGlvbklkOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2YoZm4pXG5cbiAgICAvLyBHZXQgdGhlIGRvY2tlciBjb250ZXh0IHBhdGggZnJvbSB0aGUgaG9va1xuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gZ2V0RG9ja2VyQ29udGV4dFBhdGgoZm4pXG4gICAgaWYgKCFkb2NrZXJDb250ZXh0UGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIE5vIGRvY2tlciBjb250ZXh0IHBhdGggZm9yIFwiJHtmdW5jdGlvbklkfVwiLiBgICtcbiAgICAgICAgICBgVGhlIGJvb3RzdHJhcCBob29rIHdhcyBub3QgaW5zdGFsbGVkIGVhcmx5IGVub3VnaC4gYCArXG4gICAgICAgICAgYEZpeDogaW1wb3J0IFwiY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIiBiZWZvcmUgYW55IENESyBpbXBvcnRzIChOb2RlLmpzKSwgYCArXG4gICAgICAgICAgYG9yIHJ1biBCdW4gd2l0aCBcImJ1biAtLXByZWxvYWQgY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIi5gLFxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIEdldCBTU00gcGFyYW1ldGVyc1xuICAgIGNvbnN0IGJvb3RzdHJhcFF1YWxpZmllciA9XG4gICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllclwiKSB8fFxuICAgICAgXCJobmI2NTlmZHNcIlxuICAgIGNvbnN0IHNzbUJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtib290c3RyYXBRdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgYXBpQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2FwaS1hcm5gLFxuICAgIClcblxuICAgIC8vIERldGVybWluZSBhcmNoaXRlY3R1cmUgYW5kIGdldCBhcHByb3ByaWF0ZSBicmlkZ2UgaW1hZ2VcbiAgICBjb25zdCBhcmNoaXRlY3R1cmUgPSB0aGlzLmdldEFyY2hpdGVjdHVyZShjZm5GdW5jdGlvbilcbiAgICBjb25zdCBicmlkZ2VJbWFnZVBhcmFtID1cbiAgICAgIGFyY2hpdGVjdHVyZSA9PT0gXCJhcm02NFwiID8gXCJicmlkZ2UtaW1hZ2UtYXJtNjRcIiA6IFwiYnJpZGdlLWltYWdlLXg4Nl82NFwiXG5cbiAgICBjb25zdCBicmlkZ2VJbWFnZVVyaSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS8ke2JyaWRnZUltYWdlUGFyYW19YCxcbiAgICApXG5cbiAgICAvLyBBZGQgdGFnIHdpdGggZG9ja2VyIGNvbnRleHQgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gdXNlcyB0aGlzIHRhZyB0byBidWlsZCBhbmQgcnVuIHRoZSBjb250YWluZXIgbG9jYWxseVxuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX0RPQ0tFUl9UQUcsIGRvY2tlckNvbnRleHRQYXRoKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gSW5jcmVhc2UgdGltZW91dCB0byBhbGxvdyBmb3IgbG9jYWwgZGVidWdnaW5nXG4gICAgY2ZuRnVuY3Rpb24udGltZW91dCA9IDMwMCAvLyA1IG1pbnV0ZXNcblxuICAgIC8vIFJlcGxhY2UgdGhlIERvY2tlciBpbWFnZSB3aXRoIHRoZSBicmlkZ2UgaW1hZ2VcbiAgICBjZm5GdW5jdGlvbi5jb2RlID0ge1xuICAgICAgaW1hZ2VVcmk6IGJyaWRnZUltYWdlVXJpLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBSZXBsYWNlZCBEb2NrZXIgaW1hZ2Ugd2l0aCBicmlkZ2UgKCR7YXJjaGl0ZWN0dXJlfSlgLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSBvZiBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICogRGVmYXVsdHMgdG8geDg2XzY0IGlmIG5vdCBleHBsaWNpdGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24pOiBcImFybTY0XCIgfCBcIng4Nl82NFwiIHtcbiAgICBjb25zdCBhcmNoaXRlY3R1cmVzID0gY2ZuRnVuY3Rpb24uYXJjaGl0ZWN0dXJlcyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgIGlmIChhcmNoaXRlY3R1cmVzPy5pbmNsdWRlcyhcImFybTY0XCIpKSB7XG4gICAgICByZXR1cm4gXCJhcm02NFwiXG4gICAgfVxuICAgIHJldHVybiBcIng4Nl82NFwiXG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIF9mdW5jdGlvbklkOiBzdHJpbmcsXG4gICAgX29yaWdpbmFsSGFuZGxlcjogc3RyaW5nLFxuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gUmVhZCB2YWx1ZXMgZnJvbSBTU00gcGFyYW1ldGVycyAoY3JlYXRlZCBieSBib290c3RyYXAgc3RhY2spXG4gICAgLy8gVXNlIHRoZSBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBmb3IgcHJvcGVyIHNjb3BpbmdcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG4gICAgY29uc3QgYnJpZGdlQnVja2V0ID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2JyaWRnZS1idWNrZXRgLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VLZXkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWtleWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGxvY2FsIGhhbmRsZXIgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gcXVlcmllcyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGlzIHRhZ1xuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX1RBRywgbG9jYWxIYW5kbGVyKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gSW5jcmVhc2UgdGltZW91dCB0byBhbGxvdyBmb3IgbG9jYWwgZGVidWdnaW5nXG4gICAgY2ZuRnVuY3Rpb24udGltZW91dCA9IDMwMCAvLyA1IG1pbnV0ZXNcblxuICAgIC8vIFJlcGxhY2UgdGhlIGNvZGUgd2l0aCBicmlkZ2UgaGFuZGxlciBmcm9tIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICAgIGNmbkZ1bmN0aW9uLmNvZGUgPSB7XG4gICAgICBzM0J1Y2tldDogYnJpZGdlQnVja2V0LFxuICAgICAgczNLZXk6IGJyaWRnZUtleSxcbiAgICB9XG4gICAgY2ZuRnVuY3Rpb24uaGFuZGxlciA9IFwiaW5kZXguaGFuZGxlclwiXG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl2ZU1vZGVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQ0RLX0xPQ0FMX0xBTUJEQSA9PT0gXCJ0cnVlXCJcbn1cblxuLyoqXG4gKiBBcHBseSBsaXZlIGxhbWJkYSBhc3BlY3QgdG8gYSBDREsgYXBwIG9yIHN0YWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgQ0RLIGFwcCBvciBzdGFjayB0byBhcHBseSB0aGUgYXNwZWN0IHRvXG4gKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxpdmUgbGFtYmRhIGFzcGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaXZlTGFtYmRhQXNwZWN0KFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9LFxuKTogdm9pZCB7XG4gIGlmICghaXNMaXZlTW9kZUVuYWJsZWQoKSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIG5vdCBlbmFibGVkIChzZXQgQ0RLX0xPQ0FMX0xBTUJEQT10cnVlIHRvIGVuYWJsZSlcIixcbiAgICApXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zb2xlLmxvZyhcIltMaXZlTGFtYmRhXSBMaXZlIG1vZGUgZW5hYmxlZCAtIHRyYW5zZm9ybWluZyBMYW1iZGEgZnVuY3Rpb25zXCIpXG4gIGNkay5Bc3BlY3RzLm9mKHNjb3BlKS5hZGQobmV3IExpdmVMYW1iZGFBc3BlY3QocHJvcHMpKVxufVxuIl19
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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T0FBTyxDQUFDLEdBQUcsQ0FDVCwwRUFBMEUsQ0FDM0UsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xPQ0FMX0xBTUJEQSA9PT0gJ3RydWUnKSB7XG4gKiAgIGNkay5Bc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KCkpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXZlTGFtYmRhQXNwZWN0IGltcGxlbWVudHMgY2RrLklBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHNcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIExhbWJkYSBGdW5jdGlvbiB1c2luZyBkdWNrLXR5cGluZyBpbnN0ZWFkIG9mIGluc3RhbmNlb2ZcbiAgICAvLyBUaGlzIGF2b2lkcyBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBjb3BpZXMgb2YgYXdzLWNkay1saWIgYmVpbmcgbG9hZGVkXG4gICAgaWYgKCF0aGlzLmlzTGFtYmRhRnVuY3Rpb24obm9kZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc3QgdG8gbGFtYmRhLkZ1bmN0aW9uIGZvciB0eXBlIGNoZWNraW5nICh3ZSd2ZSB2ZXJpZmllZCBpdCdzIGEgTGFtYmRhKVxuICAgIGNvbnN0IGZuID0gbm9kZSBhcyB1bmtub3duIGFzIGxhbWJkYS5GdW5jdGlvblxuXG4gICAgLy8gU2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZCAoYXNwZWN0cyBjYW4gdmlzaXQgbXVsdGlwbGUgdGltZXMpXG4gICAgY29uc3Qgbm9kZUlkID0gbm9kZS5ub2RlLmFkZHJcbiAgICBpZiAodGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuaGFzKG5vZGVJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGZ1bmN0aW9uIElEIGZyb20gdGhlIGNvbnN0cnVjdCBwYXRoXG4gICAgY29uc3QgZnVuY3Rpb25JZCA9IHRoaXMuZ2VuZXJhdGVGdW5jdGlvbklkKGZuKVxuXG4gICAgLy8gQ2hlY2sgZXhjbHVzaW9uIGxpc3RcbiAgICBpZiAodGhpcy5wcm9wcy5leGNsdWRlRnVuY3Rpb25zPy5pbmNsdWRlcyhmdW5jdGlvbklkKSkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBleGNsdWRlZCBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBwYXR0ZXJuIG1hdGNoXG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4gJiZcbiAgICAgICF0aGlzLnByb3BzLmZ1bmN0aW9uUGF0dGVybi50ZXN0KGZ1bmN0aW9uSWQpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFNraXBwaW5nIG5vbi1tYXRjaGluZyBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja05hbWUgPSB0aGlzLnByb3BzLnN0YWNrTmFtZSB8fCBjZGsuU3RhY2sub2YoZm4pLnN0YWNrTmFtZVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIERvY2tlckltYWdlRnVuY3Rpb25cbiAgICBjb25zdCBpc0RvY2tlckZ1bmN0aW9uID0gaXNEb2NrZXJJbWFnZUZ1bmN0aW9uKGZuKVxuXG4gICAgaWYgKGlzRG9ja2VyRnVuY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIFRyYW5zZm9ybWluZyBEb2NrZXJJbWFnZUZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YCxcbiAgICAgIClcbiAgICAgIHRoaXMudHJhbnNmb3JtRG9ja2VyRnVuY3Rpb24oZm4sIHN0YWNrTmFtZSwgZnVuY3Rpb25JZClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gR2V0IGhhbmRsZXIgcGF0aHMgYmVmb3JlIHdlIG1vZGlmeSBhbnl0aGluZ1xuICAgICAgY29uc3QgaGFuZGxlclBhdGhzID0gdGhpcy5nZXRIYW5kbGVyUGF0aHMoZm4pXG5cbiAgICAgIC8vIFNraXAgdW5zdXBwb3J0ZWQgZnVuY3Rpb25zIChub3QgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbilcbiAgICAgIGlmICghaGFuZGxlclBhdGhzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmFkZChub2RlSWQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG9yaWdpbmFsSGFuZGxlciwgbG9jYWxIYW5kbGVyIH0gPSBoYW5kbGVyUGF0aHNcblxuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuXG4gICAgICAvLyBUcmFuc2Zvcm0gdGhlIGZ1bmN0aW9uXG4gICAgICB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgICAgICBmbixcbiAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICBvcmlnaW5hbEhhbmRsZXIsXG4gICAgICAgIGxvY2FsSGFuZGxlcixcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29uc3RydWN0IGlzIGEgTGFtYmRhIEZ1bmN0aW9uIHVzaW5nIGR1Y2stdHlwaW5nLlxuICAgKiBUaGlzIGF2b2lkcyBpbnN0YW5jZW9mIGlzc3VlcyB3aGVuIG11bHRpcGxlIGNvcGllcyBvZiBhd3MtY2RrLWxpYiBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0xhbWJkYUZ1bmN0aW9uKG5vZGU6IElDb25zdHJ1Y3QpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBieSBjb25zdHJ1Y3RvciBuYW1lIC0gaGFuZGxlcyBGdW5jdGlvbiwgRG9ja2VySW1hZ2VGdW5jdGlvbiwgTm9kZWpzRnVuY3Rpb24sIGV0Yy5cbiAgICAvLyBBbHNvIGhhbmRsZXMgb3VyIHBhdGNoZWQgdmVyc2lvbnMgbGlrZSBEb2NrZXJJbWFnZUZ1bmN0aW9uV2l0aENhcHR1cmVcbiAgICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAvLyBDREsgYXBwZW5kcyBcIjJcIiB0byBjbGFzcyBuYW1lcyBpbiBzb21lIHZlcnNpb25zXG4gICAgY29uc3QgaXNGdW5jdGlvbiA9XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiRnVuY3Rpb25cIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uMlwiIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuZW5kc1dpdGgoXCJGdW5jdGlvblwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb24yXCIpIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuaW5jbHVkZXMoXCJGdW5jdGlvblwiKSAvLyBDYXRjaCBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG5cbiAgICBpZiAoIWlzRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgQ2ZuRnVuY3Rpb24gKHRoZSBMMSBjb25zdHJ1Y3QpXG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJDZm5GdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgaXQgaGFzIGV4cGVjdGVkIExhbWJkYSBGdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgY29uc3QgbWF5YmVGdW5jdGlvbiA9IG5vZGUgYXMgdW5rbm93biBhcyB7XG4gICAgICBmdW5jdGlvbk5hbWU/OiB1bmtub3duXG4gICAgICBmdW5jdGlvbkFybj86IHVua25vd25cbiAgICAgIG5vZGU/OiB7IGRlZmF1bHRDaGlsZD86IHVua25vd24gfVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBmdW5jdGlvbk5hbWUgYW5kIGZ1bmN0aW9uQXJuIChJRnVuY3Rpb24gaW50ZXJmYWNlKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5mdW5jdGlvbk5hbWUgfHwgIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25Bcm4pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBhIGRlZmF1bHRDaGlsZCAodGhlIENmbkZ1bmN0aW9uKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5ub2RlPy5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRnVuY3Rpb25JZChmbjogbGFtYmRhLkZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgdGhlIGNvbnN0cnVjdCBJRCBhcyB0aGUgZnVuY3Rpb24gSURcbiAgICAvLyBGb3IgbmVzdGVkIGNvbnN0cnVjdHMsIGpvaW4gd2l0aCBkYXNoZXNcbiAgICBjb25zdCBwYXJ0cyA9IGZuLm5vZGUucGF0aC5zcGxpdChcIi9cIilcbiAgICAvLyBTa2lwIGZpcnN0IHBhcnQgKEFwcCkgYW5kIHRha2UgdGhlIHJlc3RcbiAgICBjb25zdCByZWxldmFudFBhcnRzID0gcGFydHMuc2xpY2UoMSlcbiAgICByZXR1cm4gcmVsZXZhbnRQYXJ0cy5qb2luKFwiLVwiKS5yZXBsYWNlKC9bXmEtekEtWjAtOS1dL2csIFwiLVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoYW5kbGVyIHBhdGhzIGZvciBhIGZ1bmN0aW9uLlxuICAgKiBSZXR1cm5zIGJvdGggdGhlIG9yaWdpbmFsIGhhbmRsZXIgKGFzIHNldCBpbiBDZm5GdW5jdGlvbikgYW5kIHRoZSBsb2NhbCBoYW5kbGVyIHBhdGguXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAoZS5nLiwgbm90IGEgTm9kZWpzRnVuY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIYW5kbGVyUGF0aHMoZm46IGxhbWJkYS5GdW5jdGlvbik6IHtcbiAgICBvcmlnaW5hbEhhbmRsZXI6IHN0cmluZ1xuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nXG4gIH0gfCBudWxsIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGNmbkZ1bmN0aW9uLmhhbmRsZXIgfHwgXCJpbmRleC5oYW5kbGVyXCJcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IGZuLm5vZGUuaWRcblxuICAgIC8vIENoZWNrIGlmIGNhcHR1cmVkIGJ5IHRoZSBOb2RlanNGdW5jdGlvbiBob29rXG4gICAgY29uc3QgZW50cnlQYXRoID0gZ2V0RW50cnlQYXRoKGZuKVxuICAgIGNvbnN0IGhhbmRsZXJOYW1lID0gZ2V0SGFuZGxlck5hbWUoZm4pIHx8IFwiaGFuZGxlclwiXG4gICAgaWYgKGVudHJ5UGF0aCkge1xuICAgICAgLy8gQ29udmVydCBlbnRyeSBwYXRoIHRvIGxvY2FsIGhhbmRsZXIgcGF0aFxuICAgICAgLy8gZS5nLiwgXCJmdW5jdGlvbnMvczMtd3JpdGVyL2hhbmRsZXIudHNcIiArIFwiaGFuZGxlclwiIC0+IFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLmhhbmRsZXJcIlxuICAgICAgY29uc3QgbG9jYWxIYW5kbGVyID0gYCR7ZW50cnlQYXRoLnJlcGxhY2UoRVhURU5TSU9OX1JFR0VYLCBcIlwiKX0uJHtoYW5kbGVyTmFtZX1gXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBVc2luZyBjYXB0dXJlZCBlbnRyeSBmb3IgJHtjb25zdHJ1Y3RJZH06ICR7bG9jYWxIYW5kbGVyfWAsXG4gICAgICApXG4gICAgICByZXR1cm4geyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciBwYXRoIGZvdW5kIC0gdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChub3QgYSBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBTa2lwcGluZyB1bnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7Y29uc3RydWN0SWR9XCI6IGAgK1xuICAgICAgICBgbm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbiAob3IgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoKWAsXG4gICAgKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgRG9ja2VySW1hZ2VGdW5jdGlvbiB0byB1c2UgdGhlIGJyaWRnZSBEb2NrZXIgaW1hZ2UuXG4gICAqIFN0b3JlcyB0aGUgbG9jYWwgRG9ja2VyIGNvbnRleHQgcGF0aCBpbiBhIHRhZyBmb3IgdGhlIGRhZW1vbiB0byBidWlsZC9ydW4gbG9jYWxseS5cbiAgICovXG4gIHByaXZhdGUgdHJhbnNmb3JtRG9ja2VyRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25JZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gR2V0IHRoZSBkb2NrZXIgY29udGV4dCBwYXRoIGZyb20gdGhlIGhvb2tcbiAgICBjb25zdCBkb2NrZXJDb250ZXh0UGF0aCA9IGdldERvY2tlckNvbnRleHRQYXRoKGZuKVxuICAgIGlmICghZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBObyBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBcIiR7ZnVuY3Rpb25JZH1cIi4gYCArXG4gICAgICAgICAgYFRoZSBib290c3RyYXAgaG9vayB3YXMgbm90IGluc3RhbGxlZCBlYXJseSBlbm91Z2guIGAgK1xuICAgICAgICAgIGBGaXg6IGltcG9ydCBcImNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIgYmVmb3JlIGFueSBDREsgaW1wb3J0cyAoTm9kZS5qcyksIGAgK1xuICAgICAgICAgIGBvciBydW4gQnVuIHdpdGggXCJidW4gLS1wcmVsb2FkIGNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBHZXQgU1NNIHBhcmFtZXRlcnNcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG5cbiAgICAvLyBEZXRlcm1pbmUgYXJjaGl0ZWN0dXJlIGFuZCBnZXQgYXBwcm9wcmlhdGUgYnJpZGdlIGltYWdlXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gdGhpcy5nZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb24pXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VQYXJhbSA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IFwiYXJtNjRcIiA/IFwiYnJpZGdlLWltYWdlLWFybTY0XCIgOiBcImJyaWRnZS1pbWFnZS14ODZfNjRcIlxuXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VVcmkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vJHticmlkZ2VJbWFnZVBhcmFtfWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGRvY2tlciBjb250ZXh0IHBhdGggZm9yIGRhZW1vbiBkaXNjb3ZlcnlcbiAgICAvLyBUaGUgZGFlbW9uIHVzZXMgdGhpcyB0YWcgdG8gYnVpbGQgYW5kIHJ1biB0aGUgY29udGFpbmVyIGxvY2FsbHlcbiAgICBjZm5GdW5jdGlvbi50YWdzLnNldFRhZyhMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLCBkb2NrZXJDb250ZXh0UGF0aClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHB1Ymxpc2gvc3Vic2NyaWJlIHRvIEFwcFN5bmMgRXZlbnRzXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRDb25uZWN0XCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50UHVibGlzaFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFN1YnNjcmliZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFthcGlBcm4sIGAke2FwaUFybn0vKmBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcmVhZCBTU00gcGFyYW1ldGVycyAoYnJpZGdlIG5lZWRzIEFwcFN5bmMgZW5kcG9pbnRzKVxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpwYXJhbWV0ZXIke3NzbUJhc2VQYXRofS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIFJlcGxhY2UgdGhlIERvY2tlciBpbWFnZSB3aXRoIHRoZSBicmlkZ2UgaW1hZ2VcbiAgICBjZm5GdW5jdGlvbi5jb2RlID0ge1xuICAgICAgaW1hZ2VVcmk6IGJyaWRnZUltYWdlVXJpLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBSZXBsYWNlZCBEb2NrZXIgaW1hZ2Ugd2l0aCBicmlkZ2UgKCR7YXJjaGl0ZWN0dXJlfSlgLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSBvZiBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICogRGVmYXVsdHMgdG8geDg2XzY0IGlmIG5vdCBleHBsaWNpdGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24pOiBcImFybTY0XCIgfCBcIng4Nl82NFwiIHtcbiAgICBjb25zdCBhcmNoaXRlY3R1cmVzID0gY2ZuRnVuY3Rpb24uYXJjaGl0ZWN0dXJlcyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgIGlmIChhcmNoaXRlY3R1cmVzPy5pbmNsdWRlcyhcImFybTY0XCIpKSB7XG4gICAgICByZXR1cm4gXCJhcm02NFwiXG4gICAgfVxuICAgIHJldHVybiBcIng4Nl82NFwiXG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIF9mdW5jdGlvbklkOiBzdHJpbmcsXG4gICAgX29yaWdpbmFsSGFuZGxlcjogc3RyaW5nLFxuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gUmVhZCB2YWx1ZXMgZnJvbSBTU00gcGFyYW1ldGVycyAoY3JlYXRlZCBieSBib290c3RyYXAgc3RhY2spXG4gICAgLy8gVXNlIHRoZSBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBmb3IgcHJvcGVyIHNjb3BpbmdcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG4gICAgY29uc3QgYnJpZGdlQnVja2V0ID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2JyaWRnZS1idWNrZXRgLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VLZXkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWtleWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGxvY2FsIGhhbmRsZXIgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gcXVlcmllcyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGlzIHRhZ1xuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX1RBRywgbG9jYWxIYW5kbGVyKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgY29kZSB3aXRoIGJyaWRnZSBoYW5kbGVyIGZyb20gYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIHMzQnVja2V0OiBicmlkZ2VCdWNrZXQsXG4gICAgICBzM0tleTogYnJpZGdlS2V5LFxuICAgIH1cbiAgICBjZm5GdW5jdGlvbi5oYW5kbGVyID0gXCJpbmRleC5oYW5kbGVyXCJcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGxvY2FsIG1vZGUgaXMgZW5hYmxlZCAoQ0RLX0xPQ0FMX0xBTUJEQT10cnVlKS5cbiAqIFVzZSB0aGlzIGluIHlvdXIgY29uc3RydWN0cyBmb3IgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogdGltZW91dDogaXNJbkxvY2FsTW9kZSgpXG4gKiAgID8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSlcbiAqICAgOiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Mb2NhbE1vZGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DREtfTE9DQUxfTEFNQkRBID09PSBcInRydWVcIlxufVxuXG4vKipcbiAqIEFwcGx5IGxpdmUgbGFtYmRhIGFzcGVjdCB0byBhIENESyBhcHAgb3Igc3RhY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHNjb3BlIFRoZSBDREsgYXBwIG9yIHN0YWNrIHRvIGFwcGx5IHRoZSBhc3BlY3QgdG9cbiAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgbGl2ZSBsYW1iZGEgYXNwZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxpdmVMYW1iZGFBc3BlY3QoXG4gIHNjb3BlOiBJQ29uc3RydWN0LFxuICBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKCFpc0luTG9jYWxNb2RlKCkpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiW0xpdmVMYW1iZGFdIExpdmUgbW9kZSBub3QgZW5hYmxlZCAoc2V0IENES19MT0NBTF9MQU1CREE9dHJ1ZSB0byBlbmFibGUpXCIsXG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc29sZS5sb2coXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIGVuYWJsZWQgLSB0cmFuc2Zvcm1pbmcgTGFtYmRhIGZ1bmN0aW9uc1wiKVxuICBjZGsuQXNwZWN0cy5vZihzY29wZSkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KHByb3BzKSlcbn1cbiJdfQ==
|
package/lib/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Exports:
|
|
5
5
|
* - LiveLambdaAspect: CDK Aspect to transform Lambda functions
|
|
6
6
|
* - applyLiveLambdaAspect: Helper to apply the aspect if CDK_LOCAL_LAMBDA=true
|
|
7
|
-
* -
|
|
7
|
+
* - isInLocalMode: Check if local mode is enabled
|
|
8
8
|
* - CdkLocalLambdaBootstrapStack: The bootstrap stack for shared infrastructure
|
|
9
9
|
*
|
|
10
10
|
* For Docker function support, you must install the bootstrap BEFORE any CDK
|
|
@@ -19,6 +19,6 @@
|
|
|
19
19
|
* Bun: use `bun --preload cdk-local-lambda/bootstrap` (static ESM imports are
|
|
20
20
|
* linked before this module runs).
|
|
21
21
|
*/
|
|
22
|
-
export { applyLiveLambdaAspect,
|
|
22
|
+
export { applyLiveLambdaAspect, isInLocalMode, LiveLambdaAspect, type LiveLambdaAspectProps, } from "./aspect/live-lambda-aspect.js";
|
|
23
23
|
export { CdkLocalLambdaBootstrapStack, type CdkLocalLambdaBootstrapStackProps, } from "./bootstrap-stack/bootstrap-stack.js";
|
|
24
24
|
export { buildChannelName, type ErrorPayload, hashFunctionName, type InvocationMessage, type LambdaContext, LIVE_LAMBDA_DOCKER_TAG, LIVE_LAMBDA_TAG, type ResponseMessage, SSM_BASE_PATH, } from "./shared/types.js";
|
package/lib/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Exports:
|
|
5
5
|
* - LiveLambdaAspect: CDK Aspect to transform Lambda functions
|
|
6
6
|
* - applyLiveLambdaAspect: Helper to apply the aspect if CDK_LOCAL_LAMBDA=true
|
|
7
|
-
* -
|
|
7
|
+
* - isInLocalMode: Check if local mode is enabled
|
|
8
8
|
* - CdkLocalLambdaBootstrapStack: The bootstrap stack for shared infrastructure
|
|
9
9
|
*
|
|
10
10
|
* For Docker function support, you must install the bootstrap BEFORE any CDK
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
* linked before this module runs).
|
|
21
21
|
*/
|
|
22
22
|
// Re-export the aspect and helpers
|
|
23
|
-
export { applyLiveLambdaAspect,
|
|
23
|
+
export { applyLiveLambdaAspect, isInLocalMode, LiveLambdaAspect, } from "./aspect/live-lambda-aspect.js";
|
|
24
24
|
// Re-export the bootstrap stack
|
|
25
25
|
export { CdkLocalLambdaBootstrapStack, } from "./bootstrap-stack/bootstrap-stack.js";
|
|
26
26
|
// Re-export shared types
|
|
27
27
|
export { buildChannelName, hashFunctionName, LIVE_LAMBDA_DOCKER_TAG, LIVE_LAMBDA_TAG, SSM_BASE_PATH, } from "./shared/types.js";
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsbUNBQW1DO0FBQ25DLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsYUFBYSxFQUNiLGdCQUFnQixHQUVqQixNQUFNLGdDQUFnQyxDQUFBO0FBRXZDLGdDQUFnQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEdBRTdCLE1BQU0sc0NBQXNDLENBQUE7QUFFN0MseUJBQXlCO0FBQ3pCLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBR2hCLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsYUFBYSxHQUNkLE1BQU0sbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1haW4gZW50cnkgcG9pbnQgZm9yIGNkay1sb2NhbC1sYW1iZGEuXG4gKlxuICogRXhwb3J0czpcbiAqIC0gTGl2ZUxhbWJkYUFzcGVjdDogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9uc1xuICogLSBhcHBseUxpdmVMYW1iZGFBc3BlY3Q6IEhlbHBlciB0byBhcHBseSB0aGUgYXNwZWN0IGlmIENES19MT0NBTF9MQU1CREE9dHJ1ZVxuICogLSBpc0luTG9jYWxNb2RlOiBDaGVjayBpZiBsb2NhbCBtb2RlIGlzIGVuYWJsZWRcbiAqIC0gQ2RrTG9jYWxMYW1iZGFCb290c3RyYXBTdGFjazogVGhlIGJvb3RzdHJhcCBzdGFjayBmb3Igc2hhcmVkIGluZnJhc3RydWN0dXJlXG4gKlxuICogRm9yIERvY2tlciBmdW5jdGlvbiBzdXBwb3J0LCB5b3UgbXVzdCBpbnN0YWxsIHRoZSBib290c3RyYXAgQkVGT1JFIGFueSBDREtcbiAqIGltcG9ydHMgaW4geW91ciBhcHAgZW50cnkgcG9pbnQ6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IFwiY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIlxuICogaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG4gKiBgYGBcbiAqXG4gKiBOb2RlLmpzOiB0aGlzIGlzIHN1ZmZpY2llbnQuXG4gKiBCdW46IHVzZSBgYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAgKHN0YXRpYyBFU00gaW1wb3J0cyBhcmVcbiAqIGxpbmtlZCBiZWZvcmUgdGhpcyBtb2R1bGUgcnVucykuXG4gKi9cblxuLy8gUmUtZXhwb3J0IHRoZSBhc3BlY3QgYW5kIGhlbHBlcnNcbmV4cG9ydCB7XG4gIGFwcGx5TGl2ZUxhbWJkYUFzcGVjdCxcbiAgaXNJbkxvY2FsTW9kZSxcbiAgTGl2ZUxhbWJkYUFzcGVjdCxcbiAgdHlwZSBMaXZlTGFtYmRhQXNwZWN0UHJvcHMsXG59IGZyb20gXCIuL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QuanNcIlxuXG4vLyBSZS1leHBvcnQgdGhlIGJvb3RzdHJhcCBzdGFja1xuZXhwb3J0IHtcbiAgQ2RrTG9jYWxMYW1iZGFCb290c3RyYXBTdGFjayxcbiAgdHlwZSBDZGtMb2NhbExhbWJkYUJvb3RzdHJhcFN0YWNrUHJvcHMsXG59IGZyb20gXCIuL2Jvb3RzdHJhcC1zdGFjay9ib290c3RyYXAtc3RhY2suanNcIlxuXG4vLyBSZS1leHBvcnQgc2hhcmVkIHR5cGVzXG5leHBvcnQge1xuICBidWlsZENoYW5uZWxOYW1lLFxuICB0eXBlIEVycm9yUGF5bG9hZCxcbiAgaGFzaEZ1bmN0aW9uTmFtZSxcbiAgdHlwZSBJbnZvY2F0aW9uTWVzc2FnZSxcbiAgdHlwZSBMYW1iZGFDb250ZXh0LFxuICBMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLFxuICBMSVZFX0xBTUJEQV9UQUcsXG4gIHR5cGUgUmVzcG9uc2VNZXNzYWdlLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi9zaGFyZWQvdHlwZXMuanNcIlxuIl19
|