@orcabus/platform-cdk-constructs 0.0.41 → 0.0.43

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 CHANGED
@@ -6756,6 +6756,6 @@
6756
6756
  "symbolId": "shared-config/slack:SlackAlerts"
6757
6757
  }
6758
6758
  },
6759
- "version": "0.0.41",
6760
- "fingerprint": "u64aE4R2hZOGLMsqUYbqYeCBjwlwFcLpWP0r4l1MDkI="
6759
+ "version": "0.0.43",
6760
+ "fingerprint": "YSlLcVlXhkJ2rWV9TD1SfBIOuMH4gCYXv6HSkM9za/g="
6761
6761
  }
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
15
15
  const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
16
16
  const config_1 = require("./config");
17
17
  class OrcaBusApiGateway extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.41" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.43" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.41" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.43" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -32,7 +32,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
32
32
  * before using this construct.
33
33
  */
34
34
  class DeploymentStackPipeline extends constructs_1.Construct {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.41" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.43" };
36
36
  /**
37
37
  * The code pipeline construct that is created.
38
38
  */
package/dynamodb/index.js CHANGED
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const config_1 = require("./config");
42
42
  class DynamoDbPartitionedConstruct extends constructs_1.Construct {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.41" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.43" };
44
44
  table;
45
45
  constructor(scope, id, props) {
46
46
  super(scope, id);
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
75
75
  }
76
76
  exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
77
77
  class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.41" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.43" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
55
55
  ['ARM64']: lambda.Architecture.ARM_64
56
56
  };
57
57
  class EcsFargateTaskConstruct extends constructs_1.Construct {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.41" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.43" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
package/lambda/index.js CHANGED
@@ -56,7 +56,7 @@ function getPythonUvDockerImage() {
56
56
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
57
57
  }
58
58
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
59
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.41" };
59
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.43" };
60
60
  // Class constructs, to be used for caching the layers
61
61
  // This means that if there are multiple lambdas throughout the stack
62
62
  // They will all use the same layer
@@ -124,7 +124,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
124
124
  buildOrcabusApiToolsLayer(scope) {
125
125
  // Only build orcabus api layer if it doesn't exist
126
126
  if (!PythonUvFunction.orcabusApiToolsLayer.has(scope)) {
127
- const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(this, 'orcabusApiToolsLayer', {
127
+ const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(scope, 'orcabusApiToolsLayer', {
128
128
  entry: path_1.default.join(__dirname, 'layers/orcabus_api_tools'),
129
129
  compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
130
130
  compatibleArchitectures: [lambda.Architecture.ARM_64],
@@ -152,7 +152,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
152
152
  buildMartToolsLayer(scope) {
153
153
  // Only build the layer if it doesn't exist
154
154
  if (!PythonUvFunction.martLayer.has(scope)) {
155
- const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(this, 'martToolsLayer', {
155
+ const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(scope, 'martToolsLayer', {
156
156
  entry: path_1.default.join(__dirname, 'layers/mart_tools'),
157
157
  compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
158
158
  compatibleArchitectures: [lambda.Architecture.ARM_64],
@@ -180,7 +180,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
180
180
  buildIcav2Layer(scope) {
181
181
  // Only build the layer if it doesn't exist
182
182
  if (!PythonUvFunction.icav2Layer.has(scope)) {
183
- const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(this, 'icav2ToolsLayer', {
183
+ const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(scope, 'icav2ToolsLayer', {
184
184
  entry: path_1.default.join(__dirname, 'layers/icav2_tools'),
185
185
  compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
186
186
  compatibleArchitectures: [lambda.Architecture.ARM_64],
@@ -208,7 +208,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
208
208
  buildFastApiLayer(scope) {
209
209
  // Only build the layer if it doesn't exist
210
210
  if (!PythonUvFunction.fastApiLayer.has(scope)) {
211
- const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(this, 'fastApiLayer', {
211
+ const layer = new aws_lambda_python_alpha_1.PythonLayerVersion(scope, 'fastApiLayer', {
212
212
  entry: path_1.default.join(__dirname, 'layers/fastapi_tools'),
213
213
  compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
214
214
  compatibleArchitectures: [lambda.Architecture.ARM_64],
@@ -324,4 +324,4 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
324
324
  }
325
325
  }
326
326
  exports.PythonUvFunction = PythonUvFunction;
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUFvRjtBQUdwRixTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYztpQkFDN0Y7Z0JBQ0QsS0FBSyxFQUFFLHNCQUFzQixFQUFFO2dCQUMvQixZQUFZLEVBQUU7b0JBQ1YsYUFBYTtvQkFDYixjQUFjLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjt3QkFDOUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxjQUFxQyxJQUFJLEVBQUUsQ0FBQztvQkFDckYsQ0FBQztvQkFDRCxhQUFhO29CQUNiLGFBQWEsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO3dCQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsYUFBb0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLFNBQVMsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDbkksQ0FBQztpQkFDSjthQUNKO1lBQ0QsZ0JBQWdCLEVBQ1osS0FBSyxDQUFDLGdCQUFnQjtnQkFDdEIseUNBQTRCLENBQUMsV0FBVyxDQUFDLHFDQUF3QixDQUFDLFFBQVEsRUFBRTtvQkFDeEUsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFNBQVMsRUFBRSxHQUFHO29CQUNkLFFBQVEsRUFBRSxxQ0FBd0IsQ0FBQyxLQUFLO2lCQUMzQyxDQUFDO1NBQ1QsQ0FBQztRQUNGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTFCLElBQUksS0FBSyxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDcEMsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUE7WUFFM0QsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFxQixnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN4RixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUU3RCwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQXFCLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUM3RSxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMxQiwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUE7WUFFbEQsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBcUIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlFLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVCLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBcUIsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBZ0I7UUFDOUMsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLDRDQUFrQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtnQkFDL0QsS0FBSyxFQUFFLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDO2dCQUN2RCxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUNoRCx1QkFBdUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUNyRCxPQUFPLEVBQUUsTUFBTTtnQkFDZixXQUFXLEVBQUUsc0JBQXNCO2dCQUNuQyxRQUFRLEVBQUU7b0JBQ04sS0FBSyxFQUFFLHNCQUFzQixFQUFFO29CQUMvQixZQUFZLEVBQUU7d0JBQ1YsNkRBQTZEO3dCQUM3RCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjs0QkFDOUMsT0FBTyxFQUFFLENBQUM7d0JBQ2QsQ0FBQzt3QkFDRCxhQUFhLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjs0QkFDN0MsT0FBTztnQ0FDSCxlQUFlLFFBQVEsYUFBYSxTQUFTLEVBQUU7Z0NBQy9DLFFBQVEsU0FBUyw0Q0FBNEM7NkJBQ2hFLENBQUM7d0JBQ04sQ0FBQztxQkFDSjtpQkFDSjthQUNKLENBQUMsQ0FBQztZQUVILGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFnQjtRQUN4QywyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLDRDQUFrQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDekQsS0FBSyxFQUFFLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDO2dCQUNoRCxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUNoRCx1QkFBdUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUNyRCxPQUFPLEVBQUUsTUFBTTtnQkFDZixXQUFXLEVBQUUsZ0JBQWdCO2dCQUM3QixRQUFRLEVBQUU7b0JBQ04sS0FBSyxFQUFFLHNCQUFzQixFQUFFO29CQUMvQixZQUFZLEVBQUU7d0JBQ1YsNkRBQTZEO3dCQUM3RCxjQUFjLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjs0QkFDOUMsT0FBTyxFQUFFLENBQUM7d0JBQ2QsQ0FBQzt3QkFDRCxhQUFhLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjs0QkFDN0MsT0FBTztnQ0FDSCxlQUFlLFFBQVEsYUFBYSxTQUFTLEVBQUU7Z0NBQy9DLFFBQVEsU0FBUyw0Q0FBNEM7NkJBQ2hFLENBQUM7d0JBQ04sQ0FBQztxQkFDSjtpQkFDSjthQUNKLENBQUMsQ0FBQztZQUNILGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWdCO1FBQ3BDLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksNENBQWtCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO2dCQUMxRCxLQUFLLEVBQUUsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ2pELGtCQUFrQixFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQ2hELHVCQUF1QixFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ3JELE9BQU8sRUFBRSxNQUFNO2dCQUNmLFdBQVcsRUFBRSxpQkFBaUI7Z0JBQzlCLFFBQVEsRUFBRTtvQkFDTixLQUFLLEVBQUUsc0JBQXNCLEVBQUU7b0JBQy9CLFlBQVksRUFBRTt3QkFDViw2REFBNkQ7d0JBQzdELGNBQWMsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOzRCQUM5QyxPQUFPLEVBQUUsQ0FBQzt3QkFDZCxDQUFDO3dCQUNELGFBQWEsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOzRCQUM3QyxPQUFPO2dDQUNILGVBQWUsUUFBUSxhQUFhLFNBQVMsRUFBRTtnQ0FDL0MsUUFBUSxTQUFTLDRDQUE0Qzs2QkFDaEUsQ0FBQzt3QkFDTixDQUFDO3FCQUNKO2lCQUNKO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFnQjtRQUN0QywyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLDRDQUFrQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ3ZELEtBQUssRUFBRSxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQztnQkFDbkQsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDaEQsdUJBQXVCLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDckQsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLFFBQVEsRUFBRTtvQkFDTixLQUFLLEVBQUUsc0JBQXNCLEVBQUU7b0JBQy9CLFlBQVksRUFBRTt3QkFDViw2REFBNkQ7d0JBQzdELGNBQWMsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOzRCQUM5QyxPQUFPLEVBQUUsQ0FBQzt3QkFDZCxDQUFDO3dCQUNELGFBQWEsQ0FBQyxRQUFnQixFQUFFLFNBQWlCOzRCQUM3QyxPQUFPO2dDQUNILGVBQWUsUUFBUSxhQUFhLFNBQVMsRUFBRTtnQ0FDL0MsUUFBUSxTQUFTLDRDQUE0Qzs2QkFDaEUsQ0FBQzt3QkFDTixDQUFDO3FCQUNKO2lCQUNKO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FDdkIsS0FBNEI7UUFFNUIsb0JBQW9CO1FBQ3BCLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDL0QsSUFBSSxFQUFFLHNCQUFzQixFQUM1QixLQUFLLENBQUMsb0JBQW9CLElBQUksd0NBQStCLENBQ2hFLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQ3hFLElBQUksRUFBRSwwQkFBMEIsRUFDaEMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLHVDQUE4QixDQUNuRSxDQUFBO1FBRUQsbURBQW1EO1FBQ25ELHlCQUF5QjtRQUN6QixvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFdkQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQ2YseUJBQXlCLEVBQUUsb0JBQW9CLENBQUMsVUFBVSxDQUM3RCxDQUFBO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FDZiw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQyxhQUFhLENBQ3hFLENBQUE7SUFDTCxDQUFDO0lBR08sa0JBQWtCLENBQ3RCLEtBQStCO1FBRS9CLHFHQUFxRztRQUNyRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUMzQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQ3RCLHVCQUFjLENBQUMsU0FBUyxDQUFDLENBQzVCLENBQUE7UUFFRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZELElBQUksRUFBRSxvQkFBb0IsRUFBRSxrQ0FBeUIsQ0FDeEQsQ0FBQTtRQUVELGVBQWU7UUFDZix5Q0FBeUM7UUFDekMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkQsUUFBUTtZQUNSLElBQUksS0FBSyxDQUFDLEdBQXFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQXFDLENBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQztRQUVELGNBQWM7UUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWU7UUFDL0Isb0ZBQW9GO1FBQ3BGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNwQixPQUFPLEVBQUU7Z0JBQ0wsa0JBQWtCO2dCQUNsQiwyQkFBMkI7Z0JBQzNCLHVCQUF1QjtnQkFDdkIseUJBQXlCO2dCQUN6QixzQkFBc0I7Z0JBQ3RCLG9CQUFvQjtnQkFDcEIsMEJBQTBCO2dCQUMxQix5QkFBeUI7Z0JBQ3pCLHVCQUF1QjthQUMxQjtZQUNELFNBQVMsRUFBRSxDQUFDLGtCQUFrQixpQkFBTSxJQUFJLDJCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDM0UsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWU7UUFDL0Isb0ZBQW9GO1FBQ3BGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNwQixPQUFPLEVBQUU7Z0JBQ0wsdUJBQXVCO2dCQUN2QiwrQkFBK0I7Z0JBQy9CLDBCQUEwQjtnQkFDMUIsNEJBQTRCO2dCQUM1Qiw0QkFBNEI7Z0JBQzVCLDJCQUEyQjtnQkFDM0Isd0JBQXdCO2dCQUN4Qiw4QkFBOEI7Z0JBQzlCLHlCQUF5QjtnQkFDekIsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLHlCQUF5QjtnQkFDekIseUJBQXlCO2dCQUN6QixnQ0FBZ0M7Z0JBQ2hDLDZCQUE2QjtnQkFDN0IsK0JBQStCO2dCQUMvQixnQ0FBZ0M7Z0JBQ2hDLGdDQUFnQzthQUNuQztZQUNELFNBQVMsRUFBRTtnQkFDUCxrQkFBa0IsaUJBQU0sSUFBSSwyQkFBZ0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxzQkFBYSxDQUFDLG1CQUFtQixFQUFFO2FBQzNHO1NBQ0osQ0FBQyxDQUNMLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsY0FBYyxDQUFDLGNBQWMsQ0FDekIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsR0FBRyx1QkFBYyxHQUFHLENBQ3ZCLENBQUE7UUFFRCwyQ0FBMkM7UUFDM0Msa0JBQWtCLENBQUMsV0FBVyxDQUMxQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFBO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUNyQixLQUEwQjtRQUUxQixxR0FBcUc7UUFDckcsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUV4QyxvQkFBb0I7UUFDcEIsTUFBTSw4QkFBOEIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUN6RSxJQUFJLEVBQUUsOEJBQThCLEVBQ3BDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxvQ0FBNEIsQ0FBQyxTQUFTLENBQUMsQ0FDNUUsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCx5QkFBeUI7UUFDekIsOEJBQThCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FDZiw4QkFBOEIsRUFBRSw4QkFBOEIsQ0FBQyxVQUFVLENBQzVFLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUNmLGdCQUFnQixFQUFFLHNCQUFjLENBQ25DLENBQUE7SUFDTCxDQUFDOztBQTFVTCw0Q0E0VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBQ0NPVU5UX0lEX0FMSUFTLCBSRUdJT059IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCI7XG5pbXBvcnQge0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsIElDQVYyX0JBU0VfVVJMfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmJ1bmRsaW5nPy5jb21tYW5kSG9va3M/LmJlZm9yZUJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYWZ0ZXJCdW5kbGluZyBhcyB1bmtub3duIGFzIHN0cmluZ1tdID8/IFtdKS5jb25jYXQoW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdvcmNhYnVzQXBpVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9vcmNhYnVzX2FwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdvcmNhYnVzQXBpVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgdGhlIGxheWVyIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ21hcnRUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL21hcnRfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWFydFRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRJY2F2MkxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ2ljYXYyVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9pY2F2Ml90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpY2F2MlRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnZmFzdEFwaUxheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2Zhc3RhcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmFzdEFwaUxheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE9yY2FidXNSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBPcmNhYnVzUmVzb3VyY2VzUHJvcHNcbiAgICApIHtcbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JjYWJ1c1Rva2VuU2VjcmV0SWQgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdvcmNhYnVzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5vcmNhYnVzVG9rZW5TZWNyZXRJZCA/PyBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lJyxcbiAgICAgICAgICAgIHByb3BzLmhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSA/PyBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVIsXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBvcmNhYnVzVG9rZW5TZWNyZXRJZC5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbik7XG4gICAgICAgIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbilcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQnLCBvcmNhYnVzVG9rZW5TZWNyZXRJZC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSE9TVE5BTUVfU1NNX1BBUkFNRVRFUl9OQU1FJywgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLnBhcmFtZXRlck5hbWUsXG4gICAgICAgIClcbiAgICB9XG5cblxuICAgIHByaXZhdGUgc2V0QXRoZW5hUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogTWFydEVudmlyb25tZW50VmFyaWFibGVzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBBQ0NPVU5UX0lEX0FMSUFTXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06KmBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIC8vIEZyb20gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZXhhbXBsZS1wb2xpY2llcy13b3JrZ3JvdXAuaHRtbFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2dyb3VwIGV4ZWN1dGlvbnNcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpCYXRjaEdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFF1ZXJ5RXhlY3V0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6U3RhcnRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6U3RvcFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5UmVzdWx0c1N0cmVhbScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXROYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0TmFtZWRRdWVyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpEZWxldGVOYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpDcmVhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RQcmVwYXJlZFN0YXRlbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlVwZGF0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpEZWxldGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6YXRoZW5hOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06d29ya2dyb3VwLyR7TUFSVF9FTlZfVkFSUy5hdGhlbmFXb3JrZ3JvdXBOYW1lfWAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIHJlYWQgYWNjZXNzIHRvIHRoZSBTMyBidWNrZXRcbiAgICAgICAgYXRoZW5hUzNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAgICAgYCR7TUFSVF9TM19QUkVGSVh9KmBcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBpbnZva2UgYWNjZXNzIHRvIHRoZSBsYW1iZGEgZnVuY3Rpb25cbiAgICAgICAgYXRoZW5hRnVuY3Rpb25OYW1lLmdyYW50SW52b2tlKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvblxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJY2F2MlJlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IEljYXYyUmVzb3VyY2VzUHJvcHNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIEFDQ09VTlRfSURfQUxJQVNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQnLFxuICAgICAgICAgICAgcHJvcHMuaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkID8/IElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURbc3RhZ2VOYW1lXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdC5ncmFudFJlYWQodGhpcy5jdXJyZW50VmVyc2lvbik7XG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQnLCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3Quc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0lDQVYyX0JBU0VfVVJMJywgSUNBVjJfQkFTRV9VUkwsXG4gICAgICAgIClcbiAgICB9XG5cbn1cblxuXG5cblxuIl19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUFvRjtBQUdwRixTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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LENBQUE7SUFDTCxDQUFDOztBQTFVTCw0Q0E0VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBQ0NPVU5UX0lEX0FMSUFTLCBSRUdJT059IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCI7XG5pbXBvcnQge0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsIElDQVYyX0JBU0VfVVJMfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmJ1bmRsaW5nPy5jb21tYW5kSG9va3M/LmJlZm9yZUJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYWZ0ZXJCdW5kbGluZyBhcyB1bmtub3duIGFzIHN0cmluZ1tdID8/IFtdKS5jb25jYXQoW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvb3JjYWJ1c19hcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2ljYXYyVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9pY2F2Ml90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpY2F2MlRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2Zhc3RBcGlMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9mYXN0YXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Zhc3RBcGlMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmNhYnVzUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yY2FidXNUb2tlblNlY3JldElkID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnb3JjYWJ1c1Rva2VuU2VjcmV0SWQnLFxuICAgICAgICAgICAgcHJvcHMub3JjYWJ1c1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2hvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZScsXG4gICAgICAgICAgICBwcm9wcy5ob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPz8gREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuICAgICAgICBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pXG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEJywgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0hPU1ROQU1FX1NTTV9QQVJBTUVURVJfTkFNRScsIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICApXG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHNldEF0aGVuYVJlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgY29uc3QgYXRoZW5hUzNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnYXRoZW5hUzNCdWNrZXQnLFxuICAgICAgICAgICAgTUFSVF9TM19CVUNLRVRbc3RhZ2VOYW1lXVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgYXRoZW5hRnVuY3Rpb25OYW1lID0gbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbk5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnbGFtYmRhRnVuY3Rpb25OYW1lJywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRVxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGVudiB2YXJzXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBrdiBwYWlycyBvZiBNQVJUX0VOVl9WQVJTXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE1BUlRfRU5WX1ZBUlMpKSB7XG4gICAgICAgICAgICAvLyBBZnRlclxuICAgICAgICAgICAgaWYgKHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgcHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcm1pc3Npb25zXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgbGlzdHNcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RW5naW5lVmVyc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RXb3JrR3JvdXBzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YUNhdGFsb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YWJhc2VzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFDYXRhbG9nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19Ondvcmtncm91cC8ke01BUlRfRU5WX1ZBUlMuYXRoZW5hV29ya2dyb3VwTmFtZX1gLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCByZWFkIGFjY2VzcyB0byB0aGUgUzMgYnVja2V0XG4gICAgICAgIGF0aGVuYVMzQnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIGAke01BUlRfUzNfUFJFRklYfSpgXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgaW52b2tlIGFjY2VzcyB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uXG4gICAgICAgIGF0aGVuYUZ1bmN0aW9uTmFtZS5ncmFudEludm9rZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb25cbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SWNhdjJSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBJY2F2MlJlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBBQ0NPVU5UX0lEX0FMSUFTXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJyxcbiAgICAgICAgICAgIHByb3BzLmljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA/PyBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9CQVNFX1VSTCcsIElDQVYyX0JBU0VfVVJMLFxuICAgICAgICApXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
  # Standard imports
4
- from typing import Dict, Optional
4
+ from typing import Dict, Optional, List, Union
5
5
 
6
6
  # Local imports
7
7
  from .globals import FASTQ_SUBDOMAIN_NAME
@@ -47,7 +47,7 @@ def get_fastq_request_response_results(
47
47
  def fastq_patch_request(
48
48
  endpoint: str,
49
49
  params: Optional[Dict] = None,
50
- json_data: Optional[Dict] = None,
50
+ json_data: Optional[Union[List, Dict]] = None,
51
51
  ):
52
52
  return patch_request(
53
53
  url=get_fastq_url(endpoint),
@@ -139,6 +139,11 @@ from .workflow_helpers import (
139
139
  to_fastq_list_rows
140
140
  )
141
141
 
142
+ # Multiqc
143
+ from .multiqc_helpers import (
144
+ run_multiqc
145
+ )
146
+
142
147
 
143
148
  __all__ = [
144
149
  # Create
@@ -192,5 +197,7 @@ __all__ = [
192
197
  # Workflow
193
198
  "to_fastq_list_row",
194
199
  "to_fastq_list_rows",
200
+ # Multiqc
201
+ "run_multiqc",
195
202
  ]
196
203
 
@@ -9,6 +9,7 @@ FASTQ_SUBDOMAIN_NAME = "fastq"
9
9
  FASTQ_ENDPOINT = "api/v1/fastq"
10
10
  FASTQ_SET_ENDPOINT = "api/v1/fastqSet"
11
11
  RGID_ENDPOINT = "api/v1/rgid"
12
+ MULTIQC_ENDPOINT = "api/v1/multiqc"
12
13
 
13
14
  # REGEX
14
15
  ORCABUS_ULID_REGEX_MATCH = re.compile(r'^[a-z0-9]{3}\.[A-Z0-9]{26}$')
@@ -85,6 +85,13 @@ class Library(TypedDict):
85
85
  libraryId: str
86
86
 
87
87
 
88
+ class SequaliReportsDict(TypedDict):
89
+ sequaliHtml: FileStorageObject
90
+ sequaliParquet: FileStorageObject
91
+ multiqcHtml: FileStorageObject
92
+ multiqcParquet: FileStorageObject
93
+
94
+
88
95
  # Deprecated: Use FastqCreate instead
89
96
  class FastqListRowCreate(TypedDict):
90
97
  fastqSetId: Optional[str]
@@ -180,6 +187,7 @@ class QcStats(TypedDict):
180
187
  r1GcFraction: float
181
188
  r2GcFraction: float
182
189
  duplicationFractionEstimate: float
190
+ sequaliReports: Optional[SequaliReportsDict]
183
191
 
184
192
 
185
193
  class ReadCount(TypedDict):
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Run MultiQC on a list of fastq ids
5
+ """
6
+ from typing import List
7
+
8
+ from orcabus_api_tools.fastq import fastq_patch_request
9
+ from orcabus_api_tools.fastq.globals import MULTIQC_ENDPOINT
10
+
11
+
12
+ def run_multiqc(fastq_id_list: List[str]) -> str:
13
+ """
14
+ Run multiqc on a list of fastq ids
15
+ Return the presigned url to the output multiqc report
16
+ :param fastq_id_list: List of fastq ids to run multiqc on
17
+ """
18
+ return fastq_patch_request(
19
+ f"{MULTIQC_ENDPOINT}",
20
+ json_data=fastq_id_list
21
+ )
@@ -8,7 +8,7 @@ from typing import List, Dict, Union
8
8
  import typing
9
9
  import boto3
10
10
  from datetime import datetime, timedelta, timezone
11
- from urllib.parse import urlparse
11
+ from urllib.parse import urlparse, unquote
12
12
  from itertools import batched
13
13
 
14
14
  # Local imports
@@ -164,6 +164,16 @@ def get_presigned_url_from_ingest_id(ingest_id: str) -> str:
164
164
  return get_presigned_url(get_file_object_from_ingest_id(ingest_id)['s3ObjectId'])
165
165
 
166
166
 
167
+ def create_presigned_url_map(s3_object_iter_: Dict, presigned_url_list: List[str]):
168
+ return {
169
+ "ingestId": s3_object_iter_['ingestId'],
170
+ "presignedUrl": next(filter(
171
+ lambda presigned_url_iter_: unquote(urlparse(presigned_url_iter_).path.lstrip("/")) == s3_object_iter_['fileObject']['key'],
172
+ presigned_url_list
173
+ ))
174
+ }
175
+
176
+
167
177
  def get_presigned_urls_from_ingest_ids(ingest_ids: List[str]) -> List[Dict[str, str]]:
168
178
  """
169
179
  Get presigned urls from a list of ingest ids using the bulk presign method
@@ -189,14 +199,8 @@ def get_presigned_urls_from_ingest_ids(ingest_ids: List[str]) -> List[Dict[str,
189
199
 
190
200
  # Map the presigned urls to the s3 objects
191
201
  return list(map(
192
- lambda presigned_url_iter_: {
193
- "ingestId": next(filter(
194
- lambda s3_object_iter_: s3_object_iter_['fileObject']['key'] == urlparse(presigned_url_iter_).path.lstrip("/"),
195
- s3_object_list
196
- ))['ingestId'],
197
- "presignedUrl": presigned_url_iter_
198
- },
199
- presigned_url_list
202
+ lambda s3_object_iter_: create_presigned_url_map(s3_object_iter_, presigned_url_list),
203
+ s3_object_list
200
204
  ))
201
205
 
202
206
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- from typing import Dict, Optional, List
2
+ from typing import Dict, Optional, List, Union
3
3
  from urllib.parse import urlunparse, unquote
4
4
 
5
5
  # Standard imports
@@ -106,7 +106,7 @@ def get_request(url: str, params: Optional[Dict] = None) -> Dict:
106
106
  def patch_request(
107
107
  url: str,
108
108
  json_data: Optional[Dict] = None,
109
- params: Optional[Dict] = None
109
+ params: Optional[Union[List | Dict]] = None
110
110
  ) -> Dict:
111
111
  # Get authorization header
112
112
  headers = {
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
13
  * SNS topic.
14
14
  */
15
15
  class MonitoredQueue extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.41" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.43" };
17
17
  queue;
18
18
  deadLetterQueue;
19
19
  alarm;
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.41" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.43" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.41" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.43" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -32,9 +32,9 @@ exports.FILE_MANAGER_BUCKETS = {
32
32
  ],
33
33
  };
34
34
  exports.FILE_MANAGER_CACHE_BUCKETS = {
35
- BETA: [s3_1.pipelineCacheBucket.BETA],
36
- GAMMA: [s3_1.pipelineCacheBucket.GAMMA],
37
- PROD: [s3_1.pipelineCacheBucket.PROD],
35
+ BETA: [s3_1.PIPELINE_CACHE_BUCKET.BETA],
36
+ GAMMA: [s3_1.PIPELINE_CACHE_BUCKET.GAMMA],
37
+ PROD: [s3_1.PIPELINE_CACHE_BUCKET.PROD],
38
38
  };
39
39
  exports.FILE_MANAGER_PRESIGN_USER_SECRET = "orcabus/file-manager-presign-user"; // pragma: allowlist secret
40
40
  (0, secrets_1.validateSecretName)(exports.FILE_MANAGER_PRESIGN_USER_SECRET);
@@ -46,4 +46,4 @@ exports.FILE_MANAGER_ACCESS_KEY_ARNS = {
46
46
  exports.FILE_MANAGER_INGEST_ROLE = "orcabus-file-manager-ingest-role";
47
47
  exports.FILE_MANAGER_PRESIGN_USER = "orcabus-file-manager-presign-user"; // pragma: allowlist secret
48
48
  exports.FILE_MANAGER_DOMAIN_PREFIX = "file";
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsNEVBSXNDO0FBRXRDLDZCQUEyQztBQUMzQyx1Q0FBK0M7QUFFbEMsUUFBQSxvQkFBb0IsR0FBZ0M7SUFDL0QsSUFBSSxFQUFFO1FBQ0osZ0JBQWdCO1FBQ2hCLHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQzFFLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQ3RGLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQy9FLDRCQUE0QjtLQUM3QjtJQUNELEtBQUssRUFBRTtRQUNMLGdCQUFnQjtRQUNoQixxQkFBcUIsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtRQUM1RSxpQ0FBaUMsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtRQUN4RiwwQkFBMEIsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtLQUNsRjtJQUNELElBQUksRUFBRTtRQUNKLDZCQUE2QjtRQUM3QixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hELHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQzFFLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQ3RGLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQy9FLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxNQUFNLEVBQUU7S0FDM0Q7Q0FDRixDQUFDO0FBRVcsUUFBQSwwQkFBMEIsR0FBZ0M7SUFDckUsSUFBSSxFQUFFLENBQUMsd0JBQW1CLENBQUMsSUFBSSxDQUFDO0lBQ2hDLEtBQUssRUFBRSxDQUFDLHdCQUFtQixDQUFDLEtBQUssQ0FBQztJQUNsQyxJQUFJLEVBQUUsQ0FBQyx3QkFBbUIsQ0FBQyxJQUFJLENBQUM7Q0FDakMsQ0FBQztBQUVXLFFBQUEsZ0NBQWdDLEdBQzNDLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQ2xFLElBQUEsNEJBQWtCLEVBQUMsd0NBQWdDLENBQUMsQ0FBQztBQUV4QyxRQUFBLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsMEJBQTBCLDRDQUFnQixDQUFDLE1BQU0sSUFBSSw0Q0FBZ0IsQ0FBQyxPQUFPLFdBQVcsd0NBQWdDLEVBQUU7SUFDaEksS0FBSyxFQUFFLDBCQUEwQiw2Q0FBaUIsQ0FBQyxNQUFNLElBQUksNkNBQWlCLENBQUMsT0FBTyxXQUFXLHdDQUFnQyxFQUFFO0lBQ25JLElBQUksRUFBRSwwQkFBMEIsNENBQWdCLENBQUMsTUFBTSxJQUFJLDRDQUFnQixDQUFDLE9BQU8sV0FBVyx3Q0FBZ0MsRUFBRTtDQUNqSSxDQUFDO0FBRVcsUUFBQSx3QkFBd0IsR0FBRyxrQ0FBa0MsQ0FBQztBQUM5RCxRQUFBLHlCQUF5QixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQzVGLFFBQUEsMEJBQTBCLEdBQUcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgY29uZmlnIGZvciB0aGUgRmlsZU1hbmFnZXIuXG4gKi9cblxuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuLi9kZXBsb3ltZW50LXN0YWNrLXBpcGVsaW5lXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuaW1wb3J0IHsgcGlwZWxpbmVDYWNoZUJ1Y2tldCB9IGZyb20gXCIuL3MzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVNlY3JldE5hbWUgfSBmcm9tIFwiLi9zZWNyZXRzXCI7XG5cbmV4cG9ydCBjb25zdCBGSUxFX01BTkFHRVJfQlVDS0VUUzogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nW10+ID0ge1xuICBCRVRBOiBbXG4gICAgXCJ1bWNjci10ZW1wLWRldlwiLFxuICAgIGBudHNtLWZpbmdlcnByaW50cy0ke0JFVEFfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBmYXN0cS1tYW5hZ2VyLXNlcXVhbGktb3V0cHV0cy0ke0JFVEFfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0JFVEFfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gICAgXCJmaWxlbWFuYWdlci1pbnZlbnRvcnktdGVzdFwiLFxuICBdLFxuICBHQU1NQTogW1xuICAgIFwidW1jY3ItdGVtcC1zdGdcIixcbiAgICBgbnRzbS1maW5nZXJwcmludHMtJHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBmYXN0cS1tYW5hZ2VyLXNlcXVhbGktb3V0cHV0cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LSR7R0FNTUFfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICBdLFxuICBQUk9EOiBbXG4gICAgXCJvcmcudW1jY3IuZGF0YS5vbmNvYW5hbHlzZXJcIixcbiAgICBcImFyY2hpdmUtcHJvZC1hbmFseXNpcy01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgICBcImFyY2hpdmUtcHJvZC1mYXN0cS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgICBgbnRzbS1maW5nZXJwcmludHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LSR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259YCxcbiAgICBgZmFzdHEtbWFuYWdlci1zZXF1YWxpLW91dHB1dHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LSR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259YCxcbiAgICBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke1BST0RfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtQUk9EX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBwaXBlbGluZS1tb250YXVrLTk3NzI1MTU4NjY1Ny0ke1BST0RfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX0NBQ0hFX0JVQ0tFVFM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZ1tdPiA9IHtcbiAgQkVUQTogW3BpcGVsaW5lQ2FjaGVCdWNrZXQuQkVUQV0sXG4gIEdBTU1BOiBbcGlwZWxpbmVDYWNoZUJ1Y2tldC5HQU1NQV0sXG4gIFBST0Q6IFtwaXBlbGluZUNhY2hlQnVja2V0LlBST0RdLFxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEVfTUFOQUdFUl9QUkVTSUdOX1VTRVJfU0VDUkVUID1cbiAgXCJvcmNhYnVzL2ZpbGUtbWFuYWdlci1wcmVzaWduLXVzZXJcIjsgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG52YWxpZGF0ZVNlY3JldE5hbWUoRklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUl9TRUNSRVQpO1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX0FDQ0VTU19LRVlfQVJOUzogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn06JHtCRVRBX0VOVklST05NRU5ULmFjY291bnR9OnNlY3JldDoke0ZJTEVfTUFOQUdFUl9QUkVTSUdOX1VTRVJfU0VDUkVUfWAsXG4gIEdBTU1BOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn06JHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtGSUxFX01BTkFHRVJfUFJFU0lHTl9VU0VSX1NFQ1JFVH1gLFxuICBQUk9EOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke1BST0RfRU5WSVJPTk1FTlQucmVnaW9ufToke1BST0RfRU5WSVJPTk1FTlQuYWNjb3VudH06c2VjcmV0OiR7RklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUl9TRUNSRVR9YCxcbn07XG5cbmV4cG9ydCBjb25zdCBGSUxFX01BTkFHRVJfSU5HRVNUX1JPTEUgPSBcIm9yY2FidXMtZmlsZS1tYW5hZ2VyLWluZ2VzdC1yb2xlXCI7XG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUiA9IFwib3JjYWJ1cy1maWxlLW1hbmFnZXItcHJlc2lnbi11c2VyXCI7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuZXhwb3J0IGNvbnN0IEZJTEVfTUFOQUdFUl9ET01BSU5fUFJFRklYID0gXCJmaWxlXCI7XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsNEVBSXNDO0FBRXRDLDZCQUEyQztBQUMzQyx1Q0FBK0M7QUFFbEMsUUFBQSxvQkFBb0IsR0FBZ0M7SUFDL0QsSUFBSSxFQUFFO1FBQ0osZ0JBQWdCO1FBQ2hCLHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQzFFLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQ3RGLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQy9FLDRCQUE0QjtLQUM3QjtJQUNELEtBQUssRUFBRTtRQUNMLGdCQUFnQjtRQUNoQixxQkFBcUIsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtRQUM1RSxpQ0FBaUMsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtRQUN4RiwwQkFBMEIsNkNBQWlCLENBQUMsT0FBTyxJQUFJLDZDQUFpQixDQUFDLE1BQU0sRUFBRTtLQUNsRjtJQUNELElBQUksRUFBRTtRQUNKLDZCQUE2QjtRQUM3QixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hELHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQzFFLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQ3RGLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxPQUFPLElBQUksNENBQWdCLENBQUMsTUFBTSxFQUFFO1FBQy9FLGlDQUFpQyw0Q0FBZ0IsQ0FBQyxNQUFNLEVBQUU7S0FDM0Q7Q0FDRixDQUFDO0FBRVcsUUFBQSwwQkFBMEIsR0FBZ0M7SUFDckUsSUFBSSxFQUFFLENBQUMsMEJBQXFCLENBQUMsSUFBSSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxDQUFDLDBCQUFxQixDQUFDLEtBQUssQ0FBQztJQUNwQyxJQUFJLEVBQUUsQ0FBQywwQkFBcUIsQ0FBQyxJQUFJLENBQUM7Q0FDbkMsQ0FBQztBQUVXLFFBQUEsZ0NBQWdDLEdBQzNDLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQ2xFLElBQUEsNEJBQWtCLEVBQUMsd0NBQWdDLENBQUMsQ0FBQztBQUV4QyxRQUFBLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsMEJBQTBCLDRDQUFnQixDQUFDLE1BQU0sSUFBSSw0Q0FBZ0IsQ0FBQyxPQUFPLFdBQVcsd0NBQWdDLEVBQUU7SUFDaEksS0FBSyxFQUFFLDBCQUEwQiw2Q0FBaUIsQ0FBQyxNQUFNLElBQUksNkNBQWlCLENBQUMsT0FBTyxXQUFXLHdDQUFnQyxFQUFFO0lBQ25JLElBQUksRUFBRSwwQkFBMEIsNENBQWdCLENBQUMsTUFBTSxJQUFJLDRDQUFnQixDQUFDLE9BQU8sV0FBVyx3Q0FBZ0MsRUFBRTtDQUNqSSxDQUFDO0FBRVcsUUFBQSx3QkFBd0IsR0FBRyxrQ0FBa0MsQ0FBQztBQUM5RCxRQUFBLHlCQUF5QixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQzVGLFFBQUEsMEJBQTBCLEdBQUcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgY29uZmlnIGZvciB0aGUgRmlsZU1hbmFnZXIuXG4gKi9cblxuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuLi9kZXBsb3ltZW50LXN0YWNrLXBpcGVsaW5lXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuaW1wb3J0IHtQSVBFTElORV9DQUNIRV9CVUNLRVR9IGZyb20gXCIuL3MzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVNlY3JldE5hbWUgfSBmcm9tIFwiLi9zZWNyZXRzXCI7XG5cbmV4cG9ydCBjb25zdCBGSUxFX01BTkFHRVJfQlVDS0VUUzogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nW10+ID0ge1xuICBCRVRBOiBbXG4gICAgXCJ1bWNjci10ZW1wLWRldlwiLFxuICAgIGBudHNtLWZpbmdlcnByaW50cy0ke0JFVEFfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBmYXN0cS1tYW5hZ2VyLXNlcXVhbGktb3V0cHV0cy0ke0JFVEFfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0JFVEFfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gICAgXCJmaWxlbWFuYWdlci1pbnZlbnRvcnktdGVzdFwiLFxuICBdLFxuICBHQU1NQTogW1xuICAgIFwidW1jY3ItdGVtcC1zdGdcIixcbiAgICBgbnRzbS1maW5nZXJwcmludHMtJHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBmYXN0cS1tYW5hZ2VyLXNlcXVhbGktb3V0cHV0cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LSR7R0FNTUFfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fS0ke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICBdLFxuICBQUk9EOiBbXG4gICAgXCJvcmcudW1jY3IuZGF0YS5vbmNvYW5hbHlzZXJcIixcbiAgICBcImFyY2hpdmUtcHJvZC1hbmFseXNpcy01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgICBcImFyY2hpdmUtcHJvZC1mYXN0cS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgICBgbnRzbS1maW5nZXJwcmludHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LSR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259YCxcbiAgICBgZmFzdHEtbWFuYWdlci1zZXF1YWxpLW91dHB1dHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LSR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259YCxcbiAgICBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke1BST0RfRU5WSVJPTk1FTlQuYWNjb3VudH0tJHtQUk9EX0VOVklST05NRU5ULnJlZ2lvbn1gLFxuICAgIGBwaXBlbGluZS1tb250YXVrLTk3NzI1MTU4NjY1Ny0ke1BST0RfRU5WSVJPTk1FTlQucmVnaW9ufWAsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX0NBQ0hFX0JVQ0tFVFM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZ1tdPiA9IHtcbiAgQkVUQTogW1BJUEVMSU5FX0NBQ0hFX0JVQ0tFVC5CRVRBXSxcbiAgR0FNTUE6IFtQSVBFTElORV9DQUNIRV9CVUNLRVQuR0FNTUFdLFxuICBQUk9EOiBbUElQRUxJTkVfQ0FDSEVfQlVDS0VULlBST0RdLFxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEVfTUFOQUdFUl9QUkVTSUdOX1VTRVJfU0VDUkVUID1cbiAgXCJvcmNhYnVzL2ZpbGUtbWFuYWdlci1wcmVzaWduLXVzZXJcIjsgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG52YWxpZGF0ZVNlY3JldE5hbWUoRklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUl9TRUNSRVQpO1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX0FDQ0VTU19LRVlfQVJOUzogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtCRVRBX0VOVklST05NRU5ULnJlZ2lvbn06JHtCRVRBX0VOVklST05NRU5ULmFjY291bnR9OnNlY3JldDoke0ZJTEVfTUFOQUdFUl9QUkVTSUdOX1VTRVJfU0VDUkVUfWAsXG4gIEdBTU1BOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn06JHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtGSUxFX01BTkFHRVJfUFJFU0lHTl9VU0VSX1NFQ1JFVH1gLFxuICBQUk9EOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke1BST0RfRU5WSVJPTk1FTlQucmVnaW9ufToke1BST0RfRU5WSVJPTk1FTlQuYWNjb3VudH06c2VjcmV0OiR7RklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUl9TRUNSRVR9YCxcbn07XG5cbmV4cG9ydCBjb25zdCBGSUxFX01BTkFHRVJfSU5HRVNUX1JPTEUgPSBcIm9yY2FidXMtZmlsZS1tYW5hZ2VyLWluZ2VzdC1yb2xlXCI7XG5leHBvcnQgY29uc3QgRklMRV9NQU5BR0VSX1BSRVNJR05fVVNFUiA9IFwib3JjYWJ1cy1maWxlLW1hbmFnZXItcHJlc2lnbi11c2VyXCI7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuZXhwb3J0IGNvbnN0IEZJTEVfTUFOQUdFUl9ET01BSU5fUFJFRklYID0gXCJmaWxlXCI7XG4iXX0=
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.41" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.43" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.41" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.43" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
11
11
  * A helper class to construct the arn for the slack SNS topic.
12
12
  */
13
13
  class SlackAlerts {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.41" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.43" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack