@rio-cloud/cdk-v2-constructs 6.2.2 → 6.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -6140,7 +6140,7 @@
6140
6140
  "kind": "interface",
6141
6141
  "locationInModule": {
6142
6142
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6143
- "line": 19
6143
+ "line": 20
6144
6144
  },
6145
6145
  "name": "GitLabRunnerProps",
6146
6146
  "properties": [
@@ -6152,7 +6152,22 @@
6152
6152
  "immutable": true,
6153
6153
  "locationInModule": {
6154
6154
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6155
- "line": 20
6155
+ "line": 24
6156
+ },
6157
+ "name": "cache",
6158
+ "type": {
6159
+ "fqn": "aws-cdk-lib.aws_s3.IBucket"
6160
+ }
6161
+ },
6162
+ {
6163
+ "abstract": true,
6164
+ "docs": {
6165
+ "stability": "stable"
6166
+ },
6167
+ "immutable": true,
6168
+ "locationInModule": {
6169
+ "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6170
+ "line": 21
6156
6171
  },
6157
6172
  "name": "env",
6158
6173
  "type": {
@@ -6167,7 +6182,7 @@
6167
6182
  "immutable": true,
6168
6183
  "locationInModule": {
6169
6184
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6170
- "line": 22
6185
+ "line": 23
6171
6186
  },
6172
6187
  "name": "managerInstanceType",
6173
6188
  "optional": true,
@@ -6183,17 +6198,12 @@
6183
6198
  "immutable": true,
6184
6199
  "locationInModule": {
6185
6200
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6186
- "line": 21
6201
+ "line": 22
6187
6202
  },
6188
6203
  "name": "runnersWorkerProps",
6189
6204
  "optional": true,
6190
6205
  "type": {
6191
- "collection": {
6192
- "elementtype": {
6193
- "fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
6194
- },
6195
- "kind": "array"
6196
- }
6206
+ "fqn": "@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps"
6197
6207
  }
6198
6208
  }
6199
6209
  ],
@@ -6203,7 +6213,7 @@
6203
6213
  "assembly": "@rio-cloud/cdk-v2-constructs",
6204
6214
  "base": "constructs.Construct",
6205
6215
  "docs": {
6206
- "remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'}\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n runnersWorkerProps: [\n {\n token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner\n spotPrice: 0.2, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n {\n token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner\n spotPrice: 0.044, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n ],\n});\n```",
6216
+ "remarks": "By default, the construct will create a Runner with a manager T3 Micro instance which will be enabled to spawn T3 Large Runner\nworker spot instance. The default runner Role has only the permissions to upload and download from the S3 runner cache.\n\nminimal configuration with runner spot instance:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n});\n```\nrecommended:\n```ts\nnew SpotServiceLinkedRole(stack, 'SpotLinkedRole');\nconst runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});\nconst myBucket = new Bucket(stack, 'MyShareRunnerCache', {\n enforceSSL: true,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n lifecycleRules: [\n {\n enabled: true,\n expiration: Duration.days(30),\n },\n ],\n });\nnew GitlabRunner(stack, 'GitLabRunner', {\n env: {account: '123456789012', region: 'eu-west-1'},\n cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners\n runnersWorkerProps: {\n token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power\n gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab\n instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner\n spotPrice: 0.2, // exemplary spot price\n requestSpotPrice: true,\n defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role\n },\n});\n```",
6207
6217
  "stability": "stable",
6208
6218
  "summary": "The construct create the GitLabRunner Manager instance which will autoscale Runner instances based on the configuration."
6209
6219
  },
@@ -6214,7 +6224,7 @@
6214
6224
  },
6215
6225
  "locationInModule": {
6216
6226
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6217
- "line": 102
6227
+ "line": 116
6218
6228
  },
6219
6229
  "parameters": [
6220
6230
  {
@@ -6240,7 +6250,7 @@
6240
6250
  "kind": "class",
6241
6251
  "locationInModule": {
6242
6252
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6243
- "line": 95
6253
+ "line": 111
6244
6254
  },
6245
6255
  "name": "GitlabRunner",
6246
6256
  "symbolId": "src/contributions/smart-route/gitlab-runner/autoscaling-runner:GitlabRunner"
@@ -6257,7 +6267,7 @@
6257
6267
  "kind": "interface",
6258
6268
  "locationInModule": {
6259
6269
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6260
- "line": 31
6270
+ "line": 33
6261
6271
  },
6262
6272
  "name": "GitlabRunnerWorkerProps",
6263
6273
  "properties": [
@@ -6270,7 +6280,7 @@
6270
6280
  "immutable": true,
6271
6281
  "locationInModule": {
6272
6282
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6273
- "line": 43
6283
+ "line": 45
6274
6284
  },
6275
6285
  "name": "defaultWorkerRole",
6276
6286
  "type": {
@@ -6286,7 +6296,7 @@
6286
6296
  "immutable": true,
6287
6297
  "locationInModule": {
6288
6298
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6289
- "line": 35
6299
+ "line": 37
6290
6300
  },
6291
6301
  "name": "gitInstanceUrl",
6292
6302
  "type": {
@@ -6302,7 +6312,7 @@
6302
6312
  "immutable": true,
6303
6313
  "locationInModule": {
6304
6314
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6305
- "line": 37
6315
+ "line": 39
6306
6316
  },
6307
6317
  "name": "instanceType",
6308
6318
  "type": {
@@ -6318,7 +6328,7 @@
6318
6328
  "immutable": true,
6319
6329
  "locationInModule": {
6320
6330
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6321
- "line": 41
6331
+ "line": 43
6322
6332
  },
6323
6333
  "name": "requestSpotPrice",
6324
6334
  "type": {
@@ -6334,7 +6344,7 @@
6334
6344
  "immutable": true,
6335
6345
  "locationInModule": {
6336
6346
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6337
- "line": 39
6347
+ "line": 41
6338
6348
  },
6339
6349
  "name": "spotPrice",
6340
6350
  "type": {
@@ -6350,7 +6360,7 @@
6350
6360
  "immutable": true,
6351
6361
  "locationInModule": {
6352
6362
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6353
- "line": 33
6363
+ "line": 35
6354
6364
  },
6355
6365
  "name": "token",
6356
6366
  "type": {
@@ -6367,7 +6377,7 @@
6367
6377
  "immutable": true,
6368
6378
  "locationInModule": {
6369
6379
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6370
- "line": 45
6380
+ "line": 47
6371
6381
  },
6372
6382
  "name": "maxBuilds",
6373
6383
  "optional": true,
@@ -6385,7 +6395,7 @@
6385
6395
  "immutable": true,
6386
6396
  "locationInModule": {
6387
6397
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6388
- "line": 47
6398
+ "line": 49
6389
6399
  },
6390
6400
  "name": "maxIdleInstance",
6391
6401
  "optional": true,
@@ -6403,7 +6413,7 @@
6403
6413
  "immutable": true,
6404
6414
  "locationInModule": {
6405
6415
  "filename": "src/contributions/smart-route/gitlab-runner/autoscaling-runner.ts",
6406
- "line": 49
6416
+ "line": 51
6407
6417
  },
6408
6418
  "name": "maxIdleTime",
6409
6419
  "optional": true,
@@ -16728,5 +16738,5 @@
16728
16738
  }
16729
16739
  },
16730
16740
  "version": "0.0.0",
16731
- "fingerprint": "rzGg3npyOR1/DDc02aMZX7iKNdxl68n9K1t+ii5Zskw="
16741
+ "fingerprint": "vkv0ByaY8bMTd8OsR9NHooh1ytKdvwQivH2W8ggVLS4="
16732
16742
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [6.3.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.0&sourceBranch=refs%2Ftags%2Fv6.3.1) (2024-08-01)
6
+
7
+ ## [6.3.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.2&sourceBranch=refs%2Ftags%2Fv6.3.0) (2024-07-23)
8
+
9
+
10
+ ### Features
11
+
12
+ * adjust gitlab runner construct to handle new registration process and change worker props since now one manager can only handle one runner group ([f744213](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/f74421342e21729a4b8732e4913ad31d93f0d818))
13
+
5
14
  ## [6.2.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.1&sourceBranch=refs%2Ftags%2Fv6.2.2) (2024-07-19)
6
15
 
7
16
  ## [6.2.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.2.0&sourceBranch=refs%2Ftags%2Fv6.2.1) (2024-07-19)
package/docs/API.md CHANGED
@@ -2497,34 +2497,48 @@ worker spot instance. The default runner Role has only the permissions to upload
2497
2497
  minimal configuration with runner spot instance:
2498
2498
  ```ts
2499
2499
  new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
2500
+ const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
2501
+ enforceSSL: true,
2502
+ publicReadAccess: false,
2503
+ encryption: BucketEncryption.S3_MANAGED,
2504
+ lifecycleRules: [
2505
+ {
2506
+ enabled: true,
2507
+ expiration: Duration.days(30),
2508
+ },
2509
+ ],
2510
+ });
2500
2511
  new GitlabRunner(stack, 'GitLabRunner', {
2501
- env: {account: '123456789012', region: 'eu-west-1'}
2512
+ env: {account: '123456789012', region: 'eu-west-1'},
2513
+ cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
2502
2514
  });
2503
2515
  ```
2504
2516
  recommended:
2505
2517
  ```ts
2506
2518
  new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
2507
2519
  const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
2520
+ const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
2521
+ enforceSSL: true,
2522
+ publicReadAccess: false,
2523
+ encryption: BucketEncryption.S3_MANAGED,
2524
+ lifecycleRules: [
2525
+ {
2526
+ enabled: true,
2527
+ expiration: Duration.days(30),
2528
+ },
2529
+ ],
2530
+ });
2508
2531
  new GitlabRunner(stack, 'GitLabRunner', {
2509
2532
  env: {account: '123456789012', region: 'eu-west-1'},
2510
- runnersWorkerProps: [
2511
- {
2512
- token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
2513
- gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2514
- instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
2515
- spotPrice: 0.2, // exemplary spot price
2516
- requestSpotPrice: true,
2517
- defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2518
- },
2519
- {
2520
- token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
2521
- gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2522
- instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
2523
- spotPrice: 0.044, // exemplary spot price
2524
- requestSpotPrice: true,
2525
- defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2526
- },
2527
- ],
2533
+ cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
2534
+ runnersWorkerProps: {
2535
+ token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
2536
+ gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
2537
+ instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
2538
+ spotPrice: 0.2, // exemplary spot price
2539
+ requestSpotPrice: true,
2540
+ defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
2541
+ },
2528
2542
  });
2529
2543
  ```
2530
2544
 
@@ -9959,9 +9973,20 @@ const gitLabRunnerProps: GitLabRunnerProps = { ... }
9959
9973
 
9960
9974
  | **Name** | **Type** | **Description** |
9961
9975
  | --- | --- | --- |
9976
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache">cache</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | *No description.* |
9962
9977
  | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.env">env</a></code> | <code>aws-cdk-lib.Environment</code> | *No description.* |
9963
9978
  | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.managerInstanceType">managerInstanceType</a></code> | <code>aws-cdk-lib.aws_ec2.InstanceType</code> | *No description.* |
9964
- | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>[]</code> | *No description.* |
9979
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps">runnersWorkerProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a></code> | *No description.* |
9980
+
9981
+ ---
9982
+
9983
+ ##### `cache`<sup>Required</sup> <a name="cache" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.cache"></a>
9984
+
9985
+ ```typescript
9986
+ public readonly cache: IBucket;
9987
+ ```
9988
+
9989
+ - *Type:* aws-cdk-lib.aws_s3.IBucket
9965
9990
 
9966
9991
  ---
9967
9992
 
@@ -9988,10 +10013,10 @@ public readonly managerInstanceType: InstanceType;
9988
10013
  ##### `runnersWorkerProps`<sup>Optional</sup> <a name="runnersWorkerProps" id="@rio-cloud/cdk-v2-constructs.GitLabRunnerProps.property.runnersWorkerProps"></a>
9989
10014
 
9990
10015
  ```typescript
9991
- public readonly runnersWorkerProps: GitlabRunnerWorkerProps[];
10016
+ public readonly runnersWorkerProps: GitlabRunnerWorkerProps;
9992
10017
  ```
9993
10018
 
9994
- - *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>[]
10019
+ - *Type:* <a href="#@rio-cloud/cdk-v2-constructs.GitlabRunnerWorkerProps">GitlabRunnerWorkerProps</a>
9995
10020
 
9996
10021
  ---
9997
10022
 
@@ -1,6 +1,7 @@
1
1
  import { Environment, Stack } from 'aws-cdk-lib';
2
2
  import { InstanceType } from 'aws-cdk-lib/aws-ec2';
3
3
  import { IRole } from 'aws-cdk-lib/aws-iam';
4
+ import { IBucket } from 'aws-cdk-lib/aws-s3';
4
5
  import { IStringParameter } from 'aws-cdk-lib/aws-ssm';
5
6
  import { Construct } from 'constructs';
6
7
  /**
@@ -10,8 +11,9 @@ import { Construct } from 'constructs';
10
11
  */
11
12
  export interface GitLabRunnerProps {
12
13
  readonly env: Environment;
13
- readonly runnersWorkerProps?: GitlabRunnerWorkerProps[];
14
+ readonly runnersWorkerProps?: GitlabRunnerWorkerProps;
14
15
  readonly managerInstanceType?: InstanceType;
16
+ readonly cache: IBucket;
15
17
  }
16
18
  /**
17
19
  * The GitlabRunnerWorkerProps interface provides a simplified GitLab Runner worker configuration
@@ -48,34 +50,48 @@ export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.coll
48
50
  * minimal configuration with runner spot instance:
49
51
  * ```ts
50
52
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
53
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
54
+ * enforceSSL: true,
55
+ * publicReadAccess: false,
56
+ * encryption: BucketEncryption.S3_MANAGED,
57
+ * lifecycleRules: [
58
+ * {
59
+ * enabled: true,
60
+ * expiration: Duration.days(30),
61
+ * },
62
+ * ],
63
+ * });
51
64
  * new GitlabRunner(stack, 'GitLabRunner', {
52
- * env: {account: '123456789012', region: 'eu-west-1'}
65
+ * env: {account: '123456789012', region: 'eu-west-1'},
66
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
53
67
  * });
54
68
  *```
55
69
  * recommended:
56
70
  * ```ts
57
71
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
58
72
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
73
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
74
+ * enforceSSL: true,
75
+ * publicReadAccess: false,
76
+ * encryption: BucketEncryption.S3_MANAGED,
77
+ * lifecycleRules: [
78
+ * {
79
+ * enabled: true,
80
+ * expiration: Duration.days(30),
81
+ * },
82
+ * ],
83
+ * });
59
84
  * new GitlabRunner(stack, 'GitLabRunner', {
60
85
  * env: {account: '123456789012', region: 'eu-west-1'},
61
- * runnersWorkerProps: [
62
- * {
63
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
64
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
65
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
66
- * spotPrice: 0.2, // exemplary spot price
67
- * requestSpotPrice: true,
68
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
69
- * },
70
- * {
71
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
72
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
73
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
74
- * spotPrice: 0.044, // exemplary spot price
75
- * requestSpotPrice: true,
76
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
77
- * },
78
- * ],
86
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
87
+ * runnersWorkerProps: {
88
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
89
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
90
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
91
+ * spotPrice: 0.2, // exemplary spot price
92
+ * requestSpotPrice: true,
93
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
94
+ * },
79
95
  * });
80
96
  * ```
81
97
  */
@@ -17,121 +17,135 @@ const rio_landing_zone_1 = require("../../../rio-landing-zone");
17
17
  * minimal configuration with runner spot instance:
18
18
  * ```ts
19
19
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
20
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
21
+ * enforceSSL: true,
22
+ * publicReadAccess: false,
23
+ * encryption: BucketEncryption.S3_MANAGED,
24
+ * lifecycleRules: [
25
+ * {
26
+ * enabled: true,
27
+ * expiration: Duration.days(30),
28
+ * },
29
+ * ],
30
+ * });
20
31
  * new GitlabRunner(stack, 'GitLabRunner', {
21
- * env: {account: '123456789012', region: 'eu-west-1'}
32
+ * env: {account: '123456789012', region: 'eu-west-1'},
33
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
22
34
  * });
23
35
  *```
24
36
  * recommended:
25
37
  * ```ts
26
38
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
27
39
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
40
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
41
+ * enforceSSL: true,
42
+ * publicReadAccess: false,
43
+ * encryption: BucketEncryption.S3_MANAGED,
44
+ * lifecycleRules: [
45
+ * {
46
+ * enabled: true,
47
+ * expiration: Duration.days(30),
48
+ * },
49
+ * ],
50
+ * });
28
51
  * new GitlabRunner(stack, 'GitLabRunner', {
29
52
  * env: {account: '123456789012', region: 'eu-west-1'},
30
- * runnersWorkerProps: [
31
- * {
32
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
33
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
34
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
35
- * spotPrice: 0.2, // exemplary spot price
36
- * requestSpotPrice: true,
37
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
38
- * },
39
- * {
40
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
41
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
42
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
43
- * spotPrice: 0.044, // exemplary spot price
44
- * requestSpotPrice: true,
45
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
46
- * },
47
- * ],
53
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
54
+ * runnersWorkerProps: {
55
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
56
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
57
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
58
+ * spotPrice: 0.2, // exemplary spot price
59
+ * requestSpotPrice: true,
60
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
61
+ * },
48
62
  * });
49
63
  * ```
50
64
  */
51
65
  class GitlabRunner extends constructs_1.Construct {
52
66
  constructor(scope, id, props) {
53
67
  super(scope, id);
54
- this.autoscalingConfig = [
55
- {
56
- periods: ['* * 7-24 * * mon-fri *'],
68
+ this.autoscalingConfig = [{
69
+ periods: ['* * 7-22 * * mon-fri *'],
57
70
  timezone: 'Europe/Berlin',
58
- },
59
- ];
71
+ }];
60
72
  const vpc = rio_landing_zone_1.RioLandingZone.getDefaultVpc(scope);
61
73
  const runnerConfig = props.runnersWorkerProps
62
74
  ? this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
63
75
  : this.getDefaultRunnerWorkerConfig(props.env);
64
76
  const managerInstance = props.managerInstanceType ??
65
77
  aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
66
- new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
67
- runners: runnerConfig,
78
+ const runner = new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
79
+ runners: [runnerConfig],
68
80
  network: {
69
81
  vpc: vpc,
70
82
  },
71
83
  manager: {
72
84
  instanceType: managerInstance,
73
85
  },
86
+ cache: { bucket: props.cache },
74
87
  checkInterval: 30, // check every 30s for pending jobs
75
88
  concurrent: 300, // Global limit of concurrent jobs,
76
89
  });
90
+ // due to the new registration process we have to register the runner by running explicit commands on start of the manager
91
+ runner.manager.userData.addCommands('cp /etc/gitlab-runner/config.toml /etc/gitlab-runner/config_back.toml', // avoid toml merge conflicts
92
+ `gitlab-runner register --non-interactive --template-config /etc/gitlab-runner/config_back.toml --token ${props.runnersWorkerProps?.token.stringValue}`, 'gitlab-runner restart');
77
93
  }
78
94
  createWorkerConfigurations(workerProps, env) {
79
- return workerProps.map((val) => ({
80
- token: val.token,
81
- role: val.defaultWorkerRole,
95
+ return {
96
+ token: workerProps.token,
97
+ role: workerProps.defaultWorkerRole,
82
98
  configuration: {
83
- url: val.gitInstanceUrl,
99
+ url: workerProps.gitInstanceUrl,
84
100
  machine: {
85
101
  autoscaling: this.autoscalingConfig,
86
- maxBuilds: val.maxBuilds ?? 10,
87
- idleCount: val.maxIdleInstance ?? 5,
88
- idleTime: val.maxIdleTime ?? 900,
102
+ maxBuilds: workerProps.maxBuilds ?? 10,
103
+ idleCount: workerProps.maxIdleInstance ?? 5,
104
+ idleTime: workerProps.maxIdleTime ?? 900,
89
105
  machineOptions: {
90
- requestSpotInstance: val.requestSpotPrice,
91
- spotPrice: val.spotPrice,
106
+ requestSpotInstance: workerProps.requestSpotPrice,
107
+ spotPrice: workerProps.spotPrice,
92
108
  },
93
109
  },
94
110
  environment: [
95
111
  'DOCKER_DRIVER=overlay2',
96
112
  'DOCKER_TLS_DIRCE=/certs',
97
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
113
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
98
114
  ],
99
115
  },
100
- instanceType: val.instanceType,
101
- }));
116
+ instanceType: workerProps.instanceType,
117
+ };
102
118
  }
103
119
  getDefaultRunnerWorkerConfig(env) {
104
120
  const gitLabRunnerTokenParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'RunnerToken', {
105
121
  parameterName: '/config/gitlab-runner-cdk/token',
106
122
  });
107
- return [
108
- {
109
- token: gitLabRunnerTokenParameter,
110
- configuration: {
111
- url: 'https://gitlab.cicd.man',
112
- limit: 0,
113
- machine: {
114
- maxBuilds: 10,
115
- autoscaling: this.autoscalingConfig,
116
- idleCount: 5,
117
- idleTime: 900,
118
- machineOptions: {
119
- requestSpotInstance: true,
120
- spotPrice: 0.09,
121
- },
123
+ return {
124
+ token: gitLabRunnerTokenParameter,
125
+ configuration: {
126
+ url: 'https://gitlab.cicd.man',
127
+ limit: 0,
128
+ machine: {
129
+ maxBuilds: 10,
130
+ autoscaling: this.autoscalingConfig,
131
+ idleCount: 5,
132
+ idleTime: 900,
133
+ machineOptions: {
134
+ requestSpotInstance: true,
135
+ spotPrice: 0.09,
122
136
  },
123
- environment: [
124
- 'DOCKER_DRIVER=overlay2',
125
- 'DOCKER_TLS_DIRCE=/certs',
126
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
127
- ],
128
137
  },
129
- instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
138
+ environment: [
139
+ 'DOCKER_DRIVER=overlay2',
140
+ 'DOCKER_TLS_DIRCE=/certs',
141
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
142
+ ],
130
143
  },
131
- ];
144
+ instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
145
+ };
132
146
  }
133
147
  }
134
148
  exports.GitlabRunner = GitlabRunner;
135
149
  _a = JSII_RTTI_SYMBOL_1;
136
150
  GitlabRunner[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.GitlabRunner", version: "0.0.0" };
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUVoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTRDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFPekMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFQWCxzQkFBaUIsR0FBK0I7WUFDdEQ7Z0JBQ0UsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxlQUFlO2FBQzFCO1NBQ0YsQ0FBQztRQUlBLE1BQU0sR0FBRyxHQUFHLGlDQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0I7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRCxNQUFNLGVBQWUsR0FDbkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QixzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELElBQUksdURBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzFELE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxXQUFzQyxFQUN0QyxHQUFnQjtRQUVoQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsaUJBQWlCO1lBQzNCLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUsR0FBRyxDQUFDLGNBQWM7Z0JBQ3ZCLE9BQU8sRUFBRTtvQkFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbkMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDOUIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxlQUFlLElBQUksQ0FBQztvQkFDbkMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRztvQkFDaEMsY0FBYyxFQUFFO3dCQUNkLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7d0JBQ3pDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztxQkFDekI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixtREFBbUQ7aUJBQ3BEO2FBQ0Y7WUFDRCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTDtnQkFDRSxLQUFLLEVBQUUsMEJBQTBCO2dCQUNqQyxhQUFhLEVBQUU7b0JBQ2IsR0FBRyxFQUFFLHlCQUF5QjtvQkFDOUIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxFQUFFO3dCQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO3dCQUNuQyxTQUFTLEVBQUUsQ0FBQzt3QkFDWixRQUFRLEVBQUUsR0FBRzt3QkFDYixjQUFjLEVBQUU7NEJBQ2QsbUJBQW1CLEVBQUUsSUFBSTs0QkFDekIsU0FBUyxFQUFFLElBQUk7eUJBQ2hCO3FCQUNGO29CQUNELFdBQVcsRUFBRTt3QkFDWCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsd0VBQ0UsR0FBRyxDQUFDLE9BQ04sbURBQW1EO3FCQUNwRDtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxFQUFFLEVBQUUsc0JBQVksQ0FBQyxLQUFLLENBQUM7YUFDcEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIsIFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG4vKipcbiAqIFRoZSBHaXRMYWJSdW5uZXJQcm9wcyByZXF1aXJlIHRoZSBWUEMgSUQsIGEgZGVmaW5lZCBlbnZpcm9ubWVudCBvZiBhY2NvdW50IGFuZCByZWdpb24sIG9wdGlvbmFsXG4gKiBydW5uZXIgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uYWxseSB0aGUgR2l0TGFiIFJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHR5cGUuIEJ5IGRlZmF1bHQsIGEgVDMgTWljcm8gaW5zdGFuY2Ugd2lsbCBiZSB1c2VkLlxuICogRm9yIGxhcmdlciB3b3JrbG9hZHMgYW5kIHZlcnkgYWN0aXZlIHRlYW1zIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBUMyBTbWFsbCBmb3IgdGhlIG1hbmFnZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRMYWJSdW5uZXJQcm9wcyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG4gIHJlYWRvbmx5IHJ1bm5lcnNXb3JrZXJQcm9wcz86IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW107XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG59XG5cbi8qKlxuICogVGhlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbXBsaWZpZWQgR2l0TGFiIFJ1bm5lciB3b3JrZXIgY29uZmlndXJhdGlvblxuICogcmVxdWlyaW5nIGEgdG9rZW4gYXMgYW4gU1NNIHBhcmFtZXRlciwgb25lIG9mIHRoZSB2YWxpZCBnaXRsYWIgVVJMcywgaW5zdGFuY2Ugb2YgeW91IGNob2ljZSwgdGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UsXG4gKiB3aGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCBhbmQgYSBkZWZhdWx0IHJvbGUuXG4gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIFJ1bm5lclJvbGVzIGNvbnN0cnVjdCwgYW5kIGl0J3MgZXhwb3NlZCBkZWZhdWx0IHJ1bm5lciByb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGxhYlJ1bm5lcldvcmtlclByb3BzIHtcbiAgLyoqIFRoZSBTU00gU3RyaW5nUGFyYW1ldGVyIHdpdGggdGhlIHJlZ2lzdGVyZWQgcnVubmVyIHRva2VuICAqL1xuICByZWFkb25seSB0b2tlbjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgLyoqIFRoZSBHaXRMYWIgaW5zdGFuY2UgVVJMLCBlaXRoZXIgaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4gb3IgaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20gKi9cbiAgcmVhZG9ubHkgZ2l0SW5zdGFuY2VVcmw6IEdpdGxhYkluc3RhbmNlVXJsO1xuICAvKiogVGhlIGluc3RhbmNlIHR5cGUgZm9yIHRoZSBydW5uZXIgd29ya2VyICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICAvKiogVGhlIGRlc2lyZWQgbWF4IHNwb3QgcHJpY2UgKi9cbiAgcmVhZG9ubHkgc3BvdFByaWNlOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBzcG90IGluc3RhbmNlIG9yIG5vdCwgUmVxdWlyZXMgU2VydmljZUxpbmtlZCBSb2xlIGZvciBFQzIgU3BvdCB0byBiZSBkZXBsb3llZCBpbiB0aGUgYWNjb3VudCAqL1xuICByZWFkb25seSByZXF1ZXN0U3BvdFByaWNlOiBib29sZWFuO1xuICAvKiogVGhlIGRlZmF1bHQgcm9sZSBmb3IgdGhlIHJ1bm5lciB3b3JrZXIgd2hlbiBzcGF3bmVkICovXG4gIHJlYWRvbmx5IGRlZmF1bHRXb3JrZXJSb2xlOiBJUm9sZTtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBidWlsZHMgZm9yIGFuIGluc3RhbmNlIGJlZm9yZSBpdCBoYXMgdG8gYmUgZGVjb21taXNzaW9uZWQuIERlZmF1bHQgMTAgKi9cbiAgcmVhZG9ubHkgbWF4QnVpbGRzPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RhbmNlcyB0byBrZWVwIGlkbGUgZm9yIG5ldyBpbmNvbWluZyBqb2JzLiBEZWZhdWx0IDUgKi9cbiAgcmVhZG9ubHkgbWF4SWRsZUluc3RhbmNlPzogbnVtYmVyO1xuICAvKiogVGhlIG1heGltdW0gaWRsZSB0aW1lIHNlY29uZHMgZm9yIGFuIGluc3RhbmNlLiBEZWZhdWx0IDkwMCBzZWNvbmRzICovXG4gIHJlYWRvbmx5IG1heElkbGVUaW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBHaXRsYWJJbnN0YW5jZVVybCA9XG4gIHwgJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJ1xuICB8ICdodHRwczovL2dpdGxhYi5jb2xsYWJvcmF0aW9ubGF5ZXItdHJhdG9uLmNvbSc7XG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGUgdGhlIEdpdExhYlJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHdoaWNoIHdpbGwgYXV0b3NjYWxlIFJ1bm5lciBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBCeSBkZWZhdWx0LCB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgUnVubmVyIHdpdGggYSBtYW5hZ2VyIFQzIE1pY3JvIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgZW5hYmxlZCB0byBzcGF3biBUMyBMYXJnZSBSdW5uZXJcbiAqIHdvcmtlciBzcG90IGluc3RhbmNlLiBUaGUgZGVmYXVsdCBydW5uZXIgUm9sZSBoYXMgb25seSB0aGUgcGVybWlzc2lvbnMgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmcm9tIHRoZSBTMyBydW5uZXIgY2FjaGUuXG4gKlxuICogbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggcnVubmVyIHNwb3QgaW5zdGFuY2U6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBuZXcgR2l0bGFiUnVubmVyKHN0YWNrLCAnR2l0TGFiUnVubmVyJywge1xuICogIGVudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfVxuICogfSk7XG4gKmBgYFxuICogcmVjb21tZW5kZWQ6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBjb25zdCBydW5uZXJSb2xlcyA9IG5ldyBSdW5uZXJSb2xlcyhzdGFjaywgJ1J1bm5lclJvbGVzJywge2Vudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfX0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgcnVubmVyc1dvcmtlclByb3BzOiBbXG4gKiAgICB7XG4gKiAgICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTdJX0ZMRVgsIEluc3RhbmNlU2l6ZS5YTEFSR0UpLCAvLyBleGVtcGxhcnkgbGFyZ2VyIHJ1bm5lclxuICogICAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICAgIHtcbiAqICAgICAgdG9rZW46IG15VG9rZW5Gb3JUYWdnZWRSdW5uZXIyLCAvLyB3aXRoIHRoaXMgcnVubmVyIHdlIHdhbnQgdG8gcnVuIGFsbCBnZW5lcmljIGpvYnMgdGhhdCBkbyBub3QgcmVxdWlyZSBtdWNoIHByb2Nlc3NpbmcgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLCAvLyBleGVtcGxhcnkgc21hbGxlciBydW5uZXJcbiAqICAgICAgc3BvdFByaWNlOiAwLjA0NCwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGxhYlJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgYXV0b3NjYWxpbmdDb25maWc6IEF1dG9zY2FsaW5nQ29uZmlndXJhdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHBlcmlvZHM6IFsnKiAqIDctMjQgKiAqIG1vbi1mcmkgKiddLFxuICAgICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgICB9LFxuICBdO1xuICBjb25zdHJ1Y3RvcihzY29wZTogU3RhY2ssIGlkOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IHJ1bm5lckNvbmZpZyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9LFxuICAgICAgbWFuYWdlcjoge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG1hbmFnZXJJbnN0YW5jZSxcbiAgICAgIH0sXG4gICAgICBjaGVja0ludGVydmFsOiAzMCwgLy8gY2hlY2sgZXZlcnkgMzBzIGZvciBwZW5kaW5nIGpvYnNcbiAgICAgIGNvbmN1cnJlbnQ6IDMwMCwgLy8gR2xvYmFsIGxpbWl0IG9mIGNvbmN1cnJlbnQgam9icyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMoXG4gICAgd29ya2VyUHJvcHM6IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW10sXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgKTogR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wc1tdIHtcbiAgICByZXR1cm4gd29ya2VyUHJvcHMubWFwKCh2YWwpID0+ICh7XG4gICAgICB0b2tlbjogdmFsLnRva2VuLFxuICAgICAgcm9sZTogdmFsLmRlZmF1bHRXb3JrZXJSb2xlLFxuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICB1cmw6IHZhbC5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogdmFsLm1heEJ1aWxkcyA/PyAxMCxcbiAgICAgICAgICBpZGxlQ291bnQ6IHZhbC5tYXhJZGxlSW5zdGFuY2UgPz8gNSxcbiAgICAgICAgICBpZGxlVGltZTogdmFsLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdmFsLnJlcXVlc3RTcG90UHJpY2UsXG4gICAgICAgICAgICBzcG90UHJpY2U6IHZhbC5zcG90UHJpY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAnRE9DS0VSX0RSSVZFUj1vdmVybGF5MicsXG4gICAgICAgICAgJ0RPQ0tFUl9UTFNfRElSQ0U9L2NlcnRzJyxcbiAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICBlbnYuYWNjb3VudFxuICAgICAgICAgIH0uZGtyLmVjci48cmVnaW9uPi5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHZhbC5pbnN0YW5jZVR5cGUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHNbXSB7XG4gICAgY29uc3QgZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdSdW5uZXJUb2tlbicsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvZ2l0bGFiLXJ1bm5lci1jZGsvdG9rZW4nLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW46IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLFxuICAgICAgICAgIGxpbWl0OiAwLFxuICAgICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICAgIG1heEJ1aWxkczogMTAsXG4gICAgICAgICAgICBhdXRvc2NhbGluZzogdGhpcy5hdXRvc2NhbGluZ0NvbmZpZyxcbiAgICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICAgIGlkbGVUaW1lOiA5MDAsXG4gICAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgICBzcG90UHJpY2U6IDAuMDksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFtcbiAgICAgICAgICAgICdET0NLRVJfRFJJVkVSPW92ZXJsYXkyJyxcbiAgICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgICBgRE9DS0VSX0FVVEhfQ09ORklHPXtcImNyZWRIZWxwZXJzXCI6IHsgXCJwdWJsaWMuZWNyLmF3c1wiOiBcImVjci1sb2dpblwiLCBcIiR7XG4gICAgICAgICAgICAgIGVudi5hY2NvdW50XG4gICAgICAgICAgICB9LmRrci5lY3IuPHJlZ2lvbj4uYW1hem9uYXdzLmNvbVwiOiBcImVjci1sb2dpblwiIH0gfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLkxBUkdFKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUdoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTZDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUt6QyxZQUFZLEtBQVksRUFBRSxFQUFXLEVBQUUsS0FBd0I7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLHNCQUFpQixHQUErQixDQUFDO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQyxDQUFDO1FBSUQsTUFBTSxHQUFHLEdBQUcsaUNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZUFBZSxHQUNuQixLQUFLLENBQUMsbUJBQW1CO1lBQ3pCLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsMEhBQTBIO1FBQzFILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDakMseUVBQXlFLEVBQUUsNkJBQTZCO1FBQ3hHLDBHQUEwRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUN2Six1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFvQyxFQUFFLEdBQWdCO1FBQ3ZGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDO29CQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxjQUFjLEVBQUU7d0JBQ2QsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjt3QkFDakQsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3FCQUNqQztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsd0JBQXdCO29CQUN4Qix5QkFBeUI7b0JBQ3pCLHdFQUNFLEdBQUcsQ0FBQyxPQUNOLFlBQVksR0FBRyxDQUFDLE1BQU0sa0NBQWtDO2lCQUN6RDthQUNGO1lBQ0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxLQUFLLEVBQUUsMEJBQTBCO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUseUJBQXlCO2dCQUM5QixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxJQUFJO3dCQUN6QixTQUFTLEVBQUUsSUFBSTtxQkFDaEI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixZQUFZLEdBQUcsQ0FBQyxNQUFNLGtDQUFrQztpQkFDekQ7YUFDRjtZQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHM7XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGNhY2hlOiBJQnVja2V0O1xufVxuXG4vKipcbiAqIFRoZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIEdpdExhYiBSdW5uZXIgd29ya2VyIGNvbmZpZ3VyYXRpb25cbiAqIHJlcXVpcmluZyBhIHRva2VuIGFzIGFuIFNTTSBwYXJhbWV0ZXIsIG9uZSBvZiB0aGUgdmFsaWQgZ2l0bGFiIFVSTHMsIGluc3RhbmNlIG9mIHlvdSBjaG9pY2UsIHRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlLFxuICogd2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QgYW5kIGEgZGVmYXVsdCByb2xlLlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBSdW5uZXJSb2xlcyBjb25zdHJ1Y3QsIGFuZCBpdCdzIGV4cG9zZWQgZGVmYXVsdCBydW5uZXIgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyB7XG4gIC8qKiBUaGUgU1NNIFN0cmluZ1BhcmFtZXRlciB3aXRoIHRoZSByZWdpc3RlcmVkIHJ1bm5lciB0b2tlbiAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IElTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIHJlYWRvbmx5IGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHJlYWRvbmx5IHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICByZWFkb25seSBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIHJlYWRvbmx5IG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIHJlYWRvbmx5IG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICByZWFkb25seSBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPVxuICB8ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbidcbiAgfCAnaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20nO1xuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlIHRoZSBHaXRMYWJSdW5uZXIgTWFuYWdlciBpbnN0YW5jZSB3aGljaCB3aWxsIGF1dG9zY2FsZSBSdW5uZXIgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuICogQnkgZGVmYXVsdCwgdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIFJ1bm5lciB3aXRoIGEgbWFuYWdlciBUMyBNaWNybyBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIGVuYWJsZWQgdG8gc3Bhd24gVDMgTGFyZ2UgUnVubmVyXG4gKiB3b3JrZXIgc3BvdCBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgcnVubmVyIFJvbGUgaGFzIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZnJvbSB0aGUgUzMgcnVubmVyIGNhY2hlLlxuICpcbiAqIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIHJ1bm5lciBzcG90IGluc3RhbmNlOlxuICogYGBgdHNcbiAqIG5ldyBTcG90U2VydmljZUxpbmtlZFJvbGUoc3RhY2ssICdTcG90TGlua2VkUm9sZScpO1xuICogY29uc3QgbXlCdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnTXlTaGFyZVJ1bm5lckNhY2hlJywge1xuICogICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gKiAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gKiAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICogICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICB9KTtcbiAqIG5ldyBHaXRsYWJSdW5uZXIoc3RhY2ssICdHaXRMYWJSdW5uZXInLCB7XG4gKiAgZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9LFxuICogIGNhY2hlOiBteUJ1Y2tldCAvLyB1c2UgYSBTMyBidWNrZXQgd2l0aG91dCBwdWJsaWMgYWNjZXNzIGFuZCBhIHJldGVudGlvbiBkZWZpbmVkLCB1c2Ugb25lIGNhY2hlIGJ1Y2tldCBmb3IgYWxsIHlvdSBydW5uZXJzXG4gKiB9KTtcbiAqYGBgXG4gKiByZWNvbW1lbmRlZDpcbiAqIGBgYHRzXG4gKiBuZXcgU3BvdFNlcnZpY2VMaW5rZWRSb2xlKHN0YWNrLCAnU3BvdExpbmtlZFJvbGUnKTtcbiAqIGNvbnN0IHJ1bm5lclJvbGVzID0gbmV3IFJ1bm5lclJvbGVzKHN0YWNrLCAnUnVubmVyUm9sZXMnLCB7ZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9fSk7XG4gKiBjb25zdCBteUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdNeVNoYXJlUnVubmVyQ2FjaGUnLCB7XG4gKiAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAqICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAqICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gKiAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgY2FjaGU6IG15QnVja2V0IC8vIC8vIHVzZSBhIFMzIGJ1Y2tldCB3aXRob3V0IHB1YmxpYyBhY2Nlc3MgYW5kIGEgcmV0ZW50aW9uIGRlZmluZWQsIHVzZSBvbmUgY2FjaGUgYnVja2V0IGZvciBhbGwgeW91IHJ1bm5lcnNcbiAqICBydW5uZXJzV29ya2VyUHJvcHM6IHtcbiAqICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgIGdpdEluc3RhbmNlVXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLCAvLyBvciB0aGUgVHJhdG9uIEdpdExhYlxuICogICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5NN0lfRkxFWCwgSW5zdGFuY2VTaXplLlhMQVJHRSksIC8vIGV4ZW1wbGFyeSBsYXJnZXIgcnVubmVyXG4gKiAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgIHJlcXVlc3RTcG90UHJpY2U6IHRydWUsXG4gKiAgICBkZWZhdWx0V29ya2VyUm9sZTogcnVubmVyUm9sZXMucnVubmVyQmFzZVJvbGUsIC8vIHVzZSB0aGUgYmFzZSByb2xlXG4gKiAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRsYWJSdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGF1dG9zY2FsaW5nQ29uZmlnOiBBdXRvc2NhbGluZ0NvbmZpZ3VyYXRpb25bXSA9IFt7XG4gICAgcGVyaW9kczogWycqICogNy0yMiAqICogbW9uLWZyaSAqJ10sXG4gICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgfV07XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQgOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IFtydW5uZXJDb25maWddLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VyOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbWFuYWdlckluc3RhbmNlLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7IGJ1Y2tldDogcHJvcHMuY2FjaGUgfSxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDMwLCAvLyBjaGVjayBldmVyeSAzMHMgZm9yIHBlbmRpbmcgam9ic1xuICAgICAgY29uY3VycmVudDogMzAwLCAvLyBHbG9iYWwgbGltaXQgb2YgY29uY3VycmVudCBqb2JzLFxuICAgIH0pO1xuICAgIC8vIGR1ZSB0byB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHJ1bm5lciBieSBydW5uaW5nIGV4cGxpY2l0IGNvbW1hbmRzIG9uIHN0YXJ0IG9mIHRoZSBtYW5hZ2VyXG4gICAgcnVubmVyLm1hbmFnZXIudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAnY3AgIC9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCAgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwnLCAvLyBhdm9pZCB0b21sIG1lcmdlIGNvbmZsaWN0c1xuICAgICAgYGdpdGxhYi1ydW5uZXIgcmVnaXN0ZXIgLS1ub24taW50ZXJhY3RpdmUgLS10ZW1wbGF0ZS1jb25maWcgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwgLS10b2tlbiAke3Byb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcz8udG9rZW4uc3RyaW5nVmFsdWV9YCxcbiAgICAgICdnaXRsYWItcnVubmVyIHJlc3RhcnQnLCAvLyByZXN0YXJ0IHRoZSBydW5uZXIgdG8gZW5zdXJlIHRoZSBjb25maWcgaXMgcGlja2VkIHVwIGNvcnJlY3RseVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHdvcmtlclByb3BzOiBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcywgZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogd29ya2VyUHJvcHMudG9rZW4sXG4gICAgICByb2xlOiB3b3JrZXJQcm9wcy5kZWZhdWx0V29ya2VyUm9sZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdXJsOiB3b3JrZXJQcm9wcy5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogd29ya2VyUHJvcHMubWF4QnVpbGRzID8/IDEwLFxuICAgICAgICAgIGlkbGVDb3VudDogd29ya2VyUHJvcHMubWF4SWRsZUluc3RhbmNlID8/IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IHdvcmtlclByb3BzLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogd29ya2VyUHJvcHMucmVxdWVzdFNwb3RQcmljZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogd29ya2VyUHJvcHMuc3BvdFByaWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHdvcmtlclByb3BzLmluc3RhbmNlVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIGNvbnN0IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyID1cbiAgICAgIFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnUnVubmVyVG9rZW4nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL2dpdGxhYi1ydW5uZXItY2RrL3Rva2VuJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJyxcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICBtYXhCdWlsZHM6IDEwLFxuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICBpZGxlVGltZTogOTAwLFxuICAgICAgICAgIG1hY2hpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgc3BvdFByaWNlOiAwLjA5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLlQzLCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -68,7 +68,7 @@ class RunnerRoles extends constructs_1.Construct {
68
68
  'ecr:GetDownloadUrlForLayer',
69
69
  ],
70
70
  Resource: [
71
- `${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`,
71
+ `arn:aws:ecr:${props.env.region}:${props.env.account}:repository/*`,
72
72
  ],
73
73
  },
74
74
  ],
@@ -349,4 +349,4 @@ class RunnerRoles extends constructs_1.Construct {
349
349
  exports.RunnerRoles = RunnerRoles;
350
350
  _a = JSII_RTTI_SYMBOL_1;
351
351
  RunnerRoles[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RunnerRoles", version: "0.0.0" };
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLGlEQU82QjtBQUM3QiwrQ0FBNEM7QUFDNUMsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUFNM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFFeEMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0saUJBQWlCLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxNQUFNLG1CQUFtQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2pFLElBQUksRUFDSixxQkFBcUIsRUFDckIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUM5Qix5QkFBZSxDQUFDLDZCQUE2QixDQUMzQyxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDSixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQzdDLElBQUksRUFDSixtQkFBbUIsRUFDbkIsMEJBQTBCLENBQUMsV0FBVyxDQUN2QyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FDRixDQUFDO1FB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LEdBQUcsSUFBSSx1QkFBUyxDQUNsRCxLQUFLLEVBQ0wsZ0NBQWdDLEVBQ2hDO1lBQ0UsS0FBSyxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQzdCLFVBQVUsRUFBRSx1Q0FBdUM7U0FDcEQsQ0FDRixDQUFDO1FBQ0YsOEJBQThCLENBQUMsaUJBQWlCLENBQzlDLGdDQUFnQyxDQUNqQyxDQUFDO1FBQ0YsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLHVCQUFTLENBQ2pELEtBQUssRUFDTCwrQkFBK0IsRUFDL0I7WUFDRSxLQUFLLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDNUIsVUFBVSxFQUFFLHNDQUFzQztTQUNuRCxDQUNGLENBQUM7UUFDRiw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FDN0MsK0JBQStCLENBQ2hDLENBQUM7UUFFRixNQUFNLGdDQUFnQyxHQUFHLElBQUksdUJBQVMsQ0FDcEQsS0FBSyxFQUNMLGtDQUFrQyxFQUNsQztZQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSx3Q0FBd0M7U0FDckQsQ0FDRixDQUFDO1FBQ0YsZ0NBQWdDLENBQUMsaUJBQWlCLENBQ2hELGtDQUFrQyxDQUNuQyxDQUFDO1FBQ0YsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLHVCQUFTLENBQ25ELEtBQUssRUFDTCxpQ0FBaUMsRUFDakM7WUFDRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsT0FBTztZQUNoQyxVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQ0YsQ0FBQztRQUNGLCtCQUErQixDQUFDLGlCQUFpQixDQUMvQyxpQ0FBaUMsQ0FDbEMsQ0FBQztJQUNKLENBQUM7O0FBcmJILGtDQXNiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRW52aXJvbm1lbnQsIEZuLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7XG4gIENmblJvbGUsXG4gIE1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lclJvbGVQcm9wcyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBjb25zdHJ1Y3QgcHJvdmlkZXMgYSBzZXQgb2YgYmFzZSByb2xlcyBmb3IgZ2l0bGFiIHJ1bm5lcnMgaW4gb3JkZXIgdG8gYnVpbGQsIHRlc3QsIHZhbGlkYXRlIGFuZCBkZXBsb3kgYXBwbGljYXRpb25zXG4gKiBvbiBSSU8uIFRoZSByb2xlcyBuZWVkIHRvIGJlIGFzc3VtZWQgZHVyaW5nIGpvYiBydW50aW1lIHRvIHBlcmZvcm0gbW9yZSBwZXJtaXNzaXZlIGFjdGlvbnMsIHN1Y2ggYXMgY3JlYXRpbmcgY2VydGlmaWNhdGVzIHRvXG4gKiBhdXRoZW50aWNhdGUgdG93YXJkcyB0aGUgUklPIE1TSywgcHVzaGluZyBkb2NrZXIgaW1hZ2VzIHRvIEVDUiwgcGVyZm9ybWluZyBhIHNlY3JldHMgYmFja3VwLCBkZXBsb3lpbmcgc3RhY2tzLFxuICogb3IgdG8gcHVibGlzaCBhbiBTUEEgdG8gYSBTMyBidWNrZXQuIERvIG5vdCBhc3N1bWUgdGhlIGRlcGxveW1lbnQgcm9sZSB1bmxlc3MgbmVlZGVkLlxuICogVGhlIGJhc2Ugcm9sZSBjYW4gYmUgdGhlIGRlZmF1bHQgcm9sZSBhdHRhY2hlZCB0byBHaXRMYWIgcnVubmVycy5cbiAqIFRoZSByb2xlIGFsbG93cyB0byByZWFkIHZhcmlvdXMgYmFzaWMgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBOSVNUIGRhdGEgbWlycm9yLCB0aGUgT1NTIGxpY2Vuc2UgYnVja2V0LCBEYXRhRG9nIGtleXNcbiAqIGFuZCB0byBwdWxsIEVDUiBpbWFnZXMgZm9ybSBwdWJsaWMgR2FsbGVyeSBvciB0aGUgc3BlY2lmaWVkIGFjY291bnQgaW4gdGhlIGVudmlyb25tZW50LlxuICogVGhlIFJvbGUgQVJOcyBhcmUgZXhwb3J0IHVzaW5nIENGTk91dHB1dHMuIFVzZSB0aGUgb3V0cHV0cyB0byBjb25maWd1cmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHlvdXIgR2l0TGFiIGdyb3VwLlxuICovXG5leHBvcnQgY2xhc3MgUnVubmVyUm9sZXMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBydW5uZXJCYXNlUm9sZTogUm9sZTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IFN0YWNrLCBpZDogc3RyaW5nLCBwcm9wczogUnVubmVyUm9sZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBhY2NvdW50TmFtZVBhcmFtZXRlciA9IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHNjb3BlKTtcbiAgICBjb25zdCB0ZWFtTmFtZVBhcmFtZXRlciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IG5pc3RNaXJyb3JQYXJhbWV0ZXIgPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ05pc3RNaXJyb3JQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvbmlzdC1kYXRhLW1pcnJvci91cmwnLFxuICAgICk7XG5cbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlciA9XG4gICAgICBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9vc3MtbGljZW5zZXMvYnVja2V0LW5hbWUnLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXQnLFxuICAgICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWUsXG4gICAgKTtcblxuICAgIGNvbnN0IGRkQXBpS2V5UGFyYW0gPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ0RhdGFEb2dBcGlLZXlQYXJhbScsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL2FwaS1rZXknLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGRkU2l0ZVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdEYXRhRG9nU2l0ZVBhcmFtJyxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9yaW8vY29uZmlnL2RhdGFkb2ctaW50ZWdyYXRpb24vc2l0ZScsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBrYWZrYUludGVncmF0aW9uUG9saWN5ID0gTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybihcbiAgICAgIHRoaXMsXG4gICAgICAnS2Fma2FJbnRlZ3JhdGlvblBvbGljeScsXG4gICAgICBGbi5pbXBvcnRWYWx1ZSgna2Fma2EtaW50ZWdyYXRpb24tcG9saWN5LWFybicpLFxuICAgICk7XG5cbiAgICB0aGlzLnJ1bm5lckJhc2VSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyQnVpbGRSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nLCB7fSksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBDZGtTeW50aExvb2tVcDogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnczM6Kk9iamVjdCcsICdzMzpMaXN0QnVja2V0JywgJ3MzOkdldEJ1Y2tldExvY2F0aW9uJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjpjZGt0b29sa2l0LSonXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ2Fzc3VtZXJvbGUnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWydzdHM6QXNzdW1lUm9sZScsICdpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstcmVhZE9ubHlSb2xlJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2lkOiAncHVsbEVjckltYWdlcycsXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZVJlcG9zaXRvcmllcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgJHtwcm9wcy5lbnYuYWNjb3VudH0uZGtyLmVjci4ke3Byb3BzLmVudi5yZWdpb259LmFtYXpvbmF3cy5jb20vKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAodGhpcy5ydW5uZXJCYXNlUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckJ1aWxkUm9sZScsXG4gICAgKTtcbiAgICBuaXN0TWlycm9yUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIHRlYW1OYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBkZEFwaUtleVBhcmFtLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBkZFNpdGVQYXJhbS5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgUHVibGljR2FsbGVyeUF1dGhvcml6YXRpb25Ub2tlbi5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG5cbiAgICBjb25zdCB3ZWJDb250ZW50UHVibGlzaFJvbGUgPSBuZXcgUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICAnR2xSdW5uZXJTM1dlYkNvbnRlbnREZXBsb3lSb2xlJyxcbiAgICAgIHtcbiAgICAgICAgcm9sZU5hbWU6ICdnbC1ydW5uZXItd2ViLWNvbnRlbnQtczMtZGVwbG95LXJvbGUnLFxuICAgICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgUHVibGlzaFdlYkNvbnRlbnRPblMzOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICdzMzpBYm9ydConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkRlbGV0ZU9iamVjdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOkxpc3QqJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdExlZ2FsSG9sZCcsXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0UmV0ZW50aW9uJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RUYWdnaW5nJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RWZXJzaW9uVGFnZ2luZycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6KiddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgICAnc3NtOkRlc2NyaWJlUGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpwYXJhbWV0ZXIvc2VjcmV0LypgLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgICh3ZWJDb250ZW50UHVibGlzaFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJTM1dlYkNvbnRlbnREZXBsb3lSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlTVNLQ2VydFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJDcmVhdGVBbmRTaWduQ2VydFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jcmVhdGUtYW5kLXNpZ24tcmlvLW1zay1jZXJ0LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgUGFyYW1ldGVyU3RvcmVSZWFkS2V5U3RvcmU6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpwYXJhbWV0ZXIvY29uZmlnLypgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBTZWNyZXRzTWFuYWdlclJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRSZXNvdXJjZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkxpc3RTZWNyZXRWZXJzaW9uSWRzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9zZWNyZXQvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9jb25maWcvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSxcbiAgICB9KTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoY3JlYXRlTVNLQ2VydFJvbGUpO1xuICAgIHRlYW1OYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICAoY3JlYXRlTVNLQ2VydFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDcmVhdGVBbmRTaWduQ2VydFJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBlY3JEZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWRlcGxveS10by1lY3Itcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBEZXBsb3lUb0VDUjogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICAgICAgICdlY3I6SW5pdGlhdGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpQdXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpVcGxvYWRMYXllclBhcnQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGAke3Byb3BzLmVudi5hY2NvdW50fS5ka3IuZWNyLiR7cHJvcHMuZW52LnJlZ2lvbn0uYW1hem9uYXdzLmNvbS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4uZ3JhbnRSZWFkKGVjckRlcGxveVJvbGUpO1xuICAgIChlY3JEZXBsb3lSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGlhbVBvbGljeUtNUyA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydrbXM6RGVjcnlwdCddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICdhcm46YXdzOmttczoqOjkwMzQwNDM4NjU1MDprZXkvKicsXG4gICAgICAgIGBhcm46YXdzOmttczoqOiR7cHJvcHMuZW52LmFjY291bnR9OmtleS8qYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICdrbXM6UmVzb3VyY2VBbGlhc2VzJzogJ2FsaWFzL3Jpby1sei1iYWNrdXAta2V5KicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czpsYW1iZGE6ZXUtd2VzdC0xOiR7cHJvcHMuZW52LmFjY291bnR9OmZ1bmN0aW9uOlNlY3JldHNSZXN0b3JlSGFuZGxlcmAsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3JldHNCYWNrVXBSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyU2VjcmV0c0JhY2t1cFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1zZWNyZXRzLWJhY2t1cC1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFNlY3JldHNCYWNrdXA6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW2lhbVBvbGljeUtNUywgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIChzZWNyZXRzQmFja1VwUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclNlY3JldHNCYWNrdXBSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgZGVwbG95Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNES0RlcGxveVJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBba2Fma2FJbnRlZ3JhdGlvblBvbGljeV0sIC8vIHJlcXVpcmVkIHRvIGNyZWF0ZSBLYWZrYSB0b3BpY3MgYW5kIHB1Ymxpc2ggZXZlbnQgc3BlY2lmaWNhdGlvbiBpbiBkZXBsb3kgam9ic1xuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RXhlY3V0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tFdmVudHMnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpHZXRUZW1wbGF0ZScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzdGFjay8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1kZXBsb3ktcm9sZS0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWZpbGUtcHVibGlzaGluZy0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICAgQ2ZuRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWycqJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzdGFjay8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgQ29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgICAgJ0ZvckFueVZhbHVlOlN0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgICAgICAgICAgICdhd3M6Q2FsbGVkVmlhJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAoZGVwbG95Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGRlcGxveVJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95Um9sZUFybicpO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBkZXBsb3lSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJyk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGNyZWF0ZU1TS0NlcnRSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1jcmVhdGUtYW5kLXNpZ24tbXNrLWNlcnQtcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGNyZWF0ZU1TS0NlcnRSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWNyZWF0ZS1hbmQtc2lnbi1tc2stY2VydC1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstcHVibGlzaC13ZWItY29udGVudC1vbi1zMy1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXB1Ymxpc2gtd2ViLWNvbnRlbnQtb24tczMtcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBlY3JEZXBsb3lSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktdG8tZWNyLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBlY3JEZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlQXJuJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogc2VjcmV0c0JhY2tVcFJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXNlY3JldHMtYmFja3VwLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHNlY3JldHNCYWNrVXBSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXNlY3JldHMtYmFja3VwLXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVBcm4nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLGlEQU82QjtBQUM3QiwrQ0FBNEM7QUFDNUMsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUFNM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFFeEMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0saUJBQWlCLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxNQUFNLG1CQUFtQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2pFLElBQUksRUFDSixxQkFBcUIsRUFDckIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUM5Qix5QkFBZSxDQUFDLDZCQUE2QixDQUMzQyxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDSixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQzdDLElBQUksRUFDSixtQkFBbUIsRUFDbkIsMEJBQTBCLENBQUMsV0FBVyxDQUN2QyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FDRixDQUFDO1FB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QUFHLElBQUksdUJBQVMsQ0FDbEQsS0FBSyxFQUNMLGdDQUFnQyxFQUNoQztZQUNFLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQ0YsQ0FBQztRQUNGLDhCQUE4QixDQUFDLGlCQUFpQixDQUM5QyxnQ0FBZ0MsQ0FDakMsQ0FBQztRQUNGLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSx1QkFBUyxDQUNqRCxLQUFLLEVBQ0wsK0JBQStCLEVBQy9CO1lBQ0UsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1lBQzVCLFVBQVUsRUFBRSxzQ0FBc0M7U0FDbkQsQ0FDRixDQUFDO1FBQ0YsNkJBQTZCLENBQUMsaUJBQWlCLENBQzdDLCtCQUErQixDQUNoQyxDQUFDO1FBRUYsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLHVCQUFTLENBQ3BELEtBQUssRUFDTCxrQ0FBa0MsRUFDbEM7WUFDRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNqQyxVQUFVLEVBQUUsd0NBQXdDO1NBQ3JELENBQ0YsQ0FBQztRQUNGLGdDQUFnQyxDQUFDLGlCQUFpQixDQUNoRCxrQ0FBa0MsQ0FDbkMsQ0FBQztRQUNGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSx1QkFBUyxDQUNuRCxLQUFLLEVBQ0wsaUNBQWlDLEVBQ2pDO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDaEMsVUFBVSxFQUFFLHVDQUF1QztTQUNwRCxDQUNGLENBQUM7UUFDRiwrQkFBK0IsQ0FBQyxpQkFBaUIsQ0FDL0MsaUNBQWlDLENBQ2xDLENBQUM7SUFDSixDQUFDOztBQXJiSCxrQ0FzYkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIEVudmlyb25tZW50LCBGbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQge1xuICBDZm5Sb2xlLFxuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi8uLi8uLi9yaW8tbGFuZGluZy16b25lJztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJSb2xlUHJvcHMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgc2V0IG9mIGJhc2Ugcm9sZXMgZm9yIGdpdGxhYiBydW5uZXJzIGluIG9yZGVyIHRvIGJ1aWxkLCB0ZXN0LCB2YWxpZGF0ZSBhbmQgZGVwbG95IGFwcGxpY2F0aW9uc1xuICogb24gUklPLiBUaGUgcm9sZXMgbmVlZCB0byBiZSBhc3N1bWVkIGR1cmluZyBqb2IgcnVudGltZSB0byBwZXJmb3JtIG1vcmUgcGVybWlzc2l2ZSBhY3Rpb25zLCBzdWNoIGFzIGNyZWF0aW5nIGNlcnRpZmljYXRlcyB0b1xuICogYXV0aGVudGljYXRlIHRvd2FyZHMgdGhlIFJJTyBNU0ssIHB1c2hpbmcgZG9ja2VyIGltYWdlcyB0byBFQ1IsIHBlcmZvcm1pbmcgYSBzZWNyZXRzIGJhY2t1cCwgZGVwbG95aW5nIHN0YWNrcyxcbiAqIG9yIHRvIHB1Ymxpc2ggYW4gU1BBIHRvIGEgUzMgYnVja2V0LiBEbyBub3QgYXNzdW1lIHRoZSBkZXBsb3ltZW50IHJvbGUgdW5sZXNzIG5lZWRlZC5cbiAqIFRoZSBiYXNlIHJvbGUgY2FuIGJlIHRoZSBkZWZhdWx0IHJvbGUgYXR0YWNoZWQgdG8gR2l0TGFiIHJ1bm5lcnMuXG4gKiBUaGUgcm9sZSBhbGxvd3MgdG8gcmVhZCB2YXJpb3VzIGJhc2ljIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgTklTVCBkYXRhIG1pcnJvciwgdGhlIE9TUyBsaWNlbnNlIGJ1Y2tldCwgRGF0YURvZyBrZXlzXG4gKiBhbmQgdG8gcHVsbCBFQ1IgaW1hZ2VzIGZvcm0gcHVibGljIEdhbGxlcnkgb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50IGluIHRoZSBlbnZpcm9ubWVudC5cbiAqIFRoZSBSb2xlIEFSTnMgYXJlIGV4cG9ydCB1c2luZyBDRk5PdXRwdXRzLiBVc2UgdGhlIG91dHB1dHMgdG8gY29uZmlndXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB5b3VyIEdpdExhYiBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclJvbGVzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcnVubmVyQmFzZVJvbGU6IFJvbGU7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bm5lclJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcihzY29wZSk7XG4gICAgY29uc3QgdGVhbU5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcihzY29wZSk7XG5cbiAgICBjb25zdCBuaXN0TWlycm9yUGFyYW1ldGVyID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdOaXN0TWlycm9yUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICApO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnT3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG5cbiAgICBjb25zdCBkZEFwaUtleVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdEYXRhRG9nQXBpS2V5UGFyYW0nLFxuICAgICAge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL3Jpby9jb25maWcvZGF0YWRvZy1pbnRlZ3JhdGlvbi9hcGkta2V5JyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBkZFNpdGVQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICAnRGF0YURvZ1NpdGVQYXJhbScsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL3NpdGUnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qga2Fma2FJbnRlZ3JhdGlvblBvbGljeSA9IE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4oXG4gICAgICB0aGlzLFxuICAgICAgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knLFxuICAgICAgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSxcbiAgICApO1xuXG4gICAgdGhpcy5ydW5uZXJCYXNlUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckJ1aWxkUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJywge30pLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrU3ludGhMb29rVXA6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0qJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ3B1bGxFY3JJbWFnZXMnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cmVwb3NpdG9yeS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgICh0aGlzLnJ1bm5lckJhc2VSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQnVpbGRSb2xlJyxcbiAgICApO1xuICAgIG5pc3RNaXJyb3JQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkQXBpS2V5UGFyYW0uZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkU2l0ZVBhcmFtLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcblxuICAgIGNvbnN0IHdlYkNvbnRlbnRQdWJsaXNoUm9sZSA9IG5ldyBSb2xlKFxuICAgICAgdGhpcyxcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICAge1xuICAgICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci13ZWItY29udGVudC1zMy1kZXBsb3ktcm9sZScsXG4gICAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBQdWJsaXNoV2ViQ29udGVudE9uUzM6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICAgJ3MzOkFib3J0KicsXG4gICAgICAgICAgICAgICAgICAnczM6RGVsZXRlT2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0QnVja2V0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6TGlzdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0TGVnYWxIb2xkJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RSZXRlbnRpb24nLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFRhZ2dpbmcnLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFZlcnNpb25UYWdnaW5nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjoqJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVySGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL2NvbmZpZy8qYCxcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgKHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBjcmVhdGVNU0tDZXJ0Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNyZWF0ZS1hbmQtc2lnbi1yaW8tbXNrLWNlcnQtcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBQYXJhbWV0ZXJTdG9yZVJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpEZXNjcmliZVBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL3NlY3JldC8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICAgIFNlY3JldHNNYW5hZ2VyUmVhZEtleVN0b3JlOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFJlc291cmNlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6TGlzdFNlY3JldFZlcnNpb25JZHMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovc2VjcmV0Lyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovY29uZmlnLyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2thZmthSW50ZWdyYXRpb25Qb2xpY3ldLFxuICAgIH0pO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChjcmVhdGVNU0tDZXJ0Um9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIChjcmVhdGVNU0tDZXJ0Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGVjckRlcGxveVJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJywge1xuICAgICAgcm9sZU5hbWU6ICdnbC1ydW5uZXItZGVwbG95LXRvLWVjci1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIERlcGxveVRvRUNSOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNvbXBsZXRlTGF5ZXJVcGxvYWQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYCR7cHJvcHMuZW52LmFjY291bnR9LmRrci5lY3IuJHtwcm9wcy5lbnYucmVnaW9ufS5hbWF6b25hd3MuY29tLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgUHVibGljR2FsbGVyeUF1dGhvcml6YXRpb25Ub2tlbi5ncmFudFJlYWQoZWNyRGVwbG95Um9sZSk7XG4gICAgKGVjckRlcGxveVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgaWFtUG9saWN5S01TID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgJ2Fybjphd3M6a21zOio6OTAzNDA0Mzg2NTUwOmtleS8qJyxcbiAgICAgICAgYGFybjphd3M6a21zOio6JHtwcm9wcy5lbnYuYWNjb3VudH06a2V5LypgLFxuICAgICAgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgJ0ZvckFueVZhbHVlOlN0cmluZ0xpa2UnOiB7XG4gICAgICAgICAgJ2ttczpSZXNvdXJjZUFsaWFzZXMnOiAnYWxpYXMvcmlvLWx6LWJhY2t1cC1rZXkqJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VGdW5jdGlvbiddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmxhbWJkYTpldS13ZXN0LTE6JHtwcm9wcy5lbnYuYWNjb3VudH06ZnVuY3Rpb246U2VjcmV0c1Jlc3RvcmVIYW5kbGVyYCxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3Qgc2VjcmV0c0JhY2tVcFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJTZWNyZXRzQmFja3VwUm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLXNlY3JldHMtYmFja3VwLXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgU2VjcmV0c0JhY2t1cDogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbaWFtUG9saWN5S01TLCBpYW1Qb2xpY3lMYW1iZGFFeGVjdXRpb25dLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKHNlY3JldHNCYWNrVXBSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyU2VjcmV0c0JhY2t1cFJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBkZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSwgLy8gcmVxdWlyZWQgdG8gY3JlYXRlIEthZmthIHRvcGljcyBhbmQgcHVibGlzaCBldmVudCBzcGVjaWZpY2F0aW9uIGluIGRlcGxveSBqb2JzXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBDZGtEZXBsb3k6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja0V2ZW50cycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkdldFRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnN0YWNrLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnczM6Kk9iamVjdCcsICdzMzpMaXN0QnVja2V0JywgJ3MzOkdldEJ1Y2tldExvY2F0aW9uJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjpjZGt0b29sa2l0LSonXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ2Fzc3VtZXJvbGUnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWydzdHM6QXNzdW1lUm9sZScsICdpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstcmVhZE9ubHlSb2xlJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWRlcGxveS1yb2xlLSonLFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtZmlsZS1wdWJsaXNoaW5nLSonLFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBDZm5EZXBsb3k6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJyonXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnN0YWNrLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBDb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICAnRm9yQW55VmFsdWU6U3RyaW5nRXF1YWxzJzoge1xuICAgICAgICAgICAgICAgICAgJ2F3czpDYWxsZWRWaWEnOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIChkZXBsb3lSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogZGVwbG95Um9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtEZXBsb3lSb2xlQXJuJyk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGRlcGxveVJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95Um9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95Um9sZU5hbWUnKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogY3JlYXRlTVNLQ2VydFJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWNyZWF0ZS1hbmQtc2lnbi1tc2stY2VydC1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogY3JlYXRlTVNLQ2VydFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstY3JlYXRlLWFuZC1zaWduLW1zay1jZXJ0LXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybicsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1wdWJsaXNoLXdlYi1jb250ZW50LW9uLXMzLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB3ZWJDb250ZW50UHVibGlzaFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstcHVibGlzaC13ZWItY29udGVudC1vbi1zMy1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGVjckRlcGxveVJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGVjckRlcGxveVJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXRvLWVjci1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBzZWNyZXRzQmFja1VwUm9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstc2VjcmV0cy1iYWNrdXAtcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogc2VjcmV0c0JhY2tVcFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstc2VjcmV0cy1iYWNrdXAtcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZUFybicsXG4gICAgKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "6.2.2",
18
+ "version": "6.3.1",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "exports": {
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "6.2.2"
2
+ "version": "6.3.1"
3
3
  }