@aws-mdaa/datawarehouse 1.3.0 → 1.5.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 +3 -3
- package/SCHEMA.md +7457 -546
- package/lib/config-schema.json +2730 -212
- package/lib/datawarehouse-config.d.ts +143 -148
- package/lib/datawarehouse-config.js +2 -2
- package/package.json +19 -20
|
@@ -9,282 +9,277 @@ import { Stack } from 'aws-cdk-lib';
|
|
|
9
9
|
import { ConfigurationElement } from '@aws-mdaa/config';
|
|
10
10
|
export interface DataWarehouseConfigContents extends MdaaBaseConfigContents {
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Required admin username for the Redshift cluster providing administrative access to the data warehouse. Defines the master user account for cluster administration, database management, and initial user provisioning.
|
|
12
|
+
* Admin username for the Redshift cluster. A secret is automatically generated for the password.
|
|
14
13
|
*
|
|
15
14
|
* Use cases: Cluster administration; Database management; Initial user provisioning
|
|
16
15
|
*
|
|
17
|
-
* AWS:
|
|
16
|
+
* AWS: Redshift cluster master username
|
|
18
17
|
*
|
|
19
|
-
* Validation:
|
|
20
|
-
|
|
18
|
+
* Validation: Required; valid Redshift username
|
|
19
|
+
*/
|
|
21
20
|
readonly adminUsername: string;
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
24
|
-
* Required number of days between automatic admin password rotations for enhanced security compliance. Enables automated credential management and compliance with password rotation policies for improved cluster security posture.
|
|
22
|
+
* Days between automatic admin password rotations via Secrets Manager.
|
|
25
23
|
*
|
|
26
|
-
* Use cases: Automated credential rotation; Security
|
|
24
|
+
* Use cases: Automated credential rotation; Security compliance; Password policy enforcement
|
|
27
25
|
*
|
|
28
|
-
* AWS:
|
|
26
|
+
* AWS: Redshift admin password rotation via Secrets Manager
|
|
29
27
|
*
|
|
30
|
-
* Validation:
|
|
31
|
-
|
|
28
|
+
* Validation: Required; positive integer
|
|
29
|
+
*/
|
|
32
30
|
readonly adminPasswordRotationDays: number;
|
|
33
31
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
32
|
+
* SAML or OIDC federation configurations for federated Redshift access.
|
|
33
|
+
* Each federation creates an IAM role with SAML trust for dynamic credential generation
|
|
34
|
+
* and group-based cluster access.
|
|
36
35
|
*
|
|
37
|
-
* Use cases: SAML federation setup;
|
|
36
|
+
* Use cases: SAML federation setup; SSO integration; Federated cluster access
|
|
38
37
|
*
|
|
39
|
-
* AWS:
|
|
38
|
+
* AWS: IAM SAML identity provider roles for Redshift federated access
|
|
40
39
|
*
|
|
41
|
-
* Validation:
|
|
42
|
-
|
|
40
|
+
* Validation: Optional; array of valid FederationProps
|
|
41
|
+
*/
|
|
43
42
|
readonly federations?: FederationProps[];
|
|
44
43
|
/**
|
|
45
|
-
*
|
|
46
|
-
* Required array of admin role references with full access to cluster resources including KMS keys and S3 buckets. Provides administrative permissions for data warehouse management, security administration, and resource access control.
|
|
44
|
+
* Admin roles granted full access to cluster resources including KMS keys and S3 buckets.
|
|
47
45
|
*
|
|
48
46
|
* Use cases: Administrative access control; Security management; Resource administration
|
|
49
47
|
*
|
|
50
|
-
* AWS:
|
|
48
|
+
* AWS: IAM roles with full Redshift cluster and resource access
|
|
51
49
|
*
|
|
52
|
-
* Validation:
|
|
53
|
-
|
|
50
|
+
* Validation: Required; array of valid MdaaRoleRef
|
|
51
|
+
*/
|
|
54
52
|
readonly dataAdminRoles: MdaaRoleRef[];
|
|
55
53
|
/**
|
|
56
|
-
*
|
|
57
|
-
* Optional array of user role references with access to data warehouse S3 buckets for data loading and unloading operations. Enables controlled access to warehouse storage resources for ETL operations and data management workflows.
|
|
54
|
+
* Roles granted read/write access to the data warehouse S3 bucket for data loading/unloading.
|
|
58
55
|
*
|
|
59
|
-
* Use cases:
|
|
56
|
+
* Use cases: ETL data loading; Data unloading operations; Bucket access for analytics
|
|
60
57
|
*
|
|
61
|
-
* AWS:
|
|
58
|
+
* AWS: IAM roles with S3 bucket access for Redshift data operations
|
|
62
59
|
*
|
|
63
|
-
* Validation:
|
|
64
|
-
|
|
60
|
+
* Validation: Optional; array of valid MdaaRoleRef
|
|
61
|
+
*/
|
|
65
62
|
readonly warehouseBucketUserRoles?: MdaaRoleRef[];
|
|
66
63
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
64
|
+
* External execution roles associated with the Redshift cluster for cross-service operations.
|
|
65
|
+
* If a role also needs warehouse bucket access, add it to warehouseBucketUserRoles explicitly.
|
|
69
66
|
*
|
|
70
|
-
* Use cases: Cross-service
|
|
67
|
+
* Use cases: Cross-service integrations; External data access; Glue/Lambda integration
|
|
71
68
|
*
|
|
72
|
-
* AWS:
|
|
69
|
+
* AWS: IAM execution roles associated with the Redshift cluster
|
|
73
70
|
*
|
|
74
|
-
* Validation:
|
|
75
|
-
|
|
71
|
+
* Validation: Optional; array of valid MdaaRoleRef; roles must be assumable by Redshift
|
|
72
|
+
*/
|
|
76
73
|
readonly executionRoles?: MdaaRoleRef[];
|
|
77
74
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
75
|
+
* VPC ID for Redshift cluster deployment. The cluster is deployed within this VPC
|
|
76
|
+
* with network access controlled by security groups.
|
|
80
77
|
*
|
|
81
|
-
* Use cases:
|
|
78
|
+
* Use cases: Network isolation; VPC-based deployment; Secure networking
|
|
82
79
|
*
|
|
83
|
-
* AWS:
|
|
80
|
+
* AWS: VPC for Redshift cluster network configuration
|
|
84
81
|
*
|
|
85
|
-
* Validation:
|
|
86
|
-
|
|
82
|
+
* Validation: Required; valid VPC ID
|
|
83
|
+
*/
|
|
87
84
|
readonly vpcId: string;
|
|
88
85
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
86
|
+
* Subnet IDs for Redshift cluster node placement. For automatic cluster relocation,
|
|
87
|
+
* specify at least one subnet per AZ.
|
|
91
88
|
*
|
|
92
|
-
* Use cases:
|
|
89
|
+
* Use cases: Multi-AZ placement; Subnet-specific deployment; Cluster relocation support
|
|
93
90
|
*
|
|
94
|
-
* AWS:
|
|
91
|
+
* AWS: VPC subnets for Redshift subnet group
|
|
95
92
|
*
|
|
96
|
-
* Validation:
|
|
97
|
-
|
|
93
|
+
* Validation: Required; array of valid subnet IDs in the specified VPC
|
|
94
|
+
*/
|
|
98
95
|
readonly subnetIds: string[];
|
|
99
96
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
97
|
+
* Security group ingress rules defining allowed inbound connections to the cluster port.
|
|
98
|
+
* Supports IPv4 CIDR blocks and security group references. All other traffic is blocked.
|
|
102
99
|
*
|
|
103
100
|
* Use cases: Network access control; Client connectivity; Security group management
|
|
104
101
|
*
|
|
105
|
-
* AWS:
|
|
102
|
+
* AWS: VPC security group ingress rules for Redshift cluster
|
|
106
103
|
*
|
|
107
|
-
* Validation:
|
|
108
|
-
|
|
104
|
+
* Validation: Required; object with optional ipv4 and/or sg arrays
|
|
105
|
+
*/
|
|
109
106
|
readonly securityGroupIngress: {
|
|
110
107
|
ipv4?: string[];
|
|
111
108
|
sg?: string[];
|
|
112
109
|
};
|
|
113
110
|
/**
|
|
114
|
-
*
|
|
115
|
-
* Required node type specification determining compute and storage capacity for cluster nodes. Controls the underlying EC2 instance type and affects performance, storage, and cost characteristics of the data warehouse.
|
|
111
|
+
* Redshift node type determining compute and storage capacity (e.g., RA3_4XLARGE).
|
|
116
112
|
*
|
|
117
|
-
* Use cases: Performance
|
|
113
|
+
* Use cases: Performance sizing; Cost optimization; Workload-specific capacity
|
|
118
114
|
*
|
|
119
|
-
* AWS:
|
|
115
|
+
* AWS: Redshift node type (instance type)
|
|
120
116
|
*
|
|
121
|
-
* Validation:
|
|
122
|
-
|
|
117
|
+
* Validation: Required; valid Redshift node type string
|
|
118
|
+
*/
|
|
123
119
|
readonly nodeType: string;
|
|
124
120
|
/**
|
|
125
|
-
*
|
|
126
|
-
* Required number of nodes for the Redshift cluster determining total compute capacity and parallel processing capability. Controls cluster size and affects performance, cost, and data distribution characteristics.
|
|
121
|
+
* Number of nodes in the Redshift cluster.
|
|
127
122
|
*
|
|
128
|
-
* Use cases: Cluster sizing; Performance scaling; Cost
|
|
123
|
+
* Use cases: Cluster sizing; Performance scaling; Cost management
|
|
129
124
|
*
|
|
130
|
-
* AWS:
|
|
125
|
+
* AWS: Redshift cluster node count
|
|
131
126
|
*
|
|
132
|
-
* Validation:
|
|
133
|
-
|
|
127
|
+
* Validation: Required; positive integer
|
|
128
|
+
*/
|
|
134
129
|
readonly numberOfNodes: number;
|
|
135
130
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
131
|
+
* Enable audit logging to a dedicated S3 bucket. The audit bucket uses SSE-S3 encryption
|
|
132
|
+
* (not KMS) due to Redshift audit logging requirements.
|
|
138
133
|
*
|
|
139
|
-
* Use cases: Compliance auditing; Security monitoring;
|
|
134
|
+
* Use cases: Compliance auditing; Security monitoring; User activity tracking
|
|
140
135
|
*
|
|
141
|
-
* AWS:
|
|
136
|
+
* AWS: Redshift audit logging to S3 with SSE-S3 encryption
|
|
142
137
|
*
|
|
143
|
-
* Validation:
|
|
144
|
-
|
|
138
|
+
* Validation: Required; boolean
|
|
139
|
+
*/
|
|
145
140
|
readonly enableAuditLoggingToS3: boolean;
|
|
146
141
|
/**
|
|
147
|
-
*
|
|
148
|
-
* Optional cluster port number for client connections enabling custom port configuration and network security. Defines the TCP port on which the Redshift cluster accepts client connections, supporting custom networking requirements and security configurations.
|
|
142
|
+
* TCP port for client connections to the cluster.
|
|
149
143
|
*
|
|
150
|
-
* Use cases: Custom port configuration; Network security;
|
|
144
|
+
* Use cases: Custom port configuration; Network security; Port standardization
|
|
151
145
|
*
|
|
152
|
-
* AWS:
|
|
146
|
+
* AWS: Redshift cluster listening port
|
|
153
147
|
*
|
|
154
|
-
* Validation:
|
|
155
|
-
|
|
148
|
+
* Validation: Optional; valid port number
|
|
149
|
+
* @default 5440
|
|
150
|
+
*/
|
|
156
151
|
readonly clusterPort?: number;
|
|
157
152
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
153
|
+
* Multi-node cluster flag. When true, creates a multi-node cluster for distributed processing;
|
|
154
|
+
* when false, creates a single-node cluster for development or small workloads.
|
|
160
155
|
*
|
|
161
|
-
* Use cases: Cluster architecture selection;
|
|
156
|
+
* Use cases: Cluster architecture selection; Dev vs production deployment; Cost optimization
|
|
162
157
|
*
|
|
163
|
-
* AWS:
|
|
158
|
+
* AWS: Redshift cluster type (single-node or multi-node)
|
|
164
159
|
*
|
|
165
|
-
* Validation:
|
|
166
|
-
|
|
160
|
+
* Validation: Optional; boolean
|
|
161
|
+
*/
|
|
167
162
|
readonly multiNode?: boolean;
|
|
168
163
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
164
|
+
* Weekly maintenance window in ddd:hh24:mi-ddd:hh24:mi format (UTC).
|
|
165
|
+
* Example: 'Sun:23:45-Mon:00:15'.
|
|
171
166
|
*
|
|
172
|
-
* Use cases: Maintenance scheduling; Business continuity;
|
|
167
|
+
* Use cases: Maintenance scheduling; Business continuity; Downtime management
|
|
173
168
|
*
|
|
174
|
-
* AWS:
|
|
169
|
+
* AWS: Redshift preferred maintenance window
|
|
175
170
|
*
|
|
176
|
-
* Validation:
|
|
177
|
-
|
|
171
|
+
* Validation: Required; valid time window format
|
|
172
|
+
*/
|
|
178
173
|
readonly preferredMaintenanceWindow: string;
|
|
179
174
|
/**
|
|
180
|
-
*
|
|
181
|
-
*
|
|
175
|
+
* Additional cluster parameter group parameters for performance tuning.
|
|
176
|
+
* Security-sensitive values are automatically overridden for compliance (e.g., SSL enforcement).
|
|
182
177
|
*
|
|
183
|
-
* Use cases: Performance tuning;
|
|
178
|
+
* Use cases: Performance tuning; Custom cluster configuration; Workload optimization
|
|
184
179
|
*
|
|
185
|
-
* AWS:
|
|
180
|
+
* AWS: Redshift parameter group parameters
|
|
186
181
|
*
|
|
187
|
-
* Validation:
|
|
188
|
-
|
|
182
|
+
* Validation: Optional; string key-value pairs
|
|
183
|
+
*/
|
|
189
184
|
readonly parameterGroupParams?: Record<string, string>;
|
|
190
185
|
/**
|
|
191
|
-
*
|
|
192
|
-
* Optional workload management configuration for query performance optimization and resource allocation. Defines WLM configuration elements for managing query queues, memory allocation, and concurrency for optimal cluster performance.
|
|
186
|
+
* Workload management (WLM) configuration for query queue management and resource allocation.
|
|
193
187
|
*
|
|
194
|
-
* Use cases: Query performance optimization;
|
|
188
|
+
* Use cases: Query performance optimization; Concurrency control; Resource allocation
|
|
195
189
|
*
|
|
196
|
-
* AWS:
|
|
190
|
+
* AWS: Redshift WLM configuration
|
|
197
191
|
*
|
|
198
|
-
* Validation:
|
|
199
|
-
|
|
192
|
+
* Validation: Optional; array of valid ConfigurationElement
|
|
193
|
+
*/
|
|
200
194
|
readonly workloadManagement?: ConfigurationElement[];
|
|
201
195
|
/**
|
|
202
|
-
*
|
|
203
|
-
*
|
|
196
|
+
* Additional KMS key ARNs allowed to write to the cluster bucket.
|
|
197
|
+
* Useful for allowing Glue jobs or other services to write encrypted data to the warehouse bucket.
|
|
204
198
|
*
|
|
205
|
-
* Use cases:
|
|
199
|
+
* Use cases: Cross-service encryption; Glue job integration; Multi-key bucket access
|
|
206
200
|
*
|
|
207
|
-
* AWS:
|
|
201
|
+
* AWS: KMS key ARNs for warehouse bucket encryption
|
|
208
202
|
*
|
|
209
|
-
* Validation:
|
|
210
|
-
|
|
203
|
+
* Validation: Optional; array of valid KMS key ARNs
|
|
204
|
+
*/
|
|
211
205
|
readonly additionalBucketKmsKeyArns?: string[];
|
|
212
206
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
207
|
+
* Scheduled actions for automated cluster pause/resume operations.
|
|
208
|
+
* Each action specifies a target action (pauseCluster/resumeCluster), cron schedule,
|
|
209
|
+
* and active time window.
|
|
215
210
|
*
|
|
216
|
-
* Use cases: Cost optimization; Automated operations;
|
|
211
|
+
* Use cases: Cost optimization via scheduled pause; Automated operations; Business-hours scheduling
|
|
217
212
|
*
|
|
218
|
-
* AWS:
|
|
213
|
+
* AWS: Redshift scheduled actions for cluster lifecycle management
|
|
219
214
|
*
|
|
220
|
-
* Validation:
|
|
221
|
-
|
|
215
|
+
* Validation: Optional; array of valid ScheduledActionProps
|
|
216
|
+
*/
|
|
222
217
|
readonly scheduledActions?: ScheduledActionProps[];
|
|
223
218
|
/**
|
|
224
|
-
*
|
|
225
|
-
*
|
|
219
|
+
* Database users created in Redshift with credentials stored in Secrets Manager.
|
|
220
|
+
* Supports automated secret rotation on a configurable cycle.
|
|
226
221
|
*
|
|
227
|
-
* Use cases: Automated user provisioning; Credential management;
|
|
222
|
+
* Use cases: Automated user provisioning; Credential management; Secret rotation
|
|
228
223
|
*
|
|
229
|
-
* AWS:
|
|
224
|
+
* AWS: Redshift database users with Secrets Manager credential storage and rotation
|
|
230
225
|
*
|
|
231
|
-
* Validation:
|
|
232
|
-
|
|
226
|
+
* Validation: Optional; array of valid DatabaseUsersProps
|
|
227
|
+
*/
|
|
233
228
|
readonly databaseUsers?: DatabaseUsersProps[];
|
|
234
229
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
230
|
+
* Control whether a dedicated S3 bucket is created for warehouse data operations
|
|
231
|
+
* (loading, unloading, backup).
|
|
237
232
|
*
|
|
238
|
-
* Use cases: Storage resource management; Data operations;
|
|
233
|
+
* Use cases: Storage resource management; Data operations; Bucket lifecycle control
|
|
239
234
|
*
|
|
240
|
-
* AWS:
|
|
235
|
+
* AWS: S3 bucket for Redshift data warehouse operations
|
|
241
236
|
*
|
|
242
|
-
* Validation:
|
|
243
|
-
|
|
237
|
+
* Validation: Optional; boolean
|
|
238
|
+
* @default true
|
|
239
|
+
*/
|
|
244
240
|
readonly createWarehouseBucket?: boolean;
|
|
245
241
|
/**
|
|
246
|
-
*
|
|
247
|
-
* Optional retention period for automated snapshots enabling backup management and data protection. Specifies the number of days automated snapshots are retained for point-in-time recovery and data protection requirements.
|
|
242
|
+
* Number of days automated snapshots are retained (1-35). Set to 0 to disable.
|
|
248
243
|
*
|
|
249
|
-
* Use cases: Backup management;
|
|
244
|
+
* Use cases: Backup management; Point-in-time recovery; Data protection compliance
|
|
250
245
|
*
|
|
251
|
-
* AWS:
|
|
246
|
+
* AWS: Redshift automated snapshot retention
|
|
252
247
|
*
|
|
253
|
-
* Validation:
|
|
254
|
-
|
|
248
|
+
* Validation: Optional; integer 0-35
|
|
249
|
+
* @default 1
|
|
250
|
+
*/
|
|
255
251
|
readonly automatedSnapshotRetentionDays?: number;
|
|
256
252
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
253
|
+
* Event notification configuration for cluster and scheduled action monitoring.
|
|
254
|
+
* Configures SNS notifications with email delivery, severity filtering, and event category selection.
|
|
259
255
|
*
|
|
260
|
-
* Use cases: Operational monitoring; Event alerting; Cluster status tracking
|
|
256
|
+
* Use cases: Operational monitoring; Event alerting; Cluster status tracking
|
|
261
257
|
*
|
|
262
|
-
* AWS:
|
|
258
|
+
* AWS: SNS notifications for Redshift cluster events
|
|
263
259
|
*
|
|
264
|
-
* Validation:
|
|
265
|
-
|
|
260
|
+
* Validation: Optional; valid EventNotificationsProps
|
|
261
|
+
*/
|
|
266
262
|
readonly eventNotifications?: EventNotificationsProps;
|
|
267
263
|
/**
|
|
268
|
-
*
|
|
269
|
-
* Optional database name for initial database creation enabling custom database naming and organization. Specifies the name of the initial database created in the cluster, supporting custom naming conventions and database organization.
|
|
264
|
+
* Initial database name created in the cluster.
|
|
270
265
|
*
|
|
271
|
-
* Use cases: Custom database naming;
|
|
266
|
+
* Use cases: Custom database naming; Initial database setup
|
|
272
267
|
*
|
|
273
|
-
* AWS:
|
|
268
|
+
* AWS: Redshift initial database
|
|
274
269
|
*
|
|
275
|
-
* Validation:
|
|
276
|
-
|
|
270
|
+
* Validation: Optional; valid database name
|
|
271
|
+
* @default "default_db"
|
|
272
|
+
*/
|
|
277
273
|
readonly dbName?: string;
|
|
278
274
|
/**
|
|
279
|
-
*
|
|
280
|
-
* Optional snapshot identifier for cluster restoration from existing snapshot enabling disaster recovery and data migration. Specifies the snapshot ID to restore the cluster from, supporting disaster recovery scenarios and data migration operations.
|
|
275
|
+
* Snapshot identifier for cluster restoration. Only provide when restoring from an existing snapshot.
|
|
281
276
|
*
|
|
282
|
-
* Use cases: Disaster recovery; Data migration; Cluster restoration
|
|
277
|
+
* Use cases: Disaster recovery; Data migration; Cluster restoration
|
|
283
278
|
*
|
|
284
|
-
* AWS:
|
|
279
|
+
* AWS: Redshift snapshot for cluster restoration
|
|
285
280
|
*
|
|
286
|
-
* Validation:
|
|
287
|
-
|
|
281
|
+
* Validation: Optional; valid snapshot identifier
|
|
282
|
+
*/
|
|
288
283
|
readonly snapshotIdentifier?: string;
|
|
289
284
|
/**
|
|
290
285
|
* ownerAccount Refers to snapshot owner account. Applicable if restoring the cluster from snapshot and snapshot belongs to another account
|
|
@@ -316,7 +311,7 @@ export declare class DataWarehouseConfigParser extends MdaaAppConfigParser<DataW
|
|
|
316
311
|
readonly parameterGroupParams: Record<string, string>;
|
|
317
312
|
readonly workloadManagement: ConfigurationElement[];
|
|
318
313
|
readonly additionalBucketKmsKeyArns?: string[];
|
|
319
|
-
static readonly defaultClusterPort =
|
|
314
|
+
static readonly defaultClusterPort = 5440;
|
|
320
315
|
readonly scheduledActions: ScheduledActionProps[];
|
|
321
316
|
readonly createWarehouseBucket?: boolean;
|
|
322
317
|
readonly automatedSnapshotRetentionDays?: number;
|
|
@@ -44,5 +44,5 @@ class DataWarehouseConfigParser extends app_1.MdaaAppConfigParser {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
exports.DataWarehouseConfigParser = DataWarehouseConfigParser;
|
|
47
|
-
DataWarehouseConfigParser.defaultClusterPort =
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXdhcmVob3VzZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhd2FyZWhvdXNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBc0c7QUFVdEcscURBQXFEO0FBZ1NyRCxNQUFhLHlCQUEwQixTQUFRLHlCQUFnRDtJQThCN0YsWUFBWSxLQUFZLEVBQUUsS0FBK0I7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBc0IsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUM7UUFDL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVc7WUFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztZQUNqQyxDQUFDLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQztRQUNqRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0I7WUFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CO1lBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9HLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2RSxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztRQUN6RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO1FBQ3JFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDO0lBQ3ZGLENBQUM7O0FBaEVILDhEQWlFQztBQTdDd0IsNENBQWtCLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgTWRhYUFwcENvbmZpZ1BhcnNlciwgTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzLCBNZGFhQmFzZUNvbmZpZ0NvbnRlbnRzIH0gZnJvbSAnQGF3cy1tZGFhL2FwcCc7XG5pbXBvcnQge1xuICBGZWRlcmF0aW9uUHJvcHMsXG4gIFNjaGVkdWxlZEFjdGlvblByb3BzLFxuICBEYXRhYmFzZVVzZXJzUHJvcHMsXG4gIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzLFxufSBmcm9tICdAYXdzLW1kYWEvZGF0YXdhcmVob3VzZS1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgTWRhYVJvbGVSZWYgfSBmcm9tICdAYXdzLW1kYWEvaWFtLXJvbGUtaGVscGVyJztcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ2Fqdic7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbmZpZ1NjaGVtYSBmcm9tICcuL2NvbmZpZy1zY2hlbWEuanNvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRWxlbWVudCB9IGZyb20gJ0Bhd3MtbWRhYS9jb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFXYXJlaG91c2VDb25maWdDb250ZW50cyBleHRlbmRzIE1kYWFCYXNlQ29uZmlnQ29udGVudHMge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBhZG1pbiB1c2VybmFtZSBmb3IgdGhlIFJlZHNoaWZ0IGNsdXN0ZXIgcHJvdmlkaW5nIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byB0aGUgZGF0YSB3YXJlaG91c2UuIERlZmluZXMgdGhlIG1hc3RlciB1c2VyIGFjY291bnQgZm9yIGNsdXN0ZXIgYWRtaW5pc3RyYXRpb24sIGRhdGFiYXNlIG1hbmFnZW1lbnQsIGFuZCBpbml0aWFsIHVzZXIgcHJvdmlzaW9uaW5nLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYWRtaW5pc3RyYXRpb247IERhdGFiYXNlIG1hbmFnZW1lbnQ7IEluaXRpYWwgdXNlciBwcm92aXNpb25pbmdcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgY2x1c3RlciBtYXN0ZXIgdXNlcm5hbWUgZm9yIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBhbmQgZGF0YWJhc2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFJlZHNoaWZ0IHVzZXJuYW1lOyByZXF1aXJlZDsgdXNlZCBmb3IgY2x1c3RlciBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3NcbiAgICoqL1xuICByZWFkb25seSBhZG1pblVzZXJuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIG51bWJlciBvZiBkYXlzIGJldHdlZW4gYXV0b21hdGljIGFkbWluIHBhc3N3b3JkIHJvdGF0aW9ucyBmb3IgZW5oYW5jZWQgc2VjdXJpdHkgY29tcGxpYW5jZS4gRW5hYmxlcyBhdXRvbWF0ZWQgY3JlZGVudGlhbCBtYW5hZ2VtZW50IGFuZCBjb21wbGlhbmNlIHdpdGggcGFzc3dvcmQgcm90YXRpb24gcG9saWNpZXMgZm9yIGltcHJvdmVkIGNsdXN0ZXIgc2VjdXJpdHkgcG9zdHVyZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBBdXRvbWF0ZWQgY3JlZGVudGlhbCByb3RhdGlvbjsgU2VjdXJpdHkgcG9saWN5IGNvbXBsaWFuY2U7IFBhc3N3b3JkIG1hbmFnZW1lbnQgYXV0b21hdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBhdXRvbWF0aWMgcGFzc3dvcmQgcm90YXRpb24gY29uZmlndXJhdGlvbiBmb3Igc2VjdXJpdHkgbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXI7IHJlcXVpcmVkOyBkZWZpbmVzIHBhc3N3b3JkIHJvdGF0aW9uIGZyZXF1ZW5jeSBmb3Igc2VjdXJpdHkgY29tcGxpYW5jZVxuICAgKiovXG4gIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgZmVkZXJhdGlvbiBjb25maWd1cmF0aW9ucyBmb3IgU0FNTCBvciBPSURDIGlkZW50aXR5IHByb3ZpZGVyIGludGVncmF0aW9uIHdpdGggdGhlIGRhdGEgd2FyZWhvdXNlLiBFbmFibGVzIGZlZGVyYXRlZCBhY2Nlc3MgdG8gUmVkc2hpZnQgdGhyb3VnaCBleHRlcm5hbCBpZGVudGl0eSBwcm92aWRlcnMgZm9yIGNlbnRyYWxpemVkIGlkZW50aXR5IG1hbmFnZW1lbnQgYW5kIFNTTyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogU0FNTCBmZWRlcmF0aW9uIHNldHVwOyBPSURDIHByb3ZpZGVyIGludGVncmF0aW9uOyBDZW50cmFsaXplZCBpZGVudGl0eSBtYW5hZ2VtZW50IGZvciBkYXRhIHdhcmVob3VzZSBhY2Nlc3NcbiAgICpcbiAgICogQVdTOiBBV1MgSUFNIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZm9yIGZlZGVyYXRlZCBSZWRzaGlmdCBhY2Nlc3MgYW5kIFNTTyBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIEZlZGVyYXRpb25Qcm9wcyBpZiBwcm92aWRlZDsgZW5hYmxlcyBmZWRlcmF0ZWQgYXV0aGVudGljYXRpb24gd2hlbiBzcGVjaWZpZWRcbiAgICoqL1xuICByZWFkb25seSBmZWRlcmF0aW9ucz86IEZlZGVyYXRpb25Qcm9wc1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBhcnJheSBvZiBhZG1pbiByb2xlIHJlZmVyZW5jZXMgd2l0aCBmdWxsIGFjY2VzcyB0byBjbHVzdGVyIHJlc291cmNlcyBpbmNsdWRpbmcgS01TIGtleXMgYW5kIFMzIGJ1Y2tldHMuIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIGZvciBkYXRhIHdhcmVob3VzZSBtYW5hZ2VtZW50LCBzZWN1cml0eSBhZG1pbmlzdHJhdGlvbiwgYW5kIHJlc291cmNlIGFjY2VzcyBjb250cm9sLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEFkbWluaXN0cmF0aXZlIGFjY2VzcyBjb250cm9sOyBTZWN1cml0eSBtYW5hZ2VtZW50OyBSZXNvdXJjZSBhZG1pbmlzdHJhdGlvblxuICAgKlxuICAgKiBBV1M6IEFXUyBJQU0gcm9sZXMgd2l0aCBmdWxsIFJlZHNoaWZ0IGNsdXN0ZXIgYW5kIHJlc291cmNlIGFjY2VzcyBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIE1kYWFSb2xlUmVmIG9iamVjdHM7IHJlcXVpcmVkOyByb2xlcyByZWNlaXZlIGZ1bGwgY2x1c3RlciBhY2Nlc3NcbiAgICoqL1xuICByZWFkb25seSBkYXRhQWRtaW5Sb2xlczogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgdXNlciByb2xlIHJlZmVyZW5jZXMgd2l0aCBhY2Nlc3MgdG8gZGF0YSB3YXJlaG91c2UgUzMgYnVja2V0cyBmb3IgZGF0YSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgb3BlcmF0aW9ucy4gRW5hYmxlcyBjb250cm9sbGVkIGFjY2VzcyB0byB3YXJlaG91c2Ugc3RvcmFnZSByZXNvdXJjZXMgZm9yIEVUTCBvcGVyYXRpb25zIGFuZCBkYXRhIG1hbmFnZW1lbnQgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERhdGEgbG9hZGluZyBvcGVyYXRpb25zOyBFVEwgd29ya2Zsb3cgYWNjZXNzOyBDb250cm9sbGVkIHN0b3JhZ2UgYWNjZXNzXG4gICAqXG4gICAqIEFXUzogQVdTIElBTSByb2xlcyB3aXRoIFMzIGJ1Y2tldCBhY2Nlc3MgZm9yIFJlZHNoaWZ0IGRhdGEgb3BlcmF0aW9uc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIE1kYWFSb2xlUmVmIG9iamVjdHMgaWYgcHJvdmlkZWQ7IHJvbGVzIHJlY2VpdmUgYnVja2V0IGFjY2VzcyBwZXJtaXNzaW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IHdhcmVob3VzZUJ1Y2tldFVzZXJSb2xlcz86IE1kYWFSb2xlUmVmW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGV4dGVybmFsIGV4ZWN1dGlvbiByb2xlIHJlZmVyZW5jZXMgZm9yIFJlZHNoaWZ0IGNsdXN0ZXIgb3BlcmF0aW9ucyBhbmQgaW50ZWdyYXRpb25zLiBFbmFibGVzIGNsdXN0ZXIgdG8gYXNzdW1lIGV4dGVybmFsIHJvbGVzIGZvciBjcm9zcy1zZXJ2aWNlIG9wZXJhdGlvbnMsIGRhdGEgYWNjZXNzLCBhbmQgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBBV1Mgc2VydmljZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ3Jvc3Mtc2VydmljZSBvcGVyYXRpb25zOyBFeHRlcm5hbCBkYXRhIGFjY2VzczsgU2VydmljZSBpbnRlZ3JhdGlvbiB3b3JrZmxvd3NcbiAgICpcbiAgICogQVdTOiBBV1MgSUFNIHJvbGVzIGZvciBSZWRzaGlmdCBjbHVzdGVyIGNyb3NzLXNlcnZpY2Ugb3BlcmF0aW9ucyBhbmQgaW50ZWdyYXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgTWRhYVJvbGVSZWYgb2JqZWN0cyBpZiBwcm92aWRlZDsgcm9sZXMgbXVzdCBiZSBhc3N1bWFibGUgYnkgUmVkc2hpZnQgc2VydmljZVxuICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVzPzogTWRhYVJvbGVSZWZbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgVlBDIElEIGZvciBSZWRzaGlmdCBjbHVzdGVyIGRlcGxveW1lbnQgcHJvdmlkaW5nIG5ldHdvcmsgaXNvbGF0aW9uIGFuZCBzZWN1cml0eSBjb250cm9scy4gRW5zdXJlcyBjbHVzdGVyIG9wZXJhdGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIFZQQyBmb3Igc2VjdXJlIG5ldHdvcmtpbmcgYW5kIGludGVncmF0aW9uIHdpdGggb3RoZXIgVlBDIHJlc291cmNlcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBWUEMgbmV0d29yayBpc29sYXRpb247IFNlY3VyZSBuZXR3b3JraW5nOyBWUEMgcmVzb3VyY2UgaW50ZWdyYXRpb25cbiAgICpcbiAgICogQVdTOiBBbWF6b24gVlBDIGZvciBSZWRzaGlmdCBjbHVzdGVyIG5ldHdvcmsgaXNvbGF0aW9uIGFuZCBzZWN1cml0eSBjb250cm9sc1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIFZQQyBJRDsgcmVxdWlyZWQ7IFZQQyBtdXN0IGV4aXN0IGFuZCBiZSBhY2Nlc3NpYmxlXG4gICAqKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgYXJyYXkgb2Ygc3VibmV0IElEcyBmb3IgUmVkc2hpZnQgY2x1c3RlciBub2RlIHBsYWNlbWVudCB3aXRoaW4gdGhlIFZQQy4gRGVmaW5lcyB0aGUgbmV0d29yayBzdWJuZXRzIHdoZXJlIGNsdXN0ZXIgbm9kZXMgd2lsbCBiZSBkZXBsb3llZCBmb3Igc2VjdXJlIFZQQyBjb25uZWN0aXZpdHkgYW5kIGF2YWlsYWJpbGl0eSB6b25lIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBWUEMgbmV0d29yayBwbGFjZW1lbnQ7IFN1Ym5ldC1zcGVjaWZpYyBkZXBsb3ltZW50OyBNdWx0aS1BWiBjbHVzdGVyIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBWUEMgc3VibmV0cyBmb3IgUmVkc2hpZnQgY2x1c3RlciBub2RlIHBsYWNlbWVudCBhbmQgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgc3VibmV0IElEczsgcmVxdWlyZWQ7IHN1Ym5ldHMgbXVzdCBleGlzdCBpbiBzcGVjaWZpZWQgVlBDXG4gICAqKi9cbiAgcmVhZG9ubHkgc3VibmV0SWRzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBjb25maWd1cmF0aW9uIGRlZmluaW5nIGFsbG93ZWQgaW5ib3VuZCBjb25uZWN0aW9ucyB0byB0aGUgY2x1c3Rlci4gU3BlY2lmaWVzIElQdjQgQ0lEUiBibG9ja3MgYW5kIHNlY3VyaXR5IGdyb3VwIElEcyB0aGF0IGNhbiBjb25uZWN0IHRvIHRoZSBjbHVzdGVyIHBvcnQgZm9yIGNvbnRyb2xsZWQgbmV0d29yayBhY2Nlc3MuXG4gICAqXG4gICAqIFVzZSBjYXNlczogTmV0d29yayBhY2Nlc3MgY29udHJvbDsgQ2xpZW50IGNvbm5lY3Rpdml0eTsgU2VjdXJpdHkgZ3JvdXAgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBWUEMgc2VjdXJpdHkgZ3JvdXAgaW5ncmVzcyBydWxlcyBmb3IgUmVkc2hpZnQgY2x1c3RlciBhY2Nlc3MgY29udHJvbFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIG9iamVjdCB3aXRoIGlwdjQgYW5kL29yIHNnIGFycmF5czsgcmVxdWlyZWQ7IGRlZmluZXMgYWxsb3dlZCBpbmJvdW5kIGNvbm5lY3Rpb25zXG4gICAqICAgKiovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJbmdyZXNzOiB7IGlwdjQ/OiBzdHJpbmdbXTsgc2c/OiBzdHJpbmdbXSB9O1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBub2RlIHR5cGUgc3BlY2lmaWNhdGlvbiBkZXRlcm1pbmluZyBjb21wdXRlIGFuZCBzdG9yYWdlIGNhcGFjaXR5IGZvciBjbHVzdGVyIG5vZGVzLiBDb250cm9scyB0aGUgdW5kZXJseWluZyBFQzIgaW5zdGFuY2UgdHlwZSBhbmQgYWZmZWN0cyBwZXJmb3JtYW5jZSwgc3RvcmFnZSwgYW5kIGNvc3QgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhIHdhcmVob3VzZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IENvc3QgbWFuYWdlbWVudDsgV29ya2xvYWQtc3BlY2lmaWMgc2l6aW5nXG4gICAqXG4gICAqIEFXUzogQW1hem9uIFJlZHNoaWZ0IG5vZGUgdHlwZSBmb3IgY29tcHV0ZSBhbmQgc3RvcmFnZSBjYXBhY2l0eSBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgUmVkc2hpZnQgbm9kZSB0eXBlOyByZXF1aXJlZDsgZGV0ZXJtaW5lcyBjbHVzdGVyIGNvbXB1dGUgYW5kIHN0b3JhZ2UgY2FwYWNpdHlcbiAgICoqL1xuICByZWFkb25seSBub2RlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBSZWRzaGlmdCBjbHVzdGVyIGRldGVybWluaW5nIHRvdGFsIGNvbXB1dGUgY2FwYWNpdHkgYW5kIHBhcmFsbGVsIHByb2Nlc3NpbmcgY2FwYWJpbGl0eS4gQ29udHJvbHMgY2x1c3RlciBzaXplIGFuZCBhZmZlY3RzIHBlcmZvcm1hbmNlLCBjb3N0LCBhbmQgZGF0YSBkaXN0cmlidXRpb24gY2hhcmFjdGVyaXN0aWNzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgc2l6aW5nOyBQZXJmb3JtYW5jZSBzY2FsaW5nOyBDb3N0IG9wdGltaXphdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIG5vZGUgY291bnQgZm9yIGNvbXB1dGUgY2FwYWNpdHkgYW5kIHBhcmFsbGVsIHByb2Nlc3NpbmdcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyOyByZXF1aXJlZDsgZGV0ZXJtaW5lcyBjbHVzdGVyIHNpemUgYW5kIHByb2Nlc3NpbmcgY2FwYWNpdHlcbiAgICoqL1xuICByZWFkb25seSBudW1iZXJPZk5vZGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIGZsYWcgZW5hYmxpbmcgYXVkaXQgbG9nZ2luZyB0byBTMyBmb3IgY29tcGxpYW5jZSBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZy4gV2hlbiBlbmFibGVkLCBjcmVhdGVzIGRlZGljYXRlZCBTMyBidWNrZXQgZm9yIFJlZHNoaWZ0IGF1ZGl0IGxvZ3Mgd2l0aCBTU0UtUzMgZW5jcnlwdGlvbiBhcyByZXF1aXJlZCBieSBSZWRzaGlmdCBhdWRpdCBsb2dnaW5nIGNvbnN0cmFpbnRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENvbXBsaWFuY2UgYXVkaXRpbmc7IFNlY3VyaXR5IG1vbml0b3Jpbmc7IEF1ZGl0IHRyYWlsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgYXVkaXQgbG9nZ2luZyB0byBTMyBmb3IgY29tcGxpYW5jZSBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBCb29sZWFuIHZhbHVlOyByZXF1aXJlZDsgY3JlYXRlcyBTU0UtUzMgZW5jcnlwdGVkIGF1ZGl0IGJ1Y2tldCB3aGVuIGVuYWJsZWRcbiAgICoqL1xuICByZWFkb25seSBlbmFibGVBdWRpdExvZ2dpbmdUb1MzOiBib29sZWFuO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBjbHVzdGVyIHBvcnQgbnVtYmVyIGZvciBjbGllbnQgY29ubmVjdGlvbnMgZW5hYmxpbmcgY3VzdG9tIHBvcnQgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayBzZWN1cml0eS4gRGVmaW5lcyB0aGUgVENQIHBvcnQgb24gd2hpY2ggdGhlIFJlZHNoaWZ0IGNsdXN0ZXIgYWNjZXB0cyBjbGllbnQgY29ubmVjdGlvbnMsIHN1cHBvcnRpbmcgY3VzdG9tIG5ldHdvcmtpbmcgcmVxdWlyZW1lbnRzIGFuZCBzZWN1cml0eSBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gcG9ydCBjb25maWd1cmF0aW9uOyBOZXR3b3JrIHNlY3VyaXR5OyBDbGllbnQgY29ubmVjdGlvbiBtYW5hZ2VtZW50OyBQb3J0IHN0YW5kYXJkaXphdGlvblxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgY2xpZW50IGNvbm5lY3Rpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHBvcnQgbnVtYmVyIGlmIHNwZWNpZmllZDsgZGVmYXVsdHMgdG8gNTQzOTA7IG11c3QgYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHNlY3VyaXR5IGdyb3Vwc1xuICAgKiovXG4gIHJlYWRvbmx5IGNsdXN0ZXJQb3J0PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBmbGFnIGNvbnRyb2xsaW5nIGNsdXN0ZXIgbm9kZSBjb25maWd1cmF0aW9uIGZvciBzaW5nbGUtbm9kZSBvciBtdWx0aS1ub2RlIGRlcGxveW1lbnQuIFdoZW4gdHJ1ZSwgY3JlYXRlcyBtdWx0aS1ub2RlIGNsdXN0ZXIgZm9yIGRpc3RyaWJ1dGVkIHByb2Nlc3Npbmc7IHdoZW4gZmFsc2UsIGNyZWF0ZXMgc2luZ2xlLW5vZGUgY2x1c3RlciBmb3IgZGV2ZWxvcG1lbnQgb3Igc21hbGwgd29ya2xvYWRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IENsdXN0ZXIgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbjsgRGV2ZWxvcG1lbnQgdnMgcHJvZHVjdGlvbiBkZXBsb3ltZW50OyBDb3N0IG9wdGltaXphdGlvbjsgUGVyZm9ybWFuY2Ugc2NhbGluZ1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVyIHR5cGUgY29uZmlndXJhdGlvbiBmb3Igc2luZ2xlLW5vZGUgb3IgbXVsdGktbm9kZSBkZXBsb3ltZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IEJvb2xlYW4gdmFsdWU7IGRldGVybWluZXMgY2x1c3RlciBhcmNoaXRlY3R1cmUgYW5kIG5vZGUgZGlzdHJpYnV0aW9uOyBhZmZlY3RzIHBlcmZvcm1hbmNlIGFuZCBjb3N0XG4gICAqKi9cbiAgcmVhZG9ubHkgbXVsdGlOb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgcHJlZmVycmVkIG1haW50ZW5hbmNlIHdpbmRvdyBmb3IgYXV0b21hdGVkIGNsdXN0ZXIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucy4gU3BlY2lmaWVzIHRoZSB3ZWVrbHkgdGltZSByYW5nZSBkdXJpbmcgd2hpY2ggc3lzdGVtIG1haW50ZW5hbmNlIGNhbiBvY2N1ciwgbWluaW1pemluZyBpbXBhY3Qgb24gYnVzaW5lc3Mgb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgcHJlZGljdGFibGUgbWFpbnRlbmFuY2Ugc2NoZWR1bGluZy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNYWludGVuYW5jZSBzY2hlZHVsaW5nOyBCdXNpbmVzcyBjb250aW51aXR5OyBPcGVyYXRpb25hbCBwbGFubmluZzsgRG93bnRpbWUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBwcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93IGZvciBhdXRvbWF0ZWQgc3lzdGVtIG1haW50ZW5hbmNlXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgdGltZSB3aW5kb3cgZm9ybWF0IChlLmcuLCAnU3VuOjIzOjQ1LU1vbjowMDoxNScpOyByZXF1aXJlZDsgZGVmaW5lcyBtYWludGVuYW5jZSBzY2hlZHVsaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgcGFyYW1ldGVyIGdyb3VwIHBhcmFtZXRlcnMgZm9yIGNsdXN0ZXIgY29uZmlndXJhdGlvbiBjdXN0b21pemF0aW9uIGVuYWJsaW5nIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgb3BlcmF0aW9uYWwgb3B0aW1pemF0aW9uLiBQcm92aWRlcyBhZGRpdGlvbmFsIGNsdXN0ZXIgcGFyYW1ldGVycyB3aGlsZSBzZWN1cml0eS1zZW5zaXRpdmUgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IG92ZXJyaWRkZW4gZm9yIGNvbXBsaWFuY2UgYW5kIHNlY3VyaXR5LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFBlcmZvcm1hbmNlIHR1bmluZzsgT3BlcmF0aW9uYWwgb3B0aW1pemF0aW9uOyBDdXN0b20gY2x1c3RlciBjb25maWd1cmF0aW9uOyBXb3JrbG9hZC1zcGVjaWZpYyBzZXR0aW5nc1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBwYXJhbWV0ZXIgZ3JvdXAgY29uZmlndXJhdGlvbiBmb3IgY2x1c3RlciBjdXN0b21pemF0aW9uIGFuZCBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBvYmplY3Qgd2l0aCBzdHJpbmcga2V5LXZhbHVlIHBhaXJzIGlmIHByb3ZpZGVkOyBzZWN1cml0eS1zZW5zaXRpdmUgdmFsdWVzIHdpbGwgYmUgb3ZlcnJpZGRlblxuICAgKiAgICoqL1xuICByZWFkb25seSBwYXJhbWV0ZXJHcm91cFBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIHdvcmtsb2FkIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBmb3IgcXVlcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBEZWZpbmVzIFdMTSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGZvciBtYW5hZ2luZyBxdWVyeSBxdWV1ZXMsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgY29uY3VycmVuY3kgZm9yIG9wdGltYWwgY2x1c3RlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBRdWVyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IFJlc291cmNlIGFsbG9jYXRpb247IFdvcmtsb2FkIG1hbmFnZW1lbnQ7IENvbmN1cnJlbmN5IGNvbnRyb2xcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgd29ya2xvYWQgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIGZvciBxdWVyeSBvcHRpbWl6YXRpb24gYW5kIHJlc291cmNlIGNvbnRyb2xcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBDb25maWd1cmF0aW9uRWxlbWVudCBvYmplY3RzIGlmIHByb3ZpZGVkOyBkZWZpbmVzIFdMTSBjb25maWd1cmF0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgd29ya2xvYWRNYW5hZ2VtZW50PzogQ29uZmlndXJhdGlvbkVsZW1lbnRbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYWRkaXRpb25hbCBLTVMga2V5IEFSTnMgZm9yIGNsdXN0ZXIgYnVja2V0IGVuY3J5cHRpb24gZW5hYmxpbmcgbXVsdGkta2V5IGVuY3J5cHRpb24gc2NlbmFyaW9zIGFuZCBjcm9zcy1hY2NvdW50IGFjY2Vzcy4gUHJvdmlkZXMgYWRkaXRpb25hbCBLTVMga2V5cyB0aGF0IGNhbiBiZSB1c2VkIGZvciB3cml0aW5nIHRvIHRoZSBjbHVzdGVyIGJ1Y2tldCBiZXlvbmQgdGhlIGRlZmF1bHQgY2x1c3RlciBlbmNyeXB0aW9uIGtleS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBNdWx0aS1rZXkgZW5jcnlwdGlvbjsgQ3Jvc3MtYWNjb3VudCBhY2Nlc3M7IEFkZGl0aW9uYWwgZW5jcnlwdGlvbiBrZXlzOyBGbGV4aWJsZSBrZXkgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFXUyBLTVMga2V5IEFSTnMgZm9yIGFkZGl0aW9uYWwgY2x1c3RlciBidWNrZXQgZW5jcnlwdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBLTVMga2V5IEFSTnMgaWYgcHJvdmlkZWQ7IGtleXMgbXVzdCBiZSBhY2Nlc3NpYmxlIGZvciBidWNrZXQgb3BlcmF0aW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxCdWNrZXRLbXNLZXlBcm5zPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIHNjaGVkdWxlZCBhY3Rpb25zIGZvciBhdXRvbWF0ZWQgY2x1c3RlciBwYXVzZSBhbmQgcmVzdW1lIG9wZXJhdGlvbnMgZW5hYmxpbmcgY29zdCBvcHRpbWl6YXRpb24gYW5kIG9wZXJhdGlvbmFsIGF1dG9tYXRpb24uIERlZmluZXMgc2NoZWR1bGVkIHBhdXNlIGFuZCByZXN1bWUgYWN0aW9ucyBmb3IgdGhlIGNsdXN0ZXIgdG8gb3B0aW1pemUgY29zdHMgZHVyaW5nIG5vbi1idXNpbmVzcyBob3Vycy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDb3N0IG9wdGltaXphdGlvbjsgQXV0b21hdGVkIG9wZXJhdGlvbnM7IFNjaGVkdWxlZCBtYWludGVuYW5jZTsgUmVzb3VyY2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBzY2hlZHVsZWQgYWN0aW9ucyBmb3IgYXV0b21hdGVkIGNsdXN0ZXIgcGF1c2UgYW5kIHJlc3VtZSBvcGVyYXRpb25zXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgU2NoZWR1bGVkQWN0aW9uUHJvcHMgaWYgcHJvdmlkZWQ7IGRlZmluZXMgYXV0b21hdGVkIGNsdXN0ZXIgb3BlcmF0aW9uc1xuICAgKiovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEFjdGlvbnM/OiBTY2hlZHVsZWRBY3Rpb25Qcm9wc1tdO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSB1c2VycyBmb3IgYXV0b21hdGVkIHVzZXIgY3JlYXRpb24gYW5kIGNyZWRlbnRpYWwgbWFuYWdlbWVudCBlbmFibGluZyBzZWN1cmUgdXNlciBwcm92aXNpb25pbmcgYW5kIHJvdGF0aW9uLiBDcmVhdGVzIGRhdGFiYXNlIHVzZXJzIGluIFJlZHNoaWZ0IHdpdGggYXV0b21hdGVkIGNyZWRlbnRpYWwgc3RvcmFnZSBhbmQgcm90YXRpb24gdGhyb3VnaCBTZWNyZXRzIE1hbmFnZXIgYW5kIFNTTS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBBdXRvbWF0ZWQgdXNlciBwcm92aXNpb25pbmc7IENyZWRlbnRpYWwgbWFuYWdlbWVudDsgU2VjdXJpdHkgYXV0b21hdGlvbjsgVXNlciBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBkYXRhYmFzZSB1c2VycyB3aXRoIFNlY3JldHMgTWFuYWdlciBhbmQgU1NNIGludGVncmF0aW9uIGZvciBjcmVkZW50aWFsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBEYXRhYmFzZVVzZXJzUHJvcHMgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgYXV0b21hdGVkIHVzZXIgYW5kIGNyZWRlbnRpYWwgbWFuYWdlbWVudFxuICAgKiAgICoqL1xuICByZWFkb25seSBkYXRhYmFzZVVzZXJzPzogRGF0YWJhc2VVc2Vyc1Byb3BzW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGZsYWcgY29udHJvbGxpbmcgZGF0YSB3YXJlaG91c2UgYnVja2V0IGNyZWF0aW9uIGZvciBjbHVzdGVyIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gV2hlbiBlbmFibGVkIChkZWZhdWx0KSwgY3JlYXRlcyBkZWRpY2F0ZWQgUzMgYnVja2V0IGZvciBkYXRhIHdhcmVob3VzZSBvcGVyYXRpb25zIGluY2x1ZGluZyBkYXRhIGxvYWRpbmcsIHVubG9hZGluZywgYW5kIGJhY2t1cCBzdG9yYWdlLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFN0b3JhZ2UgcmVzb3VyY2UgbWFuYWdlbWVudDsgRGF0YSBvcGVyYXRpb25zOyBCYWNrdXAgc3RvcmFnZTsgRVRMIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUzMgYnVja2V0IGNyZWF0aW9uIGZvciBSZWRzaGlmdCBkYXRhIHdhcmVob3VzZSBzdG9yYWdlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogVmFsaWRhdGlvbjogQm9vbGVhbiB2YWx1ZTsgZGVmYXVsdHMgdG8gdHJ1ZTsgY3JlYXRlcyBkZWRpY2F0ZWQgd2FyZWhvdXNlIGJ1Y2tldCB3aGVuIGVuYWJsZWRcbiAgICoqL1xuICByZWFkb25seSBjcmVhdGVXYXJlaG91c2VCdWNrZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCByZXRlbnRpb24gcGVyaW9kIGZvciBhdXRvbWF0ZWQgc25hcHNob3RzIGVuYWJsaW5nIGJhY2t1cCBtYW5hZ2VtZW50IGFuZCBkYXRhIHByb3RlY3Rpb24uIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRheXMgYXV0b21hdGVkIHNuYXBzaG90cyBhcmUgcmV0YWluZWQgZm9yIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkgYW5kIGRhdGEgcHJvdGVjdGlvbiByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQmFja3VwIG1hbmFnZW1lbnQ7IERhdGEgcHJvdGVjdGlvbjsgUG9pbnQtaW4tdGltZSByZWNvdmVyeTsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHNcbiAgICpcbiAgICogQVdTOiBBbWF6b24gUmVkc2hpZnQgYXV0b21hdGVkIHNuYXBzaG90IHJldGVudGlvbiBmb3IgYmFja3VwIG1hbmFnZW1lbnQgYW5kIGRhdGEgcHJvdGVjdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkOyBkZWZpbmVzIHNuYXBzaG90IHJldGVudGlvbiBwZXJpb2QgZm9yIGJhY2t1cCBtYW5hZ2VtZW50XG4gICAqKi9cbiAgcmVhZG9ubHkgYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBldmVudCBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgY2x1c3RlciBhbmQgc2NoZWR1bGVkIGFjdGlvbiBtb25pdG9yaW5nIGVuYWJsaW5nIG9wZXJhdGlvbmFsIGF3YXJlbmVzcyBhbmQgYWxlcnRpbmcuIENvbmZpZ3VyZXMgU05TIG5vdGlmaWNhdGlvbnMgZm9yIGNsdXN0ZXIgZXZlbnRzIGFuZCBzY2hlZHVsZWQgYWN0aW9uIHN0YXR1cyBmb3Igb3BlcmF0aW9uYWwgbW9uaXRvcmluZy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBPcGVyYXRpb25hbCBtb25pdG9yaW5nOyBFdmVudCBhbGVydGluZzsgQ2x1c3RlciBzdGF0dXMgdHJhY2tpbmc7IEF1dG9tYXRlZCBub3RpZmljYXRpb25zXG4gICAqXG4gICAqIEFXUzogQW1hem9uIFNOUyBub3RpZmljYXRpb25zIGZvciBSZWRzaGlmdCBjbHVzdGVyIGV2ZW50cyBhbmQgb3BlcmF0aW9uYWwgbW9uaXRvcmluZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIEV2ZW50Tm90aWZpY2F0aW9uc1Byb3BzIGlmIHByb3ZpZGVkOyBlbmFibGVzIGNsdXN0ZXIgZXZlbnQgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmdcbiAgICoqL1xuICByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgbmFtZSBmb3IgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGlvbiBlbmFibGluZyBjdXN0b20gZGF0YWJhc2UgbmFtaW5nIGFuZCBvcmdhbml6YXRpb24uIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGVkIGluIHRoZSBjbHVzdGVyLCBzdXBwb3J0aW5nIGN1c3RvbSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGRhdGFiYXNlIG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDdXN0b20gZGF0YWJhc2UgbmFtaW5nOyBEYXRhYmFzZSBvcmdhbml6YXRpb247IEluaXRpYWwgZGF0YWJhc2Ugc2V0dXA7IE5hbWluZyBjb252ZW50aW9uc1xuICAgKlxuICAgKiBBV1M6IEFtYXpvbiBSZWRzaGlmdCBpbml0aWFsIGRhdGFiYXNlIG5hbWUgZm9yIGNsdXN0ZXIgZGF0YWJhc2UgY3JlYXRpb24gYW5kIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIGRhdGFiYXNlIG5hbWUgaWYgc3BlY2lmaWVkOyBkZWZhdWx0cyB0byBcImRlZmF1bHRfZGJcIjsgdXNlZCBmb3IgaW5pdGlhbCBkYXRhYmFzZSBjcmVhdGlvblxuICAgKiovXG4gIHJlYWRvbmx5IGRiTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgc25hcHNob3QgaWRlbnRpZmllciBmb3IgY2x1c3RlciByZXN0b3JhdGlvbiBmcm9tIGV4aXN0aW5nIHNuYXBzaG90IGVuYWJsaW5nIGRpc2FzdGVyIHJlY292ZXJ5IGFuZCBkYXRhIG1pZ3JhdGlvbi4gU3BlY2lmaWVzIHRoZSBzbmFwc2hvdCBJRCB0byByZXN0b3JlIHRoZSBjbHVzdGVyIGZyb20sIHN1cHBvcnRpbmcgZGlzYXN0ZXIgcmVjb3Zlcnkgc2NlbmFyaW9zIGFuZCBkYXRhIG1pZ3JhdGlvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERpc2FzdGVyIHJlY292ZXJ5OyBEYXRhIG1pZ3JhdGlvbjsgQ2x1c3RlciByZXN0b3JhdGlvbjsgQmFja3VwIHJlY292ZXJ5XG4gICAqXG4gICAqIEFXUzogQW1hem9uIFJlZHNoaWZ0IHNuYXBzaG90IGlkZW50aWZpZXIgZm9yIGNsdXN0ZXIgcmVzdG9yYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgc25hcHNob3QgaWRlbnRpZmllciBpZiBzcGVjaWZpZWQ7IG9ubHkgcHJvdmlkZSB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90XG4gICAqKi9cbiAgcmVhZG9ubHkgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKipcbiAgICogb3duZXJBY2NvdW50IFJlZmVycyB0byBzbmFwc2hvdCBvd25lciBhY2NvdW50LiBBcHBsaWNhYmxlIGlmIHJlc3RvcmluZyB0aGUgY2x1c3RlciBmcm9tIHNuYXBzaG90IGFuZCBzbmFwc2hvdCBiZWxvbmdzIHRvIGFub3RoZXIgYWNjb3VudFxuICAgKiBPcHRpb25hbCAtIEJ5IGRlZmF1bHQsIHNuYXBzaG90cyBhcmUgc2VhcmNoZWQgd2l0aGluIGN1cnJlbnQgYWNjb3VudFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RPd25lckFjY291bnQ/OiBudW1iZXI7XG5cbiAgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyIGV4dGVuZHMgTWRhYUFwcENvbmZpZ1BhcnNlcjxEYXRhV2FyZWhvdXNlQ29uZmlnQ29udGVudHM+IHtcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluVXNlcm5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGZlZGVyYXRpb25zOiBGZWRlcmF0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVXNlcnM6IERhdGFiYXNlVXNlcnNQcm9wc1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YUFkbWluUm9sZVJlZnM6IE1kYWFSb2xlUmVmW107XG4gIHB1YmxpYyByZWFkb25seSB3YXJlaG91c2VCdWNrZXRVc2VyUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZVJlZnM/OiBNZGFhUm9sZVJlZltdO1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJQb3J0OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZHM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzM6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBudW1iZXJPZk5vZGVzOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBtdWx0aU5vZGU/OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJbmdyZXNzOiB7IGlwdjQ/OiBzdHJpbmdbXTsgc2c/OiBzdHJpbmdbXSB9O1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyR3JvdXBQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHB1YmxpYyByZWFkb25seSB3b3JrbG9hZE1hbmFnZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50W107XG4gIHB1YmxpYyByZWFkb25seSBhZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucz86IHN0cmluZ1tdO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRDbHVzdGVyUG9ydCA9IDU0MzkwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZWR1bGVkQWN0aW9uczogU2NoZWR1bGVkQWN0aW9uUHJvcHNbXTtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZVdhcmVob3VzZUJ1Y2tldD86IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBhdXRvbWF0ZWRTbmFwc2hvdFJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBldmVudE5vdGlmaWNhdGlvbnM/OiBFdmVudE5vdGlmaWNhdGlvbnNQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGRiTmFtZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90T3duZXJBY2NvdW50PzogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc3RhY2s6IFN0YWNrLCBwcm9wczogTWRhYUFwcENvbmZpZ1BhcnNlclByb3BzKSB7XG4gICAgc3VwZXIoc3RhY2ssIHByb3BzLCBjb25maWdTY2hlbWEgYXMgU2NoZW1hKTtcblxuICAgIHRoaXMuYWRtaW5Vc2VybmFtZSA9IHRoaXMuY29uZmlnQ29udGVudHMuYWRtaW5Vc2VybmFtZTtcbiAgICB0aGlzLmFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmFkbWluUGFzc3dvcmRSb3RhdGlvbkRheXM7XG4gICAgdGhpcy5mZWRlcmF0aW9ucyA9IHRoaXMuY29uZmlnQ29udGVudHMuZmVkZXJhdGlvbnMgPyB0aGlzLmNvbmZpZ0NvbnRlbnRzLmZlZGVyYXRpb25zIDogW107XG4gICAgdGhpcy5kYXRhQWRtaW5Sb2xlUmVmcyA9IHRoaXMuY29uZmlnQ29udGVudHMuZGF0YUFkbWluUm9sZXM7XG4gICAgdGhpcy53YXJlaG91c2VCdWNrZXRVc2VyUm9sZVJlZnMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLndhcmVob3VzZUJ1Y2tldFVzZXJSb2xlcztcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGVSZWZzID0gdGhpcy5jb25maWdDb250ZW50cy5leGVjdXRpb25Sb2xlcztcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5jb25maWdDb250ZW50cy52cGNJZDtcbiAgICB0aGlzLnN1Ym5ldElkcyA9IHRoaXMuY29uZmlnQ29udGVudHMuc3VibmV0SWRzO1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cEluZ3Jlc3MgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNlY3VyaXR5R3JvdXBJbmdyZXNzO1xuICAgIHRoaXMubm9kZVR5cGUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLm5vZGVUeXBlO1xuICAgIHRoaXMubnVtYmVyT2ZOb2RlcyA9IHRoaXMuY29uZmlnQ29udGVudHMubnVtYmVyT2ZOb2RlcztcbiAgICB0aGlzLmVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmVuYWJsZUF1ZGl0TG9nZ2luZ1RvUzM7XG4gICAgdGhpcy5jbHVzdGVyUG9ydCA9IHRoaXMuY29uZmlnQ29udGVudHMuY2x1c3RlclBvcnRcbiAgICAgID8gdGhpcy5jb25maWdDb250ZW50cy5jbHVzdGVyUG9ydFxuICAgICAgOiBEYXRhV2FyZWhvdXNlQ29uZmlnUGFyc2VyLmRlZmF1bHRDbHVzdGVyUG9ydDtcbiAgICB0aGlzLm11bHRpTm9kZSA9IHRoaXMuY29uZmlnQ29udGVudHMubXVsdGlOb2RlO1xuICAgIHRoaXMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3cgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93O1xuICAgIHRoaXMucGFyYW1ldGVyR3JvdXBQYXJhbXMgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnBhcmFtZXRlckdyb3VwUGFyYW1zXG4gICAgICA/IHRoaXMuY29uZmlnQ29udGVudHMucGFyYW1ldGVyR3JvdXBQYXJhbXNcbiAgICAgIDoge307XG4gICAgdGhpcy53b3JrbG9hZE1hbmFnZW1lbnQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLndvcmtsb2FkTWFuYWdlbWVudCA/IHRoaXMuY29uZmlnQ29udGVudHMud29ya2xvYWRNYW5hZ2VtZW50IDogW107XG4gICAgdGhpcy5hZGRpdGlvbmFsQnVja2V0S21zS2V5QXJucyA9IHRoaXMuY29uZmlnQ29udGVudHMuYWRkaXRpb25hbEJ1Y2tldEttc0tleUFybnM7XG4gICAgdGhpcy5zY2hlZHVsZWRBY3Rpb25zID0gdGhpcy5jb25maWdDb250ZW50cy5zY2hlZHVsZWRBY3Rpb25zID8gdGhpcy5jb25maWdDb250ZW50cy5zY2hlZHVsZWRBY3Rpb25zIDogW107XG4gICAgdGhpcy5kYXRhYmFzZVVzZXJzID0gdGhpcy5jb25maWdDb250ZW50cy5kYXRhYmFzZVVzZXJzID8gdGhpcy5jb25maWdDb250ZW50cy5kYXRhYmFzZVVzZXJzIDogW107XG4gICAgdGhpcy5jcmVhdGVXYXJlaG91c2VCdWNrZXQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmNyZWF0ZVdhcmVob3VzZUJ1Y2tldDtcbiAgICB0aGlzLmF1dG9tYXRlZFNuYXBzaG90UmV0ZW50aW9uRGF5cyA9IHRoaXMuY29uZmlnQ29udGVudHMuYXV0b21hdGVkU25hcHNob3RSZXRlbnRpb25EYXlzO1xuICAgIHRoaXMuZXZlbnROb3RpZmljYXRpb25zID0gdGhpcy5jb25maWdDb250ZW50cy5ldmVudE5vdGlmaWNhdGlvbnM7XG4gICAgdGhpcy5kYk5hbWUgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLmRiTmFtZTtcbiAgICB0aGlzLnNuYXBzaG90SWRlbnRpZmllciA9IHRoaXMuY29uZmlnQ29udGVudHMuc25hcHNob3RJZGVudGlmaWVyO1xuICAgIHRoaXMuc25hcHNob3RPd25lckFjY291bnQgPSB0aGlzLmNvbmZpZ0NvbnRlbnRzLnNuYXBzaG90T3duZXJBY2NvdW50O1xuICAgIHRoaXMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZCA9IHRoaXMuY29uZmlnQ29udGVudHMucmVkc2hpZnRNYW5hZ2VNYXN0ZXJQYXNzd29yZDtcbiAgfVxufVxuIl19
|
|
47
|
+
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=
|