com.phloxui
Version:
PhloxUI Ng2+ Framework
497 lines (496 loc) • 34.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, EventEmitter, Output, Input } from '@angular/core';
import { AbstractDataView } from './AbstractDataView';
import { PhloxDataChartModel } from '.././model/models';
import { Option } from '../../decorator/decorators';
import { BEFORE_CHART_SELECT_EVENT, CHART_SELECT_EVENT, CHART_ERROR, CHART_READY } from '../../share/CustomEventType';
import { EventUtils } from '../../share/shares';
var /** @type {?} */ TYPE_NAME = "phxChart";
var PhloxChart = /** @class */ (function (_super) {
tslib_1.__extends(PhloxChart, _super);
function PhloxChart(elementRef) {
var _this = _super.call(this, elementRef) || this;
_this.chartReadyEvent = new EventEmitter(); // before event is not require
_this.chartErrorEvent = new EventEmitter(); // before event is not require
_this.beforeChartSelectEvent = new EventEmitter();
_this.chartSelectEvent = new EventEmitter();
_this.beforeChartMouseOverEvent = new EventEmitter();
_this.chartMouseOverEvent = new EventEmitter();
_this.beforeChartMouseOutEvent = new EventEmitter();
_this.chartMouseOutEvent = new EventEmitter();
return _this;
}
/**
* @return {?}
*/
PhloxChart.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
if (this.chartType !== undefined && this.chartType !== null &&
this.dataTable !== undefined && this.dataTable !== null &&
this.cols !== undefined && this.cols !== null &&
this.rows !== undefined && this.rows !== null) {
this.model = new PhloxDataChartModel(this.chartType, this.dataTable, this.formatters, this.options, this.title, this.subtitle, this.width, this.height, this.cols, this.rows);
}
};
/**
* @return {?}
*/
PhloxChart.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
return false;
};
/**
* @param {?} data
* @return {?}
*/
PhloxChart.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
};
/**
* @return {?}
*/
PhloxChart.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
PhloxChart.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
PhloxChart.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @param {?} dataTable
* @return {?}
*/
PhloxChart.prototype.reloadData = /**
* @param {?} dataTable
* @return {?}
*/
function (dataTable) {
this.model.dataTable = dataTable;
this.model = JSON.parse(JSON.stringify(this.model));
};
/**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
PhloxChart.prototype.onChartSelectEvent = /**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
function (event, fireEvent) {
var _this = this;
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeChartSelectEvent', event, fireEvent, function ($event) {
// doEvent
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeChartSelectEvent($event);
}, function ($event, result) {
// emitAfterEvent
// emitAfterEvent
_this.emitChartSelectEvent($event);
}, function ($event) {
// doPrevented
});
};
/**
* @param {?} $event
* @return {?}
*/
PhloxChart.prototype.emitBeforeChartSelectEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ eventData = null;
// emit event
var /** @type {?} */ data = eventData;
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CHART_SELECT_EVENT, this, data, $event);
if (this.beforeChartSelectEvent !== null && this.beforeChartSelectEvent !== undefined) {
this.beforeChartSelectEvent.emit(ev);
}
};
/**
* @param {?} $event
* @return {?}
*/
PhloxChart.prototype.emitChartSelectEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ eventData = $event;
// emit event
var /** @type {?} */ data = eventData;
var /** @type {?} */ ev = EventUtils.newCustomEvent(CHART_SELECT_EVENT, this, data, $event);
if (this.chartSelectEvent !== null && this.chartSelectEvent !== undefined) {
this.chartSelectEvent.emit(ev);
}
};
/**
* @param {?} $event
* @return {?}
*/
PhloxChart.prototype.emitChartReadyEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ eventData = null;
// emit event
var /** @type {?} */ data = eventData;
var /** @type {?} */ ev = EventUtils.newCustomEvent(CHART_READY, this, data, event);
if (this.chartReadyEvent !== null && this.chartReadyEvent !== undefined) {
this.chartReadyEvent.emit(ev);
}
};
/**
* @param {?} $event
* @return {?}
*/
PhloxChart.prototype.emitChartErrorEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ eventData = null;
// emit event
var /** @type {?} */ data = eventData;
var /** @type {?} */ ev = EventUtils.newCustomEvent(CHART_ERROR, this, data, event);
if (this.chartErrorEvent !== null && this.chartErrorEvent !== undefined) {
this.chartErrorEvent.emit(ev);
}
};
/**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
PhloxChart.prototype.onChartReadyEvent = /**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
function (event, fireEvent) {
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
this.emitChartReadyEvent(event);
};
/**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
PhloxChart.prototype.onChartErrorEvent = /**
* @param {?} event
* @param {?=} fireEvent
* @return {?}
*/
function (event, fireEvent) {
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
this.emitChartErrorEvent(event);
};
/**
* @return {?}
*/
PhloxChart.prototype.getchartReadyEvent = /**
* @return {?}
*/
function () {
return this.chartReadyEvent;
};
/**
* @return {?}
*/
PhloxChart.prototype.getchartErrorEvent = /**
* @return {?}
*/
function () {
return this.chartErrorEvent;
};
/**
* @return {?}
*/
PhloxChart.prototype.getchartSelectEvent = /**
* @return {?}
*/
function () {
return this.chartSelectEvent;
};
/**
* @return {?}
*/
PhloxChart.prototype.getchartMouseOverEvent = /**
* @return {?}
*/
function () {
return this.chartMouseOverEvent;
};
/**
* @return {?}
*/
PhloxChart.prototype.getchartMouseOutEvent = /**
* @return {?}
*/
function () {
return this.chartMouseOutEvent;
};
/**
* @param {?} options
* @return {?}
*/
PhloxChart.prototype.setOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
this.model.options = options;
this.reloadData(this.model.dataTable);
};
/**
* @param {?} chartType
* @return {?}
*/
PhloxChart.prototype.setChartType = /**
* @param {?} chartType
* @return {?}
*/
function (chartType) {
this.model.chartType = chartType;
this.reloadData(this.model.dataTable);
};
/**
* @param {?} title
* @return {?}
*/
PhloxChart.prototype.setTitle = /**
* @param {?} title
* @return {?}
*/
function (title) {
this.model.title = title;
this.reloadData(this.model.dataTable);
};
/**
* @param {?} subtitle
* @return {?}
*/
PhloxChart.prototype.setSubtitle = /**
* @param {?} subtitle
* @return {?}
*/
function (subtitle) {
this.model.subtitle = subtitle;
this.reloadData(this.model.dataTable);
};
/**
* @return {?}
*/
PhloxChart.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @param {?} model
* @return {?}
*/
PhloxChart.prototype.setModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.model = model;
};
PhloxChart.TYPE_NAME = TYPE_NAME;
PhloxChart.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phxChart\">\n <google-chart [data]=\"getModel()\" (chartReady)=\"onChartReadyEvent($event)\" (chartError)=\"onChartErrorEvent($event)\" (chartSelect)=\"onChartSelectEvent($event)\"></google-chart>\n</div> "
},] },
];
/** @nocollapse */
PhloxChart.ctorParameters = function () { return [
{ type: ElementRef, },
]; };
PhloxChart.propDecorators = {
"chartReadyEvent": [{ type: Output, args: ['phxChartReady',] },],
"chartErrorEvent": [{ type: Output, args: ['phxChartError',] },],
"beforeChartSelectEvent": [{ type: Output, args: ['phxBeforeChartSelect',] },],
"chartSelectEvent": [{ type: Output, args: ['phxChartSelect',] },],
"beforeChartMouseOverEvent": [{ type: Output, args: ['phxBeforeChartMouseOver',] },],
"chartMouseOverEvent": [{ type: Output, args: ['phxChartMouseOver',] },],
"beforeChartMouseOutEvent": [{ type: Output, args: ['phxBeforeChartMouseOut',] },],
"chartMouseOutEvent": [{ type: Output, args: ['phxChartMouseOut',] },],
"dataTable": [{ type: Input },],
"chartType": [{ type: Input },],
"formatters": [{ type: Input },],
"title": [{ type: Input },],
"subtitle": [{ type: Input },],
"options": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"cols": [{ type: Input },],
"rows": [{ type: Input },],
};
tslib_1.__decorate([
Option('chartReady'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "chartReadyEvent", void 0);
tslib_1.__decorate([
Option('chartError'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "chartErrorEvent", void 0);
tslib_1.__decorate([
Option('beforeChartSelect'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "beforeChartSelectEvent", void 0);
tslib_1.__decorate([
Option('chartSelect'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "chartSelectEvent", void 0);
tslib_1.__decorate([
Option('beforeChartMouseOver'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "beforeChartMouseOverEvent", void 0);
tslib_1.__decorate([
Option('chartMouseOver'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "chartMouseOverEvent", void 0);
tslib_1.__decorate([
Option('beforeChartMouseOut'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "beforeChartMouseOutEvent", void 0);
tslib_1.__decorate([
Option('chartMouseOut'),
tslib_1.__metadata("design:type", EventEmitter)
], PhloxChart.prototype, "chartMouseOutEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], PhloxChart.prototype, "dataTable", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], PhloxChart.prototype, "chartType", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], PhloxChart.prototype, "formatters", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], PhloxChart.prototype, "title", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], PhloxChart.prototype, "subtitle", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], PhloxChart.prototype, "options", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], PhloxChart.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], PhloxChart.prototype, "height", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], PhloxChart.prototype, "cols", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], PhloxChart.prototype, "rows", void 0);
return PhloxChart;
}(AbstractDataView));
export { PhloxChart };
function PhloxChart_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
PhloxChart.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
PhloxChart.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
PhloxChart.propDecorators;
/** @type {?} */
PhloxChart.TYPE_NAME;
/** @type {?} */
PhloxChart.prototype.chartReadyEvent;
/** @type {?} */
PhloxChart.prototype.chartErrorEvent;
/** @type {?} */
PhloxChart.prototype.beforeChartSelectEvent;
/** @type {?} */
PhloxChart.prototype.chartSelectEvent;
/** @type {?} */
PhloxChart.prototype.beforeChartMouseOverEvent;
/** @type {?} */
PhloxChart.prototype.chartMouseOverEvent;
/** @type {?} */
PhloxChart.prototype.beforeChartMouseOutEvent;
/** @type {?} */
PhloxChart.prototype.chartMouseOutEvent;
/** @type {?} */
PhloxChart.prototype.dataTable;
/** @type {?} */
PhloxChart.prototype.chartType;
/** @type {?} */
PhloxChart.prototype.formatters;
/** @type {?} */
PhloxChart.prototype.title;
/** @type {?} */
PhloxChart.prototype.subtitle;
/** @type {?} */
PhloxChart.prototype.options;
/** @type {?} */
PhloxChart.prototype.width;
/** @type {?} */
PhloxChart.prototype.height;
/** @type {?} */
PhloxChart.prototype.cols;
/** @type {?} */
PhloxChart.prototype.rows;
/** @type {?} */
PhloxChart.prototype.model;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhsb3hDaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZGF0YXZpZXcvUGhsb3hDaGFydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFhLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEQsT0FBTyxFQUE4Ryx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbE8sT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhELHFCQUFNLFNBQVMsR0FBVyxVQUFVLENBQUM7O0lBVUwsc0NBQWdCO0lBZ0U5QyxvQkFBWSxVQUFzQjtRQUFsQyxZQUNFLGtCQUFNLFVBQVUsQ0FBQyxTQVdsQjtRQVRDLEtBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxLQUFJLENBQUMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUMsS0FBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsS0FBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0MsS0FBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUMsS0FBSSxDQUFDLHdC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d0I7dUNBRy9CLE1BQU0sU0FBQyxrQkFBa0I7OEJBR3pCLEtBQUs7OEJBR0wsS0FBSzsrQkFHTCxLQUFLOzBCQUdMLEtBQUs7NkJBR0wsS0FBSzs0QkFHTCxLQUFLOzBCQUdMLEtBQUs7MkJBR0wsS0FBSzt5QkFHTCxLQUFLO3lCQUdMLEtBQUs7OztRQXBETCxNQUFNLENBQUMsWUFBWSxDQUFDOzBDQUVNLFlBQVk7OztRQUN0QyxNQUFNLENBQUMsWUFBWSxDQUFDOzBDQUVNLFlBQVk7OztRQUN0QyxNQUFNLENBQUMsbUJBQW1CLENBQUM7MENBRU0sWUFBWTs7O1FBQzdDLE1BQU0sQ0FBQyxhQUFhLENBQUM7MENBRU0sWUFBWTs7O1FBQ3ZDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQzswQ0FFTSxZQUFZOzs7UUFDaEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDOzBDQUVNLFlBQVk7OztRQUMxQyxNQUFNLENBQUMscUJBQXFCLENBQUM7MENBRU0sWUFBWTs7O1FBQy9DLE1BQU0sQ0FBQyxlQUFlLENBQUM7MENBRU0sWUFBWTs7O1FBR3pDLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7O3FCQTVFWDtFQW1CZ0MsZ0JBQWdCO1NBQW5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3REYXRhVmlldyB9IGZyb20gJy4vQWJzdHJhY3REYXRhVmlldyc7XHJcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uL0lIYXNNb2RlbCc7XHJcbmltcG9ydCB7IFBobG94RGF0YUNoYXJ0TW9kZWwgfSBmcm9tICcuLi8uL21vZGVsL21vZGVscyc7XHJcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgR29vZ2xlQ2hhcnRDb21wb25lbnQgfSBmcm9tICduZzItZ29vZ2xlLWNoYXJ0cyc7XHJcbmltcG9ydCB7IEJFRk9SRV9DSEFSVF9NT1VTRV9PVkVSX0VWRU5ULCBDSEFSVF9NT1VTRV9PVkVSX0VWRU5ULCBCRUZPUkVfQ0hBUlRfTU9VU0VfT1VUX0VWRU5ULCBDSEFSVF9NT1VTRV9PVVRfRVZFTlQsIEJFRk9SRV9DSEFSVF9TRUxFQ1RfRVZFTlQsIENIQVJUX1NFTEVDVF9FVkVOVCwgQ0hBUlRfRVJST1IsIENIQVJUX1JFQURZIH0gZnJvbSAnLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcclxuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlL3NoYXJlcyc7XHJcblxyXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4Q2hhcnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXHJcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHhDaGFydFwiPlxyXG4gICAgPGdvb2dsZS1jaGFydCBbZGF0YV09XCJnZXRNb2RlbCgpXCIgKGNoYXJ0UmVhZHkpPVwib25DaGFydFJlYWR5RXZlbnQoJGV2ZW50KVwiIChjaGFydEVycm9yKT1cIm9uQ2hhcnRFcnJvckV2ZW50KCRldmVudClcIiAoY2hhcnRTZWxlY3QpPVwib25DaGFydFNlbGVjdEV2ZW50KCRldmVudClcIj48L2dvb2dsZS1jaGFydD5cclxuPC9kaXY+IGBcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBQaGxveENoYXJ0IGV4dGVuZHMgQWJzdHJhY3REYXRhVmlldyBpbXBsZW1lbnRzIElIYXNNb2RlbCwgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcclxuXHJcbiAgQE9wdGlvbignY2hhcnRSZWFkeScpXHJcbiAgQE91dHB1dCgncGh4Q2hhcnRSZWFkeScpXHJcbiAgcHJvdGVjdGVkIGNoYXJ0UmVhZHlFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignY2hhcnRFcnJvcicpXHJcbiAgQE91dHB1dCgncGh4Q2hhcnRFcnJvcicpXHJcbiAgcHJvdGVjdGVkIGNoYXJ0RXJyb3JFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignYmVmb3JlQ2hhcnRTZWxlY3QnKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYXJ0U2VsZWN0JylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhcnRTZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignY2hhcnRTZWxlY3QnKVxyXG4gIEBPdXRwdXQoJ3BoeENoYXJ0U2VsZWN0JylcclxuICBwcm90ZWN0ZWQgY2hhcnRTZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignYmVmb3JlQ2hhcnRNb3VzZU92ZXInKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYXJ0TW91c2VPdmVyJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhcnRNb3VzZU92ZXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignY2hhcnRNb3VzZU92ZXInKVxyXG4gIEBPdXRwdXQoJ3BoeENoYXJ0TW91c2VPdmVyJylcclxuICBwcm90ZWN0ZWQgY2hhcnRNb3VzZU92ZXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignYmVmb3JlQ2hhcnRNb3VzZU91dCcpXHJcbiAgQE91dHB1dCgncGh4QmVmb3JlQ2hhcnRNb3VzZU91dCcpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNoYXJ0TW91c2VPdXRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE9wdGlvbignY2hhcnRNb3VzZU91dCcpXHJcbiAgQE91dHB1dCgncGh4Q2hhcnRNb3VzZU91dCcpXHJcbiAgcHJvdGVjdGVkIGNoYXJ0TW91c2VPdXRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRhdGFUYWJsZTogYW55W107XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgY2hhcnRUeXBlOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyczogYW55W107XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgdGl0bGUgOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgc3VidGl0bGU6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBjb2xzOiBhbnlbXTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCByb3dzOiBhbnlbXTtcclxuXHJcbiAgLy8gICBwcm90ZWN0ZWQgY2hhcnRXcmFwcGVyOiBDaGFydFdyYXBwZXI7XHJcbiAgcHJvdGVjdGVkIG1vZGVsOiBQaGxveERhdGFDaGFydE1vZGVsO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZik7XHJcblxyXG4gICAgdGhpcy5jaGFydFJlYWR5RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGJlZm9yZSBldmVudCBpcyBub3QgcmVxdWlyZVxyXG4gICAgdGhpcy5jaGFydEVycm9yRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGJlZm9yZSBldmVudCBpcyBub3QgcmVxdWlyZVxyXG4gICAgdGhpcy5iZWZvcmVDaGFydFNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgdGhpcy5jaGFydFNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgdGhpcy5iZWZvcmVDaGFydE1vdXNlT3ZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgdGhpcy5jaGFydE1vdXNlT3ZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgdGhpcy5iZWZvcmVDaGFydE1vdXNlT3V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB0aGlzLmNoYXJ0TW91c2VPdXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGlmKHRoaXMuY2hhcnRUeXBlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jaGFydFR5cGUgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5kYXRhVGFibGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGFUYWJsZSAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmNvbHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbHMgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5yb3dzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb3dzICE9PSBudWxsICApIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFBobG94RGF0YUNoYXJ0TW9kZWwoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0VHlwZSxcclxuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLFxyXG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZXJzLFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLFxyXG4gICAgICAgICAgdGhpcy50aXRsZSxcclxuICAgICAgICAgIHRoaXMuc3VidGl0bGUsXHJcbiAgICAgICAgICB0aGlzLndpZHRoLFxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICB0aGlzLmNvbHMsXHJcbiAgICAgICAgICB0aGlzLnJvd3NcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG9QcmVsb2FkKCk6IFByb21pc2U8YW55PiB7ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICByZXNvbHZlKG51bGwpOyAgICAgfSk7ICAgfSAgcHVibGljIGRvTG9hZGVkKCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWxvYWREYXRhKGRhdGFUYWJsZTogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwuZGF0YVRhYmxlID0gZGF0YVRhYmxlO1xyXG4gICAgdGhpcy5tb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhcnRTZWxlY3RFdmVudChldmVudDogYW55LCBmaXJlRXZlbnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZpcmVFdmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgRXZlbnRVdGlscy5oYW5kbGVCcm93c2VyRXZlbnQodGhpcywgJ2JlZm9yZUNoYXJ0U2VsZWN0RXZlbnQnLCBldmVudCwgZmlyZUV2ZW50LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICAvLyBkb0V2ZW50XHJcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICAvLyBlbWl0QmVmb3JlRXZlbnRcclxuICAgICAgdGhpcy5lbWl0QmVmb3JlQ2hhcnRTZWxlY3RFdmVudCgkZXZlbnQpO1xyXG4gICAgfSwgKCRldmVudDogRXZlbnQsIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIC8vIGVtaXRBZnRlckV2ZW50XHJcbiAgICAgIHRoaXMuZW1pdENoYXJ0U2VsZWN0RXZlbnQoJGV2ZW50KTtcclxuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8vIGRvUHJldmVudGVkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0QmVmb3JlQ2hhcnRTZWxlY3RFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBsZXQgZXZlbnREYXRhOiBhbnkgPSBudWxsXHJcblxyXG4gICAgLy8gZW1pdCBldmVudFxyXG4gICAgbGV0IGRhdGE6IGFueSA9IGV2ZW50RGF0YTtcclxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX0NIQVJUX1NFTEVDVF9FVkVOVCwgdGhpcywgZGF0YSwgJGV2ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5iZWZvcmVDaGFydFNlbGVjdEV2ZW50ICE9PSBudWxsICYmIHRoaXMuYmVmb3JlQ2hhcnRTZWxlY3RFdmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuYmVmb3JlQ2hhcnRTZWxlY3RFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0Q2hhcnRTZWxlY3RFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBsZXQgZXZlbnREYXRhOiBhbnkgPSAkZXZlbnRcclxuXHJcbiAgICAvLyBlbWl0IGV2ZW50XHJcbiAgICBsZXQgZGF0YTogYW55ID0gZXZlbnREYXRhO1xyXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChDSEFSVF9TRUxFQ1RfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRTZWxlY3RFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNoYXJ0U2VsZWN0RXZlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNoYXJ0U2VsZWN0RXZlbnQuZW1pdChldik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZW1pdENoYXJ0UmVhZHlFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBsZXQgZXZlbnREYXRhOiBhbnkgPSBudWxsXHJcblxyXG4gICAgLy8gZW1pdCBldmVudFxyXG4gICAgbGV0IGRhdGE6IGFueSA9IGV2ZW50RGF0YTtcclxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQ0hBUlRfUkVBRFksIHRoaXMsIGRhdGEsIGV2ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydFJlYWR5RXZlbnQgIT09IG51bGwgJiYgdGhpcy5jaGFydFJlYWR5RXZlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNoYXJ0UmVhZHlFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0Q2hhcnRFcnJvckV2ZW50KCRldmVudDogRXZlbnQpIHtcclxuICAgIGxldCBldmVudERhdGE6IGFueSA9IG51bGxcclxuXHJcbiAgICAvLyBlbWl0IGV2ZW50XHJcbiAgICBsZXQgZGF0YTogYW55ID0gZXZlbnREYXRhO1xyXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChDSEFSVF9FUlJPUiwgdGhpcywgZGF0YSwgZXZlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0RXJyb3JFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNoYXJ0RXJyb3JFdmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRFcnJvckV2ZW50LmVtaXQoZXYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhcnRSZWFkeUV2ZW50KGV2ZW50OiBhbnksIGZpcmVFdmVudD86IGJvb2xlYW4pIHtcclxuICAgIGlmIChmaXJlRXZlbnQgPT09IG51bGwgfHwgZmlyZUV2ZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgZmlyZUV2ZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRDaGFydFJlYWR5RXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhcnRFcnJvckV2ZW50KGV2ZW50OiBhbnksIGZpcmVFdmVudD86IGJvb2xlYW4pIHtcclxuICAgIGlmIChmaXJlRXZlbnQgPT09IG51bGwgfHwgZmlyZUV2ZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgZmlyZUV2ZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRDaGFydEVycm9yRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldGNoYXJ0UmVhZHlFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydFJlYWR5RXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Y2hhcnRFcnJvckV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0RXJyb3JFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRjaGFydFNlbGVjdEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VsZWN0RXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Y2hhcnRNb3VzZU92ZXJFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydE1vdXNlT3ZlckV2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldGNoYXJ0TW91c2VPdXRFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydE1vdXNlT3V0RXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLnJlbG9hZERhdGEodGhpcy5tb2RlbC5kYXRhVGFibGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoYXJ0VHlwZShjaGFydFR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbC5jaGFydFR5cGUgPSBjaGFydFR5cGU7XHJcbiAgICB0aGlzLnJlbG9hZERhdGEodGhpcy5tb2RlbC5kYXRhVGFibGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMucmVsb2FkRGF0YSh0aGlzLm1vZGVsLmRhdGFUYWJsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U3VidGl0bGUoc3VidGl0bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbC5zdWJ0aXRsZSA9IHN1YnRpdGxlO1xyXG4gICAgdGhpcy5yZWxvYWREYXRhKHRoaXMubW9kZWwuZGF0YVRhYmxlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBQaGxveERhdGFDaGFydE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBQaGxveERhdGFDaGFydE1vZGVsKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgfVxyXG59XHJcbiJdfQ==