angular-color-picker-fixed
Version:
Radial Color Picker - Angular
161 lines • 21.4 kB
JavaScript
import { __decorate } from "tslib";
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Platform } from '@angular/cdk/platform';
import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';
import { fromEvent, merge } from 'rxjs';
import { filter, takeUntil, tap } from 'rxjs/operators';
import { calculateQuadrant, determineCSSRotationAngle } from '../helpers/helpers';
var RotatableDirective = /** @class */ (function () {
function RotatableDirective(el, renderer, platform) {
this.el = el;
this.renderer = renderer;
this.platform = platform;
this.dragging = false;
this.rotateStart = new EventEmitter();
this.rotating = new EventEmitter();
this.rotateStop = new EventEmitter();
if (this.platform.IOS || this.platform.ANDROID) {
this.mouseDownEv = 'touchstart';
this.mouseUpEv = 'touchend';
this.mouseMoveEv = 'touchmove';
this.cancelEv = 'touchcancel';
}
else {
this.mouseDownEv = 'mousedown';
this.mouseUpEv = 'mouseup';
this.mouseMoveEv = 'mousemove';
this.cancelEv = 'mouseout';
}
}
Object.defineProperty(RotatableDirective.prototype, "isDisabled", {
get: function () {
return this.disable ? coerceBooleanProperty(this.disable) : false;
},
enumerable: true,
configurable: true
});
RotatableDirective.prototype.ngOnInit = function () {
};
RotatableDirective.prototype.ngOnChanges = function (changes) {
if (changes.angle && changes.angle.currentValue) {
// console.log(changes.angle.currentValue);
var angle = changes.angle.currentValue + 90;
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + angle + "deg)");
}
};
RotatableDirective.prototype.ngAfterViewInit = function () {
var _this = this;
// console.log(this.isDisabled);
requestAnimationFrame(this.initialRender.bind(this));
this.rect = this.el.nativeElement.getBoundingClientRect();
this.mouseUp$ = fromEvent(this.el.nativeElement, this.mouseUpEv, { passive: true });
this.mouseOut$ = fromEvent(this.el.nativeElement, this.cancelEv, { passive: true });
this.mouseDownSub = fromEvent(this.el.nativeElement, this.mouseDownEv, { passive: true })
.pipe(filter(function (val) {
return _this.active && !_this.isDisabled;
}))
.subscribe(function (downEvent) {
_this.dragging = true;
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse down', downEvent, this.rect);
_this.point = _this.createPoint(downEvent);
_this.rotateStart.emit(_this.point);
_this.applyRotation();
_this.mouseMoveSub = fromEvent(_this.el.nativeElement, _this.mouseMoveEv).pipe(takeUntil(merge(_this.mouseOut$, _this.mouseUp$).pipe(tap(function (upEvent) {
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse up', upEvent, this.rect);
_this.dragging = false;
_this.mouseMoveSub.unsubscribe();
_this.rotateStop.emit(_this.point);
})))).subscribe(function (moveEvent) {
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse move', moveEvent, this.rect);
_this.point = _this.createPoint(moveEvent);
// console.log(this.point);
_this.applyRotation();
});
});
};
RotatableDirective.prototype.initialRender = function () {
var angle = this.angle + 90;
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + angle + "deg)");
};
RotatableDirective.prototype.rotationRender = function () {
// console.log(this.rotation);
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + this.rotation + "deg)");
};
RotatableDirective.prototype.ngOnDestroy = function () {
if (this.mouseDownSub) {
this.mouseDownSub.unsubscribe();
}
if (this.mouseMoveSub) {
this.mouseMoveSub.unsubscribe();
}
if (this.mouseUpSub) {
this.mouseUpSub.unsubscribe();
}
// console.log('directive destroy');
};
RotatableDirective.prototype.applyRotation = function () {
var quadrant = calculateQuadrant(this.point);
var rotation = determineCSSRotationAngle(this.point, quadrant);
// console.log(rotation);
this.rotating.emit(rotation);
this.rotation = rotation;
requestAnimationFrame(this.rotationRender.bind(this));
};
RotatableDirective.prototype.createPoint = function (mouseEvent) {
var point;
if (mouseEvent.targetTouches) {
point = {
x: this._normalizeX(mouseEvent.targetTouches[0].clientX),
y: this._normalizeY(mouseEvent.targetTouches[0].clientY)
};
}
else {
point = {
x: this._normalizeX(mouseEvent.clientX),
y: this._normalizeY(mouseEvent.clientY)
};
}
// console.log('point', point);
return point;
};
RotatableDirective.prototype._normalizeX = function (coordX) {
return coordX - this.rect.left - this.rect.width / 2;
};
RotatableDirective.prototype._normalizeY = function (coordY) {
return ((coordY - this.rect.top) * -1) + this.rect.height / 2;
};
RotatableDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: Platform }
]; };
__decorate([
Input()
], RotatableDirective.prototype, "angle", void 0);
__decorate([
Input()
], RotatableDirective.prototype, "disable", void 0);
__decorate([
Input()
], RotatableDirective.prototype, "active", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotateStart", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotating", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotateStop", void 0);
RotatableDirective = __decorate([
Directive({
selector: '[rcpRotatable]'
})
], RotatableDirective);
return RotatableDirective;
}());
export { RotatableDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0ByYWRpYWwtY29sb3ItcGlja2VyL2FuZ3VsYXItY29sb3ItcGlja2VyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvcm90YXRhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFDTCxhQUFhLEVBQ2IsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQTRCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtsRjtJQTZCRSw0QkFDVSxFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsUUFBa0I7UUFGbEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTlCckIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW1CUCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFXcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxD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ZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNhbGN1bGF0ZVF1YWRyYW50LCBkZXRlcm1pbmVDU1NSb3RhdGlvbkFuZ2xlIH0gZnJvbSAnLi4vaGVscGVycy9oZWxwZXJzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3JjcFJvdGF0YWJsZV0nXG59KVxuZXhwb3J0IGNsYXNzIFJvdGF0YWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBwdWJsaWMgcm90YXRpb246IGFueTtcbiAgcHVibGljIGRyYWdnaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBtb3VzZURvd25TdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIG1vdXNlTW92ZVN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgbW91c2VVcFN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVjdDogYW55O1xuXG4gIHB1YmxpYyBjYW5jZWxFdjogc3RyaW5nO1xuICBwdWJsaWMgbW91c2VEb3duRXY6IHN0cmluZztcbiAgcHVibGljIG1vdXNlTW92ZUV2OiBzdHJpbmc7XG4gIHB1YmxpYyBtb3VzZVVwRXY6IHN0cmluZztcblxuICBASW5wdXQoKSBhbmdsZTogbnVtYmVyO1xuICBASW5wdXQoKSBkaXNhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmU6IGJvb2xlYW47XG5cbiAgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZSA/IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLmRpc2FibGUpIDogZmFsc2U7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcm90YXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGVTdG9wID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBwb2ludDogYW55O1xuICBwcml2YXRlIG1vdXNlVXAkOiBPYnNlcnZhYmxlPGFueT47XG4gIHByaXZhdGUgbW91c2VPdXQkOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgKSB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uSU9TIHx8IHRoaXMucGxhdGZvcm0uQU5EUk9JRCkge1xuICAgICAgdGhpcy5tb3VzZURvd25FdiA9ICd0b3VjaHN0YXJ0JztcbiAgICAgIHRoaXMubW91c2VVcEV2ID0gJ3RvdWNoZW5kJztcbiAgICAgIHRoaXMubW91c2VNb3ZlRXYgPSAndG91Y2htb3ZlJztcbiAgICAgIHRoaXMuY2FuY2VsRXYgPSAndG91Y2hjYW5jZWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdXNlRG93bkV2ID0gJ21vdXNlZG93bic7XG4gICAgICB0aGlzLm1vdXNlVXBFdiA9ICdtb3VzZXVwJztcbiAgICAgIHRoaXMubW91c2VNb3ZlRXYgPSAnbW91c2Vtb3ZlJztcbiAgICAgIHRoaXMuY2FuY2VsRXYgPSAnbW91c2VvdXQnO1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hbmdsZSAmJiBjaGFuZ2VzLmFuZ2xlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coY2hhbmdlcy5hbmdsZS5jdXJyZW50VmFsdWUpO1xuICAgICAgY29uc3QgYW5nbGUgPSBjaGFuZ2VzLmFuZ2xlLmN1cnJlbnRWYWx1ZSArIDkwO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7YW5nbGV9ZGVnKWApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmlzRGlzYWJsZWQpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLmluaXRpYWxSZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5yZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMubW91c2VVcCQgPSBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLm1vdXNlVXBFdiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHRoaXMubW91c2VPdXQkID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5jYW5jZWxFdiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5tb3VzZURvd25TdWIgPSBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLm1vdXNlRG93bkV2LCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5pc0Rpc2FibGVkO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZG93bkV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdtb3VzZSBkb3duJywgZG93bkV2ZW50LCB0aGlzLnJlY3QpO1xuICAgICAgICB0aGlzLnBvaW50ID0gdGhpcy5jcmVhdGVQb2ludChkb3duRXZlbnQpO1xuICAgICAgICB0aGlzLnJvdGF0ZVN0YXJ0LmVtaXQodGhpcy5wb2ludCk7XG4gICAgICAgIHRoaXMuYXBwbHlSb3RhdGlvbigpO1xuXG5cbiAgICAgICAgdGhpcy5tb3VzZU1vdmVTdWIgPSBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLm1vdXNlTW92ZUV2KS5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm1vdXNlT3V0JCwgdGhpcy5tb3VzZVVwJCkucGlwZShcbiAgICAgICAgICAgIHRhcCgodXBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdtb3VzZSB1cCcsIHVwRXZlbnQsIHRoaXMucmVjdCk7XG4gICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5tb3VzZU1vdmVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5yb3RhdGVTdG9wLmVtaXQodGhpcy5wb2ludCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkpXG4gICAgICAgICkuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ21vdXNlIG1vdmUnLCBtb3ZlRXZlbnQsIHRoaXMucmVjdCk7XG5cbiAgICAgICAgICB0aGlzLnBvaW50ID0gdGhpcy5jcmVhdGVQb2ludChtb3ZlRXZlbnQpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucG9pbnQpO1xuICAgICAgICAgIHRoaXMuYXBwbHlSb3RhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxSZW5kZXIoKSB7XG4gICAgY29uc3QgYW5nbGUgPSB0aGlzLmFuZ2xlICsgOTA7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7YW5nbGV9ZGVnKWApO1xuICB9XG5cbiAgcHVibGljIHJvdGF0aW9uUmVuZGVyKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucm90YXRpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgYHJvdGF0ZSgke3RoaXMucm90YXRpb259ZGVnKWApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubW91c2VEb3duU3ViKSB7XG4gICAgICB0aGlzLm1vdXNlRG93blN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb3VzZU1vdmVTdWIpIHtcbiAgICAgIHRoaXMubW91c2VNb3ZlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vdXNlVXBTdWIpIHtcbiAgICAgIHRoaXMubW91c2VVcFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnZGlyZWN0aXZlIGRlc3Ryb3knKTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGFwcGx5Um90YXRpb24oKSB7XG4gICAgY29uc3QgcXVhZHJhbnQgPSBjYWxjdWxhdGVRdWFkcmFudCh0aGlzLnBvaW50KTtcbiAgICBjb25zdCByb3RhdGlvbiA9IGRldGVybWluZUNTU1JvdGF0aW9uQW5nbGUodGhpcy5wb2ludCwgcXVhZHJhbnQpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJvdGF0aW9uKTtcbiAgICB0aGlzLnJvdGF0aW5nLmVtaXQocm90YXRpb24pO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yb3RhdGlvblJlbmRlci5iaW5kKHRoaXMpKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQb2ludChtb3VzZUV2ZW50KSB7XG4gICAgbGV0IHBvaW50O1xuICAgIGlmIChtb3VzZUV2ZW50LnRhcmdldFRvdWNoZXMpIHtcbiAgICAgIHBvaW50ID0ge1xuICAgICAgICB4OiB0aGlzLl9ub3JtYWxpemVYKG1vdXNlRXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYKSxcbiAgICAgICAgeTogdGhpcy5fbm9ybWFsaXplWShtb3VzZUV2ZW50LnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50ID0ge1xuICAgICAgICB4OiB0aGlzLl9ub3JtYWxpemVYKG1vdXNlRXZlbnQuY2xpZW50WCksXG4gICAgICAgIHk6IHRoaXMuX25vcm1hbGl6ZVkobW91c2VFdmVudC5jbGllbnRZKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ3BvaW50JywgcG9pbnQpO1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVgoY29vcmRYKSB7XG4gICAgcmV0dXJuIGNvb3JkWCAtIHRoaXMucmVjdC5sZWZ0IC0gdGhpcy5yZWN0LndpZHRoIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVkoY29vcmRZKSB7XG4gICAgcmV0dXJuICgoY29vcmRZIC0gdGhpcy5yZWN0LnRvcCkgKiAtMSkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbiAgfVxuXG59XG4iXX0=