com.phloxui
Version:
PhloxUI Ng2+ Framework
536 lines (535 loc) • 41 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, HostListener, EventEmitter, Output } from '@angular/core';
import { AbstractHasData } from '../../../AbstractHasData';
import { CalendarEntryPopoverModel } from '../../../model/CalendarEntryPopoverModel';
import { NeedFocusService } from '../../../../service/NeedFocusService.service';
import { AbstractDataEditor } from '../../AbstractDataEditor';
import { Option } from '../../../../decorator/Option.decorator';
import { EventUtils } from '../../../../share/utils/EventUtils';
var /** @type {?} */ TYPE_NAME = "phx-calendar-entry-popover";
var /** @type {?} */ LEFT = 'left';
var /** @type {?} */ RIGHT = 'right';
var /** @type {?} */ BELOW = 'below';
var /** @type {?} */ ABOVE = 'above';
var /** @type {?} */ POPOVER_SHOW_EVENT = 'calendarpopovershow';
var /** @type {?} */ POPOVER_HIDE_EVENT = 'calendarpopoverhide';
var CalendarEntryPopover = /** @class */ (function (_super) {
tslib_1.__extends(CalendarEntryPopover, _super);
function CalendarEntryPopover(elementRef, needFocusService) {
var _this = _super.call(this, elementRef) || this;
_this.needFocusService = needFocusService;
_this._show = false;
_this.defaultArrowTop = 10;
_this.showEvent = new EventEmitter();
_this.hideEvent = new EventEmitter();
return _this;
}
/**
* @return {?}
*/
CalendarEntryPopover.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
_super.prototype.ngOnInit.call(this);
this.showMenu(this._show);
this.compoWrapInstance = null;
// when wrapper finished render
this.componentHandler = function (result) {
var /** @type {?} */ comInstance = null;
if (result !== null && typeof result !== 'undefined') {
comInstance = result.instance;
}
if (_this.data !== null && typeof _this.data !== 'undefined' && comInstance !== null) {
if (typeof comInstance.setData === 'function') {
comInstance.setData(_this.data);
}
}
if (typeof comInstance.setCalendarEntryMapper === 'function') {
comInstance.setCalendarEntryMapper(_this.entryMapper);
}
if (typeof comInstance.setEditor === 'function') {
comInstance.setEditor(_this.editor);
}
_this.compoWrapInstance = comInstance;
};
};
/**
* @param {?} isShow
* @return {?}
*/
CalendarEntryPopover.prototype.showMenu = /**
* @param {?} isShow
* @return {?}
*/
function (isShow) {
this._show = isShow;
if (isShow) {
if (this.needFocusService != null) {
this.needFocusService.setFocusingComponent(this);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype._getComponentHandler = /**
* @return {?}
*/
function () {
return this.componentHandler;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isModelEmpty = /**
* @return {?}
*/
function () {
if (this.model === null || typeof this.model === 'undefined') {
return true;
}
return false;
};
/**
* @param {?} top
* @return {?}
*/
CalendarEntryPopover.prototype.setArrowTop = /**
* @param {?} top
* @return {?}
*/
function (top) {
if (top === null || typeof top === 'undefined') {
return;
}
var /** @type {?} */ contWrapElement = $(this.elementRef.nativeElement).find('.container-wrapper');
if (typeof contWrapElement !== 'undefined') {
if (typeof $(contWrapElement).find('.container-after') !== 'undefined') {
$(contWrapElement).find('.container-after').css("top", top);
}
if (typeof $(contWrapElement).find('.container-before') !== 'undefined') {
$(contWrapElement).find('.container-before').css("top", top - 1);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.show = /**
* @return {?}
*/
function () {
this.showMenu(true);
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(POPOVER_SHOW_EVENT, this, data, null);
this.showEvent.emit(ev);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.hide = /**
* @return {?}
*/
function () {
this.showMenu(false);
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(POPOVER_HIDE_EVENT, this, data, null);
this.hideEvent.emit(ev);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isShow = /**
* @return {?}
*/
function () {
return this._show;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @param {?} model
* @return {?}
*/
CalendarEntryPopover.prototype.setModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.model = model;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setModel === 'function' && this.model !== null) {
this.compoWrapInstance.setModel(this.model.model);
}
}
};
/**
* @param {?} data
* @return {?}
*/
CalendarEntryPopover.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
_super.prototype.setData.call(this, data);
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
this.compoWrapInstance.setData(this.data);
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getPosition = /**
* @return {?}
*/
function () {
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.position !== null && typeof this.model.position !== 'undefined') {
if (LEFT === this.model.position) {
return LEFT;
}
else if (RIGHT === this.model.position) {
return RIGHT;
}
else if (BELOW === this.model.position) {
return BELOW;
}
else if (ABOVE === this.model.position) {
return ABOVE;
}
}
}
// default is left
return LEFT;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getShowEvent = /**
* @return {?}
*/
function () {
return this.showEvent;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getHideEvent = /**
* @return {?}
*/
function () {
return this.hideEvent;
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.setShowEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.showEvent = event;
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.setHideEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.hideEvent = event;
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
$event.stopPropagation();
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.onFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.onLostFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.hide();
this.setDataParent(null);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
return false;
};
/**
* @param {?} data
* @return {?}
*/
CalendarEntryPopover.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @param {?} entryMapper
* @return {?}
*/
CalendarEntryPopover.prototype.setCalendarEntryMapper = /**
* @param {?} entryMapper
* @return {?}
*/
function (entryMapper) {
this.entryMapper = entryMapper;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setCalendarEntryMapper === 'function') {
this.compoWrapInstance.setCalendarEntryMapper(this.entryMapper);
}
}
};
/**
* @param {?} editor
* @return {?}
*/
CalendarEntryPopover.prototype.setEditor = /**
* @param {?} editor
* @return {?}
*/
function (editor) {
this.editor = editor;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setEditor === 'function') {
this.compoWrapInstance.setEditor(this.editor);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
CalendarEntryPopover.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getEntryMapper = /**
* @return {?}
*/
function () {
return this.entryMapper;
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onPopoverClosed = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.onPopoverClosed === 'function') {
this.compoWrapInstance.onPopoverClosed($event);
}
}
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onAutoSaved = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.onAutoSaved === 'function') {
this.compoWrapInstance.onAutoSaved($event);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isAutoSave = /**
* @return {?}
*/
function () {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.isAutoSave === 'function') {
return this.compoWrapInstance.isAutoSave();
}
}
return false;
};
CalendarEntryPopover.TYPE_NAME = TYPE_NAME;
CalendarEntryPopover.LEFT = LEFT;
CalendarEntryPopover.RIGHT = RIGHT;
CalendarEntryPopover.BELOW = BELOW;
CalendarEntryPopover.ABOVE = ABOVE;
CalendarEntryPopover.POPOVER_SHOW_EVENT = POPOVER_SHOW_EVENT;
CalendarEntryPopover.POPOVER_HIDE_EVENT = POPOVER_HIDE_EVENT;
CalendarEntryPopover.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-calendar-entry-popover\" [class.show]=\"isShow()\" [class.left]=\"getPosition() === 'left'\" [class.right]=\"getPosition() === 'right'\"\n\t[class.above]=\"getPosition() === 'above'\" [class.below]=\"getPosition() === 'below'\">\n\t<div class=\"container-wrapper\">\n\t\t<div class=\"container\">\n\t\t\t<div class=\"wrapper\">\n\t\t\t\t<div class=\"top-bg\"></div>\n\t\t\t\t\t<div class=\"content-wrapper\">\n\t\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t\t<phx-component-wrapper *ngIf=\"!isModelEmpty()\" [type]=\"getModel().type\" [data]=\"getData()\" [handler]=\"_getComponentHandler()\" [dataParent]=\"this\" [model]=\"getModel().model\"></phx-component-wrapper>\n\t\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"container-before\"></div>\n\t\t<div class=\"container-after\"></div>\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
CalendarEntryPopover.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: NeedFocusService, },
]; };
CalendarEntryPopover.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ 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 },],
"model": [{ type: Input },],
"data": [{ type: Input },],
"entryMapper": [{ type: Input },],
"editor": [{ type: Input },],
"showEvent": [{ type: Output, args: ['phxShow',] },],
"hideEvent": [{ type: Output, args: ['phxHide',] },],
"onClick": [{ type: HostListener, args: ['click', ['$event'],] },],
};
tslib_1.__decorate([
Option('show'),
tslib_1.__metadata("design:type", EventEmitter)
], CalendarEntryPopover.prototype, "showEvent", void 0);
tslib_1.__decorate([
Option('hide'),
tslib_1.__metadata("design:type", EventEmitter)
], CalendarEntryPopover.prototype, "hideEvent", void 0);
return CalendarEntryPopover;
}(AbstractHasData));
export { CalendarEntryPopover };
function CalendarEntryPopover_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
CalendarEntryPopover.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
CalendarEntryPopover.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
CalendarEntryPopover.propDecorators;
/** @type {?} */
CalendarEntryPopover.TYPE_NAME;
/** @type {?} */
CalendarEntryPopover.LEFT;
/** @type {?} */
CalendarEntryPopover.RIGHT;
/** @type {?} */
CalendarEntryPopover.BELOW;
/** @type {?} */
CalendarEntryPopover.ABOVE;
/** @type {?} */
CalendarEntryPopover.POPOVER_SHOW_EVENT;
/** @type {?} */
CalendarEntryPopover.POPOVER_HIDE_EVENT;
/** @type {?} */
CalendarEntryPopover.prototype.dataParent;
/** @type {?} */
CalendarEntryPopover.prototype.ignoreParentData;
/** @type {?} */
CalendarEntryPopover.prototype.ignoreParentDisabled;
/** @type {?} */
CalendarEntryPopover.prototype.delegateHistory;
/** @type {?} */
CalendarEntryPopover.prototype.onDisabled;
/** @type {?} */
CalendarEntryPopover.prototype.onEnabled;
/** @type {?} */
CalendarEntryPopover.prototype.loadingEnabled;
/** @type {?} */
CalendarEntryPopover.prototype.i18nKey;
/** @type {?} */
CalendarEntryPopover.prototype.bypass;
/** @type {?} */
CalendarEntryPopover.prototype.options;
/** @type {?} */
CalendarEntryPopover.prototype.model;
/** @type {?} */
CalendarEntryPopover.prototype.data;
/** @type {?} */
CalendarEntryPopover.prototype.entryMapper;
/** @type {?} */
CalendarEntryPopover.prototype.editor;
/** @type {?} */
CalendarEntryPopover.prototype._show;
/** @type {?} */
CalendarEntryPopover.prototype.componentHandler;
/** @type {?} */
CalendarEntryPopover.prototype.compoWrapInstance;
/** @type {?} */
CalendarEntryPopover.prototype.defaultArrowTop;
/** @type {?} */
CalendarEntryPopover.prototype.needFocusService;
/** @type {?} */
CalendarEntryPopover.prototype.showEvent;
/** @type {?} */
CalendarEntryPopover.prototype.hideEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXJFbnRyeVBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9lZGl0b3IuaW50ZXJuYWwvY2FsZW5kYXIuaW50ZXJuYWwvQ2FsZW5kYXJFbnRyeVBvcG92ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBbUIsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUtoRSxxQkFBTSxTQUFTLEdBQVcsNEJBQTRCLENBQUM7QUFFdkQscUJBQU0sSUFBSSxHQUFXLE1BQU0sQ0FBQztBQUM1QixxQkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBQzlCLHFCQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIscUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5QixxQkFBTSxrQkFBa0IsR0FBVyxxQkFBcUIsQ0FBQztBQUN6RCxxQkFBTSxrQkFBa0IsR0FBVyxxQkFBcUIsQ0FBQzs7SUF5QmYsZ0RBQWU7SUFtRHZELDhCQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQXRFLFlBQ0Usa0JBQU0sVUFBVSxDQUFDLFNBTWxCO1FBTEMsS0FBSSxDQUFD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QUNILEtBQUs7aUNBQ0wsS0FBSztpQ0FDTCxLQUFLOzhDQUNRLGtCQUFrQjs4Q0FDbEIsa0JBQWtCOztnQkEvQnZFLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUsMDFCQWlCWDtpQkFDQTs7OztnQkE5QzJCLFVBQVU7Z0JBTTdCLGdCQUFnQjs7OytCQW9EdEIsS0FBSztxQ0FFTCxLQUFLO3lDQUVMLEtBQUs7b0NBRUwsS0FBSzsrQkFFTCxLQUFLOzhCQUVMLEtBQUs7bUNBRUwsS0FBSzs0QkFFTCxLQUFLOzJCQUVMLEtBQUssU0FBQyxZQUFZOzRCQUVsQixLQUFLOzBCQUVMLEtBQUs7eUJBRUwsS0FBSztnQ0FFTCxLQUFLOzJCQUVMLEtBQUs7OEJBUUwsTUFBTSxTQUFDLFNBQVM7OEJBR2hCLE1BQU0sU0FBQyxTQUFTOzRCQXdKaEIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7O1FBNUpoQyxNQUFNLENBQUMsTUFBTSxDQUFDOzBDQUVJLFlBQVk7OztRQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDOzBDQUVJLFlBQVk7OytCQWhHakM7RUErQzBDLGVBQWU7U0FBNUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBIb3N0TGlzdGVuZXIsIFR5cGUsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YSB9IGZyb20gJy4uLy4uLy4uL0Fic3RyYWN0SGFzRGF0YSc7XG5pbXBvcnQgeyBJSGFzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9JSGFzTW9kZWwnO1xuaW1wb3J0IHsgQ2FsZW5kYXJFbnRyeVBvcG92ZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL0NhbGVuZGFyRW50cnlQb3BvdmVyTW9kZWwnO1xuaW1wb3J0IHsgSUNhbGVuZGFyRW50cnlNYXBwZXIgfSBmcm9tICcuLi8uLi9JQ2FsZW5kYXJFbnRyeU1hcHBlcic7XG5pbXBvcnQgeyBJTmVlZEZvY3VzIH0gZnJvbSAnLi4vLi4vLi4vSU5lZWRGb2N1cyc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCB9IGZyb20gJy4uLy4uL0lDYWxlbmRhckVudHJ5UG9wb3ZlckNvbnRlbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhRWRpdG9yIH0gZnJvbSAnLi4vLi4vQWJzdHJhY3REYXRhRWRpdG9yJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vSUhhc0RhdGEnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtY2FsZW5kYXItZW50cnktcG9wb3ZlclwiO1xuXG5jb25zdCBMRUZUOiBzdHJpbmcgPSAnbGVmdCc7XG5jb25zdCBSSUdIVDogc3RyaW5nID0gJ3JpZ2h0JztcbmNvbnN0IEJFTE9XOiBzdHJpbmcgPSAnYmVsb3cnO1xuY29uc3QgQUJPVkU6IHN0cmluZyA9ICdhYm92ZSc7XG5jb25zdCBQT1BPVkVSX1NIT1dfRVZFTlQ6IHN0cmluZyA9ICdjYWxlbmRhcnBvcG92ZXJzaG93JztcbmNvbnN0IFBPUE9WRVJfSElERV9FVkVOVDogc3RyaW5nID0gJ2NhbGVuZGFycG9wb3ZlcmhpZGUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtY2FsZW5kYXItZW50cnktcG9wb3ZlclwiIFtjbGFzcy5zaG93XT1cImlzU2hvdygpXCIgW2NsYXNzLmxlZnRdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ2xlZnQnXCIgW2NsYXNzLnJpZ2h0XT1cImdldFBvc2l0aW9uKCkgPT09ICdyaWdodCdcIlxuXHRbY2xhc3MuYWJvdmVdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ2Fib3ZlJ1wiIFtjbGFzcy5iZWxvd109XCJnZXRQb3NpdGlvbigpID09PSAnYmVsb3cnXCI+XG5cdDxkaXYgY2xhc3M9XCJjb250YWluZXItd3JhcHBlclwiPlxuXHRcdDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0b3AtYmdcIj48L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICpuZ0lmPVwiIWlzTW9kZWxFbXB0eSgpXCIgW3R5cGVdPVwiZ2V0TW9kZWwoKS50eXBlXCIgW2RhdGFdPVwiZ2V0RGF0YSgpXCIgW2hhbmRsZXJdPVwiX2dldENvbXBvbmVudEhhbmRsZXIoKVwiIFtkYXRhUGFyZW50XT1cInRoaXNcIiBbbW9kZWxdPVwiZ2V0TW9kZWwoKS5tb2RlbFwiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImNvbnRhaW5lci1iZWZvcmVcIj48L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWFmdGVyXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyRW50cnlQb3BvdmVyIGV4dGVuZHMgQWJzdHJhY3RIYXNEYXRhIGltcGxlbWVudHMgT25Jbml0LCBJSGFzTW9kZWwsIElOZWVkRm9jdXMsIElDYWxlbmRhckVudHJ5UG9wb3ZlckNvbnRlbnQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRUZUOiBzdHJpbmcgPSBMRUZUO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJJR0hUOiBzdHJpbmcgPSBSSUdIVDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCRUxPVzogc3RyaW5nID0gQkVMT1c7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUJPVkU6IHN0cmluZyA9IEFCT1ZFO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPUE9WRVJfU0hPV19FVkVOVDogc3RyaW5nID0gUE9QT1ZFUl9TSE9XX0VWRU5UO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPUE9WRVJfSElERV9FVkVOVDogc3RyaW5nID0gUE9QT1ZFUl9ISURFX0VWRU5UO1xuXG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIG1vZGVsOiBDYWxlbmRhckVudHJ5UG9wb3Zlck1vZGVsO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcjtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBlZGl0b3I6IEFic3RyYWN0RGF0YUVkaXRvcjtcbiAgcHJpdmF0ZSBfc2hvdzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjb21wb25lbnRIYW5kbGVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBjb21wb1dyYXBJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIGRlZmF1bHRBcnJvd1RvcDogbnVtYmVyO1xuICBwcml2YXRlIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2U7XG4gIEBPcHRpb24oJ3Nob3cnKVxuICBAT3V0cHV0KCdwaHhTaG93JylcbiAgcHJpdmF0ZSBzaG93RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdoaWRlJylcbiAgQE91dHB1dCgncGh4SGlkZScpXG4gIHByaXZhdGUgaGlkZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG4gICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlID0gbmVlZEZvY3VzU2VydmljZTtcbiAgICB0aGlzLl9zaG93ID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0QXJyb3dUb3AgPSAxMDtcbiAgICB0aGlzLnNob3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmhpZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuc2hvd01lbnUodGhpcy5fc2hvdyk7XG4gICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZSA9IG51bGw7XG5cbiAgICAvLyB3aGVuIHdyYXBwZXIgZmluaXNoZWQgcmVuZGVyXG4gICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBsZXQgY29tSW5zdGFuY2UgPSBudWxsO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21JbnN0YW5jZSA9IHJlc3VsdC5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29tSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29tSW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlcih0aGlzLmVudHJ5TWFwcGVyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0RWRpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbUluc3RhbmNlLnNldEVkaXRvcih0aGlzLmVkaXRvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlID0gY29tSW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd01lbnUoaXNTaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2hvdyA9IGlzU2hvdztcblxuICAgIGlmIChpc1Nob3cpIHtcbiAgICAgIGlmICh0aGlzLm5lZWRGb2N1c1NlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2Uuc2V0Rm9jdXNpbmdDb21wb25lbnQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9nZXRDb21wb25lbnRIYW5kbGVyKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRIYW5kbGVyO1xuICB9XG5cbiAgcHVibGljIGlzTW9kZWxFbXB0eSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tb2RlbCA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5tb2RlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBcnJvd1RvcCh0b3A6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0b3AgPT09IG51bGwgfHwgdHlwZW9mIHRvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29udFdyYXBFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZCgnLmNvbnRhaW5lci13cmFwcGVyJyk7XG4gICAgaWYgKHR5cGVvZiBjb250V3JhcEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mICQoY29udFdyYXBFbGVtZW50KS5maW5kKCcuY29udGFpbmVyLWFmdGVyJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICQoY29udFdyYXBFbGVtZW50KS5maW5kKCcuY29udGFpbmVyLWFmdGVyJykuY3NzKFwidG9wXCIsIHRvcCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mICQoY29udFdyYXBFbGVtZW50KS5maW5kKCcuY29udGFpbmVyLWJlZm9yZScpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAkKGNvbnRXcmFwRWxlbWVudCkuZmluZCgnLmNvbnRhaW5lci1iZWZvcmUnKS5jc3MoXCJ0b3BcIiwgdG9wIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TWVudSh0cnVlKTtcblxuICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoUE9QT1ZFUl9TSE9XX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIHRoaXMuc2hvd0V2ZW50LmVtaXQoZXYpO1xuICB9XG5cbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TWVudShmYWxzZSk7XG5cbiAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KFBPUE9WRVJfSElERV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICB0aGlzLmhpZGVFdmVudC5lbWl0KGV2KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3c7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlbChtb2RlbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldE1vZGVsID09PSAnZnVuY3Rpb24nICYmIHRoaXMubW9kZWwgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXRNb2RlbCh0aGlzLm1vZGVsLm1vZGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5wb3NpdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbC5wb3NpdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKExFRlQgPT09IHRoaXMubW9kZWwucG9zaXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gTEVGVDtcbiAgICAgICAgfSBlbHNlIGlmIChSSUdIVCA9PT0gdGhpcy5tb2RlbC5wb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybiBSSUdIVDtcbiAgICAgICAgfSBlbHNlIGlmIChCRUxPVyA9PT0gdGhpcy5tb2RlbC5wb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybiBCRUxPVztcbiAgICAgICAgfSBlbHNlIGlmIChBQk9WRSA9PT0gdGhpcy5tb2RlbC5wb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybiBBQk9WRTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBkZWZhdWx0IGlzIGxlZnRcbiAgICByZXR1cm4gTEVGVDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTaG93RXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNob3dFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaWRlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmhpZGVFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93RXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIaWRlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5oaWRlRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgb25Mb3N0Rm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaGlkZSgpO1xuICAgIHRoaXMuc2V0RGF0YVBhcmVudChudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXRDYWxlbmRhckVudHJ5TWFwcGVyKGVudHJ5TWFwcGVyOiBJQ2FsZW5kYXJFbnRyeU1hcHBlcik6IHZvaWQge1xuICAgIHRoaXMuZW50cnlNYXBwZXIgPSBlbnRyeU1hcHBlcjtcblxuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyKHRoaXMuZW50cnlNYXBwZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3IoZWRpdG9yOiBBYnN0cmFjdERhdGFFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcblxuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldEVkaXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldEVkaXRvcih0aGlzLmVkaXRvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvUHJlbG9hZCgpOiBQcm9taXNlPGFueT4geyAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsgICAgICAgcmVzb2x2ZShudWxsKTsgICAgIH0pOyAgIH0gIHB1YmxpYyBkb0xvYWRlZCgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIGdldEVudHJ5TWFwcGVyKCk6IElDYWxlbmRhckVudHJ5TWFwcGVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeU1hcHBlcjtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJDbG9zZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uUG9wb3ZlckNsb3NlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uUG9wb3ZlckNsb3NlZCgkZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9TYXZlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25BdXRvU2F2ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5vbkF1dG9TYXZlZCgkZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0F1dG9TYXZlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLmlzQXV0b1NhdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UuaXNBdXRvU2F2ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICBcdHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19