terraform-cdk-serverless-github-actions-runner-controller 0.0.2 → 0.0.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.
- package/.jsii +138 -5
- package/API.md +74 -1
- package/biome.jsonc +66 -0
- package/lib/lib/aws.d.ts +16 -1
- package/lib/lib/aws.js +275 -280
- package/lib/lib/azure.d.ts +1 -1
- package/lib/lib/azure.js +105 -130
- package/lib/lib/gcp.d.ts +1 -1
- package/lib/lib/gcp.js +46 -48
- package/lib/lib/variables.d.ts +3 -2
- package/lib/lib/variables.js +11 -5
- package/lib/tfModules.js +40 -10
- package/modules/azure-container-apps/README.md +19 -18
- package/modules/azure-container-apps/cdk.tf.json +11 -7
- package/modules/elastic-container-service/README.md +25 -24
- package/modules/elastic-container-service/cdk.tf.json +64 -74
- package/modules/google-cloud-run/README.md +18 -17
- package/modules/google-cloud-run/cdk.tf.json +10 -6
- package/package.json +17 -70
- package/renovate.json5 +42 -0
- package/vitest.config.ts +28 -0
- package/lib/__tests__/index-test.d.ts +0 -1
- package/lib/__tests__/index-test.js +0 -26
- package/main.tf +0 -26
- package/scripts/collect-variables.ts +0 -188
- package/variables.tf +0 -27
package/lib/lib/aws.js
CHANGED
|
@@ -11,6 +11,8 @@ const data_aws_subnets_1 = require("@cdktf/provider-aws/lib/data-aws-subnets");
|
|
|
11
11
|
const ecs_cluster_1 = require("@cdktf/provider-aws/lib/ecs-cluster");
|
|
12
12
|
const ecs_service_1 = require("@cdktf/provider-aws/lib/ecs-service");
|
|
13
13
|
const ecs_task_definition_1 = require("@cdktf/provider-aws/lib/ecs-task-definition");
|
|
14
|
+
const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
|
|
15
|
+
const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
|
|
14
16
|
const iam_policy_1 = require("@cdktf/provider-aws/lib/iam-policy");
|
|
15
17
|
const iam_role_1 = require("@cdktf/provider-aws/lib/iam-role");
|
|
16
18
|
const iam_role_policy_attachment_1 = require("@cdktf/provider-aws/lib/iam-role-policy-attachment");
|
|
@@ -18,62 +20,67 @@ const provider_1 = require("@cdktf/provider-aws/lib/provider");
|
|
|
18
20
|
const cdktf_1 = require("cdktf");
|
|
19
21
|
const constructs_1 = require("constructs");
|
|
20
22
|
const variables_1 = require("./variables");
|
|
21
|
-
const efs_file_system_1 = require("@cdktf/provider-aws/lib/efs-file-system");
|
|
22
|
-
const efs_mount_target_1 = require("@cdktf/provider-aws/lib/efs-mount-target");
|
|
23
23
|
class Aws extends constructs_1.Construct {
|
|
24
|
-
constructor(scope, id) {
|
|
24
|
+
constructor(scope, id, props) {
|
|
25
25
|
super(scope, id);
|
|
26
26
|
new provider_1.AwsProvider(this, 'aws', {});
|
|
27
27
|
const identity = new data_aws_caller_identity_1.DataAwsCallerIdentity(this, 'Identity', {});
|
|
28
28
|
const region = new data_aws_region_1.DataAwsRegion(this, 'Region', {});
|
|
29
|
-
const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
|
|
29
|
+
const { pat, githubConfigUrl, autoscalerImage } = (0, variables_1.commonVariables)(this);
|
|
30
30
|
const cluster = new ecs_cluster_1.EcsCluster(this, 'Cluster', {
|
|
31
|
-
name:
|
|
31
|
+
name: props.clusterName,
|
|
32
32
|
});
|
|
33
|
-
const
|
|
33
|
+
const subnets = new data_aws_subnets_1.DataAwsSubnets(this, 'Subnets', {
|
|
34
|
+
filter: props.subnetFilters,
|
|
35
|
+
});
|
|
36
|
+
const securityGroups = new data_aws_security_groups_1.DataAwsSecurityGroups(this, 'SecurityGroups', {
|
|
37
|
+
filter: props.securityGroupFilters,
|
|
38
|
+
});
|
|
39
|
+
const autoscalerRole = new iam_role_1.IamRole(this, 'AutoscalerRole', {
|
|
34
40
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
Version: '2012-10-17',
|
|
42
|
+
Statement: [
|
|
37
43
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
Effect: 'Allow',
|
|
45
|
+
Principal: {
|
|
46
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
41
47
|
},
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
})
|
|
48
|
+
Action: 'sts:AssumeRole',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
}),
|
|
46
52
|
});
|
|
47
|
-
const
|
|
53
|
+
const runnerRole = new iam_role_1.IamRole(this, 'RunnerRole', {
|
|
48
54
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
Version: '2012-10-17',
|
|
56
|
+
Statement: [
|
|
51
57
|
{
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
Effect: 'Allow',
|
|
59
|
+
Principal: {
|
|
60
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
55
61
|
},
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
})
|
|
62
|
+
Action: 'sts:AssumeRole',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}),
|
|
60
66
|
});
|
|
61
67
|
const ecsTaskExecutionRole = new iam_role_1.IamRole(this, 'TaskExecutionRole', {
|
|
62
68
|
assumeRolePolicy: cdktf_1.Fn.jsonencode({
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
Version: '2012-10-17',
|
|
70
|
+
Statement: [
|
|
65
71
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
Effect: 'Allow',
|
|
73
|
+
Principal: {
|
|
74
|
+
Service: 'ecs-tasks.amazonaws.com',
|
|
69
75
|
},
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
]
|
|
76
|
+
Action: 'sts:AssumeRole',
|
|
77
|
+
},
|
|
78
|
+
],
|
|
73
79
|
}),
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
});
|
|
81
|
+
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'TeskExecutionRoleAttachment', {
|
|
82
|
+
policyArn: 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy',
|
|
83
|
+
role: ecsTaskExecutionRole.name,
|
|
77
84
|
});
|
|
78
85
|
const runnerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'RunnerLogGroup', {
|
|
79
86
|
name: '/ecs/GHA',
|
|
@@ -81,99 +88,152 @@ class Aws extends constructs_1.Construct {
|
|
|
81
88
|
const autoscalerLogGroup = new cloudwatch_log_group_1.CloudwatchLogGroup(this, 'AutoscalerLogGroup', {
|
|
82
89
|
name: '/ecs/Autoscaler',
|
|
83
90
|
});
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
91
|
+
const autoscalerContainerDefinition = {
|
|
92
|
+
name: 'autoscaler',
|
|
93
|
+
image: autoscalerImage.stringValue,
|
|
94
|
+
essential: true,
|
|
95
|
+
environment: [
|
|
96
|
+
{
|
|
97
|
+
name: 'PAT',
|
|
98
|
+
value: pat.value,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'GITHUB_CONFIG_URL',
|
|
102
|
+
value: githubConfigUrl.value,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'ECS_CLUSTER',
|
|
106
|
+
value: cluster.arn,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'ECS_SUBNETS',
|
|
110
|
+
value: cdktf_1.Fn.join(',', subnets.ids),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'ECS_SECURITY_GROUPS',
|
|
114
|
+
value: cdktf_1.Fn.join(',', securityGroups.ids),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'SCALE_SET_NAME',
|
|
118
|
+
value: 'ecs-runner-set',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
logConfiguration: {
|
|
122
|
+
logDriver: 'awslogs',
|
|
123
|
+
options: {
|
|
124
|
+
'awslogs-group': autoscalerLogGroup.name,
|
|
125
|
+
'awslogs-region': region.name,
|
|
126
|
+
'awslogs-stream-prefix': 'ecs',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
const runnerVolume = [];
|
|
131
|
+
const runnerContainerDefinition = {
|
|
132
|
+
name: 'runner',
|
|
133
|
+
image: 'ghcr.io/actions/actions-runner:2.323.0',
|
|
134
|
+
essential: true,
|
|
135
|
+
entryPoint: ['/home/runner/run.sh'],
|
|
136
|
+
environment: [
|
|
137
|
+
{
|
|
138
|
+
name: 'ECS_CLUSTER_NAME',
|
|
139
|
+
value: cluster.name,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'ACTIONS_RUNNER_POD_NAME',
|
|
143
|
+
value: 'gha-pod',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'ECS_SUBNETS',
|
|
147
|
+
value: cdktf_1.Fn.join(',', subnets.ids),
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'ECS_SECURITY_GROUPS',
|
|
151
|
+
value: cdktf_1.Fn.join(',', securityGroups.ids),
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: 'ECS_TASK_ROLE',
|
|
155
|
+
value: runnerRole.arn,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'ECS_EXECUTION_ROLE',
|
|
159
|
+
value: ecsTaskExecutionRole.arn,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
mountPoints: [],
|
|
163
|
+
logConfiguration: {
|
|
164
|
+
logDriver: 'awslogs',
|
|
165
|
+
options: {
|
|
166
|
+
'awslogs-group': runnerLogGroup.name,
|
|
167
|
+
'awslogs-region': region.name,
|
|
168
|
+
'awslogs-stream-prefix': 'ecs',
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
if (props.containerSupport) {
|
|
173
|
+
// EFS volume to allow sharing data between tasks
|
|
174
|
+
const efs = new efs_file_system_1.EfsFileSystem(this, 'efs', {
|
|
175
|
+
throughputMode: 'elastic',
|
|
176
|
+
tags: {
|
|
177
|
+
Name: 'work',
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
const externalsEfs = new efs_file_system_1.EfsFileSystem(this, 'externalsEfs', {
|
|
181
|
+
throughputMode: 'elastic',
|
|
182
|
+
tags: {
|
|
183
|
+
Name: 'externals',
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
// Each subnet in VPC are on different AZs, so creating mountpoint to each
|
|
187
|
+
const iterator = cdktf_1.TerraformIterator.fromList(subnets.ids);
|
|
188
|
+
new efs_mount_target_1.EfsMountTarget(this, 'EfsMountTarget', {
|
|
189
|
+
forEach: iterator,
|
|
190
|
+
fileSystemId: efs.id,
|
|
191
|
+
subnetId: iterator.value,
|
|
192
|
+
});
|
|
193
|
+
new efs_mount_target_1.EfsMountTarget(this, 'ExternalsEfsMountTarget', {
|
|
194
|
+
forEach: iterator,
|
|
195
|
+
fileSystemId: externalsEfs.id,
|
|
196
|
+
subnetId: iterator.value,
|
|
197
|
+
});
|
|
198
|
+
const runnerVolumeName = 'work';
|
|
199
|
+
const externalsVolumeName = 'externals';
|
|
200
|
+
runnerVolume.push({
|
|
201
|
+
name: runnerVolumeName,
|
|
202
|
+
efsVolumeConfiguration: {
|
|
203
|
+
fileSystemId: efs.id,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
// This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
|
|
114
207
|
{
|
|
115
|
-
name:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
{
|
|
145
|
-
name: 'ECS_SECURITY_GROUPS',
|
|
146
|
-
value: cdktf_1.Fn.join(',', securityGroups.ids)
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
name: 'ECS_TASK_ROLE',
|
|
150
|
-
value: runnerRole.arn
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
name: 'ECS_EXECUTION_ROLE',
|
|
154
|
-
value: ecsTaskExecutionRole.arn
|
|
155
|
-
}
|
|
156
|
-
],
|
|
157
|
-
mountPoints: [
|
|
158
|
-
{
|
|
159
|
-
sourceVolume: runnerVolumeName,
|
|
160
|
-
containerPath: '/tmp/_work',
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
sourceVolume: externalsVolumeName,
|
|
164
|
-
containerPath: '/tmp/externals',
|
|
165
|
-
}
|
|
166
|
-
],
|
|
167
|
-
logConfiguration: {
|
|
168
|
-
logDriver: 'awslogs',
|
|
169
|
-
options: {
|
|
170
|
-
"awslogs-group": runnerLogGroup.name,
|
|
171
|
-
"awslogs-region": region.name,
|
|
172
|
-
"awslogs-stream-prefix": "ecs",
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
];
|
|
208
|
+
name: externalsVolumeName,
|
|
209
|
+
efsVolumeConfiguration: {
|
|
210
|
+
fileSystemId: externalsEfs.id,
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
runnerContainerDefinition.mountPoints?.push({
|
|
214
|
+
sourceVolume: runnerVolumeName,
|
|
215
|
+
containerPath: '/tmp/_work',
|
|
216
|
+
}, {
|
|
217
|
+
sourceVolume: externalsVolumeName,
|
|
218
|
+
containerPath: '/tmp/externals',
|
|
219
|
+
});
|
|
220
|
+
runnerContainerDefinition.environment?.push({
|
|
221
|
+
name: 'EFS_ID',
|
|
222
|
+
value: efs.id,
|
|
223
|
+
}, {
|
|
224
|
+
name: 'EXTERNALS_EFS_ID',
|
|
225
|
+
value: externalsEfs.id,
|
|
226
|
+
}, {
|
|
227
|
+
name: 'ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER',
|
|
228
|
+
value: 'false',
|
|
229
|
+
});
|
|
230
|
+
runnerContainerDefinition.command = [
|
|
231
|
+
'/bin/sh',
|
|
232
|
+
'-c',
|
|
233
|
+
'export EXECID=$(cat /proc/sys/kernel/random/uuid) && sudo mkdir -p /tmp/_work/$EXECID && sudo chown runner:runner /tmp/_work/$EXECID && ln -s /tmp/_work/$EXECID _work && sudo chown runner:runner /tmp/externals && /home/runner/run.sh ; sudo rm -r /tmp/_work/$EXECID',
|
|
234
|
+
];
|
|
235
|
+
runnerContainerDefinition.image = 'ghcr.io/hi-fi/actions-runner:ecs';
|
|
236
|
+
}
|
|
177
237
|
// TODO: Images through caching: https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html (requires authentication)
|
|
178
238
|
// TODO: Pass Execution role to job task: https://www.ernestchiang.com/en/posts/2021/using-amazon-ecs-exec/#1-grant-permissions-ecs-task-iam-role
|
|
179
239
|
// TODO: Pass Task role to job task
|
|
@@ -181,194 +241,131 @@ class Aws extends constructs_1.Construct {
|
|
|
181
241
|
family: 'GHA',
|
|
182
242
|
taskRoleArn: runnerRole.arn,
|
|
183
243
|
executionRoleArn: ecsTaskExecutionRole.arn,
|
|
184
|
-
containerDefinitions: cdktf_1.Fn.jsonencode(
|
|
244
|
+
containerDefinitions: cdktf_1.Fn.jsonencode([runnerContainerDefinition]),
|
|
185
245
|
cpu: '1024',
|
|
186
246
|
memory: '2048',
|
|
187
|
-
requiresCompatibilities: [
|
|
188
|
-
'FARGATE'
|
|
189
|
-
],
|
|
247
|
+
requiresCompatibilities: ['FARGATE'],
|
|
190
248
|
runtimePlatform: {
|
|
191
249
|
cpuArchitecture: 'X86_64',
|
|
192
|
-
operatingSystemFamily: 'LINUX'
|
|
250
|
+
operatingSystemFamily: 'LINUX',
|
|
193
251
|
},
|
|
194
252
|
networkMode: 'awsvpc',
|
|
195
|
-
volume:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
|
-
// This doesn't work with same volume, as volume is initially empty so it can't map to it's "externals" directory
|
|
203
|
-
{
|
|
204
|
-
name: externalsVolumeName,
|
|
205
|
-
efsVolumeConfiguration: {
|
|
206
|
-
fileSystemId: externalsEfs.id,
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
]
|
|
253
|
+
volume: runnerVolume,
|
|
254
|
+
});
|
|
255
|
+
autoscalerContainerDefinition.environment?.push({
|
|
256
|
+
name: 'TASK_DEFINITION_ARN',
|
|
257
|
+
value: runnerTaskDefinition.arn,
|
|
210
258
|
});
|
|
211
259
|
const autoscalerTaskDefinition = new ecs_task_definition_1.EcsTaskDefinition(this, 'AutoscalerTaskDefinition', {
|
|
212
260
|
family: 'Autoscaler',
|
|
213
261
|
taskRoleArn: autoscalerRole.arn,
|
|
214
262
|
executionRoleArn: ecsTaskExecutionRole.arn,
|
|
215
|
-
containerDefinitions: cdktf_1.Fn.jsonencode([
|
|
216
|
-
{
|
|
217
|
-
name: 'autoscaler',
|
|
218
|
-
image: 'ghcr.io/hi-fi/gha-runners-on-managed-env:test',
|
|
219
|
-
essential: true,
|
|
220
|
-
environment: [
|
|
221
|
-
{
|
|
222
|
-
name: 'PAT',
|
|
223
|
-
value: pat.value
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
name: 'GITHUB_CONFIG_URL',
|
|
227
|
-
value: githubConfigUrl.value
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
name: 'TASK_DEFINITION_ARN',
|
|
231
|
-
value: runnerTaskDefinition.arn
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
name: 'ECS_CLUSTER',
|
|
235
|
-
value: cluster.arn
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
name: 'ECS_SUBNETS',
|
|
239
|
-
value: cdktf_1.Fn.join(',', subnets.ids)
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
name: 'ECS_SECURITY_GROUPS',
|
|
243
|
-
value: cdktf_1.Fn.join(',', securityGroups.ids)
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
name: 'SCALE_SET_NAME',
|
|
247
|
-
value: 'ecs-runner-set'
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
|
-
logConfiguration: {
|
|
251
|
-
logDriver: 'awslogs',
|
|
252
|
-
options: {
|
|
253
|
-
"awslogs-group": autoscalerLogGroup.name,
|
|
254
|
-
"awslogs-region": region.name,
|
|
255
|
-
"awslogs-stream-prefix": "ecs",
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
]),
|
|
263
|
+
containerDefinitions: cdktf_1.Fn.jsonencode([autoscalerContainerDefinition]),
|
|
260
264
|
cpu: '256',
|
|
261
265
|
memory: '512',
|
|
262
|
-
requiresCompatibilities: [
|
|
263
|
-
'FARGATE'
|
|
264
|
-
],
|
|
266
|
+
requiresCompatibilities: ['FARGATE'],
|
|
265
267
|
runtimePlatform: {
|
|
266
268
|
cpuArchitecture: 'X86_64',
|
|
267
|
-
operatingSystemFamily: 'LINUX'
|
|
269
|
+
operatingSystemFamily: 'LINUX',
|
|
268
270
|
},
|
|
269
271
|
networkMode: 'awsvpc',
|
|
270
272
|
});
|
|
273
|
+
const runnerPolicyDefinition = {
|
|
274
|
+
Version: '2012-10-17',
|
|
275
|
+
Statement: [
|
|
276
|
+
{
|
|
277
|
+
Sid: 'StartandMonitorTask',
|
|
278
|
+
Effect: 'Allow',
|
|
279
|
+
Action: [
|
|
280
|
+
'ecs:RunTask',
|
|
281
|
+
'ecs:TagResource',
|
|
282
|
+
'ecs:ListTaskDefinitions',
|
|
283
|
+
'ecs:ListTasks',
|
|
284
|
+
'ecs:StopTask',
|
|
285
|
+
'ecs:RegisterTaskDefinition',
|
|
286
|
+
'ecs:DescribeTaskDefinition',
|
|
287
|
+
'ecs:DeregisterTaskDefinition',
|
|
288
|
+
'ecs:DeleteTaskDefinitions',
|
|
289
|
+
'ecs:ExecuteCommand',
|
|
290
|
+
// Needed for waiting
|
|
291
|
+
'ecs:DescribeTasks',
|
|
292
|
+
'logs:GetLogEvents',
|
|
293
|
+
'iam:PassRole',
|
|
294
|
+
'logs:StartLiveTail',
|
|
295
|
+
'logs:CreateLogStream',
|
|
296
|
+
],
|
|
297
|
+
Resource: [
|
|
298
|
+
`arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
|
|
299
|
+
cluster.arn,
|
|
300
|
+
// Triggerer has to be allowed to pass both task and task execution role
|
|
301
|
+
ecsTaskExecutionRole.arn,
|
|
302
|
+
runnerRole.arn,
|
|
303
|
+
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
304
|
+
//TODO: reorder rights so that listing is only one with star
|
|
305
|
+
'*',
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
Sid: 'GetVpcInfo',
|
|
310
|
+
Effect: 'Allow',
|
|
311
|
+
Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
|
|
312
|
+
Resource: '*',
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
Sid: 'ExecCommands',
|
|
316
|
+
Effect: 'Allow',
|
|
317
|
+
Action: [
|
|
318
|
+
'ssmmessages:CreateControlChannel',
|
|
319
|
+
'ssmmessages:CreateDataChannel',
|
|
320
|
+
'ssmmessages:OpenControlChannel',
|
|
321
|
+
'ssmmessages:OpenDataChannel',
|
|
322
|
+
],
|
|
323
|
+
Resource: '*',
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
};
|
|
271
327
|
const runnerPolicy = new iam_policy_1.IamPolicy(this, 'RunnerPolicy', {
|
|
272
|
-
policy: cdktf_1.Fn.jsonencode(
|
|
273
|
-
'Version': '2012-10-17',
|
|
274
|
-
'Statement': [
|
|
275
|
-
{
|
|
276
|
-
'Sid': 'StartandMonitorTask',
|
|
277
|
-
'Effect': 'Allow',
|
|
278
|
-
'Action': [
|
|
279
|
-
'ecs:RunTask',
|
|
280
|
-
'ecs:TagResource',
|
|
281
|
-
'ecs:ListTaskDefinitions',
|
|
282
|
-
'ecs:ListTasks',
|
|
283
|
-
'ecs:StopTask',
|
|
284
|
-
'ecs:RegisterTaskDefinition',
|
|
285
|
-
'ecs:DescribeTaskDefinition',
|
|
286
|
-
'ecs:DeregisterTaskDefinition',
|
|
287
|
-
'ecs:DeleteTaskDefinitions',
|
|
288
|
-
'ecs:ExecuteCommand',
|
|
289
|
-
// Needed for waiting
|
|
290
|
-
'ecs:DescribeTasks',
|
|
291
|
-
'logs:GetLogEvents',
|
|
292
|
-
'iam:PassRole',
|
|
293
|
-
'logs:StartLiveTail',
|
|
294
|
-
'logs:CreateLogStream',
|
|
295
|
-
],
|
|
296
|
-
'Resource': [
|
|
297
|
-
`arn:aws:ecs:${region.name}:${identity.accountId}:task-definition/gha-pod-workflow:*`,
|
|
298
|
-
cluster.arn,
|
|
299
|
-
// Triggerer has to be allowed to pass both task and task execution role
|
|
300
|
-
ecsTaskExecutionRole.arn,
|
|
301
|
-
runnerRole.arn,
|
|
302
|
-
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
303
|
-
//TODO: reorder rights so that listing is only one with star
|
|
304
|
-
'*'
|
|
305
|
-
]
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
'Sid': 'GetVpcInfo',
|
|
309
|
-
'Effect': 'Allow',
|
|
310
|
-
'Action': [
|
|
311
|
-
'ec2:DescribeSubnets',
|
|
312
|
-
'ec2:DescribeSecurityGroups'
|
|
313
|
-
],
|
|
314
|
-
'Resource': '*'
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
'Sid': 'ExecCommands',
|
|
318
|
-
'Effect': 'Allow',
|
|
319
|
-
'Action': [
|
|
320
|
-
'ssmmessages:CreateControlChannel',
|
|
321
|
-
'ssmmessages:CreateDataChannel',
|
|
322
|
-
'ssmmessages:OpenControlChannel',
|
|
323
|
-
'ssmmessages:OpenDataChannel'
|
|
324
|
-
],
|
|
325
|
-
'Resource': '*'
|
|
326
|
-
}
|
|
327
|
-
]
|
|
328
|
-
})
|
|
328
|
+
policy: cdktf_1.Fn.jsonencode(runnerPolicyDefinition),
|
|
329
329
|
});
|
|
330
330
|
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'RunnerPolicyAttachment', {
|
|
331
331
|
policyArn: runnerPolicy.arn,
|
|
332
|
-
role: runnerRole.name
|
|
332
|
+
role: runnerRole.name,
|
|
333
333
|
});
|
|
334
334
|
const autoscalerPolicy = new iam_policy_1.IamPolicy(this, 'AutoscalerPolicy', {
|
|
335
335
|
policy: cdktf_1.Fn.jsonencode({
|
|
336
|
-
|
|
337
|
-
|
|
336
|
+
Version: '2012-10-17',
|
|
337
|
+
Statement: [
|
|
338
338
|
{
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
339
|
+
Sid: 'StartandMonitorTask',
|
|
340
|
+
Effect: 'Allow',
|
|
341
|
+
Action: [
|
|
342
342
|
'ecs:RunTask',
|
|
343
343
|
// Needed for waiting
|
|
344
344
|
'ecs:DescribeTasks',
|
|
345
345
|
'logs:GetLogEvents',
|
|
346
346
|
'iam:PassRole',
|
|
347
347
|
],
|
|
348
|
-
|
|
348
|
+
Resource: [
|
|
349
349
|
`${runnerTaskDefinition.arnWithoutRevision}:*`,
|
|
350
350
|
// Triggerer has to be allowed to pass both task and task execution role
|
|
351
351
|
ecsTaskExecutionRole.arn,
|
|
352
352
|
runnerRole.arn,
|
|
353
353
|
`arn:aws:ecs:${region.name}:${identity.accountId}:task/${cluster.name}/*`,
|
|
354
354
|
`${runnerLogGroup.arn}:log-stream:*`,
|
|
355
|
-
]
|
|
355
|
+
],
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
}
|
|
366
|
-
]
|
|
367
|
-
})
|
|
358
|
+
Sid: 'GetVpcInfo',
|
|
359
|
+
Effect: 'Allow',
|
|
360
|
+
Action: ['ec2:DescribeSubnets', 'ec2:DescribeSecurityGroups'],
|
|
361
|
+
Resource: '*',
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
368
365
|
});
|
|
369
366
|
new iam_role_policy_attachment_1.IamRolePolicyAttachment(this, 'AutoscalerPolicyAttachment', {
|
|
370
367
|
policyArn: autoscalerPolicy.arn,
|
|
371
|
-
role: autoscalerRole.name
|
|
368
|
+
role: autoscalerRole.name,
|
|
372
369
|
});
|
|
373
370
|
new ecs_service_1.EcsService(this, 'AutoscalerService', {
|
|
374
371
|
cluster: cluster.arn,
|
|
@@ -379,17 +376,15 @@ class Aws extends constructs_1.Construct {
|
|
|
379
376
|
networkConfiguration: {
|
|
380
377
|
assignPublicIp: true,
|
|
381
378
|
subnets: subnets.ids,
|
|
382
|
-
securityGroups: securityGroups.ids
|
|
379
|
+
securityGroups: securityGroups.ids,
|
|
383
380
|
},
|
|
384
381
|
lifecycle: {
|
|
385
|
-
ignoreChanges: [
|
|
386
|
-
|
|
387
|
-
]
|
|
388
|
-
}
|
|
382
|
+
ignoreChanges: ['desired_count'],
|
|
383
|
+
},
|
|
389
384
|
});
|
|
390
385
|
}
|
|
391
386
|
}
|
|
392
387
|
exports.Aws = Aws;
|
|
393
388
|
_a = JSII_RTTI_SYMBOL_1;
|
|
394
|
-
Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx1RkFBa0Y7QUFDbEYsK0ZBQXlGO0FBQ3pGLDZFQUF3RTtBQUN4RSwrRkFBeUY7QUFDekYsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUNqRSxxRUFBaUU7QUFDakUscUZBQWdGO0FBQ2hGLG1FQUErRDtBQUMvRCwrREFBMkQ7QUFDM0QsbUdBQTZGO0FBQzdGLCtEQUErRDtBQUMvRCxpQ0FBOEM7QUFDOUMsMkNBQXVDO0FBQ3ZDLDJDQUE4QztBQUM5Qyw2RUFBd0U7QUFFeEUsK0VBQTBFO0FBRTFFLE1BQWEsR0FBSSxTQUFRLHNCQUFTO0lBQzlCLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxzQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFFNUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxnREFBcUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sTUFBTSxHQUFHLElBQUksK0JBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRXBELE1BQU0sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzVDLElBQUksRUFBRSxvQkFBb0I7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxrQkFBTyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDL0MsZ0JBQWdCLEVBQUUsVUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFdBQVcsRUFBRTtvQkFDVDt3QkFDSSxRQUFRLEVBQUUsT0FBTzt3QkFDakIsV0FBVyxFQUFFOzRCQUNULFNBQVMsRUFBRSx5QkFBeUI7eUJBQ3ZDO3dCQUNELFFBQVEsRUFBRSxnQkFBZ0I7cUJBQzdCO2lCQUNKO2FBQ0osQ0FBQztTQUNMLENBQUMsQ0FBQTtRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksa0JBQU8sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDdkQsZ0JBQWdCLEVBQUUsVUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFdBQVcsRUFBRTtvQkFDVDt3QkFDSSxRQUFRLEVBQUUsT0FBTzt3QkFDakIsV0FBVyxFQUFFOzRCQUNULFNBQVMsRUFBRSx5QkFBeUI7eUJBQ3ZDO3dCQUNELFFBQVEsRUFBRSxnQkFBZ0I7cUJBQzdCO2lCQUNKO2FBQ0osQ0FBQztTQUNMLENBQUMsQ0FBQTtRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxrQkFBTyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNoRSxnQkFBZ0IsRUFBRSxVQUFFLENBQUMsVUFBVSxDQUFDO2dCQUM1QixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsV0FBVyxFQUFFO29CQUNUO3dCQUNJLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixXQUFXLEVBQUU7NEJBQ1QsU0FBUyxFQUFFLHlCQUF5Qjt5QkFDdkM7d0JBQ0QsUUFBUSxFQUFFLGdCQUFnQjtxQkFDN0I7aUJBQ0o7YUFDSixDQUFDO1lBQ0YsaUJBQWlCLEVBQUU7Z0JBQ2YsdUVBQXVFO2FBQzFFO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSx5Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDbEUsSUFBSSxFQUFFLFVBQVU7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLHlDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUMxRSxJQUFJLEVBQUUsaUJBQWlCO1NBQzFCLENBQUMsQ0FBQztRQUdILE1BQU0sT0FBTyxHQUFHLElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE1BQU0sY0FBYyxHQUFHLElBQUksZ0RBQXFCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFekUsaURBQWlEO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksK0JBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ3ZDLGNBQWMsRUFBRSxTQUFTO1lBQ3pCLElBQUksRUFBRTtnQkFDRixJQUFJLEVBQUUsTUFBTTthQUNmO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDekQsY0FBYyxFQUFFLFNBQVM7WUFDekIsSUFBSSxFQUFFO2dCQUNGLElBQUksRUFBRSxXQUFXO2FBQ3BCO1NBQ0osQ0FBQyxDQUFBO1FBRUYsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLHlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEQsSUFBSSxpQ0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN2QyxPQUFPLEVBQUUsUUFBUTtZQUNqQixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDcEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUU7WUFDaEQsT0FBTyxFQUFFLFFBQVE7WUFDakIsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQzdCLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSztTQUMzQixDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztRQUNoQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztRQUN4QyxNQUFNLDBCQUEwQixHQUEwQjtZQUN0RDtnQkFDQSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsa0NBQWtDO2dCQUN6QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLDBRQUEwUSxDQUFDO2dCQUN0UyxTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUU7b0JBQ1Q7d0JBQ0ksSUFBSSxFQUFFLFFBQVE7d0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3FCQUNoQjtvQkFDRDt3QkFDSSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUU7cUJBQ3pCO29CQUNEO3dCQUNJLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtxQkFDdEI7b0JBQ0Q7d0JBQ0ksSUFBSSxFQUFFLHlCQUF5Qjt3QkFDL0IsS0FBSyxFQUFFLFNBQVM7cUJBQ25CO29CQUNEO3dCQUNJLElBQUksRUFBRSxzQ0FBc0M7d0JBQzVDLEtBQUssRUFBRSxPQUFPO3FCQUNqQjtvQkFDRDt3QkFDSSxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsS0FBSyxFQUFFLFVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7cUJBQ25DO29CQUNEO3dCQUNJLElBQUksRUFBRSxxQkFBcUI7d0JBQzNCLEtBQUssRUFBRSxVQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDO3FCQUMxQztvQkFDRDt3QkFDSSxJQUFJLEVBQUUsZUFBZTt3QkFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHO3FCQUN4QjtvQkFDRDt3QkFDSSxJQUFJLEVBQUUsb0JBQW9CO3dCQUMxQixLQUFLLEVBQUUsb0JBQW9CLENBQUMsR0FBRztxQkFDbEM7aUJBQ0o7Z0JBQ0QsV0FBVyxFQUFFO29CQUNUO3dCQUNJLFlBQVksRUFBRSxnQkFBZ0I7d0JBQzlCLGFBQWEsRUFBRSxZQUFZO3FCQUM5QjtvQkFDRDt3QkFDSSxZQUFZLEVBQUUsbUJBQW1CO3dCQUNqQyxhQUFhLEVBQUUsZ0JBQWdCO3FCQUNsQztpQkFDSjtnQkFDRCxnQkFBZ0IsRUFBRTtvQkFDZCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsT0FBTyxFQUFFO3dCQUNMLGVBQWUsRUFBRSxjQUFjLENBQUMsSUFBSTt3QkFDcEMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQzdCLHVCQUF1QixFQUFFLEtBQUs7cUJBQ2pDO2lCQUNKO2FBQ0o7U0FBQyxDQUFBO1FBQ0YseUlBQXlJO1FBQ3pJLGlKQUFpSjtRQUNqSixtQ0FBbUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLHVDQUFpQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUM3RSxNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRztZQUMzQixnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO1lBQzFDLG9CQUFvQixFQUFFLFVBQUUsQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUM7WUFDL0QsR0FBRyxFQUFFLE1BQU07WUFDWCxNQUFNLEVBQUUsTUFBTTtZQUNkLHVCQUF1QixFQUFFO2dCQUNyQixTQUFTO2FBQ1o7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLHFCQUFxQixFQUFFLE9BQU87YUFDakM7WUFDRCxXQUFXLEVBQUUsUUFBUTtZQUNyQixNQUFNLEVBQUU7Z0JBQ0o7b0JBQ0ksSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsc0JBQXNCLEVBQUU7d0JBQ3BCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRTtxQkFDdkI7aUJBQ0o7Z0JBQ0QsaUhBQWlIO2dCQUNqSDtvQkFDSSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixzQkFBc0IsRUFBRTt3QkFDcEIsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFO3FCQUNoQztpQkFDSjthQUNKO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLHVDQUFpQixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNyRixNQUFNLEVBQUUsWUFBWTtZQUNwQixXQUFXLEVBQUUsY0FBYyxDQUFDLEdBQUc7WUFDL0IsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsR0FBRztZQUMxQyxvQkFBb0IsRUFBRSxVQUFFLENBQUMsVUFBVSxDQUFDO2dCQUNoQztvQkFDSSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFLCtDQUErQztvQkFDdEQsU0FBUyxFQUFFLElBQUk7b0JBQ2YsV0FBVyxFQUFFO3dCQUNUOzRCQUNJLElBQUksRUFBRSxLQUFLOzRCQUNYLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSzt5QkFDbkI7d0JBQ0Q7NEJBQ0ksSUFBSSxFQUFFLG1CQUFtQjs0QkFDekIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLO3lCQUMvQjt3QkFDRDs0QkFDSSxJQUFJLEVBQUUscUJBQXFCOzRCQUMzQixLQUFLLEVBQUUsb0JBQW9CLENBQUMsR0FBRzt5QkFDbEM7d0JBQ0Q7NEJBQ0ksSUFBSSxFQUFFLGFBQWE7NEJBQ25CLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRzt5QkFDckI7d0JBQ0Q7NEJBQ0ksSUFBSSxFQUFFLGFBQWE7NEJBQ25CLEtBQUssRUFBRSxVQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO3lCQUNuQzt3QkFDRDs0QkFDSSxJQUFJLEVBQUUscUJBQXFCOzRCQUMzQixLQUFLLEVBQUUsVUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQzt5QkFDMUM7d0JBQ0Q7NEJBQ0ksSUFBSSxFQUFFLGdCQUFnQjs0QkFDdEIsS0FBSyxFQUFFLGdCQUFnQjt5QkFDMUI7cUJBQ0o7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2QsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLE9BQU8sRUFBRTs0QkFDTCxlQUFlLEVBQUUsa0JBQWtCLENBQUMsSUFBSTs0QkFDeEMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLElBQUk7NEJBQzdCLHVCQUF1QixFQUFFLEtBQUs7eUJBQ2pDO3FCQUNKO2lCQUNKO2FBQ0osQ0FBQztZQUNGLEdBQUcsRUFBRSxLQUFLO1lBQ1YsTUFBTSxFQUFFLEtBQUs7WUFDYix1QkFBdUIsRUFBRTtnQkFDckIsU0FBUzthQUNaO1lBQ0QsZUFBZSxFQUFFO2dCQUNiLGVBQWUsRUFBRSxRQUFRO2dCQUN6QixxQkFBcUIsRUFBRSxPQUFPO2FBQ2pDO1lBQ0QsV0FBVyxFQUFFLFFBQVE7U0FDeEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDckQsTUFBTSxFQUFFLFVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixXQUFXLEVBQUU7b0JBQ1Q7d0JBQ0ksS0FBSyxFQUFFLHFCQUFxQjt3QkFDNUIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixhQUFhOzRCQUNiLGlCQUFpQjs0QkFDakIseUJBQXlCOzRCQUN6QixlQUFlOzRCQUNmLGNBQWM7NEJBQ2QsNEJBQTRCOzRCQUM1Qiw0QkFBNEI7NEJBQzVCLDhCQUE4Qjs0QkFDOUIsMkJBQTJCOzRCQUMzQixvQkFBb0I7NEJBQ3BCLHFCQUFxQjs0QkFDckIsbUJBQW1COzRCQUNuQixtQkFBbUI7NEJBQ25CLGNBQWM7NEJBQ2Qsb0JBQW9COzRCQUNwQixzQkFBc0I7eUJBQ3pCO3dCQUNELFVBQVUsRUFBRTs0QkFDUixlQUFlLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFNBQVMscUNBQXFDOzRCQUNyRixPQUFPLENBQUMsR0FBRzs0QkFDWCx3RUFBd0U7NEJBQ3hFLG9CQUFvQixDQUFDLEdBQUc7NEJBQ3hCLFVBQVUsQ0FBQyxHQUFHOzRCQUNkLGVBQWUsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsU0FBUyxTQUFTLE9BQU8sQ0FBQyxJQUFJLElBQUk7NEJBQ3pFLDREQUE0RDs0QkFDNUQsR0FBRzt5QkFDTjtxQkFDSjtvQkFDRDt3QkFDSSxLQUFLLEVBQUUsWUFBWTt3QkFDbkIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixxQkFBcUI7NEJBQ3JCLDRCQUE0Qjt5QkFDL0I7d0JBQ0QsVUFBVSxFQUFFLEdBQUc7cUJBQ2xCO29CQUNEO3dCQUNJLEtBQUssRUFBRSxjQUFjO3dCQUNyQixRQUFRLEVBQUUsT0FBTzt3QkFDakIsUUFBUSxFQUFFOzRCQUNOLGtDQUFrQzs0QkFDbEMsK0JBQStCOzRCQUMvQixnQ0FBZ0M7NEJBQ2hDLDZCQUE2Qjt5QkFDaEM7d0JBQ0QsVUFBVSxFQUFFLEdBQUc7cUJBQ2xCO2lCQUNKO2FBQ0osQ0FFQTtTQUNKLENBQUMsQ0FBQTtRQUVGLElBQUksb0RBQXVCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ3hELFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRztZQUMzQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7U0FDeEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzdELE1BQU0sRUFBRSxVQUFFLENBQUMsVUFBVSxDQUFDO2dCQUNsQixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsV0FBVyxFQUFFO29CQUNUO3dCQUNJLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixRQUFRLEVBQUU7NEJBQ04sYUFBYTs0QkFDYixxQkFBcUI7NEJBQ3JCLG1CQUFtQjs0QkFDbkIsbUJBQW1COzRCQUNuQixjQUFjO3lCQUNqQjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1IsR0FBRyxvQkFBb0IsQ0FBQyxrQkFBa0IsSUFBSTs0QkFDOUMsd0VBQXdFOzRCQUN4RSxvQkFBb0IsQ0FBQyxHQUFHOzRCQUN4QixVQUFVLENBQUMsR0FBRzs0QkFDZCxlQUFlLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFNBQVMsU0FBUyxPQUFPLENBQUMsSUFBSSxJQUFJOzRCQUN6RSxHQUFHLGNBQWMsQ0FBQyxHQUFHLGVBQWU7eUJBQ3ZDO3FCQUNKO29CQUNEO3dCQUNJLEtBQUssRUFBRSxZQUFZO3dCQUNuQixRQUFRLEVBQUUsT0FBTzt3QkFDakIsUUFBUSxFQUFFOzRCQUNOLHFCQUFxQjs0QkFDckIsNEJBQTRCO3lCQUMvQjt3QkFDRCxVQUFVLEVBQUUsR0FBRztxQkFDbEI7aUJBQ0o7YUFDSixDQUVBO1NBQ0osQ0FBQyxDQUFBO1FBQ0YsSUFBSSxvREFBdUIsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDNUQsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7WUFDL0IsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1NBQzVCLENBQUMsQ0FBQTtRQUVGLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ3BCLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsWUFBWSxFQUFFLENBQUM7WUFDZixVQUFVLEVBQUUsU0FBUztZQUNyQixjQUFjLEVBQUUsd0JBQXdCLENBQUMsa0JBQWtCO1lBQzNELG9CQUFvQixFQUFFO2dCQUNsQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHO2dCQUNwQixjQUFjLEVBQUUsY0FBYyxDQUFDLEdBQUc7YUFDckM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFO29CQUNYLGVBQWU7aUJBQ2xCO2FBQ0o7U0FDSixDQUFDLENBQUE7SUFDTixDQUFDOztBQTVZTCxrQkE2WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbG91ZHdhdGNoTG9nR3JvdXAgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9jbG91ZHdhdGNoLWxvZy1ncm91cCc7XG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1jYWxsZXItaWRlbnRpdHknO1xuaW1wb3J0IHsgRGF0YUF3c1JlZ2lvbiB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXJlZ2lvbic7XG5pbXBvcnQgeyBEYXRhQXdzU2VjdXJpdHlHcm91cHMgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1zZWN1cml0eS1ncm91cHMnO1xuaW1wb3J0IHsgRGF0YUF3c1N1Ym5ldHMgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1zdWJuZXRzJztcbmltcG9ydCB7IEVjc0NsdXN0ZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtY2x1c3Rlcic7XG5pbXBvcnQgeyBFY3NTZXJ2aWNlIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWNzLXNlcnZpY2UnO1xuaW1wb3J0IHsgRWNzVGFza0RlZmluaXRpb24gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtdGFzay1kZWZpbml0aW9uJztcbmltcG9ydCB7IElhbVBvbGljeSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1wb2xpY3knO1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1yb2xlJztcbmltcG9ydCB7IElhbVJvbGVQb2xpY3lBdHRhY2htZW50IH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvaWFtLXJvbGUtcG9saWN5LWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgQXdzUHJvdmlkZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9wcm92aWRlcic7XG5pbXBvcnQgeyBGbiwgVGVycmFmb3JtSXRlcmF0b3IgfSBmcm9tICdjZGt0Zic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGNvbW1vblZhcmlhYmxlcyB9IGZyb20gJy4vdmFyaWFibGVzJztcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHsgdHlwZSBDb250YWluZXJEZWZpbml0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcydcbmltcG9ydCB7IEVmc01vdW50VGFyZ2V0IH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWZzLW1vdW50LXRhcmdldCc7XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICBuZXcgQXdzUHJvdmlkZXIodGhpcywgJ2F3cycsIHtcblxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpZGVudGl0eSA9IG5ldyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkodGhpcywgJ0lkZW50aXR5Jywge30pO1xuXG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBEYXRhQXdzUmVnaW9uKHRoaXMsICdSZWdpb24nLCB7fSlcblxuICAgICAgICBjb25zdCB7IHBhdCwgZ2l0aHViQ29uZmlnVXJsIH0gPSBjb21tb25WYXJpYWJsZXModGhpcyk7XG5cbiAgICAgICAgY29uc3QgY2x1c3RlciA9IG5ldyBFY3NDbHVzdGVyKHRoaXMsICdDbHVzdGVyJywge1xuICAgICAgICAgICAgbmFtZTogJ2doYS1ydW5uZXItY2x1c3RlcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJ1bm5lclJvbGUgPSBuZXcgSWFtUm9sZSh0aGlzLCAnUnVubmVyUm9sZScsIHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgICAgICdTdGF0ZW1lbnQnOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1ByaW5jaXBhbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2VydmljZSc6ICdlY3MtdGFza3MuYW1hem9uYXdzLmNvbSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogJ3N0czpBc3N1bWVSb2xlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdXRvc2NhbGVyUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdBdXRvc2NhbGVyUm9sZScsIHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgICAgICdTdGF0ZW1lbnQnOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1ByaW5jaXBhbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2VydmljZSc6ICdlY3MtdGFza3MuYW1hem9uYXdzLmNvbSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogJ3N0czpBc3N1bWVSb2xlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdUYXNrRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgICAgICdTdGF0ZW1lbnQnOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1ByaW5jaXBhbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2VydmljZSc6ICdlY3MtdGFza3MuYW1hem9uYXdzLmNvbSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWN0aW9uJzogJ3N0czpBc3N1bWVSb2xlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYW5hZ2VkUG9saWN5QXJuczogW1xuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3knXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcnVubmVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKHRoaXMsICdSdW5uZXJMb2dHcm91cCcsIHtcbiAgICAgICAgICAgIG5hbWU6ICcvZWNzL0dIQScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJMb2dHcm91cCA9IG5ldyBDbG91ZHdhdGNoTG9nR3JvdXAodGhpcywgJ0F1dG9zY2FsZXJMb2dHcm91cCcsIHtcbiAgICAgICAgICAgIG5hbWU6ICcvZWNzL0F1dG9zY2FsZXInLFxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGNvbnN0IHN1Ym5ldHMgPSBuZXcgRGF0YUF3c1N1Ym5ldHModGhpcywgJ1N1Ym5ldHMnLCB7fSk7XG5cbiAgICAgICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPSBuZXcgRGF0YUF3c1NlY3VyaXR5R3JvdXBzKHRoaXMsICdTZWN1cml0eUdyb3VwcycpO1xuXG4gICAgICAgIC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3NcbiAgICAgICAgY29uc3QgZWZzID0gbmV3IEVmc0ZpbGVTeXN0ZW0odGhpcywgJ2VmcycsIHtcbiAgICAgICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgTmFtZTogJ3dvcmsnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgZXh0ZXJuYWxzRWZzID0gbmV3IEVmc0ZpbGVTeXN0ZW0odGhpcywgJ2V4dGVybmFsc0VmcycsIHtcbiAgICAgICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAgICAgTmFtZTogJ2V4dGVybmFscydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvLyBFYWNoIHN1Ym5ldCBpbiBWUEMgYXJlIG9uIGRpZmZlcmVudCBBWnMsIHNvIGNyZWF0aW5nIG1vdW50cG9pbnQgdG8gZWFjaFxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21MaXN0KHN1Ym5ldHMuaWRzKVxuXG4gICAgICAgIG5ldyBFZnNNb3VudFRhcmdldCh0aGlzLCAnRWZzTW91bnRUYXJnZXQnLCB7XG4gICAgICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgICAgIGZpbGVTeXN0ZW1JZDogZWZzLmlkLFxuICAgICAgICAgICAgc3VibmV0SWQ6IGl0ZXJhdG9yLnZhbHVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBFZnNNb3VudFRhcmdldCh0aGlzLCAnRXh0ZXJuYWxzRWZzTW91bnRUYXJnZXQnLCB7XG4gICAgICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgICAgIGZpbGVTeXN0ZW1JZDogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICAgICAgc3VibmV0SWQ6IGl0ZXJhdG9yLnZhbHVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSAnd29yayc7XG4gICAgICAgIGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSAnZXh0ZXJuYWxzJztcbiAgICAgICAgY29uc3QgcnVubmVyQ29udGFpbmVyRGVmaW5pdGlvbnM6IENvbnRhaW5lckRlZmluaXRpb25bXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdydW5uZXInLFxuICAgICAgICAgICAgaW1hZ2U6ICdnaGNyLmlvL2hpLWZpL2FjdGlvbnMtcnVubmVyOmVjcycsXG4gICAgICAgICAgICBjb21tYW5kOiBbJy9iaW4vc2gnLCAnLWMnLCAnZXhwb3J0IEVYRUNJRD0kKGNhdCAvcHJvYy9zeXMva2VybmVsL3JhbmRvbS91dWlkKSAmJiBzdWRvIG1rZGlyIC1wIC90bXAvX3dvcmsvJEVYRUNJRCAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9fd29yay8kRVhFQ0lEICYmIGxuIC1zIC90bXAvX3dvcmsvJEVYRUNJRCBfd29yayAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9leHRlcm5hbHMgJiYgL2hvbWUvcnVubmVyL3J1bi5zaCA7IHN1ZG8gcm0gLXIgL3RtcC9fd29yay8kRVhFQ0lEJ10sXG4gICAgICAgICAgICBlc3NlbnRpYWw6IHRydWUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VGU19JRCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlZnMuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VYVEVSTkFMU19FRlNfSUQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZXh0ZXJuYWxzRWZzLmlkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFQ1NfQ0xVU1RFUl9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsdXN0ZXIubmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQUNUSU9OU19SVU5ORVJfUE9EX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2doYS1wb2QnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBQ1RJT05TX1JVTk5FUl9SRVFVSVJFX0pPQl9DT05UQUlORVInLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2ZhbHNlJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1NVQk5FVFMnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBGbi5qb2luKCcsJywgc2VjdXJpdHlHcm91cHMuaWRzKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1RBU0tfUk9MRScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydW5uZXJSb2xlLmFyblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX0VYRUNVVElPTl9ST0xFJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtb3VudFBvaW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlVm9sdW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9fd29yaycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyUGF0aDogJy90bXAvZXh0ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhd3Nsb2dzLWdyb3VwXCI6IHJ1bm5lckxvZ0dyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1yZWdpb25cIjogcmVnaW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1zdHJlYW0tcHJlZml4XCI6IFwiZWNzXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgICAvLyBUT0RPOiBJbWFnZXMgdGhyb3VnaCBjYWNoaW5nOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNSL2xhdGVzdC91c2VyZ3VpZGUvcHVsbC10aHJvdWdoLWNhY2hlLmh0bWwgKHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uKVxuICAgICAgICAvLyBUT0RPOiBQYXNzIEV4ZWN1dGlvbiByb2xlIHRvIGpvYiB0YXNrOiBodHRwczovL3d3dy5lcm5lc3RjaGlhbmcuY29tL2VuL3Bvc3RzLzIwMjEvdXNpbmctYW1hem9uLWVjcy1leGVjLyMxLWdyYW50LXBlcm1pc3Npb25zLWVjcy10YXNrLWlhbS1yb2xlXG4gICAgICAgIC8vIFRPRE86IFBhc3MgVGFzayByb2xlIHRvIGpvYiB0YXNrXG4gICAgICAgIGNvbnN0IHJ1bm5lclRhc2tEZWZpbml0aW9uID0gbmV3IEVjc1Rhc2tEZWZpbml0aW9uKHRoaXMsICdSdW5uZXJUYXNrRGVmaW5pdGlvbicsIHtcbiAgICAgICAgICAgIGZhbWlseTogJ0dIQScsXG4gICAgICAgICAgICB0YXNrUm9sZUFybjogcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICBjb250YWluZXJEZWZpbml0aW9uczogRm4uanNvbmVuY29kZShydW5uZXJDb250YWluZXJEZWZpbml0aW9ucyksXG4gICAgICAgICAgICBjcHU6ICcxMDI0JyxcbiAgICAgICAgICAgIG1lbW9yeTogJzIwNDgnLFxuICAgICAgICAgICAgcmVxdWlyZXNDb21wYXRpYmlsaXRpZXM6IFtcbiAgICAgICAgICAgICAgICAnRkFSR0FURSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgICAgICAgICBjcHVBcmNoaXRlY3R1cmU6ICdYODZfNjQnLFxuICAgICAgICAgICAgICAgIG9wZXJhdGluZ1N5c3RlbUZhbWlseTogJ0xJTlVYJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldHdvcmtNb2RlOiAnYXdzdnBjJyxcbiAgICAgICAgICAgIHZvbHVtZTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcnVubmVyVm9sdW1lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIHNhbWUgdm9sdW1lLCBhcyB2b2x1bWUgaXMgaW5pdGlhbGx5IGVtcHR5IHNvIGl0IGNhbid0IG1hcCB0byBpdCdzIFwiZXh0ZXJuYWxzXCIgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBleHRlcm5hbHNWb2x1bWVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24odGhpcywgJ0F1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbicsIHtcbiAgICAgICAgICAgIGZhbWlseTogJ0F1dG9zY2FsZXInLFxuICAgICAgICAgICAgdGFza1JvbGVBcm46IGF1dG9zY2FsZXJSb2xlLmFybixcbiAgICAgICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhdXRvc2NhbGVyJyxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6ICdnaGNyLmlvL2hpLWZpL2doYS1ydW5uZXJzLW9uLW1hbmFnZWQtZW52OnRlc3QnLFxuICAgICAgICAgICAgICAgICAgICBlc3NlbnRpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BBVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhdC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnR0lUSFVCX0NPTkZJR19VUkwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1RBU0tfREVGSU5JVElPTl9BUk4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydW5uZXJUYXNrRGVmaW5pdGlvbi5hcm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VDU19DTFVTVEVSJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5hcm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VDU19TVUJORVRTJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTQ0FMRV9TRVRfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdlY3MtcnVubmVyLXNldCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGxvZ0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1ncm91cFwiOiBhdXRvc2NhbGVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImF3c2xvZ3MtcmVnaW9uXCI6IHJlZ2lvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXdzbG9ncy1zdHJlYW0tcHJlZml4XCI6IFwiZWNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNwdTogJzI1NicsXG4gICAgICAgICAgICBtZW1vcnk6ICc1MTInLFxuICAgICAgICAgICAgcmVxdWlyZXNDb21wYXRpYmlsaXRpZXM6IFtcbiAgICAgICAgICAgICAgICAnRkFSR0FURSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBydW50aW1lUGxhdGZvcm06IHtcbiAgICAgICAgICAgICAgICBjcHVBcmNoaXRlY3R1cmU6ICdYODZfNjQnLFxuICAgICAgICAgICAgICAgIG9wZXJhdGluZ1N5c3RlbUZhbWlseTogJ0xJTlVYJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldHdvcmtNb2RlOiAnYXdzdnBjJyxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBydW5uZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdSdW5uZXJQb2xpY3knLCB7XG4gICAgICAgICAgICBwb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJzIwMTItMTAtMTcnLFxuICAgICAgICAgICAgICAgICdTdGF0ZW1lbnQnOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTaWQnOiAnU3RhcnRhbmRNb25pdG9yVGFzaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRWZmZWN0JzogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpSdW5UYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOkxpc3RUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6TGlzdFRhc2tzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlN0b3BUYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RGVsZXRlVGFza0RlZmluaXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOkV4ZWN1dGVDb21tYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOkRlc2NyaWJlVGFza3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ3M6U3RhcnRMaXZlVGFpbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2UnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLWRlZmluaXRpb24vZ2hhLXBvZC13b3JrZmxvdzoqYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLmFybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZXIgaGFzIHRvIGJlIGFsbG93ZWQgdG8gcGFzcyBib3RoIHRhc2sgYW5kIHRhc2sgZXhlY3V0aW9uIHJvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLyR7Y2x1c3Rlci5uYW1lfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RPRE86IHJlb3JkZXIgcmlnaHRzIHNvIHRoYXQgbGlzdGluZyBpcyBvbmx5IG9uZSB3aXRoIHN0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKidcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWMyOkRlc2NyaWJlU3VibmV0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvdXJjZSc6ICcqJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnU2lkJzogJ0V4ZWNDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRWZmZWN0JzogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlJzogJyonXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ1J1bm5lclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICAgICAgICBwb2xpY3lBcm46IHJ1bm5lclBvbGljeS5hcm4sXG4gICAgICAgICAgICByb2xlOiBydW5uZXJSb2xlLm5hbWVcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdXRvc2NhbGVyUG9saWN5ID0gbmV3IElhbVBvbGljeSh0aGlzLCAnQXV0b3NjYWxlclBvbGljeScsIHtcbiAgICAgICAgICAgIHBvbGljeTogRm4uanNvbmVuY29kZSh7XG4gICAgICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgJ1N0YXRlbWVudCc6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NpZCc6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFZmZlY3QnOiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjdGlvbic6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBmb3Igd2FpdGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWFtOlBhc3NSb2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2UnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZXIgaGFzIHRvIGJlIGFsbG93ZWQgdG8gcGFzcyBib3RoIHRhc2sgYW5kIHRhc2sgZXhlY3V0aW9uIHJvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLyR7Y2x1c3Rlci5uYW1lfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtydW5uZXJMb2dHcm91cC5hcm59OmxvZy1zdHJlYW06KmAsXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTaWQnOiAnR2V0VnBjSW5mbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRWZmZWN0JzogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY3Rpb24nOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VjMjpEZXNjcmliZVN1Ym5ldHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlYzI6RGVzY3JpYmVTZWN1cml0eUdyb3VwcydcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2UnOiAnKidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ0F1dG9zY2FsZXJQb2xpY3lBdHRhY2htZW50Jywge1xuICAgICAgICAgICAgcG9saWN5QXJuOiBhdXRvc2NhbGVyUG9saWN5LmFybixcbiAgICAgICAgICAgIHJvbGU6IGF1dG9zY2FsZXJSb2xlLm5hbWVcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgRWNzU2VydmljZSh0aGlzLCAnQXV0b3NjYWxlclNlcnZpY2UnLCB7XG4gICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLmFybixcbiAgICAgICAgICAgIG5hbWU6ICdhdXRvc2NhbGVyLXNlcnZpY2UnLFxuICAgICAgICAgICAgZGVzaXJlZENvdW50OiAxLFxuICAgICAgICAgICAgbGF1bmNoVHlwZTogJ0ZBUkdBVEUnLFxuICAgICAgICAgICAgdGFza0RlZmluaXRpb246IGF1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbi5hcm5XaXRob3V0UmV2aXNpb24sXG4gICAgICAgICAgICBuZXR3b3JrQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIGFzc2lnblB1YmxpY0lwOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN1Ym5ldHM6IHN1Ym5ldHMuaWRzLFxuICAgICAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBzZWN1cml0eUdyb3Vwcy5pZHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaWZlY3ljbGU6IHtcbiAgICAgICAgICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXG4gICAgICAgICAgICAgICAgICAgICdkZXNpcmVkX2NvdW50J1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|
|
389
|
+
Aws[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Aws", version: "0.0.4" };
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RkFBaUY7QUFDakYsK0ZBQXdGO0FBQ3hGLDZFQUF1RTtBQUN2RSwrRkFHeUQ7QUFDekQsK0VBR2lEO0FBQ2pELHFFQUFnRTtBQUNoRSxxRUFBZ0U7QUFDaEUscUZBR29EO0FBQ3BELDZFQUF1RTtBQUN2RSwrRUFBeUU7QUFDekUsbUVBQThEO0FBQzlELCtEQUEwRDtBQUMxRCxtR0FBNEY7QUFDNUYsK0RBQThEO0FBQzlELGlDQUEwRDtBQUMxRCwyQ0FBc0M7QUFDdEMsMkNBQTZDO0FBaUI3QyxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUNoQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLHNCQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdEQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBQSwyQkFBZSxFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZFLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzlDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztTQUN4QixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsRCxNQUFNLEVBQUUsS0FBSyxD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RSxtQkFBbUIsRUFBRTtZQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixZQUFZLEVBQUUsQ0FBQztZQUNmLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxrQkFBa0I7WUFDM0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRzthQUNuQztZQUNELFNBQVMsRUFBRTtnQkFDVCxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDakM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOztBQWxhSCxrQkFtYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnRhaW5lckRlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJ1xuaW1wb3J0IHsgQ2xvdWR3YXRjaExvZ0dyb3VwIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvY2xvdWR3YXRjaC1sb2ctZ3JvdXAnXG5pbXBvcnQgeyBEYXRhQXdzQ2FsbGVySWRlbnRpdHkgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9kYXRhLWF3cy1jYWxsZXItaWRlbnRpdHknXG5pbXBvcnQgeyBEYXRhQXdzUmVnaW9uIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3MtcmVnaW9uJ1xuaW1wb3J0IHtcbiAgRGF0YUF3c1NlY3VyaXR5R3JvdXBzLFxuICBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXIsXG59IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2RhdGEtYXdzLXNlY3VyaXR5LWdyb3VwcydcbmltcG9ydCB7XG4gIERhdGFBd3NTdWJuZXRzLFxuICBEYXRhQXdzU3VibmV0c0ZpbHRlcixcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZGF0YS1hd3Mtc3VibmV0cydcbmltcG9ydCB7IEVjc0NsdXN0ZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3MtY2x1c3RlcidcbmltcG9ydCB7IEVjc1NlcnZpY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lY3Mtc2VydmljZSdcbmltcG9ydCB7XG4gIEVjc1Rhc2tEZWZpbml0aW9uLFxuICBFY3NUYXNrRGVmaW5pdGlvblZvbHVtZSxcbn0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvZWNzLXRhc2stZGVmaW5pdGlvbidcbmltcG9ydCB7IEVmc0ZpbGVTeXN0ZW0gfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9lZnMtZmlsZS1zeXN0ZW0nXG5pbXBvcnQgeyBFZnNNb3VudFRhcmdldCB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2Vmcy1tb3VudC10YXJnZXQnXG5pbXBvcnQgeyBJYW1Qb2xpY3kgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcG9saWN5J1xuaW1wb3J0IHsgSWFtUm9sZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1hd3MvbGliL2lhbS1yb2xlJ1xuaW1wb3J0IHsgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItYXdzL2xpYi9pYW0tcm9sZS1wb2xpY3ktYXR0YWNobWVudCdcbmltcG9ydCB7IEF3c1Byb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWF3cy9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBGbiwgSVJlc29sdmFibGUsIFRlcnJhZm9ybUl0ZXJhdG9yIH0gZnJvbSAnY2RrdGYnXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJ1xuaW1wb3J0IHsgY29tbW9uVmFyaWFibGVzIH0gZnJvbSAnLi92YXJpYWJsZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUHJvcHMge1xuICAvLyBOYW1lIG9mIHRoZSBFQ1MgY2x1c3RlciB0byBjcmVhdGUgYW5kIHVzZS5cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU6IHN0cmluZ1xuICAvLyBVdGlsaXplIHJ1bm5lci1jb250YWluZXItaG9va3MgdG8gYWxsb3cgc3VwcG9ydCBmb3Igc2VydmljZSBhbmQgYnVpbGQgY29udGFpbmVyIGFzIHdlbGwgYXMgY29udGFpbmVyIGFjdGlvbnMgYW5kIHN0ZXBzLlxuICByZWFkb25seSBjb250YWluZXJTdXBwb3J0OiBib29sZWFuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVTdWJuZXRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldEZpbHRlcnM/OiBEYXRhQXdzU3VibmV0c0ZpbHRlcltdIHwgSVJlc29sdmFibGVcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvcmVmZXJlbmNlL2VjMi9kZXNjcmliZS1zZWN1cml0eS1ncm91cHMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cEZpbHRlcnM/OiBEYXRhQXdzU2VjdXJpdHlHcm91cHNGaWx0ZXJbXSB8IElSZXNvbHZhYmxlXG59XG5cbmV4cG9ydCBjbGFzcyBBd3MgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXdzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBuZXcgQXdzUHJvdmlkZXIodGhpcywgJ2F3cycsIHt9KVxuXG4gICAgY29uc3QgaWRlbnRpdHkgPSBuZXcgRGF0YUF3c0NhbGxlcklkZW50aXR5KHRoaXMsICdJZGVudGl0eScsIHt9KVxuXG4gICAgY29uc3QgcmVnaW9uID0gbmV3IERhdGFBd3NSZWdpb24odGhpcywgJ1JlZ2lvbicsIHt9KVxuXG4gICAgY29uc3QgeyBwYXQsIGdpdGh1YkNvbmZpZ1VybCwgYXV0b3NjYWxlckltYWdlIH0gPSBjb21tb25WYXJpYWJsZXModGhpcylcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgRWNzQ2x1c3Rlcih0aGlzLCAnQ2x1c3RlcicsIHtcbiAgICAgIG5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdWJuZXRzID0gbmV3IERhdGFBd3NTdWJuZXRzKHRoaXMsICdTdWJuZXRzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zdWJuZXRGaWx0ZXJzLFxuICAgIH0pXG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IG5ldyBEYXRhQXdzU2VjdXJpdHlHcm91cHModGhpcywgJ1NlY3VyaXR5R3JvdXBzJywge1xuICAgICAgZmlsdGVyOiBwcm9wcy5zZWN1cml0eUdyb3VwRmlsdGVycyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXV0b3NjYWxlclJvbGUgPSBuZXcgSWFtUm9sZSh0aGlzLCAnQXV0b3NjYWxlclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBydW5uZXJSb2xlID0gbmV3IElhbVJvbGUodGhpcywgJ1J1bm5lclJvbGUnLCB7XG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgU2VydmljZTogJ2Vjcy10YXNrcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBJYW1Sb2xlKHRoaXMsICdUYXNrRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZVJvbGVQb2xpY3k6IEZuLmpzb25lbmNvZGUoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICBTZXJ2aWNlOiAnZWNzLXRhc2tzLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnVGVza0V4ZWN1dGlvblJvbGVBdHRhY2htZW50Jywge1xuICAgICAgcG9saWN5QXJuOlxuICAgICAgICAnYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5JyxcbiAgICAgIHJvbGU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHJ1bm5lckxvZ0dyb3VwID0gbmV3IENsb3Vkd2F0Y2hMb2dHcm91cCh0aGlzLCAnUnVubmVyTG9nR3JvdXAnLCB7XG4gICAgICBuYW1lOiAnL2Vjcy9HSEEnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyTG9nR3JvdXAgPSBuZXcgQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgICdBdXRvc2NhbGVyTG9nR3JvdXAnLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnL2Vjcy9BdXRvc2NhbGVyJyxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgYXV0b3NjYWxlckNvbnRhaW5lckRlZmluaXRpb246IENvbnRhaW5lckRlZmluaXRpb24gPSB7XG4gICAgICBuYW1lOiAnYXV0b3NjYWxlcicsXG4gICAgICBpbWFnZTogYXV0b3NjYWxlckltYWdlLnN0cmluZ1ZhbHVlLFxuICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQQVQnLFxuICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnR0lUSFVCX0NPTkZJR19VUkwnLFxuICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX0NMVVNURVInLFxuICAgICAgICAgIHZhbHVlOiBjbHVzdGVyLmFybixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU1VCTkVUUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzdWJuZXRzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1NFQ1VSSVRZX0dST1VQUycsXG4gICAgICAgICAgdmFsdWU6IEZuLmpvaW4oJywnLCBzZWN1cml0eUdyb3Vwcy5pZHMpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2Vjcy1ydW5uZXItc2V0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBhdXRvc2NhbGVyTG9nR3JvdXAubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1yZWdpb24nOiByZWdpb24ubmFtZSxcbiAgICAgICAgICAnYXdzbG9ncy1zdHJlYW0tcHJlZml4JzogJ2VjcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5lclZvbHVtZTogRWNzVGFza0RlZmluaXRpb25Wb2x1bWVbXSA9IFtdXG5cbiAgICBjb25zdCBydW5uZXJDb250YWluZXJEZWZpbml0aW9uOiBDb250YWluZXJEZWZpbml0aW9uID0ge1xuICAgICAgbmFtZTogJ3J1bm5lcicsXG4gICAgICBpbWFnZTogJ2doY3IuaW8vYWN0aW9ucy9hY3Rpb25zLXJ1bm5lcjoyLjMyMy4wJyxcbiAgICAgIGVzc2VudGlhbDogdHJ1ZSxcbiAgICAgIGVudHJ5UG9pbnQ6IFsnL2hvbWUvcnVubmVyL3J1bi5zaCddLFxuICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfQ0xVU1RFUl9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogY2x1c3Rlci5uYW1lLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1BPRF9OQU1FJyxcbiAgICAgICAgICB2YWx1ZTogJ2doYS1wb2QnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19TVUJORVRTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHN1Ym5ldHMuaWRzKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFQ1NfU0VDVVJJVFlfR1JPVVBTJyxcbiAgICAgICAgICB2YWx1ZTogRm4uam9pbignLCcsIHNlY3VyaXR5R3JvdXBzLmlkcyksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRUNTX1RBU0tfUk9MRScsXG4gICAgICAgICAgdmFsdWU6IHJ1bm5lclJvbGUuYXJuLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VDU19FWEVDVVRJT05fUk9MRScsXG4gICAgICAgICAgdmFsdWU6IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBtb3VudFBvaW50czogW10sXG4gICAgICBsb2dDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGxvZ0RyaXZlcjogJ2F3c2xvZ3MnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ2F3c2xvZ3MtZ3JvdXAnOiBydW5uZXJMb2dHcm91cC5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXJlZ2lvbic6IHJlZ2lvbi5uYW1lLFxuICAgICAgICAgICdhd3Nsb2dzLXN0cmVhbS1wcmVmaXgnOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclN1cHBvcnQpIHtcbiAgICAgIC8vIEVGUyB2b2x1bWUgdG8gYWxsb3cgc2hhcmluZyBkYXRhIGJldHdlZW4gdGFza3NcbiAgICAgIGNvbnN0IGVmcyA9IG5ldyBFZnNGaWxlU3lzdGVtKHRoaXMsICdlZnMnLCB7XG4gICAgICAgIHRocm91Z2hwdXRNb2RlOiAnZWxhc3RpYycsXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICBOYW1lOiAnd29yaycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBleHRlcm5hbHNFZnMgPSBuZXcgRWZzRmlsZVN5c3RlbSh0aGlzLCAnZXh0ZXJuYWxzRWZzJywge1xuICAgICAgICB0aHJvdWdocHV0TW9kZTogJ2VsYXN0aWMnLFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgTmFtZTogJ2V4dGVybmFscycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICAvLyBFYWNoIHN1Ym5ldCBpbiBWUEMgYXJlIG9uIGRpZmZlcmVudCBBWnMsIHNvIGNyZWF0aW5nIG1vdW50cG9pbnQgdG8gZWFjaFxuICAgICAgY29uc3QgaXRlcmF0b3IgPSBUZXJyYWZvcm1JdGVyYXRvci5mcm9tTGlzdChzdWJuZXRzLmlkcylcblxuICAgICAgbmV3IEVmc01vdW50VGFyZ2V0KHRoaXMsICdFZnNNb3VudFRhcmdldCcsIHtcbiAgICAgICAgZm9yRWFjaDogaXRlcmF0b3IsXG4gICAgICAgIGZpbGVTeXN0ZW1JZDogZWZzLmlkLFxuICAgICAgICBzdWJuZXRJZDogaXRlcmF0b3IudmFsdWUsXG4gICAgICB9KVxuXG4gICAgICBuZXcgRWZzTW91bnRUYXJnZXQodGhpcywgJ0V4dGVybmFsc0Vmc01vdW50VGFyZ2V0Jywge1xuICAgICAgICBmb3JFYWNoOiBpdGVyYXRvcixcbiAgICAgICAgZmlsZVN5c3RlbUlkOiBleHRlcm5hbHNFZnMuaWQsXG4gICAgICAgIHN1Ym5ldElkOiBpdGVyYXRvci52YWx1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJ1bm5lclZvbHVtZU5hbWUgPSAnd29yaydcbiAgICAgIGNvbnN0IGV4dGVybmFsc1ZvbHVtZU5hbWUgPSAnZXh0ZXJuYWxzJ1xuXG4gICAgICBydW5uZXJWb2x1bWUucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHJ1bm5lclZvbHVtZU5hbWUsXG4gICAgICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZmlsZVN5c3RlbUlkOiBlZnMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBzYW1lIHZvbHVtZSwgYXMgdm9sdW1lIGlzIGluaXRpYWxseSBlbXB0eSBzbyBpdCBjYW4ndCBtYXAgdG8gaXQncyBcImV4dGVybmFsc1wiIGRpcmVjdG9yeVxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBmaWxlU3lzdGVtSWQ6IGV4dGVybmFsc0Vmcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLm1vdW50UG9pbnRzPy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlVm9sdW1lOiBydW5uZXJWb2x1bWVOYW1lLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvdG1wL193b3JrJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZVZvbHVtZTogZXh0ZXJuYWxzVm9sdW1lTmFtZSxcbiAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3RtcC9leHRlcm5hbHMnLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBydW5uZXJDb250YWluZXJEZWZpbml0aW9uLmVudmlyb25tZW50Py5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VGU19JRCcsXG4gICAgICAgICAgdmFsdWU6IGVmcy5pZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTFNfRUZTX0lEJyxcbiAgICAgICAgICB2YWx1ZTogZXh0ZXJuYWxzRWZzLmlkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0FDVElPTlNfUlVOTkVSX1JFUVVJUkVfSk9CX0NPTlRBSU5FUicsXG4gICAgICAgICAgdmFsdWU6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uY29tbWFuZCA9IFtcbiAgICAgICAgJy9iaW4vc2gnLFxuICAgICAgICAnLWMnLFxuICAgICAgICAnZXhwb3J0IEVYRUNJRD0kKGNhdCAvcHJvYy9zeXMva2VybmVsL3JhbmRvbS91dWlkKSAmJiBzdWRvIG1rZGlyIC1wIC90bXAvX3dvcmsvJEVYRUNJRCAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9fd29yay8kRVhFQ0lEICYmIGxuIC1zIC90bXAvX3dvcmsvJEVYRUNJRCBfd29yayAmJiBzdWRvIGNob3duIHJ1bm5lcjpydW5uZXIgL3RtcC9leHRlcm5hbHMgJiYgL2hvbWUvcnVubmVyL3J1bi5zaCA7IHN1ZG8gcm0gLXIgL3RtcC9fd29yay8kRVhFQ0lEJyxcbiAgICAgIF1cbiAgICAgIHJ1bm5lckNvbnRhaW5lckRlZmluaXRpb24uaW1hZ2UgPSAnZ2hjci5pby9oaS1maS9hY3Rpb25zLXJ1bm5lcjplY3MnXG4gICAgfVxuXG4gICAgLy8gVE9ETzogSW1hZ2VzIHRocm91Z2ggY2FjaGluZzogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvdXNlcmd1aWRlL3B1bGwtdGhyb3VnaC1jYWNoZS5odG1sIChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbilcbiAgICAvLyBUT0RPOiBQYXNzIEV4ZWN1dGlvbiByb2xlIHRvIGpvYiB0YXNrOiBodHRwczovL3d3dy5lcm5lc3RjaGlhbmcuY29tL2VuL3Bvc3RzLzIwMjEvdXNpbmctYW1hem9uLWVjcy1leGVjLyMxLWdyYW50LXBlcm1pc3Npb25zLWVjcy10YXNrLWlhbS1yb2xlXG4gICAgLy8gVE9ETzogUGFzcyBUYXNrIHJvbGUgdG8gam9iIHRhc2tcbiAgICBjb25zdCBydW5uZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBFY3NUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnUnVubmVyVGFza0RlZmluaXRpb24nLFxuICAgICAge1xuICAgICAgICBmYW1pbHk6ICdHSEEnLFxuICAgICAgICB0YXNrUm9sZUFybjogcnVubmVyUm9sZS5hcm4sXG4gICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbnM6IEZuLmpzb25lbmNvZGUoW3J1bm5lckNvbnRhaW5lckRlZmluaXRpb25dKSxcbiAgICAgICAgY3B1OiAnMTAyNCcsXG4gICAgICAgIG1lbW9yeTogJzIwNDgnLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICAgIHZvbHVtZTogcnVubmVyVm9sdW1lLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbi5lbnZpcm9ubWVudD8ucHVzaCh7XG4gICAgICBuYW1lOiAnVEFTS19ERUZJTklUSU9OX0FSTicsXG4gICAgICB2YWx1ZTogcnVubmVyVGFza0RlZmluaXRpb24uYXJuLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24gPSBuZXcgRWNzVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ0F1dG9zY2FsZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICB7XG4gICAgICAgIGZhbWlseTogJ0F1dG9zY2FsZXInLFxuICAgICAgICB0YXNrUm9sZUFybjogYXV0b3NjYWxlclJvbGUuYXJuLFxuICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBGbi5qc29uZW5jb2RlKFthdXRvc2NhbGVyQ29udGFpbmVyRGVmaW5pdGlvbl0pLFxuICAgICAgICBjcHU6ICcyNTYnLFxuICAgICAgICBtZW1vcnk6ICc1MTInLFxuICAgICAgICByZXF1aXJlc0NvbXBhdGliaWxpdGllczogWydGQVJHQVRFJ10sXG4gICAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICAgIGNwdUFyY2hpdGVjdHVyZTogJ1g4Nl82NCcsXG4gICAgICAgICAgb3BlcmF0aW5nU3lzdGVtRmFtaWx5OiAnTElOVVgnLFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrTW9kZTogJ2F3c3ZwYycsXG4gICAgICB9LFxuICAgIClcblxuICAgIGNvbnN0IHJ1bm5lclBvbGljeURlZmluaXRpb24gPSB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ1N0YXJ0YW5kTW9uaXRvclRhc2snLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdlY3M6UnVuVGFzaycsXG4gICAgICAgICAgICAnZWNzOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucycsXG4gICAgICAgICAgICAnZWNzOkxpc3RUYXNrcycsXG4gICAgICAgICAgICAnZWNzOlN0b3BUYXNrJyxcbiAgICAgICAgICAgICdlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb24nLFxuICAgICAgICAgICAgJ2VjczpEZWxldGVUYXNrRGVmaW5pdGlvbnMnLFxuICAgICAgICAgICAgJ2VjczpFeGVjdXRlQ29tbWFuZCcsXG4gICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICdlY3M6RGVzY3JpYmVUYXNrcycsXG4gICAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAnbG9nczpTdGFydExpdmVUYWlsJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgYGFybjphd3M6ZWNzOiR7cmVnaW9uLm5hbWV9OiR7aWRlbnRpdHkuYWNjb3VudElkfTp0YXNrLWRlZmluaXRpb24vZ2hhLXBvZC13b3JrZmxvdzoqYCxcbiAgICAgICAgICAgIGNsdXN0ZXIuYXJuLFxuICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICBlY3NUYXNrRXhlY3V0aW9uUm9sZS5hcm4sXG4gICAgICAgICAgICBydW5uZXJSb2xlLmFybixcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAvL1RPRE86IHJlb3JkZXIgcmlnaHRzIHNvIHRoYXQgbGlzdGluZyBpcyBvbmx5IG9uZSB3aXRoIHN0YXJcbiAgICAgICAgICAgICcqJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgU2lkOiAnR2V0VnBjSW5mbycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFNpZDogJ0V4ZWNDb21tYW5kcycsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ3NzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbCcsXG4gICAgICAgICAgICAnc3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsJyxcbiAgICAgICAgICAgICdzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWwnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyUG9saWN5ID0gbmV3IElhbVBvbGljeSh0aGlzLCAnUnVubmVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHJ1bm5lclBvbGljeURlZmluaXRpb24pLFxuICAgIH0pXG5cbiAgICBuZXcgSWFtUm9sZVBvbGljeUF0dGFjaG1lbnQodGhpcywgJ1J1bm5lclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IHJ1bm5lclBvbGljeS5hcm4sXG4gICAgICByb2xlOiBydW5uZXJSb2xlLm5hbWUsXG4gICAgfSlcblxuICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3kgPSBuZXcgSWFtUG9saWN5KHRoaXMsICdBdXRvc2NhbGVyUG9saWN5Jywge1xuICAgICAgcG9saWN5OiBGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdTdGFydGFuZE1vbml0b3JUYXNrJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAnZWNzOlJ1blRhc2snLFxuICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgJ2VjczpEZXNjcmliZVRhc2tzJyxcbiAgICAgICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgYCR7cnVubmVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9ufToqYCxcbiAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVyIGhhcyB0byBiZSBhbGxvd2VkIHRvIHBhc3MgYm90aCB0YXNrIGFuZCB0YXNrIGV4ZWN1dGlvbiByb2xlXG4gICAgICAgICAgICAgIGVjc1Rhc2tFeGVjdXRpb25Sb2xlLmFybixcbiAgICAgICAgICAgICAgcnVubmVyUm9sZS5hcm4sXG4gICAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbi5uYW1lfToke2lkZW50aXR5LmFjY291bnRJZH06dGFzay8ke2NsdXN0ZXIubmFtZX0vKmAsXG4gICAgICAgICAgICAgIGAke3J1bm5lckxvZ0dyb3VwLmFybn06bG9nLXN0cmVhbToqYCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTaWQ6ICdHZXRWcGNJbmZvJyxcbiAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgIEFjdGlvbjogWydlYzI6RGVzY3JpYmVTdWJuZXRzJywgJ2VjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzJ10sXG4gICAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9KVxuICAgIG5ldyBJYW1Sb2xlUG9saWN5QXR0YWNobWVudCh0aGlzLCAnQXV0b3NjYWxlclBvbGljeUF0dGFjaG1lbnQnLCB7XG4gICAgICBwb2xpY3lBcm46IGF1dG9zY2FsZXJQb2xpY3kuYXJuLFxuICAgICAgcm9sZTogYXV0b3NjYWxlclJvbGUubmFtZSxcbiAgICB9KVxuXG4gICAgbmV3IEVjc1NlcnZpY2UodGhpcywgJ0F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogY2x1c3Rlci5hcm4sXG4gICAgICBuYW1lOiAnYXV0b3NjYWxlci1zZXJ2aWNlJyxcbiAgICAgIGRlc2lyZWRDb3VudDogMSxcbiAgICAgIGxhdW5jaFR5cGU6ICdGQVJHQVRFJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiBhdXRvc2NhbGVyVGFza0RlZmluaXRpb24uYXJuV2l0aG91dFJldmlzaW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgYXNzaWduUHVibGljSXA6IHRydWUsXG4gICAgICAgIHN1Ym5ldHM6IHN1Ym5ldHMuaWRzLFxuICAgICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHMuaWRzLFxuICAgICAgfSxcbiAgICAgIGxpZmVjeWNsZToge1xuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbJ2Rlc2lyZWRfY291bnQnXSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
|