cdk-nextjs 0.5.15 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +821 -253
- package/.jsii.tabl.json +1 -1
- package/API.md +787 -18
- package/README.md +3 -3
- package/docs/breaking-changes.md +86 -0
- package/docs/caching-guide.md +6 -0
- package/docs/plans/adapter-runtime-release.md +362 -0
- package/docs/plans/phase-0-image-function-opt-in.md +295 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +13 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/image-optimization/handler-utils.d.ts +34 -0
- package/lib/image-optimization/handler-utils.js +83 -0
- package/lib/image-optimization/handler-utils.test.d.ts +1 -0
- package/lib/image-optimization/handler-utils.test.js +178 -0
- package/lib/image-optimization/handler.mjs +56126 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -2
- package/lib/nextjs-api.d.ts +44 -0
- package/lib/nextjs-api.js +64 -20
- package/lib/nextjs-api.test.d.ts +1 -0
- package/lib/nextjs-api.test.js +144 -0
- package/lib/nextjs-build/nextjs-build.d.ts +60 -0
- package/lib/nextjs-build/nextjs-build.js +184 -27
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-compute/nextjs-image-function.d.ts +53 -0
- package/lib/nextjs-compute/nextjs-image-function.js +59 -0
- package/lib/nextjs-distribution.d.ts +33 -0
- package/lib/nextjs-distribution.js +39 -11
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.d.ts +18 -0
- package/lib/nextjs-static-assets.js +33 -6
- package/lib/nextjs-static-assets.test.d.ts +1 -0
- package/lib/nextjs-static-assets.test.js +58 -0
- package/lib/root-constructs/nextjs-base-construct.d.ts +62 -2
- package/lib/root-constructs/nextjs-base-construct.js +81 -3
- package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
- package/lib/root-constructs/nextjs-global-containers.js +11 -5
- package/lib/root-constructs/nextjs-global-functions.d.ts +16 -5
- package/lib/root-constructs/nextjs-global-functions.js +23 -21
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.d.ts +11 -5
- package/lib/root-constructs/nextjs-regional-functions.js +17 -21
- package/lib/utils/base-path.d.ts +40 -0
- package/lib/utils/base-path.js +123 -0
- package/lib/utils/base-path.test.d.ts +1 -0
- package/lib/utils/base-path.test.js +163 -0
- package/lib/utils/experimental-flags.d.ts +24 -0
- package/lib/utils/experimental-flags.js +30 -0
- package/lib/utils/get-architecture.d.ts +10 -0
- package/lib/utils/get-architecture.js +17 -2
- package/package.json +3 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NextjsImageFunction = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
7
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const get_architecture_1 = require("../utils/get-architecture");
|
|
11
|
+
/**
|
|
12
|
+
* Dedicated Lambda function for Next.js image optimization
|
|
13
|
+
* (`src/image-optimization/handler.mts`). Kept separate from the server
|
|
14
|
+
* function so image requests get a lightweight, natively-streaming zip
|
|
15
|
+
* Lambda instead of paying the Docker/Lambda Web Adapter cold-start cost.
|
|
16
|
+
*/
|
|
17
|
+
class NextjsImageFunction extends constructs_1.Construct {
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsImageFunction", version: "0.6.0" };
|
|
19
|
+
function;
|
|
20
|
+
functionUrl;
|
|
21
|
+
props;
|
|
22
|
+
constructor(scope, id, props) {
|
|
23
|
+
super(scope, id);
|
|
24
|
+
this.props = props;
|
|
25
|
+
this.function = this.createFunction();
|
|
26
|
+
if (props.nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS) {
|
|
27
|
+
this.function.grantInvoke(new aws_iam_1.ServicePrincipal("cloudfront.amazonaws.com"));
|
|
28
|
+
this.functionUrl = this.function.addFunctionUrl({
|
|
29
|
+
authType: aws_lambda_1.FunctionUrlAuthType.AWS_IAM,
|
|
30
|
+
invokeMode: aws_lambda_1.InvokeMode.RESPONSE_STREAM,
|
|
31
|
+
...this.props.overrides?.functionUrlProps,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
createFunction() {
|
|
36
|
+
const fn = new aws_lambda_1.Function(this, "Fn", {
|
|
37
|
+
code: aws_lambda_1.Code.fromAsset(this.props.imageOptimizationAssetPath),
|
|
38
|
+
handler: "handler.handler",
|
|
39
|
+
memorySize: 2048,
|
|
40
|
+
runtime: new aws_lambda_1.Runtime("nodejs24.x", aws_lambda_1.RuntimeFamily.NODEJS),
|
|
41
|
+
timeout: aws_cdk_lib_1.Duration.seconds(30),
|
|
42
|
+
vpc: this.props.vpc,
|
|
43
|
+
...this.props.overrides?.functionProps,
|
|
44
|
+
// Must not be overridable: NextjsBuild bundles glibc `sharp` binaries
|
|
45
|
+
// matching the synth machine's architecture, so the deployed Lambda's
|
|
46
|
+
// architecture must always match what was bundled.
|
|
47
|
+
architecture: (0, get_architecture_1.getLambdaArchitecture)(),
|
|
48
|
+
environment: {
|
|
49
|
+
CDK_NEXTJS_STATIC_ASSETS_BUCKET_NAME: this.props.staticAssetsBucket.bucketName,
|
|
50
|
+
CDK_NEXTJS_STATIC_ASSETS_KEY_PREFIX: this.props.staticAssetsKeyPrefix ?? "",
|
|
51
|
+
...this.props.overrides?.functionProps?.environment,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
this.props.staticAssetsBucket.grantRead(fn);
|
|
55
|
+
return fn;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.NextjsImageFunction = NextjsImageFunction;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWltYWdlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25leHRqcy1jb21wdXRlL25leHRqcy1pbWFnZS1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQXVDO0FBRXZDLGlEQUF1RDtBQUN2RCx1REFRZ0M7QUFFaEMsMkNBQXVDO0FBQ3ZDLDRDQUEwQztBQUcxQyxnRUFBa0U7QUFxQ2xFOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUzs7SUFDaEQsUUFBUSxDQUFpQjtJQUN6QixXQUFXLENBQWU7SUFFbEIsS0FBSyxDQUEyQjtJQUV4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSwwQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsUUFBUSxFQUFFLGdDQUFtQixDQUFDLE9BQU87Z0JBQ3JDLFVBQVUsRUFBRSx1QkFBVSxDQUFDLGVBQWU7Z0JBQ3RDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztZQUMzRCxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLG9CQUFPLENBQUMsWUFBWSxFQUFFLDBCQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNuQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWE7WUFDdEMsc0VBQXNFO1lBQ3RFLHNFQUFzRTtZQUN0RSxtREFBbUQ7WUFDbkQsWUFBWSxFQUFFLElBQUEsd0NBQXFCLEdBQUU7WUFDckMsV0FBVyxFQUFFO2dCQUNYLG9DQUFvQyxFQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVU7Z0JBQzFDLG1DQUFtQyxFQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUU7Z0JBQ3hDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVc7YUFDcEQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBaERILGtEQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIEZ1bmN0aW9uVXJsLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBJbnZva2VNb2RlLFxuICBSdW50aW1lLFxuICBSdW50aW1lRmFtaWx5LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxGdW5jdGlvblVybFByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRnVuY3Rpb25VcmxQcm9wc1wiO1xuaW1wb3J0IHsgZ2V0TGFtYmRhQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL3V0aWxzL2dldC1hcmNoaXRlY3R1cmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgcmVhZG9ubHkgZnVuY3Rpb25VcmxQcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25VcmxQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNzZXQgcHJlcGFyZWQgYnkgYE5leHRqc0J1aWxkYDogYnVuZGxlZCBoYW5kbGVyLFxuICAgKiBnbGliYyBgc2hhcnBgIGJpbmFyaWVzLCBhbmQgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYC5cbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQnVpbGQuaW1hZ2VPcHRpbWl6YXRpb25Bc3NldFBhdGh9XG4gICAqL1xuICByZWFkb25seSBpbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgYnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cywgcmVhZCBieSB0aGUgaGFuZGxlciB0byBzZXJ2ZVxuICAgKiBub24tYWJzb2x1dGUgaW1hZ2UgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHMgd2VyZSB1cGxvYWRlZCB1bmRlciwgaS5lLlxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGAsIHdoaWNoIG5hbWVzcGFjZXMgYSBzaGFyZWQgYnVja2V0LlxuICAgKlxuICAgKiBUaHJlYWRlZCB0aHJvdWdoIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gcmVhZCBmcm9tIHRoZSBhcHAncyBidW5kbGVkIGNvbmZpZyxcbiAgICogYmVjYXVzZSBpdCdzIGRpc3RpbmN0IGZyb20gdGhlIGFwcCdzIG93biBgYmFzZVBhdGhgICh3aGljaCBuZXh0LWltYWdlLWxvYWRlclxuICAgKiBiYWtlcyBpbnRvIGhyZWZzKSDigJQgdGhlIHR3byBkaXZlcmdlIHdoZW4gdGhlIGFwcCdzIGBiYXNlUGF0aGAgY29tZXMgZnJvbVxuICAgKiBlbHNld2hlcmUsIGUuZy4gYW4gQVBJIEdhdGV3YXkgc3RhZ2UgdW5kZXIgYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0tleVByZWZpeD86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlZGljYXRlZCBMYW1iZGEgZnVuY3Rpb24gZm9yIE5leHQuanMgaW1hZ2Ugb3B0aW1pemF0aW9uXG4gKiAoYHNyYy9pbWFnZS1vcHRpbWl6YXRpb24vaGFuZGxlci5tdHNgKS4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBzZXJ2ZXJcbiAqIGZ1bmN0aW9uIHNvIGltYWdlIHJlcXVlc3RzIGdldCBhIGxpZ2h0d2VpZ2h0LCBuYXRpdmVseS1zdHJlYW1pbmcgemlwXG4gKiBMYW1iZGEgaW5zdGVhZCBvZiBwYXlpbmcgdGhlIERvY2tlci9MYW1iZGEgV2ViIEFkYXB0ZXIgY29sZC1zdGFydCBjb3N0LlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzSW1hZ2VGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGZ1bmN0aW9uOiBMYW1iZGFGdW5jdGlvbjtcbiAgZnVuY3Rpb25Vcmw/OiBGdW5jdGlvblVybDtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNJbWFnZUZ1bmN0aW9uUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuZnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG5cbiAgICBpZiAocHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzLmZ1bmN0aW9uLmdyYW50SW52b2tlKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImNsb3VkZnJvbnQuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZ1bmN0aW9uVXJsID0gdGhpcy5mdW5jdGlvbi5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGludm9rZU1vZGU6IEludm9rZU1vZGUuUkVTUE9OU0VfU1RSRUFNLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25VcmxQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIFwiRm5cIiwge1xuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQodGhpcy5wcm9wcy5pbWFnZU9wdGltaXphdGlvbkFzc2V0UGF0aCksXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIHJ1bnRpbWU6IG5ldyBSdW50aW1lKFwibm9kZWpzMjQueFwiLCBSdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIHZwYzogdGhpcy5wcm9wcy52cGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICAgIC8vIE11c3Qgbm90IGJlIG92ZXJyaWRhYmxlOiBOZXh0anNCdWlsZCBidW5kbGVzIGdsaWJjIGBzaGFycGAgYmluYXJpZXNcbiAgICAgIC8vIG1hdGNoaW5nIHRoZSBzeW50aCBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlLCBzbyB0aGUgZGVwbG95ZWQgTGFtYmRhJ3NcbiAgICAgIC8vIGFyY2hpdGVjdHVyZSBtdXN0IGFsd2F5cyBtYXRjaCB3aGF0IHdhcyBidW5kbGVkLlxuICAgICAgYXJjaGl0ZWN0dXJlOiBnZXRMYW1iZGFBcmNoaXRlY3R1cmUoKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENES19ORVhUSlNfU1RBVElDX0FTU0VUU19CVUNLRVRfTkFNRTpcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWDpcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0tleVByZWZpeCA/PyBcIlwiLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGZuKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxufVxuIl19
|
|
@@ -19,6 +19,7 @@ export interface NextjsDistributionOverrides {
|
|
|
19
19
|
readonly dynamicResponseHeadersPolicyProps?: ResponseHeadersPolicyProps;
|
|
20
20
|
readonly dynamicFunctionUrlOriginWithOACProps?: FunctionUrlOriginWithOACProps;
|
|
21
21
|
readonly dynamicVpcOriginWithEndpointProps?: VpcOriginWithEndpointProps;
|
|
22
|
+
readonly imageFunctionUrlOriginWithOACProps?: FunctionUrlOriginWithOACProps;
|
|
22
23
|
readonly staticBehaviorOptions?: AddBehaviorOptions;
|
|
23
24
|
readonly staticResponseHeadersPolicyProps?: ResponseHeadersPolicyProps;
|
|
24
25
|
readonly s3BucketOriginProps?: OptionalS3OriginBucketWithOACProps;
|
|
@@ -29,6 +30,10 @@ export interface NextjsDistributionProps {
|
|
|
29
30
|
* Must be provided if you want to serve static files.
|
|
30
31
|
*/
|
|
31
32
|
readonly assetsBucket: IBucket;
|
|
33
|
+
/**
|
|
34
|
+
* URI path prefix the app is served at. Surrounding slashes are normalized
|
|
35
|
+
* away, so "/base", "base" and "/base/" all produce the same cache behaviors.
|
|
36
|
+
*/
|
|
32
37
|
readonly basePath?: string;
|
|
33
38
|
/**
|
|
34
39
|
* Optional but only applicable for `NextjsType.GLOBAL_CONTAINERS`
|
|
@@ -39,6 +44,14 @@ export interface NextjsDistributionProps {
|
|
|
39
44
|
* Required if `NextjsType.GLOBAL_FUNCTIONS`
|
|
40
45
|
*/
|
|
41
46
|
readonly functionUrl?: IFunctionUrl;
|
|
47
|
+
/**
|
|
48
|
+
* Function URL of the dedicated image optimization Lambda. Only applicable
|
|
49
|
+
* to `NextjsType.GLOBAL_FUNCTIONS`, and only when the dedicated image
|
|
50
|
+
* function is enabled. When omitted, the `_next/image*` behavior points at
|
|
51
|
+
* the dynamic origin, which serves image optimization from the Next.js
|
|
52
|
+
* server itself.
|
|
53
|
+
*/
|
|
54
|
+
readonly imageFunctionUrl?: IFunctionUrl;
|
|
42
55
|
/**
|
|
43
56
|
* Required if `NextjsType.GLOBAL_CONTAINERS` or `NextjsType.REGIONAL_CONTAINERS`
|
|
44
57
|
*/
|
|
@@ -57,6 +70,13 @@ export interface NextjsDistributionProps {
|
|
|
57
70
|
export declare class NextjsDistribution extends Construct {
|
|
58
71
|
distribution: Distribution;
|
|
59
72
|
private props;
|
|
73
|
+
/**
|
|
74
|
+
* `props.basePath` normalized to a bare path segment. This construct is the
|
|
75
|
+
* one place that needs it with a leading slash — CloudFront path patterns are
|
|
76
|
+
* written against the request path — so it prepends its own rather than
|
|
77
|
+
* relying on the caller having passed one.
|
|
78
|
+
*/
|
|
79
|
+
private basePath;
|
|
60
80
|
/**
|
|
61
81
|
* Common security headers applied by default to all origins
|
|
62
82
|
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html#managed-response-headers-policies-security
|
|
@@ -64,6 +84,7 @@ export declare class NextjsDistribution extends Construct {
|
|
|
64
84
|
private commonSecurityHeadersBehavior;
|
|
65
85
|
private staticOrigin;
|
|
66
86
|
private dynamicOrigin;
|
|
87
|
+
private imageOrigin;
|
|
67
88
|
private dynamicOriginResponsePolicy;
|
|
68
89
|
private dynamicCloudFrontFunctionAssociations;
|
|
69
90
|
private isFunctionCompute;
|
|
@@ -81,6 +102,18 @@ export declare class NextjsDistribution extends Construct {
|
|
|
81
102
|
private getComment;
|
|
82
103
|
private createStaticOrigin;
|
|
83
104
|
private createDynamicOrigin;
|
|
105
|
+
/**
|
|
106
|
+
* A dedicated image optimization Lambda is only wired up when
|
|
107
|
+
* {@link NextjsDistributionProps.imageFunctionUrl} is supplied, which today
|
|
108
|
+
* only `NextjsType.GLOBAL_FUNCTIONS` does. Otherwise `_next/image*` keeps
|
|
109
|
+
* going to the dynamic origin, where the Next.js server optimizes images
|
|
110
|
+
* itself.
|
|
111
|
+
*
|
|
112
|
+
* The `_next/image*` behavior is kept either way: its cache policy
|
|
113
|
+
* (`queryStringBehavior: all()`, `accept` in the cache key) is the right one
|
|
114
|
+
* for image requests regardless of which origin answers them.
|
|
115
|
+
*/
|
|
116
|
+
private createImageOrigin;
|
|
84
117
|
/**
|
|
85
118
|
* Lambda Function URLs "expect the `Host` header to contain the origin domain
|
|
86
119
|
* name, not the domain name of the CloudFront distribution."
|
|
@@ -7,10 +7,18 @@ const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
|
7
7
|
const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
8
8
|
const constructs_1 = require("constructs");
|
|
9
9
|
const constants_1 = require("./constants");
|
|
10
|
+
const base_path_1 = require("./utils/base-path");
|
|
10
11
|
class NextjsDistribution extends constructs_1.Construct {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.6.0" };
|
|
12
13
|
distribution;
|
|
13
14
|
props;
|
|
15
|
+
/**
|
|
16
|
+
* `props.basePath` normalized to a bare path segment. This construct is the
|
|
17
|
+
* one place that needs it with a leading slash — CloudFront path patterns are
|
|
18
|
+
* written against the request path — so it prepends its own rather than
|
|
19
|
+
* relying on the caller having passed one.
|
|
20
|
+
*/
|
|
21
|
+
basePath;
|
|
14
22
|
/**
|
|
15
23
|
* Common security headers applied by default to all origins
|
|
16
24
|
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html#managed-response-headers-policies-security
|
|
@@ -35,6 +43,7 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
35
43
|
};
|
|
36
44
|
staticOrigin;
|
|
37
45
|
dynamicOrigin;
|
|
46
|
+
imageOrigin;
|
|
38
47
|
dynamicOriginResponsePolicy;
|
|
39
48
|
dynamicCloudFrontFunctionAssociations;
|
|
40
49
|
isFunctionCompute;
|
|
@@ -44,9 +53,11 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
44
53
|
constructor(scope, id, props) {
|
|
45
54
|
super(scope, id);
|
|
46
55
|
this.props = props;
|
|
56
|
+
this.basePath = (0, base_path_1.normalizeBasePath)(props.basePath);
|
|
47
57
|
this.staticOrigin = this.createStaticOrigin();
|
|
48
58
|
this.isFunctionCompute = props.nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS;
|
|
49
59
|
this.dynamicOrigin = this.createDynamicOrigin();
|
|
60
|
+
this.imageOrigin = this.createImageOrigin();
|
|
50
61
|
this.dynamicOriginResponsePolicy = this.createDynamicOriginRequestPolicy();
|
|
51
62
|
this.dynamicCloudFrontFunctionAssociations =
|
|
52
63
|
this.createDynamicCloudFrontFunctionAssociations();
|
|
@@ -91,6 +102,26 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
91
102
|
});
|
|
92
103
|
}
|
|
93
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* A dedicated image optimization Lambda is only wired up when
|
|
107
|
+
* {@link NextjsDistributionProps.imageFunctionUrl} is supplied, which today
|
|
108
|
+
* only `NextjsType.GLOBAL_FUNCTIONS` does. Otherwise `_next/image*` keeps
|
|
109
|
+
* going to the dynamic origin, where the Next.js server optimizes images
|
|
110
|
+
* itself.
|
|
111
|
+
*
|
|
112
|
+
* The `_next/image*` behavior is kept either way: its cache policy
|
|
113
|
+
* (`queryStringBehavior: all()`, `accept` in the cache key) is the right one
|
|
114
|
+
* for image requests regardless of which origin answers them.
|
|
115
|
+
*/
|
|
116
|
+
createImageOrigin() {
|
|
117
|
+
if (!this.isFunctionCompute || !this.props.imageFunctionUrl) {
|
|
118
|
+
return this.dynamicOrigin;
|
|
119
|
+
}
|
|
120
|
+
return aws_cloudfront_origins_1.FunctionUrlOrigin.withOriginAccessControl(this.props.imageFunctionUrl, {
|
|
121
|
+
...this.props.overrides?.dynamicFunctionUrlOriginWithOACProps,
|
|
122
|
+
...this.props.overrides?.imageFunctionUrlOriginWithOACProps,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
94
125
|
/**
|
|
95
126
|
* Lambda Function URLs "expect the `Host` header to contain the origin domain
|
|
96
127
|
* name, not the domain name of the CloudFront distribution."
|
|
@@ -215,7 +246,7 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
215
246
|
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
|
|
216
247
|
cachedMethods: aws_cloudfront_1.CachedMethods.CACHE_GET_HEAD_OPTIONS,
|
|
217
248
|
functionAssociations: this.dynamicCloudFrontFunctionAssociations,
|
|
218
|
-
origin: this.
|
|
249
|
+
origin: this.imageOrigin,
|
|
219
250
|
originRequestPolicy: this.dynamicOriginResponsePolicy,
|
|
220
251
|
cachePolicy,
|
|
221
252
|
responseHeadersPolicy,
|
|
@@ -248,9 +279,9 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
248
279
|
// Image Behavior
|
|
249
280
|
this.distribution.addBehavior(this.getPathPattern("_next/image*"), this.imageBehaviorOptions.origin, this.imageBehaviorOptions);
|
|
250
281
|
// Root Path Behaviors
|
|
251
|
-
if (this.
|
|
282
|
+
if (this.basePath) {
|
|
252
283
|
// because we already have a basePath we don't use / instead we use /base-path
|
|
253
|
-
this.distribution.addBehavior(this.
|
|
284
|
+
this.distribution.addBehavior(`/${this.basePath}`, this.dynamicBehaviorOptions.origin, this.dynamicBehaviorOptions);
|
|
254
285
|
// when basePath is set, we emulate the "default behavior" (*) for the site as `/base-path/*`
|
|
255
286
|
this.distribution.addBehavior(this.getPathPattern("*"), this.dynamicBehaviorOptions.origin, this.dynamicBehaviorOptions);
|
|
256
287
|
}
|
|
@@ -279,13 +310,10 @@ class NextjsDistribution extends constructs_1.Construct {
|
|
|
279
310
|
* Optionally prepends base path to given path pattern.
|
|
280
311
|
*/
|
|
281
312
|
getPathPattern(pathPattern) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
else {
|
|
286
|
-
return pathPattern;
|
|
287
|
-
}
|
|
313
|
+
return this.basePath
|
|
314
|
+
? `/${(0, base_path_1.joinPath)(this.basePath, pathPattern)}`
|
|
315
|
+
: pathPattern;
|
|
288
316
|
}
|
|
289
317
|
}
|
|
290
318
|
exports.NextjsDistribution = NextjsDistribution;
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWRpc3RyaWJ1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBOEM7QUFFOUMsK0RBMkJvQztBQUNwQywrRUFNNEM7QUFJNUMsMkNBQXVDO0FBQ3ZDLDJDQUF5QztBQW9EekMsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUzs7SUFDL0MsWUFBWSxDQUFlO0lBRW5CLEtBQUssQ0FBMEI7SUFDdkM7OztPQUdHO0lBQ0ssNkJBQTZCLEdBQW9DO1FBQ3ZFLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtRQUN2QyxZQUFZLEVBQUU7WUFDWixXQUFXLEVBQUUsbUNBQWtCLENBQUMsVUFBVTtZQUMxQyxRQUFRLEVBQUUsS0FBSztTQUNoQjtRQUNELGNBQWMsRUFBRTtZQUNkLFFBQVEsRUFBRSxLQUFLO1lBQ2YsY0FBYyxFQUFFLHNDQUFxQixDQUFDLCtCQUErQjtTQUN0RTtRQUVELHVCQUF1QixFQUFFO1lBQ3ZCLG1CQUFtQixFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN2QyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLElBQUk7U0FDZDtRQUNELGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0tBQ3RFLENBQUM7SUFDTSxZQUFZLENBQVU7SUFDdEIsYUFBYSxDQUFVO0lBQ3ZCLDJCQUEyQixDQUF1QjtJQUNsRCxxQ0FBcUMsQ0FBd0I7SUFDN0QsaUJBQWlCLENBQVU7SUFDM0IscUJBQXFCLENBQWtCO0lBQ3ZDLHNCQUFzQixDQUFrQjtJQUN4QyxvQkFBb0IsQ0FBa0I7SUFFOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUMzRSxJQUFJLENBQUMscUNBQXFDO1lBQ3hDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxVQUFVLENBQUMsV0FBbUIsRUFBRSxTQUFpQjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxHQUFHLFdBQVcsUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUM5RCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE9BQU8sdUNBQWMsQ0FBQyx1QkFBdUIsQ0FDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUNPLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE9BQU8sMENBQWlCLENBQUMsdUJBQXVCLENBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxvQ0FBb0MsQ0FDM0QsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELE9BQU8sa0NBQVMsQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3pELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7b0JBQ3BDLENBQUMsQ0FBQyxxQ0FBb0IsQ0FBQyxVQUFVO29CQUNqQyxDQUFDLENBQUMscUNBQW9CLENBQUMsU0FBUztnQkFDbEMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxpQ0FBaUM7YUFDM0QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssZ0NBQWdDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQjtZQUMzQixDQUFDLENBQUMsb0NBQW1CLENBQUMsNkJBQTZCO1lBQ25ELENBQUMsQ0FBQyxvQ0FBbUIsQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSywyQ0FBMkM7UUFDakQsTUFBTSxZQUFZLEdBQTBCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUkseUJBQWtCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtnQkFDaEUsSUFBSSxFQUFFLDZCQUFZLENBQUMsVUFBVSxDQUFDOzs7Ozs7V0FNM0IsQ0FBQzthQUNMLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLFNBQVMsRUFBRSxrQ0FBaUIsQ0FBQyxjQUFjO2dCQUMzQyxRQUFRLEVBQUUsWUFBWTthQUN2QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNPLDJCQUEyQjtRQUNqQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDO1FBQzFFLE1BQU0scUJBQXFCLEdBQ3pCLHFCQUFxQixFQUFFLHFCQUFxQjtZQUM1QyxJQUFJLHNDQUFxQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRTtnQkFDN0QsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtnQkFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQ3RCLHVDQUF1QyxFQUN2QyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQ3pCO2dCQUNELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDO2FBQzFELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxzQkFBc0I7WUFDckQsYUFBYSxFQUFFLDhCQUFhLENBQUMsc0JBQXNCO1lBQ25ELFdBQVcsRUFBRSw0QkFBVyxDQUFDLGlCQUFpQjtZQUMxQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDekIscUJBQXFCO1lBQ3JCLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtZQUM1RCxHQUFHLHFCQUFxQjtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUNPLDRCQUE0QjtRQUNsQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDO1FBQzVFLDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FDZixzQkFBc0IsRUFBRSxXQUFXO1lBQ25DLElBQUksNEJBQVcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQzFDLG1CQUFtQixFQUFFLHlDQUF3QixDQUFDLEdBQUcsRUFBRTtnQkFDbkQsY0FBYyxFQUFFLG9DQUFtQixDQUFDLFNBQVM7Z0JBQzNDLHFFQUFxRTtnQkFDckUsMkVBQTJFO2dCQUMzRSxtR0FBbUc7Z0JBQ25HLHVIQUF1SDtnQkFDdkgsUUFBUSxFQUFFLDRDQUE0QztnQkFDdEQsS0FBSyxFQUFFLG1DQUFtQztnQkFDMUMsVUFBVSxFQUFFLGtCQUFrQjtnQkFDOUIsd0JBQXdCLEVBQUUsOEJBQThCO2dCQUN4RCxzQkFBc0IsRUFBRSxvQkFBb0I7Z0JBQzVDLDhCQUE4QixFQUFFLDRCQUE0QjtnQkFDNUQsZ0JBQWdCLEVBQUUsOEJBQThCO2dCQUNoRCx3QkFBd0IsRUFBRSw2QkFBNkI7Z0JBQ3ZELG1CQUFtQixFQUFFLCtCQUErQjtnQkFDcEQsb0JBQW9CLENBS3JCO2dCQUNELGNBQWMsRUFBRSxvQ0FBbUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pDLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUN0Qiw2QkFBNkIsRUFDN0IsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUN6QjtnQkFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QjthQUNqRCxDQUFDLENBQUM7UUFDTCxNQUFNLHFCQUFxQixHQUN6QixzQkFBc0IsRUFBRSxxQkFBcUI7WUFDN0MsSUFBSSxzQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7Z0JBQzlELHVCQUF1QixFQUFFLElBQUksQ0FBQyw2QkFBNkI7Z0JBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUN0Qix3Q0FBd0MsRUFDeEMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUN6QjtnQkFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGlDQUFpQzthQUMzRCxDQUFDLENBQUM7UUFDTCxPQUFPO1lBQ0wsY0FBYyxFQUFFLCtCQUFjLENBQUMsU0FBUztZQUN4QyxXQUFXO1lBQ1gsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHFDQUFxQztZQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDMUIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLDJCQUEyQjtZQUNyRCxxQkFBcUI7WUFDckIsb0JBQW9CLEVBQUUscUNBQW9CLENBQUMsaUJBQWlCO1lBQzVELEdBQUcsc0JBQXNCO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBQ08sMEJBQTBCO1FBQ2hDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUM7UUFDeEUsMkNBQTJDO1FBQzNDLE1BQU0sV0FBVyxHQUNmLG9CQUFvQixFQUFFLFdBQVc7WUFDakMsSUFBSSw0QkFBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtnQkFDeEMsa0VBQWtFO2dCQUNsRSxxRUFBcUU7Z0JBQ3JFLHlFQUF5RTtnQkFDekUsNkJBQTZCO2dCQUM3QixtQkFBbUIsRUFBRSx5Q0FBd0IsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25ELGNBQWMsRUFBRSxvQ0FBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUN2RCxjQUFjLEVBQUUsb0NBQW1CLENBQUMsSUFBSSxFQUFFO2dCQUMxQywwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyx3QkFBd0IsRUFBRSxJQUFJO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FDdEIsMkJBQTJCLEVBQzNCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FDekI7Z0JBQ0QsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxxQkFBcUI7YUFDL0MsQ0FBQyxDQUFDO1FBQ0wsc0RBQXNEO1FBQ3RELE1BQU0scUJBQXFCLEdBQ3pCLG9CQUFvQixFQUFFLHFCQUFxQjtZQUMzQyxJQUFJLHNDQUFxQixDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtnQkFDNUQsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtnQkFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQ3RCLHNDQUFzQyxFQUN0QyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQ3pCO2dCQUNELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsK0JBQStCO2FBQ3pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxzQkFBc0I7WUFDckQsYUFBYSxFQUFFLDhCQUFhLENBQUMsc0JBQXNCO1lBQ25ELG9CQUFvQixFQUFFLElBQUksQ0FBQyxxQ0FBcUM7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzFCLG1CQUFtQixFQUFFLElBQUksQ0FBQywyQkFBMkI7WUFDckQsV0FBVztZQUNYLHFCQUFxQjtZQUNyQixvQkFBb0IsRUFBRSxxQ0FBb0IsQ0FBQyxpQkFBaUI7WUFDNUQsR0FBRyxvQkFBb0I7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFDRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsSUFBSSxZQUEwQixDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZLEdBQUcsSUFBSSw2QkFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ3BELHNCQUFzQixFQUFFLHVDQUFzQixDQUFDLGFBQWE7Z0JBQzVELGVBQWUsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUM1Qyw4RUFBOEU7Z0JBQzlFLGdEQUFnRDtnQkFDaEQsV0FBVyxFQUFFLDRCQUFXLENBQUMsV0FBVztnQkFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQ3RCLHFCQUFxQixFQUNyQixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQ3pCO2dCQUNELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsaUJBQWlCO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ08sbUJBQW1CO1FBQ3pCLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1FBQ0Ysc0JBQXNCO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4Qiw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUNsQyxJQUFJLENBQUMsc0JBQXNCLENBQzVCLENBQUM7WUFDRiw2RkFBNkY7WUFDN0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQ3hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FDNUIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04scUVBQXFFO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBQ08sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUNwQyxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7UUFDRiw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksS0FBSyxDQUNiLDJUQUEyVCxDQUM1VCxDQUFDO1FBQ0osQ0FBQztRQUNELEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXO2dCQUN4QyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJO2dCQUN4QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLFdBQVcsd0tBQXdLLENBQ3BQLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUMzQixnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxXQUFtQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7O0FBaFZILGdEQWlWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSUNlcnRpZmljYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFkZEJlaGF2aW9yT3B0aW9ucyxcbiAgQWxsb3dlZE1ldGhvZHMsXG4gIEJlaGF2aW9yT3B0aW9ucyxcbiAgQ2FjaGVDb29raWVCZWhhdmlvcixcbiAgQ2FjaGVIZWFkZXJCZWhhdmlvcixcbiAgQ2FjaGVQb2xpY3ksXG4gIENhY2hlUG9saWN5UHJvcHMsXG4gIENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvcixcbiAgQ2FjaGVkTWV0aG9kcyxcbiAgRnVuY3Rpb24gYXMgQ2xvdWRGcm9udEZ1bmN0aW9uLFxuICBEaXN0cmlidXRpb24sXG4gIEZ1bmN0aW9uQXNzb2NpYXRpb24sXG4gIEZ1bmN0aW9uQ29kZSxcbiAgRnVuY3Rpb25FdmVudFR5cGUsXG4gIEhlYWRlcnNGcmFtZU9wdGlvbixcbiAgSGVhZGVyc1JlZmVycmVyUG9saWN5LFxuICBIdHRwVmVyc2lvbixcbiAgSU9yaWdpbixcbiAgSU9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIE9yaWdpblByb3RvY29sUG9saWN5LFxuICBPcmlnaW5SZXF1ZXN0UG9saWN5LFxuICBSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gIFJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLFxuICBSZXNwb25zZVNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLFxuICBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICBWaWV3ZXJQcm90b2NvbFBvbGljeSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQge1xuICBGdW5jdGlvblVybE9yaWdpbixcbiAgRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHMsXG4gIFMzQnVja2V0T3JpZ2luLFxuICBWcGNPcmlnaW4sXG4gIFZwY09yaWdpbldpdGhFbmRwb2ludFByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBJRnVuY3Rpb25VcmwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbERpc3RyaWJ1dGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxTM09yaWdpbkJ1Y2tldFdpdGhPQUNQcm9wcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsUzNPcmlnaW5CdWNrZXRXaXRoT0FDUHJvcHNcIjtcbmltcG9ydCB7IFB1YmxpY0RpckVudHJ5IH0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvblByb3BzPzogT3B0aW9uYWxEaXN0cmlidXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgaW1hZ2VCZWhhdmlvck9wdGlvbnM/OiBBZGRCZWhhdmlvck9wdGlvbnM7XG4gIHJlYWRvbmx5IGltYWdlQ2FjaGVQb2xpY3lQcm9wcz86IENhY2hlUG9saWN5UHJvcHM7XG4gIHJlYWRvbmx5IGltYWdlUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM/OiBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcztcbiAgcmVhZG9ubHkgZHluYW1pY0JlaGF2aW9yT3B0aW9ucz86IEFkZEJlaGF2aW9yT3B0aW9ucztcbiAgcmVhZG9ubHkgZHluYW1pY0NhY2hlUG9saWN5UHJvcHM/OiBDYWNoZVBvbGljeVByb3BzO1xuICByZWFkb25seSBkeW5hbWljUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM/OiBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcztcbiAgcmVhZG9ubHkgZHluYW1pY0Z1bmN0aW9uVXJsT3JpZ2luV2l0aE9BQ1Byb3BzPzogRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHM7XG4gIHJlYWRvbmx5IGR5bmFtaWNWcGNPcmlnaW5XaXRoRW5kcG9pbnRQcm9wcz86IFZwY09yaWdpbldpdGhFbmRwb2ludFByb3BzO1xuICByZWFkb25seSBzdGF0aWNCZWhhdmlvck9wdGlvbnM/OiBBZGRCZWhhdmlvck9wdGlvbnM7XG4gIHJlYWRvbmx5IHN0YXRpY1Jlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzPzogUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM7XG4gIHJlYWRvbmx5IHMzQnVja2V0T3JpZ2luUHJvcHM/OiBPcHRpb25hbFMzT3JpZ2luQnVja2V0V2l0aE9BQ1Byb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEJ1Y2tldCBjb250YWluaW5nIHN0YXRpYyBhc3NldHMuXG4gICAqIE11c3QgYmUgcHJvdmlkZWQgaWYgeW91IHdhbnQgdG8gc2VydmUgc3RhdGljIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRzQnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1dCBvbmx5IGFwcGxpY2FibGUgZm9yIGBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTYFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlNgXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvblVybD86IElGdW5jdGlvblVybDtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTYCBvciBgTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTYFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyPzogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgZm9yIGV2ZXJ5IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcztcbiAgLyoqXG4gICAqIEVudHJpZXMgKGZpbGVzL2RpcmVjdG9yaWVzKSB3aXRoaW4gTmV4dC5qcyBhcHAncyBwdWJsaWMgZGlyZWN0b3J5LiBVc2VkIHRvXG4gICAqIGFkZCBzdGF0aWMgYmVoYXZpb3JzIHRvIGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0RpckVudHJpZXM6IFB1YmxpY0RpckVudHJ5W107XG59XG5cbmV4cG9ydCBjbGFzcyBOZXh0anNEaXN0cmlidXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNEaXN0cmlidXRpb25Qcm9wcztcbiAgLyoqXG4gICAqIENvbW1vbiBzZWN1cml0eSBoZWFkZXJzIGFwcGxpZWQgYnkgZGVmYXVsdCB0byBhbGwgb3JpZ2luc1xuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLXJlc3BvbnNlLWhlYWRlcnMtcG9saWNpZXMuaHRtbCNtYW5hZ2VkLXJlc3BvbnNlLWhlYWRlcnMtcG9saWNpZXMtc2VjdXJpdHlcbiAgICovXG4gIHByaXZhdGUgY29tbW9uU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3I6IFJlc3BvbnNlU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3IgPSB7XG4gICAgY29udGVudFR5cGVPcHRpb25zOiB7IG92ZXJyaWRlOiBmYWxzZSB9LFxuICAgIGZyYW1lT3B0aW9uczoge1xuICAgICAgZnJhbWVPcHRpb246IEhlYWRlcnNGcmFtZU9wdGlvbi5TQU1FT1JJR0lOLFxuICAgICAgb3ZlcnJpZGU6IGZhbHNlLFxuICAgIH0sXG4gICAgcmVmZXJyZXJQb2xpY3k6IHtcbiAgICAgIG92ZXJyaWRlOiBmYWxzZSxcbiAgICAgIHJlZmVycmVyUG9saWN5OiBIZWFkZXJzUmVmZXJyZXJQb2xpY3kuU1RSSUNUX09SSUdJTl9XSEVOX0NST1NTX09SSUdJTixcbiAgICB9LFxuXG4gICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgIGFjY2Vzc0NvbnRyb2xNYXhBZ2U6IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgIGluY2x1ZGVTdWJkb21haW5zOiB0cnVlLFxuICAgICAgb3ZlcnJpZGU6IGZhbHNlLFxuICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICB9LFxuICAgIHhzc1Byb3RlY3Rpb246IHsgb3ZlcnJpZGU6IGZhbHNlLCBwcm90ZWN0aW9uOiB0cnVlLCBtb2RlQmxvY2s6IHRydWUgfSxcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWNPcmlnaW46IElPcmlnaW47XG4gIHByaXZhdGUgZHluYW1pY09yaWdpbjogSU9yaWdpbjtcbiAgcHJpdmF0ZSBkeW5hbWljT3JpZ2luUmVzcG9uc2VQb2xpY3k6IElPcmlnaW5SZXF1ZXN0UG9saWN5O1xuICBwcml2YXRlIGR5bmFtaWNDbG91ZEZyb250RnVuY3Rpb25Bc3NvY2lhdGlvbnM6IEZ1bmN0aW9uQXNzb2NpYXRpb25bXTtcbiAgcHJpdmF0ZSBpc0Z1bmN0aW9uQ29tcHV0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWNCZWhhdmlvck9wdGlvbnM6IEJlaGF2aW9yT3B0aW9ucztcbiAgcHJpdmF0ZSBkeW5hbWljQmVoYXZpb3JPcHRpb25zOiBCZWhhdmlvck9wdGlvbnM7XG4gIHByaXZhdGUgaW1hZ2VCZWhhdmlvck9wdGlvbnM6IEJlaGF2aW9yT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnN0YXRpY09yaWdpbiA9IHRoaXMuY3JlYXRlU3RhdGljT3JpZ2luKCk7XG4gICAgdGhpcy5pc0Z1bmN0aW9uQ29tcHV0ZSA9IHByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUztcbiAgICB0aGlzLmR5bmFtaWNPcmlnaW4gPSB0aGlzLmNyZWF0ZUR5bmFtaWNPcmlnaW4oKTtcbiAgICB0aGlzLmR5bmFtaWNPcmlnaW5SZXNwb25zZVBvbGljeSA9IHRoaXMuY3JlYXRlRHluYW1pY09yaWdpblJlcXVlc3RQb2xpY3koKTtcbiAgICB0aGlzLmR5bmFtaWNDbG91ZEZyb250RnVuY3Rpb25Bc3NvY2lhdGlvbnMgPVxuICAgICAgdGhpcy5jcmVhdGVEeW5hbWljQ2xvdWRGcm9udEZ1bmN0aW9uQXNzb2NpYXRpb25zKCk7XG4gICAgdGhpcy5zdGF0aWNCZWhhdmlvck9wdGlvbnMgPSB0aGlzLmNyZWF0ZVN0YXRpY0JlaGF2aW9yT3B0aW9ucygpO1xuICAgIHRoaXMuZHluYW1pY0JlaGF2aW9yT3B0aW9ucyA9IHRoaXMuY3JlYXRlRHluYW1pY0JlaGF2aW9yT3B0aW9ucygpO1xuICAgIHRoaXMuaW1hZ2VCZWhhdmlvck9wdGlvbnMgPSB0aGlzLmNyZWF0ZUltYWdlQmVoYXZpb3JPcHRpb25zKCk7XG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSB0aGlzLmdldERpc3RyaWJ1dGlvbigpO1xuICAgIHRoaXMuYWRkU3RhdGljQmVoYXZpb3JzKCk7XG4gICAgdGhpcy5hZGREeW5hbWljQmVoYXZpb3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkRnJvbnQgY29tbWVudCB0aGF0IGlzIHNhZmUgZm9yIHRoZSAxMjggY2hhcmFjdGVyIGxpbWl0LlxuICAgKiBJZiB0aGUgZnVsbCBjb21tZW50IHdpdGggc3RhY2sgbmFtZSBleGNlZWRzIDEyOCBjaGFyYWN0ZXJzLCByZXR1cm5zIHRoZSBiYXNlIGNvbW1lbnQgb25seS5cbiAgICogQHBhcmFtIGJhc2VDb21tZW50IFRoZSBiYXNlIGNvbW1lbnQgdGV4dFxuICAgKiBAcGFyYW0gc3RhY2tOYW1lIFRoZSBzdGFjayBuYW1lIHRvIGFwcGVuZFxuICAgKiBAcmV0dXJucyBBIGNvbW1lbnQgc3RyaW5nIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSA8IDEyOCBjaGFyYWN0ZXJzXG4gICAqL1xuICBwcml2YXRlIGdldENvbW1lbnQoYmFzZUNvbW1lbnQ6IHN0cmluZywgc3RhY2tOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZ1bGxDb21tZW50ID0gYCR7YmFzZUNvbW1lbnR9IGZvciAke3N0YWNrTmFtZX1gO1xuICAgIHJldHVybiBmdWxsQ29tbWVudC5sZW5ndGggPCAxMjggPyBmdWxsQ29tbWVudCA6IGJhc2VDb21tZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNPcmlnaW4oKTogSU9yaWdpbiB7XG4gICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NDb250cm9sKFxuICAgICAgdGhpcy5wcm9wcy5hc3NldHNCdWNrZXQsXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8uczNCdWNrZXRPcmlnaW5Qcm9wcyxcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY09yaWdpbigpOiBJT3JpZ2luIHtcbiAgICBpZiAodGhpcy5pc0Z1bmN0aW9uQ29tcHV0ZSkge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmZ1bmN0aW9uVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMuZnVuY3Rpb25VcmxcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gRnVuY3Rpb25VcmxPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2woXG4gICAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25VcmwsXG4gICAgICAgIHRoaXMucHJvcHMub3ZlcnJpZGVzPy5keW5hbWljRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSB0aGlzLnByb3BzLmxvYWRCYWxhbmNlcjtcbiAgICAgIGlmICghbG9hZEJhbGFuY2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMubG9hZEJhbGFuY2VyXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFZwY09yaWdpbi53aXRoQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIobG9hZEJhbGFuY2VyLCB7XG4gICAgICAgIHByb3RvY29sUG9saWN5OiB0aGlzLnByb3BzLmNlcnRpZmljYXRlXG4gICAgICAgICAgPyBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZXG4gICAgICAgICAgOiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQX09OTFksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5keW5hbWljVnBjT3JpZ2luV2l0aEVuZHBvaW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExhbWJkYSBGdW5jdGlvbiBVUkxzIFwiZXhwZWN0IHRoZSBgSG9zdGAgaGVhZGVyIHRvIGNvbnRhaW4gdGhlIG9yaWdpbiBkb21haW5cbiAgICogbmFtZSwgbm90IHRoZSBkb21haW4gbmFtZSBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXCJcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sI21hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWN5LWFsbC12aWV3ZXItZXhjZXB0LWhvc3QtaGVhZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUR5bmFtaWNPcmlnaW5SZXF1ZXN0UG9saWN5KCk6IElPcmlnaW5SZXF1ZXN0UG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5pc0Z1bmN0aW9uQ29tcHV0ZVxuICAgICAgPyBPcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVJfRVhDRVBUX0hPU1RfSEVBREVSXG4gICAgICA6IE9yaWdpblJlcXVlc3RQb2xpY3kuQUxMX1ZJRVdFUjtcbiAgfVxuICAvKipcbiAgICogRW5zdXJlcyBOZXh0LmpzIGByZXF1ZXN0LnVybGAgd2lsbCBiZSBjb3JyZWN0IGRvbWFpbiBpbnN0ZWFkIG9mIFVSTCBvZlxuICAgKiBjb21wdXRlIChMYW1iZGEgb3IgRmFyZ2F0ZSlcbiAgICogQHNlZSBodHRwczovL29wZW4tbmV4dC5qcy5vcmcvYWR2YW5jZWQvd29ya2Fyb3VuZCN3b3JrYXJvdW5kLXNldC14LWZvcndhcmRlZC1ob3N0LWhlYWRlci1hd3Mtc3BlY2lmaWNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY0Nsb3VkRnJvbnRGdW5jdGlvbkFzc29jaWF0aW9ucygpOiBGdW5jdGlvbkFzc29jaWF0aW9uW10ge1xuICAgIGNvbnN0IGFzc29jaWF0aW9uczogRnVuY3Rpb25Bc3NvY2lhdGlvbltdID0gW107XG4gICAgaWYgKHRoaXMuaXNGdW5jdGlvbkNvbXB1dGUpIHtcbiAgICAgIGNvbnN0IGNsb3VkRnJvbnRGbiA9IG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgXCJDbG91ZEZyb250Rm5cIiwge1xuICAgICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShgXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wieC1mb3J3YXJkZWQtaG9zdFwiXSA9IHJlcXVlc3QuaGVhZGVycy5ob3N0O1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgICBhc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIGZ1bmN0aW9uOiBjbG91ZEZyb250Rm4sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc29jaWF0aW9ucztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVN0YXRpY0JlaGF2aW9yT3B0aW9ucygpOiBCZWhhdmlvck9wdGlvbnMge1xuICAgIGNvbnN0IHN0YXRpY0JlaGF2aW9yT3B0aW9ucyA9IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5zdGF0aWNCZWhhdmlvck9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID1cbiAgICAgIHN0YXRpY0JlaGF2aW9yT3B0aW9ucz8ucmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/XG4gICAgICBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsIFwiU3RhdGljUmVzcG9uc2VIZWFkZXJzUG9saWN5XCIsIHtcbiAgICAgICAgc2VjdXJpdHlIZWFkZXJzQmVoYXZpb3I6IHRoaXMuY29tbW9uU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3IsXG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuZ2V0Q29tbWVudChcbiAgICAgICAgICBcIk5leHRKUyBTdGF0aWMgUmVzcG9uc2UgSGVhZGVycyBQb2xpY3lcIixcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWUsXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5zdGF0aWNSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgIG9yaWdpbjogdGhpcy5zdGF0aWNPcmlnaW4sXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAuLi5zdGF0aWNCZWhhdmlvck9wdGlvbnMsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUR5bmFtaWNCZWhhdmlvck9wdGlvbnMoKTogQmVoYXZpb3JPcHRpb25zIHtcbiAgICBjb25zdCBkeW5hbWljQmVoYXZpb3JPcHRpb25zID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNCZWhhdmlvck9wdGlvbnM7XG4gICAgLy8gY3JlYXRlIGRlZmF1bHQgY2FjaGUgcG9saWN5IGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGNhY2hlUG9saWN5ID1cbiAgICAgIGR5bmFtaWNCZWhhdmlvck9wdGlvbnM/LmNhY2hlUG9saWN5ID8/XG4gICAgICBuZXcgQ2FjaGVQb2xpY3kodGhpcywgXCJEeW5hbWljQ2FjaGVQb2xpY3lcIiwge1xuICAgICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgICAgIGhlYWRlckJlaGF2aW9yOiBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdChcbiAgICAgICAgICAvLyBOT1RFOiBDbG91ZEZyb250IEN1c3RvbSBDYWNoZSBQb2xpY2llcyBoYXZlIHNvZnQgbWF4IG9mIDEwIGhlYWRlcnNcbiAgICAgICAgICAvLyBjZGstbmV4dGpzIGluY2x1ZGVzIHRoZSBtb3N0IGVzc2VudGlhbCBoZWFkZXJzIGZvciBOZXh0LmpzIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAvLyBidXQgaXQncyByZWNvbW1lbmRlZCB0byByZXF1ZXN0IHF1b3RhIGluY3JlYXNlIHRvIGluY2x1ZGUgYWxsIGhlYWRlcnMgKGNvbW1lbnRlZCBvdXQgb25lcyBiZWxvdylcbiAgICAgICAgICAvLyBtb3JlIGhlcmU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sI2xpbWl0cy1wb2xpY2llc1xuICAgICAgICAgIFwiYWNjZXB0XCIsIC8vIGNvbnRlbnQgbmVnb3RpYXRpb24gKEhUTUwgdnMgUlNDIHBheWxvYWQpXG4gICAgICAgICAgXCJyc2NcIiwgLy8gUmVhY3QgU2VydmVyIENvbXBvbmVudHMgcmVxdWVzdHNcbiAgICAgICAgICBcIm5leHQtdXJsXCIsIC8vIE5leHQuanMgcm91dGluZ1xuICAgICAgICAgIFwibmV4dC1yb3V0ZXItc3RhdGUtdHJlZVwiLCAvLyBBcHAgUm91dGVyIG5hdmlnYXRpb24gc3RhdGVcbiAgICAgICAgICBcIm5leHQtcm91dGVyLXByZWZldGNoXCIsIC8vIHByZWZldGNoIGJlaGF2aW9yXG4gICAgICAgICAgXCJuZXh0LXJvdXRlci1zZWdtZW50LXByZWZldGNoXCIsIC8vIHNlZ21lbnQtbGV2ZWwgcHJlZmV0Y2hpbmdcbiAgICAgICAgICBcIngtbWF0Y2hlZC1wYXRoXCIsIC8vIGR5bmFtaWMgcm91dGVzIGFuZCByZXdyaXRlc1xuICAgICAgICAgIFwieC1wcmVyZW5kZXItcmV2YWxpZGF0ZVwiLCAvLyBvbi1kZW1hbmQgSVNSIHJldmFsaWRhdGlvblxuICAgICAgICAgIFwieC1uZXh0LWNhY2hlLXRhZ3NcIiwgLy8gdGFnLWJhc2VkIGNhY2hlIHJldmFsaWRhdGlvblxuICAgICAgICAgIFwieC1wcmVyZW5kZXItYnlwYXNzXCIsIC8vIGRyYWZ0IG1vZGVcbiAgICAgICAgICAvLyBcIngtbmV4dGpzLXN0YWxlLXRpbWVcIiwgLy8gc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBiZWhhdmlvclxuICAgICAgICAgIC8vIFwieC1uZXh0LWNhY2hlLXRhZy10b2tlblwiLCAvLyBhdXRoIHRva2VuIGZvciBjYWNoZSB0YWdzIChvbmx5IG5lZWRlZCB3aXRoIHJldmFsaWRhdGVUYWcgYXV0aClcbiAgICAgICAgICAvLyBcIngtbmV4dGpzLXBvc3Rwb25lZFwiLCAvLyBQYXJ0aWFsIFByZXJlbmRlcmluZyAoZXhwZXJpbWVudGFsIGZlYXR1cmUpXG4gICAgICAgICAgLy8gXCJ4LXByZXJlbmRlci1yZXZhbGlkYXRlLWlmLWdlbmVyYXRlZFwiLCAvLyBjb25kaXRpb25hbCByZXZhbGlkYXRpb24gKG5pY2hlIHVzZSBjYXNlKVxuICAgICAgICApLFxuICAgICAgICBjb29raWVCZWhhdmlvcjogQ2FjaGVDb29raWVCZWhhdmlvci5hbGwoKSxcbiAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nR3ppcDogdHJ1ZSxcbiAgICAgICAgY29tbWVudDogdGhpcy5nZXRDb21tZW50KFxuICAgICAgICAgIFwiTmV4dEpTIER5bmFtaWMgQ2FjaGUgUG9saWN5XCIsXG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZHluYW1pY0NhY2hlUG9saWN5UHJvcHMsXG4gICAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3kgPVxuICAgICAgZHluYW1pY0JlaGF2aW9yT3B0aW9ucz8ucmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/XG4gICAgICBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsIFwiRHluYW1pY1Jlc3BvbnNlSGVhZGVyc1BvbGljeVwiLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB0aGlzLmNvbW1vblNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgRHluYW1pYyBSZXNwb25zZSBIZWFkZXJzIFBvbGljeVwiLFxuICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgY2FjaGVQb2xpY3ksXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5keW5hbWljQ2xvdWRGcm9udEZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgb3JpZ2luOiB0aGlzLmR5bmFtaWNPcmlnaW4sXG4gICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB0aGlzLmR5bmFtaWNPcmlnaW5SZXNwb25zZVBvbGljeSxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIC4uLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUltYWdlQmVoYXZpb3JPcHRpb25zKCk6IEJlaGF2aW9yT3B0aW9ucyB7XG4gICAgY29uc3QgaW1hZ2VCZWhhdmlvck9wdGlvbnMgPSB0aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VCZWhhdmlvck9wdGlvbnM7XG4gICAgLy8gYWRkIGRlZmF1bHQgY2FjaGUgcG9saWN5IGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGNhY2hlUG9saWN5ID1cbiAgICAgIGltYWdlQmVoYXZpb3JPcHRpb25zPy5jYWNoZVBvbGljeSA/P1xuICAgICAgbmV3IENhY2hlUG9saWN5KHRoaXMsIFwiSW1hZ2VDYWNoZVBvbGljeVwiLCB7XG4gICAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IGJ5IGRlZmF1bHQgd2UgZG9uJ3QgaW5jbHVkZSBjb29raWVzIGluIGNhY2hlIGZvclxuICAgICAgICAvLyBpbWFnZXMgYi9jIGl0IHNpZ25pZmljYW50bHkgaW1wcm92ZXMgaW1hZ2UgcGVyZiBmb3IgbW9zdCBzaXRlcyBCVVRcbiAgICAgICAgLy8gaWYgeW91IGhhdmUgcHJpdmF0ZSBpbWFnZXMgbG9ja2VkIGJlaGluZCBhdXRoIGltcGxlbWVudGVkIHdpdGggY29va2llc1xuICAgICAgICAvLyB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgICAgIGhlYWRlckJlaGF2aW9yOiBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdChcImFjY2VwdFwiKSxcbiAgICAgICAgY29va2llQmVoYXZpb3I6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0Jyb3RsaTogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiB0cnVlLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgSW1hZ2UgQ2FjaGUgUG9saWN5XCIsXG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VDYWNoZVBvbGljeVByb3BzLFxuICAgICAgfSk7XG4gICAgLy8gYWRkIGRlZmF1bHQgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgaWYgbm90IHByb3ZpZGVkXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID1cbiAgICAgIGltYWdlQmVoYXZpb3JPcHRpb25zPy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgPz9cbiAgICAgIG5ldyBSZXNwb25zZUhlYWRlcnNQb2xpY3kodGhpcywgXCJJbWFnZVJlc3BvbnNlSGVhZGVyc1BvbGljeVwiLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB0aGlzLmNvbW1vblNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgSW1hZ2UgUmVzcG9uc2UgSGVhZGVycyBQb2xpY3lcIixcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWUsXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5pbWFnZVJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMuZHluYW1pY0Nsb3VkRnJvbnRGdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgIG9yaWdpbjogdGhpcy5keW5hbWljT3JpZ2luLFxuICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogdGhpcy5keW5hbWljT3JpZ2luUmVzcG9uc2VQb2xpY3ksXG4gICAgICBjYWNoZVBvbGljeSxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIC4uLmltYWdlQmVoYXZpb3JPcHRpb25zLFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgdXNlcyB1c2VyIHNwZWNpZmllZCBDbG91ZEZyb250IERpc3RyaWJ1dGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXN0cmlidXRpb24oKTogRGlzdHJpYnV0aW9uIHtcbiAgICBsZXQgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uKSB7XG4gICAgICBkaXN0cmlidXRpb24gPSB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBcIkRpc3RyaWJ1dGlvblwiLCB7XG4gICAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IFNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyMSxcbiAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB0aGlzLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMsXG4gICAgICAgIC8vIGJlc3QgdG8gdXNlIEhUVFAgMiBhbmQgMyBmb3IgY29tcGF0YWJpbGl0eSAoSFRUUCAyKSBhbmQgcGVyZm9ybWFuY2UgKEhUVFAzKVxuICAgICAgICAvLyBDbG91ZEZyb250IHdpbGwgY2hvb3NlIGJlc3Qgb3B0aW9uIGZvciBjbGllbnRcbiAgICAgICAgaHR0cFZlcnNpb246IEh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgRGlzdHJpYnV0aW9uXCIsXG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuICBwcml2YXRlIGFkZER5bmFtaWNCZWhhdmlvcnMoKSB7XG4gICAgLy8gSW1hZ2UgQmVoYXZpb3JcbiAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihcbiAgICAgIHRoaXMuZ2V0UGF0aFBhdHRlcm4oXCJfbmV4dC9pbWFnZSpcIiksXG4gICAgICB0aGlzLmltYWdlQmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgIHRoaXMuaW1hZ2VCZWhhdmlvck9wdGlvbnMsXG4gICAgKTtcbiAgICAvLyBSb290IFBhdGggQmVoYXZpb3JzXG4gICAgaWYgKHRoaXMucHJvcHMuYmFzZVBhdGgpIHtcbiAgICAgIC8vIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIGEgYmFzZVBhdGggd2UgZG9uJ3QgdXNlIC8gaW5zdGVhZCB3ZSB1c2UgL2Jhc2UtcGF0aFxuICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoXG4gICAgICAgIHRoaXMucHJvcHMuYmFzZVBhdGgsXG4gICAgICAgIHRoaXMuZHluYW1pY0JlaGF2aW9yT3B0aW9ucy5vcmlnaW4sXG4gICAgICAgIHRoaXMuZHluYW1pY0JlaGF2aW9yT3B0aW9ucyxcbiAgICAgICk7XG4gICAgICAvLyB3aGVuIGJhc2VQYXRoIGlzIHNldCwgd2UgZW11bGF0ZSB0aGUgXCJkZWZhdWx0IGJlaGF2aW9yXCIgKCopIGZvciB0aGUgc2l0ZSBhcyBgL2Jhc2UtcGF0aC8qYFxuICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoXG4gICAgICAgIHRoaXMuZ2V0UGF0aFBhdHRlcm4oXCIqXCIpLFxuICAgICAgICB0aGlzLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMub3JpZ2luLFxuICAgICAgICB0aGlzLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBubyBiYXNlIHBhdGgsIHRoZW4gZGVmYXVsdCBiZWhhdmlvciB3aWxsIGhhbmRsZSBhbGwgb3RoZXIgcGF0aHNcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRTdGF0aWNCZWhhdmlvcnMoKSB7XG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoXG4gICAgICB0aGlzLmdldFBhdGhQYXR0ZXJuKFwiX25leHQvc3RhdGljKlwiKSxcbiAgICAgIHRoaXMuc3RhdGljT3JpZ2luLFxuICAgICAgdGhpcy5zdGF0aWNCZWhhdmlvck9wdGlvbnMsXG4gICAgKTtcbiAgICAvLyAyMiA9IDI1IChtYXgpIC0gMSAoX25leHQvaW1hZ2UpIC0gMSAoX25leHQvc3RhdGljKSAtIDEgKCopXG4gICAgaWYgKHRoaXMucHJvcHMucHVibGljRGlyRW50cmllcy5sZW5ndGggPj0gMjIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRvbyBtYW55IHB1YmxpYy8gZmlsZXMgaW4gTmV4dC5qcyBidWlsZC4gQ2xvdWRGcm9udCBsaW1pdHMgRGlzdHJpYnV0aW9ucyB0byAyNSBDYWNoZSBCZWhhdmlvcnMuIFNlZSBkb2N1bWVudGVkIGxpbWl0IGhlcmU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sI2xpbWl0cy13ZWItZGlzdHJpYnV0aW9ucy4gVHJ5IGluY2x1ZGluZyBhbGwgcHVibGljIGZpbGVzIGludG8gMSB0b3AgbGV2ZWwgZGlyZWN0b3J5IChpLmUuIHN0YXRpYy8qKS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwdWJsaWNGaWxlIG9mIHRoaXMucHJvcHMucHVibGljRGlyRW50cmllcykge1xuICAgICAgY29uc3QgcGF0aFBhdHRlcm4gPSBwdWJsaWNGaWxlLmlzRGlyZWN0b3J5XG4gICAgICAgID8gYCR7cHVibGljRmlsZS5uYW1lfS8qYFxuICAgICAgICA6IHB1YmxpY0ZpbGUubmFtZTtcbiAgICAgIGlmICghL15bYS16QS1aMC05X1xcLS4qJC9+XCInQDorPyZdKyQvLnRlc3QocGF0aFBhdHRlcm4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBDYWNoZSBCZWhhdmlvciBQYXRoIFBhdHRlcm46ICR7cGF0aFBhdHRlcm59LiBQbGVhc2Ugc2VlIGRvY3VtZW50YXRpb24gaGVyZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNQYXRoUGF0dGVybmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBmaW5hbFBhdGhQYXR0ZXJuID0gdGhpcy5nZXRQYXRoUGF0dGVybihwYXRoUGF0dGVybik7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihcbiAgICAgICAgZmluYWxQYXRoUGF0dGVybixcbiAgICAgICAgdGhpcy5zdGF0aWNPcmlnaW4sXG4gICAgICAgIHRoaXMuc3RhdGljQmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgcHJlcGVuZHMgYmFzZSBwYXRoIHRvIGdpdmVuIHBhdGggcGF0dGVybi5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGF0aFBhdHRlcm4ocGF0aFBhdHRlcm46IHN0cmluZykge1xuICAgIGlmICh0aGlzLnByb3BzLmJhc2VQYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5iYXNlUGF0aH0vJHtwYXRoUGF0dGVybn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGF0aFBhdHRlcm47XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWRpc3RyaWJ1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBOEM7QUFFOUMsK0RBMkJvQztBQUNwQywrRUFNNEM7QUFJNUMsMkNBQXVDO0FBQ3ZDLDJDQUF5QztBQUl6QyxpREFBZ0U7QUE4RGhFLE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7O0lBQy9DLFlBQVksQ0FBZTtJQUVuQixLQUFLLENBQTBCO0lBQ3ZDOzs7OztPQUtHO0lBQ0ssUUFBUSxDQUFTO0lBQ3pCOzs7T0FHRztJQUNLLDZCQUE2QixHQUFvQztRQUN2RSxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7UUFDdkMsWUFBWSxFQUFFO1lBQ1osV0FBVyxFQUFFLG1DQUFrQixDQUFDLFVBQVU7WUFDMUMsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxjQUFjLEVBQUU7WUFDZCxRQUFRLEVBQUUsS0FBSztZQUNmLGNBQWMsRUFBRSxzQ0FBcUIsQ0FBQywrQkFBK0I7U0FDdEU7UUFFRCx1QkFBdUIsRUFBRTtZQUN2QixtQkFBbUIsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdkMsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRSxJQUFJO1NBQ2Q7UUFDRCxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtLQUN0RSxDQUFDO0lBQ00sWUFBWSxDQUFVO0lBQ3RCLGFBQWEsQ0FBVTtJQUN2QixXQUFXLENBQVU7SUFDckIsMkJBQTJCLENBQXVCO0lBQ2xELHFDQUFxQyxDQUF3QjtJQUM3RCxpQkFBaUIsQ0FBVTtJQUMzQixxQkFBcUIsQ0FBa0I7SUFDdkMsc0JBQXNCLENBQWtCO0lBQ3hD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QVUsQ0FBQyxJQUFJLElBQUk7Z0JBQ3hCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDYixnRUFBZ0UsV0FBVyx3S0FBd0ssQ0FDcFAsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQzNCLGdCQUFnQixFQUNoQixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLFdBQW1CO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDbEIsQ0FBQyxDQUFDLElBQUksSUFBQSxvQkFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDNUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNsQixDQUFDOztBQS9XSCxnREFnWEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDZXJ0aWZpY2F0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBBZGRCZWhhdmlvck9wdGlvbnMsXG4gIEFsbG93ZWRNZXRob2RzLFxuICBCZWhhdmlvck9wdGlvbnMsXG4gIENhY2hlQ29va2llQmVoYXZpb3IsXG4gIENhY2hlSGVhZGVyQmVoYXZpb3IsXG4gIENhY2hlUG9saWN5LFxuICBDYWNoZVBvbGljeVByb3BzLFxuICBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IsXG4gIENhY2hlZE1ldGhvZHMsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRGlzdHJpYnV0aW9uLFxuICBGdW5jdGlvbkFzc29jaWF0aW9uLFxuICBGdW5jdGlvbkNvZGUsXG4gIEZ1bmN0aW9uRXZlbnRUeXBlLFxuICBIZWFkZXJzRnJhbWVPcHRpb24sXG4gIEhlYWRlcnNSZWZlcnJlclBvbGljeSxcbiAgSHR0cFZlcnNpb24sXG4gIElPcmlnaW4sXG4gIElPcmlnaW5SZXF1ZXN0UG9saWN5LFxuICBPcmlnaW5Qcm90b2NvbFBvbGljeSxcbiAgT3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgUmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvcixcbiAgU2VjdXJpdHlQb2xpY3lQcm90b2NvbCxcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgRnVuY3Rpb25VcmxPcmlnaW4sXG4gIEZ1bmN0aW9uVXJsT3JpZ2luV2l0aE9BQ1Byb3BzLFxuICBTM0J1Y2tldE9yaWdpbixcbiAgVnBjT3JpZ2luLFxuICBWcGNPcmlnaW5XaXRoRW5kcG9pbnRQcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIjtcbmltcG9ydCB7IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgSUZ1bmN0aW9uVXJsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxEaXN0cmlidXRpb25Qcm9wcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsRGlzdHJpYnV0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsUzNPcmlnaW5CdWNrZXRXaXRoT0FDUHJvcHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbFMzT3JpZ2luQnVja2V0V2l0aE9BQ1Byb3BzXCI7XG5pbXBvcnQgeyBQdWJsaWNEaXJFbnRyeSB9IGZyb20gXCIuL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7IGpvaW5QYXRoLCBub3JtYWxpemVCYXNlUGF0aCB9IGZyb20gXCIuL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvblByb3BzPzogT3B0aW9uYWxEaXN0cmlidXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgaW1hZ2VCZWhhdmlvck9wdGlvbnM/OiBBZGRCZWhhdmlvck9wdGlvbnM7XG4gIHJlYWRvbmx5IGltYWdlQ2FjaGVQb2xpY3lQcm9wcz86IENhY2hlUG9saWN5UHJvcHM7XG4gIHJlYWRvbmx5IGltYWdlUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM/OiBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcztcbiAgcmVhZG9ubHkgZHluYW1pY0JlaGF2aW9yT3B0aW9ucz86IEFkZEJlaGF2aW9yT3B0aW9ucztcbiAgcmVhZG9ubHkgZHluYW1pY0NhY2hlUG9saWN5UHJvcHM/OiBDYWNoZVBvbGljeVByb3BzO1xuICByZWFkb25seSBkeW5hbWljUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM/OiBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcztcbiAgcmVhZG9ubHkgZHluYW1pY0Z1bmN0aW9uVXJsT3JpZ2luV2l0aE9BQ1Byb3BzPzogRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHM7XG4gIHJlYWRvbmx5IGR5bmFtaWNWcGNPcmlnaW5XaXRoRW5kcG9pbnRQcm9wcz86IFZwY09yaWdpbldpdGhFbmRwb2ludFByb3BzO1xuICByZWFkb25seSBpbWFnZUZ1bmN0aW9uVXJsT3JpZ2luV2l0aE9BQ1Byb3BzPzogRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHM7XG4gIHJlYWRvbmx5IHN0YXRpY0JlaGF2aW9yT3B0aW9ucz86IEFkZEJlaGF2aW9yT3B0aW9ucztcbiAgcmVhZG9ubHkgc3RhdGljUmVzcG9uc2VIZWFkZXJzUG9saWN5UHJvcHM/OiBSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcztcbiAgcmVhZG9ubHkgczNCdWNrZXRPcmlnaW5Qcm9wcz86IE9wdGlvbmFsUzNPcmlnaW5CdWNrZXRXaXRoT0FDUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMge1xuICAvKipcbiAgICogQnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0cy5cbiAgICogTXVzdCBiZSBwcm92aWRlZCBpZiB5b3Ugd2FudCB0byBzZXJ2ZSBzdGF0aWMgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHNCdWNrZXQ6IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBVUkkgcGF0aCBwcmVmaXggdGhlIGFwcCBpcyBzZXJ2ZWQgYXQuIFN1cnJvdW5kaW5nIHNsYXNoZXMgYXJlIG5vcm1hbGl6ZWRcbiAgICogYXdheSwgc28gXCIvYmFzZVwiLCBcImJhc2VcIiBhbmQgXCIvYmFzZS9cIiBhbGwgcHJvZHVjZSB0aGUgc2FtZSBjYWNoZSBiZWhhdmlvcnMuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1dCBvbmx5IGFwcGxpY2FibGUgZm9yIGBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTYFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlNgXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvblVybD86IElGdW5jdGlvblVybDtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBvZiB0aGUgZGVkaWNhdGVkIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGEuIE9ubHkgYXBwbGljYWJsZVxuICAgKiB0byBgTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TYCwgYW5kIG9ubHkgd2hlbiB0aGUgZGVkaWNhdGVkIGltYWdlXG4gICAqIGZ1bmN0aW9uIGlzIGVuYWJsZWQuIFdoZW4gb21pdHRlZCwgdGhlIGBfbmV4dC9pbWFnZSpgIGJlaGF2aW9yIHBvaW50cyBhdFxuICAgKiB0aGUgZHluYW1pYyBvcmlnaW4sIHdoaWNoIHNlcnZlcyBpbWFnZSBvcHRpbWl6YXRpb24gZnJvbSB0aGUgTmV4dC5qc1xuICAgKiBzZXJ2ZXIgaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VGdW5jdGlvblVybD86IElGdW5jdGlvblVybDtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTYCBvciBgTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTYFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyPzogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgZm9yIGV2ZXJ5IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcztcbiAgLyoqXG4gICAqIEVudHJpZXMgKGZpbGVzL2RpcmVjdG9yaWVzKSB3aXRoaW4gTmV4dC5qcyBhcHAncyBwdWJsaWMgZGlyZWN0b3J5LiBVc2VkIHRvXG4gICAqIGFkZCBzdGF0aWMgYmVoYXZpb3JzIHRvIGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0RpckVudHJpZXM6IFB1YmxpY0RpckVudHJ5W107XG59XG5cbmV4cG9ydCBjbGFzcyBOZXh0anNEaXN0cmlidXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNEaXN0cmlidXRpb25Qcm9wcztcbiAgLyoqXG4gICAqIGBwcm9wcy5iYXNlUGF0aGAgbm9ybWFsaXplZCB0byBhIGJhcmUgcGF0aCBzZWdtZW50LiBUaGlzIGNvbnN0cnVjdCBpcyB0aGVcbiAgICogb25lIHBsYWNlIHRoYXQgbmVlZHMgaXQgd2l0aCBhIGxlYWRpbmcgc2xhc2gg4oCUIENsb3VkRnJvbnQgcGF0aCBwYXR0ZXJucyBhcmVcbiAgICogd3JpdHRlbiBhZ2FpbnN0IHRoZSByZXF1ZXN0IHBhdGgg4oCUIHNvIGl0IHByZXBlbmRzIGl0cyBvd24gcmF0aGVyIHRoYW5cbiAgICogcmVseWluZyBvbiB0aGUgY2FsbGVyIGhhdmluZyBwYXNzZWQgb25lLlxuICAgKi9cbiAgcHJpdmF0ZSBiYXNlUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbW9uIHNlY3VyaXR5IGhlYWRlcnMgYXBwbGllZCBieSBkZWZhdWx0IHRvIGFsbCBvcmlnaW5zXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtcmVzcG9uc2UtaGVhZGVycy1wb2xpY2llcy5odG1sI21hbmFnZWQtcmVzcG9uc2UtaGVhZGVycy1wb2xpY2llcy1zZWN1cml0eVxuICAgKi9cbiAgcHJpdmF0ZSBjb21tb25TZWN1cml0eUhlYWRlcnNCZWhhdmlvcjogUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciA9IHtcbiAgICBjb250ZW50VHlwZU9wdGlvbnM6IHsgb3ZlcnJpZGU6IGZhbHNlIH0sXG4gICAgZnJhbWVPcHRpb25zOiB7XG4gICAgICBmcmFtZU9wdGlvbjogSGVhZGVyc0ZyYW1lT3B0aW9uLlNBTUVPUklHSU4sXG4gICAgICBvdmVycmlkZTogZmFsc2UsXG4gICAgfSxcbiAgICByZWZlcnJlclBvbGljeToge1xuICAgICAgb3ZlcnJpZGU6IGZhbHNlLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOLFxuICAgIH0sXG5cbiAgICBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eToge1xuICAgICAgYWNjZXNzQ29udHJvbE1heEFnZTogRHVyYXRpb24uZGF5cygzNjUpLFxuICAgICAgaW5jbHVkZVN1YmRvbWFpbnM6IHRydWUsXG4gICAgICBvdmVycmlkZTogZmFsc2UsXG4gICAgICBwcmVsb2FkOiB0cnVlLFxuICAgIH0sXG4gICAgeHNzUHJvdGVjdGlvbjogeyBvdmVycmlkZTogZmFsc2UsIHByb3RlY3Rpb246IHRydWUsIG1vZGVCbG9jazogdHJ1ZSB9LFxuICB9O1xuICBwcml2YXRlIHN0YXRpY09yaWdpbjogSU9yaWdpbjtcbiAgcHJpdmF0ZSBkeW5hbWljT3JpZ2luOiBJT3JpZ2luO1xuICBwcml2YXRlIGltYWdlT3JpZ2luOiBJT3JpZ2luO1xuICBwcml2YXRlIGR5bmFtaWNPcmlnaW5SZXNwb25zZVBvbGljeTogSU9yaWdpblJlcXVlc3RQb2xpY3k7XG4gIHByaXZhdGUgZHluYW1pY0Nsb3VkRnJvbnRGdW5jdGlvbkFzc29jaWF0aW9uczogRnVuY3Rpb25Bc3NvY2lhdGlvbltdO1xuICBwcml2YXRlIGlzRnVuY3Rpb25Db21wdXRlOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpY0JlaGF2aW9yT3B0aW9uczogQmVoYXZpb3JPcHRpb25zO1xuICBwcml2YXRlIGR5bmFtaWNCZWhhdmlvck9wdGlvbnM6IEJlaGF2aW9yT3B0aW9ucztcbiAgcHJpdmF0ZSBpbWFnZUJlaGF2aW9yT3B0aW9uczogQmVoYXZpb3JPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNEaXN0cmlidXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuYmFzZVBhdGggPSBub3JtYWxpemVCYXNlUGF0aChwcm9wcy5iYXNlUGF0aCk7XG4gICAgdGhpcy5zdGF0aWNPcmlnaW4gPSB0aGlzLmNyZWF0ZVN0YXRpY09yaWdpbigpO1xuICAgIHRoaXMuaXNGdW5jdGlvbkNvbXB1dGUgPSBwcm9wcy5uZXh0anNUeXBlID09PSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlM7XG4gICAgdGhpcy5keW5hbWljT3JpZ2luID0gdGhpcy5jcmVhdGVEeW5hbWljT3JpZ2luKCk7XG4gICAgdGhpcy5pbWFnZU9yaWdpbiA9IHRoaXMuY3JlYXRlSW1hZ2VPcmlnaW4oKTtcbiAgICB0aGlzLmR5bmFtaWNPcmlnaW5SZXNwb25zZVBvbGljeSA9IHRoaXMuY3JlYXRlRHluYW1pY09yaWdpblJlcXVlc3RQb2xpY3koKTtcbiAgICB0aGlzLmR5bmFtaWNDbG91ZEZyb250RnVuY3Rpb25Bc3NvY2lhdGlvbnMgPVxuICAgICAgdGhpcy5jcmVhdGVEeW5hbWljQ2xvdWRGcm9udEZ1bmN0aW9uQXNzb2NpYXRpb25zKCk7XG4gICAgdGhpcy5zdGF0aWNCZWhhdmlvck9wdGlvbnMgPSB0aGlzLmNyZWF0ZVN0YXRpY0JlaGF2aW9yT3B0aW9ucygpO1xuICAgIHRoaXMuZHluYW1pY0JlaGF2aW9yT3B0aW9ucyA9IHRoaXMuY3JlYXRlRHluYW1pY0JlaGF2aW9yT3B0aW9ucygpO1xuICAgIHRoaXMuaW1hZ2VCZWhhdmlvck9wdGlvbnMgPSB0aGlzLmNyZWF0ZUltYWdlQmVoYXZpb3JPcHRpb25zKCk7XG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSB0aGlzLmdldERpc3RyaWJ1dGlvbigpO1xuICAgIHRoaXMuYWRkU3RhdGljQmVoYXZpb3JzKCk7XG4gICAgdGhpcy5hZGREeW5hbWljQmVoYXZpb3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkRnJvbnQgY29tbWVudCB0aGF0IGlzIHNhZmUgZm9yIHRoZSAxMjggY2hhcmFjdGVyIGxpbWl0LlxuICAgKiBJZiB0aGUgZnVsbCBjb21tZW50IHdpdGggc3RhY2sgbmFtZSBleGNlZWRzIDEyOCBjaGFyYWN0ZXJzLCByZXR1cm5zIHRoZSBiYXNlIGNvbW1lbnQgb25seS5cbiAgICogQHBhcmFtIGJhc2VDb21tZW50IFRoZSBiYXNlIGNvbW1lbnQgdGV4dFxuICAgKiBAcGFyYW0gc3RhY2tOYW1lIFRoZSBzdGFjayBuYW1lIHRvIGFwcGVuZFxuICAgKiBAcmV0dXJucyBBIGNvbW1lbnQgc3RyaW5nIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSA8IDEyOCBjaGFyYWN0ZXJzXG4gICAqL1xuICBwcml2YXRlIGdldENvbW1lbnQoYmFzZUNvbW1lbnQ6IHN0cmluZywgc3RhY2tOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZ1bGxDb21tZW50ID0gYCR7YmFzZUNvbW1lbnR9IGZvciAke3N0YWNrTmFtZX1gO1xuICAgIHJldHVybiBmdWxsQ29tbWVudC5sZW5ndGggPCAxMjggPyBmdWxsQ29tbWVudCA6IGJhc2VDb21tZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNPcmlnaW4oKTogSU9yaWdpbiB7XG4gICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NDb250cm9sKFxuICAgICAgdGhpcy5wcm9wcy5hc3NldHNCdWNrZXQsXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8uczNCdWNrZXRPcmlnaW5Qcm9wcyxcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY09yaWdpbigpOiBJT3JpZ2luIHtcbiAgICBpZiAodGhpcy5pc0Z1bmN0aW9uQ29tcHV0ZSkge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmZ1bmN0aW9uVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMuZnVuY3Rpb25VcmxcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gRnVuY3Rpb25VcmxPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2woXG4gICAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25VcmwsXG4gICAgICAgIHRoaXMucHJvcHMub3ZlcnJpZGVzPy5keW5hbWljRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2FkQmFsYW5jZXIgPSB0aGlzLnByb3BzLmxvYWRCYWxhbmNlcjtcbiAgICAgIGlmICghbG9hZEJhbGFuY2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMubG9hZEJhbGFuY2VyXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFZwY09yaWdpbi53aXRoQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIobG9hZEJhbGFuY2VyLCB7XG4gICAgICAgIHByb3RvY29sUG9saWN5OiB0aGlzLnByb3BzLmNlcnRpZmljYXRlXG4gICAgICAgICAgPyBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZXG4gICAgICAgICAgOiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQX09OTFksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5keW5hbWljVnBjT3JpZ2luV2l0aEVuZHBvaW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEEgZGVkaWNhdGVkIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGEgaXMgb25seSB3aXJlZCB1cCB3aGVuXG4gICAqIHtAbGluayBOZXh0anNEaXN0cmlidXRpb25Qcm9wcy5pbWFnZUZ1bmN0aW9uVXJsfSBpcyBzdXBwbGllZCwgd2hpY2ggdG9kYXlcbiAgICogb25seSBgTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TYCBkb2VzLiBPdGhlcndpc2UgYF9uZXh0L2ltYWdlKmAga2VlcHNcbiAgICogZ29pbmcgdG8gdGhlIGR5bmFtaWMgb3JpZ2luLCB3aGVyZSB0aGUgTmV4dC5qcyBzZXJ2ZXIgb3B0aW1pemVzIGltYWdlc1xuICAgKiBpdHNlbGYuXG4gICAqXG4gICAqIFRoZSBgX25leHQvaW1hZ2UqYCBiZWhhdmlvciBpcyBrZXB0IGVpdGhlciB3YXk6IGl0cyBjYWNoZSBwb2xpY3lcbiAgICogKGBxdWVyeVN0cmluZ0JlaGF2aW9yOiBhbGwoKWAsIGBhY2NlcHRgIGluIHRoZSBjYWNoZSBrZXkpIGlzIHRoZSByaWdodCBvbmVcbiAgICogZm9yIGltYWdlIHJlcXVlc3RzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggb3JpZ2luIGFuc3dlcnMgdGhlbS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VPcmlnaW4oKTogSU9yaWdpbiB7XG4gICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25Db21wdXRlIHx8ICF0aGlzLnByb3BzLmltYWdlRnVuY3Rpb25VcmwpIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNPcmlnaW47XG4gICAgfVxuICAgIHJldHVybiBGdW5jdGlvblVybE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzQ29udHJvbChcbiAgICAgIHRoaXMucHJvcHMuaW1hZ2VGdW5jdGlvblVybCxcbiAgICAgIHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNGdW5jdGlvblVybE9yaWdpbldpdGhPQUNQcm9wcyxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmltYWdlRnVuY3Rpb25VcmxPcmlnaW5XaXRoT0FDUHJvcHMsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIExhbWJkYSBGdW5jdGlvbiBVUkxzIFwiZXhwZWN0IHRoZSBgSG9zdGAgaGVhZGVyIHRvIGNvbnRhaW4gdGhlIG9yaWdpbiBkb21haW5cbiAgICogbmFtZSwgbm90IHRoZSBkb21haW4gbmFtZSBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXCJcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sI21hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWN5LWFsbC12aWV3ZXItZXhjZXB0LWhvc3QtaGVhZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUR5bmFtaWNPcmlnaW5SZXF1ZXN0UG9saWN5KCk6IElPcmlnaW5SZXF1ZXN0UG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5pc0Z1bmN0aW9uQ29tcHV0ZVxuICAgICAgPyBPcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVJfRVhDRVBUX0hPU1RfSEVBREVSXG4gICAgICA6IE9yaWdpblJlcXVlc3RQb2xpY3kuQUxMX1ZJRVdFUjtcbiAgfVxuICAvKipcbiAgICogRW5zdXJlcyBOZXh0LmpzIGByZXF1ZXN0LnVybGAgd2lsbCBiZSBjb3JyZWN0IGRvbWFpbiBpbnN0ZWFkIG9mIFVSTCBvZlxuICAgKiBjb21wdXRlIChMYW1iZGEgb3IgRmFyZ2F0ZSlcbiAgICogQHNlZSBodHRwczovL29wZW4tbmV4dC5qcy5vcmcvYWR2YW5jZWQvd29ya2Fyb3VuZCN3b3JrYXJvdW5kLXNldC14LWZvcndhcmRlZC1ob3N0LWhlYWRlci1hd3Mtc3BlY2lmaWNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY0Nsb3VkRnJvbnRGdW5jdGlvbkFzc29jaWF0aW9ucygpOiBGdW5jdGlvbkFzc29jaWF0aW9uW10ge1xuICAgIGNvbnN0IGFzc29jaWF0aW9uczogRnVuY3Rpb25Bc3NvY2lhdGlvbltdID0gW107XG4gICAgaWYgKHRoaXMuaXNGdW5jdGlvbkNvbXB1dGUpIHtcbiAgICAgIGNvbnN0IGNsb3VkRnJvbnRGbiA9IG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgXCJDbG91ZEZyb250Rm5cIiwge1xuICAgICAgICBjb2RlOiBGdW5jdGlvbkNvZGUuZnJvbUlubGluZShgXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xuICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzW1wieC1mb3J3YXJkZWQtaG9zdFwiXSA9IHJlcXVlc3QuaGVhZGVycy5ob3N0O1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgICBhc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgIGV2ZW50VHlwZTogRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIGZ1bmN0aW9uOiBjbG91ZEZyb250Rm4sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc29jaWF0aW9ucztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVN0YXRpY0JlaGF2aW9yT3B0aW9ucygpOiBCZWhhdmlvck9wdGlvbnMge1xuICAgIGNvbnN0IHN0YXRpY0JlaGF2aW9yT3B0aW9ucyA9IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5zdGF0aWNCZWhhdmlvck9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID1cbiAgICAgIHN0YXRpY0JlaGF2aW9yT3B0aW9ucz8ucmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/XG4gICAgICBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsIFwiU3RhdGljUmVzcG9uc2VIZWFkZXJzUG9saWN5XCIsIHtcbiAgICAgICAgc2VjdXJpdHlIZWFkZXJzQmVoYXZpb3I6IHRoaXMuY29tbW9uU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3IsXG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuZ2V0Q29tbWVudChcbiAgICAgICAgICBcIk5leHRKUyBTdGF0aWMgUmVzcG9uc2UgSGVhZGVycyBQb2xpY3lcIixcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWUsXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5zdGF0aWNSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgIG9yaWdpbjogdGhpcy5zdGF0aWNPcmlnaW4sXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAuLi5zdGF0aWNCZWhhdmlvck9wdGlvbnMsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUR5bmFtaWNCZWhhdmlvck9wdGlvbnMoKTogQmVoYXZpb3JPcHRpb25zIHtcbiAgICBjb25zdCBkeW5hbWljQmVoYXZpb3JPcHRpb25zID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNCZWhhdmlvck9wdGlvbnM7XG4gICAgLy8gY3JlYXRlIGRlZmF1bHQgY2FjaGUgcG9saWN5IGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGNhY2hlUG9saWN5ID1cbiAgICAgIGR5bmFtaWNCZWhhdmlvck9wdGlvbnM/LmNhY2hlUG9saWN5ID8/XG4gICAgICBuZXcgQ2FjaGVQb2xpY3kodGhpcywgXCJEeW5hbWljQ2FjaGVQb2xpY3lcIiwge1xuICAgICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgICAgIGhlYWRlckJlaGF2aW9yOiBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdChcbiAgICAgICAgICAvLyBOT1RFOiBDbG91ZEZyb250IEN1c3RvbSBDYWNoZSBQb2xpY2llcyBoYXZlIHNvZnQgbWF4IG9mIDEwIGhlYWRlcnNcbiAgICAgICAgICAvLyBjZGstbmV4dGpzIGluY2x1ZGVzIHRoZSBtb3N0IGVzc2VudGlhbCBoZWFkZXJzIGZvciBOZXh0LmpzIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAvLyBidXQgaXQncyByZWNvbW1lbmRlZCB0byByZXF1ZXN0IHF1b3RhIGluY3JlYXNlIHRvIGluY2x1ZGUgYWxsIGhlYWRlcnMgKGNvbW1lbnRlZCBvdXQgb25lcyBiZWxvdylcbiAgICAgICAgICAvLyBtb3JlIGhlcmU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sI2xpbWl0cy1wb2xpY2llc1xuICAgICAgICAgIFwiYWNjZXB0XCIsIC8vIGNvbnRlbnQgbmVnb3RpYXRpb24gKEhUTUwgdnMgUlNDIHBheWxvYWQpXG4gICAgICAgICAgXCJyc2NcIiwgLy8gUmVhY3QgU2VydmVyIENvbXBvbmVudHMgcmVxdWVzdHNcbiAgICAgICAgICBcIm5leHQtdXJsXCIsIC8vIE5leHQuanMgcm91dGluZ1xuICAgICAgICAgIFwibmV4dC1yb3V0ZXItc3RhdGUtdHJlZVwiLCAvLyBBcHAgUm91dGVyIG5hdmlnYXRpb24gc3RhdGVcbiAgICAgICAgICBcIm5leHQtcm91dGVyLXByZWZldGNoXCIsIC8vIHByZWZldGNoIGJlaGF2aW9yXG4gICAgICAgICAgXCJuZXh0LXJvdXRlci1zZWdtZW50LXByZWZldGNoXCIsIC8vIHNlZ21lbnQtbGV2ZWwgcHJlZmV0Y2hpbmdcbiAgICAgICAgICBcIngtbWF0Y2hlZC1wYXRoXCIsIC8vIGR5bmFtaWMgcm91dGVzIGFuZCByZXdyaXRlc1xuICAgICAgICAgIFwieC1wcmVyZW5kZXItcmV2YWxpZGF0ZVwiLCAvLyBvbi1kZW1hbmQgSVNSIHJldmFsaWRhdGlvblxuICAgICAgICAgIFwieC1uZXh0LWNhY2hlLXRhZ3NcIiwgLy8gdGFnLWJhc2VkIGNhY2hlIHJldmFsaWRhdGlvblxuICAgICAgICAgIFwieC1wcmVyZW5kZXItYnlwYXNzXCIsIC8vIGRyYWZ0IG1vZGVcbiAgICAgICAgICAvLyBcIngtbmV4dGpzLXN0YWxlLXRpbWVcIiwgLy8gc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBiZWhhdmlvclxuICAgICAgICAgIC8vIFwieC1uZXh0LWNhY2hlLXRhZy10b2tlblwiLCAvLyBhdXRoIHRva2VuIGZvciBjYWNoZSB0YWdzIChvbmx5IG5lZWRlZCB3aXRoIHJldmFsaWRhdGVUYWcgYXV0aClcbiAgICAgICAgICAvLyBcIngtbmV4dGpzLXBvc3Rwb25lZFwiLCAvLyBQYXJ0aWFsIFByZXJlbmRlcmluZyAoZXhwZXJpbWVudGFsIGZlYXR1cmUpXG4gICAgICAgICAgLy8gXCJ4LXByZXJlbmRlci1yZXZhbGlkYXRlLWlmLWdlbmVyYXRlZFwiLCAvLyBjb25kaXRpb25hbCByZXZhbGlkYXRpb24gKG5pY2hlIHVzZSBjYXNlKVxuICAgICAgICApLFxuICAgICAgICBjb29raWVCZWhhdmlvcjogQ2FjaGVDb29raWVCZWhhdmlvci5hbGwoKSxcbiAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nR3ppcDogdHJ1ZSxcbiAgICAgICAgY29tbWVudDogdGhpcy5nZXRDb21tZW50KFxuICAgICAgICAgIFwiTmV4dEpTIER5bmFtaWMgQ2FjaGUgUG9saWN5XCIsXG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZHluYW1pY0NhY2hlUG9saWN5UHJvcHMsXG4gICAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnNQb2xpY3kgPVxuICAgICAgZHluYW1pY0JlaGF2aW9yT3B0aW9ucz8ucmVzcG9uc2VIZWFkZXJzUG9saWN5ID8/XG4gICAgICBuZXcgUmVzcG9uc2VIZWFkZXJzUG9saWN5KHRoaXMsIFwiRHluYW1pY1Jlc3BvbnNlSGVhZGVyc1BvbGljeVwiLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB0aGlzLmNvbW1vblNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgRHluYW1pYyBSZXNwb25zZSBIZWFkZXJzIFBvbGljeVwiLFxuICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNSZXNwb25zZUhlYWRlcnNQb2xpY3lQcm9wcyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgY2FjaGVQb2xpY3ksXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5keW5hbWljQ2xvdWRGcm9udEZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgb3JpZ2luOiB0aGlzLmR5bmFtaWNPcmlnaW4sXG4gICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB0aGlzLmR5bmFtaWNPcmlnaW5SZXNwb25zZVBvbGljeSxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIC4uLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUltYWdlQmVoYXZpb3JPcHRpb25zKCk6IEJlaGF2aW9yT3B0aW9ucyB7XG4gICAgY29uc3QgaW1hZ2VCZWhhdmlvck9wdGlvbnMgPSB0aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VCZWhhdmlvck9wdGlvbnM7XG4gICAgLy8gYWRkIGRlZmF1bHQgY2FjaGUgcG9saWN5IGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGNhY2hlUG9saWN5ID1cbiAgICAgIGltYWdlQmVoYXZpb3JPcHRpb25zPy5jYWNoZVBvbGljeSA/P1xuICAgICAgbmV3IENhY2hlUG9saWN5KHRoaXMsIFwiSW1hZ2VDYWNoZVBvbGljeVwiLCB7XG4gICAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IGJ5IGRlZmF1bHQgd2UgZG9uJ3QgaW5jbHVkZSBjb29raWVzIGluIGNhY2hlIGZvclxuICAgICAgICAvLyBpbWFnZXMgYi9jIGl0IHNpZ25pZmljYW50bHkgaW1wcm92ZXMgaW1hZ2UgcGVyZiBmb3IgbW9zdCBzaXRlcyBCVVRcbiAgICAgICAgLy8gaWYgeW91IGhhdmUgcHJpdmF0ZSBpbWFnZXMgbG9ja2VkIGJlaGluZCBhdXRoIGltcGxlbWVudGVkIHdpdGggY29va2llc1xuICAgICAgICAvLyB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCksXG4gICAgICAgIGhlYWRlckJlaGF2aW9yOiBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdChcImFjY2VwdFwiKSxcbiAgICAgICAgY29va2llQmVoYXZpb3I6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0Jyb3RsaTogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiB0cnVlLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgSW1hZ2UgQ2FjaGUgUG9saWN5XCIsXG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VDYWNoZVBvbGljeVByb3BzLFxuICAgICAgfSk7XG4gICAgLy8gYWRkIGRlZmF1bHQgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgaWYgbm90IHByb3ZpZGVkXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID1cbiAgICAgIGltYWdlQmVoYXZpb3JPcHRpb25zPy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgPz9cbiAgICAgIG5ldyBSZXNwb25zZUhlYWRlcnNQb2xpY3kodGhpcywgXCJJbWFnZVJlc3BvbnNlSGVhZGVyc1BvbGljeVwiLCB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB0aGlzLmNvbW1vblNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yLFxuICAgICAgICBjb21tZW50OiB0aGlzLmdldENvbW1lbnQoXG4gICAgICAgICAgXCJOZXh0SlMgSW1hZ2UgUmVzcG9uc2UgSGVhZGVycyBQb2xpY3lcIixcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWUsXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5pbWFnZVJlc3BvbnNlSGVhZGVyc1BvbGljeVByb3BzLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMuZHluYW1pY0Nsb3VkRnJvbnRGdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgIG9yaWdpbjogdGhpcy5pbWFnZU9yaWdpbixcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHRoaXMuZHluYW1pY09yaWdpblJlc3BvbnNlUG9saWN5LFxuICAgICAgY2FjaGVQb2xpY3ksXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAuLi5pbWFnZUJlaGF2aW9yT3B0aW9ucyxcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIHVzZXMgdXNlciBzcGVjaWZpZWQgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2V0RGlzdHJpYnV0aW9uKCk6IERpc3RyaWJ1dGlvbiB7XG4gICAgbGV0IGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uO1xuICAgIGlmICh0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbikge1xuICAgICAgZGlzdHJpYnV0aW9uID0gdGhpcy5wcm9wcy5kaXN0cmlidXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjEsXG4gICAgICAgIGRlZmF1bHRCZWhhdmlvcjogdGhpcy5keW5hbWljQmVoYXZpb3JPcHRpb25zLFxuICAgICAgICAvLyBiZXN0IHRvIHVzZSBIVFRQIDIgYW5kIDMgZm9yIGNvbXBhdGFiaWxpdHkgKEhUVFAgMikgYW5kIHBlcmZvcm1hbmNlIChIVFRQMylcbiAgICAgICAgLy8gQ2xvdWRGcm9udCB3aWxsIGNob29zZSBiZXN0IG9wdGlvbiBmb3IgY2xpZW50XG4gICAgICAgIGh0dHBWZXJzaW9uOiBIdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgICAgY29tbWVudDogdGhpcy5nZXRDb21tZW50KFxuICAgICAgICAgIFwiTmV4dEpTIERpc3RyaWJ1dGlvblwiLFxuICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmRpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkaXN0cmlidXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhZGREeW5hbWljQmVoYXZpb3JzKCkge1xuICAgIC8vIEltYWdlIEJlaGF2aW9yXG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoXG4gICAgICB0aGlzLmdldFBhdGhQYXR0ZXJuKFwiX25leHQvaW1hZ2UqXCIpLFxuICAgICAgdGhpcy5pbWFnZUJlaGF2aW9yT3B0aW9ucy5vcmlnaW4sXG4gICAgICB0aGlzLmltYWdlQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG4gICAgLy8gUm9vdCBQYXRoIEJlaGF2aW9yc1xuICAgIGlmICh0aGlzLmJhc2VQYXRoKSB7XG4gICAgICAvLyBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGJhc2VQYXRoIHdlIGRvbid0IHVzZSAvIGluc3RlYWQgd2UgdXNlIC9iYXNlLXBhdGhcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKFxuICAgICAgICBgLyR7dGhpcy5iYXNlUGF0aH1gLFxuICAgICAgICB0aGlzLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMub3JpZ2luLFxuICAgICAgICB0aGlzLmR5bmFtaWNCZWhhdmlvck9wdGlvbnMsXG4gICAgICApO1xuICAgICAgLy8gd2hlbiBiYXNlUGF0aCBpcyBzZXQsIHdlIGVtdWxhdGUgdGhlIFwiZGVmYXVsdCBiZWhhdmlvclwiICgqKSBmb3IgdGhlIHNpdGUgYXMgYC9iYXNlLXBhdGgvKmBcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKFxuICAgICAgICB0aGlzLmdldFBhdGhQYXR0ZXJuKFwiKlwiKSxcbiAgICAgICAgdGhpcy5keW5hbWljQmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgICAgdGhpcy5keW5hbWljQmVoYXZpb3JPcHRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgbm8gYmFzZSBwYXRoLCB0aGVuIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBoYW5kbGUgYWxsIG90aGVyIHBhdGhzXG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkU3RhdGljQmVoYXZpb3JzKCkge1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKFxuICAgICAgdGhpcy5nZXRQYXRoUGF0dGVybihcIl9uZXh0L3N0YXRpYypcIiksXG4gICAgICB0aGlzLnN0YXRpY09yaWdpbixcbiAgICAgIHRoaXMuc3RhdGljQmVoYXZpb3JPcHRpb25zLFxuICAgICk7XG4gICAgLy8gMjIgPSAyNSAobWF4KSAtIDEgKF9uZXh0L2ltYWdlKSAtIDEgKF9uZXh0L3N0YXRpYykgLSAxICgqKVxuICAgIGlmICh0aGlzLnByb3BzLnB1YmxpY0RpckVudHJpZXMubGVuZ3RoID49IDIyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUb28gbWFueSBwdWJsaWMvIGZpbGVzIGluIE5leHQuanMgYnVpbGQuIENsb3VkRnJvbnQgbGltaXRzIERpc3RyaWJ1dGlvbnMgdG8gMjUgQ2FjaGUgQmVoYXZpb3JzLiBTZWUgZG9jdW1lbnRlZCBsaW1pdCBoZXJlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY2xvdWRmcm9udC1saW1pdHMuaHRtbCNsaW1pdHMtd2ViLWRpc3RyaWJ1dGlvbnMuIFRyeSBpbmNsdWRpbmcgYWxsIHB1YmxpYyBmaWxlcyBpbnRvIDEgdG9wIGxldmVsIGRpcmVjdG9yeSAoaS5lLiBzdGF0aWMvKikuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHVibGljRmlsZSBvZiB0aGlzLnByb3BzLnB1YmxpY0RpckVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gcHVibGljRmlsZS5pc0RpcmVjdG9yeVxuICAgICAgICA/IGAke3B1YmxpY0ZpbGUubmFtZX0vKmBcbiAgICAgICAgOiBwdWJsaWNGaWxlLm5hbWU7XG4gICAgICBpZiAoIS9eW2EtekEtWjAtOV9cXC0uKiQvflwiJ0A6Kz8mXSskLy50ZXN0KHBhdGhQYXR0ZXJuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgQ2xvdWRGcm9udCBEaXN0cmlidXRpb24gQ2FjaGUgQmVoYXZpb3IgUGF0aCBQYXR0ZXJuOiAke3BhdGhQYXR0ZXJufS4gUGxlYXNlIHNlZSBkb2N1bWVudGF0aW9uIGhlcmU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzUGF0aFBhdHRlcm5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZmluYWxQYXRoUGF0dGVybiA9IHRoaXMuZ2V0UGF0aFBhdHRlcm4ocGF0aFBhdHRlcm4pO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoXG4gICAgICAgIGZpbmFsUGF0aFBhdHRlcm4sXG4gICAgICAgIHRoaXMuc3RhdGljT3JpZ2luLFxuICAgICAgICB0aGlzLnN0YXRpY0JlaGF2aW9yT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHByZXBlbmRzIGJhc2UgcGF0aCB0byBnaXZlbiBwYXRoIHBhdHRlcm4uXG4gICAqL1xuICBwcml2YXRlIGdldFBhdGhQYXR0ZXJuKHBhdGhQYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlUGF0aFxuICAgICAgPyBgLyR7am9pblBhdGgodGhpcy5iYXNlUGF0aCwgcGF0aFBhdHRlcm4pfWBcbiAgICAgIDogcGF0aFBhdHRlcm47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@ const get_architecture_1 = require("./utils/get-architecture");
|
|
|
17
17
|
* current build id AND are older than `msTtl`
|
|
18
18
|
*/
|
|
19
19
|
class NextjsPostDeploy extends constructs_1.Construct {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.6.0" };
|
|
21
21
|
customResource;
|
|
22
22
|
lambdaFunction;
|
|
23
23
|
props;
|
|
@@ -34,9 +34,27 @@ export interface NextjsStaticAssetsProps {
|
|
|
34
34
|
export declare class NextjsStaticAssets extends Construct {
|
|
35
35
|
bucket: IBucket;
|
|
36
36
|
deployment: BucketDeployment;
|
|
37
|
+
/**
|
|
38
|
+
* S3 key prefix the assets are actually uploaded under, normalized to a bare
|
|
39
|
+
* path segment (empty when they live at the bucket root).
|
|
40
|
+
*
|
|
41
|
+
* Consumers that read assets back out of the bucket (the image optimization
|
|
42
|
+
* Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
|
|
43
|
+
* `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
|
|
44
|
+
* prefix outright.
|
|
45
|
+
*/
|
|
46
|
+
readonly keyPrefix: string;
|
|
37
47
|
private stagingDir?;
|
|
38
48
|
private props;
|
|
39
49
|
constructor(scope: Construct, id: string, props: NextjsStaticAssetsProps);
|
|
50
|
+
/**
|
|
51
|
+
* Resolves the single prefix both the upload and the URLs use. A
|
|
52
|
+
* `bucketDeploymentProps.destinationKeyPrefix` override wins over `basePath`,
|
|
53
|
+
* but it's normalized here and `createDeployment` sets the normalized value
|
|
54
|
+
* after the override spread, so `keyPrefix` can't drift from where the assets
|
|
55
|
+
* land.
|
|
56
|
+
*/
|
|
57
|
+
private resolveKeyPrefix;
|
|
40
58
|
private createBucket;
|
|
41
59
|
private createDeployment;
|
|
42
60
|
/**
|
|
@@ -10,21 +10,47 @@ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
|
10
10
|
const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
|
|
11
11
|
const constructs_1 = require("constructs");
|
|
12
12
|
const constants_1 = require("./constants");
|
|
13
|
+
const base_path_1 = require("./utils/base-path");
|
|
13
14
|
/**
|
|
14
15
|
* Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
|
|
15
16
|
*/
|
|
16
17
|
class NextjsStaticAssets extends constructs_1.Construct {
|
|
17
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.6.0" };
|
|
18
19
|
bucket;
|
|
19
20
|
deployment;
|
|
21
|
+
/**
|
|
22
|
+
* S3 key prefix the assets are actually uploaded under, normalized to a bare
|
|
23
|
+
* path segment (empty when they live at the bucket root).
|
|
24
|
+
*
|
|
25
|
+
* Consumers that read assets back out of the bucket (the image optimization
|
|
26
|
+
* Lambda, `NextjsApi`'s S3 integrations) must use this rather than the
|
|
27
|
+
* `basePath` prop, since `overrides.bucketDeploymentProps` can replace the
|
|
28
|
+
* prefix outright.
|
|
29
|
+
*/
|
|
30
|
+
keyPrefix;
|
|
20
31
|
stagingDir;
|
|
21
32
|
props;
|
|
22
33
|
constructor(scope, id, props) {
|
|
23
34
|
super(scope, id);
|
|
24
35
|
this.props = props;
|
|
36
|
+
this.keyPrefix = this.resolveKeyPrefix();
|
|
25
37
|
this.bucket = props.bucket ?? this.createBucket();
|
|
26
38
|
this.deployment = this.createDeployment();
|
|
27
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolves the single prefix both the upload and the URLs use. A
|
|
42
|
+
* `bucketDeploymentProps.destinationKeyPrefix` override wins over `basePath`,
|
|
43
|
+
* but it's normalized here and `createDeployment` sets the normalized value
|
|
44
|
+
* after the override spread, so `keyPrefix` can't drift from where the assets
|
|
45
|
+
* land.
|
|
46
|
+
*/
|
|
47
|
+
resolveKeyPrefix() {
|
|
48
|
+
const deploymentOverrides = this.props.overrides?.bucketDeploymentProps;
|
|
49
|
+
const prefix = deploymentOverrides && "destinationKeyPrefix" in deploymentOverrides
|
|
50
|
+
? deploymentOverrides.destinationKeyPrefix
|
|
51
|
+
: this.props.basePath;
|
|
52
|
+
return (0, base_path_1.normalizeBasePath)(prefix);
|
|
53
|
+
}
|
|
28
54
|
createBucket() {
|
|
29
55
|
return new aws_s3_1.Bucket(this, "Bucket", {
|
|
30
56
|
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
@@ -44,13 +70,9 @@ class NextjsStaticAssets extends constructs_1.Construct {
|
|
|
44
70
|
- A 'public' directory at: ${(0, node_path_1.join)(this.props.buildDirectory, "public")}
|
|
45
71
|
- A '.next/static' directory at: ${(0, node_path_1.join)(this.props.buildDirectory, ".next", "static")}`);
|
|
46
72
|
}
|
|
47
|
-
const destinationKeyPrefix = this.props.basePath
|
|
48
|
-
? this.props.basePath.replace(/^\//, "")
|
|
49
|
-
: undefined;
|
|
50
73
|
return new aws_s3_deployment_1.BucketDeployment(this, "Deployment", {
|
|
51
74
|
sources: [aws_s3_deployment_1.Source.asset(this.stagingDir)],
|
|
52
75
|
destinationBucket: this.bucket,
|
|
53
|
-
destinationKeyPrefix,
|
|
54
76
|
// Add BUILD_ID as metadata to all objects for version tracking
|
|
55
77
|
metadata: {
|
|
56
78
|
BUILD_ID: this.props.buildId,
|
|
@@ -58,6 +80,11 @@ class NextjsStaticAssets extends constructs_1.Construct {
|
|
|
58
80
|
prune: false, // Don't delete existing assets to prevent 404s during deployment, pruning will be handled by post-deploy
|
|
59
81
|
// S3Deployment automatically detects content types based on file extensions
|
|
60
82
|
...this.props.overrides?.bucketDeploymentProps,
|
|
83
|
+
// Set after the spread: `resolveKeyPrefix` already folded in any
|
|
84
|
+
// `destinationKeyPrefix` override, so this is the normalized form of it.
|
|
85
|
+
// Letting the raw override through here would upload the assets somewhere
|
|
86
|
+
// other than the `keyPrefix` used to build their URLs.
|
|
87
|
+
destinationKeyPrefix: this.keyPrefix || undefined,
|
|
61
88
|
});
|
|
62
89
|
}
|
|
63
90
|
/**
|
|
@@ -113,4 +140,4 @@ class NextjsStaticAssets extends constructs_1.Construct {
|
|
|
113
140
|
}
|
|
114
141
|
}
|
|
115
142
|
exports.NextjsStaticAssets = NextjsStaticAssets;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHFDQU9pQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUE0QztBQUM1QywrQ0FNNEI7QUFDNUIscUVBSXVDO0FBQ3ZDLDJDQUF1QztBQUN2QywyQ0FBeUM7QUErQnpDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUzs7SUFDL0MsTUFBTSxDQUFVO0lBQ2hCLFVBQVUsQ0FBbUI7SUFDckIsVUFBVSxDQUFVO0lBRXBCLEtBQUssQ0FBMEI7SUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDaEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLDBCQUFpQixDQUFDLFNBQVM7WUFDOUMsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7WUFDdkMsaUJBQWlCLEVBQUUsR0FBRztZQUN0QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVc7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFn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QUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLHNCQUFVLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLG9CQUFvQjtZQUNwQixJQUFJLENBQUM7Z0JBQ0gsSUFBQSxnQkFBTSxFQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx3QkFBd0I7WUFDMUIsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsT0FBZTtRQUNyQyxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsSUFBSSxJQUFBLGtCQUFRLEVBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEUsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7O0FBN0dILGdEQThHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNwU3luYyxcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcm1TeW5jLFxuICBzdGF0U3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQmxvY2tQdWJsaWNBY2Nlc3MsXG4gIEJ1Y2tldCxcbiAgQnVja2V0RW5jcnlwdGlvbixcbiAgQnVja2V0UHJvcHMsXG4gIElCdWNrZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIEJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgU291cmNlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBMT0dfUFJFRklYIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgYnVja2V0UHJvcHM/OiBCdWNrZXRQcm9wcztcbiAgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudFByb3BzPzogQnVja2V0RGVwbG95bWVudFByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3Igc3RhdGljIGFzc2V0cy4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHNraXAgY3JlYXRpbmcgYSBuZXcgYnVja2V0IGFuZCBkZXBsb3kgYXNzZXRzIHRvIHRoaXMgYnVja2V0IGluc3RlYWQuXG4gICAqIFVzZSB3aXRoIGBiYXNlUGF0aGAgdG8gaXNvbGF0ZSBhc3NldHMgcGVyIGJyYW5jaCB3aGVuIHNoYXJpbmcgYSBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQuXG4gICAqIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIC5uZXh0IGRpcmVjdG9yeSBhbmQgb3RoZXIgYnVpbGQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJ1aWxkIElEIGZyb20gTmV4dGpzQnVpbGQgdG8gdHJhY2sgYXNzZXQgdmVyc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBTMyBCdWNrZXQgZm9yIHB1YmxpYyBhbmQgX25leHQvc3RhdGljIGFzc2V0cyBhbmQgZGVwbG95cyB0aGVtIHVzaW5nIFMzRGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1N0YXRpY0Fzc2V0cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGJ1Y2tldDogSUJ1Y2tldDtcbiAgZGVwbG95bWVudDogQnVja2V0RGVwbG95bWVudDtcbiAgcHJpdmF0ZSBzdGFnaW5nRGlyPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcHJvcHM6IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0ID8/IHRoaXMuY3JlYXRlQnVja2V0KCk7XG4gICAgdGhpcy5kZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJ1Y2tldCgpIHtcbiAgICByZXR1cm4gbmV3IEJ1Y2tldCh0aGlzLCBcIkJ1Y2tldFwiLCB7XG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgbWluaW11bVRMU1ZlcnNpb246IDEuMixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5idWNrZXRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudCgpIHtcbiAgICAvLyBDcmVhdGUgYSBzdGFnaW5nIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IHN0cnVjdHVyZVxuICAgIHRoaXMuc3RhZ2luZ0RpciA9IHRoaXMuY3JlYXRlU3RhZ2luZ0RpcmVjdG9yeSgpO1xuXG4gICAgaWYgKCF0aGlzLnN0YWdpbmdEaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIHN0YXRpYyBhc3NldHMgZm91bmQgdG8gZGVwbG95LiBFbnN1cmUgeW91ciBOZXh0LmpzIGJ1aWxkIG91dHB1dCBjb250YWlucyBlaXRoZXI6XG4gICAgICAgIC0gQSAncHVibGljJyBkaXJlY3RvcnkgYXQ6ICR7am9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcInB1YmxpY1wiKX1cbiAgICAgICAgLSBBICcubmV4dC9zdGF0aWMnIGRpcmVjdG9yeSBhdDogJHtqb2luKHRoaXMucHJvcHMuYnVpbGREaXJlY3RvcnksIFwiLm5leHRcIiwgXCJzdGF0aWNcIil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVzdGluYXRpb25LZXlQcmVmaXggPSB0aGlzLnByb3BzLmJhc2VQYXRoXG4gICAgICA/IHRoaXMucHJvcHMuYmFzZVBhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveW1lbnRcIiwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldCh0aGlzLnN0YWdpbmdEaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4LFxuICAgICAgLy8gQWRkIEJVSUxEX0lEIGFzIG1ldGFkYXRhIHRvIGFsbCBvYmplY3RzIGZvciB2ZXJzaW9uIHRyYWNraW5nXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBCVUlMRF9JRDogdGhpcy5wcm9wcy5idWlsZElkLFxuICAgICAgfSxcbiAgICAgIHBydW5lOiBmYWxzZSwgLy8gRG9uJ3QgZGVsZXRlIGV4aXN0aW5nIGFzc2V0cyB0byBwcmV2ZW50IDQwNHMgZHVyaW5nIGRlcGxveW1lbnQsIHBydW5pbmcgd2lsbCBiZSBoYW5kbGVkIGJ5IHBvc3QtZGVwbG95XG4gICAgICAvLyBTM0RlcGxveW1lbnQgYXV0b21hdGljYWxseSBkZXRlY3RzIGNvbnRlbnQgdHlwZXMgYmFzZWQgb24gZmlsZSBleHRlbnNpb25zXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uYnVja2V0RGVwbG95bWVudFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0YWdpbmcgZGlyZWN0b3J5IHdpdGggdGhlIGNvcnJlY3Qgc3RydWN0dXJlOlxuICAgKiAtIHB1YmxpYy8gZmlsZXMgZ28gdG8gcm9vdFxuICAgKiAtIC5uZXh0L3N0YXRpYy8gZmlsZXMgZ28gdG8gX25leHQvc3RhdGljL1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVTdGFnaW5nRGlyZWN0b3J5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhZ2luZ0RpciA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwibmV4dGpzLWFzc2V0cy1cIikpO1xuICAgIGxldCBoYXNBc3NldHMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDb3B5IHB1YmxpYyBkaXJlY3RvcnkgY29udGVudHMgdG8gc3RhZ2luZyByb290XG4gICAgICBjb25zdCBwdWJsaWNQYXRoID0gam9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcInB1YmxpY1wiKTtcbiAgICAgIGlmICh0aGlzLmRpcmVjdG9yeUV4aXN0cyhwdWJsaWNQYXRoKSkge1xuICAgICAgICBjcFN5bmMocHVibGljUGF0aCwgc3RhZ2luZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGhhc0Fzc2V0cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgLm5leHQvc3RhdGljIHRvIHN0YWdpbmcvX25leHQvc3RhdGljXG4gICAgICBjb25zdCBzdGF0aWNQYXRoID0gam9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0b3J5RXhpc3RzKHN0YXRpY1BhdGgpKSB7XG4gICAgICAgIGNvbnN0IG5leHREaXIgPSBqb2luKHN0YWdpbmdEaXIsIFwiX25leHRcIik7XG4gICAgICAgIGNvbnN0IHN0YXRpY0Rlc3REaXIgPSBqb2luKG5leHREaXIsIFwic3RhdGljXCIpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBfbmV4dCBkaXJlY3RvcnlcbiAgICAgICAgbWtkaXJTeW5jKG5leHREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgIC8vIENvcHkgc3RhdGljIGFzc2V0c1xuICAgICAgICBjcFN5bmMoc3RhdGljUGF0aCwgc3RhdGljRGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGhhc0Fzc2V0cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYXNBc3NldHMgPyBzdGFnaW5nRGlyIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke0xPR19QUkVGSVh9IEVycm9yIGNyZWF0aW5nIHN0YWdpbmcgZGlyZWN0b3J5OmAsIGVycm9yKTtcbiAgICAgIC8vIENsZWFuIHVwIG9uIGVycm9yXG4gICAgICB0cnkge1xuICAgICAgICBybVN5bmMoc3RhZ2luZ0RpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIGRpcmVjdG9yeUV4aXN0cyhkaXJQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGV4aXN0c1N5bmMoZGlyUGF0aCkgJiYgc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV4dGpzLXN0YXRpYy1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHFDQU9pQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUE0QztBQUM1QywrQ0FNNEI7QUFDNUIscUVBSXVDO0FBQ3ZDLDJDQUF1QztBQUN2QywyQ0FBeUM7QUFDekMsaURBQXNEO0FBK0J0RDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7O0lBQy9DLE1BQU0sQ0FBVTtJQUNoQixVQUFVLENBQW1CO0lBQzdCOzs7Ozs7OztPQVFHO0lBQ00sU0FBUyxDQUFTO0lBQ25CLFVBQVUsQ0FBVTtJQUVwQixLQUFLLENBQTBCO0lBRXZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCO1FBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQ1YsbUJBQW1CLElBQUksc0JBQXNCLElBQUksbUJBQW1CO1lBQ2xFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0I7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxL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TyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUU5Qyx5QkFBeUI7Z0JBQ3pCLElBQUEsbUJBQVMsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFeEMscUJBQXFCO2dCQUNyQixJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsc0JBQVUsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdCQUF3QjtZQUMxQixDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxPQUFlO1FBQ3JDLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUEsa0JBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzs7QUF4SUgsZ0RBeUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3BTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICBybVN5bmMsXG4gIHN0YXRTeW5jLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgQnVja2V0LFxuICBCdWNrZXRFbmNyeXB0aW9uLFxuICBCdWNrZXRQcm9wcyxcbiAgSUJ1Y2tldCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtcbiAgQnVja2V0RGVwbG95bWVudCxcbiAgQnVja2V0RGVwbG95bWVudFByb3BzLFxuICBTb3VyY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSBcIi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgYnVja2V0UHJvcHM/OiBCdWNrZXRQcm9wcztcbiAgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudFByb3BzPzogQnVja2V0RGVwbG95bWVudFByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3Igc3RhdGljIGFzc2V0cy4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHNraXAgY3JlYXRpbmcgYSBuZXcgYnVja2V0IGFuZCBkZXBsb3kgYXNzZXRzIHRvIHRoaXMgYnVja2V0IGluc3RlYWQuXG4gICAqIFVzZSB3aXRoIGBiYXNlUGF0aGAgdG8gaXNvbGF0ZSBhc3NldHMgcGVyIGJyYW5jaCB3aGVuIHNoYXJpbmcgYSBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQuXG4gICAqIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIC5uZXh0IGRpcmVjdG9yeSBhbmQgb3RoZXIgYnVpbGQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJ1aWxkIElEIGZyb20gTmV4dGpzQnVpbGQgdG8gdHJhY2sgYXNzZXQgdmVyc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBTMyBCdWNrZXQgZm9yIHB1YmxpYyBhbmQgX25leHQvc3RhdGljIGFzc2V0cyBhbmQgZGVwbG95cyB0aGVtIHVzaW5nIFMzRGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc1N0YXRpY0Fzc2V0cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGJ1Y2tldDogSUJ1Y2tldDtcbiAgZGVwbG95bWVudDogQnVja2V0RGVwbG95bWVudDtcbiAgLyoqXG4gICAqIFMzIGtleSBwcmVmaXggdGhlIGFzc2V0cyBhcmUgYWN0dWFsbHkgdXBsb2FkZWQgdW5kZXIsIG5vcm1hbGl6ZWQgdG8gYSBiYXJlXG4gICAqIHBhdGggc2VnbWVudCAoZW1wdHkgd2hlbiB0aGV5IGxpdmUgYXQgdGhlIGJ1Y2tldCByb290KS5cbiAgICpcbiAgICogQ29uc3VtZXJzIHRoYXQgcmVhZCBhc3NldHMgYmFjayBvdXQgb2YgdGhlIGJ1Y2tldCAodGhlIGltYWdlIG9wdGltaXphdGlvblxuICAgKiBMYW1iZGEsIGBOZXh0anNBcGlgJ3MgUzMgaW50ZWdyYXRpb25zKSBtdXN0IHVzZSB0aGlzIHJhdGhlciB0aGFuIHRoZVxuICAgKiBgYmFzZVBhdGhgIHByb3AsIHNpbmNlIGBvdmVycmlkZXMuYnVja2V0RGVwbG95bWVudFByb3BzYCBjYW4gcmVwbGFjZSB0aGVcbiAgICogcHJlZml4IG91dHJpZ2h0LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhZ2luZ0Rpcj86IHN0cmluZztcblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmtleVByZWZpeCA9IHRoaXMucmVzb2x2ZUtleVByZWZpeCgpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0ID8/IHRoaXMuY3JlYXRlQnVja2V0KCk7XG4gICAgdGhpcy5kZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHNpbmdsZSBwcmVmaXggYm90aCB0aGUgdXBsb2FkIGFuZCB0aGUgVVJMcyB1c2UuIEFcbiAgICogYGJ1Y2tldERlcGxveW1lbnRQcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeGAgb3ZlcnJpZGUgd2lucyBvdmVyIGBiYXNlUGF0aGAsXG4gICAqIGJ1dCBpdCdzIG5vcm1hbGl6ZWQgaGVyZSBhbmQgYGNyZWF0ZURlcGxveW1lbnRgIHNldHMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogYWZ0ZXIgdGhlIG92ZXJyaWRlIHNwcmVhZCwgc28gYGtleVByZWZpeGAgY2FuJ3QgZHJpZnQgZnJvbSB3aGVyZSB0aGUgYXNzZXRzXG4gICAqIGxhbmQuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVLZXlQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXBsb3ltZW50T3ZlcnJpZGVzID0gdGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcztcbiAgICBjb25zdCBwcmVmaXggPVxuICAgICAgZGVwbG95bWVudE92ZXJyaWRlcyAmJiBcImRlc3RpbmF0aW9uS2V5UHJlZml4XCIgaW4gZGVwbG95bWVudE92ZXJyaWRlc1xuICAgICAgICA/IGRlcGxveW1lbnRPdmVycmlkZXMuZGVzdGluYXRpb25LZXlQcmVmaXhcbiAgICAgICAgOiB0aGlzLnByb3BzLmJhc2VQYXRoO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChwcmVmaXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCdWNrZXQoKSB7XG4gICAgcmV0dXJuIG5ldyBCdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIG1pbmltdW1UTFNWZXJzaW9uOiAxLjIsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uYnVja2V0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveW1lbnQoKSB7XG4gICAgLy8gQ3JlYXRlIGEgc3RhZ2luZyBkaXJlY3Rvcnkgd2l0aCB0aGUgY29ycmVjdCBzdHJ1Y3R1cmVcbiAgICB0aGlzLnN0YWdpbmdEaXIgPSB0aGlzLmNyZWF0ZVN0YWdpbmdEaXJlY3RvcnkoKTtcblxuICAgIGlmICghdGhpcy5zdGFnaW5nRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBzdGF0aWMgYXNzZXRzIGZvdW5kIHRvIGRlcGxveS4gRW5zdXJlIHlvdXIgTmV4dC5qcyBidWlsZCBvdXRwdXQgY29udGFpbnMgZWl0aGVyOlxuICAgICAgICAtIEEgJ3B1YmxpYycgZGlyZWN0b3J5IGF0OiAke2pvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIil9XG4gICAgICAgIC0gQSAnLm5leHQvc3RhdGljJyBkaXJlY3RvcnkgYXQ6ICR7am9pbih0aGlzLnByb3BzLmJ1aWxkRGlyZWN0b3J5LCBcIi5uZXh0XCIsIFwic3RhdGljXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcIkRlcGxveW1lbnRcIiwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldCh0aGlzLnN0YWdpbmdEaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIC8vIEFkZCBCVUlMRF9JRCBhcyBtZXRhZGF0YSB0byBhbGwgb2JqZWN0cyBmb3IgdmVyc2lvbiB0cmFja2luZ1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgQlVJTERfSUQ6IHRoaXMucHJvcHMuYnVpbGRJZCxcbiAgICAgIH0sXG4gICAgICBwcnVuZTogZmFsc2UsIC8vIERvbid0IGRlbGV0ZSBleGlzdGluZyBhc3NldHMgdG8gcHJldmVudCA0MDRzIGR1cmluZyBkZXBsb3ltZW50LCBwcnVuaW5nIHdpbGwgYmUgaGFuZGxlZCBieSBwb3N0LWRlcGxveVxuICAgICAgLy8gUzNEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBjb250ZW50IHR5cGVzIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uc1xuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmJ1Y2tldERlcGxveW1lbnRQcm9wcyxcbiAgICAgIC8vIFNldCBhZnRlciB0aGUgc3ByZWFkOiBgcmVzb2x2ZUtleVByZWZpeGAgYWxyZWFkeSBmb2xkZWQgaW4gYW55XG4gICAgICAvLyBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBzbyB0aGlzIGlzIHRoZSBub3JtYWxpemVkIGZvcm0gb2YgaXQuXG4gICAgICAvLyBMZXR0aW5nIHRoZSByYXcgb3ZlcnJpZGUgdGhyb3VnaCBoZXJlIHdvdWxkIHVwbG9hZCB0aGUgYXNzZXRzIHNvbWV3aGVyZVxuICAgICAgLy8gb3RoZXIgdGhhbiB0aGUgYGtleVByZWZpeGAgdXNlZCB0byBidWlsZCB0aGVpciBVUkxzLlxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IHRoaXMua2V5UHJlZml4IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFnaW5nIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IHN0cnVjdHVyZTpcbiAgICogLSBwdWJsaWMvIGZpbGVzIGdvIHRvIHJvb3RcbiAgICogLSAubmV4dC9zdGF0aWMvIGZpbGVzIGdvIHRvIF9uZXh0L3N0YXRpYy9cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3RhZ2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YWdpbmdEaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1hc3NldHMtXCIpKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBwdWJsaWMgZGlyZWN0b3J5IGNvbnRlbnRzIHRvIHN0YWdpbmcgcm9vdFxuICAgICAgY29uc3QgcHVibGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCJwdWJsaWNcIik7XG4gICAgICBpZiAodGhpcy5kaXJlY3RvcnlFeGlzdHMocHVibGljUGF0aCkpIHtcbiAgICAgICAgY3BTeW5jKHB1YmxpY1BhdGgsIHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IC5uZXh0L3N0YXRpYyB0byBzdGFnaW5nL19uZXh0L3N0YXRpY1xuICAgICAgY29uc3Qgc3RhdGljUGF0aCA9IGpvaW4odGhpcy5wcm9wcy5idWlsZERpcmVjdG9yeSwgXCIubmV4dFwiLCBcInN0YXRpY1wiKTtcbiAgICAgIGlmICh0aGlzLmRpcmVjdG9yeUV4aXN0cyhzdGF0aWNQYXRoKSkge1xuICAgICAgICBjb25zdCBuZXh0RGlyID0gam9pbihzdGFnaW5nRGlyLCBcIl9uZXh0XCIpO1xuICAgICAgICBjb25zdCBzdGF0aWNEZXN0RGlyID0gam9pbihuZXh0RGlyLCBcInN0YXRpY1wiKTtcblxuICAgICAgICAvLyBDcmVhdGUgX25leHQgZGlyZWN0b3J5XG4gICAgICAgIG1rZGlyU3luYyhuZXh0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBDb3B5IHN0YXRpYyBhc3NldHNcbiAgICAgICAgY3BTeW5jKHN0YXRpY1BhdGgsIHN0YXRpY0Rlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBoYXNBc3NldHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFzQXNzZXRzID8gc3RhZ2luZ0RpciA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtMT0dfUFJFRklYfSBFcnJvciBjcmVhdGluZyBzdGFnaW5nIGRpcmVjdG9yeTpgLCBlcnJvcik7XG4gICAgICAvLyBDbGVhbiB1cCBvbiBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgcm1TeW5jKHN0YWdpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBkaXJlY3RvcnlFeGlzdHMoZGlyUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBleGlzdHNTeW5jKGRpclBhdGgpICYmIHN0YXRTeW5jKGRpclBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|