low-cost-ecs 0.0.24 → 0.0.25
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 +32 -32
- package/API.md +25 -22
- package/examples/all-props.ts +1 -1
- package/lib/low-cost-ecs.d.ts +24 -5
- package/lib/low-cost-ecs.js +18 -21
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -3073,7 +3073,7 @@
|
|
|
3073
3073
|
},
|
|
3074
3074
|
"locationInModule": {
|
|
3075
3075
|
"filename": "src/low-cost-ecs.ts",
|
|
3076
|
-
"line":
|
|
3076
|
+
"line": 159
|
|
3077
3077
|
},
|
|
3078
3078
|
"parameters": [
|
|
3079
3079
|
{
|
|
@@ -3105,12 +3105,13 @@
|
|
|
3105
3105
|
"properties": [
|
|
3106
3106
|
{
|
|
3107
3107
|
"docs": {
|
|
3108
|
-
"stability": "experimental"
|
|
3108
|
+
"stability": "experimental",
|
|
3109
|
+
"summary": "EFS file system that the SSL/TLS certificates are installed."
|
|
3109
3110
|
},
|
|
3110
3111
|
"immutable": true,
|
|
3111
3112
|
"locationInModule": {
|
|
3112
3113
|
"filename": "src/low-cost-ecs.ts",
|
|
3113
|
-
"line":
|
|
3114
|
+
"line": 143
|
|
3114
3115
|
},
|
|
3115
3116
|
"name": "certFileSystem",
|
|
3116
3117
|
"type": {
|
|
@@ -3119,12 +3120,13 @@
|
|
|
3119
3120
|
},
|
|
3120
3121
|
{
|
|
3121
3122
|
"docs": {
|
|
3122
|
-
"stability": "experimental"
|
|
3123
|
+
"stability": "experimental",
|
|
3124
|
+
"summary": "ECS cluster created in configured VPC."
|
|
3123
3125
|
},
|
|
3124
3126
|
"immutable": true,
|
|
3125
3127
|
"locationInModule": {
|
|
3126
3128
|
"filename": "src/low-cost-ecs.ts",
|
|
3127
|
-
"line":
|
|
3129
|
+
"line": 135
|
|
3128
3130
|
},
|
|
3129
3131
|
"name": "cluster",
|
|
3130
3132
|
"type": {
|
|
@@ -3133,12 +3135,13 @@
|
|
|
3133
3135
|
},
|
|
3134
3136
|
{
|
|
3135
3137
|
"docs": {
|
|
3136
|
-
"stability": "experimental"
|
|
3138
|
+
"stability": "experimental",
|
|
3139
|
+
"summary": "ECS on EC2 service host instance autoscaling group."
|
|
3137
3140
|
},
|
|
3138
3141
|
"immutable": true,
|
|
3139
3142
|
"locationInModule": {
|
|
3140
3143
|
"filename": "src/low-cost-ecs.ts",
|
|
3141
|
-
"line":
|
|
3144
|
+
"line": 139
|
|
3142
3145
|
},
|
|
3143
3146
|
"name": "hostAutoScalingGroup",
|
|
3144
3147
|
"type": {
|
|
@@ -3147,12 +3150,13 @@
|
|
|
3147
3150
|
},
|
|
3148
3151
|
{
|
|
3149
3152
|
"docs": {
|
|
3150
|
-
"stability": "experimental"
|
|
3153
|
+
"stability": "experimental",
|
|
3154
|
+
"summary": "Server task definition generated from LowCostECSTaskDefinitionOptions."
|
|
3151
3155
|
},
|
|
3152
3156
|
"immutable": true,
|
|
3153
3157
|
"locationInModule": {
|
|
3154
3158
|
"filename": "src/low-cost-ecs.ts",
|
|
3155
|
-
"line":
|
|
3159
|
+
"line": 151
|
|
3156
3160
|
},
|
|
3157
3161
|
"name": "serverTaskDefinition",
|
|
3158
3162
|
"type": {
|
|
@@ -3161,12 +3165,16 @@
|
|
|
3161
3165
|
},
|
|
3162
3166
|
{
|
|
3163
3167
|
"docs": {
|
|
3164
|
-
"
|
|
3168
|
+
"custom": {
|
|
3169
|
+
"link": "https://github.com/rajyan/low-cost-ecs#limitations"
|
|
3170
|
+
},
|
|
3171
|
+
"stability": "experimental",
|
|
3172
|
+
"summary": "ECS service of the server with desiredCount: 1, minHealthyPercent: 0, maxHealthyPercent: 100."
|
|
3165
3173
|
},
|
|
3166
3174
|
"immutable": true,
|
|
3167
3175
|
"locationInModule": {
|
|
3168
3176
|
"filename": "src/low-cost-ecs.ts",
|
|
3169
|
-
"line":
|
|
3177
|
+
"line": 157
|
|
3170
3178
|
},
|
|
3171
3179
|
"name": "service",
|
|
3172
3180
|
"type": {
|
|
@@ -3175,31 +3183,18 @@
|
|
|
3175
3183
|
},
|
|
3176
3184
|
{
|
|
3177
3185
|
"docs": {
|
|
3178
|
-
"stability": "experimental"
|
|
3186
|
+
"stability": "experimental",
|
|
3187
|
+
"summary": "SNS topic used to notify certbot renewal failure."
|
|
3179
3188
|
},
|
|
3180
3189
|
"immutable": true,
|
|
3181
3190
|
"locationInModule": {
|
|
3182
3191
|
"filename": "src/low-cost-ecs.ts",
|
|
3183
|
-
"line":
|
|
3192
|
+
"line": 147
|
|
3184
3193
|
},
|
|
3185
3194
|
"name": "topic",
|
|
3186
3195
|
"type": {
|
|
3187
3196
|
"fqn": "aws-cdk-lib.aws_sns.Topic"
|
|
3188
3197
|
}
|
|
3189
|
-
},
|
|
3190
|
-
{
|
|
3191
|
-
"docs": {
|
|
3192
|
-
"stability": "experimental"
|
|
3193
|
-
},
|
|
3194
|
-
"immutable": true,
|
|
3195
|
-
"locationInModule": {
|
|
3196
|
-
"filename": "src/low-cost-ecs.ts",
|
|
3197
|
-
"line": 132
|
|
3198
|
-
},
|
|
3199
|
-
"name": "vpc",
|
|
3200
|
-
"type": {
|
|
3201
|
-
"fqn": "aws-cdk-lib.aws_ec2.IVpc"
|
|
3202
|
-
}
|
|
3203
3198
|
}
|
|
3204
3199
|
],
|
|
3205
3200
|
"symbolId": "src/low-cost-ecs:LowCostECS"
|
|
@@ -3440,10 +3435,15 @@
|
|
|
3440
3435
|
"filename": "src/low-cost-ecs.ts",
|
|
3441
3436
|
"line": 54
|
|
3442
3437
|
},
|
|
3443
|
-
"name": "
|
|
3438
|
+
"name": "securityGroups",
|
|
3444
3439
|
"optional": true,
|
|
3445
3440
|
"type": {
|
|
3446
|
-
"
|
|
3441
|
+
"collection": {
|
|
3442
|
+
"elementtype": {
|
|
3443
|
+
"fqn": "aws-cdk-lib.aws_ec2.ISecurityGroup"
|
|
3444
|
+
},
|
|
3445
|
+
"kind": "array"
|
|
3446
|
+
}
|
|
3447
3447
|
}
|
|
3448
3448
|
},
|
|
3449
3449
|
{
|
|
@@ -3470,7 +3470,7 @@
|
|
|
3470
3470
|
"docs": {
|
|
3471
3471
|
"default": "- Creates vpc with only public subnets and no NAT gateways.",
|
|
3472
3472
|
"stability": "experimental",
|
|
3473
|
-
"summary": "
|
|
3473
|
+
"summary": "VPC of the ECS cluster and EFS file system."
|
|
3474
3474
|
},
|
|
3475
3475
|
"immutable": true,
|
|
3476
3476
|
"locationInModule": {
|
|
@@ -3561,6 +3561,6 @@
|
|
|
3561
3561
|
"symbolId": "src/low-cost-ecs:LowCostECSTaskDefinitionOptions"
|
|
3562
3562
|
}
|
|
3563
3563
|
},
|
|
3564
|
-
"version": "0.0.
|
|
3565
|
-
"fingerprint": "
|
|
3564
|
+
"version": "0.0.25",
|
|
3565
|
+
"fingerprint": "0lvw2vYzDRgz185s9gv6MkV+NwlVMGWnzDMk5tiZ9Q0="
|
|
3566
3566
|
}
|
package/API.md
CHANGED
|
@@ -85,13 +85,12 @@ Any object.
|
|
|
85
85
|
| **Name** | **Type** | **Description** |
|
|
86
86
|
| --- | --- | --- |
|
|
87
87
|
| <code><a href="#low-cost-ecs.LowCostECS.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
|
|
88
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.certFileSystem">certFileSystem</a></code> | <code>aws-cdk-lib.aws_efs.FileSystem</code> |
|
|
89
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.cluster">cluster</a></code> | <code>aws-cdk-lib.aws_ecs.Cluster</code> |
|
|
90
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.hostAutoScalingGroup">hostAutoScalingGroup</a></code> | <code>aws-cdk-lib.aws_autoscaling.AutoScalingGroup</code> |
|
|
91
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.serverTaskDefinition">serverTaskDefinition</a></code> | <code>aws-cdk-lib.aws_ecs.Ec2TaskDefinition</code> |
|
|
92
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.service">service</a></code> | <code>aws-cdk-lib.aws_ecs.Ec2Service</code> |
|
|
93
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.topic">topic</a></code> | <code>aws-cdk-lib.aws_sns.Topic</code> |
|
|
94
|
-
| <code><a href="#low-cost-ecs.LowCostECS.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | *No description.* |
|
|
88
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.certFileSystem">certFileSystem</a></code> | <code>aws-cdk-lib.aws_efs.FileSystem</code> | EFS file system that the SSL/TLS certificates are installed. |
|
|
89
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.cluster">cluster</a></code> | <code>aws-cdk-lib.aws_ecs.Cluster</code> | ECS cluster created in configured VPC. |
|
|
90
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.hostAutoScalingGroup">hostAutoScalingGroup</a></code> | <code>aws-cdk-lib.aws_autoscaling.AutoScalingGroup</code> | ECS on EC2 service host instance autoscaling group. |
|
|
91
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.serverTaskDefinition">serverTaskDefinition</a></code> | <code>aws-cdk-lib.aws_ecs.Ec2TaskDefinition</code> | Server task definition generated from LowCostECSTaskDefinitionOptions. |
|
|
92
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.service">service</a></code> | <code>aws-cdk-lib.aws_ecs.Ec2Service</code> | ECS service of the server with desiredCount: 1, minHealthyPercent: 0, maxHealthyPercent: 100. |
|
|
93
|
+
| <code><a href="#low-cost-ecs.LowCostECS.property.topic">topic</a></code> | <code>aws-cdk-lib.aws_sns.Topic</code> | SNS topic used to notify certbot renewal failure. |
|
|
95
94
|
|
|
96
95
|
---
|
|
97
96
|
|
|
@@ -115,6 +114,8 @@ public readonly certFileSystem: FileSystem;
|
|
|
115
114
|
|
|
116
115
|
- *Type:* aws-cdk-lib.aws_efs.FileSystem
|
|
117
116
|
|
|
117
|
+
EFS file system that the SSL/TLS certificates are installed.
|
|
118
|
+
|
|
118
119
|
---
|
|
119
120
|
|
|
120
121
|
##### `cluster`<sup>Required</sup> <a name="cluster" id="low-cost-ecs.LowCostECS.property.cluster"></a>
|
|
@@ -125,6 +126,8 @@ public readonly cluster: Cluster;
|
|
|
125
126
|
|
|
126
127
|
- *Type:* aws-cdk-lib.aws_ecs.Cluster
|
|
127
128
|
|
|
129
|
+
ECS cluster created in configured VPC.
|
|
130
|
+
|
|
128
131
|
---
|
|
129
132
|
|
|
130
133
|
##### `hostAutoScalingGroup`<sup>Required</sup> <a name="hostAutoScalingGroup" id="low-cost-ecs.LowCostECS.property.hostAutoScalingGroup"></a>
|
|
@@ -135,6 +138,8 @@ public readonly hostAutoScalingGroup: AutoScalingGroup;
|
|
|
135
138
|
|
|
136
139
|
- *Type:* aws-cdk-lib.aws_autoscaling.AutoScalingGroup
|
|
137
140
|
|
|
141
|
+
ECS on EC2 service host instance autoscaling group.
|
|
142
|
+
|
|
138
143
|
---
|
|
139
144
|
|
|
140
145
|
##### `serverTaskDefinition`<sup>Required</sup> <a name="serverTaskDefinition" id="low-cost-ecs.LowCostECS.property.serverTaskDefinition"></a>
|
|
@@ -145,6 +150,8 @@ public readonly serverTaskDefinition: Ec2TaskDefinition;
|
|
|
145
150
|
|
|
146
151
|
- *Type:* aws-cdk-lib.aws_ecs.Ec2TaskDefinition
|
|
147
152
|
|
|
153
|
+
Server task definition generated from LowCostECSTaskDefinitionOptions.
|
|
154
|
+
|
|
148
155
|
---
|
|
149
156
|
|
|
150
157
|
##### `service`<sup>Required</sup> <a name="service" id="low-cost-ecs.LowCostECS.property.service"></a>
|
|
@@ -155,6 +162,10 @@ public readonly service: Ec2Service;
|
|
|
155
162
|
|
|
156
163
|
- *Type:* aws-cdk-lib.aws_ecs.Ec2Service
|
|
157
164
|
|
|
165
|
+
ECS service of the server with desiredCount: 1, minHealthyPercent: 0, maxHealthyPercent: 100.
|
|
166
|
+
|
|
167
|
+
> [https://github.com/rajyan/low-cost-ecs#limitations](https://github.com/rajyan/low-cost-ecs#limitations)
|
|
168
|
+
|
|
158
169
|
---
|
|
159
170
|
|
|
160
171
|
##### `topic`<sup>Required</sup> <a name="topic" id="low-cost-ecs.LowCostECS.property.topic"></a>
|
|
@@ -165,15 +176,7 @@ public readonly topic: Topic;
|
|
|
165
176
|
|
|
166
177
|
- *Type:* aws-cdk-lib.aws_sns.Topic
|
|
167
178
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
##### `vpc`<sup>Required</sup> <a name="vpc" id="low-cost-ecs.LowCostECS.property.vpc"></a>
|
|
171
|
-
|
|
172
|
-
```typescript
|
|
173
|
-
public readonly vpc: IVpc;
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
- *Type:* aws-cdk-lib.aws_ec2.IVpc
|
|
179
|
+
SNS topic used to notify certbot renewal failure.
|
|
177
180
|
|
|
178
181
|
---
|
|
179
182
|
|
|
@@ -205,9 +208,9 @@ const lowCostECSProps: LowCostECSProps = { ... }
|
|
|
205
208
|
| <code><a href="#low-cost-ecs.LowCostECSProps.property.logGroup">logGroup</a></code> | <code>aws-cdk-lib.aws_logs.ILogGroup</code> | Log group of the certbot task and the aws-cli task. |
|
|
206
209
|
| <code><a href="#low-cost-ecs.LowCostECSProps.property.recordDomainNames">recordDomainNames</a></code> | <code>string[]</code> | Domain names for A records to elastic ip of ECS host instance. |
|
|
207
210
|
| <code><a href="#low-cost-ecs.LowCostECSProps.property.removalPolicy">removalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | Removal policy for the file system and log group (if using default). |
|
|
208
|
-
| <code><a href="#low-cost-ecs.LowCostECSProps.property.
|
|
211
|
+
| <code><a href="#low-cost-ecs.LowCostECSProps.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | Security group of the ECS host instance. |
|
|
209
212
|
| <code><a href="#low-cost-ecs.LowCostECSProps.property.serverTaskDefinition">serverTaskDefinition</a></code> | <code><a href="#low-cost-ecs.LowCostECSTaskDefinitionOptions">LowCostECSTaskDefinitionOptions</a></code> | Task definition for the server ecs task. |
|
|
210
|
-
| <code><a href="#low-cost-ecs.LowCostECSProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> |
|
|
213
|
+
| <code><a href="#low-cost-ecs.LowCostECSProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | VPC of the ECS cluster and EFS file system. |
|
|
211
214
|
|
|
212
215
|
---
|
|
213
216
|
|
|
@@ -362,13 +365,13 @@ Removal policy for the file system and log group (if using default).
|
|
|
362
365
|
|
|
363
366
|
---
|
|
364
367
|
|
|
365
|
-
##### `
|
|
368
|
+
##### `securityGroups`<sup>Optional</sup> <a name="securityGroups" id="low-cost-ecs.LowCostECSProps.property.securityGroups"></a>
|
|
366
369
|
|
|
367
370
|
```typescript
|
|
368
|
-
public readonly
|
|
371
|
+
public readonly securityGroups: ISecurityGroup[];
|
|
369
372
|
```
|
|
370
373
|
|
|
371
|
-
- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup
|
|
374
|
+
- *Type:* aws-cdk-lib.aws_ec2.ISecurityGroup[]
|
|
372
375
|
- *Default:* Creates security group with allowAllOutbound and ingress rule (ipv4, ipv6) => (tcp 80, 443).
|
|
373
376
|
|
|
374
377
|
Security group of the ECS host instance.
|
|
@@ -399,7 +402,7 @@ public readonly vpc: IVpc;
|
|
|
399
402
|
- *Type:* aws-cdk-lib.aws_ec2.IVpc
|
|
400
403
|
- *Default:* Creates vpc with only public subnets and no NAT gateways.
|
|
401
404
|
|
|
402
|
-
|
|
405
|
+
VPC of the ECS cluster and EFS file system.
|
|
403
406
|
|
|
404
407
|
---
|
|
405
408
|
|
package/examples/all-props.ts
CHANGED
|
@@ -28,7 +28,7 @@ export const allProps = new LowCostECS(stack, 'LowCostECS', {
|
|
|
28
28
|
),
|
|
29
29
|
recordDomainNames: ['test1.rajyan.net', 'test2.rajyan.net'],
|
|
30
30
|
removalPolicy: RemovalPolicy.RETAIN,
|
|
31
|
-
|
|
31
|
+
securityGroups: [SecurityGroup.fromSecurityGroupId(stack, 'SecurityGroup', 'test-sg-id')],
|
|
32
32
|
serverTaskDefinition: {
|
|
33
33
|
containers: [
|
|
34
34
|
{
|
package/lib/low-cost-ecs.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface LowCostECSProps {
|
|
|
29
29
|
*/
|
|
30
30
|
readonly recordDomainNames?: string[];
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* VPC of the ECS cluster and EFS file system.
|
|
33
33
|
*
|
|
34
34
|
* @default - Creates vpc with only public subnets and no NAT gateways.
|
|
35
35
|
*/
|
|
@@ -39,7 +39,7 @@ export interface LowCostECSProps {
|
|
|
39
39
|
*
|
|
40
40
|
* @default - Creates security group with allowAllOutbound and ingress rule (ipv4, ipv6) => (tcp 80, 443).
|
|
41
41
|
*/
|
|
42
|
-
readonly
|
|
42
|
+
readonly securityGroups?: ec2.ISecurityGroup[];
|
|
43
43
|
/**
|
|
44
44
|
* Instance type of the ECS host instance.
|
|
45
45
|
*
|
|
@@ -81,7 +81,7 @@ export interface LowCostECSProps {
|
|
|
81
81
|
*/
|
|
82
82
|
readonly awsCliDockerTag?: string;
|
|
83
83
|
/**
|
|
84
|
-
* Enable container insights or not
|
|
84
|
+
* Enable container insights or not.
|
|
85
85
|
*
|
|
86
86
|
* @default - undefined (container insights disabled)
|
|
87
87
|
*/
|
|
@@ -106,12 +106,31 @@ export interface LowCostECSTaskDefinitionOptions {
|
|
|
106
106
|
readonly volumes?: ecs.Volume[];
|
|
107
107
|
}
|
|
108
108
|
export declare class LowCostECS extends Construct {
|
|
109
|
-
|
|
109
|
+
/**
|
|
110
|
+
* ECS cluster created in configured VPC.
|
|
111
|
+
*/
|
|
112
|
+
readonly cluster: ecs.Cluster;
|
|
113
|
+
/**
|
|
114
|
+
* ECS on EC2 service host instance autoscaling group.
|
|
115
|
+
*/
|
|
110
116
|
readonly hostAutoScalingGroup: AutoScalingGroup;
|
|
117
|
+
/**
|
|
118
|
+
* EFS file system that the SSL/TLS certificates are installed.
|
|
119
|
+
*/
|
|
111
120
|
readonly certFileSystem: FileSystem;
|
|
121
|
+
/**
|
|
122
|
+
* SNS topic used to notify certbot renewal failure.
|
|
123
|
+
*/
|
|
112
124
|
readonly topic: Topic;
|
|
113
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Server task definition generated from LowCostECSTaskDefinitionOptions.
|
|
127
|
+
*/
|
|
114
128
|
readonly serverTaskDefinition: ecs.Ec2TaskDefinition;
|
|
129
|
+
/**
|
|
130
|
+
* ECS service of the server with desiredCount: 1, minHealthyPercent: 0, maxHealthyPercent: 100.
|
|
131
|
+
*
|
|
132
|
+
* @link https://github.com/rajyan/low-cost-ecs#limitations
|
|
133
|
+
*/
|
|
115
134
|
readonly service: ecs.Ec2Service;
|
|
116
135
|
constructor(scope: Construct, id: string, props: LowCostECSProps);
|
|
117
136
|
private createTaskDefinition;
|
package/lib/low-cost-ecs.js
CHANGED
|
@@ -20,19 +20,18 @@ const constructs_1 = require("constructs");
|
|
|
20
20
|
class LowCostECS extends constructs_1.Construct {
|
|
21
21
|
constructor(scope, id, props) {
|
|
22
22
|
super(scope, id);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
});
|
|
23
|
+
const vpc = props.vpc ??
|
|
24
|
+
new ec2.Vpc(scope, 'Vpc', {
|
|
25
|
+
natGateways: 0,
|
|
26
|
+
subnetConfiguration: [
|
|
27
|
+
{
|
|
28
|
+
name: 'PublicSubnet',
|
|
29
|
+
subnetType: ec2.SubnetType.PUBLIC,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
});
|
|
34
33
|
this.cluster = new ecs.Cluster(scope, 'Cluster', {
|
|
35
|
-
vpc:
|
|
34
|
+
vpc: vpc,
|
|
36
35
|
containerInsights: props.containerInsights,
|
|
37
36
|
});
|
|
38
37
|
this.hostAutoScalingGroup = this.cluster.addCapacity('HostInstanceCapacity', {
|
|
@@ -46,9 +45,9 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
46
45
|
minCapacity: 1,
|
|
47
46
|
maxCapacity: 1,
|
|
48
47
|
});
|
|
49
|
-
if (props.
|
|
48
|
+
if (props.securityGroups) {
|
|
50
49
|
this.hostAutoScalingGroup.node.tryRemoveChild('InstanceSecurityGroup');
|
|
51
|
-
this.hostAutoScalingGroup.addSecurityGroup(
|
|
50
|
+
props.securityGroups.forEach((sg) => this.hostAutoScalingGroup.addSecurityGroup(sg));
|
|
52
51
|
}
|
|
53
52
|
else {
|
|
54
53
|
this.hostAutoScalingGroup.connections.allowFromAnyIpv4(ec2.Port.tcp(80));
|
|
@@ -74,10 +73,10 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
74
73
|
const awsCliTag = props.awsCliDockerTag ?? 'latest';
|
|
75
74
|
this.hostAutoScalingGroup.addUserData('INSTANCE_ID=$(curl --silent http://169.254.169.254/latest/meta-data/instance-id)', `ALLOCATION_ID=$(docker run --net=host amazon/aws-cli:${awsCliTag} ec2 describe-addresses --region ${this.hostAutoScalingGroup.env.region} --filter Name=tag:Name,Values=${tagUniqueId} --query 'Addresses[].AllocationId' --output text | head)`, `docker run --net=host amazon/aws-cli:${awsCliTag} ec2 associate-address --region ${this.hostAutoScalingGroup.env.region} --instance-id "$INSTANCE_ID" --allocation-id "$ALLOCATION_ID" --allow-reassociation`);
|
|
76
75
|
this.certFileSystem = new aws_efs_1.FileSystem(this, 'FileSystem', {
|
|
77
|
-
vpc
|
|
76
|
+
vpc,
|
|
78
77
|
encrypted: true,
|
|
79
78
|
securityGroup: new ec2.SecurityGroup(this, 'FileSystemSecurityGroup', {
|
|
80
|
-
vpc:
|
|
79
|
+
vpc: vpc,
|
|
81
80
|
allowAllOutbound: false,
|
|
82
81
|
}),
|
|
83
82
|
removalPolicy: props.removalPolicy ?? lib.RemovalPolicy.DESTROY,
|
|
@@ -244,9 +243,7 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
244
243
|
enableExecuteCommand: true,
|
|
245
244
|
});
|
|
246
245
|
new lib.CfnOutput(this, 'PublicIpAddress', { value: hostInstanceIp.ref });
|
|
247
|
-
new lib.CfnOutput(this, '
|
|
248
|
-
value: certbotStateMachine.stateMachineName,
|
|
249
|
-
});
|
|
246
|
+
new lib.CfnOutput(this, 'StateMachineName', { value: certbotStateMachine.stateMachineName });
|
|
250
247
|
new lib.CfnOutput(this, 'ClusterName', { value: this.cluster.clusterName });
|
|
251
248
|
new lib.CfnOutput(this, 'ServiceName', { value: this.service.serviceName });
|
|
252
249
|
}
|
|
@@ -293,5 +290,5 @@ class LowCostECS extends constructs_1.Construct {
|
|
|
293
290
|
}
|
|
294
291
|
exports.LowCostECS = LowCostECS;
|
|
295
292
|
_a = JSII_RTTI_SYMBOL_1;
|
|
296
|
-
LowCostECS[_a] = { fqn: "low-cost-ecs.LowCostECS", version: "0.0.
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93LWNvc3QtZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvdy1jb3N0LWVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsdURBQXdEO0FBQ3hELHVFQUFpRTtBQUNqRSxpREFBNkU7QUFDN0UsbURBQTBFO0FBQzFFLG1EQUFtRDtBQUNuRCxpREFBZ0Y7QUFDaEYscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSwyQ0FBdUM7QUFvSHZDLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBU3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRztZQUNOLEtBQUssQ0FBQyxHQUFHO2dCQUNULElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO29CQUN4QixXQUFXLEVBQUUsQ0FBQztvQkFDZCxtQkFBbUIsRUFBRTt3QkFDbkI7NEJBQ0UsSUFBSSxFQUFFLGNBQWM7NEJBQ3BCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07eUJBQ2xDO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDL0MsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7WUFDM0UsWUFBWSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZ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Q0FBQyxPQUFPLENBQUM7d0JBQzlCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixZQUFZLEVBQUUsUUFBUTtxQkFDdkIsQ0FBQztvQkFDRixZQUFZLEVBQUU7d0JBQ1o7NEJBQ0UsUUFBUSxFQUFFLEVBQUU7NEJBQ1osYUFBYSxFQUFFLEVBQUU7NEJBQ2pCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUc7eUJBQzNCO3dCQUNEOzRCQUNFLFFBQVEsRUFBRSxHQUFHOzRCQUNiLGFBQWEsRUFBRSxHQUFHOzRCQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHO3lCQUMzQjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBcFZILGdDQXFWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBsaWIgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZyc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBGaWxlU3lzdGVtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVmcyc7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgU2ZuU3RhdGVNYWNoaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IEVmZmVjdCwgTWFuYWdlZFBvbGljeSwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAsIExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YnNjcmlwdGlvblByb3RvY29sLCBUb3BpYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHNmbl90YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb3dDb3N0RUNTUHJvcHMge1xuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIGhvc3RlZCB6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZURvbWFpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWFpbCBmb3IgZXhwaXJhdGlvbiBlbWFpbHMgdG8gcmVnaXN0ZXIgdG8geW91ciBsZXQncyBlbmNyeXB0IGFjY291bnQuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3MvZXhwaXJhdGlvbi1lbWFpbHMvXG4gICAqXG4gICAqIEFsc28gcmVnaXN0ZXJlZCBhcyBhIHN1YnNjcmliZXIgb2YgdGhlIHNucyB0b3BpYywgbm90aWZpZWQgb24gY2VydGJvdCB0YXNrIGZhaWx1cmUuXG4gICAqIFN1YnNjcmlwdGlvbiBjb25maXJtYXRpb24gZW1haWwgd291bGQgYmUgc2VudCBvbiBzdGFjayBjcmVhdGlvbi5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWVtYWlsLW5vdGlmaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWw6IHN0cmluZztcblxuICAvKipcbiAgICogRG9tYWluIG5hbWVzIGZvciBBIHJlY29yZHMgdG8gZWxhc3RpYyBpcCBvZiBFQ1MgaG9zdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbIHByb3BzLmhvc3RlZFpvbmUuem9uZU5hbWUgXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkRG9tYWluTmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVnBjIG9mIHRoZSBFQ1MgaG9zdCBpbnN0YW5jZSBhbmQgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIHZwYyB3aXRoIG9ubHkgcHVibGljIHN1Ym5ldHMgYW5kIG5vIE5BVCBnYXRld2F5cy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBvZiB0aGUgRUNTIGhvc3QgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHdpdGggYWxsb3dBbGxPdXRib3VuZCBhbmQgaW5ncmVzcyBydWxlIChpcHY0LCBpcHY2KSA9PiAodGNwIDgwLCA0NDMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IGVjMi5JU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogSW5zdGFuY2UgdHlwZSBvZiB0aGUgRUNTIGhvc3QgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdDIubWljcm9cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RJbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGhvdXJseSBwcmljZSAoaW4gVVNEKSB0byBiZSBwYWlkIGZvciBhbnkgU3BvdCBJbnN0YW5jZSBsYXVuY2hlZCB0byBmdWxmaWxsIHRoZSByZXF1ZXN0LlxuICAgKiBIb3N0IGluc3RhbmNlIGFzZyB3b3VsZCB1c2Ugc3BvdCBpbnN0YW5jZXMgaWYgaG9zdEluc3RhbmNlU3BvdFByaWNlIGlzIHNldC5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWNzLkFkZENhcGFjaXR5T3B0aW9ucy5odG1sI3Nwb3RwcmljZVxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdEluc3RhbmNlU3BvdFByaWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2cgZ3JvdXAgb2YgdGhlIGNlcnRib3QgdGFzayBhbmQgdGhlIGF3cy1jbGkgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDcmVhdGVzIGRlZmF1bHQgY2RrIGxvZyBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA/OiBJTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIERvY2tlciBpbWFnZSB0YWcgb2YgY2VydGJvdC9kbnMtcm91dGU1MyB0byBjcmVhdGUgY2VydGlmaWNhdGVzLlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvY2VydGJvdC9kbnMtcm91dGU1My90YWdzXG4gICAqIEBkZWZhdWx0IC0gdjEuMjkuMFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGJvdERvY2tlclRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogQ2VydGJvdCB0YXNrIHNjaGVkdWxlIGludGVydmFsIGluIGRheXMgdG8gcmVuZXcgdGhlIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDYwXG4gICAqL1xuICByZWFkb25seSBjZXJ0Ym90U2NoZWR1bGVJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogRG9ja2VyIGltYWdlIHRhZyBvZiBhbWF6b24vYXdzLWNsaS5cbiAgICogVGhpcyBpbWFnZSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBlbGFzdGljIGlwIG9uIGhvc3QgaW5zdGFuY2Ugc3RhcnR1cCwgYW5kIHJ1biBjZXJ0Ym90IGNmbiBvbiBlY3MgY29udGFpbmVyIHN0YXJ0dXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbGF0ZXN0XG4gICAqL1xuICByZWFkb25seSBhd3NDbGlEb2NrZXJUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBjb250YWluZXIgaW5zaWdodHMgb3Igbm90XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChjb250YWluZXIgaW5zaWdodHMgZGlzYWJsZWQpXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJJbnNpZ2h0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgZmlsZSBzeXN0ZW0gYW5kIGxvZyBncm91cCAoaWYgdXNpbmcgZGVmYXVsdCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogbGliLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRhc2sgZGVmaW5pdGlvbiBmb3IgdGhlIHNlcnZlciBlY3MgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOZ2lueCBzZXJ2ZXIgdGFzayBkZWZpbml0aW9uIGRlZmluZWQgaW4gc2FtcGxlVGFza0RlZmluaXRpb24oKVxuICAgKiBAc2VlIHNhbXBsZVRhc2tEZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJUYXNrRGVmaW5pdGlvbj86IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uPzogZWNzLkVjMlRhc2tEZWZpbml0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IGNvbnRhaW5lcnM6IGVjcy5Db250YWluZXJEZWZpbml0aW9uT3B0aW9uc1tdO1xuICByZWFkb25seSB2b2x1bWVzPzogZWNzLlZvbHVtZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgTG93Q29zdEVDUyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IGhvc3RBdXRvU2NhbGluZ0dyb3VwOiBBdXRvU2NhbGluZ0dyb3VwO1xuICByZWFkb25seSBjZXJ0RmlsZVN5c3RlbTogRmlsZVN5c3RlbTtcbiAgcmVhZG9ubHkgdG9waWM6IFRvcGljO1xuICByZWFkb25seSBjbHVzdGVyOiBlY3MuQ2x1c3RlcjtcbiAgcmVhZG9ubHkgc2VydmVyVGFza0RlZmluaXRpb246IGVjcy5FYzJUYXNrRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgc2VydmljZTogZWNzLkVjMlNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExvd0Nvc3RFQ1NQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9XG4gICAgICBwcm9wcy52cGMgPz9cbiAgICAgIG5ldyBlYzIuVnBjKHNjb3BlLCAnVnBjJywge1xuICAgICAgICBuYXRHYXRld2F5czogMCxcbiAgICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdQdWJsaWNTdWJuZXQnLFxuICAgICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgIHRoaXMuY2x1c3RlciA9IG5ldyBlY3MuQ2x1c3RlcihzY29wZSwgJ0NsdXN0ZXInLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHByb3BzLmNvbnRhaW5lckluc2lnaHRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cCA9IHRoaXMuY2x1c3Rlci5hZGRDYXBhY2l0eSgnSG9zdEluc3RhbmNlQ2FwYWNpdHknLCB7XG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjcy5FY3NPcHRpbWl6ZWRJbWFnZS5hbWF6b25MaW51eDIoZWNzLkFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRCwge1xuICAgICAgICBjYWNoZWRJbkNvbnRleHQ6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IGVjMi5JbnN0YW5jZVR5cGUocHJvcHMuaG9zdEluc3RhbmNlVHlwZSA/PyAndDIubWljcm8nKSxcbiAgICAgIHNwb3RQcmljZTogcHJvcHMuaG9zdEluc3RhbmNlU3BvdFByaWNlLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSxcbiAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczogdHJ1ZSxcbiAgICAgIG1pbkNhcGFjaXR5OiAxLFxuICAgICAgbWF4Q2FwYWNpdHk6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5ub2RlLnRyeVJlbW92ZUNoaWxkKCdJbnN0YW5jZVNlY3VyaXR5R3JvdXAnKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuYWRkU2VjdXJpdHlHcm91cChwcm9wcy5zZWN1cml0eUdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb21BbnlJcHY0KGVjMi5Qb3J0LnRjcCg4MCkpO1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb21BbnlJcHY0KGVjMi5Qb3J0LnRjcCg0NDMpKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tKGVjMi5QZWVyLmFueUlwdjYoKSwgZWMyLlBvcnQudGNwKDgwKSk7XG4gICAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShlYzIuUGVlci5hbnlJcHY2KCksIGVjMi5Qb3J0LnRjcCg0NDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc3NoIHRocm91Z2ggc3NtIG1hbmFnZXJcbiAgICAgKi9cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLnJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlJylcbiAgICApO1xuICAgIC8qKlxuICAgICAqIEFkZCBwb2xpY3kgdG8gYXNzb2NpYXRlIGVsYXN0aWMgaXAgb24gc3RhcnR1cFxuICAgICAqL1xuICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVBZGRyZXNzZXMnLCAnZWMyOkFzc29jaWF0ZUFkZHJlc3MnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhvc3RJbnN0YW5jZUlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgJ0hvc3RJbnN0YW5jZUlwJyk7XG4gICAgY29uc3QgdGFnVW5pcXVlSWQgPSBsaWIuTmFtZXMudW5pcXVlSWQoaG9zdEluc3RhbmNlSXApO1xuICAgIGhvc3RJbnN0YW5jZUlwLnRhZ3Muc2V0VGFnKCdOYW1lJywgdGFnVW5pcXVlSWQpO1xuXG4gICAgY29uc3QgYXdzQ2xpVGFnID0gcHJvcHMuYXdzQ2xpRG9ja2VyVGFnID8/ICdsYXRlc3QnO1xuICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuYWRkVXNlckRhdGEoXG4gICAgICAnSU5TVEFOQ0VfSUQ9JChjdXJsIC0tc2lsZW50IGh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQvbGF0ZXN0L21ldGEtZGF0YS9pbnN0YW5jZS1pZCknLFxuICAgICAgYEFMTE9DQVRJT05fSUQ9JChkb2NrZXIgcnVuIC0tbmV0PWhvc3QgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9IGVjMiBkZXNjcmliZS1hZGRyZXNzZXMgLS1yZWdpb24gJHt0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmVudi5yZWdpb259IC0tZmlsdGVyIE5hbWU9dGFnOk5hbWUsVmFsdWVzPSR7dGFnVW5pcXVlSWR9IC0tcXVlcnkgJ0FkZHJlc3Nlc1tdLkFsbG9jYXRpb25JZCcgLS1vdXRwdXQgdGV4dCB8IGhlYWQpYCxcbiAgICAgIGBkb2NrZXIgcnVuIC0tbmV0PWhvc3QgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9IGVjMiBhc3NvY2lhdGUtYWRkcmVzcyAtLXJlZ2lvbiAke3RoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuZW52LnJlZ2lvbn0gLS1pbnN0YW5jZS1pZCBcIiRJTlNUQU5DRV9JRFwiIC0tYWxsb2NhdGlvbi1pZCBcIiRBTExPQ0FUSU9OX0lEXCIgLS1hbGxvdy1yZWFzc29jaWF0aW9uYFxuICAgICk7XG5cbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtID0gbmV3IEZpbGVTeXN0ZW0odGhpcywgJ0ZpbGVTeXN0ZW0nLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cDogbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdGaWxlU3lzdGVtU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gbGliLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRUbyh0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwKTtcbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXApO1xuXG4gICAgLyoqXG4gICAgICogQVJlY29yZCB0byBFbGFzdGljIGlwXG4gICAgICovXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tTG9va3VwKHRoaXMsICdIb3N0ZWRab25lJywge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuaG9zdGVkWm9uZURvbWFpbixcbiAgICB9KTtcbiAgICBjb25zdCByZWNvcmRzID0gcHJvcHMucmVjb3JkRG9tYWluTmFtZXMgPz8gW2hvc3RlZFpvbmUuem9uZU5hbWVdO1xuICAgIHJlY29yZHMuZm9yRWFjaChcbiAgICAgIChyZWNvcmQpID0+XG4gICAgICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgYEFSZWNvcmQke3JlY29yZH1gLCB7XG4gICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICByZWNvcmROYW1lOiByZWNvcmQsXG4gICAgICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tSXBBZGRyZXNzZXMoaG9zdEluc3RhbmNlSXAucmVmKSxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQ2VydGJvdCBUYXNrIERlZmluaXRpb25cbiAgICAgKiBNb3VudHMgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIHRvIEVGU1xuICAgICAqL1xuICAgIGNvbnN0IGxvZ0dyb3VwID1cbiAgICAgIHByb3BzLmxvZ0dyb3VwID8/XG4gICAgICBuZXcgTG9nR3JvdXAodGhpcywgJ0xvZ0dyb3VwJywge1xuICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGxpYi5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGNlcnRib3RUYXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRWMyVGFza0RlZmluaXRpb24odGhpcywgJ0NlcnRib3RUYXNrRGVmaW5pdGlvbicpO1xuICAgIGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRUb1Rhc2tSb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6TGlzdEhvc3RlZFpvbmVzJywgJ3JvdXRlNTM6R2V0Q2hhbmdlJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KVxuICAgICk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbaG9zdGVkWm9uZS5ob3N0ZWRab25lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNlcnRib3RUYWcgPSBwcm9wcy5jZXJ0Ym90RG9ja2VyVGFnID8/ICd2MS4yOS4wJztcbiAgICBjb25zdCBjZXJ0Ym90Q29udGFpbmVyID0gY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcignQ2VydGJvdENvbnRhaW5lcicsIHtcbiAgICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KGBjZXJ0Ym90L2Rucy1yb3V0ZTUzOiR7Y2VydGJvdFRhZ31gKSxcbiAgICAgIGNvbnRhaW5lck5hbWU6ICdjZXJ0Ym90JyxcbiAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiA2NCxcbiAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgJ2NlcnRvbmx5JyxcbiAgICAgICAgJy0tdmVyYm9zZScsXG4gICAgICAgICctLXByZWZlcnJlZC1jaGFsbGVuZ2VzPWRucy0wMScsXG4gICAgICAgICctLWRucy1yb3V0ZTUzJyxcbiAgICAgICAgJy0tZG5zLXJvdXRlNTMtcHJvcGFnYXRpb24tc2Vjb25kcz0zMDAnLFxuICAgICAgICAnLS1ub24taW50ZXJhY3RpdmUnLFxuICAgICAgICAnLS1hZ3JlZS10b3MnLFxuICAgICAgICAnLS1leHBhbmQnLFxuICAgICAgICAnLW0nLFxuICAgICAgICBwcm9wcy5lbWFpbCxcbiAgICAgICAgJy0tY2VydC1uYW1lJyxcbiAgICAgICAgcmVjb3Jkc1swXSxcbiAgICAgICAgLi4ucmVjb3Jkcy5mbGF0TWFwKChkb21haW4pID0+IFsnLWQnLCBkb21haW5dKSxcbiAgICAgIF0sXG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICBsb2dHcm91cCxcbiAgICAgICAgc3RyZWFtUHJlZml4OiBjZXJ0Ym90VGFnLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNlcnRGaWxlU3lzdGVtLmdyYW50KGNlcnRib3RUYXNrRGVmaW5pdGlvbi50YXNrUm9sZSwgJ2VsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFdyaXRlJyk7XG4gICAgY2VydGJvdFRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICBuYW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGZpbGVTeXN0ZW1JZDogdGhpcy5jZXJ0RmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNlcnRib3RDb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBjb250YWluZXJQYXRoOiAnL2V0Yy9sZXRzZW5jcnlwdCcsXG4gICAgICByZWFkT25seTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZSBDZXJ0Ym90IGNlcnRpZmljYXRlIGNyZWF0ZS9yZW5ldyBvbiBTdGVwIEZ1bmN0aW9uc1xuICAgICAqIFNlbmRzIGVtYWlsIG5vdGlmaWNhdGlvbiBvbiBjZXJ0Ym90IGZhaWx1cmVcbiAgICAgKi9cbiAgICB0aGlzLnRvcGljID0gbmV3IFRvcGljKHRoaXMsICdUb3BpYycpO1xuICAgIG5ldyBTdWJzY3JpcHRpb24odGhpcywgJ0VtYWlsU3Vic2NyaXB0aW9uJywge1xuICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICBwcm90b2NvbDogU3Vic2NyaXB0aW9uUHJvdG9jb2wuRU1BSUwsXG4gICAgICBlbmRwb2ludDogcHJvcHMuZW1haWwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0Ym90UnVuVGFzayA9IG5ldyBzZm5fdGFza3MuRWNzUnVuVGFzayh0aGlzLCAnQ3JlYXRlQ2VydGlmaWNhdGUnLCB7XG4gICAgICBjbHVzdGVyOiB0aGlzLmNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogY2VydGJvdFRhc2tEZWZpbml0aW9uLFxuICAgICAgbGF1bmNoVGFyZ2V0OiBuZXcgc2ZuX3Rhc2tzLkVjc0VjMkxhdW5jaFRhcmdldCgpLFxuICAgICAgaW50ZWdyYXRpb25QYXR0ZXJuOiBzZm4uSW50ZWdyYXRpb25QYXR0ZXJuLlJVTl9KT0IsXG4gICAgfSk7XG4gICAgY2VydGJvdFJ1blRhc2suYWRkQ2F0Y2goXG4gICAgICBuZXcgc2ZuX3Rhc2tzLlNuc1B1Ymxpc2godGhpcywgJ1NlbmRFbWFpbE9uRmFpbHVyZScsIHtcbiAgICAgICAgdG9waWM6IHRoaXMudG9waWMsXG4gICAgICAgIG1lc3NhZ2U6IHNmbi5UYXNrSW5wdXQuZnJvbUpzb25QYXRoQXQoJyQnKSxcbiAgICAgIH0pLm5leHQobmV3IHNmbi5GYWlsKHRoaXMsICdGYWlsJykpXG4gICAgKTtcbiAgICBjZXJ0Ym90UnVuVGFzay5hZGRSZXRyeSh7XG4gICAgICBpbnRlcnZhbDogbGliLkR1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgIH0pO1xuICAgIGNvbnN0IGNlcnRib3RTdGF0ZU1hY2hpbmUgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZSh0aGlzLCAnU3RhdGVNYWNoaW5lJywge1xuICAgICAgZGVmaW5pdGlvbjogY2VydGJvdFJ1blRhc2ssXG4gICAgfSk7XG5cbiAgICBuZXcgUnVsZSh0aGlzLCAnQ2VydGJvdFNjaGVkdWxlUnVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5yYXRlKGxpYi5EdXJhdGlvbi5kYXlzKHByb3BzLmNlcnRib3RTY2hlZHVsZUludGVydmFsID8/IDYwKSksXG4gICAgICB0YXJnZXRzOiBbbmV3IFNmblN0YXRlTWFjaGluZShjZXJ0Ym90U3RhdGVNYWNoaW5lKV0sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2ZXIgRUNTIHRhc2tcbiAgICAgKi9cbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uID0gdGhpcy5jcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICAgIHByb3BzLnNlcnZlclRhc2tEZWZpbml0aW9uID8/IHRoaXMuc2FtcGxlVGFza0RlZmluaXRpb24ocmVjb3JkcywgbG9nR3JvdXApXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdkZWZhdWx0Q29udGFpbmVyIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXJUYXNrRGVmaW5pdGlvbi4gQWRkIGF0IGxlYXN0IG9uZSBlc3NlbnRpYWwgY29udGFpbmVyLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5ncmFudCh0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLnRhc2tSb2xlLCAnZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnQnKTtcbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICBuYW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBlZnNWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGZpbGVTeXN0ZW1JZDogdGhpcy5jZXJ0RmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lci5hZGRNb3VudFBvaW50cyh7XG4gICAgICBzb3VyY2VWb2x1bWU6ICdjZXJ0Vm9sdW1lJyxcbiAgICAgIGNvbnRhaW5lclBhdGg6ICcvZXRjL2xldHNlbmNyeXB0JyxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQVdTIGNsaSBjb250YWluZXIgdG8gZXhlY3V0ZSBjZXJ0Ym90IHNmbiBiZWZvcmUgdGhlIGRlZmF1bHQgY29udGFpbmVyIHN0YXJ0dXAuXG4gICAgICovXG4gICAgdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyLmFkZENvbnRhaW5lckRlcGVuZGVuY2llcyh7XG4gICAgICBjb250YWluZXI6IHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdBV1NDbGlDb250YWluZXInLCB7XG4gICAgICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KGBhbWF6b24vYXdzLWNsaToke2F3c0NsaVRhZ31gKSxcbiAgICAgICAgY29udGFpbmVyTmFtZTogJ2F3cy1jbGknLFxuICAgICAgICBtZW1vcnlSZXNlcnZhdGlvbk1pQjogNjQsXG4gICAgICAgIGVudHJ5UG9pbnQ6IFsnL2Jpbi9iYXNoJywgJy1jJ10sXG4gICAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgICBgc2V0IC1ldXhcbiAgICAgICAgICBhd3MgY29uZmlndXJlIHNldCByZWdpb24gJHtjZXJ0Ym90U3RhdGVNYWNoaW5lLmVudi5yZWdpb259ICYmIFxcXFxcbiAgICAgICAgICBhd3MgY29uZmlndXJlIHNldCBvdXRwdXQgdGV4dCAmJiBcXFxcXG4gICAgICAgICAgRVhFQ1VUSU9OX0FSTj0kKGF3cyBzdGVwZnVuY3Rpb25zIHN0YXJ0LWV4ZWN1dGlvbiAtLXN0YXRlLW1hY2hpbmUtYXJuICR7Y2VydGJvdFN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm59IC0tcXVlcnkgZXhlY3V0aW9uQXJuKSAmJiBcXFxcXG4gICAgICAgICAgdW50aWwgWyAkKGF3cyBzdGVwZnVuY3Rpb25zIGRlc2NyaWJlLWV4ZWN1dGlvbiAtLWV4ZWN1dGlvbi1hcm4gXCIkRVhFQ1VUSU9OX0FSTlwiIC0tcXVlcnkgc3RhdHVzKSAhPSBSVU5OSU5HIF07XG4gICAgICAgICAgZG9cbiAgICAgICAgICAgIGVjaG8gXCJXYWl0aW5nIGZvciAkRVhFQ1VUSU9OX0FSTlwiXG4gICAgICAgICAgICBzbGVlcCAxMFxuICAgICAgICAgIGRvbmVgLFxuICAgICAgICBdLFxuICAgICAgICBlc3NlbnRpYWw6IGZhbHNlLFxuICAgICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cCxcbiAgICAgICAgICBzdHJlYW1QcmVmaXg6IGF3c0NsaVRhZyxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uQ09NUExFVEUsXG4gICAgfSk7XG4gICAgY2VydGJvdFN0YXRlTWFjaGluZS5ncmFudEV4ZWN1dGlvbihcbiAgICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24udGFza1JvbGUsXG4gICAgICAnc3RhdGVzOkRlc2NyaWJlRXhlY3V0aW9uJ1xuICAgICk7XG4gICAgY2VydGJvdFN0YXRlTWFjaGluZS5ncmFudFN0YXJ0RXhlY3V0aW9uKHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24udGFza1JvbGUpO1xuXG4gICAgdGhpcy5zZXJ2aWNlID0gbmV3IGVjcy5FYzJTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogdGhpcy5jbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24sXG4gICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICBtaW5IZWFsdGh5UGVyY2VudDogMCxcbiAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAxMDAsXG4gICAgICBjaXJjdWl0QnJlYWtlcjoge1xuICAgICAgICByb2xsYmFjazogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBlbmFibGVFeGVjdXRlQ29tbWFuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIG5ldyBsaWIuQ2ZuT3V0cHV0KHRoaXMsICdQdWJsaWNJcEFkZHJlc3MnLCB7IHZhbHVlOiBob3N0SW5zdGFuY2VJcC5yZWYgfSk7XG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ0NlcnRib3RTdGF0ZU1hY2hpbmVOYW1lJywge1xuICAgICAgdmFsdWU6IGNlcnRib3RTdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lTmFtZSxcbiAgICB9KTtcbiAgICBuZXcgbGliLkNmbk91dHB1dCh0aGlzLCAnQ2x1c3Rlck5hbWUnLCB7IHZhbHVlOiB0aGlzLmNsdXN0ZXIuY2x1c3Rlck5hbWUgfSk7XG4gICAgbmV3IGxpYi5DZm5PdXRwdXQodGhpcywgJ1NlcnZpY2VOYW1lJywgeyB2YWx1ZTogdGhpcy5zZXJ2aWNlLnNlcnZpY2VOYW1lIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYXNrRGVmaW5pdGlvbihcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnM6IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnNcbiAgKTogZWNzLkVjMlRhc2tEZWZpbml0aW9uIHtcbiAgICBjb25zdCBzZXJ2ZXJUYXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRWMyVGFza0RlZmluaXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgJ1NlcnZlclRhc2tEZWZpbml0aW9uJyxcbiAgICAgIHRhc2tEZWZpbml0aW9uT3B0aW9ucy50YXNrRGVmaW5pdGlvblxuICAgICk7XG4gICAgdGFza0RlZmluaXRpb25PcHRpb25zLmNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyRGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIHNlcnZlclRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvbi5jb250YWluZXJOYW1lID8/IGBjb250YWluZXIke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lckRlZmluaXRpb25cbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGFza0RlZmluaXRpb25PcHRpb25zLnZvbHVtZXM/LmZvckVhY2goKHZvbHVtZSkgPT4gc2VydmVyVGFza0RlZmluaXRpb24uYWRkVm9sdW1lKHZvbHVtZSkpO1xuICAgIHJldHVybiBzZXJ2ZXJUYXNrRGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2FtcGxlVGFza0RlZmluaXRpb24oXG4gICAgcmVjb3Jkczogc3RyaW5nW10sXG4gICAgbG9nR3JvdXA6IElMb2dHcm91cFxuICApOiBMb3dDb3N0RUNTVGFza0RlZmluaXRpb25PcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbmVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2V4YW1wbGVzL2NvbnRhaW5lcnMvbmdpbngnKSksXG4gICAgICAgICAgY29udGFpbmVyTmFtZTogJ25naW54JyxcbiAgICAgICAgICBtZW1vcnlSZXNlcnZhdGlvbk1pQjogNjQsXG4gICAgICAgICAgZXNzZW50aWFsOiB0cnVlLFxuICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICBTRVJWRVJfTkFNRTogcmVjb3Jkcy5qb2luKCcgJyksXG4gICAgICAgICAgICBDRVJUX05BTUU6IHJlY29yZHNbMF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cCxcbiAgICAgICAgICAgIHN0cmVhbVByZWZpeDogJ3NhbXBsZScsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcG9ydE1hcHBpbmdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhvc3RQb3J0OiA4MCxcbiAgICAgICAgICAgICAgY29udGFpbmVyUG9ydDogODAsXG4gICAgICAgICAgICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaG9zdFBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgY29udGFpbmVyUG9ydDogNDQzLFxuICAgICAgICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
293
|
+
LowCostECS[_a] = { fqn: "low-cost-ecs.LowCostECS", version: "0.0.25" };
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93LWNvc3QtZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvdy1jb3N0LWVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsdURBQXdEO0FBQ3hELHVFQUFpRTtBQUNqRSxpREFBNkU7QUFDN0UsbURBQTBFO0FBQzFFLG1EQUFtRDtBQUNuRCxpREFBZ0Y7QUFDaEYscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSwyQ0FBdUM7QUFvSHZDLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBNEJ2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUc7WUFDVCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDeEIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsbUJBQW1CLEVBQUU7b0JBQ25CO3dCQUNFLElBQUksRUFBRSxjQUFjO3dCQUNwQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNO3FCQUNsQztpQkFDRjthQUNGLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDL0MsR0FBRyxFQUFFLEdBQUc7WUFDUixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtZQUMzRSxZQUFZLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMs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QVUsQ0FBQyxPQUFPLENBQUM7d0JBQzlCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixZQUFZLEVBQUUsUUFBUTtxQkFDdkIsQ0FBQztvQkFDRixZQUFZLEVBQUU7d0JBQ1o7NEJBQ0UsUUFBUSxFQUFFLEVBQUU7NEJBQ1osYUFBYSxFQUFFLEVBQUU7NEJBQ2pCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUc7eUJBQzNCO3dCQUNEOzRCQUNFLFFBQVEsRUFBRSxHQUFHOzRCQUNiLGFBQWEsRUFBRSxHQUFHOzRCQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHO3lCQUMzQjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBcldILGdDQXNXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBsaWIgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZyc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBGaWxlU3lzdGVtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVmcyc7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgU2ZuU3RhdGVNYWNoaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IEVmZmVjdCwgTWFuYWdlZFBvbGljeSwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAsIExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YnNjcmlwdGlvblByb3RvY29sLCBUb3BpYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHNmbl90YXNrcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb3dDb3N0RUNTUHJvcHMge1xuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIGhvc3RlZCB6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZURvbWFpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWFpbCBmb3IgZXhwaXJhdGlvbiBlbWFpbHMgdG8gcmVnaXN0ZXIgdG8geW91ciBsZXQncyBlbmNyeXB0IGFjY291bnQuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL2RvY3MvZXhwaXJhdGlvbi1lbWFpbHMvXG4gICAqXG4gICAqIEFsc28gcmVnaXN0ZXJlZCBhcyBhIHN1YnNjcmliZXIgb2YgdGhlIHNucyB0b3BpYywgbm90aWZpZWQgb24gY2VydGJvdCB0YXNrIGZhaWx1cmUuXG4gICAqIFN1YnNjcmlwdGlvbiBjb25maXJtYXRpb24gZW1haWwgd291bGQgYmUgc2VudCBvbiBzdGFjayBjcmVhdGlvbi5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWVtYWlsLW5vdGlmaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWw6IHN0cmluZztcblxuICAvKipcbiAgICogRG9tYWluIG5hbWVzIGZvciBBIHJlY29yZHMgdG8gZWxhc3RpYyBpcCBvZiBFQ1MgaG9zdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbIHByb3BzLmhvc3RlZFpvbmUuem9uZU5hbWUgXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkRG9tYWluTmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVlBDIG9mIHRoZSBFQ1MgY2x1c3RlciBhbmQgRUZTIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENyZWF0ZXMgdnBjIHdpdGggb25seSBwdWJsaWMgc3VibmV0cyBhbmQgbm8gTkFUIGdhdGV3YXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwIG9mIHRoZSBFQ1MgaG9zdCBpbnN0YW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENyZWF0ZXMgc2VjdXJpdHkgZ3JvdXAgd2l0aCBhbGxvd0FsbE91dGJvdW5kIGFuZCBpbmdyZXNzIHJ1bGUgKGlwdjQsIGlwdjYpID0+ICh0Y3AgODAsIDQ0MykuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSB0eXBlIG9mIHRoZSBFQ1MgaG9zdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0Mi5taWNyb1xuICAgKi9cbiAgcmVhZG9ubHkgaG9zdEluc3RhbmNlVHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gaG91cmx5IHByaWNlIChpbiBVU0QpIHRvIGJlIHBhaWQgZm9yIGFueSBTcG90IEluc3RhbmNlIGxhdW5jaGVkIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuXG4gICAqIEhvc3QgaW5zdGFuY2UgYXNnIHdvdWxkIHVzZSBzcG90IGluc3RhbmNlcyBpZiBob3N0SW5zdGFuY2VTcG90UHJpY2UgaXMgc2V0LlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lY3MuQWRkQ2FwYWNpdHlPcHRpb25zLmh0bWwjc3BvdHByaWNlXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBob3N0SW5zdGFuY2VTcG90UHJpY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvZyBncm91cCBvZiB0aGUgY2VydGJvdCB0YXNrIGFuZCB0aGUgYXdzLWNsaSB0YXNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENyZWF0ZXMgZGVmYXVsdCBjZGsgbG9nIGdyb3VwXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IElMb2dHcm91cDtcblxuICAvKipcbiAgICogRG9ja2VyIGltYWdlIHRhZyBvZiBjZXJ0Ym90L2Rucy1yb3V0ZTUzIHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZXMuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vaHViLmRvY2tlci5jb20vci9jZXJ0Ym90L2Rucy1yb3V0ZTUzL3RhZ3NcbiAgICogQGRlZmF1bHQgLSB2MS4yOS4wXG4gICAqL1xuICByZWFkb25seSBjZXJ0Ym90RG9ja2VyVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDZXJ0Ym90IHRhc2sgc2NoZWR1bGUgaW50ZXJ2YWwgaW4gZGF5cyB0byByZW5ldyB0aGUgY2VydGlmaWNhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gNjBcbiAgICovXG4gIHJlYWRvbmx5IGNlcnRib3RTY2hlZHVsZUludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgdGFnIG9mIGFtYXpvbi9hd3MtY2xpLlxuICAgKiBUaGlzIGltYWdlIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGVsYXN0aWMgaXAgb24gaG9zdCBpbnN0YW5jZSBzdGFydHVwLCBhbmQgcnVuIGNlcnRib3QgY2ZuIG9uIGVjcyBjb250YWluZXIgc3RhcnR1cC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBsYXRlc3RcbiAgICovXG4gIHJlYWRvbmx5IGF3c0NsaURvY2tlclRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIGNvbnRhaW5lciBpbnNpZ2h0cyBvciBub3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIChjb250YWluZXIgaW5zaWdodHMgZGlzYWJsZWQpXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJJbnNpZ2h0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgZmlsZSBzeXN0ZW0gYW5kIGxvZyBncm91cCAoaWYgdXNpbmcgZGVmYXVsdCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogbGliLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRhc2sgZGVmaW5pdGlvbiBmb3IgdGhlIHNlcnZlciBlY3MgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOZ2lueCBzZXJ2ZXIgdGFzayBkZWZpbml0aW9uIGRlZmluZWQgaW4gc2FtcGxlVGFza0RlZmluaXRpb24oKVxuICAgKiBAc2VlIHNhbXBsZVRhc2tEZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJUYXNrRGVmaW5pdGlvbj86IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uPzogZWNzLkVjMlRhc2tEZWZpbml0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IGNvbnRhaW5lcnM6IGVjcy5Db250YWluZXJEZWZpbml0aW9uT3B0aW9uc1tdO1xuICByZWFkb25seSB2b2x1bWVzPzogZWNzLlZvbHVtZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgTG93Q29zdEVDUyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBFQ1MgY2x1c3RlciBjcmVhdGVkIGluIGNvbmZpZ3VyZWQgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlcjogZWNzLkNsdXN0ZXI7XG4gIC8qKlxuICAgKiBFQ1Mgb24gRUMyIHNlcnZpY2UgaG9zdCBpbnN0YW5jZSBhdXRvc2NhbGluZyBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RBdXRvU2NhbGluZ0dyb3VwOiBBdXRvU2NhbGluZ0dyb3VwO1xuICAvKipcbiAgICogRUZTIGZpbGUgc3lzdGVtIHRoYXQgdGhlIFNTTC9UTFMgY2VydGlmaWNhdGVzIGFyZSBpbnN0YWxsZWQuXG4gICAqL1xuICByZWFkb25seSBjZXJ0RmlsZVN5c3RlbTogRmlsZVN5c3RlbTtcbiAgLyoqXG4gICAqIFNOUyB0b3BpYyB1c2VkIHRvIG5vdGlmeSBjZXJ0Ym90IHJlbmV3YWwgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHRvcGljOiBUb3BpYztcbiAgLyoqXG4gICAqIFNlcnZlciB0YXNrIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlclRhc2tEZWZpbml0aW9uOiBlY3MuRWMyVGFza0RlZmluaXRpb247XG4gIC8qKlxuICAgKiBFQ1Mgc2VydmljZSBvZiB0aGUgc2VydmVyIHdpdGggZGVzaXJlZENvdW50OiAxLCBtaW5IZWFsdGh5UGVyY2VudDogMCwgbWF4SGVhbHRoeVBlcmNlbnQ6IDEwMC5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3Jhanlhbi9sb3ctY29zdC1lY3MjbGltaXRhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2U6IGVjcy5FYzJTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMb3dDb3N0RUNTUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgdnBjID1cbiAgICAgIHByb3BzLnZwYyA/P1xuICAgICAgbmV3IGVjMi5WcGMoc2NvcGUsICdWcGMnLCB7XG4gICAgICAgIG5hdEdhdGV3YXlzOiAwLFxuICAgICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1B1YmxpY1N1Ym5ldCcsXG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jbHVzdGVyID0gbmV3IGVjcy5DbHVzdGVyKHNjb3BlLCAnQ2x1c3RlcicsIHtcbiAgICAgIHZwYzogdnBjLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHByb3BzLmNvbnRhaW5lckluc2lnaHRzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cCA9IHRoaXMuY2x1c3Rlci5hZGRDYXBhY2l0eSgnSG9zdEluc3RhbmNlQ2FwYWNpdHknLCB7XG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjcy5FY3NPcHRpbWl6ZWRJbWFnZS5hbWF6b25MaW51eDIoZWNzLkFtaUhhcmR3YXJlVHlwZS5TVEFOREFSRCwge1xuICAgICAgICBjYWNoZWRJbkNvbnRleHQ6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IGVjMi5JbnN0YW5jZVR5cGUocHJvcHMuaG9zdEluc3RhbmNlVHlwZSA/PyAndDIubWljcm8nKSxcbiAgICAgIHNwb3RQcmljZTogcHJvcHMuaG9zdEluc3RhbmNlU3BvdFByaWNlLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSxcbiAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczogdHJ1ZSxcbiAgICAgIG1pbkNhcGFjaXR5OiAxLFxuICAgICAgbWF4Q2FwYWNpdHk6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAubm9kZS50cnlSZW1vdmVDaGlsZCgnSW5zdGFuY2VTZWN1cml0eUdyb3VwJyk7XG4gICAgICBwcm9wcy5zZWN1cml0eUdyb3Vwcy5mb3JFYWNoKChzZykgPT4gdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5hZGRTZWN1cml0eUdyb3VwKHNnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tQW55SXB2NChlYzIuUG9ydC50Y3AoODApKTtcbiAgICAgIHRoaXMuaG9zdEF1dG9TY2FsaW5nR3JvdXAuY29ubmVjdGlvbnMuYWxsb3dGcm9tQW55SXB2NChlYzIuUG9ydC50Y3AoNDQzKSk7XG4gICAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShlYzIuUGVlci5hbnlJcHY2KCksIGVjMi5Qb3J0LnRjcCg4MCkpO1xuICAgICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5jb25uZWN0aW9ucy5hbGxvd0Zyb20oZWMyLlBlZXIuYW55SXB2NigpLCBlYzIuUG9ydC50Y3AoNDQzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IHNzaCB0aHJvdWdoIHNzbSBtYW5hZ2VyXG4gICAgICovXG4gICAgdGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5yb2xlLmFkZE1hbmFnZWRQb2xpY3koXG4gICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZScpXG4gICAgKTtcbiAgICAvKipcbiAgICAgKiBBZGQgcG9saWN5IHRvIGFzc29jaWF0ZSBlbGFzdGljIGlwIG9uIHN0YXJ0dXBcbiAgICAgKi9cbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlc2NyaWJlQWRkcmVzc2VzJywgJ2VjMjpBc3NvY2lhdGVBZGRyZXNzJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBob3N0SW5zdGFuY2VJcCA9IG5ldyBlYzIuQ2ZuRUlQKHRoaXMsICdIb3N0SW5zdGFuY2VJcCcpO1xuICAgIGNvbnN0IHRhZ1VuaXF1ZUlkID0gbGliLk5hbWVzLnVuaXF1ZUlkKGhvc3RJbnN0YW5jZUlwKTtcbiAgICBob3N0SW5zdGFuY2VJcC50YWdzLnNldFRhZygnTmFtZScsIHRhZ1VuaXF1ZUlkKTtcblxuICAgIGNvbnN0IGF3c0NsaVRhZyA9IHByb3BzLmF3c0NsaURvY2tlclRhZyA/PyAnbGF0ZXN0JztcbiAgICB0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmFkZFVzZXJEYXRhKFxuICAgICAgJ0lOU1RBTkNFX0lEPSQoY3VybCAtLXNpbGVudCBodHRwOi8vMTY5LjI1NC4xNjkuMjU0L2xhdGVzdC9tZXRhLWRhdGEvaW5zdGFuY2UtaWQpJyxcbiAgICAgIGBBTExPQ0FUSU9OX0lEPSQoZG9ja2VyIHJ1biAtLW5ldD1ob3N0IGFtYXpvbi9hd3MtY2xpOiR7YXdzQ2xpVGFnfSBlYzIgZGVzY3JpYmUtYWRkcmVzc2VzIC0tcmVnaW9uICR7dGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cC5lbnYucmVnaW9ufSAtLWZpbHRlciBOYW1lPXRhZzpOYW1lLFZhbHVlcz0ke3RhZ1VuaXF1ZUlkfSAtLXF1ZXJ5ICdBZGRyZXNzZXNbXS5BbGxvY2F0aW9uSWQnIC0tb3V0cHV0IHRleHQgfCBoZWFkKWAsXG4gICAgICBgZG9ja2VyIHJ1biAtLW5ldD1ob3N0IGFtYXpvbi9hd3MtY2xpOiR7YXdzQ2xpVGFnfSBlYzIgYXNzb2NpYXRlLWFkZHJlc3MgLS1yZWdpb24gJHt0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwLmVudi5yZWdpb259IC0taW5zdGFuY2UtaWQgXCIkSU5TVEFOQ0VfSURcIiAtLWFsbG9jYXRpb24taWQgXCIkQUxMT0NBVElPTl9JRFwiIC0tYWxsb3ctcmVhc3NvY2lhdGlvbmBcbiAgICApO1xuXG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbSA9IG5ldyBGaWxlU3lzdGVtKHRoaXMsICdGaWxlU3lzdGVtJywge1xuICAgICAgdnBjLFxuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cDogbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdGaWxlU3lzdGVtU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxuICAgICAgfSksXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGxpYi5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0VG8odGhpcy5ob3N0QXV0b1NjYWxpbmdHcm91cCk7XG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbSh0aGlzLmhvc3RBdXRvU2NhbGluZ0dyb3VwKTtcblxuICAgIC8qKlxuICAgICAqIEFSZWNvcmQgdG8gRWxhc3RpYyBpcFxuICAgICAqL1xuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUxvb2t1cCh0aGlzLCAnSG9zdGVkWm9uZScsIHtcbiAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmhvc3RlZFpvbmVEb21haW4sXG4gICAgfSk7XG4gICAgY29uc3QgcmVjb3JkcyA9IHByb3BzLnJlY29yZERvbWFpbk5hbWVzID8/IFtob3N0ZWRab25lLnpvbmVOYW1lXTtcbiAgICByZWNvcmRzLmZvckVhY2goXG4gICAgICAocmVjb3JkKSA9PlxuICAgICAgICBuZXcgcm91dGU1My5BUmVjb3JkKHRoaXMsIGBBUmVjb3JkJHtyZWNvcmR9YCwge1xuICAgICAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICAgICAgcmVjb3JkTmFtZTogcmVjb3JkLFxuICAgICAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUlwQWRkcmVzc2VzKGhvc3RJbnN0YW5jZUlwLnJlZiksXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIENlcnRib3QgVGFzayBEZWZpbml0aW9uXG4gICAgICogTW91bnRzIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB0byBFRlNcbiAgICAgKi9cbiAgICBjb25zdCBsb2dHcm91cCA9XG4gICAgICBwcm9wcy5sb2dHcm91cCA/P1xuICAgICAgbmV3IExvZ0dyb3VwKHRoaXMsICdMb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19ZRUFSUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBsaWIuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBjZXJ0Ym90VGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkVjMlRhc2tEZWZpbml0aW9uKHRoaXMsICdDZXJ0Ym90VGFza0RlZmluaXRpb24nKTtcbiAgICBjZXJ0Ym90VGFza0RlZmluaXRpb24uYWRkVG9UYXNrUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydyb3V0ZTUzOkxpc3RIb3N0ZWRab25lcycsICdyb3V0ZTUzOkdldENoYW5nZSddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSlcbiAgICApO1xuICAgIGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRUb1Rhc2tSb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzJ10sXG4gICAgICAgIHJlc291cmNlczogW2hvc3RlZFpvbmUuaG9zdGVkWm9uZUFybl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBjZXJ0Ym90VGFnID0gcHJvcHMuY2VydGJvdERvY2tlclRhZyA/PyAndjEuMjkuMCc7XG4gICAgY29uc3QgY2VydGJvdENvbnRhaW5lciA9IGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ0NlcnRib3RDb250YWluZXInLCB7XG4gICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShgY2VydGJvdC9kbnMtcm91dGU1Mzoke2NlcnRib3RUYWd9YCksXG4gICAgICBjb250YWluZXJOYW1lOiAnY2VydGJvdCcsXG4gICAgICBtZW1vcnlSZXNlcnZhdGlvbk1pQjogNjQsXG4gICAgICBjb21tYW5kOiBbXG4gICAgICAgICdjZXJ0b25seScsXG4gICAgICAgICctLXZlcmJvc2UnLFxuICAgICAgICAnLS1wcmVmZXJyZWQtY2hhbGxlbmdlcz1kbnMtMDEnLFxuICAgICAgICAnLS1kbnMtcm91dGU1MycsXG4gICAgICAgICctLWRucy1yb3V0ZTUzLXByb3BhZ2F0aW9uLXNlY29uZHM9MzAwJyxcbiAgICAgICAgJy0tbm9uLWludGVyYWN0aXZlJyxcbiAgICAgICAgJy0tYWdyZWUtdG9zJyxcbiAgICAgICAgJy0tZXhwYW5kJyxcbiAgICAgICAgJy1tJyxcbiAgICAgICAgcHJvcHMuZW1haWwsXG4gICAgICAgICctLWNlcnQtbmFtZScsXG4gICAgICAgIHJlY29yZHNbMF0sXG4gICAgICAgIC4uLnJlY29yZHMuZmxhdE1hcCgoZG9tYWluKSA9PiBbJy1kJywgZG9tYWluXSksXG4gICAgICBdLFxuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgbG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogY2VydGJvdFRhZyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZXJ0RmlsZVN5c3RlbS5ncmFudChjZXJ0Ym90VGFza0RlZmluaXRpb24udGFza1JvbGUsICdlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRXcml0ZScpO1xuICAgIGNlcnRib3RUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUoe1xuICAgICAgbmFtZTogJ2NlcnRWb2x1bWUnLFxuICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBmaWxlU3lzdGVtSWQ6IHRoaXMuY2VydEZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjZXJ0Ym90Q29udGFpbmVyLmFkZE1vdW50UG9pbnRzKHtcbiAgICAgIHNvdXJjZVZvbHVtZTogJ2NlcnRWb2x1bWUnLFxuICAgICAgY29udGFpbmVyUGF0aDogJy9ldGMvbGV0c2VuY3J5cHQnLFxuICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU2NoZWR1bGUgQ2VydGJvdCBjZXJ0aWZpY2F0ZSBjcmVhdGUvcmVuZXcgb24gU3RlcCBGdW5jdGlvbnNcbiAgICAgKiBTZW5kcyBlbWFpbCBub3RpZmljYXRpb24gb24gY2VydGJvdCBmYWlsdXJlXG4gICAgICovXG4gICAgdGhpcy50b3BpYyA9IG5ldyBUb3BpYyh0aGlzLCAnVG9waWMnKTtcbiAgICBuZXcgU3Vic2NyaXB0aW9uKHRoaXMsICdFbWFpbFN1YnNjcmlwdGlvbicsIHtcbiAgICAgIHRvcGljOiB0aGlzLnRvcGljLFxuICAgICAgcHJvdG9jb2w6IFN1YnNjcmlwdGlvblByb3RvY29sLkVNQUlMLFxuICAgICAgZW5kcG9pbnQ6IHByb3BzLmVtYWlsLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY2VydGJvdFJ1blRhc2sgPSBuZXcgc2ZuX3Rhc2tzLkVjc1J1blRhc2sodGhpcywgJ0NyZWF0ZUNlcnRpZmljYXRlJywge1xuICAgICAgY2x1c3RlcjogdGhpcy5jbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IGNlcnRib3RUYXNrRGVmaW5pdGlvbixcbiAgICAgIGxhdW5jaFRhcmdldDogbmV3IHNmbl90YXNrcy5FY3NFYzJMYXVuY2hUYXJnZXQoKSxcbiAgICAgIGludGVncmF0aW9uUGF0dGVybjogc2ZuLkludGVncmF0aW9uUGF0dGVybi5SVU5fSk9CLFxuICAgIH0pO1xuICAgIGNlcnRib3RSdW5UYXNrLmFkZENhdGNoKFxuICAgICAgbmV3IHNmbl90YXNrcy5TbnNQdWJsaXNoKHRoaXMsICdTZW5kRW1haWxPbkZhaWx1cmUnLCB7XG4gICAgICAgIHRvcGljOiB0aGlzLnRvcGljLFxuICAgICAgICBtZXNzYWdlOiBzZm4uVGFza0lucHV0LmZyb21Kc29uUGF0aEF0KCckJyksXG4gICAgICB9KS5uZXh0KG5ldyBzZm4uRmFpbCh0aGlzLCAnRmFpbCcpKVxuICAgICk7XG4gICAgY2VydGJvdFJ1blRhc2suYWRkUmV0cnkoe1xuICAgICAgaW50ZXJ2YWw6IGxpYi5EdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICB9KTtcbiAgICBjb25zdCBjZXJ0Ym90U3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIGRlZmluaXRpb246IGNlcnRib3RSdW5UYXNrLFxuICAgIH0pO1xuXG4gICAgbmV3IFJ1bGUodGhpcywgJ0NlcnRib3RTY2hlZHVsZVJ1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShsaWIuRHVyYXRpb24uZGF5cyhwcm9wcy5jZXJ0Ym90U2NoZWR1bGVJbnRlcnZhbCA/PyA2MCkpLFxuICAgICAgdGFyZ2V0czogW25ldyBTZm5TdGF0ZU1hY2hpbmUoY2VydGJvdFN0YXRlTWFjaGluZSldLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU2VydmVyIEVDUyB0YXNrXG4gICAgICovXG4gICAgdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbiA9IHRoaXMuY3JlYXRlVGFza0RlZmluaXRpb24oXG4gICAgICBwcm9wcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbiA/PyB0aGlzLnNhbXBsZVRhc2tEZWZpbml0aW9uKHJlY29yZHMsIGxvZ0dyb3VwKVxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZGVmYXVsdENvbnRhaW5lciBpcyByZXF1aXJlZCBmb3Igc2VydmVyVGFza0RlZmluaXRpb24uIEFkZCBhdCBsZWFzdCBvbmUgZXNzZW50aWFsIGNvbnRhaW5lci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2VydEZpbGVTeXN0ZW0uZ3JhbnQodGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi50YXNrUm9sZSwgJ2VsYXN0aWNmaWxlc3lzdGVtOkNsaWVudE1vdW50Jyk7XG4gICAgdGhpcy5zZXJ2ZXJUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUoe1xuICAgICAgbmFtZTogJ2NlcnRWb2x1bWUnLFxuICAgICAgZWZzVm9sdW1lQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBmaWxlU3lzdGVtSWQ6IHRoaXMuY2VydEZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmRlZmF1bHRDb250YWluZXIuYWRkTW91bnRQb2ludHMoe1xuICAgICAgc291cmNlVm9sdW1lOiAnY2VydFZvbHVtZScsXG4gICAgICBjb250YWluZXJQYXRoOiAnL2V0Yy9sZXRzZW5jcnlwdCcsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEFXUyBjbGkgY29udGFpbmVyIHRvIGV4ZWN1dGUgY2VydGJvdCBzZm4gYmVmb3JlIHRoZSBkZWZhdWx0IGNvbnRhaW5lciBzdGFydHVwLlxuICAgICAqL1xuICAgIHRoaXMuc2VydmVyVGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lci5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcignQVdTQ2xpQ29udGFpbmVyJywge1xuICAgICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShgYW1hem9uL2F3cy1jbGk6JHthd3NDbGlUYWd9YCksXG4gICAgICAgIGNvbnRhaW5lck5hbWU6ICdhd3MtY2xpJyxcbiAgICAgICAgbWVtb3J5UmVzZXJ2YXRpb25NaUI6IDY0LFxuICAgICAgICBlbnRyeVBvaW50OiBbJy9iaW4vYmFzaCcsICctYyddLFxuICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgYHNldCAtZXV4XG4gICAgICAgICAgYXdzIGNvbmZpZ3VyZSBzZXQgcmVnaW9uICR7Y2VydGJvdFN0YXRlTWFjaGluZS5lbnYucmVnaW9ufSAmJiBcXFxcXG4gICAgICAgICAgYXdzIGNvbmZpZ3VyZSBzZXQgb3V0cHV0IHRleHQgJiYgXFxcXFxuICAgICAgICAgIEVYRUNVVElPTl9BUk49JChhd3Mgc3RlcGZ1bmN0aW9ucyBzdGFydC1leGVjdXRpb24gLS1zdGF0ZS1tYWNoaW5lLWFybiAke2NlcnRib3RTdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJufSAtLXF1ZXJ5IGV4ZWN1dGlvbkFybikgJiYgXFxcXFxuICAgICAgICAgIHVudGlsIFsgJChhd3Mgc3RlcGZ1bmN0aW9ucyBkZXNjcmliZS1leGVjdXRpb24gLS1leGVjdXRpb24tYXJuIFwiJEVYRUNVVElPTl9BUk5cIiAtLXF1ZXJ5IHN0YXR1cykgIT0gUlVOTklORyBdO1xuICAgICAgICAgIGRvXG4gICAgICAgICAgICBlY2hvIFwiV2FpdGluZyBmb3IgJEVYRUNVVElPTl9BUk5cIlxuICAgICAgICAgICAgc2xlZXAgMTBcbiAgICAgICAgICBkb25lYCxcbiAgICAgICAgXSxcbiAgICAgICAgZXNzZW50aWFsOiBmYWxzZSxcbiAgICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgICBsb2dHcm91cDogbG9nR3JvdXAsXG4gICAgICAgICAgc3RyZWFtUHJlZml4OiBhd3NDbGlUYWcsXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBjb25kaXRpb246IGVjcy5Db250YWluZXJEZXBlbmRlbmN5Q29uZGl0aW9uLkNPTVBMRVRFLFxuICAgIH0pO1xuICAgIGNlcnRib3RTdGF0ZU1hY2hpbmUuZ3JhbnRFeGVjdXRpb24oXG4gICAgICB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLnRhc2tSb2xlLFxuICAgICAgJ3N0YXRlczpEZXNjcmliZUV4ZWN1dGlvbidcbiAgICApO1xuICAgIGNlcnRib3RTdGF0ZU1hY2hpbmUuZ3JhbnRTdGFydEV4ZWN1dGlvbih0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcblxuICAgIHRoaXMuc2VydmljZSA9IG5ldyBlY3MuRWMyU2VydmljZSh0aGlzLCAnU2VydmljZScsIHtcbiAgICAgIGNsdXN0ZXI6IHRoaXMuY2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnNlcnZlclRhc2tEZWZpbml0aW9uLFxuICAgICAgZGVzaXJlZENvdW50OiAxLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDAsXG4gICAgICBtYXhIZWFsdGh5UGVyY2VudDogMTAwLFxuICAgICAgY2lyY3VpdEJyZWFrZXI6IHtcbiAgICAgICAgcm9sbGJhY2s6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBuZXcgbGliLkNmbk91dHB1dCh0aGlzLCAnUHVibGljSXBBZGRyZXNzJywgeyB2YWx1ZTogaG9zdEluc3RhbmNlSXAucmVmIH0pO1xuICAgIG5ldyBsaWIuQ2ZuT3V0cHV0KHRoaXMsICdTdGF0ZU1hY2hpbmVOYW1lJywgeyB2YWx1ZTogY2VydGJvdFN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVOYW1lIH0pO1xuICAgIG5ldyBsaWIuQ2ZuT3V0cHV0KHRoaXMsICdDbHVzdGVyTmFtZScsIHsgdmFsdWU6IHRoaXMuY2x1c3Rlci5jbHVzdGVyTmFtZSB9KTtcbiAgICBuZXcgbGliLkNmbk91dHB1dCh0aGlzLCAnU2VydmljZU5hbWUnLCB7IHZhbHVlOiB0aGlzLnNlcnZpY2Uuc2VydmljZU5hbWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRhc2tEZWZpbml0aW9uKFxuICAgIHRhc2tEZWZpbml0aW9uT3B0aW9uczogTG93Q29zdEVDU1Rhc2tEZWZpbml0aW9uT3B0aW9uc1xuICApOiBlY3MuRWMyVGFza0RlZmluaXRpb24ge1xuICAgIGNvbnN0IHNlcnZlclRhc2tEZWZpbml0aW9uID0gbmV3IGVjcy5FYzJUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnU2VydmVyVGFza0RlZmluaXRpb24nLFxuICAgICAgdGFza0RlZmluaXRpb25PcHRpb25zLnRhc2tEZWZpbml0aW9uXG4gICAgKTtcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnMuY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXJEZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgc2VydmVyVGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKFxuICAgICAgICBjb250YWluZXJEZWZpbml0aW9uLmNvbnRhaW5lck5hbWUgPz8gYGNvbnRhaW5lciR7aW5kZXh9YCxcbiAgICAgICAgY29udGFpbmVyRGVmaW5pdGlvblxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0YXNrRGVmaW5pdGlvbk9wdGlvbnMudm9sdW1lcz8uZm9yRWFjaCgodm9sdW1lKSA9PiBzZXJ2ZXJUYXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUodm9sdW1lKSk7XG4gICAgcmV0dXJuIHNlcnZlclRhc2tEZWZpbml0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW1wbGVUYXNrRGVmaW5pdGlvbihcbiAgICByZWNvcmRzOiBzdHJpbmdbXSxcbiAgICBsb2dHcm91cDogSUxvZ0dyb3VwXG4gICk6IExvd0Nvc3RFQ1NUYXNrRGVmaW5pdGlvbk9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vZXhhbXBsZXMvY29udGFpbmVycy9uZ2lueCcpKSxcbiAgICAgICAgICBjb250YWluZXJOYW1lOiAnbmdpbngnLFxuICAgICAgICAgIG1lbW9yeVJlc2VydmF0aW9uTWlCOiA2NCxcbiAgICAgICAgICBlc3NlbnRpYWw6IHRydWUsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIFNFUlZFUl9OQU1FOiByZWNvcmRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgIENFUlRfTkFNRTogcmVjb3Jkc1swXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxvZ2dpbmc6IGVjcy5Mb2dEcml2ZXJzLmF3c0xvZ3Moe1xuICAgICAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwLFxuICAgICAgICAgICAgc3RyZWFtUHJlZml4OiAnc2FtcGxlJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBwb3J0TWFwcGluZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaG9zdFBvcnQ6IDgwLFxuICAgICAgICAgICAgICBjb250YWluZXJQb3J0OiA4MCxcbiAgICAgICAgICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBob3N0UG9ydDogNDQzLFxuICAgICAgICAgICAgICBjb250YWluZXJQb3J0OiA0NDMsXG4gICAgICAgICAgICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|