igniteui-angular 12.3.33 → 12.3.36
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/bundles/igniteui-angular.umd.js +53 -21
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/date-picker/date-picker.component.js +2 -1
- package/esm2015/lib/date-range-picker/date-range-picker.component.js +3 -3
- package/esm2015/lib/directives/drag-drop/drag-drop.directive.js +8 -6
- package/esm2015/lib/directives/radio/radio-group.directive.js +13 -7
- package/esm2015/lib/grids/grid/grid.component.js +2 -2
- package/esm2015/lib/grids/grid-navigation.service.js +8 -3
- package/esm2015/lib/grids/selection/selection.service.js +9 -4
- package/esm2015/lib/paginator/pager.component.js +2 -2
- package/esm2015/lib/radio/radio.component.js +15 -2
- package/esm2015/lib/time-picker/time-picker.component.js +3 -2
- package/fesm2015/igniteui-angular.js +52 -19
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -1
- package/lib/directives/radio/radio-group.directive.d.ts +6 -1
- package/lib/grids/selection/selection.service.d.ts +2 -1
- package/lib/radio/radio.component.d.ts +14 -3
- package/package.json +1 -1
|
@@ -116,14 +116,14 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective {
|
|
|
116
116
|
this.onValidatorChange = noop;
|
|
117
117
|
this.onStatusChanged = () => {
|
|
118
118
|
if (this.inputGroup) {
|
|
119
|
-
this.inputDirective.valid = this.isTouchedOrDirty
|
|
119
|
+
this.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled
|
|
120
120
|
? this.getInputState(this.inputGroup.isFocused)
|
|
121
121
|
: IgxInputState.INITIAL;
|
|
122
122
|
}
|
|
123
123
|
else if (this.hasProjectedInputs) {
|
|
124
124
|
this.projectedInputs
|
|
125
125
|
.forEach(i => {
|
|
126
|
-
i.inputDirective.valid = this.isTouchedOrDirty
|
|
126
|
+
i.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled
|
|
127
127
|
? this.getInputState(i.isFocused)
|
|
128
128
|
: IgxInputState.INITIAL;
|
|
129
129
|
;
|
|
@@ -848,4 +848,4 @@ IgxDateRangePickerComponent.propDecorators = {
|
|
|
848
848
|
value: [{ type: Input }],
|
|
849
849
|
onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
|
|
850
850
|
};
|
|
851
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUN0RixZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQzNFLFdBQVcsRUFDbUIsUUFBUSxFQUFFLE1BQU0sRUFDL0IsV0FBVyxFQUFFLFNBQVMsRUFDeEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNvQyxTQUFTLEVBQ2hELGFBQWEsRUFBRSxpQkFBaUIsRUFDbkMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsSUFBSSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFtQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMvRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQXFCLGFBQWEsRUFDM0UsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQzFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNILG9CQUFvQixFQUFFLGlCQUFpQixFQUUxQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDUSx3QkFBd0IsRUFBRSwrQkFBK0IsRUFDcEUsOEJBQThCLEVBQUUsMEJBQTBCLEVBQzdELE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQVNILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxtQkFBbUI7SUFzWGhFLFlBQW1CLE9BQW1CLEVBQ0wsU0FBYyxFQUNqQyxRQUFzQixFQUN4QixTQUFtQixFQUNuQixVQUE0QixFQUM1QixJQUF1QixFQUNJLGVBQWtDLEVBQ2xCLHNCQUErQyxFQUM5QyxlQUFtQztRQUN2RixLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVRwRCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ0wsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDSSxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF5QjtRQUM5QyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUE1WDNGOzs7Ozs7Ozs7O1dBVUc7UUFFSSx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFnQjlCOzs7Ozs7Ozs7O1dBVUc7UUFFSSxjQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQXNKbkM7Ozs7Ozs7V0FPRztRQUVJLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBa0J4Qjs7Ozs7OztXQU9HO1FBRUksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBRW5ELHdCQUF3QjtRQUVqQixhQUFRLEdBQUcsdUJBQXVCLENBQUM7UUFpSGxDLHFCQUFnQixHQUFHLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDO1FBQ3BFLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBUXRCLHNCQUFpQixHQUNtRztZQUNwSCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDckMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRCxDQUFDO1FBQ0UsMkJBQXNCLEdBQW9CO1lBQzlDLG1CQUFtQixFQUFFLElBQUk7WUFDekIsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsSUFBSTtTQUN0QixDQUFDO1FBQ00sNkJBQXdCLEdBQW9CO1lBQ2hELG1CQUFtQixFQUFFLElBQUk7WUFDekIsS0FBSyxFQUFFLEtBQUs7WUFDWixhQUFhLEVBQUUsSUFBSTtTQUN0QixDQUFDO1FBQ00scUJBQWdCLEdBQW1DLElBQUksQ0FBQztRQUN4RCxvQkFBZSxHQUFlLElBQUksQ0FBQztRQUNuQyxzQkFBaUIsR0FBZSxJQUFJLENBQUM7UUEyT25DLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtvQkFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQy9CO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUNoQyxJQUFJLENBQUMsZUFBZTtxQkFDZixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ1QsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjt3QkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDakMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7b0JBQUEsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7YUFDVjtZQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQztJQTdPRixDQUFDO0lBaFREOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILElBQ1csY0FBYyxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBeUNEOzs7OztPQUtHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNXLGVBQWUsQ0FBQyxLQUFzQztRQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBa0VELHdCQUF3QjtJQUN4QixJQUFXLGFBQWE7UUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsb0NBQW9DLENBQUM7U0FDcEU7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLGFBQWE7UUFDcEIsT0FBTyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2VBQ2pFLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztJQUM3QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsaUJBQWlCO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQzNCO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNsQyxPQUFPLEdBQUcsTUFBTSxHQUFHLG1DQUFtQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDVyxLQUFLLENBQUMsS0FBdUI7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLGtCQUFrQjs7UUFDekIsT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNqRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBcUIsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFZLHVCQUF1QjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELElBQVkscUJBQXFCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBMkNELHdCQUF3QjtJQUdqQixTQUFTLENBQUMsS0FBb0I7UUFDakMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2YsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2dCQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNoQjtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNmO2dCQUNELE1BQU07U0FDYjtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxJQUFJLENBQUMsZUFBaUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUMxQixlQUFlLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlO2FBQ2pDLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQUMsZUFBaUM7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLFNBQWUsRUFBRSxPQUFjO1FBQ3pDLE9BQU8sR0FBRyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxTQUFTLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFVBQVUsQ0FBQyxLQUFnQjtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZ0JBQWdCLENBQUMsRUFBTztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsaUJBQWlCLENBQUMsRUFBTztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFFBQVEsQ0FBQyxPQUF3QjtRQUNwQyxNQUFNLEtBQUssR0FBYyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSwwQkFBMEIsQ0FBK0IsQ0FBQztnQkFDekgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksd0JBQXdCLENBQTZCLENBQUM7Z0JBQ25ILElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtvQkFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO29CQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUM3QzthQUNKO1lBRUQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDL0QsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDN0M7WUFDRCxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDbEUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDN0M7U0FDSjtRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLHlCQUF5QixDQUFFLEVBQU87UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGdCQUFnQixDQUFFLFVBQW1CO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjO0lBQ1AsUUFBUTtRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQVksU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjO0lBQ1AsZUFBZTtRQUNsQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25HO1FBRUQsMkVBQTJFO1FBQzNFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsc0hBQXNIO1lBQ3RIOzs7ZUFHRztZQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNyRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixXQUFXO1FBQ2QsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFrQkQsSUFBWSxnQkFBZ0I7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7ZUFDbEUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sZUFBZSxDQUFDLGFBQXFCO1FBQ3pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2xDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLENBQWtDO1FBQ3BELE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUksQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLEtBQUssQ0FBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckYsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQy9CO2FBQU07WUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsY0FBYztZQUNkLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQy9CO1NBQ0o7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLENBQStCLENBQUM7WUFDckQsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0MsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQzNCLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7O1lBQ3ZFLE1BQUEsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxRQUFRLDBDQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQStCLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWdCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTt3QkFDeEIsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDaEQ7eUJBQU07d0JBQ0gsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDaEQ7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO29CQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO2lCQUNyRDthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO1lBQ3BILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUE2QixDQUFDO1lBQzlHLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM1QyxPQUFPO1NBQ1Y7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQWdCO1FBQ2xDLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztTQUM5RTthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztTQUNoRjtJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsMkNBQTJDO1FBQzNDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtnQkFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2FBQzNDO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQzthQUNoRTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFvQjtRQUN0QyxJQUFJLFFBQVEsR0FBUyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixJQUFJLEtBQUssRUFBRTtnQkFDUCxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkQ7U0FDSjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxRQUFRLEdBQVMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksR0FBRyxFQUFFO2dCQUNMLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNyRDtTQUNKO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGNBQWM7O1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNYO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNGO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUY7UUFFRCxNQUFNLEtBQUssR0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsS0FBSyxNQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsR0FBRyxDQUFBLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QztTQUNKO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO1lBQ3BILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUE2QixDQUFDO1lBQzlHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEgsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzRTtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBZ0IsRUFBRSxRQUFlLEVBQUUsUUFBZTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMxRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUI7UUFDbEMsT0FBTztZQUNILEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtZQUMzQixHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JFLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWdCO1FBQ25DLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixLQUFLLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNwQixHQUFHLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBVyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSwwQkFBMEIsQ0FBK0IsQ0FBQztZQUNwSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSx3QkFBd0IsQ0FBNkIsQ0FBQztZQUM5RyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXO3FCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNmLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDWixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDdEQ7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO3FCQUM1QztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVc7cUJBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQWEsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBYSxFQUFFLENBQUM7cUJBQ3BEO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7U0FDSjtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO3FCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7d0JBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO3FCQUMvQjtnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7aUJBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7aUJBQy9CO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7cUJBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDckIsYUFBYSxFQUFFLE1BQU07WUFDckIsY0FBYyxFQUFFLE9BQU87U0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDdEUsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3RHO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDbkIsdUdBQXVHO1FBQ3ZHLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUFDLENBQUM7WUFDdEYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksd0JBQXdCLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxHQUFHO2dCQUNWLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQWE7Z0JBQ3pDLEdBQUcsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQWE7YUFDeEMsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVPLFlBQVk7O1FBQ2hCLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO1FBQ3JILE1BQU0sR0FBRyxHQUFHLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUE2QixDQUFDO1FBQy9HLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssS0FBSSxJQUFJLENBQUMsQ0FBQztZQUM5QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsR0FBRyxLQUFJLElBQUksQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLEtBQUssR0FBRyxDQUFvQyxDQUFDO1lBQ25ELEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLENBQW9DLENBQUM7WUFDbkQsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN2RCxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3ZEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsaUJBQWdEO1FBQ2pGLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzRyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRixpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNyRCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQzs7O1lBaitCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsa3NFQUFpRDtnQkFDakQsU0FBUyxFQUFFO29CQUNQLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO29CQUNyRixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7aUJBQ3BGO2FBQ0o7OztZQXBFK0UsVUFBVTs0Q0E0YmpGLE1BQU0sU0FBQyxTQUFTO1lBemFvQyxZQUFZO1lBbEJwQixRQUFRO1lBQ3pELFdBQVc7WUFGSSxpQkFBaUI7WUE2QlYsaUJBQWlCLHVCQW9hbEMsTUFBTSxTQUFDLGlCQUFpQjs0Q0FDeEIsUUFBUSxZQUFJLE1BQU0sU0FBQyxtQkFBbUI7NENBQ3RDLFFBQVEsWUFBSSxNQUFNLFNBQUMsb0JBQW9COzs7aUNBalgzQyxLQUFLOzhCQWNMLEtBQUs7d0JBY0wsS0FBSztxQkFpQkwsS0FBSzt3QkFtQkwsS0FBSzs2QkFnQkwsS0FBSzs4QkFtQkwsS0FBSzs0QkFlTCxLQUFLOzBCQWNMLEtBQUs7dUJBU0wsS0FBSzt1QkFnQkwsS0FBSzs4QkFjTCxLQUFLOzBCQW9CTCxLQUFLO3FCQWdCTCxLQUFLOzBCQVdMLE1BQU07dUJBSU4sV0FBVyxTQUFDLDZCQUE2Qjt5QkFJekMsU0FBUyxTQUFDLHNCQUFzQjs2QkFJaEMsU0FBUyxTQUFDLGlCQUFpQjs4QkFJM0IsZUFBZSxTQUFDLCtCQUErQjtvQkFHL0MsWUFBWSxTQUFDLGlCQUFpQjs0QkFHOUIsWUFBWSxTQUFDLHlCQUF5QjtvQ0FJdEMsWUFBWSxTQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtvQkFzRGxFLEtBQUs7d0JBZ0ZMLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIExPQ0FMRV9JRCxcbiAgICBOZ01vZHVsZVJlZixcbiAgICBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBub29wLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9mYWRlJztcbmltcG9ydCB7IENhbGVuZGFyU2VsZWN0aW9uLCBJZ3hDYWxlbmRhckNvbXBvbmVudCwgV0VFS0RBWVMgfSBmcm9tICcuLi9jYWxlbmRhci9wdWJsaWNfYXBpJztcbmltcG9ydCB7IERhdGVSYW5nZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSURhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9kYXRlLXJhbmdlLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5pbXBvcnQgeyBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzLCBpc0RhdGUsIHBhcnNlRGF0ZSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL2NhbGVuZGFyLWNvbnRhaW5lci9jYWxlbmRhci1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItaWNvbnMuY29tbW9uJztcbmltcG9ydCB7IFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXRHcm91cFR5cGUsIElneElucHV0U3RhdGUsXG4gICAgSWd4TGFiZWxEaXJlY3RpdmUsIElHWF9JTlBVVF9HUk9VUF9UWVBFXG59IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBBdXRvUG9zaXRpb25TdHJhdGVneSwgSWd4T3ZlcmxheVNlcnZpY2UsIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLCBPdmVybGF5RXZlbnRBcmdzLFxuICAgIE92ZXJsYXlTZXR0aW5ncywgUG9zaXRpb25TZXR0aW5nc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7XG4gICAgRGF0ZVJhbmdlLCBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQsIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQsXG4gICAgSWd4RGF0ZVJhbmdlU2VwYXJhdG9yRGlyZWN0aXZlLCBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudFxufSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLWlucHV0cy5jb21tb24nO1xuXG5jb25zdCBTaW5nbGVJbnB1dERhdGVzQ29uY2F0ZW5hdGlvblN0cmluZyA9ICcgLSAnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHNlbGVjdCBhIHJhbmdlIG9mIGRhdGVzIGZyb20gYSBjYWxlbmRhciBVSSBvciBlZGl0YWJsZSBpbnB1dHMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hEYXRlUmFuZ2VNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWlucHV0LWdyb3VwLXRoZW1lLCBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1kYXRlLXJhbmdlLXBpY2tlci10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBkYXRlLCByYW5nZSwgZGF0ZSByYW5nZSwgZGF0ZSBwaWNrZXJcbiAqXG4gKiBAaWd4R3JvdXAgc2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBJdCBkaXNwbGF5cyB0aGUgcmFuZ2Ugc2VsZWN0aW9uIGluIGEgc2luZ2xlIG9yIHR3byBpbnB1dCBmaWVsZHMuXG4gKiBUaGUgZGVmYXVsdCB0ZW1wbGF0ZSBkaXNwbGF5cyBhIHNpbmdsZSAqcmVhZG9ubHkqIGlucHV0IGZpZWxkXG4gKiB3aGlsZSBwcm9qZWN0aW5nIGBpZ3gtZGF0ZS1yYW5nZS1zdGFydGAgYW5kIGBpZ3gtZGF0ZS1yYW5nZS1lbmRgXG4gKiBkaXNwbGF5cyB0d28gKmVkaXRhYmxlKiBpbnB1dCBmaWVsZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgbW9kZT1cImRyb3Bkb3duXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF0ZS1yYW5nZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgUGlja2VyQmFzZURpcmVjdGl2ZVxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBkaXNwbGF5ZWQgbW9udGggdmlld3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYDJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbZGlzcGxheU1vbnRoc0NvdW50XT1cIjNcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TW9udGhzQ291bnQgPSAyO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgZGF0ZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgbW9udGggd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW2hpZGVPdXRzaWRlRGF5c109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZU91dHNpZGVEYXlzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQ2FuIGJlIGFzc2lnbmVkIHRvIGEgbnVtZXJpYyB2YWx1ZSBvciB0byBgV0VFS0RBWVNgIGVudW0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFt3ZWVrU3RhcnRdPVwiMVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdlZWtTdGFydCA9IFdFRUtEQVlTLlNVTkRBWTtcblxuICAgIC8qKlxuICAgICAqIExvY2FsZSBzZXR0aW5ncyB1c2VkIGZvciB2YWx1ZSBmb3JtYXR0aW5nIGFuZCBjYWxlbmRhci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVXNlcyBBbmd1bGFyJ3MgYExPQ0FMRV9JRGAgYnkgZGVmYXVsdC4gQWZmZWN0cyBib3RoIGlucHV0IG1hc2sgYW5kIGRpc3BsYXkgZm9ybWF0IGlmIHRob3NlIGFyZSBub3Qgc2V0LlxuICAgICAqIElmIGEgYGxvY2FsZWAgaXMgc2V0LCBpdCBtdXN0IGJlIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3RlckxvY2FsZURhdGFgLlxuICAgICAqIFBsZWFzZSByZWZlciB0byBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvaTE4biNpMThuLXBpcGVzLlxuICAgICAqIElmIGl0IGlzIG5vdCByZWdpc3RlcmVkLCBgSW50bGAgd2lsbCBiZSB1c2VkIGZvciBmb3JtYXR0aW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBsb2NhbGU9XCJqcFwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvY2FsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBjdXN0b20gZm9ybWF0dGVyIGZ1bmN0aW9uLCBhcHBsaWVkIG9uIHRoZSBzZWxlY3RlZCBvciBwYXNzZWQgaW4gZGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHByaXZhdGUgZGF5Rm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlblwiLCB7IHdlZWtkYXk6IFwibG9uZ1wiIH0pO1xuICAgICAqIHByaXZhdGUgbW9udGhGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuXCIsIHsgbW9udGg6IFwibG9uZ1wiIH0pO1xuICAgICAqXG4gICAgICogcHVibGljIGZvcm1hdHRlcihkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgKiAgcmV0dXJuIGAke3RoaXMuZGF5Rm9ybWF0dGVyLmZvcm1hdChkYXRlKX0gLSAke3RoaXMubW9udGhGb3JtYXR0ZXIuZm9ybWF0KGRhdGUpfSAtICR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtmb3JtYXR0ZXJdPVwiZm9ybWF0dGVyXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0dGVyOiAodmFsOiBEYXRlUmFuZ2UpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHRleHQgb2YgdGhlIGNhbGVuZGFyIGRpYWxvZyBgZG9uZWAgYnV0dG9uLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBEb25lYC5cbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCByZW5kZXJzIERvbmUgYnV0dG9uIHdpdGggY3VzdG9tIHRleHQuIEJ5IGRlZmF1bHQgYGRvbmVCdXR0b25UZXh0YCBpcyBzZXQgdG8gRG9uZS5cbiAgICAgKiBUaGUgYnV0dG9uIHdpbGwgb25seSBzaG93IHVwIGluIGBkaWFsb2dgIG1vZGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGRvbmVCdXR0b25UZXh0PVwi5a6M5LqGXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRvbmVCdXR0b25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZG9uZUJ1dHRvblRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRvbmVCdXR0b25UZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9kb25lQnV0dG9uVGV4dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3JhbmdlX3BpY2tlcl9kb25lX2J1dHRvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZUJ1dHRvblRleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBvdmVybGF5IHNldHRpbmdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtvdmVybGF5U2V0dGluZ3NdPVwiY3VzdG9tT3ZlcmxheVNldHRpbmdzXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybWF0IHVzZWQgd2hlbiBlZGl0YWJsZSBpbnB1dHMgYXJlIG5vdCBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEFuZ3VsYXIncyBEYXRlUGlwZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgZGlzcGxheUZvcm1hdD1cIkVFL00veXlcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHBlY3RlZCB1c2VyIGlucHV0IGZvcm1hdCBhbmQgcGxhY2Vob2xkZXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYFwiJ01NL2RkL3l5eXknXCJgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGlucHV0Rm9ybWF0PVwiZGQvTU0veXlcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnB1dEZvcm1hdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgaW4gYSB2YWxpZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbbWluVmFsdWVdPVwibWluRGF0ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIGluIGEgdmFsaWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW21heFZhbHVlXT1cIm1heERhdGVcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJRGF0ZVJhbmdlUGlja2VyUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVJhbmdlUGlja2VyUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcGxhY2Vob2xkZXJgIGZvciBzaW5nbGUtaW5wdXQgYElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiAgIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW3BsYWNlaG9sZGVyXT1cIidDaG9vc2UgeW91ciBkYXRlcydcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjb250YWluZXIgdXNlZCBmb3IgdGhlIHBvcHVwIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqICBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBpY2tlcidzIHZhbHVlIGNoYW5nZXMuIFVzZWQgZm9yIHR3by13YXkgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgWyh2YWx1ZSldPVwiZGF0ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZGF0ZS1yYW5nZS1waWNrZXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtZGF0ZS1yYW5nZS1waWNrZXInO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50KVxuICAgIHB1YmxpYyBwcm9qZWN0ZWRJbnB1dHM6IFF1ZXJ5TGlzdDxJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50PjtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHVibGljIGxhYmVsOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSlcbiAgICBwdWJsaWMgcGlja2VyQWN0aW9uczogSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RGF0ZVJhbmdlU2VwYXJhdG9yRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGRhdGVTZXBhcmF0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZGF0ZVNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fZGF0ZVNlcGFyYXRvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3JhbmdlX3BpY2tlcl9kYXRlX3NlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGFwcGxpZWRGb3JtYXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lVXRpbC5nZXRMb2NhbGVEYXRlRm9ybWF0KHRoaXMubG9jYWxlLCB0aGlzLmRpc3BsYXlGb3JtYXQpXG4gICAgICAgICAgICB8fCBEYXRlVGltZVV0aWwuREVGQVVMVF9JTlBVVF9GT1JNQVQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzaW5nbGVJbnB1dEZvcm1hdCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5hcHBsaWVkRm9ybWF0O1xuICAgICAgICByZXR1cm4gYCR7Zm9ybWF0fSR7U2luZ2xlSW5wdXREYXRlc0NvbmNhdGVuYXRpb25TdHJpbmd9JHtmb3JtYXR9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNhbGVuZGFyIHN0YXRlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuZGF0ZVJhbmdlLmNvbGxhcHNlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlIC8gcmFuZ2UgZnJvbSB0aGUgY2FsZW5kYXJcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGN1cnJlbnQgdmFsdWUgaXMgb2YgdHlwZSBgRGF0ZVJhbmdlYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbmV3VmFsdWU6IERhdGVSYW5nZSA9IHsgc3RhcnQ6IG5ldyBEYXRlKFwiMi8yLzIwMTJcIiksIGVuZDogbmV3IERhdGUoXCIzLzMvMjAxM1wiKX07XG4gICAgICogdGhpcy5kYXRlUmFuZ2VQaWNrZXIudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGVSYW5nZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaGFzUHJvamVjdGVkSW5wdXRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0ZWRJbnB1dHM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzZXBhcmF0b3JDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1kYXRlLXJhbmdlLXBpY2tlcl9fbGFiZWwnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICAgICAgICByZXR1cm4gKGVycm9yICYmIGVycm9yLnJlcXVpcmVkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjYWxlbmRhcigpOiBJZ3hDYWxlbmRhckNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wZG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkaWFsb2dPdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuRGF0ZVJhbmdlUGlja2VyUmVzU3RyaW5ncztcbiAgICBwcml2YXRlIF9kb25lQnV0dG9uVGV4dCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGF0ZVNlcGFyYXRvciA9IG51bGw7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IERhdGVSYW5nZSB8IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbmdDb250cm9sOiBOZ0NvbnRyb2w7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICBwcml2YXRlIF9mb2N1c2VkSW5wdXQ6IElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPiwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE92ZXJsYXlFdmVudEFyZ3MgfCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncz5dID0gW1xuICAgICAgICAgICAgZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5fb3ZlcmxheUlkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLl9kZXN0cm95JCwgdGhpcy5jbG9zZWQpKVxuICAgICAgICBdO1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChkYXRlUmFuZ2U6IERhdGVSYW5nZSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBvblRvdWNoQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcm90ZWN0ZWQgX2xvY2FsZUlkOiBhbnksXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJpdmF0ZSBfb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zPzogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJvdGVjdGVkIF9pbnB1dEdyb3VwVHlwZT86IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIF9sb2NhbGVJZCwgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgX2lucHV0R3JvdXBUeXBlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBkYXRlIHJhbmdlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVSYW5nZT48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cImRhdGVSYW5nZS5vcGVuKClcIj5PcGVuIERpYWxvZzwvYnV0dG9uXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW4ob3ZlcmxheVNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmlzRHJvcGRvd25cbiAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bk92ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgOiB0aGlzLmRpYWxvZ092ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgLCBvdmVybGF5U2V0dGluZ3MpO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlTZXJ2aWNlXG4gICAgICAgICAgICAuYXR0YWNoKElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50LCBzZXR0aW5ncywgdGhpcy5fbW9kdWxlUmVmKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb092ZXJsYXlFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9vdmVybGF5SWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlUmFuZ2U+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJkYXRlUmFuZ2UuY2xvc2UoKVwiPkNsb3NlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuaGlkZSh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2dcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVSYW5nZT48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cImRhdGVSYW5nZS50b2dnbGUoKVwiPlRvZ2dsZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKG92ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4ob3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSByYW5nZSBvZiBkYXRlcy4gSWYgbm8gYGVuZERhdGVgIGlzIHBhc3NlZCwgcmFuZ2UgaXMgMSBkYXkgKG9ubHkgYHN0YXJ0RGF0ZWApXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgc2VsZWN0Rml2ZURheVJhbmdlKCkge1xuICAgICAqICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICogIGNvbnN0IGluRml2ZURheXMgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgNSkpO1xuICAgICAqICB0aGlzLmRhdGVSYW5nZS5zZWxlY3QodG9kYXksIGluRml2ZURheXMpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZT86IERhdGUpOiB2b2lkIHtcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgPz8gc3RhcnREYXRlO1xuICAgICAgICBjb25zdCBkYXRlUmFuZ2UgPSBbc3RhcnREYXRlLCBlbmREYXRlXTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb24oZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgICBjb25zdCB2YWx1ZTogRGF0ZVJhbmdlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbnB1dCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZElucHV0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0SW5wdXQuZGF0ZVRpbWVFZGl0b3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgc3RhcnRWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbmRJbnB1dC5kYXRlVGltZUVkaXRvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBlbmRWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHBhcnNlRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHBhcnNlRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHBhcnNlRGF0ZSh2YWx1ZS5lbmQpO1xuICAgICAgICAgICAgaWYgKChtaW4gJiYgc3RhcnQgJiYgRGF0ZVRpbWVVdGlsLmxlc3NUaGFuTWluVmFsdWUoc3RhcnQsIG1pbiwgZmFsc2UpKVxuICAgICAgICAgICAgICAgIHx8IChtaW4gJiYgZW5kICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKGVuZCwgbWluLCBmYWxzZSkpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgbWluVmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKG1heCAmJiBzdGFydCAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShzdGFydCwgbWF4LCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgfHwgKG1heCAmJiBlbmQgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUoZW5kLCBtYXgsIGZhbHNlKSkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBtYXhWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpO1xuICAgICAgICB0aGlzLmNvbmZpZ1Bvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICAgICAgdGhpcy5jb25maWdPdmVybGF5U2V0dGluZ3MoKTtcbiAgICAgICAgdGhpcy5jYWNoZUZvY3VzZWRJbnB1dCgpO1xuICAgICAgICB0aGlzLmF0dGFjaE9uVG91Y2hlZCgpO1xuXG4gICAgICAgIHRoaXMuc2V0UmVxdWlyZWRUb0lucHV0cygpO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID0gdGhpcy5fbmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVsYXkgaW52b2NhdGlvbnMgdW50aWwgdGhlIGN1cnJlbnQgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBoYXMgY29tcGxldGVkXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxTZXRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dHMoKTtcbiAgICAgICAgICAgIC8vIEIuUC4gMDcgSnVseSAyMDIxIC0gSWd4RGF0ZVJhbmdlUGlja2VyIG5vdCBzaG93aW5nIGluaXRpYWwgZGlzYWJsZWQgc3RhdGUgd2l0aCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2ggIzk3NzZcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogaWYgZGlzYWJsZWQgaXMgcGxhY2VkIG9uIHRoZSByYW5nZSBwaWNrZXIgZWxlbWVudCBhbmQgdGhlcmUgYXJlIHByb2plY3RlZCBpbnB1dHNcbiAgICAgICAgICAgICAqIHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIHNpbmNlIGlneElucHV0IHdpbGwgaW5pdGlhbGx5IHNldCB0aGUgcHJvamVjdGVkIGlucHV0cycgZGlzYWJsZWQgdG8gZmFsc2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzICYmIHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlGb3JtYXQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dEZvcm1hdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydkaXNwbGF5Rm9ybWF0J10gJiYgdGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheUZvcm1hdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydpbnB1dEZvcm1hdCddICYmIHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0Rm9ybWF0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0RWRpdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhdHVzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuaXNUb3VjaGVkT3JEaXJ0eVxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRJbnB1dFN0YXRlKHRoaXMuaW5wdXRHcm91cC5pc0ZvY3VzZWQpXG4gICAgICAgICAgICAgICAgOiBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGkuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLmlzVG91Y2hlZE9yRGlydHlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRJbnB1dFN0YXRlKGkuaXNGb2N1c2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmVxdWlyZWRUb0lucHV0cygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpXG4gICAgICAgICAgICAmJiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb24oc2VsZWN0aW9uRGF0YTogRGF0ZVtdKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IHRoaXMuZXh0cmFjdFJhbmdlKHNlbGVjdGlvbkRhdGEpO1xuICAgICAgICBpZiAoIW5ld1ZhbHVlLnN0YXJ0ICYmICFuZXdWYWx1ZS5lbmQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd24gJiYgc2VsZWN0aW9uRGF0YT8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbG9zaW5nKGU6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgb3duZXI6IHRoaXMsIGNhbmNlbDogZT8uY2FuY2VsLCBldmVudDogZT8uZXZlbnQgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93biAmJiBlPy5ldmVudCAmJiAhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS5ldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIGNsaWNrXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gaW5wdXQgY2xpY2tcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLl9mb2N1c2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkSW5wdXQuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkSW5wdXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmluZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUV2ZW50ID0gZSBhcyBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncztcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB7IG93bmVyOiB0aGlzLCBjYW5jZWw6IG92ZXJsYXlFdmVudD8uY2FuY2VsLCBldmVudDogZS5ldmVudCB9O1xuICAgICAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICBvdmVybGF5RXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXI/LmRheXNWaWV3Py5mb2N1c0FjdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2luZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbG9zaW5nKGUgYXMgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjaygpO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaS51cGRhdGVJbnB1dFZhbGlkaXR5KElneElucHV0U3RhdGUuSU5WQUxJRCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLnVwZGF0ZUlucHV0VmFsaWRpdHkoSWd4SW5wdXRTdGF0ZS5JTklUSUFMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbmdDb250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBzdGFydC5pbnB1dERpcmVjdGl2ZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICBlbmQuaW5wdXREaXJlY3RpdmUuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbnB1dFN0YXRlKGZvY3VzZWQ6IGJvb2xlYW4pOiBJZ3hJbnB1dFN0YXRlIHtcbiAgICAgICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLlZBTElEIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuSU5JVElBTCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmVxdWlyZWRUb0lucHV0cygpOiB2b2lkIHtcbiAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgaWd4SW5wdXQgc2V0dGluZyByZXF1aXJlZFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cCAmJiB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCAhPT0gaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMgJiYgdGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZm9yRWFjaChpID0+IGkuaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTWluVmFsdWUodmFsdWU6IHN0cmluZyB8IERhdGUpOiBEYXRlIHwgbnVsbCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogRGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghbWluVmFsdWUgJiYgdGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmlsdGVyKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KVswXTtcbiAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gcGFyc2VEYXRlKHN0YXJ0LmRhdGVUaW1lRWRpdG9yLm1pblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTWF4VmFsdWUodmFsdWU6IHN0cmluZyB8IERhdGUpOiBEYXRlIHwgbnVsbCB7XG4gICAgICAgIGxldCBtYXhWYWx1ZTogRGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghbWF4VmFsdWUgJiYgdGhpcy5wcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbHRlcihpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpWzBdO1xuICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gcGFyc2VEYXRlKGVuZC5kYXRlVGltZUVkaXRvci5tYXhWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGVuZGFyKSB7XG4gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuZGlzYWJsZWREYXRlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMucGFyc2VNaW5WYWx1ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgaWYgKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMucHVzaCh7IHR5cGU6IERhdGVSYW5nZVR5cGUuQmVmb3JlLCBkYXRlUmFuZ2U6IFttaW5WYWx1ZV0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLnBhcnNlTWF4VmFsdWUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIGlmIChtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkFmdGVyLCBkYXRlUmFuZ2U6IFttYXhWYWx1ZV0gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYW5nZTogRGF0ZVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnZhbHVlPy5zdGFydCAmJiB0aGlzLnZhbHVlPy5lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudG9SYW5nZU9mRGF0ZXModGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUoX3ZhbHVlLnN0YXJ0LCBfdmFsdWUuZW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dhcEVkaXRvckRhdGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZUluUmFuZ2UodGhpcy52YWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnB1c2goX3ZhbHVlLnN0YXJ0LCBfdmFsdWUuZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdERhdGUocmFuZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNhbGVuZGFyLm1vbnRoVmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZGVzZWxlY3REYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxlbmRhci52aWV3RGF0ZSA9IHJhbmdlWzBdIHx8IG5ldyBEYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzd2FwRWRpdG9yRGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBbc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWUsIGVuZC5kYXRlVGltZUVkaXRvci52YWx1ZV0gPSBbZW5kLmRhdGVUaW1lRWRpdG9yLnZhbHVlLCBzdGFydC5kYXRlVGltZUVkaXRvci52YWx1ZV07XG4gICAgICAgICAgICBbdGhpcy52YWx1ZS5zdGFydCwgdGhpcy52YWx1ZS5lbmRdID0gW3RoaXMudmFsdWUuZW5kLCB0aGlzLnZhbHVlLnN0YXJ0XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsdWVJblJhbmdlKHZhbHVlOiBEYXRlUmFuZ2UsIG1pblZhbHVlPzogRGF0ZSwgbWF4VmFsdWU/OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudG9SYW5nZU9mRGF0ZXModmFsdWUpO1xuICAgICAgICBpZiAobWluVmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmxlc3NUaGFuTWluVmFsdWUoX3ZhbHVlLnN0YXJ0LCBtaW5WYWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFZhbHVlICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKF92YWx1ZS5lbmQsIG1heFZhbHVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdFJhbmdlKHNlbGVjdGlvbjogRGF0ZVtdKTogRGF0ZVJhbmdlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzZWxlY3Rpb25bMF0gfHwgbnVsbCxcbiAgICAgICAgICAgIGVuZDogc2VsZWN0aW9uLmxlbmd0aCA+IDAgPyBzZWxlY3Rpb25bc2VsZWN0aW9uLmxlbmd0aCAtIDFdIDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9SYW5nZU9mRGF0ZXMocmFuZ2U6IERhdGVSYW5nZSk6IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHtcbiAgICAgICAgbGV0IHN0YXJ0O1xuICAgICAgICBsZXQgZW5kO1xuICAgICAgICBpZiAoIWlzRGF0ZShyYW5nZS5zdGFydCkpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZShyYW5nZS5zdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0RhdGUocmFuZ2UuZW5kKSkge1xuICAgICAgICAgICAgZW5kID0gRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZShyYW5nZS5lbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0IHx8IGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHJhbmdlLnN0YXJ0IGFzIERhdGUsIGVuZDogcmFuZ2UuZW5kIGFzIERhdGUgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICBzdGFydC5kYXRlVGltZUVkaXRvci52YWx1ZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgc3RhcnQ6IHZhbHVlLCBlbmQ6IHRoaXMudmFsdWUuZW5kIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiB2YWx1ZSwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVuZC5kYXRlVGltZUVkaXRvci52YWx1ZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgc3RhcnQ6IHRoaXMudmFsdWUuc3RhcnQsIGVuZDogdmFsdWUgYXMgRGF0ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogbnVsbCwgZW5kOiB2YWx1ZSBhcyBEYXRlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hPblRvdWNoZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaS5kYXRlVGltZUVkaXRvci5uYXRpdmVFbGVtZW50LCAnYmx1cicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhY2hlRm9jdXNlZElucHV0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGkuZGF0ZVRpbWVFZGl0b3IubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mb2N1c2VkSW5wdXQgPSBpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWdQb3NpdGlvblN0cmF0ZWd5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneSA9IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvblNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MudGFyZ2V0ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maWdPdmVybGF5U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXR0aW5ncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5fZGlhbG9nT3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGlhbG9nT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxTZXRWYWx1ZSgpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gdmFsdWUgYW5kIG5vIG5nQ29udHJvbCBvbiB0aGUgcGlja2VyIGJ1dCB3ZSBoYXZlIGlucHV0cyB3ZSBtYXkgaGF2ZSB2YWx1ZSBzZXQgdGhyb3VnaFxuICAgICAgICAvLyB0aGVpciBuZ01vZGVscyAtIHdlIHNob3VsZCBnZW5lcmF0ZSBvdXIgaW5pdGlhbCBjb250cm9sIHZhbHVlXG4gICAgICAgIGlmICgoIXRoaXMudmFsdWUgfHwgKCF0aGlzLnZhbHVlLnN0YXJ0ICYmICF0aGlzLnZhbHVlLmVuZCkpICYmIHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzICYmICF0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWUgYXMgRGF0ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZC5kYXRlVGltZUVkaXRvci52YWx1ZSBhcyBEYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHM/LmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnByb2plY3RlZElucHV0cz8uZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgICAgICAgY29uc3QgX3ZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudG9SYW5nZU9mRGF0ZXModGhpcy52YWx1ZSkgOiBudWxsO1xuICAgICAgICAgICAgc3RhcnQudXBkYXRlSW5wdXRWYWx1ZShfdmFsdWU/LnN0YXJ0IHx8IG51bGwpO1xuICAgICAgICAgICAgZW5kLnVwZGF0ZUlucHV0VmFsdWUoX3ZhbHVlPy5lbmQgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlGb3JtYXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGkgYXMgSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlucHV0LmRhdGVUaW1lRWRpdG9yLmRpc3BsYXlGb3JtYXQgPSB0aGlzLmRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRGb3JtYXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGkgYXMgSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChpbnB1dC5kYXRlVGltZUVkaXRvci5pbnB1dEZvcm1hdCAhPT0gdGhpcy5pbnB1dEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGVUaW1lRWRpdG9yLmlucHV0Rm9ybWF0ID0gdGhpcy5pbnB1dEZvcm1hdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGNvbXBvbmVudEluc3RhbmNlOiBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9jYWxlbmRhciA9IGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLmhhc0hlYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdGlvbiA9IENhbGVuZGFyU2VsZWN0aW9uLlJBTkdFO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLndlZWtTdGFydCA9IHRoaXMud2Vla1N0YXJ0O1xuICAgICAgICB0aGlzLmNhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuaGlkZU91dHNpZGVEYXlzO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoc1ZpZXdOdW1iZXIgPSB0aGlzLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgICAgdGhpcy5jYWxlbmRhci5zZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXY6IERhdGVbXSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZXYpKTtcblxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jbG9zZUJ1dHRvbkxhYmVsID0gIXRoaXMuaXNEcm9wZG93biA/IHRoaXMuZG9uZUJ1dHRvblRleHQgOiBudWxsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5waWNrZXJBY3Rpb25zID0gdGhpcy5waWNrZXJBY3Rpb25zO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jYWxlbmRhckNsb3NlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XG4gICAgfVxufVxuIl19
|
|
851
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUN0RixZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQzNFLFdBQVcsRUFDbUIsUUFBUSxFQUFFLE1BQU0sRUFDL0IsV0FBVyxFQUFFLFNBQVMsRUFDeEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNvQyxTQUFTLEVBQ2hELGFBQWEsRUFBRSxpQkFBaUIsRUFDbkMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsSUFBSSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFtQyxNQUFN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b0JBc0RsRSxLQUFLO3dCQWdGTCxZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBMT0NBTEVfSUQsXG4gICAgTmdNb2R1bGVSZWYsXG4gICAgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCxcbiAgICBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgbm9vcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZhZGVJbiwgZmFkZU91dCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvZmFkZSc7XG5pbXBvcnQgeyBDYWxlbmRhclNlbGVjdGlvbiwgSWd4Q2FsZW5kYXJDb21wb25lbnQsIFdFRUtEQVlTIH0gZnJvbSAnLi4vY2FsZW5kYXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEYXRlUmFuZ2VQaWNrZXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vZGF0ZS1yYW5nZS1waWNrZXItcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVUaW1lVXRpbCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3V0aWwvZGF0ZS10aW1lLnV0aWwnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgaXNEYXRlLCBwYXJzZURhdGUsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9jYWxlbmRhci1jb250YWluZXIvY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcGlja2VyLWljb25zLmNvbW1vbic7XG5pbXBvcnQgeyBQaWNrZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcGlja2VyLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgSWd4SW5wdXREaXJlY3RpdmUsIElneElucHV0R3JvdXBDb21wb25lbnQsIElneElucHV0R3JvdXBUeXBlLCBJZ3hJbnB1dFN0YXRlLFxuICAgIElneExhYmVsRGlyZWN0aXZlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRVxufSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7XG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksIElneE92ZXJsYXlTZXJ2aWNlLCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncywgT3ZlcmxheUV2ZW50QXJncyxcbiAgICBPdmVybGF5U2V0dGluZ3MsIFBvc2l0aW9uU2V0dGluZ3Ncbn0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIERhdGVSYW5nZSwgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50LCBJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50LFxuICAgIElneERhdGVSYW5nZVNlcGFyYXRvckRpcmVjdGl2ZSwgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnRcbn0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dHMuY29tbW9uJztcblxuY29uc3QgU2luZ2xlSW5wdXREYXRlc0NvbmNhdGVuYXRpb25TdHJpbmcgPSAnIC0gJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZWxlY3QgYSByYW5nZSBvZiBkYXRlcyBmcm9tIGEgY2FsZW5kYXIgVUkgb3IgZWRpdGFibGUgaW5wdXRzLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVJhbmdlTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1pbnB1dC1ncm91cC10aGVtZSwgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtZGF0ZS1yYW5nZS1waWNrZXItdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgZGF0ZSwgcmFuZ2UsIGRhdGUgcmFuZ2UsIGRhdGUgcGlja2VyXG4gKlxuICogQGlneEdyb3VwIHNjaGVkdWxpbmdcbiAqXG4gKiBAcmVtYXJrc1xuICogSXQgZGlzcGxheXMgdGhlIHJhbmdlIHNlbGVjdGlvbiBpbiBhIHNpbmdsZSBvciB0d28gaW5wdXQgZmllbGRzLlxuICogVGhlIGRlZmF1bHQgdGVtcGxhdGUgZGlzcGxheXMgYSBzaW5nbGUgKnJlYWRvbmx5KiBpbnB1dCBmaWVsZFxuICogd2hpbGUgcHJvamVjdGluZyBgaWd4LWRhdGUtcmFuZ2Utc3RhcnRgIGFuZCBgaWd4LWRhdGUtcmFuZ2UtZW5kYFxuICogZGlzcGxheXMgdHdvICplZGl0YWJsZSogaW5wdXQgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIG1vZGU9XCJkcm9wZG93blwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWRhdGUtcmFuZ2UtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFBpY2tlckJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZGlzcGxheWVkIG1vbnRoIHZpZXdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IGlzIGAyYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW2Rpc3BsYXlNb250aHNDb3VudF09XCIzXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheU1vbnRoc0NvdW50ID0gMjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB3aGV0aGVyIGRhdGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IG1vbnRoIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtoaWRlT3V0c2lkZURheXNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5czogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIENhbiBiZSBhc3NpZ25lZCB0byBhIG51bWVyaWMgdmFsdWUgb3IgdG8gYFdFRUtEQVlTYCBlbnVtIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbd2Vla1N0YXJ0XT1cIjFcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3ZWVrU3RhcnQgPSBXRUVLREFZUy5TVU5EQVk7XG5cbiAgICAvKipcbiAgICAgKiBMb2NhbGUgc2V0dGluZ3MgdXNlZCBmb3IgdmFsdWUgZm9ybWF0dGluZyBhbmQgY2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZXMgQW5ndWxhcidzIGBMT0NBTEVfSURgIGJ5IGRlZmF1bHQuIEFmZmVjdHMgYm90aCBpbnB1dCBtYXNrIGFuZCBkaXNwbGF5IGZvcm1hdCBpZiB0aG9zZSBhcmUgbm90IHNldC5cbiAgICAgKiBJZiBhIGBsb2NhbGVgIGlzIHNldCwgaXQgbXVzdCBiZSByZWdpc3RlcmVkIHZpYSBgcmVnaXN0ZXJMb2NhbGVEYXRhYC5cbiAgICAgKiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2kxOG4jaTE4bi1waXBlcy5cbiAgICAgKiBJZiBpdCBpcyBub3QgcmVnaXN0ZXJlZCwgYEludGxgIHdpbGwgYmUgdXNlZCBmb3IgZm9ybWF0dGluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgbG9jYWxlPVwianBcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEEgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvbiwgYXBwbGllZCBvbiB0aGUgc2VsZWN0ZWQgb3IgcGFzc2VkIGluIGRhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwcml2YXRlIGRheUZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW5cIiwgeyB3ZWVrZGF5OiBcImxvbmdcIiB9KTtcbiAgICAgKiBwcml2YXRlIG1vbnRoRm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlblwiLCB7IG1vbnRoOiBcImxvbmdcIiB9KTtcbiAgICAgKlxuICAgICAqIHB1YmxpYyBmb3JtYXR0ZXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICogIHJldHVybiBgJHt0aGlzLmRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSl9IC0gJHt0aGlzLm1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKX0gLSAke2RhdGUuZ2V0RnVsbFllYXIoKX1gO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbZm9ybWF0dGVyXT1cImZvcm1hdHRlclwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbDogRGF0ZVJhbmdlKSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCB0ZXh0IG9mIHRoZSBjYWxlbmRhciBkaWFsb2cgYGRvbmVgIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgRG9uZWAuXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgcmVuZGVycyBEb25lIGJ1dHRvbiB3aXRoIGN1c3RvbSB0ZXh0LiBCeSBkZWZhdWx0IGBkb25lQnV0dG9uVGV4dGAgaXMgc2V0IHRvIERvbmUuXG4gICAgICogVGhlIGJ1dHRvbiB3aWxsIG9ubHkgc2hvdyB1cCBpbiBgZGlhbG9nYCBtb2RlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBkb25lQnV0dG9uVGV4dD1cIuWujOS6hlwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkb25lQnV0dG9uVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2RvbmVCdXR0b25UZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb25lQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fZG9uZUJ1dHRvblRleHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9yYW5nZV9waWNrZXJfZG9uZV9idXR0b247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvbmVCdXR0b25UZXh0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDdXN0b20gb3ZlcmxheSBzZXR0aW5ncyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGNhbGVuZGFyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbb3ZlcmxheVNldHRpbmdzXT1cImN1c3RvbU92ZXJsYXlTZXR0aW5nc1wiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZvcm1hdCB1c2VkIHdoZW4gZWRpdGFibGUgaW5wdXRzIGFyZSBub3QgZm9jdXNlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVXNlcyBBbmd1bGFyJ3MgRGF0ZVBpcGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGRpc3BsYXlGb3JtYXQ9XCJFRS9NL3l5XCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5Rm9ybWF0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXhwZWN0ZWQgdXNlciBpbnB1dCBmb3JtYXQgYW5kIHBsYWNlaG9sZGVyLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IGlzIGBcIidNTS9kZC95eXl5J1wiYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBpbnB1dEZvcm1hdD1cImRkL01NL3l5XCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5wdXRGb3JtYXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIGluIGEgdmFsaWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW21pblZhbHVlXT1cIm1pbkRhdGVcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSBpbiBhIHZhbGlkIHJhbmdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFttYXhWYWx1ZV09XCJtYXhEYXRlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSURhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSURhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHBsYWNlaG9sZGVyYCBmb3Igc2luZ2xlLWlucHV0IGBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtwbGFjZWhvbGRlcl09XCInQ2hvb3NlIHlvdXIgZGF0ZXMnXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgY29udGFpbmVyIHVzZWQgZm9yIHRoZSBwb3B1cCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAgYG91dGxldGAgaXMgYW4gaW5zdGFuY2Ugb2YgYElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmVgIG9yIGFuIGBFbGVtZW50UmVmYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZGl2IGlneE92ZXJsYXlPdXRsZXQgI291dGxldD1cIm92ZXJsYXktb3V0bGV0XCI+PC9kaXY+XG4gICAgICogLy8uLlxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW291dGxldF09XCJvdXRsZXRcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiAvLy4uXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3V0bGV0OiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIHwgRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBwaWNrZXIncyB2YWx1ZSBjaGFuZ2VzLiBVc2VkIGZvciB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFsodmFsdWUpXT1cImRhdGVcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZT4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRhdGUtcmFuZ2UtcGlja2VyJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWRhdGUtcmFuZ2UtcGlja2VyJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXRHcm91cENvbXBvbmVudClcbiAgICBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUpXG4gICAgcHVibGljIGlucHV0RGlyZWN0aXZlOiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudClcbiAgICBwdWJsaWMgcHJvamVjdGVkSW5wdXRzOiBRdWVyeUxpc3Q8SWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHVibGljIHBpY2tlckFjdGlvbnM6IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKElneERhdGVSYW5nZVNlcGFyYXRvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBkYXRlU2VwYXJhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGVTZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVTZXBhcmF0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9yYW5nZV9waWNrZXJfZGF0ZV9zZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXBhcmF0b3I7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBhcHBsaWVkRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBEYXRlVGltZVV0aWwuZ2V0TG9jYWxlRGF0ZUZvcm1hdCh0aGlzLmxvY2FsZSwgdGhpcy5kaXNwbGF5Rm9ybWF0KVxuICAgICAgICAgICAgfHwgRGF0ZVRpbWVVdGlsLkRFRkFVTFRfSU5QVVRfRk9STUFUO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgc2luZ2xlSW5wdXRGb3JtYXQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuYXBwbGllZEZvcm1hdDtcbiAgICAgICAgcmV0dXJuIGAke2Zvcm1hdH0ke1NpbmdsZUlucHV0RGF0ZXNDb25jYXRlbmF0aW9uU3RyaW5nfSR7Zm9ybWF0fWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjYWxlbmRhciBzdGF0ZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLmRhdGVSYW5nZS5jb2xsYXBzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZSAvIHJhbmdlIGZyb20gdGhlIGNhbGVuZGFyXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBjdXJyZW50IHZhbHVlIGlzIG9mIHR5cGUgYERhdGVSYW5nZWBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5ld1ZhbHVlOiBEYXRlUmFuZ2UgPSB7IHN0YXJ0OiBuZXcgRGF0ZShcIjIvMi8yMDEyXCIpLCBlbmQ6IG5ldyBEYXRlKFwiMy8zLzIwMTNcIil9O1xuICAgICAqIHRoaXMuZGF0ZVJhbmdlUGlja2VyLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlUmFuZ2UgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc1Byb2plY3RlZElucHV0cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdGVkSW5wdXRzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgc2VwYXJhdG9yQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50RGVuc2l0eUNsYXNzKCdpZ3gtZGF0ZS1yYW5nZS1waWNrZXJfX2xhYmVsJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuIChlcnJvciAmJiBlcnJvci5yZXF1aXJlZCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY2FsZW5kYXIoKTogSWd4Q2FsZW5kYXJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZHJvcGRvd25PdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkRhdGVSYW5nZVBpY2tlclJlc1N0cmluZ3M7XG4gICAgcHJpdmF0ZSBfZG9uZUJ1dHRvblRleHQgPSBudWxsO1xuICAgIHByaXZhdGUgX2RhdGVTZXBhcmF0b3IgPSBudWxsO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsO1xuICAgIHByaXZhdGUgX292ZXJsYXlJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX25nQ29udHJvbDogTmdDb250cm9sO1xuICAgIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXI6IElneENhbGVuZGFyQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX3Bvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgcHJpdmF0ZSBfZm9jdXNlZElucHV0OiBJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX292ZXJsYXlTdWJGaWx0ZXI6XG4gICAgICAgIFtNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248T3ZlcmxheUV2ZW50QXJncz4sIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzIHwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+XSA9IFtcbiAgICAgICAgICAgIGZpbHRlcih4ID0+IHguaWQgPT09IHRoaXMuX292ZXJsYXlJZCksXG4gICAgICAgICAgICB0YWtlVW50aWwobWVyZ2UodGhpcy5fZGVzdHJveSQsIHRoaXMuY2xvc2VkKSlcbiAgICAgICAgXTtcbiAgICBwcml2YXRlIF9kaWFsb2dPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IHRydWUsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoZGF0ZVJhbmdlOiBEYXRlUmFuZ2UpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgb25Ub3VjaENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIG9uVmFsaWRhdG9yQ2hhbmdlOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIF9sb2NhbGVJZDogYW55LFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4sXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIHByaXZhdGUgX292ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucz86IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIHByb3RlY3RlZCBfaW5wdXRHcm91cFR5cGU/OiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0RPV046XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlUmFuZ2U+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJkYXRlUmFuZ2Uub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvblxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKG92ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5pc0Ryb3Bkb3duXG4gICAgICAgICAgICA/IHRoaXMuZHJvcGRvd25PdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgIDogdGhpcy5kaWFsb2dPdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgICwgb3ZlcmxheVNldHRpbmdzKTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5SWQgPSB0aGlzLl9vdmVybGF5U2VydmljZVxuICAgICAgICAgICAgLmF0dGFjaChJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCwgc2V0dGluZ3MsIHRoaXMuX21vZHVsZVJlZik7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLnNob3codGhpcy5fb3ZlcmxheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciAjZGF0ZVJhbmdlPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwiZGF0ZVJhbmdlLmNsb3NlKClcIj5DbG9zZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlUmFuZ2U+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJkYXRlUmFuZ2UudG9nZ2xlKClcIj5Ub2dnbGUgRGlhbG9nPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZShvdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKG92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIGEgcmFuZ2Ugb2YgZGF0ZXMuIElmIG5vIGBlbmREYXRlYCBpcyBwYXNzZWQsIHJhbmdlIGlzIDEgZGF5IChvbmx5IGBzdGFydERhdGVgKVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIHNlbGVjdEZpdmVEYXlSYW5nZSgpIHtcbiAgICAgKiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAqICBjb25zdCBpbkZpdmVEYXlzID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDUpKTtcbiAgICAgKiAgdGhpcy5kYXRlUmFuZ2Uuc2VsZWN0KHRvZGF5LCBpbkZpdmVEYXlzKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChzdGFydERhdGU6IERhdGUsIGVuZERhdGU/OiBEYXRlKTogdm9pZCB7XG4gICAgICAgIGVuZERhdGUgPSBlbmREYXRlID8/IHN0YXJ0RGF0ZTtcbiAgICAgICAgY29uc3QgZGF0ZVJhbmdlID0gW3N0YXJ0RGF0ZSwgZW5kRGF0ZV07XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uKGRhdGVSYW5nZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IERhdGVSYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdmFsdWU6IERhdGVSYW5nZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5wdXQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRJbnB1dCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydElucHV0LmRhdGVUaW1lRWRpdG9yLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IHN0YXJ0VmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW5kSW5wdXQuZGF0ZVRpbWVFZGl0b3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgZW5kVmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtaW4gPSBwYXJzZURhdGUodGhpcy5taW5WYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSBwYXJzZURhdGUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlRGF0ZSh2YWx1ZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBwYXJzZURhdGUodmFsdWUuZW5kKTtcbiAgICAgICAgICAgIGlmICgobWluICYmIHN0YXJ0ICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKHN0YXJ0LCBtaW4sIGZhbHNlKSlcbiAgICAgICAgICAgICAgICB8fCAobWluICYmIGVuZCAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZShlbmQsIG1pbiwgZmFsc2UpKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IG1pblZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChtYXggJiYgc3RhcnQgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUoc3RhcnQsIG1heCwgZmFsc2UpKVxuICAgICAgICAgICAgICAgIHx8IChtYXggJiYgZW5kICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKGVuZCwgbWF4LCBmYWxzZSkpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgbWF4VmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTtcbiAgICAgICAgdGhpcy5jb25maWdQb3NpdGlvblN0cmF0ZWd5KCk7XG4gICAgICAgIHRoaXMuY29uZmlnT3ZlcmxheVNldHRpbmdzKCk7XG4gICAgICAgIHRoaXMuY2FjaGVGb2N1c2VkSW5wdXQoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hPblRvdWNoZWQoKTtcblxuICAgICAgICB0aGlzLnNldFJlcXVpcmVkVG9JbnB1dHMoKTtcblxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJCA9IHRoaXMuX25nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlbGF5IGludm9jYXRpb25zIHVudGlsIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgaGFzIGNvbXBsZXRlZFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsU2V0VmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRzKCk7XG4gICAgICAgICAgICAvLyBCLlAuIDA3IEp1bHkgMjAyMSAtIElneERhdGVSYW5nZVBpY2tlciBub3Qgc2hvd2luZyBpbml0aWFsIGRpc2FibGVkIHN0YXRlIHdpdGggQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoICM5Nzc2XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGlmIGRpc2FibGVkIGlzIHBsYWNlZCBvbiB0aGUgcmFuZ2UgcGlja2VyIGVsZW1lbnQgYW5kIHRoZXJlIGFyZSBwcm9qZWN0ZWQgaW5wdXRzXG4gICAgICAgICAgICAgKiBydW4gY2hhbmdlIGRldGVjdGlvbiBzaW5jZSBpZ3hJbnB1dCB3aWxsIGluaXRpYWxseSBzZXQgdGhlIHByb2plY3RlZCBpbnB1dHMnIGRpc2FibGVkIHRvIGZhbHNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5Rm9ybWF0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRGb3JtYXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snZGlzcGxheUZvcm1hdCddICYmIHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlGb3JtYXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snaW5wdXRGb3JtYXQnXSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEZvcm1hdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydkaXNhYmxlZCddKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXR1c0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLmlzVG91Y2hlZE9yRGlydHkgJiYgIXRoaXMuX25nQ29udHJvbC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRJbnB1dFN0YXRlKHRoaXMuaW5wdXRHcm91cC5pc0ZvY3VzZWQpXG4gICAgICAgICAgICAgICAgOiBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGkuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLmlzVG91Y2hlZE9yRGlydHkgJiYgIXRoaXMuX25nQ29udHJvbC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldElucHV0U3RhdGUoaS5pc0ZvY3VzZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IElneElucHV0U3RhdGUuSU5JVElBTDs7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSZXF1aXJlZFRvSW5wdXRzKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0IGlzVG91Y2hlZE9yRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSlcbiAgICAgICAgICAgICYmICghIXRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciB8fCAhIXRoaXMuX25nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihzZWxlY3Rpb25EYXRhOiBEYXRlW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gdGhpcy5leHRyYWN0UmFuZ2Uoc2VsZWN0aW9uRGF0YSk7XG4gICAgICAgIGlmICghbmV3VmFsdWUuc3RhcnQgJiYgIW5ld1ZhbHVlLmVuZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93biAmJiBzZWxlY3Rpb25EYXRhPy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsb3NpbmcoZTogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzID0geyBvd25lcjogdGhpcywgY2FuY2VsOiBlPy5jYW5jZWwsIGV2ZW50OiBlPy5ldmVudCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIGU/LmV2ZW50ICYmICF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhlLmV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIC8vIG91dHNpZGUgY2xpY2tcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaENhbGxiYWNrKCk7XG4gICAgICAgICAgICAvLyBpbnB1dCBjbGlja1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzICYmIHRoaXMuX2ZvY3VzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRJbnB1dC5zZXRGb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRJbnB1dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdmVybGF5RXZlbnQgPSBlIGFzIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHsgb3duZXI6IHRoaXMsIGNhbmNlbDogb3ZlcmxheUV2ZW50Py5jYW5jZWwsIGV2ZW50OiBlLmV2ZW50IH07XG4gICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgICAgIG92ZXJsYXlFdmVudC5jYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGUuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhcigpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcj8uZGF5c1ZpZXc/LmZvY3VzQWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsb3NpbmcoZSBhcyBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NlZC5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/IHZhbHVlIDogbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRpdHlPbkJsdXIoKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaENhbGxiYWNrKCk7XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbmdDb250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLnVwZGF0ZUlucHV0VmFsaWRpdHkoSWd4SW5wdXRTdGF0ZS5JTlZBTElEKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkudXBkYXRlSW5wdXRWYWxpZGl0eShJZ3hJbnB1dFN0YXRlLklOSVRJQUwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9uZ0NvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRGlzYWJsZWRTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgICAgIHN0YXJ0LmlucHV0RGlyZWN0aXZlLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgICAgIGVuZC5pbnB1dERpcmVjdGl2ZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldElucHV0U3RhdGUoZm9jdXNlZDogYm9vbGVhbik6IElneElucHV0U3RhdGUge1xuICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuVkFMSUQgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSZXF1aXJlZFRvSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciBpZ3hJbnB1dCBzZXR0aW5nIHJlcXVpcmVkXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkICE9PSBpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4gaS5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNaW5WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtaW5WYWx1ZSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maWx0ZXIoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpWzBdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBwYXJzZURhdGUoc3RhcnQuZGF0ZVRpbWVFZGl0b3IubWluVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNYXhWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1heFZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtYXhWYWx1ZSAmJiB0aGlzLnByb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmlsdGVyKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudClbMF07XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBwYXJzZURhdGUoZW5kLmRhdGVUaW1lRWRpdG9yLm1heFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxlbmRhci5kaXNhYmxlZERhdGVzID0gW107XG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5wYXJzZU1pblZhbHVlKHRoaXMubWluVmFsdWUpO1xuICAgICAgICBpZiAobWluVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZWZvcmUsIGRhdGVSYW5nZTogW21pblZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMucGFyc2VNYXhWYWx1ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgaWYgKG1heFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMucHVzaCh7IHR5cGU6IERhdGVSYW5nZVR5cGUuQWZ0ZXIsIGRhdGVSYW5nZTogW21heFZhbHVlXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhbmdlOiBEYXRlW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWU/LnN0YXJ0ICYmIHRoaXMudmFsdWU/LmVuZCkge1xuICAgICAgICAgICAgY29uc3QgX3ZhbHVlID0gdGhpcy50b1JhbmdlT2ZEYXRlcyh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShfdmFsdWUuc3RhcnQsIF92YWx1ZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zd2FwRWRpdG9yRGF0ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLnZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UucHVzaChfdmFsdWUuc3RhcnQsIF92YWx1ZS5lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuc2VsZWN0RGF0ZShyYW5nZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2UubGVuZ3RoID09PSAwICYmIHRoaXMuY2FsZW5kYXIubW9udGhWaWV3cykge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5kZXNlbGVjdERhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGVuZGFyLnZpZXdEYXRlID0gcmFuZ2VbMF0gfHwgbmV3IERhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN3YXBFZGl0b3JEYXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgICAgIFtzdGFydC5kYXRlVGltZUVkaXRvci52YWx1ZSwgZW5kLmRhdGVUaW1lRWRpdG9yLnZhbHVlXSA9IFtlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWUsIHN0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlXTtcbiAgICAgICAgICAgIFt0aGlzLnZhbHVlLnN0YXJ0LCB0aGlzLnZhbHVlLmVuZF0gPSBbdGhpcy52YWx1ZS5lbmQsIHRoaXMudmFsdWUuc3RhcnRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWx1ZUluUmFuZ2UodmFsdWU6IERhdGVSYW5nZSwgbWluVmFsdWU/OiBEYXRlLCBtYXhWYWx1ZT86IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgX3ZhbHVlID0gdGhpcy50b1JhbmdlT2ZEYXRlcyh2YWx1ZSk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZShfdmFsdWUuc3RhcnQsIG1pblZhbHVlLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUoX3ZhbHVlLmVuZCwgbWF4VmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0UmFuZ2Uoc2VsZWN0aW9uOiBEYXRlW10pOiBEYXRlUmFuZ2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHNlbGVjdGlvblswXSB8fCBudWxsLFxuICAgICAgICAgICAgZW5kOiBzZWxlY3Rpb24ubGVuZ3RoID4gMCA/IHNlbGVjdGlvbltzZWxlY3Rpb24ubGVuZ3RoIC0gMV0gOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b1JhbmdlT2ZEYXRlcyhyYW5nZTogRGF0ZVJhbmdlKTogeyBzdGFydDogRGF0ZTsgZW5kOiBEYXRlIH0ge1xuICAgICAgICBsZXQgc3RhcnQ7XG4gICAgICAgIGxldCBlbmQ7XG4gICAgICAgIGlmICghaXNEYXRlKHJhbmdlLnN0YXJ0KSkge1xuICAgICAgICAgICAgc3RhcnQgPSBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRGF0ZShyYW5nZS5lbmQpKSB7XG4gICAgICAgICAgICBlbmQgPSBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHJhbmdlLmVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnQgfHwgZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBzdGFydDogcmFuZ2Uuc3RhcnQgYXMgRGF0ZSwgZW5kOiByYW5nZS5lbmQgYXMgRGF0ZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogdmFsdWUsIGVuZDogdGhpcy52YWx1ZS5lbmQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgc3RhcnQ6IHZhbHVlLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZW5kLmRhdGVUaW1lRWRpdG9yLnZhbHVlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogdGhpcy52YWx1ZS5zdGFydCwgZW5kOiB2YWx1ZSBhcyBEYXRlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IHZhbHVlIGFzIERhdGUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaE9uVG91Y2hlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgIGZyb21FdmVudChpLmRhdGVUaW1lRWRpdG9yLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LCAnYmx1cicpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FjaGVGb2N1c2VkSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoaS5kYXRlVGltZUVkaXRvci5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZvY3VzZWRJbnB1dCA9IGkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ1Bvc2l0aW9uU3RyYXRlZ3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBmYWRlSW4sXG4gICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogZmFkZU91dFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5ID0gbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpO1xuICAgICAgICB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ092ZXJsYXlTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNldHRpbmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbFNldFZhbHVlKCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBhbmQgbm8gbmdDb250cm9sIG9uIHRoZSBwaWNrZXIgYnV0IHdlIGhhdmUgaW5wdXRzIHdlIG1heSBoYXZlIHZhbHVlIHNldCB0aHJvdWdoXG4gICAgICAgIC8vIHRoZWlyIG5nTW9kZWxzIC0gd2Ugc2hvdWxkIGdlbmVyYXRlIG91ciBpbml0aWFsIGNvbnRyb2wgdmFsdWVcbiAgICAgICAgaWYgKCghdGhpcy52YWx1ZSB8fCAoIXRoaXMudmFsdWUuc3RhcnQgJiYgIXRoaXMudmFsdWUuZW5kKSkgJiYgdGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMgJiYgIXRoaXMuX25nQ29udHJvbCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydC5kYXRlVGltZUVkaXRvci52YWx1ZSBhcyBEYXRlLFxuICAgICAgICAgICAgICAgIGVuZDogZW5kLmRhdGVUaW1lRWRpdG9yLnZhbHVlIGFzIERhdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cz8uZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQ7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzPy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50O1xuICAgICAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy50b1JhbmdlT2ZEYXRlcyh0aGlzLnZhbHVlKSA6IG51bGw7XG4gICAgICAgICAgICBzdGFydC51cGRhdGVJbnB1dFZhbHVlKF92YWx1ZT8uc3RhcnQgfHwgbnVsbCk7XG4gICAgICAgICAgICBlbmQudXBkYXRlSW5wdXRWYWx1ZShfdmFsdWU/LmVuZCB8fCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRGlzcGxheUZvcm1hdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gaSBhcyBJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50O1xuICAgICAgICAgICAgaW5wdXQuZGF0ZVRpbWVFZGl0b3IuZGlzcGxheUZvcm1hdCA9IHRoaXMuZGlzcGxheUZvcm1hdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dEZvcm1hdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gaSBhcyBJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGlucHV0LmRhdGVUaW1lRWRpdG9yLmlucHV0Rm9ybWF0ICE9PSB0aGlzLmlucHV0Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0ZVRpbWVFZGl0b3IuaW5wdXRGb3JtYXQgPSB0aGlzLmlucHV0Rm9ybWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuc2VsZWN0aW9uID0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhzVmlld051bWJlciA9IHRoaXMuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZVtdKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihldikpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSAhdGhpcy5pc0Ryb3Bkb3duID8gdGhpcy5kb25lQnV0dG9uVGV4dCA6IG51bGw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG59XG4iXX0=
|