@aws-mdaa/datawarehouse 1.5.0 → 1.6.0
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/README.md +108 -154
- package/SCHEMA.md +1563 -1731
- package/lib/config-schema.json +25 -10
- package/lib/datawarehouse-config.d.ts +49 -7
- package/lib/datawarehouse-config.js +7 -2
- package/package.json +17 -15
- package/sample_configs/sample-config-comprehensive.yaml +212 -0
- package/sample_configs/sample-config-minimal.yaml +45 -0
- package/sample_configs/sample-config-public-access-block-external.yaml +31 -0
- package/mdaa.config.json +0 -3
package/lib/config-schema.json
CHANGED
|
@@ -2346,10 +2346,6 @@
|
|
|
2346
2346
|
"additionalProperties": false,
|
|
2347
2347
|
"type": "object"
|
|
2348
2348
|
},
|
|
2349
|
-
"Record<string,string>": {
|
|
2350
|
-
"additionalProperties": false,
|
|
2351
|
-
"type": "object"
|
|
2352
|
-
},
|
|
2353
2349
|
"ResourceEnvironment": {
|
|
2354
2350
|
"additionalProperties": false,
|
|
2355
2351
|
"description": "Represents the environment a given resource lives in.\nUsed as the return value for the `IResource.env` property.",
|
|
@@ -2938,9 +2934,13 @@
|
|
|
2938
2934
|
"description": "Number of days automated snapshots are retained (1-35). Set to 0 to disable.\n\nUse cases: Backup management; Point-in-time recovery; Data protection compliance\n\nAWS: Redshift automated snapshot retention\n\nValidation: Optional; integer 0-35",
|
|
2939
2935
|
"type": "number"
|
|
2940
2936
|
},
|
|
2937
|
+
"backupRegion": {
|
|
2938
|
+
"description": "Target region for cross-region snapshot copies. When set, enables cross-region snapshot copy to this region.\n\nUse cases: Disaster recovery; Cross-region backup; Business continuity\n\nAWS: Redshift snapshot copy destination region\n\nValidation: Optional; valid AWS region string, must differ from the deployment region",
|
|
2939
|
+
"type": "string"
|
|
2940
|
+
},
|
|
2941
2941
|
"clusterPort": {
|
|
2942
2942
|
"default": 5440,
|
|
2943
|
-
"description": "TCP port for client connections to the cluster.\n\nUse cases: Custom port configuration; Network security; Port standardization\n\nAWS: Redshift cluster listening port\n\nValidation: Optional; valid port number",
|
|
2943
|
+
"description": "TCP port for client connections to the cluster.\n\nUse cases: Custom port configuration; Network security; Port standardization\n\nAWS: Redshift cluster listening port\n\nValidation: Optional; valid port number; must be in range 5431-5455 or 8191-8215 when multiAz is true",
|
|
2944
2944
|
"type": "number"
|
|
2945
2945
|
},
|
|
2946
2946
|
"createWarehouseBucket": {
|
|
@@ -2989,6 +2989,10 @@
|
|
|
2989
2989
|
},
|
|
2990
2990
|
"type": "array"
|
|
2991
2991
|
},
|
|
2992
|
+
"multiAz": {
|
|
2993
|
+
"description": "Enable multi-AZ deployment for high availability.\n\nUse cases: High availability; Fault tolerance; Production deployments\n\nAWS: Redshift multi-AZ deployment\n\nValidation: Optional; boolean. When true, requires: numberOfNodes >= 2, subnetIds in >= 3 AZs,\nclusterPort in range 5431-5455 or 8191-8215, and pause/resume scheduled actions are not supported.",
|
|
2994
|
+
"type": "boolean"
|
|
2995
|
+
},
|
|
2992
2996
|
"multiNode": {
|
|
2993
2997
|
"description": "Multi-node cluster flag. When true, creates a multi-node cluster for distributed processing;\nwhen false, creates a single-node cluster for development or small workloads.\n\nUse cases: Cluster architecture selection; Dev vs production deployment; Cost optimization\n\nAWS: Redshift cluster type (single-node or multi-node)\n\nValidation: Optional; boolean",
|
|
2994
2998
|
"type": "boolean"
|
|
@@ -3002,17 +3006,25 @@
|
|
|
3002
3006
|
"type": "string"
|
|
3003
3007
|
},
|
|
3004
3008
|
"numberOfNodes": {
|
|
3005
|
-
"description": "Number of nodes in the Redshift cluster.\n\nUse cases: Cluster sizing; Performance scaling; Cost management\n\nAWS: Redshift cluster node count\n\nValidation: Required; positive integer",
|
|
3009
|
+
"description": "Number of nodes in the Redshift cluster.\n\nUse cases: Cluster sizing; Performance scaling; Cost management\n\nAWS: Redshift cluster node count\n\nValidation: Required; positive integer; must be >= 2 when multiAz is true",
|
|
3006
3010
|
"type": "number"
|
|
3007
3011
|
},
|
|
3008
3012
|
"parameterGroupParams": {
|
|
3009
|
-
"
|
|
3010
|
-
|
|
3013
|
+
"additionalProperties": {
|
|
3014
|
+
"type": "string"
|
|
3015
|
+
},
|
|
3016
|
+
"description": "Additional cluster parameter group parameters for performance tuning.\nSecurity-sensitive values are automatically overridden for compliance (e.g., SSL enforcement).\n\nUse cases: Performance tuning; Custom cluster configuration; Workload optimization\n\nAWS: Redshift parameter group parameters\n\nValidation: Optional; string key-value pairs",
|
|
3017
|
+
"type": "object"
|
|
3011
3018
|
},
|
|
3012
3019
|
"preferredMaintenanceWindow": {
|
|
3013
3020
|
"description": "Weekly maintenance window in ddd:hh24:mi-ddd:hh24:mi format (UTC).\nExample: 'Sun:23:45-Mon:00:15'.\n\nUse cases: Maintenance scheduling; Business continuity; Downtime management\n\nAWS: Redshift preferred maintenance window\n\nValidation: Required; valid time window format",
|
|
3014
3021
|
"type": "string"
|
|
3015
3022
|
},
|
|
3023
|
+
"publicAccessBlockManagedExternally": {
|
|
3024
|
+
"default": false,
|
|
3025
|
+
"description": "When true, omits the explicit blockPublicAccess setting on S3 buckets so CDK does not emit\na PutBucketPublicAccessBlock API call. Use when public access block is managed externally\n(e.g., by AWS account-level settings and/or SCPs that deny s3:PutBucketPublicAccessBlock).\n\nUse cases: SCP-restricted environments; Externally managed public access block;\nOrganizations enforcing account-level S3 Block Public Access\n\nAWS: S3 PutBucketPublicAccessBlock\n\nValidation: Optional; boolean; default false",
|
|
3026
|
+
"type": "boolean"
|
|
3027
|
+
},
|
|
3016
3028
|
"redshiftManageMasterPassword": {
|
|
3017
3029
|
"type": "boolean"
|
|
3018
3030
|
},
|
|
@@ -3056,10 +3068,13 @@
|
|
|
3056
3068
|
},
|
|
3057
3069
|
"snapshotOwnerAccount": {
|
|
3058
3070
|
"description": "ownerAccount Refers to snapshot owner account. Applicable if restoring the cluster from snapshot and snapshot belongs to another account\nOptional - By default, snapshots are searched within current account",
|
|
3059
|
-
"type":
|
|
3071
|
+
"type": [
|
|
3072
|
+
"string",
|
|
3073
|
+
"number"
|
|
3074
|
+
]
|
|
3060
3075
|
},
|
|
3061
3076
|
"subnetIds": {
|
|
3062
|
-
"description": "Subnet IDs for Redshift cluster node placement. For automatic cluster relocation,\nspecify at least one subnet per AZ.\n\nUse cases: Multi-AZ placement; Subnet-specific deployment; Cluster relocation support\n\nAWS: VPC subnets for Redshift subnet group\n\nValidation: Required; array of valid subnet IDs in the specified VPC",
|
|
3077
|
+
"description": "Subnet IDs for Redshift cluster node placement. For automatic cluster relocation,\nspecify at least one subnet per AZ.\n\nUse cases: Multi-AZ placement; Subnet-specific deployment; Cluster relocation support\n\nAWS: VPC subnets for Redshift subnet group\n\nValidation: Required; array of valid subnet IDs in the specified VPC; must contain >= 3 subnets in different AZs when multiAz is true",
|
|
3063
3078
|
"items": {
|
|
3064
3079
|
"type": "string"
|
|
3065
3080
|
},
|
|
@@ -90,7 +90,7 @@ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
|
90
90
|
*
|
|
91
91
|
* AWS: VPC subnets for Redshift subnet group
|
|
92
92
|
*
|
|
93
|
-
* Validation: Required; array of valid subnet IDs in the specified VPC
|
|
93
|
+
* Validation: Required; array of valid subnet IDs in the specified VPC; must contain >= 3 subnets in different AZs when multiAz is true
|
|
94
94
|
*/
|
|
95
95
|
readonly subnetIds: string[];
|
|
96
96
|
/**
|
|
@@ -124,7 +124,7 @@ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
|
124
124
|
*
|
|
125
125
|
* AWS: Redshift cluster node count
|
|
126
126
|
*
|
|
127
|
-
* Validation: Required; positive integer
|
|
127
|
+
* Validation: Required; positive integer; must be >= 2 when multiAz is true
|
|
128
128
|
*/
|
|
129
129
|
readonly numberOfNodes: number;
|
|
130
130
|
/**
|
|
@@ -145,7 +145,7 @@ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
|
145
145
|
*
|
|
146
146
|
* AWS: Redshift cluster listening port
|
|
147
147
|
*
|
|
148
|
-
* Validation: Optional; valid port number
|
|
148
|
+
* Validation: Optional; valid port number; must be in range 5431-5455 or 8191-8215 when multiAz is true
|
|
149
149
|
* @default 5440
|
|
150
150
|
*/
|
|
151
151
|
readonly clusterPort?: number;
|
|
@@ -181,7 +181,9 @@ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
|
181
181
|
*
|
|
182
182
|
* Validation: Optional; string key-value pairs
|
|
183
183
|
*/
|
|
184
|
-
readonly parameterGroupParams?:
|
|
184
|
+
readonly parameterGroupParams?: {
|
|
185
|
+
[key: string]: string;
|
|
186
|
+
};
|
|
185
187
|
/**
|
|
186
188
|
* Workload management (WLM) configuration for query queue management and resource allocation.
|
|
187
189
|
*
|
|
@@ -285,8 +287,43 @@ export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
|
285
287
|
* ownerAccount Refers to snapshot owner account. Applicable if restoring the cluster from snapshot and snapshot belongs to another account
|
|
286
288
|
* Optional - By default, snapshots are searched within current account
|
|
287
289
|
*/
|
|
288
|
-
readonly snapshotOwnerAccount?: number;
|
|
290
|
+
readonly snapshotOwnerAccount?: string | number;
|
|
289
291
|
readonly redshiftManageMasterPassword?: boolean;
|
|
292
|
+
/**
|
|
293
|
+
* Enable multi-AZ deployment for high availability.
|
|
294
|
+
*
|
|
295
|
+
* Use cases: High availability; Fault tolerance; Production deployments
|
|
296
|
+
*
|
|
297
|
+
* AWS: Redshift multi-AZ deployment
|
|
298
|
+
*
|
|
299
|
+
* Validation: Optional; boolean. When true, requires: numberOfNodes >= 2, subnetIds in >= 3 AZs,
|
|
300
|
+
* clusterPort in range 5431-5455 or 8191-8215, and pause/resume scheduled actions are not supported.
|
|
301
|
+
*/
|
|
302
|
+
readonly multiAz?: boolean;
|
|
303
|
+
/**
|
|
304
|
+
* Target region for cross-region snapshot copies. When set, enables cross-region snapshot copy to this region.
|
|
305
|
+
*
|
|
306
|
+
* Use cases: Disaster recovery; Cross-region backup; Business continuity
|
|
307
|
+
*
|
|
308
|
+
* AWS: Redshift snapshot copy destination region
|
|
309
|
+
*
|
|
310
|
+
* Validation: Optional; valid AWS region string, must differ from the deployment region
|
|
311
|
+
*/
|
|
312
|
+
readonly backupRegion?: string;
|
|
313
|
+
/**
|
|
314
|
+
* When true, omits the explicit blockPublicAccess setting on S3 buckets so CDK does not emit
|
|
315
|
+
* a PutBucketPublicAccessBlock API call. Use when public access block is managed externally
|
|
316
|
+
* (e.g., by AWS account-level settings and/or SCPs that deny s3:PutBucketPublicAccessBlock).
|
|
317
|
+
*
|
|
318
|
+
* Use cases: SCP-restricted environments; Externally managed public access block;
|
|
319
|
+
* Organizations enforcing account-level S3 Block Public Access
|
|
320
|
+
*
|
|
321
|
+
* AWS: S3 PutBucketPublicAccessBlock
|
|
322
|
+
*
|
|
323
|
+
* Validation: Optional; boolean; default false
|
|
324
|
+
* @default false
|
|
325
|
+
*/
|
|
326
|
+
readonly publicAccessBlockManagedExternally?: boolean;
|
|
290
327
|
}
|
|
291
328
|
export declare class DataWarehouseConfigParser extends MdaaAppConfigParser<DataWarehouseConfigContents> {
|
|
292
329
|
readonly adminUsername: string;
|
|
@@ -308,7 +345,9 @@ export declare class DataWarehouseConfigParser extends MdaaAppConfigParser<DataW
|
|
|
308
345
|
ipv4?: string[];
|
|
309
346
|
sg?: string[];
|
|
310
347
|
};
|
|
311
|
-
readonly parameterGroupParams:
|
|
348
|
+
readonly parameterGroupParams: {
|
|
349
|
+
[key: string]: string;
|
|
350
|
+
};
|
|
312
351
|
readonly workloadManagement: ConfigurationElement[];
|
|
313
352
|
readonly additionalBucketKmsKeyArns?: string[];
|
|
314
353
|
static readonly defaultClusterPort = 5440;
|
|
@@ -318,7 +357,10 @@ export declare class DataWarehouseConfigParser extends MdaaAppConfigParser<DataW
|
|
|
318
357
|
readonly eventNotifications?: EventNotificationsProps;
|
|
319
358
|
readonly dbName?: string;
|
|
320
359
|
readonly snapshotIdentifier?: string;
|
|
321
|
-
readonly snapshotOwnerAccount?:
|
|
360
|
+
readonly snapshotOwnerAccount?: string;
|
|
322
361
|
readonly redshiftManageMasterPassword?: boolean;
|
|
362
|
+
readonly multiAz?: boolean;
|
|
363
|
+
readonly backupRegion?: string;
|
|
364
|
+
readonly publicAccessBlockManagedExternally?: boolean;
|
|
323
365
|
constructor(stack: Stack, props: MdaaAppConfigParserProps);
|
|
324
366
|
}
|
|
@@ -39,10 +39,15 @@ class DataWarehouseConfigParser extends app_1.MdaaAppConfigParser {
|
|
|
39
39
|
this.eventNotifications = this.configContents.eventNotifications;
|
|
40
40
|
this.dbName = this.configContents.dbName;
|
|
41
41
|
this.snapshotIdentifier = this.configContents.snapshotIdentifier;
|
|
42
|
-
this.snapshotOwnerAccount = this.configContents.snapshotOwnerAccount
|
|
42
|
+
this.snapshotOwnerAccount = this.configContents.snapshotOwnerAccount
|
|
43
|
+
? String(this.configContents.snapshotOwnerAccount)
|
|
44
|
+
: undefined;
|
|
43
45
|
this.redshiftManageMasterPassword = this.configContents.redshiftManageMasterPassword;
|
|
46
|
+
this.multiAz = this.configContents.multiAz;
|
|
47
|
+
this.backupRegion = this.configContents.backupRegion;
|
|
48
|
+
this.publicAccessBlockManagedExternally = this.configContents.publicAccessBlockManagedExternally;
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
exports.DataWarehouseConfigParser = DataWarehouseConfigParser;
|
|
47
52
|
DataWarehouseConfigParser.defaultClusterPort = 5440;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXdhcmVob3VzZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhd2FyZWhvdXNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBc0c7QUFVdEcscURBQXFEO0FBMlJyRCxNQUFhLHlCQUEwQixTQUFRLHlCQUFnRDtJQThCN0YsWUFBWSxLQUFZLEVBQUUsS0FBK0I7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBc0IsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUNqQyxDQUFDLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQztRQUNqRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0I7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CO1lBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9HLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2RSxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztRQUN6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO1FBQ3JFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDO0lBQ3ZGLENBQUM7O0FBaEVILDhEQWlFQztBQTdDd0IsNENBQWtCLEdBQUcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlciwgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQge1xuICBGZWRlcmF0aW9uUHJvcHMsXG4gIFNjaGVkdWxlZEFjdGlvblByb3BzLFxuICBEYXRhYmFzZVVzZXJzUHJvcHMsXG4gIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzLFxufSBmcm9tICdAYXdzLW1kYWEvZGF0YXdhcmVob3VzZS1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgTWRhYVJvbGVSZWYgfSBmcm9tICdAYXdzLW1kYWEvaWFtLXJvbGUtaGVscGVyJztcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ2Fqdic7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbmZpZ1NjaGVtYSBmcm9tICcuL2NvbmZpZy1zY2hlbWEuanNvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRWxlbWVudCB9IGZyb20gJ0Bhd3MtbWRhYS9jb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFXYXJlaG91c2VDb25maWdDb250ZW50cyBleHRlbmRzIE1kYWFCYXNlQ29uZmlnQ29udGVudHMge1xuICAvKipcbiAgICogQWRtaW4gdXNlcm5hbWUgZm9yIHRoZSBSZWRzaGlmdCBjbHVzdGVyLiBBIHNlY3JldCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmb3IgdGhlIHBhc3N3b3JkLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYWRtaW5pc3RyYXRpb247IERhdGFiYXNlIG1hbmFnZW1lbnQ7IEluaXRpYWwgdXNlciBwcm92aXNpb25pbmdcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBjbHVzdGVyIG1hc3RlciB1c2VybmFtZVxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgdmFsaWQgUmVkc2hpZnQgdXNlcm5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGFkbWluVXNlcm5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIERheXMgYmV0d2VlbiBhdXRvbWF0aWMgYWRtaW4gcGFzc3dvcmQgcm90YXRpb25zIHZpYSBTZWNyZXRzIE1hbmFnZXIuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQXV0b21hdGVkIGNyZWRlbnRpYWwgcm90YXRpb247IFNlY3VyaXR5IGNvbXBsaWFuY2U7IFBhc3N3b3JkIHBvbGljeSBlbmZvcmNlbWVudFxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGFkbWluIHBhc3N3b3JkIHJvdGF0aW9uIHZpYSBTZWNyZXRzIE1hbmFnZXJcbiAgICpcbiAgICogVmFsaWRhdGlvbjogUmVxdWlyZWQ7IHBvc2l0aXZlIGludGVnZXJcbiAgICovXG4gIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFNBTUwgb3IgT0lEQyBmZWRlcmF0aW9uIGNvbmZpZ3VyYXRpb25zIGZvciBmZWRlcmF0ZWQgUmVkc2hpZnQgYWNjZXNzLlxuICAgKiBFYWNoIGZlZGVyYXRpb24gY3JlYXRlcyBhbiBJQU0gcm9sZSB3aXRoIFNBTUwgdHJ1c3QgZm9yIGR5bmFtaWMgY3JlZGVudGlhbCBnZW5lcmF0aW9uXG4gICAqIGFuZCBncm91cC1iYXNlZCBjbHVzdGVyIGFjY2Vzcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBTQU1MIGZlZGVyYXRpb24gc2V0dXA7IFNTTyBpbnRlZ3JhdGlvbjsgRmVkZXJhdGVkIGNsdXN0ZXIgYWNjZXNzXG4gICAqXG4gICAqIEFXUzogSUFNIFNBTUwgaWRlbnRpdHkgcHJvdmlkZXIgcm9sZXMgZm9yIFJlZHNoaWZ0IGZlZGVyYXRlZCBhY2Nlc3NcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIEZlZGVyYXRpb25Qcm9wc1xuICAgKi9cbiAgcmVhZG9ubHkgZmVkZXJhdGlvbnM/OiBGZWRlcmF0aW9uUHJvcHNbXTtcbiAgLyoqXG4gICAqIEFkbWluIHJvbGVzIGdyYW50ZWQgZnVsbCBhY2Nlc3MgdG8gY2x1c3RlciByZXNvdXJjZXMgaW5jbHVkaW5nIEtNUyBrZXlzIGFuZCBTMyBidWNrZXRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEFkbWluaXN0cmF0aXZlIGFjY2VzcyBjb250cm9sOyBTZWN1cml0eSBtYW5hZ2VtZW50OyBSZXNvdXJjZSBhZG1pbmlzdHJhdGlvblxuICAgKlxuICAgKiBBV1M6IElBTSByb2xlcyB3aXRoIGZ1bGwgUmVkc2hpZnQgY2x1c3RlciBhbmQgcmVzb3VyY2UgYWNjZXNzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyBhcnJheSBvZiB2YWxpZCBNZGFhUm9sZVJlZlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YUFkbWluUm9sZXM6IE1kYWFSb2xlUmVmW107XG4gIC8qKlxuICAgKiBSb2xlcyBncmFudGVkIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBkYXRhIHdhcmVob3VzZSBTMyBidWNrZXQgZm9yIGRhdGEgbG9hZGluZy91bmxvYWRpbmcuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRVRMIGRhdGEgbG9hZGluZzsgRGF0YSB1bmxvYWRpbmcgb3BlcmF0aW9uczsgQnVja2V0IGFjY2VzcyBmb3IgYW5hbHl0aWNzXG4gICAqXG4gICAqIEFXUzogSUFNIHJvbGVzIHdpdGggUzMgYnVja2V0IGFjY2VzcyBmb3IgUmVkc2hpZnQgZGF0YSBvcGVyYXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBhcnJheSBvZiB2YWxpZCBNZGFhUm9sZVJlZlxuICAgKi9cbiAgcmVhZG9ubHkgd2FyZWhvdXNlQnVja2V0VXNlclJvbGVzPzogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGV4ZWN1dGlvbiByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIFJlZHNoaWZ0IGNsdXN0ZXIgZm9yIGNyb3NzLXNlcnZpY2Ugb3BlcmF0aW9ucy5cbiAgICogSWYgYSByb2xlIGFsc28gbmVlZHMgd2FyZWhvdXNlIGJ1Y2tldCBhY2Nlc3MsIGFkZCBpdCB0byB3YXJlaG91c2VCdWNrZXRVc2VyUm9sZXMgZXhwbGljaXRseS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDcm9zcy1zZXJ2aWNlIGludGVncmF0aW9uczsgRXh0ZXJuYWwgZGF0YSBhY2Nlc3M7IEdsdWUvTGFtYmRhIGludGVncmF0aW9uXG4gICAqXG4gICAqIEFXUzogSUFNIGV4ZWN1dGlvbiByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIFJlZHNoaWZ0IGNsdXN0ZXJcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIE1kYWFSb2xlUmVmOyByb2xlcyBtdXN0IGJlIGFzc3VtYWJsZSBieSBSZWRzaGlmdFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZXM/OiBNZGFhUm9sZVJlZltdO1xuICAvKipcbiAgICogVlBDIElEIGZvciBSZWRzaGlmdCBjbHVzdGVyIGRlcGxveW1lbnQuIFRoZSBjbHVzdGVyIGlzIGRlcGxveWVkIHdpdGhpbiB0aGlzIFZQQ1xuICAgKiB3aXRoIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2xsZWQgYnkgc2VjdXJpdHkgZ3JvdXBzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IE5ldHdvcmsgaXNvbGF0aW9uOyBWUEMtYmFzZWQgZGVwbG95bWVudDsgU2VjdXJlIG5ldHdvcmtpbmdcbiAgICpcbiAgICogQVdTOiBWUEMgZm9yIFJlZHNoaWZ0IGNsdXN0ZXIgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyB2YWxpZCBWUEMgSURcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdWJuZXQgSURzIGZvciBSZWRzaGlmdCBjbHVzdGVyIG5vZGUgcGxhY2VtZW50LiBGb3IgYXV0b21hdGljIGNsdXN0ZXIgcmVsb2NhdGlvbixcbiAgICogc3BlY2lmeSBhdCBsZWFzdCBvbmUgc3VibmV0IHBlciBBWi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNdWx0aS1BWiBwbGFjZW1lbnQ7IFN1Ym5ldC1zcGVjaWZpYyBkZXBsb3ltZW50OyBDbHVzdGVyIHJlbG9jYXRpb24gc3VwcG9ydFxuICAgKlxuICAgKiBBV1M6IFZQQyBzdWJuZXRzIGZvciBSZWRzaGlmdCBzdWJuZXQgZ3JvdXBcbiAgICpcbiAgICogVmFsaWRhdGlvbjogUmVxdWlyZWQ7IGFycmF5IG9mIHZhbGlkIHN1Ym5ldCBJRHMgaW4gdGhlIHNwZWNpZmllZCBWUENcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldElkczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBpbmdyZXNzIHJ1bGVzIGRlZmluaW5nIGFsbG93ZWQgaW5ib3VuZCBjb25uZWN0aW9ucyB0byB0aGUgY2x1c3RlciBwb3J0LlxuICAgKiBTdXBwb3J0cyBJUHY0IENJRFIgYmxvY2tzIGFuZCBzZWN1cml0eSBncm91cCByZWZlcmVuY2VzLiBBbGwgb3RoZXIgdHJhZmZpYyBpcyBibG9ja2VkLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IE5ldHdvcmsgYWNjZXNzIGNvbnRyb2w7IENsaWVudCBjb25uZWN0aXZpdHk7IFNlY3VyaXR5IGdyb3VwIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBWUEMgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBydWxlcyBmb3IgUmVkc2hpZnQgY2x1c3RlclxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgb2JqZWN0IHdpdGggb3B0aW9uYWwgaXB2NCBhbmQvb3Igc2cgYXJyYXlzXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSW5ncmVzczogeyBpcHY0Pzogc3RyaW5nW107IHNnPzogc3RyaW5nW10gfTtcbiAgLyoqXG4gICAqIFJlZHNoaWZ0IG5vZGUgdHlwZSBkZXRlcm1pbmluZyBjb21wdXRlIGFuZCBzdG9yYWdlIGNhcGFjaXR5IChlLmcuLCBSQTNfNFhMQVJHRSkuXG4gICAqXG4gICAqIFVzZSBjYXNlczogUGVyZm9ybWFuY2Ugc2l6aW5nOyBDb3N0IG9wdGltaXphdGlvbjsgV29ya2xvYWQtc3BlY2lmaWMgY2FwYWNpdHlcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBub2RlIHR5cGUgKGluc3RhbmNlIHR5cGUpXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyB2YWxpZCBSZWRzaGlmdCBub2RlIHR5cGUgc3RyaW5nXG4gICAqL1xuICByZWFkb25seSBub2RlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogTnVtYmVyIG9mIG5vZGVzIGluIHRoZSBSZWRzaGlmdCBjbHVzdGVyLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgc2l6aW5nOyBQZXJmb3JtYW5jZSBzY2FsaW5nOyBDb3N0IG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBjbHVzdGVyIG5vZGUgY291bnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogUmVxdWlyZWQ7IHBvc2l0aXZlIGludGVnZXJcbiAgICovXG4gIHJlYWRvbmx5IG51bWJlck9mTm9kZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuYWJsZSBhdWRpdCBsb2dnaW5nIHRvIGEgZGVkaWNhdGVkIFMzIGJ1Y2tldC4gVGhlIGF1ZGl0IGJ1Y2tldCB1c2VzIFNTRS1TMyBlbmNyeXB0aW9uXG4gICAqIChub3QgS01TKSBkdWUgdG8gUmVkc2hpZnQgYXVkaXQgbG9nZ2luZyByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29tcGxpYW5jZSBhdWRpdGluZzsgU2VjdXJpdHkgbW9uaXRvcmluZzsgVXNlciBhY3Rpdml0eSB0cmFja2luZ1xuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGF1ZGl0IGxvZ2dpbmcgdG8gUzMgd2l0aCBTU0UtUzMgZW5jcnlwdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgYm9vbGVhblxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQXVkaXRMb2dnaW5nVG9TMzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRDUCBwb3J0IGZvciBjbGllbnQgY29ubmVjdGlvbnMgdG8gdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3VzdG9tIHBvcnQgY29uZmlndXJhdGlvbjsgTmV0d29yayBzZWN1cml0eTsgUG9ydCBzdGFuZGFyZGl6YXRpb25cbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBjbHVzdGVyIGxpc3RlbmluZyBwb3J0XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyB2YWxpZCBwb3J0IG51bWJlclxuICAgKiBAZGVmYXVsdCA1NDQwXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyUG9ydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE11bHRpLW5vZGUgY2x1c3RlciBmbGFnLiBXaGVuIHRydWUsIGNyZWF0ZXMgYSBtdWx0aS1ub2RlIGNsdXN0ZXIgZm9yIGRpc3RyaWJ1dGVkIHByb2Nlc3Npbmc7XG4gICAqIHdoZW4gZmFsc2UsIGNyZWF0ZXMgYSBzaW5nbGUtbm9kZSBjbHVzdGVyIGZvciBkZXZlbG9wbWVudCBvciBzbWFsbCB3b3JrbG9hZHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ2x1c3RlciBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uOyBEZXYgdnMgcHJvZHVjdGlvbiBkZXBsb3ltZW50OyBDb3N0IG9wdGltaXphdGlvblxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGNsdXN0ZXIgdHlwZSAoc2luZ2xlLW5vZGUgb3IgbXVsdGktbm9kZSlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGJvb2xlYW5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpTm9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXZWVrbHkgbWFpbnRlbmFuY2Ugd2luZG93IGluIGRkZDpoaDI0Om1pLWRkZDpoaDI0Om1pIGZvcm1hdCAoVVRDKS5cbiAgICogRXhhbXBsZTogJ1N1bjoyMzo0NS1Nb246MDA6MTUnLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IE1haW50ZW5hbmNlIHNjaGVkdWxpbmc7IEJ1c2luZXNzIGNvbnRpbnVpdHk7IERvd250aW1lIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBwcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93XG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyB2YWxpZCB0aW1lIHdpbmRvdyBmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNsdXN0ZXIgcGFyYW1ldGVyIGdyb3VwIHBhcmFtZXRlcnMgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy5cbiAgICogU2VjdXJpdHktc2Vuc2l0aXZlIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSBvdmVycmlkZGVuIGZvciBjb21wbGlhbmNlIChlLmcuLCBTU0wgZW5mb3JjZW1lbnQpLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFBlcmZvcm1hbmNlIHR1bmluZzsgQ3VzdG9tIGNsdXN0ZXIgY29uZmlndXJhdGlvbjsgV29ya2xvYWQgb3B0aW1pemF0aW9uXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgcGFyYW1ldGVyIGdyb3VwIHBhcmFtZXRlcnNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IHN0cmluZyBrZXktdmFsdWUgcGFpcnNcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlckdyb3VwUGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIFdvcmtsb2FkIG1hbmFnZW1lbnQgKFdMTSkgY29uZmlndXJhdGlvbiBmb3IgcXVlcnkgcXVldWUgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBRdWVyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IENvbmN1cnJlbmN5IGNvbnRyb2w7IFJlc291cmNlIGFsbG9jYXRpb25cbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBXTE0gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgYXJyYXkgb2YgdmFsaWQgQ29uZmlndXJhdGlvbkVsZW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtsb2FkTWFuYWdlbWVudD86IENvbmZpZ3VyYXRpb25FbGVtZW50W107XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIEtNUyBrZXkgQVJOcyBhbGxvd2VkIHRvIHdyaXRlIHRvIHRoZSBjbHVzdGVyIGJ1Y2tldC5cbiAgICogVXNlZnVsIGZvciBhbGxvd2luZyBHbHVlIGpvYnMgb3Igb3RoZXIgc2VydmljZXMgdG8gd3JpdGUgZW5jcnlwdGVkIGRhdGEgdG8gdGhlIHdhcmVob3VzZSBidWNrZXQuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3Jvc3Mtc2VydmljZSBlbmNyeXB0aW9uOyBHbHVlIGpvYiBpbnRlZ3JhdGlvbjsgTXVsdGkta2V5IGJ1Y2tldCBhY2Nlc3NcbiAgICpcbiAgICogQVdTOiBLTVMga2V5IEFSTnMgZm9yIHdhcmVob3VzZSBidWNrZXQgZW5jcnlwdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgYXJyYXkgb2YgdmFsaWQgS01TIGtleSBBUk5zXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogU2NoZWR1bGVkIGFjdGlvbnMgZm9yIGF1dG9tYXRlZCBjbHVzdGVyIHBhdXNlL3Jlc3VtZSBvcGVyYXRpb25zLlxuICAgKiBFYWNoIGFjdGlvbiBzcGVjaWZpZXMgYSB0YXJnZXQgYWN0aW9uIChwYXVzZUNsdXN0ZXIvcmVzdW1lQ2x1c3RlciksIGNyb24gc2NoZWR1bGUsXG4gICAqIGFuZCBhY3RpdmUgdGltZSB3aW5kb3cuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29zdCBvcHRpbWl6YXRpb24gdmlhIHNjaGVkdWxlZCBwYXVzZTsgQXV0b21hdGVkIG9wZXJhdGlvbnM7IEJ1c2luZXNzLWhvdXJzIHNjaGVkdWxpbmdcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBzY2hlZHVsZWQgYWN0aW9ucyBmb3IgY2x1c3RlciBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgYXJyYXkgb2YgdmFsaWQgU2NoZWR1bGVkQWN0aW9uUHJvcHNcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEFjdGlvbnM/OiBTY2hlZHVsZWRBY3Rpb25Qcm9wc1tdO1xuICAvKipcbiAgICogRGF0YWJhc2UgdXNlcnMgY3JlYXRlZCBpbiBSZWRzaGlmdCB3aXRoIGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBTZWNyZXRzIE1hbmFnZXIuXG4gICAqIFN1cHBvcnRzIGF1dG9tYXRlZCBzZWNyZXQgcm90YXRpb24gb24gYSBjb25maWd1cmFibGUgY3ljbGUuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQXV0b21hdGVkIHVzZXIgcHJvdmlzaW9uaW5nOyBDcmVkZW50aWFsIG1hbmFnZW1lbnQ7IFNlY3JldCByb3RhdGlvblxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGRhdGFiYXNlIHVzZXJzIHdpdGggU2VjcmV0cyBNYW5hZ2VyIGNyZWRlbnRpYWwgc3RvcmFnZSBhbmQgcm90YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIERhdGFiYXNlVXNlcnNQcm9wc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VVc2Vycz86IERhdGFiYXNlVXNlcnNQcm9wc1tdO1xuICAvKipcbiAgICogQ29udHJvbCB3aGV0aGVyIGEgZGVkaWNhdGVkIFMzIGJ1Y2tldCBpcyBjcmVhdGVkIGZvciB3YXJlaG91c2UgZGF0YSBvcGVyYXRpb25zXG4gICAqIChsb2FkaW5nLCB1bmxvYWRpbmcsIGJhY2t1cCkuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU3RvcmFnZSByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhIG9wZXJhdGlvbnM7IEJ1Y2tldCBsaWZlY3ljbGUgY29udHJvbFxuICAgKlxuICAgKiBBV1M6IFMzIGJ1Y2tldCBmb3IgUmVkc2hpZnQgZGF0YSB3YXJlaG91c2Ugb3BlcmF0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVXYXJlaG91c2VCdWNrZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogTnVtYmVyIG9mIGRheXMgYXV0b21hdGVkIHNuYXBzaG90cyBhcmUgcmV0YWluZWQgKDEtMzUpLiBTZXQgdG8gMCB0byBkaXNhYmxlLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEJhY2t1cCBtYW5hZ2VtZW50OyBQb2ludC1pbi10aW1lIHJlY292ZXJ5OyBEYXRhIHByb3RlY3Rpb24gY29tcGxpYW5jZVxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGF1dG9tYXRlZCBzbmFwc2hvdCByZXRlbnRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGludGVnZXIgMC0zNVxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFdmVudCBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgY2x1c3RlciBhbmQgc2NoZWR1bGVkIGFjdGlvbiBtb25pdG9yaW5nLlxuICAgKiBDb25maWd1cmVzIFNOUyBub3RpZmljYXRpb25zIHdpdGggZW1haWwgZGVsaXZlcnksIHNldmVyaXR5IGZpbHRlcmluZywgYW5kIGV2ZW50IGNhdGVnb3J5IHNlbGVjdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBPcGVyYXRpb25hbCBtb25pdG9yaW5nOyBFdmVudCBhbGVydGluZzsgQ2x1c3RlciBzdGF0dXMgdHJhY2tpbmdcbiAgICpcbiAgICogQVdTOiBTTlMgbm90aWZpY2F0aW9ucyBmb3IgUmVkc2hpZnQgY2x1c3RlciBldmVudHNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IHZhbGlkIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzXG4gICAqL1xuICByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgLyoqXG4gICAqIEluaXRpYWwgZGF0YWJhc2UgbmFtZSBjcmVhdGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEN1c3RvbSBkYXRhYmFzZSBuYW1pbmc7IEluaXRpYWwgZGF0YWJhc2Ugc2V0dXBcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBpbml0aWFsIGRhdGFiYXNlXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyB2YWxpZCBkYXRhYmFzZSBuYW1lXG4gICAqIEBkZWZhdWx0IFwiZGVmYXVsdF9kYlwiXG4gICAqL1xuICByZWFkb25seSBkYk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTbmFwc2hvdCBpZGVudGlmaWVyIGZvciBjbHVzdGVyIHJlc3RvcmF0aW9uLiBPbmx5IHByb3ZpZGUgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBleGlzdGluZyBzbmFwc2hvdC5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBEaXNhc3RlciByZWNvdmVyeTsgRGF0YSBtaWdyYXRpb247IENsdXN0ZXIgcmVzdG9yYXRpb25cbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBzbmFwc2hvdCBmb3IgY2x1c3RlciByZXN0b3JhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgdmFsaWQgc25hcHNob3QgaWRlbnRpZmllclxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKipcbiAgICogb3duZXJBY2NvdW50IFJlZmVycyB0byBzbmFwc2hvdCBvd25lciBhY2NvdW50LiBBcHBsaWNhYmxlIGlmIHJlc3RvcmluZyB0aGUgY2x1c3RlciBmcm9tIHNuYXBzaG90IGFuZCBzbmFwc2hvdCBiZWxvbmdzIHRvIGFub3RoZXIgYWNjb3VudFxuICAgKiBPcHRpb25hbCAtIEJ5IGRlZmF1bHQsIHNuYXBzaG90cyBhcmUgc2VhcmNoZWQgd2l0aGluIGN1cnJlbnQgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RPd25lckFjY291bnQ/OiBudW1iZXI7XG5cbiAgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyIGV4dGVuZHMgTWRhYUFwcENvbmZpZ1BhcnNlcjxEYXRhV2FyZWhvdXNlQ29uZmlnQ29udGVudHM+IHtcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluVXNlcm5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRpb25zOiBGZWRlcmF0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVXNlcnM6IERhdGFiYXNlVXNlcnNQcm9wc1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YUFkbWluUm9sZVJlZnM6IE1kYWFSb2xlUmVmW107XG4gIHB1YmxpYyByZWFkb25seSB3YXJlaG91c2VCdWNrZXRVc2VyUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJQb3J0OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZHM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzM6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBudW1iZXJPZk5vZGVzOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBtdWx0aU5vZGU/OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJbmdyZXNzOiB7IGlwdjQ/OiBzdHJpbmdbXTsgc2c/OiBzdHJpbmdbXSB9O1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyR3JvdXBQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHB1YmxpYyByZWFkb25seSB3b3JrbG9hZE1hbmFnZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50W107XG4gIHB1YmxpYyByZWFkb25seSBhZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucz86IHN0cmluZ1tdO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRDbHVzdGVyUG9ydCA9IDU0NDA7XG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZWRBY3Rpb25zOiBTY2hlZHVsZWRBY3Rpb25Qcm9wc1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlV2FyZWhvdXNlQnVja2V0PzogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IGF1dG9tYXRlZFNuYXBzaG90UmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGV2ZW50Tm90aWZpY2F0aW9ucz86IEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgZGJOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3RPd25lckFjY291bnQ/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSByZWRzaGlmdE1hbmFnZU1hc3RlclBhc3N3b3JkPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzdGFjazogU3RhY2ssIHByb3BzOiBNZGFhQXBwQ29uZmlnUGFyc2VyUHJvcHMpIHtcbiAgICBzdXBlcihzdGFjaywgcHJvcHMsIGNvbmZpZ1NjaGVtYSBhcyBTY2hlbWEpO1xuXG4gICAgdGhpcy5hZG1pblVzZXJuYW1lID0gdGhpcy5jb25maWdDb250ZW50cy5hZG1pblVzZXJuYW1lO1xuICAgIHRoaXMuYWRtaW5QYXNzd29yZFJvdGF0aW9uRGF5cyA9IHRoaXMuY29uZmlnQ29udGVudHMuYWRtaW5QYXNzd29yZFJvdGF0aW9uRGF5cztcbiAgICB0aGlzLmZlZGVyYXRpb25zID0gdGhpcy5jb25maWdDb250ZW50cy5mZWRlcmF0aW9ucyA/IHRoaXMuY29uZmlnQ29udGVudHMuZmVkZXJhdGlvbnMgOiBbXTtcbiAgICB0aGlzLmRhdGFBZG1pblJvbGVSZWZzID0gdGhpcy5jb25maWdDb250ZW50cy5kYXRhQWRtaW5Sb2xlcztcbiAgICB0aGlzLndhcmVob3VzZUJ1Y2tldFVzZXJSb2xlUmVmcyA9IHRoaXMuY29uZmlnQ29udGVudHMud2FyZWhvdXNlQnVja2V0VXNlclJvbGVzO1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZVJlZnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmV4ZWN1dGlvblJvbGVzO1xuICAgIHRoaXMudnBjSWQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnZwY0lkO1xuICAgIHRoaXMuc3VibmV0SWRzID0gdGhpcy5jb25maWdDb250ZW50cy5zdWJuZXRJZHM7XG4gICAgdGhpcy5zZWN1cml0eUdyb3VwSW5ncmVzcyA9IHRoaXMuY29uZmlnQ29udGVudHMuc2VjdXJpdHlHcm91cEluZ3Jlc3M7XG4gICAgdGhpcy5ub2RlVHlwZSA9IHRoaXMuY29uZmlnQ29udGVudHMubm9kZVR5cGU7XG4gICAgdGhpcy5udW1iZXJPZk5vZGVzID0gdGhpcy5jb25maWdDb250ZW50cy5udW1iZXJPZk5vZGVzO1xuICAgIHRoaXMuZW5hYmxlQXVkaXRMb2dnaW5nVG9TMyA9IHRoaXMuY29uZmlnQ29udGVudHMuZW5hYmxlQXVkaXRMb2dnaW5nVG9TMztcbiAgICB0aGlzLmNsdXN0ZXJQb3J0ID0gdGhpcy5jb25maWdDb250ZW50cy5jbHVzdGVyUG9ydFxuICAgICAgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLmNsdXN0ZXJQb3J0XG4gICAgICA6IERhdGFXYXJlaG91c2VDb25maWdQYXJzZXIuZGVmYXVsdENsdXN0ZXJQb3J0O1xuICAgIHRoaXMubXVsdGlOb2RlID0gdGhpcy5jb25maWdDb250ZW50cy5tdWx0aU5vZGU7XG4gICAgdGhpcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyA9IHRoaXMuY29uZmlnQ29udGVudHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c7XG4gICAgdGhpcy5wYXJhbWV0ZXJHcm91cFBhcmFtcyA9IHRoaXMuY29uZmlnQ29udGVudHMucGFyYW1ldGVyR3JvdXBQYXJhbXNcbiAgICAgID8gdGhpcy5jb25maWdDb250ZW50cy5wYXJhbWV0ZXJHcm91cFBhcmFtc1xuICAgICAgOiB7fTtcbiAgICB0aGlzLndvcmtsb2FkTWFuYWdlbWVudCA9IHRoaXMuY29uZmlnQ29udGVudHMud29ya2xvYWRNYW5hZ2VtZW50ID8gdGhpcy5jb25maWdDb250ZW50cy53b3JrbG9hZE1hbmFnZW1lbnQgOiBbXTtcbiAgICB0aGlzLmFkZGl0aW9uYWxCdWNrZXRLbXNLZXlBcm5zID0gdGhpcy5jb25maWdDb250ZW50cy5hZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucztcbiAgICB0aGlzLnNjaGVkdWxlZEFjdGlvbnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNjaGVkdWxlZEFjdGlvbnMgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNjaGVkdWxlZEFjdGlvbnMgOiBbXTtcbiAgICB0aGlzLmRhdGFiYXNlVXNlcnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmRhdGFiYXNlVXNlcnMgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLmRhdGFiYXNlVXNlcnMgOiBbXTtcbiAgICB0aGlzLmNyZWF0ZVdhcmVob3VzZUJ1Y2tldCA9IHRoaXMuY29uZmlnQ29udGVudHMuY3JlYXRlV2FyZWhvdXNlQnVja2V0O1xuICAgIHRoaXMuYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzID0gdGhpcy5jb25maWdDb250ZW50cy5hdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXM7XG4gICAgdGhpcy5ldmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmV2ZW50Tm90aWZpY2F0aW9ucztcbiAgICB0aGlzLmRiTmFtZSA9IHRoaXMuY29uZmlnQ29udGVudHMuZGJOYW1lO1xuICAgIHRoaXMuc25hcHNob3RJZGVudGlmaWVyID0gdGhpcy5jb25maWdDb250ZW50cy5zbmFwc2hvdElkZW50aWZpZXI7XG4gICAgdGhpcy5zbmFwc2hvdE93bmVyQWNjb3VudCA9IHRoaXMuY29uZmlnQ29udGVudHMuc25hcHNob3RPd25lckFjY291bnQ7XG4gICAgdGhpcy5yZWRzaGlmdE1hbmFnZU1hc3RlclBhc3N3b3JkID0gdGhpcy5jb25maWdDb250ZW50cy5yZWRzaGlmdE1hbmFnZU1hc3RlclBhc3N3b3JkO1xuICB9XG59XG4iXX0=
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXdhcmVob3VzZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhd2FyZWhvdXNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBc0c7QUFVdEcscURBQXFEO0FBOFRyRCxNQUFhLHlCQUEwQixTQUFRLHlCQUFnRDtJQWlDN0YsWUFBWSxLQUFZLEVBQUUsS0FBK0I7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBc0IsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUNqQyxDQUFDLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQztRQUNqRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0I7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CO1lBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9HLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2RSxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztRQUN6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQjtZQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDO1FBQ3JGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUNyRCxJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQztJQUNuRyxDQUFDOztBQXhFSCw4REF5RUM7QUFyRHdCLDRDQUFrQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IE1kYWFBcHBDb25maWdQYXJzZXIsIE1kYWFBcHBDb25maWdQYXJzZXJQcm9wcywgTWRhYUJhc2VDb25maWdDb250ZW50cyB9IGZyb20gJ0Bhd3MtbWRhYS9hcHAnO1xuaW1wb3J0IHtcbiAgRmVkZXJhdGlvblByb3BzLFxuICBTY2hlZHVsZWRBY3Rpb25Qcm9wcyxcbiAgRGF0YWJhc2VVc2Vyc1Byb3BzLFxuICBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcyxcbn0gZnJvbSAnQGF3cy1tZGFhL2RhdGF3YXJlaG91c2UtbDMtY29uc3RydWN0JztcbmltcG9ydCB7IE1kYWFSb2xlUmVmIH0gZnJvbSAnQGF3cy1tZGFhL2lhbS1yb2xlLWhlbHBlcic7XG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICdhanYnO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb25maWdTY2hlbWEgZnJvbSAnLi9jb25maWctc2NoZW1hLmpzb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVsZW1lbnQgfSBmcm9tICdAYXdzLW1kYWEvY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhV2FyZWhvdXNlQ29uZmlnQ29udGVudHMgZXh0ZW5kcyBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzIHtcbiAgLyoqXG4gICAqIEFkbWluIHVzZXJuYW1lIGZvciB0aGUgUmVkc2hpZnQgY2x1c3Rlci4gQSBzZWNyZXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZm9yIHRoZSBwYXNzd29yZC5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDbHVzdGVyIGFkbWluaXN0cmF0aW9uOyBEYXRhYmFzZSBtYW5hZ2VtZW50OyBJbml0aWFsIHVzZXIgcHJvdmlzaW9uaW5nXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgY2x1c3RlciBtYXN0ZXIgdXNlcm5hbWVcbiAgICpcbiAgICogVmFsaWRhdGlvbjogUmVxdWlyZWQ7IHZhbGlkIFJlZHNoaWZ0IHVzZXJuYW1lXG4gICAqL1xuICByZWFkb25seSBhZG1pblVzZXJuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEYXlzIGJldHdlZW4gYXV0b21hdGljIGFkbWluIHBhc3N3b3JkIHJvdGF0aW9ucyB2aWEgU2VjcmV0cyBNYW5hZ2VyLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEF1dG9tYXRlZCBjcmVkZW50aWFsIHJvdGF0aW9uOyBTZWN1cml0eSBjb21wbGlhbmNlOyBQYXNzd29yZCBwb2xpY3kgZW5mb3JjZW1lbnRcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBhZG1pbiBwYXNzd29yZCByb3RhdGlvbiB2aWEgU2VjcmV0cyBNYW5hZ2VyXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyBwb3NpdGl2ZSBpbnRlZ2VyXG4gICAqL1xuICByZWFkb25seSBhZG1pblBhc3N3b3JkUm90YXRpb25EYXlzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTQU1MIG9yIE9JREMgZmVkZXJhdGlvbiBjb25maWd1cmF0aW9ucyBmb3IgZmVkZXJhdGVkIFJlZHNoaWZ0IGFjY2Vzcy5cbiAgICogRWFjaCBmZWRlcmF0aW9uIGNyZWF0ZXMgYW4gSUFNIHJvbGUgd2l0aCBTQU1MIHRydXN0IGZvciBkeW5hbWljIGNyZWRlbnRpYWwgZ2VuZXJhdGlvblxuICAgKiBhbmQgZ3JvdXAtYmFzZWQgY2x1c3RlciBhY2Nlc3MuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU0FNTCBmZWRlcmF0aW9uIHNldHVwOyBTU08gaW50ZWdyYXRpb247IEZlZGVyYXRlZCBjbHVzdGVyIGFjY2Vzc1xuICAgKlxuICAgKiBBV1M6IElBTSBTQU1MIGlkZW50aXR5IHByb3ZpZGVyIHJvbGVzIGZvciBSZWRzaGlmdCBmZWRlcmF0ZWQgYWNjZXNzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBhcnJheSBvZiB2YWxpZCBGZWRlcmF0aW9uUHJvcHNcbiAgICovXG4gIHJlYWRvbmx5IGZlZGVyYXRpb25zPzogRmVkZXJhdGlvblByb3BzW107XG4gIC8qKlxuICAgKiBBZG1pbiByb2xlcyBncmFudGVkIGZ1bGwgYWNjZXNzIHRvIGNsdXN0ZXIgcmVzb3VyY2VzIGluY2x1ZGluZyBLTVMga2V5cyBhbmQgUzMgYnVja2V0cy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBBZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgY29udHJvbDsgU2VjdXJpdHkgbWFuYWdlbWVudDsgUmVzb3VyY2UgYWRtaW5pc3RyYXRpb25cbiAgICpcbiAgICogQVdTOiBJQU0gcm9sZXMgd2l0aCBmdWxsIFJlZHNoaWZ0IGNsdXN0ZXIgYW5kIHJlc291cmNlIGFjY2Vzc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgYXJyYXkgb2YgdmFsaWQgTWRhYVJvbGVSZWZcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFBZG1pblJvbGVzOiBNZGFhUm9sZVJlZltdO1xuICAvKipcbiAgICogUm9sZXMgZ3JhbnRlZCByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgZGF0YSB3YXJlaG91c2UgUzMgYnVja2V0IGZvciBkYXRhIGxvYWRpbmcvdW5sb2FkaW5nLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVUTCBkYXRhIGxvYWRpbmc7IERhdGEgdW5sb2FkaW5nIG9wZXJhdGlvbnM7IEJ1Y2tldCBhY2Nlc3MgZm9yIGFuYWx5dGljc1xuICAgKlxuICAgKiBBV1M6IElBTSByb2xlcyB3aXRoIFMzIGJ1Y2tldCBhY2Nlc3MgZm9yIFJlZHNoaWZ0IGRhdGEgb3BlcmF0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgYXJyYXkgb2YgdmFsaWQgTWRhYVJvbGVSZWZcbiAgICovXG4gIHJlYWRvbmx5IHdhcmVob3VzZUJ1Y2tldFVzZXJSb2xlcz86IE1kYWFSb2xlUmVmW107XG4gIC8qKlxuICAgKiBFeHRlcm5hbCBleGVjdXRpb24gcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBSZWRzaGlmdCBjbHVzdGVyIGZvciBjcm9zcy1zZXJ2aWNlIG9wZXJhdGlvbnMuXG4gICAqIElmIGEgcm9sZSBhbHNvIG5lZWRzIHdhcmVob3VzZSBidWNrZXQgYWNjZXNzLCBhZGQgaXQgdG8gd2FyZWhvdXNlQnVja2V0VXNlclJvbGVzIGV4cGxpY2l0bHkuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3Jvc3Mtc2VydmljZSBpbnRlZ3JhdGlvbnM7IEV4dGVybmFsIGRhdGEgYWNjZXNzOyBHbHVlL0xhbWJkYSBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBBV1M6IElBTSBleGVjdXRpb24gcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBSZWRzaGlmdCBjbHVzdGVyXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBhcnJheSBvZiB2YWxpZCBNZGFhUm9sZVJlZjsgcm9sZXMgbXVzdCBiZSBhc3N1bWFibGUgYnkgUmVkc2hpZnRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVzPzogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIFZQQyBJRCBmb3IgUmVkc2hpZnQgY2x1c3RlciBkZXBsb3ltZW50LiBUaGUgY2x1c3RlciBpcyBkZXBsb3llZCB3aXRoaW4gdGhpcyBWUENcbiAgICogd2l0aCBuZXR3b3JrIGFjY2VzcyBjb250cm9sbGVkIGJ5IHNlY3VyaXR5IGdyb3Vwcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBOZXR3b3JrIGlzb2xhdGlvbjsgVlBDLWJhc2VkIGRlcGxveW1lbnQ7IFNlY3VyZSBuZXR3b3JraW5nXG4gICAqXG4gICAqIEFXUzogVlBDIGZvciBSZWRzaGlmdCBjbHVzdGVyIG5ldHdvcmsgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgdmFsaWQgVlBDIElEXG4gICAqL1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAvKipcbiAgICogU3VibmV0IElEcyBmb3IgUmVkc2hpZnQgY2x1c3RlciBub2RlIHBsYWNlbWVudC4gRm9yIGF1dG9tYXRpYyBjbHVzdGVyIHJlbG9jYXRpb24sXG4gICAqIHNwZWNpZnkgYXQgbGVhc3Qgb25lIHN1Ym5ldCBwZXIgQVouXG4gICAqXG4gICAqIFVzZSBjYXNlczogTXVsdGktQVogcGxhY2VtZW50OyBTdWJuZXQtc3BlY2lmaWMgZGVwbG95bWVudDsgQ2x1c3RlciByZWxvY2F0aW9uIHN1cHBvcnRcbiAgICpcbiAgICogQVdTOiBWUEMgc3VibmV0cyBmb3IgUmVkc2hpZnQgc3VibmV0IGdyb3VwXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyBhcnJheSBvZiB2YWxpZCBzdWJuZXQgSURzIGluIHRoZSBzcGVjaWZpZWQgVlBDOyBtdXN0IGNvbnRhaW4gPj0gMyBzdWJuZXRzIGluIGRpZmZlcmVudCBBWnMgd2hlbiBtdWx0aUF6IGlzIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldElkczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBpbmdyZXNzIHJ1bGVzIGRlZmluaW5nIGFsbG93ZWQgaW5ib3VuZCBjb25uZWN0aW9ucyB0byB0aGUgY2x1c3RlciBwb3J0LlxuICAgKiBTdXBwb3J0cyBJUHY0IENJRFIgYmxvY2tzIGFuZCBzZWN1cml0eSBncm91cCByZWZlcmVuY2VzLiBBbGwgb3RoZXIgdHJhZmZpYyBpcyBibG9ja2VkLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IE5ldHdvcmsgYWNjZXNzIGNvbnRyb2w7IENsaWVudCBjb25uZWN0aXZpdHk7IFNlY3VyaXR5IGdyb3VwIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBWUEMgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBydWxlcyBmb3IgUmVkc2hpZnQgY2x1c3RlclxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgb2JqZWN0IHdpdGggb3B0aW9uYWwgaXB2NCBhbmQvb3Igc2cgYXJyYXlzXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSW5ncmVzczogeyBpcHY0Pzogc3RyaW5nW107IHNnPzogc3RyaW5nW10gfTtcbiAgLyoqXG4gICAqIFJlZHNoaWZ0IG5vZGUgdHlwZSBkZXRlcm1pbmluZyBjb21wdXRlIGFuZCBzdG9yYWdlIGNhcGFjaXR5IChlLmcuLCBSQTNfNFhMQVJHRSkuXG4gICAqXG4gICAqIFVzZSBjYXNlczogUGVyZm9ybWFuY2Ugc2l6aW5nOyBDb3N0IG9wdGltaXphdGlvbjsgV29ya2xvYWQtc3BlY2lmaWMgY2FwYWNpdHlcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBub2RlIHR5cGUgKGluc3RhbmNlIHR5cGUpXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyB2YWxpZCBSZWRzaGlmdCBub2RlIHR5cGUgc3RyaW5nXG4gICAqL1xuICByZWFkb25seSBub2RlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogTnVtYmVyIG9mIG5vZGVzIGluIHRoZSBSZWRzaGlmdCBjbHVzdGVyLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgc2l6aW5nOyBQZXJmb3JtYW5jZSBzY2FsaW5nOyBDb3N0IG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBjbHVzdGVyIG5vZGUgY291bnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogUmVxdWlyZWQ7IHBvc2l0aXZlIGludGVnZXI7IG11c3QgYmUgPj0gMiB3aGVuIG11bHRpQXogaXMgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbnVtYmVyT2ZOb2RlczogbnVtYmVyO1xuICAvKipcbiAgICogRW5hYmxlIGF1ZGl0IGxvZ2dpbmcgdG8gYSBkZWRpY2F0ZWQgUzMgYnVja2V0LiBUaGUgYXVkaXQgYnVja2V0IHVzZXMgU1NFLVMzIGVuY3J5cHRpb25cbiAgICogKG5vdCBLTVMpIGR1ZSB0byBSZWRzaGlmdCBhdWRpdCBsb2dnaW5nIHJlcXVpcmVtZW50cy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDb21wbGlhbmNlIGF1ZGl0aW5nOyBTZWN1cml0eSBtb25pdG9yaW5nOyBVc2VyIGFjdGl2aXR5IHRyYWNraW5nXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgYXVkaXQgbG9nZ2luZyB0byBTMyB3aXRoIFNTRS1TMyBlbmNyeXB0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IFJlcXVpcmVkOyBib29sZWFuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVBdWRpdExvZ2dpbmdUb1MzOiBib29sZWFuO1xuICAvKipcbiAgICogVENQIHBvcnQgZm9yIGNsaWVudCBjb25uZWN0aW9ucyB0byB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gcG9ydCBjb25maWd1cmF0aW9uOyBOZXR3b3JrIHNlY3VyaXR5OyBQb3J0IHN0YW5kYXJkaXphdGlvblxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IGNsdXN0ZXIgbGlzdGVuaW5nIHBvcnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IHZhbGlkIHBvcnQgbnVtYmVyOyBtdXN0IGJlIGluIHJhbmdlIDU0MzEtNTQ1NSBvciA4MTkxLTgyMTUgd2hlbiBtdWx0aUF6IGlzIHRydWVcbiAgICogQGRlZmF1bHQgNTQ0MFxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlclBvcnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNdWx0aS1ub2RlIGNsdXN0ZXIgZmxhZy4gV2hlbiB0cnVlLCBjcmVhdGVzIGEgbXVsdGktbm9kZSBjbHVzdGVyIGZvciBkaXN0cmlidXRlZCBwcm9jZXNzaW5nO1xuICAgKiB3aGVuIGZhbHNlLCBjcmVhdGVzIGEgc2luZ2xlLW5vZGUgY2x1c3RlciBmb3IgZGV2ZWxvcG1lbnQgb3Igc21hbGwgd29ya2xvYWRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbjsgRGV2IHZzIHByb2R1Y3Rpb24gZGVwbG95bWVudDsgQ29zdCBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBjbHVzdGVyIHR5cGUgKHNpbmdsZS1ub2RlIG9yIG11bHRpLW5vZGUpXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBib29sZWFuXG4gICAqL1xuICByZWFkb25seSBtdWx0aU5vZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2Vla2x5IG1haW50ZW5hbmNlIHdpbmRvdyBpbiBkZGQ6aGgyNDptaS1kZGQ6aGgyNDptaSBmb3JtYXQgKFVUQykuXG4gICAqIEV4YW1wbGU6ICdTdW46MjM6NDUtTW9uOjAwOjE1Jy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNYWludGVuYW5jZSBzY2hlZHVsaW5nOyBCdXNpbmVzcyBjb250aW51aXR5OyBEb3dudGltZSBtYW5hZ2VtZW50XG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgcHJlZmVycmVkIG1haW50ZW5hbmNlIHdpbmRvd1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBSZXF1aXJlZDsgdmFsaWQgdGltZSB3aW5kb3cgZm9ybWF0XG4gICAqL1xuICByZWFkb25seSBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjbHVzdGVyIHBhcmFtZXRlciBncm91cCBwYXJhbWV0ZXJzIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcuXG4gICAqIFNlY3VyaXR5LXNlbnNpdGl2ZSB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgb3ZlcnJpZGRlbiBmb3IgY29tcGxpYW5jZSAoZS5nLiwgU1NMIGVuZm9yY2VtZW50KS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQZXJmb3JtYW5jZSB0dW5pbmc7IEN1c3RvbSBjbHVzdGVyIGNvbmZpZ3VyYXRpb247IFdvcmtsb2FkIG9wdGltaXphdGlvblxuICAgKlxuICAgKiBBV1M6IFJlZHNoaWZ0IHBhcmFtZXRlciBncm91cCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBzdHJpbmcga2V5LXZhbHVlIHBhaXJzXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJHcm91cFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBXb3JrbG9hZCBtYW5hZ2VtZW50IChXTE0pIGNvbmZpZ3VyYXRpb24gZm9yIHF1ZXJ5IHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUXVlcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBDb25jdXJyZW5jeSBjb250cm9sOyBSZXNvdXJjZSBhbGxvY2F0aW9uXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgV0xNIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIENvbmZpZ3VyYXRpb25FbGVtZW50XG4gICAqL1xuICByZWFkb25seSB3b3JrbG9hZE1hbmFnZW1lbnQ/OiBDb25maWd1cmF0aW9uRWxlbWVudFtdO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBLTVMga2V5IEFSTnMgYWxsb3dlZCB0byB3cml0ZSB0byB0aGUgY2x1c3RlciBidWNrZXQuXG4gICAqIFVzZWZ1bCBmb3IgYWxsb3dpbmcgR2x1ZSBqb2JzIG9yIG90aGVyIHNlcnZpY2VzIHRvIHdyaXRlIGVuY3J5cHRlZCBkYXRhIHRvIHRoZSB3YXJlaG91c2UgYnVja2V0LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENyb3NzLXNlcnZpY2UgZW5jcnlwdGlvbjsgR2x1ZSBqb2IgaW50ZWdyYXRpb247IE11bHRpLWtleSBidWNrZXQgYWNjZXNzXG4gICAqXG4gICAqIEFXUzogS01TIGtleSBBUk5zIGZvciB3YXJlaG91c2UgYnVja2V0IGVuY3J5cHRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIEtNUyBrZXkgQVJOc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJ1Y2tldEttc0tleUFybnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNjaGVkdWxlZCBhY3Rpb25zIGZvciBhdXRvbWF0ZWQgY2x1c3RlciBwYXVzZS9yZXN1bWUgb3BlcmF0aW9ucy5cbiAgICogRWFjaCBhY3Rpb24gc3BlY2lmaWVzIGEgdGFyZ2V0IGFjdGlvbiAocGF1c2VDbHVzdGVyL3Jlc3VtZUNsdXN0ZXIpLCBjcm9uIHNjaGVkdWxlLFxuICAgKiBhbmQgYWN0aXZlIHRpbWUgd2luZG93LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENvc3Qgb3B0aW1pemF0aW9uIHZpYSBzY2hlZHVsZWQgcGF1c2U7IEF1dG9tYXRlZCBvcGVyYXRpb25zOyBCdXNpbmVzcy1ob3VycyBzY2hlZHVsaW5nXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgc2NoZWR1bGVkIGFjdGlvbnMgZm9yIGNsdXN0ZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGFycmF5IG9mIHZhbGlkIFNjaGVkdWxlZEFjdGlvblByb3BzXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZWRBY3Rpb25zPzogU2NoZWR1bGVkQWN0aW9uUHJvcHNbXTtcbiAgLyoqXG4gICAqIERhdGFiYXNlIHVzZXJzIGNyZWF0ZWQgaW4gUmVkc2hpZnQgd2l0aCBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICAgKiBTdXBwb3J0cyBhdXRvbWF0ZWQgc2VjcmV0IHJvdGF0aW9uIG9uIGEgY29uZmlndXJhYmxlIGN5Y2xlLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEF1dG9tYXRlZCB1c2VyIHByb3Zpc2lvbmluZzsgQ3JlZGVudGlhbCBtYW5hZ2VtZW50OyBTZWNyZXQgcm90YXRpb25cbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBkYXRhYmFzZSB1c2VycyB3aXRoIFNlY3JldHMgTWFuYWdlciBjcmVkZW50aWFsIHN0b3JhZ2UgYW5kIHJvdGF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBhcnJheSBvZiB2YWxpZCBEYXRhYmFzZVVzZXJzUHJvcHNcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlVXNlcnM/OiBEYXRhYmFzZVVzZXJzUHJvcHNbXTtcbiAgLyoqXG4gICAqIENvbnRyb2wgd2hldGhlciBhIGRlZGljYXRlZCBTMyBidWNrZXQgaXMgY3JlYXRlZCBmb3Igd2FyZWhvdXNlIGRhdGEgb3BlcmF0aW9uc1xuICAgKiAobG9hZGluZywgdW5sb2FkaW5nLCBiYWNrdXApLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFN0b3JhZ2UgcmVzb3VyY2UgbWFuYWdlbWVudDsgRGF0YSBvcGVyYXRpb25zOyBCdWNrZXQgbGlmZWN5Y2xlIGNvbnRyb2xcbiAgICpcbiAgICogQVdTOiBTMyBidWNrZXQgZm9yIFJlZHNoaWZ0IGRhdGEgd2FyZWhvdXNlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlV2FyZWhvdXNlQnVja2V0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBkYXlzIGF1dG9tYXRlZCBzbmFwc2hvdHMgYXJlIHJldGFpbmVkICgxLTM1KS4gU2V0IHRvIDAgdG8gZGlzYWJsZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBCYWNrdXAgbWFuYWdlbWVudDsgUG9pbnQtaW4tdGltZSByZWNvdmVyeTsgRGF0YSBwcm90ZWN0aW9uIGNvbXBsaWFuY2VcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBhdXRvbWF0ZWQgc25hcHNob3QgcmV0ZW50aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBpbnRlZ2VyIDAtMzVcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogRXZlbnQgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGNsdXN0ZXIgYW5kIHNjaGVkdWxlZCBhY3Rpb24gbW9uaXRvcmluZy5cbiAgICogQ29uZmlndXJlcyBTTlMgbm90aWZpY2F0aW9ucyB3aXRoIGVtYWlsIGRlbGl2ZXJ5LCBzZXZlcml0eSBmaWx0ZXJpbmcsIGFuZCBldmVudCBjYXRlZ29yeSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogT3BlcmF0aW9uYWwgbW9uaXRvcmluZzsgRXZlbnQgYWxlcnRpbmc7IENsdXN0ZXIgc3RhdHVzIHRyYWNraW5nXG4gICAqXG4gICAqIEFXUzogU05TIG5vdGlmaWNhdGlvbnMgZm9yIFJlZHNoaWZ0IGNsdXN0ZXIgZXZlbnRzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyB2YWxpZCBFdmVudE5vdGlmaWNhdGlvbnNQcm9wc1xuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnROb3RpZmljYXRpb25zPzogRXZlbnROb3RpZmljYXRpb25zUHJvcHM7XG4gIC8qKlxuICAgKiBJbml0aWFsIGRhdGFiYXNlIG5hbWUgY3JlYXRlZCBpbiB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gZGF0YWJhc2UgbmFtaW5nOyBJbml0aWFsIGRhdGFiYXNlIHNldHVwXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgaW5pdGlhbCBkYXRhYmFzZVxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgdmFsaWQgZGF0YWJhc2UgbmFtZVxuICAgKiBAZGVmYXVsdCBcImRlZmF1bHRfZGJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogU25hcHNob3QgaWRlbnRpZmllciBmb3IgY2x1c3RlciByZXN0b3JhdGlvbi4gT25seSBwcm92aWRlIHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gZXhpc3Rpbmcgc25hcHNob3QuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRGlzYXN0ZXIgcmVjb3Zlcnk7IERhdGEgbWlncmF0aW9uOyBDbHVzdGVyIHJlc3RvcmF0aW9uXG4gICAqXG4gICAqIEFXUzogUmVkc2hpZnQgc25hcHNob3QgZm9yIGNsdXN0ZXIgcmVzdG9yYXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IHZhbGlkIHNuYXBzaG90IGlkZW50aWZpZXJcbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqXG4gICAqIG93bmVyQWNjb3VudCBSZWZlcnMgdG8gc25hcHNob3Qgb3duZXIgYWNjb3VudC4gQXBwbGljYWJsZSBpZiByZXN0b3JpbmcgdGhlIGNsdXN0ZXIgZnJvbSBzbmFwc2hvdCBhbmQgc25hcHNob3QgYmVsb25ncyB0byBhbm90aGVyIGFjY291bnRcbiAgICogT3B0aW9uYWwgLSBCeSBkZWZhdWx0LCBzbmFwc2hvdHMgYXJlIHNlYXJjaGVkIHdpdGhpbiBjdXJyZW50IGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90T3duZXJBY2NvdW50Pzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIHJlYWRvbmx5IHJlZHNoaWZ0TWFuYWdlTWFzdGVyUGFzc3dvcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIG11bHRpLUFaIGRlcGxveW1lbnQgZm9yIGhpZ2ggYXZhaWxhYmlsaXR5LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEhpZ2ggYXZhaWxhYmlsaXR5OyBGYXVsdCB0b2xlcmFuY2U7IFByb2R1Y3Rpb24gZGVwbG95bWVudHNcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBtdWx0aS1BWiBkZXBsb3ltZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE9wdGlvbmFsOyBib29sZWFuLiBXaGVuIHRydWUsIHJlcXVpcmVzOiBudW1iZXJPZk5vZGVzID49IDIsIHN1Ym5ldElkcyBpbiA+PSAzIEFacyxcbiAgICogY2x1c3RlclBvcnQgaW4gcmFuZ2UgNTQzMS01NDU1IG9yIDgxOTEtODIxNSwgYW5kIHBhdXNlL3Jlc3VtZSBzY2hlZHVsZWQgYWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpQXo/OiBib29sZWFuO1xuICAvKipcbiAgICogVGFyZ2V0IHJlZ2lvbiBmb3IgY3Jvc3MtcmVnaW9uIHNuYXBzaG90IGNvcGllcy4gV2hlbiBzZXQsIGVuYWJsZXMgY3Jvc3MtcmVnaW9uIHNuYXBzaG90IGNvcHkgdG8gdGhpcyByZWdpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogRGlzYXN0ZXIgcmVjb3Zlcnk7IENyb3NzLXJlZ2lvbiBiYWNrdXA7IEJ1c2luZXNzIGNvbnRpbnVpdHlcbiAgICpcbiAgICogQVdTOiBSZWRzaGlmdCBzbmFwc2hvdCBjb3B5IGRlc3RpbmF0aW9uIHJlZ2lvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBPcHRpb25hbDsgdmFsaWQgQVdTIHJlZ2lvbiBzdHJpbmcsIG11c3QgZGlmZmVyIGZyb20gdGhlIGRlcGxveW1lbnQgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSBiYWNrdXBSZWdpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIG9taXRzIHRoZSBleHBsaWNpdCBibG9ja1B1YmxpY0FjY2VzcyBzZXR0aW5nIG9uIFMzIGJ1Y2tldHMgc28gQ0RLIGRvZXMgbm90IGVtaXRcbiAgICogYSBQdXRCdWNrZXRQdWJsaWNBY2Nlc3NCbG9jayBBUEkgY2FsbC4gVXNlIHdoZW4gcHVibGljIGFjY2VzcyBibG9jayBpcyBtYW5hZ2VkIGV4dGVybmFsbHlcbiAgICogKGUuZy4sIGJ5IEFXUyBhY2NvdW50LWxldmVsIHNldHRpbmdzIGFuZC9vciBTQ1BzIHRoYXQgZGVueSBzMzpQdXRCdWNrZXRQdWJsaWNBY2Nlc3NCbG9jaykuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU0NQLXJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzOyBFeHRlcm5hbGx5IG1hbmFnZWQgcHVibGljIGFjY2VzcyBibG9jaztcbiAgICogT3JnYW5pemF0aW9ucyBlbmZvcmNpbmcgYWNjb3VudC1sZXZlbCBTMyBCbG9jayBQdWJsaWMgQWNjZXNzXG4gICAqXG4gICAqIEFXUzogUzMgUHV0QnVja2V0UHVibGljQWNjZXNzQmxvY2tcbiAgICpcbiAgICogVmFsaWRhdGlvbjogT3B0aW9uYWw7IGJvb2xlYW47IGRlZmF1bHQgZmFsc2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FjY2Vzc0Jsb2NrTWFuYWdlZEV4dGVybmFsbHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YVdhcmVob3VzZUNvbmZpZ1BhcnNlciBleHRlbmRzIE1kYWFBcHBDb25maWdQYXJzZXI8RGF0YVdhcmVob3VzZUNvbmZpZ0NvbnRlbnRzPiB7XG4gIHB1YmxpYyByZWFkb25seSBhZG1pblVzZXJuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhZG1pblBhc3N3b3JkUm90YXRpb25EYXlzOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBmZWRlcmF0aW9uczogRmVkZXJhdGlvblByb3BzW107XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZVVzZXJzOiBEYXRhYmFzZVVzZXJzUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFBZG1pblJvbGVSZWZzOiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgd2FyZWhvdXNlQnVja2V0VXNlclJvbGVSZWZzPzogTWRhYVJvbGVSZWZbXTtcbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVSZWZzPzogTWRhYVJvbGVSZWZbXTtcbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjbHVzdGVyUG9ydDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWRzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IG5vZGVUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbmFibGVBdWRpdExvZ2dpbmdUb1MzOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgbnVtYmVyT2ZOb2RlczogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgbXVsdGlOb2RlPzogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwSW5ncmVzczogeyBpcHY0Pzogc3RyaW5nW107IHNnPzogc3RyaW5nW10gfTtcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlckdyb3VwUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2xvYWRNYW5hZ2VtZW50OiBDb25maWd1cmF0aW9uRWxlbWVudFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkaXRpb25hbEJ1Y2tldEttc0tleUFybnM/OiBzdHJpbmdbXTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBkZWZhdWx0Q2x1c3RlclBvcnQgPSA1NDQwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZWR1bGVkQWN0aW9uczogU2NoZWR1bGVkQWN0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVdhcmVob3VzZUJ1Y2tldD86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGRiTmFtZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90T3duZXJBY2NvdW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBtdWx0aUF6PzogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IGJhY2t1cFJlZ2lvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY0FjY2Vzc0Jsb2NrTWFuYWdlZEV4dGVybmFsbHk/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHN0YWNrOiBTdGFjaywgcHJvcHM6IE1kYWFBcHBDb25maWdQYXJzZXJQcm9wcykge1xuICAgIHN1cGVyKHN0YWNrLCBwcm9wcywgY29uZmlnU2NoZW1hIGFzIFNjaGVtYSk7XG5cbiAgICB0aGlzLmFkbWluVXNlcm5hbWUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmFkbWluVXNlcm5hbWU7XG4gICAgdGhpcy5hZG1pblBhc3N3b3JkUm90YXRpb25EYXlzID0gdGhpcy5jb25maWdDb250ZW50cy5hZG1pblBhc3N3b3JkUm90YXRpb25EYXlzO1xuICAgIHRoaXMuZmVkZXJhdGlvbnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmZlZGVyYXRpb25zID8gdGhpcy5jb25maWdDb250ZW50cy5mZWRlcmF0aW9ucyA6IFtdO1xuICAgIHRoaXMuZGF0YUFkbWluUm9sZVJlZnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmRhdGFBZG1pblJvbGVzO1xuICAgIHRoaXMud2FyZWhvdXNlQnVja2V0VXNlclJvbGVSZWZzID0gdGhpcy5jb25maWdDb250ZW50cy53YXJlaG91c2VCdWNrZXRVc2VyUm9sZXM7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlUmVmcyA9IHRoaXMuY29uZmlnQ29udGVudHMuZXhlY3V0aW9uUm9sZXM7XG4gICAgdGhpcy52cGNJZCA9IHRoaXMuY29uZmlnQ29udGVudHMudnBjSWQ7XG4gICAgdGhpcy5zdWJuZXRJZHMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnN1Ym5ldElkcztcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBJbmdyZXNzID0gdGhpcy5jb25maWdDb250ZW50cy5zZWN1cml0eUdyb3VwSW5ncmVzcztcbiAgICB0aGlzLm5vZGVUeXBlID0gdGhpcy5jb25maWdDb250ZW50cy5ub2RlVHlwZTtcbiAgICB0aGlzLm51bWJlck9mTm9kZXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLm51bWJlck9mTm9kZXM7XG4gICAgdGhpcy5lbmFibGVBdWRpdExvZ2dpbmdUb1MzID0gdGhpcy5jb25maWdDb250ZW50cy5lbmFibGVBdWRpdExvZ2dpbmdUb1MzO1xuICAgIHRoaXMuY2x1c3RlclBvcnQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmNsdXN0ZXJQb3J0XG4gICAgICA/IHRoaXMuY29uZmlnQ29udGVudHMuY2x1c3RlclBvcnRcbiAgICAgIDogRGF0YVdhcmVob3VzZUNvbmZpZ1BhcnNlci5kZWZhdWx0Q2x1c3RlclBvcnQ7XG4gICAgdGhpcy5tdWx0aU5vZGUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLm11bHRpTm9kZTtcbiAgICB0aGlzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93ID0gdGhpcy5jb25maWdDb250ZW50cy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdztcbiAgICB0aGlzLnBhcmFtZXRlckdyb3VwUGFyYW1zID0gdGhpcy5jb25maWdDb250ZW50cy5wYXJhbWV0ZXJHcm91cFBhcmFtc1xuICAgICAgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLnBhcmFtZXRlckdyb3VwUGFyYW1zXG4gICAgICA6IHt9O1xuICAgIHRoaXMud29ya2xvYWRNYW5hZ2VtZW50ID0gdGhpcy5jb25maWdDb250ZW50cy53b3JrbG9hZE1hbmFnZW1lbnQgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLndvcmtsb2FkTWFuYWdlbWVudCA6IFtdO1xuICAgIHRoaXMuYWRkaXRpb25hbEJ1Y2tldEttc0tleUFybnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmFkZGl0aW9uYWxCdWNrZXRLbXNLZXlBcm5zO1xuICAgIHRoaXMuc2NoZWR1bGVkQWN0aW9ucyA9IHRoaXMuY29uZmlnQ29udGVudHMuc2NoZWR1bGVkQWN0aW9ucyA/IHRoaXMuY29uZmlnQ29udGVudHMuc2NoZWR1bGVkQWN0aW9ucyA6IFtdO1xuICAgIHRoaXMuZGF0YWJhc2VVc2VycyA9IHRoaXMuY29uZmlnQ29udGVudHMuZGF0YWJhc2VVc2VycyA/IHRoaXMuY29uZmlnQ29udGVudHMuZGF0YWJhc2VVc2VycyA6IFtdO1xuICAgIHRoaXMuY3JlYXRlV2FyZWhvdXNlQnVja2V0ID0gdGhpcy5jb25maWdDb250ZW50cy5jcmVhdGVXYXJlaG91c2VCdWNrZXQ7XG4gICAgdGhpcy5hdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmF1dG9tYXRlZFNuYXBzaG90UmV0ZW50aW9uRGF5cztcbiAgICB0aGlzLmV2ZW50Tm90aWZpY2F0aW9ucyA9IHRoaXMuY29uZmlnQ29udGVudHMuZXZlbnROb3RpZmljYXRpb25zO1xuICAgIHRoaXMuZGJOYW1lID0gdGhpcy5jb25maWdDb250ZW50cy5kYk5hbWU7XG4gICAgdGhpcy5zbmFwc2hvdElkZW50aWZpZXIgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNuYXBzaG90SWRlbnRpZmllcjtcbiAgICB0aGlzLnNuYXBzaG90T3duZXJBY2NvdW50ID0gdGhpcy5jb25maWdDb250ZW50cy5zbmFwc2hvdE93bmVyQWNjb3VudFxuICAgICAgPyBTdHJpbmcodGhpcy5jb25maWdDb250ZW50cy5zbmFwc2hvdE93bmVyQWNjb3VudClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZCA9IHRoaXMuY29uZmlnQ29udGVudHMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZDtcbiAgICB0aGlzLm11bHRpQXogPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLm11bHRpQXo7XG4gICAgdGhpcy5iYWNrdXBSZWdpb24gPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmJhY2t1cFJlZ2lvbjtcbiAgICB0aGlzLnB1YmxpY0FjY2Vzc0Jsb2NrTWFuYWdlZEV4dGVybmFsbHkgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnB1YmxpY0FjY2Vzc0Jsb2NrTWFuYWdlZEV4dGVybmFsbHk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -8,38 +8,37 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"datawarehouse-cdk": "bin/datawarehouse.js"
|
|
10
10
|
},
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.6.0",
|
|
12
12
|
"license": "Apache-2.0",
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "
|
|
14
|
+
"build": "../../../../scripts/build/build_package.sh DataWarehouseConfigContents",
|
|
15
15
|
"watch": "tsc -w",
|
|
16
|
-
"test": "jest --passWithNoTests --
|
|
16
|
+
"test": "jest --passWithNoTests --coverage",
|
|
17
17
|
"cdk": "cdk",
|
|
18
18
|
"lint": "eslint --max-warnings 0 -c ../../../../eslint.config.mjs",
|
|
19
|
-
"test:
|
|
20
|
-
"test:
|
|
21
|
-
"test:snapshots:update": "jest --passWithNoTests --testPathPattern='.*\\.snapshot\\.test\\.ts' --updateSnapshot"
|
|
19
|
+
"test:update-baselines": "UPDATE_BASELINES=true jest --passWithNoTests --testPathPattern='.*\\.diff\\.test\\.ts'",
|
|
20
|
+
"test:package-docs": "../../../../scripts/generate_docs/test_package_docs.sh"
|
|
22
21
|
},
|
|
23
22
|
"main": "lib/index.js",
|
|
24
23
|
"types": "lib/index.d.ts",
|
|
25
24
|
"devDependencies": {
|
|
26
|
-
"@aws-mdaa/testing": "1.
|
|
25
|
+
"@aws-mdaa/testing": "1.6.0",
|
|
27
26
|
"@types/jest": "29.5.14",
|
|
28
27
|
"@types/node": "22.9.0",
|
|
29
28
|
"@types/prettier": "2.6.0",
|
|
30
29
|
"jest": "29.7.0",
|
|
31
|
-
"ts-jest": "29.4.
|
|
30
|
+
"ts-jest": "29.4.9",
|
|
32
31
|
"ts-node": "10.9.2",
|
|
33
32
|
"typescript": "5.9.3",
|
|
34
|
-
"typescript-json-schema": "0.67.
|
|
33
|
+
"typescript-json-schema": "0.67.4"
|
|
35
34
|
},
|
|
36
35
|
"dependencies": {
|
|
37
|
-
"@aws-mdaa/app": "1.
|
|
38
|
-
"@aws-mdaa/config": "1.
|
|
39
|
-
"@aws-mdaa/datawarehouse-l3-construct": "1.
|
|
40
|
-
"@aws-mdaa/iam-role-helper": "1.
|
|
41
|
-
"@aws-mdaa/l3-construct": "1.
|
|
42
|
-
"ajv": "8.
|
|
36
|
+
"@aws-mdaa/app": "1.6.0",
|
|
37
|
+
"@aws-mdaa/config": "1.6.0",
|
|
38
|
+
"@aws-mdaa/datawarehouse-l3-construct": "1.6.0",
|
|
39
|
+
"@aws-mdaa/iam-role-helper": "1.6.0",
|
|
40
|
+
"@aws-mdaa/l3-construct": "1.6.0",
|
|
41
|
+
"ajv": "8.18.0",
|
|
43
42
|
"aws-cdk-lib": "2.220.0",
|
|
44
43
|
"cdk-nag": "2.37.55",
|
|
45
44
|
"constructs": "10.0.96",
|
|
@@ -50,5 +49,8 @@
|
|
|
50
49
|
"repository": {
|
|
51
50
|
"type": "git",
|
|
52
51
|
"url": "https://github.com/aws/modern-data-architecture-accelerator"
|
|
52
|
+
},
|
|
53
|
+
"mdaa": {
|
|
54
|
+
"deployStage": "2"
|
|
53
55
|
}
|
|
54
56
|
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Sample config for the Redshift Data Warehouse module.
|
|
2
|
+
# Deploys a multi-node Redshift cluster with SAML federation,
|
|
3
|
+
# scheduled pause/resume, audit logging, database users with
|
|
4
|
+
# secret rotation, event notifications, workload management,
|
|
5
|
+
# parameter group tuning, and VPC networking.
|
|
6
|
+
# This comprehensive config exercises every compatible non-excluded
|
|
7
|
+
# property at full depth.
|
|
8
|
+
|
|
9
|
+
# Admin username for the Redshift cluster. A secret is
|
|
10
|
+
# automatically generated for the password.
|
|
11
|
+
adminUsername: admin
|
|
12
|
+
|
|
13
|
+
# Number of days between admin password rotation
|
|
14
|
+
adminPasswordRotationDays: 30
|
|
15
|
+
|
|
16
|
+
# (Optional) Number of days automated snapshots are retained
|
|
17
|
+
# (1-35). Set to 0 to disable. (default: 1)
|
|
18
|
+
automatedSnapshotRetentionDays: 3
|
|
19
|
+
|
|
20
|
+
# (Optional) Additional KMS key ARNs allowed to write to the
|
|
21
|
+
# cluster bucket. Useful for allowing Glue jobs or other services
|
|
22
|
+
# to write encrypted data to the warehouse bucket.
|
|
23
|
+
additionalBucketKmsKeyArns:
|
|
24
|
+
- arn:{{partition}}:kms:{{region}}:{{account}}:key/abcd-123123-abcd-12312421
|
|
25
|
+
|
|
26
|
+
# (Optional) SAML or OIDC federation configurations for federated
|
|
27
|
+
# Redshift access. Each federation creates an IAM role with SAML
|
|
28
|
+
# trust for dynamic credential generation and group-based cluster
|
|
29
|
+
# access.
|
|
30
|
+
federations:
|
|
31
|
+
# Name of the federation for reference
|
|
32
|
+
- federationName: 'test'
|
|
33
|
+
# ARN of the IAM Identity Provider
|
|
34
|
+
providerArn: arn:{{partition}}:iam::{{account}}:saml-provider/sample-saml-identity-provider
|
|
35
|
+
|
|
36
|
+
# See CONFIGURATION.md for role reference options (name, arn, id).
|
|
37
|
+
# Admin roles granted full access to cluster resources including
|
|
38
|
+
# KMS keys and S3 buckets. Roles can be referenced by name, arn,
|
|
39
|
+
# or id.
|
|
40
|
+
dataAdminRoles:
|
|
41
|
+
- arn: arn:{{partition}}:iam::{{account}}:role/Admin
|
|
42
|
+
|
|
43
|
+
# (Optional) Roles granted read/write access to the data warehouse
|
|
44
|
+
# S3 bucket for data loading/unloading
|
|
45
|
+
warehouseBucketUserRoles:
|
|
46
|
+
- name: User
|
|
47
|
+
- name: team2-ex-role
|
|
48
|
+
|
|
49
|
+
# (Optional) External execution roles associated with the Redshift
|
|
50
|
+
# cluster for cross-service operations. If a role also needs
|
|
51
|
+
# warehouse bucket access, add it to warehouseBucketUserRoles.
|
|
52
|
+
executionRoles:
|
|
53
|
+
- arn: arn:{{partition}}:iam::{{account}}:role/team1-ex-role
|
|
54
|
+
- arn: arn:{{partition}}:iam::{{account}}:role/RedshiftExecRole
|
|
55
|
+
|
|
56
|
+
# VPC ID for Redshift cluster deployment
|
|
57
|
+
# Often created by your VPC/networking stack.
|
|
58
|
+
# Example SSM: ssm:/path/to/vpc/id
|
|
59
|
+
vpcId: vpc-12321421412
|
|
60
|
+
|
|
61
|
+
# Subnet IDs for Redshift cluster node placement. For automatic
|
|
62
|
+
# cluster relocation, specify at least one subnet per AZ.
|
|
63
|
+
# Often created by your VPC/networking stack.
|
|
64
|
+
# Example SSM: ssm:/path/to/subnet/id
|
|
65
|
+
subnetIds:
|
|
66
|
+
- subnet-12312312421
|
|
67
|
+
- subnet-12312321412
|
|
68
|
+
- subnet-12312321413
|
|
69
|
+
|
|
70
|
+
# Weekly maintenance window in ddd:hh24:mi-ddd:hh24:mi format
|
|
71
|
+
# (UTC). Example: 'Sun:23:45-Mon:00:15'.
|
|
72
|
+
preferredMaintenanceWindow: Sun:23:45-Mon:00:15
|
|
73
|
+
|
|
74
|
+
# (Optional) TCP port for client connections to the cluster
|
|
75
|
+
# (default: 5440)
|
|
76
|
+
clusterPort: 5440
|
|
77
|
+
|
|
78
|
+
# Security group ingress rules defining allowed inbound
|
|
79
|
+
# connections to the cluster port. Supports IPv4 CIDR blocks and
|
|
80
|
+
# security group references. All other traffic is blocked.
|
|
81
|
+
securityGroupIngress:
|
|
82
|
+
# (Optional) IPv4 CIDR blocks to allow traffic from
|
|
83
|
+
ipv4:
|
|
84
|
+
- 172.31.0.0/16
|
|
85
|
+
# (Optional) Security group IDs to allow traffic from
|
|
86
|
+
sg:
|
|
87
|
+
- ssm:/path/to/ssm
|
|
88
|
+
|
|
89
|
+
# Redshift node type determining compute and storage capacity
|
|
90
|
+
nodeType: RA3_4XLARGE
|
|
91
|
+
# Number of nodes in the Redshift cluster
|
|
92
|
+
numberOfNodes: 2
|
|
93
|
+
|
|
94
|
+
# Enable audit logging to a dedicated S3 bucket. The audit bucket
|
|
95
|
+
# uses SSE-S3 encryption (not KMS) due to Redshift requirements.
|
|
96
|
+
enableAuditLoggingToS3: true
|
|
97
|
+
|
|
98
|
+
# (Optional) Control whether a dedicated S3 bucket is created for
|
|
99
|
+
# warehouse data operations (default: true)
|
|
100
|
+
createWarehouseBucket: true
|
|
101
|
+
# (Optional) Initial database name created in the cluster
|
|
102
|
+
# (default: default_db)
|
|
103
|
+
dbName: 'test_db'
|
|
104
|
+
# (Optional) Multi-node cluster flag. When true, creates a
|
|
105
|
+
# multi-node cluster for distributed processing.
|
|
106
|
+
multiNode: true
|
|
107
|
+
# (Optional) Let Redshift manage the master password
|
|
108
|
+
redshiftManageMasterPassword: false
|
|
109
|
+
|
|
110
|
+
# (Optional) Additional cluster parameter group parameters for
|
|
111
|
+
# performance tuning. Security-sensitive values are automatically
|
|
112
|
+
# overridden for compliance (e.g., SSL enforcement).
|
|
113
|
+
parameterGroupParams:
|
|
114
|
+
max_concurrency_scaling_clusters: "1"
|
|
115
|
+
auto_analyze: "true"
|
|
116
|
+
|
|
117
|
+
# (Optional) Snapshot identifier for cluster restoration. Only
|
|
118
|
+
# provide when restoring from an existing snapshot.
|
|
119
|
+
snapshotIdentifier: test-snapshot-id
|
|
120
|
+
|
|
121
|
+
# (Optional) Snapshot owner account. Applicable if restoring the
|
|
122
|
+
# cluster from a snapshot that belongs to another account.
|
|
123
|
+
# By default, snapshots are searched within the current account.
|
|
124
|
+
snapshotOwnerAccount: '{{context:account-2}}'
|
|
125
|
+
|
|
126
|
+
# (Optional) Database users created in Redshift with credentials
|
|
127
|
+
# stored in Secrets Manager. Supports automated secret rotation.
|
|
128
|
+
databaseUsers:
|
|
129
|
+
# Name of the database user
|
|
130
|
+
- userName: 'serviceuserGlue'
|
|
131
|
+
# The DB to which the user will be added
|
|
132
|
+
dbName: 'default_db'
|
|
133
|
+
# Number of days between secret rotation
|
|
134
|
+
secretRotationDays: 90
|
|
135
|
+
# (Optional) Characters to exclude in the password
|
|
136
|
+
excludeCharacters: '"@/\\'
|
|
137
|
+
# (Optional) List of roles that need Redshift secret access
|
|
138
|
+
secretAccessRoles:
|
|
139
|
+
- name: 'test-arn'
|
|
140
|
+
- userName: 'serviceuserQuicksight'
|
|
141
|
+
dbName: 'default_db'
|
|
142
|
+
secretRotationDays: 90
|
|
143
|
+
|
|
144
|
+
# (Optional) Scheduled actions for automated cluster pause/resume.
|
|
145
|
+
# Each action specifies a target action, cron schedule, and active
|
|
146
|
+
# time window.
|
|
147
|
+
scheduledActions:
|
|
148
|
+
# Pause cluster every Friday at 6pm ET
|
|
149
|
+
- name: pause-cluster
|
|
150
|
+
# Scheduled action is enabled if true
|
|
151
|
+
enable: true
|
|
152
|
+
# Target operation: 'pauseCluster' or 'resumeCluster'
|
|
153
|
+
targetAction: pauseCluster
|
|
154
|
+
# Cron expression: cron(Minutes Hours Day-of-month Month
|
|
155
|
+
# Day-of-week Year)
|
|
156
|
+
schedule: cron(0 22 ? * FRI *)
|
|
157
|
+
# (Optional) UTC start date/time when the schedule becomes
|
|
158
|
+
# active (ISO 8601 format)
|
|
159
|
+
startTime: '2023-12-31T00:00:00Z'
|
|
160
|
+
# (Optional) UTC end date/time after which the schedule is no
|
|
161
|
+
# longer active
|
|
162
|
+
endTime: '2099-12-31T00:00:00Z'
|
|
163
|
+
|
|
164
|
+
# Resume cluster every Monday at 7am ET
|
|
165
|
+
- name: resume-cluster
|
|
166
|
+
enable: true
|
|
167
|
+
targetAction: resumeCluster
|
|
168
|
+
schedule: cron(0 12 ? * MON *)
|
|
169
|
+
startTime: '2023-12-31T00:00:00Z'
|
|
170
|
+
endTime: '2099-12-31T00:00:00Z'
|
|
171
|
+
|
|
172
|
+
# (Optional) Event notification configuration for cluster and
|
|
173
|
+
# scheduled action monitoring. Configures SNS notifications with
|
|
174
|
+
# email delivery, severity filtering, and event category selection.
|
|
175
|
+
eventNotifications:
|
|
176
|
+
# (Optional) Email addresses for SNS notification delivery
|
|
177
|
+
email:
|
|
178
|
+
- example@example.com
|
|
179
|
+
# (Optional) Minimum event severity level (enum: ERROR, INFO)
|
|
180
|
+
severity: INFO
|
|
181
|
+
# (Optional) Event categories to monitor
|
|
182
|
+
# (enum: configuration, management, monitoring, security,
|
|
183
|
+
# pending)
|
|
184
|
+
eventCategories:
|
|
185
|
+
- configuration
|
|
186
|
+
- management
|
|
187
|
+
- monitoring
|
|
188
|
+
- security
|
|
189
|
+
- pending
|
|
190
|
+
|
|
191
|
+
# (Optional) Workload management (WLM) configuration for query
|
|
192
|
+
# queue management and resource allocation.
|
|
193
|
+
workloadManagement:
|
|
194
|
+
- query_group: 'test-group'
|
|
195
|
+
memory_percent_to_use: 50
|
|
196
|
+
query_concurrency: 5
|
|
197
|
+
|
|
198
|
+
# (Optional) Enable multi-AZ deployment for high availability.
|
|
199
|
+
# Requires: numberOfNodes >= 2, subnetIds in >= 3 AZs,
|
|
200
|
+
# clusterPort in range 5431-5455 or 8191-8215.
|
|
201
|
+
multiAz: true
|
|
202
|
+
|
|
203
|
+
# (Optional) Target region for cross-region snapshot copies.
|
|
204
|
+
# When set, enables automatic cross-region snapshot copy to this region.
|
|
205
|
+
# Must differ from the cluster's deployment region.
|
|
206
|
+
backupRegion: us-west-2
|
|
207
|
+
|
|
208
|
+
# (Optional) When true, omits the explicit blockPublicAccess setting on S3
|
|
209
|
+
# buckets so CDK does not emit a PutBucketPublicAccessBlock API call. Use in
|
|
210
|
+
# SCP-restricted environments where public access block is managed externally
|
|
211
|
+
# via AWS account-level settings.
|
|
212
|
+
publicAccessBlockManagedExternally: false
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Minimal Redshift Data Warehouse module configuration.
|
|
2
|
+
# Contains only the required properties for a basic Redshift cluster
|
|
3
|
+
# deployment with VPC networking, security group, and audit logging.
|
|
4
|
+
|
|
5
|
+
# Admin username for the Redshift cluster. A secret is
|
|
6
|
+
# automatically generated for the password.
|
|
7
|
+
adminUsername: admin
|
|
8
|
+
|
|
9
|
+
# Number of days between admin password rotation
|
|
10
|
+
adminPasswordRotationDays: 30
|
|
11
|
+
|
|
12
|
+
# See CONFIGURATION.md for role reference options (name, arn, id).
|
|
13
|
+
# Admin roles granted full access to cluster resources including
|
|
14
|
+
# KMS keys and S3 buckets
|
|
15
|
+
dataAdminRoles:
|
|
16
|
+
- arn: arn:{{partition}}:iam::{{account}}:role/Admin
|
|
17
|
+
|
|
18
|
+
# Enable audit logging to a dedicated S3 bucket
|
|
19
|
+
enableAuditLoggingToS3: true
|
|
20
|
+
|
|
21
|
+
# Redshift node type determining compute and storage capacity
|
|
22
|
+
nodeType: RA3_4XLARGE
|
|
23
|
+
# Number of nodes in the Redshift cluster
|
|
24
|
+
numberOfNodes: 2
|
|
25
|
+
|
|
26
|
+
# Weekly maintenance window in ddd:hh24:mi-ddd:hh24:mi format (UTC)
|
|
27
|
+
preferredMaintenanceWindow: Sun:23:45-Mon:00:15
|
|
28
|
+
|
|
29
|
+
# Security group ingress rules defining allowed inbound
|
|
30
|
+
# connections to the cluster port
|
|
31
|
+
securityGroupIngress:
|
|
32
|
+
ipv4:
|
|
33
|
+
- 172.31.0.0/16
|
|
34
|
+
|
|
35
|
+
# Subnet IDs for Redshift cluster node placement
|
|
36
|
+
# Often created by your VPC/networking stack.
|
|
37
|
+
# Example SSM: ssm:/path/to/subnet/id
|
|
38
|
+
subnetIds:
|
|
39
|
+
- subnet-12312312421
|
|
40
|
+
- subnet-12312321412
|
|
41
|
+
|
|
42
|
+
# VPC ID for Redshift cluster deployment
|
|
43
|
+
# Often created by your VPC/networking stack.
|
|
44
|
+
# Example SSM: ssm:/path/to/vpc/id
|
|
45
|
+
vpcId: vpc-12321421412
|