UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

135 lines 18.7 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { get } from 'lodash-es'; import { map, Observable, switchMap } from 'rxjs'; import { DATE_FORMAT, TimeService } from '../../../core/public-api'; import { EnterpriseSupportStatusReason, EnterpriseSupportStatusType, } from '../../../core/types/k8s/raw'; import { ObservableInput } from '../../../core/utils/public-api'; import { formatProductName, LicenseApiService, } from '../../../license/license-api'; import { LicenseProductName } from '../../../license/license.type'; import { ProductEntryName } from '../common-layout/public-api'; import * as i0 from "@angular/core"; import * as i1 from "../../../license/license-api"; import * as i2 from "../../../core/public-api"; import * as i3 from "@angular/common"; import * as i4 from "@alauda/ui"; import * as i5 from "../../../translate/translate.pipe"; const _c0 = a0 => ({ tooltips: a0 }); function EnterpriseSupportStatusComponent_aui_tag_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "aui-tag", 2); i0.ɵɵelement(1, "aui-icon", 3); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd(); } if (rf & 2) { const data_r1 = ctx.ngIf; i0.ɵɵnextContext(); const tip_r2 = i0.ɵɵreference(3); i0.ɵɵproperty("type", data_r1.status)("auiTooltip", tip_r2)("auiTooltipContext", i0.ɵɵpureFunction1(6, _c0, data_r1.tooltips)); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 4, data_r1.title), "\n"); } } function EnterpriseSupportStatusComponent_ng_template_2_li_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "li"); i0.ɵɵtext(1); i0.ɵɵpipe(2, "translate"); i0.ɵɵelementEnd(); } if (rf & 2) { const item_r3 = ctx.$implicit; i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(2, 1, item_r3.content, item_r3.data), " "); } } function EnterpriseSupportStatusComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 4)(1, "ul", 5); i0.ɵɵtemplate(2, EnterpriseSupportStatusComponent_ng_template_2_li_2_Template, 3, 4, "li", 6); i0.ɵɵelementEnd()(); } if (rf & 2) { const tooltips_r4 = ctx.tooltips; i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", tooltips_r4); } } const INFO_MAPPER = { [EnterpriseSupportStatusType.inService]: { title: 'supper_InService', status: 'primary', tooltips: [{ content: 'supper_in_service_tip' }], }, [EnterpriseSupportStatusType.warning]: { title: 'supper_Warning', status: 'warning', }, [EnterpriseSupportStatusType.outOfService]: { title: 'supper_OutOfService', status: 'error', }, }; const PRODUCT_NAME_MAPPER = { [ProductEntryName.ACP]: LicenseProductName.CONTAINER_PLATFORM, [ProductEntryName.DevOps]: LicenseProductName.DEVOPS, [ProductEntryName.ASM]: LicenseProductName.SERVICE_MESH, [ProductEntryName.AML]: LicenseProductName.MACHINE_LEARNING, [ProductEntryName.DATA_SERVICES]: LicenseProductName.DATA_SERVICES, // 暂时和 license 保持一致使用 acp 的, 后续会整改,正常aam devops asm 都需要用 [ProductEntryName.AAM]: LicenseProductName.CONTAINER_PLATFORM, }; export class EnterpriseSupportStatusComponent { constructor(licenseApiService, timeService) { this.licenseApiService = licenseApiService; this.timeService = timeService; this.data$ = this.product$.pipe(switchMap(product => { const name = PRODUCT_NAME_MAPPER[product] || ''; return this.licenseApiService.getEnterpriseSupport(formatProductName(name)); }), map(res => { const { status, spec: { allowProductVersion, baremetalClusterCPUCoreLimit, importedClusterNodeLimit, validity, }, } = res; return { ...INFO_MAPPER[status.phase], ...(status.phase !== EnterpriseSupportStatusType.inService && { tooltips: status.reason?.map(item => { const resource = EnterpriseSupportStatusReason; const afterTime = { value: this.formatDate(validity.notAfter) }; const content = { [resource.ExceedResourceLimit]: { value: baremetalClusterCPUCoreLimit, }, [resource.ExceedNodeLimit]: { value: importedClusterNodeLimit, }, [resource.MismatchProductVersion]: { value: allowProductVersion, }, [resource.Expired]: afterTime, [resource.ExpiringSoon]: afterTime, }; return { content: `supper_${get(EnterpriseSupportStatusReason, item)}_tip`, data: get(content, item) || {}, }; }), }), }; })); } formatDate(date) { return this.timeService.format(date, DATE_FORMAT); } static { this.ɵfac = function EnterpriseSupportStatusComponent_Factory(t) { return new (t || EnterpriseSupportStatusComponent)(i0.ɵɵdirectiveInject(i1.LicenseApiService), i0.ɵɵdirectiveInject(i2.TimeService)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EnterpriseSupportStatusComponent, selectors: [["acl-enterprise-support-status"]], inputs: { product: "product" }, decls: 4, vars: 3, consts: [["tip", ""], ["size", "small", "class", "tw-mr-8 tw-block", "auiTooltipType", "info", 3, "type", "auiTooltip", "auiTooltipContext", 4, "ngIf"], ["size", "small", "auiTooltipType", "info", 1, "tw-mr-8", "tw-block", 3, "type", "auiTooltip", "auiTooltipContext"], ["icon", "prod:maintenance_s", 1, "bicolor"], [1, "tw-text-m"], [1, "tw-list-disc", "tw-pl-8"], [4, "ngFor", "ngForOf"]], template: function EnterpriseSupportStatusComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, EnterpriseSupportStatusComponent_aui_tag_0_Template, 4, 8, "aui-tag", 1); i0.ɵɵpipe(1, "async"); i0.ɵɵtemplate(2, EnterpriseSupportStatusComponent_ng_template_2_Template, 3, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(1, 1, ctx.data$)); } }, dependencies: [i3.NgForOf, i3.NgIf, i4.TagComponent, i4.IconComponent, i4.TooltipDirective, i3.AsyncPipe, i5.TranslatePipe], encapsulation: 2, changeDetection: 0 }); } } __decorate([ ObservableInput(), __metadata("design:type", Observable) ], EnterpriseSupportStatusComponent.prototype, "product$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EnterpriseSupportStatusComponent, [{ type: Component, args: [{ selector: 'acl-enterprise-support-status', changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-tag\n *ngIf=\"data$ | async as data\"\n [type]=\"data.status\"\n size=\"small\"\n class=\"tw-mr-8 tw-block\"\n [auiTooltip]=\"tip\"\n auiTooltipType=\"info\"\n [auiTooltipContext]=\"{\n tooltips: data.tooltips\n }\"\n>\n <aui-icon\n icon=\"prod:maintenance_s\"\n class=\"bicolor\"\n ></aui-icon>\n {{ data.title | translate }}\n</aui-tag>\n\n<ng-template\n #tip\n let-tooltips=\"tooltips\"\n>\n <div class=\"tw-text-m\">\n <ul class=\"tw-list-disc tw-pl-8\">\n <li *ngFor=\"let item of tooltips\">\n {{ item.content | translate: item.data }}\n </li>\n </ul>\n </div>\n</ng-template>\n" }] }], () => [{ type: i1.LicenseApiService }, { type: i2.TimeService }], { product: [{ type: Input }], product$: [] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EnterpriseSupportStatusComponent, { className: "EnterpriseSupportStatusComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BhZ2Utc2NhZmZvbGQvcGFnZS1oZWFkZXIvZW50ZXJwcmlzZS1zdXBwb3J0LXN0YXR1cy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvcGFnZS1zY2FmZm9sZC9wYWdlLWhlYWRlci9lbnRlcnByaXNlLXN1cHBvcnQtc3RhdHVzL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwyQkFBMkIsR0FDNUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7O0lDaEIvRCxrQ0FVQztJQUNDLDhCQUdZO0lBQ1osWUFDRjs7SUFBQSxpQkFBVTs7Ozs7SUFUUixBQUZBLEFBSEEscUNBQW9CLHNCQUdGLG1FQUloQjtJQU1GLGVBQ0Y7SUFERSxxRUFDRjs7O0lBUU0sMEJBQWtDO0lBQ2hDLFlB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QXNCLENBQUMsRUFBRTtnQ0FDakMsS0FBSyxFQUFFLG1CQUFtQjs2QkFDM0I7NEJBQ0QsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUzs0QkFDN0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUzt5QkFDbkMsQ0FBQzt3QkFDRixPQUFPOzRCQUNMLE9BQU8sRUFBRSxVQUFVLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsTUFBTTs0QkFDakUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTt5QkFDL0IsQ0FBQztvQkFDSixDQUFDLENBQUM7aUJBQ0gsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBOUNDLENBQUM7SUFnREosVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztpR0EzRFUsZ0NBQWdDO29FQUFoQyxnQ0FBZ0M7WUMzRDdDLHlGQVVDOztZQVFELGtJQUdDOztZQXBCRSxzREFBb0I7OztBRDhEckI7SUFEQyxlQUFlLEVBQUU7OEJBQ1AsVUFBVTtrRUFBbUI7aUZBSjdCLGdDQUFnQztjQUw1QyxTQUFTOzJCQUNFLCtCQUErQixtQkFFeEIsdUJBQXVCLENBQUMsTUFBTTs0RUFHdEMsT0FBTztrQkFBZixLQUFLO1lBR04sUUFBUTtrRkFKRyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERBVEVfRk9STUFULCBUaW1lU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlU3VwcG9ydFN0YXR1c1JlYXNvbixcbiAgRW50ZXJwcmlzZVN1cHBvcnRTdGF0dXNUeXBlLFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL2s4cy9yYXcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9wdWJsaWMtYXBpJztcbmltcG9ydCB7XG4gIGZvcm1hdFByb2R1Y3ROYW1lLFxuICBMaWNlbnNlQXBpU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vbGljZW5zZS9saWNlbnNlLWFwaSc7XG5pbXBvcnQgeyBMaWNlbnNlUHJvZHVjdE5hbWUgfSBmcm9tICcuLi8uLi8uLi9saWNlbnNlL2xpY2Vuc2UudHlwZSc7XG5pbXBvcnQgeyBQcm9kdWN0RW50cnlOYW1lIH0gZnJvbSAnLi4vY29tbW9uLWxheW91dC9wdWJsaWMtYXBpJztcblxuY29uc3QgSU5GT19NQVBQRVI6IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBzdGF0dXM6IFRhZ1R5cGU7XG4gICAgdG9vbHRpcHM/OiBBcnJheTx7XG4gICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcbiAgICB9PjtcbiAgfVxuPiA9IHtcbiAgW0VudGVycHJpc2VTdXBwb3J0U3RhdHVzVHlwZS5pblNlcnZpY2VdOiB7XG4gICAgdGl0bGU6ICdzdXBwZXJfSW5TZXJ2aWNlJyxcbiAgICBzdGF0dXM6ICdwcmltYXJ5JyxcbiAgICB0b29sdGlwczogW3sgY29udGVudDogJ3N1cHBlcl9pbl9zZXJ2aWNlX3RpcCcgfV0sXG4gIH0sXG4gIFtFbnRlcnByaXNlU3VwcG9ydFN0YXR1c1R5cGUud2FybmluZ106IHtcbiAgICB0aXRsZTogJ3N1cHBlcl9XYXJuaW5nJyxcbiAgICBzdGF0dXM6ICd3YXJuaW5nJyxcbiAgfSxcbiAgW0VudGVycHJpc2VTdXBwb3J0U3RhdHVzVHlwZS5vdXRPZlNlcnZpY2VdOiB7XG4gICAgdGl0bGU6ICdzdXBwZXJfT3V0T2ZTZXJ2aWNlJyxcbiAgICBzdGF0dXM6ICdlcnJvcicsXG4gIH0sXG59O1xuXG5jb25zdCBQUk9EVUNUX05BTUVfTUFQUEVSOiBSZWNvcmQ8c3RyaW5nLCBMaWNlbnNlUHJvZHVjdE5hbWU+ID0ge1xuICBbUHJvZHVjdEVudHJ5TmFtZS5BQ1BdOiBMaWNlbnNlUHJvZHVjdE5hbWUuQ09OVEFJTkVSX1BMQVRGT1JNLFxuICBbUHJvZHVjdEVudHJ5TmFtZS5EZXZPcHNdOiBMaWNlbnNlUHJvZHVjdE5hbWUuREVWT1BTLFxuICBbUHJvZHVjdEVudHJ5TmFtZS5BU01dOiBMaWNlbnNlUHJvZHVjdE5hbWUuU0VSVklDRV9NRVNILFxuICBbUHJvZHVjdEVudHJ5TmFtZS5BTUxdOiBMaWNlbnNlUHJvZHVjdE5hbWUuTUFDSElORV9MRUFSTklORyxcbiAgW1Byb2R1Y3RFbnRyeU5hbWUuREFUQV9TRVJWSUNFU106IExpY2Vuc2VQcm9kdWN0TmFtZS5EQVRBX1NFUlZJQ0VTLFxuICAvLyDmmoLml7blkowgbGljZW5zZSDkv53mjIHkuIDoh7Tkvb/nlKggYWNwIOeahO+8jCDlkI7nu63kvJrmlbTmlLnvvIzmraPluLhhYW0gZGV2b3BzIGFzbSDpg73pnIDopoHnlKhcbiAgW1Byb2R1Y3RFbnRyeU5hbWUuQUFNXTogTGljZW5zZVByb2R1Y3ROYW1lLkNPTlRBSU5FUl9QTEFURk9STSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1lbnRlcnByaXNlLXN1cHBvcnQtc3RhdHVzJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEVudGVycHJpc2VTdXBwb3J0U3RhdHVzQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcHJvZHVjdCE6IFByb2R1Y3RFbnRyeU5hbWU7XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHByb2R1Y3QkITogT2JzZXJ2YWJsZTxQcm9kdWN0RW50cnlOYW1lPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpY2Vuc2VBcGlTZXJ2aWNlOiBMaWNlbnNlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbWVTZXJ2aWNlOiBUaW1lU2VydmljZSxcbiAgKSB7fVxuXG4gIGRhdGEkID0gdGhpcy5wcm9kdWN0JC5waXBlKFxuICAgIHN3aXRjaE1hcChwcm9kdWN0ID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBQUk9EVUNUX05BTUVfTUFQUEVSW3Byb2R1Y3RdIHx8ICcnO1xuICAgICAgcmV0dXJuIHRoaXMubGljZW5zZUFwaVNlcnZpY2UuZ2V0RW50ZXJwcmlzZVN1cHBvcnQoXG4gICAgICAgIGZvcm1hdFByb2R1Y3ROYW1lKG5hbWUpLFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBtYXAocmVzID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgYWxsb3dQcm9kdWN0VmVyc2lvbixcbiAgICAgICAgICBiYXJlbWV0YWxDbHVzdGVyQ1BVQ29yZUxpbWl0LFxuICAgICAgICAgIGltcG9ydGVkQ2x1c3Rlck5vZGVMaW1pdCxcbiAgICAgICAgICB2YWxpZGl0eSxcbiAgICAgICAgfSxcbiAgICAgIH0gPSByZXM7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5JTkZPX01BUFBFUltzdGF0dXMucGhhc2VdLFxuICAgICAgICAuLi4oc3RhdHVzLnBoYXNlICE9PSBFbnRlcnByaXNlU3VwcG9ydFN0YXR1c1R5cGUuaW5TZXJ2aWNlICYmIHtcbiAgICAgICAgICB0b29sdGlwczogc3RhdHVzLnJlYXNvbj8ubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBFbnRlcnByaXNlU3VwcG9ydFN0YXR1c1JlYXNvbjtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyVGltZSA9IHsgdmFsdWU6IHRoaXMuZm9ybWF0RGF0ZSh2YWxpZGl0eS5ub3RBZnRlcikgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB7XG4gICAgICAgICAgICAgIFtyZXNvdXJjZS5FeGNlZWRSZXNvdXJjZUxpbWl0XToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBiYXJlbWV0YWxDbHVzdGVyQ1BVQ29yZUxpbWl0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbcmVzb3VyY2UuRXhjZWVkTm9kZUxpbWl0XToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpbXBvcnRlZENsdXN0ZXJOb2RlTGltaXQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtyZXNvdXJjZS5NaXNtYXRjaFByb2R1Y3RWZXJzaW9uXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBhbGxvd1Byb2R1Y3RWZXJzaW9uLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbcmVzb3VyY2UuRXhwaXJlZF06IGFmdGVyVGltZSxcbiAgICAgICAgICAgICAgW3Jlc291cmNlLkV4cGlyaW5nU29vbl06IGFmdGVyVGltZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBgc3VwcGVyXyR7Z2V0KEVudGVycHJpc2VTdXBwb3J0U3RhdHVzUmVhc29uLCBpdGVtKX1fdGlwYCxcbiAgICAgICAgICAgICAgZGF0YTogZ2V0KGNvbnRlbnQsIGl0ZW0pIHx8IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xuXG4gIGZvcm1hdERhdGUoZGF0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudGltZVNlcnZpY2UuZm9ybWF0KGRhdGUsIERBVEVfRk9STUFUKTtcbiAgfVxufVxuIiwiPGF1aS10YWdcbiAgKm5nSWY9XCJkYXRhJCB8IGFzeW5jIGFzIGRhdGFcIlxuICBbdHlwZV09XCJkYXRhLnN0YXR1c1wiXG4gIHNpemU9XCJzbWFsbFwiXG4gIGNsYXNzPVwidHctbXItOCB0dy1ibG9ja1wiXG4gIFthdWlUb29sdGlwXT1cInRpcFwiXG4gIGF1aVRvb2x0aXBUeXBlPVwiaW5mb1wiXG4gIFthdWlUb29sdGlwQ29udGV4dF09XCJ7XG4gICAgdG9vbHRpcHM6IGRhdGEudG9vbHRpcHNcbiAgfVwiXG4+XG4gIDxhdWktaWNvblxuICAgIGljb249XCJwcm9kOm1haW50ZW5hbmNlX3NcIlxuICAgIGNsYXNzPVwiYmljb2xvclwiXG4gID48L2F1aS1pY29uPlxuICB7eyBkYXRhLnRpdGxlIHwgdHJhbnNsYXRlIH19XG48L2F1aS10YWc+XG5cbjxuZy10ZW1wbGF0ZVxuICAjdGlwXG4gIGxldC10b29sdGlwcz1cInRvb2x0aXBzXCJcbj5cbiAgPGRpdiBjbGFzcz1cInR3LXRleHQtbVwiPlxuICAgIDx1bCBjbGFzcz1cInR3LWxpc3QtZGlzYyB0dy1wbC04XCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdG9vbHRpcHNcIj5cbiAgICAgICAge3sgaXRlbS5jb250ZW50IHwgdHJhbnNsYXRlOiBpdGVtLmRhdGEgfX1cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19