@orcabus/platform-cdk-constructs 0.0.61 → 0.0.63

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
@@ -5758,7 +5758,7 @@
5758
5758
  "kind": "interface",
5759
5759
  "locationInModule": {
5760
5760
  "filename": "lambda/index.ts",
5761
- "line": 63
5761
+ "line": 67
5762
5762
  },
5763
5763
  "name": "Icav2ResourcesProps",
5764
5764
  "namespace": "lambda",
@@ -5775,13 +5775,61 @@
5775
5775
  "immutable": true,
5776
5776
  "locationInModule": {
5777
5777
  "filename": "lambda/index.ts",
5778
- "line": 68
5778
+ "line": 72
5779
5779
  },
5780
5780
  "name": "icav2AccessTokenSecretId",
5781
5781
  "optional": true,
5782
5782
  "type": {
5783
5783
  "primitive": "string"
5784
5784
  }
5785
+ },
5786
+ {
5787
+ "abstract": true,
5788
+ "docs": {
5789
+ "stability": "experimental"
5790
+ },
5791
+ "immutable": true,
5792
+ "locationInModule": {
5793
+ "filename": "lambda/index.ts",
5794
+ "line": 74
5795
+ },
5796
+ "name": "icav2ProjectToStorageConfigurationsSsmParameterPathPrefix",
5797
+ "optional": true,
5798
+ "type": {
5799
+ "primitive": "string"
5800
+ }
5801
+ },
5802
+ {
5803
+ "abstract": true,
5804
+ "docs": {
5805
+ "stability": "experimental"
5806
+ },
5807
+ "immutable": true,
5808
+ "locationInModule": {
5809
+ "filename": "lambda/index.ts",
5810
+ "line": 73
5811
+ },
5812
+ "name": "icav2StorageConfigurationSsmParameterPathPrefix",
5813
+ "optional": true,
5814
+ "type": {
5815
+ "primitive": "string"
5816
+ }
5817
+ },
5818
+ {
5819
+ "abstract": true,
5820
+ "docs": {
5821
+ "stability": "experimental"
5822
+ },
5823
+ "immutable": true,
5824
+ "locationInModule": {
5825
+ "filename": "lambda/index.ts",
5826
+ "line": 75
5827
+ },
5828
+ "name": "icav2StorageCredentialsSsmParameterPathPrefix",
5829
+ "optional": true,
5830
+ "type": {
5831
+ "primitive": "string"
5832
+ }
5785
5833
  }
5786
5834
  ],
5787
5835
  "symbolId": "lambda/index:Icav2ResourcesProps"
@@ -5796,7 +5844,7 @@
5796
5844
  "kind": "interface",
5797
5845
  "locationInModule": {
5798
5846
  "filename": "lambda/index.ts",
5799
- "line": 46
5847
+ "line": 50
5800
5848
  },
5801
5849
  "name": "MartEnvironmentVariables",
5802
5850
  "namespace": "lambda",
@@ -5813,7 +5861,7 @@
5813
5861
  "immutable": true,
5814
5862
  "locationInModule": {
5815
5863
  "filename": "lambda/index.ts",
5816
- "line": 60
5864
+ "line": 64
5817
5865
  },
5818
5866
  "name": "athenaDatabaseName",
5819
5867
  "optional": true,
@@ -5833,7 +5881,7 @@
5833
5881
  "immutable": true,
5834
5882
  "locationInModule": {
5835
5883
  "filename": "lambda/index.ts",
5836
- "line": 55
5884
+ "line": 59
5837
5885
  },
5838
5886
  "name": "athenaDatasourceName",
5839
5887
  "optional": true,
@@ -5853,7 +5901,7 @@
5853
5901
  "immutable": true,
5854
5902
  "locationInModule": {
5855
5903
  "filename": "lambda/index.ts",
5856
- "line": 50
5904
+ "line": 54
5857
5905
  },
5858
5906
  "name": "athenaWorkgroupName",
5859
5907
  "optional": true,
@@ -5874,7 +5922,7 @@
5874
5922
  "kind": "interface",
5875
5923
  "locationInModule": {
5876
5924
  "filename": "lambda/index.ts",
5877
- "line": 34
5925
+ "line": 38
5878
5926
  },
5879
5927
  "name": "OrcabusResourcesProps",
5880
5928
  "namespace": "lambda",
@@ -5891,7 +5939,7 @@
5891
5939
  "immutable": true,
5892
5940
  "locationInModule": {
5893
5941
  "filename": "lambda/index.ts",
5894
- "line": 43
5942
+ "line": 47
5895
5943
  },
5896
5944
  "name": "hostnameSsmParameterName",
5897
5945
  "optional": true,
@@ -5911,7 +5959,7 @@
5911
5959
  "immutable": true,
5912
5960
  "locationInModule": {
5913
5961
  "filename": "lambda/index.ts",
5914
- "line": 38
5962
+ "line": 42
5915
5963
  },
5916
5964
  "name": "orcabusTokenSecretId",
5917
5965
  "optional": true,
@@ -5935,7 +5983,7 @@
5935
5983
  },
5936
5984
  "locationInModule": {
5937
5985
  "filename": "lambda/index.ts",
5938
- "line": 126
5986
+ "line": 133
5939
5987
  },
5940
5988
  "parameters": [
5941
5989
  {
@@ -5961,7 +6009,7 @@
5961
6009
  "kind": "class",
5962
6010
  "locationInModule": {
5963
6011
  "filename": "lambda/index.ts",
5964
- "line": 117
6012
+ "line": 124
5965
6013
  },
5966
6014
  "name": "PythonUvFunction",
5967
6015
  "namespace": "lambda",
@@ -5980,7 +6028,7 @@
5980
6028
  "kind": "interface",
5981
6029
  "locationInModule": {
5982
6030
  "filename": "lambda/index.ts",
5983
- "line": 72
6031
+ "line": 79
5984
6032
  },
5985
6033
  "name": "PythonUvFunctionProps",
5986
6034
  "namespace": "lambda",
@@ -5997,7 +6045,7 @@
5997
6045
  "immutable": true,
5998
6046
  "locationInModule": {
5999
6047
  "filename": "lambda/index.ts",
6000
- "line": 113
6048
+ "line": 120
6001
6049
  },
6002
6050
  "name": "icav2Resources",
6003
6051
  "optional": true,
@@ -6014,7 +6062,7 @@
6014
6062
  "immutable": true,
6015
6063
  "locationInModule": {
6016
6064
  "filename": "lambda/index.ts",
6017
- "line": 93
6065
+ "line": 100
6018
6066
  },
6019
6067
  "name": "includeFastApiLayer",
6020
6068
  "optional": true,
@@ -6031,7 +6079,7 @@
6031
6079
  "immutable": true,
6032
6080
  "locationInModule": {
6033
6081
  "filename": "lambda/index.ts",
6034
- "line": 88
6082
+ "line": 95
6035
6083
  },
6036
6084
  "name": "includeIcav2Layer",
6037
6085
  "optional": true,
@@ -6048,7 +6096,7 @@
6048
6096
  "immutable": true,
6049
6097
  "locationInModule": {
6050
6098
  "filename": "lambda/index.ts",
6051
- "line": 83
6099
+ "line": 90
6052
6100
  },
6053
6101
  "name": "includeMartLayer",
6054
6102
  "optional": true,
@@ -6065,7 +6113,7 @@
6065
6113
  "immutable": true,
6066
6114
  "locationInModule": {
6067
6115
  "filename": "lambda/index.ts",
6068
- "line": 76
6116
+ "line": 83
6069
6117
  },
6070
6118
  "name": "includeOrcabusApiToolsLayer",
6071
6119
  "optional": true,
@@ -6085,7 +6133,7 @@
6085
6133
  "immutable": true,
6086
6134
  "locationInModule": {
6087
6135
  "filename": "lambda/index.ts",
6088
- "line": 107
6136
+ "line": 114
6089
6137
  },
6090
6138
  "name": "martEnvironmentVariables",
6091
6139
  "optional": true,
@@ -6106,7 +6154,7 @@
6106
6154
  "immutable": true,
6107
6155
  "locationInModule": {
6108
6156
  "filename": "lambda/index.ts",
6109
- "line": 100
6157
+ "line": 107
6110
6158
  },
6111
6159
  "name": "orcabusTokenResources",
6112
6160
  "optional": true,
@@ -6840,6 +6888,6 @@
6840
6888
  "symbolId": "shared-config/slack:SlackAlerts"
6841
6889
  }
6842
6890
  },
6843
- "version": "0.0.61",
6844
- "fingerprint": "DcoovyT6YbBVpWaxi9zdYf7VCWMkg84pxJwOT0JMuYI="
6891
+ "version": "0.0.63",
6892
+ "fingerprint": "oboQ1x70mZUaDFK3SRkThlxubnIkafWxHhzzyt0a+AU="
6845
6893
  }
@@ -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.61" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.63" };
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.61" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.63" };
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.61" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.63" };
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.61" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.63" };
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.61" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.63" };
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.61" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.63" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
package/lambda/index.d.ts CHANGED
@@ -32,6 +32,9 @@ export interface Icav2ResourcesProps {
32
32
  * otherwise it will default to @ICAV2_ACCESS_TOKEN_SECRET_ID
33
33
  */
34
34
  readonly icav2AccessTokenSecretId?: string;
35
+ readonly icav2StorageConfigurationSsmParameterPathPrefix?: string;
36
+ readonly icav2ProjectToStorageConfigurationsSsmParameterPathPrefix?: string;
37
+ readonly icav2StorageCredentialsSsmParameterPathPrefix?: string;
35
38
  }
36
39
  export interface PythonUvFunctionProps extends PythonFunctionProps {
37
40
  /**
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.61" };
59
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.63" };
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
@@ -355,10 +355,24 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
355
355
  // Add permissions for the secret and SSM parameter
356
356
  // To the current version
357
357
  icav2AccessTokenSecretIdObject.grantRead(this.currentVersion);
358
+ // Add configuration paths
359
+ const icav2StorageConfigurationSsmParameterPathPrefix = (props.icav2StorageConfigurationSsmParameterPathPrefix ?? icav2_1.ICAV2_STORAGE_CONFIGURATION_SSM_PARAMETER_PATH_PREFIX);
360
+ const icav2ProjectToStorageConfigurationsSsmParameterPathPrefix = (props.icav2ProjectToStorageConfigurationsSsmParameterPathPrefix ?? icav2_1.ICAV2_PROJECT_TO_STORAGE_CONFIGURATIONS_SSM_PARAMETER_PATH_PREFIX);
361
+ const icav2StorageCredentialsSsmParameterPathPrefix = (props.icav2StorageCredentialsSsmParameterPathPrefix ?? icav2_1.ICAV2_STORAGE_CREDENTIALS_SSM_PARAMETER_PATH_PREFIX);
362
+ // Provide access to the ssm parameter paths
363
+ this.currentVersion.addToRolePolicy(new iam.PolicyStatement({
364
+ // We may need to get the parameters individually or by path
365
+ actions: ['ssm:GetParametersByPath', 'ssm:GetParameter'],
366
+ resources: [
367
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2StorageConfigurationSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
368
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2ProjectToStorageConfigurationsSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
369
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2StorageCredentialsSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
370
+ ],
371
+ }));
358
372
  // Add environment variables
359
373
  this.addEnvironment('ICAV2_ACCESS_TOKEN_SECRET_ID', icav2AccessTokenSecretIdObject.secretName);
360
374
  this.addEnvironment('ICAV2_BASE_URL', icav2_1.ICAV2_BASE_URL);
361
375
  }
362
376
  }
363
377
  exports.PythonUvFunction = PythonUvFunction;
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUFvRjtBQUdwRixTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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QUU7YUFDM0c7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxjQUFjLENBQUMsY0FBYyxDQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixHQUFHLHVCQUFjLEdBQUcsQ0FDdkIsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUE7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQ3JCLEtBQTBCO1FBRTFCLHFHQUFxRztRQUNyRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhDLG9CQUFvQjtRQUNwQixNQUFNLDhCQUE4QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQ3pFLElBQUksRUFBRSw4QkFBOEIsRUFDcEMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLG9DQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUM1RSxDQUFDO1FBRUYsbURBQW1EO1FBQ25ELHlCQUF5QjtRQUN6Qiw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLDhCQUE4QixDQUFDLFVBQVUsQ0FDNUUsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLENBQ2YsZ0JBQWdCLEVBQUUsc0JBQWMsQ0FDbkMsQ0FBQTtJQUNMLENBQUM7O0FBalhMLDRDQW1YQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7cmVzb2x2ZVN0YWdlTmFtZX0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge0FDQ09VTlRfSURfQUxJQVMsIFJFR0lPTn0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcbmltcG9ydCB7SUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCwgSUNBVjJfQkFTRV9VUkx9IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2ljYXYyXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKTogRG9ja2VySW1hZ2Uge1xuICAgIHJldHVybiBEb2NrZXJJbWFnZS5mcm9tQnVpbGQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2J1aWxkX3B5dGhvbicpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmNhYnVzUmVzb3VyY2VzUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblNlY3JldElkLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgb3JjYWJ1c1Rva2VuU2VjcmV0SWQ/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSXG4gICAgICovXG4gICAgcmVhZG9ubHkgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFydEVudmlyb25tZW50VmFyaWFibGVzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFXb3JrZ3JvdXBOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYVdvcmtncm91cE5hbWU/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYURhdGFzb3VyY2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLmF0aGVuYURhdGFzb3VyY2VOYW1lXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YXNvdXJjZU5hbWU/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYURhdGFiYXNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFiYXNlTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljYXYyUmVzb3VyY2VzUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBpZCBvZiB0aGUgc2VjcmV0IHRoYXQgY29udGFpbnMgdGhlIGljYXYyIGFjY2VzcyB0b2tlblxuICAgICAqIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQ/OiBzdHJpbmdcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblV2RnVuY3Rpb25Qcm9wcyBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIG9yY2FidXMgYXBpIHRvb2xzIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlT3JjYWJ1c0FwaVRvb2xzTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBtYXJ0IGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKiBOb3RlIHRoYXQgdGhlIG1hcnQgbGF5ZXIgaXMgYSBsaXR0bGUgaGVhdmllciB0aGFuIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllclxuICAgICAqIFNpbmNlIHdlIHJlcXVpcmUgcGFuZGFzIHRvIGJlIGluc3RhbGxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVNYXJ0TGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBpY2F2MiBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUljYXYyTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmYXN0YXBpIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlRmFzdEFwaUxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEIGFuZCBAREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSXG4gICAgICogZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXIgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzPzogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBtYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FLCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQVNPVVJDRV9OQU1FXG4gICAgICogYW5kIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FIGZvciB0aGUgYXRoZW5hIHdvcmtncm91cCwgZGF0YXNvdXJjZSBhbmQgZGF0YWJhc2UgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgbWFydEVudmlyb25tZW50VmFyaWFibGVzPzogTWFydEVudmlyb25tZW50VmFyaWFibGVzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBpY2F2MlJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEIGZvciB0aGUgc2VjcmV0XG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJSZXNvdXJjZXM/OiBJY2F2MlJlc291cmNlc1Byb3BzXG59XG5cblxuZXhwb3J0IGNsYXNzIFB5dGhvblV2RnVuY3Rpb24gZXh0ZW5kcyBQeXRob25GdW5jdGlvbiB7XG4gICAgLy8gQ2xhc3MgY29uc3RydWN0cywgdG8gYmUgdXNlZCBmb3IgY2FjaGluZyB0aGUgbGF5ZXJzXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBsYW1iZGFzIHRocm91Z2hvdXQgdGhlIHN0YWNrXG4gICAgLy8gVGhleSB3aWxsIGFsbCB1c2UgdGhlIHNhbWUgbGF5ZXJcbiAgICBwcml2YXRlIHN0YXRpYyBvcmNhYnVzQXBpVG9vbHNMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIG1hcnRMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIGljYXYyTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBmYXN0QXBpTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcblxuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQeXRob25VdkZ1bmN0aW9uUHJvcHMpIHtcbiAgICAgICAgY29uc3QgdXZQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5idW5kbGluZyxcbiAgICAgICAgICAgICAgICBidWlsZEFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncyxcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIFRBUkdFVFBMQVRGT1JNIHRvIGJ1aWxkIGFyZ3MgaWYgaXQncyBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgICAgICAgICAgICAgVEFSR0VUUExBVEZPUk06XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5idW5kbGluZz8uYnVpbGRBcmdzPy5UQVJHRVRQTEFURk9STSA/PyBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NC5kb2NrZXJQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYmVmb3JlQnVuZGxpbmcgYXMgdW5rbm93biBhcyBzdHJpbmdbXSA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwcm9wcy5idW5kbGluZz8uY29tbWFuZEhvb2tzPy5hZnRlckJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW10pLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlICpweWMgZmlsZXMgYW5kIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vKiBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvb3JjYWJ1c19hcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ21hcnRUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL21hcnRfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWFydFRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkSWNhdjJMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgdGhlIGxheWVyIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2Zhc3RBcGlMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9mYXN0YXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Zhc3RBcGlMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIEFDQ09VTlRfSURfQUxJQVNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYVMzQnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2F0aGVuYVMzQnVja2V0JyxcbiAgICAgICAgICAgIE1BUlRfUzNfQlVDS0VUW3N0YWdlTmFtZV1cbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYUZ1bmN0aW9uTmFtZSA9IGxhbWJkYS5GdW5jdGlvbi5mcm9tRnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2xhbWJkYUZ1bmN0aW9uTmFtZScsIE1BUlRfTEFNQkRBX0ZVTkNUSU9OX05BTUVcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBlbnYgdmFyc1xuICAgICAgICAvLyBJdGVyYXRlIG92ZXIga3YgcGFpcnMgb2YgTUFSVF9FTlZfVkFSU1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhNQVJUX0VOVl9WQVJTKSkge1xuICAgICAgICAgICAgLy8gQWZ0ZXJcbiAgICAgICAgICAgIGlmIChwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdISk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJtaXNzaW9uc1xuICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIC8vIEZyb20gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZXhhbXBsZS1wb2xpY2llcy13b3JrZ3JvdXAuaHRtbFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2dyb3VwIGxpc3RzXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdEVuZ2luZVZlcnNpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0V29ya0dyb3VwcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFDYXRhbG9ncycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFiYXNlcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhQ2F0YWxvZycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfToqYF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgZXhlY3V0aW9uc1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UXVlcnlFeGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdG9wUXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5UmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzU3RyZWFtJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpDcmVhdGVOYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXROYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpCYXRjaEdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3ROYW1lZFF1ZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFByZXBhcmVkU3RhdGVtZW50cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6VXBkYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3QgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0ID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRFtzdGFnZU5hbWVdXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQkFTRV9VUkwnLCBJQ0FWMl9CQVNFX1VSTCxcbiAgICAgICAgKVxuICAgIH1cblxufVxuXG5cblxuXG4iXX0=
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0Esd0RBRUM7O0FBbkNELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUlnQztBQUdoQyxTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUF3RkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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Z0IsQ0FBQyxTQUFTLENBQUMsYUFBYSwrQ0FBK0MsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUN2SSxlQUFlLGlCQUFNLElBQUksMkJBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEseURBQXlELENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDakosZUFBZSxpQkFBTSxJQUFJLDJCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLDZDQUE2QyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUk7YUFDeEk7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLDhCQUE4QixDQUFDLFVBQVUsQ0FDNUUsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLENBQ2YsZ0JBQWdCLEVBQUUsc0JBQWMsQ0FDbkMsQ0FBQTtJQUVMLENBQUM7O0FBMVlMLDRDQTRZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7cmVzb2x2ZVN0YWdlTmFtZX0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge0FDQ09VTlRfSURfQUxJQVMsIFJFR0lPTn0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcbmltcG9ydCB7XG4gIElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsXG4gIElDQVYyX0JBU0VfVVJMLCBJQ0FWMl9QUk9KRUNUX1RPX1NUT1JBR0VfQ09ORklHVVJBVElPTlNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWCxcbiAgSUNBVjJfU1RPUkFHRV9DT05GSUdVUkFUSU9OX1NTTV9QQVJBTUVURVJfUEFUSF9QUkVGSVgsIElDQVYyX1NUT1JBR0VfQ1JFREVOVElBTFNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxufSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgaWNhdjJTdG9yYWdlQ29uZmlndXJhdGlvblNzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbiAgICByZWFkb25seSBpY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbiAgICByZWFkb25seSBpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblV2RnVuY3Rpb25Qcm9wcyBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIG9yY2FidXMgYXBpIHRvb2xzIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlT3JjYWJ1c0FwaVRvb2xzTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBtYXJ0IGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKiBOb3RlIHRoYXQgdGhlIG1hcnQgbGF5ZXIgaXMgYSBsaXR0bGUgaGVhdmllciB0aGFuIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllclxuICAgICAqIFNpbmNlIHdlIHJlcXVpcmUgcGFuZGFzIHRvIGJlIGluc3RhbGxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVNYXJ0TGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBpY2F2MiBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUljYXYyTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmYXN0YXBpIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlRmFzdEFwaUxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEIGFuZCBAREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSXG4gICAgICogZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXIgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzPzogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBtYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FLCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQVNPVVJDRV9OQU1FXG4gICAgICogYW5kIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FIGZvciB0aGUgYXRoZW5hIHdvcmtncm91cCwgZGF0YXNvdXJjZSBhbmQgZGF0YWJhc2UgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgbWFydEVudmlyb25tZW50VmFyaWFibGVzPzogTWFydEVudmlyb25tZW50VmFyaWFibGVzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBpY2F2MlJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEIGZvciB0aGUgc2VjcmV0XG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJSZXNvdXJjZXM/OiBJY2F2MlJlc291cmNlc1Byb3BzXG59XG5cblxuZXhwb3J0IGNsYXNzIFB5dGhvblV2RnVuY3Rpb24gZXh0ZW5kcyBQeXRob25GdW5jdGlvbiB7XG4gICAgLy8gQ2xhc3MgY29uc3RydWN0cywgdG8gYmUgdXNlZCBmb3IgY2FjaGluZyB0aGUgbGF5ZXJzXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBsYW1iZGFzIHRocm91Z2hvdXQgdGhlIHN0YWNrXG4gICAgLy8gVGhleSB3aWxsIGFsbCB1c2UgdGhlIHNhbWUgbGF5ZXJcbiAgICBwcml2YXRlIHN0YXRpYyBvcmNhYnVzQXBpVG9vbHNMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIG1hcnRMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIGljYXYyTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBmYXN0QXBpTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcblxuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQeXRob25VdkZ1bmN0aW9uUHJvcHMpIHtcbiAgICAgICAgY29uc3QgdXZQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5idW5kbGluZyxcbiAgICAgICAgICAgICAgICBidWlsZEFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncyxcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIFRBUkdFVFBMQVRGT1JNIHRvIGJ1aWxkIGFyZ3MgaWYgaXQncyBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgICAgICAgICAgICAgVEFSR0VUUExBVEZPUk06XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5idW5kbGluZz8uYnVpbGRBcmdzPy5UQVJHRVRQTEFURk9STSA/PyBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NC5kb2NrZXJQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYmVmb3JlQnVuZGxpbmcgYXMgdW5rbm93biBhcyBzdHJpbmdbXSA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwcm9wcy5idW5kbGluZz8uY29tbWFuZEhvb2tzPy5hZnRlckJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW10pLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlICpweWMgZmlsZXMgYW5kIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vKiBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvb3JjYWJ1c19hcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ21hcnRUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL21hcnRfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWFydFRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkSWNhdjJMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgdGhlIGxheWVyIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2Zhc3RBcGlMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9mYXN0YXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Zhc3RBcGlMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIEFDQ09VTlRfSURfQUxJQVNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYVMzQnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2F0aGVuYVMzQnVja2V0JyxcbiAgICAgICAgICAgIE1BUlRfUzNfQlVDS0VUW3N0YWdlTmFtZV1cbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYUZ1bmN0aW9uTmFtZSA9IGxhbWJkYS5GdW5jdGlvbi5mcm9tRnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2xhbWJkYUZ1bmN0aW9uTmFtZScsIE1BUlRfTEFNQkRBX0ZVTkNUSU9OX05BTUVcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBlbnYgdmFyc1xuICAgICAgICAvLyBJdGVyYXRlIG92ZXIga3YgcGFpcnMgb2YgTUFSVF9FTlZfVkFSU1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhNQVJUX0VOVl9WQVJTKSkge1xuICAgICAgICAgICAgLy8gQWZ0ZXJcbiAgICAgICAgICAgIGlmIChwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdISk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJtaXNzaW9uc1xuICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIC8vIEZyb20gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZXhhbXBsZS1wb2xpY2llcy13b3JrZ3JvdXAuaHRtbFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2dyb3VwIGxpc3RzXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdEVuZ2luZVZlcnNpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0V29ya0dyb3VwcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFDYXRhbG9ncycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFiYXNlcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhQ2F0YWxvZycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfToqYF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgZXhlY3V0aW9uc1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UXVlcnlFeGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdG9wUXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5UmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzU3RyZWFtJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpDcmVhdGVOYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXROYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpCYXRjaEdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3ROYW1lZFF1ZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFByZXBhcmVkU3RhdGVtZW50cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6VXBkYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3QgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0ID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRFtzdGFnZU5hbWVdXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcblxuICAgICAgICAvLyBBZGQgY29uZmlndXJhdGlvbiBwYXRoc1xuICAgICAgICBjb25zdCBpY2F2MlN0b3JhZ2VDb25maWd1cmF0aW9uU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA9IChcbiAgICAgICAgICBwcm9wcy5pY2F2MlN0b3JhZ2VDb25maWd1cmF0aW9uU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA/PyBJQ0FWMl9TVE9SQUdFX0NPTkZJR1VSQVRJT05fU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGljYXYyUHJvamVjdFRvU3RvcmFnZUNvbmZpZ3VyYXRpb25zU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA9IChcbiAgICAgICAgICBwcm9wcy5pY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXggPz8gSUNBVjJfUFJPSkVDVF9UT19TVE9SQUdFX0NPTkZJR1VSQVRJT05TX1NTTV9QQVJBTUVURVJfUEFUSF9QUkVGSVhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXggPSAoXG4gICAgICAgICAgcHJvcHMuaWNhdjJTdG9yYWdlQ3JlZGVudGlhbHNTc21QYXJhbWV0ZXJQYXRoUHJlZml4ID8/IElDQVYyX1NUT1JBR0VfQ1JFREVOVElBTFNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxuICAgICAgICApXG5cbiAgICAgICAgLy8gUHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHNzbSBwYXJhbWV0ZXIgcGF0aHNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF5IG5lZWQgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIGluZGl2aWR1YWxseSBvciBieSBwYXRoXG4gICAgICAgICAgICAgICAgYWN0aW9uczogWydzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsICdzc206R2V0UGFyYW1ldGVyJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OnBhcmFtZXRlciR7aWNhdjJTdG9yYWdlQ29uZmlndXJhdGlvblNzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06cGFyYW1ldGVyJHtpY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06cGFyYW1ldGVyJHtpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQkFTRV9VUkwnLCBJQ0FWMl9CQVNFX1VSTCxcbiAgICAgICAgKVxuXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
@@ -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.61" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.63" };
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.61" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.63" };
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.61",
3
+ "version": "0.0.63",
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.61" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.63" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -15,6 +15,9 @@ export declare const icav2AccessTokenSecretId: Record<StageName, string>;
15
15
  * The secret ID for the access token used to authenticate with the ICA API.
16
16
  */
17
17
  export declare const ICAV2_ACCESS_TOKEN_SECRET_ID: Record<StageName, string>;
18
+ export declare const ICAV2_STORAGE_CONFIGURATION_SSM_PARAMETER_PATH_PREFIX = "/icav2/umccr-prod/storage-configurations/";
19
+ export declare const ICAV2_PROJECT_TO_STORAGE_CONFIGURATIONS_SSM_PARAMETER_PATH_PREFIX = "/icav2/umccr-prod/project-to-storage-configurations/";
20
+ export declare const ICAV2_STORAGE_CREDENTIALS_SSM_PARAMETER_PATH_PREFIX = "/icav2/umccr-prod/storage-credentials/";
18
21
  /**
19
22
  * @deprecated Use ICAV2_BASE_URL instead.
20
23
  */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ICAV2_BASE_URL = exports.icav2BaseUrl = exports.ICAV2_ACCESS_TOKEN_SECRET_ID = exports.icav2AccessTokenSecretId = exports.ICAV2_PROJECT_ID = exports.icav2ProjectId = void 0;
3
+ exports.ICAV2_BASE_URL = exports.icav2BaseUrl = exports.ICAV2_STORAGE_CREDENTIALS_SSM_PARAMETER_PATH_PREFIX = exports.ICAV2_PROJECT_TO_STORAGE_CONFIGURATIONS_SSM_PARAMETER_PATH_PREFIX = exports.ICAV2_STORAGE_CONFIGURATION_SSM_PARAMETER_PATH_PREFIX = exports.ICAV2_ACCESS_TOKEN_SECRET_ID = exports.icav2AccessTokenSecretId = exports.ICAV2_PROJECT_ID = exports.icav2ProjectId = void 0;
4
4
  /**
5
5
  * @deprecated Use ICAV2_PROJECT_ID instead.
6
6
  */
@@ -33,6 +33,9 @@ exports.ICAV2_ACCESS_TOKEN_SECRET_ID = {
33
33
  GAMMA: 'ICAv2JWTKey-umccr-prod-service-staging', // pragma: allowlist secret
34
34
  PROD: 'ICAv2JWTKey-umccr-prod-service-production', // pragma: allowlist secret
35
35
  };
36
+ exports.ICAV2_STORAGE_CONFIGURATION_SSM_PARAMETER_PATH_PREFIX = '/icav2/umccr-prod/storage-configurations/';
37
+ exports.ICAV2_PROJECT_TO_STORAGE_CONFIGURATIONS_SSM_PARAMETER_PATH_PREFIX = '/icav2/umccr-prod/project-to-storage-configurations/';
38
+ exports.ICAV2_STORAGE_CREDENTIALS_SSM_PARAMETER_PATH_PREFIX = '/icav2/umccr-prod/storage-credentials/';
36
39
  /**
37
40
  * @deprecated Use ICAV2_BASE_URL instead.
38
41
  */
@@ -41,4 +44,4 @@ exports.icav2BaseUrl = "https://ica.illumina.com/ica/rest";
41
44
  * The base URL for the ICA API v2.
42
45
  */
43
46
  exports.ICAV2_BASE_URL = "https://ica.illumina.com/ica/rest";
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNhdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpY2F2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7R0FFRztBQUNVLFFBQUEsY0FBYyxHQUE4QjtJQUN2RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsY0FBYztJQUM1RCxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsVUFBVTtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsYUFBYTtDQUM1RCxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUE4QjtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsY0FBYztJQUM1RCxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsVUFBVTtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsYUFBYTtDQUM1RCxDQUFBO0FBRUQ7O0dBRUc7QUFDVSxRQUFBLHdCQUF3QixHQUE4QjtJQUNqRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsMkJBQTJCO0lBQ3ZFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRSwyQkFBMkI7SUFDNUUsSUFBSSxFQUFFLDJDQUEyQyxFQUFFLDJCQUEyQjtDQUMvRSxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUcsMkJBQTJCO0lBQ3hFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRywyQkFBMkI7SUFDN0UsSUFBSSxFQUFFLDJDQUEyQyxFQUFHLDJCQUEyQjtDQUNoRixDQUFBO0FBRUQ7O0dBRUc7QUFDVSxRQUFBLFlBQVksR0FBVyxtQ0FBbUMsQ0FBQTtBQUV2RTs7R0FFRztBQUNVLFFBQUEsY0FBYyxHQUFXLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdGFnZU5hbWV9IGZyb20gXCIuL2FjY291bnRzXCI7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIElDQVYyX1BST0pFQ1RfSUQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGljYXYyUHJvamVjdElkOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImVhMTlhM2Y1LWVjN2MtNDk0MC1hNDc0LWMzMWNkOTFkYmFkNFwiLCAvLyBkZXZlbG9wbWVudFxuICBHQU1NQTogXCIxNTdiOWU3OC1iMmUxLTQ1YTctYmZjZC02OTExNTk5OTVmN2NcIiwgLy8gc3RhZ2luZ1xuICBQUk9EOiBcImViYTVjOTQ2LTE2NzctNDQxZC1iYmNlLTZhMTFiYWFkZWNiYlwiLCAvLyBwcm9kdWN0aW9uXG59O1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHByb2plY3QgSUQgZm9yIG91ciBJQ0EgdGVuYW50XG4gKi9cbmV4cG9ydCBjb25zdCBJQ0FWMl9QUk9KRUNUX0lEOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImVhMTlhM2Y1LWVjN2MtNDk0MC1hNDc0LWMzMWNkOTFkYmFkNFwiLCAvLyBkZXZlbG9wbWVudFxuICBHQU1NQTogXCIxNTdiOWU3OC1iMmUxLTQ1YTctYmZjZC02OTExNTk5OTVmN2NcIiwgLy8gc3RhZ2luZ1xuICBQUk9EOiBcImViYTVjOTQ2LTE2NzctNDQxZC1iYmNlLTZhMTFiYWFkZWNiYlwiLCAvLyBwcm9kdWN0aW9uXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgR0FNTUE6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2Utc3RhZ2luZycsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBQUk9EOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXByb2R1Y3Rpb24nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn07XG5cbi8qKlxuICogVGhlIHNlY3JldCBJRCBmb3IgdGhlIGFjY2VzcyB0b2tlbiB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBJQ0EgQVBJLlxuICovXG5leHBvcnQgY29uc3QgSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gIEdBTU1BOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXN0YWdpbmcnLCAgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gIFBST0Q6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2UtcHJvZHVjdGlvbicsICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgSUNBVjJfQkFTRV9VUkwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGljYXYyQmFzZVVybDogc3RyaW5nID0gXCJodHRwczovL2ljYS5pbGx1bWluYS5jb20vaWNhL3Jlc3RcIlxuXG4vKipcbiAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIElDQSBBUEkgdjIuXG4gKi9cbmV4cG9ydCBjb25zdCBJQ0FWMl9CQVNFX1VSTDogc3RyaW5nID0gXCJodHRwczovL2ljYS5pbGx1bWluYS5jb20vaWNhL3Jlc3RcIjsiXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNhdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpY2F2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7R0FFRztBQUNVLFFBQUEsY0FBYyxHQUE4QjtJQUN2RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsY0FBYztJQUM1RCxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsVUFBVTtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsYUFBYTtDQUM1RCxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUE4QjtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsY0FBYztJQUM1RCxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsVUFBVTtJQUN6RCxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsYUFBYTtDQUM1RCxDQUFBO0FBRUQ7O0dBRUc7QUFDVSxRQUFBLHdCQUF3QixHQUE4QjtJQUNqRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsMkJBQTJCO0lBQ3ZFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRSwyQkFBMkI7SUFDNUUsSUFBSSxFQUFFLDJDQUEyQyxFQUFFLDJCQUEyQjtDQUMvRSxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLDRCQUE0QixHQUE4QjtJQUNyRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUcsMkJBQTJCO0lBQ3hFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRywyQkFBMkI7SUFDN0UsSUFBSSxFQUFFLDJDQUEyQyxFQUFHLDJCQUEyQjtDQUNoRixDQUFBO0FBRVksUUFBQSxxREFBcUQsR0FBRywyQ0FBMkMsQ0FBQTtBQUNuRyxRQUFBLGlFQUFpRSxHQUFHLHNEQUFzRCxDQUFBO0FBQzFILFFBQUEsbURBQW1ELEdBQUcsd0NBQXdDLENBQUE7QUFFM0c7O0dBRUc7QUFDVSxRQUFBLFlBQVksR0FBVyxtQ0FBbUMsQ0FBQTtBQUV2RTs7R0FFRztBQUNVLFFBQUEsY0FBYyxHQUFXLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdGFnZU5hbWV9IGZyb20gXCIuL2FjY291bnRzXCI7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIElDQVYyX1BST0pFQ1RfSUQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGljYXYyUHJvamVjdElkOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImVhMTlhM2Y1LWVjN2MtNDk0MC1hNDc0LWMzMWNkOTFkYmFkNFwiLCAvLyBkZXZlbG9wbWVudFxuICBHQU1NQTogXCIxNTdiOWU3OC1iMmUxLTQ1YTctYmZjZC02OTExNTk5OTVmN2NcIiwgLy8gc3RhZ2luZ1xuICBQUk9EOiBcImViYTVjOTQ2LTE2NzctNDQxZC1iYmNlLTZhMTFiYWFkZWNiYlwiLCAvLyBwcm9kdWN0aW9uXG59O1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHByb2plY3QgSUQgZm9yIG91ciBJQ0EgdGVuYW50XG4gKi9cbmV4cG9ydCBjb25zdCBJQ0FWMl9QUk9KRUNUX0lEOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImVhMTlhM2Y1LWVjN2MtNDk0MC1hNDc0LWMzMWNkOTFkYmFkNFwiLCAvLyBkZXZlbG9wbWVudFxuICBHQU1NQTogXCIxNTdiOWU3OC1iMmUxLTQ1YTctYmZjZC02OTExNTk5OTVmN2NcIiwgLy8gc3RhZ2luZ1xuICBQUk9EOiBcImViYTVjOTQ2LTE2NzctNDQxZC1iYmNlLTZhMTFiYWFkZWNiYlwiLCAvLyBwcm9kdWN0aW9uXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgR0FNTUE6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2Utc3RhZ2luZycsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBQUk9EOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXByb2R1Y3Rpb24nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn07XG5cbi8qKlxuICogVGhlIHNlY3JldCBJRCBmb3IgdGhlIGFjY2VzcyB0b2tlbiB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBJQ0EgQVBJLlxuICovXG5leHBvcnQgY29uc3QgSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gIEdBTU1BOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXN0YWdpbmcnLCAgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gIFBST0Q6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2UtcHJvZHVjdGlvbicsICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn1cblxuZXhwb3J0IGNvbnN0IElDQVYyX1NUT1JBR0VfQ09ORklHVVJBVElPTl9TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYID0gJy9pY2F2Mi91bWNjci1wcm9kL3N0b3JhZ2UtY29uZmlndXJhdGlvbnMvJ1xuZXhwb3J0IGNvbnN0IElDQVYyX1BST0pFQ1RfVE9fU1RPUkFHRV9DT05GSUdVUkFUSU9OU19TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYID0gJy9pY2F2Mi91bWNjci1wcm9kL3Byb2plY3QtdG8tc3RvcmFnZS1jb25maWd1cmF0aW9ucy8nXG5leHBvcnQgY29uc3QgSUNBVjJfU1RPUkFHRV9DUkVERU5USUFMU19TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYID0gJy9pY2F2Mi91bWNjci1wcm9kL3N0b3JhZ2UtY3JlZGVudGlhbHMvJ1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBJQ0FWMl9CQVNFX1VSTCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgaWNhdjJCYXNlVXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vaWNhLmlsbHVtaW5hLmNvbS9pY2EvcmVzdFwiXG5cbi8qKlxuICogVGhlIGJhc2UgVVJMIGZvciB0aGUgSUNBIEFQSSB2Mi5cbiAqL1xuZXhwb3J0IGNvbnN0IElDQVYyX0JBU0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vaWNhLmlsbHVtaW5hLmNvbS9pY2EvcmVzdFwiOyJdfQ==
@@ -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.61" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.63" };
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.61" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.63" };
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.61" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.63" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack