@fjall/components-infrastructure 0.79.3 → 0.80.4

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.
Files changed (94) hide show
  1. package/dist/lib/app.d.ts +39 -2
  2. package/dist/lib/app.js +85 -4
  3. package/dist/lib/aspects/resourceInventory.d.ts +41 -0
  4. package/dist/lib/aspects/resourceInventory.js +56 -0
  5. package/dist/lib/config/audit.d.ts +18 -0
  6. package/dist/lib/config/audit.js +22 -0
  7. package/dist/lib/config/aws/accountId.js +3 -3
  8. package/dist/lib/config/aws/ecrDefaultImage.js +7 -7
  9. package/dist/lib/config/aws/identityCenter.js +7 -8
  10. package/dist/lib/config/aws/identityCenterGroupMembership.js +6 -6
  11. package/dist/lib/config/aws/ipam.js +3 -3
  12. package/dist/lib/config/aws/ipamPoolId.js +4 -4
  13. package/dist/lib/config/aws/organisation.js +2 -3
  14. package/dist/lib/config/aws/organisationId.js +4 -4
  15. package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
  16. package/dist/lib/patterns/aws/auditRole.js +58 -0
  17. package/dist/lib/patterns/aws/buildkite.js +12 -12
  18. package/dist/lib/patterns/aws/cdn.d.ts +133 -0
  19. package/dist/lib/patterns/aws/cdn.js +216 -0
  20. package/dist/lib/patterns/aws/compute.d.ts +32 -13
  21. package/dist/lib/patterns/aws/compute.js +24 -14
  22. package/dist/lib/patterns/aws/database.d.ts +2 -1
  23. package/dist/lib/patterns/aws/database.js +7 -2
  24. package/dist/lib/patterns/aws/dynamodb.d.ts +66 -0
  25. package/dist/lib/patterns/aws/dynamodb.js +106 -0
  26. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  27. package/dist/lib/patterns/aws/index.d.ts +1 -0
  28. package/dist/lib/patterns/aws/index.js +2 -1
  29. package/dist/lib/patterns/aws/loadBalancer.d.ts +163 -0
  30. package/dist/lib/patterns/aws/loadBalancer.js +278 -0
  31. package/dist/lib/patterns/aws/managedAccount.js +3 -4
  32. package/dist/lib/patterns/aws/queue.d.ts +61 -0
  33. package/dist/lib/patterns/aws/queue.js +103 -0
  34. package/dist/lib/patterns/aws/storage.js +3 -2
  35. package/dist/lib/patterns/aws/subdomainHostedZone.js +2 -2
  36. package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
  37. package/dist/lib/resources/aws/audit/auditRole.js +44 -0
  38. package/dist/lib/resources/aws/backup/backupPlan.js +3 -4
  39. package/dist/lib/resources/aws/backup/backupVault.js +3 -4
  40. package/dist/lib/resources/aws/base/awsStack.js +1 -2
  41. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +65 -0
  42. package/dist/lib/resources/aws/cdn/cloudFront.js +135 -0
  43. package/dist/lib/resources/aws/cdn/index.d.ts +1 -0
  44. package/dist/lib/resources/aws/cdn/index.js +18 -0
  45. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +20 -0
  46. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +180 -0
  47. package/dist/lib/resources/aws/compute/ecs.d.ts +65 -11
  48. package/dist/lib/resources/aws/compute/ecs.js +293 -124
  49. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +1 -2
  50. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -4
  51. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +1 -2
  52. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -4
  53. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -1
  54. package/dist/lib/resources/aws/compute/lambda.js +71 -4
  55. package/dist/lib/resources/aws/database/database.js +1 -1
  56. package/dist/lib/resources/aws/database/dynamodb.d.ts +70 -0
  57. package/dist/lib/resources/aws/database/dynamodb.js +170 -0
  58. package/dist/lib/resources/aws/database/rdsAurora.js +5 -5
  59. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +7 -7
  60. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +33 -0
  61. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +74 -0
  62. package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
  63. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +2 -2
  64. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
  65. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
  66. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
  67. package/dist/lib/resources/aws/logging/cloudTrail.js +1 -1
  68. package/dist/lib/resources/aws/messaging/index.d.ts +1 -0
  69. package/dist/lib/resources/aws/messaging/index.js +18 -0
  70. package/dist/lib/resources/aws/messaging/sqs.d.ts +65 -0
  71. package/dist/lib/resources/aws/messaging/sqs.js +195 -0
  72. package/dist/lib/resources/aws/monitoring/monitoringRole.js +2 -3
  73. package/dist/lib/resources/aws/networking/ipamPool.js +1 -1
  74. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
  75. package/dist/lib/resources/aws/networking/vpc.js +7 -3
  76. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +20 -0
  77. package/dist/lib/resources/aws/networking/vpcEndpoint.js +59 -0
  78. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +71 -0
  79. package/dist/lib/resources/aws/networking/vpcEndpoints.js +125 -0
  80. package/dist/lib/resources/aws/secrets/secret.js +1 -1
  81. package/dist/lib/resources/aws/storage/ecr.d.ts +1 -2
  82. package/dist/lib/resources/aws/storage/ecr.js +2 -2
  83. package/dist/lib/resources/aws/utilities/cfnOutput.test.d.ts +1 -0
  84. package/dist/lib/resources/aws/utilities/cfnOutput.test.js +102 -0
  85. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -2
  86. package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
  87. package/dist/lib/resources/aws/utilities/customResource.d.ts +2 -1
  88. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  89. package/dist/lib/utils/getStackOutput.js +2 -2
  90. package/dist/lib/utils/sanitizeCfnKey.d.ts +5 -0
  91. package/dist/lib/utils/sanitizeCfnKey.js +11 -0
  92. package/dist/lib/utils/tagResource.d.ts +24 -0
  93. package/dist/lib/utils/tagResource.js +30 -0
  94. package/package.json +6 -5
@@ -76,7 +76,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
76
76
  "fjall:costAllocation:owner": props.owner || "engineer" // TODO: this will have to be the platform account name?
77
77
  };
78
78
  // VPC
79
- const vpc = new vpc_1.Vpc(this, "buildkite", {
79
+ const vpc = new vpc_1.Vpc(this, `${id}Vpc`, {
80
80
  accountId: props.accountId,
81
81
  subnetConfiguration: [
82
82
  {
@@ -86,11 +86,11 @@ class Buildkite extends aws_cdk_lib_1.Stack {
86
86
  ]
87
87
  });
88
88
  // Artifacts Bucket
89
- const artifactBucket = new storage_1.S3Bucket(this, "artifactBucket");
89
+ const artifactBucket = new storage_1.S3Bucket(this, `${id}ArtifactBucket`);
90
90
  // Managed Secrets
91
- const managedSecretsBucket = new storage_1.S3Bucket(this, "managedSecretsBucket");
91
+ const managedSecretsBucket = new storage_1.S3Bucket(this, `${id}ManagedSecretsBucket`);
92
92
  if (process.env.BUILDKITE_PRIVATE_SSH_KEY) {
93
- new aws_s3_deployment_1.BucketDeployment(this, "buildkiteSshKey", {
93
+ new aws_s3_deployment_1.BucketDeployment(this, `${id}SshKeyDeployment`, {
94
94
  sources: [
95
95
  aws_s3_deployment_1.Source.data("private_ssh_key", process.env.BUILDKITE_PRIVATE_SSH_KEY)
96
96
  ],
@@ -101,7 +101,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
101
101
  console.warn("WARN:'BUILDKITE_PRIVATE_SSH_KEY' environment variable not declared. Skipping upload of private SSH key");
102
102
  }
103
103
  // Encrypted Buildkite Agent Token
104
- const agentToken = new secrets_1.SecureStringParameter(this, "agentToken", {
104
+ const agentToken = new secrets_1.SecureStringParameter(this, `${id}AgentToken`, {
105
105
  name: `/buildkite/agentToken`,
106
106
  aliasName: `buildkiteAgentToken`,
107
107
  value: process.env.BUILDKITE_AGENT_TOKEN,
@@ -111,7 +111,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
111
111
  region: this.region
112
112
  });
113
113
  // Buildkite Agent Execution Role
114
- const agentRole = new iam_1.Role(this, "agentIamRole", {
114
+ const agentRole = new iam_1.Role(this, `${id}AgentRole`, {
115
115
  roleName: `${id}AgentRole`,
116
116
  description: "Buildkite Agent IAM Role",
117
117
  inlinePolicies: {
@@ -244,7 +244,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
244
244
  // Merge User Data
245
245
  multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(installElasticStackUserData, "text/x-shellscript; charset='us-ascii'"));
246
246
  // Launch Template
247
- const launchTemplate = new aws_ec2_1.LaunchTemplate(this, "agentLaunchTemplate", {
247
+ const launchTemplate = new aws_ec2_1.LaunchTemplate(this, `${id}AgentLaunchTemplate`, {
248
248
  launchTemplateName: `buildkiteLaunchTemplate`,
249
249
  instanceType: props.agentInstanceType,
250
250
  machineImage: aws_ec2_1.MachineImage.lookup({
@@ -273,7 +273,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
273
273
  aws_cdk_lib_1.Tags.of(launchTemplate).add("BuildkiteAgentRelease", agentRelease.STABLE);
274
274
  aws_cdk_lib_1.Tags.of(launchTemplate).add("BuildkiteQueue", props.buildkiteQueue);
275
275
  // Autoscaling Group
276
- const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "agentAutoScalingGroup", {
276
+ const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, `${id}AgentAutoScalingGroup`, {
277
277
  vpc: vpc,
278
278
  mixedInstancesPolicy: {
279
279
  launchTemplate: launchTemplate,
@@ -299,7 +299,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
299
299
  ],
300
300
  ssmSessionPermissions: true
301
301
  });
302
- agentRole.attachInlinePolicy(new iam_1.Policy(this, "updateAutoScalingGroup", {
302
+ agentRole.attachInlinePolicy(new iam_1.Policy(this, `${id}UpdateAutoScalingGroupPolicy`, {
303
303
  statements: [
304
304
  new aws_iam_1.PolicyStatement({
305
305
  actions: [
@@ -311,7 +311,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
311
311
  ]
312
312
  }));
313
313
  // Buildkite Suspend Austoscaling Group Custom Resource
314
- new awsCustomResource_1.AwsCustomResource(this, "suspendAutoscalingProcess", {
314
+ new awsCustomResource_1.AwsCustomResource(this, `${id}SuspendAutoscalingProcess`, {
315
315
  functionName: "suspendAutoScalingProcessess",
316
316
  onCreate: {
317
317
  service: "AutoScaling",
@@ -333,7 +333,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
333
333
  },
334
334
  resourceType: "Custom::buildkiteSuspendAutoscaling"
335
335
  });
336
- new aws_sam_1.CfnApplication(this, "agentScaler", {
336
+ new aws_sam_1.CfnApplication(this, `${id}AgentScaler`, {
337
337
  location: {
338
338
  applicationId: "arn:aws:serverlessrepo:us-east-1:172840064832:applications/buildkite-agent-scaler",
339
339
  semanticVersion: props.buildkiteAgentScalerVersion
@@ -358,4 +358,4 @@ class Buildkite extends aws_cdk_lib_1.Stack {
358
358
  }
359
359
  exports.Buildkite = Buildkite;
360
360
  exports.default = Buildkite;
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFFO0FBQ3JFLGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFHcEYsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFtRFksUUFBQSxxQkFBcUIsR0E4QzlCO0lBQ0YsZ0NBQWdDO0lBQ2hDLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsTUFBTTtJQUMxQyxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMseUJBQXlCLEVBQUUsRUFBRTtJQUM3QiwyQkFBMkIsRUFBRSxPQUFPO0lBQ3BDLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQywrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLGtDQUFrQyxFQUFFLEtBQUs7SUFDekMsa0NBQWtDLEVBQUUsRUFBRTtJQUN0QyxjQUFjLEVBQUUsU0FBUztJQUN6QixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxF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MUQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtnQkFDekQsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtnQkFDcEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcllELDhCQXFZQztBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCB0eXBlIFN0YWNrUHJvcHMsIFN0YWNrLCBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVQcmluY2lwYWwsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIEJsb2NrRGV2aWNlVm9sdW1lLFxuICBJbnN0YW5jZUNsYXNzLFxuICBJbnN0YW5jZVNpemUsXG4gIEluc3RhbmNlVHlwZSxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIExhdW5jaFRlbXBsYXRlSHR0cFRva2VucyxcbiAgTWFjaGluZUltYWdlLFxuICBNdWx0aXBhcnRCb2R5LFxuICBNdWx0aXBhcnRVc2VyRGF0YSxcbiAgU3VibmV0VHlwZSxcbiAgVXNlckRhdGFcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1dG9TY2FsaW5nR3JvdXAsXG4gIEdyb3VwTWV0cmljcyxcbiAgU3BvdEFsbG9jYXRpb25TdHJhdGVneSxcbiAgVGVybWluYXRpb25Qb2xpY3ksXG4gIFVwZGF0ZVBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWF1dG9zY2FsaW5nXCI7XG5pbXBvcnQgeyBDZm5BcHBsaWNhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2FtXCI7XG5pbXBvcnQgeyBQaHlzaWNhbFJlc291cmNlSWQgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3VyZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmVudW0gYWdlbnRSZWxlYXNlIHtcbiAgU1RBQkxFID0gXCJzdGFibGVcIixcbiAgQkVUQSA9IFwiYmV0YVwiLFxuICBFREdFID0gXCJlZGdlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGtpdGVQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIGVsYXN0aWNTdGFja1ZlcnNpb246IHN0cmluZztcbiAga2V5TmFtZTogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZTtcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHM6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBzdHJpbmc7XG4gIGxvZ1JldGVudGlvbkRheXM6IG51bWJlcjtcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIiB8IFwiZGF0YWRvZ1wiIHwgXCJvcGVudGVsZW1ldHJ5XCI7XG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IG51bWJlcjtcbiAgYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYjogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogc3RyaW5nO1xuICBidWlsZGtpdGVRdWV1ZTogc3RyaW5nO1xuICBhZ2VudHNQZXJJbnN0YW5jZTogbnVtYmVyO1xuICBib290c3RyYXBTY3JpcHRVcmw6IHN0cmluZztcbiAgYWdlbnRFbnZGaWxlVXJsOiBzdHJpbmc7XG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogc3RyaW5nO1xuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICBhZ2VudFZvbHVtZVNpemU6IG51bWJlcjtcbiAgYWdlbnRNaW5JbnN0YW5jZXM6IG51bWJlcjtcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IG51bWJlcjtcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogc3RyaW5nO1xuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IHN0cmluZztcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogbnVtYmVyO1xuICBzY2FsZU91dEZhY3Rvcjogc3RyaW5nO1xuICBlY3JBY2Nlc3NQb2xpY3k6IHN0cmluZztcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IG51bWJlcjtcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogYm9vbGVhbjtcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIiB8IFwiZHVhbHN0YWNrXCI7XG4gIGVuYWJsZVNlY3JldHNQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZUVjclBsdWdpbjogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyTG9naW5QbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcDogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsOiBib29sZWFuO1xuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGJvb2xlYW47XG4gIG1vdW50VG1wZnNBdFRtcDogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBib29sZWFuO1xuICBwaXBlbGluZVNpZ25pbmdLTVNLZXk6IHN0cmluZztcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIgfCBcIndhcm5cIjtcbiAgLy8gVGFnc1xuICAvLyBUT0RPOiBNb3ZlIHRoZXNlIGludG8gYSBzaW5nbGUgdGFncyBvYmplY3RcbiAgdGFnczogS2V5VmFsdWU7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQnVpbGRraXRlRGVmYXVsdFByb3BzOiBQaWNrPFxuICBCdWlsZGtpdGVQcm9wcyxcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgfCBcImVsYXN0aWNTdGFja1ZlcnNpb25cIlxuICB8IFwia2V5TmFtZVwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFJlbGVhc2VcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUYWdzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFeHBlcmltZW50c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb25cIlxuICB8IFwibG9nUmV0ZW50aW9uRGF5c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2RcIlxuICB8IFwiYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYlwiXG4gIHwgXCJidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zXCJcbiAgfCBcImJ1aWxka2l0ZVF1ZXVlXCJcbiAgfCBcImFnZW50c1Blckluc3RhbmNlXCJcbiAgfCBcImJvb3RzdHJhcFNjcmlwdFVybFwiXG4gIHwgXCJhZ2VudEVudkZpbGVVcmxcIlxuICB8IFwiYXV0aG9yaXplZFVzZXJzVXJsXCJcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgfCBcImFnZW50SW5zdGFuY2VUeXBlXCJcbiAgfCBcImFnZW50Vm9sdW1lU2l6ZVwiXG4gIHwgXCJhZ2VudE1pbkluc3RhbmNlc1wiXG4gIHwgXCJhZ2VudE1heEluc3RhbmNlc1wiXG4gIHwgXCJzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kXCJcbiAgfCBcInNjYWxlck1pblBvbGxJbnRlcnZhbFwiXG4gIHwgXCJzcG90Q2FwYWNpdHlQZXJjZW50YWdlXCJcbiAgfCBcInNjYWxlT3V0RmFjdG9yXCJcbiAgfCBcInNjYWxlSW5JZGxlUGVyaW9kXCJcbiAgfCBcInNjYWxlT3V0V2FpdGluZ0ZvckpvYnNcIlxuICB8IFwiZWNyQWNjZXNzUG9saWN5XCJcbiAgfCBcImRvY2tlck5ldHdvcmtpbmdQcm90b2NvbFwiXG4gIHwgXCJlbmFibGVTZWNyZXRzUGx1Z2luXCJcbiAgfCBcImVuYWJsZUVjclBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJMb2dpblBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXBcIlxuICB8IFwiZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsXCJcbiAgfCBcImVuYWJsZUluc3RhbmNlU3RvcmFnZVwiXG4gIHwgXCJtb3VudFRtcGZzQXRUbXBcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzXCJcbiAgfCBcInBpcGVsaW5lU2lnbmluZ0tNU0tleVwiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3JcIlxuICAvLyBUYWdzXG4gIHwgXCJlbnZpcm9ubWVudFwiXG4gIHwgXCJvd25lclwiXG4+ID0ge1xuICAvLyBCdWlsZGtpdGUgQWdlbnQgQ29uZmlndXJhdGlvblxuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBcInY2LjMwLjBcIixcbiAga2V5TmFtZTogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICBidWlsZGtpdGVBZ2VudFRhZ3M6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGZhbHNlLFxuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb246IFwiMS44LjBcIixcbiAgbG9nUmV0ZW50aW9uRGF5czogMSxcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZDogNjAsXG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGZhbHNlLFxuICBidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zOiBcIlwiLFxuICBidWlsZGtpdGVRdWV1ZTogXCJkZWZhdWx0XCIsXG4gIGFnZW50c1Blckluc3RhbmNlOiAxLFxuICBib290c3RyYXBTY3JpcHRVcmw6IFwiXCIsXG4gIGFnZW50RW52RmlsZVVybDogXCJcIixcbiAgYXV0aG9yaXplZFVzZXJzVXJsOiBcIlwiLFxuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTUsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gIGFnZW50TWluSW5zdGFuY2VzOiAwLFxuICBhZ2VudE1heEluc3RhbmNlczogMTAsXG4gIGFnZW50Vm9sdW1lU2l6ZTogMjUwLFxuICBzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kOiBcIjEgbWludXRlXCIsXG4gIHNjYWxlck1pblBvbGxJbnRlcnZhbDogXCIxMHNcIixcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogNzUsXG4gIHNjYWxlT3V0RmFjdG9yOiBcIjEuMFwiLFxuICBzY2FsZUluSWRsZVBlcmlvZDogNjAwLFxuICBzY2FsZU91dFdhaXRpbmdGb3JKb2JzOiBmYWxzZSxcbiAgZWNyQWNjZXNzUG9saWN5OiBcIlwiLFxuICBkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2w6IFwiaXB2NFwiLFxuICBlbmFibGVTZWNyZXRzUGx1Z2luOiB0cnVlLFxuICBlbmFibGVFY3JQbHVnaW46IHRydWUsXG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IHRydWUsXG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogZmFsc2UsXG4gIGVuYWJsZUluc3RhbmNlU3RvcmFnZTogZmFsc2UsXG4gIG1vdW50VG1wZnNBdFRtcDogdHJ1ZSxcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBmYWxzZSxcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBcIlwiLFxuICBwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3I6IFwiYmxvY2tcIixcbiAgLy8gVGFnc1xuICBlbnZpcm9ubWVudDogXCJwbGF0Zm9ybVwiLFxuICBvd25lcjogXCJlbmdpbmVlclwiXG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRraXRlIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRraXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBpbW11dGFibGUgYW5kIGVuZm9yY2UgdGhlIHRhZ3MgYmVpbmcgc2V0XG4gICAgY29uc3QgdGFncyA9IHtcbiAgICAgIC4uLnByb3BzLnRhZ3MsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50IHx8IFwicGxhdGZvcm1cIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBwcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCIgLy8gVE9ETzogdGhpcyB3aWxsIGhhdmUgdG8gYmUgdGhlIHBsYXRmb3JtIGFjY291bnQgbmFtZT9cbiAgICB9O1xuXG4gICAgLy8gVlBDXG4gICAgY29uc3QgdnBjID0gbmV3IFZwYyh0aGlzLCBcImJ1aWxka2l0ZVwiLCB7XG4gICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwiYXJ0aWZhY3RCdWNrZXRcIik7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcIm1hbmFnZWRTZWNyZXRzQnVja2V0XCIpO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcImJ1aWxka2l0ZVNzaEtleVwiLCB7XG4gICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICBTb3VyY2UuZGF0YShcInByaXZhdGVfc3NoX2tleVwiLCBwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKVxuICAgICAgICBdLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogbWFuYWdlZFNlY3JldHNCdWNrZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiV0FSTjonQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdGVkIEJ1aWxka2l0ZSBBZ2VudCBUb2tlblxuICAgIGNvbnN0IGFnZW50VG9rZW4gPSBuZXcgU2VjdXJlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiYWdlbnRUb2tlblwiLCB7XG4gICAgICBuYW1lOiBgL2J1aWxka2l0ZS9hZ2VudFRva2VuYCxcbiAgICAgIGFsaWFzTmFtZTogYGJ1aWxka2l0ZUFnZW50VG9rZW5gLFxuICAgICAgdmFsdWU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTixcbiAgICAgIG92ZXJ3cml0ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGFnczogdGFncyxcbiAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgYWdlbnRSb2xlID0gbmV3IFJvbGUodGhpcywgXCJhZ2VudElhbVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGAke2lkfUFnZW50Um9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJCdWlsZGtpdGUgQWdlbnQgSUFNIFJvbGVcIixcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcImRlY3J5cHRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudj8ucmVnaW9ufToke3Byb3BzLmVudj8uYWNjb3VudH06cGFyYW1ldGVyJHthZ2VudFRva2VuLm5hbWV9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRNYW5hZ2VkU2VjcmV0c0J1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiczM6R2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBtYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlQXJ0aWZhY3RCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uQWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGFydGlmYWN0QnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHthcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiZGVzY3JpYmVJbnN0YW5jZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6RGVzY3JpYmVBdXRvU2NhbGluZ0luc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpQdXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBcImVjMjpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wibG9nZ2luZ1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJzc21cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOkxpc3RBc3NvY2lhdGlvbnNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpQdXRJbnZlbnRvcnlcIixcbiAgICAgICAgICAgICAgICBcInNzbTpVcGRhdGVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpBY2tub3dsZWRnZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkRlbGV0ZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkZhaWxNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0TWVzc2FnZXNcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOlNlbmRSZXBseVwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIilcbiAgICAgIClcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFQzIgVXNlciBEYXRhXG4gICAgY29uc3QgbXVsdGlwYXJ0VXNlckRhdGEgPSBuZXcgTXVsdGlwYXJ0VXNlckRhdGEoKTtcblxuICAgIC8vIENsb3VkIENvbmZpZ1xuICAgIGNvbnN0IGNsb3VkQ29uZmlnVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiNjbG91ZC1jb25maWdcIlxuICAgIH0pO1xuICAgIGNsb3VkQ29uZmlnVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImNsb3VkX2ZpbmFsX21vZHVsZXM6XCIsXG4gICAgICBcIiAgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY2xvdWRDb25maWdVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTW91bnQgU3RvcmFnZVxuICAgIGNvbnN0IG1vdW50U3RvcmFnZVVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgbW91bnRTdG9yYWdlVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9NT1VOVF9UTVBGU19BVF9UTVA9JyR7cHJvcHMubW91bnRUbXBmc0F0VG1wfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLW1vdW50LWluc3RhbmNlLXN0b3JhZ2Uuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIENvbmZpZ3VyZSBEb2NrZXJcbiAgICBjb25zdCBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTkVUV09SS0lOR19QUk9UT0NPTD0nJHtwcm9wcy5kb2NrZXJOZXR3b3JraW5nUHJvdG9jb2x9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWNvbmZpZ3VyZS1kb2NrZXIuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfTkFNRT0nJHtpZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TVEFDS19WRVJTSU9OPScke3Byb3BzLmVsYXN0aWNTdGFja1ZlcnNpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0NBTEVfSU5fSURMRV9QRVJJT0Q9JyR7cHJvcHMuc2NhbGVJbklkbGVQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVQ9JyR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0TmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVE9LRU5fUEFUSD0nJHthZ2VudFRva2VuLm5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRTX1BFUl9JTlNUQU5DRT0nJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UQUdTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGFnc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9USU1FU1RBTVBfTElORVM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUaW1lc3RhbXBMaW5lc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FWFBFUklNRU5UUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RSQUNJTkdfQkFDS0VORD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1JFTEVBU0U9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRSZWxlYXNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0NBTkNFTF9HUkFDRV9QRVJJT0Q9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0tNU19LRVk9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nS01TS2V5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfRkFJTFVSRV9CRUhBVklPUj0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfUVVFVUU9JyR7cHJvcHMuYnVpbGRraXRlUXVldWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRU5BQkxFX0dJVF9NSVJST1JTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTEFTVElDX0JPT1RTVFJBUF9TQ1JJUFQ9JyR7cHJvcHMuYm9vdHN0cmFwU2NyaXB0VXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOVl9GSUxFX1VSTD0nJHtwcm9wcy5hZ2VudEVudkZpbGVVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FVVEhPUklaRURfVVNFUlNfVVJMPScke3Byb3BzLmF1dGhvcml6ZWRVc2Vyc1VybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FQ1JfUE9MSUNZPScke3Byb3BzLmVjckFjY2Vzc1BvbGljeX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9URVJNSU5BVEVfSU5TVEFOQ0VfQUZURVJfSk9CPScke3Byb3BzLmJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQURESVRJT05BTF9TVURPX1BFUk1JU1NJT05TPScke3Byb3BzLmJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnN9JyBcXFxcYCxcbiAgICAgIGBBV1NfREVGQVVMVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBTRUNSRVRTX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZVNlY3JldHNQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBFQ1JfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRWNyUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0xPR0lOX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZURvY2tlckxvZ2luUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYEFXU19SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstaW5zdGFsbC1lbGFzdGljLXN0YWNrLnNoXCJcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgVXNlciBEYXRhXG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBMYXVuY2ggVGVtcGxhdGVcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBMYXVuY2hUZW1wbGF0ZSh0aGlzLCBcImFnZW50TGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBgYnVpbGRraXRlTGF1bmNoVGVtcGxhdGVgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgIG5hbWU6IFwiYnVpbGRraXRlLXN0YWNrLWxpbnV4LXg4Nl82NC0qXCIsXG4gICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgW1wiYmxvY2stZGV2aWNlLW1hcHBpbmcudm9sdW1lLXR5cGVcIl06IFtcImdwM1wiXVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBtdWx0aXBhcnRVc2VyRGF0YSxcbiAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICByZXF1aXJlSW1kc3YyOiBmYWxzZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIEZ1bmN0aW9uYWwgdGFncyBmb3IgYnVpbGRraXRlIGFnZW50IGlkZW50aWZpY2F0aW9uXG4gICAgVGFncy5vZihsYXVuY2hUZW1wbGF0ZSkuYWRkKFwiUm9sZVwiLCBcImJ1aWxka2l0ZUFnZW50XCIpO1xuICAgIFRhZ3Mub2YobGF1bmNoVGVtcGxhdGUpLmFkZChcIkJ1aWxka2l0ZUFnZW50UmVsZWFzZVwiLCBhZ2VudFJlbGVhc2UuU1RBQkxFKTtcbiAgICBUYWdzLm9mKGxhdW5jaFRlbXBsYXRlKS5hZGQoXCJCdWlsZGtpdGVRdWV1ZVwiLCBwcm9wcy5idWlsZGtpdGVRdWV1ZSk7XG5cbiAgICAvLyBBdXRvc2NhbGluZyBHcm91cFxuICAgIGNvbnN0IGF1dG9TY2FsaW5nR3JvdXAgPSBuZXcgQXV0b1NjYWxpbmdHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBcImFnZW50QXV0b1NjYWxpbmdHcm91cFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgbWl4ZWRJbnN0YW5jZXNQb2xpY3k6IHtcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZTogbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgICAgaW5zdGFuY2VzRGlzdHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBvbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eTogcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZSxcbiAgICAgICAgICAgIHNwb3RBbGxvY2F0aW9uU3RyYXRlZ3k6IFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3kuQ0FQQUNJVFlfT1BUSU1JWkVEXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU92ZXJyaWRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmFnZW50SW5zdGFuY2VUeXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBtaW5DYXBhY2l0eTogcHJvcHMuYWdlbnRNaW5JbnN0YW5jZXMsXG4gICAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5hZ2VudE1heEluc3RhbmNlcyxcbiAgICAgICAgY29vbGRvd246IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgICB1cGRhdGVQb2xpY3k6IFVwZGF0ZVBvbGljeS5yZXBsYWNpbmdVcGRhdGUoKSxcbiAgICAgICAgbmV3SW5zdGFuY2VzUHJvdGVjdGVkRnJvbVNjYWxlSW46IHRydWUsXG4gICAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5PTERFU1RfTEFVTkNIX0NPTkZJR1VSQVRJT04sXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuQ0xPU0VTVF9UT19ORVhUX0lOU1RBTkNFX0hPVVJcbiAgICAgICAgXSxcbiAgICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGFnZW50Um9sZS5hdHRhY2hJbmxpbmVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5KHRoaXMsIFwidXBkYXRlQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpTZXRJbnN0YW5jZUhlYWx0aFwiLFxuICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOlRlcm1pbmF0ZUluc3RhbmNlSW5BdXRvU2NhbGluZ0dyb3VwXCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtgJHthdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBBcm59YF1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBCdWlsZGtpdGUgU3VzcGVuZCBBdXN0b3NjYWxpbmcgR3JvdXAgQ3VzdG9tIFJlc291cmNlXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwic3VzcGVuZEF1dG9zY2FsaW5nUHJvY2Vzc1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpidWlsZGtpdGVTdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuXG4gICAgbmV3IENmbkFwcGxpY2F0aW9uKHRoaXMsIFwiYWdlbnRTY2FsZXJcIiwge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgYXBwbGljYXRpb25JZDpcbiAgICAgICAgICBcImFybjphd3M6c2VydmVybGVzc3JlcG86dXMtZWFzdC0xOjE3Mjg0MDA2NDgzMjphcHBsaWNhdGlvbnMvYnVpbGRraXRlLWFnZW50LXNjYWxlclwiLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHByb3BzLmJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvblxuICAgICAgfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlcjogYCR7YWdlbnRUb2tlbi5uYW1lfWAsXG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXJTdG9yZUtNU0tleTogYWdlbnRUb2tlbi5jbWsua2V5LmtleUlkLFxuICAgICAgICBSb2xlUGVybWlzc2lvbnNCb3VuZGFyeUFSTjogXCJcIixcbiAgICAgICAgQnVpbGRraXRlUXVldWU6IHByb3BzLmJ1aWxka2l0ZVF1ZXVlLFxuICAgICAgICBBZ2VudHNQZXJJbnN0YW5jZTogYCR7cHJvcHMuYWdlbnRzUGVySW5zdGFuY2V9YCxcbiAgICAgICAgTWluU2l6ZTogYCR7cHJvcHMuYWdlbnRNaW5JbnN0YW5jZXN9YCxcbiAgICAgICAgTWF4U2l6ZTogYCR7cHJvcHMuYWdlbnRNYXhJbnN0YW5jZXN9YCxcbiAgICAgICAgQWdlbnRBdXRvU2NhbGVHcm91cDogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgU2NhbGVPdXRGYWN0b3I6IHByb3BzLnNjYWxlT3V0RmFjdG9yLFxuICAgICAgICBTY2FsZU91dEZvcldhaXRpbmdKb2JzOiBgJHtwcm9wcy5zY2FsZU91dFdhaXRpbmdGb3JKb2JzfWAsXG4gICAgICAgIEV2ZW50U2NoZWR1bGVQZXJpb2Q6IHByb3BzLnNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2QsXG4gICAgICAgIE1pblBvbGxJbnRlcnZhbDogcHJvcHMuc2NhbGVyTWluUG9sbEludGVydmFsLFxuICAgICAgICBMb2dSZXRlbnRpb25EYXlzOiBgJHtwcm9wcy5sb2dSZXRlbnRpb25EYXlzfWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGtpdGU7XG4iXX0=
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFFO0FBQ3JFLGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFHcEYsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFtRFksUUFBQSxxQkFBcUIsR0E4QzlCO0lBQ0YsZ0NBQWdDO0lBQ2hDLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsTUFBTTtJQUMxQyxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMseUJBQXlCLEVBQUUsRUFBRTtJQUM3QiwyQkFBMkIsRUFBRSxPQUFPO0lBQ3BDLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQywrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLGtDQUFrQyxFQUFFLEtBQUs7SUFDekMsa0NBQWtDLEVBQUUsRUFBRTtJQUN0QyxjQUFjLEVBQUUsU0FBUztJQUN6QixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxF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QUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDckMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7Z0JBQzFELGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pELG1CQUFtQixFQUFFLEtBQUssQ0FBQyx5QkFBeUI7Z0JBQ3BELGVBQWUsRUFBRSxLQUFLLENBQUMscUJBQXFCO2dCQUM1QyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTthQUM5QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVZRCw4QkE0WUM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgdHlwZSBTdGFja1Byb3BzLCBTdGFjaywgVGFncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlUHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIExhdW5jaFRlbXBsYXRlLFxuICBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTXVsdGlwYXJ0Qm9keSxcbiAgTXVsdGlwYXJ0VXNlckRhdGEsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3ksXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNhbVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IFBvbGljeSwgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHsgUzNCdWNrZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5lbnVtIGFnZW50UmVsZWFzZSB7XG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIEJFVEEgPSBcImJldGFcIixcbiAgRURHRSA9IFwiZWRnZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRraXRlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBzdHJpbmc7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2U7XG4gIGJ1aWxka2l0ZUFnZW50VGFnczogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvbjogc3RyaW5nO1xuICBsb2dSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIgfCBcImRhdGFkb2dcIiB8IFwib3BlbnRlbGVtZXRyeVwiO1xuICBidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kOiBudW1iZXI7XG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnM6IHN0cmluZztcbiAgYnVpbGRraXRlUXVldWU6IHN0cmluZztcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBzdHJpbmc7XG4gIGFnZW50RW52RmlsZVVybDogc3RyaW5nO1xuICBhdXRob3JpemVkVXNlcnNVcmw6IHN0cmluZztcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIHNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2Q6IHN0cmluZztcbiAgc2NhbGVyTWluUG9sbEludGVydmFsOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgZWNyQWNjZXNzUG9saWN5OiBzdHJpbmc7XG4gIHNjYWxlSW5JZGxlUGVyaW9kOiBudW1iZXI7XG4gIHNjYWxlT3V0V2FpdGluZ0ZvckpvYnM6IGJvb2xlYW47XG4gIGRvY2tlck5ldHdvcmtpbmdQcm90b2NvbDogXCJpcHY0XCIgfCBcImR1YWxzdGFja1wiO1xuICBlbmFibGVTZWNyZXRzUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVFY3JQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogYm9vbGVhbjtcbiAgZW5hYmxlSW5zdGFuY2VTdG9yYWdlOiBib29sZWFuO1xuICBtb3VudFRtcGZzQXRUbXA6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogYm9vbGVhbjtcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBzdHJpbmc7XG4gIHBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcjogXCJibG9ja1wiIHwgXCJ3YXJuXCI7XG4gIC8vIFRhZ3NcbiAgLy8gVE9ETzogTW92ZSB0aGVzZSBpbnRvIGEgc2luZ2xlIHRhZ3Mgb2JqZWN0XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1aWxka2l0ZURlZmF1bHRQcm9wczogUGljazxcbiAgQnVpbGRraXRlUHJvcHMsXG4gIC8vIEJ1aWxka2l0ZSBBZ2VudCBDb25maWd1cmF0aW9uXG4gIHwgXCJlbGFzdGljU3RhY2tWZXJzaW9uXCJcbiAgfCBcImtleU5hbWVcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRSZWxlYXNlXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGFnc1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXCJcbiAgfCBcImxvZ1JldGVudGlvbkRheXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZFwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kXCJcbiAgfCBcImJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2JcIlxuICB8IFwiYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc1wiXG4gIHwgXCJidWlsZGtpdGVRdWV1ZVwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJib290c3RyYXBTY3JpcHRVcmxcIlxuICB8IFwiYWdlbnRFbnZGaWxlVXJsXCJcbiAgfCBcImF1dGhvcml6ZWRVc2Vyc1VybFwiXG4gIC8vIEluZnJhc3RydWN0dXJlXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwic2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZXJNaW5Qb2xsSW50ZXJ2YWxcIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJzY2FsZU91dEZhY3RvclwiXG4gIHwgXCJzY2FsZUluSWRsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZU91dFdhaXRpbmdGb3JKb2JzXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2xcIlxuICB8IFwiZW5hYmxlU2VjcmV0c1BsdWdpblwiXG4gIHwgXCJlbmFibGVFY3JQbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyTG9naW5QbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwXCJcbiAgfCBcImVuYWJsZURvY2tlckV4cGVyaW1lbnRhbFwiXG4gIHwgXCJlbmFibGVJbnN0YW5jZVN0b3JhZ2VcIlxuICB8IFwibW91bnRUbXBmc0F0VG1wXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc1wiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdLTVNLZXlcIlxuICB8IFwicGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yXCJcbiAgLy8gVGFnc1xuICB8IFwiZW52aXJvbm1lbnRcIlxuICB8IFwib3duZXJcIlxuPiA9IHtcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogXCJ2Ni4zMC4wXCIsXG4gIGtleU5hbWU6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgYnVpbGRraXRlQWdlbnRFeHBlcmltZW50czogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBcIjEuOC4wXCIsXG4gIGxvZ1JldGVudGlvbkRheXM6IDEsXG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IDYwLFxuICBidWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9iOiBmYWxzZSxcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogXCJcIixcbiAgYnVpbGRraXRlUXVldWU6IFwiZGVmYXVsdFwiLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBcIlwiLFxuICBhZ2VudEVudkZpbGVVcmw6IFwiXCIsXG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogXCJcIixcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLk01LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudFZvbHVtZVNpemU6IDI1MCxcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogXCIxIG1pbnV0ZVwiLFxuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IFwiMTBzXCIsXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IDc1LFxuICBzY2FsZU91dEZhY3RvcjogXCIxLjBcIixcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IDYwMCxcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogZmFsc2UsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIixcbiAgZW5hYmxlU2VjcmV0c1BsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRWNyUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJMb2dpblBsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiB0cnVlLFxuICBlbmFibGVEb2NrZXJFeHBlcmltZW50YWw6IGZhbHNlLFxuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBtb3VudFRtcGZzQXRUbXA6IHRydWUsXG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogZmFsc2UsXG4gIHBpcGVsaW5lU2lnbmluZ0tNU0tleTogXCJcIixcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIsXG4gIC8vIFRhZ3NcbiAgZW52aXJvbm1lbnQ6IFwicGxhdGZvcm1cIixcbiAgb3duZXI6IFwiZW5naW5lZXJcIlxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxka2l0ZSBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxka2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1tdXRhYmxlIGFuZCBlbmZvcmNlIHRoZSB0YWdzIGJlaW5nIHNldFxuICAgIGNvbnN0IHRhZ3MgPSB7XG4gICAgICAuLi5wcm9wcy50YWdzLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCB8fCBcInBsYXRmb3JtXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiIC8vIFRPRE86IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHRoZSBwbGF0Zm9ybSBhY2NvdW50IG5hbWU/XG4gICAgfTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgYCR7aWR9VnBjYCwge1xuICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgJHtpZH1gLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIC8vIEFydGlmYWN0cyBCdWNrZXRcbiAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBgJHtpZH1BcnRpZmFjdEJ1Y2tldGApO1xuXG4gICAgLy8gTWFuYWdlZCBTZWNyZXRzXG4gICAgY29uc3QgbWFuYWdlZFNlY3JldHNCdWNrZXQgPSBuZXcgUzNCdWNrZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9TWFuYWdlZFNlY3JldHNCdWNrZXRgXG4gICAgKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWSkge1xuICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYCR7aWR9U3NoS2V5RGVwbG95bWVudGAsIHtcbiAgICAgICAgc291cmNlczogW1xuICAgICAgICAgIFNvdXJjZS5kYXRhKFwicHJpdmF0ZV9zc2hfa2V5XCIsIHByb2Nlc3MuZW52LkJVSUxES0lURV9QUklWQVRFX1NTSF9LRVkpXG4gICAgICAgIF0sXG4gICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBtYW5hZ2VkU2VjcmV0c0J1Y2tldFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJXQVJOOidCVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZGVjbGFyZWQuIFNraXBwaW5nIHVwbG9hZCBvZiBwcml2YXRlIFNTSCBrZXlcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbmNyeXB0ZWQgQnVpbGRraXRlIEFnZW50IFRva2VuXG4gICAgY29uc3QgYWdlbnRUb2tlbiA9IG5ldyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7aWR9QWdlbnRUb2tlbmAsIHtcbiAgICAgIG5hbWU6IGAvYnVpbGRraXRlL2FnZW50VG9rZW5gLFxuICAgICAgYWxpYXNOYW1lOiBgYnVpbGRraXRlQWdlbnRUb2tlbmAsXG4gICAgICB2YWx1ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOLFxuICAgICAgb3ZlcndyaXRlOiBwcm9jZXNzLmVudi5CVUlMREtJVEVfQUdFTlRfVE9LRU4gPyB0cnVlIDogZmFsc2UsXG4gICAgICB0YWdzOiB0YWdzLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICByZWdpb246IHRoaXMucmVnaW9uXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgQWdlbnQgRXhlY3V0aW9uIFJvbGVcbiAgICBjb25zdCBhZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgJHtpZH1BZ2VudFJvbGVgLCB7XG4gICAgICByb2xlTmFtZTogYCR7aWR9QWdlbnRSb2xlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkJ1aWxka2l0ZSBBZ2VudCBJQU0gUm9sZVwiLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wiZGVjcnlwdEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFthZ2VudFRva2VuLmNtay5rZXkua2V5QXJuXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJyZWFkQnVpbGRraXRlQWdlbnRUb2tlblwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52Py5yZWdpb259OiR7cHJvcHMuZW52Py5hY2NvdW50fTpwYXJhbWV0ZXIke2FnZW50VG9rZW4ubmFtZX1gXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZE1hbmFnZWRTZWNyZXRzQnVja2V0XCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXQqXCIsIFwiczM6TGlzdCpcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIG1hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wid3JpdGVBcnRpZmFjdEJ1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RBY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25BY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RWZXJzaW9uQWNsXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgICAgICAgIGAke2FydGlmYWN0QnVja2V0LmJ1Y2tldEFybn0vKmBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJkZXNjcmliZUluc3RhbmNlXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpEZXNjcmliZUF1dG9TY2FsaW5nSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGFcIixcbiAgICAgICAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tSZXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVGFnc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJsb2dnaW5nXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ0dyb3VwXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpQdXRMb2dFdmVudHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInNzbVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwic3NtOkRlc2NyaWJlSW5zdGFuY2VQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgXCJzc206TGlzdEFzc29jaWF0aW9uc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOlB1dEludmVudG9yeVwiLFxuICAgICAgICAgICAgICAgIFwic3NtOlVwZGF0ZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkFja25vd2xlZGdlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RGVsZXRlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RmFpbE1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkdldEVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRNZXNzYWdlc1wiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6U2VuZFJlcGx5XCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBhc3N1bWVkQnk6IG5ldyBDb21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiYXV0b3NjYWxpbmcuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKVxuICAgICAgKVxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEVDMiBVc2VyIERhdGFcbiAgICBjb25zdCBtdWx0aXBhcnRVc2VyRGF0YSA9IG5ldyBNdWx0aXBhcnRVc2VyRGF0YSgpO1xuXG4gICAgLy8gQ2xvdWQgQ29uZmlnXG4gICAgY29uc3QgY2xvdWRDb25maWdVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiI2Nsb3VkLWNvbmZpZ1wiXG4gICAgfSk7XG4gICAgY2xvdWRDb25maWdVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIFwiY2xvdWRfZmluYWxfbW9kdWxlczpcIixcbiAgICAgIFwiICAtIFtzY3JpcHRzLXVzZXIsIGFsd2F5c11cIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjbG91ZENvbmZpZ1VzZXJEYXRhLFxuICAgICAgICBcInRleHQvY2xvdWQtY29uZmlnOyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBNb3VudCBTdG9yYWdlXG4gICAgY29uc3QgbW91bnRTdG9yYWdlVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX01PVU5UX1RNUEZTX0FUX1RNUD0nJHtwcm9wcy5tb3VudFRtcGZzQXRUbXB9JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstbW91bnQtaW5zdGFuY2Utc3RvcmFnZS5zaFwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIG1vdW50U3RvcmFnZVVzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gQ29uZmlndXJlIERvY2tlclxuICAgIGNvbnN0IGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgY29uZmlndXJlRG9ja2VyVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgRE9DS0VSX1VTRVJOU19SRU1BUD0nJHtwcm9wcy5lbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXB9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfRVhQRVJJTUVOVEFMPScke3Byb3BzLmVuYWJsZURvY2tlckV4cGVyaW1lbnRhbH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9ORVRXT1JLSU5HX1BST1RPQ09MPScke3Byb3BzLmRvY2tlck5ldHdvcmtpbmdQcm90b2NvbH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstY29uZmlndXJlLWRvY2tlci5zaFwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYEJVSUxES0lURV9TVEFDS19OQU1FPScke2lkfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NUQUNLX1ZFUlNJT049JyR7cHJvcHMuZWxhc3RpY1N0YWNrVmVyc2lvbn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TQ0FMRV9JTl9JRExFX1BFUklPRD0nJHtwcm9wcy5zY2FsZUluSWRsZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVD0nJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXROYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NFQ1JFVFNfQlVDS0VUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UT0tFTl9QQVRIPScke2FnZW50VG9rZW4ubmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVFNfUEVSX0lOU1RBTkNFPScke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RBR1M9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUYWdzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RJTUVTVEFNUF9MSU5FUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0VYUEVSSU1FTlRTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVFJBQ0lOR19CQUNLRU5EPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfUkVMRUFTRT0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFJlbGVhc2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfQ0FOQ0VMX0dSQUNFX1BFUklPRD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfS01TX0tFWT0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdLTVNLZXl9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfU0lHTklOR19GQUlMVVJFX0JFSEFWSU9SPScke3Byb3BzLnBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9RVUVVRT0nJHtwcm9wcy5idWlsZGtpdGVRdWV1ZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FTkFCTEVfR0lUX01JUlJPUlM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VMQVNUSUNfQk9PVFNUUkFQX1NDUklQVD0nJHtwcm9wcy5ib290c3RyYXBTY3JpcHRVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5WX0ZJTEVfVVJMPScke3Byb3BzLmFnZW50RW52RmlsZVVybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQVVUSE9SSVpFRF9VU0VSU19VUkw9JyR7cHJvcHMuYXV0aG9yaXplZFVzZXJzVXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VDUl9QT0xJQ1k9JyR7cHJvcHMuZWNyQWNjZXNzUG9saWN5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1RFUk1JTkFURV9JTlNUQU5DRV9BRlRFUl9KT0I9JyR7cHJvcHMuYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BRERJVElPTkFMX1NVRE9fUEVSTUlTU0lPTlM9JyR7cHJvcHMuYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc30nIFxcXFxgLFxuICAgICAgYEFXU19ERUZBVUxUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYFNFQ1JFVFNfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlU2VjcmV0c1BsdWdpbn0nIFxcXFxgLFxuICAgICAgYEVDUl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVFY3JQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTE9HSU5fUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRG9ja2VyTG9naW5QbHVnaW59JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfRVhQRVJJTUVOVEFMPScke3Byb3BzLmVuYWJsZURvY2tlckV4cGVyaW1lbnRhbH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgQVdTX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1pbnN0YWxsLWVsYXN0aWMtc3RhY2suc2hcIlxuICAgICk7XG5cbiAgICAvLyBNZXJnZSBVc2VyIERhdGFcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIExhdW5jaCBUZW1wbGF0ZVxuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IExhdW5jaFRlbXBsYXRlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfUFnZW50TGF1bmNoVGVtcGxhdGVgLFxuICAgICAge1xuICAgICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGBidWlsZGtpdGVMYXVuY2hUZW1wbGF0ZWAsXG4gICAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuYWdlbnRJbnN0YW5jZVR5cGUsXG4gICAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgICAgbmFtZTogXCJidWlsZGtpdGUtc3RhY2stbGludXgteDg2XzY0LSpcIixcbiAgICAgICAgICBvd25lcnM6IFtcIjE3Mjg0MDA2NDgzMlwiXSxcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBbXCJibG9jay1kZXZpY2UtbWFwcGluZy52b2x1bWUtdHlwZVwiXTogW1wiZ3AzXCJdXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdXNlckRhdGE6IG11bHRpcGFydFVzZXJEYXRhLFxuICAgICAgICByb2xlOiBhZ2VudFJvbGUsXG4gICAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICAgIHJlcXVpcmVJbWRzdjI6IGZhbHNlLFxuICAgICAgICBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdDogMixcbiAgICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgICBpbnN0YW5jZU1ldGFkYXRhVGFnczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBGdW5jdGlvbmFsIHRhZ3MgZm9yIGJ1aWxka2l0ZSBhZ2VudCBpZGVudGlmaWNhdGlvblxuICAgIFRhZ3Mub2YobGF1bmNoVGVtcGxhdGUpLmFkZChcIlJvbGVcIiwgXCJidWlsZGtpdGVBZ2VudFwiKTtcbiAgICBUYWdzLm9mKGxhdW5jaFRlbXBsYXRlKS5hZGQoXCJCdWlsZGtpdGVBZ2VudFJlbGVhc2VcIiwgYWdlbnRSZWxlYXNlLlNUQUJMRSk7XG4gICAgVGFncy5vZihsYXVuY2hUZW1wbGF0ZSkuYWRkKFwiQnVpbGRraXRlUXVldWVcIiwgcHJvcHMuYnVpbGRraXRlUXVldWUpO1xuXG4gICAgLy8gQXV0b3NjYWxpbmcgR3JvdXBcbiAgICBjb25zdCBhdXRvU2NhbGluZ0dyb3VwID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9QWdlbnRBdXRvU2NhbGluZ0dyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlc0Rpc3RyaWJ1dGlvbjoge1xuICAgICAgICAgICAgb25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OiBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LkNBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVPdmVycmlkZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLmFnZW50TWluSW5zdGFuY2VzLFxuICAgICAgICBtYXhDYXBhY2l0eTogcHJvcHMuYWdlbnRNYXhJbnN0YW5jZXMsXG4gICAgICAgIGNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZ3JvdXBNZXRyaWNzOiBbR3JvdXBNZXRyaWNzLmFsbCgpXSxcbiAgICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICAgIG5ld0luc3RhbmNlc1Byb3RlY3RlZEZyb21TY2FsZUluOiB0cnVlLFxuICAgICAgICB0ZXJtaW5hdGlvblBvbGljaWVzOiBbXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5LkNMT1NFU1RfVE9fTkVYVF9JTlNUQU5DRV9IT1VSXG4gICAgICAgIF0sXG4gICAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBhZ2VudFJvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCBgJHtpZH1VcGRhdGVBdXRvU2NhbGluZ0dyb3VwUG9saWN5YCwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6U2V0SW5zdGFuY2VIZWFsdGhcIixcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpUZXJtaW5hdGVJbnN0YW5jZUluQXV0b1NjYWxpbmdHcm91cFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwQXJufWBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQnVpbGRraXRlIFN1c3BlbmQgQXVzdG9zY2FsaW5nIEdyb3VwIEN1c3RvbSBSZXNvdXJjZVxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtpZH1TdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzYCwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6YnVpbGRraXRlU3VzcGVuZEF1dG9zY2FsaW5nXCJcbiAgICB9KTtcblxuICAgIG5ldyBDZm5BcHBsaWNhdGlvbih0aGlzLCBgJHtpZH1BZ2VudFNjYWxlcmAsIHtcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGFwcGxpY2F0aW9uSWQ6XG4gICAgICAgICAgXCJhcm46YXdzOnNlcnZlcmxlc3NyZXBvOnVzLWVhc3QtMToxNzI4NDAwNjQ4MzI6YXBwbGljYXRpb25zL2J1aWxka2l0ZS1hZ2VudC1zY2FsZXJcIixcbiAgICAgICAgc2VtYW50aWNWZXJzaW9uOiBwcm9wcy5idWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb25cbiAgICAgIH0sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXI6IGAke2FnZW50VG9rZW4ubmFtZX1gLFxuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyU3RvcmVLTVNLZXk6IGFnZW50VG9rZW4uY21rLmtleS5rZXlJZCxcbiAgICAgICAgUm9sZVBlcm1pc3Npb25zQm91bmRhcnlBUk46IFwiXCIsXG4gICAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5idWlsZGtpdGVRdWV1ZSxcbiAgICAgICAgQWdlbnRzUGVySW5zdGFuY2U6IGAke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfWAsXG4gICAgICAgIE1pblNpemU6IGAke3Byb3BzLmFnZW50TWluSW5zdGFuY2VzfWAsXG4gICAgICAgIE1heFNpemU6IGAke3Byb3BzLmFnZW50TWF4SW5zdGFuY2VzfWAsXG4gICAgICAgIEFnZW50QXV0b1NjYWxlR3JvdXA6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgIFNjYWxlT3V0RmFjdG9yOiBwcm9wcy5zY2FsZU91dEZhY3RvcixcbiAgICAgICAgU2NhbGVPdXRGb3JXYWl0aW5nSm9iczogYCR7cHJvcHMuc2NhbGVPdXRXYWl0aW5nRm9ySm9ic31gLFxuICAgICAgICBFdmVudFNjaGVkdWxlUGVyaW9kOiBwcm9wcy5zY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kLFxuICAgICAgICBNaW5Qb2xsSW50ZXJ2YWw6IHByb3BzLnNjYWxlck1pblBvbGxJbnRlcnZhbCxcbiAgICAgICAgTG9nUmV0ZW50aW9uRGF5czogYCR7cHJvcHMubG9nUmV0ZW50aW9uRGF5c31gXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVpbGRraXRlO1xuIl19
@@ -0,0 +1,133 @@
1
+ import { Construct } from "constructs";
2
+ import { type IBucket } from "aws-cdk-lib/aws-s3";
3
+ import { type IApplicationLoadBalancer } from "aws-cdk-lib/aws-elasticloadbalancingv2";
4
+ import { type ICertificate } from "aws-cdk-lib/aws-certificatemanager";
5
+ import { type ICachePolicy } from "aws-cdk-lib/aws-cloudfront";
6
+ import type App from "../../app";
7
+ import { CloudFrontDistribution, type CdnBehaviour, type CachePolicyPreset } from "../../resources/aws/cdn";
8
+ import { S3Storage } from "./storage";
9
+ import { Compute } from "./compute";
10
+ /**
11
+ * S3 origin CDN props - use with S3 bucket
12
+ */
13
+ export interface S3CdnProps {
14
+ originType: "s3";
15
+ bucket: IBucket | S3Storage;
16
+ originPath?: string;
17
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
18
+ behaviours?: CdnBehaviour[];
19
+ domainNames?: string[];
20
+ certificate?: ICertificate;
21
+ comment?: string;
22
+ enableLogging?: boolean;
23
+ logBucket?: IBucket;
24
+ }
25
+ /**
26
+ * ALB origin CDN props - use with Application Load Balancer
27
+ */
28
+ export interface AlbCdnProps {
29
+ originType: "alb";
30
+ loadBalancer: IApplicationLoadBalancer | Compute;
31
+ protocolPolicy?: "HTTP_ONLY" | "HTTPS_ONLY" | "MATCH_VIEWER";
32
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
33
+ behaviours?: CdnBehaviour[];
34
+ domainNames?: string[];
35
+ certificate?: ICertificate;
36
+ comment?: string;
37
+ enableLogging?: boolean;
38
+ logBucket?: IBucket;
39
+ }
40
+ /**
41
+ * HTTP origin CDN props - use with custom HTTP endpoint
42
+ */
43
+ export interface HttpCdnProps {
44
+ originType: "http";
45
+ domainName: string;
46
+ originPath?: string;
47
+ protocolPolicy?: "HTTP_ONLY" | "HTTPS_ONLY" | "MATCH_VIEWER";
48
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
49
+ behaviours?: CdnBehaviour[];
50
+ domainNames?: string[];
51
+ certificate?: ICertificate;
52
+ comment?: string;
53
+ enableLogging?: boolean;
54
+ logBucket?: IBucket;
55
+ }
56
+ /**
57
+ * Smart origin CDN props - auto-detect origin type from Fjall resource
58
+ */
59
+ export interface SmartCdnProps {
60
+ originType: "auto";
61
+ origin: S3Storage | Compute | string;
62
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
63
+ behaviours?: CdnBehaviour[];
64
+ domainNames?: string[];
65
+ certificate?: ICertificate;
66
+ comment?: string;
67
+ enableLogging?: boolean;
68
+ logBucket?: IBucket;
69
+ }
70
+ export type ICdnProps = S3CdnProps | AlbCdnProps | HttpCdnProps | SmartCdnProps;
71
+ /**
72
+ * CDN wrapper class that extends CloudFrontDistribution with Fjall patterns.
73
+ */
74
+ export declare class Cdn extends CloudFrontDistribution {
75
+ constructor(scope: Construct, id: string, props: ICdnProps);
76
+ /**
77
+ * Resolve ICdnProps to CloudFrontDistributionProps.
78
+ */
79
+ private static resolveProps;
80
+ /**
81
+ * Resolve the default origin from ICdnProps.
82
+ */
83
+ private static resolveDefaultOrigin;
84
+ /**
85
+ * Auto-detect origin configuration from a Fjall resource.
86
+ */
87
+ private static detectOriginFromResource;
88
+ }
89
+ /**
90
+ * Factory for creating CDN (CloudFront) distributions.
91
+ *
92
+ * @example
93
+ * // S3 origin
94
+ * const assets = app.addStorage(StorageFactory.build("Assets", { bucketType: "private" }));
95
+ * app.addCdn(CdnFactory.build("AssetsCdn", {
96
+ * originType: "s3",
97
+ * bucket: assets
98
+ * }));
99
+ *
100
+ * @example
101
+ * // ALB origin (ECS)
102
+ * const api = app.addCompute(ComputeFactory.build("Api", { type: "ecs", ... }));
103
+ * app.addCdn(CdnFactory.build("ApiCdn", {
104
+ * originType: "alb",
105
+ * loadBalancer: api
106
+ * }));
107
+ *
108
+ * @example
109
+ * // Smart detection
110
+ * app.addCdn(CdnFactory.build("AppCdn", {
111
+ * originType: "auto",
112
+ * origin: assets
113
+ * }));
114
+ *
115
+ * @example
116
+ * // Custom domain
117
+ * app.addCdn(CdnFactory.build("AppCdn", {
118
+ * originType: "s3",
119
+ * bucket: assets,
120
+ * domainNames: ["app.example.com"],
121
+ * certificate: myCert
122
+ * }));
123
+ */
124
+ export declare class CdnFactory {
125
+ /**
126
+ * Build a CDN factory function.
127
+ *
128
+ * @param id - Unique identifier for the CDN
129
+ * @param props - CDN configuration properties
130
+ * @returns Factory function that creates the CDN when invoked
131
+ */
132
+ static build(id: string, props: ICdnProps): (_app: App, scope: Construct) => Cdn;
133
+ }