@messaia/cdk 17.1.0-rc01 → 17.1.0-rc03
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/esm2022/lib/form-validators/core/defaultContainer.mjs +33 -30
- package/esm2022/lib/form-validators/services/rx-form-builder.mjs +36 -21
- package/esm2022/lib/form-validators/util/instance-provider.function.mjs +38 -4
- package/esm2022/lib/forms/functions/decorators.mjs +3 -1
- package/esm2022/lib/table/components/dynamic-table/dynamic-table.component.mjs +11 -3
- package/esm2022/lib/table/models/table-column-config.mjs +2 -2
- package/esm2022/lib/table/models/table-column.mjs +1 -1
- package/fesm2022/messaia-cdk.mjs +115 -53
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/form-validators/core/defaultContainer.d.ts +0 -1
- package/lib/form-validators/util/instance-provider.function.d.ts +12 -0
- package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +6 -0
- package/lib/table/models/table-column-config.d.ts +1 -1
- package/lib/table/models/table-column.d.ts +1 -1
- package/package.json +1 -1
|
@@ -7,15 +7,15 @@ export const defaultContainer = new (class {
|
|
|
7
7
|
instances = [];
|
|
8
8
|
modelIncrementCount = 0;
|
|
9
9
|
get(instanceFunc) {
|
|
10
|
-
|
|
11
|
-
return instance;
|
|
10
|
+
return this.instances.filter(instance => instance.instance === instanceFunc)[0];
|
|
12
11
|
}
|
|
13
12
|
getInstance(target, parameterIndex, propertyKey, decoratorType) {
|
|
14
13
|
let isPropertyKey = (propertyKey != undefined);
|
|
15
14
|
let instanceFunc = !isPropertyKey ? target : target.constructor;
|
|
16
15
|
let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0];
|
|
17
|
-
if (!instance)
|
|
16
|
+
if (!instance) {
|
|
18
17
|
instance = this.addInstanceContainer(instanceFunc);
|
|
18
|
+
}
|
|
19
19
|
return instance;
|
|
20
20
|
}
|
|
21
21
|
addPropsConfig(target, configs) {
|
|
@@ -44,18 +44,23 @@ export const defaultContainer = new (class {
|
|
|
44
44
|
if (config.excludePropNames)
|
|
45
45
|
excludeProp = config.excludePropNames.filter(t => t == propertyInfo.name)[0] !== undefined;
|
|
46
46
|
if (!excludeProp) {
|
|
47
|
-
if (config.validationConfig)
|
|
47
|
+
if (config.validationConfig) {
|
|
48
48
|
for (let typeName in config.validationConfig) {
|
|
49
49
|
this.init({ constructor: target }, 0, propertyInfo.name, typeName, config.validationConfig[typeName] === true ? undefined : config.validationConfig[typeName], false);
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
}
|
|
52
|
+
if (config.error) {
|
|
52
53
|
this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.error, DECORATORS.error);
|
|
53
|
-
|
|
54
|
+
}
|
|
55
|
+
if (config.disable) {
|
|
54
56
|
this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.disable, DECORATORS.disabled);
|
|
55
|
-
|
|
57
|
+
}
|
|
58
|
+
if (config.elementClass) {
|
|
56
59
|
this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.elementClass, DECORATORS.elementClass);
|
|
57
|
-
|
|
60
|
+
}
|
|
61
|
+
if (config.ignore) {
|
|
58
62
|
propertyInfo.ignore = config.ignore;
|
|
63
|
+
}
|
|
59
64
|
}
|
|
60
65
|
}
|
|
61
66
|
}
|
|
@@ -79,15 +84,18 @@ export const defaultContainer = new (class {
|
|
|
79
84
|
columns.forEach(column => {
|
|
80
85
|
if (column.argumentIndex !== -1) {
|
|
81
86
|
let columnName = (!column.objectPropName) ? `${column.propName}${RXCODE}${column.argumentIndex}` : `${column.objectPropName}.${column.propName}${RXCODE}${column.argumentIndex}`;
|
|
82
|
-
if (!instance.nonValidationDecorators[decoratorType].changeDetection[columnName])
|
|
87
|
+
if (!instance.nonValidationDecorators[decoratorType].changeDetection[columnName]) {
|
|
83
88
|
instance.nonValidationDecorators[decoratorType].changeDetection[columnName] = [];
|
|
89
|
+
}
|
|
84
90
|
let disabledColumns = instance.nonValidationDecorators[decoratorType].changeDetection[columnName];
|
|
85
|
-
if (disabledColumns.indexOf(columnName) === -1)
|
|
91
|
+
if (disabledColumns.indexOf(columnName) === -1) {
|
|
86
92
|
disabledColumns.push(propertyKey);
|
|
93
|
+
}
|
|
87
94
|
}
|
|
88
95
|
else {
|
|
89
|
-
if (!instance.nonValidationDecorators[decoratorType].controlProp[propertyKey])
|
|
96
|
+
if (!instance.nonValidationDecorators[decoratorType].controlProp[propertyKey]) {
|
|
90
97
|
instance.nonValidationDecorators[decoratorType].controlProp[propertyKey] = {};
|
|
98
|
+
}
|
|
91
99
|
instance.nonValidationDecorators[decoratorType].controlProp[propertyKey][column.propName.replace(";", "")] = true;
|
|
92
100
|
}
|
|
93
101
|
});
|
|
@@ -150,11 +158,20 @@ export const defaultContainer = new (class {
|
|
|
150
158
|
}
|
|
151
159
|
}
|
|
152
160
|
addPropertyInfo(instance, propertyInfo, isAddProperty = false) {
|
|
153
|
-
var property =
|
|
154
|
-
if (!property)
|
|
161
|
+
var property = instance.properties?.filter(t => t.name == propertyInfo.name)[0];
|
|
162
|
+
if (!property) {
|
|
155
163
|
instance.properties?.push(propertyInfo);
|
|
156
|
-
|
|
157
|
-
|
|
164
|
+
}
|
|
165
|
+
else if (isAddProperty) {
|
|
166
|
+
property.dataPropertyName = propertyInfo.dataPropertyName;
|
|
167
|
+
property.defaultValue = propertyInfo.defaultValue;
|
|
168
|
+
}
|
|
169
|
+
// if (instance?.instance.name === 'Person') {
|
|
170
|
+
// console.log('Person instance.properties', instance.properties);
|
|
171
|
+
// }
|
|
172
|
+
// if (instance?.instance.name === 'PersonBase') {
|
|
173
|
+
// console.log('PersonBase instance.properties', instance.properties);
|
|
174
|
+
// }
|
|
158
175
|
}
|
|
159
176
|
addAnnotation(instanceFunc, decoratorConfiguration) {
|
|
160
177
|
this.addProperty(instanceFunc, { propertyType: PROPERTY, name: decoratorConfiguration.propertyName }, true);
|
|
@@ -236,19 +253,5 @@ export const defaultContainer = new (class {
|
|
|
236
253
|
});
|
|
237
254
|
}
|
|
238
255
|
}
|
|
239
|
-
clearInstance(instanceFunc) {
|
|
240
|
-
let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0];
|
|
241
|
-
if (instance) {
|
|
242
|
-
let indexOf = this.instances.indexOf(instance);
|
|
243
|
-
this.instances.splice(indexOf, 1);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
getProperty(instance, propertyInfo) {
|
|
247
|
-
return instance.properties?.filter(t => t.name == propertyInfo.name)[0];
|
|
248
|
-
}
|
|
249
|
-
updateProperty(property, currentProperty) {
|
|
250
|
-
property.dataPropertyName = currentProperty.dataPropertyName;
|
|
251
|
-
property.defaultValue = currentProperty.defaultValue;
|
|
252
|
-
}
|
|
253
256
|
})();
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9jb3JlL2RlZmF1bHRDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBaUJyQixJQUFJLENBQUM7SUFDTCxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ3hCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzVDLG1CQUFtQixHQUFXLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUksWUFBaUI7UUFDcEIsSUFBSSxRQUFRLEdBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVcsRUFBRSxjQUFtQixFQUFFLFdBQW1CLEVBQUUsYUFBcUI7UUFDcEYsSUFBSSxhQUFhLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtRQUMvRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLFFBQVE7WUFDVCxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxjQUFjLENBQUMsTUFBVyxFQUFFLE9BQXNCO1FBQzlDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFGLElBQUksaUJBQWlCLEVBQUU7WUFDbkIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDL0IsSUFBSSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxlQUFlLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3SixJQUFJLFlBQVksRUFBRTt3QkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO3FCQUNyRDt5QkFBTTt3QkFDSCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7NEJBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLGVBQWUsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3lCQUMzSjtxQkFDSjtpQkFDSjthQUNKO1NBQ0o7YUFBTSxJQUFJLE9BQU8sS0FBSyxTQUFTO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUxQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLE1BQVcsRUFBRSxVQUEwQixFQUFFLE1BQW1CO1FBQ3RFLEtBQUssSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFO1lBQ2pDLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztZQUNqQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0I7Z0JBQ3ZCLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDL0YsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDZCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQ3ZCLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO3dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRyxNQUFNLENBQUMsZ0JBQXdCLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxnQkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDM0w7Z0JBQ0wsSUFBSSxNQUFNLENBQUMsS0FBSztvQkFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzFHLElBQUksTUFBTSxDQUFDLE9BQU87b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUMvRyxJQUFJLE1BQU0sQ0FBQyxZQUFZO29CQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQ3hILElBQUksTUFBTSxDQUFDLE1BQU07b0JBQ2IsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO2FBQzFDO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsWUFBWSxDQUFDLE1BQVcsRUFBRSxjQUFtQixFQUFFLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxLQUFXO1FBQ2xHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEYsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUUsUUFBUSxDQUFDLFVBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQzNDLFFBQVEsQ0FBQyxVQUFrQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNsRDtZQUVBLFFBQVEsQ0FBQyxVQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDMUY7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBVyxFQUFFLGNBQW1CLEVBQUUsV0FBbUIsRUFBRSxNQUFXLEVBQUUsYUFBcUI7UUFDeEcsSUFBSSxhQUFhLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtRQUMvRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLFFBQVE7WUFDVCxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELFFBQVEsQ0FBQyx1QkFBK0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDNUgsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDN0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pMLElBQUksQ0FBRSxRQUFRLENBQUMsdUJBQStCLENBQUMsYUFBYSxDQUFDLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztvQkFDcEYsUUFBUSxDQUFDLHVCQUErQixDQUFDLGFBQWEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzlGLElBQUksZUFBZSxHQUFJLFFBQVEsQ0FBQyx1QkFBK0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFFLFFBQVEsQ0FBQyx1QkFBK0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO29CQUNqRixRQUFRLENBQUMsdUJBQStCLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUYsUUFBUSxDQUFDLHVCQUErQixDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDOUg7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFHRCxJQUFJLENBQUMsTUFBVyxFQUFFLGNBQW1CLEVBQUUsV0FBbUIsRUFBRSxjQUFzQixFQUFFLE1BQVcsRUFBRSxPQUFnQjtRQUM3RyxJQUFJLHNCQUFzQixHQUEyQjtZQUNqRCxhQUFhLEVBQUUsY0FBYztZQUM3QixZQUFZLEVBQUUsV0FBVztZQUN6QixjQUFjLEVBQUUsY0FBYztZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFdBQVcsRUFBRSxjQUFjLEtBQUssVUFBVTtTQUM3QyxDQUFBO1FBQ0QsSUFBSSxhQUFhLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVksRUFBRSxZQUFvQixFQUFFLE1BQVcsRUFBRSxNQUFXLEVBQUUsTUFBWTtRQUN6RixJQUFJLFlBQVksR0FBaUI7WUFDN0IsSUFBSSxFQUFFLElBQUk7WUFDVixZQUFZLEVBQUUsWUFBWTtZQUMxQixNQUFNLEVBQUUsTUFBTTtZQUNkLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNsRCxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdELENBQUE7UUFDRCxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBaUI7UUFDbEMsSUFBSSxpQkFBaUIsR0FBc0I7WUFDdkMsUUFBUSxFQUFFLFlBQVk7WUFDdEIsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixVQUFVLEVBQUUsRUFBRTtZQUNkLHVCQUF1QixFQUFFO2dCQUNyQixRQUFRLEVBQUU7b0JBQ04sc0JBQXNCLEVBQUUsRUFBRTtvQkFDMUIsZUFBZSxFQUFFLEVBQUU7b0JBQ25CLFdBQVcsRUFBRSxFQUFFO2lCQUNsQixFQUFFLEtBQUssRUFBRTtvQkFDTixzQkFBc0IsRUFBRSxFQUFFO29CQUMxQixlQUFlLEVBQUUsRUFBRTtvQkFDbkIsV0FBVyxFQUFFLEVBQUU7aUJBQ2xCLEVBQUUsWUFBWSxFQUFFO29CQUNiLHNCQUFzQixFQUFFLEVBQUU7b0JBQzFCLGVBQWUsRUFBRSxFQUFFO29CQUNuQixXQUFXLEVBQUUsRUFBRTtpQkFDbEI7YUFDSjtZQUNELFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztJQUdELFdBQVcsQ0FBQyxZQUFpQixFQUFFLFlBQTBCLEVBQUUsbUJBQTRCLEtBQUs7UUFDeEYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNuRTthQUNJO1lBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBMkIsRUFBRSxZQUEwQixFQUFFLGdCQUF5QixLQUFLO1FBQ25HLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRO1lBQ1QsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDdkMsSUFBSSxhQUFhO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLENBQUMsWUFBaUIsRUFBRSxzQkFBOEM7UUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxRQUFRO1lBQ1IsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUU7WUFDdEYsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUM5RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6SCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwRjtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBYSxFQUFFLHNCQUE4QztRQUMvRSxJQUFJLFFBQVEsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUU7WUFDM0MsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDN0wsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUM5RCxJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTO3dCQUNoRSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDM0ksQ0FBQyxDQUFDLENBQUE7YUFDTDs7Z0JBQ0csSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqSztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFhLEVBQUUsY0FBc0IsRUFBRSxTQUFpQixFQUFFLFlBQW9CO1FBQ2hHLElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLE9BQU8sSUFBSSxjQUFjLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxjQUFjLElBQUksZUFBZSxDQUFDLGtCQUFrQixJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsUUFBUSxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsZUFBZSxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsU0FBUyxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsTUFBTSxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsT0FBTyxJQUFJLGNBQWMsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLGVBQWUsQ0FBQyxPQUFPLElBQUksY0FBYyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFO1lBQ3RtQixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQTtTQUNsRTtJQUNMLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxRQUEyQixFQUFFLFFBQWdCLEVBQUUsV0FBbUI7UUFDdEYsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtvQkFDdEMsUUFBUSxDQUFDLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztpQkFDNUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDaEQsUUFBUSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDdEQ7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUMxRSxRQUFRLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNuRTthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUE7YUFDbEs7U0FDSjtJQUNMLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxRQUEyQixFQUFFLFlBQW9CLEVBQUUsT0FBYztRQUNqRixJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCO2dCQUNwQyxRQUFRLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1lBRTdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUU7b0JBQ2pDLElBQUksQ0FBRSxRQUFRLENBQUMsMEJBQWtDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUMxRCxRQUFRLENBQUMsMEJBQWtDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDakU7b0JBQ0QsSUFBSyxRQUFRLENBQUMsMEJBQWtDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTt3QkFDckYsUUFBUSxDQUFDLDBCQUFrQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQy9FO2lCQUNKO3FCQUFNO29CQUNILElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFO3dCQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFOzRCQUNsQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO3lCQUN4Qzt3QkFFRCxDQUFDLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO3dCQUNuQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMzQztpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFBO1NBQ0w7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQWlCO1FBQzNCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBMkIsRUFBRSxZQUEwQjtRQUMvRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFzQixFQUFFLGVBQTZCO1FBQ2hFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsUUFBUSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ3pELENBQUM7Q0FDSixDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBSWENPREUgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgREVDT1JBVE9SUyB9IGZyb20gXCIuLi9jb25zdC9kZWNvcmF0b3JzLmNvbnN0XCI7XHJcbmltcG9ydCB7IFByb3BzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcvcHJvcHMtY29uZmlnXCI7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tIFwiLi4vdXRpbC9saW5xXCI7XHJcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi92YWxpZGF0b3Iuc3RhdGljXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbnRhaW5lcjpcclxuICAgIHtcclxuICAgICAgICBnZXQ8VD4oaW5zdGFuY2VGdW5jOiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lcixcclxuICAgICAgICBhZGRBbm5vdGF0aW9uKGluc3RhbmNlRnVuYzogYW55LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uKTogdm9pZCxcclxuICAgICAgICBhZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSk6IHZvaWQsXHJcbiAgICAgICAgYWRkUHJvcGVydHkoaW5zdGFuY2VGdW5jOiBhbnksIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvKTogdm9pZCxcclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTogdm9pZCxcclxuICAgICAgICBpbml0KHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBhbm5vdGF0aW9uVHlwZTogc3RyaW5nLCBjb25maWc6IGFueSwgaXNBc3luYzogYm9vbGVhbik6IHZvaWQsXHJcbiAgICAgICAgaW5pdFByb3BlcnR5T2JqZWN0KG5hbWU6IHN0cmluZywgcHJvcGVydHlUeXBlOiBzdHJpbmcsIGVudGl0eTogYW55LCB0YXJnZXQ6IGFueSwgY29uZmlnPzogYW55KTogdm9pZCxcclxuICAgICAgICBtb2RlbEluY3JlbWVudENvdW50OiBudW1iZXIsXHJcbiAgICAgICAgY2xlYXJJbnN0YW5jZShpbnN0YW5jZTogYW55KTogdm9pZCxcclxuICAgICAgICBzZXRDb25kaXRpb25hbFZhbHVlUHJvcChpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIHByb3BOYW1lOiBzdHJpbmcsIHJlZlByb3BOYW1lOiBzdHJpbmcpOiB2b2lkLFxyXG4gICAgICAgIGFkZERlY29yYXRvckNvbmZpZyh0YXJnZXQ6IGFueSwgcGFyYW1ldGVySW5kZXg6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgY29uZmlnOiBhbnksIGRlY29yYXRvclR5cGU6IHN0cmluZyk6IHZvaWQsXHJcbiAgICAgICAgc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlOiBhbnksIGFubm90YXRpb25UeXBlOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQsXHJcbiAgICAgICAgYWRkU2FuaXRpemVyKHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZCxcclxuICAgICAgICBhZGRQcm9wc0NvbmZpZyh0YXJnZXQ6IGFueSwgY29uZmlncz86IFByb3BzQ29uZmlnW10pOiB2b2lkLFxyXG4gICAgICAgIGlzRXhwZXJpbWVudGFsOiBib29sZWFuO1xyXG4gICAgfSA9IG5ldyAoY2xhc3Mge1xyXG4gICAgICAgIGlzRXhwZXJpbWVudGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgcHJpdmF0ZSBpbnN0YW5jZXM6IEluc3RhbmNlQ29udGFpbmVyW10gPSBbXTtcclxuICAgICAgICBtb2RlbEluY3JlbWVudENvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGdldDxUPihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0SW5zdGFuY2UodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBsZXQgaXNQcm9wZXJ0eUtleSA9IChwcm9wZXJ0eUtleSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2VGdW5jID0gIWlzUHJvcGVydHlLZXkgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3JcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkUHJvcHNDb25maWcodGFyZ2V0OiBhbnksIGNvbmZpZ3M6IFByb3BzQ29uZmlnW10pIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09IHRhcmdldClbMF07XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uZmlnIG9mIGNvbmZpZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwcm9wIG9mIGNvbmZpZy5wcm9wTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5SW5mbyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcih0ID0+IHQubmFtZSA9PSBwcm9wICYmICh0LnByb3BlcnR5VHlwZSAhPT0gT0JKRUNUX1BST1BFUlRZICYmIHQucHJvcGVydHlUeXBlICE9PSBBUlJBWV9QUk9QRVJUWSkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BDb25maWcodGFyZ2V0LCBbcHJvcGVydHlJbmZvXSwgY29uZmlnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiOmFsbDpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcENvbmZpZyh0YXJnZXQsIGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlICE9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgdC5wcm9wZXJ0eVR5cGUgIT09IEFSUkFZX1BST1BFUlRZKSEsIGNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlncyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcih0YXJnZXQpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkUHJvcENvbmZpZyh0YXJnZXQ6IGFueSwgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10sIGNvbmZpZzogUHJvcHNDb25maWcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHlJbmZvIG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBleGNsdWRlUHJvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5leGNsdWRlUHJvcE5hbWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVQcm9wID0gY29uZmlnLmV4Y2x1ZGVQcm9wTmFtZXMuZmlsdGVyKHQgPT4gdCA9PSBwcm9wZXJ0eUluZm8ubmFtZSlbMF0gIT09IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICghZXhjbHVkZVByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnZhbGlkYXRpb25Db25maWcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHR5cGVOYW1lIGluIGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoeyBjb25zdHJ1Y3RvcjogdGFyZ2V0IH0sIDAsIHByb3BlcnR5SW5mby5uYW1lLCB0eXBlTmFtZSwgKGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnIGFzIGFueSlbdHlwZU5hbWVdID09PSB0cnVlID8gdW5kZWZpbmVkIDogKGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnIGFzIGFueSlbdHlwZU5hbWVdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZERlY29yYXRvckNvbmZpZyh7IGNvbnN0cnVjdG9yOiB0YXJnZXQgfSwgMCwgcHJvcGVydHlJbmZvLm5hbWUsIGNvbmZpZy5lcnJvciwgREVDT1JBVE9SUy5lcnJvcilcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmRpc2FibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVjb3JhdG9yQ29uZmlnKHsgY29uc3RydWN0b3I6IHRhcmdldCB9LCAwLCBwcm9wZXJ0eUluZm8ubmFtZSwgY29uZmlnLmRpc2FibGUsIERFQ09SQVRPUlMuZGlzYWJsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbGVtZW50Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVjb3JhdG9yQ29uZmlnKHsgY29uc3RydWN0b3I6IHRhcmdldCB9LCAwLCBwcm9wZXJ0eUluZm8ubmFtZSwgY29uZmlnLmVsZW1lbnRDbGFzcywgREVDT1JBVE9SUy5lbGVtZW50Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pZ25vcmUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SW5mby5pZ25vcmUgPSBjb25maWcuaWdub3JlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkU2FuaXRpemVyKHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcsIHZhbHVlPzogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2UodGFyZ2V0LCBwYXJhbWV0ZXJJbmRleCwgcHJvcGVydHlLZXksIGRlY29yYXRvclR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlLnNhbml0aXplcnMgYXMgYW55KVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2Uuc2FuaXRpemVycyBhcyBhbnkpW3Byb3BlcnR5S2V5XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIChpbnN0YW5jZS5zYW5pdGl6ZXJzIGFzIGFueSlbcHJvcGVydHlLZXldLnB1c2goeyBuYW1lOiBkZWNvcmF0b3JUeXBlLCBjb25maWc6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGREZWNvcmF0b3JDb25maWcodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGNvbmZpZzogYW55LCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IGlzUHJvcGVydHlLZXkgPSAocHJvcGVydHlLZXkgIT0gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlRnVuYyA9ICFpc1Byb3BlcnR5S2V5ID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yXHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jb25kaXRpb25hbEV4cHJlc3Npb25zW3Byb3BlcnR5S2V5XSA9IGNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb247XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhjb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmFyZ3VtZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSAoIWNvbHVtbi5vYmplY3RQcm9wTmFtZSkgPyBgJHtjb2x1bW4ucHJvcE5hbWV9JHtSWENPREV9JHtjb2x1bW4uYXJndW1lbnRJbmRleH1gIDogYCR7Y29sdW1uLm9iamVjdFByb3BOYW1lfS4ke2NvbHVtbi5wcm9wTmFtZX0ke1JYQ09ERX0ke2NvbHVtbi5hcmd1bWVudEluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jaGFuZ2VEZXRlY3Rpb25bY29sdW1uTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyBhcyBhbnkpW2RlY29yYXRvclR5cGVdLmNoYW5nZURldGVjdGlvbltjb2x1bW5OYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaXNhYmxlZENvbHVtbnMgPSAoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jaGFuZ2VEZXRlY3Rpb25bY29sdW1uTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbk5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRDb2x1bW5zLnB1c2gocHJvcGVydHlLZXkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZS5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyBhcyBhbnkpW2RlY29yYXRvclR5cGVdLmNvbnRyb2xQcm9wW3Byb3BlcnR5S2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY29udHJvbFByb3BbcHJvcGVydHlLZXldID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY29udHJvbFByb3BbcHJvcGVydHlLZXldW2NvbHVtbi5wcm9wTmFtZS5yZXBsYWNlKFwiO1wiLCBcIlwiKV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGluaXQodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGFubm90YXRpb25UeXBlOiBzdHJpbmcsIGNvbmZpZzogYW55LCBpc0FzeW5jOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlJbmRleDogcGFyYW1ldGVySW5kZXgsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5S2V5LFxyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU6IGFubm90YXRpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBpc0FzeW5jOiBpc0FzeW5jLFxyXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0b3I6IGFubm90YXRpb25UeXBlICE9PSBcInVwZGF0ZU9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgaXNQcm9wZXJ0eUtleSA9IChwcm9wZXJ0eUtleSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEFubm90YXRpb24oIWlzUHJvcGVydHlLZXkgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3IsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5pdFByb3BlcnR5T2JqZWN0KG5hbWU6IHN0cmluZywgcHJvcGVydHlUeXBlOiBzdHJpbmcsIGVudGl0eTogYW55LCB0YXJnZXQ6IGFueSwgY29uZmlnPzogYW55KSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVR5cGU6IHByb3BlcnR5VHlwZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgZGF0YVByb3BlcnR5TmFtZTogY29uZmlnID8gY29uZmlnLm5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlQcm92aWRlcjogY29uZmlnID8gY29uZmlnLmVudGl0eVByb3ZpZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5hZGRQcm9wZXJ0eSh0YXJnZXQuY29uc3RydWN0b3IsIHByb3BlcnR5SW5mbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciA9IHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZUZ1bmMsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFubm90YXRpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgbm9uVmFsaWRhdGlvbkRlY29yYXRvcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFByb3A6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xQcm9wOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVsZW1lbnRDbGFzczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFByb3A6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNhbml0aXplcnM6IHt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZUNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBhZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmM6IGFueSwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGlzRnJvbUFubm90YXRpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5maWx0ZXIoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYylbMF07XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eUluZm8oaW5zdGFuY2UsIHByb3BlcnR5SW5mbywgIWlzRnJvbUFubm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BlcnR5SW5mbyhpbnN0YW5jZSwgcHJvcGVydHlJbmZvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGlzQWRkUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5KGluc3RhbmNlLCBwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydGllcz8ucHVzaChwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc0FkZFByb3BlcnR5KVxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eShwcm9wZXJ0eSwgcHJvcGVydHlJbmZvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZEFubm90YXRpb24oaW5zdGFuY2VGdW5jOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmMsIHsgcHJvcGVydHlUeXBlOiBQUk9QRVJUWSwgbmFtZTogZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUgfSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZyAmJiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnICYmIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLmR5bmFtaWNDb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5keW5hbWljQ29uZmlnUGFyc2VyKGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLmR5bmFtaWNDb25maWcsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUsIGNvbHVtbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxDb2x1bW5zKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldENvbmRpdGlvbmFsQ29sdW1ucyhpbnN0YW5jZTogYW55LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmFuZCB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5vciB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5ub3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy52YWxpZGF0aW9uKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLnZhbGlkYXRpb25bdF0gIT09IFwiYm9vbGVhblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2dpY2FsQ29uZGl0aW9uYWwoaW5zdGFuY2UsIHQsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLnZhbGlkYXRpb25bdF0uZmllbGROYW1lLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2dpY2FsQ29uZGl0aW9uYWwoaW5zdGFuY2UsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLmZpZWxkTmFtZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRMb2dpY2FsQ29uZGl0aW9uYWwoaW5zdGFuY2U6IGFueSwgYW5ub3RhdGlvblR5cGU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiAoKGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5jb21wYXJlIHx8IGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5ncmVhdGVyVGhhbiB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuZ3JlYXRlclRoYW5FcXVhbFRvIHx8IGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5sZXNzVGhhbiB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubGVzc1RoYW5FcXVhbFRvIHx8IGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5kaWZmZXJlbnQgfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmZhY3RvciB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubWluVGltZSB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubWF4VGltZSkgfHwgKGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5jcmVkaXRDYXJkICYmIGZpZWxkTmFtZSkgfHwgKChhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubWluRGF0ZSB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubWF4RGF0ZSkgJiYgZmllbGROYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AoaW5zdGFuY2UsIGZpZWxkTmFtZSwgcHJvcGVydHlOYW1lKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcE5hbWU6IHN0cmluZywgcmVmUHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzcGxpdFByb3BzID0gcHJvcE5hbWUuc3BsaXQgPyBwcm9wTmFtZS5zcGxpdCgnLicpIDogJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRQcm9wcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5pbmRleE9mKHJlZlByb3BOYW1lKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0ucHVzaChyZWZQcm9wTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoYW5nZVZhbGlkYXRpb24oaW5zdGFuY2UsIHJlZlByb3BOYW1lLCBbeyBhcmd1bWVudEluZGV4OiAxLCBvYmplY3RQcm9wTmFtZTogc3BsaXRQcm9wc1swXSwgcHJvcE5hbWU6IHNwbGl0UHJvcHNbMV0sIHJlZmVyZW5jZVByb3BOYW1lOiByZWZQcm9wTmFtZSB9XSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodC5wcm9wTmFtZSAmJiAhdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyBhcyBhbnkpW3QucHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgYXMgYW55KVt0LnByb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgYXMgYW55KVt0LnByb3BOYW1lXS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyBhcyBhbnkpW3QucHJvcE5hbWVdLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnByb3BOYW1lICYmIHQub2JqZWN0UHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlZmVyZW5jZVByb3BOYW1lID0gcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5wdXNoKHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xlYXJJbnN0YW5jZShpbnN0YW5jZUZ1bmM6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5maWx0ZXIoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYylbMF07XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4T2YgPSB0aGlzLmluc3RhbmNlcy5pbmRleE9mKGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VzLnNwbGljZShpbmRleE9mLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0UHJvcGVydHkoaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyLCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvcGVydGllcz8uZmlsdGVyKHQgPT4gdC5uYW1lID09IHByb3BlcnR5SW5mby5uYW1lKVswXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBkYXRlUHJvcGVydHkocHJvcGVydHk6IFByb3BlcnR5SW5mbywgY3VycmVudFByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcclxuICAgICAgICAgICAgcHJvcGVydHkuZGF0YVByb3BlcnR5TmFtZSA9IGN1cnJlbnRQcm9wZXJ0eS5kYXRhUHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgPSBjdXJyZW50UHJvcGVydHkuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pKCk7XHJcbiJdfQ==
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9jb3JlL2RlZmF1bHRDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBZ0JyQixJQUFJLENBQUM7SUFDTCxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ3hCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzVDLG1CQUFtQixHQUFXLENBQUMsQ0FBQztJQUVoQyxHQUFHLENBQUksWUFBaUI7UUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFXLEVBQUUsY0FBbUIsRUFBRSxXQUFtQixFQUFFLGFBQXFCO1FBQ3BGLElBQUksYUFBYSxHQUFHLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksWUFBWSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7UUFDL0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FB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QyxJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUNyRixRQUFRLENBQUMsMEJBQWtDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDL0U7aUJBQ0o7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUU7d0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUU7NEJBQ2xDLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7eUJBQ3hDO3dCQUVELENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUM7d0JBQ25DLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzNDO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUE7U0FDTDtJQUNMLENBQUM7Q0FDSixDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBSWENPREUgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgREVDT1JBVE9SUyB9IGZyb20gXCIuLi9jb25zdC9kZWNvcmF0b3JzLmNvbnN0XCI7XHJcbmltcG9ydCB7IFByb3BzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcvcHJvcHMtY29uZmlnXCI7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tIFwiLi4vdXRpbC9saW5xXCI7XHJcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi92YWxpZGF0b3Iuc3RhdGljXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbnRhaW5lcjpcclxuICAgIHtcclxuICAgICAgICBnZXQ8VD4oaW5zdGFuY2VGdW5jOiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lcixcclxuICAgICAgICBhZGRBbm5vdGF0aW9uKGluc3RhbmNlRnVuYzogYW55LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uKTogdm9pZCxcclxuICAgICAgICBhZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSk6IHZvaWQsXHJcbiAgICAgICAgYWRkUHJvcGVydHkoaW5zdGFuY2VGdW5jOiBhbnksIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvKTogdm9pZCxcclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTogdm9pZCxcclxuICAgICAgICBpbml0KHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBhbm5vdGF0aW9uVHlwZTogc3RyaW5nLCBjb25maWc6IGFueSwgaXNBc3luYzogYm9vbGVhbik6IHZvaWQsXHJcbiAgICAgICAgaW5pdFByb3BlcnR5T2JqZWN0KG5hbWU6IHN0cmluZywgcHJvcGVydHlUeXBlOiBzdHJpbmcsIGVudGl0eTogYW55LCB0YXJnZXQ6IGFueSwgY29uZmlnPzogYW55KTogdm9pZCxcclxuICAgICAgICBtb2RlbEluY3JlbWVudENvdW50OiBudW1iZXIsXHJcbiAgICAgICAgc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AoaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyLCBwcm9wTmFtZTogc3RyaW5nLCByZWZQcm9wTmFtZTogc3RyaW5nKTogdm9pZCxcclxuICAgICAgICBhZGREZWNvcmF0b3JDb25maWcodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGNvbmZpZzogYW55LCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcpOiB2b2lkLFxyXG4gICAgICAgIHNldExvZ2ljYWxDb25kaXRpb25hbChpbnN0YW5jZTogYW55LCBhbm5vdGF0aW9uVHlwZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiB2b2lkLFxyXG4gICAgICAgIGFkZFNhbml0aXplcih0YXJnZXQ6IGFueSwgcGFyYW1ldGVySW5kZXg6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVjb3JhdG9yVHlwZTogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQsXHJcbiAgICAgICAgYWRkUHJvcHNDb25maWcodGFyZ2V0OiBhbnksIGNvbmZpZ3M/OiBQcm9wc0NvbmZpZ1tdKTogdm9pZCxcclxuICAgICAgICBpc0V4cGVyaW1lbnRhbDogYm9vbGVhbjtcclxuICAgIH0gPSBuZXcgKGNsYXNzIHtcclxuICAgICAgICBpc0V4cGVyaW1lbnRhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIHByaXZhdGUgaW5zdGFuY2VzOiBJbnN0YW5jZUNvbnRhaW5lcltdID0gW107XHJcbiAgICAgICAgbW9kZWxJbmNyZW1lbnRDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZ2V0PFQ+KGluc3RhbmNlRnVuYzogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0SW5zdGFuY2UodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBsZXQgaXNQcm9wZXJ0eUtleSA9IChwcm9wZXJ0eUtleSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2VGdW5jID0gIWlzUHJvcGVydHlLZXkgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3JcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMuYWRkSW5zdGFuY2VDb250YWluZXIoaW5zdGFuY2VGdW5jKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkUHJvcHNDb25maWcodGFyZ2V0OiBhbnksIGNvbmZpZ3M6IFByb3BzQ29uZmlnW10pIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09IHRhcmdldClbMF07XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uZmlnIG9mIGNvbmZpZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwcm9wIG9mIGNvbmZpZy5wcm9wTmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5SW5mbyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcih0ID0+IHQubmFtZSA9PSBwcm9wICYmICh0LnByb3BlcnR5VHlwZSAhPT0gT0JKRUNUX1BST1BFUlRZICYmIHQucHJvcGVydHlUeXBlICE9PSBBUlJBWV9QUk9QRVJUWSkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BDb25maWcodGFyZ2V0LCBbcHJvcGVydHlJbmZvXSwgY29uZmlnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiOmFsbDpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcENvbmZpZyh0YXJnZXQsIGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlICE9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgdC5wcm9wZXJ0eVR5cGUgIT09IEFSUkFZX1BST1BFUlRZKSEsIGNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlncyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcih0YXJnZXQpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZFByb3BDb25maWcodGFyZ2V0OiBhbnksIHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdLCBjb25maWc6IFByb3BzQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5SW5mbyBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhjbHVkZVByb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuZXhjbHVkZVByb3BOYW1lcylcclxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlUHJvcCA9IGNvbmZpZy5leGNsdWRlUHJvcE5hbWVzLmZpbHRlcih0ID0+IHQgPT0gcHJvcGVydHlJbmZvLm5hbWUpWzBdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWV4Y2x1ZGVQcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHR5cGVOYW1lIGluIGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoeyBjb25zdHJ1Y3RvcjogdGFyZ2V0IH0sIDAsIHByb3BlcnR5SW5mby5uYW1lLCB0eXBlTmFtZSwgKGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnIGFzIGFueSlbdHlwZU5hbWVdID09PSB0cnVlID8gdW5kZWZpbmVkIDogKGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnIGFzIGFueSlbdHlwZU5hbWVdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGREZWNvcmF0b3JDb25maWcoeyBjb25zdHJ1Y3RvcjogdGFyZ2V0IH0sIDAsIHByb3BlcnR5SW5mby5uYW1lLCBjb25maWcuZXJyb3IsIERFQ09SQVRPUlMuZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmRpc2FibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGREZWNvcmF0b3JDb25maWcoeyBjb25zdHJ1Y3RvcjogdGFyZ2V0IH0sIDAsIHByb3BlcnR5SW5mby5uYW1lLCBjb25maWcuZGlzYWJsZSwgREVDT1JBVE9SUy5kaXNhYmxlZClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZWxlbWVudENsYXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVjb3JhdG9yQ29uZmlnKHsgY29uc3RydWN0b3I6IHRhcmdldCB9LCAwLCBwcm9wZXJ0eUluZm8ubmFtZSwgY29uZmlnLmVsZW1lbnRDbGFzcywgREVDT1JBVE9SUy5lbGVtZW50Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmlnbm9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUluZm8uaWdub3JlID0gY29uZmlnLmlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkU2FuaXRpemVyKHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcsIHZhbHVlPzogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2UodGFyZ2V0LCBwYXJhbWV0ZXJJbmRleCwgcHJvcGVydHlLZXksIGRlY29yYXRvclR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlLnNhbml0aXplcnMgYXMgYW55KVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2Uuc2FuaXRpemVycyBhcyBhbnkpW3Byb3BlcnR5S2V5XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIChpbnN0YW5jZS5zYW5pdGl6ZXJzIGFzIGFueSlbcHJvcGVydHlLZXldLnB1c2goeyBuYW1lOiBkZWNvcmF0b3JUeXBlLCBjb25maWc6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGREZWNvcmF0b3JDb25maWcodGFyZ2V0OiBhbnksIHBhcmFtZXRlckluZGV4OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGNvbmZpZzogYW55LCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IGlzUHJvcGVydHlLZXkgPSAocHJvcGVydHlLZXkgIT0gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlRnVuYyA9ICFpc1Byb3BlcnR5S2V5ID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yXHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jb25kaXRpb25hbEV4cHJlc3Npb25zW3Byb3BlcnR5S2V5XSA9IGNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb247XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhjb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmFyZ3VtZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSAoIWNvbHVtbi5vYmplY3RQcm9wTmFtZSkgPyBgJHtjb2x1bW4ucHJvcE5hbWV9JHtSWENPREV9JHtjb2x1bW4uYXJndW1lbnRJbmRleH1gIDogYCR7Y29sdW1uLm9iamVjdFByb3BOYW1lfS4ke2NvbHVtbi5wcm9wTmFtZX0ke1JYQ09ERX0ke2NvbHVtbi5hcmd1bWVudEluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jaGFuZ2VEZXRlY3Rpb25bY29sdW1uTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY2hhbmdlRGV0ZWN0aW9uW2NvbHVtbk5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlzYWJsZWRDb2x1bW5zID0gKGluc3RhbmNlLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY2hhbmdlRGV0ZWN0aW9uW2NvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlZENvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRDb2x1bW5zLnB1c2gocHJvcGVydHlLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jb250cm9sUHJvcFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY29udHJvbFByb3BbcHJvcGVydHlLZXldID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2Uubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jb250cm9sUHJvcFtwcm9wZXJ0eUtleV1bY29sdW1uLnByb3BOYW1lLnJlcGxhY2UoXCI7XCIsIFwiXCIpXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbml0KHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBhbm5vdGF0aW9uVHlwZTogc3RyaW5nLCBjb25maWc6IGFueSwgaXNBc3luYzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgICAgICB2YXIgZGVjb3JhdG9yQ29uZmlndXJhdGlvbjogRGVjb3JhdG9yQ29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5SW5kZXg6IHBhcmFtZXRlckluZGV4LFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eUtleSxcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlOiBhbm5vdGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgaXNBc3luYzogaXNBc3luYyxcclxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdG9yOiBhbm5vdGF0aW9uVHlwZSAhPT0gXCJ1cGRhdGVPblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGlzUHJvcGVydHlLZXkgPSAocHJvcGVydHlLZXkgIT0gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRBbm5vdGF0aW9uKCFpc1Byb3BlcnR5S2V5ID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGluaXRQcm9wZXJ0eU9iamVjdChuYW1lOiBzdHJpbmcsIHByb3BlcnR5VHlwZTogc3RyaW5nLCBlbnRpdHk6IGFueSwgdGFyZ2V0OiBhbnksIGNvbmZpZz86IGFueSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlUeXBlOiBwcm9wZXJ0eVR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcclxuICAgICAgICAgICAgICAgIGRhdGFQcm9wZXJ0eU5hbWU6IGNvbmZpZyA/IGNvbmZpZy5uYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5UHJvdmlkZXI6IGNvbmZpZyA/IGNvbmZpZy5lbnRpdHlQcm92aWRlciA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmFkZFByb3BlcnR5KHRhcmdldC5jb25zdHJ1Y3RvciwgcHJvcGVydHlJbmZvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYzogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2VDb250YWluZXI6IEluc3RhbmNlQ29udGFpbmVyID0ge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlRnVuYyxcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5QW5ub3RhdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW10sXHJcbiAgICAgICAgICAgICAgICBub25WYWxpZGF0aW9uRGVjb3JhdG9yczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsRXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sUHJvcDoge31cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFByb3A6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZWxlbWVudENsYXNzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsRXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sUHJvcDoge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2FuaXRpemVyczoge31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlcy5wdXNoKGluc3RhbmNlQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlQ29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkUHJvcGVydHkoaW5zdGFuY2VGdW5jOiBhbnksIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBpc0Zyb21Bbm5vdGF0aW9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlLCBwcm9wZXJ0eUluZm8sICFpc0Zyb21Bbm5vdGF0aW9uKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eUluZm8oaW5zdGFuY2UsIHByb3BlcnR5SW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZFByb3BlcnR5SW5mbyhpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBpc0FkZFByb3BlcnR5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gaW5zdGFuY2UucHJvcGVydGllcz8uZmlsdGVyKHQgPT4gdC5uYW1lID09IHByb3BlcnR5SW5mby5uYW1lKVswXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydGllcz8ucHVzaChwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQWRkUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmRhdGFQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8uZGF0YVByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmRlZmF1bHRWYWx1ZSA9IHByb3BlcnR5SW5mby5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIChpbnN0YW5jZT8uaW5zdGFuY2UubmFtZSA9PT0gJ1BlcnNvbicpIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdQZXJzb24gaW5zdGFuY2UucHJvcGVydGllcycsIGluc3RhbmNlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoaW5zdGFuY2U/Lmluc3RhbmNlLm5hbWUgPT09ICdQZXJzb25CYXNlJykge1xyXG4gICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coJ1BlcnNvbkJhc2UgaW5zdGFuY2UucHJvcGVydGllcycsIGluc3RhbmNlLnByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRBbm5vdGF0aW9uKGluc3RhbmNlRnVuYzogYW55LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHkoaW5zdGFuY2VGdW5jLCB7IHByb3BlcnR5VHlwZTogUFJPUEVSVFksIG5hbWU6IGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lIH0sIHRydWUpO1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5maWx0ZXIoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYylbMF07XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnByb3BlcnR5QW5ub3RhdGlvbnMucHVzaChkZWNvcmF0b3JDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMuYWRkSW5zdGFuY2VDb250YWluZXIoaW5zdGFuY2VGdW5jKTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnByb3BlcnR5QW5ub3RhdGlvbnMucHVzaChkZWNvcmF0b3JDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcgJiYgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUsIGNvbHVtbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZyAmJiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5keW5hbWljQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZHluYW1pY0NvbmZpZ1BhcnNlcihkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5keW5hbWljQ29uZmlnLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoYW5nZVZhbGlkYXRpb24oaW5zdGFuY2UsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lLCBjb2x1bW5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsQ29sdW1ucyhpbnN0YW5jZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRDb25kaXRpb25hbENvbHVtbnMoaW5zdGFuY2U6IGFueSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbjogRGVjb3JhdG9yQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5hbmQgfHwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5hbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMub3IgfHwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5hbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubm90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcudmFsaWRhdGlvbikuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy52YWxpZGF0aW9uW3RdICE9PSBcImJvb2xlYW5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlLCB0LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy52YWxpZGF0aW9uW3RdLmZpZWxkTmFtZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5maWVsZE5hbWUsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlOiBhbnksIGFubm90YXRpb25UeXBlOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgKChhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuY29tcGFyZSB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuZ3JlYXRlclRoYW4gfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuRXF1YWxUbyB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubGVzc1RoYW4gfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmxlc3NUaGFuRXF1YWxUbyB8fCBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuZGlmZmVyZW50IHx8IGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5mYWN0b3IgfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1pblRpbWUgfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1heFRpbWUpIHx8IChhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuY3JlZGl0Q2FyZCAmJiBmaWVsZE5hbWUpIHx8ICgoYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1pbkRhdGUgfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1heERhdGUpICYmIGZpZWxkTmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlLCBmaWVsZE5hbWUsIHByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AoaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyLCBwcm9wTmFtZTogc3RyaW5nLCByZWZQcm9wTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0UHJvcHMgPSBwcm9wTmFtZS5zcGxpdCA/IHByb3BOYW1lLnNwbGl0KCcuJykgOiAnJztcclxuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcE5hbWVdLmluZGV4T2YocmVmUHJvcE5hbWUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5wdXNoKHJlZlByb3BOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZSwgcmVmUHJvcE5hbWUsIFt7IGFyZ3VtZW50SW5kZXg6IDEsIG9iamVjdFByb3BOYW1lOiBzcGxpdFByb3BzWzBdLCBwcm9wTmFtZTogc3BsaXRQcm9wc1sxXSwgcmVmZXJlbmNlUHJvcE5hbWU6IHJlZlByb3BOYW1lIH1dKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodC5wcm9wTmFtZSAmJiAhdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyBhcyBhbnkpW3QucHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgYXMgYW55KVt0LnByb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgYXMgYW55KVt0LnByb3BOYW1lXS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyBhcyBhbnkpW3QucHJvcE5hbWVdLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnByb3BOYW1lICYmIHQub2JqZWN0UHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlZmVyZW5jZVByb3BOYW1lID0gcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5wdXNoKHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKCk7XHJcbiJdfQ==
|