igniteui-angular 12.2.5 → 12.2.9
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 +364 -495
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/igniteui-angular.js +106 -107
- package/esm2015/lib/action-strip/grid-actions/grid-editing-actions.component.js +2 -2
- package/esm2015/lib/banner/banner.component.js +1 -1
- package/esm2015/lib/combo/combo-item.component.js +2 -2
- package/esm2015/lib/core/utils.js +24 -2
- package/esm2015/lib/data-operations/data-clone-strategy.js +7 -0
- package/esm2015/lib/data-operations/data-util.js +7 -6
- package/esm2015/lib/directives/radio/radio-group.directive.js +5 -13
- package/esm2015/lib/drop-down/drop-down-item.base.js +1 -5
- package/esm2015/lib/grids/api.service.js +2 -2
- package/esm2015/lib/grids/cell.component.js +1 -17
- package/esm2015/lib/grids/column-actions/column-actions.component.js +3 -7
- package/esm2015/lib/grids/common/crud.service.js +4 -3
- package/esm2015/lib/grids/common/grid.interface.js +1 -1
- package/esm2015/lib/grids/common/pipes.js +2 -2
- package/esm2015/lib/grids/common/row.interface.js +1 -1
- package/esm2015/lib/grids/grid/grid.component.js +3 -7
- package/esm2015/lib/grids/grid-base.directive.js +79 -118
- package/esm2015/lib/grids/grid-public-row.js +18 -16
- package/esm2015/lib/grids/headers/grid-header-row.component.js +2 -2
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +3 -7
- package/esm2015/lib/grids/row.directive.js +2 -3
- package/esm2015/lib/grids/summaries/grid-summary.service.js +2 -2
- package/esm2015/lib/grids/tree-grid/tree-grid.component.js +3 -7
- package/esm2015/lib/grids/tree-grid/tree-grid.pipes.js +3 -3
- package/esm2015/lib/icon/icon.component.js +1 -6
- package/esm2015/lib/services/overlay/overlay.js +2 -1
- package/esm2015/lib/services/overlay/utilities.js +1 -1
- package/esm2015/lib/services/transaction/base-transaction.js +17 -4
- package/esm2015/lib/services/transaction/igx-hierarchical-transaction.js +3 -4
- package/esm2015/lib/services/transaction/igx-transaction.js +3 -3
- package/esm2015/lib/services/transaction/transaction-factory.service.js +1 -2
- package/esm2015/lib/services/transaction/transaction.js +1 -1
- package/esm2015/lib/toast/toast.component.js +3 -6
- package/esm2015/public_api.js +2 -1
- package/fesm2015/igniteui-angular.js +171 -299
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.d.ts +105 -106
- package/igniteui-angular.metadata.json +1 -1
- package/lib/banner/banner.component.d.ts +1 -2
- package/lib/core/utils.d.ts +12 -0
- package/lib/data-operations/data-clone-strategy.d.ts +6 -0
- package/lib/data-operations/data-util.d.ts +3 -2
- package/lib/directives/radio/radio-group.directive.d.ts +4 -4
- package/lib/grids/cell.component.d.ts +0 -9
- package/lib/grids/column-actions/column-actions.component.d.ts +2 -1
- package/lib/grids/common/grid.interface.d.ts +2 -0
- package/lib/grids/common/row.interface.d.ts +1 -0
- package/lib/grids/grid/grid.component.d.ts +2 -1
- package/lib/grids/grid-base.directive.d.ts +66 -37
- package/lib/grids/grid-public-row.d.ts +10 -3
- package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
- package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
- package/lib/icon/icon.component.d.ts +2 -2
- package/lib/services/overlay/utilities.d.ts +2 -1
- package/lib/services/transaction/base-transaction.d.ts +7 -0
- package/lib/services/transaction/transaction.d.ts +5 -0
- package/lib/toast/toast.component.d.ts +2 -0
- package/migrations/common/filterSourceDirs.d.ts +2 -2
- package/migrations/common/filterSourceDirs.js +2 -2
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/esm2015/lib/core/deprecateDecorators.js +0 -101
- package/lib/core/deprecateDecorators.d.ts +0 -20
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Directive, NgModule, Input, Output, EventEmitter, ContentChildren, HostBinding } from '@angular/core';
|
|
3
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
3
|
import { IgxRadioComponent, RadioLabelPosition } from '../../radio/radio.component';
|
|
@@ -6,7 +5,6 @@ import { IgxRippleModule } from '../ripple/ripple.directive';
|
|
|
6
5
|
import { takeUntil } from 'rxjs/operators';
|
|
7
6
|
import { noop, Subject } from 'rxjs';
|
|
8
7
|
import { mkenum } from '../../core/utils';
|
|
9
|
-
import { DeprecateProperty } from '../../core/deprecateDecorators';
|
|
10
8
|
/**
|
|
11
9
|
* Determines the Radio Group alignment
|
|
12
10
|
*/
|
|
@@ -169,10 +167,10 @@ export class IgxRadioGroupDirective {
|
|
|
169
167
|
this._setRadioButtonsRequired();
|
|
170
168
|
}
|
|
171
169
|
/**
|
|
172
|
-
* An @Input property that allows you to disable the radio group. By default it's false.
|
|
173
|
-
*
|
|
174
170
|
* @deprecated in version 12.2.0
|
|
175
171
|
*
|
|
172
|
+
* An input property that allows you to disable the radio group. By default it's false.
|
|
173
|
+
*
|
|
176
174
|
* @example
|
|
177
175
|
* ```html
|
|
178
176
|
* <igx-radio-group disabled></igx-radio-group>
|
|
@@ -186,10 +184,10 @@ export class IgxRadioGroupDirective {
|
|
|
186
184
|
this.setDisabledState(value);
|
|
187
185
|
}
|
|
188
186
|
/**
|
|
189
|
-
* Sets/gets the position of the `label` in the child radio buttons.
|
|
190
|
-
*
|
|
191
187
|
* @deprecated in version 12.2.0
|
|
192
188
|
*
|
|
189
|
+
* Sets/gets the position of the `label` in the child radio buttons.
|
|
190
|
+
*
|
|
193
191
|
* @remarks
|
|
194
192
|
* If not set, `labelPosition` will have value `"after"`.
|
|
195
193
|
*
|
|
@@ -439,12 +437,6 @@ IgxRadioGroupDirective.propDecorators = {
|
|
|
439
437
|
vertical: [{ type: HostBinding, args: ['class.igx-radio-group--vertical',] }],
|
|
440
438
|
alignment: [{ type: Input }]
|
|
441
439
|
};
|
|
442
|
-
__decorate([
|
|
443
|
-
DeprecateProperty('`disabled` is deprecated.')
|
|
444
|
-
], IgxRadioGroupDirective.prototype, "disabled", null);
|
|
445
|
-
__decorate([
|
|
446
|
-
DeprecateProperty('`labelPosition` is deprecated.')
|
|
447
|
-
], IgxRadioGroupDirective.prototype, "labelPosition", null);
|
|
448
440
|
/**
|
|
449
441
|
* @hidden
|
|
450
442
|
*/
|
|
@@ -457,4 +449,4 @@ IgxRadioModule.decorators = [
|
|
|
457
449
|
imports: [IgxRippleModule]
|
|
458
450
|
},] }
|
|
459
451
|
];
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksRUFFWixlQUFlLEVBRWYsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbkU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7SUFDdEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsUUFBUSxFQUFFLFVBQVU7Q0FDdkIsQ0FBQyxDQUFDO0FBR0gsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFNSCxNQUFNLE9BQU8sc0JBQXNCO0lBTG5DO1FBNklJOzs7Ozs7Ozs7O1dBVUc7UUFDSCw0REFBNEQ7UUFDbEMsV0FBTSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUVs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U0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNoRzs7OzJCQVlJLGVBQWUsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7b0JBVXhELEtBQUs7bUJBbUJMLEtBQUs7dUJBc0JMLEtBQUs7dUJBb0JMLEtBQUs7NEJBdUJMLEtBQUs7dUJBb0JMLEtBQUs7cUJBdUJMLE1BQU07dUJBUU4sV0FBVyxTQUFDLHVCQUF1Qjt1QkFZbkMsV0FBVyxTQUFDLGlDQUFpQzt3QkFhN0MsS0FBSzs7QUFsR047SUFGQyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQztzREFJOUM7QUFxQkQ7SUFGQyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQzsyREFJbkQ7QUFpVUw7O0dBRUc7QUFNSCxNQUFNLE9BQU8sY0FBYzs7O1lBTDFCLFFBQVEsU0FBQztnQkFDTixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQztnQkFDekQsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQzthQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIE5nTW9kdWxlLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElneFJhZGlvQ29tcG9uZW50LCBSYWRpb0xhYmVsUG9zaXRpb24sIElDaGFuZ2VSYWRpb0V2ZW50QXJncyB9IGZyb20gJy4uLy4uL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVNb2R1bGUgfSBmcm9tICcuLi9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBub29wLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBta2VudW0gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERlcHJlY2F0ZVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vY29yZS9kZXByZWNhdGVEZWNvcmF0b3JzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBSYWRpbyBHcm91cCBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFJhZGlvR3JvdXBBbGlnbm1lbnQgPSBta2VudW0oe1xuICAgIGhvcml6b250YWw6ICdob3Jpem9udGFsJyxcbiAgICB2ZXJ0aWNhbDogJ3ZlcnRpY2FsJ1xufSk7XG5leHBvcnQgdHlwZSBSYWRpb0dyb3VwQWxpZ25tZW50ID0gdHlwZW9mIFJhZGlvR3JvdXBBbGlnbm1lbnRba2V5b2YgdHlwZW9mIFJhZGlvR3JvdXBBbGlnbm1lbnRdO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBSYWRpbyBncm91cCBkaXJlY3RpdmUgcmVuZGVycyBzZXQgb2YgcmFkaW8gYnV0dG9ucy5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFJhZGlvTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1yYWRpby10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyByYWRpb2dyb3VwLCByYWRpbywgYnV0dG9uLCBpbnB1dFxuICpcbiAqIEBpZ3hHcm91cCBEYXRhIEVudHJ5ICYgRGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIFJhZGlvIEdyb3VwIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBzaW5nbGUgb3B0aW9uIGZyb20gYW4gYXZhaWxhYmxlIHNldCBvZiBvcHRpb25zIHRoYXQgYXJlIGxpc3RlZCBzaWRlIGJ5IHNpZGUuXG4gKlxuICogQGV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LXJhZGlvLWdyb3VwIG5hbWU9XCJyYWRpb0dyb3VwXCI+XG4gKiAgIDxpZ3gtcmFkaW8gKm5nRm9yPVwibGV0IGl0ZW0gb2YgWydGb28nLCAnQmFyJywgJ0JheiddXCIgdmFsdWU9XCJ7e2l0ZW19fVwiPlxuICogICAgICB7e2l0ZW19fVxuICogICA8L2lneC1yYWRpbz5cbiAqIDwvaWd4LXJhZGlvLWdyb3VwPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIGV4cG9ydEFzOiAnaWd4UmFkaW9Hcm91cCcsXG4gICAgc2VsZWN0b3I6ICdpZ3gtcmFkaW8tZ3JvdXAsIFtpZ3hSYWRpb0dyb3VwXScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneFJhZGlvR3JvdXBEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvR3JvdXBEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogYm9vbGVhbiB8ICcnO1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgJyc7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcmFkaW9CdXR0b25zID0gIHRoaXMucmFkaW9Hcm91cC5yYWRpb0J1dHRvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSYWRpb0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwdWJsaWMgcmFkaW9CdXR0b25zOiBRdWVyeUxpc3Q8SWd4UmFkaW9Db21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgW3ZhbHVlXSA9IFwiJ3JhZGlvQnV0dG9uVmFsdWUnXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RSYWRpb0J1dHRvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgbmFtZWAgYXR0cmlidXRlIG9mIHRoZSByYWRpbyBncm91cCBjb21wb25lbnQuIEFsbCBjaGlsZCByYWRpbyBidXR0b25zIGluaGVyaXRzIHRoaXMgbmFtZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgbmFtZSA9IFwiUmFkaW8xXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG5hbWUobmV3VmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbmFtZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX25hbWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uTmFtZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSByYWRpbyBncm91cCBpcyByZXF1aXJlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHNldCwgYHJlcXVpcmVkYCB3aWxsIGhhdmUgdmFsdWUgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgW3JlcXVpcmVkXSA9IFwidHJ1ZVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gKHZhbHVlIGFzIGFueSkgPT09ICcnIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbnNSZXF1aXJlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGUgcmFkaW8gZ3JvdXAuIEJ5IGRlZmF1bHQgaXQncyBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTIuMi4wXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBkaXNhYmxlZD48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBARGVwcmVjYXRlUHJvcGVydHkoJ2BkaXNhYmxlZGAgaXMgZGVwcmVjYXRlZC4nKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gKHZhbHVlIGFzIGFueSkgPT09ICcnIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGBsYWJlbGAgaW4gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDEyLjIuMFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCBgbGFiZWxQb3NpdGlvbmAgd2lsbCBoYXZlIHZhbHVlIGBcImFmdGVyXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBsYWJlbFBvc2l0aW9uID0gXCJiZWZvcmVcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBARGVwcmVjYXRlUHJvcGVydHkoJ2BsYWJlbFBvc2l0aW9uYCBpcyBkZXByZWNhdGVkLicpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxhYmVsUG9zaXRpb24oKTogUmFkaW9MYWJlbFBvc2l0aW9uIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsUG9zaXRpb247XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbGFiZWxQb3NpdGlvbihuZXdWYWx1ZTogUmFkaW9MYWJlbFBvc2l0aW9uIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9sYWJlbFBvc2l0aW9uICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxQb3NpdGlvbiA9IG5ld1ZhbHVlID09PSBSYWRpb0xhYmVsUG9zaXRpb24uQkVGT1JFID8gUmFkaW9MYWJlbFBvc2l0aW9uLkJFRk9SRSA6IFJhZGlvTGFiZWxQb3NpdGlvbi5BRlRFUjtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uTGFiZWxQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBzZWxlY3RlZCBjaGlsZCByYWRpbyBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2VsZWN0ZWRCdXR0b24gPSB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQ7XG4gICAgICogdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkID0gc2VsZWN0ZWRCdXR0b247XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IElneFJhZGlvQ29tcG9uZW50IHwgbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkID8gc2VsZWN0ZWQudmFsdWUgOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSByYWRpbyBncm91cCBgdmFsdWVgIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZXMgdG8gdGhlIHNlbGVjdGVkIGBJZ3hSYWRpb0NvbXBvbmVudGAgYW5kIHRoZSBgdmFsdWVgIHByb3BlcnR5IGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgKGNoYW5nZSk9XCJoYW5kbGVyKCRldmVudClcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNoYW5nZTogRXZlbnRFbWl0dGVyPElDaGFuZ2VSYWRpb0V2ZW50QXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFuZ2VSYWRpb0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXJhZGlvLWdyb3VwJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXJhZGlvLWdyb3VwJztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdmVydGljYWwgYWxpZ25tZW50IHRvIHRoZSByYWRpbyBncm91cCwgaWYgYGFsaWdubWVudGAgaXMgc2V0IHRvIGB2ZXJ0aWNhbGAuXG4gICAgICogQnkgZGVmYXVsdCB0aGUgYWxpZ25tZW50IGlzIGhvcml6b250YWwuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIGFsaWdubWVudD1cInZlcnRpY2FsXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcmFkaW8tZ3JvdXAtLXZlcnRpY2FsJylcbiAgICBwcml2YXRlIHZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGBpZ3gtcmFkaW8tZ3JvdXBgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlSYWRpb0dyb3VwXCIpXG4gICAgICogcHVibGljIHJhZGlvR3JvdXA6IElneFJhZGlvR3JvdXBEaXJlY3RpdmU7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IHJhZGlvQWxpZ25tZW50ID0gdGhpcy5yYWRpb0dyb3VwLmFsaWdubWVudDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGFsaWdubWVudCgpOiBSYWRpb0dyb3VwQWxpZ25tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVydGljYWwgPyBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsIDogUmFkaW9Hcm91cEFsaWdubWVudC5ob3Jpem9udGFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIHNldCB0aGUgcmFkaW8gZ3JvdXAgYWxpZ25tZW50LlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZSBgUmFkaW9Hcm91cEFsaWdubWVudC5ob3Jpem9udGFsYCAoZGVmYXVsdCkgYW5kIGBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGFsaWdubWVudCA9IFJhZGlvR3JvdXBBbGlnbm1lbnQudmVydGljYWw7XG4gICAgICogLy8uLlxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIFthbGlnbm1lbnRdPVwiYWxpZ25tZW50XCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBhbGlnbm1lbnQodmFsdWU6IFJhZGlvR3JvdXBBbGlnbm1lbnQpIHtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbCA9IHZhbHVlID09PSBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmFtZSA9IGBpZ3gtcmFkaW8tZ3JvdXAtJHtuZXh0SWQrK31gO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF92YWx1ZTogYW55ID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IElneFJhZGlvQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFiZWxQb3NpdGlvbjogUmFkaW9MYWJlbFBvc2l0aW9uIHwgc3RyaW5nID0gJ2FmdGVyJztcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgY2FuIHBvc3NpYmx5IGJlIHNldCBieSBOZ01vZGVsIGFuZCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4gICAgICAgIC8vIHRoZSBPbkluaXQgb2YgdGhlIE5nTW9kZWwgb2NjdXJzIGFmdGVyIHRoZSBPbkluaXQgb2YgdGhpcyBjbGFzcy5cbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFkaW9CdXR0b25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFwiY2hlY2tlZFwiIHByb3BlcnR5IHZhbHVlIG9uIHRoZSByYWRpbyBpbnB1dCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgY29uc2lzdGVudCB0byB0aGUgY3VycmVudCByYWRpbyBidXR0b24uXG4gICAgICogSWYgaXQgaXMsIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSB3aWxsIGhhdmUgdmFsdWUgYHRydWVgIGFuZCBzZWxlY3RlZCBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gdGhlIHNlbGVjdGVkIGBJZ3hSYWRpb0NvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnJhZGlvR3JvdXAud3JpdGVWYWx1ZSgncmFkaW9CdXR0b25WYWx1ZScpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBjb250cm9sIGlzIHRvdWNoZWQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnJlZ2lzdGVyT25Ub3VjaGVkKGZuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2luaXRSYWRpb0J1dHRvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7IG5hbWU6IHRoaXMuX25hbWUsIGxhYmVsUG9zaXRpb246IHRoaXMuX2xhYmVsUG9zaXRpb24sIGRpc2FibGVkOiB0aGlzLl9kaXNhYmxlZCwgcmVxdWlyZWQ6IHRoaXMuX3JlcXVpcmVkIH07XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGJ1dHRvbiwgcHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJ1dHRvbi52YWx1ZSA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGJ1dHRvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBidXR0b24uY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLl9zZWxlY3RlZFJhZGlvQnV0dG9uQ2hhbmdlZChldikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoYXJnczogSUNoYW5nZVJhZGlvRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBidXR0b24uaWQgPT09IGFyZ3MucmFkaW8uaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gYXJncy5yYWRpbztcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBhcmdzLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXRSYWRpb0J1dHRvbk5hbWVzKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5uYW1lID0gdGhpcy5fbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFJhZGlvQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSAtIHVuY2hlY2sgYWxsIHJhZGlvIGJ1dHRvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1dHRvbi5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09PSBidXR0b24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBidXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGJ1dHRvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1zZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLmxhYmVsUG9zaXRpb24gPSB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25zUmVxdWlyZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnJlcXVpcmVkID0gdGhpcy5fcmVxdWlyZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlLCBJZ3hSYWRpb0NvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0lneFJpcHBsZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmFkaW9Nb2R1bGUge31cbiJdfQ==
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUVaLGVBQWUsRUFFZixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztJQUN0QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixRQUFRLEVBQUUsVUFBVTtDQUN2QixDQUFDLENBQUM7QUFHSCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQU1ILE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUEySUk7Ozs7Ozs7Ozs7V0FVRztRQUNILDREQUE0RDtRQUNsQyxXQUFNLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRWxIOzs7OztXQUtHO1FBRUksYUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBRXBDOzs7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LEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2hHOzs7MkJBWUksZUFBZSxTQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtvQkFVeEQsS0FBSzttQkFtQkwsS0FBSzt1QkFzQkwsS0FBSzt1QkFtQkwsS0FBSzs0QkFzQkwsS0FBSzt1QkFvQkwsS0FBSztxQkF1QkwsTUFBTTt1QkFRTixXQUFXLFNBQUMsdUJBQXVCO3VCQVluQyxXQUFXLFNBQUMsaUNBQWlDO3dCQWE3QyxLQUFLOztBQXdQVjs7R0FFRztBQU1ILE1BQU0sT0FBTyxjQUFjOzs7WUFMMUIsUUFBUSxTQUFDO2dCQUNOLFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDO2dCQUN6RCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2FBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgTmdNb2R1bGUsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgT25EZXN0cm95LFxuICAgIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWd4UmFkaW9Db21wb25lbnQsIFJhZGlvTGFiZWxQb3NpdGlvbiwgSUNoYW5nZVJhZGlvRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJpcHBsZU1vZHVsZSB9IGZyb20gJy4uL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIFJhZGlvIEdyb3VwIGFsaWdubWVudFxuICovXG5leHBvcnQgY29uc3QgUmFkaW9Hcm91cEFsaWdubWVudCA9IG1rZW51bSh7XG4gICAgaG9yaXpvbnRhbDogJ2hvcml6b250YWwnLFxuICAgIHZlcnRpY2FsOiAndmVydGljYWwnXG59KTtcbmV4cG9ydCB0eXBlIFJhZGlvR3JvdXBBbGlnbm1lbnQgPSB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudFtrZXlvZiB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudF07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIFJhZGlvIGdyb3VwIGRpcmVjdGl2ZSByZW5kZXJzIHNldCBvZiByYWRpbyBidXR0b25zLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UmFkaW9Nb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LXJhZGlvLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIHJhZGlvZ3JvdXAsIHJhZGlvLCBidXR0b24sIGlucHV0XG4gKlxuICogQGlneEdyb3VwIERhdGEgRW50cnkgJiBEaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgUmFkaW8gR3JvdXAgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHNpbmdsZSBvcHRpb24gZnJvbSBhbiBhdmFpbGFibGUgc2V0IG9mIG9wdGlvbnMgdGhhdCBhcmUgbGlzdGVkIHNpZGUgYnkgc2lkZS5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtcmFkaW8tZ3JvdXAgbmFtZT1cInJhZGlvR3JvdXBcIj5cbiAqICAgPGlneC1yYWRpbyAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbJ0ZvbycsICdCYXInLCAnQmF6J11cIiB2YWx1ZT1cInt7aXRlbX19XCI+XG4gKiAgICAgIHt7aXRlbX19XG4gKiAgIDwvaWd4LXJhZGlvPlxuICogPC9pZ3gtcmFkaW8tZ3JvdXA+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgZXhwb3J0QXM6ICdpZ3hSYWRpb0dyb3VwJyxcbiAgICBzZWxlY3RvcjogJ2lneC1yYWRpby1ncm91cCwgW2lneFJhZGlvR3JvdXBdJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlcXVpcmVkOiBib29sZWFuIHwgJyc7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCAnJztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcmFkaW8gYnV0dG9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByYWRpb0J1dHRvbnMgPSAgdGhpcy5yYWRpb0dyb3VwLnJhZGlvQnV0dG9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFJhZGlvQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHB1YmxpYyByYWRpb0J1dHRvbnM6IFF1ZXJ5TGlzdDxJZ3hSYWRpb0NvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGB2YWx1ZWAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbdmFsdWVdID0gXCIncmFkaW9CdXR0b25WYWx1ZSdcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhZGlvQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHJhZGlvIGdyb3VwIGNvbXBvbmVudC4gQWxsIGNoaWxkIHJhZGlvIGJ1dHRvbnMgaW5oZXJpdHMgdGhpcyBuYW1lLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBuYW1lID0gXCJSYWRpbzFcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiAgYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbmFtZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9uYW1lICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFkaW9CdXR0b25OYW1lcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHJhZGlvIGdyb3VwIGlzIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCBgcmVxdWlyZWRgIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbcmVxdWlyZWRdID0gXCJ0cnVlXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIEFuIGlucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSByYWRpbyBncm91cC4gQnkgZGVmYXVsdCBpdCdzIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgZGlzYWJsZWQ+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGBsYWJlbGAgaW4gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIGBsYWJlbFBvc2l0aW9uYCB3aWxsIGhhdmUgdmFsdWUgYFwiYWZ0ZXJcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIGxhYmVsUG9zaXRpb24gPSBcImJlZm9yZVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsYWJlbFBvc2l0aW9uKCk6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGxhYmVsUG9zaXRpb24obmV3VmFsdWU6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWxQb3NpdGlvbiAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsUG9zaXRpb24gPSBuZXdWYWx1ZSA9PT0gUmFkaW9MYWJlbFBvc2l0aW9uLkJFRk9SRSA/IFJhZGlvTGFiZWxQb3NpdGlvbi5CRUZPUkUgOiBSYWRpb0xhYmVsUG9zaXRpb24uQUZURVI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgc2VsZWN0ZWQgY2hpbGQgcmFkaW8gYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkQnV0dG9uID0gdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkO1xuICAgICAqIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHNlbGVjdGVkQnV0dG9uO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZCA/IHNlbGVjdGVkLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmFkaW8gZ3JvdXAgYHZhbHVlYCBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgIGFuZCB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIChjaGFuZ2UpPVwiaGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1yYWRpby1ncm91cCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1yYWRpby1ncm91cCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZlcnRpY2FsIGFsaWdubWVudCB0byB0aGUgcmFkaW8gZ3JvdXAsIGlmIGBhbGlnbm1lbnRgIGlzIHNldCB0byBgdmVydGljYWxgLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGFsaWdubWVudCBpcyBob3Jpem9udGFsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBhbGlnbm1lbnQ9XCJ2ZXJ0aWNhbFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXJhZGlvLWdyb3VwLS12ZXJ0aWNhbCcpXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LXJhZGlvLWdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UmFkaW9Hcm91cFwiKVxuICAgICAqIHB1YmxpYyByYWRpb0dyb3VwOiBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlO1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCByYWRpb0FsaWdubWVudCA9IHRoaXMucmFkaW9Hcm91cC5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbGlnbm1lbnQoKTogUmFkaW9Hcm91cEFsaWdubWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBzZXQgdGhlIHJhZGlvIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbGAgKGRlZmF1bHQpIGFuZCBgUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBhbGlnbm1lbnQgPSBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYWxpZ25tZW50KHZhbHVlOiBSYWRpb0dyb3VwQWxpZ25tZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWwgPSB2YWx1ZSA9PT0gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX25hbWUgPSBgaWd4LXJhZGlvLWdyb3VwLSR7bmV4dElkKyt9YDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsUG9zaXRpb246IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyA9ICdhZnRlcic7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIGNhbiBwb3NzaWJseSBiZSBzZXQgYnkgTmdNb2RlbCBhbmQgaXQgaXMgcG9zc2libGUgdGhhdFxuICAgICAgICAvLyB0aGUgT25Jbml0IG9mIHRoZSBOZ01vZGVsIG9jY3VycyBhZnRlciB0aGUgT25Jbml0IG9mIHRoaXMgY2xhc3MuXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdFJhZGlvQnV0dG9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBcImNoZWNrZWRcIiBwcm9wZXJ0eSB2YWx1ZSBvbiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNvbnNpc3RlbnQgdG8gdGhlIGN1cnJlbnQgcmFkaW8gYnV0dG9uLlxuICAgICAqIElmIGl0IGlzLCB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGB0cnVlYCBhbmQgc2VsZWN0ZWQgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5yYWRpb0dyb3VwLndyaXRlVmFsdWUoJ3JhZGlvQnV0dG9uVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZWdpc3Rlck9uVG91Y2hlZChmbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pbml0UmFkaW9CdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0geyBuYW1lOiB0aGlzLl9uYW1lLCBsYWJlbFBvc2l0aW9uOiB0aGlzLl9sYWJlbFBvc2l0aW9uLCBkaXNhYmxlZDogdGhpcy5fZGlzYWJsZWQsIHJlcXVpcmVkOiB0aGlzLl9yZXF1aXJlZCB9O1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihidXR0b24sIHByb3BzKTtcblxuICAgICAgICAgICAgICAgIGlmIChidXR0b24udmFsdWUgPT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnV0dG9uLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldikgPT4gdGhpcy5fc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoZXYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFkaW9CdXR0b25DaGFuZ2VkKGFyZ3M6IElDaGFuZ2VSYWRpb0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gYnV0dG9uLmlkID09PSBhcmdzLnJhZGlvLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGFyZ3MucmFkaW87XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gYXJncy52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25OYW1lcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24ubmFtZSA9IHRoaXMuX25hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RSYWRpb0J1dHRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUgLSB1bmNoZWNrIGFsbCByYWRpbyBidXR0b25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gYnV0dG9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tc2VsZWN0ZWQgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25MYWJlbFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5sYWJlbFBvc2l0aW9uID0gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJhZGlvR3JvdXBEaXJlY3RpdmUsIElneFJhZGlvQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvTW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { IGX_DROPDOWN_BASE } from './drop-down.common';
|
|
2
2
|
import { Directive, Input, HostBinding, HostListener, ElementRef, Optional, Inject, Output, EventEmitter } from '@angular/core';
|
|
3
3
|
import { IgxSelectionAPIService } from '../core/selection';
|
|
4
|
-
import { showMessage } from '../core/deprecateDecorators';
|
|
5
4
|
import { IgxDropDownGroupComponent } from './drop-down-group.component';
|
|
6
5
|
let NEXT_ID = 0;
|
|
7
|
-
let warningShown = false;
|
|
8
6
|
/**
|
|
9
7
|
* An abstract class defining a drop-down item:
|
|
10
8
|
* With properties / styles for selection, highlight, height
|
|
@@ -69,8 +67,6 @@ export class IgxDropDownItemBaseDirective {
|
|
|
69
67
|
*/
|
|
70
68
|
get index() {
|
|
71
69
|
if (this._index === null) {
|
|
72
|
-
warningShown = showMessage('IgxDropDownItemBaseDirective: Automatic index is deprecated.' +
|
|
73
|
-
'Bind in the template instead using `<igx-drop-down-item [index]="i"` instead.`', warningShown);
|
|
74
70
|
return this.itemIndex;
|
|
75
71
|
}
|
|
76
72
|
return this._index;
|
|
@@ -277,4 +273,4 @@ IgxDropDownItemBaseDirective.propDecorators = {
|
|
|
277
273
|
clicked: [{ type: HostListener, args: ['click', ['$event'],] }],
|
|
278
274
|
handleMousedown: [{ type: HostListener, args: ['mousedown', ['$event'],] }]
|
|
279
275
|
};
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWl0ZW0uYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBRXpCOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyw0QkFBNEI7SUFnUnJDLFlBQ3lDLFFBQXVCLEVBQ2xELFVBQXNCLEVBQ1YsS0FBZ0MsRUFDQSxTQUFrQztRQUhuRCxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ2xELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUEyQjtRQUNBLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBblI1Rjs7Ozs7Ozs7OztXQVVHO1FBR0ksT0FBRSxHQUFHLHNCQUFzQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBK0c5Qzs7V0FFRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQTZGcEQ7Ozs7OztXQU1HO1FBR0ksU0FBSSxHQUFHLFFBQVEsQ0FBQztRQWlDdkI7O1dB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TXpDLFdBQVcsU0FBQyxtQ0FBbUM7aUNBUS9DLFdBQVcsU0FBQyxzQ0FBc0M7dUJBdUJsRCxLQUFLLFlBQ0wsV0FBVyxTQUFDLG9CQUFvQixjQUNoQyxXQUFXLFNBQUMscUNBQXFDO21CQWdCakQsS0FBSyxZQUNMLFdBQVcsU0FBQyxXQUFXO3NCQXFEdkIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs4QkFRaEMsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEcm9wRG93bkJhc2UsIElHWF9EUk9QRE9XTl9CQVNFIH0gZnJvbSAnLi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBJbmplY3QsIERvQ2hlY2ssIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgc2hvd01lc3NhZ2UgfSBmcm9tICcuLi9jb3JlL2RlcHJlY2F0ZURlY29yYXRvcnMnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vZHJvcC1kb3duLWdyb3VwLmNvbXBvbmVudCc7XG5cbmxldCBORVhUX0lEID0gMDtcbmxldCB3YXJuaW5nU2hvd24gPSBmYWxzZTtcblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBjbGFzcyBkZWZpbmluZyBhIGRyb3AtZG93biBpdGVtOlxuICogV2l0aCBwcm9wZXJ0aWVzIC8gc3R5bGVzIGZvciBzZWxlY3Rpb24sIGhpZ2hsaWdodCwgaGVpZ2h0XG4gKiBCaW5kYWJsZSBwcm9wZXJ0eSBmb3IgcGFzc2luZyBkYXRhIChgdmFsdWU6IGFueWApXG4gKiBQYXJlbnQgY29tcG9uZW50IChoYXMgdG8gYmUgdXNlZCB1bmRlciBhIHBhcmVudCB3aXRoIHR5cGUgYElEcm9wRG93bkJhc2VgKVxuICogTWV0aG9kIGZvciBoYW5kbGluZyBjbGljayBvbiBIb3N0KClcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RHJvcERvd25JdGVtQmFzZV0nXG59KVxuZXhwb3J0IGNsYXNzIElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGl0ZW0uXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZHJvcC1kb3duLWl0ZW0gW2lkXSA9ICdpZ3gtZHJvcC1kb3duLWl0ZW0tMCc+PC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpdGVtSWQgPSAgdGhpcy5pdGVtLmlkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFNlbGVjdEl0ZW1Db21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1kcm9wLWRvd24taXRlbS0ke05FWFRfSUQrK31gO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXRlbUlEKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBpbmRleCBvZiB0aGUgZHJvcGRvd24gaXRlbS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIGRhdGEgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGRyb3Bkb3duIGl0ZW1cbiAgICAgKiBsZXQgc2VsZWN0ZWRJdGVtSW5kZXggPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbS5pbmRleFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5faW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHdhcm5pbmdTaG93biA9IHNob3dNZXNzYWdlKFxuICAgICAgICAgICAgICAgICdJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlOiBBdXRvbWF0aWMgaW5kZXggaXMgZGVwcmVjYXRlZC4nICtcbiAgICAgICAgICAgICAgICAnQmluZCBpbiB0aGUgdGVtcGxhdGUgaW5zdGVhZCB1c2luZyBgPGlneC1kcm9wLWRvd24taXRlbSBbaW5kZXhdPVwiaVwiYCBpbnN0ZWFkLmAnLFxuICAgICAgICAgICAgICAgIHdhcm5pbmdTaG93bik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaW5kZXgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHZhbHVlIG9mIHRoZSBpdGVtIGlmIHRoZSBpdGVtIGlzIGRhdGFib3VuZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHVzYWdlIGluIElneERyb3BEb3duSXRlbUNvbXBvbmVudFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteVNlbGVjdGVkSXRlbVZhbHVlID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW0udmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBzZXRcbiAgICAgKiBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiBteVNlbGVjdGVkSXRlbS52YWx1ZSA9IHsgaWQ6IDEyMywgbmFtZTogJ0V4YW1wbGUgTmFtZScgfVxuICAgICAqXG4gICAgICogLy8gdXNhZ2UgaW4gSWd4Q29tYm9JdGVtQ29tcG9uZW50XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9JdGVtVmFsdWUgPSB0aGlzLmNvbWJvLml0ZW1zWzBdLnZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbScpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0hlYWRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tY29zeScpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGVDb3N5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knICYmICF0aGlzLmlzSGVhZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1jb21wYWN0JylcbiAgICBwdWJsaWMgZ2V0IGl0ZW1TdHlsZUNvbXBhY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCcgJiYgIXRoaXMuaXNIZWFkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIGlmIHRoZSBpdGVtIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lIGluIHRoZSBkcm9wZG93blxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtU2VsZWN0ZWQgPSBteVNlbGVjdGVkSXRlbS5zZWxlY3RlZDsgLy8gdHJ1ZVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmdcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kcm9wLWRvd24taXRlbSBbKHNlbGVjdGVkKV09J21vZGVsLmlzU2VsZWN0ZWQnPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIGlmIHRoZSBnaXZlbiBpdGVtIGlzIGZvY3VzZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBteVNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAqICBsZXQgaXNNeUl0ZW1Gb2N1c2VkID0gbXlTZWxlY3RlZEl0ZW0uZm9jdXNlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLWZvY3VzZWQnKVxuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlICYmIHRoaXMuX2ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgZm9jdXNlZD17eyFpdGVtLmZvY3VzZWR9fT5cbiAgICAgKiAgICAgIDxkaXY+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZvY3VzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyBpZiB0aGUgZ2l2ZW4gaXRlbSBpcyBoZWFkZXJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIC8vIGdldFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtSGVhZGVyID0gbXlTZWxlY3RlZEl0ZW0uaXNIZWFkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDwhLS1zZXQtLT5cbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAqICAgICAgPGRpdiAqbmdJZj1cIml0ZW1zLmluZGV4T2YoaXRlbSkgPT09IDU7IHRoZW4gaXRlbS5pc0hlYWRlciA9IHRydWVcIj5cbiAgICAgKiAgICAgICAgICB7e2l0ZW0uZmllbGR9fVxuICAgICAqICAgICAgPC9kaXY+XG4gICAgICogIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXInKVxuICAgIHB1YmxpYyBpc0hlYWRlcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXItLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NDb3N5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlciAmJiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29zeSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2hlYWRlci0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc0NvbXBhY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSGVhZGVyICYmIHRoaXMuZHJvcERvd24uZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgaWYgdGhlIGdpdmVuIGl0ZW0gaXMgZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgLy8gZ2V0XG4gICAgICogIGxldCBteVNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAqICBsZXQgbXlJdGVtSXNEaXNhYmxlZCA9IG15U2VsZWN0ZWRJdGVtLmRpc2FibGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgZGlzYWJsZWQ9e3shaXRlbS5kaXNhYmxlZH19PlxuICAgICAqICAgICAgPGRpdj5cbiAgICAgKiAgICAgICAgICB7e2l0ZW0uZmllbGR9fVxuICAgICAqICAgICAgPC9kaXY+XG4gICAgICogIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqICoqTk9URToqKiBEcm9wLWRvd24gaXRlbXMgaW5zaWRlIG9mIGEgZGlzYWJsZWQgYElneERyb3BEb3duR3JvdXBgIHdpbGwgYWx3YXlzIGNvdW50IGFzIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmRpc2FibGVkIHx8IHRoaXMuX2Rpc2FibGVkIDogdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgaXRlbS4gRGVmYXVsdCBpcyAnb3B0aW9uJy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSBbcm9sZV09XCJjdXN0b21Sb2xlXCI+PC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgaXRlbSBpbmRleFxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1JbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5pdGVtcy5pbmRleE9mKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaXRlbSBlbGVtZW50IGhlaWdodFxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaXRlbSBodG1sIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50KCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaGFzSW5kZXgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleCAhPT0gbnVsbCAmJiB0aGlzLl9pbmRleCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2ZvY3VzZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pbmRleCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoSUdYX0RST1BET1dOX0JBU0UpIHByb3RlY3RlZCBkcm9wRG93bjogSURyb3BEb3duQmFzZSxcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBncm91cDogSWd4RHJvcERvd25Hcm91cENvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlKSBwcm90ZWN0ZWQgc2VsZWN0aW9uPzogSWd4U2VsZWN0aW9uQVBJU2VydmljZVxuICAgICkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBjbGlja2VkKGV2ZW50KTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgaGFuZGxlTW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kcm9wRG93bi5hbGxvd0l0ZW1zRm9jdXMpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyb3BEb3duU2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wRG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICBpZiAoIWRyb3BEb3duU2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5zZWxlY3RJdGVtKHRoaXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0luZGV4XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9pbmRleCAhPT0gZHJvcERvd25TZWxlY3RlZEl0ZW0uaW5kZXggfHwgdGhpcy52YWx1ZSAhPT0gZHJvcERvd25TZWxlY3RlZEl0ZW0udmFsdWUgOlxuICAgICAgICAgICAgICAgIHRoaXMgIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5zZWxlY3RJdGVtKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaXRlbXMgaXMgbm90IGEgaGVhZGVyIG9yIGRpc2FibGVkICAqL1xuICAgIHByb3RlY3RlZCBnZXQgaXNTZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gICEodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzSGVhZGVyKTtcbiAgICB9XG5cbiAgICAvKiogSWYgYGFsbG93SXRlbXNGb2N1c2AgaXMgZW5hYmxlZCwga2VlcCB0aGUgYnJvd3NlciBmb2N1cyBvbiB0aGUgYWN0aXZlIGl0ZW0gKi9cbiAgICBwcm90ZWN0ZWQgZW5zdXJlSXRlbUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wRG93bi5hbGxvd0l0ZW1zRm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5kcm9wRG93bi5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmZvY3VzZWQpO1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvY3VzZWRJdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWl0ZW0uYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBNFFyQyxZQUN5QyxRQUF1QixFQUNsRCxVQUFzQixFQUNWLEtBQWdDLEVBQ0EsU0FBa0M7UUFIbkQsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQUNsRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ1YsVUFBSyxHQUFMLEtBQUssQ0FBMkI7UUFDQSxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQS9RNUY7Ozs7Ozs7Ozs7V0FVRztRQUdJLE9BQUUsR0FBRyxzQkFBc0IsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQTJHOUM7O1dBRUc7UUFFSSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUE2RnBEOzs7Ozs7V0FNRztRQUdJLFNBQUksR0FBRyxRQUFRLENBQUM7UUFpQ3ZCOztXQUVHO1FBQ08sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxJQUFJ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LFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7OEJBUWhDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRHJvcERvd25CYXNlLCBJR1hfRFJPUERPV05fQkFTRSB9IGZyb20gJy4vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBPcHRpb25hbCwgSW5qZWN0LCBEb0NoZWNrLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4U2VsZWN0aW9uQVBJU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VsZWN0aW9uJztcbmltcG9ydCB7IElneERyb3BEb3duR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2Ryb3AtZG93bi1ncm91cC5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MgZGVmaW5pbmcgYSBkcm9wLWRvd24gaXRlbTpcbiAqIFdpdGggcHJvcGVydGllcyAvIHN0eWxlcyBmb3Igc2VsZWN0aW9uLCBoaWdobGlnaHQsIGhlaWdodFxuICogQmluZGFibGUgcHJvcGVydHkgZm9yIHBhc3NpbmcgZGF0YSAoYHZhbHVlOiBhbnlgKVxuICogUGFyZW50IGNvbXBvbmVudCAoaGFzIHRvIGJlIHVzZWQgdW5kZXIgYSBwYXJlbnQgd2l0aCB0eXBlIGBJRHJvcERvd25CYXNlYClcbiAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgY2xpY2sgb24gSG9zdCgpXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneERyb3BEb3duSXRlbUJhc2VdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjayB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBpdGVtLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRyb3AtZG93bi1pdGVtIFtpZF0gPSAnaWd4LWRyb3AtZG93bi1pdGVtLTAnPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXRlbUlkID0gIHRoaXMuaXRlbS5pZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtZHJvcC1kb3duLWl0ZW0tJHtORVhUX0lEKyt9YDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1JRCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgaW5kZXggb2YgdGhlIGRyb3Bkb3duIGl0ZW0uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBkYXRhIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBkcm9wZG93biBpdGVtXG4gICAgICogbGV0IHNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW0uaW5kZXhcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX2luZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaW5kZXgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHZhbHVlIG9mIHRoZSBpdGVtIGlmIHRoZSBpdGVtIGlzIGRhdGFib3VuZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHVzYWdlIGluIElneERyb3BEb3duSXRlbUNvbXBvbmVudFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteVNlbGVjdGVkSXRlbVZhbHVlID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW0udmFsdWU7XG4gICAgICpcbiAgICAgKiAvLyBzZXRcbiAgICAgKiBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiBteVNlbGVjdGVkSXRlbS52YWx1ZSA9IHsgaWQ6IDEyMywgbmFtZTogJ0V4YW1wbGUgTmFtZScgfVxuICAgICAqXG4gICAgICogLy8gdXNhZ2UgaW4gSWd4Q29tYm9JdGVtQ29tcG9uZW50XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9JdGVtVmFsdWUgPSB0aGlzLmNvbWJvLml0ZW1zWzBdLnZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbScpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0hlYWRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tY29zeScpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGVDb3N5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knICYmICF0aGlzLmlzSGVhZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1jb21wYWN0JylcbiAgICBwdWJsaWMgZ2V0IGl0ZW1TdHlsZUNvbXBhY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCcgJiYgIXRoaXMuaXNIZWFkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIGlmIHRoZSBpdGVtIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lIGluIHRoZSBkcm9wZG93blxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtU2VsZWN0ZWQgPSBteVNlbGVjdGVkSXRlbS5zZWxlY3RlZDsgLy8gdHJ1ZVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmdcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kcm9wLWRvd24taXRlbSBbKHNlbGVjdGVkKV09J21vZGVsLmlzU2VsZWN0ZWQnPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIGlmIHRoZSBnaXZlbiBpdGVtIGlzIGZvY3VzZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBteVNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAqICBsZXQgaXNNeUl0ZW1Gb2N1c2VkID0gbXlTZWxlY3RlZEl0ZW0uZm9jdXNlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLWZvY3VzZWQnKVxuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlICYmIHRoaXMuX2ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgZm9jdXNlZD17eyFpdGVtLmZvY3VzZWR9fT5cbiAgICAgKiAgICAgIDxkaXY+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZvY3VzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyBpZiB0aGUgZ2l2ZW4gaXRlbSBpcyBoZWFkZXJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIC8vIGdldFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtSGVhZGVyID0gbXlTZWxlY3RlZEl0ZW0uaXNIZWFkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDwhLS1zZXQtLT5cbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAqICAgICAgPGRpdiAqbmdJZj1cIml0ZW1zLmluZGV4T2YoaXRlbSkgPT09IDU7IHRoZW4gaXRlbS5pc0hlYWRlciA9IHRydWVcIj5cbiAgICAgKiAgICAgICAgICB7e2l0ZW0uZmllbGR9fVxuICAgICAqICAgICAgPC9kaXY+XG4gICAgICogIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXInKVxuICAgIHB1YmxpYyBpc0hlYWRlcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXItLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NDb3N5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlciAmJiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29zeSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2hlYWRlci0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc0NvbXBhY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSGVhZGVyICYmIHRoaXMuZHJvcERvd24uZGlzcGxheURlbnNpdHkgPT09ICdjb21wYWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgaWYgdGhlIGdpdmVuIGl0ZW0gaXMgZGlzYWJsZWRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgLy8gZ2V0XG4gICAgICogIGxldCBteVNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAqICBsZXQgbXlJdGVtSXNEaXNhYmxlZCA9IG15U2VsZWN0ZWRJdGVtLmRpc2FibGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgZGlzYWJsZWQ9e3shaXRlbS5kaXNhYmxlZH19PlxuICAgICAqICAgICAgPGRpdj5cbiAgICAgKiAgICAgICAgICB7e2l0ZW0uZmllbGR9fVxuICAgICAqICAgICAgPC9kaXY+XG4gICAgICogIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqICoqTk9URToqKiBEcm9wLWRvd24gaXRlbXMgaW5zaWRlIG9mIGEgZGlzYWJsZWQgYElneERyb3BEb3duR3JvdXBgIHdpbGwgYWx3YXlzIGNvdW50IGFzIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmRpc2FibGVkIHx8IHRoaXMuX2Rpc2FibGVkIDogdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgaXRlbS4gRGVmYXVsdCBpcyAnb3B0aW9uJy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSBbcm9sZV09XCJjdXN0b21Sb2xlXCI+PC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgaXRlbSBpbmRleFxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1JbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5pdGVtcy5pbmRleE9mKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaXRlbSBlbGVtZW50IGhlaWdodFxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnRIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaXRlbSBodG1sIGVsZW1lbnRcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50KCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaGFzSW5kZXgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleCAhPT0gbnVsbCAmJiB0aGlzLl9pbmRleCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2ZvY3VzZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX3NlbGVjdGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pbmRleCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoSUdYX0RST1BET1dOX0JBU0UpIHByb3RlY3RlZCBkcm9wRG93bjogSURyb3BEb3duQmFzZSxcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBncm91cDogSWd4RHJvcERvd25Hcm91cENvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlKSBwcm90ZWN0ZWQgc2VsZWN0aW9uPzogSWd4U2VsZWN0aW9uQVBJU2VydmljZVxuICAgICkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBjbGlja2VkKGV2ZW50KTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgaGFuZGxlTW91c2Vkb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kcm9wRG93bi5hbGxvd0l0ZW1zRm9jdXMpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyb3BEb3duU2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wRG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICBpZiAoIWRyb3BEb3duU2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5zZWxlY3RJdGVtKHRoaXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0luZGV4XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9pbmRleCAhPT0gZHJvcERvd25TZWxlY3RlZEl0ZW0uaW5kZXggfHwgdGhpcy52YWx1ZSAhPT0gZHJvcERvd25TZWxlY3RlZEl0ZW0udmFsdWUgOlxuICAgICAgICAgICAgICAgIHRoaXMgIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5zZWxlY3RJdGVtKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaXRlbXMgaXMgbm90IGEgaGVhZGVyIG9yIGRpc2FibGVkICAqL1xuICAgIHByb3RlY3RlZCBnZXQgaXNTZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gICEodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzSGVhZGVyKTtcbiAgICB9XG5cbiAgICAvKiogSWYgYGFsbG93SXRlbXNGb2N1c2AgaXMgZW5hYmxlZCwga2VlcCB0aGUgYnJvd3NlciBmb2N1cyBvbiB0aGUgYWN0aXZlIGl0ZW0gKi9cbiAgICBwcm90ZWN0ZWQgZW5zdXJlSXRlbUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wRG93bi5hbGxvd0l0ZW1zRm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5kcm9wRG93bi5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmZvY3VzZWQpO1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvY3VzZWRJdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -25,7 +25,7 @@ export class GridBaseAPIService {
|
|
|
25
25
|
}
|
|
26
26
|
if (!data) {
|
|
27
27
|
if (grid.transactions.enabled) {
|
|
28
|
-
data = DataUtil.mergeTransactions(cloneArray(grid.data), grid.transactions.getAggregatedChanges(true), grid.primaryKey);
|
|
28
|
+
data = DataUtil.mergeTransactions(cloneArray(grid.data), grid.transactions.getAggregatedChanges(true), grid.primaryKey, grid.dataCloneStrategy);
|
|
29
29
|
const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);
|
|
30
30
|
deletedRows.forEach(rowID => {
|
|
31
31
|
const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;
|
|
@@ -444,4 +444,4 @@ GridBaseAPIService.ctorParameters = () => [
|
|
|
444
444
|
{ type: IgxGridCRUDService },
|
|
445
445
|
{ type: IgxColumnMovingService }
|
|
446
446
|
];
|
|
447
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQzVDLElBQUksQ0FBQyxVQUFVLENBQ2xCLENBQUM7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEgsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNoRixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDekI7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNwQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU0scUJBQXFCLENBQUMsS0FBVSxFQUFFLGNBQXNCO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUE0QixDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksR0FBRyxjQUFjLGFBQWQsY0FBYyxjQUFkLGNBQWMsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSztZQUM1RyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQWdCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hDLElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZGO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQztTQUMzRTtJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsY0FBc0I7UUFDNUQsY0FBYyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNsRCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDN0MsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDakU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLFdBQWdCLEVBQUUsS0FBYTtRQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDbEIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7U0FDaEU7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUF5QjtRQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFDO1lBQ3pDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1NBQ25FO0lBRUwsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7UUFDbEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDbEIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFhO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0csSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMzRDtZQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0Q7U0FDSjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7WUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMzQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDekMsVUFBVSxDQUFDLEdBQWUsRUFBRSxLQUFVLEVBQUUsS0FBYTtRQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsRCwyQkFBMkI7UUFDM0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxhQUFhLEVBQUU7WUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0UsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsOERBQThEO1FBQzlELEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2YsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sSUFBSSxDQUFDLFVBQThCO1FBQ3RDLElBQUksVUFBVSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6RDtRQUNELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUVNLGFBQWEsQ0FBQyxXQUFpQztRQUNsRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTlELEtBQUssTUFBTSxJQUFJLElBQUksV0FBVyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6RDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDO0lBQ2hELENBQUM7SUFFTSxVQUFVLENBQUMsU0FBaUI7UUFDL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ1osWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUM7U0FDL0M7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQThCO0lBQ25ELENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxNQUFrQjtRQUMvQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDO0lBQ3pELENBQUM7SUFFTSxRQUFRO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRU0sWUFBWSxDQUFDLE9BQVksRUFBRSxRQUFTO1FBQ3ZDLHNIQUFzSDtRQUN0SCxpREFBaUQ7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzRSxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNyRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBVSxFQUFFLEtBQWE7UUFDOUMsNkNBQTZDO1FBQzdDLHdFQUF3RTtRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtnQkFDM0IsTUFBTSxXQUFXLEdBQWdCLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7YUFBTTtZQUNILE1BQU0sS0FBSyxHQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoSDtJQUNMLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBVTtRQUMzQixJQUFJLEtBQWEsQ0FBQztRQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsd0RBQXdEO1lBQ3hELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtRQUNELE1BQU0sS0FBSyxHQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUUvRSxpR0FBaUc7UUFDakcsNEZBQTRGO1FBQzVGLG9EQUFvRDtRQUNwRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSx1QkFBdUIsRUFBRTtZQUN6Qyx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILE9BQU87U0FDVjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQiw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQiw2REFBNkQ7UUFDN0QsZ0dBQWdHO1FBQ2hHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN6SCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBTztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzFFLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEVBQUU7WUFDUCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNoRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxNQUFXO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDeEIsT0FBTyxRQUFRLENBQUM7U0FDbkI7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVNLHVCQUF1QixDQUFDLEtBQVUsRUFBRSxRQUFpQixFQUFFLEtBQWE7UUFDdkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRTVDLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3JELE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUF3QjtZQUM5QixLQUFLO1lBQ0wsUUFBUTtZQUNSLEtBQUs7WUFDTCxNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFLO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxtQkFBbUIsQ0FBQyxFQUFtQixFQUFFLGNBQXNCO1FBQ2xFLGNBQWMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRU0sNEJBQTRCLENBQUMsS0FBSyxFQUFFLFFBQVE7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDO0lBQzdELENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxnQkFBbUMsRUFBRSxVQUE4QjtRQUNqRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1lBQzFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDN0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87U0FDVjtRQUVEOzs7O1dBSUc7UUFDSCxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25ELGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztTQUNKO1FBQ0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEYsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLHFGQUFxRjtnQkFDckYsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDM0IsNkZBQTZGO2dCQUM3RixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCwrREFBK0Q7Z0JBQy9ELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3JDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsVUFBVTtJQUM1QyxDQUFDO0lBRU0sdUJBQXVCLENBQUMsZUFBMEM7UUFDckUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9CLElBQUksZUFBZSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLG9CQUF5QixFQUFFLGVBQW9CLEVBQUUsV0FBaUM7UUFDaEgsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUMzQixNQUFNLFdBQVcsR0FBZ0I7Z0JBQzdCLEVBQUUsRUFBRSxLQUFLO2dCQUNULElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTtnQkFDNUIsUUFBUSxFQUFFLFdBQVc7YUFDeEIsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN2RDthQUFNO1lBQ0gsWUFBWSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUdTLG1CQUFtQixDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsS0FBYTtRQUMvRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxTQUFpQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDOzs7WUF4ZUosVUFBVTs7O1lBVE8sa0JBQWtCO1lBSTNCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJldmVyc2VNYXBwZXIsIG1lcmdlT2JqZWN0cyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRGF0YVV0aWwsIEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uLCBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUsIFN0YXRlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSWd4Q2VsbCwgSWd4R3JpZENSVURTZXJ2aWNlLCBJZ3hFZGl0Um93IH0gZnJvbSAnLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4vY29tbW9uL2NvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyaWRFZGl0RXZlbnRBcmdzLCBJUm93VG9nZ2xlRXZlbnRBcmdzIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneENvbHVtbk1vdmluZ1NlcnZpY2UgfSBmcm9tICcuL21vdmluZy9tb3Zpbmcuc2VydmljZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZEJhc2VBUElTZXJ2aWNlPFQgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG5cblxuICAgIHB1YmxpYyBncmlkOiBUO1xuICAgIHByb3RlY3RlZCBkZXN0cm95TWFwOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGJvb2xlYW4+PiA9IG5ldyBNYXA8c3RyaW5nLCBTdWJqZWN0PGJvb2xlYW4+PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjcnVkU2VydmljZTogSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY21zOiBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlKSB7IH1cblxuICAgIHB1YmxpYyBnZXRfY29sdW1uX2J5X25hbWUobmFtZTogc3RyaW5nKTogQ29sdW1uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuY29sdW1uTGlzdC5maW5kKChjb2w6IENvbHVtblR5cGUpID0+IGNvbC5maWVsZCA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9zdW1tYXJ5X2RhdGEoKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgICAgIGlmIChkYXRhICYmIGdyaWQuaGFzUGlubmVkUmVjb3Jkcykge1xuICAgICAgICAgICAgZGF0YSA9IGdyaWQuX2ZpbHRlcmVkVW5waW5uZWREYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwubWVyZ2VUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGNsb25lQXJyYXkoZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQucHJpbWFyeUtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlZFJvd3MgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRUcmFuc2FjdGlvbkxvZygpLmZpbHRlcih0ID0+IHQudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURSkubWFwKHQgPT4gdC5pZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlZFJvd3MuZm9yRWFjaChyb3dJRCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0gZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YS5tYXAocmVjID0+IHJlY1tncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGVtcERhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ3JpZC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um93RGF0YShyb3dJRDogYW55KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldF9hbGxfZGF0YSh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lELCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIGRhdGFbaW5kZXhdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcm93X2luZGV4X2luX2RhdGEocm93SUQ6IGFueSwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4R3JpZEJhc2VEaXJlY3RpdmU7XG4gICAgICAgIGlmICghZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhQ29sbGVjdGlvbiA/PyB0aGlzLmdldF9hbGxfZGF0YShncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgcmV0dXJuIGdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZEluZGV4KHJlY29yZCA9PiByZWNvcmQucmVjb3JkUmVmID8gcmVjb3JkLnJlY29yZFJlZltncmlkLnByaW1hcnlLZXldID09PSByb3dJRFxuICAgICAgICAgICAgOiByZWNvcmRbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogZGF0YS5pbmRleE9mKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9rZXkocm93U2VsZWN0b3I6IGFueSk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIGlmIChwcmltYXJ5S2V5ICE9PSB1bmRlZmluZWQgJiYgcHJpbWFyeUtleSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhW3ByaW1hcnlLZXldID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFSb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LnJvd0RhdGEgPT09IHJvd1NlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcm93X2J5X2luZGV4KHJvd0luZGV4OiBudW1iZXIpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0xpc3QuZmluZCgocm93KSA9PiByb3cuaW5kZXggPT09IHJvd0luZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSByb3dJRCBvZiB0aGUgcmVjb3JkIGF0IHRoZSBzcGVjaWZpZWQgZGF0YSB2aWV3IGluZGV4XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pZF9ieV9pbmRleChpbmRleDogbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogYW55IHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBkYXRhQ29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYyA9IGRhdGFDb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByZWM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X2tleShyb3dTZWxlY3RvcjogYW55LCBmaWVsZDogc3RyaW5nKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yKTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JRDogbnVtYmVyIHwgc3RyaW5nKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfaW5kZXgocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBoYXNDZWxscyA9IHJvdyAmJiByb3cuY2VsbHM7XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0NlbGxzICYmIHR5cGVvZiBjb2x1bW5JRCA9PT0gJ3N0cmluZycpe1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5maWVsZCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfdmlzaWJsZV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogSWd4R3JpZENlbGxDb21wb25lbnQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldF9yb3dfYnlfaW5kZXgocm93SW5kZXgpO1xuICAgICAgICBpZiAocm93ICYmIHJvdy5jZWxscykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLnZpc2libGVDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZV9jZWxsKGNlbGw6IElneENlbGwpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzID0gY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0Um93RGF0YShjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMuZ3JpZCwgY2VsbC5pZC5yb3dJRCwgZGF0YSwgY2VsbC5yb3dEYXRhLCByZXZlcnNlTWFwcGVyKGNlbGwuY29sdW1uLmZpZWxkLCBhcmdzLm5ld1ZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucHJpbWFyeUtleSA9PT0gY2VsbC5jb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKGNlbGwuaWQucm93SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3coY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChhcmdzLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8ICF0aGlzLmNydWRTZXJ2aWNlLnJvdyB8fFxuICAgICAgICAgICAgdGhpcy5jcnVkU2VydmljZS5yb3cuaWQgIT09IGNlbGwuaWQucm93SUQgfHwgIXRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLmNsZWFyU3VtbWFyeUNhY2hlKGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBDUlVEIHJlZmFjdG9yIHRvIG5vdCBlbWl0IGVkaXRpbmcgZXZ0cy5cbiAgICBwdWJsaWMgdXBkYXRlX3Jvdyhyb3c6IElneEVkaXRSb3csIHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChyb3cuaWQpO1xuICAgICAgICBjb25zdCByb3dJbkVkaXRNb2RlID0gdGhpcy5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldF9hbGxfZGF0YShncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3cuaWQsIGRhdGEpO1xuICAgICAgICBjb25zdCBoYXNTdW1tYXJpemVkID0gZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS51cGRhdGVSb3dFZGl0RGF0YShyb3csIHZhbHVlKTtcblxuICAgICAgICBjb25zdCBhcmdzID0gcm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuXG4gICAgICAgIC8vIElmIG5vIHZhbGlkIHJvdyBpcyBmb3VuZFxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNDaGFuZ2VzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUoYXJncy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhcmdzLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNTdW1tYXJpemVkKSB7XG4gICAgICAgICAgICBncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhhcmdzLnJvd0lEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YShncmlkLCByb3cuaWQsIGRhdGFbaW5kZXhdLCBhcmdzLm9sZFZhbHVlLCBhcmdzLm5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3QgbmV3SWQgPSBncmlkLnByaW1hcnlLZXkgPyBhcmdzLm5ld1ZhbHVlW2dyaWQucHJpbWFyeUtleV0gOiBhcmdzLm5ld1ZhbHVlO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvdyhyb3cuaWQpO1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQobmV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBzZWxlY3Rpb24gaXMgaGFuZGxlZCBwcmlvciB0byB1cGRhdGluZyB0aGUgcm93LmlkXG4gICAgICAgIHJvdy5pZCA9IG5ld0lkO1xuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMobmV3SWQpO1xuICAgICAgICB9XG4gICAgICAgIGdyaWQucGlwZVRyaWdnZXIrKztcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydChleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlX2dyb3VwaW5nX2V4cHJlc3Npb24oZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZV0sIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc29ydGluZ1N0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0X211bHRpcGxlKGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWFjaCBvZiBleHByZXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKGVhY2guZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGVhY2guZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZV0sIGVhY2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJfc29ydChmaWVsZE5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNvcnRpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBmaWVsZE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc29ydGluZ1N0YXRlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc29ydGluZ1N0YXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX2dyb3VwYnkoX25hbWU/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KSB7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZF9hcHBseV9udW1iZXJfc3R5bGUoY29sdW1uOiBDb2x1bW5UeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9kYXRhKCk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IGdyaWQuZGF0YSA/IGdyaWQuZGF0YSA6IFtdO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2FsbF9kYXRhKGluY2x1ZGVUcmFuc2FjdGlvbnMgPSBmYWxzZSk6IGFueVtdIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgbGV0IGRhdGEgPSBncmlkICYmIGdyaWQuZGF0YSA/IGdyaWQuZGF0YSA6IFtdO1xuICAgICAgICBkYXRhID0gaW5jbHVkZVRyYW5zYWN0aW9ucyA/IGdyaWQuZGF0YVdpdGhBZGRlZEluVHJhbnNhY3Rpb25Sb3dzIDogZGF0YTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9maWx0ZXJlZF9kYXRhKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvd1RvRGF0YShyb3dEYXRhOiBhbnksIHBhcmVudElEPykge1xuICAgICAgICAvLyBBZGQgcm93IGdvZXMgdG8gdHJhbnNhY3Rpb25zIGFuZCBpZiByb3dFZGl0YWJsZSBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZCwgYWRkZWQgcm93cyB3aWxsIGdvIHRvIHBlbmRpbmcgdHJhbnNhY3Rpb25zXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcm93IGluIGVkaXQgLSA+IGNvbW1pdCBhbmQgY2xvc2VcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcblxuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IGdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiB0cmFuc2FjdGlvbklkLCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQURELCBuZXdWYWx1ZTogcm93RGF0YSB9O1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuZGF0YS5wdXNoKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lEOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIGEgcm93IChpbmRleCAhPT0gMCkgZGVsZXRlIGl0XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGNoYW5nZSBpdCdzIHN0YXRlIHRvIERFTEVURVxuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IHsgaWQ6IHJvd0lELCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuREVMRVRFLCBuZXdWYWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgZ3JpZC5kYXRhW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyaWQuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFN0YXRlID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUocm93SUQpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHsgaWQ6IHJvd0lELCB0eXBlOiBUcmFuc2FjdGlvblR5cGUuREVMRVRFLCBuZXdWYWx1ZTogbnVsbCB9LCBzdGF0ZSAmJiBzdGF0ZS5yZWNvcmRSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVJvd0J5SWQocm93SWQ6IGFueSk6IGFueSB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyO1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoKTtcbiAgICAgICAgaWYgKGdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5tYXAoKHJlY29yZCkgPT4gcmVjb3JkW2dyaWQucHJpbWFyeUtleV0pLmluZGV4T2Yocm93SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSBkYXRhLmluZGV4T2Yocm93SWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lkKTtcbiAgICAgICAgY29uc3QgaGFzUm93SW5Ob25EZWxldGVkU3RhdGUgPSBzdGF0ZSAmJiBzdGF0ZS50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuREVMRVRFO1xuXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IC0xKSBhbmQgdGhlIHdlIGhhdmUgY2VsbCBpbiBlZGl0IG1vZGUgb24gc2FtZSByb3cgZXhpdCBlZGl0IG1vZGVcbiAgICAgICAgLy8gIGlmIHRoZXJlIGlzIG5vIHJvdyAoaW5kZXggPT09IC0xKSwgYnV0IHRoZXJlIGlzIGEgcm93IGluIEFERCBvciBVUERBVEUgc3RhdGUgZG8gYXMgYWJvdmVcbiAgICAgICAgLy8gIE90aGVyd2lzZSBqdXN0IGV4aXQgLSB0aGVyZSBpcyBub3RoaW5nIHRvIGRlbGV0ZVxuICAgICAgICBpZiAoaW5kZXggIT09IC0xIHx8IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlKSB7XG4gICAgICAgICAgICAvLyBBbHdheXMgZXhpdCBlZGl0IHdoZW4gcm93IGlzIGRlbGV0ZWRcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZW5kRWRpdCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAvLyAvLyAgVE9ETzogc2hvdWxkIHdlIGVtaXQgdGhpcyB3aGVuIGNhc2NhZGVPbkRlbGV0ZSBpcyB0cnVlIGZvciBlYWNoIHJvdz8hPyFcbiAgICAgICAgZ3JpZC5yb3dEZWxldGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGRhdGFbaW5kZXhdIH0pO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlUm93RnJvbURhdGEocm93SWQsIGluZGV4KTtcblxuICAgICAgICBpZiAoZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93SWQpKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGdyaWQucGlwZVRyaWdnZXIrKztcbiAgICAgICAgZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgIC8vIERhdGEgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkIGlmIHRyYW5zYWN0aW9ucyBhcmUgaW4gcGxhY2VcbiAgICAgICAgLy8gSWYgbm8gdHJhbnNhY3Rpb25zLCBgZGF0YWAgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBnZXR0ZXIsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHN0YWxlXG4gICAgICAgIGNvbnN0IGRhdGFBZnRlckRlbGV0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIGdyaWQucmVmcmVzaFNlYXJjaCgpO1xuICAgICAgICBpZiAoZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAlIGdyaWQucGVyUGFnZSA9PT0gMCAmJiBkYXRhQWZ0ZXJEZWxldGUubGVuZ3RoIC8gZ3JpZC5wZXJQYWdlIC0gMSA8IGdyaWQucGFnZSAmJiBncmlkLnBhZ2UgIT09IDApIHtcbiAgICAgICAgICAgIGdyaWQucGFnZS0tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pZChyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24ocm93SUQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUocmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3Qgc3RhdGVzID0gZ3JpZC5leHBhbnNpb25TdGF0ZXM7XG4gICAgICAgIGNvbnN0IHJvd0lEID0gZ3JpZC5wcmltYXJ5S2V5ID8gcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gOiByZWNvcmQ7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gc3RhdGVzLmdldChyb3dJRCk7XG5cbiAgICAgICAgaWYgKGV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBhbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBncmlkLmdldERlZmF1bHRFeHBhbmRTdGF0ZShyZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvd0lEOiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkU3RhdGVzID0gZ3JpZC5leHBhbnNpb25TdGF0ZXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFsbG93X2V4cGFuc2lvbl9zdGF0ZV9jaGFuZ2Uocm93SUQsIGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnczogSVJvd1RvZ2dsZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lELFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICBncmlkLnJvd1RvZ2dsZS5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV4cGFuZGVkU3RhdGVzLnNldChyb3dJRCwgZXhwYW5kZWQpO1xuICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcyA9IGV4cGFuZGVkU3RhdGVzO1xuICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfcmVjX2J5X2lkKHJvd0lEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHRoaXMuZ2V0Um93RGF0YShyb3dJRCkgOiByb3dJRDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgcmVjb3JkIGluIHRoZSBkYXRhIHZpZXcgYnkgcGsgb3IgLTEgaWYgbm90IGZvdW5kIG9yIHByaW1hcnlLZXkgaXMgbm90IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwa1xuICAgICAqIEBwYXJhbSBkYXRhQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRfcmVjX2luZGV4X2J5X2lkKHBrOiBzdHJpbmcgfCBudW1iZXIsIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBkYXRhQ29sbGVjdGlvbiA9IGRhdGFDb2xsZWN0aW9uIHx8IHRoaXMuZ3JpZC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBkYXRhQ29sbGVjdGlvbi5maW5kSW5kZXgocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHBrKSA6IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBhbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICE9PSBleHBhbmRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oc3RhdGVDb2xsZWN0aW9uczogQXJyYXk8QXJyYXk8YW55Pj4sIGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5kaXIgPT09IFNvcnRpbmdEaXJlY3Rpb24uTm9uZSkge1xuICAgICAgICAgICAgc3RhdGVDb2xsZWN0aW9ucy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zcGxpY2Uoc3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpLCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzdGF0ZXMgaW4gZWFjaCBjb2xsZWN0aW9uIHdpdGggc2FtZSBmaWVsZHMgcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgICogSWYgdGhlIGRpZmZlcmVudCBzdGF0ZSBjb2xsZWN0aW9ucyBwcm92aWRlZCBoYXZlIGRpZmZlcmVudCBzaXplcyB3ZSBuZWVkIHRvIGdldCB0aGUgbGFyZ2VzdCBvbmUuXG4gICAgICAgICAqIFRoYXQgd2F5IHdlIGNhbiBnZXQgdGhlIHN0YXRlIHJlZmVyZW5jZSBmcm9tIHRoZSBsYXJnZXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSBmaWVsZE5hbWUgYXMgdGhlIGV4cHJlc3Npb24gdG8gcHJlcGFyZS5cbiAgICAgICAgICovXG4gICAgICAgIGxldCBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdGF0ZUNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobWF4Q29sbGVjdGlvbi5sZW5ndGggPCBzdGF0ZUNvbGxlY3Rpb25zW2ldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG1heENvbGxlY3Rpb24gPSBzdGF0ZUNvbGxlY3Rpb25zW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heEV4cHIgPSBtYXhDb2xsZWN0aW9uLmZpbmQoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBleHByZXNzaW9uLmZpZWxkTmFtZSk7XG5cbiAgICAgICAgc3RhdGVDb2xsZWN0aW9ucy5mb3JFYWNoKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgbXlFeHByID0gY29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCFteUV4cHIgJiYgIW1heEV4cHIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIHdpdGggdGhpcyBmaWVsZE5hbWUgaXMgbWlzc2luZyBmcm9tIHRoZSBjdXJyZW50IGFuZCB0aGUgbWF4IGNvbGxlY3Rpb24uXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghbXlFeHByICYmIG1heEV4cHIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIHdpdGggdGhpcyBmaWVsZE5hbWUgaXMgbWlzc2luZyBmcm9tIHRoZSBjdXJyZW50IGFuZCBidXQgdGhlIG1heCBjb2xsZWN0aW9uIGhhcy5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2gobWF4RXhwcik7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtYXhFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGN1cnJlbnQgY29sbGVjdGlvbiBoYXMgdGhlIGV4cHJlc3Npb24gc28ganVzdCB1cGRhdGUgaXQuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihteUV4cHIsIGV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlX2dyb3VwaW5nX2V4cHJlc3Npb24oX2ZpZWxkTmFtZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJEYXRhQnlFeHByZXNzaW9ucyhleHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBhbnlbXSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoKTtcblxuICAgICAgICBpZiAoZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7IGV4cHJlc3Npb25zVHJlZSwgc3RyYXRlZ3k6IHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneSB9O1xuICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLmZpbHRlcihjbG9uZUFycmF5KGRhdGEpLCBzdGF0ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcmVsYXRlZCByb3cgb2YgcHJvdmlkZWQgZ3JpZCdzIGRhdGEgc291cmNlIHdpdGggcHJvdmlkZWQgbmV3IHJvdyB2YWx1ZVxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWQgR3JpZCB0byB1cGRhdGUgZGF0YSBmb3JcbiAgICAgKiBAcGFyYW0gcm93SUQgSUQgb2YgdGhlIHJvdyB0byB1cGRhdGVcbiAgICAgKiBAcGFyYW0gcm93VmFsdWVJbkRhdGFTb3VyY2UgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIGluIGRhdGEgc291cmNlXG4gICAgICogQHBhcmFtIHJvd0N1cnJlbnRWYWx1ZSBDdXJyZW50IHZhbHVlIG9mIHRoZSByb3cgYXMgaXQgaXMgd2l0aCBhcHBsaWVkIHByZXZpb3VzIHRyYW5zYWN0aW9uc1xuICAgICAqIEBwYXJhbSByb3dOZXdWYWx1ZSBOZXcgdmFsdWUgb2YgdGhlIHJvd1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVEYXRhKGdyaWQsIHJvd0lELCByb3dWYWx1ZUluRGF0YVNvdXJjZTogYW55LCByb3dDdXJyZW50VmFsdWU6IGFueSwgcm93TmV3VmFsdWU6IHsgW3g6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHJvd0lELFxuICAgICAgICAgICAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5VUERBVEUsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IHJvd05ld1ZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCByb3dDdXJyZW50VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVyZ2VPYmplY3RzKHJvd1ZhbHVlSW5EYXRhU291cmNlLCByb3dOZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCB1cGRhdGVfcm93X2luX2FycmF5KHZhbHVlOiBhbnksIHJvd0lEOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgZ3JpZC5kYXRhW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTb3J0U3RyYXRlZ3lQZXJDb2x1bW4oZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkgP1xuICAgICAgICAgICAgdGhpcy5nZXRfY29sdW1uX2J5X25hbWUoZmllbGROYW1lKS5zb3J0U3RyYXRlZ3kgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG59XG4iXX0=
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFD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QyxPQUFPLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQWdCO2dCQUM3QixFQUFFLEVBQUUsS0FBSztnQkFDVCxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2FBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNILFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFHUyxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEtBQWE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRVMsd0JBQXdCLENBQUMsU0FBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEUsQ0FBQzs7O1lBemVKLFVBQVU7OztZQVRPLGtCQUFrQjtZQUkzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCByZXZlcnNlTWFwcGVyLCBtZXJnZU9iamVjdHMgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsLCBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlLCBTdGF0ZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IElneENlbGwsIElneEdyaWRDUlVEU2VydmljZSwgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuL2NvbW1vbi9jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcmlkRWRpdEV2ZW50QXJncywgSVJvd1RvZ2dsZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRCYXNlQVBJU2VydmljZTxUIGV4dGVuZHMgSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuXG5cbiAgICBwdWJsaWMgZ3JpZDogVDtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveU1hcDogTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4gPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0X2NvbHVtbl9ieV9uYW1lKG5hbWU6IHN0cmluZyk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmluZCgoY29sOiBDb2x1bW5UeXBlKSA9PiBjb2wuZmllbGQgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfc3VtbWFyeV9kYXRhKCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZmlsdGVyZWREYXRhO1xuICAgICAgICBpZiAoZGF0YSAmJiBncmlkLmhhc1Bpbm5lZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGRhdGEgPSBncmlkLl9maWx0ZXJlZFVucGlubmVkRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGdyaWQuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEUpLm1hcCh0ID0+IHQuaWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRSb3dzLmZvckVhY2gocm93SUQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRlbXBEYXRhLmluZGV4T2Yocm93SUQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdyaWQuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFJvd0RhdGEocm93SUQ6IGFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3dJRCwgZGF0YSk7XG4gICAgICAgIHJldHVybiBkYXRhW2luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lEOiBhbnksIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRCYXNlRGlyZWN0aXZlO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gZGF0YUNvbGxlY3Rpb24gPz8gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiBncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmRJbmRleChyZWNvcmQgPT4gcmVjb3JkLnJlY29yZFJlZiA/IHJlY29yZC5yZWNvcmRSZWZbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SURcbiAgICAgICAgICAgIDogcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IGRhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnkpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBpZiAocHJpbWFyeUtleSAhPT0gdW5kZWZpbmVkICYmIHByaW1hcnlLZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmluZCgocm93KSA9PiByb3cucm93RGF0YVtwcmltYXJ5S2V5XSA9PT0gcm93U2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9pbmRleChyb3dJbmRleDogbnVtYmVyKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93SUQgb2YgdGhlIHJlY29yZCBhdCB0aGUgc3BlY2lmaWVkIGRhdGEgdmlldyBpbmRleFxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIGRhdGFDb2xsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldF9yZWNfaWRfYnlfaW5kZXgoaW5kZXg6IG51bWJlciwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IGFueSB7XG4gICAgICAgIGRhdGFDb2xsZWN0aW9uID0gZGF0YUNvbGxlY3Rpb24gfHwgdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZGF0YUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZWMgPSBkYXRhQ29sbGVjdGlvbltpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9rZXkocm93U2VsZWN0b3I6IGFueSwgZmllbGQ6IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2tleShyb3dTZWxlY3Rvcik7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmNlbGxzKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSUQ6IG51bWJlciB8IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgaGFzQ2VsbHMgPSByb3cgJiYgcm93LmNlbGxzO1xuICAgICAgICBpZiAoaGFzQ2VsbHMgJiYgdHlwZW9mIGNvbHVtbklEID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5pbmRleCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGNvbHVtbklEKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC52aXNpYmxlQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfY2VsbChjZWxsOiBJZ3hDZWxsKTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IGNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UuY2xlYXJTdW1tYXJ5Q2FjaGUoYXJncyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFJvd0RhdGEoY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSh0aGlzLmdyaWQsIGNlbGwuaWQucm93SUQsIGRhdGEsIGNlbGwucm93RGF0YSwgcmV2ZXJzZU1hcHBlcihjZWxsLmNvbHVtbi5maWVsZCwgYXJncy5uZXdWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IGNlbGwuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChjZWxsLmlkLnJvd0lEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQoYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5jcnVkU2VydmljZS5yb3cgfHxcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2Uucm93LmlkICE9PSBjZWxsLmlkLnJvd0lEIHx8ICF0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ1JVRCByZWZhY3RvciB0byBub3QgZW1pdCBlZGl0aW5nIGV2dHMuXG4gICAgcHVibGljIHVwZGF0ZV9yb3cocm93OiBJZ3hFZGl0Um93LCB2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IHRoaXMuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRfcm93X2luZGV4X2luX2RhdGEocm93LmlkLCBkYXRhKTtcbiAgICAgICAgY29uc3QgaGFzU3VtbWFyaXplZCA9IGdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnM7XG4gICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlUm93RWRpdERhdGEocm93LCB2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICAvLyBJZiBubyB2YWxpZCByb3cgaXMgZm91bmRcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKGFyZ3Mucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJncy5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoZ3JpZCwgcm93LmlkLCBkYXRhW2luZGV4XSwgYXJncy5vbGRWYWx1ZSwgYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld0lkID0gZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5uZXdWYWx1ZVtncmlkLnByaW1hcnlLZXldIDogYXJncy5uZXdWYWx1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93LmlkKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIHN1cmUgc2VsZWN0aW9uIGlzIGhhbmRsZWQgcHJpb3IgdG8gdXBkYXRpbmcgdGhlIHJvdy5pZFxuICAgICAgICByb3cuaWQgPSBuZXdJZDtcbiAgICAgICAgaWYgKGhhc1N1bW1hcml6ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChleHByZXNzaW9uLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydF9tdWx0aXBsZShleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVhY2ggb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChlYWNoLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbihlYWNoLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX3NvcnQoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSBzb3J0aW5nU3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcl9ncm91cGJ5KF9uYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRfYXBwbHlfbnVtYmVyX3N0eWxlKGNvbHVtbjogQ29sdW1uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9hbGxfZGF0YShpbmNsdWRlVHJhbnNhY3Rpb25zID0gZmFsc2UpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZCAmJiBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IGluY2x1ZGVUcmFuc2FjdGlvbnMgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZmlsdGVyZWRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3dUb0RhdGEocm93RGF0YTogYW55LCBwYXJlbnRJRD8pIHtcbiAgICAgICAgLy8gQWRkIHJvdyBnb2VzIHRvIHRyYW5zYWN0aW9ucyBhbmQgaWYgcm93RWRpdGFibGUgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQsIGFkZGVkIHJvd3Mgd2lsbCBnbyB0byBwZW5kaW5nIHRyYW5zYWN0aW9uc1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJvdyBpbiBlZGl0IC0gPiBjb21taXQgYW5kIGNsb3NlXG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW2dyaWQucHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0geyBpZDogdHJhbnNhY3Rpb25JZCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkFERCwgbmV3VmFsdWU6IHJvd0RhdGEgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmRhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dGcm9tRGF0YShyb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IDApIGRlbGV0ZSBpdFxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgaW4gQUREIG9yIFVQREFURSBzdGF0ZSBjaGFuZ2UgaXQncyBzdGF0ZSB0byBERUxFVEVcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIGdyaWQuZGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncmlkLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfSwgc3RhdGUgJiYgc3RhdGUucmVjb3JkUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dCeUlkKHJvd0lkOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG4gICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICAgICAgICBpbmRleCA9IGRhdGEubWFwKChyZWNvcmQpID0+IHJlY29yZFtncmlkLnByaW1hcnlLZXldKS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZTogU3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJZCk7XG4gICAgICAgIGNvbnN0IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlID0gc3RhdGUgJiYgc3RhdGUudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcblxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgKGluZGV4ICE9PSAtMSkgYW5kIHRoZSB3ZSBoYXZlIGNlbGwgaW4gZWRpdCBtb2RlIG9uIHNhbWUgcm93IGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBubyByb3cgKGluZGV4ID09PSAtMSksIGJ1dCB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGRvIGFzIGFib3ZlXG4gICAgICAgIC8vICBPdGhlcndpc2UganVzdCBleGl0IC0gdGhlcmUgaXMgbm90aGluZyB0byBkZWxldGVcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSB8fCBoYXNSb3dJbk5vbkRlbGV0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgLy8gQWx3YXlzIGV4aXQgZWRpdCB3aGVuIHJvdyBpcyBkZWxldGVkXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQgPSBkYXRhW2luZGV4XTtcbiAgICAgICAgLy8gLy8gIFRPRE86IHNob3VsZCB3ZSBlbWl0IHRoaXMgd2hlbiBjYXNjYWRlT25EZWxldGUgaXMgdHJ1ZSBmb3IgZWFjaCByb3c/IT8hXG4gICAgICAgIGdyaWQucm93RGVsZXRlZE5vdGlmaWVyLm5leHQoeyBkYXRhOiBkYXRhW2luZGV4XSB9KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lkLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKGdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHJvd0lkKSkge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAvLyBEYXRhIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCBpZiB0cmFuc2FjdGlvbnMgYXJlIGluIHBsYWNlXG4gICAgICAgIC8vIElmIG5vIHRyYW5zYWN0aW9ucywgYGRhdGFgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgZ2V0dGVyLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzdGFsZVxuICAgICAgICBjb25zdCBkYXRhQWZ0ZXJEZWxldGUgPSBncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID8gZ3JpZC5kYXRhV2l0aEFkZGVkSW5UcmFuc2FjdGlvblJvd3MgOiBkYXRhO1xuICAgICAgICBncmlkLnJlZnJlc2hTZWFyY2goKTtcbiAgICAgICAgaWYgKGRhdGFBZnRlckRlbGV0ZS5sZW5ndGggJSBncmlkLnBlclBhZ2UgPT09IDAgJiYgZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAvIGdyaWQucGVyUGFnZSAtIDEgPCBncmlkLnBhZ2UgJiYgZ3JpZC5wYWdlICE9PSAwKSB7XG4gICAgICAgICAgICBncmlkLnBhZ2UtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfaWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJRCk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICBjb25zdCByb3dJRCA9IGdyaWQucHJpbWFyeUtleSA/IHJlY29yZFtncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHN0YXRlcy5nZXQocm93SUQpO1xuXG4gICAgICAgIGlmIChleHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JpZC5nZXREZWZhdWx0RXhwYW5kU3RhdGUocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3dJRDogYW55LCBleHBhbmRlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBleHBhbmRlZFN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dUb2dnbGVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgZ3JpZC5yb3dUb2dnbGUuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHBhbmRlZFN0YXRlcy5zZXQocm93SUQsIGV4cGFuZGVkKTtcbiAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbmRlZFN0YXRlcztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3JlY19ieV9pZChyb3dJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyB0aGlzLmdldFJvd0RhdGEocm93SUQpIDogcm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJlY29yZCBpbiB0aGUgZGF0YSB2aWV3IGJ5IHBrIG9yIC0xIGlmIG5vdCBmb3VuZCBvciBwcmltYXJ5S2V5IGlzIG5vdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGtcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pbmRleF9ieV9pZChwazogc3RyaW5nIHwgbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogbnVtYmVyIHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YUNvbGxlY3Rpb24uZmluZEluZGV4KHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldID09PSBwaykgOiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWxsb3dfZXhwYW5zaW9uX3N0YXRlX2NoYW5nZShyb3dJRCwgZXhwYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAhPT0gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKHN0YXRlQ29sbGVjdGlvbnM6IEFycmF5PEFycmF5PGFueT4+LCBleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlKHN0YXRlLmZpbmRJbmRleCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGVzIGluIGVhY2ggY29sbGVjdGlvbiB3aXRoIHNhbWUgZmllbGRzIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UuXG4gICAgICAgICAqIElmIHRoZSBkaWZmZXJlbnQgc3RhdGUgY29sbGVjdGlvbnMgcHJvdmlkZWQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgd2UgbmVlZCB0byBnZXQgdGhlIGxhcmdlc3Qgb25lLlxuICAgICAgICAgKiBUaGF0IHdheSB3ZSBjYW4gZ2V0IHRoZSBzdGF0ZSByZWZlcmVuY2UgZnJvbSB0aGUgbGFyZ2VzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgZmllbGROYW1lIGFzIHRoZSBleHByZXNzaW9uIHRvIHByZXBhcmUuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgbWF4Q29sbGVjdGlvbiA9IHN0YXRlQ29sbGVjdGlvbnNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3RhdGVDb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heENvbGxlY3Rpb24ubGVuZ3RoIDwgc3RhdGVDb2xsZWN0aW9uc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhFeHByID0gbWF4Q29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuXG4gICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChjb2xsZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG15RXhwciA9IGNvbGxlY3Rpb24uZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghbXlFeHByICYmICFtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgdGhlIG1heCBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW15RXhwciAmJiBtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgYnV0IHRoZSBtYXggY29sbGVjdGlvbiBoYXMuXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG1heEV4cHIpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWF4RXhwciwgZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaGFzIHRoZSBleHByZXNzaW9uIHNvIGp1c3QgdXBkYXRlIGl0LlxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obXlFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKF9maWVsZE5hbWUpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogYW55W10ge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBleHByZXNzaW9uc1RyZWUsIHN0cmF0ZWd5OiB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgfTtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5maWx0ZXIoY2xvbmVBcnJheShkYXRhKSwgc3RhdGUsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHJlbGF0ZWQgcm93IG9mIHByb3ZpZGVkIGdyaWQncyBkYXRhIHNvdXJjZSB3aXRoIHByb3ZpZGVkIG5ldyByb3cgdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIEdyaWQgdG8gdXBkYXRlIGRhdGEgZm9yXG4gICAgICogQHBhcmFtIHJvd0lEIElEIG9mIHRoZSByb3cgdG8gdXBkYXRlXG4gICAgICogQHBhcmFtIHJvd1ZhbHVlSW5EYXRhU291cmNlIEluaXRpYWwgdmFsdWUgb2YgdGhlIHJvdyBhcyBpdCBpcyBpbiBkYXRhIHNvdXJjZVxuICAgICAqIEBwYXJhbSByb3dDdXJyZW50VmFsdWUgQ3VycmVudCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIHdpdGggYXBwbGllZCBwcmV2aW91cyB0cmFuc2FjdGlvbnNcbiAgICAgKiBAcGFyYW0gcm93TmV3VmFsdWUgTmV3IHZhbHVlIG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRGF0YShncmlkLCByb3dJRCwgcm93VmFsdWVJbkRhdGFTb3VyY2U6IGFueSwgcm93Q3VycmVudFZhbHVlOiBhbnksIHJvd05ld1ZhbHVlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiByb3dJRCxcbiAgICAgICAgICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuVVBEQVRFLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiByb3dOZXdWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgcm93Q3VycmVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhyb3dWYWx1ZUluRGF0YVNvdXJjZSwgcm93TmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlX3Jvd19pbl9hcnJheSh2YWx1ZTogYW55LCByb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGdyaWQuZGF0YVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U29ydFN0cmF0ZWd5UGVyQ29sdW1uKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldF9jb2x1bW5fYnlfbmFtZShmaWVsZE5hbWUpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkuc29ydFN0cmF0ZWd5IDogdW5kZWZpbmVkO1xuICAgIH1cblxufVxuIl19
|