@taimos/projen 0.1.83 → 0.1.84
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 +56 -31
- package/API.md +35 -4
- package/lib/components/amplify-deploy.js +1 -1
- package/lib/components/production-release.js +1 -1
- package/lib/projects/cdk-app.js +1 -1
- package/lib/projects/cdk-construct.js +1 -1
- package/lib/projects/monorepo.d.ts +24 -4
- package/lib/projects/monorepo.js +24 -8
- package/lib/projects/private-cdk-app.js +1 -1
- package/lib/projects/private-ts-lib.js +1 -1
- package/lib/projects/prod-cdk-app.js +1 -1
- package/lib/projects/ts-lib.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -984,7 +984,7 @@
|
|
|
984
984
|
"kind": "interface",
|
|
985
985
|
"locationInModule": {
|
|
986
986
|
"filename": "src/projects/monorepo.ts",
|
|
987
|
-
"line":
|
|
987
|
+
"line": 150
|
|
988
988
|
},
|
|
989
989
|
"name": "MonorepoApproverMapping",
|
|
990
990
|
"properties": [
|
|
@@ -997,7 +997,7 @@
|
|
|
997
997
|
"immutable": true,
|
|
998
998
|
"locationInModule": {
|
|
999
999
|
"filename": "src/projects/monorepo.ts",
|
|
1000
|
-
"line":
|
|
1000
|
+
"line": 159
|
|
1001
1001
|
},
|
|
1002
1002
|
"name": "approvers",
|
|
1003
1003
|
"type": {
|
|
@@ -1018,7 +1018,7 @@
|
|
|
1018
1018
|
"immutable": true,
|
|
1019
1019
|
"locationInModule": {
|
|
1020
1020
|
"filename": "src/projects/monorepo.ts",
|
|
1021
|
-
"line":
|
|
1021
|
+
"line": 154
|
|
1022
1022
|
},
|
|
1023
1023
|
"name": "author",
|
|
1024
1024
|
"type": {
|
|
@@ -1046,7 +1046,7 @@
|
|
|
1046
1046
|
},
|
|
1047
1047
|
"locationInModule": {
|
|
1048
1048
|
"filename": "src/projects/monorepo.ts",
|
|
1049
|
-
"line":
|
|
1049
|
+
"line": 317
|
|
1050
1050
|
},
|
|
1051
1051
|
"parameters": [
|
|
1052
1052
|
{
|
|
@@ -1060,20 +1060,43 @@
|
|
|
1060
1060
|
"kind": "class",
|
|
1061
1061
|
"locationInModule": {
|
|
1062
1062
|
"filename": "src/projects/monorepo.ts",
|
|
1063
|
-
"line":
|
|
1063
|
+
"line": 282
|
|
1064
1064
|
},
|
|
1065
1065
|
"name": "MonorepoProject",
|
|
1066
1066
|
"properties": [
|
|
1067
1067
|
{
|
|
1068
|
+
"const": true,
|
|
1068
1069
|
"docs": {
|
|
1070
|
+
"remarks": "A consumer's\n`workspaceOptions.minimumReleaseAgeExclude` is merged on top of this list.",
|
|
1069
1071
|
"stability": "stable",
|
|
1070
|
-
"summary": "
|
|
1072
|
+
"summary": "Packages exempt from `minimumReleaseAge` by default so our own build tooling can update without the cooldown."
|
|
1071
1073
|
},
|
|
1072
1074
|
"immutable": true,
|
|
1073
1075
|
"locationInModule": {
|
|
1074
1076
|
"filename": "src/projects/monorepo.ts",
|
|
1075
1077
|
"line": 289
|
|
1076
1078
|
},
|
|
1079
|
+
"name": "DEFAULT_RELEASE_AGE_EXCLUDE",
|
|
1080
|
+
"static": true,
|
|
1081
|
+
"type": {
|
|
1082
|
+
"collection": {
|
|
1083
|
+
"elementtype": {
|
|
1084
|
+
"primitive": "string"
|
|
1085
|
+
},
|
|
1086
|
+
"kind": "array"
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"docs": {
|
|
1092
|
+
"stability": "stable",
|
|
1093
|
+
"summary": "The default release branch (promoted by the production release workflow)."
|
|
1094
|
+
},
|
|
1095
|
+
"immutable": true,
|
|
1096
|
+
"locationInModule": {
|
|
1097
|
+
"filename": "src/projects/monorepo.ts",
|
|
1098
|
+
"line": 315
|
|
1099
|
+
},
|
|
1077
1100
|
"name": "defaultReleaseBranch",
|
|
1078
1101
|
"type": {
|
|
1079
1102
|
"primitive": "string"
|
|
@@ -1087,7 +1110,7 @@
|
|
|
1087
1110
|
"immutable": true,
|
|
1088
1111
|
"locationInModule": {
|
|
1089
1112
|
"filename": "src/projects/monorepo.ts",
|
|
1090
|
-
"line":
|
|
1113
|
+
"line": 300
|
|
1091
1114
|
},
|
|
1092
1115
|
"name": "prBuildWorkflow",
|
|
1093
1116
|
"type": {
|
|
@@ -1102,7 +1125,7 @@
|
|
|
1102
1125
|
"immutable": true,
|
|
1103
1126
|
"locationInModule": {
|
|
1104
1127
|
"filename": "src/projects/monorepo.ts",
|
|
1105
|
-
"line":
|
|
1128
|
+
"line": 297
|
|
1106
1129
|
},
|
|
1107
1130
|
"name": "workspaceFile",
|
|
1108
1131
|
"type": {
|
|
@@ -1117,7 +1140,7 @@
|
|
|
1117
1140
|
"immutable": true,
|
|
1118
1141
|
"locationInModule": {
|
|
1119
1142
|
"filename": "src/projects/monorepo.ts",
|
|
1120
|
-
"line":
|
|
1143
|
+
"line": 312
|
|
1121
1144
|
},
|
|
1122
1145
|
"name": "amplifyDeploy",
|
|
1123
1146
|
"optional": true,
|
|
@@ -1133,7 +1156,7 @@
|
|
|
1133
1156
|
"immutable": true,
|
|
1134
1157
|
"locationInModule": {
|
|
1135
1158
|
"filename": "src/projects/monorepo.ts",
|
|
1136
|
-
"line":
|
|
1159
|
+
"line": 303
|
|
1137
1160
|
},
|
|
1138
1161
|
"name": "amplifyFile",
|
|
1139
1162
|
"optional": true,
|
|
@@ -1149,7 +1172,7 @@
|
|
|
1149
1172
|
"immutable": true,
|
|
1150
1173
|
"locationInModule": {
|
|
1151
1174
|
"filename": "src/projects/monorepo.ts",
|
|
1152
|
-
"line":
|
|
1175
|
+
"line": 306
|
|
1153
1176
|
},
|
|
1154
1177
|
"name": "assignApprover",
|
|
1155
1178
|
"optional": true,
|
|
@@ -1165,7 +1188,7 @@
|
|
|
1165
1188
|
"immutable": true,
|
|
1166
1189
|
"locationInModule": {
|
|
1167
1190
|
"filename": "src/projects/monorepo.ts",
|
|
1168
|
-
"line":
|
|
1191
|
+
"line": 309
|
|
1169
1192
|
},
|
|
1170
1193
|
"name": "productionRelease",
|
|
1171
1194
|
"optional": true,
|
|
@@ -1189,7 +1212,7 @@
|
|
|
1189
1212
|
"kind": "interface",
|
|
1190
1213
|
"locationInModule": {
|
|
1191
1214
|
"filename": "src/projects/monorepo.ts",
|
|
1192
|
-
"line":
|
|
1215
|
+
"line": 162
|
|
1193
1216
|
},
|
|
1194
1217
|
"name": "MonorepoProjectOptions",
|
|
1195
1218
|
"properties": [
|
|
@@ -1204,7 +1227,7 @@
|
|
|
1204
1227
|
"immutable": true,
|
|
1205
1228
|
"locationInModule": {
|
|
1206
1229
|
"filename": "src/projects/monorepo.ts",
|
|
1207
|
-
"line":
|
|
1230
|
+
"line": 237
|
|
1208
1231
|
},
|
|
1209
1232
|
"name": "amplifyApps",
|
|
1210
1233
|
"optional": true,
|
|
@@ -1228,7 +1251,7 @@
|
|
|
1228
1251
|
"immutable": true,
|
|
1229
1252
|
"locationInModule": {
|
|
1230
1253
|
"filename": "src/projects/monorepo.ts",
|
|
1231
|
-
"line":
|
|
1254
|
+
"line": 266
|
|
1232
1255
|
},
|
|
1233
1256
|
"name": "amplifyDeployOptions",
|
|
1234
1257
|
"optional": true,
|
|
@@ -1247,7 +1270,7 @@
|
|
|
1247
1270
|
"immutable": true,
|
|
1248
1271
|
"locationInModule": {
|
|
1249
1272
|
"filename": "src/projects/monorepo.ts",
|
|
1250
|
-
"line":
|
|
1273
|
+
"line": 202
|
|
1251
1274
|
},
|
|
1252
1275
|
"name": "approverMapping",
|
|
1253
1276
|
"optional": true,
|
|
@@ -1270,7 +1293,7 @@
|
|
|
1270
1293
|
"immutable": true,
|
|
1271
1294
|
"locationInModule": {
|
|
1272
1295
|
"filename": "src/projects/monorepo.ts",
|
|
1273
|
-
"line":
|
|
1296
|
+
"line": 194
|
|
1274
1297
|
},
|
|
1275
1298
|
"name": "assignApprover",
|
|
1276
1299
|
"optional": true,
|
|
@@ -1288,7 +1311,7 @@
|
|
|
1288
1311
|
"immutable": true,
|
|
1289
1312
|
"locationInModule": {
|
|
1290
1313
|
"filename": "src/projects/monorepo.ts",
|
|
1291
|
-
"line":
|
|
1314
|
+
"line": 187
|
|
1292
1315
|
},
|
|
1293
1316
|
"name": "cdkServerless",
|
|
1294
1317
|
"optional": true,
|
|
@@ -1307,7 +1330,7 @@
|
|
|
1307
1330
|
"immutable": true,
|
|
1308
1331
|
"locationInModule": {
|
|
1309
1332
|
"filename": "src/projects/monorepo.ts",
|
|
1310
|
-
"line":
|
|
1333
|
+
"line": 210
|
|
1311
1334
|
},
|
|
1312
1335
|
"name": "defaultApprovers",
|
|
1313
1336
|
"optional": true,
|
|
@@ -1330,7 +1353,7 @@
|
|
|
1330
1353
|
"immutable": true,
|
|
1331
1354
|
"locationInModule": {
|
|
1332
1355
|
"filename": "src/projects/monorepo.ts",
|
|
1333
|
-
"line":
|
|
1356
|
+
"line": 175
|
|
1334
1357
|
},
|
|
1335
1358
|
"name": "nodeVersion",
|
|
1336
1359
|
"optional": true,
|
|
@@ -1348,7 +1371,7 @@
|
|
|
1348
1371
|
"immutable": true,
|
|
1349
1372
|
"locationInModule": {
|
|
1350
1373
|
"filename": "src/projects/monorepo.ts",
|
|
1351
|
-
"line":
|
|
1374
|
+
"line": 168
|
|
1352
1375
|
},
|
|
1353
1376
|
"name": "pnpmWorkspaceVersion",
|
|
1354
1377
|
"optional": true,
|
|
@@ -1366,7 +1389,7 @@
|
|
|
1366
1389
|
"immutable": true,
|
|
1367
1390
|
"locationInModule": {
|
|
1368
1391
|
"filename": "src/projects/monorepo.ts",
|
|
1369
|
-
"line":
|
|
1392
|
+
"line": 245
|
|
1370
1393
|
},
|
|
1371
1394
|
"name": "productionRelease",
|
|
1372
1395
|
"optional": true,
|
|
@@ -1385,7 +1408,7 @@
|
|
|
1385
1408
|
"immutable": true,
|
|
1386
1409
|
"locationInModule": {
|
|
1387
1410
|
"filename": "src/projects/monorepo.ts",
|
|
1388
|
-
"line":
|
|
1411
|
+
"line": 253
|
|
1389
1412
|
},
|
|
1390
1413
|
"name": "productionReleaseOptions",
|
|
1391
1414
|
"optional": true,
|
|
@@ -1396,14 +1419,15 @@
|
|
|
1396
1419
|
{
|
|
1397
1420
|
"abstract": true,
|
|
1398
1421
|
"docs": {
|
|
1399
|
-
"default": "
|
|
1422
|
+
"default": "false",
|
|
1423
|
+
"remarks": "Each projen sub-project's own `build` task already runs its `test` sub-task\n(pre-compile → compile → post-compile → test → package), so `pnpm -r run\nbuild` already runs every projen package's jest + eslint. Enabling this adds\na second full run — including the expensive CDK synths — roughly doubling CI.\n\nCaveat: with this off, a hand-managed (non-projen) package is only tested in\nCI if its own `build` script runs its checks (e.g. `tsc && jest`,\n`eslint . && vitest run && next build`). Make each hand-managed package's\nbuild self-contain its verification so `pnpm -r run build` stays the single\ngate.",
|
|
1400
1424
|
"stability": "stable",
|
|
1401
|
-
"summary": "Whether the unified build workflow also runs `pnpm -r run test
|
|
1425
|
+
"summary": "Whether the unified build workflow also runs a separate `pnpm -r run test` step."
|
|
1402
1426
|
},
|
|
1403
1427
|
"immutable": true,
|
|
1404
1428
|
"locationInModule": {
|
|
1405
1429
|
"filename": "src/projects/monorepo.ts",
|
|
1406
|
-
"line":
|
|
1430
|
+
"line": 229
|
|
1407
1431
|
},
|
|
1408
1432
|
"name": "runTestsInBuild",
|
|
1409
1433
|
"optional": true,
|
|
@@ -1420,7 +1444,7 @@
|
|
|
1420
1444
|
"immutable": true,
|
|
1421
1445
|
"locationInModule": {
|
|
1422
1446
|
"filename": "src/projects/monorepo.ts",
|
|
1423
|
-
"line":
|
|
1447
|
+
"line": 180
|
|
1424
1448
|
},
|
|
1425
1449
|
"name": "workspaceOptions",
|
|
1426
1450
|
"optional": true,
|
|
@@ -1491,14 +1515,15 @@
|
|
|
1491
1515
|
{
|
|
1492
1516
|
"abstract": true,
|
|
1493
1517
|
"docs": {
|
|
1494
|
-
"default": "[
|
|
1518
|
+
"default": "[] // merged with DEFAULT_RELEASE_AGE_EXCLUDE",
|
|
1519
|
+
"remarks": "MERGED on top of the built-in defaults\n(`projen-pipelines`, `cdk-serverless`, `@taimos/projen`, `projen`) and\ndeduped — supplying this does not drop the tooling exemptions.",
|
|
1495
1520
|
"stability": "stable",
|
|
1496
1521
|
"summary": "Packages exempt from `minimumReleaseAge` so our own tooling can update without the cooldown."
|
|
1497
1522
|
},
|
|
1498
1523
|
"immutable": true,
|
|
1499
1524
|
"locationInModule": {
|
|
1500
1525
|
"filename": "src/projects/monorepo.ts",
|
|
1501
|
-
"line":
|
|
1526
|
+
"line": 144
|
|
1502
1527
|
},
|
|
1503
1528
|
"name": "minimumReleaseAgeExclude",
|
|
1504
1529
|
"optional": true,
|
|
@@ -2152,6 +2177,6 @@
|
|
|
2152
2177
|
"symbolId": "src/projects/ts-lib:TaimosTypescriptLibraryOptions"
|
|
2153
2178
|
}
|
|
2154
2179
|
},
|
|
2155
|
-
"version": "0.1.
|
|
2156
|
-
"fingerprint": "
|
|
2180
|
+
"version": "0.1.84",
|
|
2181
|
+
"fingerprint": "IHUmLsSutyJApGXBQN3P70m0oh6BeoGLegfJcSxp1Hw="
|
|
2157
2182
|
}
|
package/API.md
CHANGED
|
@@ -2031,6 +2031,7 @@ The production release workflow, if enabled.
|
|
|
2031
2031
|
| --- | --- | --- |
|
|
2032
2032
|
| <code><a href="#@taimos/projen.MonorepoProject.property.DEFAULT_TASK">DEFAULT_TASK</a></code> | <code>string</code> | The name of the default task (the task executed when `projen` is run without arguments). |
|
|
2033
2033
|
| <code><a href="#@taimos/projen.MonorepoProject.property.DEFAULT_TS_JEST_TRANFORM_PATTERN">DEFAULT_TS_JEST_TRANFORM_PATTERN</a></code> | <code>string</code> | *No description.* |
|
|
2034
|
+
| <code><a href="#@taimos/projen.MonorepoProject.property.DEFAULT_RELEASE_AGE_EXCLUDE">DEFAULT_RELEASE_AGE_EXCLUDE</a></code> | <code>string[]</code> | Packages exempt from `minimumReleaseAge` by default so our own build tooling can update without the cooldown. |
|
|
2034
2035
|
|
|
2035
2036
|
---
|
|
2036
2037
|
|
|
@@ -2059,6 +2060,21 @@ public readonly DEFAULT_TS_JEST_TRANFORM_PATTERN: string;
|
|
|
2059
2060
|
|
|
2060
2061
|
---
|
|
2061
2062
|
|
|
2063
|
+
##### `DEFAULT_RELEASE_AGE_EXCLUDE`<sup>Required</sup> <a name="DEFAULT_RELEASE_AGE_EXCLUDE" id="@taimos/projen.MonorepoProject.property.DEFAULT_RELEASE_AGE_EXCLUDE"></a>
|
|
2064
|
+
|
|
2065
|
+
```typescript
|
|
2066
|
+
public readonly DEFAULT_RELEASE_AGE_EXCLUDE: string[];
|
|
2067
|
+
```
|
|
2068
|
+
|
|
2069
|
+
- *Type:* string[]
|
|
2070
|
+
|
|
2071
|
+
Packages exempt from `minimumReleaseAge` by default so our own build tooling can update without the cooldown.
|
|
2072
|
+
|
|
2073
|
+
A consumer's
|
|
2074
|
+
`workspaceOptions.minimumReleaseAgeExclude` is merged on top of this list.
|
|
2075
|
+
|
|
2076
|
+
---
|
|
2077
|
+
|
|
2062
2078
|
### PrivateTaimosCdkApp <a name="PrivateTaimosCdkApp" id="@taimos/projen.PrivateTaimosCdkApp"></a>
|
|
2063
2079
|
|
|
2064
2080
|
Private AWS CDK app in TypeScript.
|
|
@@ -11403,7 +11419,7 @@ const monorepoProjectOptions: MonorepoProjectOptions = { ... }
|
|
|
11403
11419
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.pnpmWorkspaceVersion">pnpmWorkspaceVersion</a></code> | <code>string</code> | The pnpm version pinned for the workspace and CI. |
|
|
11404
11420
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.productionRelease">productionRelease</a></code> | <code>boolean</code> | Whether to add a manual "Production Release" workflow that promotes a branch to the production branch (see `GitHubProductionRelease`). |
|
|
11405
11421
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.productionReleaseOptions">productionReleaseOptions</a></code> | <code><a href="#@taimos/projen.GitHubProductionReleaseOptions">GitHubProductionReleaseOptions</a></code> | Options for the production release workflow. |
|
|
11406
|
-
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.runTestsInBuild">runTestsInBuild</a></code> | <code>boolean</code> | Whether the unified build workflow also runs `pnpm -r run test
|
|
11422
|
+
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.runTestsInBuild">runTestsInBuild</a></code> | <code>boolean</code> | Whether the unified build workflow also runs a separate `pnpm -r run test` step. |
|
|
11407
11423
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.workspaceOptions">workspaceOptions</a></code> | <code><a href="#@taimos/projen.MonorepoWorkspaceOptions">MonorepoWorkspaceOptions</a></code> | PNPM workspace tuning for the generated `pnpm-workspace.yaml`. |
|
|
11408
11424
|
|
|
11409
11425
|
---
|
|
@@ -13743,9 +13759,20 @@ public readonly runTestsInBuild: boolean;
|
|
|
13743
13759
|
```
|
|
13744
13760
|
|
|
13745
13761
|
- *Type:* boolean
|
|
13746
|
-
- *Default:*
|
|
13762
|
+
- *Default:* false
|
|
13747
13763
|
|
|
13748
|
-
Whether the unified build workflow also runs `pnpm -r run test
|
|
13764
|
+
Whether the unified build workflow also runs a separate `pnpm -r run test` step.
|
|
13765
|
+
|
|
13766
|
+
Each projen sub-project's own `build` task already runs its `test` sub-task
|
|
13767
|
+
(pre-compile → compile → post-compile → test → package), so `pnpm -r run
|
|
13768
|
+
build` already runs every projen package's jest + eslint. Enabling this adds
|
|
13769
|
+
a second full run — including the expensive CDK synths — roughly doubling CI.
|
|
13770
|
+
|
|
13771
|
+
Caveat: with this off, a hand-managed (non-projen) package is only tested in
|
|
13772
|
+
CI if its own `build` script runs its checks (e.g. `tsc && jest`,
|
|
13773
|
+
`eslint . && vitest run && next build`). Make each hand-managed package's
|
|
13774
|
+
build self-contain its verification so `pnpm -r run build` stays the single
|
|
13775
|
+
gate.
|
|
13749
13776
|
|
|
13750
13777
|
---
|
|
13751
13778
|
|
|
@@ -13822,10 +13849,14 @@ public readonly minimumReleaseAgeExclude: string[];
|
|
|
13822
13849
|
```
|
|
13823
13850
|
|
|
13824
13851
|
- *Type:* string[]
|
|
13825
|
-
- *Default:* [
|
|
13852
|
+
- *Default:* [] // merged with DEFAULT_RELEASE_AGE_EXCLUDE
|
|
13826
13853
|
|
|
13827
13854
|
Packages exempt from `minimumReleaseAge` so our own tooling can update without the cooldown.
|
|
13828
13855
|
|
|
13856
|
+
MERGED on top of the built-in defaults
|
|
13857
|
+
(`projen-pipelines`, `cdk-serverless`, `@taimos/projen`, `projen`) and
|
|
13858
|
+
deduped — supplying this does not drop the tooling exemptions.
|
|
13859
|
+
|
|
13829
13860
|
---
|
|
13830
13861
|
|
|
13831
13862
|
##### `overrides`<sup>Optional</sup> <a name="overrides" id="@taimos/projen.MonorepoWorkspaceOptions.property.overrides"></a>
|
|
@@ -43,7 +43,7 @@ const DEFAULT_SHARED_BUILD_PATHS = [
|
|
|
43
43
|
* assume-role or parameter-read step rather than skipping a deploy.
|
|
44
44
|
*/
|
|
45
45
|
class GitHubAmplifyDeploy extends projen_1.Component {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubAmplifyDeploy", version: "0.1.
|
|
46
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubAmplifyDeploy", version: "0.1.84" };
|
|
47
47
|
/** The generated deploy workflows, one per app. */
|
|
48
48
|
workflows = [];
|
|
49
49
|
/** Name of the IAM role CI chains into, in every stage account. */
|
|
@@ -15,7 +15,7 @@ const projen_1 = require("projen");
|
|
|
15
15
|
* dispatch time.
|
|
16
16
|
*/
|
|
17
17
|
class GitHubProductionRelease extends projen_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.84" };
|
|
19
19
|
/**
|
|
20
20
|
* Resolves the branch that is promoted — the project's default release branch.
|
|
21
21
|
*
|
package/lib/projects/cdk-app.js
CHANGED
|
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
|
|
|
9
9
|
* @pjid taimos-cdk-app
|
|
10
10
|
*/
|
|
11
11
|
class TaimosCdkApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.84" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super({
|
|
15
15
|
authorEmail: 'info@taimos.de',
|
|
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
|
|
|
9
9
|
* @pjid taimos-awscdk-construct
|
|
10
10
|
*/
|
|
11
11
|
class TaimosCdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.84" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super({
|
|
15
15
|
authorOrganization: true,
|
|
@@ -122,9 +122,11 @@ export interface MonorepoWorkspaceOptions {
|
|
|
122
122
|
readonly minimumReleaseAge?: number;
|
|
123
123
|
/**
|
|
124
124
|
* Packages exempt from `minimumReleaseAge` so our own tooling can update
|
|
125
|
-
* without the cooldown.
|
|
125
|
+
* without the cooldown. MERGED on top of the built-in defaults
|
|
126
|
+
* (`projen-pipelines`, `cdk-serverless`, `@taimos/projen`, `projen`) and
|
|
127
|
+
* deduped — supplying this does not drop the tooling exemptions.
|
|
126
128
|
*
|
|
127
|
-
* @default [
|
|
129
|
+
* @default [] // merged with DEFAULT_RELEASE_AGE_EXCLUDE
|
|
128
130
|
*/
|
|
129
131
|
readonly minimumReleaseAgeExclude?: string[];
|
|
130
132
|
}
|
|
@@ -185,9 +187,21 @@ export interface MonorepoProjectOptions extends typescript.TypeScriptProjectOpti
|
|
|
185
187
|
*/
|
|
186
188
|
readonly defaultApprovers?: string[];
|
|
187
189
|
/**
|
|
188
|
-
* Whether the unified build workflow also runs `pnpm -r run test
|
|
190
|
+
* Whether the unified build workflow also runs a separate `pnpm -r run test`
|
|
191
|
+
* step.
|
|
189
192
|
*
|
|
190
|
-
*
|
|
193
|
+
* Each projen sub-project's own `build` task already runs its `test` sub-task
|
|
194
|
+
* (pre-compile → compile → post-compile → test → package), so `pnpm -r run
|
|
195
|
+
* build` already runs every projen package's jest + eslint. Enabling this adds
|
|
196
|
+
* a second full run — including the expensive CDK synths — roughly doubling CI.
|
|
197
|
+
*
|
|
198
|
+
* Caveat: with this off, a hand-managed (non-projen) package is only tested in
|
|
199
|
+
* CI if its own `build` script runs its checks (e.g. `tsc && jest`,
|
|
200
|
+
* `eslint . && vitest run && next build`). Make each hand-managed package's
|
|
201
|
+
* build self-contain its verification so `pnpm -r run build` stays the single
|
|
202
|
+
* gate.
|
|
203
|
+
*
|
|
204
|
+
* @default false
|
|
191
205
|
*/
|
|
192
206
|
readonly runTestsInBuild?: boolean;
|
|
193
207
|
/**
|
|
@@ -238,6 +252,12 @@ export interface MonorepoProjectOptions extends typescript.TypeScriptProjectOpti
|
|
|
238
252
|
* @pjid taimos-monorepo
|
|
239
253
|
*/
|
|
240
254
|
export declare class MonorepoProject extends typescript.TypeScriptProject {
|
|
255
|
+
/**
|
|
256
|
+
* Packages exempt from `minimumReleaseAge` by default so our own build tooling
|
|
257
|
+
* can update without the cooldown. A consumer's
|
|
258
|
+
* `workspaceOptions.minimumReleaseAgeExclude` is merged on top of this list.
|
|
259
|
+
*/
|
|
260
|
+
static readonly DEFAULT_RELEASE_AGE_EXCLUDE: string[];
|
|
241
261
|
/** The generated `pnpm-workspace.yaml`. */
|
|
242
262
|
readonly workspaceFile: YamlFile;
|
|
243
263
|
/** The unified PR build workflow. */
|
package/lib/projects/monorepo.js
CHANGED
|
@@ -32,7 +32,18 @@ var MonorepoAmplifyFramework;
|
|
|
32
32
|
* @pjid taimos-monorepo
|
|
33
33
|
*/
|
|
34
34
|
class MonorepoProject extends projen_1.typescript.TypeScriptProject {
|
|
35
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.
|
|
35
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.84" };
|
|
36
|
+
/**
|
|
37
|
+
* Packages exempt from `minimumReleaseAge` by default so our own build tooling
|
|
38
|
+
* can update without the cooldown. A consumer's
|
|
39
|
+
* `workspaceOptions.minimumReleaseAgeExclude` is merged on top of this list.
|
|
40
|
+
*/
|
|
41
|
+
static DEFAULT_RELEASE_AGE_EXCLUDE = [
|
|
42
|
+
'projen-pipelines',
|
|
43
|
+
'cdk-serverless',
|
|
44
|
+
'@taimos/projen',
|
|
45
|
+
'projen',
|
|
46
|
+
];
|
|
36
47
|
/** The generated `pnpm-workspace.yaml`. */
|
|
37
48
|
workspaceFile;
|
|
38
49
|
/** The unified PR build workflow. */
|
|
@@ -54,6 +65,15 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
|
|
|
54
65
|
// rather than hand-rolling the YAML file.
|
|
55
66
|
const ws = options.workspaceOptions ?? {};
|
|
56
67
|
const allowedBuilds = ws.allowedBuilds ?? ['@aws-amplify/cli', 'esbuild', 'sharp', 'unrs-resolver'];
|
|
68
|
+
// Packages exempt from `minimumReleaseAge` so our own build tooling can
|
|
69
|
+
// update without the cooldown. `projen` is included because `@taimos/projen`
|
|
70
|
+
// pins a projen floor, so the two must move in lockstep. A consumer-supplied
|
|
71
|
+
// list MERGES with these defaults (deduped) rather than replacing them, so
|
|
72
|
+
// adding one package does not silently drop the tooling exemptions.
|
|
73
|
+
const releaseAgeExclude = Array.from(new Set([
|
|
74
|
+
...MonorepoProject.DEFAULT_RELEASE_AGE_EXCLUDE,
|
|
75
|
+
...(ws.minimumReleaseAgeExclude ?? []),
|
|
76
|
+
]));
|
|
57
77
|
super({
|
|
58
78
|
licensed: false,
|
|
59
79
|
release: false,
|
|
@@ -84,11 +104,7 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
|
|
|
84
104
|
allowBuilds: Object.fromEntries(allowedBuilds.map((pkg) => [pkg, true])),
|
|
85
105
|
packages: ws.packages ?? ['packages/*'],
|
|
86
106
|
minimumReleaseAge: ws.minimumReleaseAge ?? 2880, // 2 days in minutes
|
|
87
|
-
minimumReleaseAgeExclude:
|
|
88
|
-
'projen-pipelines',
|
|
89
|
-
'cdk-serverless',
|
|
90
|
-
'@taimos/projen',
|
|
91
|
-
],
|
|
107
|
+
minimumReleaseAgeExclude: releaseAgeExclude,
|
|
92
108
|
...(ws.overrides && Object.keys(ws.overrides).length > 0 ? { overrides: ws.overrides } : {}),
|
|
93
109
|
...options.pnpmOptions?.workspaceYamlOptions,
|
|
94
110
|
},
|
|
@@ -166,7 +182,7 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
|
|
|
166
182
|
{ name: 'Install', run: 'pnpm install --frozen-lockfile' },
|
|
167
183
|
{ name: 'Build', run: 'pnpm -r run build' },
|
|
168
184
|
];
|
|
169
|
-
if (options.runTestsInBuild ??
|
|
185
|
+
if (options.runTestsInBuild ?? false) {
|
|
170
186
|
buildSteps.push({ name: 'Test', run: 'pnpm -r run test' });
|
|
171
187
|
}
|
|
172
188
|
// Path filter: only trigger builds when workspace package files or
|
|
@@ -257,4 +273,4 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
|
|
|
257
273
|
}
|
|
258
274
|
}
|
|
259
275
|
exports.MonorepoProject = MonorepoProject;
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQXlJO0FBRXpJOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBK09EOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0QsMkNBQTJDO0lBQzNCLGFBQWEsQ0FBVztJQUV4QyxxQ0FBcUM7SUFDckIsZUFBZSxDQUF3QjtJQUV2RCx3RUFBd0U7SUFDeEQsV0FBVyxDQUFZO0lBRXZDLDhDQUE4QztJQUM5QixjQUFjLENBQXdCO0lBRXRELG1EQUFtRDtJQUNuQyxpQkFBaUIsQ0FBMkI7SUFFNUQsd0VBQXdFO0lBQ3hELGFBQWEsQ0FBdUI7SUFFcEQsZ0ZBQWdGO0lBQ2hFLG9CQUFvQixDQUFTO0lBRTdDLFlBQVksT0FBK0I7UUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLFNBQVMsQ0FBQztRQUU5RCw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLDBDQUEwQztRQUMxQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXBHLEtBQUssQ0FBQztZQUNKLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLEtBQUs7WUFD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bEQsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSTtZQUNuQyxtQkFBbUI7WUFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLG1CQUFtQjtTQUNuRixDQUFDO1FBQ0YsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixRQUFRLEVBQUU7Z0JBQ1IsNkRBQTZEO2dCQUM3RCxpREFBaUQ7Z0JBQ2pELFNBQVMsRUFBRSxHQUFHO2dCQUNkLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO29CQUNoQyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtpQkFDcEM7Z0JBQ0QsU0FBUyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3QyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBcFBILDBDQXFQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdpdGh1YiwgamF2YXNjcmlwdCwgdHlwZXNjcmlwdCwgWWFtbEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViQXNzaWduQXBwcm92ZXIgfSBmcm9tICdwcm9qZW4tcGlwZWxpbmVzJztcbmltcG9ydCB7IEdpdEh1YkFtcGxpZnlEZXBsb3ksIEdpdEh1YkFtcGxpZnlEZXBsb3lPcHRpb25zLCBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZSwgR2l0SHViUHJvZHVjdGlvblJlbGVhc2VPcHRpb25zIH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5cbi8qKlxuICogVGhlIGZyb250ZW5kIGZyYW1ld29yayBhbiBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb24gaXMgYnVpbHQgd2l0aC5cbiAqXG4gKiBTZWxlY3RzIHNlbnNpYmxlIGRlZmF1bHRzIGZvciB0aGUgYnVpbGQgY29tbWFuZCwgYXJ0aWZhY3QgZGlyZWN0b3J5IGFuZFxuICogY2FjaGUgcGF0aHMgaW4gdGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLlxuICovXG5leHBvcnQgZW51bSBNb25vcmVwb0FtcGxpZnlGcmFtZXdvcmsge1xuICAvKiogQSBOZXh0LmpzIGFwcCDigJQgYXJ0aWZhY3RzIGluIGA8YXBwUm9vdD4vLm5leHRgLCBidWlsdCB2aWEgYHJ1biBidWlsZGAuICovXG4gIE5FWFRKUyA9ICduZXh0anMnLFxuICAvKiogQW4gQW5ndWxhciBhcHAg4oCUIGFydGlmYWN0cyBpbiBgPGFwcFJvb3Q+L2Rpc3QvPGZpbHRlcj4vYnJvd3NlcmAsIGJ1aWx0IHZpYSBgcnVuIGJ1aWxkOiR7QlVJTERfRU5WfWAuICovXG4gIEFOR1VMQVIgPSAnYW5ndWxhcicsXG59XG5cbi8qKlxuICogT25lIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb24gc2VydmVkIGZyb20gYSB3b3Jrc3BhY2UgcGFja2FnZS5cbiAqXG4gKiBSZW5kZXJzIGEgc2luZ2xlIGVudHJ5IHVuZGVyIGBhcHBsaWNhdGlvbnM6YCBpbiB0aGUgZ2VuZXJhdGVkIGBhbXBsaWZ5LnltbGAuXG4gKiBBbXBsaWZ5IGRvZXMgbm90IGF1dG8tZGV0ZWN0IFBOUE0gd29ya3NwYWNlcywgc28gdGhlIGdlbmVyYXRlZCBidWlsZCBzcGVjXG4gKiBydW5zIGBjb3JlcGFjayBlbmFibGVgICsgYSByb290IGBwbnBtIGluc3RhbGxgIGFuZCBwcmUtYnVpbGRzIGFueSBzaGFyZWRcbiAqIHBhY2thZ2VzIGJlZm9yZSBidWlsZGluZyB0aGUgYXBwIGZyb20gaXRzIGBhcHBSb290YCAoc2VlIEFEUi0wMDAyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb0FtcGxpZnlBcHAge1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgcGF0aCB0aGF0IGlzIHRoZSBBbXBsaWZ5IGFwcCByb290LCBlLmcuIGBwYWNrYWdlcy9mcm9udGVuZGAuXG4gICAqL1xuICByZWFkb25seSBhcHBSb290OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmcm9udGVuZCBmcmFtZXdvcmssIHVzZWQgdG8gcGljayBidWlsZC9hcnRpZmFjdC9jYWNoZSBkZWZhdWx0cy5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1ld29yazogTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrO1xuXG4gIC8qKlxuICAgKiBUaGUgcG5wbSBwYWNrYWdlIG5hbWUgdG8gYnVpbGQsIHVzZWQgYXMgdGhlIGAtLWZpbHRlcmAgdGFyZ2V0LFxuICAgKiBlLmcuIGBkZXBsb3ltb24tZnJvbnRlbmRgIG9yIGByYWRiYWxsLWRpZ2l0YWwtcG9ydGFsYC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRmlsdGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBwYWNrYWdlcyB0byBidWlsZCBiZWZvcmUgdGhlIGFwcCwgYXMgYC0tZmlsdGVyYCB0YXJnZXRzLlxuICAgKlxuICAgKiBUeXBpY2FsbHkgdGhlIHNoYXJlZCBBUEkgcGFja2FnZSB0aGUgYXBwIGNvbnN1bWVzIHZpYSBgd29ya3NwYWNlOipgLFxuICAgKiBlLmcuIGBbJ0B0YWltb3MvZGVwbG95bW9uLWFwaSddYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHByZUJ1aWxkRmlsdGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgYnVpbGQgY29tbWFuZCBydW4gaW4gdGhlIEFtcGxpZnkgYGJ1aWxkYCBwaGFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgcG5wbSAtLWZpbHRlciA8YnVpbGRGaWx0ZXI+IHJ1biBidWlsZGAgZm9yIE5leHQuanMsIG9yXG4gICAqIGBwbnBtIC0tZmlsdGVyIDxidWlsZEZpbHRlcj4gcnVuIGJ1aWxkOiR7QlVJTERfRU5WfWAgZm9yIEFuZ3VsYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBhcnRpZmFjdCBiYXNlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgPGFwcFJvb3Q+Ly5uZXh0YCBmb3IgTmV4dC5qcywgb3JcbiAgICogYDxhcHBSb290Pi9kaXN0LzxidWlsZEZpbHRlcj4vYnJvd3NlcmAgZm9yIEFuZ3VsYXIuXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdEJhc2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBBbXBsaWZ5IGJ1aWxkIGNhY2hlIHBhdGhzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBub2RlX21vZHVsZXMvKipgIHBsdXMgdGhlIGZyYW1ld29yayBidWlsZCBjYWNoZVxuICAgKiAoYDxhcHBSb290Pi8ubmV4dC9jYWNoZS8qKmAgb3IgYDxhcHBSb290Pi8uYW5ndWxhci9jYWNoZS8qKmApLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBwbnBtIGAtLWZpbHRlcmAgZXhwcmVzc2lvbiBmb3IgdGhlIHNjb3BlZCBpbnN0YWxsIGluIHRoZSBwcmVCdWlsZCBwaGFzZS5cbiAgICpcbiAgICogVGhlIHRyYWlsaW5nIGAuLi5gIHN5bnRheCBwdWxscyBpbiB0aGUgYXBwJ3MgdHJhbnNpdGl2ZSB3b3Jrc3BhY2VcbiAgICogZGVwZW5kZW5jaWVzIChlLmcuIGEgc2hhcmVkIEFQSSBwYWNrYWdlKSBidXQgZXhjbHVkZXMgdW5yZWxhdGVkIHBhY2thZ2VzLFxuICAgKiBhdm9pZGluZyBjb25jdXJyZW50IGBwcm9qZW4vbm9kZV9tb2R1bGVzYCByZW5hbWUgcmFjZXMgdW5kZXIgdGhlIGhvaXN0ZWRcbiAgICogbGlua2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJHtidWlsZEZpbHRlcn0uLi5gXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsRmlsdGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGdWxsIG92ZXJyaWRlIG9mIHRoZSBpbnN0YWxsIGNvbW1hbmQgaW4gdGhlIHByZUJ1aWxkIHBoYXNlLlxuICAgKlxuICAgKiBXaGVuIHNldCwgYGluc3RhbGxGaWx0ZXJgIGlzIGlnbm9yZWQgYW5kIHRoaXMgc3RyaW5nIGlzIGVtaXR0ZWQgdmVyYmF0aW0uXG4gICAqIFVzZSB0aGlzIGFzIGFuIGVzY2FwZSBoYXRjaCB3aGVuIHRoZSBkZWZhdWx0IHNjb3BlZCBpbnN0YWxsIGlzIGluc3VmZmljaWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0tbm9kZS1saW5rZXIgaG9pc3RlZCAtLWZpbHRlciBcIjxpbnN0YWxsRmlsdGVyPlwiYFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUE5QTSB3b3Jrc3BhY2UgdHVuaW5nIGZvciB0aGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb1dvcmtzcGFjZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBwYWNrYWdlIGdsb2JzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3BhY2thZ2VzLyonXVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvdmVycmlkZXMgZm9yY2VkIGFjcm9zcyB0aGUgd2hvbGUgd29ya3NwYWNlXG4gICAqICh0aGUgYG92ZXJyaWRlczpgIGZpZWxkKS4gT21pdHRlZCBmcm9tIHRoZSBmaWxlIHdoZW4gZW1wdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRGVwZW5kZW5jaWVzIGFsbG93ZWQgdG8gcnVuIGluc3RhbGwvYnVpbGQgc2NyaXB0cy4gcG5wbSA+PSAxMCBibG9ja3MgdGhlc2VcbiAgICogYnkgZGVmYXVsdC4gVGhlIGxpc3QgcG9wdWxhdGVzIGJvdGggYGFsbG93QnVpbGRzYCBhbmRcbiAgICogYG9ubHlCdWlsdERlcGVuZGVuY2llc2Agc28gcG5wbSBkb2VzIG5vdCB0cmVhdCBgbm9kZV9tb2R1bGVzYCBhcyBzdGFsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgWydAYXdzLWFtcGxpZnkvY2xpJywgJ2VzYnVpbGQnLCAnc2hhcnAnLCAndW5ycy1yZXNvbHZlciddXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQnVpbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gYWdlIGluIG1pbnV0ZXMgYSBwdWJsaXNoZWQgdmVyc2lvbiBtdXN0IGhhdmUgYmVmb3JlIGl0IG1heSBiZVxuICAgKiBpbnN0YWxsZWQgKGBtaW5pbXVtUmVsZWFzZUFnZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyODgwIC8vIDIgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIGV4ZW1wdCBmcm9tIGBtaW5pbXVtUmVsZWFzZUFnZWAgc28gb3VyIG93biB0b29saW5nIGNhbiB1cGRhdGVcbiAgICogd2l0aG91dCB0aGUgY29vbGRvd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IFsncHJvamVuLXBpcGVsaW5lcycsICdjZGstc2VydmVybGVzcycsICdAdGFpbW9zL3Byb2plbiddXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPbmUgYXV0aG9yLXRvLWFwcHJvdmVycyByb3V0aW5nIHJ1bGUgZm9yIHRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvQXBwcm92ZXJNYXBwaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgdXNlcm5hbWUgb3BlbmluZyB0aGUgUFIuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiB1c2VybmFtZXMgYXNzaWduZWQgdG8gcmV2aWV3IHdoZW4gYGF1dGhvcmAgb3BlbnMgYSBQUi5cbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVyczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9Qcm9qZWN0T3B0aW9ucyBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwbnBtIHZlcnNpb24gcGlubmVkIGZvciB0aGUgd29ya3NwYWNlIGFuZCBDSS5cbiAgICpcbiAgICogQGRlZmF1bHQgJzEwLjMzLjAnXG4gICAqL1xuICByZWFkb25seSBwbnBtV29ya3NwYWNlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5vZGUuanMgdmVyc2lvbiB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgYnVpbGQgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcyMidcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQTlBNIHdvcmtzcGFjZSB0dW5pbmcgZm9yIHRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlT3B0aW9ucz86IE1vbm9yZXBvV29ya3NwYWNlT3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYGNkay1zZXJ2ZXJsZXNzYCBhcyBhIHdvcmtzcGFjZSBkZXYgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNka1NlcnZlcmxlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFzc2lnbiBQUiBhcHByb3ZlcnMgdmlhIGBHaXRIdWJBc3NpZ25BcHByb3ZlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lnbkFwcHJvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0aG9yLXRvLWFwcHJvdmVycyByb3V0aW5nIGZvciB0aGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudC5cbiAgICogT25seSB1c2VkIHdoZW4gYGFzc2lnbkFwcHJvdmVyYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGhvZWdlcnRuIGFuZCBob2VnZXJtYSByZXZpZXcgZWFjaCBvdGhlclxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZXJNYXBwaW5nPzogTW9ub3JlcG9BcHByb3Zlck1hcHBpbmdbXTtcblxuICAvKipcbiAgICogQXBwcm92ZXJzIGFzc2lnbmVkIHdoZW4gbm8gYXV0aG9yLXNwZWNpZmljIG1hcHBpbmcgbWF0Y2hlcy5cbiAgICogT25seSB1c2VkIHdoZW4gYGFzc2lnbkFwcHJvdmVyYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ2hvZWdlcnRuJywgJ2hvZWdlcm1hJ11cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBcHByb3ZlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdW5pZmllZCBidWlsZCB3b3JrZmxvdyBhbHNvIHJ1bnMgYHBucG0gLXIgcnVuIHRlc3RgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBydW5UZXN0c0luQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBV1MgQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9ucy4gV2hlbiBzZXQsIGFuIGBhbXBsaWZ5LnltbGAgaXMgZ2VuZXJhdGVkXG4gICAqIHdpdGggb25lIGVudHJ5IHBlciBhcHAuIFdoZW4gb21pdHRlZCwgbm8gYGFtcGxpZnkueW1sYCBpcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgYW1wbGlmeUFwcHM/OiBNb25vcmVwb0FtcGxpZnlBcHBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSBtYW51YWwgXCJQcm9kdWN0aW9uIFJlbGVhc2VcIiB3b3JrZmxvdyB0aGF0IHByb21vdGVzIGEgYnJhbmNoXG4gICAqIHRvIHRoZSBwcm9kdWN0aW9uIGJyYW5jaCAoc2VlIGBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93LiBPbmx5IHVzZWQgd2hlblxuICAgKiBgcHJvZHVjdGlvblJlbGVhc2VgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvbW90ZSBgbWFpbmAgdG8gYSBgcHJvZHVjdGlvbmAgYnJhbmNoXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnM/OiBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERyaXZlIEFtcGxpZnkgSG9zdGluZyBidWlsZHMgZnJvbSBHaXRIdWIgQWN0aW9ucyBpbnN0ZWFkIG9mIEFtcGxpZnkncyBvd25cbiAgICogYXV0by1idWlsZCwgc28gYW4gYXBwIG9ubHkgcmVidWlsZHMgd2hlbiB0aGUgcGFja2FnZXMgaXQgaXMgYnVpbHQgZnJvbVxuICAgKiBhY3R1YWxseSBjaGFuZ2VkIChzZWUgYEdpdEh1YkFtcGxpZnlEZXBsb3lgKS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIGdlbmVyYXRlcyBvbmUgZGVwbG95IHdvcmtmbG93IHBlciBsaXN0ZWQgYXBwLiBUaGUgcHJvamVjdCdzXG4gICAqIENESyBhcHAgbXVzdCBkaXNhYmxlIGBhdXRvQnVpbGRgIG9uIHRoZSB0cmFja2VkIGJyYW5jaGVzIGFuZCBwcm92aWRlIHRoZVxuICAgKiBhcHAtaWQgcGFyYW1ldGVycyBhbmQgYnVpbGQtdHJpZ2dlciByb2xlIHRoZSB3b3JrZmxvd3MgZXhwZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFtcGxpZnkncyBvd24gYXV0by1idWlsZCBpcyBsZWZ0IGluIHBsYWNlXG4gICAqL1xuICByZWFkb25seSBhbXBsaWZ5RGVwbG95T3B0aW9ucz86IEdpdEh1YkFtcGxpZnlEZXBsb3lPcHRpb25zO1xufVxuXG4vKipcbiAqIFByaXZhdGUgUE5QTS13b3Jrc3BhY2UgbW9ub3JlcG8gcm9vdCwgZm9sbG93aW5nIFRhaW1vcyBBRFItMDAwMi5cbiAqXG4gKiBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBidWlsZGluZywgdGVzdGluZyBhbmQgbGludGluZyBhcmVcbiAqIGRlbGVnYXRlZCB0byB0aGUgd29ya3NwYWNlIHBhY2thZ2VzIHZpYSBgcG5wbSAtcmAuIFRoaXMgcHJvamVjdCBnZW5lcmF0ZXMgdGhlXG4gKiBgcG5wbS13b3Jrc3BhY2UueWFtbGAsIHRoZSByb290IGNvbnZlbmllbmNlIHNjcmlwdHMsIGEgdW5pZmllZCBQUiBidWlsZFxuICogd29ya2Zsb3cgYW5kIChvcHRpb25hbGx5KSBhbiBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gVGhlIHByb2plbi1tYW5hZ2VkXG4gKiBzdWItcHJvamVjdHMgKGFwaSwgYmFja2VuZCwgaW5mcmEpIGFyZSBhZGRlZCB3aXRoIHRoZSBgcGFyZW50YC9gb3V0ZGlyYFxuICogcGF0dGVybiBpbiB0aGUgY29uc3VtaW5nIGAucHJvamVucmMudHNgOyBwbGFpbiB3b3Jrc3BhY2UgcGFja2FnZXMgKGUuZy5cbiAqIE5leHQuanMgYXBwcykgYXJlIHBpY2tlZCB1cCBieSB0aGUgYHBhY2thZ2VzLypgIGdsb2IuXG4gKlxuICogQHBqaWQgdGFpbW9zLW1vbm9yZXBvXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1Byb2plY3QgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcblxuICAvKiogVGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuICovXG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2VGaWxlOiBZYW1sRmlsZTtcblxuICAvKiogVGhlIHVuaWZpZWQgUFIgYnVpbGQgd29ya2Zsb3cuICovXG4gIHB1YmxpYyByZWFkb25seSBwckJ1aWxkV29ya2Zsb3c6IGdpdGh1Yi5HaXRodWJXb3JrZmxvdztcblxuICAvKiogVGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLCBpZiBhbnkgQW1wbGlmeSBhcHBzIHdlcmUgY29uZmlndXJlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFtcGxpZnlGaWxlPzogWWFtbEZpbGU7XG5cbiAgLyoqIFRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LCBpZiBlbmFibGVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzaWduQXBwcm92ZXI/OiBHaXRIdWJBc3NpZ25BcHByb3ZlcjtcblxuICAvKiogVGhlIHByb2R1Y3Rpb24gcmVsZWFzZSB3b3JrZmxvdywgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlPzogR2l0SHViUHJvZHVjdGlvblJlbGVhc2U7XG5cbiAgLyoqIFRoZSBBbXBsaWZ5IGRlcGxveSB3b3JrZmxvd3MsIHdoZW4gYGFtcGxpZnlEZXBsb3lPcHRpb25zYCBpcyBzZXQuICovXG4gIHB1YmxpYyByZWFkb25seSBhbXBsaWZ5RGVwbG95PzogR2l0SHViQW1wbGlmeURlcGxveTtcblxuICAvKiogVGhlIGRlZmF1bHQgcmVsZWFzZSBicmFuY2ggKHByb21vdGVkIGJ5IHRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3cpLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb25vcmVwb1Byb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgcG5wbVZlcnNpb24gPSBvcHRpb25zLnBucG1Xb3Jrc3BhY2VWZXJzaW9uID8/ICcxMC4zMy4wJztcblxuICAgIC8vIFBOUE0gd29ya3NwYWNlIHR1bmluZyDigJQgbWFwcGVkIG9udG8gcHJvamVuJ3MgbmF0aXZlIGBwbnBtLXdvcmtzcGFjZS55YW1sYFxuICAgIC8vIHN1cHBvcnQgKHByb2plbiA+PSAwLjEwMSkgdGhyb3VnaCBgYWxsb3dTY3JpcHRzYCArIGBwbnBtT3B0aW9uc2AgYmVsb3csXG4gICAgLy8gcmF0aGVyIHRoYW4gaGFuZC1yb2xsaW5nIHRoZSBZQU1MIGZpbGUuXG4gICAgY29uc3Qgd3MgPSBvcHRpb25zLndvcmtzcGFjZU9wdGlvbnMgPz8ge307XG4gICAgY29uc3QgYWxsb3dlZEJ1aWxkcyA9IHdzLmFsbG93ZWRCdWlsZHMgPz8gWydAYXdzLWFtcGxpZnkvY2xpJywgJ2VzYnVpbGQnLCAnc2hhcnAnLCAndW5ycy1yZXNvbHZlciddO1xuXG4gICAgc3VwZXIoe1xuICAgICAgbGljZW5zZWQ6IGZhbHNlLFxuICAgICAgcmVsZWFzZTogZmFsc2UsXG4gICAgICBkZXBzVXBncmFkZTogZmFsc2UsXG4gICAgICAvLyBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBubyBhcHAgY29kZSBsaXZlcyBoZXJlLlxuICAgICAgamVzdDogZmFsc2UsXG4gICAgICBlc2xpbnQ6IGZhbHNlLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICAvLyBDSSBpcyB0aGUgc2luZ2xlIGhhbmQtcm9sbGVkIHdvcmtmbG93IGJlbG93IHRoYXQgZGVsZWdhdGVzIHRvIHBhY2thZ2VzLlxuICAgICAgYnVpbGRXb3JrZmxvdzogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gRm9yY2VkIOKAlCBkZWZpbmluZyB3aGF0IGEgVGFpbW9zIG1vbm9yZXBvIHJvb3QgaXMuXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuUE5QTSxcbiAgICAgIHBucG1WZXJzaW9uLFxuICAgICAgLy8gTmF0aXZlIHBucG0td29ya3NwYWNlLnlhbWwgKHByb2plbiA+PSAwLjEwMSkuIGBhbGxvd1NjcmlwdHNgIHJlbmRlcnMgdGhlXG4gICAgICAvLyBidWlsZCBhbGxvd2xpc3QgaW50byBgb25seUJ1aWx0RGVwZW5kZW5jaWVzYDsgdGhlIHJlbWFpbmluZyB0dW5pbmcgbWFwc1xuICAgICAgLy8gb250byBgd29ya3NwYWNlWWFtbE9wdGlvbnNgLiBBbnkgY29uc3VtZXItc3VwcGxpZWQgYHBucG1PcHRpb25zYCBhcmVcbiAgICAgIC8vIG1lcmdlZCBpbiBhbmQgd2luIG92ZXIgb3VyIGRlZmF1bHRzLlxuICAgICAgYWxsb3dTY3JpcHRzOiBhbGxvd2VkQnVpbGRzLFxuICAgICAgcG5wbU9wdGlvbnM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5wbnBtT3B0aW9ucyxcbiAgICAgICAgd29ya3NwYWNlWWFtbE9wdGlvbnM6IHtcbiAgICAgICAgICAvLyBwbnBtIDExIHJlcGxhY2VkIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgICh3aGljaCBgYWxsb3dTY3JpcHRzYFxuICAgICAgICAgIC8vIHJlbmRlcnMpIHdpdGggYGFsbG93QnVpbGRzYCwgYW5kIHJlYWRzIG9ubHkgdGhlIGxhdHRlciDigJQgYSBwbnBtIDExXG4gICAgICAgICAgLy8gaW5zdGFsbCBvdGhlcndpc2UgYWJvcnRzIHdpdGggRVJSX1BOUE1fSUdOT1JFRF9CVUlMRFMuIHBucG0gMTAgcmVhZHNcbiAgICAgICAgICAvLyBvbmx5IGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgLiBFbWl0IGJvdGggc28gdGhlIHNhbWUgd29ya3NwYWNlIGZpbGVcbiAgICAgICAgICAvLyB3b3JrcyBvbiBlaXRoZXIsIHdoYXRldmVyIGBwbnBtVmVyc2lvbmAgYSBjb25zdW1lciBwaW5zLlxuICAgICAgICAgIGFsbG93QnVpbGRzOiBPYmplY3QuZnJvbUVudHJpZXMoYWxsb3dlZEJ1aWxkcy5tYXAoKHBrZykgPT4gW3BrZywgdHJ1ZV0pKSxcbiAgICAgICAgICBwYWNrYWdlczogd3MucGFja2FnZXMgPz8gWydwYWNrYWdlcy8qJ10sXG4gICAgICAgICAgbWluaW11bVJlbGVhc2VBZ2U6IHdzLm1pbmltdW1SZWxlYXNlQWdlID8/IDI4ODAsIC8vIDIgZGF5cyBpbiBtaW51dGVzXG4gICAgICAgICAgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlOiB3cy5taW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGUgPz8gW1xuICAgICAgICAgICAgJ3Byb2plbi1waXBlbGluZXMnLFxuICAgICAgICAgICAgJ2Nkay1zZXJ2ZXJsZXNzJyxcbiAgICAgICAgICAgICdAdGFpbW9zL3Byb2plbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICAuLi4od3Mub3ZlcnJpZGVzICYmIE9iamVjdC5rZXlzKHdzLm92ZXJyaWRlcykubGVuZ3RoID4gMCA/IHsgb3ZlcnJpZGVzOiB3cy5vdmVycmlkZXMgfSA6IHt9KSxcbiAgICAgICAgICAuLi5vcHRpb25zLnBucG1PcHRpb25zPy53b3Jrc3BhY2VZYW1sT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgICAgZ2l0aHViOiB0cnVlLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoKSxcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG4gICAgICAgIG1lcmdlUXVldWU6IHRydWUsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucyxcbiAgICAgICAgbWVyZ2VRdWV1ZU9wdGlvbnM6IHtcbiAgICAgICAgICBhdXRvUXVldWU6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5tZXJnZVF1ZXVlT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ucHVsbFJlcXVlc3RMaW50T3B0aW9ucyxcbiAgICAgICAgICBzZW1hbnRpY1RpdGxlT3B0aW9uczoge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5wdWxsUmVxdWVzdExpbnRPcHRpb25zPy5zZW1hbnRpY1RpdGxlT3B0aW9ucyxcbiAgICAgICAgICAgIC8vIEZpeGVkIGFsbG93ZWQgUFIgdGl0bGUgdHlwZXMgZm9yIGEgVGFpbW9zIG1vbm9yZXBvLlxuICAgICAgICAgICAgdHlwZXM6IFsnZmVhdCcsICdmaXgnLCAnY2hvcmUnLCAnZG9jcycsICdzcGVjJywgJ2NpJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXZEZXBzOiBbXG4gICAgICAgICdAdGFpbW9zL3Byb2plbicsXG4gICAgICAgICdwcm9qZW4tcGlwZWxpbmVzJyxcbiAgICAgICAgLi4uKG9wdGlvbnMuY2RrU2VydmVybGVzcyA/PyBmYWxzZSA/IFsnY2RrLXNlcnZlcmxlc3MnXSA6IFtdKSxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXZEZXBzID8/IFtdLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFByaXZhdGUgd29ya3NwYWNlIHJvb3Qg4oCUIG5ldmVyIHB1Ymxpc2hlZCwgcmVzb2x2ZXMgcGFja2FnZXMgbG9jYWxseS5cbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3ByaXZhdGUnLCB0cnVlKTtcblxuICAgIHRoaXMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggPSBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoID8/ICdtYWluJztcblxuICAgIC8vIFBSIGFwcHJvdmVyIHJvdXRpbmcuXG4gICAgaWYgKG9wdGlvbnMuYXNzaWduQXBwcm92ZXIgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25BcHByb3ZlciA9IG5ldyBHaXRIdWJBc3NpZ25BcHByb3Zlcih0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVyTWFwcGluZzogb3B0aW9ucy5hcHByb3Zlck1hcHBpbmcgPz8gW1xuICAgICAgICAgIHsgYXV0aG9yOiAnaG9lZ2VydG4nLCBhcHByb3ZlcnM6IFsnaG9lZ2VybWEnXSB9LFxuICAgICAgICAgIHsgYXV0aG9yOiAnaG9lZ2VybWEnLCBhcHByb3ZlcnM6IFsnaG9lZ2VydG4nXSB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0QXBwcm92ZXJzOiBvcHRpb25zLmRlZmF1bHRBcHByb3ZlcnMgPz8gWydob2VnZXJ0bicsICdob2VnZXJtYSddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTWFudWFsIHByb2R1Y3Rpb24gcmVsZWFzZSDigJQgcHJvbW90ZXMgYSBicmFuY2ggdG8gdGhlIHByb2R1Y3Rpb24gYnJhbmNoLlxuICAgIGlmIChvcHRpb25zLmFtcGxpZnlEZXBsb3lPcHRpb25zKSB7XG4gICAgICB0aGlzLmFtcGxpZnlEZXBsb3kgPSBuZXcgR2l0SHViQW1wbGlmeURlcGxveSh0aGlzLCBvcHRpb25zLmFtcGxpZnlEZXBsb3lPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcm9kdWN0aW9uUmVsZWFzZSA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5wcm9kdWN0aW9uUmVsZWFzZSA9IG5ldyBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZSh0aGlzLCBvcHRpb25zLnByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHByb2plbnJjIGlzIHNwbGl0IGludG8gbW9kdWxlcyB1bmRlciAucHJvamVuLyDigJQgbWFrZSB0aGVtIHBhcnQgb2YgdGhlXG4gICAgLy8gZGV2IHRzY29uZmlnIHNvIHRoZSBJREUgYW5kIHRzLW5vZGUgdHlwZS1jaGVjayB0aGVtLlxuICAgIHRoaXMudHNjb25maWdEZXY/LmFkZEluY2x1ZGUoJy5wcm9qZW4vKi50cycpO1xuXG4gICAgLy8gcHJvamVuJ3MgTm9kZVBhY2thZ2UgZ2VuZXJhdGVzIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBuYXRpdmVseSAocHJvamVuID49XG4gICAgLy8gMC4xMDEpLCBjb25maWd1cmVkIHZpYSB0aGUgYHBucG1PcHRpb25zYC9gYWxsb3dTY3JpcHRzYCBwYXNzZWQgdG8gc3VwZXIoKS5cbiAgICAvLyBFeHBvc2UgdGhlIGdlbmVyYXRlZCBmaWxlIHNvIGNvbnN1bWVycyBjYW4gZnVydGhlciBjdXN0b21pemUgaXQuXG4gICAgdGhpcy53b3Jrc3BhY2VGaWxlID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgncG5wbS13b3Jrc3BhY2UueWFtbCcpIGFzIFlhbWxGaWxlO1xuXG4gICAgLy8gQ29udmVuaWVuY2Ugcm9vdCBzY3JpcHRzIGRlbGVnYXRlIHRvIHRoZSB3b3Jrc3BhY2UuXG4gICAgY29uc3Qgcm9vdFBrZyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJ3BhY2thZ2UuanNvbicpITtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmJ1aWxkJywgJ3BucG0gLXIgcnVuIGJ1aWxkJyk7XG4gICAgcm9vdFBrZy5hZGRPdmVycmlkZSgnc2NyaXB0cy50ZXN0JywgJ3BucG0gLXIgcnVuIHRlc3QnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmxpbnQnLCAncG5wbSAtciBydW4gZXNsaW50Jyk7XG5cbiAgICAvLyBVbmlmaWVkIFBSIGJ1aWxkIHdvcmtmbG93IOKAlCBidWlsZHMgKGFuZCBvcHRpb25hbGx5IHRlc3RzKSBldmVyeSB3b3Jrc3BhY2VcbiAgICAvLyBwYWNrYWdlIGluIGRlcGVuZGVuY3kgb3JkZXIuXG4gICAgY29uc3Qgbm9kZVZlcnNpb24gPSBvcHRpb25zLm5vZGVWZXJzaW9uID8/ICcyMic7XG4gICAgY29uc3QgYnVpbGRTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICB7IG5hbWU6ICdDaGVja291dCcsIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyB9LFxuICAgICAgeyBuYW1lOiAnU2V0dXAgcG5wbScsIHVzZXM6ICdwbnBtL2FjdGlvbi1zZXR1cEB2NCcsIHdpdGg6IHsgdmVyc2lvbjogcG5wbVZlcnNpb24gfSB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL3NldHVwLW5vZGVAdjQnLFxuICAgICAgICB3aXRoOiB7ICdub2RlLXZlcnNpb24nOiBub2RlVmVyc2lvbiwgJ2NhY2hlJzogJ3BucG0nIH0sXG4gICAgICB9LFxuICAgICAgeyBuYW1lOiAnSW5zdGFsbCcsIHJ1bjogJ3BucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZScgfSxcbiAgICAgIHsgbmFtZTogJ0J1aWxkJywgcnVuOiAncG5wbSAtciBydW4gYnVpbGQnIH0sXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucy5ydW5UZXN0c0luQnVpbGQgPz8gdHJ1ZSkge1xuICAgICAgYnVpbGRTdGVwcy5wdXNoKHsgbmFtZTogJ1Rlc3QnLCBydW46ICdwbnBtIC1yIHJ1biB0ZXN0JyB9KTtcbiAgICB9XG4gICAgLy8gUGF0aCBmaWx0ZXI6IG9ubHkgdHJpZ2dlciBidWlsZHMgd2hlbiB3b3Jrc3BhY2UgcGFja2FnZSBmaWxlcyBvclxuICAgIC8vIGJ1aWxkLXJlbGV2YW50IHJvb3QgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBDaGFuZ2VzIHRvIHNwZWNzIG9yIGRvY3NcbiAgICAvLyBhbG9uZSBzaG91bGQgbm90IHRyaWdnZXIgYSBuZXcgYnVpbGQuXG4gICAgY29uc3Qgd29ya3NwYWNlUGFja2FnZXMgPSB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXTtcbiAgICBjb25zdCBidWlsZFBhdGhzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC8vIFdvcmtzcGFjZSBwYWNrYWdlIHNvdXJjZSBmaWxlcy5cbiAgICAgIC4uLndvcmtzcGFjZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBgJHtwa2d9LyoqYCksXG4gICAgICAvLyBEZXBlbmRlbmN5IGxvY2sgJiB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbi5cbiAgICAgICdwbnBtLWxvY2sueWFtbCcsXG4gICAgICAncG5wbS13b3Jrc3BhY2UueWFtbCcsXG4gICAgICAvLyBSb290IHBhY2thZ2UuanNvbiAoc2NyaXB0cywgZGV2RGVwcywgZW5naW5lcykuXG4gICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgIC8vIFByb2plbiBjb25maWd1cmF0aW9uIOKAlCByZWdlbmVyYXRlcyBwcm9qZWN0IGZpbGVzLlxuICAgICAgJy5wcm9qZW5yYy50cycsXG4gICAgICAnLnByb2plbnJjLmpzJyxcbiAgICAgICcucHJvamVuLyoqJyxcbiAgICAgIC8vIFNoYXJlZCBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24uXG4gICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAndHNjb25maWcuKi5qc29uJyxcbiAgICAgIC8vIFRoZSBidWlsZCB3b3JrZmxvdyBpdHNlbGYuXG4gICAgICAnLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sJyxcbiAgICAgIC8vIFNoYXJlZCBsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAgICAnLmVzbGludHJjLionLFxuICAgICAgJ2VzbGludC5jb25maWcuKicsXG4gICAgXTtcblxuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93ID0gbmV3IGdpdGh1Yi5HaXRodWJXb3JrZmxvdyh0aGlzLmdpdGh1YiEsICdidWlsZCcpO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0OiB7IHBhdGhzOiBidWlsZFBhdGhzIH0sXG4gICAgICBwdXNoOiB7IGJyYW5jaGVzOiBbJ21haW4nXSwgcGF0aHM6IGJ1aWxkUGF0aHMgfSxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgIH0pO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93LmFkZEpvYignYnVpbGQnLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogYnVpbGRTdGVwcyxcbiAgICB9KTtcblxuICAgIC8vIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gUE5QTSB3b3Jrc3BhY2VzIGFyZSBub3QgYXV0by1kZXRlY3RlZCBieVxuICAgIC8vIEFtcGxpZnksIHNvIGVhY2ggYXBwIGluc3RhbGxzIGF0IHRoZSByZXBvIHJvb3QsIHByZS1idWlsZHMgaXRzIHNoYXJlZFxuICAgIC8vIHBhY2thZ2VzLCB0aGVuIGJ1aWxkcyBmcm9tIGl0cyBhcHBSb290IChzZWUgQURSLTAwMDIpLlxuICAgIGlmIChvcHRpb25zLmFtcGxpZnlBcHBzICYmIG9wdGlvbnMuYW1wbGlmeUFwcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbXBsaWZ5RmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLCAnYW1wbGlmeS55bWwnLCB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgYXBwbGljYXRpb25zOiBvcHRpb25zLmFtcGxpZnlBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLnJlbmRlckFtcGxpZnlBcHAoYXBwKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFtcGxpZnlBcHAoYXBwOiBNb25vcmVwb0FtcGxpZnlBcHApIHtcbiAgICBjb25zdCBhbmd1bGFyID0gYXBwLmZyYW1ld29yayA9PT0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrLkFOR1VMQVI7XG4gICAgLy8gU2NvcGUgdGhlIGluc3RhbGwgdG8gdGhlIGFwcCdzIGRlcGVuZGVuY3kgY2xvc3VyZSB0byBhdm9pZCBjb25jdXJyZW50XG4gICAgLy8gcHJvamVuL25vZGVfbW9kdWxlcyByZW5hbWUgcmFjZXMgdW5kZXIgdGhlIGhvaXN0ZWQgbGlua2VyIChzZWUgIzM3MikuXG4gICAgY29uc3QgZmlsdGVyID0gYXBwLmluc3RhbGxGaWx0ZXIgPz8gYCR7YXBwLmJ1aWxkRmlsdGVyfS4uLmA7XG4gICAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSBhcHAuaW5zdGFsbENvbW1hbmRcbiAgICAgID8/IGBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1ub2RlLWxpbmtlciBob2lzdGVkIC0tZmlsdGVyIFwiJHtmaWx0ZXJ9XCJgO1xuICAgIGNvbnN0IHByZUJ1aWxkID0gW1xuICAgICAgJ2NvcmVwYWNrIGVuYWJsZScsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICAgIC4uLihhcHAucHJlQnVpbGRGaWx0ZXJzID8/IFtdKS5tYXAoKGYpID0+IGBwbnBtIC0tZmlsdGVyICR7Zn0gcnVuIGJ1aWxkYCksXG4gICAgXTtcbiAgICAvLyBCVUlMRF9FTlYgKGRldnxwcm9kKSBpcyBwcm92aWRlZCBhcyBhbiBBbXBsaWZ5IGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IGFwcC5idWlsZENvbW1hbmQgPz8gKGFuZ3VsYXJcbiAgICAgID8gYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZDpcXCR7QlVJTERfRU5WfWBcbiAgICAgIDogYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZGApO1xuICAgIGNvbnN0IGJhc2VEaXJlY3RvcnkgPSBhcHAuYXJ0aWZhY3RCYXNlRGlyZWN0b3J5ID8/IChhbmd1bGFyXG4gICAgICA/IGAke2FwcC5hcHBSb290fS9kaXN0LyR7YXBwLmJ1aWxkRmlsdGVyfS9icm93c2VyYFxuICAgICAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHRgKTtcbiAgICBjb25zdCBjYWNoZVBhdGhzID0gYXBwLmNhY2hlUGF0aHMgPz8gW1xuICAgICAgJ25vZGVfbW9kdWxlcy8qKi8qJyxcbiAgICAgIGFuZ3VsYXIgPyBgJHthcHAuYXBwUm9vdH0vLmFuZ3VsYXIvY2FjaGUvKiovKmAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHQvY2FjaGUvKiovKmAsXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwUm9vdDogYXBwLmFwcFJvb3QsXG4gICAgICBmcm9udGVuZDoge1xuICAgICAgICAvLyBJbnN0YWxsL2J1aWxkIGZyb20gdGhlIG1vbm9yZXBvIHJvb3Qgc28gdGhlIHdvcmtzcGFjZSByb290XG4gICAgICAgIC8vIHBhY2thZ2UuanNvbiBhbmQgcG5wbS1sb2NrLnlhbWwgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgYnVpbGRQYXRoOiAnLycsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZUJ1aWxkOiB7IGNvbW1hbmRzOiBwcmVCdWlsZCB9LFxuICAgICAgICAgIGJ1aWxkOiB7IGNvbW1hbmRzOiBbYnVpbGRDb21tYW5kXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhcnRpZmFjdHM6IHsgYmFzZURpcmVjdG9yeSwgZmlsZXM6IFsnKiovKiddIH0sXG4gICAgICAgIGNhY2hlOiB7IHBhdGhzOiBjYWNoZVBhdGhzIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQXlJO0FBRXpJOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBNlBEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0Q7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBVSwyQkFBMkIsR0FBYTtRQUM3RCxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixRQUFRO0tBQ1QsQ0FBQztJQUVGLDJDQUEyQztJQUMzQixhQUFhLENBQVc7SUFFeEMscUNBQXFDO0lBQ3JCLGVBQWUsQ0FBd0I7SUFFdkQsd0VBQXdFO0lBQ3hELFdBQVcsQ0FBWTtJQUV2Qyw4Q0FBOEM7SUFDOUIsY0FBYyxDQUF3QjtJQUV0RCxtREFBbUQ7SUFDbkMsaUJBQWlCLENBQTJCO0lBRTVELHdFQUF3RTtJQUN4RCxhQUFhLENBQXVCO0lBRXBELGdGQUFnRjtJQUNoRSxvQkFBb0IsQ0FBUztJQUU3QyxZQUFZLE9BQStCO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUM7UUFFOUQsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSwwQ0FBMEM7UUFDMUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLENBQUMsa0JBQWtC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LFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTztZQUMvQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxXQUFXLDBCQUEwQjtZQUM1RCxDQUFDLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxXQUFXLFlBQVksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLE9BQU87WUFDekQsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sU0FBUyxHQUFHLENBQUMsV0FBVyxVQUFVO1lBQ2xELENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUk7WUFDbkMsbUJBQW1CO1lBQ25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxtQkFBbUI7U0FDbkYsQ0FBQztRQUNGLE9BQU87WUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsUUFBUSxFQUFFO2dCQUNSLDZEQUE2RDtnQkFDN0QsaURBQWlEO2dCQUNqRCxTQUFTLEVBQUUsR0FBRztnQkFDZCxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtvQkFDaEMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUU7aUJBQ3BDO2dCQUNELFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDN0MsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTthQUM3QjtTQUNGLENBQUM7SUFDSixDQUFDOztBQXRRSCwwQ0F1UUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRodWIsIGphdmFzY3JpcHQsIHR5cGVzY3JpcHQsIFlhbWxGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEdpdEh1YkFzc2lnbkFwcHJvdmVyIH0gZnJvbSAncHJvamVuLXBpcGVsaW5lcyc7XG5pbXBvcnQgeyBHaXRIdWJBbXBsaWZ5RGVwbG95LCBHaXRIdWJBbXBsaWZ5RGVwbG95T3B0aW9ucywgR2l0SHViUHJvZHVjdGlvblJlbGVhc2UsIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyB9IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIFRoZSBmcm9udGVuZCBmcmFtZXdvcmsgYW4gQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIGlzIGJ1aWx0IHdpdGguXG4gKlxuICogU2VsZWN0cyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgdGhlIGJ1aWxkIGNvbW1hbmQsIGFydGlmYWN0IGRpcmVjdG9yeSBhbmRcbiAqIGNhY2hlIHBhdGhzIGluIHRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYC5cbiAqL1xuZXhwb3J0IGVudW0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrIHtcbiAgLyoqIEEgTmV4dC5qcyBhcHAg4oCUIGFydGlmYWN0cyBpbiBgPGFwcFJvb3Q+Ly5uZXh0YCwgYnVpbHQgdmlhIGBydW4gYnVpbGRgLiAqL1xuICBORVhUSlMgPSAnbmV4dGpzJyxcbiAgLyoqIEFuIEFuZ3VsYXIgYXBwIOKAlCBhcnRpZmFjdHMgaW4gYDxhcHBSb290Pi9kaXN0LzxmaWx0ZXI+L2Jyb3dzZXJgLCBidWlsdCB2aWEgYHJ1biBidWlsZDoke0JVSUxEX0VOVn1gLiAqL1xuICBBTkdVTEFSID0gJ2FuZ3VsYXInLFxufVxuXG4vKipcbiAqIE9uZSBBV1MgQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIHNlcnZlZCBmcm9tIGEgd29ya3NwYWNlIHBhY2thZ2UuXG4gKlxuICogUmVuZGVycyBhIHNpbmdsZSBlbnRyeSB1bmRlciBgYXBwbGljYXRpb25zOmAgaW4gdGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLlxuICogQW1wbGlmeSBkb2VzIG5vdCBhdXRvLWRldGVjdCBQTlBNIHdvcmtzcGFjZXMsIHNvIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3BlY1xuICogcnVucyBgY29yZXBhY2sgZW5hYmxlYCArIGEgcm9vdCBgcG5wbSBpbnN0YWxsYCBhbmQgcHJlLWJ1aWxkcyBhbnkgc2hhcmVkXG4gKiBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgdGhlIGFwcCBmcm9tIGl0cyBgYXBwUm9vdGAgKHNlZSBBRFItMDAwMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9BbXBsaWZ5QXBwIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHBhdGggdGhhdCBpcyB0aGUgQW1wbGlmeSBhcHAgcm9vdCwgZS5nLiBgcGFja2FnZXMvZnJvbnRlbmRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwUm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRlbmQgZnJhbWV3b3JrLCB1c2VkIHRvIHBpY2sgYnVpbGQvYXJ0aWZhY3QvY2FjaGUgZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXdvcms6IE1vbm9yZXBvQW1wbGlmeUZyYW1ld29yaztcblxuICAvKipcbiAgICogVGhlIHBucG0gcGFja2FnZSBuYW1lIHRvIGJ1aWxkLCB1c2VkIGFzIHRoZSBgLS1maWx0ZXJgIHRhcmdldCxcbiAgICogZS5nLiBgZGVwbG95bW9uLWZyb250ZW5kYCBvciBgcmFkYmFsbC1kaWdpdGFsLXBvcnRhbGAuXG4gICAqL1xuICByZWFkb25seSBidWlsZEZpbHRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgcGFja2FnZXMgdG8gYnVpbGQgYmVmb3JlIHRoZSBhcHAsIGFzIGAtLWZpbHRlcmAgdGFyZ2V0cy5cbiAgICpcbiAgICogVHlwaWNhbGx5IHRoZSBzaGFyZWQgQVBJIHBhY2thZ2UgdGhlIGFwcCBjb25zdW1lcyB2aWEgYHdvcmtzcGFjZToqYCxcbiAgICogZS5nLiBgWydAdGFpbW9zL2RlcGxveW1vbi1hcGknXWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZEZpbHRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGJ1aWxkIGNvbW1hbmQgcnVuIGluIHRoZSBBbXBsaWZ5IGBidWlsZGAgcGhhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHBucG0gLS1maWx0ZXIgPGJ1aWxkRmlsdGVyPiBydW4gYnVpbGRgIGZvciBOZXh0LmpzLCBvclxuICAgKiBgcG5wbSAtLWZpbHRlciA8YnVpbGRGaWx0ZXI+IHJ1biBidWlsZDoke0JVSUxEX0VOVn1gIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgYXJ0aWZhY3QgYmFzZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYDxhcHBSb290Pi8ubmV4dGAgZm9yIE5leHQuanMsIG9yXG4gICAqIGA8YXBwUm9vdD4vZGlzdC88YnVpbGRGaWx0ZXI+L2Jyb3dzZXJgIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RCYXNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgQW1wbGlmeSBidWlsZCBjYWNoZSBwYXRocy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgbm9kZV9tb2R1bGVzLyoqYCBwbHVzIHRoZSBmcmFtZXdvcmsgYnVpbGQgY2FjaGVcbiAgICogKGA8YXBwUm9vdD4vLm5leHQvY2FjaGUvKipgIG9yIGA8YXBwUm9vdD4vLmFuZ3VsYXIvY2FjaGUvKipgKS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlUGF0aHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogcG5wbSBgLS1maWx0ZXJgIGV4cHJlc3Npb24gZm9yIHRoZSBzY29wZWQgaW5zdGFsbCBpbiB0aGUgcHJlQnVpbGQgcGhhc2UuXG4gICAqXG4gICAqIFRoZSB0cmFpbGluZyBgLi4uYCBzeW50YXggcHVsbHMgaW4gdGhlIGFwcCdzIHRyYW5zaXRpdmUgd29ya3NwYWNlXG4gICAqIGRlcGVuZGVuY2llcyAoZS5nLiBhIHNoYXJlZCBBUEkgcGFja2FnZSkgYnV0IGV4Y2x1ZGVzIHVucmVsYXRlZCBwYWNrYWdlcyxcbiAgICogYXZvaWRpbmcgY29uY3VycmVudCBgcHJvamVuL25vZGVfbW9kdWxlc2AgcmVuYW1lIHJhY2VzIHVuZGVyIHRoZSBob2lzdGVkXG4gICAqIGxpbmtlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYCR7YnVpbGRGaWx0ZXJ9Li4uYFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbEZpbHRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogRnVsbCBvdmVycmlkZSBvZiB0aGUgaW5zdGFsbCBjb21tYW5kIGluIHRoZSBwcmVCdWlsZCBwaGFzZS5cbiAgICpcbiAgICogV2hlbiBzZXQsIGBpbnN0YWxsRmlsdGVyYCBpcyBpZ25vcmVkIGFuZCB0aGlzIHN0cmluZyBpcyBlbWl0dGVkIHZlcmJhdGltLlxuICAgKiBVc2UgdGhpcyBhcyBhbiBlc2NhcGUgaGF0Y2ggd2hlbiB0aGUgZGVmYXVsdCBzY29wZWQgaW5zdGFsbCBpcyBpbnN1ZmZpY2llbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLW5vZGUtbGlua2VyIGhvaXN0ZWQgLS1maWx0ZXIgXCI8aW5zdGFsbEZpbHRlcj5cImBcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBOUE0gd29ya3NwYWNlIHR1bmluZyBmb3IgdGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9Xb3Jrc3BhY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgcGFja2FnZSBnbG9icy5cbiAgICpcbiAgICogQGRlZmF1bHQgWydwYWNrYWdlcy8qJ11cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb3ZlcnJpZGVzIGZvcmNlZCBhY3Jvc3MgdGhlIHdob2xlIHdvcmtzcGFjZVxuICAgKiAodGhlIGBvdmVycmlkZXM6YCBmaWVsZCkuIE9taXR0ZWQgZnJvbSB0aGUgZmlsZSB3aGVuIGVtcHR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY2llcyBhbGxvd2VkIHRvIHJ1biBpbnN0YWxsL2J1aWxkIHNjcmlwdHMuIHBucG0gPj0gMTAgYmxvY2tzIHRoZXNlXG4gICAqIGJ5IGRlZmF1bHQuIFRoZSBsaXN0IHBvcHVsYXRlcyBib3RoIGBhbGxvd0J1aWxkc2AgYW5kXG4gICAqIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgIHNvIHBucG0gZG9lcyBub3QgdHJlYXQgYG5vZGVfbW9kdWxlc2AgYXMgc3RhbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnQGF3cy1hbXBsaWZ5L2NsaScsICdlc2J1aWxkJywgJ3NoYXJwJywgJ3VucnMtcmVzb2x2ZXInXVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZEJ1aWxkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGFnZSBpbiBtaW51dGVzIGEgcHVibGlzaGVkIHZlcnNpb24gbXVzdCBoYXZlIGJlZm9yZSBpdCBtYXkgYmVcbiAgICogaW5zdGFsbGVkIChgbWluaW11bVJlbGVhc2VBZ2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjg4MCAvLyAyIGRheXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlcyBleGVtcHQgZnJvbSBgbWluaW11bVJlbGVhc2VBZ2VgIHNvIG91ciBvd24gdG9vbGluZyBjYW4gdXBkYXRlXG4gICAqIHdpdGhvdXQgdGhlIGNvb2xkb3duLiBNRVJHRUQgb24gdG9wIG9mIHRoZSBidWlsdC1pbiBkZWZhdWx0c1xuICAgKiAoYHByb2plbi1waXBlbGluZXNgLCBgY2RrLXNlcnZlcmxlc3NgLCBgQHRhaW1vcy9wcm9qZW5gLCBgcHJvamVuYCkgYW5kXG4gICAqIGRlZHVwZWQg4oCUIHN1cHBseWluZyB0aGlzIGRvZXMgbm90IGRyb3AgdGhlIHRvb2xpbmcgZXhlbXB0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgW10gLy8gbWVyZ2VkIHdpdGggREVGQVVMVF9SRUxFQVNFX0FHRV9FWENMVURFXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPbmUgYXV0aG9yLXRvLWFwcHJvdmVycyByb3V0aW5nIHJ1bGUgZm9yIHRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvQXBwcm92ZXJNYXBwaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgdXNlcm5hbWUgb3BlbmluZyB0aGUgUFIuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiB1c2VybmFtZXMgYXNzaWduZWQgdG8gcmV2aWV3IHdoZW4gYGF1dGhvcmAgb3BlbnMgYSBQUi5cbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVyczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9Qcm9qZWN0T3B0aW9ucyBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwbnBtIHZlcnNpb24gcGlubmVkIGZvciB0aGUgd29ya3NwYWNlIGFuZCBDSS5cbiAgICpcbiAgICogQGRlZmF1bHQgJzEwLjMzLjAnXG4gICAqL1xuICByZWFkb25seSBwbnBtV29ya3NwYWNlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5vZGUuanMgdmVyc2lvbiB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgYnVpbGQgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcyMidcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQTlBNIHdvcmtzcGFjZSB0dW5pbmcgZm9yIHRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlT3B0aW9ucz86IE1vbm9yZXBvV29ya3NwYWNlT3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYGNkay1zZXJ2ZXJsZXNzYCBhcyBhIHdvcmtzcGFjZSBkZXYgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNka1NlcnZlcmxlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFzc2lnbiBQUiBhcHByb3ZlcnMgdmlhIGBHaXRIdWJBc3NpZ25BcHByb3ZlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lnbkFwcHJvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0aG9yLXRvLWFwcHJvdmVycyByb3V0aW5nIGZvciB0aGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudC5cbiAgICogT25seSB1c2VkIHdoZW4gYGFzc2lnbkFwcHJvdmVyYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGhvZWdlcnRuIGFuZCBob2VnZXJtYSByZXZpZXcgZWFjaCBvdGhlclxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZXJNYXBwaW5nPzogTW9ub3JlcG9BcHByb3Zlck1hcHBpbmdbXTtcblxuICAvKipcbiAgICogQXBwcm92ZXJzIGFzc2lnbmVkIHdoZW4gbm8gYXV0aG9yLXNwZWNpZmljIG1hcHBpbmcgbWF0Y2hlcy5cbiAgICogT25seSB1c2VkIHdoZW4gYGFzc2lnbkFwcHJvdmVyYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ2hvZWdlcnRuJywgJ2hvZWdlcm1hJ11cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBcHByb3ZlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdW5pZmllZCBidWlsZCB3b3JrZmxvdyBhbHNvIHJ1bnMgYSBzZXBhcmF0ZSBgcG5wbSAtciBydW4gdGVzdGBcbiAgICogc3RlcC5cbiAgICpcbiAgICogRWFjaCBwcm9qZW4gc3ViLXByb2plY3QncyBvd24gYGJ1aWxkYCB0YXNrIGFscmVhZHkgcnVucyBpdHMgYHRlc3RgIHN1Yi10YXNrXG4gICAqIChwcmUtY29tcGlsZSDihpIgY29tcGlsZSDihpIgcG9zdC1jb21waWxlIOKGkiB0ZXN0IOKGkiBwYWNrYWdlKSwgc28gYHBucG0gLXIgcnVuXG4gICAqIGJ1aWxkYCBhbHJlYWR5IHJ1bnMgZXZlcnkgcHJvamVuIHBhY2thZ2UncyBqZXN0ICsgZXNsaW50LiBFbmFibGluZyB0aGlzIGFkZHNcbiAgICogYSBzZWNvbmQgZnVsbCBydW4g4oCUIGluY2x1ZGluZyB0aGUgZXhwZW5zaXZlIENESyBzeW50aHMg4oCUIHJvdWdobHkgZG91YmxpbmcgQ0kuXG4gICAqXG4gICAqIENhdmVhdDogd2l0aCB0aGlzIG9mZiwgYSBoYW5kLW1hbmFnZWQgKG5vbi1wcm9qZW4pIHBhY2thZ2UgaXMgb25seSB0ZXN0ZWQgaW5cbiAgICogQ0kgaWYgaXRzIG93biBgYnVpbGRgIHNjcmlwdCBydW5zIGl0cyBjaGVja3MgKGUuZy4gYHRzYyAmJiBqZXN0YCxcbiAgICogYGVzbGludCAuICYmIHZpdGVzdCBydW4gJiYgbmV4dCBidWlsZGApLiBNYWtlIGVhY2ggaGFuZC1tYW5hZ2VkIHBhY2thZ2Unc1xuICAgKiBidWlsZCBzZWxmLWNvbnRhaW4gaXRzIHZlcmlmaWNhdGlvbiBzbyBgcG5wbSAtciBydW4gYnVpbGRgIHN0YXlzIHRoZSBzaW5nbGVcbiAgICogZ2F0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJ1blRlc3RzSW5CdWlsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb25zLiBXaGVuIHNldCwgYW4gYGFtcGxpZnkueW1sYCBpcyBnZW5lcmF0ZWRcbiAgICogd2l0aCBvbmUgZW50cnkgcGVyIGFwcC4gV2hlbiBvbWl0dGVkLCBubyBgYW1wbGlmeS55bWxgIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBhbXBsaWZ5QXBwcz86IE1vbm9yZXBvQW1wbGlmeUFwcFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIG1hbnVhbCBcIlByb2R1Y3Rpb24gUmVsZWFzZVwiIHdvcmtmbG93IHRoYXQgcHJvbW90ZXMgYSBicmFuY2hcbiAgICogdG8gdGhlIHByb2R1Y3Rpb24gYnJhbmNoIChzZWUgYEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3cuIE9ubHkgdXNlZCB3aGVuXG4gICAqIGBwcm9kdWN0aW9uUmVsZWFzZWAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm9tb3RlIGBtYWluYCB0byBhIGBwcm9kdWN0aW9uYCBicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucz86IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucztcblxuICAvKipcbiAgICogRHJpdmUgQW1wbGlmeSBIb3N0aW5nIGJ1aWxkcyBmcm9tIEdpdEh1YiBBY3Rpb25zIGluc3RlYWQgb2YgQW1wbGlmeSdzIG93blxuICAgKiBhdXRvLWJ1aWxkLCBzbyBhbiBhcHAgb25seSByZWJ1aWxkcyB3aGVuIHRoZSBwYWNrYWdlcyBpdCBpcyBidWlsdCBmcm9tXG4gICAqIGFjdHVhbGx5IGNoYW5nZWQgKHNlZSBgR2l0SHViQW1wbGlmeURlcGxveWApLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgZ2VuZXJhdGVzIG9uZSBkZXBsb3kgd29ya2Zsb3cgcGVyIGxpc3RlZCBhcHAuIFRoZSBwcm9qZWN0J3NcbiAgICogQ0RLIGFwcCBtdXN0IGRpc2FibGUgYGF1dG9CdWlsZGAgb24gdGhlIHRyYWNrZWQgYnJhbmNoZXMgYW5kIHByb3ZpZGUgdGhlXG4gICAqIGFwcC1pZCBwYXJhbWV0ZXJzIGFuZCBidWlsZC10cmlnZ2VyIHJvbGUgdGhlIHdvcmtmbG93cyBleHBlY3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQW1wbGlmeSdzIG93biBhdXRvLWJ1aWxkIGlzIGxlZnQgaW4gcGxhY2VcbiAgICovXG4gIHJlYWRvbmx5IGFtcGxpZnlEZXBsb3lPcHRpb25zPzogR2l0SHViQW1wbGlmeURlcGxveU9wdGlvbnM7XG59XG5cbi8qKlxuICogUHJpdmF0ZSBQTlBNLXdvcmtzcGFjZSBtb25vcmVwbyByb290LCBmb2xsb3dpbmcgVGFpbW9zIEFEUi0wMDAyLlxuICpcbiAqIFRoZSByb290IG9ubHkgb3JjaGVzdHJhdGVzIHRoZSB3b3Jrc3BhY2Ug4oCUIGJ1aWxkaW5nLCB0ZXN0aW5nIGFuZCBsaW50aW5nIGFyZVxuICogZGVsZWdhdGVkIHRvIHRoZSB3b3Jrc3BhY2UgcGFja2FnZXMgdmlhIGBwbnBtIC1yYC4gVGhpcyBwcm9qZWN0IGdlbmVyYXRlcyB0aGVcbiAqIGBwbnBtLXdvcmtzcGFjZS55YW1sYCwgdGhlIHJvb3QgY29udmVuaWVuY2Ugc2NyaXB0cywgYSB1bmlmaWVkIFBSIGJ1aWxkXG4gKiB3b3JrZmxvdyBhbmQgKG9wdGlvbmFsbHkpIGFuIEFtcGxpZnkgSG9zdGluZyBidWlsZCBzcGVjLiBUaGUgcHJvamVuLW1hbmFnZWRcbiAqIHN1Yi1wcm9qZWN0cyAoYXBpLCBiYWNrZW5kLCBpbmZyYSkgYXJlIGFkZGVkIHdpdGggdGhlIGBwYXJlbnRgL2BvdXRkaXJgXG4gKiBwYXR0ZXJuIGluIHRoZSBjb25zdW1pbmcgYC5wcm9qZW5yYy50c2A7IHBsYWluIHdvcmtzcGFjZSBwYWNrYWdlcyAoZS5nLlxuICogTmV4dC5qcyBhcHBzKSBhcmUgcGlja2VkIHVwIGJ5IHRoZSBgcGFja2FnZXMvKmAgZ2xvYi5cbiAqXG4gKiBAcGppZCB0YWltb3MtbW9ub3JlcG9cbiAqL1xuZXhwb3J0IGNsYXNzIE1vbm9yZXBvUHJvamVjdCBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlcyBleGVtcHQgZnJvbSBgbWluaW11bVJlbGVhc2VBZ2VgIGJ5IGRlZmF1bHQgc28gb3VyIG93biBidWlsZCB0b29saW5nXG4gICAqIGNhbiB1cGRhdGUgd2l0aG91dCB0aGUgY29vbGRvd24uIEEgY29uc3VtZXInc1xuICAgKiBgd29ya3NwYWNlT3B0aW9ucy5taW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGVgIGlzIG1lcmdlZCBvbiB0b3Agb2YgdGhpcyBsaXN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1JFTEVBU0VfQUdFX0VYQ0xVREU6IHN0cmluZ1tdID0gW1xuICAgICdwcm9qZW4tcGlwZWxpbmVzJyxcbiAgICAnY2RrLXNlcnZlcmxlc3MnLFxuICAgICdAdGFpbW9zL3Byb2plbicsXG4gICAgJ3Byb2plbicsXG4gIF07XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlRmlsZTogWWFtbEZpbGU7XG5cbiAgLyoqIFRoZSB1bmlmaWVkIFBSIGJ1aWxkIHdvcmtmbG93LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJCdWlsZFdvcmtmbG93OiBnaXRodWIuR2l0aHViV29ya2Zsb3c7XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYCwgaWYgYW55IEFtcGxpZnkgYXBwcyB3ZXJlIGNvbmZpZ3VyZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBhbXBsaWZ5RmlsZT86IFlhbWxGaWxlO1xuXG4gIC8qKiBUaGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudCwgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbkFwcHJvdmVyPzogR2l0SHViQXNzaWduQXBwcm92ZXI7XG5cbiAgLyoqIFRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3csIGlmIGVuYWJsZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZT86IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlO1xuXG4gIC8qKiBUaGUgQW1wbGlmeSBkZXBsb3kgd29ya2Zsb3dzLCB3aGVuIGBhbXBsaWZ5RGVwbG95T3B0aW9uc2AgaXMgc2V0LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYW1wbGlmeURlcGxveT86IEdpdEh1YkFtcGxpZnlEZXBsb3k7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHJlbGVhc2UgYnJhbmNoIChwcm9tb3RlZCBieSB0aGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93KS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9ub3JlcG9Qcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IHBucG1WZXJzaW9uID0gb3B0aW9ucy5wbnBtV29ya3NwYWNlVmVyc2lvbiA/PyAnMTAuMzMuMCc7XG5cbiAgICAvLyBQTlBNIHdvcmtzcGFjZSB0dW5pbmcg4oCUIG1hcHBlZCBvbnRvIHByb2plbidzIG5hdGl2ZSBgcG5wbS13b3Jrc3BhY2UueWFtbGBcbiAgICAvLyBzdXBwb3J0IChwcm9qZW4gPj0gMC4xMDEpIHRocm91Z2ggYGFsbG93U2NyaXB0c2AgKyBgcG5wbU9wdGlvbnNgIGJlbG93LFxuICAgIC8vIHJhdGhlciB0aGFuIGhhbmQtcm9sbGluZyB0aGUgWUFNTCBmaWxlLlxuICAgIGNvbnN0IHdzID0gb3B0aW9ucy53b3Jrc3BhY2VPcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IGFsbG93ZWRCdWlsZHMgPSB3cy5hbGxvd2VkQnVpbGRzID8/IFsnQGF3cy1hbXBsaWZ5L2NsaScsICdlc2J1aWxkJywgJ3NoYXJwJywgJ3VucnMtcmVzb2x2ZXInXTtcblxuICAgIC8vIFBhY2thZ2VzIGV4ZW1wdCBmcm9tIGBtaW5pbXVtUmVsZWFzZUFnZWAgc28gb3VyIG93biBidWlsZCB0b29saW5nIGNhblxuICAgIC8vIHVwZGF0ZSB3aXRob3V0IHRoZSBjb29sZG93bi4gYHByb2plbmAgaXMgaW5jbHVkZWQgYmVjYXVzZSBgQHRhaW1vcy9wcm9qZW5gXG4gICAgLy8gcGlucyBhIHByb2plbiBmbG9vciwgc28gdGhlIHR3byBtdXN0IG1vdmUgaW4gbG9ja3N0ZXAuIEEgY29uc3VtZXItc3VwcGxpZWRcbiAgICAvLyBsaXN0IE1FUkdFUyB3aXRoIHRoZXNlIGRlZmF1bHRzIChkZWR1cGVkKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc29cbiAgICAvLyBhZGRpbmcgb25lIHBhY2thZ2UgZG9lcyBub3Qgc2lsZW50bHkgZHJvcCB0aGUgdG9vbGluZyBleGVtcHRpb25zLlxuICAgIGNvbnN0IHJlbGVhc2VBZ2VFeGNsdWRlID0gQXJyYXkuZnJvbShuZXcgU2V0KFtcbiAgICAgIC4uLk1vbm9yZXBvUHJvamVjdC5ERUZBVUxUX1JFTEVBU0VfQUdFX0VYQ0xVREUsXG4gICAgICAuLi4od3MubWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlID8/IFtdKSxcbiAgICBdKSk7XG5cbiAgICBzdXBlcih7XG4gICAgICBsaWNlbnNlZDogZmFsc2UsXG4gICAgICByZWxlYXNlOiBmYWxzZSxcbiAgICAgIGRlcHNVcGdyYWRlOiBmYWxzZSxcbiAgICAgIC8vIFRoZSByb290IG9ubHkgb3JjaGVzdHJhdGVzIHRoZSB3b3Jrc3BhY2Ug4oCUIG5vIGFwcCBjb2RlIGxpdmVzIGhlcmUuXG4gICAgICBqZXN0OiBmYWxzZSxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIC8vIENJIGlzIHRoZSBzaW5nbGUgaGFuZC1yb2xsZWQgd29ya2Zsb3cgYmVsb3cgdGhhdCBkZWxlZ2F0ZXMgdG8gcGFja2FnZXMuXG4gICAgICBidWlsZFdvcmtmbG93OiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBGb3JjZWQg4oCUIGRlZmluaW5nIHdoYXQgYSBUYWltb3MgbW9ub3JlcG8gcm9vdCBpcy5cbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5QTlBNLFxuICAgICAgcG5wbVZlcnNpb24sXG4gICAgICAvLyBOYXRpdmUgcG5wbS13b3Jrc3BhY2UueWFtbCAocHJvamVuID49IDAuMTAxKS4gYGFsbG93U2NyaXB0c2AgcmVuZGVycyB0aGVcbiAgICAgIC8vIGJ1aWxkIGFsbG93bGlzdCBpbnRvIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgOyB0aGUgcmVtYWluaW5nIHR1bmluZyBtYXBzXG4gICAgICAvLyBvbnRvIGB3b3Jrc3BhY2VZYW1sT3B0aW9uc2AuIEFueSBjb25zdW1lci1zdXBwbGllZCBgcG5wbU9wdGlvbnNgIGFyZVxuICAgICAgLy8gbWVyZ2VkIGluIGFuZCB3aW4gb3ZlciBvdXIgZGVmYXVsdHMuXG4gICAgICBhbGxvd1NjcmlwdHM6IGFsbG93ZWRCdWlsZHMsXG4gICAgICBwbnBtT3B0aW9uczoge1xuICAgICAgICAuLi5vcHRpb25zLnBucG1PcHRpb25zLFxuICAgICAgICB3b3Jrc3BhY2VZYW1sT3B0aW9uczoge1xuICAgICAgICAgIC8vIHBucG0gMTEgcmVwbGFjZWQgYG9ubHlCdWlsdERlcGVuZGVuY2llc2AgKHdoaWNoIGBhbGxvd1NjcmlwdHNgXG4gICAgICAgICAgLy8gcmVuZGVycykgd2l0aCBgYWxsb3dCdWlsZHNgLCBhbmQgcmVhZHMgb25seSB0aGUgbGF0dGVyIOKAlCBhIHBucG0gMTFcbiAgICAgICAgICAvLyBpbnN0YWxsIG90aGVyd2lzZSBhYm9ydHMgd2l0aCBFUlJfUE5QTV9JR05PUkVEX0JVSUxEUy4gcG5wbSAxMCByZWFkc1xuICAgICAgICAgIC8vIG9ubHkgYG9ubHlCdWlsdERlcGVuZGVuY2llc2AuIEVtaXQgYm90aCBzbyB0aGUgc2FtZSB3b3Jrc3BhY2UgZmlsZVxuICAgICAgICAgIC8vIHdvcmtzIG9uIGVpdGhlciwgd2hhdGV2ZXIgYHBucG1WZXJzaW9uYCBhIGNvbnN1bWVyIHBpbnMuXG4gICAgICAgICAgYWxsb3dCdWlsZHM6IE9iamVjdC5mcm9tRW50cmllcyhhbGxvd2VkQnVpbGRzLm1hcCgocGtnKSA9PiBbcGtnLCB0cnVlXSkpLFxuICAgICAgICAgIHBhY2thZ2VzOiB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXSxcbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZTogd3MubWluaW11bVJlbGVhc2VBZ2UgPz8gMjg4MCwgLy8gMiBkYXlzIGluIG1pbnV0ZXNcbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU6IHJlbGVhc2VBZ2VFeGNsdWRlLFxuICAgICAgICAgIC4uLih3cy5vdmVycmlkZXMgJiYgT2JqZWN0LmtleXMod3Mub3ZlcnJpZGVzKS5sZW5ndGggPiAwID8geyBvdmVycmlkZXM6IHdzLm92ZXJyaWRlcyB9IDoge30pLFxuICAgICAgICAgIC4uLm9wdGlvbnMucG5wbU9wdGlvbnM/LndvcmtzcGFjZVlhbWxPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgICBnaXRodWI6IHRydWUsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCgpLFxuICAgICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgICAgbWVyZ2VRdWV1ZTogdHJ1ZSxcbiAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zLFxuICAgICAgICBtZXJnZVF1ZXVlT3B0aW9uczoge1xuICAgICAgICAgIGF1dG9RdWV1ZTogdHJ1ZSxcbiAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/Lm1lcmdlUXVldWVPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5wdWxsUmVxdWVzdExpbnRPcHRpb25zLFxuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/LnB1bGxSZXF1ZXN0TGludE9wdGlvbnM/LnNlbWFudGljVGl0bGVPcHRpb25zLFxuICAgICAgICAgICAgLy8gRml4ZWQgYWxsb3dlZCBQUiB0aXRsZSB0eXBlcyBmb3IgYSBUYWltb3MgbW9ub3JlcG8uXG4gICAgICAgICAgICB0eXBlczogWydmZWF0JywgJ2ZpeCcsICdjaG9yZScsICdkb2NzJywgJ3NwZWMnLCAnY2knXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0YWltb3MvcHJvamVuJyxcbiAgICAgICAgJ3Byb2plbi1waXBlbGluZXMnLFxuICAgICAgICAuLi4ob3B0aW9ucy5jZGtTZXJ2ZXJsZXNzID8/IGZhbHNlID8gWydjZGstc2VydmVybGVzcyddIDogW10pLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgPz8gW10sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gUHJpdmF0ZSB3b3Jrc3BhY2Ugcm9vdCDigJQgbmV2ZXIgcHVibGlzaGVkLCByZXNvbHZlcyBwYWNrYWdlcyBsb2NhbGx5LlxuICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgncHJpdmF0ZScsIHRydWUpO1xuXG4gICAgdGhpcy5kZWZhdWx0UmVsZWFzZUJyYW5jaCA9IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggPz8gJ21haW4nO1xuXG4gICAgLy8gUFIgYXBwcm92ZXIgcm91dGluZy5cbiAgICBpZiAob3B0aW9ucy5hc3NpZ25BcHByb3ZlciA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkFwcHJvdmVyID0gbmV3IEdpdEh1YkFzc2lnbkFwcHJvdmVyKHRoaXMsIHtcbiAgICAgICAgYXBwcm92ZXJNYXBwaW5nOiBvcHRpb25zLmFwcHJvdmVyTWFwcGluZyA/PyBbXG4gICAgICAgICAgeyBhdXRob3I6ICdob2VnZXJ0bicsIGFwcHJvdmVyczogWydob2VnZXJtYSddIH0sXG4gICAgICAgICAgeyBhdXRob3I6ICdob2VnZXJtYScsIGFwcHJvdmVyczogWydob2VnZXJ0biddIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRlZmF1bHRBcHByb3ZlcnM6IG9wdGlvbnMuZGVmYXVsdEFwcHJvdmVycyA/PyBbJ2hvZWdlcnRuJywgJ2hvZWdlcm1hJ10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBNYW51YWwgcHJvZHVjdGlvbiByZWxlYXNlIOKAlCBwcm9tb3RlcyBhIGJyYW5jaCB0byB0aGUgcHJvZHVjdGlvbiBicmFuY2guXG4gICAgaWYgKG9wdGlvbnMuYW1wbGlmeURlcGxveU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuYW1wbGlmeURlcGxveSA9IG5ldyBHaXRIdWJBbXBsaWZ5RGVwbG95KHRoaXMsIG9wdGlvbnMuYW1wbGlmeURlcGxveU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByb2R1Y3Rpb25SZWxlYXNlID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLnByb2R1Y3Rpb25SZWxlYXNlID0gbmV3IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlKHRoaXMsIG9wdGlvbnMucHJvZHVjdGlvblJlbGVhc2VPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHJvamVucmMgaXMgc3BsaXQgaW50byBtb2R1bGVzIHVuZGVyIC5wcm9qZW4vIOKAlCBtYWtlIHRoZW0gcGFydCBvZiB0aGVcbiAgICAvLyBkZXYgdHNjb25maWcgc28gdGhlIElERSBhbmQgdHMtbm9kZSB0eXBlLWNoZWNrIHRoZW0uXG4gICAgdGhpcy50c2NvbmZpZ0Rldj8uYWRkSW5jbHVkZSgnLnByb2plbi8qLnRzJyk7XG5cbiAgICAvLyBwcm9qZW4ncyBOb2RlUGFja2FnZSBnZW5lcmF0ZXMgYHBucG0td29ya3NwYWNlLnlhbWxgIG5hdGl2ZWx5IChwcm9qZW4gPj1cbiAgICAvLyAwLjEwMSksIGNvbmZpZ3VyZWQgdmlhIHRoZSBgcG5wbU9wdGlvbnNgL2BhbGxvd1NjcmlwdHNgIHBhc3NlZCB0byBzdXBlcigpLlxuICAgIC8vIEV4cG9zZSB0aGUgZ2VuZXJhdGVkIGZpbGUgc28gY29uc3VtZXJzIGNhbiBmdXJ0aGVyIGN1c3RvbWl6ZSBpdC5cbiAgICB0aGlzLndvcmtzcGFjZUZpbGUgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKCdwbnBtLXdvcmtzcGFjZS55YW1sJykgYXMgWWFtbEZpbGU7XG5cbiAgICAvLyBDb252ZW5pZW5jZSByb290IHNjcmlwdHMgZGVsZWdhdGUgdG8gdGhlIHdvcmtzcGFjZS5cbiAgICBjb25zdCByb290UGtnID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgncGFja2FnZS5qc29uJykhO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMuYnVpbGQnLCAncG5wbSAtciBydW4gYnVpbGQnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLnRlc3QnLCAncG5wbSAtciBydW4gdGVzdCcpO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMubGludCcsICdwbnBtIC1yIHJ1biBlc2xpbnQnKTtcblxuICAgIC8vIFVuaWZpZWQgUFIgYnVpbGQgd29ya2Zsb3cg4oCUIGJ1aWxkcyAoYW5kIG9wdGlvbmFsbHkgdGVzdHMpIGV2ZXJ5IHdvcmtzcGFjZVxuICAgIC8vIHBhY2thZ2UgaW4gZGVwZW5kZW5jeSBvcmRlci5cbiAgICBjb25zdCBub2RlVmVyc2lvbiA9IG9wdGlvbnMubm9kZVZlcnNpb24gPz8gJzIyJztcbiAgICBjb25zdCBidWlsZFN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtcbiAgICAgIHsgbmFtZTogJ0NoZWNrb3V0JywgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnIH0sXG4gICAgICB7IG5hbWU6ICdTZXR1cCBwbnBtJywgdXNlczogJ3BucG0vYWN0aW9uLXNldHVwQHY0Jywgd2l0aDogeyB2ZXJzaW9uOiBwbnBtVmVyc2lvbiB9IH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtbm9kZUB2NCcsXG4gICAgICAgIHdpdGg6IHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uLCAnY2FjaGUnOiAncG5wbScgfSxcbiAgICAgIH0sXG4gICAgICB7IG5hbWU6ICdJbnN0YWxsJywgcnVuOiAncG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlJyB9LFxuICAgICAgeyBuYW1lOiAnQnVpbGQnLCBydW46ICdwbnBtIC1yIHJ1biBidWlsZCcgfSxcbiAgICBdO1xuICAgIGlmIChvcHRpb25zLnJ1blRlc3RzSW5CdWlsZCA/PyBmYWxzZSkge1xuICAgICAgYnVpbGRTdGVwcy5wdXNoKHsgbmFtZTogJ1Rlc3QnLCBydW46ICdwbnBtIC1yIHJ1biB0ZXN0JyB9KTtcbiAgICB9XG4gICAgLy8gUGF0aCBmaWx0ZXI6IG9ubHkgdHJpZ2dlciBidWlsZHMgd2hlbiB3b3Jrc3BhY2UgcGFja2FnZSBmaWxlcyBvclxuICAgIC8vIGJ1aWxkLXJlbGV2YW50IHJvb3QgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBDaGFuZ2VzIHRvIHNwZWNzIG9yIGRvY3NcbiAgICAvLyBhbG9uZSBzaG91bGQgbm90IHRyaWdnZXIgYSBuZXcgYnVpbGQuXG4gICAgY29uc3Qgd29ya3NwYWNlUGFja2FnZXMgPSB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXTtcbiAgICBjb25zdCBidWlsZFBhdGhzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC8vIFdvcmtzcGFjZSBwYWNrYWdlIHNvdXJjZSBmaWxlcy5cbiAgICAgIC4uLndvcmtzcGFjZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBgJHtwa2d9LyoqYCksXG4gICAgICAvLyBEZXBlbmRlbmN5IGxvY2sgJiB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbi5cbiAgICAgICdwbnBtLWxvY2sueWFtbCcsXG4gICAgICAncG5wbS13b3Jrc3BhY2UueWFtbCcsXG4gICAgICAvLyBSb290IHBhY2thZ2UuanNvbiAoc2NyaXB0cywgZGV2RGVwcywgZW5naW5lcykuXG4gICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgIC8vIFByb2plbiBjb25maWd1cmF0aW9uIOKAlCByZWdlbmVyYXRlcyBwcm9qZWN0IGZpbGVzLlxuICAgICAgJy5wcm9qZW5yYy50cycsXG4gICAgICAnLnByb2plbnJjLmpzJyxcbiAgICAgICcucHJvamVuLyoqJyxcbiAgICAgIC8vIFNoYXJlZCBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24uXG4gICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAndHNjb25maWcuKi5qc29uJyxcbiAgICAgIC8vIFRoZSBidWlsZCB3b3JrZmxvdyBpdHNlbGYuXG4gICAgICAnLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sJyxcbiAgICAgIC8vIFNoYXJlZCBsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAgICAnLmVzbGludHJjLionLFxuICAgICAgJ2VzbGludC5jb25maWcuKicsXG4gICAgXTtcblxuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93ID0gbmV3IGdpdGh1Yi5HaXRodWJXb3JrZmxvdyh0aGlzLmdpdGh1YiEsICdidWlsZCcpO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0OiB7IHBhdGhzOiBidWlsZFBhdGhzIH0sXG4gICAgICBwdXNoOiB7IGJyYW5jaGVzOiBbJ21haW4nXSwgcGF0aHM6IGJ1aWxkUGF0aHMgfSxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgIH0pO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93LmFkZEpvYignYnVpbGQnLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogYnVpbGRTdGVwcyxcbiAgICB9KTtcblxuICAgIC8vIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gUE5QTSB3b3Jrc3BhY2VzIGFyZSBub3QgYXV0by1kZXRlY3RlZCBieVxuICAgIC8vIEFtcGxpZnksIHNvIGVhY2ggYXBwIGluc3RhbGxzIGF0IHRoZSByZXBvIHJvb3QsIHByZS1idWlsZHMgaXRzIHNoYXJlZFxuICAgIC8vIHBhY2thZ2VzLCB0aGVuIGJ1aWxkcyBmcm9tIGl0cyBhcHBSb290IChzZWUgQURSLTAwMDIpLlxuICAgIGlmIChvcHRpb25zLmFtcGxpZnlBcHBzICYmIG9wdGlvbnMuYW1wbGlmeUFwcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbXBsaWZ5RmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLCAnYW1wbGlmeS55bWwnLCB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgYXBwbGljYXRpb25zOiBvcHRpb25zLmFtcGxpZnlBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLnJlbmRlckFtcGxpZnlBcHAoYXBwKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFtcGxpZnlBcHAoYXBwOiBNb25vcmVwb0FtcGxpZnlBcHApIHtcbiAgICBjb25zdCBhbmd1bGFyID0gYXBwLmZyYW1ld29yayA9PT0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrLkFOR1VMQVI7XG4gICAgLy8gU2NvcGUgdGhlIGluc3RhbGwgdG8gdGhlIGFwcCdzIGRlcGVuZGVuY3kgY2xvc3VyZSB0byBhdm9pZCBjb25jdXJyZW50XG4gICAgLy8gcHJvamVuL25vZGVfbW9kdWxlcyByZW5hbWUgcmFjZXMgdW5kZXIgdGhlIGhvaXN0ZWQgbGlua2VyIChzZWUgIzM3MikuXG4gICAgY29uc3QgZmlsdGVyID0gYXBwLmluc3RhbGxGaWx0ZXIgPz8gYCR7YXBwLmJ1aWxkRmlsdGVyfS4uLmA7XG4gICAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSBhcHAuaW5zdGFsbENvbW1hbmRcbiAgICAgID8/IGBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1ub2RlLWxpbmtlciBob2lzdGVkIC0tZmlsdGVyIFwiJHtmaWx0ZXJ9XCJgO1xuICAgIGNvbnN0IHByZUJ1aWxkID0gW1xuICAgICAgJ2NvcmVwYWNrIGVuYWJsZScsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICAgIC4uLihhcHAucHJlQnVpbGRGaWx0ZXJzID8/IFtdKS5tYXAoKGYpID0+IGBwbnBtIC0tZmlsdGVyICR7Zn0gcnVuIGJ1aWxkYCksXG4gICAgXTtcbiAgICAvLyBCVUlMRF9FTlYgKGRldnxwcm9kKSBpcyBwcm92aWRlZCBhcyBhbiBBbXBsaWZ5IGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IGFwcC5idWlsZENvbW1hbmQgPz8gKGFuZ3VsYXJcbiAgICAgID8gYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZDpcXCR7QlVJTERfRU5WfWBcbiAgICAgIDogYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZGApO1xuICAgIGNvbnN0IGJhc2VEaXJlY3RvcnkgPSBhcHAuYXJ0aWZhY3RCYXNlRGlyZWN0b3J5ID8/IChhbmd1bGFyXG4gICAgICA/IGAke2FwcC5hcHBSb290fS9kaXN0LyR7YXBwLmJ1aWxkRmlsdGVyfS9icm93c2VyYFxuICAgICAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHRgKTtcbiAgICBjb25zdCBjYWNoZVBhdGhzID0gYXBwLmNhY2hlUGF0aHMgPz8gW1xuICAgICAgJ25vZGVfbW9kdWxlcy8qKi8qJyxcbiAgICAgIGFuZ3VsYXIgPyBgJHthcHAuYXBwUm9vdH0vLmFuZ3VsYXIvY2FjaGUvKiovKmAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHQvY2FjaGUvKiovKmAsXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwUm9vdDogYXBwLmFwcFJvb3QsXG4gICAgICBmcm9udGVuZDoge1xuICAgICAgICAvLyBJbnN0YWxsL2J1aWxkIGZyb20gdGhlIG1vbm9yZXBvIHJvb3Qgc28gdGhlIHdvcmtzcGFjZSByb290XG4gICAgICAgIC8vIHBhY2thZ2UuanNvbiBhbmQgcG5wbS1sb2NrLnlhbWwgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgYnVpbGRQYXRoOiAnLycsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZUJ1aWxkOiB7IGNvbW1hbmRzOiBwcmVCdWlsZCB9LFxuICAgICAgICAgIGJ1aWxkOiB7IGNvbW1hbmRzOiBbYnVpbGRDb21tYW5kXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhcnRpZmFjdHM6IHsgYmFzZURpcmVjdG9yeSwgZmlsZXM6IFsnKiovKiddIH0sXG4gICAgICAgIGNhY2hlOiB7IHBhdGhzOiBjYWNoZVBhdGhzIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,7 +10,7 @@ const cdk_app_1 = require("./cdk-app");
|
|
|
10
10
|
* @pjid taimos-cdk-app-private
|
|
11
11
|
*/
|
|
12
12
|
class PrivateTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.84" };
|
|
14
14
|
constructor(options) {
|
|
15
15
|
super({
|
|
16
16
|
licensed: false,
|
|
@@ -10,7 +10,7 @@ const ts_lib_1 = require("./ts-lib");
|
|
|
10
10
|
* @pjid taimos-ts-lib-private
|
|
11
11
|
*/
|
|
12
12
|
class TaimosPrivateTypescriptLibrary extends ts_lib_1.TaimosTypescriptLibrary {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.84" };
|
|
14
14
|
constructor(options) {
|
|
15
15
|
super({
|
|
16
16
|
licensed: false,
|
|
@@ -11,7 +11,7 @@ const cdk_app_1 = require("./cdk-app");
|
|
|
11
11
|
* @pjid taimos-cdk-app-production
|
|
12
12
|
*/
|
|
13
13
|
class ProductionTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.84" };
|
|
15
15
|
/**
|
|
16
16
|
* The SonarCloud properties file.
|
|
17
17
|
*/
|
package/lib/projects/ts-lib.js
CHANGED
|
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
|
|
|
9
9
|
* @pjid taimos-ts-lib
|
|
10
10
|
*/
|
|
11
11
|
class TaimosTypescriptLibrary extends projen_1.typescript.TypeScriptProject {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.84" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super({
|
|
15
15
|
authorName: 'Taimos GmbH',
|