igniteui-angular 12.3.40 → 12.3.41
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 +50 -17
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/combo/combo-dropdown.component.js +2 -2
- package/esm2015/lib/combo/combo.api.js +4 -1
- package/esm2015/lib/combo/combo.common.js +16 -2
- package/esm2015/lib/combo/combo.component.js +6 -3
- package/esm2015/lib/combo/combo.pipes.js +4 -3
- package/esm2015/lib/simple-combo/simple-combo.component.js +20 -12
- package/fesm2015/igniteui-angular.js +46 -17
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/combo/combo.common.d.ts +1 -0
- package/lib/simple-combo/simple-combo.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -93,7 +93,7 @@ export class IgxComboDropDownComponent extends IgxDropDownComponent {
|
|
|
93
93
|
* @hidden
|
|
94
94
|
*/
|
|
95
95
|
navigateFirst() {
|
|
96
|
-
this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
|
|
96
|
+
this.navigateItem(this.virtDir.igxForOf.findIndex(e => !(e === null || e === void 0 ? void 0 : e.isHeader)));
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
99
|
* @hidden
|
|
@@ -208,4 +208,4 @@ IgxComboDropDownComponent.propDecorators = {
|
|
|
208
208
|
singleMode: [{ type: Input }],
|
|
209
209
|
children: [{ type: ContentChildren, args: [IgxComboItemComponent, { descendants: true },] }]
|
|
210
210
|
};
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8tZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLWRyb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQXVDLGVBQWUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUMxSCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxjQUFjO0FBTWQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG9CQUFvQjtJQTBEL0QsWUFDYyxVQUFzQixFQUN0QixHQUFzQixFQUN0QixRQUFzQixFQUN0QixTQUFpQyxFQUNQLEtBQW1CLEVBQzdDLFFBQTRCLEVBQ2Esc0JBQThDO1FBQ2pHLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FB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RUFBRTtZQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN6QixPQUFPO1NBQ1Y7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLFlBQVksd0JBQXdCLENBQUM7SUFDaEUsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7SUFDTCxDQUFDOzs7WUEvTUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLGltQkFBb0Q7Z0JBQ3BELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO2FBQ3RGOzs7WUFuQmlDLFVBQVU7WUFBeEMsaUJBQWlCO1lBWVosWUFBWTtZQUhaLHNCQUFzQjs0Q0EwRXRCLE1BQU0sU0FBQyxtQkFBbUI7WUE1RTFCLGtCQUFrQjs0Q0E4RWxCLFFBQVEsWUFBSSxNQUFNLFNBQUMsbUJBQW1COzs7eUJBL0QxQyxLQUFLO3VCQU9MLGVBQWUsU0FBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgUXVlcnlMaXN0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIENvbnRlbnRDaGlsZHJlbiwgT3B0aW9uYWwsIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Q29tYm9CYXNlLCBJR1hfQ09NQk9fQ09NUE9ORU5UIH0gZnJvbSAnLi9jb21iby5jb21tb24nO1xuaW1wb3J0IHsgSURyb3BEb3duQmFzZSwgSUdYX0RST1BET1dOX0JBU0UgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IERyb3BEb3duQWN0aW9uS2V5IH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1hZGQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BUElTZXJ2aWNlIH0gZnJvbSAnLi9jb21iby5hcGknO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24taXRlbS5iYXNlJztcbmltcG9ydCB7IElneFNlbGVjdGlvbkFQSVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBJZ3hDb21ib0l0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbWJvLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbi8qKiBAaGlkZGVuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb21iby1kcm9wLWRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJR1hfRFJPUERPV05fQkFTRSwgdXNlRXhpc3Rpbmc6IElneENvbWJvRHJvcERvd25Db21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudCBleHRlbmRzIElneERyb3BEb3duQ29tcG9uZW50IGltcGxlbWVudHMgSURyb3BEb3duQmFzZSwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaW5nbGVNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDb21ib0l0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgY2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlPiA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNjcm9sbENvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpcnREaXIuZGMubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzU2Nyb2xsZWRUb0xhc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMudmlydERpci5zY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGhpcy52aXJ0RGlyLmdldFNjcm9sbCgpLnNjcm9sbEhlaWdodDtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Nyb2xsVG9wICsgdGhpcy52aXJ0RGlyLmlneEZvckNvbnRhaW5lclNpemUpID09PSBzY3JvbGxIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBsYXN0VmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50ID9cbiAgICAgICAgICAgIE1hdGguZmxvb3IodGhpcy5jb21iby5pdGVtc01heEhlaWdodCAvIHRoaXMuY29tYm8uaXRlbUhlaWdodCkgOlxuICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc29ydGVkQ2hpbGRyZW4oKTogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZVtdIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4udG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGE6IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUsIGI6IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIG5vbi1oZWFkZXIgaXRlbXNcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbXlEcm9wRG93bkl0ZW1zID0gdGhpcy5kcm9wZG93bi5pdGVtcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IElneENvbWJvSXRlbUNvbXBvbmVudFtdIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IElneENvbWJvSXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZENoaWxkcmVuID0gdGhpcy5zb3J0ZWRDaGlsZHJlbiBhcyBJZ3hDb21ib0l0ZW1Db21wb25lbnRbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc29ydGVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvbjogSWd4U2VsZWN0aW9uQVBJU2VydmljZSxcbiAgICAgICAgQEluamVjdChJR1hfQ09NQk9fQ09NUE9ORU5UKSBwdWJsaWMgY29tYm86IElneENvbWJvQmFzZSxcbiAgICAgICAgcHJvdGVjdGVkIGNvbWJvQVBJOiBJZ3hDb21ib0FQSVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBwbGF0Zm9ybSwgc2VsZWN0aW9uLCBfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5fZm9jdXNlZEl0ZW0gfHwgdGhpcy5pdGVtc1swXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoX2V2dD8pIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ub2dnbGVPcGVuZWQoKSB7XG4gICAgICAgIHRoaXMub3BlbmVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5hdmlnYXRlRmlyc3QoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVJdGVtKHRoaXMudmlydERpci5pZ3hGb3JPZi5maW5kSW5kZXgoZSA9PiAhZS5pc0hlYWRlcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGVQcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5fZm9jdXNlZEl0ZW0gJiYgdGhpcy5fZm9jdXNlZEl0ZW0uaW5kZXggPT09IDAgJiYgdGhpcy52aXJ0RGlyLnN0YXRlLnN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uZm9jdXNTZWFyY2hJbnB1dChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5uYXZpZ2F0ZVByZXYoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuYXZpZ2F0ZU5leHQoKSB7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuY29tYm8udG90YWxJdGVtQ291bnQgPyB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50IC0gMSA6IHRoaXMudmlydERpci5pZ3hGb3JPZi5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodGhpcy5fZm9jdXNlZEl0ZW0gJiYgdGhpcy5fZm9jdXNlZEl0ZW0uaW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FkZEl0ZW1CdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm5hdmlnYXRlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlKSB7XG4gICAgICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tYm9BUEkuc2V0X3NlbGVjdGVkX2l0ZW0oaXRlbS5pdGVtSUQpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkSXRlbSA9IGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5zY3JvbGxUb3AgPSB0aGlzLl9zY3JvbGxQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1BY3Rpb25LZXkoa2V5OiBEcm9wRG93bkFjdGlvbktleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5FTlRFUjpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVudGVyKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyb3BEb3duQWN0aW9uS2V5LlNQQUNFOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJvcERvd25BY3Rpb25LZXkuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpcnREaXIuZ2V0U2Nyb2xsKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbFRvSGlkZGVuSXRlbShfbmV3SXRlbTogYW55KTogdm9pZCB7IH1cblxuICAgIHByb3RlY3RlZCBzY3JvbGxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbWJvQVBJLmRpc2FibGVUcmFuc2l0aW9ucyA9IHRydWU7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlRW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWRkSXRlbUZvY3VzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb21iby5hZGRJdGVtVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTW9kZSAmJiB0aGlzLmZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvLnNlbGVjdCh0aGlzLmZvY3VzZWRJdGVtLml0ZW1JRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTcGFjZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZGRJdGVtRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0odGhpcy5mb2N1c2VkSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWRkSXRlbUZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRJdGVtIGluc3RhbmNlb2YgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNBZGRJdGVtQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5jb21iby5pc0FkZEJ1dHRvblZpc2libGUoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8tZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLWRyb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQXVDLGVBQWUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUMxSCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxjQUFjO0FBTWQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG9CQUFvQjtJQTBEL0QsWUFDYyxVQUFzQixFQUN0QixHQUFzQixFQUN0QixRQUFzQixFQUN0QixTQUFpQyxFQUNQLEtBQW1CLEVBQzdDLFFBQTRCLEVBQ2Esc0JBQThDO1FBQ2pHLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQVAxRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUFDUCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQzdDLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQ2EsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQWhFckcsd0JBQXdCO1FBRWpCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFMUI7OztXQUdHO1FBRUksYUFBUSxHQUE0QyxJQUFJLENBQUM7UUFnS3RELGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzVDLENBQUMsQ0FBQztJQXpHRixDQUFDO0lBdkRELHdCQUF3QjtJQUN4QixJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFjLGdCQUFnQjtRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxZQUFZLENBQUM7SUFDckYsQ0FBQztJQUVELElBQWMsZ0JBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWMsY0FBYztRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7aUJBQ3pCLElBQUksQ0FBQyxDQUFDLENBQStCLEVBQUUsQ0FBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEc7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxLQUFLO1FBQ1osTUFBTSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUF5QyxDQUFDO1lBQ3RFLEtBQUssTUFBTSxLQUFLLElBQUksY0FBYyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDckI7YUFDSjtTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQWFEOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFLO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLFFBQVEsQ0FBQSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO1lBQzNGLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNILEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFHRDs7T0FFRztJQUNJLFlBQVk7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9HLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7YUFBTTtZQUNILEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxJQUFrQztRQUNoRCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNyQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsR0FBc0I7UUFDekMsUUFBUSxHQUFHLEVBQUU7WUFDVCxLQUFLLGlCQUFpQixDQUFDLEtBQUs7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsTUFBTTtZQUNWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixNQUFNO1lBQ1YsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO2dCQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxRQUFhLElBQVUsQ0FBQztJQU03QyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDakMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDekIsT0FBTztTQUNWO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxZQUFZLHdCQUF3QixDQUFDO0lBQ2hFLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQzs7O1lBL01KLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixpbUJBQW9EO2dCQUNwRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsQ0FBQzthQUN0Rjs7O1lBbkJpQyxVQUFVO1lBQXhDLGlCQUFpQjtZQVlaLFlBQVk7WUFIWixzQkFBc0I7NENBMEV0QixNQUFNLFNBQUMsbUJBQW1CO1lBNUUxQixrQkFBa0I7NENBOEVsQixRQUFRLFlBQUksTUFBTSxTQUFDLG1CQUFtQjs7O3lCQS9EMUMsS0FBSzt1QkFPTCxlQUFlLFNBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIFF1ZXJ5TGlzdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIE9wdGlvbmFsLCBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbWJvQmFzZSwgSUdYX0NPTUJPX0NPTVBPTkVOVCB9IGZyb20gJy4vY29tYm8uY29tbW9uJztcbmltcG9ydCB7IElEcm9wRG93bkJhc2UsIElHWF9EUk9QRE9XTl9CQVNFIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wRG93bkFjdGlvbktleSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IElneENvbWJvQWRkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tYm8tYWRkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvQVBJU2VydmljZSB9IGZyb20gJy4vY29tYm8uYXBpJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuXG4vKiogQGhpZGRlbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtY29tYm8tZHJvcC1kb3duJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSUdYX0RST1BET1dOX0JBU0UsIHVzZUV4aXN0aW5nOiBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIElneENvbWJvRHJvcERvd25Db21wb25lbnQgZXh0ZW5kcyBJZ3hEcm9wRG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIElEcm9wRG93bkJhc2UsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2luZ2xlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Q29tYm9JdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHVibGljIGNoaWxkcmVuOiBRdWVyeUxpc3Q8SWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZT4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzY3JvbGxDb250YWluZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0RGlyLmRjLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBpc1Njcm9sbGVkVG9MYXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnZpcnREaXIuc2Nyb2xsUG9zaXRpb247XG4gICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHNjcm9sbFRvcCArIHRoaXMudmlydERpci5pZ3hGb3JDb250YWluZXJTaXplKSA9PT0gc2Nyb2xsSGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbGFzdFZpc2libGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21iby50b3RhbEl0ZW1Db3VudCA/XG4gICAgICAgICAgICBNYXRoLmZsb29yKHRoaXMuY29tYm8uaXRlbXNNYXhIZWlnaHQgLyB0aGlzLmNvbWJvLml0ZW1IZWlnaHQpIDpcbiAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNvcnRlZENoaWxkcmVuKCk6IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmVbXSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlLCBiOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBub24taGVhZGVyIGl0ZW1zXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG15RHJvcERvd25JdGVtcyA9IHRoaXMuZHJvcGRvd24uaXRlbXM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtcygpOiBJZ3hDb21ib0l0ZW1Db21wb25lbnRbXSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBJZ3hDb21ib0l0ZW1Db21wb25lbnRbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IHRoaXMuc29ydGVkQ2hpbGRyZW4gYXMgSWd4Q29tYm9JdGVtQ29tcG9uZW50W107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHNvcnRlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5pc0hlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb246IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0NPTUJPX0NPTVBPTkVOVCkgcHVibGljIGNvbWJvOiBJZ3hDb21ib0Jhc2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkciwgcGxhdGZvcm0sIHNlbGVjdGlvbiwgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSXRlbSA9IHRoaXMuX2ZvY3VzZWRJdGVtIHx8IHRoaXMuaXRlbXNbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25CbHVyKF9ldnQ/KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uVG9nZ2xlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuYXZpZ2F0ZUZpcnN0KCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlSXRlbSh0aGlzLnZpcnREaXIuaWd4Rm9yT2YuZmluZEluZGV4KGUgPT4gIWU/LmlzSGVhZGVyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuYXZpZ2F0ZVByZXYoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkSXRlbSAmJiB0aGlzLl9mb2N1c2VkSXRlbS5pbmRleCA9PT0gMCAmJiB0aGlzLnZpcnREaXIuc3RhdGUuc3RhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jb21iby5mb2N1c1NlYXJjaElucHV0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm5hdmlnYXRlUHJldigpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5hdmlnYXRlTmV4dCgpIHtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5jb21iby50b3RhbEl0ZW1Db3VudCA/IHRoaXMuY29tYm8udG90YWxJdGVtQ291bnQgLSAxIDogdGhpcy52aXJ0RGlyLmlneEZvck9mLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkSXRlbSAmJiB0aGlzLl9mb2N1c2VkSXRlbS5pbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWRkSXRlbUJ1dHRvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIubmF2aWdhdGVOZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW06IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUpIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21ib0FQSS5zZXRfc2VsZWN0ZWRfaXRlbShpdGVtLml0ZW1JRCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRJdGVtID0gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgdGhpcy52aXJ0RGlyLmdldFNjcm9sbCgpLnNjcm9sbFRvcCA9IHRoaXMuX3Njcm9sbFBvc2l0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSXRlbUFjdGlvbktleShrZXk6IERyb3BEb3duQWN0aW9uS2V5KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIERyb3BEb3duQWN0aW9uS2V5LkVOVEVSOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRW50ZXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJvcERvd25BY3Rpb25LZXkuU1BBQ0U6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTcGFjZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcm9wRG93bkFjdGlvbktleS5FU0NBUEU6XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy52aXJ0RGlyLmdldFNjcm9sbCgpLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlydERpci5nZXRTY3JvbGwoKS5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2Nyb2xsVG9IaWRkZW5JdGVtKF9uZXdJdGVtOiBhbnkpOiB2b2lkIHsgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tYm9BUEkuZGlzYWJsZVRyYW5zaXRpb25zID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVFbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZGRJdGVtRm9jdXNlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvLmFkZEl0ZW1Ub0NvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaW5nbGVNb2RlICYmIHRoaXMuZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uc2VsZWN0KHRoaXMuZm9jdXNlZEl0ZW0uaXRlbUlEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNwYWNlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FkZEl0ZW1Gb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRJdGVtRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZEl0ZW0gaW5zdGFuY2VvZiBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0FkZEl0ZW1CdXR0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbWJvLmlzQWRkQnV0dG9uVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJdGVtID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -32,6 +32,9 @@ export class IgxComboAPIService {
|
|
|
32
32
|
}
|
|
33
33
|
set_selected_item(itemID, event) {
|
|
34
34
|
const selected = this.combo.isItemSelected(itemID);
|
|
35
|
+
if (itemID === undefined) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
35
38
|
if (!selected) {
|
|
36
39
|
this.combo.select([itemID], false, event);
|
|
37
40
|
}
|
|
@@ -46,4 +49,4 @@ export class IgxComboAPIService {
|
|
|
46
49
|
IgxComboAPIService.decorators = [
|
|
47
50
|
{ type: Injectable }
|
|
48
51
|
];
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8uYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUVXLHVCQUFrQixHQUFHLEtBQUssQ0FBQztJQWdEdEMsQ0FBQztJQTdDRyxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUcsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQW1CO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE1BQVcsRUFBRSxLQUFhO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBVztRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7OztZQWpESixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWd4Q29tYm9CYXNlIH0gZnJvbSAnLi9jb21iby5jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneENvbWJvQVBJU2VydmljZSB7XG4gICAgcHVibGljIGRpc2FibGVUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBjb21ibzogSWd4Q29tYm9CYXNlO1xuXG4gICAgcHVibGljIGdldCB2YWx1ZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm8udmFsdWVLZXkgIT09IG51bGwgJiYgdGhpcy5jb21iby52YWx1ZUtleSAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb21iby52YWx1ZUtleSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtX2ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGlzUmVtb3RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21iby5pc1JlbW90ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbWJvSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm8uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyKGNvbWJvOiBJZ3hDb21ib0Jhc2UpIHtcbiAgICAgICAgdGhpcy5jb21ibyA9IGNvbWJvO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21ibyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZF9jdXN0b21faXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbWJvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21iby5hZGRJdGVtVG9Db2xsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldF9zZWxlY3RlZF9pdGVtKGl0ZW1JRDogYW55LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jb21iby5pc0l0ZW1TZWxlY3RlZChpdGVtSUQpO1xuICAgICAgICBpZiAoaXRlbUlEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvLnNlbGVjdChbaXRlbUlEXSwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm8uZGVzZWxlY3QoW2l0ZW1JRF0sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc19pdGVtX3NlbGVjdGVkKGl0ZW1JRDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJvLmlzSXRlbVNlbGVjdGVkKGl0ZW1JRCk7XG4gICAgfVxufVxuIl19
|
|
@@ -479,7 +479,13 @@ export class IgxComboBaseDirective extends DisplayDensityBase {
|
|
|
479
479
|
return this._data;
|
|
480
480
|
}
|
|
481
481
|
set data(val) {
|
|
482
|
-
|
|
482
|
+
// igxFor directive ignores undefined values
|
|
483
|
+
// if the combo uses simple data and filtering is applied
|
|
484
|
+
// an error will occur due to the mismatch of the length of the data
|
|
485
|
+
// this can occur during filtering for the igx-combo and
|
|
486
|
+
// during filtering & selection for the igx-simple-combo
|
|
487
|
+
// since the simple combo's input is both a container for the selection and a filter
|
|
488
|
+
this._data = (val) ? val.filter(x => x !== undefined) : [];
|
|
483
489
|
}
|
|
484
490
|
set displayKey(val) {
|
|
485
491
|
this._displayKey = val;
|
|
@@ -985,6 +991,14 @@ export class IgxComboBaseDirective extends DisplayDensityBase {
|
|
|
985
991
|
this.registerRemoteEntries(removedItems, false);
|
|
986
992
|
return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
|
|
987
993
|
}
|
|
994
|
+
get required() {
|
|
995
|
+
if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {
|
|
996
|
+
// Run the validation with empty object to check if required is enabled.
|
|
997
|
+
const error = this.ngControl.control.validator({});
|
|
998
|
+
return error && error.required;
|
|
999
|
+
}
|
|
1000
|
+
return false;
|
|
1001
|
+
}
|
|
988
1002
|
}
|
|
989
1003
|
IgxComboBaseDirective.decorators = [
|
|
990
1004
|
{ type: Directive }
|
|
@@ -1048,4 +1062,4 @@ IgxComboBaseDirective.propDecorators = {
|
|
|
1048
1062
|
complexTemplate: [{ type: ViewChild, args: ['complex', { read: TemplateRef, static: true },] }],
|
|
1049
1063
|
onArrowDown: [{ type: HostListener, args: ['keydown.ArrowDown', ['$event'],] }, { type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }]
|
|
1050
1064
|
};
|
|
1051
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8uY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLmNvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBVyxVQUFVLEVBQUUsWUFBWSxFQUM1RixXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUNsSSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlDLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBOEIsVUFBVSxFQUFtRCxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUFF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QUU7Z0NBcUIvRCxZQUFZLFNBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO3lCQUk5RCxTQUFTLFNBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7eUJBSXRFLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTswQkFJakUsU0FBUyxTQUFDLGFBQWE7cUNBSXZCLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7c0JBRzdDLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dDQUd0RSxTQUFTLFNBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dDQUduRCxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzhCQUcxRCxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzBCQXFMeEQsWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQzVDLFlBQVksU0FBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNhc2VTZW5zaXRpdmUgfSBmcm9tICdAaWduaXRldWkvbWF0ZXJpYWwtaWNvbnMtZXh0ZW5kZWQnO1xuaW1wb3J0IHsgbm9vcCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlCYXNlLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIGNsb25lQXJyYXksIElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzLCBpc05hTnZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJRm9yT2ZTdGF0ZSwgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4uL2lucHV0LWdyb3VwL2lucHV0R3JvdXBUeXBlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LCBBdXRvUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BUElTZXJ2aWNlIH0gZnJvbSAnLi9jb21iby5hcGknO1xuaW1wb3J0IHtcbiAgICBJZ3hDb21ib0FkZEl0ZW1EaXJlY3RpdmUsIElneENvbWJvQ2xlYXJJY29uRGlyZWN0aXZlLCBJZ3hDb21ib0VtcHR5RGlyZWN0aXZlLFxuICAgIElneENvbWJvRm9vdGVyRGlyZWN0aXZlLCBJZ3hDb21ib0hlYWRlckRpcmVjdGl2ZSwgSWd4Q29tYm9IZWFkZXJJdGVtRGlyZWN0aXZlLCBJZ3hDb21ib0l0ZW1EaXJlY3RpdmUsIElneENvbWJvVG9nZ2xlSWNvbkRpcmVjdGl2ZVxufSBmcm9tICcuL2NvbWJvLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgICBJQ29tYm9GaWx0ZXJpbmdPcHRpb25zLCBJQ29tYm9JdGVtQWRkaXRpb25FdmVudCwgSUNvbWJvU2VhcmNoSW5wdXRFdmVudEFyZ3Ncbn0gZnJvbSAnLi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElDb21ib1Jlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9jb21iby1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuXG5leHBvcnQgY29uc3QgSUdYX0NPTUJPX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJZ3hDb21ib0Jhc2U+KCdJZ3hDb21ib0NvbXBvbmVudFRva2VuJyk7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCBUT0RPOiBFdmFsdWF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBJZ3hDb21ib0Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGF0YTogYW55W10gfCBudWxsO1xuICAgIHZhbHVlS2V5OiBzdHJpbmc7XG4gICAgZ3JvdXBLZXk6IHN0cmluZztcbiAgICBpc1JlbW90ZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdIHwgbnVsbDtcbiAgICB0b3RhbEl0ZW1Db3VudDogbnVtYmVyO1xuICAgIGl0ZW1zTWF4SGVpZ2h0OiBudW1iZXI7XG4gICAgaXRlbUhlaWdodDogbnVtYmVyO1xuICAgIHNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gICAgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgY29tYm9JbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICBvcGVuZWQ6IEV2ZW50RW1pdHRlcjxJQmFzZUV2ZW50QXJncz47XG4gICAgb3BlbmluZzogRXZlbnRFbWl0dGVyPENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzPjtcbiAgICBjbG9zaW5nOiBFdmVudEVtaXR0ZXI8Q2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3M+O1xuICAgIGNsb3NlZDogRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPjtcbiAgICBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTogdm9pZDtcbiAgICB0cmlnZ2VyQ2hlY2soKTogdm9pZDtcbiAgICBhZGRJdGVtVG9Db2xsZWN0aW9uKCk6IHZvaWQ7XG4gICAgaXNBZGRCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW47XG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ/OiBzdHJpbmcpOiB2b2lkO1xuICAgIGlzSXRlbVNlbGVjdGVkKGl0ZW1JRDogYW55KTogYm9vbGVhbjtcbiAgICBzZWxlY3QoaXRlbTogYW55KTogdm9pZDtcbiAgICBzZWxlY3QoaXRlbUlEczogYW55W10sIGNsZWFyU2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQ7XG4gICAgZGVzZWxlY3QoLi4uYXJnczogW10gfCBbaXRlbUlEczogYW55W10sIGV2ZW50PzogRXZlbnRdKTogdm9pZDtcbn1cblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFRoZSBkZWZhdWx0IG51bWJlciBvZiBpdGVtcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgY29tYm8nc1xuICogZHJvcC1kb3duIGxpc3QgaWYgbm8gYFtpdGVtc01heEhlaWdodF1gIGlzIHNwZWNpZmllZFxuICovXG5jb25zdCBpdGVtc0luQ29udGFpbmVyID0gMTA7IC8vIFRPRE86IG1ha2UgcHJpdmF0ZSByZWFkb25seVxuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbmNvbnN0IEl0ZW1IZWlnaHRzID0ge1xuICAgIGNvbWZvcnRhYmxlOiA0MCxcbiAgICBjb3N5OiAzMixcbiAgICBjb21wYWN0OiAyOCxcbn07XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRGF0YVR5cGVzIHtcbiAgICBFTVBUWSA9ICdlbXB0eScsXG4gICAgUFJJTUlUSVZFID0gJ3ByaW1pdGl2ZScsXG4gICAgQ09NUExFWCA9ICdjb21wbGV4JyxcbiAgICBQUklNQVJZS0VZID0gJ3ZhbHVlS2V5J1xufVxuXG5leHBvcnQgZW51bSBJZ3hDb21ib1N0YXRlIHtcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIGluaXRpYWwgc3RhdGUuXG4gICAgICovXG4gICAgSU5JVElBTCA9IElneElucHV0U3RhdGUuSU5JVElBTCxcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIHZhbGlkIHN0YXRlLlxuICAgICAqL1xuICAgIFZBTElEID0gSWd4SW5wdXRTdGF0ZS5WQUxJRCxcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIGludmFsaWQgc3RhdGUuXG4gICAgICovXG4gICAgSU5WQUxJRCA9IElneElucHV0U3RhdGUuSU5WQUxJRFxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2UgaW1wbGVtZW50cyBJZ3hDb21ib0Jhc2UsIE9uSW5pdCwgRG9DaGVjayxcbiAgICBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGNhc2VTZW5zaXRpdmUgaWNvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvU2hvd1NlYXJjaENhc2VJY29uID0gdGhpcy5jb21iby5zaG93U2VhcmNoQ2FzZUljb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3Nob3dTZWFyY2hDYXNlSWNvbl09J3RydWUnPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dTZWFyY2hDYXNlSWNvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGN1c3RvbSBvdmVybGF5IHNldHRpbmdzIHRoYXQgY29udHJvbCBob3cgdGhlIGNvbWJvJ3MgbGlzdCBvZiBpdGVtcyBpcyBkaXNwbGF5ZWQuXG4gICAgICogU2V0OlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIFtvdmVybGF5U2V0dGluZ3NdID0gXCJjdXN0b21PdmVybGF5U2V0dGluZ3NcIj48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VzdG9tU2V0dGluZ3MgPSB7IHBvc2l0aW9uU3RyYXRlZ3k6IHsgc2V0dGluZ3M6IHsgdGFyZ2V0OiBteVRhcmdldCB9IH0gfTtcbiAgICAgKiAgY29tYm8ub3ZlcmxheVNldHRpbmdzID0gY3VzdG9tU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICogR2V0IGFueSBjdXN0b20gb3ZlcmxheSBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBjb21ibzpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGNvbWJvT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSBteUNvbWJvLm92ZXJsYXlTZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL2dldHMgY29tYm8gaWQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGlkID0gdGhpcy5jb21iby5pZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaWRdPSdjb21ibzEnPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNvbWJvLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHlsZSB3aWR0aCBvZiB0aGUgZWxlbWVudFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvV2lkdGggPSB0aGlzLmNvbWJvLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFt3aWR0aF09JzI1MHB4Jz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciBjdXN0b20gdmFsdWVzIGNhbiBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBjb21ib0FsbG93c0N1c3RvbVZhbHVlcyA9IHRoaXMuY29tYm8uYWxsb3dDdXN0b21WYWx1ZXM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW2FsbG93Q3VzdG9tVmFsdWVzXT0ndHJ1ZSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dDdXN0b21WYWx1ZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIGRyb3AgZG93biBsaXN0IGhlaWdodFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbXNNYXhIZWlnaHQgPSB0aGlzLmNvbWJvLml0ZW1zTWF4SGVpZ2h0O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFtpdGVtc01heEhlaWdodF09JzMyMCc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTWF4SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtc01heEhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLl9pdGVtc01heEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtSGVpZ2h0ICogaXRlbXNJbkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNNYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpdGVtc01heEhlaWdodCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pdGVtc01heEhlaWdodCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBkcm9wIGRvd24gbGlzdCBpdGVtIGhlaWdodFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbUhlaWdodCA9IHRoaXMuY29tYm8uaXRlbUhlaWdodDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaXRlbUhlaWdodF09JzMyJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXRlbUhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5faXRlbUhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLl9pdGVtSGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBJdGVtSGVpZ2h0c1t0aGlzLmRpc3BsYXlEZW5zaXR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbUhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGl0ZW1IZWlnaHQodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faXRlbUhlaWdodCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBkcm9wIGRvd24gbGlzdCB3aWR0aFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbXNXaWR0aCA9IHRoaXMuY29tYm8uaXRlbXNXaWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaXRlbXNXaWR0aF0gPSAnXCIxODBweFwiJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtc1dpZHRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgdGhlIGNvbWJvIHZhbHVlIGZpZWxkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9QbGFjZWhvbGRlciA9IHRoaXMuY29tYm8ucGxhY2Vob2xkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3BsYWNlaG9sZGVyXT0nbmV3UGxhY2VIb2xkZXInPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb21ibyBkYXRhIHNvdXJjZS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbZGF0YV09J2l0ZW1zJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgcHVibGljIHNldCBkYXRhKHZhbDogYW55W10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSAodmFsKSA/IHZhbCA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hpY2ggY29sdW1uIGluIHRoZSBkYXRhIHNvdXJjZSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdmFsdWUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9WYWx1ZUtleSA9IHRoaXMuY29tYm8udmFsdWVLZXk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3ZhbHVlS2V5XT0nbXlLZXknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlS2V5OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRpc3BsYXlLZXkodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheUtleSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoaWNoIGNvbHVtbiBpbiB0aGUgZGF0YSBzb3VyY2UgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRpc3BsYXkgdmFsdWUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9EaXNwbGF5S2V5ID0gdGhpcy5jb21iby5kaXNwbGF5S2V5O1xuICAgICAqXG4gICAgICogLy8gc2V0XG4gICAgICogdGhpcy5jb21iby5kaXNwbGF5S2V5ID0gJ3ZhbCc7XG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbZGlzcGxheUtleV09J215RGlzcGxheUtleSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaXNwbGF5S2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUtleSA/IHRoaXMuX2Rpc3BsYXlLZXkgOiB0aGlzLnZhbHVlS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtIHByb3BlcnR5IGJ5IHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBncm91cGVkIGluc2lkZSB0aGUgaXRlbXMgbGlzdC4gTm90IHVzYWJsZSBpZiBkYXRhIGlzIG5vdCBvZiB0eXBlIE9iamVjdFtdLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFtncm91cEtleV09J25ld0dyb3VwS2V5Jz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZ3JvdXBLZXkodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZ3JvdXBLZXkgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGl0ZW0gcHJvcGVydHkgYnkgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGdyb3VwZWQgaW5zaWRlIHRoZSBpdGVtcyBsaXN0LiBOb3QgdXNhYmxlIGlmIGRhdGEgaXMgbm90IG9mIHR5cGUgT2JqZWN0W10uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGN1cnJlbnRHcm91cEtleSA9IHRoaXMuY29tYm8uZ3JvdXBLZXk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cEtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZW5hYmxlZC9kaXNhYmxlcyBmaWx0ZXJpbmcgaW4gdGhlIGxpc3QuIFRoZSBkZWZhdWx0IGlzIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyBbZmlsdGVyYWJsZV09XCJmYWxzZVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbHRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0IGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyBbYXJpYUxhYmVsbGVkQnldPVwiJ2xhYmVsMSdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsbGVkYnknKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY29tYm8nKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtY29tYm8nOyAvLyBJbmRlcGVuZGVudCBvZiBkaXNwbGF5IGRlbnNpdHkgZm9yIHRoZSB0aW1lIGJlaW5nXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoYGF0dHIucm9sZWApXG4gICAgcHVibGljIHJvbGUgPSAnY29tYm9ib3gnO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKVxuICAgIHB1YmxpYyBnZXQgYXJpYUV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZHJvcGRvd24uY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJylcbiAgICBwdWJsaWMgZ2V0IGhhc1BvcFVwKCkge1xuICAgICAgICByZXR1cm4gJ2xpc3Rib3gnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW93bnMnKVxuICAgIHB1YmxpYyBnZXQgYXJpYU93bnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgY29tYm8uIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gW2Rpc2FibGVkXT1cIid0cnVlJ1wiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIGhvdyB0aGUgY29tYm8gd2lsbCBiZSBzdHlsZWQuXG4gICAgICogVGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBgbGluZWAsIGBib3hgLCBgYm9yZGVyYCBhbmQgYHNlYXJjaGAuIFRoZSBkZWZhdWx0IGlzIGBib3hgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIFt0eXBlXT1cIidsaW5lJ1wiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCk6IElneElucHV0R3JvdXBUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgfHwgdGhpcy5faW5wdXRHcm91cFR5cGUgfHwgJ2JveCc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB0eXBlKHZhbDogSWd4SW5wdXRHcm91cFR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJQ29tYm9SZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc291cmNlU3RyaW5ncykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5Db21ib1Jlc1N0cmluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElDb21ib1Jlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgZHJvcGRvd24gaXMgb3BlbmVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyBvcGVuaW5nPSdoYW5kbGVPcGVuaW5nKCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvcGVuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgZHJvcGRvd24gaXMgb3BlbmVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyAob3BlbmVkKT0naGFuZGxlT3BlbmVkKCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBiZWZvcmUgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gKGNsb3NpbmcpPSdoYW5kbGVDbG9zaW5nKCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgZHJvcGRvd24gaXMgY2xvc2VkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyAoY2xvc2VkKT0naGFuZGxlQ2xvc2VkKCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgYmVpbmcgYWRkZWQgdG8gdGhlIGRhdGEgY29sbGVjdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gKGFkZGl0aW9uKT0naGFuZGxlQWRkaXRpb25FdmVudCgkZXZlbnQpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWRkaXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPElDb21ib0l0ZW1BZGRpdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoIGlucHV0IGNoYW5nZXMgKGUuZy4gdHlwaW5nLCBwYXN0aW5nLCBjbGVhciwgZXRjLilcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChzZWFyY2hJbnB1dFVwZGF0ZSk9J2hhbmRsZVNlYXJjaElucHV0RXZlbnQoJGV2ZW50KSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlYXJjaElucHV0VXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tYm9TZWFyY2hJbnB1dEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBuZXcgY2h1bmsgb2YgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgdmlydHVhbGl6YXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChkYXRhUHJlTG9hZCk9J2hhbmRsZURhdGFQcmVsb2FkRXZlbnQoJGV2ZW50KSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRhdGFQcmVMb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxJRm9yT2ZTdGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBJVEVNUyBpbiB0aGUgY29tYm8gbGlzdFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNvbWJvLml0ZW1UZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jb21ibyAjY29tYm8+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDb21ib0l0ZW0+XG4gICAgICogICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pdGVtXCIgbGV0LWl0ZW0gbGV0LWtleT1cInZhbHVlS2V5XCI+XG4gICAgICogICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taXRlbV9fbmFtZVwiPnt7IGl0ZW1ba2V5XSB9fTwvZGl2PlxuICAgICAqICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWl0ZW1fX2Nvc3RcIj57eyBpdGVtLmNvc3QgfX08L2Rpdj5cbiAgICAgKiAgICAgICAgICA8L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9JdGVtRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIEhFQURFUiBmb3IgdGhlIGNvbWJvIGl0ZW1zIGxpc3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby5oZWFkZXJUZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jb21ibyAjY29tYm8+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDb21ib0hlYWRlcj5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tYm9fX2hlYWRlclwiPlxuICAgICAqICAgICAgICAgICAgICBUaGlzIGlzIGEgY3VzdG9tIGhlYWRlclxuICAgICAqICAgICAgICAgIDwvZGl2PlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDb21ib0hlYWRlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIEZPT1RFUiBmb3IgdGhlIGNvbWJvIGl0ZW1zIGxpc3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby5mb290ZXJUZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jb21ibyAjY29tYm8+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDb21ib0Zvb3Rlcj5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tYm9fX2Zvb3RlclwiPlxuICAgICAqICAgICAgICAgICAgICBUaGlzIGlzIGEgY3VzdG9tIGZvb3RlclxuICAgICAqICAgICAgICAgIDwvZGl2PlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDb21ib0Zvb3RlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgSEVBREVSIElURU1TIGZvciBncm91cHMgaW4gdGhlIGNvbWJvIGxpc3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby5oZWFkZXJJdGVtVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9IZWFkZXJJdGVtIGxldC1pdGVtIGxldC1rZXk9XCJncm91cEtleVwiPlxuICAgICAqICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taXRlbS0tZ3JvdXBcIj5Hcm91cCBoZWFkZXIgZm9yIHt7IGl0ZW1ba2V5XSB9fTwvZGl2PlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDb21ib0hlYWRlckl0ZW1EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaGVhZGVySXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgQUREIEJVVFRPTiBpbiB0aGUgY29tYm8gZHJvcCBkb3duXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8uYWRkSXRlbVRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNvbWJvICNjb21ibz5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENvbWJvQWRkSXRlbT5cbiAgICAgKiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29tYm9fX2FkZC1idXR0b25cIj5cbiAgICAgKiAgICAgICAgICAgICAgQ2xpY2sgdG8gYWRkIGl0ZW1cbiAgICAgKiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9BZGRJdGVtRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGFkZEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIEFERCBCVVRUT04gaW4gdGhlIGNvbWJvIGRyb3AgZG93blxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNvbWJvLmVtcHR5VGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9FbXB0eT5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tYm8tLWVtcHR5XCI+XG4gICAgICogICAgICAgICAgICAgIFRoZXJlIGFyZSBubyBpdGVtcyB0byBkaXNwbGF5XG4gICAgICogICAgICAgICAgPC9kaXY+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENvbWJvRW1wdHlEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIGNvbWJvIFRPR0dMRShvcGVuL2Nsb3NlKSBidXR0b25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby50b2dnbGVJY29uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9Ub2dnbGVJY29uIGxldC1jb2xsYXBzZWQ+XG4gICAgICogICAgICAgICAgPGlneC1pY29uPnt7IGNvbGxhcHNlZCA/ICdyZW1vdmVfY2lyY2xlJyA6ICdyZW1vdmVfY2lyY2xlX291dGxpbmUnfX08L2lneC1pY29uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDb21ib1RvZ2dsZUljb25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgdG9nZ2xlSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgY29tYm8gQ0xFQVIgYnV0dG9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8uY2xlYXJJY29uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9DbGVhckljb24+XG4gICAgICogICAgICAgICAgPGlneC1pY29uPmNsZWFyPC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9DbGVhckljb25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgY2xlYXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgcmVhZDogSWd4SW5wdXRHcm91cENvbXBvbmVudCwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKCdjb21ib0lucHV0JywgeyByZWFkOiBJZ3hJbnB1dERpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNvbWJvSW5wdXQ6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKVxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneEZvck9mRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsQ29udGFpbmVyOiBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChJZ3hGb3JPZkRpcmVjdGl2ZSwgeyByZWFkOiBJZ3hGb3JPZkRpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIHZpcnREaXI6IElneEZvck9mRGlyZWN0aXZlPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bkl0ZW1Db250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkcm9wZG93bkNvbnRhaW5lcjogRWxlbWVudFJlZiA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdwcmltaXRpdmUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgcHJpbWl0aXZlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdjb21wbGV4JywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgc2VhcmNoVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNlYXJjaFZhbHVlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuX3NlYXJjaFZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNSZW1vdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbUNvdW50ID4gMCAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZUtleSAmJlxuICAgICAgICAgICAgdGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGVzLkNPTVBMRVg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkYXRhVHlwZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGVzLkNPTVBMRVg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERhdGFUeXBlcy5QUklNSVRJVkU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpZiBjb250cm9sIGlzIHZhbGlkLCB3aGVuIHVzZWQgaW4gYSBmb3JtXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IHZhbGlkID0gdGhpcy5jb21iby52YWxpZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbGlkKCk6IElneENvbWJvU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpZiBjb250cm9sIGlzIHZhbGlkLCB3aGVuIHVzZWQgaW4gYSBmb3JtXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gc2V0XG4gICAgICogdGhpcy5jb21iby52YWxpZCA9IElneENvbWJvU3RhdGUuSU5WQUxJRDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHZhbGlkKHZhbGlkOiBJZ3hDb21ib1N0YXRlKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkID0gdmFsaWQ7XG4gICAgICAgIHRoaXMuY29tYm9JbnB1dC52YWxpZCA9IElneElucHV0U3RhdGVbSWd4Q29tYm9TdGF0ZVt2YWxpZF1dO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IGRpc3BsYXllZCBpbiB0aGUgY29tYm8gaW5wdXRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgY29tYm9WYWx1ZSA9IHRoaXMuY29tYm8udmFsdWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmlydHVhbGl6ZWQgZGF0YS4gSXQgY29udGFpbnMgYHN0YXJ0SW5kZXhgIGFuZCBgY2h1bmtTaXplYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuY29tYm8udmlydHVhbGl6YXRpb25TdGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZpcnR1YWxpemF0aW9uU3RhdGUoKTogSUZvck9mU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0RGlyLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB2aXJ0dWFsaXplZCBkYXRhLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHNldFxuICAgICAqIHRoaXMuY29tYm8udmlydHVhbGl6YXRpb25TdGF0ZShzdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB2aXJ0dWFsaXphdGlvblN0YXRlKHN0YXRlOiBJRm9yT2ZTdGF0ZSkge1xuICAgICAgICB0aGlzLnZpcnREaXIuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGRyb3AgZG93biBzdGF0ZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLmNvbWJvLmNvbGxhcHNlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGRvd24uY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdG90YWwgY291bnQgb2YgdGhlIHZpcnR1YWwgZGF0YSBpdGVtcywgd2hlbiB1c2luZyByZW1vdGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgY291bnQgPSB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdG90YWxJdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydERpci50b3RhbEl0ZW1Db3VudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0b3RhbCBjb3VudCBvZiB0aGUgdmlydHVhbCBkYXRhIGl0ZW1zLCB3aGVuIHVzaW5nIHJlbW90ZSBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHNldFxuICAgICAqIHRoaXMuY29tYm8udG90YWxJdGVtQ291bnQocmVtb3RlU2VydmljZS5jb3VudCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB0b3RhbEl0ZW1Db3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmlydERpci50b3RhbEl0ZW1Db3VudCA9IGNvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gdGhpcy5kYXRhVHlwZTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbVRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RhdGFUeXBlID09PSBEYXRhVHlwZXMuQ09NUExFWCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGxleFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZVRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjdXN0b21WYWx1ZUZsYWcgPSB0cnVlO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmaWx0ZXJWYWx1ZSA9ICcnO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkZWZhdWx0RmFsbGJhY2tHcm91cCA9ICdPdGhlcic7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGZpbHRlcmluZ09wdGlvbnM6IElDb21ib0ZpbHRlcmluZ09wdGlvbnMgPSB7XG4gICAgICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBfZGF0YSA9IFtdO1xuICAgIHByb3RlY3RlZCBfdmFsdWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2dyb3VwS2V5ID0gJyc7XG4gICAgcHJvdGVjdGVkIF9zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfZmlsdGVyZWREYXRhID0gW107XG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5S2V5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9yZW1vdGVTZWxlY3Rpb24gPSB7fTtcbiAgICBwcm90ZWN0ZWQgX3Jlc291cmNlU3RyaW5ncztcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkID0gSWd4Q29tYm9TdGF0ZS5JTklUSUFMO1xuICAgIHByb3RlY3RlZCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByb3RlY3RlZCBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBwcml2YXRlIF90eXBlID0gbnVsbDtcbiAgICBwcml2YXRlIF9kYXRhVHlwZSA9ICcnO1xuICAgIHByaXZhdGUgX2l0ZW1IZWlnaHQgPSBudWxsO1xuICAgIHByaXZhdGUgX2l0ZW1zTWF4SGVpZ2h0ID0gbnVsbDtcbiAgICBwcml2YXRlIF9vdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncztcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBkcm9wZG93bjogSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBzZWxlY3Rpb25DaGFuZ2luZzogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgc2VsZWN0aW9uU2VydmljZTogSWd4U2VsZWN0aW9uQVBJU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNvbWJvQVBJOiBJZ3hDb21ib0FQSVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfaWNvblNlcnZpY2U6IElneEljb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKSBwcm90ZWN0ZWQgX2lucHV0R3JvdXBUeXBlOiBJZ3hJbnB1dEdyb3VwVHlwZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQXJyb3dEb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRFbGVtZW50LFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRnJvbU91dHNpZGVDbGljazogW3RhcmdldEVsZW1lbnQgYXMgSFRNTEVsZW1lbnRdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZXQodGhpcy5pZCwgbmV3IFNldCgpKTtcbiAgICAgICAgdGhpcy5faWNvblNlcnZpY2UuYWRkU3ZnSWNvbkZyb21UZXh0KGNhc2VTZW5zaXRpdmUubmFtZSwgY2FzZVNlbnNpdGl2ZS52YWx1ZSwgJ2lteC1pY29ucycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YV07XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQpO1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VSZXF1aXJlZEFzdGVyaXNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0RGlyLmNodW5rUHJlbG9hZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBJRm9yT2ZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJRm9yT2ZTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGUsIHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFQcmVMb2FkLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YT8ubGVuZ3RoICYmIHRoaXMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY29tYm9BUEkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRoYXQgb3BlbnMvY2xvc2VzIHRoZSBjb21iby5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJjb21iby50b2dnbGUoKVwiPlRvZ2dsZSBDb21ibzwvYnV0dG9uPlxuICAgICAqIDxpZ3gtY29tYm8gI2NvbWJvPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZShvdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRoYXQgb3BlbnMgdGhlIGNvbWJvLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cImNvbWJvLm9wZW4oKVwiPk9wZW4gQ29tYm88L2J1dHRvbj5cbiAgICAgKiA8aWd4LWNvbWJvICNjb21ibz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRoYXQgY2xvc2VzIHRoZSBjb21iby5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJjb21iby5jbG9zZSgpXCI+Q2xvc2UgQ29tYm88L2J1dHRvbj5cbiAgICAgKiA8aWd4LWNvbWJvICNjb21ibz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBjb21ibyB2aWV3XG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJDaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjdXJyZW50IHNlbGVjdGlvbiBzdGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybnMgQXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXNcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbWJvLnNlbGVjdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgc3BlY2lmaWVkIGl0ZW1JRCBpcyBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc19pdGVtX3NlbGVjdGVkKHRoaXMuaWQsIGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRJdGVtVG9Db2xsZWN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGRlZEl0ZW0gPSB0aGlzLmRpc3BsYXlLZXkgPyB7XG4gICAgICAgICAgICBbdGhpcy52YWx1ZUtleV06IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5S2V5XTogdGhpcy5zZWFyY2hWYWx1ZVxuICAgICAgICB9IDogdGhpcy5zZWFyY2hWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBLZXkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWRkZWRJdGVtLCB7IFt0aGlzLmdyb3VwS2V5XTogdGhpcy5kZWZhdWx0RmFsbGJhY2tHcm91cCB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBvc2Ugc2hhbGxvdyBjb3B5IGluc3RlYWQgb2YgdGhpcy5kYXRhIGluIGV2ZW50IGFyZ3Mgc28gdGhpcy5kYXRhIGNhbid0IGJlIG11dGF0ZWRcbiAgICAgICAgY29uc3Qgb2xkQ29sbGVjdGlvbiA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICBjb25zdCBuZXdDb2xsZWN0aW9uID0gWy4uLnRoaXMuZGF0YSwgYWRkZWRJdGVtXTtcbiAgICAgICAgY29uc3QgYXJnczogSUNvbWJvSXRlbUFkZGl0aW9uRXZlbnQgPSB7XG4gICAgICAgICAgICBvbGRDb2xsZWN0aW9uLCBhZGRlZEl0ZW0sIG5ld0NvbGxlY3Rpb24sIG93bmVyOiB0aGlzLCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRkaXRpb24uZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnB1c2goYXJncy5hZGRlZEl0ZW0pO1xuICAgICAgICAvLyB0cmlnZ2VyIHJlLXJlbmRlclxuICAgICAgICB0aGlzLmRhdGEgPSBjbG9uZUFycmF5KHRoaXMuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMudmFsdWVLZXkgIT09IG51bGwgJiYgdGhpcy52YWx1ZUtleSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIFthcmdzLmFkZGVkSXRlbVt0aGlzLnZhbHVlS2V5XV0gOiBbYXJncy5hZGRlZEl0ZW1dLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY3VzdG9tVmFsdWVGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMudmlydERpci5zY3JvbGxUbygwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNBZGRCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZS4gSWYgdGhpcy5zZWFyY2hWYWx1ZSB3YXMgJycsIGl0IHJldHVybnMgJycgaW5zdGVhZCBvZiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVmFsdWUgIT09ICcnICYmIHRoaXMuY3VzdG9tVmFsdWVGbGFnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVJbnB1dENoYW5nZShldmVudD86IGFueSkge1xuICAgICAgICBpZiAoZXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSUNvbWJvU2VhcmNoSW5wdXRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogdHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50IDogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VXBkYXRlLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrTWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVPcGVuaW5nKGU6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGFyZ3MpO1xuICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVDbG9zaW5nKGU6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICBpZiAoZS5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIGlmICghZS5ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb21ib0lucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xvc2VkKCkge1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ1VwJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uQmx1cigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkID0gSWd4Q29tYm9TdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkID0gSWd4Q29tYm9TdGF0ZS5JTklUSUFMO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHRvZ2dsZUNhc2VTZW5zaXRpdmUoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nT3B0aW9ucyA9IHsgY2FzZVNlbnNpdGl2ZTogIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy5jYXNlU2Vuc2l0aXZlIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uU3RhdHVzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLm5nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSkgJiZcbiAgICAgICAgICAgICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciB8fCB0aGlzLm5nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLmlucHV0R3JvdXAuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRoaXMubmdDb250cm9sLmludmFsaWQgPyBJZ3hDb21ib1N0YXRlLklOVkFMSUQgOiBJZ3hDb21ib1N0YXRlLlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkID0gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZCA/IElneENvbWJvU3RhdGUuSU5WQUxJRCA6IElneENvbWJvU3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEIuUC4gMTggTWF5IDIwMjE6IElneERhdGVQaWNrZXIgZG9lcyBub3QgcmVzZXQgaXRzIHN0YXRlIHVwb24gcmVzZXRGb3JtICM5NTI2XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gSWd4Q29tYm9TdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFuYWdlUmVxdWlyZWRBc3RlcmlzaygpO1xuICAgIH07XG5cbiAgICAvKiogaWYgdGhlcmUgaXMgYSB2YWx1ZUtleSAtIG1hcCB0aGUga2V5cyB0byBkYXRhIGl0ZW1zLCBlbHNlIC0ganVzdCByZXR1cm4gdGhlIGtleXMgKi9cbiAgICBwcm90ZWN0ZWQgY29udmVydEtleXNUb0l0ZW1zKGtleXM6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbWJvQVBJLnZhbHVlS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcCBrZXlzIHZzLiBmaWx0ZXIgZGF0YSB0byByZXRhaW4gdGhlIG9yZGVyIG9mIHRoZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+IGlzTmFOdmFsdWUoa2V5KVxuICAgICAgICAgICAgPyB0aGlzLmRhdGEuZmluZChlbnRyeSA9PiBpc05hTnZhbHVlKGVudHJ5W3RoaXMudmFsdWVLZXldKSlcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmZpbmQoZW50cnkgPT4gZW50cnlbdGhpcy52YWx1ZUtleV0gPT09IGtleSkpXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlICE9PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja01hdGNoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtTWF0Y2ggPSB0aGlzLmZpbHRlcmVkRGF0YS5zb21lKHRoaXMuZmluZE1hdGNoKTtcbiAgICAgICAgdGhpcy5jdXN0b21WYWx1ZUZsYWcgPSB0aGlzLmFsbG93Q3VzdG9tVmFsdWVzICYmICFpdGVtTWF0Y2g7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRNYXRjaCA9IChlbGVtZW50OiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRpc3BsYXlLZXkgPyBlbGVtZW50W3RoaXMuZGlzcGxheUtleV0gOiBlbGVtZW50O1xuICAgICAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUgfHwgdGhpcy5jb21ib0lucHV0Py52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgbWFuYWdlUmVxdWlyZWRBc3RlcmlzaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAvLyBSdW4gdGhlIHZhbGlkYXRpb24gd2l0aCBlbXB0eSBvYmplY3QgdG8gY2hlY2sgaWYgcmVxdWlyZWQgaXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUC5NLiAxOCBNYXkgMjAyMjogSWd4Q29tYm8ncyBhc3RlcmlzayBub3QgcmVtb3ZlZCB3aGVuIHJlbW92aW5nIHJlcXVpcmVkIHZhbGlkYXRvciBkeW5hbWljYWxseSBpbiByZWFjdGl2ZSBmb3JtICMxMTU0M1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIHRoZSBzZWxlY3RlZCB2YWx1ZUtleXMgYW5kIHRoZWlyIHJlc3AuIGRpc3BsYXlLZXlzICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyUmVtb3RlRW50cmllcyhpZHM6IGFueVtdLCBhZGQgPSB0cnVlKSB7XG4gICAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0VmFsdWVEaXNwbGF5UGFpcnMoaWRzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3RlU2VsZWN0aW9uW2VudHJ5W3RoaXMudmFsdWVLZXldXSA9IGVudHJ5W3RoaXMuZGlzcGxheUtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGlkcykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdGVTZWxlY3Rpb25bZW50cnldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGBpZDogYW55W11gIHJldHVybnMgYSBtYXBwZWQgYHsgW2NvbWJvLnZhbHVlS2V5XTogYW55LCBbY29tYm8uZGlzcGxheUtleV06IGFueSB9W11gXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFZhbHVlRGlzcGxheVBhaXJzKGlkczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoZW50cnkgPT4gaWRzLmluZGV4T2YoZW50cnlbdGhpcy52YWx1ZUtleV0pID4gLTEpLm1hcChlID0+ICh7XG4gICAgICAgICAgICBbdGhpcy52YWx1ZUtleV06IGVbdGhpcy52YWx1ZUtleV0sXG4gICAgICAgICAgICBbdGhpcy5kaXNwbGF5S2V5XTogZVt0aGlzLmRpc3BsYXlLZXldXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UmVtb3RlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbjogYW55W10sIG9sZFNlbGVjdGlvbjogYW55W10pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW5ld1NlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIElmIG5ldyBzZWxlY3Rpb24gaXMgZW1wdHksIGNsZWFyIGFsbCBpdGVtc1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclJlbW90ZUVudHJpZXMob2xkU2VsZWN0aW9uLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW1zID0gb2xkU2VsZWN0aW9uLmZpbHRlcihlID0+IG5ld1NlbGVjdGlvbi5pbmRleE9mKGUpIDwgMCk7XG4gICAgICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBuZXdTZWxlY3Rpb24uZmlsdGVyKGUgPT4gb2xkU2VsZWN0aW9uLmluZGV4T2YoZSkgPCAwKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclJlbW90ZUVudHJpZXMoYWRkZWRJdGVtcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKHJlbW92ZWRJdGVtcywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcmVtb3RlU2VsZWN0aW9uKS5tYXAoZSA9PiB0aGlzLl9yZW1vdGVTZWxlY3Rpb25bZV0pLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGdldCBmaWx0ZXJlZERhdGEoKTogYW55W10gfCBudWxsO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBzZXQgZmlsdGVyZWREYXRhKHZhbDogYW55W10gfCBudWxsKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBoYW5kbGVPcGVuZWQoKTtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZm9jdXNTZWFyY2hJbnB1dChvcGVuaW5nPzogYm9vbGVhbik7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VsZWN0KG5ld0l0ZW06IGFueSk6IHZvaWQ7XG4gICAgcHVibGljIGFic3RyYWN0IHNlbGVjdChuZXdJdGVtczogQXJyYXk8YW55PiB8IGFueSwgY2xlYXJDdXJyZW50U2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZGVzZWxlY3QoLi4uYXJnczogW10gfCBbaXRlbXM6IEFycmF5PGFueT4sIGV2ZW50PzogRXZlbnRdKTogdm9pZDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb246IFNldDxhbnk+LCBldmVudD86IEV2ZW50KTogdm9pZDtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uOiBhbnlbXSwgb2xkU2VsZWN0aW9uOiBhbnlbXSk7XG59XG4iXX0=
|
|
1065
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8uY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLmNvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBVyxVQUFVLEVBQUUsWUFBWSxFQUM1RixXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUNsSSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlDLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBOEIsVUFBVSxFQUFtRCxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFtQixNQUFNLHdCQUF3QixDQUFDO0FBRXZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQzVFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUNwSSxNQUFNLG9CQUFvQixDQUFDO0FBSzVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFlLHdCQUF3QixDQUFDLENBQUM7QUErQjlGLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7OztHQUlHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7QUFFM0Qsd0JBQXdCO0FBQ3hCLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsSUFBSSxFQUFFLEVBQUU7SUFDUixPQUFPLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFFRix3QkFBd0I7QUFDeEIsTUFBTSxDQUFOLElBQVksU0FLWDtBQUxELFdBQVksU0FBUztJQUNqQiw0QkFBZSxDQUFBO0lBQ2Ysb0NBQXVCLENBQUE7SUFDdkIsZ0NBQW1CLENBQUE7SUFDbkIsb0NBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLFNBQVMsS0FBVCxTQUFTLFFBS3BCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFhWDtBQWJELFdBQVksYUFBYTtJQUNyQjs7T0FFRztJQUNILHVEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQTJCLENBQUE7SUFDM0I7O09BRUc7SUFDSCx1REFBK0IsQ0FBQTtBQUNuQyxDQUFDLEVBYlcsYUFBYSxLQUFiLGFBQWEsUUFheEI7QUFHRCxNQUFNLE9BQWdCLHFCQUFzQixTQUFRLGtCQUFrQjtJQW14QmxFLFlBQ2MsVUFBc0IsRUFDdEIsR0FBc0IsRUFDdEIsZ0JBQXdDLEVBQ3hDLFFBQTRCLEVBQzVCLFlBQTRCLEVBQ2Esc0JBQThDLEVBQzdDLGVBQWtDLEVBQ2hFLFNBQW1CO1FBQ3pDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBUnBCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUN4QyxhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDYSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzdDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNoRSxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBenhCN0M7Ozs7Ozs7Ozs7OztXQVlHO1FBRUksdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUVJLG9CQUFlLEdBQW9CLElBQUksQ0FBQztRQUUvQzs7Ozs7Ozs7Ozs7O1dBWUc7UUFHSSxPQUFFLEdBQUcsYUFBYSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBbUJyQzs7Ozs7Ozs7Ozs7O1dBWUc7UUFFSSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUEwR2pDOzs7Ozs7Ozs7Ozs7V0FZRztRQUVJLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFxRC9COzs7OztXQUtHO1FBRUksZUFBVSxHQUFHLElBQUksQ0FBQztRQVl6Qix3QkFBd0I7UUFFakIsYUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLG9EQUFvRDtRQUVuRix3QkFBd0I7UUFFakIsU0FBSSxHQUFHLFVBQVUsQ0FBQztRQW9CekI7Ozs7O1dBS0c7UUFFSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBbUN4Qjs7Ozs7O1dBTUc7UUFFSSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQW1DLENBQUM7UUFFckU7Ozs7OztXQU1HO1FBRUksV0FBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRW5EOzs7Ozs7V0FNRztRQUVJLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUVyRTs7Ozs7O1dBTUc7UUFFSSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFbkQ7Ozs7OztXQU1HO1FBRUksYUFBUSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRTlEOzs7Ozs7V0FNRztRQUVJLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBRTFFOzs7Ozs7V0FNRztRQUVJLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUVyRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FvQkc7UUFFSSxpQkFBWSxHQUFxQixJQUFJLENBQUM7UUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FtQkc7UUFFSSxtQkFBYyxHQUFxQixJQUFJLENBQUM7UUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FtQkc7UUFFSSxtQkFBYyxHQUFxQixJQUFJLENBQUM7UUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBaUJHO1FBRUksdUJBQWtCLEdBQXFCLElBQUksQ0FBQztRQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQW1CRztRQUVJLG9CQUFlLEdBQXFCLElBQUksQ0FBQztRQUVoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQW1CRztRQUVJLGtCQUFhLEdBQXFCLElBQUksQ0FBQztRQUU5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FpQkc7UUFFSSx1QkFBa0IsR0FBcUIsSUFBSSxDQUFDO1FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7OztXQWlCRztRQUVJLHNCQUFpQixHQUFxQixJQUFJLENBQUM7UUFVbEQsd0JBQXdCO1FBRWpCLGdCQUFXLEdBQWlDLElBQUksQ0FBQztRQVU5QyxzQkFBaUIsR0FBZSxJQUFJLENBQUM7UUEwSS9DLHdCQUF3QjtRQUNqQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUM5Qix3QkFBd0I7UUFDakIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEIsd0JBQXdCO1FBQ2pCLHlCQUFvQixHQUFHLE9BQU8sQ0FBQztRQUN0Qyx3QkFBd0I7UUFDakIscUJBQWdCLEdBQTJCO1lBQzlDLGFBQWEsRUFBRSxLQUFLO1NBQ3ZCLENBQUM7UUFFUSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFdEIsV0FBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDL0IsY0FBUyxHQUFjLElBQUksQ0FBQztRQUM1QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUM5Qix1QkFBa0IsR0FBZSxJQUFJLENBQUM7UUFDdEMsc0JBQWlCLEdBQXFCLElBQUksQ0FBQztRQUU3QyxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBc1JyQixvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDaEUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO29CQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO2lCQUNyRjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2lCQUN2RjthQUNKO2lCQUFNO2dCQUNILGdGQUFnRjtnQkFDaEYsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBb0JRLGNBQVMsR0FBRyxDQUFDLE9BQVksRUFBVyxFQUFFOztZQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsS0FBSSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLEtBQUssQ0FBQSxDQUFDO1lBQy9ELE9BQU8sQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxHQUFHLFdBQVcsRUFBRSxNQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRixDQUFDLENBQUM7SUExU0YsQ0FBQztJQXRzQkQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsSUFDVyxjQUFjO1FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLGNBQWMsQ0FBQyxHQUFXO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUNXLFVBQVU7UUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3RCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsVUFBVSxDQUFDLEdBQVc7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQWtDRDs7Ozs7OztPQU9HO0lBQ0gsSUFDVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFXLElBQUksQ0FBQyxHQUFpQjtRQUM3Qiw0Q0FBNEM7UUFDNUMseURBQXlEO1FBQ3pELG9FQUFvRTtRQUNwRSx3REFBd0Q7UUFDeEQsd0RBQXdEO1FBQ3hELG9GQUFvRjtRQUNwRixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBa0JELElBQ1csVUFBVSxDQUFDLEdBQVc7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQ1csUUFBUSxDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQTZCRCx3QkFBd0I7SUFDeEIsSUFDVyxZQUFZO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQ1csUUFBUTtRQUNmLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBV0Q7Ozs7OztPQU1HO0lBQ0gsSUFDVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFXLElBQUksQ0FBQyxHQUFzQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUNXLGVBQWU7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsZUFBZSxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUNELElBQVcsZUFBZSxDQUFDLEtBQTRCO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQXVSRCx3QkFBd0I7SUFDeEIsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBVyxXQUFXLENBQUMsR0FBVztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxRQUFRO1FBQ2YsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM1QjtRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsS0FBSyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsbUJBQW1CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUNEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLG1CQUFtQixDQUFDLEtBQWtCO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBQ0Q7Ozs7Ozs7T0FPRztJQUNILElBQVcsY0FBYyxDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxRQUFRO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDNUI7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBaURELHdCQUF3QjtJQUdqQixXQUFXLENBQUMsS0FBWTtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFFBQVE7UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFZLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsTUFBTSxFQUFFLGFBQWE7WUFDckIsY0FBYyxFQUFFLElBQUksc0JBQXNCLEVBQUU7WUFDNUMsZ0JBQWdCLEVBQUUsSUFBSSxvQkFBb0IsRUFBRTtZQUM1QyxLQUFLLEVBQUUsS0FBSztZQUNaLG1CQUFtQixFQUFFLElBQUk7WUFDekIsdUJBQXVCLEVBQUUsQ0FBQyxhQUE0QixDQUFDO1NBQzFELENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZUFBZTtRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFjLEVBQUUsRUFBRTtZQUNsRixNQUFNLFNBQVMsR0FBZ0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFNBQVM7O1FBQ1osSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsTUFBTSxLQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUQ7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFdBQVc7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU07UUFDVCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksSUFBSTtRQUNQLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsU0FBUztRQUNoQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLElBQVM7UUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLG1CQUFtQjs7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDakMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDdEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7U0FDNUU7UUFDRCx1RkFBdUY7UUFDdkYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBNEI7WUFDbEMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztTQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQy9ELENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsa0JBQWtCO1FBQ3JCLHlHQUF5RztRQUN6RyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDM0QsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixpQkFBaUIsQ0FBQyxLQUFXO1FBQ2hDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNyQixNQUFNLElBQUksR0FBK0I7Z0JBQ3JDLFVBQVUsRUFBRSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUNsRSxLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsS0FBSzthQUNoQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDM0I7U0FDSjtRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsQ0FBa0M7UUFDbkQsTUFBTSxJQUFJLEdBQW9DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGFBQWEsQ0FBQyxDQUFrQzs7UUFDbkQsTUFBTSxJQUFJLEdBQW9DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDVixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixZQUFZO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGFBQWEsQ0FBQyxLQUFvQjtRQUNyQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQy9DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixnQkFBZ0IsQ0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixpQkFBaUIsQ0FBQyxFQUFPO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixnQkFBZ0IsQ0FBQyxVQUFtQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLE9BQU8sQ0FBQyxLQUFZO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixNQUFNO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUN0QztTQUNKO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixtQkFBbUI7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3BGLENBQUM7SUFpQkQsdUZBQXVGO0lBQzdFLGtCQUFrQixDQUFDLElBQVc7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELHFFQUFxRTtRQUNyRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUMzRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLFVBQVU7UUFDaEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hFLENBQUM7SUFRUyxzQkFBc0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO2dCQUNsQyx3RUFBd0U7Z0JBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFxQixDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNILHlIQUF5SDtnQkFDekgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDO0lBRUQscUZBQXFGO0lBQzNFLHFCQUFxQixDQUFDLEdBQVUsRUFBRSxHQUFHLEdBQUcsSUFBSTtRQUNsRCxJQUFJLEdBQUcsRUFBRTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3hFO1NBQ0o7YUFBTTtZQUNILEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxFQUFFO2dCQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2QztTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sb0JBQW9CLENBQUMsR0FBVTtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVTLGtCQUFrQixDQUFDLFlBQW1CLEVBQUUsWUFBbUI7UUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDdEIsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELElBQWMsUUFBUTtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzlFLHdFQUF3RTtZQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBcUIsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDbEM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7WUFwb0NKLFNBQVM7OztZQWpHOEQsVUFBVTtZQUEvRCxpQkFBaUI7WUFRM0Isc0JBQXNCO1lBUXRCLGtCQUFrQjtZQUxsQixjQUFjOzRDQWczQmQsUUFBUSxZQUFJLE1BQU0sU0FBQyxtQkFBbUI7NENBQ3RDLFFBQVEsWUFBSSxNQUFNLFNBQUMsb0JBQW9CO1lBMzNCTyxRQUFRLHVCQTQzQnRELFFBQVE7OztpQ0E1d0JaLEtBQUs7OEJBbUJMLEtBQUs7aUJBZ0JMLFdBQVcsU0FBQyxTQUFTLGNBQ3JCLEtBQUs7b0JBZ0JMLFdBQVcsU0FBQyxhQUFhLGNBQ3pCLEtBQUs7Z0NBZ0JMLEtBQUs7NkJBZ0JMLEtBQUs7eUJBeUJMLEtBQUs7eUJBeUJMLEtBQUs7MEJBZ0JMLEtBQUs7bUJBV0wsS0FBSzt1QkEyQkwsS0FBSzt5QkFHTCxLQUFLO3VCQWtDTCxLQUFLO3lCQXVCTCxLQUFLOzZCQVNMLEtBQUssWUFDTCxXQUFXLFNBQUMsc0JBQXNCO3VCQUlsQyxXQUFXLFNBQUMsaUJBQWlCO21CQUk3QixXQUFXLFNBQUMsV0FBVzsyQkFJdkIsV0FBVyxTQUFDLG9CQUFvQjt1QkFNaEMsV0FBVyxTQUFDLG9CQUFvQjt1QkFNaEMsV0FBVyxTQUFDLGdCQUFnQjt1QkFXNUIsS0FBSzttQkFVTCxLQUFLOzhCQWVMLEtBQUs7c0JBa0JMLE1BQU07cUJBVU4sTUFBTTtzQkFVTixNQUFNO3FCQVVOLE1BQU07dUJBVU4sTUFBTTtnQ0FVTixNQUFNOzBCQVVOLE1BQU07MkJBd0JOLFlBQVksU0FBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7NkJBdUJ6RCxZQUFZLFNBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFOzZCQXVCM0QsWUFBWSxTQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtpQ0FxQjNELFlBQVksU0FBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7OEJBdUIvRCxZQUFZLFNBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFOzRCQXVCNUQsWUFBWSxTQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtpQ0FxQjFELFlBQVksU0FBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0NBcUIvRCxZQUFZLFNBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO3lCQUk5RCxTQUFTLFNBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7eUJBSXRFLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTswQkFJakUsU0FBUyxTQUFDLGFBQWE7cUNBSXZCLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7c0JBRzdDLFNBQVMsU0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dDQUd0RSxTQUFTLFNBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dDQUduRCxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzhCQUcxRCxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzBCQXFMeEQsWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQzVDLFlBQVksU0FBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNhc2VTZW5zaXRpdmUgfSBmcm9tICdAaWduaXRldWkvbWF0ZXJpYWwtaWNvbnMtZXh0ZW5kZWQnO1xuaW1wb3J0IHsgbm9vcCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlCYXNlLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIGNsb25lQXJyYXksIElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzLCBpc05hTnZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJRm9yT2ZTdGF0ZSwgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4uL2lucHV0LWdyb3VwL2lucHV0R3JvdXBUeXBlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LCBBdXRvUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BUElTZXJ2aWNlIH0gZnJvbSAnLi9jb21iby5hcGknO1xuaW1wb3J0IHtcbiAgICBJZ3hDb21ib0FkZEl0ZW1EaXJlY3RpdmUsIElneENvbWJvQ2xlYXJJY29uRGlyZWN0aXZlLCBJZ3hDb21ib0VtcHR5RGlyZWN0aXZlLFxuICAgIElneENvbWJvRm9vdGVyRGlyZWN0aXZlLCBJZ3hDb21ib0hlYWRlckRpcmVjdGl2ZSwgSWd4Q29tYm9IZWFkZXJJdGVtRGlyZWN0aXZlLCBJZ3hDb21ib0l0ZW1EaXJlY3RpdmUsIElneENvbWJvVG9nZ2xlSWNvbkRpcmVjdGl2ZVxufSBmcm9tICcuL2NvbWJvLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgICBJQ29tYm9GaWx0ZXJpbmdPcHRpb25zLCBJQ29tYm9JdGVtQWRkaXRpb25FdmVudCwgSUNvbWJvU2VhcmNoSW5wdXRFdmVudEFyZ3Ncbn0gZnJvbSAnLi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElDb21ib1Jlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9jb21iby1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuXG5leHBvcnQgY29uc3QgSUdYX0NPTUJPX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJZ3hDb21ib0Jhc2U+KCdJZ3hDb21ib0NvbXBvbmVudFRva2VuJyk7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCBUT0RPOiBFdmFsdWF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBJZ3hDb21ib0Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGF0YTogYW55W10gfCBudWxsO1xuICAgIHZhbHVlS2V5OiBzdHJpbmc7XG4gICAgZ3JvdXBLZXk6IHN0cmluZztcbiAgICBpc1JlbW90ZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJlZERhdGE6IGFueVtdIHwgbnVsbDtcbiAgICB0b3RhbEl0ZW1Db3VudDogbnVtYmVyO1xuICAgIGl0ZW1zTWF4SGVpZ2h0OiBudW1iZXI7XG4gICAgaXRlbUhlaWdodDogbnVtYmVyO1xuICAgIHNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gICAgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgY29tYm9JbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICBvcGVuZWQ6IEV2ZW50RW1pdHRlcjxJQmFzZUV2ZW50QXJncz47XG4gICAgb3BlbmluZzogRXZlbnRFbWl0dGVyPENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzPjtcbiAgICBjbG9zaW5nOiBFdmVudEVtaXR0ZXI8Q2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3M+O1xuICAgIGNsb3NlZDogRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPjtcbiAgICBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTogdm9pZDtcbiAgICB0cmlnZ2VyQ2hlY2soKTogdm9pZDtcbiAgICBhZGRJdGVtVG9Db2xsZWN0aW9uKCk6IHZvaWQ7XG4gICAgaXNBZGRCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW47XG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ/OiBzdHJpbmcpOiB2b2lkO1xuICAgIGlzSXRlbVNlbGVjdGVkKGl0ZW1JRDogYW55KTogYm9vbGVhbjtcbiAgICBzZWxlY3QoaXRlbTogYW55KTogdm9pZDtcbiAgICBzZWxlY3QoaXRlbUlEczogYW55W10sIGNsZWFyU2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQ7XG4gICAgZGVzZWxlY3QoLi4uYXJnczogW10gfCBbaXRlbUlEczogYW55W10sIGV2ZW50PzogRXZlbnRdKTogdm9pZDtcbn1cblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFRoZSBkZWZhdWx0IG51bWJlciBvZiBpdGVtcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgY29tYm8nc1xuICogZHJvcC1kb3duIGxpc3QgaWYgbm8gYFtpdGVtc01heEhlaWdodF1gIGlzIHNwZWNpZmllZFxuICovXG5jb25zdCBpdGVtc0luQ29udGFpbmVyID0gMTA7IC8vIFRPRE86IG1ha2UgcHJpdmF0ZSByZWFkb25seVxuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbmNvbnN0IEl0ZW1IZWlnaHRzID0ge1xuICAgIGNvbWZvcnRhYmxlOiA0MCxcbiAgICBjb3N5OiAzMixcbiAgICBjb21wYWN0OiAyOCxcbn07XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRGF0YVR5cGVzIHtcbiAgICBFTVBUWSA9ICdlbXB0eScsXG4gICAgUFJJTUlUSVZFID0gJ3ByaW1pdGl2ZScsXG4gICAgQ09NUExFWCA9ICdjb21wbGV4JyxcbiAgICBQUklNQVJZS0VZID0gJ3ZhbHVlS2V5J1xufVxuXG5leHBvcnQgZW51bSBJZ3hDb21ib1N0YXRlIHtcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIGluaXRpYWwgc3RhdGUuXG4gICAgICovXG4gICAgSU5JVElBTCA9IElneElucHV0U3RhdGUuSU5JVElBTCxcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIHZhbGlkIHN0YXRlLlxuICAgICAqL1xuICAgIFZBTElEID0gSWd4SW5wdXRTdGF0ZS5WQUxJRCxcbiAgICAvKipcbiAgICAgKiBDb21ibyB3aXRoIGludmFsaWQgc3RhdGUuXG4gICAgICovXG4gICAgSU5WQUxJRCA9IElneElucHV0U3RhdGUuSU5WQUxJRFxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2UgaW1wbGVtZW50cyBJZ3hDb21ib0Jhc2UsIE9uSW5pdCwgRG9DaGVjayxcbiAgICBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGNhc2VTZW5zaXRpdmUgaWNvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvU2hvd1NlYXJjaENhc2VJY29uID0gdGhpcy5jb21iby5zaG93U2VhcmNoQ2FzZUljb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3Nob3dTZWFyY2hDYXNlSWNvbl09J3RydWUnPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dTZWFyY2hDYXNlSWNvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGN1c3RvbSBvdmVybGF5IHNldHRpbmdzIHRoYXQgY29udHJvbCBob3cgdGhlIGNvbWJvJ3MgbGlzdCBvZiBpdGVtcyBpcyBkaXNwbGF5ZWQuXG4gICAgICogU2V0OlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIFtvdmVybGF5U2V0dGluZ3NdID0gXCJjdXN0b21PdmVybGF5U2V0dGluZ3NcIj48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VzdG9tU2V0dGluZ3MgPSB7IHBvc2l0aW9uU3RyYXRlZ3k6IHsgc2V0dGluZ3M6IHsgdGFyZ2V0OiBteVRhcmdldCB9IH0gfTtcbiAgICAgKiAgY29tYm8ub3ZlcmxheVNldHRpbmdzID0gY3VzdG9tU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICogR2V0IGFueSBjdXN0b20gb3ZlcmxheSBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBjb21ibzpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGNvbWJvT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSBteUNvbWJvLm92ZXJsYXlTZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL2dldHMgY29tYm8gaWQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGlkID0gdGhpcy5jb21iby5pZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaWRdPSdjb21ibzEnPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNvbWJvLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHlsZSB3aWR0aCBvZiB0aGUgZWxlbWVudFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvV2lkdGggPSB0aGlzLmNvbWJvLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFt3aWR0aF09JzI1MHB4Jz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciBjdXN0b20gdmFsdWVzIGNhbiBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBjb21ib0FsbG93c0N1c3RvbVZhbHVlcyA9IHRoaXMuY29tYm8uYWxsb3dDdXN0b21WYWx1ZXM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW2FsbG93Q3VzdG9tVmFsdWVzXT0ndHJ1ZSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dDdXN0b21WYWx1ZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIGRyb3AgZG93biBsaXN0IGhlaWdodFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbXNNYXhIZWlnaHQgPSB0aGlzLmNvbWJvLml0ZW1zTWF4SGVpZ2h0O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFtpdGVtc01heEhlaWdodF09JzMyMCc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTWF4SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtc01heEhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLl9pdGVtc01heEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtSGVpZ2h0ICogaXRlbXNJbkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNNYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBpdGVtc01heEhlaWdodCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9pdGVtc01heEhlaWdodCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBkcm9wIGRvd24gbGlzdCBpdGVtIGhlaWdodFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbUhlaWdodCA9IHRoaXMuY29tYm8uaXRlbUhlaWdodDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaXRlbUhlaWdodF09JzMyJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXRlbUhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5faXRlbUhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLl9pdGVtSGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBJdGVtSGVpZ2h0c1t0aGlzLmRpc3BsYXlEZW5zaXR5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbUhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGl0ZW1IZWlnaHQodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faXRlbUhlaWdodCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBkcm9wIGRvd24gbGlzdCB3aWR0aFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbXNXaWR0aCA9IHRoaXMuY29tYm8uaXRlbXNXaWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbaXRlbXNXaWR0aF0gPSAnXCIxODBweFwiJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtc1dpZHRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgdGhlIGNvbWJvIHZhbHVlIGZpZWxkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9QbGFjZWhvbGRlciA9IHRoaXMuY29tYm8ucGxhY2Vob2xkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3BsYWNlaG9sZGVyXT0nbmV3UGxhY2VIb2xkZXInPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb21ibyBkYXRhIHNvdXJjZS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbZGF0YV09J2l0ZW1zJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgcHVibGljIHNldCBkYXRhKHZhbDogYW55W10gfCBudWxsKSB7XG4gICAgICAgIC8vIGlneEZvciBkaXJlY3RpdmUgaWdub3JlcyB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgIC8vIGlmIHRoZSBjb21ibyB1c2VzIHNpbXBsZSBkYXRhIGFuZCBmaWx0ZXJpbmcgaXMgYXBwbGllZFxuICAgICAgICAvLyBhbiBlcnJvciB3aWxsIG9jY3VyIGR1ZSB0byB0aGUgbWlzbWF0Y2ggb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YVxuICAgICAgICAvLyB0aGlzIGNhbiBvY2N1ciBkdXJpbmcgZmlsdGVyaW5nIGZvciB0aGUgaWd4LWNvbWJvIGFuZFxuICAgICAgICAvLyBkdXJpbmcgZmlsdGVyaW5nICYgc2VsZWN0aW9uIGZvciB0aGUgaWd4LXNpbXBsZS1jb21ib1xuICAgICAgICAvLyBzaW5jZSB0aGUgc2ltcGxlIGNvbWJvJ3MgaW5wdXQgaXMgYm90aCBhIGNvbnRhaW5lciBmb3IgdGhlIHNlbGVjdGlvbiBhbmQgYSBmaWx0ZXJcbiAgICAgICAgdGhpcy5fZGF0YSA9ICh2YWwpID8gdmFsLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoaWNoIGNvbHVtbiBpbiB0aGUgZGF0YSBzb3VyY2UgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvVmFsdWVLZXkgPSB0aGlzLmNvbWJvLnZhbHVlS2V5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWNvbWJvIFt2YWx1ZUtleV09J215S2V5Jz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUtleTogc3RyaW5nID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkaXNwbGF5S2V5KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlLZXkgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGljaCBjb2x1bW4gaW4gdGhlIGRhdGEgc291cmNlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkaXNwbGF5IHZhbHVlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvRGlzcGxheUtleSA9IHRoaXMuY29tYm8uZGlzcGxheUtleTtcbiAgICAgKlxuICAgICAqIC8vIHNldFxuICAgICAqIHRoaXMuY29tYm8uZGlzcGxheUtleSA9ICd2YWwnO1xuICAgICAqXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW2Rpc3BsYXlLZXldPSdteURpc3BsYXlLZXknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzcGxheUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlLZXkgPyB0aGlzLl9kaXNwbGF5S2V5IDogdGhpcy52YWx1ZUtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaXRlbSBwcm9wZXJ0eSBieSB3aGljaCBpdGVtcyBzaG91bGQgYmUgZ3JvdXBlZCBpbnNpZGUgdGhlIGl0ZW1zIGxpc3QuIE5vdCB1c2FibGUgaWYgZGF0YSBpcyBub3Qgb2YgdHlwZSBPYmplY3RbXS5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1jb21ibyBbZ3JvdXBLZXldPSduZXdHcm91cEtleSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGdyb3VwS2V5KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2dyb3VwS2V5ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBpdGVtIHByb3BlcnR5IGJ5IHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBncm91cGVkIGluc2lkZSB0aGUgaXRlbXMgbGlzdC4gTm90IHVzYWJsZSBpZiBkYXRhIGlzIG5vdCBvZiB0eXBlIE9iamVjdFtdLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBjdXJyZW50R3JvdXBLZXkgPSB0aGlzLmNvbWJvLmdyb3VwS2V5O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JvdXBLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgZmlsdGVyaW5nIGluIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gW2ZpbHRlcmFibGVdPVwiZmFsc2VcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldCBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gW2FyaWFMYWJlbGxlZEJ5XT1cIidsYWJlbDEnXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JylcbiAgICBwdWJsaWMgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNvbWJvJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWNvbWJvJzsgLy8gSW5kZXBlbmRlbnQgb2YgZGlzcGxheSBkZW5zaXR5IGZvciB0aGUgdGltZSBiZWluZ1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKGBhdHRyLnJvbGVgKVxuICAgIHB1YmxpYyByb2xlID0gJ2NvbWJvYm94JztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRyb3Bkb3duLmNvbGxhcHNlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpXG4gICAgcHVibGljIGdldCBoYXNQb3BVcCgpIHtcbiAgICAgICAgcmV0dXJuICdsaXN0Ym94JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFPd25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93bi5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBlbmFibGVkL2Rpc2FibGVzIGNvbWJvLiBUaGUgZGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIFtkaXNhYmxlZF09XCIndHJ1ZSdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyBob3cgdGhlIGNvbWJvIHdpbGwgYmUgc3R5bGVkLlxuICAgICAqIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmUgYGxpbmVgLCBgYm94YCwgYGJvcmRlcmAgYW5kIGBzZWFyY2hgLiBUaGUgZGVmYXVsdCBpcyBgYm94YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyBbdHlwZV09XCInbGluZSdcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBJZ3hJbnB1dEdyb3VwVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlIHx8IHRoaXMuX2lucHV0R3JvdXBUeXBlIHx8ICdib3gnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWw6IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUNvbWJvUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuQ29tYm9SZXNTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ29tYm9SZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBiZWZvcmUgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gb3BlbmluZz0naGFuZGxlT3BlbmluZygkZXZlbnQpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gKG9wZW5lZCk9J2hhbmRsZU9wZW5lZCgkZXZlbnQpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIHRoZSBkcm9wZG93biBpcyBjbG9zZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChjbG9zaW5nKT0naGFuZGxlQ2xvc2luZygkZXZlbnQpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xvc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29tYm8gKGNsb3NlZCk9J2hhbmRsZUNsb3NlZCgkZXZlbnQpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGJlaW5nIGFkZGVkIHRvIHRoZSBkYXRhIGNvbGxlY3Rpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChhZGRpdGlvbik9J2hhbmRsZUFkZGl0aW9uRXZlbnQoJGV2ZW50KSc+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFkZGl0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29tYm9JdGVtQWRkaXRpb25FdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHNlYXJjaCBpbnB1dCBjaGFuZ2VzIChlLmcuIHR5cGluZywgcGFzdGluZywgY2xlYXIsIGV0Yy4pXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyAoc2VhcmNoSW5wdXRVcGRhdGUpPSdoYW5kbGVTZWFyY2hJbnB1dEV2ZW50KCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hJbnB1dFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbWJvU2VhcmNoSW5wdXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gbmV3IGNodW5rIG9mIGRhdGEgaXMgbG9hZGVkIGZyb20gdGhlIHZpcnR1YWxpemF0aW9uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb21ibyAoZGF0YVByZUxvYWQpPSdoYW5kbGVEYXRhUHJlbG9hZEV2ZW50KCRldmVudCknPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkYXRhUHJlTG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUZvck9mU3RhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgSVRFTVMgaW4gdGhlIGNvbWJvIGxpc3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby5pdGVtVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9JdGVtPlxuICAgICAqICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taXRlbVwiIGxldC1pdGVtIGxldC1rZXk9XCJ2YWx1ZUtleVwiPlxuICAgICAqICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWl0ZW1fX25hbWVcIj57eyBpdGVtW2tleV0gfX08L2Rpdj5cbiAgICAgKiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pdGVtX19jb3N0XCI+e3sgaXRlbS5jb3N0IH19PC9kaXY+XG4gICAgICogICAgICAgICAgPC9kaXY+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENvbWJvSXRlbURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBIRUFERVIgZm9yIHRoZSBjb21ibyBpdGVtcyBsaXN0XG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8uaGVhZGVyVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9IZWFkZXI+XG4gICAgICogICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvX19oZWFkZXJcIj5cbiAgICAgKiAgICAgICAgICAgICAgVGhpcyBpcyBhIGN1c3RvbSBoZWFkZXJcbiAgICAgKiAgICAgICAgICA8L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9IZWFkZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBGT09URVIgZm9yIHRoZSBjb21ibyBpdGVtcyBsaXN0XG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8uZm9vdGVyVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtY29tYm8gI2NvbWJvPlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4Q29tYm9Gb290ZXI+XG4gICAgICogICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvX19mb290ZXJcIj5cbiAgICAgKiAgICAgICAgICAgICAgVGhpcyBpcyBhIGN1c3RvbSBmb290ZXJcbiAgICAgKiAgICAgICAgICA8L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9Gb290ZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIEhFQURFUiBJVEVNUyBmb3IgZ3JvdXBzIGluIHRoZSBjb21ibyBsaXN0XG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8uaGVhZGVySXRlbVRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNvbWJvICNjb21ibz5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENvbWJvSGVhZGVySXRlbSBsZXQtaXRlbSBsZXQta2V5PVwiZ3JvdXBLZXlcIj5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWl0ZW0tLWdyb3VwXCI+R3JvdXAgaGVhZGVyIGZvciB7eyBpdGVtW2tleV0gfX08L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9IZWFkZXJJdGVtRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGhlYWRlckl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIEFERCBCVVRUT04gaW4gdGhlIGNvbWJvIGRyb3AgZG93blxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNvbWJvLmFkZEl0ZW1UZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1jb21ibyAjY29tYm8+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hDb21ib0FkZEl0ZW0+XG4gICAgICogICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbWJvX19hZGQtYnV0dG9uXCI+XG4gICAgICogICAgICAgICAgICAgIENsaWNrIHRvIGFkZCBpdGVtXG4gICAgICogICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENvbWJvQWRkSXRlbURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBhZGRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBBREQgQlVUVE9OIGluIHRoZSBjb21ibyBkcm9wIGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5jb21iby5lbXB0eVRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNvbWJvICNjb21ibz5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENvbWJvRW1wdHk+XG4gICAgICogICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvLS1lbXB0eVwiPlxuICAgICAqICAgICAgICAgICAgICBUaGVyZSBhcmUgbm8gaXRlbXMgdG8gZGlzcGxheVxuICAgICAqICAgICAgICAgIDwvZGl2PlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDb21ib0VtcHR5RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBjb21ibyBUT0dHTEUob3Blbi9jbG9zZSkgYnV0dG9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuY29tYm8udG9nZ2xlSWNvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNvbWJvICNjb21ibz5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENvbWJvVG9nZ2xlSWNvbiBsZXQtY29sbGFwc2VkPlxuICAgICAqICAgICAgICAgIDxpZ3gtaWNvbj57eyBjb2xsYXBzZWQgPyAncmVtb3ZlX2NpcmNsZScgOiAncmVtb3ZlX2NpcmNsZV9vdXRsaW5lJ319PC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4Q29tYm9Ub2dnbGVJY29uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIHRvZ2dsZUljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIGNvbWJvIENMRUFSIGJ1dHRvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LmNvbWJvLmNsZWFySWNvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LWNvbWJvICNjb21ibz5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneENvbWJvQ2xlYXJJY29uPlxuICAgICAqICAgICAgICAgIDxpZ3gtaWNvbj5jbGVhcjwvaWd4LWljb24+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneENvbWJvQ2xlYXJJY29uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGNsZWFySWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXAnLCB7IHJlYWQ6IElneElucHV0R3JvdXBDb21wb25lbnQsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnY29tYm9JbnB1dCcsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBjb21ib0lucHV0OiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JylcbiAgICBwdWJsaWMgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hGb3JPZkRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgdmlydHVhbFNjcm9sbENvbnRhaW5lcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4Rm9yT2ZEaXJlY3RpdmUsIHsgcmVhZDogSWd4Rm9yT2ZEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCB2aXJ0RGlyOiBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd25JdGVtQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZHJvcGRvd25Db250YWluZXI6IEVsZW1lbnRSZWYgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgncHJpbWl0aXZlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIHByaW1pdGl2ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29tcGxleCcsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBjb21wbGV4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBzZWFyY2hWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdmFsO1xuICAgICAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzUmVtb3RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbEl0ZW1Db3VudCA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWVLZXkgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlcy5DT01QTEVYO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZGF0YVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlcy5DT01QTEVYO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEYXRhVHlwZXMuUFJJTUlUSVZFO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaWYgY29udHJvbCBpcyB2YWxpZCwgd2hlbiB1c2VkIGluIGEgZm9ybVxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCB2YWxpZCA9IHRoaXMuY29tYm8udmFsaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZCgpOiBJZ3hDb21ib1N0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaWYgY29udHJvbCBpcyB2YWxpZCwgd2hlbiB1c2VkIGluIGEgZm9ybVxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHNldFxuICAgICAqIHRoaXMuY29tYm8udmFsaWQgPSBJZ3hDb21ib1N0YXRlLklOVkFMSUQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB2YWxpZCh2YWxpZDogSWd4Q29tYm9TdGF0ZSkge1xuICAgICAgICB0aGlzLl92YWxpZCA9IHZhbGlkO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQudmFsaWQgPSBJZ3hJbnB1dFN0YXRlW0lneENvbWJvU3RhdGVbdmFsaWRdXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIGlucHV0XG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGNvbWJvVmFsdWUgPSB0aGlzLmNvbWJvLnZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpcnR1YWxpemVkIGRhdGEuIEl0IGNvbnRhaW5zIGBzdGFydEluZGV4YCBhbmQgYGNodW5rU2l6ZWBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLmNvbWJvLnZpcnR1YWxpemF0aW9uU3RhdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB2aXJ0dWFsaXphdGlvblN0YXRlKCk6IElGb3JPZlN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydERpci5zdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmlydHVhbGl6ZWQgZGF0YS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBzZXRcbiAgICAgKiB0aGlzLmNvbWJvLnZpcnR1YWxpemF0aW9uU3RhdGUoc3RhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgdmlydHVhbGl6YXRpb25TdGF0ZShzdGF0ZTogSUZvck9mU3RhdGUpIHtcbiAgICAgICAgdGhpcy52aXJ0RGlyLnN0YXRlID0gc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBkcm9wIGRvd24gc3RhdGUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5jb21iby5jb2xsYXBzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duLmNvbGxhcHNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRvdGFsIGNvdW50IG9mIHRoZSB2aXJ0dWFsIGRhdGEgaXRlbXMsIHdoZW4gdXNpbmcgcmVtb3RlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGNvdW50ID0gdGhpcy5jb21iby50b3RhbEl0ZW1Db3VudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRvdGFsSXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpcnREaXIudG90YWxJdGVtQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdG90YWwgY291bnQgb2YgdGhlIHZpcnR1YWwgZGF0YSBpdGVtcywgd2hlbiB1c2luZyByZW1vdGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBzZXRcbiAgICAgKiB0aGlzLmNvbWJvLnRvdGFsSXRlbUNvdW50KHJlbW90ZVNlcnZpY2UuY291bnQpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgdG90YWxJdGVtQ291bnQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZpcnREaXIudG90YWxJdGVtQ291bnQgPSBjb3VudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICB0aGlzLl9kYXRhVHlwZSA9IHRoaXMuZGF0YVR5cGU7XG4gICAgICAgIGlmICh0aGlzLml0ZW1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kYXRhVHlwZSA9PT0gRGF0YVR5cGVzLkNPTVBMRVgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXhUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcmltaXRpdmVUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3VzdG9tVmFsdWVGbGFnID0gdHJ1ZTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZmlsdGVyVmFsdWUgPSAnJztcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGVmYXVsdEZhbGxiYWNrR3JvdXAgPSAnT3RoZXInO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmaWx0ZXJpbmdPcHRpb25zOiBJQ29tYm9GaWx0ZXJpbmdPcHRpb25zID0ge1xuICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgX2RhdGEgPSBbXTtcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlID0gJyc7XG4gICAgcHJvdGVjdGVkIF9ncm91cEtleSA9ICcnO1xuICAgIHByb3RlY3RlZCBfc2VhcmNoVmFsdWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2ZpbHRlcmVkRGF0YSA9IFtdO1xuICAgIHByb3RlY3RlZCBfZGlzcGxheUtleTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcmVtb3RlU2VsZWN0aW9uID0ge307XG4gICAgcHJvdGVjdGVkIF9yZXNvdXJjZVN0cmluZ3M7XG4gICAgcHJvdGVjdGVkIF92YWxpZCA9IElneENvbWJvU3RhdGUuSU5JVElBTDtcbiAgICBwcm90ZWN0ZWQgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSBudWxsO1xuICAgIHByb3RlY3RlZCBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwcm90ZWN0ZWQgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcm90ZWN0ZWQgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuXG4gICAgcHJpdmF0ZSBfdHlwZSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGF0YVR5cGUgPSAnJztcbiAgICBwcml2YXRlIF9pdGVtSGVpZ2h0ID0gbnVsbDtcbiAgICBwcml2YXRlIF9pdGVtc01heEhlaWdodCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZHJvcGRvd246IElneENvbWJvRHJvcERvd25Db21wb25lbnQ7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VsZWN0aW9uQ2hhbmdpbmc6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2ljb25TZXJ2aWNlOiBJZ3hJY29uU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJvdGVjdGVkIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkFycm93RG93bihldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLl9pbmplY3Rvci5nZXQ8TmdDb250cm9sPihOZ0NvbnRyb2wsIG51bGwpO1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWxlbWVudCxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2s6IFt0YXJnZXRFbGVtZW50IGFzIEhUTUxFbGVtZW50XVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2V0KHRoaXMuaWQsIG5ldyBTZXQoKSk7XG4gICAgICAgIHRoaXMuX2ljb25TZXJ2aWNlLmFkZFN2Z0ljb25Gcm9tVGV4dChjYXNlU2Vuc2l0aXZlLm5hbWUsIGNhc2VTZW5zaXRpdmUudmFsdWUsICdpbXgtaWNvbnMnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkKTtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlUmVxdWlyZWRBc3RlcmlzaygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlydERpci5jaHVua1ByZWxvYWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogSUZvck9mU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50QXJnczogSUZvck9mU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBlLCB7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJlTG9hZC5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5jcmVhdGVEaXNwbGF5VGV4dCh0aGlzLnNlbGVjdGlvbiwgW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNvbWJvQVBJLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5jbGVhcih0aGlzLmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0aGF0IG9wZW5zL2Nsb3NlcyB0aGUgY29tYm8uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwiY29tYm8udG9nZ2xlKClcIj5Ub2dnbGUgQ29tYm88L2J1dHRvbj5cbiAgICAgKiA8aWd4LWNvbWJvICNjb21ibz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9vdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGUob3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0aGF0IG9wZW5zIHRoZSBjb21iby5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJjb21iby5vcGVuKClcIj5PcGVuIENvbWJvPC9idXR0b24+XG4gICAgICogPGlneC1jb21ibyAjY29tYm8+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4ob3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0aGF0IGNsb3NlcyB0aGUgY29tYm8uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwiY29tYm8uY2xvc2UoKVwiPkNsb3NlIENvbWJvPC9idXR0b24+XG4gICAgICogPGlneC1jb21ibyAjY29tYm8+PC9pZ3gtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgY29tYm8gdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VycmVudCBzZWxlY3Rpb24gc3RhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5jb21iby5zZWxlY3Rpb247XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0KHRoaXMuaWQpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIHNwZWNpZmllZCBpdGVtSUQgaXMgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNfaXRlbV9zZWxlY3RlZCh0aGlzLmlkLCBpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYWRkSXRlbVRvQ29sbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRkZWRJdGVtID0gdGhpcy5kaXNwbGF5S2V5ID8ge1xuICAgICAgICAgICAgW3RoaXMudmFsdWVLZXldOiB0aGlzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgW3RoaXMuZGlzcGxheUtleV06IHRoaXMuc2VhcmNoVmFsdWVcbiAgICAgICAgfSA6IHRoaXMuc2VhcmNoVmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZGVkSXRlbSwgeyBbdGhpcy5ncm91cEtleV06IHRoaXMuZGVmYXVsdEZhbGxiYWNrR3JvdXAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwb3NlIHNoYWxsb3cgY29weSBpbnN0ZWFkIG9mIHRoaXMuZGF0YSBpbiBldmVudCBhcmdzIHNvIHRoaXMuZGF0YSBjYW4ndCBiZSBtdXRhdGVkXG4gICAgICAgIGNvbnN0IG9sZENvbGxlY3Rpb24gPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvbiA9IFsuLi50aGlzLmRhdGEsIGFkZGVkSXRlbV07XG4gICAgICAgIGNvbnN0IGFyZ3M6IElDb21ib0l0ZW1BZGRpdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkQ29sbGVjdGlvbiwgYWRkZWRJdGVtLCBuZXdDb2xsZWN0aW9uLCBvd25lcjogdGhpcywgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZGl0aW9uLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKGFyZ3MuYWRkZWRJdGVtKTtcbiAgICAgICAgLy8gdHJpZ2dlciByZS1yZW5kZXJcbiAgICAgICAgdGhpcy5kYXRhID0gY2xvbmVBcnJheSh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnZhbHVlS2V5ICE9PSBudWxsICYmIHRoaXMudmFsdWVLZXkgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICBbYXJncy5hZGRlZEl0ZW1bdGhpcy52YWx1ZUtleV1dIDogW2FyZ3MuYWRkZWRJdGVtXSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmN1c3RvbVZhbHVlRmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLnZpcnREaXIuc2Nyb2xsVG8oMCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGlzQWRkQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiBhIGJvb2xlYW4gdmFsdWUuIElmIHRoaXMuc2VhcmNoVmFsdWUgd2FzICcnLCBpdCByZXR1cm5zICcnIGluc3RlYWQgb2YgZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFZhbHVlICE9PSAnJyAmJiB0aGlzLmN1c3RvbVZhbHVlRmxhZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElDb21ib1NlYXJjaElucHV0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgPyBldmVudCA6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFVwZGF0ZS5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja01hdGNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmluZyhlOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xvc2luZyhlOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGUuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICBpZiAoIWUuZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUNsb3NlZCgpIHtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdVcCcpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25DbGljayhldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkJsdXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZCA9IElneENvbWJvU3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZCA9IElneENvbWJvU3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB0b2dnbGVDYXNlU2Vuc2l0aXZlKCkge1xuICAgICAgICB0aGlzLmZpbHRlcmluZ09wdGlvbnMgPSB7IGNhc2VTZW5zaXRpdmU6ICF0aGlzLmZpbHRlcmluZ09wdGlvbnMuY2FzZVNlbnNpdGl2ZSB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXR1c0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICgodGhpcy5uZ0NvbnRyb2wuY29udHJvbC50b3VjaGVkIHx8IHRoaXMubmdDb250cm9sLmNvbnRyb2wuZGlydHkpICYmXG4gICAgICAgICAgICAodGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcikpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWQgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkID8gSWd4Q29tYm9TdGF0ZS5JTlZBTElEIDogSWd4Q29tYm9TdGF0ZS5WQUxJRDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRoaXMubmdDb250cm9sLmludmFsaWQgPyBJZ3hDb21ib1N0YXRlLklOVkFMSUQgOiBJZ3hDb21ib1N0YXRlLklOSVRJQUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBCLlAuIDE4IE1heSAyMDIxOiBJZ3hEYXRlUGlja2VyIGRvZXMgbm90IHJlc2V0IGl0cyBzdGF0ZSB1cG9uIHJlc2V0Rm9ybSAjOTUyNlxuICAgICAgICAgICAgdGhpcy52YWxpZCA9IElneENvbWJvU3RhdGUuSU5JVElBTDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hbmFnZVJlcXVpcmVkQXN0ZXJpc2soKTtcbiAgICB9O1xuXG4gICAgLyoqIGlmIHRoZXJlIGlzIGEgdmFsdWVLZXkgLSBtYXAgdGhlIGtleXMgdG8gZGF0YSBpdGVtcywgZWxzZSAtIGp1c3QgcmV0dXJuIHRoZSBrZXlzICovXG4gICAgcHJvdGVjdGVkIGNvbnZlcnRLZXlzVG9JdGVtcyhrZXlzOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5jb21ib0FQSS52YWx1ZUtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXAga2V5cyB2cy4gZmlsdGVyIGRhdGEgdG8gcmV0YWluIHRoZSBvcmRlciBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiBpc05hTnZhbHVlKGtleSlcbiAgICAgICAgICAgID8gdGhpcy5kYXRhLmZpbmQoZW50cnkgPT4gaXNOYU52YWx1ZShlbnRyeVt0aGlzLnZhbHVlS2V5XSkpXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5maW5kKGVudHJ5ID0+IGVudHJ5W3RoaXMudmFsdWVLZXldID09PSBrZXkpKVxuICAgICAgICAuZmlsdGVyKGUgPT4gZSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tNYXRjaCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbU1hdGNoID0gdGhpcy5maWx0ZXJlZERhdGEuc29tZSh0aGlzLmZpbmRNYXRjaCk7XG4gICAgICAgIHRoaXMuY3VzdG9tVmFsdWVGbGFnID0gdGhpcy5hbGxvd0N1c3RvbVZhbHVlcyAmJiAhaXRlbU1hdGNoO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaW5kTWF0Y2ggPSAoZWxlbWVudDogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kaXNwbGF5S2V5ID8gZWxlbWVudFt0aGlzLmRpc3BsYXlLZXldIDogZWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlIHx8IHRoaXMuY29tYm9JbnB1dD8udmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIG1hbmFnZVJlcXVpcmVkQXN0ZXJpc2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gZXJyb3IgJiYgZXJyb3IucmVxdWlyZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFAuTS4gMTggTWF5IDIwMjI6IElneENvbWJvJ3MgYXN0ZXJpc2sgbm90IHJlbW92ZWQgd2hlbiByZW1vdmluZyByZXF1aXJlZCB2YWxpZGF0b3IgZHluYW1pY2FsbHkgaW4gcmVhY3RpdmUgZm9ybSAjMTE1NDNcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbnRhaW5zIGtleS12YWx1ZSBwYWlycyBvZiB0aGUgc2VsZWN0ZWQgdmFsdWVLZXlzIGFuZCB0aGVpciByZXNwLiBkaXNwbGF5S2V5cyAqL1xuICAgIHByb3RlY3RlZCByZWdpc3RlclJlbW90ZUVudHJpZXMoaWRzOiBhbnlbXSwgYWRkID0gdHJ1ZSkge1xuICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFZhbHVlRGlzcGxheVBhaXJzKGlkcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW90ZVNlbGVjdGlvbltlbnRyeVt0aGlzLnZhbHVlS2V5XV0gPSBlbnRyeVt0aGlzLmRpc3BsYXlLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpZHMpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVtb3RlU2VsZWN0aW9uW2VudHJ5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBgaWQ6IGFueVtdYCByZXR1cm5zIGEgbWFwcGVkIGB7IFtjb21iby52YWx1ZUtleV06IGFueSwgW2NvbWJvLmRpc3BsYXlLZXldOiBhbnkgfVtdYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRWYWx1ZURpc3BsYXlQYWlycyhpZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGVudHJ5ID0+IGlkcy5pbmRleE9mKGVudHJ5W3RoaXMudmFsdWVLZXldKSA+IC0xKS5tYXAoZSA9PiAoe1xuICAgICAgICAgICAgW3RoaXMudmFsdWVLZXldOiBlW3RoaXMudmFsdWVLZXldLFxuICAgICAgICAgICAgW3RoaXMuZGlzcGxheUtleV06IGVbdGhpcy5kaXNwbGF5S2V5XVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJlbW90ZVNlbGVjdGlvbihuZXdTZWxlY3Rpb246IGFueVtdLCBvbGRTZWxlY3Rpb246IGFueVtdKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFuZXdTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBJZiBuZXcgc2VsZWN0aW9uIGlzIGVtcHR5LCBjbGVhciBhbGwgaXRlbXNcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKG9sZFNlbGVjdGlvbiwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtcyA9IG9sZFNlbGVjdGlvbi5maWx0ZXIoZSA9PiBuZXdTZWxlY3Rpb24uaW5kZXhPZihlKSA8IDApO1xuICAgICAgICBjb25zdCBhZGRlZEl0ZW1zID0gbmV3U2VsZWN0aW9uLmZpbHRlcihlID0+IG9sZFNlbGVjdGlvbi5pbmRleE9mKGUpIDwgMCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKGFkZGVkSXRlbXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyUmVtb3RlRW50cmllcyhyZW1vdmVkSXRlbXMsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3JlbW90ZVNlbGVjdGlvbikubWFwKGUgPT4gdGhpcy5fcmVtb3RlU2VsZWN0aW9uW2VdKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5jb250cm9sICYmIHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAvLyBSdW4gdGhlIHZhbGlkYXRpb24gd2l0aCBlbXB0eSBvYmplY3QgdG8gY2hlY2sgaWYgcmVxdWlyZWQgaXMgZW5hYmxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGZpbHRlcmVkRGF0YSgpOiBhbnlbXSB8IG51bGw7XG4gICAgcHVibGljIGFic3RyYWN0IHNldCBmaWx0ZXJlZERhdGEodmFsOiBhbnlbXSB8IG51bGwpO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGhhbmRsZU9wZW5lZCgpO1xuICAgIHB1YmxpYyBhYnN0cmFjdCBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBzZWxlY3QobmV3SXRlbTogYW55KTogdm9pZDtcbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VsZWN0KG5ld0l0ZW1zOiBBcnJheTxhbnk+IHwgYW55LCBjbGVhckN1cnJlbnRTZWxlY3Rpb24/OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogdm9pZDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBkZXNlbGVjdCguLi5hcmdzOiBbXSB8IFtpdGVtczogQXJyYXk8YW55PiwgZXZlbnQ/OiBFdmVudF0pOiB2b2lkO1xuXG4gICAgcHVibGljIGFic3RyYWN0IHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbjogU2V0PGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkO1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVEaXNwbGF5VGV4dChuZXdTZWxlY3Rpb246IGFueVtdLCBvbGRTZWxlY3Rpb246IGFueVtdKTtcbn1cbiJdfQ==
|