@openziti/ziti-console-lib 0.5.0 → 0.5.1
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/assets/styles/global.scss +126 -1
- package/assets/styles/ziti.css +7 -0
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +5 -2
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
- package/esm2022/lib/features/data-table/data-table.component.mjs +7 -7
- package/esm2022/lib/features/data-table/data-table.service.mjs +5 -5
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +12 -9
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -2
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +13 -11
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +7 -8
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +8 -1
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +83 -23
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +32 -11
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +13 -11
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +14 -12
- package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +4 -1
- package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +5 -4
- package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +3 -3
- package/esm2022/lib/models/config.mjs +2 -1
- package/esm2022/lib/models/edge-router-policy.mjs +2 -1
- package/esm2022/lib/models/service-edge-router-policy.mjs +2 -1
- package/esm2022/lib/models/service-policy.mjs +2 -1
- package/esm2022/lib/services/settings-service.class.mjs +2 -2
- package/esm2022/lib/shared/list-page-component.class.mjs +2 -2
- package/fesm2022/openziti-ziti-console-lib.mjs +158 -62
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/custom-tags/custom-tags.component.d.ts +3 -2
- package/lib/features/custom-tags/custom-tags.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +7 -0
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +3 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +5 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper.component.d.ts.map +1 -1
- package/lib/features/wrappers/zac-wrapper.service.d.ts +1 -0
- package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
- package/lib/models/config.d.ts +1 -0
- package/lib/models/config.d.ts.map +1 -1
- package/lib/models/edge-router-policy.d.ts +1 -0
- package/lib/models/edge-router-policy.d.ts.map +1 -1
- package/lib/models/service-edge-router-policy.d.ts +1 -0
- package/lib/models/service-edge-router-policy.d.ts.map +1 -1
- package/lib/models/service-policy.d.ts +1 -0
- package/lib/models/service-policy.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -52,6 +52,7 @@ class ServiceFormService {
|
|
|
52
52
|
this.configs = [];
|
|
53
53
|
this.configTypes = [];
|
|
54
54
|
this.filteredConfigs = [];
|
|
55
|
+
this.configsLoading = false;
|
|
55
56
|
this.showCfgPreviewOption = false;
|
|
56
57
|
this.selectedConfigName = '';
|
|
57
58
|
this.selectedConfigTypeId = '';
|
|
@@ -86,6 +87,9 @@ class ServiceFormService {
|
|
|
86
87
|
this.associatedServicePolicyNames = [];
|
|
87
88
|
this.associatedServicePoliciesMap = {};
|
|
88
89
|
this.associatedServicePoliciesTotal = 0;
|
|
90
|
+
this.associatedConfigsLoading = false;
|
|
91
|
+
this.associatedServicePoliciesLoading = false;
|
|
92
|
+
this.associatedTerminatorsLoading = false;
|
|
89
93
|
this.headerComponentParams = {
|
|
90
94
|
filterType: 'TEXTINPUT',
|
|
91
95
|
enableSorting: true
|
|
@@ -159,6 +163,7 @@ class ServiceFormService {
|
|
|
159
163
|
getAssociatedServicePolicies() {
|
|
160
164
|
const paging = this.zitiService.DEFAULT_PAGING;
|
|
161
165
|
paging.total = 5;
|
|
166
|
+
this.associatedServicePoliciesLoading = true;
|
|
162
167
|
this.zitiService.getSubdata('services', this.formData.id, 'service-policies', paging).then((result) => {
|
|
163
168
|
this.associatedServicePolicies = result.data;
|
|
164
169
|
this.associatedServicePoliciesTotal = result.meta?.pagination.totalCount || 0;
|
|
@@ -196,9 +201,12 @@ class ServiceFormService {
|
|
|
196
201
|
skipSort: true
|
|
197
202
|
});
|
|
198
203
|
}
|
|
204
|
+
}).finally(() => {
|
|
205
|
+
this.associatedServicePoliciesLoading = false;
|
|
199
206
|
});
|
|
200
207
|
}
|
|
201
208
|
getAssociatedTerminators() {
|
|
209
|
+
this.associatedTerminatorsLoading = true;
|
|
202
210
|
this.zitiService.getSubdata('services', this.formData.id, 'terminators').then((result) => {
|
|
203
211
|
this.associatedTerminators = result.data;
|
|
204
212
|
this.associatedTerminatorsTotal = result.meta?.pagination.totalCount || 0;
|
|
@@ -226,6 +234,8 @@ class ServiceFormService {
|
|
|
226
234
|
skipSort: true
|
|
227
235
|
});
|
|
228
236
|
}
|
|
237
|
+
}).finally(() => {
|
|
238
|
+
this.associatedTerminatorsLoading = false;
|
|
229
239
|
});
|
|
230
240
|
}
|
|
231
241
|
previewConfig(configName, router) {
|
|
@@ -269,10 +279,17 @@ class ServiceFormService {
|
|
|
269
279
|
this.configTypes = result.data;
|
|
270
280
|
});
|
|
271
281
|
}
|
|
272
|
-
getConfigs() {
|
|
273
|
-
|
|
282
|
+
getConfigs(filters = [], page = 1) {
|
|
283
|
+
this.configsLoading = true;
|
|
284
|
+
const paging = cloneDeep(this.paging);
|
|
285
|
+
if (filters.length > 0) {
|
|
286
|
+
paging.noSearch = false;
|
|
287
|
+
}
|
|
288
|
+
return this.zitiService.get('configs', paging, filters).then((result) => {
|
|
274
289
|
this.configs = result.data;
|
|
275
290
|
this.configTypeChanged();
|
|
291
|
+
}).finally(() => {
|
|
292
|
+
this.configsLoading = false;
|
|
276
293
|
});
|
|
277
294
|
}
|
|
278
295
|
getRouters() {
|
|
@@ -281,6 +298,7 @@ class ServiceFormService {
|
|
|
281
298
|
});
|
|
282
299
|
}
|
|
283
300
|
getAssociatedConfigs() {
|
|
301
|
+
this.associatedConfigsLoading = true;
|
|
284
302
|
this.zitiService.getSubdata('services', this.formData.id, 'configs').then((result) => {
|
|
285
303
|
this.associatedConfigs = result.data;
|
|
286
304
|
this.associatedConfigsMap = {};
|
|
@@ -289,6 +307,8 @@ class ServiceFormService {
|
|
|
289
307
|
cfg.href = '/configs/' + cfg.id;
|
|
290
308
|
return cfg;
|
|
291
309
|
});
|
|
310
|
+
}).finally(() => {
|
|
311
|
+
this.associatedConfigsLoading = false;
|
|
292
312
|
});
|
|
293
313
|
}
|
|
294
314
|
createConfig(configData) {
|
|
@@ -310,6 +330,13 @@ class ServiceFormService {
|
|
|
310
330
|
this.filteredConfigs = this.configs.filter((config) => {
|
|
311
331
|
return config.configTypeId === this.selectedConfigTypeId;
|
|
312
332
|
});
|
|
333
|
+
const defaultOptions = [
|
|
334
|
+
{
|
|
335
|
+
name: 'Add a New Config',
|
|
336
|
+
id: 'add-new'
|
|
337
|
+
}
|
|
338
|
+
];
|
|
339
|
+
this.filteredConfigs = [...defaultOptions, ...this.filteredConfigs];
|
|
313
340
|
this.configTypes.forEach((configType) => {
|
|
314
341
|
if (this.selectedConfigTypeId === configType.id) {
|
|
315
342
|
this.selectedConfigType = configType;
|
|
@@ -419,15 +446,9 @@ class ServiceFormService {
|
|
|
419
446
|
}
|
|
420
447
|
}
|
|
421
448
|
removeConfig(configToRemove) {
|
|
422
|
-
|
|
423
|
-
this.configs.forEach((availableConfig) => {
|
|
424
|
-
if (availableConfig.name === configToRemove.name) {
|
|
425
|
-
configIdToRemove = availableConfig.id;
|
|
426
|
-
}
|
|
427
|
-
});
|
|
428
|
-
if (configIdToRemove) {
|
|
449
|
+
if (configToRemove.id) {
|
|
429
450
|
const newConfigs = filter(this.formData.configs, configId => {
|
|
430
|
-
return configId !==
|
|
451
|
+
return configId !== configToRemove.id;
|
|
431
452
|
});
|
|
432
453
|
const newConfigItems = filter(this.addedConfigs, (config) => {
|
|
433
454
|
return config.name !== configToRemove.name;
|
|
@@ -542,4 +563,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
542
563
|
type: Inject,
|
|
543
564
|
args: [SERVICE_EXTENSION_SERVICE]
|
|
544
565
|
}] }, { type: i2.SchemaService }, { type: i3.ValidationService }, { type: i4.Router }]; } });
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFTbEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQU0sMkJBQTJCLENBQUMsQ0FBQztBQUU5RixNQUdhLGtCQUFrQjtJQTJFM0IsWUFDcUMsZUFBZ0MsRUFDOUIsV0FBNEIsRUFDdkQsY0FBOEIsRUFDSSxVQUE0QixFQUM5RCxTQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsTUFBYztRQU5XLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0ksZUFBVSxHQUFWLFVBQVUs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QUFDO1NBQzNDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDOytHQTdpQlEsa0JBQWtCLGtCQTRFZixnQkFBZ0IsYUFDaEIsaUJBQWlCLDJDQUVqQix5QkFBeUI7bUhBL0U1QixrQkFBa0IsY0FGZixNQUFNOztTQUVULGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNkVRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7aXNFbXB0eSwgaXNTdHJpbmcsIGtleXMsIHNvbWUsIGRlZmVyLCBjbG9uZURlZXAsIGZpbHRlciwgaXNOaWwsIGlzQm9vbGVhbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvc2VydmljZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IGR5bmFtaWMgZnJvbSBcImFqdi9kaXN0L3ZvY2FidWxhcmllcy9keW5hbWljXCI7XG5pbXBvcnQge1NjaGVtYVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zY2hlbWEuc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0NvbmZpZ0VkaXRvckNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2NvbmZpZy1lZGl0b3IvY29uZmlnLWVkaXRvci5jb21wb25lbnRcIjtcbmltcG9ydCB7VmFsaWRhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50XG59IGZyb20gXCIuLi8uLi9kYXRhLXRhYmxlL2NvbHVtbi1oZWFkZXJzL3RhYmxlLWNvbHVtbi1kZWZhdWx0L3RhYmxlLWNvbHVtbi1kZWZhdWx0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxOYW1lQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZGF0YS10YWJsZS9jZWxscy90YWJsZS1jZWxsLW5hbWUvdGFibGUtY2VsbC1uYW1lLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRScpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VGb3JtU2VydmljZSB7XG5cbiAgICBwYWdpbmcgPSB7XG4gICAgICAgIGZpbHRlcjogXCJcIixcbiAgICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICAgIG9yZGVyOiBcImFzY1wiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICAgIHNvcnQ6IFwibmFtZVwiLFxuICAgICAgICB0b3RhbDogMTAwXG4gICAgfVxuXG4gICAgZm9ybURhdGE6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkQ29uZmlnOiBhbnkgPSB7fTtcbiAgICBjb25maWdEYXRhOiBhbnk7XG4gICAgc2VsZWN0ZWRDb25maWdJZDogYW55ID0gJyc7XG4gICAgY29uZmlnczogYW55ID0gW107XG4gICAgY29uZmlnVHlwZXM6IGFueSA9IFtdO1xuICAgIGZpbHRlcmVkQ29uZmlnczogYW55ID0gW107XG4gICAgc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSBmYWxzZTtcbiAgICBzZWxlY3RlZENvbmZpZ05hbWU6IGFueSA9ICcnO1xuICAgIHNlbGVjdGVkQ29uZmlnVHlwZUlkOiBhbnkgPSAnJztcbiAgICBzZWxlY3RlZENvbmZpZ1R5cGU6IGFueSA9IHt9O1xuICAgIGFkZGVkQ29uZmlnczogYW55ID0gW107XG4gICAgYWRkZWRUZXJtaW5hdG9yTmFtZXM6IGFueSA9IFtdO1xuICAgIGFkZGVkVGVybWluYXRvcnM6IGFueSA9IFtdO1xuICAgIGNvbmZpZ0pzb25WaWV3ID0gZmFsc2U7XG4gICAgaGlkZUNvbmZpZ0pTT04gPSBmYWxzZTtcbiAgICBjb25maWdFcnJvcnM6IGFueSA9IHt9O1xuICAgIHRlcm1pbmF0b3JFcnJvcnM6IGFueSA9IHt9O1xuICAgIG5ld0NvbmZpZ05hbWU6IHN0cmluZyA9ICcnO1xuICAgIHRlcm1pbmF0b3JIb3N0OiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9yUG9ydDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRTY2hlbWE6IGFueSA9IHt9O1xuICAgIGl0ZW1zOiBhbnkgPSBbXTtcbiAgICByb3V0ZXJzOiBhbnkgPSBbXTtcbiAgICBjb25maWdEYXRhTGFiZWwgPSAnQ29uZmlndXJhdGlvbiBGb3JtJztcbiAgICBhdHRhY2hMYWJlbCA9ICdDcmVhdGUgYW5kIEF0dGFjaCc7XG4gICAgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBzZWxlY3RlZFJvdXRlcklkOiBzdHJpbmcgPSAnJztcbiAgICBzZWxlY3RlZFJvdXRlcjogYW55O1xuICAgIHNlbGVjdGVkQmluZGluZ0lkOiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9yUHJvdG9jb2wgPSAndWRwJztcbiAgICBzYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBhc3NvY2lhdGVkQ29uZmlnczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZENvbmZpZ3NNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JOYW1lczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzTWFwOiBhbnkgPSB7fTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnNUb3RhbCA9IDA7XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY3lOYW1lczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc01hcDogYW55ID0ge307XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID0gMDtcblxuICAgIGhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHtcbiAgICAgICAgZmlsdGVyVHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWVcbiAgICB9O1xuXG4gICAgbENvbG9yQXJyYXkgPSBbXG4gICAgICAgICd3aGl0ZScsXG4gICAgICAgICd3aGl0ZScsXG4gICAgICAgICd3aGl0ZScsXG4gICAgXVxuXG4gICAgYkNvbG9yQXJyYXkgPSBbXG4gICAgICAgICd2YXIoLS1mb3JtQmFzZSknLFxuICAgICAgICAndmFyKC0tZm9ybUdyb3VwKScsXG4gICAgICAgICd2YXIoLS1mb3JtU3ViR3JvdXApJ1xuICAgIF1cblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uZmlnRWRpdG9yOiBDb25maWdFZGl0b3JDb21wb25lbnQ7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UpcHJpdmF0ZSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNjaGVtYVN2YzogU2NoZW1hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgICApIHt9XG5cbiAgICByZXNldEZvcm1EYXRhKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID0gJyc7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5jb25maWdEYXRhID0ge307XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgdGhpcy5uZXdDb25maWdOYW1lID0gJyc7XG4gICAgfVxuXG4gICAgc2F2ZShmb3JtRGF0YSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGlzVXBkYXRlID0gIWlzRW1wdHkoZm9ybURhdGEuaWQpO1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmdldFNlcnZpY2VEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKTtcbiAgICAgICAgbGV0IHByb207XG4gICAgICAgIGlmIChpc1VwZGF0ZSkge1xuICAgICAgICAgICAgcHJvbSA9IHRoaXMueml0aVNlcnZpY2UucGF0Y2goJ3NlcnZpY2VzJywgZGF0YSwgZm9ybURhdGEuaWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvbSA9IHRoaXMueml0aVNlcnZpY2UucG9zdCgnc2VydmljZXMnLCBkYXRhLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9tLnRoZW4oYXN5bmMgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlzVXBkYXRlID8gZm9ybURhdGEuaWQgOiAocmVzdWx0Py5kYXRhPy5pZCB8fCByZXN1bHQ/LmlkKTtcbiAgICAgICAgICAgIGxldCBzdmMgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgaWQsICcnKS50aGVuKChzdmNEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2Y0RhdGEuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0U2VydmljZS5mb3JtRGF0YVNhdmVkKHN2YykudGhlbigoZm9ybVNhdmVkUmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1TYXZlZFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ZjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBgU2VydmljZXMgJHtpc1VwZGF0ZSA/ICdVcGRhdGVkJyA6ICdDcmVhdGVkJ31gLFxuICAgICAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IFNlcnZpY2U6ICR7Zm9ybURhdGEubmFtZX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ZjO1xuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChyZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgfWVsc2UgaWYgKHJlc3A/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIFNlcnZpY2VgLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhyb3cgcmVzcDtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkU2VydmljZVBvbGljaWVzKCkge1xuICAgICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLnppdGlTZXJ2aWNlLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICBwYWdpbmcudG90YWwgPSA1O1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3NlcnZpY2UtcG9saWNpZXMnLCBwYWdpbmcpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID0gcmVzdWx0Lm1ldGE/LnBhZ2luYXRpb24udG90YWxDb3VudCB8fCAwO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLm1hcCgocG9saWN5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTWFwW3BvbGljeS5uYW1lXSA9IHBvbGljeTtcbiAgICAgICAgICAgICAgICBwb2xpY3kuaHJlZiA9ICcvc2VydmljZS1wb2xpY2llcy8nICsgcG9saWN5LmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2xpY3kubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc1RvdGFsID4gNSkge1xuICAgICAgICAgICAgICAgIGxldCByb2xlQXR0cmlidXRlcyA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhLnJvbGVBdHRyaWJ1dGVzKTtcblxuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gcm9sZUF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclMjMnICsgYXR0cmlidXRlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzLnB1c2goJyU0MCcgKyB0aGlzLmZvcm1EYXRhLmlkKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsUGFyYW0gPSAnJztcbiAgICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5mb3JFYWNoKChwYXJhbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW0gKz0gJywnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHVybFBhcmFtICs9IHBhcmFtXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoRmlsdGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JZDogJ3NlcnZpY2VSb2xlcycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb2xlQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdAJyArIHRoaXMuZm9ybURhdGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZTogJ1NlcnZpY2UgQXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBVFRSSUJVVEUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoX2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShbc2VhcmNoRmlsdGVyXSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cgbW9yZSByZXN1bHRzLi4uJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy9zZXJ2aWNlLXBvbGljaWVzP3NlcnZpY2VSb2xlcz0nICsgdXJsUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmtDbGFzczogJ3ByZXZpZXctbW9yZS1yZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgLy9pY29uQ2xhc3M6ICdpY29uLW9wZW4nLFxuICAgICAgICAgICAgICAgICAgICBza2lwU29ydDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKSB7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAndGVybWluYXRvcnMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5tYXAoKHRlcm1pbmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFt0ZXJtaW5hdG9yLmlkXSA9IHRlcm1pbmF0b3IuYmluZGluZyArICc6ICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLm5hbWUgPSB0ZXJtaW5hdG9yLnJvdXRlci5uYW1lICsgJzogICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLmhyZWYgPSAnL3Rlcm1pbmF0b3JzLycgKyB0ZXJtaW5hdG9yLmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hdG9yLmJpbmRpbmcgKyAnOiAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc1RvdGFsID4gNSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSWQ6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybURhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZvcm1EYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWU6ICdTZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICc9J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlYXJjaF9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoW3NlYXJjaEZpbHRlcl0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cgbW9yZSByZXN1bHRzLi4uJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy90ZXJtaW5hdG9ycz9zZXJ2aWNlPScgKyB0aGlzLmZvcm1EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBsaW5rQ2xhc3M6ICdwcmV2aWV3LW1vcmUtcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgIC8vaWNvbkNsYXNzOiAnaWNvbi1vcGVuJyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNvcnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlld0NvbmZpZyhjb25maWdOYW1lLCByb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5zaG93Q2ZnUHJldmlld09wdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZmlnID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjb25maWdOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL2NvbmZpZ3MvJyArIHNlbGVjdGVkQ29uZmlnLmlkXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2aWV3UG9saWN5KHBvbGljeU5hbWUsIHJvdXRlcikge1xuICAgICAgICB0aGlzLnNob3dDZmdQcmV2aWV3T3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQb2xpY3kgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXBbcG9saWN5TmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9zZXJ2aWNlLXBvbGljaWVzLycgKyBzZWxlY3RlZFBvbGljeS5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlld1Rlcm1pbmF0b3IocG9saWN5TmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRlcm1pbmF0b3IgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFtwb2xpY3lOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL3Rlcm1pbmF0b3JzLycgKyBzZWxlY3RlZFRlcm1pbmF0b3IuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkZFRlcm1pbmF0b3JzKHNlcnZpY2VJZCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLmFkZGVkVGVybWluYXRvcnMuZm9yRWFjaCgodGVybWluYXRvcikgPT4ge1xuICAgICAgICAgICAgdGVybWluYXRvci5zZXJ2aWNlID0gc2VydmljZUlkXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMueml0aVNlcnZpY2UucG9zdCgndGVybWluYXRvcnMnLCB0ZXJtaW5hdG9yKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IGtleXMoc2F2ZU1vZGVsKTtcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2F2ZU1vZGVsO1xuICAgIH1cblxuICAgIGdldENvbmZpZ1R5cGVzKCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlnLXR5cGVzJywgdGhpcy5wYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb25maWdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCB0aGlzLnBhZ2luZywgW10pLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVHlwZUNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Um91dGVycygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2VkZ2Utcm91dGVycycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkQ29uZmlncygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdjb25maWdzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlncy5tYXAoKGNmZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbY2ZnLm5hbWVdID0gY2ZnO1xuICAgICAgICAgICAgICAgIGNmZy5ocmVmID0gJy9jb25maWdzLycgKyBjZmcuaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNmZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDb25maWcoY29uZmlnRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5wb3N0KCdjb25maWdzJywgY29uZmlnRGF0YSwgdHJ1ZSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KS5jYXRjaCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGxldCBtc2c7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcocmVzcG9uc2U/LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIG1zZyA9IHJlc3BvbnNlPy5lcnJvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbXNnID0gcmVzcG9uc2U/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIE5ldyBDb25maWdgLFxuICAgICAgICAgICAgICAgIG1zZyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWdUeXBlQ2hhbmdlZChyZXNldERhdGE/KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb25maWdzID0gdGhpcy5jb25maWdzLmZpbHRlcigoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmNvbmZpZ1R5cGVJZCA9PT0gdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29uZmlnVHlwZXMuZm9yRWFjaCgoY29uZmlnVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPT09IGNvbmZpZ1R5cGUuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZSA9IGNvbmZpZ1R5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkICE9PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICFpc0VtcHR5KHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQpID8gJ2FkZC1uZXcnIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VkKHJlc2V0RGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlZEFkZGVkQ29uZmlncygpIHtcbiAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5jb25maWdzLmZvckVhY2goKGF2YWlsYWJsZUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2ZnRXhpc3RzID0gc29tZSh0aGlzLmZvcm1EYXRhLmNvbmZpZ3MsIGNvbmZpZ0lkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlQ29uZmlnLmlkID09IGNvbmZpZ0lkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2ZnRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQ29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIGF2YWlsYWJsZUNvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKGF2YWlsYWJsZUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbLi4udGhpcy5hZGRlZENvbmZpZ3NdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRvZ2dsZUpTT05WaWV3KCkge1xuICAgICAgICB0aGlzLmNvbmZpZ0pzb25WaWV3ID0gIXRoaXMuY29uZmlnSnNvblZpZXc7XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YUxhYmVsID0gdGhpcy5jb25maWdKc29uVmlldyA/ICdKU09OIENvbmZpZ3VyYXRpb24nIDogJ0NvbmZpZ3VyYXRpb24gRm9ybSc7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ0pzb25WaWV3KSB7XG4gICAgICAgICAgICAvL3RoaXMuY29uZmlnU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYXR0YWNoQ29uZmlnKGFkZGVkQ29uZmlnSWQpIHtcbiAgICAgICAgbGV0IGNvbmZpZ0lkO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAnYWRkLW5ldycpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUNvbmZpZygpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgVmFsaWRhdGluZyBDb25maWdgLFxuICAgICAgICAgICAgICAgICAgICAnVGhlIGVudGVyZWQgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBQbGVhc2UgdXBkYXRlIG1pc3NpbmcvaW52YWxpZCBmaWVsZHMgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWc6IGFueSA9IHtcbiAgICAgICAgICAgICAgICBjb25maWdUeXBlSWQ6IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQsXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb25maWdEYXRhLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmV3Q29uZmlnTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3Q29uZmlnLmRhdGEgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnJlZGVmaW5lT2JqZWN0KG5ld0NvbmZpZy5kYXRhKTtcbiAgICAgICAgICAgIGNvbmZpZ0lkID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maWcobmV3Q29uZmlnKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZnID0gcmVzdWx0Py5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuaWQgPSByZXN1bHQ/LmlkID8gcmVzdWx0LmlkIDogcmVzdWx0Py5kYXRhPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtuZXdDb25maWcubmFtZV0gPSB7ZGF0YTogbmV3Q29uZmlnLmRhdGEsIG5hbWU6IG5ld0NvbmZpZy5uYW1lLCBjb25maWdUeXBlSWQ6IG5ld0NvbmZpZy5jb25maWdUeXBlSWR9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JGaWVsZCA9IHJlc3VsdD8uZXJyb3I/LmVycm9yPy5jYXVzZT8uZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShlcnJvckZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbZXJyb3JGaWVsZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlc3VsdD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBDb25maWdgLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGNvbmZpZ0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLnB1c2goY29uZmlnSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzLnB1c2gobmV3Q29uZmlnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb25maWdzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYE5ldyBDb25maWcgQXR0YWNoZWRgLFxuICAgICAgICAgICAgICAgICAgICBgTmV3IENvbmZpZyAke3RoaXMubmV3Q29uZmlnTmFtZX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2VgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NvbmZpZ05hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdFZGl0b3I/LmdldENvbmZpZ0RhdGFGcm9tRm9ybSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb25maWdBZGRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLmZvckVhY2goKGNvbmZpZ0lkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ0lkID09PSBhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY29uZmlnQWRkZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3Q29uZmlnO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pZCA9PT0gYWRkZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuaHJlZiA9ICcvY29uZmlncy8nICsgbmV3Q29uZmlnLmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdzLnB1c2goYWRkZWRDb25maWdJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICAnSW5mbycsXG4gICAgICAgICAgICAgICAgICAgIGBDb25maWcgQWxyZWFkeSBBdHRhY2hlZGAsXG4gICAgICAgICAgICAgICAgICAgICdDb25maWcgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZCB0byB0aGlzIHNlcnZpY2UnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUNvbmZpZyhjb25maWdUb1JlbW92ZSkge1xuICAgICAgICBsZXQgY29uZmlnSWRUb1JlbW92ZTtcbiAgICAgICAgdGhpcy5jb25maWdzLmZvckVhY2goKGF2YWlsYWJsZUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUNvbmZpZy5uYW1lID09PSBjb25maWdUb1JlbW92ZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnSWRUb1JlbW92ZSA9IGF2YWlsYWJsZUNvbmZpZy5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb25maWdJZFRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWdzID0gZmlsdGVyKHRoaXMuZm9ybURhdGEuY29uZmlncywgY29uZmlnSWQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdJZCAhPT0gY29uZmlnSWRUb1JlbW92ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnSXRlbXMgPSBmaWx0ZXIodGhpcy5hZGRlZENvbmZpZ3MsIChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm5hbWUgIT09IGNvbmZpZ1RvUmVtb3ZlLm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncyA9IG5ld0NvbmZpZ3M7XG4gICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IG5ld0NvbmZpZ0l0ZW1zO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ3ByZXZpZXcnICYmIGNvbmZpZ1RvUmVtb3ZlLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29uZmlnQ2hhbmdlZChyZXNldERhdGEgPSB0cnVlKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZENvbmZpZzogYW55ID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHJlc2V0RGF0YSA/IHVuZGVmaW5lZCA6IHRoaXMuY29uZmlnRGF0YTtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGxldCBhdHRhY2hMYWJlbCA9ICdBdHRhY2ggdG8gU2VydmljZSc7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdwcmV2aWV3Jykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNjaGVtYSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2Uuc2NoZW1hKHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlLnNjaGVtYSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAnYWRkLW5ldycpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWEgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnNjaGVtYSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZS5zY2hlbWEpO1xuICAgICAgICAgICAgYXR0YWNoTGFiZWwgPSAnQ3JlYXRlIGFuZCBBdHRhY2gnO1xuICAgICAgICAgICAgLy90aGlzLmNyZWF0ZUZvcm0oZHluYW1pY0Zvcm0pO1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gY29uZmlnLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGF0YSA9IHNlbGVjdGVkQ29uZmlnPy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkICE9PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSBjbG9uZURlZXAoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnVwZGF0ZUNvbmZpZ0RhdGEoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hMYWJlbCA9IGF0dGFjaExhYmVsO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmVycm9ycyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVDb25maWcoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnRXJyb3JzID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRWRpdG9yPy52YWxpZGF0ZUNvbmZpZygpO1xuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLm5ld0NvbmZpZ05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0Vycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmNvbmZpZ0Vycm9ycyk7XG4gICAgfVxuXG4gICAgX2FwaURhdGEgPSB7fTtcbiAgICBzZXQgYXBpRGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuX2FwaURhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIGdldCBhcGlEYXRhKCkge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmZvcm1EYXRhPy5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXM6IHRoaXMuZm9ybURhdGE/LnJvbGVBdHRyaWJ1dGVzIHx8IFtdLFxuICAgICAgICAgICAgY29uZmlnczogdGhpcy5mb3JtRGF0YT8uY29uZmlncyB8fCBbXSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25SZXF1aXJlZDogdGhpcy5mb3JtRGF0YT8uZW5jcnlwdGlvblJlcXVpcmVkLFxuICAgICAgICAgICAgdGVybWluYXRvclN0cmF0ZWd5OiB0aGlzLmZvcm1EYXRhPy50ZXJtaW5hdG9yU3RyYXRlZ3kgfHwgJycsXG4gICAgICAgICAgICB0YWdzOiB0aGlzLmZvcm1EYXRhPy50YWdzIHx8IHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgb3BlblRlcm1pbmF0b3JFZGl0Rm9ybShpZCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Rlcm1pbmF0b3IvJyArIGlkXSlcbiAgICB9XG5cbiAgICBzb3J0KHNvcnRCeSwgb3JkZXJpbmc9ICdhc2MnKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0b3JTb3J0ID0ge3NvcnRCeSwgb3JkZXJpbmd9O1xuICAgICAgICB0aGlzLmdldEFzc29jaWF0ZWRUZXJtaW5hdG9ycygpO1xuICAgIH1cblxuICAgIGhhc1NlbGVjdGVkVGV4dCgpIHtcbiAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dD8ubGVuZ3RoID4gMDtcbiAgICB9XG59Il19
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS9zZXJ2aWNlLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFtQixNQUFNLFFBQVEsQ0FBQztBQUNqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFTbEMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQU0sMkJBQTJCLENBQUMsQ0FBQztBQUU5RixNQUdhLGtCQUFrQjtJQStFM0IsWUFDcUMsZUFBZ0MsRUFDOUIsV0FBNEIsRUFDdkQsY0FBOEIsRUFDSSxVQUE0QixFQUM5RCxTQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsTUFBYztRQU5XLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0ksZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDOUQsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFwRjFCLFdBQU0sR0FBRztZQUNMLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsR0FBRztTQUNiLENBQUE7UUFFRCxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBRXpCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLG9CQUFlLEdBQVEsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3Qix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBQy9CLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2Qix5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUM1QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUM1QixtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUN6QixVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFDakIscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRTlCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUMvQiwwQkFBcUIsR0FBUSxFQUFFLENBQUM7UUFDaEMsOEJBQXlCLEdBQVEsRUFBRSxDQUFDO1FBQ3BDLDZCQUF3QixHQUFRLEVBQUUsQ0FBQztRQUNuQywrQkFBMEIsR0FBRyxDQUFDLENBQUM7UUFDL0IsOEJBQXlCLEdBQVEsRUFBRSxDQUFDO1FBQ3BDLGlDQUE0QixHQUFRLEVBQUUsQ0FBQztRQUN2QyxpQ0FBNEIsR0FBUSxFQUFFLENBQUM7UUFDdkMsbUNBQThCLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyxxQ0FBZ0MsR0FBRyxLQUFLLENBQUM7UUFDekMsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBRXJDLDBCQUFxQixHQUFHO1lBQ3BCLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJO1NBQ3RCLENBQUM7UUFFRixnQkFBVyxHQUFHO1lBQ1YsT0FBTztZQUNQLE9BQU87WUFDUCxPQUFPO1NBQ1YsQ0FBQTtRQUVELGdCQUFXLEdBQUc7WUFDVixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLHFCQUFxQjtTQUN4QixDQUFBO1FBRUQsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXNkaEQsYUFBUSxHQUFHLEVBQUUsQ0FBQztJQTNjWCxDQUFDO0lBRUosYUFBYTtRQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRO1FBQ1QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEU7YUFBTTtZQUNILElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFXLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0UsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFvQixFQUFFLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ2xCLE9BQU8sR0FBRyxDQUFDO2lCQUNkO2dCQUNELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUNoQyxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUM5QyxnQkFBZ0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsYUFBYSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQy9FLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sR0FBRyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZCxJQUFJLFlBQVksQ0FBQztZQUNqQixJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ3BDLFlBQVksR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDMUMsWUFBWSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7YUFDcEQ7aUJBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDNUIsWUFBWSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNILFlBQVksR0FBRywyQkFBMkIsQ0FBQzthQUM5QztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUNoQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixZQUFZLENBQ2YsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsNEJBQTRCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3ZHLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzdDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUN4RCxNQUFNLENBQUMsSUFBSSxHQUFHLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLDhCQUE4QixHQUFHLENBQUMsRUFBRTtnQkFDekMsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRTdELGNBQWMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQzlDLE9BQU8sS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ1gsUUFBUSxJQUFJLEdBQUcsQ0FBQztxQkFDbkI7b0JBQ0QsUUFBUSxJQUFJLEtBQUssQ0FBQTtnQkFDckIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixLQUFLLEVBQUUsY0FBYztvQkFDckIsS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQy9CLFVBQVUsRUFBRSxvQkFBb0I7b0JBQ2hDLElBQUksRUFBRSxXQUFXO2lCQUNwQixDQUFDO2dCQUNGLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztvQkFDaEMsSUFBSSxFQUFFLHNCQUFzQjtvQkFDNUIsSUFBSSxFQUFFLGlDQUFpQyxHQUFHLFFBQVE7b0JBQ2xELFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLHlCQUF5QjtvQkFDekIsUUFBUSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxLQUFLLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQzFGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDbkcsVUFBVSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDM0UsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxVQUFVLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLFlBQVksR0FBRztvQkFDakIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQ3pCLFVBQVUsRUFBRSxTQUFTO29CQUNyQixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEdBQUc7aUJBQ1osQ0FBQztnQkFDRixZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7b0JBQzVCLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLElBQUksRUFBRSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2hELFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLHlCQUF5QjtvQkFDekIsUUFBUSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQVUsRUFBRSxNQUFNO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTztJQUNYLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU07UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU87SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU07UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTztJQUNYLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBUztRQUNwQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3pDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO1lBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVE7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdCLFFBQU8sSUFBSSxFQUFFO2dCQUNUO29CQUNJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUMxQyxHQUFHLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RFLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xCLElBQUksR0FBRyxDQUFDO1lBQ1IsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixHQUFHLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQzthQUN6QjtpQkFBTTtnQkFDSCxHQUFHLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUMvQztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUNoQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLDJCQUEyQixFQUMzQixHQUFHLENBQ04sQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQVU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xELE9BQU8sTUFBTSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGNBQWMsR0FBRztZQUNuQjtnQkFDSSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixFQUFFLEVBQUUsU0FBUzthQUNoQjtTQUNKLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO2FBQ3hDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNoRjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNyRCxPQUFPLGVBQWUsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsZUFBZSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztRQUN6RixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIseUNBQXlDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYTtRQUM1QixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsT0FBTyxFQUNQLE9BQU8sRUFDUCx5QkFBeUIsRUFDekIsMkZBQTJGLENBQzlGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFRO2dCQUNuQixZQUFZLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtnQkFDdkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDM0IsQ0FBQTtZQUNELFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkUsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUM7Z0JBQ3pCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3pELFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBQyxDQUFDO2dCQUMvSCxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNkLE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUN4QztnQkFDRCxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO2dCQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsT0FBTyxFQUNQLE9BQU8sRUFDUCx1QkFBdUIsRUFDdkIsWUFBWSxDQUNmLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsU0FBUyxFQUNULFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsY0FBYyxJQUFJLENBQUMsYUFBYSwrQ0FBK0MsQ0FDbEYsQ0FBQztnQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNDLE9BQU87YUFDVjtTQUNKO2FBQU07WUFDSCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtvQkFDNUIsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDdEI7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsSUFBSSxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLGFBQWEsRUFBRTt3QkFDN0IsU0FBUyxHQUFHLE1BQU0sQ0FBQztxQkFDdEI7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDOUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzthQUM3QjtpQkFBTTtnQkFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsU0FBUyxFQUNULE1BQU0sRUFDTix5QkFBeUIsRUFDekIsa0RBQWtELENBQ3JELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDekM7U0FDSjtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsY0FBYztRQUN2QixJQUFJLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN4RCxPQUFPLFFBQVEsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDeEQsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN4RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2FBQ2xDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSTtRQUNoQyxJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQztRQUNULElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZGO2FBQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BGLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztZQUNsQywrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDNUI7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFO29CQUNyQyxjQUFjLEdBQUcsTUFBTSxDQUFDO2lCQUMzQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxHQUFHLGNBQWMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0gsS0FBSyxDQUFDLEdBQUcsRUFBRTtvQkFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBQ0QsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFHRCxJQUFJLE9BQU8sQ0FBQyxJQUFJO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE1BQU0sSUFBSSxHQUFRO1lBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDL0IsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxJQUFJLEVBQUU7WUFDbkQsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUU7WUFDckMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxrQkFBa0I7WUFDckQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsSUFBSSxFQUFFO1lBQzNELElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ2xDLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRSxLQUFLO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBbGtCUSxrQkFBa0Isa0JBZ0ZmLGdCQUFnQixhQUNoQixpQkFBaUIsMkNBRWpCLHlCQUF5QjttSEFuRjVCLGtCQUFrQixjQUZmLE1BQU07O1NBRVQsa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFpRlEsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc1N0cmluZywga2V5cywgc29tZSwgZGVmZXIsIGNsb25lRGVlcCwgZmlsdGVyLCBpc05pbCwgaXNCb29sZWFufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9zZXJ2aWNlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgZHluYW1pYyBmcm9tIFwiYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2R5bmFtaWNcIjtcbmltcG9ydCB7U2NoZW1hU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NjaGVtYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Q29uZmlnRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29uZmlnLWVkaXRvci9jb25maWctZWRpdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnRcbn0gZnJvbSBcIi4uLy4uL2RhdGEtdGFibGUvY29sdW1uLWhlYWRlcnMvdGFibGUtY29sdW1uLWRlZmF1bHQvdGFibGUtY29sdW1uLWRlZmF1bHQuY29tcG9uZW50XCI7XG5pbXBvcnQge1RhYmxlQ2VsbE5hbWVDb21wb25lbnR9IGZyb20gXCIuLi8uLi9kYXRhLXRhYmxlL2NlbGxzL3RhYmxlLWNlbGwtbmFtZS90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50XCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG5leHBvcnQgY29uc3QgU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZUZvcm1TZXJ2aWNlIHtcblxuICAgIHBhZ2luZyA9IHtcbiAgICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgICBub1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgb3JkZXI6IFwiYXNjXCIsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHNlYXJjaE9uOiBcIm5hbWVcIixcbiAgICAgICAgc29ydDogXCJuYW1lXCIsXG4gICAgICAgIHRvdGFsOiAxMDBcbiAgICB9XG5cbiAgICBmb3JtRGF0YTogYW55ID0ge307XG4gICAgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgIGNvbmZpZ0RhdGE6IGFueTtcbiAgICBzZWxlY3RlZENvbmZpZ0lkOiBhbnkgPSAnJztcbiAgICBjb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdUeXBlczogYW55ID0gW107XG4gICAgZmlsdGVyZWRDb25maWdzOiBhbnkgPSBbXTtcbiAgICBjb25maWdzTG9hZGluZyA9IGZhbHNlO1xuICAgIHNob3dDZmdQcmV2aWV3T3B0aW9uID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRDb25maWdOYW1lOiBhbnkgPSAnJztcbiAgICBzZWxlY3RlZENvbmZpZ1R5cGVJZDogYW55ID0gJyc7XG4gICAgc2VsZWN0ZWRDb25maWdUeXBlOiBhbnkgPSB7fTtcbiAgICBhZGRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFkZGVkVGVybWluYXRvck5hbWVzOiBhbnkgPSBbXTtcbiAgICBhZGRlZFRlcm1pbmF0b3JzOiBhbnkgPSBbXTtcbiAgICBjb25maWdKc29uVmlldyA9IGZhbHNlO1xuICAgIGhpZGVDb25maWdKU09OID0gZmFsc2U7XG4gICAgY29uZmlnRXJyb3JzOiBhbnkgPSB7fTtcbiAgICB0ZXJtaW5hdG9yRXJyb3JzOiBhbnkgPSB7fTtcbiAgICBuZXdDb25maWdOYW1lOiBzdHJpbmcgPSAnJztcbiAgICB0ZXJtaW5hdG9ySG9zdDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclBvcnQ6IHN0cmluZyA9ICcnO1xuICAgIHNlbGVjdGVkU2NoZW1hOiBhbnkgPSB7fTtcbiAgICBpdGVtczogYW55ID0gW107XG4gICAgcm91dGVyczogYW55ID0gW107XG4gICAgY29uZmlnRGF0YUxhYmVsID0gJ0NvbmZpZ3VyYXRpb24gRm9ybSc7XG4gICAgYXR0YWNoTGFiZWwgPSAnQ3JlYXRlIGFuZCBBdHRhY2gnO1xuICAgIGVycm9yczogYW55ID0ge307XG4gICAgc2VsZWN0ZWRSb3V0ZXJJZDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRSb3V0ZXI6IGFueTtcbiAgICBzZWxlY3RlZEJpbmRpbmdJZDogc3RyaW5nID0gJyc7XG4gICAgdGVybWluYXRvclByb3RvY29sID0gJ3VkcCc7XG4gICAgc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZENvbmZpZ3M6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRDb25maWdzTWFwOiBhbnkgPSB7fTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcDogYW55ID0ge307XG4gICAgYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSAwO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXA6IGFueSA9IHt9O1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNUb3RhbCA9IDA7XG4gICAgYXNzb2NpYXRlZENvbmZpZ3NMb2FkaW5nID0gZmFsc2U7XG4gICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBhc3NvY2lhdGVkVGVybWluYXRvcnNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBoZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7XG4gICAgICAgIGZpbHRlclR5cGU6ICdURVhUSU5QVVQnLFxuICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlXG4gICAgfTtcblxuICAgIGxDb2xvckFycmF5ID0gW1xuICAgICAgICAnd2hpdGUnLFxuICAgICAgICAnd2hpdGUnLFxuICAgICAgICAnd2hpdGUnLFxuICAgIF1cblxuICAgIGJDb2xvckFycmF5ID0gW1xuICAgICAgICAndmFyKC0tZm9ybUJhc2UpJyxcbiAgICAgICAgJ3ZhcigtLWZvcm1Hcm91cCknLFxuICAgICAgICAndmFyKC0tZm9ybVN1Ykdyb3VwKSdcbiAgICBdXG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbmZpZ0VkaXRvcjogQ29uZmlnRWRpdG9yQ29tcG9uZW50O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChTRVJWSUNFX0VYVEVOU0lPTl9TRVJWSUNFKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFTdmM6IFNjaGVtYVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7fVxuXG4gICAgcmVzZXRGb3JtRGF0YSgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ05hbWUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzTWFwID0ge307XG4gICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMubmV3Q29uZmlnTmFtZSA9ICcnO1xuICAgIH1cblxuICAgIHNhdmUoZm9ybURhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRTZXJ2aWNlRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBhdGNoKCdzZXJ2aWNlcycsIGRhdGEsIGZvcm1EYXRhLmlkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLnppdGlTZXJ2aWNlLnBvc3QoJ3NlcnZpY2VzJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbS50aGVuKGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpc1VwZGF0ZSA/IGZvcm1EYXRhLmlkIDogKHJlc3VsdD8uZGF0YT8uaWQgfHwgcmVzdWx0Py5pZCk7XG4gICAgICAgICAgICBsZXQgc3ZjID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIGlkLCAnJykudGhlbigoc3ZjRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmNEYXRhLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dFNlcnZpY2UuZm9ybURhdGFTYXZlZChzdmMpLnRoZW4oKGZvcm1TYXZlZFJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU2F2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYFNlcnZpY2VzICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBTZXJ2aWNlOiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2YztcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbikge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgIH1lbHNlIGlmIChyZXNwPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5tZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBTZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcygpIHtcbiAgICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy56aXRpU2VydmljZS5ERUZBVUxUX1BBR0lORztcbiAgICAgICAgcGFnaW5nLnRvdGFsID0gNTtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAnc2VydmljZS1wb2xpY2llcycsIHBhZ2luZykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXMubWFwKChwb2xpY3kpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXBbcG9saWN5Lm5hbWVdID0gcG9saWN5O1xuICAgICAgICAgICAgICAgIHBvbGljeS5ocmVmID0gJy9zZXJ2aWNlLXBvbGljaWVzLycgKyBwb2xpY3kuaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGljeS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzVG90YWwgPiA1KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJvbGVBdHRyaWJ1dGVzID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEucm9sZUF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyUyMycgKyBhdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcm9sZUF0dHJpYnV0ZXMucHVzaCgnJTQwJyArIHRoaXMuZm9ybURhdGEuaWQpO1xuICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbSA9ICcnO1xuICAgICAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbSArPSAnLCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW0gKz0gcGFyYW1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hGaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiAnc2VydmljZVJvbGVzJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvbGVBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0AnICsgdGhpcy5mb3JtRGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiAnU2VydmljZSBBdHRyaWJ1dGVzJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FUVFJJQlVURSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hfZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KFtzZWFyY2hGaWx0ZXJdKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdyBtb3JlIHJlc3VsdHMuLi4nLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiAnL3NlcnZpY2UtcG9saWNpZXM/c2VydmljZVJvbGVzPScgKyB1cmxQYXJhbSxcbiAgICAgICAgICAgICAgICAgICAgbGlua0NsYXNzOiAncHJldmlldy1tb3JlLXJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICAgICAvL2ljb25DbGFzczogJ2ljb24tb3BlbicsXG4gICAgICAgICAgICAgICAgICAgIHNraXBTb3J0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnc2VydmljZXMnLCB0aGlzLmZvcm1EYXRhLmlkLCAndGVybWluYXRvcnMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkVGVybWluYXRvcnMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFRlcm1pbmF0b3JzVG90YWwgPSByZXN1bHQubWV0YT8ucGFnaW5hdGlvbi50b3RhbENvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5tYXAoKHRlcm1pbmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFt0ZXJtaW5hdG9yLmlkXSA9IHRlcm1pbmF0b3IuYmluZGluZyArICc6ICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLm5hbWUgPSB0ZXJtaW5hdG9yLnJvdXRlci5uYW1lICsgJzogICAgICAgJyArIHRlcm1pbmF0b3IuYWRkcmVzcztcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yLmhyZWYgPSAnL3Rlcm1pbmF0b3JzLycgKyB0ZXJtaW5hdG9yLmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hdG9yLmJpbmRpbmcgKyAnOiAgICAgICcgKyB0ZXJtaW5hdG9yLmFkZHJlc3M7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc1RvdGFsID4gNSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSWQ6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybURhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmZvcm1EYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWU6ICdTZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICc9J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlYXJjaF9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoW3NlYXJjaEZpbHRlcl0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cgbW9yZSByZXN1bHRzLi4uJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy90ZXJtaW5hdG9ycz9zZXJ2aWNlPScgKyB0aGlzLmZvcm1EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICBsaW5rQ2xhc3M6ICdwcmV2aWV3LW1vcmUtcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgIC8vaWNvbkNsYXNzOiAnaWNvbi1vcGVuJyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNvcnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlld0NvbmZpZyhjb25maWdOYW1lLCByb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5zaG93Q2ZnUHJldmlld09wdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZmlnID0gdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjb25maWdOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL2NvbmZpZ3MvJyArIHNlbGVjdGVkQ29uZmlnLmlkXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2aWV3UG9saWN5KHBvbGljeU5hbWUsIHJvdXRlcikge1xuICAgICAgICB0aGlzLnNob3dDZmdQcmV2aWV3T3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQb2xpY3kgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXNNYXBbcG9saWN5TmFtZV07XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbJy9zZXJ2aWNlLXBvbGljaWVzLycgKyBzZWxlY3RlZFBvbGljeS5pZF0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlld1Rlcm1pbmF0b3IocG9saWN5TmFtZSwgcm91dGVyKSB7XG4gICAgICAgIHRoaXMuc2hvd0NmZ1ByZXZpZXdPcHRpb24gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRlcm1pbmF0b3IgPSB0aGlzLmFzc29jaWF0ZWRUZXJtaW5hdG9yc01hcFtwb2xpY3lOYW1lXTtcbiAgICAgICAgcm91dGVyLm5hdmlnYXRlKFsnL3Rlcm1pbmF0b3JzLycgKyBzZWxlY3RlZFRlcm1pbmF0b3IuaWRdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkZFRlcm1pbmF0b3JzKHNlcnZpY2VJZCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLmFkZGVkVGVybWluYXRvcnMuZm9yRWFjaCgodGVybWluYXRvcikgPT4ge1xuICAgICAgICAgICAgdGVybWluYXRvci5zZXJ2aWNlID0gc2VydmljZUlkXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMueml0aVNlcnZpY2UucG9zdCgndGVybWluYXRvcnMnLCB0ZXJtaW5hdG9yKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IGtleXMoc2F2ZU1vZGVsKTtcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2F2ZU1vZGVsO1xuICAgIH1cblxuICAgIGdldENvbmZpZ1R5cGVzKCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlnLXR5cGVzJywgdGhpcy5wYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb25maWdzKGZpbHRlcnMgPSBbXSwgcGFnZSA9IDEpIHtcbiAgICAgICAgdGhpcy5jb25maWdzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IGNsb25lRGVlcCh0aGlzLnBhZ2luZyk7XG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb25maWdUeXBlQ2hhbmdlZCgpO1xuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Um91dGVycygpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2VkZ2Utcm91dGVycycsIHRoaXMucGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVycyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkQ29uZmlncygpIHtcbiAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ2NvbmZpZ3MnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSB0aGlzLmFzc29jaWF0ZWRDb25maWdzLm1hcCgoY2ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc01hcFtjZmcubmFtZV0gPSBjZmc7XG4gICAgICAgICAgICAgICAgY2ZnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIGNmZy5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkQ29uZmlnc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29uZmlnKGNvbmZpZ0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCgnY29uZmlncycsIGNvbmZpZ0RhdGEsIHRydWUpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3BvbnNlPy5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBtc2cgPSByZXNwb25zZT8uZXJyb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1zZyA9IHJlc3BvbnNlPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5yZWFzb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBOZXcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlnVHlwZUNoYW5nZWQocmVzZXREYXRhPykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IHRoaXMuY29uZmlncy5maWx0ZXIoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5jb25maWdUeXBlSWQgPT09IHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWRkIGEgTmV3IENvbmZpZycsXG4gICAgICAgICAgICAgICAgaWQ6ICdhZGQtbmV3J1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29uZmlncyA9IFsuLi5kZWZhdWx0T3B0aW9ucywgLi4udGhpcy5maWx0ZXJlZENvbmZpZ3NdO1xuICAgICAgICB0aGlzLmNvbmZpZ1R5cGVzLmZvckVhY2goKGNvbmZpZ1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkID09PSBjb25maWdUeXBlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUgPSBjb25maWdUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAhaXNFbXB0eSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkKSA/ICdhZGQtbmV3JyA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZChyZXNldERhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZWRBZGRlZENvbmZpZ3MoKSB7XG4gICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gW107XG4gICAgICAgIHRoaXMuY29uZmlncy5mb3JFYWNoKChhdmFpbGFibGVDb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNmZ0V4aXN0cyA9IHNvbWUodGhpcy5mb3JtRGF0YS5jb25maWdzLCBjb25maWdJZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbmZpZy5pZCA9PSBjb25maWdJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNmZ0V4aXN0cykge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUNvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBhdmFpbGFibGVDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChhdmFpbGFibGVDb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkZWRDb25maWdzID0gWy4uLnRoaXMuYWRkZWRDb25maWdzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0b2dnbGVKU09OVmlldygpIHtcbiAgICAgICAgdGhpcy5jb25maWdKc29uVmlldyA9ICF0aGlzLmNvbmZpZ0pzb25WaWV3O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGFMYWJlbCA9IHRoaXMuY29uZmlnSnNvblZpZXcgPyAnSlNPTiBDb25maWd1cmF0aW9uJyA6ICdDb25maWd1cmF0aW9uIEZvcm0nO1xuICAgICAgICBpZiAodGhpcy5jb25maWdKc29uVmlldykge1xuICAgICAgICAgICAgLy90aGlzLmNvbmZpZ1N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGF0dGFjaENvbmZpZyhhZGRlZENvbmZpZ0lkKSB7XG4gICAgICAgIGxldCBjb25maWdJZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25maWcoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIFZhbGlkYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSBtaXNzaW5nL2ludmFsaWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlnVHlwZUlkOiB0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZUlkLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29uZmlnRGF0YSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5ld0NvbmZpZ05hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NvbmZpZy5kYXRhID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5yZWRlZmluZU9iamVjdChuZXdDb25maWcuZGF0YSk7XG4gICAgICAgICAgICBjb25maWdJZCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlnKG5ld0NvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmZyA9IHJlc3VsdD8uZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmlkID0gcmVzdWx0Py5pZCA/IHJlc3VsdC5pZCA6IHJlc3VsdD8uZGF0YT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5ocmVmID0gJy9jb25maWdzLycgKyBuZXdDb25maWcuaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZENvbmZpZ3NNYXBbbmV3Q29uZmlnLm5hbWVdID0ge2RhdGE6IG5ld0NvbmZpZy5kYXRhLCBuYW1lOiBuZXdDb25maWcubmFtZSwgY29uZmlnVHlwZUlkOiBuZXdDb25maWcuY29uZmlnVHlwZUlkfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yRmllbGQgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LmZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkoZXJyb3JGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRXJyb3JzW2Vycm9yRmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXN1bHQ/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBgRXJyb3IgQ3JlYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShjb25maWdJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGNvbmZpZ0lkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncy5wdXNoKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBbLi4udGhpcy5hZGRlZENvbmZpZ3NdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlncygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBOZXcgQ29uZmlnIEF0dGFjaGVkYCxcbiAgICAgICAgICAgICAgICAgICAgYE5ldyBDb25maWcgJHt0aGlzLm5ld0NvbmZpZ05hbWV9IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDb25maWdOYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRWRpdG9yPy5nZXRDb25maWdEYXRhRnJvbUZvcm0oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5mb3JFYWNoKChjb25maWdJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdJZCA9PT0gYWRkZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWdBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ0FkZGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0NvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IGFkZGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmhyZWYgPSAnL2NvbmZpZ3MvJyArIG5ld0NvbmZpZy5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MucHVzaChuZXdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZGVkQ29uZmlncyA9IFsuLi50aGlzLmFkZGVkQ29uZmlnc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuY29uZmlncy5wdXNoKGFkZGVkQ29uZmlnSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ0luZm8nLFxuICAgICAgICAgICAgICAgICAgICBgQ29uZmlnIEFscmVhZHkgQXR0YWNoZWRgLFxuICAgICAgICAgICAgICAgICAgICAnQ29uZmlnIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQgdG8gdGhpcyBzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb25maWcoY29uZmlnVG9SZW1vdmUpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1RvUmVtb3ZlLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWdzID0gZmlsdGVyKHRoaXMuZm9ybURhdGEuY29uZmlncywgY29uZmlnSWQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdJZCAhPT0gY29uZmlnVG9SZW1vdmUuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ0l0ZW1zID0gZmlsdGVyKHRoaXMuYWRkZWRDb25maWdzLCAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5uYW1lICE9PSBjb25maWdUb1JlbW92ZS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ3MgPSBuZXdDb25maWdzO1xuICAgICAgICAgICAgdGhpcy5hZGRlZENvbmZpZ3MgPSBuZXdDb25maWdJdGVtcztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09ICdwcmV2aWV3JyAmJiBjb25maWdUb1JlbW92ZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ29uZmlnTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbmZpZ0NoYW5nZWQocmVzZXREYXRhID0gdHJ1ZSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEgPSByZXNldERhdGEgPyB1bmRlZmluZWQgOiB0aGlzLmNvbmZpZ0RhdGE7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBsZXQgYXR0YWNoTGFiZWwgPSAnQXR0YWNoIHRvIFNlcnZpY2UnO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbmZpZ0lkID09PSAncHJldmlldycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWEgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLnNjaGVtYSh0aGlzLnNlbGVjdGVkQ29uZmlnVHlwZS5zY2hlbWEpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCA9PT0gJ2FkZC1uZXcnKSB7XG4gICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2NoZW1hID0gYXdhaXQgdGhpcy56aXRpU2VydmljZS5zY2hlbWEodGhpcy5zZWxlY3RlZENvbmZpZ1R5cGUuc2NoZW1hKTtcbiAgICAgICAgICAgIGF0dGFjaExhYmVsID0gJ0NyZWF0ZSBhbmQgQXR0YWNoJztcbiAgICAgICAgICAgIC8vdGhpcy5jcmVhdGVGb3JtKGR5bmFtaWNGb3JtKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRDb25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZmlnSWQgPT09IGNvbmZpZy5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RlZENvbmZpZz8uZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWdJZCAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdGhpcy51cGRhdGVDb25maWdEYXRhKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoTGFiZWwgPSBhdHRhY2hMYWJlbDtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQ29uZmlnKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ0Vycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLmNvbmZpZ0VkaXRvcj8udmFsaWRhdGVDb25maWcoKTtcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5uZXdDb25maWdOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdFcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5jb25maWdFcnJvcnMpO1xuICAgIH1cblxuICAgIF9hcGlEYXRhID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtRGF0YT8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCBbXSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IHRoaXMuZm9ybURhdGE/LmNvbmZpZ3MgfHwgW10sXG4gICAgICAgICAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRoaXMuZm9ybURhdGE/LmVuY3J5cHRpb25SZXF1aXJlZCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JTdHJhdGVneTogdGhpcy5mb3JtRGF0YT8udGVybWluYXRvclN0cmF0ZWd5IHx8ICcnLFxuICAgICAgICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFncyB8fCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIG9wZW5UZXJtaW5hdG9yRWRpdEZvcm0oaWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd0ZXJtaW5hdG9yLycgKyBpZF0pXG4gICAgfVxuXG4gICAgc29ydChzb3J0QnksIG9yZGVyaW5nPSAnYXNjJykge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdG9yU29ydCA9IHtzb3J0QnksIG9yZGVyaW5nfTtcbiAgICAgICAgdGhpcy5nZXRBc3NvY2lhdGVkVGVybWluYXRvcnMoKTtcbiAgICB9XG5cbiAgICBoYXNTZWxlY3RlZFRleHQoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0ZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ/Lmxlbmd0aCA+IDA7XG4gICAgfVxufSJdfQ==
|