UNPKG

@neocomplexx/ngx-neo-directives

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

255 lines 22.7 kB
/** * @fileoverview added by tsickle * Generated from: lib/neo-numbers.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core'; import { NgModel } from '@angular/forms'; var NeoNumbersDirective = /** @class */ (function () { function NeoNumbersDirective(el, renderer, model) { this.el = el; this.renderer = renderer; this.model = model; this.allowNullValue = false; } /** * @return {?} */ NeoNumbersDirective.prototype.ngOnInit = /** * @return {?} */ function () { if ((/** @type {?} */ (this.allowNullValue)) === "") this.allowNullValue = true; this.regex = new RegExp('^\\d+$'); this.el.nativeElement.type = "number"; }; /** * @param {?} e * @return {?} */ NeoNumbersDirective.prototype.blockPaste = /** * @param {?} e * @return {?} */ function (e) { var _this = this; /** @type {?} */ var clipboardData = e.clipboardData || window['clipboardData']; /** @type {?} */ var pastedData = clipboardData.getData('text/plain').split(",").join("."); /** @type {?} */ var posPoint = pastedData.lastIndexOf('.'); if (posPoint > -1) { pastedData = pastedData.substring(0, posPoint).split(".").join(""); } /** @type {?} */ var onlyNumbers = Array.from(pastedData).map((/** * @param {?} x * @return {?} */ function (x) { return _this.isOnlyNumber(x); })).reduce((/** * @param {?} prev * @param {?} el * @return {?} */ function (prev, el) { return prev && el; }), true); /** @type {?} */ var isCorrect = this.regex.test(pastedData); if (isCorrect && this.el.nativeElement.max && pastedData.length > this.el.nativeElement.max.length) pastedData = pastedData.substr(0, this.el.nativeElement.max.length); setTimeout((/** * @return {?} */ function () { if (onlyNumbers && isCorrect) { _this.el.nativeElement.value = pastedData; } else { _this.el.nativeElement.value = '0'; } }), 10); }; /** * @return {?} */ NeoNumbersDirective.prototype.onfocus = /** * @return {?} */ function () { if (this.el.nativeElement.value == "0") { this.el.nativeElement.value = null; } }; /** * @return {?} */ NeoNumbersDirective.prototype.onBlur = /** * @return {?} */ function () { /** @type {?} */ var current = this.el.nativeElement.value; if (current == "") { if (this.allowNullValue) { this.el.nativeElement.value = null; this.model.control.setValue(null); } else { this.el.nativeElement.value = "0"; this.model.control.setValue(0); } } else { this.el.nativeElement.type = "text"; this.el.nativeElement.type = "number"; if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) { this.el.nativeElement.value = this.el.nativeElement.max; this.model.control.setValue(this.el.nativeElement.valueAsNumber); } } }; /** * @param {?} event * @return {?} */ NeoNumbersDirective.prototype.onKeyUp = /** * @param {?} event * @return {?} */ function (event) { console.log(event); /** @type {?} */ var current = this.el.nativeElement.value; current = current.split("-").join(""); /** @type {?} */ var posPoint = current.indexOf('.'); if (posPoint > -1) { current = current.substring(0, posPoint); this.el.nativeElement.value = current; } if (this.isSpecial(event) || current == "") { if (event.keyCode == 8 || current != "") { this.prev = current; } return; } if (!this.isOnlyNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) { this.el.nativeElement.value = current.substring(0, current.length - 1); } }; /** * @param {?} event * @return {?} */ NeoNumbersDirective.prototype.onKeyDown = /** * @param {?} event * @return {?} */ function (event) { if (this.isSpecial(event)) { return; } if (!this.isOnlyNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } /** @type {?} */ var current = this.el.nativeElement.value; this.prev = current; }; /** * @private * @param {?} e * @return {?} */ NeoNumbersDirective.prototype.isSpecial = /** * @private * @param {?} e * @return {?} */ function (e) { return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' || e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' || e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' || (((/** @type {?} */ (e))).keyIdentifier == 'Down' || ((/** @type {?} */ (e))).keyIdentifier == 'Up' || ((/** @type {?} */ (e))).keyIdentifier == 'Left' || ((/** @type {?} */ (e))).keyIdentifier == 'Right'); }; /** * @private * @param {?} e * @return {?} */ NeoNumbersDirective.prototype.isOnlyNumber = /** * @private * @param {?} e * @return {?} */ function (e) { if (e instanceof KeyboardEvent) { return ((e.key >= '0' && e.key <= '9') || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)); } else { return (e >= '0' && e <= '9'); } }; NeoNumbersDirective.decorators = [ { type: Directive, args: [{ selector: '[isNumber]' },] } ]; /** @nocollapse */ NeoNumbersDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 }, { type: NgModel } ]; }; NeoNumbersDirective.propDecorators = { isNumber: [{ type: Input }], allowNullValue: [{ type: Input, args: ['allowNullValue',] }], blockPaste: [{ type: HostListener, args: ['paste', ['$event'],] }], onfocus: [{ type: HostListener, args: ['focus',] }], onBlur: [{ type: HostListener, args: ['blur',] }], onKeyUp: [{ type: HostListener, args: ['keyup', ['$event'],] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }] }; return NeoNumbersDirective; }()); export { NeoNumbersDirective }; if (false) { /** @type {?} */ NeoNumbersDirective.prototype.isNumber; /** @type {?} */ NeoNumbersDirective.prototype.allowNullValue; /** * @type {?} * @private */ NeoNumbersDirective.prototype.prev; /** * @type {?} * @private */ NeoNumbersDirective.prototype.regex; /** * @type {?} * @private */ NeoNumbersDirective.prototype.el; /** * @type {?} * @private */ NeoNumbersDirective.prototype.renderer; /** * @type {?} * @private */ NeoNumbersDirective.prototype.model; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLW51bWJlcnMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tZGlyZWN0aXZlcy8iLCJzb3VyY2VzIjpbImxpYi9uZW8tbnVtYmVycy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekM7SUFTSSw2QkFBb0IsRUFBYyxFQUFVLFFBQW1CLEVBQVUsS0FBYztRQUFuRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLFVBQUssR0FBTCxLQUFLLENBQVM7UUFKOUQsbUJBQWMsR0FBRyxLQUFLLENBQUM7SUFLaEQsQ0FBQzs7OztJQUVELHNDQUFROzs7SUFBUjtRQUNJLElBQUksbUJBQUssSUFBSSxDQUFDLGNBQWMsRUFBQSxLQUFLLEVBQUU7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7SUFDekMsQ0FBQzs7Ozs7SUFFa0Msd0NBQVU7Ozs7SUFBN0MsVUFBOEMsQ0FBaUI7UUFBL0QsaUJBc0JDOztZQXJCUyxhQUFhLEdBQWlCLENBQUMsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQzs7WUFDMUUsVUFBVSxHQUFXLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7O1lBRTdFLFFBQVEsR0FBRyxV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VTtnQkFBdUIsU0FBUztnQkFDckQsT0FBTzs7OzJCQU1YLEtBQUs7aUNBQ0wsS0FBSyxTQUFDLGdCQUFnQjs2QkFhdEIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkF3QmhDLFlBQVksU0FBQyxPQUFPO3lCQU1wQixZQUFZLFNBQUMsTUFBTTswQkFvQm5CLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7NEJBNkJoQyxZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDOztJQTZCdkMsMEJBQUM7Q0FBQSxBQTlIRCxJQThIQztTQTNIWSxtQkFBbUI7OztJQUM1Qix1Q0FBdUI7O0lBQ3ZCLDZDQUFnRDs7Ozs7SUFDaEQsbUNBQWtCOzs7OztJQUNsQixvQ0FBc0I7Ozs7O0lBRVYsaUNBQXNCOzs7OztJQUFFLHVDQUEyQjs7Ozs7SUFBRSxvQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFJlbmRlcmVyMiwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpc051bWJlcl0nXG59KVxuZXhwb3J0IGNsYXNzIE5lb051bWJlcnNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzTnVtYmVyOiBhbnk7XG4gICAgQElucHV0KCdhbGxvd051bGxWYWx1ZScpIGFsbG93TnVsbFZhbHVlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwcmV2OiBhbnk7XG4gICAgcHJpdmF0ZSByZWdleDogUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG1vZGVsOiBOZ01vZGVsKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICg8YW55PnRoaXMuYWxsb3dOdWxsVmFsdWUgPT09IFwiXCIpIHRoaXMuYWxsb3dOdWxsVmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxkKyQnKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnR5cGUgPSBcIm51bWJlclwiXG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKSBibG9ja1Bhc3RlKGU6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXTtcbiAgICAgICAgbGV0IHBhc3RlZERhdGE6IHN0cmluZyA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpLnNwbGl0KFwiLFwiKS5qb2luKFwiLlwiKTtcblxuICAgICAgICBsZXQgcG9zUG9pbnQgPSBwYXN0ZWREYXRhLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChwb3NQb2ludCA+IC0xKSB7XG4gICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHJpbmcoMCwgcG9zUG9pbnQpLnNwbGl0KFwiLlwiKS5qb2luKFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb25seU51bWJlcnMgPSBBcnJheS5mcm9tKHBhc3RlZERhdGEpLm1hcCh4ID0+IHRoaXMuaXNPbmx5TnVtYmVyKHgpKS5yZWR1Y2UoKHByZXYsIGVsKSA9PiBwcmV2ICYmIGVsLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaXNDb3JyZWN0ID0gdGhpcy5yZWdleC50ZXN0KHBhc3RlZERhdGEpO1xuICAgICAgICBpZiAoaXNDb3JyZWN0ICYmIHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXggJiYgcGFzdGVkRGF0YS5sZW5ndGggPiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4Lmxlbmd0aClcbiAgICAgICAgICAgIHBhc3RlZERhdGEgPSBwYXN0ZWREYXRhLnN1YnN0cigwLCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4Lmxlbmd0aCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob25seU51bWJlcnMgJiYgaXNDb3JyZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gcGFzdGVkRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgXG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpIG9uZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPT0gXCIwXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyKCkge1xuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICBpZiAoY3VycmVudCA9PSBcIlwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd051bGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5jb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuc2V0VmFsdWUoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXggJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlQXNOdW1iZXIgPiArdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXg7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5jb250cm9sLnNldFZhbHVlKHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZUFzTnVtYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSkgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc3BsaXQoXCItXCIpLmpvaW4oXCJcIik7XG4gICAgICAgIGxldCBwb3NQb2ludCA9IGN1cnJlbnQuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAocG9zUG9pbnQgPiAtMSkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc3Vic3RyaW5nKDAsIHBvc1BvaW50KTtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWwoZXZlbnQpIHx8IGN1cnJlbnQgPT0gXCJcIikgeyBcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDggfHwgY3VycmVudCAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ID0gY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjsgXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNPbmx5TnVtYmVyKGV2ZW50KSkgeyBcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5tYXggJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlQXNOdW1iZXIgPiArdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCkge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY3VycmVudC5zdWJzdHJpbmcoMCwgY3VycmVudC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWwoZXZlbnQpKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09ubHlOdW1iZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbGV0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcblxuICAgICAgICB0aGlzLnByZXYgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTcGVjaWFsKGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGUua2V5ID09PSAnRGVsZXRlJyB8fCAoZS5rZXkgPT09ICdUYWInIHx8IGUua2V5Q29kZSA9PSA5KSB8fCAoZS5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGUua2V5Q29kZSA9PSA4KSB8fCBlLmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgICAgICAgIGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLmtleSA9PT0gJ0hvbWUnIHx8IGUua2V5ID09PSAnRW5kJyB8fCBlLmtleSA9PT0gJ1BhZ2VEb3duJyB8fCBlLmtleSA9PT0gJ1BhZ2VVcCcgfHxcbiAgICAgICAgICAgIGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdDb250cm9sJyB8fCBlLmtleSA9PT0gJ0FsdCcgfHwgZS5rZXkgPT09ICdTaGlmdCcgfHxcbiAgICAgICAgICAgICgoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdEb3duJyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdVcCcgfHwgKDxhbnk+ZSkua2V5SWRlbnRpZmllciA9PSAnTGVmdCcgfHwgKDxhbnk+ZSkua2V5SWRlbnRpZmllciA9PSAnUmlnaHQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzT25seU51bWJlcihlOiBLZXlib2FyZEV2ZW50IHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuICgoZS5rZXkgPj0gJzAnICYmIGUua2V5IDw9ICc5JykgfHwgKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8IChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChlID49ICcwJyAmJiBlIDw9ICc5Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=