@robhan-cdk-lib/aws_grafana 0.0.65 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +92 -66
- package/lib/validation/workspace-base.d.ts +121 -0
- package/lib/validation/workspace-base.js +427 -0
- package/lib/workspace-base.js +1 -1
- package/lib/workspace.d.ts +0 -121
- package/lib/workspace.js +15 -406
- package/package.json +4 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates the clientToken property.
|
|
3
|
+
*
|
|
4
|
+
* @param token - The client token to validate
|
|
5
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
6
|
+
*
|
|
7
|
+
* Validation rules:
|
|
8
|
+
* - Must be a string
|
|
9
|
+
* - Must be between 1 and 64 characters long
|
|
10
|
+
* - Must contain only printable ASCII characters
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateClientToken(token: unknown): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Validates the description property.
|
|
15
|
+
*
|
|
16
|
+
* @param description - The description to validate
|
|
17
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
18
|
+
*
|
|
19
|
+
* Validation rules:
|
|
20
|
+
* - Must be a string
|
|
21
|
+
* - Maximum length of 2048 characters
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateDescription(description: unknown): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Validates the grafanaVersion property.
|
|
26
|
+
*
|
|
27
|
+
* @param version - The Grafana version to validate
|
|
28
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
29
|
+
*
|
|
30
|
+
* Validation rules:
|
|
31
|
+
* - Must be a string
|
|
32
|
+
* - Must be between 1 and 255 characters long
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateGrafanaVersion(version: unknown): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Validates the name property.
|
|
37
|
+
*
|
|
38
|
+
* @param name - The workspace name to validate
|
|
39
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
40
|
+
*
|
|
41
|
+
* Validation rules:
|
|
42
|
+
* - Must be a string
|
|
43
|
+
* - Must be between 1 and 255 characters long
|
|
44
|
+
* - Can only contain alphanumeric characters, hyphens, dots, underscores, and tildes
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateName(name: unknown): string[];
|
|
47
|
+
/**
|
|
48
|
+
* Validates the networkAccessControl property.
|
|
49
|
+
*
|
|
50
|
+
* @param nac - The network access control configuration to validate
|
|
51
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
52
|
+
*
|
|
53
|
+
* Validation rules:
|
|
54
|
+
* - Must be an object
|
|
55
|
+
* - prefixLists (if present) must be an array with at most 5 items
|
|
56
|
+
* - vpcEndpoints (if present) must be an array with at most 5 items
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateNetworkAccessControl(nac: unknown): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Validates the organizationRoleName property.
|
|
61
|
+
*
|
|
62
|
+
* @param roleName - The organization role name to validate
|
|
63
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
64
|
+
*
|
|
65
|
+
* Validation rules:
|
|
66
|
+
* - Must be a string
|
|
67
|
+
* - Must be between 1 and 2048 characters long
|
|
68
|
+
*/
|
|
69
|
+
export declare function validateOrganizationRoleName(roleName: unknown): string[];
|
|
70
|
+
/**
|
|
71
|
+
* Validates the SAML assertion attributes.
|
|
72
|
+
*
|
|
73
|
+
* @param obj - The SAML assertion attributes to validate
|
|
74
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
75
|
+
*
|
|
76
|
+
* Validation rules:
|
|
77
|
+
* - Must be an object
|
|
78
|
+
* - Each attribute must be a string
|
|
79
|
+
* - Each attribute must be between 1 and 256 characters long
|
|
80
|
+
* - Valid attribute keys are: 'email', 'groups', 'login', 'name', 'org', 'role'
|
|
81
|
+
*/
|
|
82
|
+
export declare function validateSamlAssertionAttributes(obj: unknown): string[];
|
|
83
|
+
/**
|
|
84
|
+
* Validates the SAML IdP metadata.
|
|
85
|
+
*
|
|
86
|
+
* @param obj - The SAML IdP metadata to validate
|
|
87
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
88
|
+
*
|
|
89
|
+
* Validation rules:
|
|
90
|
+
* - Must be an object
|
|
91
|
+
* - url (if present) must be a string between 1 and 2048 characters long
|
|
92
|
+
* - xml (if present) must be a string
|
|
93
|
+
*/
|
|
94
|
+
export declare function validateSamlIdpMetadata(obj: unknown): string[];
|
|
95
|
+
/**
|
|
96
|
+
* Validates the SAML configuration.
|
|
97
|
+
*
|
|
98
|
+
* @param config - The SAML configuration to validate
|
|
99
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
100
|
+
*
|
|
101
|
+
* Validation rules:
|
|
102
|
+
* - Must be an object
|
|
103
|
+
* - idpMetadata is required and must be valid
|
|
104
|
+
* - assertionAtrributes (if present) must be valid
|
|
105
|
+
* - allowedOrganizations (if present) must be an array of strings with 1-256 elements
|
|
106
|
+
* - loginValidityDuration (if present) must be a positive number
|
|
107
|
+
* - roleValues (if present) must be an object with valid admin and editor arrays
|
|
108
|
+
*/
|
|
109
|
+
export declare function validateSamlConfiguration(config: unknown): string[];
|
|
110
|
+
/**
|
|
111
|
+
* Validates the vpcConfiguration property.
|
|
112
|
+
*
|
|
113
|
+
* @param config - The VPC configuration to validate
|
|
114
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
115
|
+
*
|
|
116
|
+
* Validation rules:
|
|
117
|
+
* - Must be an object
|
|
118
|
+
* - securityGroups is required and must be an array with 1-5 items
|
|
119
|
+
* - subnets is required and must be an array with 2-6 items
|
|
120
|
+
*/
|
|
121
|
+
export declare function validateVpcConfiguration(config: unknown): string[];
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateClientToken = validateClientToken;
|
|
4
|
+
exports.validateDescription = validateDescription;
|
|
5
|
+
exports.validateGrafanaVersion = validateGrafanaVersion;
|
|
6
|
+
exports.validateName = validateName;
|
|
7
|
+
exports.validateNetworkAccessControl = validateNetworkAccessControl;
|
|
8
|
+
exports.validateOrganizationRoleName = validateOrganizationRoleName;
|
|
9
|
+
exports.validateSamlAssertionAttributes = validateSamlAssertionAttributes;
|
|
10
|
+
exports.validateSamlIdpMetadata = validateSamlIdpMetadata;
|
|
11
|
+
exports.validateSamlConfiguration = validateSamlConfiguration;
|
|
12
|
+
exports.validateVpcConfiguration = validateVpcConfiguration;
|
|
13
|
+
const utils_1 = require("@robhan-cdk-lib/utils");
|
|
14
|
+
/**
|
|
15
|
+
* Validates the clientToken property.
|
|
16
|
+
*
|
|
17
|
+
* @param token - The client token to validate
|
|
18
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
19
|
+
*
|
|
20
|
+
* Validation rules:
|
|
21
|
+
* - Must be a string
|
|
22
|
+
* - Must be between 1 and 64 characters long
|
|
23
|
+
* - Must contain only printable ASCII characters
|
|
24
|
+
*/
|
|
25
|
+
function validateClientToken(token) {
|
|
26
|
+
const errors = [];
|
|
27
|
+
if (typeof token !== 'string') {
|
|
28
|
+
errors.push('must be a string');
|
|
29
|
+
return errors; // No need to check further if not a string
|
|
30
|
+
}
|
|
31
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
32
|
+
value: token,
|
|
33
|
+
min: 1,
|
|
34
|
+
max: 64,
|
|
35
|
+
}));
|
|
36
|
+
errors.push(...(0, utils_1.validateRegExp)({
|
|
37
|
+
value: token,
|
|
38
|
+
regExp: /^[!-~]*$/,
|
|
39
|
+
message: 'must contain only printable ASCII characters',
|
|
40
|
+
}));
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validates the description property.
|
|
45
|
+
*
|
|
46
|
+
* @param description - The description to validate
|
|
47
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
48
|
+
*
|
|
49
|
+
* Validation rules:
|
|
50
|
+
* - Must be a string
|
|
51
|
+
* - Maximum length of 2048 characters
|
|
52
|
+
*/
|
|
53
|
+
function validateDescription(description) {
|
|
54
|
+
const errors = [];
|
|
55
|
+
if (typeof description !== 'string') {
|
|
56
|
+
errors.push('must be a string');
|
|
57
|
+
return errors; // No need to check further if not a string
|
|
58
|
+
}
|
|
59
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
60
|
+
value: description,
|
|
61
|
+
max: 2048,
|
|
62
|
+
}));
|
|
63
|
+
return errors;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validates the grafanaVersion property.
|
|
67
|
+
*
|
|
68
|
+
* @param version - The Grafana version to validate
|
|
69
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
70
|
+
*
|
|
71
|
+
* Validation rules:
|
|
72
|
+
* - Must be a string
|
|
73
|
+
* - Must be between 1 and 255 characters long
|
|
74
|
+
*/
|
|
75
|
+
function validateGrafanaVersion(version) {
|
|
76
|
+
const errors = [];
|
|
77
|
+
if (typeof version !== 'string') {
|
|
78
|
+
errors.push('must be a string');
|
|
79
|
+
return errors; // No need to check further if not a string
|
|
80
|
+
}
|
|
81
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
82
|
+
value: version,
|
|
83
|
+
min: 1,
|
|
84
|
+
max: 255,
|
|
85
|
+
}));
|
|
86
|
+
return errors;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validates the name property.
|
|
90
|
+
*
|
|
91
|
+
* @param name - The workspace name to validate
|
|
92
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
93
|
+
*
|
|
94
|
+
* Validation rules:
|
|
95
|
+
* - Must be a string
|
|
96
|
+
* - Must be between 1 and 255 characters long
|
|
97
|
+
* - Can only contain alphanumeric characters, hyphens, dots, underscores, and tildes
|
|
98
|
+
*/
|
|
99
|
+
function validateName(name) {
|
|
100
|
+
const errors = [];
|
|
101
|
+
if (typeof name !== 'string') {
|
|
102
|
+
errors.push('must be a string');
|
|
103
|
+
return errors; // No need to check further if not a string
|
|
104
|
+
}
|
|
105
|
+
errors.push(...(0, utils_1.validateRegExp)({
|
|
106
|
+
value: name,
|
|
107
|
+
regExp: /^[a-zA-Z0-9\-._~]+$/,
|
|
108
|
+
message: 'can only contain alphanumeric characters, hyphens, dots, underscores, and tildes',
|
|
109
|
+
}));
|
|
110
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
111
|
+
value: name,
|
|
112
|
+
min: 1,
|
|
113
|
+
max: 255,
|
|
114
|
+
}));
|
|
115
|
+
return errors;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validates the networkAccessControl property.
|
|
119
|
+
*
|
|
120
|
+
* @param nac - The network access control configuration to validate
|
|
121
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
122
|
+
*
|
|
123
|
+
* Validation rules:
|
|
124
|
+
* - Must be an object
|
|
125
|
+
* - prefixLists (if present) must be an array with at most 5 items
|
|
126
|
+
* - vpcEndpoints (if present) must be an array with at most 5 items
|
|
127
|
+
*/
|
|
128
|
+
function validateNetworkAccessControl(nac) {
|
|
129
|
+
const errors = [];
|
|
130
|
+
if (!nac || typeof nac !== 'object') {
|
|
131
|
+
errors.push('must be an object');
|
|
132
|
+
return errors;
|
|
133
|
+
}
|
|
134
|
+
const networkAccessControl = nac;
|
|
135
|
+
// Check prefixLists if present
|
|
136
|
+
if (networkAccessControl.prefixLists !== undefined) {
|
|
137
|
+
if (!Array.isArray(networkAccessControl.prefixLists)) {
|
|
138
|
+
errors.push('prefixLists must be an array');
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
142
|
+
value: networkAccessControl.prefixLists,
|
|
143
|
+
max: 5,
|
|
144
|
+
messagePrefix: 'prefixLists ',
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Check vpcEndpoints if present
|
|
149
|
+
if (networkAccessControl.vpcEndpoints !== undefined) {
|
|
150
|
+
if (!Array.isArray(networkAccessControl.vpcEndpoints)) {
|
|
151
|
+
errors.push('vpcEndpoints must be an array');
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
155
|
+
value: networkAccessControl.vpcEndpoints,
|
|
156
|
+
max: 5,
|
|
157
|
+
messagePrefix: 'vpcEndpoints ',
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return errors;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validates the organizationRoleName property.
|
|
165
|
+
*
|
|
166
|
+
* @param roleName - The organization role name to validate
|
|
167
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
168
|
+
*
|
|
169
|
+
* Validation rules:
|
|
170
|
+
* - Must be a string
|
|
171
|
+
* - Must be between 1 and 2048 characters long
|
|
172
|
+
*/
|
|
173
|
+
function validateOrganizationRoleName(roleName) {
|
|
174
|
+
const errors = [];
|
|
175
|
+
if (typeof roleName !== 'string') {
|
|
176
|
+
errors.push('must be a string');
|
|
177
|
+
return errors; // No need to check further if not a string
|
|
178
|
+
}
|
|
179
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
180
|
+
value: roleName,
|
|
181
|
+
min: 1,
|
|
182
|
+
max: 2048,
|
|
183
|
+
}));
|
|
184
|
+
return errors;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validates the SAML assertion attributes.
|
|
188
|
+
*
|
|
189
|
+
* @param obj - The SAML assertion attributes to validate
|
|
190
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
191
|
+
*
|
|
192
|
+
* Validation rules:
|
|
193
|
+
* - Must be an object
|
|
194
|
+
* - Each attribute must be a string
|
|
195
|
+
* - Each attribute must be between 1 and 256 characters long
|
|
196
|
+
* - Valid attribute keys are: 'email', 'groups', 'login', 'name', 'org', 'role'
|
|
197
|
+
*/
|
|
198
|
+
function validateSamlAssertionAttributes(obj) {
|
|
199
|
+
const errors = [];
|
|
200
|
+
if (!obj || typeof obj !== 'object') {
|
|
201
|
+
return ['must be an object'];
|
|
202
|
+
}
|
|
203
|
+
const attributes = obj;
|
|
204
|
+
for (const key in attributes) {
|
|
205
|
+
const value = attributes[key];
|
|
206
|
+
if (value === undefined) {
|
|
207
|
+
continue; // Optional properties can be undefined
|
|
208
|
+
}
|
|
209
|
+
if (typeof value !== 'string') {
|
|
210
|
+
errors.push(`Property '${key}' must be a string`);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
214
|
+
value,
|
|
215
|
+
min: 1,
|
|
216
|
+
max: 256,
|
|
217
|
+
messagePrefix: `Property '${key}' `,
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return errors;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Validates the SAML IdP metadata.
|
|
225
|
+
*
|
|
226
|
+
* @param obj - The SAML IdP metadata to validate
|
|
227
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
228
|
+
*
|
|
229
|
+
* Validation rules:
|
|
230
|
+
* - Must be an object
|
|
231
|
+
* - url (if present) must be a string between 1 and 2048 characters long
|
|
232
|
+
* - xml (if present) must be a string
|
|
233
|
+
*/
|
|
234
|
+
function validateSamlIdpMetadata(obj) {
|
|
235
|
+
const errors = [];
|
|
236
|
+
if (!obj || typeof obj !== 'object') {
|
|
237
|
+
return ['must be an object'];
|
|
238
|
+
}
|
|
239
|
+
const metadata = obj;
|
|
240
|
+
// Check url property if present
|
|
241
|
+
if (metadata.url !== undefined) {
|
|
242
|
+
if (typeof metadata.url !== 'string') {
|
|
243
|
+
errors.push("Property 'url' must be a string");
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
247
|
+
value: metadata.url,
|
|
248
|
+
min: 1,
|
|
249
|
+
max: 2048,
|
|
250
|
+
messagePrefix: "Property 'url' ",
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Check xml property if present
|
|
255
|
+
if (metadata.xml !== undefined && typeof metadata.xml !== 'string') {
|
|
256
|
+
errors.push("Property 'xml' must be a string");
|
|
257
|
+
}
|
|
258
|
+
return errors;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Validates the SAML configuration.
|
|
262
|
+
*
|
|
263
|
+
* @param config - The SAML configuration to validate
|
|
264
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
265
|
+
*
|
|
266
|
+
* Validation rules:
|
|
267
|
+
* - Must be an object
|
|
268
|
+
* - idpMetadata is required and must be valid
|
|
269
|
+
* - assertionAtrributes (if present) must be valid
|
|
270
|
+
* - allowedOrganizations (if present) must be an array of strings with 1-256 elements
|
|
271
|
+
* - loginValidityDuration (if present) must be a positive number
|
|
272
|
+
* - roleValues (if present) must be an object with valid admin and editor arrays
|
|
273
|
+
*/
|
|
274
|
+
function validateSamlConfiguration(config) {
|
|
275
|
+
const errors = [];
|
|
276
|
+
if (!config || typeof config !== 'object') {
|
|
277
|
+
errors.push('must be an object');
|
|
278
|
+
return errors;
|
|
279
|
+
}
|
|
280
|
+
const samlConfig = config;
|
|
281
|
+
// Check idpMetadata (required)
|
|
282
|
+
if (samlConfig.idpMetadata === undefined) {
|
|
283
|
+
errors.push('idpMetadata is required in samlConfiguration');
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const idpMetadataErrors = validateSamlIdpMetadata(samlConfig.idpMetadata);
|
|
287
|
+
if (idpMetadataErrors.length > 0) {
|
|
288
|
+
errors.push(...idpMetadataErrors.map((err) => `idpMetadata: ${err}`));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Check assertionAtrributes if present
|
|
292
|
+
if (samlConfig.assertionAtrributes !== undefined) {
|
|
293
|
+
const attributeErrors = validateSamlAssertionAttributes(samlConfig.assertionAtrributes);
|
|
294
|
+
if (attributeErrors.length > 0) {
|
|
295
|
+
errors.push(...attributeErrors.map((err) => `assertionAtrributes: ${err}`));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Check allowedOrganizations if present
|
|
299
|
+
if (samlConfig.allowedOrganizations !== undefined) {
|
|
300
|
+
if (!Array.isArray(samlConfig.allowedOrganizations)) {
|
|
301
|
+
errors.push('allowedOrganizations must be an array');
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
305
|
+
value: samlConfig.allowedOrganizations,
|
|
306
|
+
min: 1,
|
|
307
|
+
max: 256,
|
|
308
|
+
messagePrefix: 'allowedOrganizations ',
|
|
309
|
+
}));
|
|
310
|
+
for (let i = 0; i < samlConfig.allowedOrganizations.length; i++) {
|
|
311
|
+
const org = samlConfig.allowedOrganizations[i];
|
|
312
|
+
if (typeof org !== 'string') {
|
|
313
|
+
errors.push(`allowedOrganizations[${i}] must be a string`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Check loginValidityDuration if present
|
|
319
|
+
if (samlConfig.loginValidityDuration !== undefined) {
|
|
320
|
+
if (typeof samlConfig.loginValidityDuration !== 'number') {
|
|
321
|
+
errors.push('loginValidityDuration must be a number');
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
errors.push(...(0, utils_1.validateNumberRange)({
|
|
325
|
+
value: samlConfig.loginValidityDuration,
|
|
326
|
+
min: 1,
|
|
327
|
+
messagePrefix: 'loginValidityDuration ',
|
|
328
|
+
}));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Check roleValues if present
|
|
332
|
+
if (samlConfig.roleValues !== undefined) {
|
|
333
|
+
if (!samlConfig.roleValues || typeof samlConfig.roleValues !== 'object') {
|
|
334
|
+
errors.push('roleValues must be an object');
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
// Check admin array if present
|
|
338
|
+
if (samlConfig.roleValues.admin !== undefined) {
|
|
339
|
+
if (!Array.isArray(samlConfig.roleValues.admin)) {
|
|
340
|
+
errors.push('roleValues.admin must be an array');
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
for (let i = 0; i < samlConfig.roleValues.admin.length; i++) {
|
|
344
|
+
if (typeof samlConfig.roleValues.admin[i] !== 'string') {
|
|
345
|
+
errors.push(`roleValues.admin[${i}] must be a string`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
349
|
+
value: samlConfig.roleValues.admin,
|
|
350
|
+
max: 256,
|
|
351
|
+
messagePrefix: 'roleValues.admin ',
|
|
352
|
+
}));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// Check editor array if present
|
|
356
|
+
if (samlConfig.roleValues.editor !== undefined) {
|
|
357
|
+
if (!Array.isArray(samlConfig.roleValues.editor)) {
|
|
358
|
+
errors.push('roleValues.editor must be an array');
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
for (let i = 0; i < samlConfig.roleValues.editor.length; i++) {
|
|
362
|
+
if (typeof samlConfig.roleValues.editor[i] !== 'string') {
|
|
363
|
+
errors.push(`roleValues.editor[${i}] must be a string`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
367
|
+
value: samlConfig.roleValues.editor,
|
|
368
|
+
max: 256,
|
|
369
|
+
messagePrefix: 'roleValues.editor ',
|
|
370
|
+
}));
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return errors;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Validates the vpcConfiguration property.
|
|
379
|
+
*
|
|
380
|
+
* @param config - The VPC configuration to validate
|
|
381
|
+
* @returns An array of error messages if validation fails, or an empty array if valid
|
|
382
|
+
*
|
|
383
|
+
* Validation rules:
|
|
384
|
+
* - Must be an object
|
|
385
|
+
* - securityGroups is required and must be an array with 1-5 items
|
|
386
|
+
* - subnets is required and must be an array with 2-6 items
|
|
387
|
+
*/
|
|
388
|
+
function validateVpcConfiguration(config) {
|
|
389
|
+
const errors = [];
|
|
390
|
+
if (!config || typeof config !== 'object') {
|
|
391
|
+
errors.push('vpcConfiguration must be an object');
|
|
392
|
+
return errors;
|
|
393
|
+
}
|
|
394
|
+
const vpcConfig = config;
|
|
395
|
+
// Check securityGroups (required)
|
|
396
|
+
if (vpcConfig.securityGroups === undefined) {
|
|
397
|
+
errors.push('securityGroups is required in vpcConfiguration');
|
|
398
|
+
}
|
|
399
|
+
else if (!Array.isArray(vpcConfig.securityGroups)) {
|
|
400
|
+
errors.push('securityGroups must be an array');
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
404
|
+
value: vpcConfig.securityGroups,
|
|
405
|
+
min: 1,
|
|
406
|
+
max: 5,
|
|
407
|
+
messagePrefix: 'securityGroups ',
|
|
408
|
+
}));
|
|
409
|
+
}
|
|
410
|
+
// Check subnets (required)
|
|
411
|
+
if (vpcConfig.subnets === undefined) {
|
|
412
|
+
errors.push('subnets is required in vpcConfiguration');
|
|
413
|
+
}
|
|
414
|
+
else if (!Array.isArray(vpcConfig.subnets)) {
|
|
415
|
+
errors.push('subnets must be an array');
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
419
|
+
value: vpcConfig.subnets,
|
|
420
|
+
min: 2,
|
|
421
|
+
max: 6,
|
|
422
|
+
messagePrefix: 'subnets ',
|
|
423
|
+
}));
|
|
424
|
+
}
|
|
425
|
+
return errors;
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi93b3Jrc3BhY2UtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLGtEQXFCQztBQVlELGtEQWNDO0FBWUQsd0RBZUM7QUFhRCxvQ0FxQkM7QUFhRCxvRUFxQ0M7QUFZRCxvRUFlQztBQWNELDBFQTRCQztBQWFELDBEQTZCQztBQWdCRCw4REEwSEM7QUFhRCw0REEyQ0M7QUE3ZEQsaURBQXVIO0FBR3ZIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFjO0lBQ2hELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUU1QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLDJDQUEyQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsNEJBQW9CLEVBQUM7UUFDbEMsS0FBSyxFQUFFLEtBQUs7UUFDWixHQUFHLEVBQUUsQ0FBQztRQUNOLEdBQUcsRUFBRSxFQUFFO0tBQ1IsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxzQkFBYyxFQUFDO1FBQzVCLEtBQUssRUFBRSxLQUFLO1FBQ1osTUFBTSxFQUFFLFVBQVU7UUFDbEIsT0FBTyxFQUFFLDhDQUE4QztLQUN4RCxDQUFDLENBQUMsQ0FBQztJQUVKLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxXQUFvQjtJQUN0RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFNUIsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxNQUFNLENBQUMsSUFB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QUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLElBQUEsMkJBQW1CLEVBQUM7WUFDckIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQ3hCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixhQUFhLEVBQUUsVUFBVTtTQUMxQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdGVBcnJheUxlbmd0aCwgdmFsaWRhdGVOdW1iZXJSYW5nZSwgdmFsaWRhdGVSZWdFeHAsIHZhbGlkYXRlU3RyaW5nTGVuZ3RoIH0gZnJvbSAnQHJvYmhhbi1jZGstbGliL3V0aWxzJztcbmltcG9ydCB7IE5ldHdvcmtBY2Nlc3NDb250cm9sLCBTYW1sQ29uZmlndXJhdGlvbiwgVnBjQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGNsaWVudFRva2VuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSBjbGllbnQgdG9rZW4gdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gKlxuICogVmFsaWRhdGlvbiBydWxlczpcbiAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycyBsb25nXG4gKiAtIE11c3QgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsaWVudFRva2VuKHRva2VuOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgfVxuXG4gIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nTGVuZ3RoKHtcbiAgICB2YWx1ZTogdG9rZW4sXG4gICAgbWluOiAxLFxuICAgIG1heDogNjQsXG4gIH0pKTtcblxuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVJlZ0V4cCh7XG4gICAgdmFsdWU6IHRva2VuLFxuICAgIHJlZ0V4cDogL15bIS1+XSokLyxcbiAgICBtZXNzYWdlOiAnbXVzdCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMnLFxuICB9KSk7XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gKiAtIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgZXJyb3JzLnB1c2goJ211c3QgYmUgYSBzdHJpbmcnKTtcbiAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gIH1cblxuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0xlbmd0aCh7XG4gICAgdmFsdWU6IGRlc2NyaXB0aW9uLFxuICAgIG1heDogMjA0OCxcbiAgfSkpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBncmFmYW5hVmVyc2lvbiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBHcmFmYW5hIHZlcnNpb24gdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gKlxuICogVmFsaWRhdGlvbiBydWxlczpcbiAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMgbG9uZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHcmFmYW5hVmVyc2lvbih2ZXJzaW9uOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICB9XG5cbiAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdMZW5ndGgoe1xuICAgIHZhbHVlOiB2ZXJzaW9uLFxuICAgIG1pbjogMSxcbiAgICBtYXg6IDI1NSxcbiAgfSkpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBuYW1lIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHdvcmtzcGFjZSBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICpcbiAqIFZhbGlkYXRpb24gcnVsZXM6XG4gKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmdcbiAqIC0gQ2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cywgdW5kZXJzY29yZXMsIGFuZCB0aWxkZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICB9XG5cbiAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSZWdFeHAoe1xuICAgIHZhbHVlOiBuYW1lLFxuICAgIHJlZ0V4cDogL15bYS16QS1aMC05XFwtLl9+XSskLyxcbiAgICBtZXNzYWdlOiAnY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cywgdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMnLFxuICB9KSk7XG5cbiAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdMZW5ndGgoe1xuICAgIHZhbHVlOiBuYW1lLFxuICAgIG1pbjogMSxcbiAgICBtYXg6IDI1NSxcbiAgfSkpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBuZXR3b3JrQWNjZXNzQ29udHJvbCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gbmFjIC0gVGhlIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICogLSBwcmVmaXhMaXN0cyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSB3aXRoIGF0IG1vc3QgNSBpdGVtc1xuICogLSB2cGNFbmRwb2ludHMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBhdCBtb3N0IDUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTmV0d29ya0FjY2Vzc0NvbnRyb2wobmFjOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFuYWMgfHwgdHlwZW9mIG5hYyAhPT0gJ29iamVjdCcpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgY29uc3QgbmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBuYWMgYXMgTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgLy8gQ2hlY2sgcHJlZml4TGlzdHMgaWYgcHJlc2VudFxuICBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdwcmVmaXhMaXN0cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlQXJyYXlMZW5ndGgoe1xuICAgICAgICB2YWx1ZTogbmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMsXG4gICAgICAgIG1heDogNSxcbiAgICAgICAgbWVzc2FnZVByZWZpeDogJ3ByZWZpeExpc3RzICcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgdnBjRW5kcG9pbnRzIGlmIHByZXNlbnRcbiAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCd2cGNFbmRwb2ludHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUFycmF5TGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cyxcbiAgICAgICAgbWF4OiA1LFxuICAgICAgICBtZXNzYWdlUHJlZml4OiAndnBjRW5kcG9pbnRzICcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG9yZ2FuaXphdGlvblJvbGVOYW1lIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSByb2xlTmFtZSAtIFRoZSBvcmdhbml6YXRpb24gcm9sZSBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICpcbiAqIFZhbGlkYXRpb24gcnVsZXM6XG4gKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIwNDggY2hhcmFjdGVycyBsb25nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU9yZ2FuaXphdGlvblJvbGVOYW1lKHJvbGVOYW1lOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiByb2xlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgfVxuXG4gIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nTGVuZ3RoKHtcbiAgICB2YWx1ZTogcm9sZU5hbWUsXG4gICAgbWluOiAxLFxuICAgIG1heDogMjA0OCxcbiAgfSkpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICogLSBFYWNoIGF0dHJpYnV0ZSBtdXN0IGJlIGEgc3RyaW5nXG4gKiAtIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nXG4gKiAtIFZhbGlkIGF0dHJpYnV0ZSBrZXlzIGFyZTogJ2VtYWlsJywgJ2dyb3VwcycsICdsb2dpbicsICduYW1lJywgJ29yZycsICdyb2xlJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyhvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBbJ211c3QgYmUgYW4gb2JqZWN0J107XG4gIH1cblxuICBjb25zdCBhdHRyaWJ1dGVzID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7IC8vIE9wdGlvbmFsIHByb3BlcnRpZXMgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaChgUHJvcGVydHkgJyR7a2V5fScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0xlbmd0aCh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMjU2LFxuICAgICAgICBtZXNzYWdlUHJlZml4OiBgUHJvcGVydHkgJyR7a2V5fScgYCxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgU0FNTCBJZFAgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBTQU1MIElkUCBtZXRhZGF0YSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICogLSB1cmwgKGlmIHByZXNlbnQpIG11c3QgYmUgYSBzdHJpbmcgYmV0d2VlbiAxIGFuZCAyMDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICogLSB4bWwgKGlmIHByZXNlbnQpIG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2FtbElkcE1ldGFkYXRhKG9iajogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIFsnbXVzdCBiZSBhbiBvYmplY3QnXTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIENoZWNrIHVybCBwcm9wZXJ0eSBpZiBwcmVzZW50XG4gIGlmIChtZXRhZGF0YS51cmwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgbWV0YWRhdGEudXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goXCJQcm9wZXJ0eSAndXJsJyBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0xlbmd0aCh7XG4gICAgICAgIHZhbHVlOiBtZXRhZGF0YS51cmwsXG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAyMDQ4LFxuICAgICAgICBtZXNzYWdlUHJlZml4OiBcIlByb3BlcnR5ICd1cmwnIFwiLFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHhtbCBwcm9wZXJ0eSBpZiBwcmVzZW50XG4gIGlmIChtZXRhZGF0YS54bWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEueG1sICE9PSAnc3RyaW5nJykge1xuICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3htbCcgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBTQU1MIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBTQU1MIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gKlxuICogVmFsaWRhdGlvbiBydWxlczpcbiAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAqIC0gaWRwTWV0YWRhdGEgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgdmFsaWRcbiAqIC0gYXNzZXJ0aW9uQXRycmlidXRlcyAoaWYgcHJlc2VudCkgbXVzdCBiZSB2YWxpZFxuICogLSBhbGxvd2VkT3JnYW5pemF0aW9ucyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggMS0yNTYgZWxlbWVudHNcbiAqIC0gbG9naW5WYWxpZGl0eUR1cmF0aW9uIChpZiBwcmVzZW50KSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXG4gKiAtIHJvbGVWYWx1ZXMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmFsaWQgYWRtaW4gYW5kIGVkaXRvciBhcnJheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2FtbENvbmZpZ3VyYXRpb24oY29uZmlnOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgY29uc3Qgc2FtbENvbmZpZyA9IGNvbmZpZyBhcyBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvLyBDaGVjayBpZHBNZXRhZGF0YSAocmVxdWlyZWQpXG4gIGlmIChzYW1sQ29uZmlnLmlkcE1ldGFkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvcnMucHVzaCgnaWRwTWV0YWRhdGEgaXMgcmVxdWlyZWQgaW4gc2FtbENvbmZpZ3VyYXRpb24nKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZHBNZXRhZGF0YUVycm9ycyA9IHZhbGlkYXRlU2FtbElkcE1ldGFkYXRhKFxuICAgICAgc2FtbENvbmZpZy5pZHBNZXRhZGF0YSxcbiAgICApO1xuICAgIGlmIChpZHBNZXRhZGF0YUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi5pZHBNZXRhZGF0YUVycm9ycy5tYXAoKGVycikgPT4gYGlkcE1ldGFkYXRhOiAke2Vycn1gKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgYXNzZXJ0aW9uQXRycmlidXRlcyBpZiBwcmVzZW50XG4gIGlmIChzYW1sQ29uZmlnLmFzc2VydGlvbkF0cnJpYnV0ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUVycm9ycyA9IHZhbGlkYXRlU2FtbEFzc2VydGlvbkF0dHJpYnV0ZXMoXG4gICAgICBzYW1sQ29uZmlnLmFzc2VydGlvbkF0cnJpYnV0ZXMsXG4gICAgKTtcbiAgICBpZiAoYXR0cmlidXRlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAuLi5hdHRyaWJ1dGVFcnJvcnMubWFwKChlcnIpID0+IGBhc3NlcnRpb25BdHJyaWJ1dGVzOiAke2Vycn1gKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgYWxsb3dlZE9yZ2FuaXphdGlvbnMgaWYgcHJlc2VudFxuICBpZiAoc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMpKSB7XG4gICAgICBlcnJvcnMucHVzaCgnYWxsb3dlZE9yZ2FuaXphdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgLi4udmFsaWRhdGVBcnJheUxlbmd0aCh7XG4gICAgICAgICAgdmFsdWU6IHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMsXG4gICAgICAgICAgbWluOiAxLFxuICAgICAgICAgIG1heDogMjU2LFxuICAgICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdhbGxvd2VkT3JnYW5pemF0aW9ucyAnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvcmcgPSBzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zW2ldO1xuICAgICAgICBpZiAodHlwZW9mIG9yZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChgYWxsb3dlZE9yZ2FuaXphdGlvbnNbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgbG9naW5WYWxpZGl0eUR1cmF0aW9uIGlmIHByZXNlbnRcbiAgaWYgKHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uICE9PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2xvZ2luVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAuLi52YWxpZGF0ZU51bWJlclJhbmdlKHtcbiAgICAgICAgICB2YWx1ZTogc2FtbENvbmZpZy5sb2dpblZhbGlkaXR5RHVyYXRpb24sXG4gICAgICAgICAgbWluOiAxLFxuICAgICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdsb2dpblZhbGlkaXR5RHVyYXRpb24gJyxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHJvbGVWYWx1ZXMgaWYgcHJlc2VudFxuICBpZiAoc2FtbENvbmZpZy5yb2xlVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXNhbWxDb25maWcucm9sZVZhbHVlcyB8fCB0eXBlb2Ygc2FtbENvbmZpZy5yb2xlVmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2hlY2sgYWRtaW4gYXJyYXkgaWYgcHJlc2VudFxuICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4pKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMuYWRtaW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5yb2xlVmFsdWVzLmFkbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbltpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYHJvbGVWYWx1ZXMuYWRtaW5bJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgLi4udmFsaWRhdGVBcnJheUxlbmd0aCh7XG4gICAgICAgICAgICAgIHZhbHVlOiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4sXG4gICAgICAgICAgICAgIG1heDogMjU2LFxuICAgICAgICAgICAgICBtZXNzYWdlUHJlZml4OiAncm9sZVZhbHVlcy5hZG1pbiAnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBlZGl0b3IgYXJyYXkgaWYgcHJlc2VudFxuICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvcikpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCgncm9sZVZhbHVlcy5lZGl0b3IgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaChgcm9sZVZhbHVlcy5lZGl0b3JbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgLi4udmFsaWRhdGVBcnJheUxlbmd0aCh7XG4gICAgICAgICAgICAgIHZhbHVlOiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yLFxuICAgICAgICAgICAgICBtYXg6IDI1NixcbiAgICAgICAgICAgICAgbWVzc2FnZVByZWZpeDogJ3JvbGVWYWx1ZXMuZWRpdG9yICcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHZwY0NvbmZpZ3VyYXRpb24gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBWUEMgY29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICogLSBzZWN1cml0eUdyb3VwcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIDEtNSBpdGVtc1xuICogLSBzdWJuZXRzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGFycmF5IHdpdGggMi02IGl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVZwY0NvbmZpZ3VyYXRpb24oY29uZmlnOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICBlcnJvcnMucHVzaCgndnBjQ29uZmlndXJhdGlvbiBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBjb25zdCB2cGNDb25maWcgPSBjb25maWcgYXMgVnBjQ29uZmlndXJhdGlvbjtcblxuICAvLyBDaGVjayBzZWN1cml0eUdyb3VwcyAocmVxdWlyZWQpXG4gIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBpcyByZXF1aXJlZCBpbiB2cGNDb25maWd1cmF0aW9uJyk7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodnBjQ29uZmlnLnNlY3VyaXR5R3JvdXBzKSkge1xuICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH0gZWxzZSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICAuLi52YWxpZGF0ZUFycmF5TGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IHZwY0NvbmZpZy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDUsXG4gICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdzZWN1cml0eUdyb3VwcyAnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIHN1Ym5ldHMgKHJlcXVpcmVkKVxuICBpZiAodnBjQ29uZmlnLnN1Ym5ldHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIGlzIHJlcXVpcmVkIGluIHZwY0NvbmZpZ3VyYXRpb24nKTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2cGNDb25maWcuc3VibmV0cykpIHtcbiAgICBlcnJvcnMucHVzaCgnc3VibmV0cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH0gZWxzZSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICAuLi52YWxpZGF0ZUFycmF5TGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IHZwY0NvbmZpZy5zdWJuZXRzLFxuICAgICAgICBtaW46IDIsXG4gICAgICAgIG1heDogNixcbiAgICAgICAgbWVzc2FnZVByZWZpeDogJ3N1Ym5ldHMgJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufSJdfQ==
|
package/lib/workspace-base.js
CHANGED
|
@@ -146,5 +146,5 @@ class WorkspaceBase extends aws_cdk_lib_1.Resource {
|
|
|
146
146
|
}
|
|
147
147
|
exports.WorkspaceBase = WorkspaceBase;
|
|
148
148
|
_a = JSII_RTTI_SYMBOL_1;
|
|
149
|
-
WorkspaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.WorkspaceBase", version: "0.0.
|
|
149
|
+
WorkspaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.WorkspaceBase", version: "0.0.66" };
|
|
150
150
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya3NwYWNlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0Q7QUFJbEQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCx3REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVU1QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx1QkFVWDtBQVZELFdBQVksdUJBQXVCO0lBQ2pDOztPQUVHO0lBQ0gsOENBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCx3Q0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBVWxDO0FBMkJEOzs7R0FHRztBQUNILElBQVksd0JBS1g7QUFMRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHVDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFLbkM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsSUFBWSxlQVVYO0FBVkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsd0RBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxzREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBVlcsZUFBZSwrQkFBZixlQUFlLFFBVTFCO0FBNEpEOztHQUVHO0FBQ0gsSUFBWSx5QkFVWDtBQVZELFdBQVkseUJBQXlCO0lBQ25DOztPQUVHO0lBQ0gsc0RBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCw4REFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBVlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFVcEM7QUFFRDs7R0FFRztBQUNILElBQVksTUF1RFg7QUF2REQsV0FBWSxNQUFNO0lBQ2hCOztPQUVHO0lBQ0gsMkJBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCwrQkFBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILCtCQUFxQixDQUFBO0lBRXJCOztPQUVHO0lBQ0gsMkJBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCwrQkFBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILGlDQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsNkNBQW1DLENBQUE7SUFFbkM7O09BRUc7SUFDSCw2Q0FBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILHlDQUErQixDQUFBO0lBRS9COztPQUVHO0lBQ0gsMkNBQWlDLENBQUE7SUFFakM7O09BRUc7SUFDSCwyREFBaUQsQ0FBQTtBQUNuRCxDQUFDLEVBdkRXLE1BQU0sc0JBQU4sTUFBTSxRQXVEakI7QUE4SEQsTUFBc0IsYUFBYyxTQUFRLHNCQUFRO0lBcUd4QyxlQUFlLENBQUMsV0FBbUI7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixPQUFPLE9BQU8sS0FBSyxDQUFDLFNBQVMsWUFBWSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGVBQWUsV0FBVyxFQUFFLENBQUM7SUFDckcsQ0FBQztJQUVTLGNBQWMsQ0FBQyxZQUFvQjtRQUMzQyxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDOztBQTVHSCxzQ0E2R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb3VyY2UsIFJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVByZWZpeExpc3QsIElTZWN1cml0eUdyb3VwLCBJU3VibmV0LCBJVnBjRW5kcG9pbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSBjYW4gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBvbmx5LCBvciB3aGV0aGVyIGl0XG4gKiBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAqIHdvcmtzcGFjZSBjYW4gYWNjZXNzLlxuICovXG5leHBvcnQgZW51bSBBY2NvdW50QWNjZXNzVHlwZSB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBBV1MgYWNjb3VudCBvbmx5LlxuICAgKi9cbiAgQ1VSUkVOVF9BQ0NPVU5UID0gJ0NVUlJFTlRfQUNDT1VOVCcsXG5cbiAgLyoqXG4gICAqIEFjY2VzcyBpcyBleHRlbmRlZCB0byB0aGUgZW50aXJlIEFXUyBvcmdhbml6YXRpb24uXG4gICAqL1xuICBPUkdBTklaQVRJT04gPSAnT1JHQU5JWkFUSU9OJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHdvcmtzcGFjZSB1c2VzIFNBTUwgMi4wLCBBV1MgSUFNIElkZW50aXR5IENlbnRlciwgb3IgYm90aCB0byBhdXRoZW50aWNhdGVcbiAqIHVzZXJzIGZvciB1c2luZyB0aGUgR3JhZmFuYSBjb25zb2xlIHdpdGhpbiBhIHdvcmtzcGFjZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ncmFmYW5hL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVdvcmtzcGFjZS5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEFXUyBTaW5nbGUgU2lnbi1PbiBhdXRoZW50aWNhdGlvbiBwcm92aWRlci5cbiAgICovXG4gIEFXU19TU08gPSAnQVdTX1NTTycsXG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IEFzc2VydGlvbiBNYXJrdXAgTGFuZ3VhZ2UgKFNBTUwpIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLlxuICAgKi9cbiAgU0FNTCA9ICdTQU1MJyxcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0FjY2Vzc0NvbnRyb2wge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcHJlZml4IGxpc3QgSURzLiBBIHByZWZpeCBsaXN0IGlzIGEgbGlzdCBvZiBDSURSIHJhbmdlcyBvZiBJUCBhZGRyZXNzZXMuIFRoZSBJUFxuICAgKiBhZGRyZXNzZXMgc3BlY2lmaWVkIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB5b3VyIHdvcmtzcGFjZS4gSWYgdGhlIGxpc3QgaXMgbm90IGluY2x1ZGVkIGluIHRoZVxuICAgKiBjb25maWd1cmF0aW9uIChwYXNzZWQgYW4gZW1wdHkgYXJyYXkpIHRoZW4gbm8gSVAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGVcbiAgICogd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIG9mIDUgcHJlZml4IGxpc3RzIGFsbG93ZWQuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXhMaXN0cz86IElQcmVmaXhMaXN0W107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIEFtYXpvbiBWUEMgZW5kcG9pbnQgSURzIGZvciB0aGUgd29ya3NwYWNlLiBZb3UgY2FuIGNyZWF0ZSBWUEMgZW5kcG9pbnRzIHRvIHlvdXJcbiAgICogQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2UgZm9yIGFjY2VzcyBmcm9tIHdpdGhpbiBhIFZQQy4gSWYgYSBOZXR3b3JrQWNjZXNzQ29uZmlndXJhdGlvblxuICAgKiBpcyBzcGVjaWZpZWQgdGhlbiBvbmx5IFZQQyBlbmRwb2ludHMgc3BlY2lmaWVkIGhlcmUgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSB3b3Jrc3BhY2UuIElmXG4gICAqIHlvdSBwYXNzIGluIGFuIGVtcHR5IGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gbm8gVlBDcyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTWF4aW11bSBvZiA1IFZQQyBlbmRwb2ludHMgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0VuZHBvaW50cz86IElWcGNFbmRwb2ludFtdO1xufVxuXG4vKipcbiAqIFRoZSBBV1Mgbm90aWZpY2F0aW9uIGNoYW5uZWxzIHRoYXQgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBjYW4gYXV0b21hdGljYWxseSBjcmVhdGUgSUFNIHJvbGVzIGFuZFxuICogcGVybWlzc2lvbnMgZm9yLCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHVzZSB0aGVzZSBjaGFubmVscy5cbiAqL1xuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uRGVzdGluYXRpb25zIHtcbiAgLyoqXG4gICAqIEFtYXpvbiBTaW1wbGUgTm90aWZpY2F0aW9uIFNlcnZpY2UgKFNOUykgYXMgbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9uLlxuICAgKi9cbiAgU05TID0gJ1NOUycsXG59XG5cbi8qKlxuICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAqIGNvbnNvbGUsIHRoZW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgdGhlIElBTSByb2xlcyBhbmQgcHJvdmlzaW9ucyB0aGVcbiAqIHBlcm1pc3Npb25zIHRoYXQgdGhlIHdvcmtzcGFjZSBuZWVkcyB0byB1c2UgQVdTIGRhdGEgc291cmNlcyBhbmQgbm90aWZpY2F0aW9uIGNoYW5uZWxzLlxuICpcbiAqIElmIHRoaXMgaXMgQ1VTVE9NRVJfTUFOQUdFRCwgeW91IG11c3QgbWFuYWdlIHRob3NlIHJvbGVzIGFuZCBwZXJtaXNzaW9ucyB5b3Vyc2VsZi5cblxuICogSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSB3b3Jrc3BhY2UgaW4gYSBtZW1iZXIgYWNjb3VudCBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHRoYXQgYWNjb3VudCBpc1xuICogbm90IGEgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRoZSB3b3Jrc3BhY2UgdG8gYWNjZXNzIGRhdGEgc291cmNlcyBpblxuICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gKi9cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlcyB7XG4gIC8qKlxuICAgKiBDdXN0b21lci1tYW5hZ2VkIHBlcm1pc3Npb25zIHdoZXJlIHlvdSBtYW5hZ2UgdXNlciBhY2Nlc3MgdG8gR3JhZmFuYS5cbiAgICovXG4gIENVU1RPTUVSX01BTkFHRUQgPSAnQ1VTVE9NRVJfTUFOQUdFRCcsXG5cbiAgLyoqXG4gICAqIFNlcnZpY2UtbWFuYWdlZCBwZXJtaXNzaW9ucyB3aGVyZSBBV1MgbWFuYWdlcyB1c2VyIGFjY2VzcyB0byBHcmFmYW5hLlxuICAgKi9cbiAgU0VSVklDRV9NQU5BR0VEID0gJ1NFUlZJQ0VfTUFOQUdFRCcsXG59XG5cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIElkUCBhc3NlcnRpb24gYXJlIHRvIGJlIHVzZWQgdG8gZGVmaW5lXG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGUgSWRQIHRvIHVzZSB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYSBzdHJpbmcgd2l0aCBsZW5ndGggYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSBlbWFpbCBuYW1lcyBmb3IgU0FNTCB1c2Vycy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBlbWFpbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgZnVsbCBcImZyaWVuZGx5XCIgbmFtZXNcbiAgICogZm9yIHVzZXIgZ3JvdXBzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGxvZ2luIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2luPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHVzZSBhcyB0aGUgdXNlciBmdWxsIFwiZnJpZW5kbHlcIiBuYW1lc1xuICAgKiBmb3IgU0FNTCB1c2Vycy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHVzZSBhcyB0aGUgdXNlciBmdWxsIFwiZnJpZW5kbHlcIiBuYW1lc1xuICAgKiBmb3IgdGhlIHVzZXJzJyBvcmdhbml6YXRpb25zLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgcm9sZXMuXG4gICAqXG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpZGVudGl0eSBwcm92aWRlciAoSWRQKSBtZXRhZGF0YSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaWRlbnRpdHlcbiAqIHByb3ZpZGVyIHdpdGggdGhpcyB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbElkcE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIElkUCBtZXRhZGF0YS5cbiAgICpcbiAgICogTXVzdCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bGwgSWRQIG1ldGFkYXRhLCBpbiBYTUwgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgeG1sPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYXJyYXlzIHRoYXQgbWFwIGdyb3VwIG5hbWVzIGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB0aGUgR3JhZmFuYSBBZG1pblxuICogYW5kIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbWxSb2xlVmFsdWVzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBncm91cHMgZnJvbSB0aGUgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlIHRvIGdyYW50IHRoZSBHcmFmYW5hIEFkbWluIHJvbGUgdG8uXG4gICAqXG4gICAqIE1heGltdW0gb2YgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRtaW4/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdyb3VwcyBmcm9tIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgdG8gZ3JhbnQgdGhlIEdyYWZhbmEgRWRpdG9yIHJvbGUgdG8uXG4gICAqXG4gICAqIE1heGltdW0gb2YgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSWYgdGhlIHdvcmtzcGFjZSB1c2VzIFNBTUwsIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBtYXAgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcyB0byB3b3Jrc3BhY2VcbiAqIHVzZXIgaW5mb3JtYXRpb24gYW5kIGRlZmluZSB3aGljaCBncm91cHMgaW4gdGhlIGFzc2VydGlvbiBhdHRyaWJ1dGUgYXJlIHRvIGhhdmUgdGhlIEFkbWluIGFuZFxuICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdHMgd2hpY2ggb3JnYW5pemF0aW9ucyBkZWZpbmVkIGluIHRoZSBTQU1MIGFzc2VydGlvbiBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIEFtYXpvbiBNYW5hZ2VkXG4gICAqIEdyYWZhbmEgd29ya3NwYWNlLiBJZiB0aGlzIGlzIGVtcHR5LCBhbGwgb3JnYW5pemF0aW9ucyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBoYXZlIGFjY2Vzcy5cbiAgICpcbiAgICogTXVzdCBoYXZlIGJldHdlZW4gMSBhbmQgMjU2IGVsZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZE9yZ2FuaXphdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHdoaWNoIGF0dHJpYnV0ZXMgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIGFyZSB0byBiZSB1c2VkIHRvIGRlZmluZVxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGF0IElkUCB0byB1c2UgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2VydGlvbkF0cnJpYnV0ZXM/OiBTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcztcblxuICAvKipcbiAgICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgKElkUCkgbWV0YWRhdGEgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGlkZW50aXR5XG4gICAqIHByb3ZpZGVyIHdpdGggdGhpcyB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkIGZvciBTQU1MIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBpZHBNZXRhZGF0YTogU2FtbElkcE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyBhIHNpZ24tb24gc2Vzc2lvbiBieSBhIFNBTUwgdXNlciBpcyB2YWxpZCwgYmVmb3JlIHRoZSB1c2VyIGhhcyB0byBzaWduIG9uIGFnYWluLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9naW5WYWxpZGl0eUR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIGFycmF5cyB0aGF0IG1hcCBncm91cCBuYW1lcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdGhlIEdyYWZhbmEgQWRtaW5cbiAgICogYW5kIEVkaXRvciByb2xlcyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZVZhbHVlcz86IFNhbWxSb2xlVmFsdWVzO1xufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgQW1hem9uIEVDMiBzZWN1cml0eSBncm91cHMgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBWUEMgZm9yIHlvdXIgR3JhZmFuYVxuICAgKiB3b3Jrc3BhY2UgdG8gY29ubmVjdC4gRHVwbGljYXRlcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQXJyYXkgTWVtYmVyczogTWluaW11bSBudW1iZXIgb2YgMSBpdGVtcy4gTWF4aW11bSBudW1iZXIgb2YgNSBpdGVtcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZm9yIFZQQyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM6IElTZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIEFtYXpvbiBFQzIgc3VibmV0cyBjcmVhdGVkIGluIHRoZSBBbWF6b24gVlBDIGZvciB5b3VyIEdyYWZhbmEgd29ya3NwYWNlIHRvXG4gICAqIGNvbm5lY3QuIER1cGxpY2F0ZXMgbm90IGFsbG93ZWQuXG4gICAqXG4gICAqIEFycmF5IE1lbWJlcnM6IE1pbmltdW0gbnVtYmVyIG9mIDIgaXRlbXMuIE1heGltdW0gbnVtYmVyIG9mIDYgaXRlbXMuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZvciBWUEMgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM6IElTdWJuZXRbXTtcbn1cblxuLyoqXG4gKiBTdGF0dXMgb2YgU0FNTCBjb25maWd1cmF0aW9uIGZvciBhIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgZW51bSBTYW1sQ29uZmlndXJhdGlvblN0YXR1c2VzIHtcbiAgLyoqXG4gICAqIFNBTUwgaXMgY29uZmlndXJlZCBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIENPTkZJR1VSRUQgPSAnQ09ORklHVVJFRCcsXG5cbiAgLyoqXG4gICAqIFNBTUwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBOT1RfQ09ORklHVVJFRCA9ICdOT1RfQ09ORklHVVJFRCcsXG59XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYWN0aXZlIGFuZCByZWFkeSB0byB1c2UuXG4gICAqL1xuICBBQ1RJVkUgPSAnQUNUSVZFJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGJlaW5nIGNyZWF0ZWQuXG4gICAqL1xuICBDUkVBVElORyA9ICdDUkVBVElORycsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyBkZWxldGVkLlxuICAgKi9cbiAgREVMRVRJTkcgPSAnREVMRVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2Ugb3BlcmF0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBGQUlMRUQgPSAnRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGJlaW5nIHVwZGF0ZWQuXG4gICAqL1xuICBVUERBVElORyA9ICdVUERBVElORycsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyB1cGdyYWRlZC5cbiAgICovXG4gIFVQR1JBRElORyA9ICdVUEdSQURJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgZGVsZXRpb24gaGFzIGZhaWxlZC5cbiAgICovXG4gIERFTEVUSU9OX0ZBSUxFRCA9ICdERUxFVElPTl9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgY3JlYXRpb24gaGFzIGZhaWxlZC5cbiAgICovXG4gIENSRUFUSU9OX0ZBSUxFRCA9ICdDUkVBVElPTl9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgdXBkYXRlIGhhcyBmYWlsZWQuXG4gICAqL1xuICBVUERBVEVfRkFJTEVEID0gJ1VQREFURV9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgdXBncmFkZSBoYXMgZmFpbGVkLlxuICAgKi9cbiAgVVBHUkFERV9GQUlMRUQgPSAnVVBHUkFERV9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBMaWNlbnNlIHJlbW92YWwgaGFzIGZhaWxlZC5cbiAgICovXG4gIExJQ0VOU0VfUkVNT1ZBTF9GQUlMRUQgPSAnTElDRU5TRV9SRU1PVkFMX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBHcmFmYW5hIHdvcmtzcGFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElXb3Jrc3BhY2UgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXJcbiAgICogaXQgY2FuIGFsc28gYWNjZXNzIEFXUyByZXNvdXJjZXMgaW4gb3RoZXIgYWNjb3VudHMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uLiBJZiB0aGlzIGlzXG4gICAqIE9SR0FOSVpBVElPTiwgdGhlIE9yZ2FuaXphdGlvbmFsVW5pdHMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBvcmdhbml6YXRpb25hbCB1bml0cyB0aGVcbiAgICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyczogQXV0aGVudGljYXRpb25Qcm92aWRlcnNbXTtcblxuICAvKipcbiAgICogQSB1bmlxdWUsIGNhc2Utc2Vuc2l0aXZlLCB1c2VyLXByb3ZpZGVkIGlkZW50aWZpZXIgdG8gZW5zdXJlIHRoZSBpZGVtcG90ZW5jeSBvZiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEFXUyBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCB0byBoYXZlIElBTSByb2xlcyBhbmQgcGVybWlzc2lvbnNcbiAgICogY3JlYXRlZCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHJlYWQgZGF0YSBmcm9tIHRoZXNlIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFXUyBjb25zb2xlLCBhbmQgdGhlXG4gICAqIHBlcm1pc3Npb25UeXBlIGlzIFNFUlZJQ0VfTUFOQUdFRC5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM/OiBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnNbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmdhbml6YXRpb25hbCB1bml0cyB0aGF0IHRoaXMgd29ya3NwYWNlIGlzIGFsbG93ZWQgdG8gdXNlIGRhdGEgc291cmNlcyBmcm9tLCBpZlxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBpbiBhbiBhY2NvdW50IHRoYXQgaXMgcGFydCBvZiBhbiBvcmdhbml6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aHJvdWdoIE9yZ2FuaXphdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBsdWdpbiBhZG1pbmlzdHJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSB3b3Jrc3BhY2UuIFNldHRpbmcgdG8gdHJ1ZSBhbGxvd3Mgd29ya3NwYWNlXG4gICAqIGFkbWlucyB0byBpbnN0YWxsLCB1bmluc3RhbGwsIGFuZCB1cGRhdGUgcGx1Z2lucyBmcm9tIHdpdGhpbiB0aGUgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHdvcmtzcGFjZXMgdGhhdCBzdXBwb3J0IEdyYWZhbmEgdmVyc2lvbiA5IG9yIG5ld2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRoZSBBV1MgcmVzb3VyY2VzIHRoYXQgdGhlIHdvcmtzcGFjZSB3aWxsIHZpZXcgZGF0YVxuICAgKiBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvbj86IFNhbWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgSUFNIHJvbGVzIHRvIGJlIHVzZWQgZm9yXG4gICAqIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gQW1hem9uIFZQQyB0aGF0IGNvbnRhaW5zIGRhdGEgc291cmNlcyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyB3b3Jrc3BhY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3Jrc3BhY2VCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJV29ya3NwYWNlIHtcblxuICAvKipcbiAgICogVGhlIGFjY291bnQgYWNjZXNzIHR5cGUgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXJzIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHRva2VuIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBzb3VyY2VzIG9mIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIG5ldHdvcmsgYWNjZXNzIHRvIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpZmljYXRpb24gZGVzdGluYXRpb25zIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoYXQgdGhpcyB3b3Jrc3BhY2UgaXMgYWxsb3dlZCB0byB1c2UgZGF0YSBzb3VyY2VzIGZyb20sIGlmXG4gICAqIHRoaXMgd29ya3NwYWNlIGlzIGluIGFuIGFjY291bnQgdGhhdCBpcyBwYXJ0IG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aHJvdWdoIE9yZ2FuaXphdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgb3JnYW5pemF0aW9uUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9uIHR5cGUgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHdvcmtzcGFjZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHdvcmtzcGFjZUFybjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBnZXRXb3Jrc3BhY2VBcm4od29ya3NwYWNlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICByZXR1cm4gYGFybjoke3N0YWNrLnBhcnRpdGlvbn06Z3JhZmFuYToke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTp3b3Jrc3BhY2VzLyR7d29ya3NwYWNlSWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXb3Jrc3BhY2VJZCh3b3Jrc3BhY2VBcm46IHN0cmluZykge1xuICAgIHJldHVybiB3b3Jrc3BhY2VBcm4uc3Vic3RyaW5nKHdvcmtzcGFjZUFybi5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cbn0iXX0=
|