@robhan-cdk-lib/aws_grafana 0.0.402 → 0.1.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/lib/workspace.js CHANGED
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Workspace = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const aws_grafana_1 = require("aws-cdk-lib/aws-grafana");
6
- const workspace_base_1 = require("./validation/workspace-base");
7
- const workspace_base_2 = require("./workspace-base");
6
+ const workspace_base_1 = require("./workspace-base");
8
7
  ;
9
8
  const IS_WORKSPACE = Symbol.for('@robhan-cdk-lib/aws_grafana.Workspace');
10
9
  /**
@@ -12,13 +11,60 @@ const IS_WORKSPACE = Symbol.for('@robhan-cdk-lib/aws_grafana.Workspace');
12
11
  * analyze your metrics, logs, and traces. You don't have to build, package, or deploy any hardware
13
12
  * to run the Grafana server.
14
13
  */
15
- class Workspace extends workspace_base_2.WorkspaceBase {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.0.402" };
14
+ class Workspace extends workspace_base_1.WorkspaceBase {
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.1.0" };
17
16
  static isWorkspace(x) {
18
17
  return IS_WORKSPACE in x;
19
18
  }
19
+ /**
20
+ * Import an existing workspace from its ARN.
21
+ *
22
+ * A single ARN is the most common handle for referencing an existing workspace. The imported
23
+ * workspace only exposes identity information (`workspaceArn` and `workspaceId`); the create-time
24
+ * configuration properties are not available on an ARN import. Use `fromWorkspaceAttributes` when
25
+ * those properties are required.
26
+ *
27
+ * @param scope The parent construct
28
+ * @param id The construct id
29
+ * @param workspaceArn The ARN of the existing workspace
30
+ */
31
+ static fromWorkspaceArn(scope, id, workspaceArn) {
32
+ class Import extends workspace_base_1.WorkspaceBase {
33
+ accountAccessType;
34
+ authenticationProviders;
35
+ clientToken;
36
+ dataSources;
37
+ description;
38
+ name;
39
+ networkAccessControl;
40
+ notificationDestinations;
41
+ organizationalUnits;
42
+ organizationRoleName;
43
+ permissionType;
44
+ pluginAdminEnabled;
45
+ role;
46
+ samlConfiguration;
47
+ stackSetName;
48
+ vpcConfiguration;
49
+ creationTimestamp;
50
+ endpoint;
51
+ grafanaVersion;
52
+ modificationTimestamp;
53
+ samlConfigurationStatus;
54
+ ssoClientId;
55
+ status;
56
+ workspaceArn;
57
+ workspaceId;
58
+ constructor() {
59
+ super(scope, id);
60
+ this.workspaceArn = workspaceArn;
61
+ this.workspaceId = this.getWorkspaceId(workspaceArn);
62
+ }
63
+ }
64
+ return new Import();
65
+ }
20
66
  static fromWorkspaceAttributes(scope, id, attrs) {
21
- class Import extends workspace_base_2.WorkspaceBase {
67
+ class Import extends workspace_base_1.WorkspaceBase {
22
68
  accountAccessType;
23
69
  authenticationProviders;
24
70
  clientToken;
@@ -35,6 +81,13 @@ class Workspace extends workspace_base_2.WorkspaceBase {
35
81
  samlConfiguration;
36
82
  stackSetName;
37
83
  vpcConfiguration;
84
+ creationTimestamp;
85
+ endpoint;
86
+ grafanaVersion;
87
+ modificationTimestamp;
88
+ samlConfigurationStatus;
89
+ ssoClientId;
90
+ status;
38
91
  workspaceArn;
39
92
  workspaceId;
40
93
  constructor(attributes) {
@@ -61,81 +114,20 @@ class Workspace extends workspace_base_2.WorkspaceBase {
61
114
  }
62
115
  return new Import(attrs);
63
116
  }
64
- /**
65
- * Validates all workspace properties.
66
- *
67
- * @param props - The workspace properties to validate
68
- * @returns An array of error messages if validation fails, or an empty array if valid
69
- *
70
- * This method aggregates validation results from all individual property validators.
71
- * It throws an error if props is not an object.
72
- */
73
- static validateProps(props) {
74
- const errors = [];
75
- if (!props || typeof props !== 'object') {
76
- throw new Error('Props is not an object');
77
- }
78
- const workspaceProps = props;
79
- if (workspaceProps.clientToken !== undefined) {
80
- const clientTokenErrors = (0, workspace_base_1.validateClientToken)(workspaceProps.clientToken);
81
- if (clientTokenErrors.length > 0) {
82
- errors.push(...clientTokenErrors.map((err) => `clientToken: ${err}`));
83
- }
84
- }
85
- if (workspaceProps.description !== undefined) {
86
- const descriptionErrors = (0, workspace_base_1.validateDescription)(workspaceProps.description);
87
- if (descriptionErrors.length > 0) {
88
- errors.push(...descriptionErrors.map((err) => `description: ${err}`));
89
- }
90
- }
91
- if (workspaceProps.grafanaVersion !== undefined) {
92
- const grafanaVersionErrors = (0, workspace_base_1.validateGrafanaVersion)(workspaceProps.grafanaVersion);
93
- if (grafanaVersionErrors.length > 0) {
94
- errors.push(...grafanaVersionErrors.map((err) => `grafanaVersion: ${err}`));
95
- }
96
- }
97
- if (workspaceProps.name !== undefined) {
98
- const nameErrors = (0, workspace_base_1.validateName)(workspaceProps.name);
99
- if (nameErrors.length > 0) {
100
- errors.push(...nameErrors.map((err) => `name: ${err}`));
101
- }
102
- }
103
- if (workspaceProps.networkAccessControl !== undefined) {
104
- const networkAccessControlErrors = (0, workspace_base_1.validateNetworkAccessControl)(workspaceProps.networkAccessControl);
105
- if (networkAccessControlErrors.length > 0) {
106
- errors.push(...networkAccessControlErrors.map((err) => `networkAccessControl: ${err}`));
107
- }
108
- }
109
- if (workspaceProps.organizationRoleName !== undefined) {
110
- const organizationRoleNameErrors = (0, workspace_base_1.validateOrganizationRoleName)(workspaceProps.organizationRoleName);
111
- if (organizationRoleNameErrors.length > 0) {
112
- errors.push(...organizationRoleNameErrors.map((err) => `organizationRoleName: ${err}`));
113
- }
114
- }
115
- if (workspaceProps.samlConfiguration !== undefined) {
116
- const samlConfigurationErrors = (0, workspace_base_1.validateSamlConfiguration)(workspaceProps.samlConfiguration);
117
- if (samlConfigurationErrors.length > 0) {
118
- errors.push(...samlConfigurationErrors.map((err) => `samlConfiguration: ${err}`));
119
- }
120
- }
121
- if (workspaceProps.vpcConfiguration !== undefined) {
122
- const vpcConfigurationErrors = (0, workspace_base_1.validateVpcConfiguration)(workspaceProps.vpcConfiguration);
123
- if (vpcConfigurationErrors.length > 0) {
124
- errors.push(...vpcConfigurationErrors.map((err) => `vpcConfiguration: ${err}`));
125
- }
126
- }
127
- return errors;
128
- }
129
117
  /**
130
118
  * Specifies whether the workspace can access AWS resources in this AWS account only, or whether
131
119
  * it can also access AWS resources in other accounts in the same organization. If this is
132
120
  * ORGANIZATION, the OrganizationalUnits parameter specifies which organizational units the
133
121
  * workspace can access.
122
+ *
123
+ * Always populated for a workspace created through this construct (it is a required prop).
134
124
  */
135
125
  accountAccessType;
136
126
  /**
137
127
  * Specifies whether this workspace uses SAML 2.0, AWS IAM Identity Center, or both to
138
128
  * authenticate users for using the Grafana console within a workspace.
129
+ *
130
+ * Always populated for a workspace created through this construct (it is a required prop).
139
131
  */
140
132
  authenticationProviders;
141
133
  /**
@@ -186,6 +178,8 @@ class Workspace extends workspace_base_2.WorkspaceBase {
186
178
  * If you are working with a workspace in a member account of an organization and that account is
187
179
  * not a delegated administrator account, and you want the workspace to access data sources in
188
180
  * other AWS accounts in the organization, this parameter must be set to CUSTOMER_MANAGED.
181
+ *
182
+ * Always populated for a workspace created through this construct (it is a required prop).
189
183
  */
190
184
  permissionType;
191
185
  /**
@@ -222,35 +216,57 @@ class Workspace extends workspace_base_2.WorkspaceBase {
222
216
  workspace;
223
217
  /**
224
218
  * The date that the workspace was created.
219
+ *
220
+ * @attribute
225
221
  */
226
222
  creationTimestamp;
227
223
  /**
228
224
  * The URL that users can use to access the Grafana console in the workspace.
225
+ *
226
+ * @attribute
229
227
  */
230
228
  endpoint;
231
229
  /**
232
230
  * Specifies the version of Grafana supported by this workspace.
231
+ *
232
+ * @attribute
233
233
  */
234
234
  grafanaVersion;
235
235
  /**
236
236
  * The unique ID of this workspace.
237
+ *
238
+ * @attribute
237
239
  */
238
240
  workspaceId;
239
241
  /**
240
242
  * The most recent date that the workspace was modified.
243
+ *
244
+ * @attribute
241
245
  */
242
246
  modificationTimestamp;
243
247
  /**
244
248
  * Specifies whether the workspace's SAML configuration is complete.
249
+ *
250
+ * This is a deploy-time CloudFormation attribute resolved as an unresolved token at synth time,
251
+ * so it is typed as `string`. See the `SamlConfigurationStatuses` enum for the possible values.
252
+ *
253
+ * @attribute
245
254
  */
246
255
  samlConfigurationStatus;
247
256
  /**
248
257
  * The ID of the IAM Identity Center-managed application that is created by Amazon Managed
249
258
  * Grafana.
259
+ *
260
+ * @attribute
250
261
  */
251
262
  ssoClientId;
252
263
  /**
253
264
  * The current status of the workspace.
265
+ *
266
+ * This is a deploy-time CloudFormation attribute resolved as an unresolved token at synth time,
267
+ * so it is typed as `string`. See the `Status` enum for the possible values.
268
+ *
269
+ * @attribute
254
270
  */
255
271
  status;
256
272
  /**
@@ -260,14 +276,6 @@ class Workspace extends workspace_base_2.WorkspaceBase {
260
276
  constructor(scope, id, props) {
261
277
  super(scope, id);
262
278
  Object.defineProperty(this, IS_WORKSPACE, { value: true });
263
- const errors = Workspace.validateProps(props);
264
- if (props.accountAccessType === workspace_base_2.AccountAccessType.CURRENT_ACCOUNT &&
265
- !props.role) {
266
- errors.push('Role must be provided when accountAccessType is CURRENT_ACCOUNT');
267
- }
268
- if (errors.length > 0) {
269
- throw new Error(`Invalid props:\n${errors.join('\n')}`);
270
- }
271
279
  this.accountAccessType = props.accountAccessType;
272
280
  this.authenticationProviders = props.authenticationProviders;
273
281
  this.clientToken = props.clientToken;
@@ -284,7 +292,8 @@ class Workspace extends workspace_base_2.WorkspaceBase {
284
292
  this.samlConfiguration = props.samlConfiguration;
285
293
  this.stackSetName = props.stackSetName;
286
294
  this.vpcConfiguration = props.vpcConfiguration;
287
- let cfnWorkspaceProps = {
295
+ const samlConfiguration = props.samlConfiguration;
296
+ const cfnWorkspaceProps = {
288
297
  accountAccessType: props.accountAccessType,
289
298
  authenticationProviders: props.authenticationProviders,
290
299
  clientToken: props.clientToken,
@@ -292,14 +301,38 @@ class Workspace extends workspace_base_2.WorkspaceBase {
292
301
  description: props.description,
293
302
  grafanaVersion: props.grafanaVersion,
294
303
  name: props.name,
304
+ networkAccessControl: props.networkAccessControl
305
+ ? {
306
+ // Map the strongly-typed prefix lists / VPC endpoints to their ids. `?.map` preserves
307
+ // the three meaningful states: absent (undefined), explicitly empty (`[]` = "allow
308
+ // none"), and populated. An empty array is intentionally NOT collapsed to undefined so
309
+ // the "deny all traffic" semantics survive to the synthesized template.
310
+ prefixListIds: props.networkAccessControl.prefixLists?.map((prefixList) => prefixList.prefixListId),
311
+ vpceIds: props.networkAccessControl.vpcEndpoints?.map((vpcEndpoint) => vpcEndpoint.vpcEndpointId),
312
+ }
313
+ : undefined,
295
314
  notificationDestinations: props.notificationDestinations,
296
315
  organizationalUnits: props.organizationalUnits,
297
316
  organizationRoleName: props.organizationRoleName,
298
317
  permissionType: props.permissionType,
299
318
  pluginAdminEnabled: props.pluginAdminEnabled,
300
319
  roleArn: props.role?.roleArn,
301
- samlConfiguration: props.samlConfiguration,
320
+ samlConfiguration: samlConfiguration
321
+ ? {
322
+ allowedOrganizations: samlConfiguration.allowedOrganizations,
323
+ assertionAttributes: samlConfiguration.assertionAttributes,
324
+ idpMetadata: samlConfiguration.idpMetadata,
325
+ loginValidityDuration: samlConfiguration.loginValidityDuration,
326
+ roleValues: samlConfiguration.roleValues,
327
+ }
328
+ : undefined,
302
329
  stackSetName: props.stackSetName,
330
+ // The L1 CfnWorkspace (aws-cdk-lib 2.266+) is `ITaggableV2` and accepts tags natively as a
331
+ // list of { key, value }. Seed it from the optional `props.tags` map; tags applied later via
332
+ // `Tags.of(workspace).add(...)` aspects merge into the same list at synth time.
333
+ tags: props.tags
334
+ ? Object.entries(props.tags).map(([key, value]) => ({ key, value }))
335
+ : undefined,
303
336
  vpcConfiguration: props.vpcConfiguration
304
337
  ? {
305
338
  securityGroupIds: props.vpcConfiguration.securityGroups.map((sg) => sg.securityGroupId),
@@ -314,12 +347,11 @@ class Workspace extends workspace_base_2.WorkspaceBase {
314
347
  this.grafanaVersion = this.workspace.attrGrafanaVersion;
315
348
  this.workspaceId = this.workspace.attrId;
316
349
  this.modificationTimestamp = this.workspace.attrModificationTimestamp;
317
- this.samlConfigurationStatus = this.workspace
318
- .attrSamlConfigurationStatus;
350
+ this.samlConfigurationStatus = this.workspace.attrSamlConfigurationStatus;
319
351
  this.ssoClientId = this.workspace.attrSsoClientId;
320
352
  this.status = this.workspace.attrStatus;
321
353
  this.workspaceArn = this.getWorkspaceArn(this.workspaceId);
322
354
  }
323
355
  }
324
356
  exports.Workspace = Workspace;
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseURBQTBFO0FBRzFFLGdFQUE4TztBQUM5TyxxREFZMEI7QUF3UXpCLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7QUFFekU7Ozs7R0FJRztBQUNILE1BQWEsU0FBVSxTQUFRLDhCQUFhOztJQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQU07UUFDOUIsT0FBTyxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDNUYsTUFBTSxNQUFPLFNBQVEsOEJBQWE7WUFDaEIsaUJBQWlCLENBQW9CO1lBQ3JDLHVCQUF1QixDQUE0QjtZQUNuRCxXQUFXLENBQVU7WUFDckIsV0FBVyxDQUFZO1lBQ3ZCLFdBQVcsQ0FBVTtZQUNyQixJQUFJLENBQVU7WUFDZCxvQkFBb0IsQ0FBd0I7WUFDNUMsd0JBQXdCLENBQThCO1lBQ3RELG1CQUFtQixDQUFZO1lBQy9CLG9CQUFvQixDQUFVO1lBQzlCLGNBQWMsQ0FBa0I7WUFDaEMsa0JBQWtCLENBQVc7WUFDN0IsSUFBSSxDQUFTO1lBQ2IsaUJBQWlCLENBQXFCO1lBQ3RDLFlBQVksQ0FBVTtZQUN0QixnQkFBZ0IsQ0FBb0I7WUFDcEMsWUFBWSxDQUFTO1lBQ3JCLFdBQVcsQ0FBUztZQUVwQyxZQUFtQixVQUErQjtnQkFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbEUsSUFBSSxD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QUFJLENBQUMsU0FBUyxHQUFHLElBQUksMEJBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDO1FBQ3RFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsU0FBUzthQUMxQywyQkFBd0QsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFvQixDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7QUF4WUgsOEJBeVlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuV29ya3NwYWNlLCBDZm5Xb3Jrc3BhY2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ncmFmYW5hJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHZhbGlkYXRlQ2xpZW50VG9rZW4sIHZhbGlkYXRlRGVzY3JpcHRpb24sIHZhbGlkYXRlR3JhZmFuYVZlcnNpb24sIHZhbGlkYXRlTmFtZSwgdmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbCwgdmFsaWRhdGVPcmdhbml6YXRpb25Sb2xlTmFtZSwgdmFsaWRhdGVTYW1sQ29uZmlndXJhdGlvbiwgdmFsaWRhdGVWcGNDb25maWd1cmF0aW9uIH0gZnJvbSAnLi92YWxpZGF0aW9uL3dvcmtzcGFjZS1iYXNlJztcbmltcG9ydCB7XG4gIEFjY291bnRBY2Nlc3NUeXBlLFxuICBBdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgSVdvcmtzcGFjZSxcbiAgTmV0d29ya0FjY2Vzc0NvbnRyb2wsXG4gIE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyxcbiAgUGVybWlzc2lvblR5cGVzLFxuICBTYW1sQ29uZmlndXJhdGlvbixcbiAgU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcyxcbiAgU3RhdHVzLFxuICBWcGNDb25maWd1cmF0aW9uLFxuICBXb3Jrc3BhY2VCYXNlLFxufSBmcm9tICcuL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0b1xuICAgKiBhdXRoZW50aWNhdGUgdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgY2FzZS1zZW5zaXRpdmUsIHVzZXItcHJvdmlkZWQgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBNdXN0IGJlIDEtNjQgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBBV1MgZGF0YSBzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gaGF2ZSBJQU0gcm9sZXMgYW5kIHBlcm1pc3Npb25zXG4gICAqIGNyZWF0ZWQgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byByZWFkIGRhdGEgZnJvbSB0aGVzZSBzb3VyY2VzLlxuICAgKiBUaGlzIGxpc3QgaXMgb25seSB1c2VkIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBV1MgY29uc29sZSwgYW5kIHRoZVxuICAgKiBwZXJtaXNzaW9uVHlwZSBpcyBTRVJWSUNFX01BTkFHRUQuXG4gICAqL1xuICByZWFkb25seSBkYXRhU291cmNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlci1kZWZpbmVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgR3JhZmFuYSB0byBzdXBwb3J0IGluIHRoZSB3b3Jrc3BhY2UuIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvblxuICAgKiBvbiBjcmVhdGUgKGZvciBleGFtcGxlLCA5LjQpLCBvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB3b3Jrc3BhY2Ugb24gdXBkYXRlLlxuICAgKiBDYW4gb25seSBiZSB1c2VkIHRvIHVwZ3JhZGUgKGZvciBleGFtcGxlLCBmcm9tIDguNCB0byA5LjQpLCBub3QgZG93bmdyYWRlIChmb3IgZXhhbXBsZSwgZnJvbVxuICAgKiA5LjQgdG8gOC40KS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBncmFmYW5hVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cyxcbiAgICogdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICpcbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAgICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gICAqIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyXG4gICAqIGl0IGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICAgKiBPUkdBTklaQVRJT04sIHRoZSBPcmdhbml6YXRpb25hbFVuaXRzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhlXG4gICAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRBY2Nlc3NUeXBlOiBBY2NvdW50QWNjZXNzVHlwZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyB3b3Jrc3BhY2UgdXNlcyBTQU1MIDIuMCwgQVdTIElBTSBJZGVudGl0eSBDZW50ZXIsIG9yIGJvdGggdG9cbiAgICogYXV0aGVudGljYXRlIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyczogQXV0aGVudGljYXRpb25Qcm92aWRlcnNbXTtcblxuICAvKipcbiAgICogQSB1bmlxdWUsIGNhc2Utc2Vuc2l0aXZlLCB1c2VyLXByb3ZpZGVkIGlkZW50aWZpZXIgdG8gZW5zdXJlIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogTXVzdCBiZSAxLTY0IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cyxcbiAgICogdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICpcbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAgICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gICAqIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJuIG9mIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG59O1xuXG5jb25zdCBJU19XT1JLU1BBQ0UgPSBTeW1ib2wuZm9yKCdAcm9iaGFuLWNkay1saWIvYXdzX2dyYWZhbmEuV29ya3NwYWNlJyk7XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgd29ya3NwYWNlLiBJbiBhIHdvcmtzcGFjZSwgeW91IGNhbiBjcmVhdGUgR3JhZmFuYSBkYXNoYm9hcmRzIGFuZCB2aXN1YWxpemF0aW9ucyB0b1xuICogYW5hbHl6ZSB5b3VyIG1ldHJpY3MsIGxvZ3MsIGFuZCB0cmFjZXMuIFlvdSBkb24ndCBoYXZlIHRvIGJ1aWxkLCBwYWNrYWdlLCBvciBkZXBsb3kgYW55IGhhcmR3YXJlXG4gKiB0byBydW4gdGhlIEdyYWZhbmEgc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgV29ya3NwYWNlIGV4dGVuZHMgV29ya3NwYWNlQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgaXNXb3Jrc3BhY2UoeDogYW55KTogeCBpcyBXb3Jrc3BhY2Uge1xuICAgIHJldHVybiBJU19XT1JLU1BBQ0UgaW4geDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVdvcmtzcGFjZUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFdvcmtzcGFjZUF0dHJpYnV0ZXMpOiBJV29ya3NwYWNlIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBXb3Jrc3BhY2VCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlPzogSVJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAgICAgcHVibGljIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXM6IFdvcmtzcGFjZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gYXR0cmlidXRlcy5hY2NvdW50QWNjZXNzVHlwZTtcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IGF0dHJpYnV0ZXMuYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XG4gICAgICAgIHRoaXMuY2xpZW50VG9rZW4gPSBhdHRyaWJ1dGVzLmNsaWVudFRva2VuO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VzID0gYXR0cmlidXRlcy5kYXRhU291cmNlcztcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGF0dHJpYnV0ZXMuZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZTtcbiAgICAgICAgdGhpcy5uZXR3b3JrQWNjZXNzQ29udHJvbCA9IGF0dHJpYnV0ZXMubmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zID0gYXR0cmlidXRlcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnM7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0cyA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uYWxVbml0cztcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25Sb2xlTmFtZSA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uUm9sZU5hbWU7XG4gICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUgPSBhdHRyaWJ1dGVzLnBlcm1pc3Npb25UeXBlO1xuICAgICAgICB0aGlzLnBsdWdpbkFkbWluRW5hYmxlZCA9IGF0dHJpYnV0ZXMucGx1Z2luQWRtaW5FbmFibGVkO1xuICAgICAgICB0aGlzLnJvbGUgPSBhdHRyaWJ1dGVzLnJvbGU7XG4gICAgICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnNhbWxDb25maWd1cmF0aW9uO1xuICAgICAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IGF0dHJpYnV0ZXMuc3RhY2tTZXROYW1lO1xuICAgICAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnZwY0NvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMud29ya3NwYWNlQXJuID0gYXR0cmlidXRlcy53b3Jrc3BhY2VBcm47XG4gICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLmdldFdvcmtzcGFjZUlkKGF0dHJpYnV0ZXMud29ya3NwYWNlQXJuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChhdHRycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCB3b3Jrc3BhY2UgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHdvcmtzcGFjZSBwcm9wZXJ0aWVzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFnZ3JlZ2F0ZXMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gYWxsIGluZGl2aWR1YWwgcHJvcGVydHkgdmFsaWRhdG9ycy5cbiAgICogSXQgdGhyb3dzIGFuIGVycm9yIGlmIHByb3BzIGlzIG5vdCBhbiBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVByb3BzKHByb3BzOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICghcHJvcHMgfHwgdHlwZW9mIHByb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wcyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHdvcmtzcGFjZVByb3BzID0gcHJvcHMgYXMgV29ya3NwYWNlUHJvcHM7XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuY2xpZW50VG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY2xpZW50VG9rZW5FcnJvcnMgPSB2YWxpZGF0ZUNsaWVudFRva2VuKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5jbGllbnRUb2tlbixcbiAgICAgICk7XG4gICAgICBpZiAoY2xpZW50VG9rZW5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5jbGllbnRUb2tlbkVycm9ycy5tYXAoKGVycikgPT4gYGNsaWVudFRva2VuOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uRXJyb3JzID0gdmFsaWRhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICApO1xuICAgICAgaWYgKGRlc2NyaXB0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZGVzY3JpcHRpb25FcnJvcnMubWFwKChlcnIpID0+IGBkZXNjcmlwdGlvbjogJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5ncmFmYW5hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBncmFmYW5hVmVyc2lvbkVycm9ycyA9IHZhbGlkYXRlR3JhZmFuYVZlcnNpb24oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLmdyYWZhbmFWZXJzaW9uLFxuICAgICAgKTtcbiAgICAgIGlmIChncmFmYW5hVmVyc2lvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLmdyYWZhbmFWZXJzaW9uRXJyb3JzLm1hcCgoZXJyKSA9PiBgZ3JhZmFuYVZlcnNpb246ICR7ZXJyfWApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5hbWVFcnJvcnMgPSB2YWxpZGF0ZU5hbWUod29ya3NwYWNlUHJvcHMubmFtZSk7XG4gICAgICBpZiAobmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLm5hbWVFcnJvcnMubWFwKChlcnIpID0+IGBuYW1lOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzID0gdmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbChcbiAgICAgICAgd29ya3NwYWNlUHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wsXG4gICAgICApO1xuICAgICAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4ubmV0d29ya0FjY2Vzc0NvbnRyb2xFcnJvcnMubWFwKFxuICAgICAgICAgICAgKGVycikgPT4gYG5ldHdvcmtBY2Nlc3NDb250cm9sOiAke2Vycn1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzID0gdmFsaWRhdGVPcmdhbml6YXRpb25Sb2xlTmFtZShcbiAgICAgICAgd29ya3NwYWNlUHJvcHMub3JnYW5pemF0aW9uUm9sZU5hbWUsXG4gICAgICApO1xuICAgICAgaWYgKG9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4ub3JnYW5pemF0aW9uUm9sZU5hbWVFcnJvcnMubWFwKFxuICAgICAgICAgICAgKGVycikgPT4gYG9yZ2FuaXphdGlvblJvbGVOYW1lOiAke2Vycn1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLnNhbWxDb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNhbWxDb25maWd1cmF0aW9uRXJyb3JzID0gdmFsaWRhdGVTYW1sQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICApO1xuICAgICAgaWYgKHNhbWxDb25maWd1cmF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGBzYW1sQ29uZmlndXJhdGlvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLnZwY0NvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdnBjQ29uZmlndXJhdGlvbkVycm9ycyA9IHZhbGlkYXRlVnBjQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMudnBjQ29uZmlndXJhdGlvbixcbiAgICAgICk7XG4gICAgICBpZiAodnBjQ29uZmlndXJhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLnZwY0NvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGB2cGNDb25maWd1cmF0aW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgY2FuIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIHRoaXMgQVdTIGFjY291bnQgb25seSwgb3Igd2hldGhlclxuICAgKiBpdCBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAgICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICAgKiB3b3Jrc3BhY2UgY2FuIGFjY2Vzcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICpcbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgcmVzb3VyY2VzIHRocm91Z2ggT3JnYW5pemF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IENmbldvcmtzcGFjZTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdGhhdCB1c2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgR3JhZmFuYSBjb25zb2xlIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIEdyYWZhbmEgc3VwcG9ydGVkIGJ5IHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vc3QgcmVjZW50IGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RpZmljYXRpb25UaW1lc3RhbXA6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSdzIFNBTUwgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvblN0YXR1czogU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBJQU0gSWRlbnRpdHkgQ2VudGVyLW1hbmFnZWQgYXBwbGljYXRpb24gdGhhdCBpcyBjcmVhdGVkIGJ5IEFtYXpvbiBNYW5hZ2VkXG4gICAqIEdyYWZhbmEuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvQ2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzOiBTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBJU19XT1JLU1BBQ0UsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSA9PT0gQWNjb3VudEFjY2Vzc1R5cGUuQ1VSUkVOVF9BQ0NPVU5UICYmXG4gICAgICAhcHJvcHMucm9sZVxuICAgICkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdSb2xlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBhY2NvdW50QWNjZXNzVHlwZSBpcyBDVVJSRU5UX0FDQ09VTlQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wczpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gcHJvcHMuYWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IHByb3BzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzO1xuICAgIHRoaXMuY2xpZW50VG9rZW4gPSBwcm9wcy5jbGllbnRUb2tlbjtcbiAgICB0aGlzLmRhdGFTb3VyY2VzID0gcHJvcHMuZGF0YVNvdXJjZXM7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBwcm9wcy5uZXR3b3JrQWNjZXNzQ29udHJvbDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyA9IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucztcbiAgICB0aGlzLm9yZ2FuaXphdGlvbmFsVW5pdHMgPSBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRzO1xuICAgIHRoaXMub3JnYW5pemF0aW9uUm9sZU5hbWUgPSBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZTtcbiAgICB0aGlzLnBlcm1pc3Npb25UeXBlID0gcHJvcHMucGVybWlzc2lvblR5cGU7XG4gICAgdGhpcy5wbHVnaW5BZG1pbkVuYWJsZWQgPSBwcm9wcy5wbHVnaW5BZG1pbkVuYWJsZWQ7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IHByb3BzLnN0YWNrU2V0TmFtZTtcbiAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBwcm9wcy52cGNDb25maWd1cmF0aW9uO1xuXG4gICAgbGV0IGNmbldvcmtzcGFjZVByb3BzOiBDZm5Xb3Jrc3BhY2VQcm9wcyA9IHtcbiAgICAgIGFjY291bnRBY2Nlc3NUeXBlOiBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSxcbiAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBwcm9wcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgICAgIGNsaWVudFRva2VuOiBwcm9wcy5jbGllbnRUb2tlbixcbiAgICAgIGRhdGFTb3VyY2VzOiBwcm9wcy5kYXRhU291cmNlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdyYWZhbmFWZXJzaW9uOiBwcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM6IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyxcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdHM6IHByb3BzLm9yZ2FuaXphdGlvbmFsVW5pdHMsXG4gICAgICBvcmdhbml6YXRpb25Sb2xlTmFtZTogcHJvcHMub3JnYW5pemF0aW9uUm9sZU5hbWUsXG4gICAgICBwZXJtaXNzaW9uVHlwZTogcHJvcHMucGVybWlzc2lvblR5cGUsXG4gICAgICBwbHVnaW5BZG1pbkVuYWJsZWQ6IHByb3BzLnBsdWdpbkFkbWluRW5hYmxlZCxcbiAgICAgIHJvbGVBcm46IHByb3BzLnJvbGU/LnJvbGVBcm4sXG4gICAgICBzYW1sQ29uZmlndXJhdGlvbjogcHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICBzdGFja1NldE5hbWU6IHByb3BzLnN0YWNrU2V0TmFtZSxcbiAgICAgIHZwY0NvbmZpZ3VyYXRpb246IHByb3BzLnZwY0NvbmZpZ3VyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zZWN1cml0eUdyb3Vwcy5tYXAoXG4gICAgICAgICAgICAoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym5ldElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zdWJuZXRzLm1hcChcbiAgICAgICAgICAgIChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtzcGFjZSA9IG5ldyBDZm5Xb3Jrc3BhY2UodGhpcywgJ1Jlc291cmNlJywgY2ZuV29ya3NwYWNlUHJvcHMpO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLndvcmtzcGFjZTtcblxuICAgIHRoaXMuY3JlYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyQ3JlYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy5lbmRwb2ludCA9IHRoaXMud29ya3NwYWNlLmF0dHJFbmRwb2ludDtcbiAgICB0aGlzLmdyYWZhbmFWZXJzaW9uID0gdGhpcy53b3Jrc3BhY2UuYXR0ckdyYWZhbmFWZXJzaW9uO1xuICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLndvcmtzcGFjZS5hdHRySWQ7XG4gICAgdGhpcy5tb2RpZmljYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyTW9kaWZpY2F0aW9uVGltZXN0YW1wO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb25TdGF0dXMgPSB0aGlzLndvcmtzcGFjZVxuICAgICAgLmF0dHJTYW1sQ29uZmlndXJhdGlvblN0YXR1cyBhcyBTYW1sQ29uZmlndXJhdGlvblN0YXR1c2VzO1xuICAgIHRoaXMuc3NvQ2xpZW50SWQgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3NvQ2xpZW50SWQ7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3RhdHVzIGFzIFN0YXR1cztcbiAgICB0aGlzLndvcmtzcGFjZUFybiA9IHRoaXMuZ2V0V29ya3NwYWNlQXJuKHRoaXMud29ya3NwYWNlSWQpO1xuICB9XG59XG4iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEseURBQTBFO0FBRzFFLHFEQVUwQjtBQThVekIsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUV6RTs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsOEJBQWE7O0lBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBTTtRQUM5QixPQUFPLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQy9FLE1BQU0sTUFBTyxTQUFRLDhCQUFhO1lBQ2hCLGlCQUFpQixDQUFxQjtZQUN0Qyx1QkFBdUIsQ0FBNkI7WUFDcEQsV0FBVyxDQUFVO1lBQ3JCLFdBQVcsQ0FBWTtZQUN2QixXQUFXLENBQVU7WUFDckIsSUFBSSxDQUFVO1lBQ2Qsb0JBQW9CLENBQXdCO1lBQzVDLHdCQUF3QixDQUE4QjtZQUN0RCxtQkFBbUIsQ0FBWTtZQUMvQixvQkFBb0IsQ0FBVTtZQUM5QixjQUFjLENBQW1CO1lBQ2pDLGtCQUFrQixDQUFXO1lBQzdCLElBQUksQ0FBUztZQUNiLGlCQUFpQixDQUFxQjtZQUN0QyxZQUFZLENBQVU7WUFDdEIsZ0JBQWdCLENBQW9CO1lBQ3BDLGlCQUFpQixDQUFVO1lBQzNCLFFBQVEsQ0FBVTtZQUNsQixjQUFjLENBQVU7WUFDeEIscUJBQXFCLENBQVU7WUFDL0IsdUJBQXVCLENBQVU7WUFDakMsV0FBVyxDQUFVO1lBQ3JCLE1BQU0sQ0FBVTtZQUNoQixZQUFZLENBQVM7WUFDckIsV0FBVyxDQUFTO1lBRXBDO2dCQUNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JB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QUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQztRQUN0RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDOztBQXBZSCw4QkFxWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5Xb3Jrc3BhY2UsIENmbldvcmtzcGFjZVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdyYWZhbmEnO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgQWNjb3VudEFjY2Vzc1R5cGUsXG4gIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzLFxuICBJV29ya3NwYWNlLFxuICBOZXR3b3JrQWNjZXNzQ29udHJvbCxcbiAgTm90aWZpY2F0aW9uRGVzdGluYXRpb25zLFxuICBQZXJtaXNzaW9uVHlwZXMsXG4gIFNhbWxDb25maWd1cmF0aW9uLFxuICBWcGNDb25maWd1cmF0aW9uLFxuICBXb3Jrc3BhY2VCYXNlLFxufSBmcm9tICcuL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0b1xuICAgKiBhdXRoZW50aWNhdGUgdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgY2FzZS1zZW5zaXRpdmUsIHVzZXItcHJvdmlkZWQgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBNdXN0IGJlIDEtNjQgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieVxuICAgKiBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuIE5vdGUgdGhhdCBhbiBpZGVtcG90ZW5jeSB0b2tlbiBoYXMgbm8gcHJhY3RpY2FsIGVmZmVjdCBpbiB0aGVcbiAgICogZGVjbGFyYXRpdmUgQ2xvdWRGb3JtYXRpb24vQ0RLIGRlcGxveW1lbnQgbW9kZWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpZW50IHRva2VuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBBV1MgZGF0YSBzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gaGF2ZSBJQU0gcm9sZXMgYW5kIHBlcm1pc3Npb25zXG4gICAqIGNyZWF0ZWQgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byByZWFkIGRhdGEgZnJvbSB0aGVzZSBzb3VyY2VzLlxuICAgKiBUaGlzIGxpc3QgaXMgb25seSB1c2VkIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBV1MgY29uc29sZSwgYW5kIHRoZVxuICAgKiBwZXJtaXNzaW9uVHlwZSBpcyBTRVJWSUNFX01BTkFHRUQuIFRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIEFQSSBtYXJrcyB0aGlzIHBhcmFtZXRlciBhcyBmb3JcbiAgICogaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHJlY29tbWVuZHMgYWdhaW5zdCBzZXR0aW5nIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRhdGEgc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgR3JhZmFuYSB0byBzdXBwb3J0IGluIHRoZSB3b3Jrc3BhY2UuIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvblxuICAgKiBvbiBjcmVhdGUgKGZvciBleGFtcGxlLCAxMC40KSwgb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgd29ya3NwYWNlIG9uIHVwZGF0ZS5cbiAgICogQ2FuIG9ubHkgYmUgdXNlZCB0byB1cGdyYWRlIChmb3IgZXhhbXBsZSwgZnJvbSA4LjQgdG8gOS40KSwgbm90IGRvd25ncmFkZSAoZm9yIGV4YW1wbGUsIGZyb21cbiAgICogOS40IHRvIDguNCkuXG4gICAqXG4gICAqIE11c3QgYmUgMS0yNTUgY2hhcmFjdGVycyBsb25nICh2YWxpZGF0ZWQgYnkgQ2xvdWRGb3JtYXRpb24gYXQgZGVwbG95IHRpbWUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBzZXJ2aWNlIGFzc2lnbnMgdGhlIGxhdGVzdCBHcmFmYW5hIHZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNdXN0IGJlIDEtMjU1IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLFxuICAgKiB1bmRlcnNjb3JlcywgYW5kIHRpbGRlcyAodmFsaWRhdGVkIGJ5IENsb3VkRm9ybWF0aW9uIGF0IGRlcGxveSB0aW1lKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmV0d29yayBhY2Nlc3MgY29udHJvbCwgdGhlIHdvcmtzcGFjZSBpcyBvcGVuIHRvIGFsbCB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBub3RpZmljYXRpb24gZGVzdGluYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uYWwgdW5pdHNcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uIHJvbGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgU0VSVklDRV9NQU5BR0VELCBhbmQgdGhlIHdvcmtwbGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hXG4gICAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAgICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cbiAgICpcbiAgICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICAgKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gICAqIG90aGVyIEFXUyBhY2NvdW50cyBpbiB0aGUgb3JnYW5pemF0aW9uLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBDVVNUT01FUl9NQU5BR0VELlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGx1Z2luIGFkbWluaXN0cmF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIHdvcmtzcGFjZS4gU2V0dGluZyB0byB0cnVlIGFsbG93cyB3b3Jrc3BhY2VcbiAgICogYWRtaW5zIHRvIGluc3RhbGwsIHVuaW5zdGFsbCwgYW5kIHVwZGF0ZSBwbHVnaW5zIGZyb20gd2l0aGluIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igd29ya3NwYWNlcyB0aGF0IHN1cHBvcnQgR3JhZmFuYSB2ZXJzaW9uIDkgb3IgbmV3ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb2xlIGlzIGF0dGFjaGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBTQU1MIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc2V0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBJQU0gcm9sZXMgdG8gYmUgdXNlZCBmb3JcbiAgICogdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3RhY2sgc2V0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBtYXAgb2YgdGFncyB0byBhc3NpZ24gdG8gdGhlIHdvcmtzcGFjZS4gVGFncyBjYW4gYWxzbyBiZSBhcHBsaWVkIGFmdGVyIGNyZWF0aW9uIHVzaW5nXG4gICAqIGBUYWdzLm9mKHdvcmtzcGFjZSkuYWRkKGtleSwgdmFsdWUpYC5cbiAgICpcbiAgICogQ29uc3RyYWludHMgKGZyb20gdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgQVBJKTogYSBtYXhpbXVtIG9mIDUwIHRhZ3MsIGVhY2gga2V5IG11c3QgYmVcbiAgICogMS0xMjggY2hhcmFjdGVycyBsb25nIGFuZCBlYWNoIHZhbHVlIDAtMjU2IGNoYXJhY3RlcnMgbG9uZyAodmFsaWRhdGVkIGJ5IENsb3VkRm9ybWF0aW9uIGF0XG4gICAqIGRlcGxveSB0aW1lKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBWUEMgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0b1xuICAgKiBhdXRoZW50aWNhdGUgdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgY2FzZS1zZW5zaXRpdmUsIHVzZXItcHJvdmlkZWQgaWRlbnRpZmllciB0byBlbnN1cmUgdGhlIGlkZW1wb3RlbmN5IG9mIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBNdXN0IGJlIDEtNjQgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieVxuICAgKiBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuIE5vdGUgdGhhdCBhbiBpZGVtcG90ZW5jeSB0b2tlbiBoYXMgbm8gcHJhY3RpY2FsIGVmZmVjdCBpbiB0aGVcbiAgICogZGVjbGFyYXRpdmUgQ2xvdWRGb3JtYXRpb24vQ0RLIGRlcGxveW1lbnQgbW9kZWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpZW50IHRva2VuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBBV1MgZGF0YSBzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gaGF2ZSBJQU0gcm9sZXMgYW5kIHBlcm1pc3Npb25zXG4gICAqIGNyZWF0ZWQgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byByZWFkIGRhdGEgZnJvbSB0aGVzZSBzb3VyY2VzLlxuICAgKiBUaGlzIGxpc3QgaXMgb25seSB1c2VkIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBV1MgY29uc29sZSwgYW5kIHRoZVxuICAgKiBwZXJtaXNzaW9uVHlwZSBpcyBTRVJWSUNFX01BTkFHRUQuIFRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIEFQSSBtYXJrcyB0aGlzIHBhcmFtZXRlciBhcyBmb3JcbiAgICogaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHJlY29tbWVuZHMgYWdhaW5zdCBzZXR0aW5nIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRhdGEgc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNdXN0IGJlIDEtMjU1IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLFxuICAgKiB1bmRlcnNjb3JlcywgYW5kIHRpbGRlcyAodmFsaWRhdGVkIGJ5IENsb3VkRm9ybWF0aW9uIGF0IGRlcGxveSB0aW1lKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmV0d29yayBhY2Nlc3MgY29udHJvbCwgdGhlIHdvcmtzcGFjZSBpcyBvcGVuIHRvIGFsbCB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBub3RpZmljYXRpb24gZGVzdGluYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uYWwgdW5pdHNcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIGZvciB0aGUgb3JnYW5pemF0aW9uLlxuICAgKlxuICAgKiBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnMgKHZhbGlkYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3kgdGltZSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uIHJvbGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgU0VSVklDRV9NQU5BR0VELCBhbmQgdGhlIHdvcmtwbGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBbWF6b24gTWFuYWdlZCBHcmFmYW5hXG4gICAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAgICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cbiAgICpcbiAgICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICAgKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gICAqIG90aGVyIEFXUyBhY2NvdW50cyBpbiB0aGUgb3JnYW5pemF0aW9uLCB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBDVVNUT01FUl9NQU5BR0VELlxuICAgKlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGx1Z2luIGFkbWluaXN0cmF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIHdvcmtzcGFjZS4gU2V0dGluZyB0byB0cnVlIGFsbG93cyB3b3Jrc3BhY2VcbiAgICogYWRtaW5zIHRvIGluc3RhbGwsIHVuaW5zdGFsbCwgYW5kIHVwZGF0ZSBwbHVnaW5zIGZyb20gd2l0aGluIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igd29ya3NwYWNlcyB0aGF0IHN1cHBvcnQgR3JhZmFuYSB2ZXJzaW9uIDkgb3IgbmV3ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb2xlIGlzIGF0dGFjaGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBTQU1MIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2sgc2V0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBJQU0gcm9sZXMgdG8gYmUgdXNlZCBmb3JcbiAgICogdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3RhY2sgc2V0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBWUEMgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VBcm46IHN0cmluZztcbn07XG5cbmNvbnN0IElTX1dPUktTUEFDRSA9IFN5bWJvbC5mb3IoJ0Byb2JoYW4tY2RrLWxpYi9hd3NfZ3JhZmFuYS5Xb3Jrc3BhY2UnKTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSB3b3Jrc3BhY2UuIEluIGEgd29ya3NwYWNlLCB5b3UgY2FuIGNyZWF0ZSBHcmFmYW5hIGRhc2hib2FyZHMgYW5kIHZpc3VhbGl6YXRpb25zIHRvXG4gKiBhbmFseXplIHlvdXIgbWV0cmljcywgbG9ncywgYW5kIHRyYWNlcy4gWW91IGRvbid0IGhhdmUgdG8gYnVpbGQsIHBhY2thZ2UsIG9yIGRlcGxveSBhbnkgaGFyZHdhcmVcbiAqIHRvIHJ1biB0aGUgR3JhZmFuYSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2UgZXh0ZW5kcyBXb3Jrc3BhY2VCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBpc1dvcmtzcGFjZSh4OiBhbnkpOiB4IGlzIFdvcmtzcGFjZSB7XG4gICAgcmV0dXJuIElTX1dPUktTUEFDRSBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyB3b3Jrc3BhY2UgZnJvbSBpdHMgQVJOLlxuICAgKlxuICAgKiBBIHNpbmdsZSBBUk4gaXMgdGhlIG1vc3QgY29tbW9uIGhhbmRsZSBmb3IgcmVmZXJlbmNpbmcgYW4gZXhpc3Rpbmcgd29ya3NwYWNlLiBUaGUgaW1wb3J0ZWRcbiAgICogd29ya3NwYWNlIG9ubHkgZXhwb3NlcyBpZGVudGl0eSBpbmZvcm1hdGlvbiAoYHdvcmtzcGFjZUFybmAgYW5kIGB3b3Jrc3BhY2VJZGApOyB0aGUgY3JlYXRlLXRpbWVcbiAgICogY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFuIEFSTiBpbXBvcnQuIFVzZSBgZnJvbVdvcmtzcGFjZUF0dHJpYnV0ZXNgIHdoZW5cbiAgICogdGhvc2UgcHJvcGVydGllcyBhcmUgcmVxdWlyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gd29ya3NwYWNlQXJuIFRoZSBBUk4gb2YgdGhlIGV4aXN0aW5nIHdvcmtzcGFjZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tV29ya3NwYWNlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHdvcmtzcGFjZUFybjogc3RyaW5nKTogSVdvcmtzcGFjZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgV29ya3NwYWNlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU/OiBBY2NvdW50QWNjZXNzVHlwZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVycz86IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlPzogUGVybWlzc2lvblR5cGVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uVGltZXN0YW1wPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG1vZGlmaWNhdGlvblRpbWVzdGFtcD86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvblN0YXR1cz86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzc29DbGllbnRJZD86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAgICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIHRoaXMud29ya3NwYWNlQXJuID0gd29ya3NwYWNlQXJuO1xuICAgICAgICB0aGlzLndvcmtzcGFjZUlkID0gdGhpcy5nZXRXb3Jrc3BhY2VJZCh3b3Jrc3BhY2VBcm4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Xb3Jrc3BhY2VBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBXb3Jrc3BhY2VBdHRyaWJ1dGVzKTogSVdvcmtzcGFjZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgV29ya3NwYWNlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NvbmZpZ3VyYXRpb24/OiBWcGNDb25maWd1cmF0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uVGltZXN0YW1wPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uPzogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG1vZGlmaWNhdGlvblRpbWVzdGFtcD86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvblN0YXR1cz86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzc29DbGllbnRJZD86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAgICAgcHVibGljIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXM6IFdvcmtzcGFjZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gYXR0cmlidXRlcy5hY2NvdW50QWNjZXNzVHlwZTtcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IGF0dHJpYnV0ZXMuYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XG4gICAgICAgIHRoaXMuY2xpZW50VG9rZW4gPSBhdHRyaWJ1dGVzLmNsaWVudFRva2VuO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VzID0gYXR0cmlidXRlcy5kYXRhU291cmNlcztcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGF0dHJpYnV0ZXMuZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZTtcbiAgICAgICAgdGhpcy5uZXR3b3JrQWNjZXNzQ29udHJvbCA9IGF0dHJpYnV0ZXMubmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zID0gYXR0cmlidXRlcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnM7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uYWxVbml0cyA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uYWxVbml0cztcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25Sb2xlTmFtZSA9IGF0dHJpYnV0ZXMub3JnYW5pemF0aW9uUm9sZU5hbWU7XG4gICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUgPSBhdHRyaWJ1dGVzLnBlcm1pc3Npb25UeXBlO1xuICAgICAgICB0aGlzLnBsdWdpbkFkbWluRW5hYmxlZCA9IGF0dHJpYnV0ZXMucGx1Z2luQWRtaW5FbmFibGVkO1xuICAgICAgICB0aGlzLnJvbGUgPSBhdHRyaWJ1dGVzLnJvbGU7XG4gICAgICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnNhbWxDb25maWd1cmF0aW9uO1xuICAgICAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IGF0dHJpYnV0ZXMuc3RhY2tTZXROYW1lO1xuICAgICAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVzLnZwY0NvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMud29ya3NwYWNlQXJuID0gYXR0cmlidXRlcy53b3Jrc3BhY2VBcm47XG4gICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLmdldFdvcmtzcGFjZUlkKGF0dHJpYnV0ZXMud29ya3NwYWNlQXJuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChhdHRycyk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyXG4gICAqIGl0IGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICAgKiBPUkdBTklaQVRJT04sIHRoZSBPcmdhbml6YXRpb25hbFVuaXRzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhlXG4gICAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICAgKlxuICAgKiBBbHdheXMgcG9wdWxhdGVkIGZvciBhIHdvcmtzcGFjZSBjcmVhdGVkIHRocm91Z2ggdGhpcyBjb25zdHJ1Y3QgKGl0IGlzIGEgcmVxdWlyZWQgcHJvcCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU/OiBBY2NvdW50QWNjZXNzVHlwZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyB3b3Jrc3BhY2UgdXNlcyBTQU1MIDIuMCwgQVdTIElBTSBJZGVudGl0eSBDZW50ZXIsIG9yIGJvdGggdG9cbiAgICogYXV0aGVudGljYXRlIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQWx3YXlzIHBvcHVsYXRlZCBmb3IgYSB3b3Jrc3BhY2UgY3JlYXRlZCB0aHJvdWdoIHRoaXMgY29uc3RydWN0IChpdCBpcyBhIHJlcXVpcmVkIHByb3ApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzPzogQXV0aGVudGljYXRpb25Qcm92aWRlcnNbXTtcblxuICAvKipcbiAgICogQSB1bmlxdWUsIGNhc2Utc2Vuc2l0aXZlLCB1c2VyLXByb3ZpZGVkIGlkZW50aWZpZXIgdG8gZW5zdXJlIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBBV1MgZGF0YSBzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gaGF2ZSBJQU0gcm9sZXMgYW5kIHBlcm1pc3Npb25zXG4gICAqIGNyZWF0ZWQgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byByZWFkIGRhdGEgZnJvbSB0aGVzZSBzb3VyY2VzLlxuICAgKlxuICAgKiBUaGlzIGxpc3QgaXMgb25seSB1c2VkIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZSBBV1MgY29uc29sZSwgYW5kIHRoZVxuICAgKiBwZXJtaXNzaW9uVHlwZSBpcyBTRVJWSUNFX01BTkFHRUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHVzZXItZGVmaW5lZCBkZXNjcmlwdGlvbiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBuZXR3b3JrIGFjY2VzcyB0byB5b3VyIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrQWNjZXNzQ29udHJvbD86IE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIG5vdGlmaWNhdGlvbiBjaGFubmVscyB0aGF0IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIElBTSByb2xlc1xuICAgKiBhbmQgcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyByZXNvdXJjZXMgdGhyb3VnaCBPcmdhbml6YXRpb25zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIFNFUlZJQ0VfTUFOQUdFRCwgYW5kIHRoZSB3b3JrcGxhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQW1hem9uIE1hbmFnZWQgR3JhZmFuYVxuICAgKiBjb25zb2xlLCB0aGVuIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYXV0b21hdGljYWxseSBjcmVhdGVzIHRoZSBJQU0gcm9sZXMgYW5kIHByb3Zpc2lvbnMgdGhlXG4gICAqIHBlcm1pc3Npb25zIHRoYXQgdGhlIHdvcmtzcGFjZSBuZWVkcyB0byB1c2UgQVdTIGRhdGEgc291cmNlcyBhbmQgbm90aWZpY2F0aW9uIGNoYW5uZWxzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIENVU1RPTUVSX01BTkFHRUQsIHlvdSBtdXN0IG1hbmFnZSB0aG9zZSByb2xlcyBhbmQgcGVybWlzc2lvbnMgeW91cnNlbGYuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEgd29ya3NwYWNlIGluIGEgbWVtYmVyIGFjY291bnQgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCB0aGF0IGFjY291bnQgaXNcbiAgICogbm90IGEgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRoZSB3b3Jrc3BhY2UgdG8gYWNjZXNzIGRhdGEgc291cmNlcyBpblxuICAgKiBvdGhlciBBV1MgYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvbiwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gQ1VTVE9NRVJfTUFOQUdFRC5cbiAgICpcbiAgICogQWx3YXlzIHBvcHVsYXRlZCBmb3IgYSB3b3Jrc3BhY2UgY3JlYXRlZCB0aHJvdWdoIHRoaXMgY29uc3RydWN0IChpdCBpcyBhIHJlcXVpcmVkIHByb3ApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlPzogUGVybWlzc2lvblR5cGVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBsdWdpbiBhZG1pbmlzdHJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSB3b3Jrc3BhY2UuIFNldHRpbmcgdG8gdHJ1ZSBhbGxvd3Mgd29ya3NwYWNlXG4gICAqIGFkbWlucyB0byBpbnN0YWxsLCB1bmluc3RhbGwsIGFuZCB1cGRhdGUgcGx1Z2lucyBmcm9tIHdpdGhpbiB0aGUgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHdvcmtzcGFjZXMgdGhhdCBzdXBwb3J0IEdyYWZhbmEgdmVyc2lvbiA5IG9yIG5ld2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBsdWdpbkFkbWluRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0aGUgQVdTIHJlc291cmNlcyB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2lsbCB2aWV3IGRhdGFcbiAgICogZnJvbS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB3b3Jrc3BhY2UgdXNlcyBTQU1MLCB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFwIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gd29ya3NwYWNlXG4gICAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICAgKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvbj86IFNhbWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgSUFNIHJvbGVzIHRvIGJlIHVzZWQgZm9yXG4gICAqIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdCB0by5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNDb25maWd1cmF0aW9uPzogVnBjQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZTogQ2ZuV29ya3NwYWNlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0aGF0IHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGlvblRpbWVzdGFtcD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCB0aGF0IHVzZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBHcmFmYW5hIGNvbnNvbGUgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgR3JhZmFuYSBzdXBwb3J0ZWQgYnkgdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFmYW5hVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBvZiB0aGlzIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IHJlY2VudCBkYXRlIHRoYXQgdGhlIHdvcmtzcGFjZSB3YXMgbW9kaWZpZWQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RpZmljYXRpb25UaW1lc3RhbXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UncyBTQU1MIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUuXG4gICAqXG4gICAqIFRoaXMgaXMgYSBkZXBsb3ktdGltZSBDbG91ZEZvcm1hdGlvbiBhdHRyaWJ1dGUgcmVzb2x2ZWQgYXMgYW4gdW5yZXNvbHZlZCB0b2tlbiBhdCBzeW50aCB0aW1lLFxuICAgKiBzbyBpdCBpcyB0eXBlZCBhcyBgc3RyaW5nYC4gU2VlIHRoZSBgU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlc2AgZW51bSBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uU3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIElBTSBJZGVudGl0eSBDZW50ZXItbWFuYWdlZCBhcHBsaWNhdGlvbiB0aGF0IGlzIGNyZWF0ZWQgYnkgQW1hem9uIE1hbmFnZWRcbiAgICogR3JhZmFuYS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNzb0NsaWVudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogVGhpcyBpcyBhIGRlcGxveS10aW1lIENsb3VkRm9ybWF0aW9uIGF0dHJpYnV0ZSByZXNvbHZlZCBhcyBhbiB1bnJlc29sdmVkIHRva2VuIGF0IHN5bnRoIHRpbWUsXG4gICAqIHNvIGl0IGlzIHR5cGVkIGFzIGBzdHJpbmdgLiBTZWUgdGhlIGBTdGF0dXNgIGVudW0gZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcm4gb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBJU19XT1JLU1BBQ0UsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gcHJvcHMuYWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IHByb3BzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzO1xuICAgIHRoaXMuY2xpZW50VG9rZW4gPSBwcm9wcy5jbGllbnRUb2tlbjtcbiAgICB0aGlzLmRhdGFTb3VyY2VzID0gcHJvcHMuZGF0YVNvdXJjZXM7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBwcm9wcy5uZXR3b3JrQWNjZXNzQ29udHJvbDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyA9IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucztcbiAgICB0aGlzLm9yZ2FuaXphdGlvbmFsVW5pdHMgPSBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRzO1xuICAgIHRoaXMub3JnYW5pemF0aW9uUm9sZU5hbWUgPSBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZTtcbiAgICB0aGlzLnBlcm1pc3Npb25UeXBlID0gcHJvcHMucGVybWlzc2lvblR5cGU7XG4gICAgdGhpcy5wbHVnaW5BZG1pbkVuYWJsZWQgPSBwcm9wcy5wbHVnaW5BZG1pbkVuYWJsZWQ7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IHByb3BzLnN0YWNrU2V0TmFtZTtcbiAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBwcm9wcy52cGNDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3Qgc2FtbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IGNmbldvcmtzcGFjZVByb3BzOiBDZm5Xb3Jrc3BhY2VQcm9wcyA9IHtcbiAgICAgIGFjY291bnRBY2Nlc3NUeXBlOiBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSxcbiAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBwcm9wcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgICAgIGNsaWVudFRva2VuOiBwcm9wcy5jbGllbnRUb2tlbixcbiAgICAgIGRhdGFTb3VyY2VzOiBwcm9wcy5kYXRhU291cmNlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdyYWZhbmFWZXJzaW9uOiBwcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBuZXR3b3JrQWNjZXNzQ29udHJvbDogcHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2xcbiAgICAgICAgPyB7XG4gICAgICAgICAgLy8gTWFwIHRoZSBzdHJvbmdseS10eXBlZCBwcmVmaXggbGlzdHMgLyBWUEMgZW5kcG9pbnRzIHRvIHRoZWlyIGlkcy4gYD8ubWFwYCBwcmVzZXJ2ZXNcbiAgICAgICAgICAvLyB0aGUgdGhyZWUgbWVhbmluZ2Z1bCBzdGF0ZXM6IGFic2VudCAodW5kZWZpbmVkKSwgZXhwbGljaXRseSBlbXB0eSAoYFtdYCA9IFwiYWxsb3dcbiAgICAgICAgICAvLyBub25lXCIpLCBhbmQgcG9wdWxhdGVkLiBBbiBlbXB0eSBhcnJheSBpcyBpbnRlbnRpb25hbGx5IE5PVCBjb2xsYXBzZWQgdG8gdW5kZWZpbmVkIHNvXG4gICAgICAgICAgLy8gdGhlIFwiZGVueSBhbGwgdHJhZmZpY1wiIHNlbWFudGljcyBzdXJ2aXZlIHRvIHRoZSBzeW50aGVzaXplZCB0ZW1wbGF0ZS5cbiAgICAgICAgICBwcmVmaXhMaXN0SWRzOiBwcm9wcy5uZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cz8ubWFwKFxuICAgICAgICAgICAgKHByZWZpeExpc3QpID0+IHByZWZpeExpc3QucHJlZml4TGlzdElkLFxuICAgICAgICAgICksXG4gICAgICAgICAgdnBjZUlkczogcHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wudnBjRW5kcG9pbnRzPy5tYXAoXG4gICAgICAgICAgICAodnBjRW5kcG9pbnQpID0+IHZwY0VuZHBvaW50LnZwY0VuZHBvaW50SWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uczogcHJvcHMubm90aWZpY2F0aW9uRGVzdGluYXRpb25zLFxuICAgICAgb3JnYW5pemF0aW9uYWxVbml0czogcHJvcHMub3JnYW5pemF0aW9uYWxVbml0cyxcbiAgICAgIG9yZ2FuaXphdGlvblJvbGVOYW1lOiBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSxcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBwcm9wcy5wZXJtaXNzaW9uVHlwZSxcbiAgICAgIHBsdWdpbkFkbWluRW5hYmxlZDogcHJvcHMucGx1Z2luQWRtaW5FbmFibGVkLFxuICAgICAgcm9sZUFybjogcHJvcHMucm9sZT8ucm9sZUFybixcbiAgICAgIHNhbWxDb25maWd1cmF0aW9uOiBzYW1sQ29uZmlndXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBhbGxvd2VkT3JnYW5pemF0aW9uczogc2FtbENvbmZpZ3VyYXRpb24uYWxsb3dlZE9yZ2FuaXphdGlvbnMsXG4gICAgICAgICAgYXNzZXJ0aW9uQXR0cmlidXRlczogc2FtbENvbmZpZ3VyYXRpb24uYXNzZXJ0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgICBpZHBNZXRhZGF0YTogc2FtbENvbmZpZ3VyYXRpb24uaWRwTWV0YWRhdGEsXG4gICAgICAgICAgbG9naW5WYWxpZGl0eUR1cmF0aW9uOiBzYW1sQ29uZmlndXJhdGlvbi5sb2dpblZhbGlkaXR5RHVyYXRpb24sXG4gICAgICAgICAgcm9sZVZhbHVlczogc2FtbENvbmZpZ3VyYXRpb24ucm9sZVZhbHVlcyxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YWNrU2V0TmFtZTogcHJvcHMuc3RhY2tTZXROYW1lLFxuICAgICAgLy8gVGhlIEwxIENmbldvcmtzcGFjZSAoYXdzLWNkay1saWIgMi4yNjYrKSBpcyBgSVRhZ2dhYmxlVjJgIGFuZCBhY2NlcHRzIHRhZ3MgbmF0aXZlbHkgYXMgYVxuICAgICAgLy8gbGlzdCBvZiB7IGtleSwgdmFsdWUgfS4gU2VlZCBpdCBmcm9tIHRoZSBvcHRpb25hbCBgcHJvcHMudGFnc2AgbWFwOyB0YWdzIGFwcGxpZWQgbGF0ZXIgdmlhXG4gICAgICAvLyBgVGFncy5vZih3b3Jrc3BhY2UpLmFkZCguLi4pYCBhc3BlY3RzIG1lcmdlIGludG8gdGhlIHNhbWUgbGlzdCBhdCBzeW50aCB0aW1lLlxuICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY0NvbmZpZ3VyYXRpb246IHByb3BzLnZwY0NvbmZpZ3VyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zZWN1cml0eUdyb3Vwcy5tYXAoXG4gICAgICAgICAgICAoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym5ldElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zdWJuZXRzLm1hcChcbiAgICAgICAgICAgIChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtzcGFjZSA9IG5ldyBDZm5Xb3Jrc3BhY2UodGhpcywgJ1Jlc291cmNlJywgY2ZuV29ya3NwYWNlUHJvcHMpO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLndvcmtzcGFjZTtcblxuICAgIHRoaXMuY3JlYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyQ3JlYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy5lbmRwb2ludCA9IHRoaXMud29ya3NwYWNlLmF0dHJFbmRwb2ludDtcbiAgICB0aGlzLmdyYWZhbmFWZXJzaW9uID0gdGhpcy53b3Jrc3BhY2UuYXR0ckdyYWZhbmFWZXJzaW9uO1xuICAgIHRoaXMud29ya3NwYWNlSWQgPSB0aGlzLndvcmtzcGFjZS5hdHRySWQ7XG4gICAgdGhpcy5tb2RpZmljYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyTW9kaWZpY2F0aW9uVGltZXN0YW1wO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb25TdGF0dXMgPSB0aGlzLndvcmtzcGFjZS5hdHRyU2FtbENvbmZpZ3VyYXRpb25TdGF0dXM7XG4gICAgdGhpcy5zc29DbGllbnRJZCA9IHRoaXMud29ya3NwYWNlLmF0dHJTc29DbGllbnRJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMud29ya3NwYWNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy53b3Jrc3BhY2VBcm4gPSB0aGlzLmdldFdvcmtzcGFjZUFybih0aGlzLndvcmtzcGFjZUlkKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -40,12 +40,13 @@
40
40
  "organization": false
41
41
  },
42
42
  "devDependencies": {
43
+ "@aws-cdk/integ-tests-alpha": "2.266.0-alpha.0",
43
44
  "@stylistic/eslint-plugin": "^2",
44
45
  "@types/jest": "^29.5.14",
45
46
  "@types/node": "^22.20.1",
46
47
  "@typescript-eslint/eslint-plugin": "^8",
47
48
  "@typescript-eslint/parser": "^8",
48
- "aws-cdk-lib": "2.243.0",
49
+ "aws-cdk-lib": "2.266.0",
49
50
  "commit-and-tag-version": "^12",
50
51
  "constructs": "10.5.1",
51
52
  "eslint": "^9",
@@ -64,12 +65,9 @@
64
65
  "typescript": "^5.9.3"
65
66
  },
66
67
  "peerDependencies": {
67
- "aws-cdk-lib": "^2.243.0",
68
+ "aws-cdk-lib": "^2.266.0",
68
69
  "constructs": "^10.5.1"
69
70
  },
70
- "dependencies": {
71
- "@robhan-cdk-lib/utils": "^0.0.323"
72
- },
73
71
  "keywords": [
74
72
  "cdk",
75
73
  "grafana"
@@ -84,7 +82,7 @@
84
82
  "main": "lib/index.js",
85
83
  "license": "MIT",
86
84
  "stability": "stable",
87
- "version": "0.0.402",
85
+ "version": "0.1.0",
88
86
  "jest": {
89
87
  "coverageProvider": "v8",
90
88
  "testMatch": [