ng-fancy-gui
Version:
This package contains components, for creating userinterfaces in a Angular app.
155 lines • 24.6 kB
JavaScript
import { __decorate } from "tslib";
import { Component, EventEmitter, Output, ViewChild, HostListener } from '@angular/core';
import { HorizontalLine } from './classes/horizontalLine';
import { Mouse } from './classes/mouse';
var SliderInfiniteComponent = /** @class */ (function () {
function SliderInfiniteComponent() {
this.change = new EventEmitter();
this.horizontalLines = [];
this.value = 0;
this.renderingValue = '0.00';
this.spaceing = 30;
this.lineThikness = 3;
this.lineColor = 'gray';
this.horizontalLinesMarginTop = 25;
this.horizontalLineMove = 0;
}
SliderInfiniteComponent.prototype.ngAfterViewInit = function () {
this.canvas = this.canvasVc.nativeElement;
this.ctx = this.canvas.getContext('2d');
this.init();
};
SliderInfiniteComponent.prototype.ngOnDestroy = function () {
window.cancelAnimationFrame(this.animationFrameHandler);
};
SliderInfiniteComponent.prototype.clear = function () {
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
};
SliderInfiniteComponent.prototype.init = function () {
this.mouse = new Mouse(this);
this.resize();
this.initRenderingLoop();
this.initMouseEvents();
};
SliderInfiniteComponent.prototype.initRenderingLoop = function () {
var _this = this;
var step = function () {
_this.render();
window.requestAnimationFrame(step);
};
this.animationFrameHandler = window.requestAnimationFrame(step);
};
SliderInfiniteComponent.prototype.initMouseEvents = function () {
var _this = this;
this.canvas.onmousemove = function (evt) {
var delta = (_this.mouse.lastX - _this.mouse.x);
if (_this.mouse.isDown) {
_this.addMissingLines();
_this.horizontalLineMove += delta;
_this.value = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100);
_this.renderingValue = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100).toFixed(2);
if (delta > 0) {
_this.change.emit(1);
}
else if (delta < 0) {
_this.change.emit(-1);
}
}
_this.mouse.syncPosition(evt);
};
this.canvas.ontouchmove = function (evt) {
evt.preventDefault();
var delta = (_this.mouse.lastX - _this.mouse.x);
if (_this.mouse.isDown) {
_this.addMissingLines();
_this.horizontalLineMove += delta;
_this.value = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100);
_this.renderingValue = (Math.round((_this.horizontalLineMove / _this.spaceing) * 100) / 100).toFixed(2);
if (delta > 0) {
_this.change.emit(1);
}
else {
_this.change.emit(-1);
}
}
_this.mouse.syncTouchPosition(evt);
};
};
SliderInfiniteComponent.prototype.addMissingLines = function () {
//console.log(this.horizontalLineMove)
// console.log(this.horizontalLines.filter( x=> x.x - this.horizontalLineMove > this.canvas.width).length);
var _this = this;
var offsetRight = this.horizontalLines.filter(function (x) { return x.x - _this.horizontalLineMove > _this.canvas.width; }).length;
var offsetLeft = this.horizontalLines.filter(function (x) { return x.x - _this.horizontalLineMove < 0; }).length;
//console.log(offsetRight);
while (offsetRight <= 1) {
var lastLine = this.horizontalLines[this.horizontalLines.length - 1];
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, lastLine.x + this.spaceing, this.horizontalLinesMarginTop, null, this));
this.horizontalLines.shift();
offsetRight = this.horizontalLines.filter(function (x) { return x.x - _this.horizontalLineMove > _this.canvas.width; }).length;
//console.log(offsetRight);
}
;
while (offsetLeft <= 1) {
var lastLine = this.horizontalLines[0];
this.horizontalLines.unshift(new HorizontalLine(this.lineThikness, 100, lastLine.x - this.spaceing, this.horizontalLinesMarginTop, null, this));
this.horizontalLines.pop();
offsetLeft = this.horizontalLines.filter(function (x) { return x.x - _this.horizontalLineMove < 0; }).length;
// console.log(offsetRight);
}
;
};
SliderInfiniteComponent.prototype.resize = function () {
//console.log("resize slider infinite")
var parent = this.canvas.parentElement;
this.canvas.width = parent.clientWidth;
// this.canvas.height = parent.clientHeight;
this.horizontalLines = [];
this.horizontalLineMove = 0;
this.addHorizontalLines();
};
SliderInfiniteComponent.prototype.render = function () {
this.clear();
this.ctx.beginPath();
this.ctx.arc(this.canvas.width / 2, 10, 5, 0, 2 * Math.PI);
this.ctx.fillStyle = this.lineColor;
this.ctx.fill();
this.ctx.closePath();
this.horizontalLines.forEach(function (x) {
x.render();
});
};
SliderInfiniteComponent.prototype.addHorizontalLines = function () {
for (var i = 0; i <= ((this.canvas.width / 2) / (this.lineThikness + this.spaceing)) + 2; i++) {
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) + (i * this.spaceing), this.horizontalLinesMarginTop, i, this));
}
for (var i = 0; i >= -((this.canvas.width / 2) / (this.lineThikness + this.spaceing)) - 2; i--) {
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) - ((i * (-1)) * this.spaceing), this.horizontalLinesMarginTop, i, this));
}
};
SliderInfiniteComponent.prototype.resetValue = function () {
this.value = 0;
this.horizontalLineMove = 0;
this.renderingValue = '0.00';
this.change.emit(this.value);
};
__decorate([
Output()
], SliderInfiniteComponent.prototype, "change", void 0);
__decorate([
ViewChild('canvas')
], SliderInfiniteComponent.prototype, "canvasVc", void 0);
__decorate([
HostListener('window:resize')
], SliderInfiniteComponent.prototype, "resize", null);
SliderInfiniteComponent = __decorate([
Component({
selector: 'fg-slider-infinite',
template: "<div class=\"rotationSliderCanvasWrap\">\n <canvas #canvas></canvas>\n</div>\n",
styles: [":host{display:block;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.valueOuterWrapper{position:absolute;top:0;left:50%;transform:translate(-50%,0)}.valueOuterWrapper .valueWrapper{border-radius:7px;padding:5px 15px 5px 18px;position:relative;width:25px;height:25px;margin:0 auto;transition:width .5s,background-color .5s}.valueOuterWrapper .valueWrapper svg{width:25px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.valueOuterWrapper .valueWrapper .value{margin-top:5px;text-align:center;display:none;font-size:13px;font-weight:700}.valueOuterWrapper .valueWrapper .resetButton{position:absolute;display:none;color:#fff;background-color:#000;width:15px;height:15px;border-radius:20px;border:none;outline:0;right:8px;font-size:9px;top:50%;transform:translate(0,-50%)}.valueOuterWrapper .valueWrapper.visible{background-color:#aaa9a9;width:100px}.valueOuterWrapper .valueWrapper.visible svg{position:absolute;left:17px;width:20px;display:block}.valueOuterWrapper .valueWrapper.visible .resetButton,.valueOuterWrapper .valueWrapper.visible .value{display:block}"]
})
], SliderInfiniteComponent);
return SliderInfiniteComponent;
}());
export { SliderInfiniteComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWZhbmN5LWd1aS8iLCJzb3VyY2VzIjpbImxpYi9zbGlkZXItaW5maW5pdGUvc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQTRCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBT3hDO0lBb0JFO1FBakJVLFdBQU0sR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU01RCxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFDdkMsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLG1CQUFjLEdBQVcsTUFBTSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLDZCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxDQUFDLENBQUM7SUFJUixDQUFDO0lBR2hCLGlEQUFlLEdBQWY7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELDZDQUFXLEdBQVg7UUFDRSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELHVDQUFLLEdBQUw7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHNDQUFJLEdBQUo7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsbURBQWlCLEdBQWpCO1FBQUEsaUJBUUM7UUFOQyxJQUFNLElBQUksR0FBRztZQUNYLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUE7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxpREFBZSxHQUFmO1FBQUEsaUJBMkNDO1FBMUNDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLFVBQUMsR0FBRztZQUU1QixJQUFNLEtBQUssR0FBRyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEQsSUFBSSxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDckIsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixLQUFJLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO2dCQUVqQyxLQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2pGLEtBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBR3JHLElBQUcsS0FBSyxHQUFHLENBQUMsRUFBQztvQkFDWCxLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckI7cUJBQUssSUFBRyxLQUFLLEdBQUcsQ0FBQyxFQUFDO29CQUNqQixLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjthQUVGO1lBQ0QsS0FBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsVUFBQyxHQUFHO1lBQzVCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUVyQixJQUFNLEtBQUssR0FBRyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEQsSUFBSSxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDckIsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixLQUFJLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO2dCQUVqQyxLQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2pGLEtBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXJHLElBQUcsS0FBSyxHQUFHLENBQUMsRUFBQztvQkFDWCxLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckI7cUJBQUk7b0JBQ0gsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtZQUNELEtBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUdELGlEQUFlLEdBQWY7UUFDRSxzQ0FBc0M7UUFDdkMsMkdBQTJHO1FBRjVHLGlCQXlCQztRQXBCQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBRSxVQUFBLENBQUMsSUFBRyxPQUFBLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFqRCxDQUFpRCxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdHLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFFLFVBQUEsQ0FBQyxJQUFHLE9BQUEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUFqQyxDQUFpQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRTVGLDJCQUEyQjtRQUMzQixPQUFPLFdBQVcsSUFBSSxDQUFDLEVBQUM7WUFDdEIsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFFLFVBQUEsQ0FBQyxJQUFHLE9BQUEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQWpELENBQWlELENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekcsMkJBQTJCO1NBQzVCO1FBQUEsQ0FBQztRQUVGLE9BQU8sVUFBVSxJQUFJLENBQUMsRUFBQztZQUNyQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQixVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUUsVUFBQSxDQUFDLElBQUcsT0FBQSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEVBQWpDLENBQWlDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekYsNEJBQTRCO1NBQzVCO1FBQUEsQ0FBQztJQUVKLENBQUM7SUFHRCx3Q0FBTSxHQUFOO1FBQ0UsdUNBQXVDO1FBQ3ZDLElBQU0sTUFBTSxHQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3Q0FBTSxHQUFOO1FBQ0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7WUFDNUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0RBQWtCLEdBQWxCO1FBQ0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUNsQyxHQUFHLEVBQ0gsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQzdDLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsQ0FBQyxFQUNELElBQUksQ0FBQyxDQUNSLENBQUM7U0FDSDtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixJQUFJLGNBQWMsQ0FDaEIsSUFBSSxDQUFDLFlBQVksRUFDakIsR0FBRyxFQUNILENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3RELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLEVBQ2hDLElBQUksQ0FBQyxDQUNSLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCw0Q0FBVSxHQUFWO1FBQ0UsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBakxTO1FBQVQsTUFBTSxFQUFFOzJEQUFtRDtJQUV2QztRQUFwQixTQUFTLENBQUMsUUFBUSxDQUFDOzZEQUFVO0lBMkg5QjtRQURDLFlBQVksQ0FBQyxlQUFlLENBQUM7eURBUzdCO0lBeElVLHVCQUF1QjtRQUxuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLDJGQUErQzs7U0FFaEQsQ0FBQztPQUNXLHVCQUF1QixDQXFMbkM7SUFBRCw4QkFBQztDQUFBLEFBckxELElBcUxDO1NBckxZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSG9yaXpvbnRhbExpbmUgfSBmcm9tICcuL2NsYXNzZXMvaG9yaXpvbnRhbExpbmUnO1xuaW1wb3J0IHsgTW91c2UgfSBmcm9tICcuL2NsYXNzZXMvbW91c2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZy1zbGlkZXItaW5maW5pdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVySW5maW5pdGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzVmM7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBtb3VzZTogTW91c2U7XG4gIGhvcml6b250YWxMaW5lczogSG9yaXpvbnRhbExpbmVbXSA9IFtdO1xuICB2YWx1ZSA9IDA7XG4gIHJlbmRlcmluZ1ZhbHVlOiBzdHJpbmcgPSAnMC4wMCc7XG4gIHNwYWNlaW5nID0gMzA7XG4gIGxpbmVUaGlrbmVzcyA9IDM7XG4gIGxpbmVDb2xvciA9ICdncmF5JztcbiAgaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wID0gMjU7XG4gIGhvcml6b250YWxMaW5lTW92ZSA9IDA7XG4gIHByaXZhdGUgYW5pbWF0aW9uRnJhbWVIYW5kbGVyO1xuXG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FudmFzID0gdGhpcy5jYW52YXNWYy5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSGFuZGxlcik7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2UodGhpcyk7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLmluaXRSZW5kZXJpbmdMb29wKCk7XG4gICAgdGhpcy5pbml0TW91c2VFdmVudHMoKTtcbiAgfVxuXG4gIGluaXRSZW5kZXJpbmdMb29wKCkge1xuXG4gICAgY29uc3Qgc3RlcCA9ICgpPT4ge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgfVxuXG4gICAgdGhpcy5hbmltYXRpb25GcmFtZUhhbmRsZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICB9XG5cbiAgaW5pdE1vdXNlRXZlbnRzKCkge1xuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2dCkgPT4ge1xuXG4gICAgICBjb25zdCBkZWx0YSA9ICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KTtcblxuICAgICAgaWYgKHRoaXMubW91c2UuaXNEb3duKSB7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZ0xpbmVzKCk7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICs9IGRlbHRhO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YWx1ZSA9IChNYXRoLnJvdW5kKCh0aGlzLmhvcml6b250YWxMaW5lTW92ZSAvIHRoaXMuc3BhY2VpbmcpICogMTAwKSAvIDEwMCk7XG4gICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApLnRvRml4ZWQoMik7XG5cblxuICAgICAgICBpZihkZWx0YSA+IDApe1xuICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoMSk7XG4gICAgICAgIH1lbHNlIGlmKGRlbHRhIDwgMCl7XG4gICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9XG4gICAgICB0aGlzLm1vdXNlLnN5bmNQb3NpdGlvbihldnQpO1xuICAgIH07XG5cbiAgICB0aGlzLmNhbnZhcy5vbnRvdWNobW92ZSA9IChldnQpID0+IHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBkZWx0YSA9ICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KTtcblxuICAgICAgaWYgKHRoaXMubW91c2UuaXNEb3duKSB7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZ0xpbmVzKCk7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICs9IGRlbHRhO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YWx1ZSA9IChNYXRoLnJvdW5kKCh0aGlzLmhvcml6b250YWxMaW5lTW92ZSAvIHRoaXMuc3BhY2VpbmcpICogMTAwKSAvIDEwMCk7XG4gICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApLnRvRml4ZWQoMik7XG5cbiAgICAgICAgaWYoZGVsdGEgPiAwKXtcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KDEpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5tb3VzZS5zeW5jVG91Y2hQb3NpdGlvbihldnQpO1xuICAgIH07XG4gIH1cblxuXG4gIGFkZE1pc3NpbmdMaW5lcygpIHtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlKVxuICAgLy8gY29uc29sZS5sb2codGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoKTtcblxuXG4gICAgbGV0IG9mZnNldFJpZ2h0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoO1xuICAgIGxldCBvZmZzZXRMZWZ0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPCAwKS5sZW5ndGg7XG5cbiAgICAvL2NvbnNvbGUubG9nKG9mZnNldFJpZ2h0KTtcbiAgICB3aGlsZSAob2Zmc2V0UmlnaHQgPD0gMSl7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IHRoaXMuaG9yaXpvbnRhbExpbmVzW3RoaXMuaG9yaXpvbnRhbExpbmVzLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChuZXcgSG9yaXpvbnRhbExpbmUodGhpcy5saW5lVGhpa25lc3MsIDEwMCwgbGFzdExpbmUueCArIHRoaXMuc3BhY2VpbmcsIHRoaXMuaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wLCBudWxsLCB0aGlzKSk7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5zaGlmdCgpOyBcbiAgICAgIG9mZnNldFJpZ2h0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoO1xuICAgICAgLy9jb25zb2xlLmxvZyhvZmZzZXRSaWdodCk7XG4gICAgfTtcblxuICAgIHdoaWxlIChvZmZzZXRMZWZ0IDw9IDEpe1xuICAgICAgY29uc3QgbGFzdExpbmUgPSB0aGlzLmhvcml6b250YWxMaW5lc1swXTtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzLnVuc2hpZnQobmV3IEhvcml6b250YWxMaW5lKHRoaXMubGluZVRoaWtuZXNzLCAxMDAsIGxhc3RMaW5lLnggLXRoaXMuc3BhY2VpbmcsIHRoaXMuaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wLCBudWxsLCB0aGlzKSk7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5wb3AoKTsgXG4gICAgICBvZmZzZXRMZWZ0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPCAwKS5sZW5ndGg7XG4gICAgIC8vIGNvbnNvbGUubG9nKG9mZnNldFJpZ2h0KTtcbiAgICB9O1xuICBcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICByZXNpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcInJlc2l6ZSBzbGlkZXIgaW5maW5pdGVcIilcbiAgICBjb25zdCBwYXJlbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudDtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHBhcmVudC5jbGllbnRXaWR0aDtcbiAgICAvLyB0aGlzLmNhbnZhcy5oZWlnaHQgPSBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzID0gW107XG4gICAgdGhpcy5ob3Jpem9udGFsTGluZU1vdmU9MDtcbiAgICB0aGlzLmFkZEhvcml6b250YWxMaW5lcygpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICB0aGlzLmN0eC5hcmModGhpcy5jYW52YXMud2lkdGggLyAyLCAxMCwgNSwgMCwgMiAqIE1hdGguUEkpO1xuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcblxuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzLmZvckVhY2goeCA9PiB7XG4gICAgICB4LnJlbmRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkSG9yaXpvbnRhbExpbmVzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9ICgodGhpcy5jYW52YXMud2lkdGggLyAyKSAvICh0aGlzLmxpbmVUaGlrbmVzcyArIHRoaXMuc3BhY2VpbmcpKSArIDI7IGkrKykge1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChcbiAgICAgICAgbmV3IEhvcml6b250YWxMaW5lKHRoaXMubGluZVRoaWtuZXNzLFxuICAgICAgICAgIDEwMCxcbiAgICAgICAgICAodGhpcy5jYW52YXMud2lkdGggLyAyKSArIChpICogdGhpcy5zcGFjZWluZyksXG4gICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXNNYXJnaW5Ub3AsXG4gICAgICAgICAgaSxcbiAgICAgICAgICB0aGlzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA+PSAtKCh0aGlzLmNhbnZhcy53aWR0aCAvIDIpIC8gKHRoaXMubGluZVRoaWtuZXNzICsgdGhpcy5zcGFjZWluZykpIC0gMjsgaS0tKSB7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5wdXNoKFxuICAgICAgICBuZXcgSG9yaXpvbnRhbExpbmUoXG4gICAgICAgICAgdGhpcy5saW5lVGhpa25lc3MsXG4gICAgICAgICAgMTAwLFxuICAgICAgICAgICh0aGlzLmNhbnZhcy53aWR0aCAvIDIpIC0gKChpICogKC0xKSkgKiB0aGlzLnNwYWNlaW5nKSxcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxMaW5lc01hcmdpblRvcCwgaSxcbiAgICAgICAgICB0aGlzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXNldFZhbHVlKCkge1xuICAgIHRoaXMudmFsdWUgPSAwO1xuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlID0gMDtcbiAgICB0aGlzLnJlbmRlcmluZ1ZhbHVlID0gJzAuMDAnO1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==