com.phloxui
Version:
PhloxUI Ng2+ Framework
751 lines (750 loc) • 68 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { AbstractHasData } from '../AbstractHasData';
import { NeedFocusService } from '../../service/NeedFocusService.service';
import { Option } from '../../decorator/Option.decorator';
import { ComponentSlidePaneModel } from '../model/models';
import { EventUtils } from '../../share/utils/EventUtils';
import { BEFORE_SHOW_EVENT, SHOW_EVENT, HIDE_EVENT, BEFORE_HIDE_EVENT } from '../../share/CustomEventType';
import { ValidationStatus } from '../validate/ValidationStatus';
const /** @type {?} */ HIDE_ON_CLICK_DELAY = 100;
const /** @type {?} */ TYPE_NAME = "phx-component-slidepane";
const /** @type {?} */ LEFT = 'left';
const /** @type {?} */ RIGHT = 'right';
const /** @type {?} */ TOP = 'top';
const /** @type {?} */ BOTTOM = 'bottom';
export class ComponentSlidePane extends AbstractHasData {
/**
* @param {?} elementRef
* @param {?} needFocusService
*/
constructor(elementRef, needFocusService) {
super(elementRef);
this.needFocusService = needFocusService;
this.elementRef = elementRef;
this._show = false;
this.showEvent = new EventEmitter();
this.beforeShowEvent = new EventEmitter();
this.hideEvent = new EventEmitter();
this.beforeHideEvent = new EventEmitter();
this.focusEvent = new EventEmitter();
this.beforeFocusEvent = new EventEmitter();
this.lostFocusEvent = new EventEmitter();
this.beforeLostFocusEvent = new EventEmitter();
this._compClicked = false;
// when wrapper finished render
this._componentHandler = (result) => {
let /** @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 (this.componentHandler !== null && this.componentHandler !== undefined) {
this.componentHandler.call(this, result);
}
this.compoWrapInstance = comInstance;
};
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
this.comSlidepane = $(this.elementRef.nativeElement).find(".component-slidepane");
if (this.position === null || typeof this.position === 'undefined') {
this.position = LEFT;
}
if (this.autoFocus === null || this.autoFocus === undefined || typeof this.autoFocus !== 'boolean') {
this.autoFocus = true;
}
if (this.width === null || this.width === undefined || typeof this.width !== 'string') {
this.width = undefined;
}
if (this.height === null || this.height === undefined || typeof this.height !== 'string') {
this.height = undefined;
}
if (this.model.slidePaneWidth !== null && this.model.slidePaneWidth !== undefined && typeof this.model.slidePaneWidth === 'string') {
this.width = this.model.slidePaneWidth;
}
if (this.model.slidePaneHeight !== null && this.model.slidePaneHeight !== undefined && typeof this.model.slidePaneHeight === 'string') {
this.height = this.model.slidePaneHeight;
}
if (this.model.styleClass !== null && this.model.styleClass !== undefined && typeof this.model.styleClass === "object") {
if (this.model.styleClass.length > 0) {
for (let /** @type {?} */ c of this.model.styleClass) {
this.comSlidepane.addClass(c);
}
}
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (this._show && changes['position'] !== undefined && changes['position'] !== null) {
if (changes['position'].currentValue !== changes['position'].previousValue) {
this.resetPosition();
if (this.width !== undefined) {
$(this.comSlidepane[0]).css('width', this.width);
}
if (this.height !== undefined) {
$(this.comSlidepane[0]).css('height', this.height);
}
this.setPosition();
}
}
if (changes['model'] !== null && changes['model'] !== undefined) {
if (changes['model'].currentValue.slidePaneWidth !== null && changes['model'].currentValue.slidePaneWidth !== undefined && typeof changes['model'].currentValue.slidePaneWidth !== undefined) {
this.width = changes['model'].currentValue.slidePaneWidth;
}
}
if (changes['model'] !== null && changes['model'] !== undefined) {
if (changes['model'].currentValue.slidePaneHeight !== null && changes['model'].currentValue.slidePaneHeight !== undefined && typeof changes['model'].currentValue.slidePaneHeight !== undefined) {
this.height = changes['model'].currentValue.slidePaneHeight;
}
}
}
/**
* @return {?}
*/
getModel() {
return this.model;
}
/**
* @param {?} model
* @return {?}
*/
setModel(model) {
this.model = model;
}
/**
* @param {?} event
* @return {?}
*/
onFocus(event) {
if (!this.autoFocus) {
return;
}
this.show();
}
/**
* @param {?} event
* @return {?}
*/
onLostFocus(event) {
if (!this.autoFocus) {
return;
}
let /** @type {?} */ doHide = true;
if (this.autoValidate && this.compoWrapInstance && typeof this.compoWrapInstance.validateData === 'function') {
let /** @type {?} */ results = this.compoWrapInstance.validateData();
if (results && results.length > 0) {
for (let /** @type {?} */ result of results) {
if (!result) {
continue;
}
if (result.getStatus() === ValidationStatus.ERROR) {
doHide = false;
break;
}
}
}
}
if (doHide) {
setTimeout(() => {
if (!this.isChildFocused()) {
this.hide();
}
}, HIDE_ON_CLICK_DELAY);
}
}
/**
* @return {?}
*/
isModelEmpty() {
if (this.model === null || typeof this.model === 'undefined') {
return true;
}
return false;
}
/**
* @return {?}
*/
doPreload() { return new Promise((resolve, reject) => { resolve(null); }); }
/**
* @return {?}
*/
doLoaded() {
}
/**
* @return {?}
*/
isSelfDataDirty() {
return false;
}
/**
* @param {?} data
* @return {?}
*/
selfSaveData(data) {
}
/**
* @return {?}
*/
selfResetData() {
}
/**
* @return {?}
*/
isShow() {
return this._show;
}
/**
* @return {?}
*/
getWidth() {
return this.width;
}
/**
* @return {?}
*/
getHeight() {
return this.height;
}
/**
* @return {?}
*/
getShowEvent() {
return this.showEvent;
}
/**
* @param {?} event
* @return {?}
*/
setShowEvent(event) {
this.showEvent = event;
}
/**
* @return {?}
*/
getHideEvent() {
return this.hideEvent;
}
/**
* @param {?} event
* @return {?}
*/
setHideEvent(event) {
this.hideEvent = event;
}
/**
* @param {?} autoFocus
* @return {?}
*/
setAutoFocus(autoFocus) {
this.autoFocus = autoFocus;
}
/**
* @return {?}
*/
isAutoFocus() {
return this.autoFocus;
}
/**
* @return {?}
*/
getPosition() {
if (this.position !== null && typeof this.position !== 'undefined') {
if (LEFT === this.position) {
return LEFT;
}
else if (RIGHT === this.position) {
return RIGHT;
}
else if (BOTTOM === this.position) {
return BOTTOM;
}
else if (TOP === this.position) {
return TOP;
}
}
// default is left
return LEFT;
}
/**
* @param {?=} data
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
show(data, $event, fireEvent) {
let /** @type {?} */ byPassModel = false;
if (data !== undefined && data !== null) {
this.data = data;
}
if (this.anchor !== null && typeof this.anchor !== 'undefined') {
let /** @type {?} */ anchorElement = $(this.anchor);
if (anchorElement !== null && typeof anchorElement !== 'undefined') {
byPassModel = true;
}
this.showSlidePane(true, $event, fireEvent);
}
}
/**
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
hide($event, fireEvent) {
this.showSlidePane(false, $event, fireEvent);
}
/**
* @return {?}
*/
resetPosition() {
this.comSlidepane[0].removeAttribute('style');
}
/**
* @return {?}
*/
setPosition() {
if (this.position === LEFT) {
// Slide Pane left
$(this.comSlidepane[0]).css('left', '0');
}
else if (this.position === RIGHT) {
// Slide Pane right
$(this.comSlidepane[0]).css('right', '0');
}
else if (this.position === TOP) {
// Slide Pane top
$(this.comSlidepane[0]).css('top', '0');
}
else if (this.position === BOTTOM) {
// Slide Pane bottom
$(this.comSlidepane[0]).css('bottom', '0');
}
}
/**
* @return {?}
*/
isChildFocused() {
let /** @type {?} */ focused = this.needFocusService.getFocusingComponent();
let /** @type {?} */ isChild = false;
while (focused && !isChild) {
if (focused === this.compoWrapInstance) {
isChild = true;
}
else {
if (typeof focused.getDataParent === 'function') {
focused = focused.getDataParent();
}
else {
focused = null;
}
}
}
return isChild;
}
/**
* @return {?}
*/
doHide() {
this.resetPosition();
this._show = false;
}
/**
* @return {?}
*/
doShow() {
this._show = true;
if (this.width !== undefined) {
$(this.comSlidepane[0]).css('width', this.width);
}
if (this.height !== undefined) {
$(this.comSlidepane[0]).css('height', this.height);
}
this.setPosition();
if (this.compoWrapInstance !== null && this.compoWrapInstance !== undefined && this.autoFocus) {
if (!this.isChildFocused()) {
this.needFocusService.setFocusingComponent(this.compoWrapInstance);
}
}
}
/**
* @param {?} isShow
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
showSlidePane(isShow, $event, fireEvent) {
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
if (isShow) {
EventUtils.handleBrowserEvent(this, 'beforeShowEvent', $event, fireEvent, ($event) => {
// doEvent
this.doShow();
}, ($event) => {
// emitBeforeEvent
this.emitBeforeShowEvent($event);
}, ($event) => {
// emitAfterEvent
this.emitShowEvent($event);
}, ($event) => {
// doPrevented
});
}
else {
EventUtils.handleBrowserEvent(this, 'beforeHideEvent', $event, fireEvent, ($event) => {
// doEvent
this.doHide();
if (this.needFocusService !== null) {
if (this.autoFocus && this.needFocusService.getFocusingComponent() === this) {
this.needFocusService.resetFocusingComponent();
}
}
}, ($event) => {
// emitBeforeEvent
this.emitBeforeHideEvent($event);
}, ($event) => {
// emitAfterEvent
this.emitHideEvent($event);
}, ($event) => {
// doPrevented
});
}
}
/**
* @param {?=} $event
* @return {?}
*/
emitBeforeShowEvent($event) {
let /** @type {?} */ eventData = null;
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SHOW_EVENT, this, data, $event);
if (this.beforeShowEvent !== null && this.beforeShowEvent !== undefined) {
this.beforeShowEvent.emit(ev);
}
}
/**
* @param {?=} $event
* @return {?}
*/
emitShowEvent($event) {
let /** @type {?} */ eventData = null;
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(SHOW_EVENT, this, data, $event);
if (this.showEvent !== null && this.showEvent !== undefined) {
this.showEvent.emit(ev);
}
}
/**
* @param {?=} $event
* @return {?}
*/
emitBeforeHideEvent($event) {
let /** @type {?} */ eventData = null;
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_HIDE_EVENT, this, data, $event);
if (this.beforeHideEvent !== null && this.beforeHideEvent !== undefined) {
this.beforeHideEvent.emit(ev);
}
}
/**
* @param {?=} $event
* @return {?}
*/
emitHideEvent($event) {
let /** @type {?} */ eventData = null;
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(HIDE_EVENT, this, data, $event);
if (this.hideEvent !== null && this.hideEvent !== undefined) {
this.hideEvent.emit(ev);
}
}
}
ComponentSlidePane.TYPE_NAME = TYPE_NAME;
ComponentSlidePane.LEFT = LEFT;
ComponentSlidePane.RIGHT = RIGHT;
ComponentSlidePane.TOP = TOP;
ComponentSlidePane.BOTTOM = BOTTOM;
ComponentSlidePane.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-component-slidepane">
<div class="background-fake" *ngIf="isShow()"></div>
<div class="component-slidepane" [style.width]="getWidth()" [style.height]="getHeight()" [class.show]="isShow()" [class.left]="getPosition() === 'left'" [class.right]="getPosition() === 'right'"
[class.top]="getPosition() === 'top'" [class.bottom]="getPosition() === 'bottom'">
<div class="container-wrapper">
<phx-component-wrapper *ngIf="!isModelEmpty()" [type]="getModel().type" [data]="getData()" [handler]="_componentHandler"
[dataParent]="this" [model]="getModel().model"></phx-component-wrapper>
</div>
</div>
<!-- <button type="button" class="fake" (focusin)="_doFocus($event)" (blur)="_doLostFocus($event)"></button> -->
</div>`
},] },
];
/** @nocollapse */
ComponentSlidePane.ctorParameters = () => [
{ type: ElementRef, },
{ type: NeedFocusService, },
];
ComponentSlidePane.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 },],
"model": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"position": [{ type: Input },],
"autoFocus": [{ type: Input },],
"anchor": [{ type: Input },],
"instance": [{ type: Input },],
"autoValidate": [{ type: Input },],
"componentHandler": [{ type: Input },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },],
"showEvent": [{ type: Output, args: ['phxShow',] },],
"beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },],
"hideEvent": [{ type: Output, args: ['phxHide',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentSlidePane.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentSlidePane.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentSlidePane.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentSlidePane.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", ComponentSlidePaneModel)
], ComponentSlidePane.prototype, "model", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "height", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "position", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentSlidePane.prototype, "autoFocus", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "anchor", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "instance", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentSlidePane.prototype, "autoValidate", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentSlidePane.prototype, "componentHandler", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('beforeShow'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "beforeShowEvent", void 0);
tslib_1.__decorate([
Option('show'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "showEvent", void 0);
tslib_1.__decorate([
Option('beforeHide'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "beforeHideEvent", void 0);
tslib_1.__decorate([
Option('hide'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "hideEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentSlidePane.prototype, "lostFocusEvent", void 0);
function ComponentSlidePane_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentSlidePane.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentSlidePane.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentSlidePane.propDecorators;
/** @type {?} */
ComponentSlidePane.TYPE_NAME;
/** @type {?} */
ComponentSlidePane.LEFT;
/** @type {?} */
ComponentSlidePane.RIGHT;
/** @type {?} */
ComponentSlidePane.TOP;
/** @type {?} */
ComponentSlidePane.BOTTOM;
/** @type {?} */
ComponentSlidePane.prototype.dataParent;
/** @type {?} */
ComponentSlidePane.prototype.ignoreParentData;
/** @type {?} */
ComponentSlidePane.prototype.data;
/** @type {?} */
ComponentSlidePane.prototype.ignoreParentDisabled;
/** @type {?} */
ComponentSlidePane.prototype.delegateHistory;
/** @type {?} */
ComponentSlidePane.prototype.onDisabled;
/** @type {?} */
ComponentSlidePane.prototype.onEnabled;
/** @type {?} */
ComponentSlidePane.prototype.loadingEnabled;
/** @type {?} */
ComponentSlidePane.prototype.i18nKey;
/** @type {?} */
ComponentSlidePane.prototype.bypass;
/** @type {?} */
ComponentSlidePane.prototype.options;
/** @type {?} */
ComponentSlidePane.prototype.disabled;
/** @type {?} */
ComponentSlidePane.prototype.model;
/** @type {?} */
ComponentSlidePane.prototype.width;
/** @type {?} */
ComponentSlidePane.prototype.height;
/** @type {?} */
ComponentSlidePane.prototype.position;
/** @type {?} */
ComponentSlidePane.prototype.autoFocus;
/** @type {?} */
ComponentSlidePane.prototype.anchor;
/** @type {?} */
ComponentSlidePane.prototype.instance;
/** @type {?} */
ComponentSlidePane.prototype.autoValidate;
/** @type {?} */
ComponentSlidePane.prototype.componentHandler;
/** @type {?} */
ComponentSlidePane.prototype.loadEvent;
/** @type {?} */
ComponentSlidePane.prototype.beforeShowEvent;
/** @type {?} */
ComponentSlidePane.prototype.showEvent;
/** @type {?} */
ComponentSlidePane.prototype.beforeHideEvent;
/** @type {?} */
ComponentSlidePane.prototype.hideEvent;
/** @type {?} */
ComponentSlidePane.prototype.beforeFocusEvent;
/** @type {?} */
ComponentSlidePane.prototype.focusEvent;
/** @type {?} */
ComponentSlidePane.prototype.beforeLostFocusEvent;
/** @type {?} */
ComponentSlidePane.prototype.lostFocusEvent;
/** @type {?} */
ComponentSlidePane.prototype.elementRef;
/** @type {?} */
ComponentSlidePane.prototype._show;
/** @type {?} */
ComponentSlidePane.prototype.compoWrapInstance;
/** @type {?} */
ComponentSlidePane.prototype.needFocusService;
/** @type {?} */
ComponentSlidePane.prototype._compClicked;
/** @type {?} */
ComponentSlidePane.prototype.comSlidepane;
/** @type {?} */
ComponentSlidePane.prototype._componentHandler;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50U2xpZGVQYW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9Db21wb25lbnRTbGlkZVBhbmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBc0IsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2hFLHVCQUFNLG1CQUFtQixHQUFXLEdBQUcsQ0FBQztBQUN4Qyx1QkFBTSxTQUFTLEdBQVcseUJBQXlCLENBQUM7QUFFcEQsdUJBQU0sSUFBSSxHQUFXLE1BQU0sQ0FBQztBQUM1Qix1QkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBQzlCLHVCQUFNLEdBQUcsR0FBVyxLQUFLLENBQUM7QUFDMUIsdUJBQU0sTUFBTSxHQUFXLFFBQVEsQ0FBQztBQWlCaEMsTUFBTSx5QkFBMEIsU0FBUSxlQUFlOzs7OztJQXVIbkQsWUFBWSxVQUFzQixFQUFFLGdCQUFrQztRQUNsRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFD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c0NBQ1EsdUJBQXVCOzs7SUFFdkMsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFO3NDQUNtQixRQUFROzs7SUFLbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLFlBQVksQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLFlBQVksQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHakMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3NDQUNNLFlBQVk7OztJQUUzQyxNQUFNLENBQUMsV0FBVyxDQUFDO3NDQUNNLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgSG9zdExpc3RlbmVyLCBUeXBlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YSB9IGZyb20gJy4uL0Fic3RyYWN0SGFzRGF0YSc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUhhc01vZGVsIH0gZnJvbSAnLi4vSUhhc01vZGVsJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuLi9JTmVlZEZvY3VzJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2xpZGVQYW5lTW9kZWwsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnOyBcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcbmltcG9ydCB7IEJFRk9SRV9TSE9XX0VWRU5ULCBTSE9XX0VWRU5ULCBISURFX0VWRU5ULCBCRUZPUkVfSElERV9FVkVOVCB9IGZyb20gJy4uLy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU3RhdHVzIH0gZnJvbSAnLi4vdmFsaWRhdGUvVmFsaWRhdGlvblN0YXR1cyc7XG5cblxuY29uc3QgSElERV9PTl9DTElDS19ERUxBWTogbnVtYmVyID0gMTAwO1xuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb21wb25lbnQtc2xpZGVwYW5lXCI7XG5cbmNvbnN0IExFRlQ6IHN0cmluZyA9ICdsZWZ0JztcbmNvbnN0IFJJR0hUOiBzdHJpbmcgPSAncmlnaHQnO1xuY29uc3QgVE9QOiBzdHJpbmcgPSAndG9wJztcbmNvbnN0IEJPVFRPTTogc3RyaW5nID0gJ2JvdHRvbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gICAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtY29tcG9uZW50LXNsaWRlcGFuZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kLWZha2VcIiAqbmdJZj1cImlzU2hvdygpXCI+PC9kaXY+IFxuICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtc2xpZGVwYW5lXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoKClcIiBbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbY2xhc3MubGVmdF09XCJnZXRQb3NpdGlvbigpID09PSAnbGVmdCdcIiBbY2xhc3MucmlnaHRdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgIFtjbGFzcy50b3BdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ3RvcCdcIiBbY2xhc3MuYm90dG9tXT1cImdldFBvc2l0aW9uKCkgPT09ICdib3R0b20nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgPHBoeC1jb21wb25lbnQtd3JhcHBlciAqbmdJZj1cIiFpc01vZGVsRW1wdHkoKVwiIFt0eXBlXT1cImdldE1vZGVsKCkudHlwZVwiIFtkYXRhXT1cImdldERhdGEoKVwiIFtoYW5kbGVyXT1cIl9jb21wb25lbnRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCIgW21vZGVsXT1cImdldE1vZGVsKCkubW9kZWxcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZha2VcIiAoZm9jdXNpbik9XCJfZG9Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiX2RvTG9zdEZvY3VzKCRldmVudClcIj48L2J1dHRvbj4gLS0+XG48L2Rpdj5gXG59KSBcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTbGlkZVBhbmUgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGEgaW1wbGVtZW50cyBPbkluaXQsIElIYXNNb2RlbCwgSU5lZWRGb2N1cyB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRUZUOiBzdHJpbmcgPSBMRUZUO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklHSFQ6IHN0cmluZyA9IFJJR0hUO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9QOiBzdHJpbmcgPSBUT1A7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBCT1RUT006IHN0cmluZyA9IEJPVFRPTTtcblxuICAgIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICAgIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gICAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gICAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvLyAtLS0gU2VsZiBcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBtb2RlbDogQ29tcG9uZW50U2xpZGVQYW5lTW9kZWw7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBwb3NpdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGF1dG9Gb2N1czogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBhbmNob3I6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpbnN0YW5jZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGF1dG9WYWxpZGF0ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQE91dHB1dCgncGh4TG9hZCcpXG4gICAgQE9wdGlvbignbG9hZCcpXG4gICAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgLy8gLS0tIFNlbGZcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVTaG93JylcbiAgICBAT3B0aW9uKCdiZWZvcmVTaG93JylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlU2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhTaG93JylcbiAgICBAT3B0aW9uKCdzaG93JylcbiAgICBwcm90ZWN0ZWQgc2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUhpZGUnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUhpZGUnKVxuICAgIHByb3RlY3RlZCBiZWZvcmVIaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEhpZGUnKVxuICAgIEBPcHRpb24oJ2hpZGUnKVxuICAgIHByb3RlY3RlZCBoaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gICAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE91dHB1dCgncGh4Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2ZvY3VzJylcbiAgICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm