UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

645 lines (644 loc) 46.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter, Type } from '@angular/core'; import { AbstractFloatingHeaderPanel } from './AbstractFloatingHeaderPanel'; import { NeedFocusService } from '../../service/NeedFocusService.service'; import { Option } from '../../decorator/Option.decorator'; import { I18N } from '../../decorator/I18N.decorator'; const /** @type {?} */ TYPE_NAME = "phx-component-floating-header-panel"; const /** @type {?} */ ANIMATE_MOVE_UP = "animate-move-up"; const /** @type {?} */ ANIMATE_MOVE_UP_CLASS = "." + ANIMATE_MOVE_UP; const /** @type {?} */ ANIMATE_OPACITY = "animate-opacity"; const /** @type {?} */ ANIMATE_OPACITY_CLASS = "." + ANIMATE_OPACITY; const /** @type {?} */ ANIMATE_LABEL_HEADER = "animate-label-header"; const /** @type {?} */ ANIMATE_LABEL_HEADER_CLASS = "." + ANIMATE_LABEL_HEADER; export class ComponentFloatingHeaderPanel extends AbstractFloatingHeaderPanel { /** * @param {?} elementRef * @param {?} needFocusService */ constructor(elementRef, needFocusService) { super(elementRef, needFocusService); this.scroll = (event) => { let /** @type {?} */ scrollTop = $(event.target).scrollTop(); let /** @type {?} */ bodyY = (this.getScrollOffsetEnd() === null || this.getScrollOffsetEnd() === undefined) ? $(this.getBodyInstance().elementRef.nativeElement).position().top - this.getScrollOffsetStart() : this.getScrollOffsetEnd() - this.getScrollOffsetStart(); if (scrollTop <= bodyY) { $(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({ 'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px', 'opacity': (scrollTop / bodyY) + '' }); $(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({ 'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px', 'opacity': (scrollTop / bodyY) + '' }); $(this.elementRef.nativeElement).find(ANIMATE_MOVE_UP_CLASS).css({ 'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px', }); $(this.elementRef.nativeElement).find(ANIMATE_OPACITY_CLASS).css({ 'opacity': (scrollTop / bodyY) + '' }); } else { $(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({ 'margin-top': '0px', 'opacity': '1' }); $(this.elementRef.nativeElement).find(ANIMATE_MOVE_UP_CLASS).css({ 'margin-top': '0px', }); $(this.elementRef.nativeElement).find(ANIMATE_OPACITY_CLASS).css({ 'opacity': '1' }); } this.onScroll(event); }; this.elementRef = elementRef; this.setAlwaysShowHeader(false); // this.floatingHeaderHandler = (event: any) => { // this.floatingHeaderInstance = event.instance; // }; this._headerHandler = (event) => { this.headerInstance = event.instance; if (this.headerHandler !== null && typeof this.headerHandler === 'function') { this.headerHandler(event); } }; this._floatingMenuHandler = (event) => { this.floatingMenuInstance = event.instance; if (this.floatingMenuHandler !== null && typeof this.floatingMenuHandler === 'function') { this.floatingMenuHandler(event); } }; this._bodyHandler = (event) => { this.bodyInstance = event.instance; if (this.bodyHandler !== null && typeof this.bodyHandler === 'function') { this.bodyHandler(event); } }; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); setTimeout(() => { window.addEventListener('scroll', this.scroll, true); this.setScrollOffsetStart(53); this.heightFloating = 82; }, 50); } /** * @return {?} */ ngOnDestroy() { window.removeEventListener('scroll', this.scroll, true); } /** * @param {?} inputValue * @param {?} results * @return {?} */ onValidationEnd(inputValue, results) { } /** * @param {?} data * @param {?} inputVal * @return {?} */ onDataChange(data, inputVal) { } /** * @param {?} $event * @return {?} */ doFocus($event) { } /** * @param {?} $event * @return {?} */ doLostFocus($event) { } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @return {?} */ getFloatingHeaderLabel() { return this.floatingHeaderLabel; } /** * @param {?} floatingHeaderLabel * @return {?} */ setFloatingHeaderLabel(floatingHeaderLabel) { this.floatingHeaderLabel = floatingHeaderLabel; } /** * @return {?} */ getHeaderType() { return this.headerType; } /** * @param {?} headerType * @return {?} */ setHeaderType(headerType) { this.headerType = headerType; } /** * @return {?} */ getFloatingMenuType() { return this.floatingMenuType; } /** * @param {?} floatingMenuType * @return {?} */ setFloatingMenuType(floatingMenuType) { this.floatingMenuType = floatingMenuType; } /** * @return {?} */ getBodyType() { return this.bodyType; } /** * @param {?} bodyType * @return {?} */ setBodyType(bodyType) { this.bodyType = bodyType; } /** * @return {?} */ getHeaderModel() { return this.headerModel; } /** * @param {?} headerModel * @return {?} */ setHeaderModel(headerModel) { this.headerModel = headerModel; } /** * @return {?} */ getFloatingMenuModel() { return this.floatingMenuModel; } /** * @param {?} floatingMenuModel * @return {?} */ setFloatingMenuModel(floatingMenuModel) { this.floatingMenuModel = floatingMenuModel; } /** * @return {?} */ getBodyModel() { return this.bodyModel; } /** * @param {?} bodyModel * @return {?} */ setBodyModel(bodyModel) { this.bodyModel = bodyModel; } /** * @param {?} headerInstance * @return {?} */ setHeaderInstance(headerInstance) { this.headerInstance = headerInstance; } /** * @return {?} */ getHeaderInstance() { return this.headerInstance; } /** * @param {?} floatingMenuInstance * @return {?} */ setFloatingMenuInstance(floatingMenuInstance) { this.floatingMenuInstance = floatingMenuInstance; } /** * @return {?} */ getFloatingMenuInstance() { return this.floatingMenuInstance; } /** * @param {?} bodyInstance * @return {?} */ setBodyInstance(bodyInstance) { this.bodyInstance = bodyInstance; } /** * @return {?} */ getBodyInstance() { return this.bodyInstance; } /** * @return {?} */ getHeaderHandler() { return this.headerHandler; } /** * @param {?} headerHandler * @return {?} */ setHeaderHandler(headerHandler) { this.headerHandler = headerHandler; } /** * @return {?} */ getFloatingMenuHandler() { return this.floatingMenuHandler; } /** * @param {?} floatingMenuHandler * @return {?} */ setFloatingMenuHandler(floatingMenuHandler) { this.floatingMenuHandler = floatingMenuHandler; } /** * @return {?} */ getBodyHandler() { return this.bodyHandler; } /** * @param {?} bodyHandler * @return {?} */ setBodyHandler(bodyHandler) { this.bodyHandler = bodyHandler; } } ComponentFloatingHeaderPanel.TYPE_NAME = TYPE_NAME; ComponentFloatingHeaderPanel.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-component-floating-header-panel"> <div class="floating-header-panel-container"> <phx-component-wrapper [type]="getHeaderType()" [data]="getData()" [handler]="_headerHandler" [dataParent]="this" [model]="getHeaderModel()"> </phx-component-wrapper> <phx-component-wrapper [type]="getFloatingMenuType()" [data]="getData()" [handler]="_floatingMenuHandler" [dataParent]="this" [model]="getFloatingMenuModel()"> </phx-component-wrapper> <phx-component-wrapper [type]="getBodyType()" [data]="getData()" [handler]="_bodyHandler" [dataParent]="this" [model]="getBodyModel()"> </phx-component-wrapper> </div> </div> ` },] }, ]; /** @nocollapse */ ComponentFloatingHeaderPanel.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, ]; ComponentFloatingHeaderPanel.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "scrollOffset": [{ type: Input },], "allowShowFloatingHeaderPanel": [{ type: Input },], "floatingHeaderLabel": [{ type: Input },], "headerType": [{ type: Input },], "headerModel": [{ type: Input },], "headerHandler": [{ type: Input },], "floatingMenuType": [{ type: Input },], "floatingMenuModel": [{ type: Input },], "floatingMenuHandler": [{ type: Input },], "bodyType": [{ type: Input },], "bodyModel": [{ type: Input },], "bodyHandler": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentFloatingHeaderPanel.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentFloatingHeaderPanel.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentFloatingHeaderPanel.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentFloatingHeaderPanel.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentFloatingHeaderPanel.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentFloatingHeaderPanel.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], ComponentFloatingHeaderPanel.prototype, "scrollOffset", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentFloatingHeaderPanel.prototype, "allowShowFloatingHeaderPanel", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentFloatingHeaderPanel.prototype, "floatingHeaderLabel", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Type) ], ComponentFloatingHeaderPanel.prototype, "headerType", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "headerModel", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentFloatingHeaderPanel.prototype, "headerHandler", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Type) ], ComponentFloatingHeaderPanel.prototype, "floatingMenuType", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "floatingMenuModel", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentFloatingHeaderPanel.prototype, "floatingMenuHandler", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Type) ], ComponentFloatingHeaderPanel.prototype, "bodyType", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentFloatingHeaderPanel.prototype, "bodyModel", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentFloatingHeaderPanel.prototype, "bodyHandler", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentFloatingHeaderPanel.prototype, "changeEvent", void 0); function ComponentFloatingHeaderPanel_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentFloatingHeaderPanel.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentFloatingHeaderPanel.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentFloatingHeaderPanel.propDecorators; /** @type {?} */ ComponentFloatingHeaderPanel.TYPE_NAME; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.dataParent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.ignoreParentData; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.data; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.ignoreParentDisabled; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.delegateHistory; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.onDisabled; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.onEnabled; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.loadingEnabled; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.i18nKey; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.bypass; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.options; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.disabled; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.field; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.name; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.typeOfData; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.readOnly; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.help; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.scrollOffset; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.allowShowFloatingHeaderPanel; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.floatingHeaderLabel; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.headerType; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.headerModel; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.headerHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.floatingMenuType; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.floatingMenuModel; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.floatingMenuHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.bodyType; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.bodyModel; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.bodyHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.heightFloating; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.headerInstance; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.floatingMenuInstance; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.bodyInstance; /** @type {?} */ ComponentFloatingHeaderPanel.prototype._headerHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype._floatingMenuHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype._bodyHandler; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.loadEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.startValidateEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.endValidateEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.beforeFocusEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.focusEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.beforeLostFocusEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.lostFocusEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.beforeChangeEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.changeEvent; /** @type {?} */ ComponentFloatingHeaderPanel.prototype.scroll; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RmxvYXRpbmdIZWFkZXJQYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZGF0YXZpZXcvQ29tcG9uZW50RmxvYXRpbmdIZWFkZXJQYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEyQixZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHdEQsdUJBQU0sU0FBUyxHQUFXLHFDQUFxQyxDQUFDO0FBQ2hFLHVCQUFNLGVBQWUsR0FBVyxpQkFBaUIsQ0FBQztBQUNsRCx1QkFBTSxxQkFBcUIsR0FBVyxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQzVELHVCQUFNLGVBQWUsR0FBVyxpQkFBaUIsQ0FBQztBQUNsRCx1QkFBTSxxQkFBcUIsR0FBVyxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQzVELHVCQUFNLG9CQUFvQixHQUFXLHNCQUFzQixDQUFDO0FBQzVELHVCQUFNLDBCQUEwQixHQUFXLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztBQWdDdEUsTUFBTSxtQ0FBb0MsU0FBUSwyQkFBMkI7Ozs7O0lBa0ozRSxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ3BFLEtBQUssQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztzQkE0Q3RCLENBQUMsS0FBVSxFQUFRLEVBQUU7WUFFbkMscUJBQUksU0FBUyxHQUFH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QU0sQ0FBQyxjQUFjLENBQUM7c0NBQ00sWUFBWTs7O0lBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ00sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZsb2F0aW5nSGVhZGVyUGFuZWwgfSBmcm9tICcuL0Fic3RyYWN0RmxvYXRpbmdIZWFkZXJQYW5lbCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEZsb2F0aW5nTW9kZWwgfSBmcm9tICcuLi8uL21vZGVsL0NvbXBvbmVudEZsb2F0aW5nTW9kZWwnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb21wb25lbnQtZmxvYXRpbmctaGVhZGVyLXBhbmVsXCI7XG5jb25zdCBBTklNQVRFX01PVkVfVVA6IHN0cmluZyA9IFwiYW5pbWF0ZS1tb3ZlLXVwXCI7XG5jb25zdCBBTklNQVRFX01PVkVfVVBfQ0xBU1M6IHN0cmluZyA9IFwiLlwiICsgQU5JTUFURV9NT1ZFX1VQO1xuY29uc3QgQU5JTUFURV9PUEFDSVRZOiBzdHJpbmcgPSBcImFuaW1hdGUtb3BhY2l0eVwiO1xuY29uc3QgQU5JTUFURV9PUEFDSVRZX0NMQVNTOiBzdHJpbmcgPSBcIi5cIiArIEFOSU1BVEVfT1BBQ0lUWTtcbmNvbnN0IEFOSU1BVEVfTEFCRUxfSEVBREVSOiBzdHJpbmcgPSBcImFuaW1hdGUtbGFiZWwtaGVhZGVyXCI7XG5jb25zdCBBTklNQVRFX0xBQkVMX0hFQURFUl9DTEFTUzogc3RyaW5nID0gXCIuXCIgKyBBTklNQVRFX0xBQkVMX0hFQURFUjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb21wb25lbnQtZmxvYXRpbmctaGVhZGVyLXBhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0aW5nLWhlYWRlci1wYW5lbC1jb250YWluZXJcIj5cbiAgICAgICAgPHBoeC1jb21wb25lbnQtd3JhcHBlclxuICAgICAgICAgICAgW3R5cGVdPVwiZ2V0SGVhZGVyVHlwZSgpXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImdldERhdGEoKVwiXG4gICAgICAgICAgICBbaGFuZGxlcl09XCJfaGVhZGVySGFuZGxlclwiXG4gICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJnZXRIZWFkZXJNb2RlbCgpXCI+XG4gICAgICAgIDwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuICAgICAgICA8cGh4LWNvbXBvbmVudC13cmFwcGVyXG4gICAgICAgICAgICBbdHlwZV09XCJnZXRGbG9hdGluZ01lbnVUeXBlKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RGF0YSgpXCJcbiAgICAgICAgICAgIFtoYW5kbGVyXT1cIl9mbG9hdGluZ01lbnVIYW5kbGVyXCJcbiAgICAgICAgICAgIFtkYXRhUGFyZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgW21vZGVsXT1cImdldEZsb2F0aW5nTWVudU1vZGVsKClcIj5cbiAgICAgICAgPC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG4gICAgICAgIDxwaHgtY29tcG9uZW50LXdyYXBwZXJcbiAgICAgICAgICAgIFt0eXBlXT1cImdldEJvZHlUeXBlKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RGF0YSgpXCJcbiAgICAgICAgICAgIFtoYW5kbGVyXT1cIl9ib2R5SGFuZGxlclwiXG4gICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJnZXRCb2R5TW9kZWwoKVwiPlxuICAgICAgICA8L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRGbG9hdGluZ0hlYWRlclBhbmVsIGV4dGVuZHMgQWJzdHJhY3RGbG9hdGluZ0hlYWRlclBhbmVsIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEZsb2F0aW5nSGVhZGVyUGFuZWxcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBzY3JvbGxPZmZzZXQ6IG51bWJlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBhbGxvd1Nob3dGbG9hdGluZ0hlYWRlclBhbmVsOiBib29sZWFuO1xuICAvLyAtLS0gU2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBmbG9hdGluZ0hlYWRlckxhYmVsOiBzdHJpbmc7XG4gIC8vIEBJbnB1dCgpXG4gIC8vIEBPcHRpb24oKVxuICAvLyBwcml2YXRlIGZsb2F0aW5nSGVhZGVyVHlwZTogYW55O1xuICAvLyBASW5wdXQoKVxuICAvLyBAT3B0aW9uKClcbiAgLy8gcHJpdmF0ZSBmbG9hdGluZ0hlYWRlck1vZGVsOiBhbnk7XG4gIC8vIHByaXZhdGUgZmxvYXRpbmdIZWFkZXJJbnN0YW5jZTogYW55O1xuICAvLyBwcml2YXRlIGZsb2F0aW5nSGVhZGVySGFuZGxlcjogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGhlYWRlclR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgaGVhZGVyTW9kZWw6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgaGVhZGVySGFuZGxlcjogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGZsb2F0aW5nTWVudVR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZmxvYXRpbmdNZW51TW9kZWw6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZmxvYXRpbmdNZW51SGFuZGxlcjogRnVuY3Rpb25cbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgYm9keVR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgYm9keU1vZGVsOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGJvZHlIYW5kbGVyOiBGdW5jdGlvbjtcblxuICBwcml2YXRlIGhlaWdodEZsb2F0aW5nOiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVySW5zdGFuY2U6IGFueTtcbiAgcHJpdmF0ZSBmbG9hdGluZ01lbnVJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIGJvZHlJbnN0YW5jZTogYW55O1xuICBwdWJsaWMgX2hlYWRlckhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwdWJsaWMgX2Zsb2F0aW5nTWVudUhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwdWJsaWMgX2JvZHlIYW5kbGVyOiBGdW5jdGlvbjtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBPdXRwdXQoJ3BoeExvYWQnKVxuICBAT3B0aW9uKCdsb2FkJylcbiAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgQE9wdGlvbignZm9jdXMnKVxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gIEBPcHRpb24oJ2NoYW5nZScpXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLnNldEFsd2F5c1Nob3dIZWFkZXIoZmFsc2UpO1xuXG4gICAgLy8gdGhpcy5mbG9hdGluZ0hlYWRlckhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIC8vICAgdGhpcy5mbG9hdGluZ0hlYWRlckluc3RhbmNlID0gZXZlbnQuaW5zdGFuY2U7XG4gICAgLy8gfTtcblxuICAgIHRoaXMuX2hlYWRlckhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXJJbnN0YW5jZSA9IGV2ZW50Lmluc3RhbmNlO1xuXG4gICAgICBpZiAodGhpcy5oZWFkZXJIYW5kbGVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmhlYWRlckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJIYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fZmxvYXRpbmdNZW51SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmZsb2F0aW5nTWVudUluc3RhbmNlID0gZXZlbnQuaW5zdGFuY2U7XG5cbiAgICAgIGlmICh0aGlzLmZsb2F0aW5nTWVudUhhbmRsZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZmxvYXRpbmdNZW51SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmZsb2F0aW5nTWVudUhhbmRsZXIoZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9ib2R5SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmJvZHlJbnN0YW5jZSA9IGV2ZW50Lmluc3RhbmNlO1xuXG4gICAgICBpZiAodGhpcy5ib2R5SGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5ib2R5SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmJvZHlIYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbCwgdHJ1ZSk7XG4gICAgICB0aGlzLnNldFNjcm9sbE9mZnNldFN0YXJ0KDUzKTtcbiAgICAgIHRoaXMuaGVpZ2h0RmxvYXRpbmcgPSA4MjtcbiAgICB9LCA1MCk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsID0gKGV2ZW50OiBhbnkpOiB2b2lkID0+IHtcblxuICAgIGxldCBzY3JvbGxUb3AgPSAkKGV2ZW50LnRhcmdldCkuc2Nyb2xsVG9wKCk7XG4gICAgbGV0IGJvZHlZID0gKHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0RW5kKCkgPT09IG51bGwgfHwgdGhpcy5nZXRTY3JvbGxPZmZzZXRFbmQoKSA9PT0gdW5kZWZpbmVkKSA/ICQodGhpcy5nZXRCb2R5SW5zdGFuY2UoKS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBvc2l0aW9uKCkudG9wIC0gdGhpcy5nZXRTY3JvbGxPZmZzZXRTdGFydCgpIDogdGhpcy5nZXRTY3JvbGxPZmZzZXRFbmQoKSAtIHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0U3RhcnQoKTtcblxuICAgIGlmIChzY3JvbGxUb3AgPD0gYm9keVkpIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogKHRoaXMuaGVpZ2h0RmxvYXRpbmcgLSB0aGlzLmhlaWdodEZsb2F0aW5nICogKHNjcm9sbFRvcCAvIGJvZHlZKSkgKyAncHgnLFxuICAgICAgICAnb3BhY2l0eSc6IChzY3JvbGxUb3AgLyBib2R5WSkgKyAnJ1xuICAgICAgfSk7XG5cbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogKHRoaXMuaGVpZ2h0RmxvYXRpbmcgLSB0aGlzLmhlaWdodEZsb2F0aW5nICogKHNjcm9sbFRvcCAvIGJvZHlZKSkgKyAncHgnLFxuICAgICAgICAnb3BhY2l0eSc6IChzY3JvbGxUb3AgLyBib2R5WSkgKyAnJ1xuICAgICAgfSk7XG5cbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9NT1ZFX1VQX0NMQVNTKS5jc3Moe1xuICAgICAgICAnbWFyZ2luLXRvcCc6ICh0aGlzLmhlaWdodEZsb2F0aW5nIC0gdGhpcy5oZWlnaHRGbG9hdGluZyAqIChzY3JvbGxUb3AgLyBib2R5WSkpICsgJ3B4JyxcbiAgICAgIH0pO1xuXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKEFOSU1BVEVfT1BBQ0lUWV9DTEFTUykuY3NzKHtcbiAgICAgICAgJ29wYWNpdHknOiAoc2Nyb2xsVG9wIC8gYm9keVkpICsgJydcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogJzBweCcsXG4gICAgICAgICdvcGFjaXR5JzogJzEnXG4gICAgICB9KTtcblxuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChBTklNQVRFX01PVkVfVVBfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogJzBweCcsXG4gICAgICB9KTtcblxuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChBTklNQVRFX09QQUNJVFlfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdvcGFjaXR5JzogJzEnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm9uU2Nyb2xsKGV2ZW50KTtcbiAgfTtcblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Mb3N0Rm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmxvYXRpbmdIZWFkZXJMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZsb2F0aW5nSGVhZGVyTGFiZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0RmxvYXRpbmdIZWFkZXJMYWJlbChmbG9hdGluZ0hlYWRlckxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZsb2F0aW5nSGVhZGVyTGFiZWwgPSBmbG9hdGluZ0hlYWRlckxhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlclR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJUeXBlO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRlclR5cGUoaGVhZGVyVHlwZTogVHlwZTxhbnk+KSB7XG4gICAgdGhpcy5oZWFkZXJUeXBlID0gaGVhZGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbG9hdGluZ01lbnVUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVUeXBlKGZsb2F0aW5nTWVudVR5cGU6IFR5cGU8YW55Pikge1xuICAgIHRoaXMuZmxvYXRpbmdNZW51VHlwZSA9IGZsb2F0aW5nTWVudVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keVR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ib2R5VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5VHlwZShib2R5VHlwZTogVHlwZTxhbnk+KSB7XG4gICAgdGhpcy5ib2R5VHlwZSA9IGJvZHlUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlck1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGVyTW9kZWwoaGVhZGVyTW9kZWw6IGFueSkge1xuICAgIHRoaXMuaGVhZGVyTW9kZWwgPSBoZWFkZXJNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbG9hdGluZ01lbnVNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0aW5nTWVudU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEZsb2F0aW5nTWVudU1vZGVsKGZsb2F0aW5nTWVudU1vZGVsOiBhbnkpIHtcbiAgICB0aGlzLmZsb2F0aW5nTWVudU1vZGVsID0gZmxvYXRpbmdNZW51TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keU1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlNb2RlbChib2R5TW9kZWw6IGFueSkge1xuICAgIHRoaXMuYm9keU1vZGVsID0gYm9keU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRlckluc3RhbmNlKGhlYWRlckluc3RhbmNlOiBhbnkpIHtcbiAgICB0aGlzLmhlYWRlckluc3RhbmNlID0gaGVhZGVySW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVySW5zdGFuY2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJJbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVJbnN0YW5jZShmbG9hdGluZ01lbnVJbnN0YW5jZTogYW55KSB7XG4gICAgdGhpcy5mbG9hdGluZ01lbnVJbnN0YW5jZSA9IGZsb2F0aW5nTWVudUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGdldEZsb2F0aW5nTWVudUluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9keUluc3RhbmNlKGJvZHlJbnN0YW5jZTogYW55KSB7XG4gICAgdGhpcy5ib2R5SW5zdGFuY2UgPSBib2R5SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlckhhbmRsZXIoKTogYW55e1xuICAgIHJldHVybiB0aGlzLmhlYWRlckhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGVySGFuZGxlcihoZWFkZXJIYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVySGFuZGxlciA9IGhlYWRlckhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmxvYXRpbmdNZW51SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVIYW5kbGVyKGZsb2F0aW5nTWVudUhhbmRsZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5mbG9hdGluZ01lbnVIYW5kbGVyID0gZmxvYXRpbmdNZW51SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5SGFuZGxlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmJvZHlIYW5kbGVyO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlIYW5kbGVyKGJvZHlIYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYm9keUhhbmRsZXIgPSBib2R5SGFuZGxlcjtcbiAgfVxufVxuIl19