UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

131 lines 16 kB
import { IconComponent, TooltipModule } from '@alauda/ui'; import { NgIf, NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { FIELD_NOT_AVAILABLE_PLACEHOLDER, formatNumber, PurePipe, } from '../../core/public-api'; import { TranslatePipe, TranslateService } from '../../translate/public-api'; import * as i0 from "@angular/core"; import * as i1 from "../../translate/public-api"; import * as i2 from "@alauda/ui"; const _c0 = a0 => ({ $implicit: a0 }); function ResourceLabelComponent_ng_template_1_aui_icon_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 3); i0.ɵɵpipe(1, "translate"); } if (rf & 2) { const info_r1 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵclassMap("icon__" + ctx_r1.type); i0.ɵɵproperty("icon", info_r1.icon)("auiTooltip", i0.ɵɵpipeBind1(1, 4, ctx_r1.type)); } } function ResourceLabelComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ResourceLabelComponent_ng_template_1_aui_icon_0_Template, 2, 6, "aui-icon", 2); i0.ɵɵtext(1); i0.ɵɵpipe(2, "pure"); } if (rf & 2) { const info_r1 = ctx.$implicit; const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("ngIf", !ctx_r1.noIcon); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind3(2, 2, ctx_r1.rawValue, info_r1.formatter, ctx_r1.translate.locale), "\n"); } } export class ResourceLabelComponent { get formattedDefault() { return this.default === FIELD_NOT_AVAILABLE_PLACEHOLDER ? this.default : this.translate.get(this.default); } constructor(translate) { this.translate = translate; this.default = 'unlimited'; this.noIcon = false; this.labelIconMapper = { cpu: { icon: 'prod:cpu', formatter: this.formatCPU.bind(this), }, memory: { icon: 'prod:memory', formatter: this.formatMemory.bind(this), }, }; } formatCPU(rawData) { const cpuUnit = this.getResourceUnit(rawData, this.formatCpuUnit); if (!cpuUnit) { return this.formattedDefault; } return cpuUnit.endsWith('m') ? cpuUnit : cpuUnit + ' ' + this.translate.get('unit_core'); } formatMemory(rawData) { const memoryUnit = this.getResourceUnit(rawData, this.formatMemoryUnit); if (!memoryUnit) { return this.formattedDefault; } return memoryUnit?.match(/[a-z]+/i) ? memoryUnit : memoryUnit + ' Bytes'; } getResourceUnit(rawData, converter) { if (typeof rawData === 'string') { const matched = rawData.match(/([\d.]+)([a-z]+)/i); if (matched) { return matched[1] + ' ' + matched[2]; } return rawData; } return converter(rawData); } formatCpuUnit(cpu) { let cpuUnit = 'm'; if (cpu >= 1000) { cpu /= 1000; cpuUnit = ''; } return isNaN(cpu) ? '' : formatNumber(cpu, [1, 0, 2]) + (cpuUnit ? ' ' + cpuUnit : ''); } formatMemoryUnit(memory) { let memoryUnit = 'Mi'; memory /= 1024 ** 2; if (memory >= 1024) { memory /= 1024; memoryUnit = 'Gi'; } return isNaN(memory) ? '' : formatNumber(memory, [1, 0, 2]) + (memoryUnit ? ' ' + memoryUnit : ''); } static { this.ɵfac = function ResourceLabelComponent_Factory(t) { return new (t || ResourceLabelComponent)(i0.ɵɵdirectiveInject(i1.TranslateService)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceLabelComponent, selectors: [["acl-resource-label"]], inputs: { rawValue: "rawValue", default: "default", type: "type", noIcon: "noIcon" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 4, consts: [["infoTmpl", ""], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["size", "16", "auiTooltipType", "info", 3, "icon", "class", "auiTooltip", 4, "ngIf"], ["size", "16", "auiTooltipType", "info", 3, "icon", "auiTooltip"]], template: function ResourceLabelComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainer(0, 1); i0.ɵɵtemplate(1, ResourceLabelComponent_ng_template_1_Template, 3, 6, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { const infoTmpl_r3 = i0.ɵɵreference(2); i0.ɵɵproperty("ngTemplateOutlet", infoTmpl_r3)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx.labelIconMapper[ctx.type])); } }, dependencies: [NgTemplateOutlet, IconComponent, NgIf, TranslatePipe, TooltipModule, i2.TooltipDirective, PurePipe], styles: ["[_nghost-%COMP%]{display:inline-flex;align-items:center}[_nghost-%COMP%] aui-icon[_ngcontent-%COMP%]{margin-right:4px}[_nghost-%COMP%] aui-icon.icon__cpu[_ngcontent-%COMP%]{color:var(--acl-icon-color-cpu)}[_nghost-%COMP%] aui-icon.icon__memory[_ngcontent-%COMP%]{color:var(--acl-icon-color-memory)}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceLabelComponent, [{ type: Component, args: [{ selector: 'acl-resource-label', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ NgTemplateOutlet, IconComponent, NgIf, TranslatePipe, TooltipModule, PurePipe, ], template: "<ng-container\n [ngTemplateOutlet]=\"infoTmpl\"\n [ngTemplateOutletContext]=\"{ $implicit: labelIconMapper[type] }\"\n></ng-container>\n<ng-template\n #infoTmpl\n let-info\n>\n <aui-icon\n size=\"16\"\n *ngIf=\"!noIcon\"\n [icon]=\"info.icon\"\n [class]=\"'icon__' + type\"\n [auiTooltip]=\"type | translate\"\n auiTooltipType=\"info\"\n ></aui-icon>\n {{ rawValue | pure: info.formatter : translate.locale }}\n</ng-template>\n", styles: [":host{display:inline-flex;align-items:center}:host aui-icon{margin-right:4px}:host aui-icon.icon__cpu{color:var(--acl-icon-color-cpu)}:host aui-icon.icon__memory{color:var(--acl-icon-color-memory)}\n"] }] }], () => [{ type: i1.TranslateService }], { rawValue: [{ type: Input }], default: [{ type: Input }], type: [{ type: Input }], noIcon: [{ type: Input }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceLabelComponent, { className: "ResourceLabelComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3dpZGdldC9yZXNvdXJjZS1sYWJlbC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvd2lkZ2V0L3Jlc291cmNlLWxhYmVsL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsWUFBWSxFQUNaLFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0lDRDNFLDhCQU9ZOzs7OztJQUhWLHFDQUF5QjtJQUN6QixBQUZBLG1DQUFrQixpREFFYTs7O0lBTGpDLCtGQU9DO0lBQ0QsWUFDRjs7Ozs7SUFQSyxxQ0FBYTtJQU1oQixjQUNGO0lBREUsbUhBQ0Y7O0FEZ0JBLE1BQU0sT0FBTyxzQkFBc0I7SUFlakMsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLCtCQUErQjtZQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFhRCxZQUE0QixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQTFCdkQsWUFBTyxHQUFHLFdBQVcsQ0FBQztRQU90QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBUWYsb0JBQWUsR0FBdUM7WUFDcEQsR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxVQUFVO2dCQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3JDO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxhQUFhO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztJQUV3RCxDQUFDO0lBRTNELFNBQVMsQ0FBQyxPQUF3QjtRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDMUIsQ0FBQyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQXdCO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDM0UsQ0FBQztJQUVPLGVBQWUsQ0FDckIsT0FBd0IsRUFDeEIsU0FBaUM7UUFFakMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQy9CLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixHQUFHLElBQUksSUFBSSxDQUFDO1lBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDZixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLElBQUksQ0FBQztZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO3VGQXhGVSxzQkFBc0I7b0VBQXRCLHNCQUFzQjtZQ2pDbkMsMkJBR2dCO1lBQ2hCLHdIQUdDOzs7WUFMQyxBQURBLDhDQUE2QixzRkFDbUM7NEJEdUI5RCxnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLElBQUk7WUFDSixhQUFhO1lBQ2IsYUFBYSx1QkFDYixRQUFROztpRkFHQyxzQkFBc0I7Y0FmbEMsU0FBUzsyQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7b0JBQ1AsZ0JBQWdCO29CQUNoQixhQUFhO29CQUNiLElBQUk7b0JBQ0osYUFBYTtvQkFDYixhQUFhO29CQUNiLFFBQVE7aUJBQ1Q7aURBS0QsUUFBUTtrQkFEUCxLQUFLO1lBSU4sT0FBTztrQkFETixLQUFLO1lBS04sSUFBSTtrQkFESCxLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLOztrRkFaSyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJY29uQ29tcG9uZW50LCBUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVIsXG4gIGZvcm1hdE51bWJlcixcbiAgUHVyZVBpcGUsXG59IGZyb20gJy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuXG50eXBlIFJlc291cmNlVHlwZSA9ICdjcHUnIHwgJ21lbW9yeSc7XG5cbmludGVyZmFjZSBSZXNvdXJjZUluZm8ge1xuICBpY29uOiBzdHJpbmc7XG4gIGZvcm1hdHRlcjogKHJhd0RhdGE6IG51bWJlciB8IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1yZXNvdXJjZS1sYWJlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQdXJlUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VMYWJlbENvbXBvbmVudCB7XG4gIC8vIOWQhOi1hOa6kOeahOWOn+Wni+WAvFxuICBASW5wdXQoKVxuICByYXdWYWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHQgPSAndW5saW1pdGVkJztcblxuICAvLyDmlrDlop7nsbvlnovpnIDopoHov5vooYzmianlhYVcbiAgQElucHV0KClcbiAgdHlwZTogUmVzb3VyY2VUeXBlO1xuXG4gIEBJbnB1dCgpXG4gIG5vSWNvbiA9IGZhbHNlO1xuXG4gIGdldCBmb3JtYXR0ZWREZWZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHQgPT09IEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVJcbiAgICAgID8gdGhpcy5kZWZhdWx0XG4gICAgICA6IHRoaXMudHJhbnNsYXRlLmdldCh0aGlzLmRlZmF1bHQpO1xuICB9XG5cbiAgbGFiZWxJY29uTWFwcGVyOiBSZWNvcmQ8UmVzb3VyY2VUeXBlLCBSZXNvdXJjZUluZm8+ID0ge1xuICAgIGNwdToge1xuICAgICAgaWNvbjogJ3Byb2Q6Y3B1JyxcbiAgICAgIGZvcm1hdHRlcjogdGhpcy5mb3JtYXRDUFUuYmluZCh0aGlzKSxcbiAgICB9LFxuICAgIG1lbW9yeToge1xuICAgICAgaWNvbjogJ3Byb2Q6bWVtb3J5JyxcbiAgICAgIGZvcm1hdHRlcjogdGhpcy5mb3JtYXRNZW1vcnkuYmluZCh0aGlzKSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgZm9ybWF0Q1BVKHJhd0RhdGE6IG51bWJlciB8IHN0cmluZykge1xuICAgIGNvbnN0IGNwdVVuaXQgPSB0aGlzLmdldFJlc291cmNlVW5pdChyYXdEYXRhLCB0aGlzLmZvcm1hdENwdVVuaXQpO1xuICAgIGlmICghY3B1VW5pdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVkRGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIGNwdVVuaXQuZW5kc1dpdGgoJ20nKVxuICAgICAgPyBjcHVVbml0XG4gICAgICA6IGNwdVVuaXQgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZS5nZXQoJ3VuaXRfY29yZScpO1xuICB9XG5cbiAgZm9ybWF0TWVtb3J5KHJhd0RhdGE6IG51bWJlciB8IHN0cmluZykge1xuICAgIGNvbnN0IG1lbW9yeVVuaXQgPSB0aGlzLmdldFJlc291cmNlVW5pdChyYXdEYXRhLCB0aGlzLmZvcm1hdE1lbW9yeVVuaXQpO1xuXG4gICAgaWYgKCFtZW1vcnlVbml0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZWREZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb3J5VW5pdD8ubWF0Y2goL1thLXpdKy9pKSA/IG1lbW9yeVVuaXQgOiBtZW1vcnlVbml0ICsgJyBCeXRlcyc7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc291cmNlVW5pdChcbiAgICByYXdEYXRhOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgY29udmVydGVyPzogKF86IG51bWJlcikgPT4gc3RyaW5nLFxuICApIHtcbiAgICBpZiAodHlwZW9mIHJhd0RhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXRjaGVkID0gcmF3RGF0YS5tYXRjaCgvKFtcXGQuXSspKFthLXpdKykvaSk7XG4gICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFsxXSArICcgJyArIG1hdGNoZWRbMl07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3RGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlcihyYXdEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0Q3B1VW5pdChjcHU6IG51bWJlcikge1xuICAgIGxldCBjcHVVbml0ID0gJ20nO1xuICAgIGlmIChjcHUgPj0gMTAwMCkge1xuICAgICAgY3B1IC89IDEwMDA7XG4gICAgICBjcHVVbml0ID0gJyc7XG4gICAgfVxuICAgIHJldHVybiBpc05hTihjcHUpXG4gICAgICA/ICcnXG4gICAgICA6IGZvcm1hdE51bWJlcihjcHUsIFsxLCAwLCAyXSkgKyAoY3B1VW5pdCA/ICcgJyArIGNwdVVuaXQgOiAnJyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1lbW9yeVVuaXQobWVtb3J5OiBudW1iZXIpIHtcbiAgICBsZXQgbWVtb3J5VW5pdCA9ICdNaSc7XG4gICAgbWVtb3J5IC89IDEwMjQgKiogMjtcbiAgICBpZiAobWVtb3J5ID49IDEwMjQpIHtcbiAgICAgIG1lbW9yeSAvPSAxMDI0O1xuICAgICAgbWVtb3J5VW5pdCA9ICdHaSc7XG4gICAgfVxuICAgIHJldHVybiBpc05hTihtZW1vcnkpXG4gICAgICA/ICcnXG4gICAgICA6IGZvcm1hdE51bWJlcihtZW1vcnksIFsxLCAwLCAyXSkgKyAobWVtb3J5VW5pdCA/ICcgJyArIG1lbW9yeVVuaXQgOiAnJyk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXJcbiAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5mb1RtcGxcIlxuICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGxhYmVsSWNvbk1hcHBlclt0eXBlXSB9XCJcbj48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZVxuICAjaW5mb1RtcGxcbiAgbGV0LWluZm9cbj5cbiAgPGF1aS1pY29uXG4gICAgc2l6ZT1cIjE2XCJcbiAgICAqbmdJZj1cIiFub0ljb25cIlxuICAgIFtpY29uXT1cImluZm8uaWNvblwiXG4gICAgW2NsYXNzXT1cIidpY29uX18nICsgdHlwZVwiXG4gICAgW2F1aVRvb2x0aXBdPVwidHlwZSB8IHRyYW5zbGF0ZVwiXG4gICAgYXVpVG9vbHRpcFR5cGU9XCJpbmZvXCJcbiAgPjwvYXVpLWljb24+XG4gIHt7IHJhd1ZhbHVlIHwgcHVyZTogaW5mby5mb3JtYXR0ZXIgOiB0cmFuc2xhdGUubG9jYWxlIH19XG48L25nLXRlbXBsYXRlPlxuIl19