igniteui-angular 14.2.7 → 14.2.8
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/esm2020/lib/core/utils.mjs +3 -2
- package/esm2020/lib/directives/for-of/for_of.directive.mjs +4 -2
- package/esm2020/lib/directives/mask/mask-parsing.service.mjs +7 -3
- package/esm2020/lib/directives/mask/mask.directive.mjs +12 -10
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -2
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +3 -3
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +3 -3
- package/fesm2015/igniteui-angular.mjs +29 -18
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +28 -18
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/directives/mask/mask-parsing.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export const MASK_FLAGS = ['C', '&', 'a', 'A', '?', 'L', '9', '0', '#'];
|
|
5
5
|
/** @hidden */
|
|
6
6
|
export class MaskParsingService {
|
|
7
|
-
applyMask(inputVal, maskOptions) {
|
|
7
|
+
applyMask(inputVal, maskOptions, pos = 0) {
|
|
8
8
|
let outputVal = '';
|
|
9
9
|
let value = '';
|
|
10
10
|
const mask = maskOptions.format;
|
|
@@ -35,7 +35,6 @@ export class MaskParsingService {
|
|
|
35
35
|
if (nonLiteralValues.length > nonLiteralIndices.length) {
|
|
36
36
|
nonLiteralValues.splice(nonLiteralIndices.length);
|
|
37
37
|
}
|
|
38
|
-
let pos = 0;
|
|
39
38
|
for (const nonLiteralValue of nonLiteralValues) {
|
|
40
39
|
const char = nonLiteralValue;
|
|
41
40
|
outputVal = this.replaceCharAt(outputVal, nonLiteralIndices[pos++], char);
|
|
@@ -82,6 +81,11 @@ export class MaskParsingService {
|
|
|
82
81
|
}
|
|
83
82
|
maskedValue = this.replaceCharAt(maskedValue, i, char);
|
|
84
83
|
}
|
|
84
|
+
if (Math.abs(end - start) >= 1) {
|
|
85
|
+
// set cursor to be max between last cursor pos and the calculated `end`
|
|
86
|
+
// since on `delete` the cursor should move forward
|
|
87
|
+
cursor = Math.max(cursor, end);
|
|
88
|
+
}
|
|
85
89
|
return { value: maskedValue, end: cursor };
|
|
86
90
|
}
|
|
87
91
|
replaceCharAt(strValue, index, char) {
|
|
@@ -185,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
185
189
|
providedIn: 'root'
|
|
186
190
|
}]
|
|
187
191
|
}] });
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1wYXJzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2stcGFyc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBY3hFLGNBQWM7QUFJZCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFdBQXdCO1FBQ3ZELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksR0FBVyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUF3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBYSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sYUFBYSxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0I7UUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUN2QztRQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDMUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELE1BQU0sZ0JBQWdCLEdBQWEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVsRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFbEYsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDakQsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQzthQUNoRDtTQUNKO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFO1lBQ3BELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLEtBQUssTUFBTSxlQUFlLElBQUksZ0JBQWdCLEVBQUU7WUFDNUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQzdCLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdFO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsV0FBd0I7UUFDbkUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFXLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQXdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU5RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRTtZQUMzQixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxVQUFVLEVBQUU7b0JBQ2hDLFNBQVMsSUFBSSxHQUFHLENBQUM7aUJBQ3BCO2FBQ0o7U0FDSjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxhQUFhLENBQUMsV0FBbUIsRUFBRSxLQUFhLEVBQUUsV0FBd0IsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUN6RyxNQUFNLGlCQUFpQixHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxRSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUM3QixNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2pCO2dCQUNELFNBQVM7YUFDWjtZQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQzttQkFDTCxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUM7bUJBQzdELEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUN4QyxNQUFNO2FBQ1Q7WUFFRCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3hCO1lBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxRDtRQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRU0sYUFBYSxDQUFDLFFBQWdCLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDOUQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlFO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBRTNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6QjtTQUNKO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELDRDQUE0QztJQUNwQyxzQkFBc0IsQ0FBQyxTQUFpQixFQUFFLFFBQWdCLEVBQUUsSUFBWTtRQUM1RSxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLE9BQWdCLENBQUM7UUFDckIsTUFBTSxrQkFBa0IsR0FBRywyQ0FBMkMsQ0FBQztRQUN2RSxNQUFNLHVCQUF1QixHQUFHLGtEQUFrRCxDQUFDO1FBQ25GLE1BQU0sV0FBVyxHQUFHLHdDQUF3QyxDQUFDO1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsK0NBQStDLENBQUM7UUFDekUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBQzNCLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN2QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztRQUV0QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsS0FBSyxHQUFHO2dCQUNKLE9BQU8sR0FBRyxTQUFTLEtBQUssRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUNKLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEdBQUc7Z0JBQ0osS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUNKLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUNKLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEdBQUc7Z0JBQ0osS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixPQUFPLENBQUMsQ0FBQztnQkFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ08sb0JBQW9CLENBQUMsSUFBWSxFQUFFLFdBQXFCO1FBQzVELE1BQU0sa0JBQWtCLEdBQWEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUVqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQy9CLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5QjtTQUNKO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQztJQUM5QixDQUFDO0lBQ08sbUJBQW1CLENBQUMsS0FBYSxFQUFFLGFBQXVCO1FBQzlELE1BQU0sZ0JBQWdCLEdBQWEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUUvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtZQUNyQixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QjtTQUNKO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYTtRQUNuQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7WUFDaEQsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztTQUNuRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7OytHQXpNUSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZmLE1BQU07MkZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBjb25zdCBNQVNLX0ZMQUdTID0gWydDJywgJyYnLCAnYScsICdBJywgJz8nLCAnTCcsICc5JywgJzAnLCAnIyddO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXNrT3B0aW9ucyB7XG4gICAgZm9ybWF0OiBzdHJpbmc7XG4gICAgcHJvbXB0Q2hhcjogc3RyaW5nO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlZCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFza1BhcnNpbmdTZXJ2aWNlIHtcbiAgICBwdWJsaWMgYXBwbHlNYXNrKGlucHV0VmFsOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGNvbnN0IG1hc2s6IHN0cmluZyA9IG1hc2tPcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSB0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrKTtcbiAgICAgICAgY29uc3QgbGl0ZXJhbEtleXM6IG51bWJlcltdID0gQXJyYXkuZnJvbShsaXRlcmFscy5rZXlzKCkpO1xuICAgICAgICBjb25zdCBub25MaXRlcmFsSW5kaWNlczogbnVtYmVyW10gPSB0aGlzLmdldE5vbkxpdGVyYWxJbmRpY2VzKG1hc2ssIGxpdGVyYWxLZXlzKTtcbiAgICAgICAgY29uc3QgbGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKGxpdGVyYWxzLnZhbHVlcygpKTtcblxuICAgICAgICBpZiAoaW5wdXRWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBpbnB1dFZhbC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBfbWFza1N5bSBvZiBtYXNrKSB7XG4gICAgICAgICAgICBvdXRwdXRWYWwgKz0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpdGVyYWxzLmZvckVhY2goKHZhbDogc3RyaW5nLCBrZXk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgb3V0cHV0VmFsID0gdGhpcy5yZXBsYWNlQ2hhckF0KG91dHB1dFZhbCwga2V5LCB2YWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0VmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSB0aGlzLmdldE5vbkxpdGVyYWxWYWx1ZXModmFsdWUsIGxpdGVyYWxWYWx1ZXMpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9uTGl0ZXJhbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IG5vbkxpdGVyYWxWYWx1ZXNbaV07XG4gICAgICAgICAgICBjb25zdCBpc0NoYXJWYWxpZCA9IHRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyLCBub25MaXRlcmFsSW5kaWNlc1tpXSwgbWFzayk7XG5cbiAgICAgICAgICAgIGlmICghaXNDaGFyVmFsaWQgJiYgY2hhciAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxWYWx1ZXNbaV0gPSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vbkxpdGVyYWxWYWx1ZXMubGVuZ3RoID4gbm9uTGl0ZXJhbEluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBub25MaXRlcmFsVmFsdWVzLnNwbGljZShub25MaXRlcmFsSW5kaWNlcy5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBvcyA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgbm9uTGl0ZXJhbFZhbHVlIG9mIG5vbkxpdGVyYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWU7XG4gICAgICAgICAgICBvdXRwdXRWYWwgPSB0aGlzLnJlcGxhY2VDaGFyQXQob3V0cHV0VmFsLCBub25MaXRlcmFsSW5kaWNlc1twb3MrK10sIGNoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2VWYWx1ZUZyb21NYXNrKG1hc2tlZFZhbHVlOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgY29uc3QgbWFzazogc3RyaW5nID0gbWFza09wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCBsaXRlcmFsczogTWFwPG51bWJlciwgc3RyaW5nPiA9IHRoaXMuZ2V0TWFza0xpdGVyYWxzKG1hc2spO1xuICAgICAgICBjb25zdCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMudmFsdWVzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG1hc2tlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWwgKz0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXRWYWw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcGxhY2VJbk1hc2sobWFza2VkVmFsdWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFJlcGxhY2VkIHtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHNQb3NpdGlvbnM6IG51bWJlcltdID0gQXJyYXkuZnJvbSh0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrT3B0aW9ucy5mb3JtYXQpLmtleXMoKSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlSU1FTnVtYmVycyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGxldCBjdXJzb3IgPSBzdGFydDtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBtYXNrZWRWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZCB8fCAoY2hhcnMubGVuZ3RoICYmIGkgPCBtYXNrZWRWYWx1ZS5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsc1Bvc2l0aW9ucy5pbmRleE9mKGkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFyc1swXSA9PT0gbWFza2VkVmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYXJzWzBdXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyc1swXSwgaSwgbWFza09wdGlvbnMuZm9ybWF0KVxuICAgICAgICAgICAgICAgICYmIGNoYXJzWzBdICE9PSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjaGFyID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIGlmIChjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBjaGFyID0gY2hhcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ2hhckF0KG1hc2tlZFZhbHVlLCBpLCBjaGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBtYXNrZWRWYWx1ZSwgZW5kOiBjdXJzb3IgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVwbGFjZUNoYXJBdChzdHJWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3RyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0clZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyBjaGFyICsgc3RyVmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWFza0xpdGVyYWxzKG1hc2s6IHN0cmluZyk6IE1hcDxudW1iZXIsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBsaXRlcmFscyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyID0gbWFzay5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoTUFTS19GTEFHUy5pbmRleE9mKGNoYXIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxpdGVyYWxzLnNldChpLCBjaGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXRlcmFscztcbiAgICB9XG5cbiAgICAvKiogVmFsaWRhdGVzIG9ubHkgbm9uIGxpdGVyYWwgcG9zaXRpb25zLiAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVDaGFyT25Qb3NpdGlvbihpbnB1dENoYXI6IHN0cmluZywgcG9zaXRpb246IG51bWJlciwgbWFzazogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZWdleDogUmVnRXhwO1xuICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbjtcbiAgICAgICAgY29uc3QgbGV0dGVyT3JEaWdpdFJlZ0V4ID0gJ1tcXFxcZFxcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXSc7XG4gICAgICAgIGNvbnN0IGxldHRlckRpZ2l0T3JTcGFjZVJlZ0V4ID0gJ1tcXFxcZFxcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGxldHRlclJlZ0V4ID0gJ1tcXFxcdTAwQzAtXFxcXHUxRkZGXFxcXHUyQzAwLVxcXFx1RDdGRmEtekEtWl0nO1xuICAgICAgICBjb25zdCBsZXR0ZXJTcGFjZVJlZ0V4ID0gJ1tcXFxcdTAwQzAtXFxcXHUxRkZGXFxcXHUyQzAwLVxcXFx1RDdGRmEtekEtWlxcXFx1MDAyMF0nO1xuICAgICAgICBjb25zdCBkaWdpdFJlZ0V4ID0gJ1tcXFxcZF0nO1xuICAgICAgICBjb25zdCBkaWdpdFNwYWNlUmVnRXggPSAnW1xcXFxkXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0U3BlY2lhbFJlZ0V4ID0gJ1tcXFxcZC1cXFxcK10nO1xuXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQXQocG9zaXRpb24pKSB7XG4gICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gaW5wdXRDaGFyICE9PSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnW1xcXFx1MDAyMF0nKTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gIXJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJEaWdpdE9yU3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJPckRpZ2l0UmVnRXgpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSByZWdleC50ZXN0KGlucHV0Q2hhcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAobGV0dGVyU3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChkaWdpdFJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnOSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0U3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChkaWdpdFNwZWNpYWxSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH1cbiAgICBwcml2YXRlIGdldE5vbkxpdGVyYWxJbmRpY2VzKG1hc2s6IHN0cmluZywgbGl0ZXJhbEtleXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCBub25MaXRlcmFsc0luZGljZXM6IG51bWJlcltdID0gbmV3IEFycmF5KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbEtleXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBub25MaXRlcmFsc0luZGljZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub25MaXRlcmFsc0luZGljZXM7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9uTGl0ZXJhbFZhbHVlcyh2YWx1ZTogc3RyaW5nLCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGxpdGVyYWxWYWx1ZXMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxWYWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vbkxpdGVyYWxWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlSU1FTnVtYmVycyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1vvvJDvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJldL2csIChudW0pID0+ICh7XG4gICAgICAgICAgICAn77yRJzogJzEnLCAn77ySJzogJzInLCAn77yTJzogJzMnLCAn77yUJzogJzQnLCAn77yVJzogJzUnLFxuICAgICAgICAgICAgJ++8lic6ICc2JywgJ++8lyc6ICc3JywgJ++8mCc6ICc4JywgJ++8mSc6ICc5JywgJ++8kCc6ICcwJ1xuICAgICAgICB9W251bV0pKTtcbiAgICB9XG59XG4iXX0=
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1wYXJzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2stcGFyc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBY3hFLGNBQWM7QUFJZCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFdBQXdCLEVBQUUsTUFBYyxDQUFDO1FBQ3hFLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksR0FBVyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUF3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBYSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sYUFBYSxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FD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RUFBRTtnQkFDbkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztZQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1NBQ25ELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7K0dBOU1RLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNvbnN0IE1BU0tfRkxBR1MgPSBbJ0MnLCAnJicsICdhJywgJ0EnLCAnPycsICdMJywgJzknLCAnMCcsICcjJ107XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc2tPcHRpb25zIHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBwcm9tcHRDaGFyOiBzdHJpbmc7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VkIHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNYXNrUGFyc2luZ1NlcnZpY2Uge1xuICAgIHB1YmxpYyBhcHBseU1hc2soaW5wdXRWYWw6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBwb3M6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICBsZXQgb3V0cHV0VmFsID0gJyc7XG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICBjb25zdCBtYXNrOiBzdHJpbmcgPSBtYXNrT3B0aW9ucy5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gdGhpcy5nZXRNYXNrTGl0ZXJhbHMobWFzayk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxLZXlzOiBudW1iZXJbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMua2V5cygpKTtcbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbEluZGljZXM6IG51bWJlcltdID0gdGhpcy5nZXROb25MaXRlcmFsSW5kaWNlcyhtYXNrLCBsaXRlcmFsS2V5cyk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShsaXRlcmFscy52YWx1ZXMoKSk7XG5cbiAgICAgICAgaWYgKGlucHV0VmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXRWYWwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgX21hc2tTeW0gb2YgbWFzaykge1xuICAgICAgICAgICAgb3V0cHV0VmFsICs9IG1hc2tPcHRpb25zLnByb21wdENoYXI7XG4gICAgICAgIH1cblxuICAgICAgICBsaXRlcmFscy5mb3JFYWNoKCh2YWw6IHN0cmluZywga2V5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIG91dHB1dFZhbCA9IHRoaXMucmVwbGFjZUNoYXJBdChvdXRwdXRWYWwsIGtleSwgdmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vbkxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdID0gdGhpcy5nZXROb25MaXRlcmFsVmFsdWVzKHZhbHVlLCBsaXRlcmFsVmFsdWVzKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vbkxpdGVyYWxWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWVzW2ldO1xuICAgICAgICAgICAgY29uc3QgaXNDaGFyVmFsaWQgPSB0aGlzLnZhbGlkYXRlQ2hhck9uUG9zaXRpb24oY2hhciwgbm9uTGl0ZXJhbEluZGljZXNbaV0sIG1hc2spO1xuXG4gICAgICAgICAgICBpZiAoIWlzQ2hhclZhbGlkICYmIGNoYXIgIT09IG1hc2tPcHRpb25zLnByb21wdENoYXIpIHtcbiAgICAgICAgICAgICAgICBub25MaXRlcmFsVmFsdWVzW2ldID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub25MaXRlcmFsVmFsdWVzLmxlbmd0aCA+IG5vbkxpdGVyYWxJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgbm9uTGl0ZXJhbFZhbHVlcy5zcGxpY2Uobm9uTGl0ZXJhbEluZGljZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgbm9uTGl0ZXJhbFZhbHVlIG9mIG5vbkxpdGVyYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWU7XG4gICAgICAgICAgICBvdXRwdXRWYWwgPSB0aGlzLnJlcGxhY2VDaGFyQXQob3V0cHV0VmFsLCBub25MaXRlcmFsSW5kaWNlc1twb3MrK10sIGNoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2VWYWx1ZUZyb21NYXNrKG1hc2tlZFZhbHVlOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgY29uc3QgbWFzazogc3RyaW5nID0gbWFza09wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCBsaXRlcmFsczogTWFwPG51bWJlciwgc3RyaW5nPiA9IHRoaXMuZ2V0TWFza0xpdGVyYWxzKG1hc2spO1xuICAgICAgICBjb25zdCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMudmFsdWVzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG1hc2tlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWwgKz0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXRWYWw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcGxhY2VJbk1hc2sobWFza2VkVmFsdWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFJlcGxhY2VkIHtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHNQb3NpdGlvbnM6IG51bWJlcltdID0gQXJyYXkuZnJvbSh0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrT3B0aW9ucy5mb3JtYXQpLmtleXMoKSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlSU1FTnVtYmVycyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGxldCBjdXJzb3IgPSBzdGFydDtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBtYXNrZWRWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZCB8fCAoY2hhcnMubGVuZ3RoICYmIGkgPCBtYXNrZWRWYWx1ZS5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsc1Bvc2l0aW9ucy5pbmRleE9mKGkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFyc1swXSA9PT0gbWFza2VkVmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYXJzWzBdXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyc1swXSwgaSwgbWFza09wdGlvbnMuZm9ybWF0KVxuICAgICAgICAgICAgICAgICYmIGNoYXJzWzBdICE9PSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjaGFyID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIGlmIChjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBjaGFyID0gY2hhcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ2hhckF0KG1hc2tlZFZhbHVlLCBpLCBjaGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyhlbmQgLSBzdGFydCkgPj0gMSkge1xuICAgICAgICAgICAgLy8gc2V0IGN1cnNvciB0byBiZSBtYXggYmV0d2VlbiBsYXN0IGN1cnNvciBwb3MgYW5kIHRoZSBjYWxjdWxhdGVkIGBlbmRgXG4gICAgICAgICAgICAvLyBzaW5jZSBvbiBgZGVsZXRlYCB0aGUgY3Vyc29yIHNob3VsZCBtb3ZlIGZvcndhcmRcbiAgICAgICAgICAgIGN1cnNvciA9IE1hdGgubWF4KGN1cnNvciwgZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBtYXNrZWRWYWx1ZSwgZW5kOiBjdXJzb3J9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXBsYWNlQ2hhckF0KHN0clZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGNoYXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdHJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyVmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArIGNoYXIgKyBzdHJWYWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXNrTGl0ZXJhbHMobWFzazogc3RyaW5nKTogTWFwPG51bWJlciwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBtYXNrLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChNQVNLX0ZMQUdTLmluZGV4T2YoY2hhcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGl0ZXJhbHMuc2V0KGksIGNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpdGVyYWxzO1xuICAgIH1cblxuICAgIC8qKiBWYWxpZGF0ZXMgb25seSBub24gbGl0ZXJhbCBwb3NpdGlvbnMuICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNoYXJPblBvc2l0aW9uKGlucHV0Q2hhcjogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLCBtYXNrOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlZ2V4OiBSZWdFeHA7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuO1xuICAgICAgICBjb25zdCBsZXR0ZXJPckRpZ2l0UmVnRXggPSAnW1xcXFxkXFxcXHUwMEMwLVxcXFx1MUZGRlxcXFx1MkMwMC1cXFxcdUQ3RkZhLXpBLVpdJztcbiAgICAgICAgY29uc3QgbGV0dGVyRGlnaXRPclNwYWNlUmVnRXggPSAnW1xcXFxkXFxcXHUwMEMwLVxcXFx1MUZGRlxcXFx1MkMwMC1cXFxcdUQ3RkZhLXpBLVpcXFxcdTAwMjBdJztcbiAgICAgICAgY29uc3QgbGV0dGVyUmVnRXggPSAnW1xcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXSc7XG4gICAgICAgIGNvbnN0IGxldHRlclNwYWNlUmVnRXggPSAnW1xcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0UmVnRXggPSAnW1xcXFxkXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0U3BhY2VSZWdFeCA9ICdbXFxcXGRcXFxcdTAwMjBdJztcbiAgICAgICAgY29uc3QgZGlnaXRTcGVjaWFsUmVnRXggPSAnW1xcXFxkLVxcXFwrXSc7XG5cbiAgICAgICAgc3dpdGNoIChtYXNrLmNoYXJBdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBpbnB1dENoYXIgIT09ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnJic6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdbXFxcXHUwMDIwXScpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSAhcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlckRpZ2l0T3JTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlck9yRGlnaXRSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlclJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0UmVnRXgpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSByZWdleC50ZXN0KGlucHV0Q2hhcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc5JzpcbiAgICAgICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoZGlnaXRTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0U3BlY2lhbFJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9uTGl0ZXJhbEluZGljZXMobWFzazogc3RyaW5nLCBsaXRlcmFsS2V5czogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IG5vbkxpdGVyYWxzSW5kaWNlczogbnVtYmVyW10gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsS2V5cy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxzSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vbkxpdGVyYWxzSW5kaWNlcztcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXROb25MaXRlcmFsVmFsdWVzKHZhbHVlOiBzdHJpbmcsIGxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBub25MaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbm9uTGl0ZXJhbFZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9uTGl0ZXJhbFZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VJTUVOdW1iZXJzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW++8kO+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8mV0vZywgKG51bSkgPT4gKHtcbiAgICAgICAgICAgICfvvJEnOiAnMScsICfvvJInOiAnMicsICfvvJMnOiAnMycsICfvvJQnOiAnNCcsICfvvJUnOiAnNScsXG4gICAgICAgICAgICAn77yWJzogJzYnLCAn77yXJzogJzcnLCAn77yYJzogJzgnLCAn77yZJzogJzknLCAn77yQJzogJzAnXG4gICAgICAgIH1bbnVtXSkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -150,14 +150,16 @@ export class IgxMaskDirective {
|
|
|
150
150
|
}
|
|
151
151
|
this.inputValue = isInputComplete ?
|
|
152
152
|
this.inputValue.substring(0, this.selectionEnd - numberOfMaskLiterals) + this.inputValue.substring(this.selectionEnd)
|
|
153
|
-
: this._compositionValue
|
|
154
|
-
this.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
: this._compositionValue?.substring(0, this._compositionStartIndex) || this.inputValue;
|
|
154
|
+
if (this._compositionValue) {
|
|
155
|
+
this._start = this.selectionStart;
|
|
156
|
+
this._end = this.selectionEnd;
|
|
157
|
+
this.nativeElement.selectionStart = isInputComplete ? this._start - numberOfMaskLiterals : this._compositionStartIndex;
|
|
158
|
+
this.nativeElement.selectionEnd = this._end - numberOfMaskLiterals;
|
|
159
|
+
this.nativeElement.selectionEnd = this._end;
|
|
160
|
+
this._start = this.selectionStart;
|
|
161
|
+
this._end = this.selectionEnd;
|
|
162
|
+
}
|
|
161
163
|
}
|
|
162
164
|
if (this._hasDropAction) {
|
|
163
165
|
this._start = this.selectionStart;
|
|
@@ -197,7 +199,7 @@ export class IgxMaskDirective {
|
|
|
197
199
|
}
|
|
198
200
|
/** @hidden */
|
|
199
201
|
onDragEnter() {
|
|
200
|
-
if (!this._focused) {
|
|
202
|
+
if (!this._focused && !this._dataValue) {
|
|
201
203
|
this.showMask(this._dataValue);
|
|
202
204
|
}
|
|
203
205
|
}
|
|
@@ -376,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
376
378
|
imports: [CommonModule]
|
|
377
379
|
}]
|
|
378
380
|
}] });
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQ2pELE1BQU0sRUFDTixLQUFLLEVBQUUsUUFBUSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU81QixNQUFNLE9BQU8sZ0JBQWdCO0lBb0l6QixZQUNjLFVBQXdDLEVBQ3hDLFVBQThCLEVBQzlCLFFBQW1CLEVBQ25CLFFBQXNCO1FBSHRCLGVBQVUsR0FBVixVQUFVLENBQThCO1FBQ3hDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQWxIcEM7Ozs7OztXQU1HO1FBRUksZUFBVSxHQUFHLEdBQUcsQ0FBQztRQTZCeEI7Ozs7OztXQU1HO1FBRUksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQWtEakQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBRyxDQUFDLENBQUM7UUFHWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSVIsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFFcEMsdUJBQWtCLEdBQWUsSUFBSSxDQUFDO1FBQ3RDLHNCQUFpQixHQUFxQixJQUFJLENBQUM7SUFNWCxD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WTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa0I1QixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsa0JBQWtCO2dCQVV6QixnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQVl2QixjQUFjO3NCQURwQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpRTFCLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQVFkLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQVdkLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFTdEMsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxXQUFXO2dCQVNsQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVc7Z0JBU2xCLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBOEhwQyxjQUFjO0FBTWQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkE3WmIsZ0JBQWdCLGFBMlpmLFlBQVksYUEzWmIsZ0JBQWdCOzJHQTZaaEIsYUFBYSxZQUZaLFlBQVk7MkZBRWIsYUFBYTtrQkFMekIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLFxuICAgIE91dHB1dCwgUGlwZVRyYW5zZm9ybSwgUmVuZGVyZXIyLFxuICAgIElucHV0LCBOZ01vZHVsZSwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hc2tQYXJzaW5nU2VydmljZSwgTWFza09wdGlvbnMgfSBmcm9tICcuL21hc2stcGFyc2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneE1hc2tEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dLFxuICAgIHNlbGVjdG9yOiAnW2lneE1hc2tdJyxcbiAgICBleHBvcnRBczogJ2lneE1hc2snXG59KVxuZXhwb3J0IGNsYXNzIElneE1hc2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbnB1dCBtYXNrLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2lneE1hc2tdID0gXCInMDAvMDAvMDAwMCdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneE1hc2snKVxuICAgIHB1YmxpYyBnZXQgbWFzaygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFzayB8fCB0aGlzLmRlZmF1bHRNYXNrO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWFzayh2YWw6IHN0cmluZykge1xuICAgICAgICAvLyBCLlAuIDl0aCBKdW5lIDIwMjEgIzc0OTBcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fbWFzaykge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5JbnB1dFZhbHVlID0gdGhpcy5tYXNrUGFyc2VyLnBhcnNlVmFsdWVGcm9tTWFzayh0aGlzLmlucHV0VmFsdWUsIHRoaXMubWFza09wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQbGFjZWhvbGRlcih2YWwpO1xuICAgICAgICAgICAgdGhpcy5fbWFzayA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZShjbGVhbklucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGZpbGxhYmxlIHNwb3QgaW4gdGhlIGlucHV0IG1hc2suXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBcIidfJ1wiLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW3Byb21wdENoYXJdID0gXCInLydcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwcm9tcHRDaGFyID0gJ18nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIHRoZSBib3VuZCB2YWx1ZSBpbmNsdWRlcyB0aGUgZm9ybWF0dGluZyBzeW1ib2xzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2luY2x1ZGVMaXRlcmFsc10gPSBcInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmNsdWRlTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBwaXBlIHRvIGJlIHVzZWQgb24gYmx1ci5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IFtkaXNwbGF5VmFsdWVQaXBlXSA9IFwiZGlzcGxheUZvcm1hdFBpcGVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgcGlwZSB0byBiZSB1c2VkIG9uIGZvY3VzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2ZvY3VzZWRWYWx1ZVBpcGVdID0gXCJpbnB1dEZvcm1hdFBpcGVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb2N1c2VkVmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgZWFjaCB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqIFByb3ZpZGVzIGByYXdWYWx1ZTogc3RyaW5nYCBhbmQgYGZvcm1hdHRlZFZhbHVlOiBzdHJpbmdgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0ICh2YWx1ZUNoYW5nZWQpID0gXCJ2YWx1ZUNoYW5nZWQocmF3VmFsdWU6IHN0cmluZywgZm9ybWF0dGVkVmFsdWU6IHN0cmluZylcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTWFza0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsOyAqL1xuICAgIHByb3RlY3RlZCBnZXQgaW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCBzZXQgaW5wdXRWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IG1hc2tPcHRpb25zKCk6IE1hc2tPcHRpb25zIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5tYXNrIHx8IHRoaXMuZGVmYXVsdE1hc2s7XG4gICAgICAgIGNvbnN0IHByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIgJiYgdGhpcy5wcm9tcHRDaGFyLnN1YnN0cmluZygwLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgZm9ybWF0LCBwcm9tcHRDaGFyIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGlvblN0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIC8vIEVkZ2UoY2xhc3NpYykgYW5kIEZGIGRvbid0IHNlbGVjdCB0ZXh0IG9uIGRyb3BcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCAmJiB0aGlzLl9oYXNEcm9wQWN0aW9uID9cbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgLSB0aGlzLl9kcm9wcGVkRGF0YS5sZW5ndGggOlxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBzZWxlY3Rpb25FbmQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHN0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBnZXQgZW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jb21wb3Npbmc6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9jb21wb3NpdGlvblN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jb21wb3NpdGlvblZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZW5kID0gMDtcbiAgICBwcml2YXRlIF9zdGFydCA9IDA7XG4gICAgcHJpdmF0ZSBfa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbWFzazogc3RyaW5nO1xuICAgIHByaXZhdGUgX29sZFRleHQgPSAnJztcbiAgICBwcml2YXRlIF9kYXRhVmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZHJvcHBlZERhdGE6IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEcm9wQWN0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TWFzayA9ICdDQ0NDQ0NDQ0NDJztcblxuICAgIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIG1hc2tQYXJzZXI6IE1hc2tQYXJzaW5nU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7IH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgJiYgKGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuWiB8fCBrZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLlkpKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICAgICAgdGhpcy5fc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICB0aGlzLl9lbmQgPSB0aGlzLnNlbGVjdGlvbkVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JylcbiAgICBwdWJsaWMgb25Db21wb3NpdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvc2luZykge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4ID0gdGhpcy5fc3RhcnQ7XG4gICAgICAgICAgICB0aGlzLl9jb21wb3NpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuX2NvbXBvc2l0aW9uU3RhcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIGNvbnN0IHZhbHVlVG9QYXJzZSA9IHRoaXMuaW5wdXRWYWx1ZS5zdWJzdHJpbmcodGhpcy5fc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXQodmFsdWVUb1BhcnNlKTtcbiAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIHRoaXMuX2NvbXBvc2l0aW9uVmFsdWUgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlZChldmVudCk6IHZvaWQge1xuICAgICAgICAvKipcbiAgICAgICAgICogJyF0aGlzLl9mb2N1c2VkJyBpcyBhIGZpeCBmb3IgIzgxNjVcbiAgICAgICAgICogT24gcGFnZSBsb2FkIElFIHRyaWdnZXJzIGlucHV0IGV2ZW50cyBiZWZvcmUgZm9jdXMgZXZlbnRzIGFuZFxuICAgICAgICAgKiBpdCBkb2VzIHNvIGZvciBldmVyeSBzaW5nbGUgaW5wdXQgb24gdGhlIHBhZ2UuXG4gICAgICAgICAqIFRoZSBtYXNrIG5lZWRzIHRvIGJlIHByZXZlbnRlZCBmcm9tIGRvaW5nIGFueXRoaW5nIHdoaWxlIHRoaXMgaXMgaGFwcGVuaW5nIGJlY2F1c2VcbiAgICAgICAgICogdGhlIGVuZCB1c2VyIHdpbGwgYmUgdW5hYmxlIHRvIGJsdXIgdGhlIGlucHV0LlxuICAgICAgICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTQwNjEzOC9pbnB1dC1ldmVudC10cmlnZ2VyZWQtb24taW50ZXJuZXQtZXhwbG9yZXItd2hlbi1wbGFjZWhvbGRlci1jaGFuZ2VkXG4gICAgICAgICAqL1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoIDwgdGhpcy5fb2xkVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBzb2Z0d2FyZSBrZXlib2FyZCBpbnB1dCBkZWxldGVcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXkgPSB0aGlzLnBsYXRmb3JtLktFWU1BUC5CQUNLU1BBQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciB0aGUgY29tcG9zaXRpb25lbmQgZXZlbnQgQ2hyb21pdW0gdHJpZ2dlcnMgaW5wdXQgZXZlbnRzIG9mIHR5cGUgJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCcgYW5kXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgdG8gaW5jbHVkZSBtYXNrIGxpdGVyYWxzXG4gICAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnICYmIHRoaXMuX2tleSAhPT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQkFDS1NQQUNFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnB1dENvbXBsZXRlID0gdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4ID09PSAwICYmIHRoaXMuX2VuZCA9PT0gdGhpcy5tYXNrLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyT2ZNYXNrTGl0ZXJhbHMgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpdGVyYWxQb3MgPSB0aGlzLm1hc2tQYXJzZXIuZ2V0TWFza0xpdGVyYWxzKHRoaXMubWFza09wdGlvbnMuZm9ybWF0KS5rZXlzKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBsaXRlcmFsUG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSB0aGlzLl9jb21wb3NpdGlvblN0YXJ0SW5kZXggJiYgaW5kZXggPD0gdGhpcy5fZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZk1hc2tMaXRlcmFscysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGlzSW5wdXRDb21wbGV0ZT9cbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0aW9uRW5kIC0gbnVtYmVyT2ZNYXNrTGl0ZXJhbHMpICsgdGhpcy5pbnB1dFZhbHVlLnN1YnN0cmluZyh0aGlzLnNlbGVjdGlvbkVuZClcbiAgICAgICAgICAgICAgICA6IHRoaXMuX2NvbXBvc2l0aW9uVmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMuX2NvbXBvc2l0aW9uU3RhcnRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID0gaXNJbnB1dENvbXBsZXRlID8gdGhpcy5fc3RhcnQgLSBudW1iZXJPZk1hc2tMaXRlcmFscyA6IHRoaXMuX2NvbXBvc2l0aW9uU3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gdGhpcy5fZW5kIC0gbnVtYmVyT2ZNYXNrTGl0ZXJhbHM7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9IHRoaXMuX2VuZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzRHJvcEFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlVG9QYXJzZSA9ICcnO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX2tleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5ERUxFVEU6XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5fc3RhcnQgPT09IHRoaXMuX2VuZCA/ICsrdGhpcy5fZW5kIDogdGhpcy5fZW5kO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5CQUNLU1BBQ0U6XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YWx1ZVRvUGFyc2UgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyaW5nKHRoaXMuX3N0YXJ0LCB0aGlzLnNlbGVjdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0KHZhbHVlVG9QYXJzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScpXG4gICAgcHVibGljIG9uUGFzdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29sZFRleHQgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgICAgIHRoaXMuX3N0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5yZWFkT25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dNYXNrKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQudGFyZ2V0LnZhbHVlJ10pXG4gICAgcHVibGljIG9uQmx1cih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93RGlzcGxheVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbnRlcicpXG4gICAgcHVibGljIG9uRHJhZ0VudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hc2sodGhpcy5fZGF0YVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJylcbiAgICBwdWJsaWMgb25EcmFnTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93RGlzcGxheVZhbHVlKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9oYXNEcm9wQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZHJvcHBlZERhdGEgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMubWFza09wdGlvbnMuZm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBSZW1vdmUgYWZ0ZXIgZGF0ZS90aW1lIHBpY2tlciBpbnRlZ3JhdGlvbiByZWZhY3RvclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUZXh0ID0gdGhpcy5pbnB1dFZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcm9tcHRDaGFyICYmIHRoaXMucHJvbXB0Q2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tPcHRpb25zLnByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIuc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWUgPyB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSB0aGlzLmluY2x1ZGVMaXRlcmFscyA/IHRoaXMuaW5wdXRWYWx1ZSA6IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyByYXdWYWx1ZTogdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiB0aGlzLmlucHV0VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBzaG93TWFzayh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRWYWx1ZVBpcGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8oRC5QLik6IGZvY3VzZWRWYWx1ZVBpcGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWQgb3IgZm9yY2UtY2hlY2tlZCB0byBtYXRjaCBtYXNrIGZvcm1hdFxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5mb2N1c2VkVmFsdWVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29sZFRleHQgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgPSBzdGFydCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgYWZ0ZXJJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb2xkVGV4dCA9IHRoaXMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdGhpcy5faGFzRHJvcEFjdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGFydCA9IDA7XG4gICAgICAgIHRoaXMuX2VuZCA9IDA7XG4gICAgICAgIHRoaXMuX2tleSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbXBvc2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgICAgIGlmICghcGxhY2Vob2xkZXIgfHwgcGxhY2Vob2xkZXIgPT09IHRoaXMubWFzaykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAncGxhY2Vob2xkZXInLCB2YWx1ZSB8fCB0aGlzLmRlZmF1bHRNYXNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNYXNrKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgPyB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKSA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dCh2YWx1ZVRvUGFyc2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXBsYWNlZERhdGEgPSB0aGlzLm1hc2tQYXJzZXIucmVwbGFjZUluTWFzayh0aGlzLl9vbGRUZXh0LCB2YWx1ZVRvUGFyc2UsIHRoaXMubWFza09wdGlvbnMsIHRoaXMuX3N0YXJ0LCB0aGlzLl9lbmQpO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSByZXBsYWNlZERhdGEudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9rZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLkJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgcmVwbGFjZWREYXRhLmVuZCA9IHRoaXMuX3N0YXJ0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmVwbGFjZWREYXRhLmVuZCk7XG5cbiAgICAgICAgY29uc3QgcmF3VmFsID0gdGhpcy5tYXNrUGFyc2VyLnBhcnNlVmFsdWVGcm9tTWFzayh0aGlzLmlucHV0VmFsdWUsIHRoaXMubWFza09wdGlvbnMpO1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSB0aGlzLmluY2x1ZGVMaXRlcmFscyA/IHRoaXMuaW5wdXRWYWx1ZSA6IHJhd1ZhbDtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLl9kYXRhVmFsdWUpO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyByYXdWYWx1ZTogcmF3VmFsLCBmb3JtYXR0ZWRWYWx1ZTogdGhpcy5pbnB1dFZhbHVlIH0pO1xuICAgICAgICB0aGlzLmFmdGVySW5wdXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEaXNwbGF5VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5tYXNrUGFyc2VyLmFwcGx5TWFzayhudWxsLCB0aGlzLm1hc2tPcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogVGhlIElneE1hc2tNb2R1bGUgcHJvdmlkZXMgdGhlIHtAbGluayBJZ3hNYXNrRGlyZWN0aXZlfSBpbnNpZGUgeW91ciBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWFza0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByYXdWYWx1ZTogc3RyaW5nO1xuICAgIGZvcm1hdHRlZFZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneE1hc2tEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hNYXNrRGlyZWN0aXZlXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hNYXNrTW9kdWxlIHsgfVxuIl19
|
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQ2pELE1BQU0sRUFDTixLQUFLLEVBQUUsUUFBUSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU81QixNQUFNLE9BQU8sZ0JBQWdCO0lBb0l6QixZQUNjLFVBQXdDLEVBQ3hDLFVBQThCLEVBQzlCLFFBQW1CLEVBQ25CLFFBQXNCO1FBSHRCLGVBQVUsR0FBVixVQUFVLENBQThCO1FBQ3hDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQWxIcEM7Ozs7OztXQU1HO1FBRUksZUFBVSxHQUFHLEdBQUcsQ0FBQztRQTZCeEI7Ozs7OztXQU1HO1FBRUksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQWtEakQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFdBQU0sR0FBRyxDQUFDLENBQUM7UUFHWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSVIsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFFcEMsdUJBQWtCLEdBQWUsSUFBSSxDQUFDO1FBQ3RDLHNCQUFpQixHQUFxQixJQUFJLENBQUM7SUFNWCxD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QyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBVUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVdDLFlBQVk7c0JBRGxCLE1BQU07Z0JBMEVBLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa0I1QixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsa0JBQWtCO2dCQVV6QixnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQVl2QixjQUFjO3NCQURwQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtRTFCLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQVFkLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPO2dCQVdkLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFTdEMsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxXQUFXO2dCQVNsQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVc7Z0JBU2xCLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBOEhwQyxjQUFjO0FBTWQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkEvWmIsZ0JBQWdCLGFBNlpmLFlBQVksYUE3WmIsZ0JBQWdCOzJHQStaaEIsYUFBYSxZQUZaLFlBQVk7MkZBRWIsYUFBYTtrQkFMekIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLFxuICAgIE91dHB1dCwgUGlwZVRyYW5zZm9ybSwgUmVuZGVyZXIyLFxuICAgIElucHV0LCBOZ01vZHVsZSwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hc2tQYXJzaW5nU2VydmljZSwgTWFza09wdGlvbnMgfSBmcm9tICcuL21hc2stcGFyc2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneE1hc2tEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dLFxuICAgIHNlbGVjdG9yOiAnW2lneE1hc2tdJyxcbiAgICBleHBvcnRBczogJ2lneE1hc2snXG59KVxuZXhwb3J0IGNsYXNzIElneE1hc2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbnB1dCBtYXNrLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2lneE1hc2tdID0gXCInMDAvMDAvMDAwMCdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneE1hc2snKVxuICAgIHB1YmxpYyBnZXQgbWFzaygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFzayB8fCB0aGlzLmRlZmF1bHRNYXNrO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWFzayh2YWw6IHN0cmluZykge1xuICAgICAgICAvLyBCLlAuIDl0aCBKdW5lIDIwMjEgIzc0OTBcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fbWFzaykge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5JbnB1dFZhbHVlID0gdGhpcy5tYXNrUGFyc2VyLnBhcnNlVmFsdWVGcm9tTWFzayh0aGlzLmlucHV0VmFsdWUsIHRoaXMubWFza09wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5zZXRQbGFjZWhvbGRlcih2YWwpO1xuICAgICAgICAgICAgdGhpcy5fbWFzayA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZShjbGVhbklucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGZpbGxhYmxlIHNwb3QgaW4gdGhlIGlucHV0IG1hc2suXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBcIidfJ1wiLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW3Byb21wdENoYXJdID0gXCInLydcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwcm9tcHRDaGFyID0gJ18nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIHRoZSBib3VuZCB2YWx1ZSBpbmNsdWRlcyB0aGUgZm9ybWF0dGluZyBzeW1ib2xzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2luY2x1ZGVMaXRlcmFsc10gPSBcInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmNsdWRlTGl0ZXJhbHM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBwaXBlIHRvIGJlIHVzZWQgb24gYmx1ci5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0IFtkaXNwbGF5VmFsdWVQaXBlXSA9IFwiZGlzcGxheUZvcm1hdFBpcGVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgcGlwZSB0byBiZSB1c2VkIG9uIGZvY3VzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgW2ZvY3VzZWRWYWx1ZVBpcGVdID0gXCJpbnB1dEZvcm1hdFBpcGVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb2N1c2VkVmFsdWVQaXBlOiBQaXBlVHJhbnNmb3JtO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgZWFjaCB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqIFByb3ZpZGVzIGByYXdWYWx1ZTogc3RyaW5nYCBhbmQgYGZvcm1hdHRlZFZhbHVlOiBzdHJpbmdgIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlucHV0ICh2YWx1ZUNoYW5nZWQpID0gXCJ2YWx1ZUNoYW5nZWQocmF3VmFsdWU6IHN0cmluZywgZm9ybWF0dGVkVmFsdWU6IHN0cmluZylcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTWFza0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsOyAqL1xuICAgIHByb3RlY3RlZCBnZXQgaW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByb3RlY3RlZCBzZXQgaW5wdXRWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IG1hc2tPcHRpb25zKCk6IE1hc2tPcHRpb25zIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5tYXNrIHx8IHRoaXMuZGVmYXVsdE1hc2s7XG4gICAgICAgIGNvbnN0IHByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIgJiYgdGhpcy5wcm9tcHRDaGFyLnN1YnN0cmluZygwLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgZm9ybWF0LCBwcm9tcHRDaGFyIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGlvblN0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIC8vIEVkZ2UoY2xhc3NpYykgYW5kIEZGIGRvbid0IHNlbGVjdCB0ZXh0IG9uIGRyb3BcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCAmJiB0aGlzLl9oYXNEcm9wQWN0aW9uID9cbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgLSB0aGlzLl9kcm9wcGVkRGF0YS5sZW5ndGggOlxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBzZWxlY3Rpb25FbmQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHN0YXJ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBnZXQgZW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jb21wb3Npbmc6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF9jb21wb3NpdGlvblN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jb21wb3NpdGlvblZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZW5kID0gMDtcbiAgICBwcml2YXRlIF9zdGFydCA9IDA7XG4gICAgcHJpdmF0ZSBfa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbWFzazogc3RyaW5nO1xuICAgIHByaXZhdGUgX29sZFRleHQgPSAnJztcbiAgICBwcml2YXRlIF9kYXRhVmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZHJvcHBlZERhdGE6IHN0cmluZztcbiAgICBwcml2YXRlIF9oYXNEcm9wQWN0aW9uOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TWFzayA9ICdDQ0NDQ0NDQ0NDJztcblxuICAgIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIG1hc2tQYXJzZXI6IE1hc2tQYXJzaW5nU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7IH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgJiYgKGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuWiB8fCBrZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLlkpKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICAgICAgdGhpcy5fc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICB0aGlzLl9lbmQgPSB0aGlzLnNlbGVjdGlvbkVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JylcbiAgICBwdWJsaWMgb25Db21wb3NpdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvc2luZykge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4ID0gdGhpcy5fc3RhcnQ7XG4gICAgICAgICAgICB0aGlzLl9jb21wb3NpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuX2NvbXBvc2l0aW9uU3RhcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIGNvbnN0IHZhbHVlVG9QYXJzZSA9IHRoaXMuaW5wdXRWYWx1ZS5zdWJzdHJpbmcodGhpcy5fc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXQodmFsdWVUb1BhcnNlKTtcbiAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIHRoaXMuX2NvbXBvc2l0aW9uVmFsdWUgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlZChldmVudCk6IHZvaWQge1xuICAgICAgICAvKipcbiAgICAgICAgICogJyF0aGlzLl9mb2N1c2VkJyBpcyBhIGZpeCBmb3IgIzgxNjVcbiAgICAgICAgICogT24gcGFnZSBsb2FkIElFIHRyaWdnZXJzIGlucHV0IGV2ZW50cyBiZWZvcmUgZm9jdXMgZXZlbnRzIGFuZFxuICAgICAgICAgKiBpdCBkb2VzIHNvIGZvciBldmVyeSBzaW5nbGUgaW5wdXQgb24gdGhlIHBhZ2UuXG4gICAgICAgICAqIFRoZSBtYXNrIG5lZWRzIHRvIGJlIHByZXZlbnRlZCBmcm9tIGRvaW5nIGFueXRoaW5nIHdoaWxlIHRoaXMgaXMgaGFwcGVuaW5nIGJlY2F1c2VcbiAgICAgICAgICogdGhlIGVuZCB1c2VyIHdpbGwgYmUgdW5hYmxlIHRvIGJsdXIgdGhlIGlucHV0LlxuICAgICAgICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTQwNjEzOC9pbnB1dC1ldmVudC10cmlnZ2VyZWQtb24taW50ZXJuZXQtZXhwbG9yZXItd2hlbi1wbGFjZWhvbGRlci1jaGFuZ2VkXG4gICAgICAgICAqL1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoIDwgdGhpcy5fb2xkVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBzb2Z0d2FyZSBrZXlib2FyZCBpbnB1dCBkZWxldGVcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXkgPSB0aGlzLnBsYXRmb3JtLktFWU1BUC5CQUNLU1BBQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciB0aGUgY29tcG9zaXRpb25lbmQgZXZlbnQgQ2hyb21pdW0gdHJpZ2dlcnMgaW5wdXQgZXZlbnRzIG9mIHR5cGUgJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCcgYW5kXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgdG8gaW5jbHVkZSBtYXNrIGxpdGVyYWxzXG4gICAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnICYmIHRoaXMuX2tleSAhPT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQkFDS1NQQUNFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnB1dENvbXBsZXRlID0gdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4ID09PSAwICYmIHRoaXMuX2VuZCA9PT0gdGhpcy5tYXNrLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyT2ZNYXNrTGl0ZXJhbHMgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpdGVyYWxQb3MgPSB0aGlzLm1hc2tQYXJzZXIuZ2V0TWFza0xpdGVyYWxzKHRoaXMubWFza09wdGlvbnMuZm9ybWF0KS5rZXlzKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBsaXRlcmFsUG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSB0aGlzLl9jb21wb3NpdGlvblN0YXJ0SW5kZXggJiYgaW5kZXggPD0gdGhpcy5fZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZk1hc2tMaXRlcmFscysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGlzSW5wdXRDb21wbGV0ZSA/XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGlvbkVuZCAtIG51bWJlck9mTWFza0xpdGVyYWxzKSArIHRoaXMuaW5wdXRWYWx1ZS5zdWJzdHJpbmcodGhpcy5zZWxlY3Rpb25FbmQpXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9jb21wb3NpdGlvblZhbHVlPy5zdWJzdHJpbmcoMCwgdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4KSB8fCB0aGlzLmlucHV0VmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9zaXRpb25WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZCA9IHRoaXMuc2VsZWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBpc0lucHV0Q29tcGxldGUgPyB0aGlzLl9zdGFydCAtIG51bWJlck9mTWFza0xpdGVyYWxzIDogdGhpcy5fY29tcG9zaXRpb25TdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gdGhpcy5fZW5kIC0gbnVtYmVyT2ZNYXNrTGl0ZXJhbHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPSB0aGlzLl9lbmQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gdGhpcy5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc0Ryb3BBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZVRvUGFyc2UgPSAnJztcbiAgICAgICAgc3dpdGNoICh0aGlzLl9rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuREVMRVRFOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VuZCA9IHRoaXMuX3N0YXJ0ID09PSB0aGlzLl9lbmQgPyArK3RoaXMuX2VuZCA6IHRoaXMuX2VuZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQkFDS1NQQUNFOlxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFsdWVUb1BhcnNlID0gdGhpcy5pbnB1dFZhbHVlLnN1YnN0cmluZyh0aGlzLl9zdGFydCwgdGhpcy5zZWxlY3Rpb25FbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dCh2YWx1ZVRvUGFyc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnKVxuICAgIHB1YmxpYyBvblBhc3RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbGRUZXh0ID0gdGhpcy5pbnB1dFZhbHVlO1xuICAgICAgICB0aGlzLl9zdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93TWFzayh0aGlzLmlucHV0VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICAgIHB1YmxpYyBvbkJsdXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Rpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnZW50ZXInKVxuICAgIHB1YmxpYyBvbkRyYWdFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2VkICYmICF0aGlzLl9kYXRhVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hc2sodGhpcy5fZGF0YVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJylcbiAgICBwdWJsaWMgb25EcmFnTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93RGlzcGxheVZhbHVlKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9oYXNEcm9wQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZHJvcHBlZERhdGEgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMubWFza09wdGlvbnMuZm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBSZW1vdmUgYWZ0ZXIgZGF0ZS90aW1lIHBpY2tlciBpbnRlZ3JhdGlvbiByZWZhY3RvclxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUZXh0ID0gdGhpcy5pbnB1dFZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcm9tcHRDaGFyICYmIHRoaXMucHJvbXB0Q2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tPcHRpb25zLnByb21wdENoYXIgPSB0aGlzLnByb21wdENoYXIuc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdmFsdWUgPyB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSB0aGlzLmluY2x1ZGVMaXRlcmFscyA/IHRoaXMuaW5wdXRWYWx1ZSA6IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyByYXdWYWx1ZTogdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiB0aGlzLmlucHV0VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBzaG93TWFzayh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRWYWx1ZVBpcGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8oRC5QLik6IGZvY3VzZWRWYWx1ZVBpcGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWQgb3IgZm9yY2UtY2hlY2tlZCB0byBtYXRjaCBtYXNrIGZvcm1hdFxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5mb2N1c2VkVmFsdWVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29sZFRleHQgPSB0aGlzLmlucHV0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgPSBzdGFydCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgYWZ0ZXJJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb2xkVGV4dCA9IHRoaXMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdGhpcy5faGFzRHJvcEFjdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGFydCA9IDA7XG4gICAgICAgIHRoaXMuX2VuZCA9IDA7XG4gICAgICAgIHRoaXMuX2tleSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbXBvc2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgICAgIGlmICghcGxhY2Vob2xkZXIgfHwgcGxhY2Vob2xkZXIgPT09IHRoaXMubWFzaykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAncGxhY2Vob2xkZXInLCB2YWx1ZSB8fCB0aGlzLmRlZmF1bHRNYXNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNYXNrKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgPyB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKHZhbHVlLCB0aGlzLm1hc2tPcHRpb25zKSA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dCh2YWx1ZVRvUGFyc2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXBsYWNlZERhdGEgPSB0aGlzLm1hc2tQYXJzZXIucmVwbGFjZUluTWFzayh0aGlzLl9vbGRUZXh0LCB2YWx1ZVRvUGFyc2UsIHRoaXMubWFza09wdGlvbnMsIHRoaXMuX3N0YXJ0LCB0aGlzLl9lbmQpO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSByZXBsYWNlZERhdGEudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9rZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLkJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgcmVwbGFjZWREYXRhLmVuZCA9IHRoaXMuX3N0YXJ0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UocmVwbGFjZWREYXRhLmVuZCk7XG5cbiAgICAgICAgY29uc3QgcmF3VmFsID0gdGhpcy5tYXNrUGFyc2VyLnBhcnNlVmFsdWVGcm9tTWFzayh0aGlzLmlucHV0VmFsdWUsIHRoaXMubWFza09wdGlvbnMpO1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSB0aGlzLmluY2x1ZGVMaXRlcmFscyA/IHRoaXMuaW5wdXRWYWx1ZSA6IHJhd1ZhbDtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLl9kYXRhVmFsdWUpO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyByYXdWYWx1ZTogcmF3VmFsLCBmb3JtYXR0ZWRWYWx1ZTogdGhpcy5pbnB1dFZhbHVlIH0pO1xuICAgICAgICB0aGlzLmFmdGVySW5wdXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEaXNwbGF5VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5tYXNrUGFyc2VyLmFwcGx5TWFzayhudWxsLCB0aGlzLm1hc2tPcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogVGhlIElneE1hc2tNb2R1bGUgcHJvdmlkZXMgdGhlIHtAbGluayBJZ3hNYXNrRGlyZWN0aXZlfSBpbnNpZGUgeW91ciBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWFza0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByYXdWYWx1ZTogc3RyaW5nO1xuICAgIGZvcm1hdHRlZFZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneE1hc2tEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hNYXNrRGlyZWN0aXZlXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hNYXNrTW9kdWxlIHsgfVxuIl19
|
|
@@ -261,7 +261,8 @@ export class IgxHierarchicalGridNavigationService extends IgxGridNavigationServi
|
|
|
261
261
|
const gridTop = this._getMaxTop(this.grid);
|
|
262
262
|
const diffTop = rowElem.getBoundingClientRect().bottom -
|
|
263
263
|
rowElem.offsetHeight - gridTop;
|
|
264
|
-
|
|
264
|
+
// Adding Math.Round because Chrome has some inconsistencies when the page is zoomed
|
|
265
|
+
const isInView = isNext ? Math.round(diffBottom) <= 0 : Math.round(diffTop) >= 0;
|
|
265
266
|
const calcOffset = isNext ? diffBottom : diffTop;
|
|
266
267
|
return { inView: isInView, offset: calcOffset };
|
|
267
268
|
}
|
|
@@ -382,4 +383,4 @@ IgxHierarchicalGridNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVe
|
|
|
382
383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: IgxHierarchicalGridNavigationService, decorators: [{
|
|
383
384
|
type: Injectable
|
|
384
385
|
}] });
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5FLE9BQU8sRUFBZSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUduRixNQUFNLE9BQU8sb0NBQXFDLFNBQVEsd0JBQXdCO0lBRGxGOztRQUljLHVCQUFrQixHQUFHLEtBQUssQ0FBQztLQXNZeEM7SUFuWVUsYUFBYSxDQUFDLEtBQW9CO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9GLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbEYsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsdUJBQXVC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QUFwQyxvQ0FBb0M7a0JBRGhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5BVklHQVRJT05fS0VZUywgU1VQUE9SVEVEX0tFWVMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJUGF0aFNlZ21lbnQsIFJvd1R5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUFjdGl2ZU5vZGUsIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSBleHRlbmRzIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuXG4gICAgcHJvdGVjdGVkIF9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG5cbiAgICBwdWJsaWMgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIShTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpICYmXG4gICAgICAgICAgICAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkICYmICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0R3JpZCA9IHRoaXMuZ2V0Q2xvc2VzdEVsZW1CeVRhZyhldmVudC50YXJnZXQsICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnKTtcbiAgICAgICAgaWYgKHRhcmdldEdyaWQgIT09IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ05hdmlnYXRpb24gJiYgTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIGZvY3VzIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gb25lIGdyaWQgdG8gYW5vdGhlciwgaG93ZXZlciB0aGVyZSBpcyBhIHBlbmRpbmcgc2Nyb2xsIG9wZXJhdGlvblxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLCBhbnkgYWRkaXRpb25hbCBuYXZpZ2F0aW9uIGtleXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgIC8vIHVudGlsbCBvcGVyYXRpb24gY29tcGxldGUuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICBpZiAocmVjICYmIHRoaXMuZ3JpZC5pc0NoaWxkR3JpZFJlY29yZChyZWMpKSB7XG4gICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IHZpcnRTdGF0ZSA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zdGF0ZTtcbiAgICAgICAgICAgICBjb25zdCBpblZpZXcgPSByb3dJbmRleCA+PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCAmJiByb3dJbmRleCA8PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCArIHZpcnRTdGF0ZS5jaHVua1NpemU7XG4gICAgICAgICAgICAgY29uc3QgaXNOZXh0ID0gIHRoaXMuYWN0aXZlTm9kZS5yb3cgPCByb3dJbmRleDtcbiAgICAgICAgICAgICBjb25zdCB0YXJnZXRMYXlvdXRJbmRleCA9IGlzTmV4dCA/IG51bGwgOiB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgaWYgKGluVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb0NoaWxkKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGlzTmV4dCwgdGFyZ2V0TGF5b3V0SW5kZXgsIGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChyb3dJbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGlzTmV4dCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsVG9wID0gc2Nyb2xsQW1vdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVRvQ2hpbGQocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNMYXN0ID0gcm93SW5kZXggPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmICgocm93SW5kZXggPT09IC0xIHx8IGlzTGFzdCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHJlYWNoZWQgZW5kIG9mIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nSW5kZXggPSB0aGlzLm5leHRTaWJsaW5nSW5kZXgoaXNMYXN0KTtcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0luZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnBhcmVudC5uYXZpZ2F0aW9uLl9tb3ZlVG9DaGlsZCh0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNMYXN0LCBuZXh0U2libGluZ0luZGV4LCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb1BhcmVudChpc0xhc3QsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmV4dCA9IHRoaXMuYWN0aXZlTm9kZSAmJiB0eXBlb2YgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gJ251bWJlcicgPyByb3dJbmRleCA+IHRoaXMuYWN0aXZlTm9kZS5yb3cgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNiSGFuZGxlciA9IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleCwgaXNOZXh0KTtcbiAgICAgICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHsgcm93OiBudWxsLCBjb2x1bW46IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiSGFuZGxlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0geyByb3c6IG51bGwsIGNvbHVtbjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXggPSAtMSwgaXNOZXh0Pykge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaW5kZXhdO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2hpbGRHcmlkUmVjb3JkKHRhcmdldFJlYykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChpbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2Nyb2xsID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9ICFpc05leHQgPyBzY3JvbGxBbW91bnQgPiBjdXJyU2Nyb2xsIDogY3VyclNjcm9sbCA8IHNjcm9sbEFtb3VudDtcbiAgICAgICAgICAgIHJldHVybiBzaG91bGRTY3JvbGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzVGJvZHkoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0ge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKDAsIDAsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIuZm9jdXNUYm9keShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbmV4dFNpYmxpbmdJbmRleChpc05leHQpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0S2V5ID0gdGhpcy5ncmlkLmNoaWxkUm93LmxheW91dC5rZXk7XG4gICAgICAgIGNvbnN0IGxheW91dEluZGV4ID0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMuaW5kZXhPZihsYXlvdXRLZXkpO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpc05leHQgPyBsYXlvdXRJbmRleCArIDEgOiBsYXlvdXRJbmRleCAtIDE7XG4gICAgICAgIGlmIChuZXh0SW5kZXggPD0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMubGVuZ3RoIC0gMSAmJiBuZXh0SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBzY3JvbGxpbmcgaW4gY2hpbGQgZ3JpZCBhbmQgZW5zdXJlcyB0YXJnZXQgY2hpbGQgcm93IGlzIGluIG1haW4gZ3JpZCB2aWV3IHBvcnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggVGhlIHJvdyBpbmRleCB3aGljaCBzaG91bGQgYmUgaW4gdmlldy5cbiAgICAgKiBAcGFyYW0gaXNOZXh0ICBPcHRpb25hbC4gV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleDogbnVtYmVyLCBpc05leHQ/OiBib29sZWFuLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwocm93SW5kZXgsIC0xLCBpc05leHQpO1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5wZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXgsIC0xLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFJvdyBpbmRleCB0aGF0IHNob3VsZCBjb21lIGluIHZpZXcuXG4gICAgICogQHBhcmFtIGlzTmV4dCAgV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25JbmZvID0gdGhpcy5nZXRQb3NpdGlvbkluZm8ocm93LCBpc05leHQpO1xuICAgICAgICBpZiAoIXBvc2l0aW9uSW5mby5pblZpZXcpIHtcbiAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgZnJvbSB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBzY3JvbGxpbmcgaXMgY29tcGxldGUuXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlR3JpZCA9IGlzTmV4dCA/IHRoaXMuZ2V0TmV4dFNjcm9sbGFibGVEb3duKHRoaXMuZ3JpZCkgOiB0aGlzLmdldE5leHRTY3JvbGxhYmxlVXAodGhpcy5ncmlkKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIucmVjYWxjVXBkYXRlU2l6ZXMoKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuYWRkU2Nyb2xsVG9wKHBvc2l0aW9uSW5mby5vZmZzZXQpO1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUdyaWQuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiB0byBjaGlsZCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvd0luZGV4IFRoZSBwYXJlbnQgcm93IGluZGV4LCBhdCB3aGljaCB0aGUgY2hpbGQgZ3JpZCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gY2hpbGRMYXlvdXRJbmRleCBPcHRpb25hbC4gVGhlIGluZGV4IG9mIHRoZSBjaGlsZCByb3cgaXNsYW5kIHRvIHdoaWNoIHRoZSBjaGlsZCBncmlkIGJlbG9uZ3MgdG8uIFVzZXMgZmlyc3QgaWYgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX21vdmVUb0NoaWxkKHBhcmVudFJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleDogbnVtYmVyLCBpc05leHQ6IGJvb2xlYW4sIGNoaWxkTGF5b3V0SW5kZXg/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2I/OiAoYXJnOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgcmkgPSB0eXBlb2YgY2hpbGRMYXlvdXRJbmRleCAhPT0gJ251bWJlcicgP1xuICAgICAgICAgdGhpcy5ncmlkLmNoaWxkTGF5b3V0TGlzdC5maXJzdCA6IHRoaXMuZ3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpW2NoaWxkTGF5b3V0SW5kZXhdO1xuICAgICAgICBjb25zdCByb3dJZCA9IHRoaXMuZ3JpZC5kYXRhVmlld1twYXJlbnRSb3dJbmRleF0ucm93SUQ7XG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50OiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICByb3dJRDogcm93SWQsXG4gICAgICAgICAgICByb3dJc2xhbmRLZXk6IHJpLmtleVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGlsZEdyaWQgPSAgdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoU2VnbWVudF0pO1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IGlzTmV4dCA/IDAgOiBjaGlsZEdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjID0gIGNoaWxkR3JpZC5kYXRhVmlld1t0YXJnZXRJbmRleF07XG4gICAgICAgIGlmICghdGFyZ2V0UmVjKSB7XG4gICAgICAgICAgICAvLyBpZiBubyB0YXJnZXQgcmVjLCB0aGVuIG1vdmUgb24gaW4gbmV4dCBzaWJsaW5nIG9yIHBhcmVudFxuICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZEdyaWQuaXNDaGlsZEdyaWRSZWNvcmQodGFyZ2V0UmVjKSkge1xuICAgICAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIGEgY2hpbGQgZ3JpZCByZWNvcmQgc2hvdWxkIG1vdmUgaW50byBpdC5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID0gbnVsbDtcbiAgICAgICAgICAgIGNoaWxkR3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbn07XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0TGF5b3V0SW5kZXggPSBpc05leHQgPyAwIDogY2hpbGRHcmlkLmNoaWxkTGF5b3V0TGlzdC50b0FycmF5KCkubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5fbW92ZVRvQ2hpbGQodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZEdyaWROYXYgPSAgY2hpbGRHcmlkLm5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSBjaGlsZEdyaWROYXYubGFzdENvbHVtbkluZGV4O1xuICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHZpc2libGVDb2xJbmRleCA8PSBsYXN0VmlzaWJsZUluZGV4ID8gdmlzaWJsZUNvbEluZGV4IDogbGFzdFZpc2libGVJbmRleDtcbiAgICAgICAgY2hpbGRHcmlkTmF2LmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogY29sdW1uSW5kZXh9O1xuICAgICAgICBjaGlsZEdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGVUbyh0YXJnZXRJbmRleCwgY29sdW1uSW5kZXgsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiBiYWNrIHRvIHBhcmVudCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9tb3ZlVG9QYXJlbnQoaXNOZXh0OiBib29sZWFuLCBjb2x1bW5JbmRleCwgY2I/KSB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSB0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXg7XG4gICAgICAgIGNvbnN0IGhhc05leHRUYXJnZXQgPSB0aGlzLmhhc05leHRUYXJnZXQodGhpcy5ncmlkLnBhcmVudCwgaW5kZXhJblBhcmVudCwgaXNOZXh0KTtcbiAgICAgICAgaWYgKCFoYXNOZXh0VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhckFjdGl2YXRpb24oKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSAgaXNOZXh0ID8gaW5kZXhJblBhcmVudCArIDEgOiBpbmRleEluUGFyZW50IC0gMTtcbiAgICAgICAgY29uc3QgbGFzdFZpc2libGVJbmRleCA9IHRoaXMuZ3JpZC5wYXJlbnQubmF2aWdhdGlvbi5sYXN0Q29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnN0IG5leHRDb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4IDw9IGxhc3RWaXNpYmxlSW5kZXggPyBjb2x1bW5JbmRleCA6IGxhc3RWaXNpYmxlSW5kZXg7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2JGdW5jID0gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIGFyZ3MudGFyZ2V0LmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyaWQucGFyZW50Lm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0Um93SW5kZXgsIG5leHRDb2x1bW5JbmRleCwgY2JGdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIG9uIHRoZSByb3cgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3QgZ3JpZCB2aWV3IHBvcnQuXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgaW4gdmlldyBhbmQgaXRzIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dPYmpcbiAgICAgKiBAcGFyYW0gaXNOZXh0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBvc2l0aW9uSW5mbyhyb3c6IFJvd1R5cGUsIGlzTmV4dDogYm9vbGVhbikge1xuICAgICAgICAvLyBYWFg6IEZpeCB0eXBlXG4gICAgICAgIGxldCByb3dFbGVtID0gcm93Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICgocm93IGFzIGFueSkubGF5b3V0KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZExheW91dEtleXMgPSB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzO1xuICAgICAgICAgICAgY29uc3QgcmlLZXkgPSBpc05leHQgPyBjaGlsZExheW91dEtleXNbMF0gOiBjaGlsZExheW91dEtleXNbY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgcGF0aFNlZ21lbnQ6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICByb3dJRDogcm93LmRhdGEucm93SUQsXG4gICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiByaUtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZCA9ICB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhTZWdtZW50XSk7XG4gICAgICAgICAgICByb3dFbGVtID0gY2hpbGRHcmlkLnRmb290Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEJvdHRvbSA9IHRoaXMuX2dldE1pbkJvdHRvbSh0aGlzLmdyaWQpO1xuICAgICAgICBjb25zdCBkaWZmQm90dG9tID1cbiAgICAgICAgcm93RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBncmlkQm90dG9tO1xuICAgICAgICBjb25zdCBncmlkVG9wID0gdGhpcy5fZ2V0TWF4VG9wKHRoaXMuZ3JpZCk7XG4gICAgICAgIGNvbnN0IGRpZmZUb3AgPSByb3dFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtXG4gICAgICAgIHJvd0VsZW0ub2Zmc2V0SGVpZ2h0IC0gZ3JpZFRvcDtcbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc05leHQgPyBkaWZmQm90dG9tIDw9IDAgOiBkaWZmVG9wID49IDA7XG4gICAgICAgIGNvbnN0IGNhbGNPZmZzZXQgPSAgaXNOZXh0ID8gZGlmZkJvdHRvbSA6IGRpZmZUb3A7XG5cbiAgICAgICAgcmV0dXJuIHsgaW5WaWV3OiBpc0luVmlldywgb2Zmc2V0OiBjYWxjT2Zmc2V0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbG9zZXN0IGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBzdGFydCB0aGUgc2VhcmNoLlxuICAgICAqIEBwYXJhbSB0YXJnZXRUYWcgVGhlIHRhcmdldCBlbGVtZW50IHRhZyBuYW1lLCBmb3Igd2hpY2ggdG8gc2VhcmNoLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRDbG9zZXN0RWxlbUJ5VGFnKHNvdXJjZUVsZW0sIHRhcmdldFRhZykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gc291cmNlRWxlbTtcbiAgICAgICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YXJnZXRUYWcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aXZhdGlvbigpIHtcbiAgICAgICAgLy8gY2xlYXIgaWYgcHJldmlvdXMgYWN0aXZhdGlvbiBleGlzdHMuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGUgJiYgT2JqZWN0LmtleXModGhpcy5hY3RpdmVOb2RlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IE9iamVjdC5hc3NpZ24oe30gYXMgSUFjdGl2ZU5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNOZXh0VGFyZ2V0KGdyaWQ6IEdyaWRUeXBlLCBpbmRleDogbnVtYmVyLCBpc05leHQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSAgaXNOZXh0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgICAgICBjb25zdCBoYXNUYXJnZXRSZWNvcmQgPSAhIWdyaWQuZGF0YVZpZXdbdGFyZ2V0Um93SW5kZXhdO1xuICAgICAgICBpZiAoaGFzVGFyZ2V0UmVjb3JkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBoYXNUYXJnZXRSZWNvcmRJblBhcmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJblBhcmVudCA9IGdyaWQuY2hpbGRSb3cuaW5kZXg7XG4gICAgICAgICAgICAgICAgaGFzVGFyZ2V0UmVjb3JkSW5QYXJlbnQgPSB0aGlzLmhhc05leHRUYXJnZXQoZ3JpZC5wYXJlbnQsIGluZGV4SW5QYXJlbnQsIGlzTmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzVGFyZ2V0UmVjb3JkSW5QYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXggdG9wIHZpZXcgaW4gdGhlIGN1cnJlbnQgZ3JpZCBoaWVyYXJjaHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1heFRvcChncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQ7XG4gICAgICAgIGxldCB0b3AgPSBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgd2hpbGUgKGN1cnJHcmlkLnBhcmVudCkge1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBwaW5uZWRSb3dzSGVpZ2h0ID0gY3VyckdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiBjdXJyR3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/IGN1cnJHcmlkLnBpbm5lZFJvd0hlaWdodCA6IDA7XG4gICAgICAgICAgICB0b3AgPSBNYXRoLm1heCh0b3AsIGN1cnJHcmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgcGlubmVkUm93c0hlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtaW4gYm90dG9tIHZpZXcgaW4gdGhlIGN1cnJlbnQgZ3JpZCBoaWVyYXJjaHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1pbkJvdHRvbShncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQ7XG4gICAgICAgIGxldCBib3R0b20gPSBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAgICAgd2hpbGUgKGN1cnJHcmlkLnBhcmVudCkge1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBwaW5uZWRSb3dzSGVpZ2h0ID0gY3VyckdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiAhY3VyckdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgPyBjdXJyR3JpZC5waW5uZWRSb3dIZWlnaHQgOiAwO1xuICAgICAgICAgICAgYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIHBpbm5lZFJvd3NIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIG5leHQgZ3JpZCB0aGF0IGFsbG93cyBzY3JvbGxpbmcgZG93bi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIFRoZSBncmlkIGZyb20gd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRTY3JvbGxhYmxlRG93bihncmlkKSB7XG4gICAgICAgIGxldCBjdXJyR3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICBpZiAoIWN1cnJHcmlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncmlkLCBwcmV2OiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjcm9sbFRvcCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBsZXQgc2Nyb2xsSGVpZ2h0ID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBsZXQgbm9uU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA9PT0gMCB8fFxuICAgICAgICAgICAgTWF0aC5yb3VuZChzY3JvbGxUb3AgKyBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JDb250YWluZXJTaXplKSA9PT0gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBsZXQgcHJldiA9IGdyaWQ7XG4gICAgICAgIHdoaWxlIChub25TY3JvbGxhYmxlICYmIGN1cnJHcmlkLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldiA9IGN1cnJHcmlkO1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIG5vblNjcm9sbGFibGUgPSBzY3JvbGxIZWlnaHQgPT09IDAgfHxcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNjcm9sbFRvcCArIGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmlneEZvckNvbnRhaW5lclNpemUpID09PSBzY3JvbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZ3JpZDogY3VyckdyaWQsIHByZXYgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgbmV4dCBncmlkIHRoYXQgYWxsb3dzIHNjcm9sbGluZyB1cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIFRoZSBncmlkIGZyb20gd2hpY2ggdG8gYmVnaW4gdGhlIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRTY3JvbGxhYmxlVXAoZ3JpZCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgaWYgKCFjdXJyR3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JpZCwgcHJldjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25TY3JvbGxhYmxlID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUG9zaXRpb24gPT09IDA7XG4gICAgICAgIGxldCBwcmV2ID0gZ3JpZDtcbiAgICAgICAgd2hpbGUgKG5vblNjcm9sbGFibGUgJiYgY3VyckdyaWQucGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmV2ID0gY3VyckdyaWQ7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgICAgIG5vblNjcm9sbGFibGUgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbiA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBncmlkOiBjdXJyR3JpZCwgcHJldiB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5FLE9BQU8sRUFBZSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUduRixNQUFNLE9BQU8sb0NBQXFDLFNBQVEsd0JBQXdCO0lBRGxGOztRQUljLHVCQUFrQixHQUFHLEtBQUssQ0FBQztLQXVZeEM7SUFwWVUsYUFBYSxDQUFDLEtBQW9CO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9GLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbEYsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsdUJBQXVC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LEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7aUlBellRLG9DQUFvQztxSUFBcEMsb0NBQW9DOzJGQUFwQyxvQ0FBb0M7a0JBRGhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5BVklHQVRJT05fS0VZUywgU1VQUE9SVEVEX0tFWVMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJUGF0aFNlZ21lbnQsIFJvd1R5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUFjdGl2ZU5vZGUsIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSBleHRlbmRzIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuXG4gICAgcHJvdGVjdGVkIF9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG5cbiAgICBwdWJsaWMgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIShTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpICYmXG4gICAgICAgICAgICAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkICYmICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0R3JpZCA9IHRoaXMuZ2V0Q2xvc2VzdEVsZW1CeVRhZyhldmVudC50YXJnZXQsICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnKTtcbiAgICAgICAgaWYgKHRhcmdldEdyaWQgIT09IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ05hdmlnYXRpb24gJiYgTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIGZvY3VzIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gb25lIGdyaWQgdG8gYW5vdGhlciwgaG93ZXZlciB0aGVyZSBpcyBhIHBlbmRpbmcgc2Nyb2xsIG9wZXJhdGlvblxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLCBhbnkgYWRkaXRpb25hbCBuYXZpZ2F0aW9uIGtleXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgIC8vIHVudGlsbCBvcGVyYXRpb24gY29tcGxldGUuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICBpZiAocmVjICYmIHRoaXMuZ3JpZC5pc0NoaWxkR3JpZFJlY29yZChyZWMpKSB7XG4gICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IHZpcnRTdGF0ZSA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zdGF0ZTtcbiAgICAgICAgICAgICBjb25zdCBpblZpZXcgPSByb3dJbmRleCA+PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCAmJiByb3dJbmRleCA8PSB2aXJ0U3RhdGUuc3RhcnRJbmRleCArIHZpcnRTdGF0ZS5jaHVua1NpemU7XG4gICAgICAgICAgICAgY29uc3QgaXNOZXh0ID0gIHRoaXMuYWN0aXZlTm9kZS5yb3cgPCByb3dJbmRleDtcbiAgICAgICAgICAgICBjb25zdCB0YXJnZXRMYXlvdXRJbmRleCA9IGlzTmV4dCA/IG51bGwgOiB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgaWYgKGluVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb0NoaWxkKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGlzTmV4dCwgdGFyZ2V0TGF5b3V0SW5kZXgsIGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChyb3dJbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGlzTmV4dCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2Nyb2xsKCkuc2Nyb2xsVG9wID0gc2Nyb2xsQW1vdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVRvQ2hpbGQocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNMYXN0ID0gcm93SW5kZXggPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmICgocm93SW5kZXggPT09IC0xIHx8IGlzTGFzdCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHJlYWNoZWQgZW5kIG9mIGNoaWxkIGdyaWRcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nSW5kZXggPSB0aGlzLm5leHRTaWJsaW5nSW5kZXgoaXNMYXN0KTtcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0luZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnBhcmVudC5uYXZpZ2F0aW9uLl9tb3ZlVG9DaGlsZCh0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNMYXN0LCBuZXh0U2libGluZ0luZGV4LCBjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVUb1BhcmVudChpc0xhc3QsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmV4dCA9IHRoaXMuYWN0aXZlTm9kZSAmJiB0eXBlb2YgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gJ251bWJlcicgPyByb3dJbmRleCA+IHRoaXMuYWN0aXZlTm9kZS5yb3cgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNiSGFuZGxlciA9IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleCwgaXNOZXh0KTtcbiAgICAgICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHsgcm93OiBudWxsLCBjb2x1bW46IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiSGFuZGxlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0geyByb3c6IG51bGwsIGNvbHVtbjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXggPSAtMSwgaXNOZXh0Pykge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaW5kZXhdO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2hpbGRHcmlkUmVjb3JkKHRhcmdldFJlYykpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEFtb3VudCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGxGb3JJbmRleChpbmRleCwgIWlzTmV4dCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2Nyb2xsID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9ICFpc05leHQgPyBzY3JvbGxBbW91bnQgPiBjdXJyU2Nyb2xsIDogY3VyclNjcm9sbCA8IHNjcm9sbEFtb3VudDtcbiAgICAgICAgICAgIHJldHVybiBzaG91bGRTY3JvbGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKGluZGV4LCB2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzVGJvZHkoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0ge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBjb2x1bW46IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKDAsIDAsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIuZm9jdXNUYm9keShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbmV4dFNpYmxpbmdJbmRleChpc05leHQpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0S2V5ID0gdGhpcy5ncmlkLmNoaWxkUm93LmxheW91dC5rZXk7XG4gICAgICAgIGNvbnN0IGxheW91dEluZGV4ID0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMuaW5kZXhPZihsYXlvdXRLZXkpO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpc05leHQgPyBsYXlvdXRJbmRleCArIDEgOiBsYXlvdXRJbmRleCAtIDE7XG4gICAgICAgIGlmIChuZXh0SW5kZXggPD0gdGhpcy5ncmlkLnBhcmVudC5jaGlsZExheW91dEtleXMubGVuZ3RoIC0gMSAmJiBuZXh0SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBzY3JvbGxpbmcgaW4gY2hpbGQgZ3JpZCBhbmQgZW5zdXJlcyB0YXJnZXQgY2hpbGQgcm93IGlzIGluIG1haW4gZ3JpZCB2aWV3IHBvcnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggVGhlIHJvdyBpbmRleCB3aGljaCBzaG91bGQgYmUgaW4gdmlldy5cbiAgICAgKiBAcGFyYW0gaXNOZXh0ICBPcHRpb25hbC4gV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlU2Nyb2xsSW5DaGlsZChyb3dJbmRleDogbnVtYmVyLCBpc05leHQ/OiBib29sZWFuLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwocm93SW5kZXgsIC0xLCBpc05leHQpO1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5wZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXgsIC0xLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFJvdyBpbmRleCB0aGF0IHNob3VsZCBjb21lIGluIHZpZXcuXG4gICAgICogQHBhcmFtIGlzTmV4dCAgV2hldGhlciB3ZSBhcmUgbmF2aWdhdGluZyB0byBuZXh0LiBVc2VkIHRvIGRldGVybWluZSBzY3JvbGwgZGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjYiAgT3B0aW9uYWwuQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwb3NpdGlvbkluUGFyZW50KHJvd0luZGV4LCBpc05leHQsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25JbmZvID0gdGhpcy5nZXRQb3NpdGlvbkluZm8ocm93LCBpc05leHQpO1xuICAgICAgICBpZiAoIXBvc2l0aW9uSW5mby5pblZpZXcpIHtcbiAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgZnJvbSB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBzY3JvbGxpbmcgaXMgY29tcGxldGUuXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlR3JpZCA9IGlzTmV4dCA/IHRoaXMuZ2V0TmV4dFNjcm9sbGFibGVEb3duKHRoaXMuZ3JpZCkgOiB0aGlzLmdldE5leHRTY3JvbGxhYmxlVXAodGhpcy5ncmlkKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIucmVjYWxjVXBkYXRlU2l6ZXMoKTtcbiAgICAgICAgICAgIHNjcm9sbGFibGVHcmlkLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuYWRkU2Nyb2xsVG9wKHBvc2l0aW9uSW5mby5vZmZzZXQpO1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUdyaWQuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiB0byBjaGlsZCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvd0luZGV4IFRoZSBwYXJlbnQgcm93IGluZGV4LCBhdCB3aGljaCB0aGUgY2hpbGQgZ3JpZCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gY2hpbGRMYXlvdXRJbmRleCBPcHRpb25hbC4gVGhlIGluZGV4IG9mIHRoZSBjaGlsZCByb3cgaXNsYW5kIHRvIHdoaWNoIHRoZSBjaGlsZCBncmlkIGJlbG9uZ3MgdG8uIFVzZXMgZmlyc3QgaWYgbm90IHNldC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX21vdmVUb0NoaWxkKHBhcmVudFJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleDogbnVtYmVyLCBpc05leHQ6IGJvb2xlYW4sIGNoaWxkTGF5b3V0SW5kZXg/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2I/OiAoYXJnOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgcmkgPSB0eXBlb2YgY2hpbGRMYXlvdXRJbmRleCAhPT0gJ251bWJlcicgP1xuICAgICAgICAgdGhpcy5ncmlkLmNoaWxkTGF5b3V0TGlzdC5maXJzdCA6IHRoaXMuZ3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpW2NoaWxkTGF5b3V0SW5kZXhdO1xuICAgICAgICBjb25zdCByb3dJZCA9IHRoaXMuZ3JpZC5kYXRhVmlld1twYXJlbnRSb3dJbmRleF0ucm93SUQ7XG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50OiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICByb3dJRDogcm93SWQsXG4gICAgICAgICAgICByb3dJc2xhbmRLZXk6IHJpLmtleVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGlsZEdyaWQgPSAgdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoU2VnbWVudF0pO1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IGlzTmV4dCA/IDAgOiBjaGlsZEdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjID0gIGNoaWxkR3JpZC5kYXRhVmlld1t0YXJnZXRJbmRleF07XG4gICAgICAgIGlmICghdGFyZ2V0UmVjKSB7XG4gICAgICAgICAgICAvLyBpZiBubyB0YXJnZXQgcmVjLCB0aGVuIG1vdmUgb24gaW4gbmV4dCBzaWJsaW5nIG9yIHBhcmVudFxuICAgICAgICAgICAgY2hpbGRHcmlkLm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZEdyaWQuaXNDaGlsZEdyaWRSZWNvcmQodGFyZ2V0UmVjKSkge1xuICAgICAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIGEgY2hpbGQgZ3JpZCByZWNvcmQgc2hvdWxkIG1vdmUgaW50byBpdC5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID0gbnVsbDtcbiAgICAgICAgICAgIGNoaWxkR3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbn07XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0TGF5b3V0SW5kZXggPSBpc05leHQgPyAwIDogY2hpbGRHcmlkLmNoaWxkTGF5b3V0TGlzdC50b0FycmF5KCkubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5fbW92ZVRvQ2hpbGQodGFyZ2V0SW5kZXgsIHZpc2libGVDb2xJbmRleCwgaXNOZXh0LCB0YXJnZXRMYXlvdXRJbmRleCwgY2IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZEdyaWROYXYgPSAgY2hpbGRHcmlkLm5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuY2xlYXJBY3RpdmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSBjaGlsZEdyaWROYXYubGFzdENvbHVtbkluZGV4O1xuICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHZpc2libGVDb2xJbmRleCA8PSBsYXN0VmlzaWJsZUluZGV4ID8gdmlzaWJsZUNvbEluZGV4IDogbGFzdFZpc2libGVJbmRleDtcbiAgICAgICAgY2hpbGRHcmlkTmF2LmFjdGl2ZU5vZGUgPSB7IHJvdzogdGFyZ2V0SW5kZXgsIGNvbHVtbjogY29sdW1uSW5kZXh9O1xuICAgICAgICBjaGlsZEdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICB0aGlzLl9wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGlvbi5faGFuZGxlU2Nyb2xsSW5DaGlsZCh0YXJnZXRJbmRleCwgaXNOZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICBjaGlsZEdyaWQubmF2aWdhdGVUbyh0YXJnZXRJbmRleCwgY29sdW1uSW5kZXgsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgbmF2aWdhdGlvbiBiYWNrIHRvIHBhcmVudCBncmlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9tb3ZlVG9QYXJlbnQoaXNOZXh0OiBib29sZWFuLCBjb2x1bW5JbmRleCwgY2I/KSB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSB0aGlzLmdyaWQuY2hpbGRSb3cuaW5kZXg7XG4gICAgICAgIGNvbnN0IGhhc05leHRUYXJnZXQgPSB0aGlzLmhhc05leHRUYXJnZXQodGhpcy5ncmlkLnBhcmVudCwgaW5kZXhJblBhcmVudCwgaXNOZXh0KTtcbiAgICAgICAgaWYgKCFoYXNOZXh0VGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhckFjdGl2YXRpb24oKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSAgaXNOZXh0ID8gaW5kZXhJblBhcmVudCArIDEgOiBpbmRleEluUGFyZW50IC0gMTtcbiAgICAgICAgY29uc3QgbGFzdFZpc2libGVJbmRleCA9IHRoaXMuZ3JpZC5wYXJlbnQubmF2aWdhdGlvbi5sYXN0Q29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnN0IG5leHRDb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4IDw9IGxhc3RWaXNpYmxlSW5kZXggPyBjb2x1bW5JbmRleCA6IGxhc3RWaXNpYmxlSW5kZXg7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY2JGdW5jID0gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICBjYihhcmdzKTtcbiAgICAgICAgICAgIGFyZ3MudGFyZ2V0LmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyaWQucGFyZW50Lm5hdmlnYXRpb24ubmF2aWdhdGVJbkJvZHkodGFyZ2V0Um93SW5kZXgsIG5leHRDb2x1bW5JbmRleCwgY2JGdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIG9uIHRoZSByb3cgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3QgZ3JpZCB2aWV3IHBvcnQuXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgaW4gdmlldyBhbmQgaXRzIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dPYmpcbiAgICAgKiBAcGFyYW0gaXNOZXh0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBvc2l0aW9uSW5mbyhyb3c6IFJvd1R5cGUsIGlzTmV4dDogYm9vbGVhbikge1xuICAgICAgICAvLyBYWFg6IEZpeCB0eXBlXG4gICAgICAgIGxldCByb3dFbGVtID0gcm93Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICgocm93IGFzIGFueSkubGF5b3V0KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZExheW91dEtleXMgPSB0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzO1xuICAgICAgICAgICAgY29uc3QgcmlLZXkgPSBpc05leHQgPyBjaGlsZExheW91dEtleXNbMF0gOiBjaGlsZExheW91dEtleXNbY2hpbGRMYXlvdXRLZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgcGF0aFNlZ21lbnQ6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICByb3dJRDogcm93LmRhdGEucm93SUQsXG4gICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiByaUtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZCA9ICB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhTZWdtZW50XSk7XG4gICAgICAgICAgICByb3dFbGVtID0gY2hpbGRHcmlkLnRmb290Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEJvdHRvbSA9IHRoaXMuX2dldE1pbkJvdHRvbSh0aGlzLmdyaWQpO1xuICAgICAgICBjb25zdCBkaWZmQm90dG9tID1cbiAgICAgICAgcm93RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBncmlkQm90dG9tO1xuICAgICAgICBjb25zdCBncmlkVG9wID0gdGhpcy5fZ2V0TWF4VG9wKHRoaXMuZ3JpZCk7XG4gICAgICAgIGNvbnN0IGRpZmZUb3AgPSByb3dFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtXG4gICAgICAgIHJvd0VsZW0ub2Zmc2V0SGVpZ2h0IC0gZ3JpZFRvcDtcbiAgICAgICAgLy8gQWRkaW5nIE1hdGguUm91bmQgYmVjYXVzZSBDaHJvbWUgaGFzIHNvbWUgaW5jb25zaXN0ZW5jaWVzIHdoZW4gdGhlIHBhZ2UgaXMgem9vbWVkXG4gICAgICAgIGNvbnN0IGlzSW5WaWV3ID0gaXNOZXh0ID8gTWF0aC5yb3VuZChkaWZmQm90dG9tKSA8PSAwIDogTWF0aC5yb3VuZChkaWZmVG9wKSA+PSAwO1xuICAgICAgICBjb25zdCBjYWxjT2Zmc2V0ID0gIGlzTmV4dCA/IGRpZmZCb3R0b20gOiBkaWZmVG9wO1xuXG4gICAgICAgIHJldHVybiB7IGluVmlldzogaXNJblZpZXcsIG9mZnNldDogY2FsY09mZnNldCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgY2xvc2VzdCBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzb3VyY2VFbGVtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdG8gc3RhcnQgdGhlIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0VGFnIFRoZSB0YXJnZXQgZWxlbWVudCB0YWcgbmFtZSwgZm9yIHdoaWNoIHRvIHNlYXJjaC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Q2xvc2VzdEVsZW1CeVRhZyhzb3VyY2VFbGVtLCB0YXJnZXRUYWcpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHNvdXJjZUVsZW07XG4gICAgICAgIHdoaWxlIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFyZ2V0VGFnLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckFjdGl2YXRpb24oKSB7XG4gICAgICAgIC8vIGNsZWFyIGlmIHByZXZpb3VzIGFjdGl2YXRpb24gZXhpc3RzLlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVOb2RlICYmIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlTm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBPYmplY3QuYXNzaWduKHt9IGFzIElBY3RpdmVOb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzTmV4dFRhcmdldChncmlkOiBHcmlkVHlwZSwgaW5kZXg6IG51bWJlciwgaXNOZXh0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvd0luZGV4ID0gIGlzTmV4dCA/IGluZGV4ICsgMSA6IGluZGV4IC0gMTtcbiAgICAgICAgY29uc3QgaGFzVGFyZ2V0UmVjb3JkID0gISFncmlkLmRhdGFWaWV3W3RhcmdldFJvd0luZGV4XTtcbiAgICAgICAgaWYgKGhhc1RhcmdldFJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaGFzVGFyZ2V0UmVjb3JkSW5QYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChncmlkLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSBncmlkLmNoaWxkUm93LmluZGV4O1xuICAgICAgICAgICAgICAgIGhhc1RhcmdldFJlY29yZEluUGFyZW50ID0gdGhpcy5oYXNOZXh0VGFyZ2V0KGdyaWQucGFyZW50LCBpbmRleEluUGFyZW50LCBpc05leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc1RhcmdldFJlY29yZEluUGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWF4IHRvcCB2aWV3IGluIHRoZSBjdXJyZW50IGdyaWQgaGllcmFyY2h5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNYXhUb3AoZ3JpZCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSBncmlkO1xuICAgICAgICBsZXQgdG9wID0gY3VyckdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIHdoaWxlIChjdXJyR3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJHcmlkID0gY3VyckdyaWQucGFyZW50O1xuICAgICAgICAgICAgY29uc3QgcGlubmVkUm93c0hlaWdodCA9IGN1cnJHcmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgY3VyckdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgPyBjdXJyR3JpZC5waW5uZWRSb3dIZWlnaHQgOiAwO1xuICAgICAgICAgICAgdG9wID0gTWF0aC5tYXgodG9wLCBjdXJyR3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHBpbm5lZFJvd3NIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWluIGJvdHRvbSB2aWV3IGluIHRoZSBjdXJyZW50IGdyaWQgaGllcmFyY2h5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRNaW5Cb3R0b20oZ3JpZCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSBncmlkO1xuICAgICAgICBsZXQgYm90dG9tID0gY3VyckdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XG4gICAgICAgIHdoaWxlIChjdXJyR3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJHcmlkID0gY3VyckdyaWQucGFyZW50O1xuICAgICAgICAgICAgY29uc3QgcGlubmVkUm93c0hlaWdodCA9IGN1cnJHcmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgIWN1cnJHcmlkLmlzUm93UGlubmluZ1RvVG9wID8gY3VyckdyaWQucGlubmVkUm93SGVpZ2h0IDogMDtcbiAgICAgICAgICAgIGJvdHRvbSA9IE1hdGgubWluKGJvdHRvbSwgY3VyckdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBwaW5uZWRSb3dzSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBuZXh0IGdyaWQgdGhhdCBhbGxvd3Mgc2Nyb2xsaW5nIGRvd24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZCBUaGUgZ3JpZCBmcm9tIHdoaWNoIHRvIGJlZ2luIHRoZSBzZWFyY2guXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0U2Nyb2xsYWJsZURvd24oZ3JpZCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgaWYgKCFjdXJyR3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JpZCwgcHJldjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBzY3JvbGxUb3AgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgbGV0IHNjcm9sbEhlaWdodCA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNjcm9sbCgpLnNjcm9sbEhlaWdodDtcbiAgICAgICAgbGV0IG5vblNjcm9sbGFibGUgPSBzY3JvbGxIZWlnaHQgPT09IDAgfHxcbiAgICAgICAgICAgIE1hdGgucm91bmQoc2Nyb2xsVG9wICsgY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuaWd4Rm9yQ29udGFpbmVyU2l6ZSkgPT09IHNjcm9sbEhlaWdodDtcbiAgICAgICAgbGV0IHByZXYgPSBncmlkO1xuICAgICAgICB3aGlsZSAobm9uU2Nyb2xsYWJsZSAmJiBjdXJyR3JpZC5wYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByZXYgPSBjdXJyR3JpZDtcbiAgICAgICAgICAgIGN1cnJHcmlkID0gY3VyckdyaWQucGFyZW50O1xuICAgICAgICAgICAgc2Nyb2xsVG9wID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUG9zaXRpb247XG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTY3JvbGwoKS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICBub25TY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChzY3JvbGxUb3AgKyBjdXJyR3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JDb250YWluZXJTaXplKSA9PT0gc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGdyaWQ6IGN1cnJHcmlkLCBwcmV2IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIG5leHQgZ3JpZCB0aGF0IGFsbG93cyBzY3JvbGxpbmcgdXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZCBUaGUgZ3JpZCBmcm9tIHdoaWNoIHRvIGJlZ2luIHRoZSBzZWFyY2guXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0U2Nyb2xsYWJsZVVwKGdyaWQpIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gZ3JpZC5wYXJlbnQ7XG4gICAgICAgIGlmICghY3VyckdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyaWQsIHByZXY6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm9uU2Nyb2xsYWJsZSA9IGN1cnJHcmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uID09PSAwO1xuICAgICAgICBsZXQgcHJldiA9IGdyaWQ7XG4gICAgICAgIHdoaWxlIChub25TY3JvbGxhYmxlICYmIGN1cnJHcmlkLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldiA9IGN1cnJHcmlkO1xuICAgICAgICAgICAgY3VyckdyaWQgPSBjdXJyR3JpZC5wYXJlbnQ7XG4gICAgICAgICAgICBub25TY3JvbGxhYmxlID0gY3VyckdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUG9zaXRpb24gPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZ3JpZDogY3VyckdyaWQsIHByZXYgfTtcbiAgICB9XG59XG4iXX0=
|