UNPKG

ad-custom-lib

Version:

This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte

484 lines 34.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { removeListeners, removeSubscriptions } from '../helpers'; import { TabToggleDirective } from './tabs.directive'; // @TODO Vertical tabs /* * */ var TabHeaderComponent = /** @class */ (function () { function TabHeaderComponent() { } TabHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush }] } ]; TabHeaderComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return TabHeaderComponent; }()); export { TabHeaderComponent }; if (false) { /** @type {?} */ TabHeaderComponent.prototype.templateRef; } /* * */ var TabContentComponent = /** @class */ (function () { function TabContentComponent() { } TabContentComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-content', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush }] } ]; TabContentComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return TabContentComponent; }()); export { TabContentComponent }; if (false) { /** @type {?} */ TabContentComponent.prototype.templateRef; } /* * */ var TabComponent = /** @class */ (function () { function TabComponent() { this.isActive = false; } /** * @method ngOnInit */ /** * \@method ngOnInit * @return {?} */ TabComponent.prototype.ngOnInit = /** * \@method ngOnInit * @return {?} */ function () { if (this.tabContentComponent) { this.contentTemplateRef = this.tabContentComponent.templateRef; } else { this.contentTemplateRef = this.templateRef; } }; TabComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush }] } ]; TabComponent.propDecorators = { header: [{ type: Input }], isDisabled: [{ type: Input }], tabColor: [{ type: Input }], templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }], tabHeaderComponent: [{ type: ContentChild, args: [TabHeaderComponent, { static: true },] }], tabContentComponent: [{ type: ContentChild, args: [TabContentComponent, { static: true },] }] }; return TabComponent; }()); export { TabComponent }; if (false) { /** @type {?} */ TabComponent.prototype.index; /** @type {?} */ TabComponent.prototype.isActive; /** * @type {?} * @private */ TabComponent.prototype.contentTemplateRef; /** @type {?} */ TabComponent.prototype.header; /** @type {?} */ TabComponent.prototype.isDisabled; /** @type {?} */ TabComponent.prototype.tabColor; /** @type {?} */ TabComponent.prototype.templateRef; /** @type {?} */ TabComponent.prototype.tabHeaderComponent; /** @type {?} */ TabComponent.prototype.tabContentComponent; } /* * */ var TabsHeaderComponent = /** @class */ (function () { function TabsHeaderComponent() { } TabsHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush }] } ]; TabsHeaderComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return TabsHeaderComponent; }()); export { TabsHeaderComponent }; if (false) { /** @type {?} */ TabsHeaderComponent.prototype.templateRef; } /* * */ var TabsComponent = /** @class */ (function () { /** * @method constructor * @param changeDetectorRef [description] * @param ngZone [description] * @param renderer2 [description] */ function TabsComponent(changeDetectorRef, ngZone, renderer2) { this.changeDetectorRef = changeDetectorRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.listeners = []; this.subscriptions = []; this.headerStyleClass = 'header pull-left'; this.navStyleClass = 'nav nav-tabs'; this.contentStyleClass = 'tab-content'; this.styleClass = 'nav-tabs-custom'; this.onClose = new EventEmitter(); this.onOpen = new EventEmitter(); } Object.defineProperty(TabsComponent.prototype, "activeTabIndex", { set: /** * @param {?} index * @return {?} */ function (index) { this.activatedTabIndex = index; this.changeDetectorRef.detectChanges(); }, enumerable: true, configurable: true }); /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ TabsComponent.prototype.ngAfterContentInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; // Set tab index on load. this.setTabIndex(); // Update tab index if tabs is updated. this.subscriptions.push(this.tabs.changes.subscribe((/** * @return {?} */ function () { _this.setTabIndex(); }))); // Open tab on load. this.openTabIndex(); }; /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ TabsComponent.prototype.ngAfterViewInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; // Set tab toggles on load. this.setTabsToggle(); // Update tab toggles if tabs is updated. this.subscriptions.push(this.tabToggleDirectives.changes.subscribe((/** * @return {?} */ function () { _this.setTabsToggle(); }))); }; /** * @method ngOnChanges * @param changes [description] */ /** * \@method ngOnChanges * @param {?} changes [description] * @return {?} */ TabsComponent.prototype.ngOnChanges = /** * \@method ngOnChanges * @param {?} changes [description] * @return {?} */ function (changes) { if (changes.activeTabIndex) { this.openTabIndex(); } }; /** * @method ngOnDestroy */ /** * \@method ngOnDestroy * @return {?} */ TabsComponent.prototype.ngOnDestroy = /** * \@method ngOnDestroy * @return {?} */ function () { removeListeners(this.listeners); removeSubscriptions(this.subscriptions); }; /** * [toggleTab description] * @method toggleTab */ /** * [toggleTab description] * \@method toggleTab * @return {?} */ TabsComponent.prototype.openTabIndex = /** * [toggleTab description] * \@method toggleTab * @return {?} */ function () { var _this = this; if (this.tabs) { this.tabs.forEach((/** * @param {?} tab * @return {?} */ function (tab) { if (_this.activatedTabIndex === tab.index || (_this.activatedTabIndex === undefined && tab.index === 0)) { tab.isActive = true; _this.onOpen.emit({ index: tab.index }); _this.changeDetectorRef.detectChanges(); } else if (tab.isActive) { tab.isActive = false; _this.onClose.emit({ index: tab.index }); _this.changeDetectorRef.detectChanges(); } })); } }; /** * [openTab description] * @method openTab * @param event [description] * @param tabToOpen [description] */ /** * [openTab description] * \@method openTab * @param {?} event [description] * @param {?} tabToOpen [description] * @return {?} */ TabsComponent.prototype.openTab = /** * [openTab description] * \@method openTab * @param {?} event [description] * @param {?} tabToOpen [description] * @return {?} */ function (event, tabToOpen) { var _this = this; event.preventDefault(); tabToOpen.isActive = true; this.onOpen.emit({ event: event, index: tabToOpen.index }); this.tabs.forEach((/** * @param {?} tab * @return {?} */ function (tab) { if (tab.isActive && tabToOpen !== tab) { tab.isActive = false; _this.onClose.emit({ event: event, index: tab.index }); } })); }; /** * [setTabIndex description] * @method setTabIndex */ /** * [setTabIndex description] * \@method setTabIndex * @private * @return {?} */ TabsComponent.prototype.setTabIndex = /** * [setTabIndex description] * \@method setTabIndex * @private * @return {?} */ function () { this.tabs.forEach((/** * @param {?} tab * @param {?} index * @return {?} */ function (tab, index) { tab.index = index; })); this.changeDetectorRef.detectChanges(); }; /** * [setTabsToggle description] * @method setTabsToggle */ /** * [setTabsToggle description] * \@method setTabsToggle * @private * @return {?} */ TabsComponent.prototype.setTabsToggle = /** * [setTabsToggle description] * \@method setTabsToggle * @private * @return {?} */ function () { var _this = this; this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular((/** * @return {?} */ function () { _this.tabToggleDirectives.forEach((/** * @param {?} tabToggle * @return {?} */ function (tabToggle) { _this.listeners.push(_this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', (/** * @param {?} event * @return {?} */ function (event) { _this.openTab(event, tabToggle.tabComponent); _this.changeDetectorRef.detectChanges(); }))); })); })); }; TabsComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs', template: "<div [ngClass]=\"styleClass\">\r\n <ul [ngClass]=\"navStyleClass\" [class.pull-right]=\"header || tabsHeaderComponent\">\r\n <li *ngFor=\"let tab of tabs\" [class.active]=\"tab.isActive\" [mkColor]=\"tab.tabColor || tabsColor\"\r\n mkColorProperty=\"border-top-color\">\r\n <a *ngIf=\"!tab.isDisabled\" [mkTabToggle]=\"tab\" href=\"#\">\r\n {{tab.header}}\r\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent?.templateRef\"></ng-template>\r\n </a>\r\n <ng-template [ngIf]=\"tab.isDisabled\">\r\n {{tab.header}}\r\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent.templateRef\"></ng-template>\r\n </ng-template>\r\n </li>\r\n <li *ngIf=\"tabsHeaderComponent || header\" [ngClass]=\"headerStyleClass\">\r\n {{header}}\r\n <ng-template *ngIf=\"!header\" [ngTemplateOutlet]=\"tabsHeaderComponent.templateRef\"></ng-template>\r\n </li>\r\n </ul>\r\n <div [ngClass]=\"contentStyleClass\">\r\n <div *ngFor=\"let tab of tabs\" class=\"tab-pane\" [class.active]=\"tab.isActive\">\r\n <ng-template [ngTemplateOutlet]=\"tab.contentTemplateRef\"></ng-template>\r\n </div>\r\n </div>\r\n</div>", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".nav-tabs-custom>.nav-tabs>li{border-top-width:0}.nav-tabs-custom>.nav-tabs>li.active{border-top-width:3px}"] }] } ]; /** @nocollapse */ TabsComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: NgZone }, { type: Renderer2 } ]; }; TabsComponent.propDecorators = { activeTabIndex: [{ type: Input }], header: [{ type: Input }], headerStyleClass: [{ type: Input }], navStyleClass: [{ type: Input }], contentStyleClass: [{ type: Input }], styleClass: [{ type: Input }], tabsColor: [{ type: Input }], onClose: [{ type: Output }], onOpen: [{ type: Output }], tabsHeaderComponent: [{ type: ContentChild, args: [TabsHeaderComponent, { static: true },] }], tabs: [{ type: ContentChildren, args: [TabComponent,] }], tabToggleDirectives: [{ type: ViewChildren, args: [TabToggleDirective,] }] }; return TabsComponent; }()); export { TabsComponent }; if (false) { /** * @type {?} * @private */ TabsComponent.prototype.activatedTabIndex; /** * @type {?} * @private */ TabsComponent.prototype.listeners; /** * @type {?} * @private */ TabsComponent.prototype.subscriptions; /** @type {?} */ TabsComponent.prototype.header; /** @type {?} */ TabsComponent.prototype.headerStyleClass; /** @type {?} */ TabsComponent.prototype.navStyleClass; /** @type {?} */ TabsComponent.prototype.contentStyleClass; /** @type {?} */ TabsComponent.prototype.styleClass; /** @type {?} */ TabsComponent.prototype.tabsColor; /** @type {?} */ TabsComponent.prototype.onClose; /** @type {?} */ TabsComponent.prototype.onOpen; /** @type {?} */ TabsComponent.prototype.tabsHeaderComponent; /** @type {?} */ TabsComponent.prototype.tabs; /** @type {?} */ TabsComponent.prototype.tabToggleDirectives; /** * @type {?} * @private */ TabsComponent.prototype.changeDetectorRef; /** * @type {?} * @private */ TabsComponent.prototype.ngZone; /** * @type {?} * @private */ TabsComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hZC1jdXN0b20tbGliLyIsInNvdXJjZXMiOlsibGliL3RhYnMvdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDOEIsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUN0RixZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZ0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ25GLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT3REO0lBQUE7SUFPQSxDQUFDOztnQkFQQSxTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxtRUFBbUU7b0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs7OzhCQUVJLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztJQUM1Qyx5QkFBQztDQUFBLEFBUEQsSUFPQztTQUZZLGtCQUFrQjs7O0lBQzNCLHlDQUErRTs7Ozs7QUFPbkY7SUFBQTtJQU9BLENBQUM7O2dCQVBBLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsbUVBQW1FO29CQUM3RSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7Ozs4QkFFSSxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7SUFDNUMsMEJBQUM7Q0FBQSxBQVBELElBT0M7U0FGWSxtQkFBbUI7OztJQUM1QiwwQ0FBK0U7Ozs7O0FBTW5GO0lBQUE7UUFPVyxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBdUI1QixDQUFDO0lBVkc7O09BRUc7Ozs7O0lBQ0gsK0JBQVE7Ozs7SUFBUjtRQUNJLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO1NBQ2xFO2FBQU07WUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUM5QztJQUNMLENBQUM7O2dCQTdCSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFFBQVEsRUFBRSxtRUFBbUU7b0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs7O3lCQU9JLEtBQUs7NkJBQ0wsS0FBSzsyQkFDTCxLQUFLOzhCQUVMLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO3FDQUV2QyxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO3NDQUMvQyxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztJQVlyRCxtQkFBQztDQUFBLEFBOUJELElBOEJDO1NBekJZLFlBQVk7OztJQUNyQiw2QkFBcUI7O0lBQ3JCLGdDQUF3Qjs7Ozs7SUFFeEIsMENBQTZDOztJQUU3Qyw4QkFBK0I7O0lBQy9CLGtDQUFvQzs7SUFDcEMsZ0NBQWlDOztJQUVqQyxtQ0FBK0U7O0lBRS9FLDBDQUFnRzs7SUFDaEcsMkNBQW1HOzs7OztBQWlCdkc7SUFBQTtJQU9BLENBQUM7O2dCQVBBLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsbUVBQW1FO29CQUM3RSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7Ozs4QkFFSSxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7SUFDNUMsMEJBQUM7Q0FBQSxBQVBELElBT0M7U0FGWSxtQkFBbUI7OztJQUM1QiwwQ0FBK0U7Ozs7O0FBTW5GO0lBK0JJOzs7OztPQUtHO0lBQ0gsdUJBQ1ksaUJBQW9DLEVBQ3BDLE1BQWMsRUFDZCxTQUFvQjtRQUZwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBaEN4QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2Ysa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFPWCxxQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxrQkFBYSxHQUFHLGNBQWMsQ0FBQztRQUMvQixzQkFBaUIsR0FBRyxhQUFhLENBQUM7UUFDbEMsZUFBVSxHQUFHLGlCQUFpQixDQUFDO1FBRzlCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBa0J6QyxDQUFDO0lBOUJMLHNCQUFvQix5Q0FBYzs7Ozs7UUFBbEMsVUFBbUMsS0FBYTtZQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDOzs7T0FBQTtJQTZCRDs7T0FFRzs7Ozs7SUFDSCwwQ0FBa0I7Ozs7SUFBbEI7UUFBQSxpQkFXQztRQVZHLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7OztRQUFDO1lBQ2hELEtBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRUosb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsdUNBQWU7Ozs7SUFBZjtRQUFBLGlCQVFDO1FBUEcsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQix5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTOzs7UUFBQztZQUMvRCxLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILG1DQUFXOzs7OztJQUFYLFVBQVksT0FBNEM7UUFDcEQsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCxtQ0FBVzs7OztJQUFYO1FBQ0ksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0ksb0NBQVk7Ozs7O0lBQW5CO1FBQUEsaUJBY0M7UUFiRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Ozs7WUFBQyxVQUFDLEdBQWlCO2dCQUNoQyxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNuRyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDcEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3ZDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO29CQUNyQixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDckIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3hDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUM7WUFDTCxDQUFDLEVBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHOzs7Ozs7OztJQUNJLCtCQUFPOzs7Ozs7O0lBQWQsVUFBZSxLQUFZLEVBQUUsU0FBdUI7UUFBcEQsaUJBVUM7UUFURyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQUEsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxHQUFpQjtZQUNoQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtnQkFDbkMsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFBLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2xEO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7O0lBQ0ssbUNBQVc7Ozs7OztJQUFuQjtRQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzs7Ozs7UUFBQyxVQUFDLEdBQWlCLEVBQUUsS0FBYTtZQUMvQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7O0lBQ0sscUNBQWE7Ozs7OztJQUFyQjtRQUFBLGlCQVVDO1FBVEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCOzs7UUFBQztZQUMxQixLQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTzs7OztZQUFDLFVBQUMsU0FBNkI7Z0JBQzNELEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU87Ozs7Z0JBQUUsVUFBQyxLQUFLO29CQUN6RixLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzVDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsRUFBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOztnQkF6SkosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxTQUFTO29CQUNuQiwyMENBQW9DO29CQUVwQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7aUJBQ2xEOzs7O2dCQTFGNkQsaUJBQWlCO2dCQUN2QixNQUFNO2dCQUN2QyxTQUFTOzs7aUNBOEYzQixLQUFLO3lCQUlMLEtBQUs7bUNBQ0wsS0FBSztnQ0FDTCxLQUFLO29DQUNMLEtBQUs7NkJBQ0wsS0FBSzs0QkFDTCxLQUFLOzBCQUVMLE1BQU07eUJBQ04sTUFBTTtzQ0FFTixZQUFZLFNBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO3VCQUVoRCxlQUFlLFNBQUMsWUFBWTtzQ0FFNUIsWUFBWSxTQUFDLGtCQUFrQjs7SUE2SHBDLG9CQUFDO0NBQUEsQUExSkQsSUEwSkM7U0FwSlksYUFBYTs7Ozs7O0lBQ3RCLDBDQUFrQzs7Ozs7SUFDbEMsa0NBQXVCOzs7OztJQUN2QixzQ0FBMkI7O0lBTTNCLCtCQUErQjs7SUFDL0IseUNBQXNEOztJQUN0RCxzQ0FBK0M7O0lBQy9DLDBDQUFrRDs7SUFDbEQsbUNBQStDOztJQUMvQyxrQ0FBa0M7O0lBRWxDLGdDQUE4Qzs7SUFDOUMsK0JBQTZDOztJQUU3Qyw0Q0FBbUc7O0lBRW5HLDZCQUFvRTs7SUFFcEUsNENBQTRGOzs7OztJQVN4RiwwQ0FBNEM7Ozs7O0lBQzVDLCtCQUFzQjs7Ozs7SUFDdEIsa0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCxcclxuICAgIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZSwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVGFiVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzLmRpcmVjdGl2ZSc7XHJcblxyXG4vLyBAVE9ETyBWZXJ0aWNhbCB0YWJzXHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21rLXRhYi1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiQ29udGVudENvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbn1cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY29udGVudFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIHRhYkNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoVGFiSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkhlYWRlckNvbXBvbmVudDogVGFiSGVhZGVyQ29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZChUYWJDb250ZW50Q29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkNvbnRlbnRDb21wb25lbnQ6IFRhYkNvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nT25Jbml0XHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJzSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGxpc3RlbmVycyA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHNldCBhY3RpdmVUYWJJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlclN0eWxlQ2xhc3MgPSAnaGVhZGVyIHB1bGwtbGVmdCc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2U3R5bGVDbGFzcyA9ICduYXYgbmF2LXRhYnMnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ3RhYi1jb250ZW50JztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdHlsZUNsYXNzID0gJ25hdi10YWJzLWN1c3RvbSc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFic0NvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChUYWJzSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYnNIZWFkZXJDb21wb25lbnQ6IFRhYnNIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHB1YmxpYyB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKFRhYlRvZ2dsZURpcmVjdGl2ZSkgcHVibGljIHRhYlRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxUYWJUb2dnbGVEaXJlY3RpdmU+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSBuZ1pvbmUgICAgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIyICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcclxuICAgICkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxyXG4gICAgICovXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgLy8gU2V0IHRhYiBpbmRleCBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhYiBpbmRleCBpZiB0YWJzIGlzIHVwZGF0ZWQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJJbmRleCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgLy8gT3BlbiB0YWIgb24gbG9hZC5cclxuICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcclxuICAgICAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIC8vIFNldCB0YWIgdG9nZ2xlcyBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFiIHRvZ2dsZXMgaWYgdGFicyBpcyB1cGRhdGVkLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5hY3RpdmVUYWJJbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICByZW1vdmVTdWJzY3JpcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbdG9nZ2xlVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCB0b2dnbGVUYWJcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5UYWJJbmRleCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHRhYi5pbmRleCB8fCAodGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHRhYi5pbmRleCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGluZGV4OiB0YWIuaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtvcGVuVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBvcGVuVGFiXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB0YWJUb09wZW4gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlblRhYihldmVudDogRXZlbnQsIHRhYlRvT3BlbjogVGFiQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0YWJUb09wZW4uaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBldmVudCwgaW5kZXg6IHRhYlRvT3Blbi5pbmRleCB9KTtcclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBUYWJDb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRhYi5pc0FjdGl2ZSAmJiB0YWJUb09wZW4gIT09IHRhYikge1xyXG4gICAgICAgICAgICAgICAgdGFiLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGV2ZW50LCBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbc2V0VGFiSW5kZXggZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYkluZGV4XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0VGFiSW5kZXgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3NldFRhYnNUb2dnbGUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYnNUb2dnbGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRUYWJzVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKCh0YWJUb2dnbGU6IFRhYlRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGFiVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVGFiKGV2ZW50LCB0YWJUb2dnbGUudGFiQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19