UNPKG

@blare/angular2gridster

Version:

[![npm version](https://badge.fury.io/js/angular2gridster.svg)](https://badge.fury.io/js/angular2gridster)

683 lines 46.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ var GridListItem = /** @class */ (function () { function GridListItem() { } Object.defineProperty(GridListItem.prototype, "$element", { get: /** * @return {?} */ function () { return this.getItem().$element; }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "x", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; return this.getValueX(breakpoint); }, set: /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; this.setValueX(value, breakpoint); }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "y", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; return this.getValueY(breakpoint); }, set: /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; this.setValueY(value, breakpoint); }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "w", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; return this.getValueW(breakpoint); }, set: /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; this.setValueW(value, breakpoint); }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "h", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; return this.getValueH(breakpoint); }, set: /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var item = this.getItem(); /** @type {?} */ var breakpoint = item.gridster ? item.gridster.options.breakpoint : null; this.setValueH(value, breakpoint); }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "autoSize", { get: /** * @return {?} */ function () { return this.getItem().autoSize; }, set: /** * @param {?} value * @return {?} */ function (value) { this.getItem().autoSize = value; }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "dragAndDrop", { get: /** * @return {?} */ function () { return !!this.getItem().dragAndDrop; }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "resizable", { get: /** * @return {?} */ function () { return !!this.getItem().resizable; }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "positionX", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.itemComponent || this.itemPrototype; if (!item) { return null; } return item.positionX; }, enumerable: true, configurable: true }); Object.defineProperty(GridListItem.prototype, "positionY", { get: /** * @return {?} */ function () { /** @type {?} */ var item = this.itemComponent || this.itemPrototype; if (!item) { return null; } return item.positionY; }, enumerable: true, configurable: true }); /** * @param {?} item * @return {?} */ GridListItem.prototype.setFromGridsterItem = /** * @param {?} item * @return {?} */ function (item) { if (this.isItemSet()) { throw new Error('GridListItem is already set.'); } this.itemComponent = item; return this; }; /** * @param {?} item * @return {?} */ GridListItem.prototype.setFromGridsterItemPrototype = /** * @param {?} item * @return {?} */ function (item) { if (this.isItemSet()) { throw new Error('GridListItem is already set.'); } this.itemPrototype = item; return this; }; /** * @param {?} item * @return {?} */ GridListItem.prototype.setFromObjectLiteral = /** * @param {?} item * @return {?} */ function (item) { if (this.isItemSet()) { throw new Error('GridListItem is already set.'); } this.itemObject = item; return this; }; /** * @return {?} */ GridListItem.prototype.copy = /** * @return {?} */ function () { /** @type {?} */ var itemCopy = new GridListItem(); return itemCopy.setFromObjectLiteral({ $element: this.$element, x: this.x, y: this.y, w: this.w, h: this.h, autoSize: this.autoSize, dragAndDrop: this.dragAndDrop, resizable: this.resizable }); }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.copyForBreakpoint = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var itemCopy = new GridListItem(); return itemCopy.setFromObjectLiteral({ $element: this.$element, x: this.getValueX(breakpoint), y: this.getValueY(breakpoint), w: this.getValueW(breakpoint), h: this.getValueH(breakpoint), autoSize: this.autoSize, dragAndDrop: this.dragAndDrop, resizable: this.resizable }); }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getValueX = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.getItem(); return item[this.getXProperty(breakpoint)]; }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getValueY = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.getItem(); return item[this.getYProperty(breakpoint)]; }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getValueW = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.getItem(); return item[this.getWProperty(breakpoint)] || 1; }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getValueH = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.getItem(); return item[this.getHProperty(breakpoint)] || 1; }; /** * @param {?} value * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.setValueX = /** * @param {?} value * @param {?=} breakpoint * @return {?} */ function (value, breakpoint) { /** @type {?} */ var item = this.getItem(); item[this.getXProperty(breakpoint)] = value; }; /** * @param {?} value * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.setValueY = /** * @param {?} value * @param {?=} breakpoint * @return {?} */ function (value, breakpoint) { /** @type {?} */ var item = this.getItem(); item[this.getYProperty(breakpoint)] = value; }; /** * @param {?} value * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.setValueW = /** * @param {?} value * @param {?=} breakpoint * @return {?} */ function (value, breakpoint) { /** @type {?} */ var item = this.getItem(); item[this.getWProperty(breakpoint)] = value; }; /** * @param {?} value * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.setValueH = /** * @param {?} value * @param {?=} breakpoint * @return {?} */ function (value, breakpoint) { /** @type {?} */ var item = this.getItem(); item[this.getHProperty(breakpoint)] = value; }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.triggerChangeX = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.itemComponent; if (item) { item[this.getXProperty(breakpoint) + 'Change'].emit(this.getValueX(breakpoint)); } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.triggerChangeY = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.itemComponent; if (item) { item[this.getYProperty(breakpoint) + 'Change'].emit(this.getValueY(breakpoint)); } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.triggerChangeW = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.itemComponent; if (item) { item[this.getWProperty(breakpoint) + 'Change'].emit(this.getValueW(breakpoint)); } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.triggerChangeH = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var item = this.itemComponent; if (item) { item[this.getHProperty(breakpoint) + 'Change'].emit(this.getValueH(breakpoint)); } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.hasPositions = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { /** @type {?} */ var x = this.getValueX(breakpoint); /** @type {?} */ var y = this.getValueY(breakpoint); return (x || x === 0) && (y || y === 0); }; /** * @param {?=} gridster * @return {?} */ GridListItem.prototype.applyPosition = /** * @param {?=} gridster * @return {?} */ function (gridster) { /** @type {?} */ var position = this.calculatePosition(gridster); this.itemComponent.positionX = position.left; this.itemComponent.positionY = position.top; this.itemComponent.updateElemenetPosition(); }; /** * @param {?=} gridster * @return {?} */ GridListItem.prototype.calculatePosition = /** * @param {?=} gridster * @return {?} */ function (gridster) { if (!gridster && !this.itemComponent) { return { left: 0, top: 0 }; } gridster = gridster || this.itemComponent.gridster; return { left: this.x * gridster.cellWidth, top: this.y * gridster.cellHeight }; }; /** * @param {?=} gridster * @return {?} */ GridListItem.prototype.applySize = /** * @param {?=} gridster * @return {?} */ function (gridster) { /** @type {?} */ var size = this.calculateSize(gridster); this.$element.style.width = size.width + 'px'; this.$element.style.height = size.height + 'px'; }; /** * @param {?=} gridster * @return {?} */ GridListItem.prototype.calculateSize = /** * @param {?=} gridster * @return {?} */ function (gridster) { if (!gridster && !this.itemComponent) { return { width: 0, height: 0 }; } gridster = gridster || this.itemComponent.gridster; /** @type {?} */ var width = this.getValueW(gridster.options.breakpoint); /** @type {?} */ var height = this.getValueH(gridster.options.breakpoint); if (gridster.options.direction === 'vertical') { width = Math.min(width, gridster.options.lanes); } if (gridster.options.direction === 'horizontal') { height = Math.min(height, gridster.options.lanes); } return { width: width * gridster.cellWidth, height: height * gridster.cellHeight }; }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getXProperty = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { if (breakpoint && this.itemComponent) { return GridListItem.X_PROPERTY_MAP[breakpoint]; } else { return 'x'; } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getYProperty = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { if (breakpoint && this.itemComponent) { return GridListItem.Y_PROPERTY_MAP[breakpoint]; } else { return 'y'; } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getWProperty = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { if (this.itemPrototype) { return this.itemPrototype[GridListItem.W_PROPERTY_MAP[breakpoint]] ? GridListItem.W_PROPERTY_MAP[breakpoint] : 'w'; } /** @type {?} */ var item = this.getItem(); /** @type {?} */ var responsiveSizes = item.gridster && item.gridster.options.responsiveSizes; if (breakpoint && responsiveSizes) { return GridListItem.W_PROPERTY_MAP[breakpoint]; } else { return 'w'; } }; /** * @param {?=} breakpoint * @return {?} */ GridListItem.prototype.getHProperty = /** * @param {?=} breakpoint * @return {?} */ function (breakpoint) { if (this.itemPrototype) { return this.itemPrototype[GridListItem.H_PROPERTY_MAP[breakpoint]] ? GridListItem.H_PROPERTY_MAP[breakpoint] : 'h'; } /** @type {?} */ var item = this.getItem(); /** @type {?} */ var responsiveSizes = item.gridster && item.gridster.options.responsiveSizes; if (breakpoint && responsiveSizes) { return GridListItem.H_PROPERTY_MAP[breakpoint]; } else { return 'h'; } }; /** * @return {?} */ GridListItem.prototype.getItem = /** * @return {?} */ function () { /** @type {?} */ var item = this.itemComponent || this.itemPrototype || this.itemObject; if (!item) { throw new Error('GridListItem is not set.'); } return item; }; /** * @return {?} */ GridListItem.prototype.isItemSet = /** * @return {?} */ function () { return this.itemComponent || this.itemPrototype || this.itemObject; }; GridListItem.BREAKPOINTS = ['sm', 'md', 'lg', 'xl']; GridListItem.X_PROPERTY_MAP = { sm: 'xSm', md: 'xMd', lg: 'xLg', xl: 'xXl' }; GridListItem.Y_PROPERTY_MAP = { sm: 'ySm', md: 'yMd', lg: 'yLg', xl: 'yXl' }; GridListItem.W_PROPERTY_MAP = { sm: 'wSm', md: 'wMd', lg: 'wLg', xl: 'wXl' }; GridListItem.H_PROPERTY_MAP = { sm: 'hSm', md: 'hMd', lg: 'hLg', xl: 'hXl' }; return GridListItem; }()); export { GridListItem }; if (false) { /** @type {?} */ GridListItem.BREAKPOINTS; /** @type {?} */ GridListItem.X_PROPERTY_MAP; /** @type {?} */ GridListItem.Y_PROPERTY_MAP; /** @type {?} */ GridListItem.W_PROPERTY_MAP; /** @type {?} */ GridListItem.H_PROPERTY_MAP; /** @type {?} */ GridListItem.prototype.itemComponent; /** @type {?} */ GridListItem.prototype.itemPrototype; /** @type {?} */ GridListItem.prototype.itemObject; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZExpc3RJdGVtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGJsYXJlL2FuZ3VsYXIyZ3JpZHN0ZXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZExpc3QvR3JpZExpc3RJdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJQTtJQUFBO0lBcVhBLENBQUM7SUFuVkcsc0JBQUksa0NBQVE7Ozs7UUFBWjtZQUNJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQzs7Ozs7UUFDRCxVQUFPLEtBQWE7O2dCQUNWLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FOQTtJQVFELHNCQUFJLDJCQUFDOzs7O1FBQUw7O2dCQUNVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztnQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUxRSxPQUFPLElBQUksQ0FBQyxT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QixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxxQ0FBYzs7OztJQUFyQixVQUFzQixVQUFXOztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWE7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Ozs7SUFFTSxtQ0FBWTs7OztJQUFuQixVQUFvQixVQUFXOztZQUNyQixDQUFD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VCxFQUFFLEVBQUUsS0FBSztRQUNULEVBQUUsRUFBRSxLQUFLO1FBQ1QsRUFBRSxFQUFFLEtBQUs7S0FDWixDQUFDO0lBRUssMkJBQWMsR0FBUTtRQUN6QixFQUFFLEVBQUUsS0FBSztRQUNULEVBQUUsRUFBRSxLQUFLO1FBQ1QsRUFBRSxFQUFFLEtBQUs7UUFDVCxFQUFFLEVBQUUsS0FBSztLQUNaLENBQUM7SUF5Vk4sbUJBQUM7Q0FBQSxBQXJYRCxJQXFYQztTQXJYWSxZQUFZOzs7SUFDckIseUJBQTZEOztJQUM3RCw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRiw0QkFLRTs7SUFFRixxQ0FBcUM7O0lBQ3JDLHFDQUE4Qzs7SUFDOUMsa0NBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZHN0ZXItaXRlbS9ncmlkc3Rlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkc3Rlckl0ZW1Qcm90b3R5cGVEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkc3Rlci1wcm90b3R5cGUvZ3JpZHN0ZXItaXRlbS1wcm90b3R5cGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRzdGVyU2VydmljZSB9IGZyb20gJy4uL2dyaWRzdGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgR3JpZExpc3RJdGVtIHtcbiAgICBzdGF0aWMgQlJFQUtQT0lOVFM6IEFycmF5PHN0cmluZz4gPSBbJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG4gICAgc3RhdGljIFhfUFJPUEVSVFlfTUFQOiBhbnkgPSB7XG4gICAgICAgIHNtOiAneFNtJyxcbiAgICAgICAgbWQ6ICd4TWQnLFxuICAgICAgICBsZzogJ3hMZycsXG4gICAgICAgIHhsOiAneFhsJ1xuICAgIH07XG5cbiAgICBzdGF0aWMgWV9QUk9QRVJUWV9NQVA6IGFueSA9IHtcbiAgICAgICAgc206ICd5U20nLFxuICAgICAgICBtZDogJ3lNZCcsXG4gICAgICAgIGxnOiAneUxnJyxcbiAgICAgICAgeGw6ICd5WGwnXG4gICAgfTtcblxuICAgIHN0YXRpYyBXX1BST1BFUlRZX01BUDogYW55ID0ge1xuICAgICAgICBzbTogJ3dTbScsXG4gICAgICAgIG1kOiAnd01kJyxcbiAgICAgICAgbGc6ICd3TGcnLFxuICAgICAgICB4bDogJ3dYbCdcbiAgICB9O1xuXG4gICAgc3RhdGljIEhfUFJPUEVSVFlfTUFQOiBhbnkgPSB7XG4gICAgICAgIHNtOiAnaFNtJyxcbiAgICAgICAgbWQ6ICdoTWQnLFxuICAgICAgICBsZzogJ2hMZycsXG4gICAgICAgIHhsOiAnaFhsJ1xuICAgIH07XG5cbiAgICBpdGVtQ29tcG9uZW50OiBHcmlkc3Rlckl0ZW1Db21wb25lbnQ7XG4gICAgaXRlbVByb3RvdHlwZTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlO1xuICAgIGl0ZW1PYmplY3Q6IGFueTtcblxuICAgIGdldCAkZWxlbWVudCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW0oKS4kZWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgeCAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVYKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgeCAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVYKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgeSAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgeSAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVZKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgdyAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVXKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgdyAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVXKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgaCAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVIKGJyZWFrcG9pbnQpO1xuICAgIH1cbiAgICBzZXQgaCAodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIKHZhbHVlLCBicmVha3BvaW50KTtcbiAgICB9XG5cbiAgICBnZXQgYXV0b1NpemUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtKCkuYXV0b1NpemU7XG4gICAgfVxuICAgIHNldCBhdXRvU2l6ZSAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5nZXRJdGVtKCkuYXV0b1NpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZHJhZ0FuZERyb3AoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0SXRlbSgpLmRyYWdBbmREcm9wO1xuICAgIH1cblxuICAgIGdldCByZXNpemFibGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0SXRlbSgpLnJlc2l6YWJsZTtcbiAgICB9XG5cbiAgICBnZXQgcG9zaXRpb25YKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50IHx8IHRoaXMuaXRlbVByb3RvdHlwZTtcblxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0ucG9zaXRpb25YO1xuICAgIH1cblxuICAgIGdldCBwb3NpdGlvblkoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlO1xuXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5wb3NpdGlvblk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZyb21Hcmlkc3Rlckl0ZW0gKGl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudCk6IEdyaWRMaXN0SXRlbSB7XG4gICAgICAgIGlmICh0aGlzLmlzSXRlbVNldCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWRMaXN0SXRlbSBpcyBhbHJlYWR5IHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQgPSBpdGVtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnJvbUdyaWRzdGVySXRlbVByb3RvdHlwZSAoaXRlbTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlKTogR3JpZExpc3RJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtU2V0KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIGFscmVhZHkgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVByb3RvdHlwZSA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGcm9tT2JqZWN0TGl0ZXJhbCAoaXRlbTogT2JqZWN0KTogR3JpZExpc3RJdGVtIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtU2V0KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIGFscmVhZHkgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbU9iamVjdCA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCkge1xuICAgICAgICBjb25zdCBpdGVtQ29weSA9IG5ldyBHcmlkTGlzdEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gaXRlbUNvcHkuc2V0RnJvbU9iamVjdExpdGVyYWwoe1xuICAgICAgICAgICAgJGVsZW1lbnQ6IHRoaXMuJGVsZW1lbnQsXG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3OiB0aGlzLncsXG4gICAgICAgICAgICBoOiB0aGlzLmgsXG4gICAgICAgICAgICBhdXRvU2l6ZTogdGhpcy5hdXRvU2l6ZSxcbiAgICAgICAgICAgIGRyYWdBbmREcm9wOiB0aGlzLmRyYWdBbmREcm9wLFxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weUZvckJyZWFrcG9pbnQoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbUNvcHkgPSBuZXcgR3JpZExpc3RJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1Db3B5LnNldEZyb21PYmplY3RMaXRlcmFsKHtcbiAgICAgICAgICAgICRlbGVtZW50OiB0aGlzLiRlbGVtZW50LFxuICAgICAgICAgICAgeDogdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCksXG4gICAgICAgICAgICB5OiB0aGlzLmdldFZhbHVlWShicmVha3BvaW50KSxcbiAgICAgICAgICAgIHc6IHRoaXMuZ2V0VmFsdWVXKGJyZWFrcG9pbnQpLFxuICAgICAgICAgICAgaDogdGhpcy5nZXRWYWx1ZUgoYnJlYWtwb2ludCksXG4gICAgICAgICAgICBhdXRvU2l6ZTogdGhpcy5hdXRvU2l6ZSxcbiAgICAgICAgICAgIGRyYWdBbmREcm9wOiB0aGlzLmRyYWdBbmREcm9wLFxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWVYKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcblxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmdldFhQcm9wZXJ0eShicmVha3BvaW50KV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlWShicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5nZXRZUHJvcGVydHkoYnJlYWtwb2ludCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZVcoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpXSB8fCAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZUgoYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQpXSB8fCAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZVgodmFsdWU6IG51bWJlciwgYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIGl0ZW1bdGhpcy5nZXRYUHJvcGVydHkoYnJlYWtwb2ludCldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlWSh2YWx1ZTogbnVtYmVyLCBicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG5cbiAgICAgICAgaXRlbVt0aGlzLmdldFlQcm9wZXJ0eShicmVha3BvaW50KV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmFsdWVXKHZhbHVlOiBudW1iZXIsIGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcblxuICAgICAgICBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZUgodmFsdWU6IG51bWJlciwgYnJlYWtwb2ludD8pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuXG4gICAgICAgIGl0ZW1bdGhpcy5nZXRIUHJvcGVydHkoYnJlYWtwb2ludCldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VYKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0WFByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VZKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0WVByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVkoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VXKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVcoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VIKGJyZWFrcG9pbnQ/KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZUgoYnJlYWtwb2ludCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1Bvc2l0aW9ucyhicmVha3BvaW50Pykge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmdldFZhbHVlWShicmVha3BvaW50KTtcblxuICAgICAgICByZXR1cm4gKHggfHwgeCA9PT0gMCkgJiYgKHkgfHwgeSA9PT0gMCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5UG9zaXRpb24oZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKGdyaWRzdGVyKTtcblxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQucG9zaXRpb25YID0gcG9zaXRpb24ubGVmdDtcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50LnBvc2l0aW9uWSA9IHBvc2l0aW9uLnRvcDtcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50LnVwZGF0ZUVsZW1lbmV0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY3VsYXRlUG9zaXRpb24oZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpOiB7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlcn0ge1xuICAgICAgICBpZiAoIWdyaWRzdGVyICYmICF0aGlzLml0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7bGVmdDogMCwgdG9wOiAwfTtcbiAgICAgICAgfVxuICAgICAgICBncmlkc3RlciA9IGdyaWRzdGVyIHx8IHRoaXMuaXRlbUNvbXBvbmVudC5ncmlkc3RlcjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogdGhpcy54ICogZ3JpZHN0ZXIuY2VsbFdpZHRoLFxuICAgICAgICAgICAgdG9wOiB0aGlzLnkgKiBncmlkc3Rlci5jZWxsSGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5U2l6ZShncmlkc3Rlcj86IEdyaWRzdGVyU2VydmljZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5jYWxjdWxhdGVTaXplKGdyaWRzdGVyKTtcblxuICAgICAgICB0aGlzLiRlbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZS53aWR0aCArICdweCc7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTaXplKGdyaWRzdGVyPzogR3JpZHN0ZXJTZXJ2aWNlKToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSB7XG4gICAgICAgIGlmICghZ3JpZHN0ZXIgJiYgIXRoaXMuaXRlbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt3aWR0aDogMCwgaGVpZ2h0OiAwfTtcbiAgICAgICAgfVxuICAgICAgICBncmlkc3RlciA9IGdyaWRzdGVyIHx8IHRoaXMuaXRlbUNvbXBvbmVudC5ncmlkc3RlcjtcblxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmdldFZhbHVlVyhncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQpO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZUgoZ3JpZHN0ZXIub3B0aW9ucy5icmVha3BvaW50KTtcblxuICAgICAgICBpZiAoZ3JpZHN0ZXIub3B0aW9ucy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIGdyaWRzdGVyLm9wdGlvbnMubGFuZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncmlkc3Rlci5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIGdyaWRzdGVyLm9wdGlvbnMubGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCAqIGdyaWRzdGVyLmNlbGxXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICogZ3JpZHN0ZXIuY2VsbEhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0WFByb3BlcnR5KGJyZWFrcG9pbnQ/OiBzdHJpbmcpIHtcblxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiB0aGlzLml0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBHcmlkTGlzdEl0ZW0uWF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ3gnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRZUHJvcGVydHkoYnJlYWtwb2ludD86IHN0cmluZykge1xuXG4gICAgICAgIGlmIChicmVha3BvaW50ICYmIHRoaXMuaXRlbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIEdyaWRMaXN0SXRlbS5ZX1BST1BFUlRZX01BUFticmVha3BvaW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAneSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdQcm9wZXJ0eShicmVha3BvaW50Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1Qcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1Qcm90b3R5cGVbR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdXSA/XG4gICAgICAgICAgICAgICAgR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdIDogJ3cnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xuICAgICAgICBjb25zdCByZXNwb25zaXZlU2l6ZXMgPSBpdGVtLmdyaWRzdGVyICYmIGl0ZW0uZ3JpZHN0ZXIub3B0aW9ucy5yZXNwb25zaXZlU2l6ZXM7XG5cbiAgICAgICAgaWYgKGJyZWFrcG9pbnQgJiYgcmVzcG9uc2l2ZVNpemVzKSB7XG4gICAgICAgICAgICByZXR1cm4gR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICd3JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SFByb3BlcnR5KGJyZWFrcG9pbnQ/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbVByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVByb3RvdHlwZVtHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF1dID9cbiAgICAgICAgICAgICAgICBHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF0gOiAnaCc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVTaXplcyA9IGl0ZW0uZ3JpZHN0ZXIgJiYgaXRlbS5ncmlkc3Rlci5vcHRpb25zLnJlc3BvbnNpdmVTaXplcztcblxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiByZXNwb25zaXZlU2l6ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2gnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlIHx8IHRoaXMuaXRlbU9iamVjdDtcblxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JpZExpc3RJdGVtIGlzIG5vdCBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0l0ZW1TZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1Db21wb25lbnQgfHwgdGhpcy5pdGVtUHJvdG90eXBlIHx8IHRoaXMuaXRlbU9iamVjdDtcbiAgICB9XG59XG4iXX0=