UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

337 lines (336 loc) 32.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, QueryList, Renderer2, ViewChild, ElementRef, HostBinding, ContentChildren } from '@angular/core'; /** @typedef {?} */ var TabBarPositionType; export { TabBarPositionType }; var DefaultTabBarComponent = /** @class */ (function () { function DefaultTabBarComponent(_renderer) { this._renderer = _renderer; this.prefixCls = 'am-tabs-default-bar'; this.inkBarStyle = {}; this.tabsBarStyle = {}; this.showPrev = false; this.showNext = false; this.selectedKey = 0; this.inkBarOffSet = 0; this.inkBarLength = 0; this.tabBarNavSwipedPosition = 0; this.tabBarNavSwipingPosition = 0; this._startPosition = 0; this.page = 5; this.animated = true; this.tabBarBackgroundColor = '#FFF'; this.tabBarPosition = 'top'; this.tabBarWrap = true; this.getTabSize = function (page, tabLength) { return 100 / Math.min(page, tabLength); }; } Object.defineProperty(DefaultTabBarComponent.prototype, "activeTab", { get: /** * @return {?} */ function () { return this.selectedKey; }, set: /** * @param {?} index * @return {?} */ function (index) { if (index !== this.selectedKey) { this.selectedKey = index; if (this.tabTitles && this.tabTitles.length > 0) { this.setTabBarStyleCenter(); this.setInkBarStatus(this.selectedKey); } } }, enumerable: true, configurable: true }); /** * @param {?} event * @return {?} */ DefaultTabBarComponent.prototype.onTouchStart = /** * @param {?} event * @return {?} */ function (event) { if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) { this._startPosition = event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientX; } else { this._startPosition = event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientY; } }; /** * @param {?} event * @return {?} */ DefaultTabBarComponent.prototype.onTouchMove = /** * @param {?} event * @return {?} */ function (event) { event.preventDefault(); event.stopPropagation(); if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) { this.setTabBarNavSwipingPosition(event.changedTouches[0].clientX - this._startPosition, this.tabTitles.first.nativeElement.offsetWidth, this.tabsBarSwipe.nativeElement.offsetWidth); this.tabsBarStyle = { transition: '0ms', transform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)', webkitTransform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)' }; } else { this.setTabBarNavSwipingPosition(event.changedTouches[0].clientY - this._startPosition, this.tabTitles.first.nativeElement.offsetHeight, this.tabsBarSwipe.nativeElement.offsetHeight); this.tabsBarStyle = { transition: '0ms', transform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)', webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)' }; } }; /** * @return {?} */ DefaultTabBarComponent.prototype.onTouchEnd = /** * @return {?} */ function () { this.tabBarNavSwipedPosition = this.tabBarNavSwipingPosition; }; /** * @return {?} */ DefaultTabBarComponent.prototype.onContentChange = /** * @return {?} */ function () { this.setTabsStyle(); this.setInkBarStatus(this.activeTab); }; /** * @return {?} */ DefaultTabBarComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.setTabsStyle(); if (this.selectedKey > 0) { this.setTabBarStyleCenter(); } this.setInkBarStatus(this.selectedKey); }; /** * @return {?} */ DefaultTabBarComponent.prototype.setTabsStyle = /** * @return {?} */ function () { var _this = this; if (this.tabTitles && this.tabTitles.length > 0) { if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) { this.tabTitles.forEach(function (tabTitle) { _this._renderer.setStyle(tabTitle.nativeElement, 'width', _this.getTabSize(_this.page, _this.tabTitles.length) + '%'); }); } else { this.tabTitles.forEach(function (tabTitle) { _this._renderer.setStyle(tabTitle.nativeElement, 'height', _this.getTabSize(_this.page, _this.tabTitles.length) + '%'); }); } } }; /** * @return {?} */ DefaultTabBarComponent.prototype.setTabBarStyleCenter = /** * @return {?} */ function () { if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) { this.setTabBarNavSwipedPosition(this.tabTitles.first.nativeElement.offsetWidth, this.tabsBarSwipe.nativeElement.offsetWidth); this.tabsBarStyle = { transform: 'translate3d(' + this.tabBarNavSwipedPosition + 'px, 0px, 0px)', webkitTransform: 'translate3d(' + this.tabBarNavSwipedPosition + ', 0px, 0px)' }; } else { this.setTabBarNavSwipedPosition(this.tabTitles.first.nativeElement.offsetHeight, this.tabsBarSwipe.nativeElement.offsetHeight); this.tabsBarStyle = { transform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)', webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)' }; } }; /** * @param {?} key * @return {?} */ DefaultTabBarComponent.prototype.setInkBarStatus = /** * @param {?} key * @return {?} */ function (key) { if (this.tabTitles && this.tabTitles.length > 0) { if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) { this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetLeft; this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.width; this.inkBarStyle = { width: this.inkBarLength, left: (this.selectedKey * 100) / this.page + '%' }; Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle); } else { this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetTop; this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.height; this.inkBarStyle = { height: this.inkBarLength, top: (this.selectedKey * 100) / this.page + '%' }; Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle); } } }; /** * @param {?} swipingDistance * @param {?} swipingItemLength * @param {?} viewportLength * @return {?} */ DefaultTabBarComponent.prototype.setTabBarNavSwipingPosition = /** * @param {?} swipingDistance * @param {?} swipingItemLength * @param {?} viewportLength * @return {?} */ function (swipingDistance, swipingItemLength, viewportLength) { if (this.tabBarNavSwipedPosition + swipingDistance > 0) { this.tabBarNavSwipingPosition = 0; } else if (this.tabBarNavSwipedPosition + swipingDistance < viewportLength - swipingItemLength * this.tabTitles.length) { this.tabBarNavSwipingPosition = viewportLength - swipingItemLength * this.tabTitles.length; this.showNext = false; } else { this.tabBarNavSwipingPosition = this.tabBarNavSwipedPosition + swipingDistance; this.showNext = true; } if (this.tabBarNavSwipingPosition < 0) { this.showPrev = true; } else { this.showPrev = false; } }; /** * @param {?} swipingItemLength * @param {?} viewportLength * @return {?} */ DefaultTabBarComponent.prototype.setTabBarNavSwipedPosition = /** * @param {?} swipingItemLength * @param {?} viewportLength * @return {?} */ function (swipingItemLength, viewportLength) { if (this.selectedKey >= Math.floor(this.page / 2) && this.selectedKey <= this.tabTitles.length - 1 - Math.floor(this.page / 2)) { this.tabBarNavSwipedPosition = viewportLength / 2 - swipingItemLength * (this.selectedKey + 1 / 2); } else if (this.selectedKey < Math.floor(this.page / 2)) { this.tabBarNavSwipedPosition = 0; } else { this.tabBarNavSwipedPosition = viewportLength - swipingItemLength * this.tabTitles.length; } if (this.tabBarNavSwipedPosition < 0) { this.showPrev = true; } else { this.showPrev = false; } if (this.tabBarNavSwipedPosition + swipingItemLength * this.tabTitles.length - viewportLength > 0) { this.showNext = true; } else { this.showNext = false; } }; DefaultTabBarComponent.decorators = [ { type: Component, args: [{ selector: 'DefaultTabBar, nzm-default-tab-bar', template: "<div class=\"{{prefixCls}} {{prefixCls}}-{{tabBarPosition}}\"\n [ngClass]=\"{'am-tabs-default-bar-animated' : animated}\"\n [ngStyle]=\"{backgroundColor: tabBarBackgroundColor || '#FFF'}\"\n>\n <div *ngIf=\"showPrev\" class=\"{{prefixCls}}-prevpage\"></div>\n <div #TabsBarSwipe\n class=\"{{prefixCls}}-content\"\n [ngStyle]=\"tabsBarStyle\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\"\n (cdkObserveContent)=\"onContentChange()\"\n >\n <ng-content></ng-content>\n <div class=\"{{prefixCls}}-underline\" [ngStyle]=\"inkBarStyle\">\n </div>\n </div>\n <div *ngIf=\"showNext\" class=\"{{prefixCls}}-nextpage\"></div>\n</div>" }] } ]; /** @nocollapse */ DefaultTabBarComponent.ctorParameters = function () { return [ { type: Renderer2 } ]; }; DefaultTabBarComponent.propDecorators = { tabTitles: [{ type: ContentChildren, args: ['TabTitle',] }], tabsBarSwipe: [{ type: ViewChild, args: ['TabsBarSwipe',] }], page: [{ type: Input }], animated: [{ type: Input }], tabBarUnderlineStyle: [{ type: Input }], tabBarBackgroundColor: [{ type: Input }], tabBarPosition: [{ type: Input }], activeTab: [{ type: Input }], tabBarWrap: [{ type: HostBinding, args: ['class.am-tabs-tab-bar-wrap',] }] }; return DefaultTabBarComponent; }()); export { DefaultTabBarComponent }; if (false) { /** @type {?} */ DefaultTabBarComponent.prototype.prefixCls; /** @type {?} */ DefaultTabBarComponent.prototype.inkBarStyle; /** @type {?} */ DefaultTabBarComponent.prototype.tabsBarStyle; /** @type {?} */ DefaultTabBarComponent.prototype.showPrev; /** @type {?} */ DefaultTabBarComponent.prototype.showNext; /** @type {?} */ DefaultTabBarComponent.prototype.selectedKey; /** @type {?} */ DefaultTabBarComponent.prototype.inkBarOffSet; /** @type {?} */ DefaultTabBarComponent.prototype.inkBarLength; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarNavSwipedPosition; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarNavSwipingPosition; /** @type {?} */ DefaultTabBarComponent.prototype._startPosition; /** @type {?} */ DefaultTabBarComponent.prototype.tabTitles; /** @type {?} */ DefaultTabBarComponent.prototype.tabsBarSwipe; /** @type {?} */ DefaultTabBarComponent.prototype.page; /** @type {?} */ DefaultTabBarComponent.prototype.animated; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarUnderlineStyle; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarBackgroundColor; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarPosition; /** @type {?} */ DefaultTabBarComponent.prototype.tabBarWrap; /** @type {?} */ DefaultTabBarComponent.prototype.getTabSize; /** @type {?} */ DefaultTabBarComponent.prototype._renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWItYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsidGFicy9kZWZhdWx0LXRhYi1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUVYLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7O0lBdURyQixnQ0FBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVzt5QkE5Q3BCLHFCQUFxQjsyQkFDbkIsRUFBRTs0QkFDRCxFQUFFO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDSCxDQUFDOzRCQUNBLENBQUM7NEJBQ0QsQ0FBQzt1Q0FDVSxDQUFDO3dDQUNBLENBQUM7OEJBRUgsQ0FBQztvQkFTbkIsQ0FBQzt3QkFFSSxJQUFJO3FDQUlRLE1BQU07OEJBRUQsS0FBSzswQkFnQjdCLElBQUk7MEJBZ0tJLFVBQUMsSUFBWSxFQUFFLFNBQWlCLElBQUssT0FBQSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQS9CLENBQStCO0tBOUo3QztJQWpCNUMsc0JBQ0ksNkNBQVM7Ozs7UUFEYjtZQUVFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN6Qjs7Ozs7UUFDRCxVQUFjLEtBQWE7WUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDeEM7YUFDRjtTQUNGOzs7T0FUQTs7Ozs7SUFnQkQsNkNBQVk7Ozs7SUFBWixVQUFhLEtBQUs7UUFDaEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7U0FDbkg7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUNuSDtLQUNGOzs7OztJQUVELDRDQUFXOzs7O0lBQVgsVUFBWSxLQUFLO1FBQ2YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JFLElBQUksQ0FBQywyQkFBMkIsQ0FDOUIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRztnQkFDbEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFNBQVMsRUFBRSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGVBQWU7Z0JBQzNFLGVBQWUsRUFBRSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGVBQWU7YUFDbEYsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsMkJBQTJCLENBQzlCLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDN0MsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixTQUFTLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFVBQVU7Z0JBQ3pFLGVBQWUsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsVUFBVTthQUNoRixDQUFDO1NBQ0g7S0FDRjs7OztJQUVELDJDQUFVOzs7SUFBVjtRQUNFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7S0FDOUQ7Ozs7SUFFRCxnREFBZTs7O0lBQWY7UUFDRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDdEM7Ozs7SUFFRCxnREFBZTs7O0lBQWY7UUFDRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3hDOzs7O0lBRU8sNkNBQVk7Ozs7O1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFhO29CQUNuQyxLQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDckIsUUFBUSxDQUFDLGFBQWEsRUFDdEIsT0FBTyxFQUNQLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLElBQUksRUFBRSxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FDeEQsQ0FBQztpQkFDSCxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFBQWE7b0JBQ25DLEtBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUNyQixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLEVBQ1IsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsSUFBSSxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUN4RCxDQUFDO2lCQUNILENBQUMsQ0FBQzthQUNKO1NBQ0Y7Ozs7O0lBR0sscURBQW9COzs7O1FBQzFCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0gsSUFBSSxDQUFDLFlBQVksR0FBRztnQkFDbEIsU0FBUyxFQUFFLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsZUFBZTtnQkFDMUUsZUFBZSxFQUFFLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsYUFBYTthQUMvRSxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9ILElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLFNBQVMsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsVUFBVTtnQkFDeEUsZUFBZSxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVO2FBQy9FLENBQUM7U0FDSDs7Ozs7O0lBR0ssZ0RBQWU7Ozs7Y0FBQyxHQUFXO1FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDNUUsSUFBSSxDQUFDLFdBQVcsR0FBRztvQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRztpQkFDakQsQ0FBQztnQkFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFdBQVcsR0FBRztvQkFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUN6QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRztpQkFDaEQsQ0FBQztnQkFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDNUQ7U0FDRjs7Ozs7Ozs7SUFHSyw0REFBMkI7Ozs7OztjQUFDLGVBQXVCLEVBQUUsaUJBQXlCLEVBQUUsY0FBc0I7UUFDNUcsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFDTCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsZUFBZTtZQUM5QyxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQzFEO1lBQ0EsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGNBQWMsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUMzRixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxlQUFlLENBQUM7WUFDL0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7UUFDRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCOzs7Ozs7O0lBR0ssMkRBQTBCOzs7OztjQUFDLGlCQUF5QixFQUFFLGNBQXNCO1FBQ2xGLElBQ0UsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFDekU7WUFDQSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsY0FBYyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsY0FBYyxHQUFHLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQzNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixHQUFHLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCOzs7Z0JBOU1KLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxtdkJBQStDO2lCQUNoRDs7OztnQkFiQyxTQUFTOzs7NEJBNEJSLGVBQWUsU0FBQyxVQUFVOytCQUcxQixTQUFTLFNBQUMsY0FBYzt1QkFHeEIsS0FBSzsyQkFFTCxLQUFLO3VDQUVMLEtBQUs7d0NBRUwsS0FBSztpQ0FFTCxLQUFLOzRCQUVMLEtBQUs7NkJBY0wsV0FBVyxTQUFDLDRCQUE0Qjs7aUNBOUQzQzs7U0FrQmEsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEFmdGVyVmlld0luaXQsXG4gIENvbnRlbnRDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgVGFiQmFyUG9zaXRpb25UeXBlID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0RlZmF1bHRUYWJCYXIsIG56bS1kZWZhdWx0LXRhYi1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVmYXVsdC10YWItYmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGFiQmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRhYnMtZGVmYXVsdC1iYXInO1xuICBpbmtCYXJTdHlsZTogb2JqZWN0ID0ge307XG4gIHRhYnNCYXJTdHlsZTogb2JqZWN0ID0ge307XG4gIHNob3dQcmV2OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dOZXh0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkS2V5OiBudW1iZXIgPSAwO1xuICBpbmtCYXJPZmZTZXQ6IG51bWJlciA9IDA7XG4gIGlua0Jhckxlbmd0aDogbnVtYmVyID0gMDtcbiAgdGFiQmFyTmF2U3dpcGVkUG9zaXRpb246IG51bWJlciA9IDA7XG4gIHRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIF9zdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oJ1RhYlRpdGxlJylcbiAgdGFiVGl0bGVzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQFZpZXdDaGlsZCgnVGFic0JhclN3aXBlJylcbiAgdGFic0JhclN3aXBlOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHBhZ2U6IG51bWJlciA9IDU7XG4gIEBJbnB1dCgpXG4gIGFuaW1hdGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgdGFiQmFyVW5kZXJsaW5lU3R5bGU6IG9iamVjdDtcbiAgQElucHV0KClcbiAgdGFiQmFyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI0ZGRic7XG4gIEBJbnB1dCgpXG4gIHRhYkJhclBvc2l0aW9uOiBUYWJCYXJQb3NpdGlvblR5cGUgPSAndG9wJztcbiAgQElucHV0KClcbiAgZ2V0IGFjdGl2ZVRhYigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5O1xuICB9XG4gIHNldCBhY3RpdmVUYWIoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCAhPT0gdGhpcy5zZWxlY3RlZEtleSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IGluZGV4O1xuICAgICAgaWYgKHRoaXMudGFiVGl0bGVzICYmIHRoaXMudGFiVGl0bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZXRUYWJCYXJTdHlsZUNlbnRlcigpO1xuICAgICAgICB0aGlzLnNldElua0JhclN0YXR1cyh0aGlzLnNlbGVjdGVkS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRhYnMtdGFiLWJhci13cmFwJylcbiAgdGFiQmFyV3JhcCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBvblRvdWNoU3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSBldmVudCAmJiBldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdGFydFBvc2l0aW9uID0gZXZlbnQgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICB9XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uKSB7XG4gICAgICB0aGlzLnNldFRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbihcbiAgICAgICAgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMuX3N0YXJ0UG9zaXRpb24sXG4gICAgICAgIHRoaXMudGFiVGl0bGVzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgIHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgdHJhbnNpdGlvbjogJzBtcycsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKCcgKyB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiArICdweCwgMHB4LCAwcHgpJyxcbiAgICAgICAgd2Via2l0VHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoJyArIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uICsgJ3B4LCAwcHgsIDBweCknXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbihcbiAgICAgICAgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuX3N0YXJ0UG9zaXRpb24sXG4gICAgICAgIHRoaXMudGFiVGl0bGVzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICB0aGlzLnRhYnNCYXJTd2lwZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgKTtcbiAgICAgIHRoaXMudGFic0JhclN0eWxlID0ge1xuICAgICAgICB0cmFuc2l0aW9uOiAnMG1zJyxcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgJyArIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uICsgJ3B4LCAwcHgpJyxcbiAgICAgICAgd2Via2l0VHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgJyArIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uICsgJ3B4LCAwcHgpJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvblRvdWNoRW5kKCkge1xuICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbjtcbiAgfVxuXG4gIG9uQ29udGVudENoYW5nZSgpIHtcbiAgICB0aGlzLnNldFRhYnNTdHlsZSgpO1xuICAgIHRoaXMuc2V0SW5rQmFyU3RhdHVzKHRoaXMuYWN0aXZlVGFiKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNldFRhYnNTdHlsZSgpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkS2V5ID4gMCkge1xuICAgICAgdGhpcy5zZXRUYWJCYXJTdHlsZUNlbnRlcigpO1xuICAgIH1cbiAgICB0aGlzLnNldElua0JhclN0YXR1cyh0aGlzLnNlbGVjdGVkS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFic1N0eWxlKCkge1xuICAgIGlmICh0aGlzLnRhYlRpdGxlcyAmJiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy50YWJUaXRsZXMuZm9yRWFjaCgodGFiVGl0bGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGFiVGl0bGUubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICB0aGlzLmdldFRhYlNpemUodGhpcy5wYWdlLCB0aGlzLnRhYlRpdGxlcy5sZW5ndGgpICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYlRpdGxlcy5mb3JFYWNoKCh0YWJUaXRsZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0YWJUaXRsZS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICB0aGlzLmdldFRhYlNpemUodGhpcy5wYWdlLCB0aGlzLnRhYlRpdGxlcy5sZW5ndGgpICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJCYXJTdHlsZUNlbnRlcigpIHtcbiAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuc2V0VGFiQmFyTmF2U3dpcGVkUG9zaXRpb24odGhpcy50YWJUaXRsZXMuZmlyc3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCwgdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoJyArIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyAncHgsIDBweCwgMHB4KScsXG4gICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKCcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJywgMHB4LCAwcHgpJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUYWJCYXJOYXZTd2lwZWRQb3NpdGlvbih0aGlzLnRhYlRpdGxlcy5maXJzdC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCwgdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgdGhpcy50YWJzQmFyU3R5bGUgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJ3B4LCAwcHgpJyxcbiAgICAgICAgd2Via2l0VHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgJyArIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyAncHgsIDBweCknXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5rQmFyU3RhdHVzKGtleTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudGFiVGl0bGVzICYmIHRoaXMudGFiVGl0bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbikge1xuICAgICAgICB0aGlzLmlua0Jhck9mZlNldCA9IHRoaXMudGFiVGl0bGVzLnRvQXJyYXkoKVtrZXldLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5pbmtCYXJMZW5ndGggPSB0aGlzLnRhYlRpdGxlcy50b0FycmF5KClba2V5XS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoO1xuICAgICAgICB0aGlzLmlua0JhclN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiB0aGlzLmlua0Jhckxlbmd0aCxcbiAgICAgICAgICBsZWZ0OiAodGhpcy5zZWxlY3RlZEtleSAqIDEwMCkgLyB0aGlzLnBhZ2UgKyAnJSdcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmlua0JhclN0eWxlLCB0aGlzLnRhYkJhclVuZGVybGluZVN0eWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5rQmFyT2ZmU2V0ID0gdGhpcy50YWJUaXRsZXMudG9BcnJheSgpW2tleV0ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHRoaXMuaW5rQmFyTGVuZ3RoID0gdGhpcy50YWJUaXRsZXMudG9BcnJheSgpW2tleV0ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuaW5rQmFyU3R5bGUgPSB7XG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmlua0Jhckxlbmd0aCxcbiAgICAgICAgICB0b3A6ICh0aGlzLnNlbGVjdGVkS2V5ICogMTAwKSAvIHRoaXMucGFnZSArICclJ1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuaW5rQmFyU3R5bGUsIHRoaXMudGFiQmFyVW5kZXJsaW5lU3R5bGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uKHN3aXBpbmdEaXN0YW5jZTogbnVtYmVyLCBzd2lwaW5nSXRlbUxlbmd0aDogbnVtYmVyLCB2aWV3cG9ydExlbmd0aDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyBzd2lwaW5nRGlzdGFuY2UgPiAwKSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiA9IDA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyBzd2lwaW5nRGlzdGFuY2UgPFxuICAgICAgdmlld3BvcnRMZW5ndGggLSBzd2lwaW5nSXRlbUxlbmd0aCAqIHRoaXMudGFiVGl0bGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gPSB2aWV3cG9ydExlbmd0aCAtIHN3aXBpbmdJdGVtTGVuZ3RoICogdGhpcy50YWJUaXRsZXMubGVuZ3RoO1xuICAgICAgdGhpcy5zaG93TmV4dCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiA9IHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyBzd2lwaW5nRGlzdGFuY2U7XG4gICAgICB0aGlzLnNob3dOZXh0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uIDwgMCkge1xuICAgICAgdGhpcy5zaG93UHJldiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1ByZXYgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFRhYkJhck5hdlN3aXBlZFBvc2l0aW9uKHN3aXBpbmdJdGVtTGVuZ3RoOiBudW1iZXIsIHZpZXdwb3J0TGVuZ3RoOiBudW1iZXIpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID49IE1hdGguZmxvb3IodGhpcy5wYWdlIC8gMikgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPD0gdGhpcy50YWJUaXRsZXMubGVuZ3RoIC0gMSAtIE1hdGguZmxvb3IodGhpcy5wYWdlIC8gMilcbiAgICApIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSB2aWV3cG9ydExlbmd0aCAvIDIgLSBzd2lwaW5nSXRlbUxlbmd0aCAqICh0aGlzLnNlbGVjdGVkS2V5ICsgMSAvIDIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEtleSA8IE1hdGguZmxvb3IodGhpcy5wYWdlIC8gMikpIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uID0gdmlld3BvcnRMZW5ndGggLSBzd2lwaW5nSXRlbUxlbmd0aCAqIHRoaXMudGFiVGl0bGVzLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPCAwKSB7XG4gICAgICB0aGlzLnNob3dQcmV2ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93UHJldiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArIHN3aXBpbmdJdGVtTGVuZ3RoICogdGhpcy50YWJUaXRsZXMubGVuZ3RoIC0gdmlld3BvcnRMZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dOZXh0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFiU2l6ZSA9IChwYWdlOiBudW1iZXIsIHRhYkxlbmd0aDogbnVtYmVyKSA9PiAxMDAgLyBNYXRoLm1pbihwYWdlLCB0YWJMZW5ndGgpO1xufVxuIl19