barsa-sap-ui 2.2.22 → 2.2.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +2 -2
- package/esm2022/lib/barsa-form-layout-panel/barsa-form-layout-panel.component.mjs +58 -0
- package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +1 -1
- package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +1 -1
- package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +1 -1
- package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +1 -1
- package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +1 -1
- package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +1 -1
- package/esm2022/lib/barsa-sap-ui.module.mjs +24 -23
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +1 -1
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +10 -9
- package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +2 -2
- package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +1 -1
- package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +1 -1
- package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +7 -5
- package/esm2022/lib/index.mjs +4 -2
- package/esm2022/lib/layout-actions/layout-actions.component.mjs +3 -3
- package/esm2022/lib/layout-control/layout-control.component.mjs +4 -3
- package/esm2022/lib/list-item/list-item.component.mjs +1 -1
- package/esm2022/lib/ly-label/ly-label.component.mjs +5 -3
- package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +1 -1
- package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +1 -1
- package/esm2022/lib/report-view-renderer.directive.mjs +5 -2
- package/esm2022/lib/sap-ui-report-base.component.mjs +14 -4
- package/esm2022/lib/table-th.directive.mjs +2 -2
- package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +1 -1
- package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +9 -4
- package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +1 -1
- package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +27 -15
- package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +1 -1
- package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +24 -5
- package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +1 -1
- package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +1 -1
- package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +1 -1
- package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +1 -1
- package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +3 -3
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +3 -3
- package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +8 -4
- package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +3 -3
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/barsa-sap-ui.mjs +287 -179
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-form-layout-panel/barsa-form-layout-panel.component.d.ts +30 -0
- package/lib/barsa-sap-ui.module.d.ts +37 -36
- package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +2 -3
- package/lib/index.d.ts +3 -3
- package/lib/layout-control/layout-control.component.d.ts +1 -0
- package/lib/ly-label/ly-label.component.d.ts +2 -1
- package/lib/report-view-renderer.directive.d.ts +2 -1
- package/lib/sap-ui-report-base.component.d.ts +5 -3
- package/lib/ui-check-box/ui-check-box.component.d.ts +1 -0
- package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +2 -0
- package/lib/ui-tinymce/ui-tinymce.component.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -45,10 +45,12 @@ export class FundamentalDynamicFormComponent extends BaseComponent {
|
|
|
45
45
|
super.ngOnInit();
|
|
46
46
|
this.isFirefox = isFirefox();
|
|
47
47
|
this.facetList ||= [];
|
|
48
|
-
|
|
48
|
+
const workflowUiSetting = this.workflowPanelUi?.Setting;
|
|
49
|
+
this.workflowInfoText = workflowUiSetting?.Workflow?.InfoText;
|
|
49
50
|
// const workflowButtons = this.workflowPanelUi?.buttonList ?? [];
|
|
50
51
|
this.workflowButtonsComboMode = this.isMobile;
|
|
51
|
-
this.worfklowButtonsOnFooter =
|
|
52
|
+
this.worfklowButtonsOnFooter =
|
|
53
|
+
this.parameters?.WorkflowButtonsOnFooter || workflowUiSetting?.Workflow.ShowInToolbar === false;
|
|
52
54
|
// this.workflowButtons = workflowButtons;
|
|
53
55
|
this.hasLayoutButtons =
|
|
54
56
|
this.layoutActions.length > 0 ||
|
|
@@ -101,11 +103,11 @@ export class FundamentalDynamicFormComponent extends BaseComponent {
|
|
|
101
103
|
this.layout2 = GetFormLayoutGrid(false, this.colXl, this.colLg, this.colMd);
|
|
102
104
|
}
|
|
103
105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FundamentalDynamicFormComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
104
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FundamentalDynamicFormComponent, selector: "bsu-fundamental-dynamic-form", inputs: { breadCrumbs: "breadCrumbs", toolbarVisible: "toolbarVisible", toolbarItems: "toolbarItems", layoutActions: "layoutActions", layout94: "layout94", parameters: "parameters", workflowPanelUi: "workflowPanelUi", context: "context", title: "title", subtitle: "subtitle", description: "description", facetList: "facetList", fieldDict: "fieldDict", removeHeaderBorder: "removeHeaderBorder", removeContentPadding: "removeContentPadding", isMobile: "isMobile", mo: "mo", avatar: "avatar", circleAvatar: "circleAvatar", rtl: "rtl", hideFooter: "hideFooter", hideTitle: "hideTitle", hideClose: "hideClose", hidePin: "hidePin", fullscreen: "fullscreen", mask: "mask", canSend: "canSend", contentIsPage: "contentIsPage", contentDensity: "contentDensity", deviceSize: "deviceSize", dirValue: "dirValue", landscape: "landscape", standalone: "standalone", modernTabs: "modernTabs", formVisibilityStatus: "formVisibilityStatus", layoutGridCol: "layoutGridCol", colLg: "colLg", colXl: "colXl", colMd: "colMd", footerDesign: "footerDesign", formContentMaxWidth: "formContentMaxWidth", workflowButtons: "workflowButtons" }, outputs: { toolbarClick: "toolbarClick", workflowChoiceClick: "workflowChoiceClick", close: "close", fullscreenRequest: "fullscreenRequest" }, viewQueries: [{ propertyName: "_dynamicPageComponent", first: true, predicate: DynamicPageComponent, descendants: true, static: true }, { propertyName: "_toolbarComponent", first: true, predicate: ["formToolbar"], descendants: true }, { propertyName: "titleRef", first: true, predicate: ["titleRef"], descendants: true, read: ViewContainerRef }, { propertyName: "headerAvatarRef", first: true, predicate: ["headerAvatar"], descendants: true }, { propertyName: "closeFormTemplate", first: true, predicate: ["closeForm"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (mask) {\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\">\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n</div>\r\n}\r\n\r\n<fd-dynamic-page\r\n [size]=\"isMobile ? 'small' : 'large'\"\r\n [ngClass]=\"{ 'floating-footer': footerDesign === 'floating-footer' }\"\r\n [class.header-border]=\"!removeHeaderBorder\"\r\n [attr.isMobile]=\"isMobile\"\r\n [attr.contentIsPage]=\"contentIsPage\"\r\n mobile\r\n formClose\r\n [isMobile]=\"isMobile\"\r\n>\r\n <fd-dynamic-page-header\r\n [class.simple-title]=\"!description\"\r\n [title]=\"(hideTitle === true ? '' : title) | bbbTranslate\"\r\n [class.p-b0]=\"removeContentPadding\"\r\n [class.hide-title]=\"hideTitle === true && hideClose === true\"\r\n [class.no-toolbar-items]=\"!(toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter)?.length\"\r\n #titleRef\r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @if (breadCrumbs && !isMobile) { @for (breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track\r\n breadCrumb.url; let i = $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n } }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <fd-dynamic-page-global-actions>\r\n <!-- global actions -->\r\n\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (toolbarVisible) {\r\n <bsu-form-toolbar\r\n [deviceSize]=\"deviceSize\"\r\n [buttons]=\"toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter\"\r\n [dirValue]=\"dirValue\"\r\n [isFirefox]=\"isFirefox\"\r\n (toolbarClick)=\"toolbarClick.emit($event)\"\r\n #formToolbar\r\n ></bsu-form-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <!-- layout actions -->\r\n <!-- <div [formActions]=\"this.toolbar\"></div> -->\r\n @if (!hideClose) {\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n @if (deviceSize !== 's') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n }\r\n <ng-container *ngTemplateOutlet=\"fullscreenForm\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"closeForm\"></ng-container>\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (description || facetList.length > 0 || workflowInfoText || avatar) {}\r\n <fd-dynamic-page-subheader\r\n [class.header-no-description]=\"!(description || workflowInfoText)\"\r\n [class.no-pin]=\"hidePin || (!facetList?.length && !workflowInfoText)\"\r\n [collapsible]=\"true\"\r\n [pinnable]=\"false\"\r\n [collapsed]=\"!facetList?.length && !workflowInfoText\"\r\n >\r\n @if (workflowInfoText) {\r\n <fd-message-strip [type]=\"'warning'\" [dismissible]=\"false\">\r\n {{ workflowInfoText | bbbTranslate }}\r\n </fd-message-strip>\r\n }\r\n <fd-facet-group ariaLabel=\"Facet Group\">\r\n @if (avatar) {\r\n <fd-facet type=\"image\">\r\n <fd-avatar\r\n title=\"avatar\"\r\n [glyph]=\"avatar\"\r\n [image]=\"!avatar?.FileId ? null : (avatar?.FileId | picFieldSrc: 'ID':null)\"\r\n [size]=\"deviceSize === 'xl' ? 'l' : deviceSize\"\r\n [transparent]=\"true\"\r\n [circle]=\"circleAvatar\"\r\n ></fd-avatar>\r\n <!-- <div\r\n class=\"fd-avatar fd-avatar--circle\"\r\n [class]=\"'fd-avatar--' + (deviceSize === 'xl' ? 'l' : deviceSize)\"\r\n >\r\n <i *ngIf=\"avatar\" class=\"fd-avatar__icon\" [class]=\"avatar | sapFontClass\" role=\"presentation\"> </i>\r\n </div> -->\r\n </fd-facet>\r\n } @for (facet of facetList; track facet) {\r\n <fd-facet\r\n [type]=\"facet.type\"\r\n [facetTitle]=\"facet.mo.Title | bbbTranslate\"\r\n [subtitle]=\"facet.mo.SubTitle | facetValue | bbbTranslate\"\r\n >\r\n @for (item of facet.mo.ItemList?.MoDataList; track item) {\r\n <fd-facet-content>\r\n <label fd-form-label [colon]=\"true\" for=\"form-value-10\">{{ item.Title }}</label>\r\n <fd-text [text]=\"item.Value | facetValue\" id=\"form-value-10\"></fd-text>\r\n </fd-facet-content>\r\n } @if ( !facet.mo.IsNumber && facet.type === 'key-value' && !facet.mo.Component?.Selector) {\r\n <span\r\n fd-object-status\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [label]=\"facet.mo.Component?.Selector ? '' : (facet.mo.Text | facetValue)\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [title]=\"facet.mo.Text | facetValue\"\r\n [aria-label]=\"facet.mo.Text | facetValue\"\r\n [glyph]=\"facet.mo.Icon\"\r\n >\r\n </span>\r\n } @else {\r\n <bnrc-dynamic-component\r\n [class]=\"'fd-object-status fd-object-status--' + facet.mo.Status | facetValue\"\r\n [class.fd-object-status--large]=\"facet.mo.IsLarge\"\r\n [component]=\"facet.mo.Component\"\r\n [value]=\"facet.mo.Text\"\r\n ></bnrc-dynamic-component>\r\n } @if (facet.mo.IsNumber && facet.type === 'key-value') {\r\n <fd-object-number\r\n [number]=\"facet.mo.Text | facetValue\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [unit]=\"facet.mo.Unit | facetValue\"\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [decimal]=\"facet.mo.DecimalValue | facetValue\"\r\n ></fd-object-number>\r\n } @if (facet.type === 'plain-text') {\r\n <div [style.width.px]=\"facet.mo.Width\" style=\"white-space: normal\">\r\n <fd-text [text]=\"facet.mo.Text | facetValue\" hyphenation=\"auto\"></fd-text>\r\n </div>\r\n } @if (facet.type === 'rating-indicator') {\r\n <fd-facet-content>\r\n <fd-rating-indicator\r\n style=\"pointer-events: none\"\r\n size=\"md\"\r\n [dynamicTextIndicator]=\"facet.mo.Footer\"\r\n [displayMode]=\"true\"\r\n [value]=\"facet.mo | facetValue: facet.type\"\r\n ></fd-rating-indicator>\r\n </fd-facet-content>\r\n } @if (facet.type === 'progress') {\r\n <div [style.width]=\"'10rem'\">\r\n <!-- <span fd-form-label>{{ facet.mo.Subtitle | facetValue }}</span> -->\r\n <fd-progress-indicator\r\n style=\"width: 10r em\"\r\n [state]=\"facet.mo.State\"\r\n [valueText]=\"(facet.mo | facetValue: facet.type) + ' \u0627\u0632 10 \u0645\u0631\u062D\u0644\u0647'\"\r\n [valueNow]=\"facet.mo | facetValue: facet.type\"\r\n [valueMax]=\"10\"\r\n [unit]=\"'\u0645\u0631\u062D\u0644\u0647'\"\r\n ></fd-progress-indicator>\r\n <!-- <ui5-progress-indicator\r\n style=\"width: 10rem\"\r\n [valueState]=\"facet.mo.State\"\r\n [value]=\"getNumber(facet.mo.Value)\"\r\n ></ui5-progress-indicator> -->\r\n </div>\r\n } @if (facet.type === 'microcharts') {\r\n <div>\r\n <label wrap>in progress ...</label>\r\n </div>\r\n }\r\n </fd-facet>\r\n }\r\n </fd-facet-group>\r\n @if (description) {\r\n <span>{{ description }}</span>\r\n }\r\n </fd-dynamic-page-subheader>\r\n @if(!modernTabs.length && !contentIsPage){\r\n <fd-dynamic-page-content [class.limit-content-width]=\"formContentMaxWidth > 0\" cdkScrollable>\r\n <fd-layout-grid style=\"min-height: 100%\" [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div style=\"min-height: 100%\" [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n parameters?.LayoutComponent ? renderLayoutComponent : renderDefaultLayout;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div\r\n style=\"padding: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n } @else if(modernTabs.length && !contentIsPage && !parameters?.LayoutComponent){\r\n <fdp-icon-tab-bar [stackContent]=\"false\" [collapseOverflow]=\"true\" [expandOverflowText]=\"'More' | bbbTranslate\">\r\n @for (tab of modernTabs; track tab.Title; let i = $index) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"tab.id\"\r\n [label]=\"tab.Title!! | bbbTranslate\"\r\n [title]=\"tab.Title!! | bbbTranslate\"\r\n [class.is-expanded]=\"selectedTab === tab.Title\"\r\n #tablist\r\n >\r\n <fd-dynamic-page-content [id]=\"tab.id\" [class.limit-content-width]=\"formContentMaxWidth > 0\">\r\n <fd-layout-grid [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <bsu-ly-tab-page [config]=\"tab\"></bsu-ly-tab-page>\r\n </div>\r\n <div\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n }\r\n </fdp-icon-tab-bar>\r\n } @if(!hideFooter && hasLayoutButtons){\r\n <fd-dynamic-page-footer>\r\n <ng-container *ngTemplateOutlet=\"layoutActionsTemplateRef\"></ng-container>\r\n </fd-dynamic-page-footer>\r\n }\r\n</fd-dynamic-page>\r\n@if (contentIsPage) {\r\n<ng-container\r\n *ngTemplateOutlet=\"\r\n renderLayoutComponent;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n></ng-container>\r\n}\r\n<ng-template #renderDefaultLayout let-layout94=\"layout94\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n</ng-template>\r\n<ng-template #renderLayoutComponent let-component let-layout94=\"layout94\">\r\n <bnrc-dynamic-form-component\r\n [component]=\"component\"\r\n [layoutActionsTemplateRef]=\"layoutActionsTemplateRef\"\r\n [removeContentPadding]=\"removeContentPadding\"\r\n [breadCrumbs]=\"breadCrumbs\"\r\n [description]=\"description\"\r\n [title]=\"title\"\r\n [subtitle]=\"subtitle\"\r\n [toolbarItems]=\"toolbarItems\"\r\n [layoutActions]=\"layoutActions\"\r\n [footerDesign]=\"footerDesign\"\r\n [facetList]=\"facetList\"\r\n [settings]=\"component.Settings\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowPanelUi]=\"workflowPanelUi\"\r\n [isMobile]=\"isMobile\"\r\n [mo]=\"mo\"\r\n [layout94]=\"layout94\"\r\n [context]=\"context\"\r\n [rtl]=\"rtl\"\r\n [fieldDict]=\"fieldDict\"\r\n [mask]=\"mask\"\r\n [dirValue]=\"dirValue\"\r\n [deviceSize]=\"deviceSize\"\r\n [contentDensity]=\"contentDensity\"\r\n [modernTabs]=\"modernTabs\"\r\n [avatar]=\"avatar\"\r\n (events)=\"onDynamicComponentEvents($event)\"\r\n ></bnrc-dynamic-form-component>\r\n</ng-template>\r\n<ng-template #closeForm>\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"close.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n</ng-template>\r\n<ng-template #fullscreenForm>\r\n @if (canFullscreen) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [attr.aria-label]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n (click)=\"fullscreenRequest.emit()\"\r\n [title]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n [glyph]=\"fullscreen ? 'exitfullscreen' : 'resize'\"\r\n ></button>\r\n }\r\n</ng-template>\r\n<ng-template #layoutActionsTemplateRef>\r\n <bsu-layout-actions\r\n [canSend]=\"canSend\"\r\n [buttons]=\"layoutActions\"\r\n [isMobile]=\"isMobile\"\r\n [landscape]=\"landscape\"\r\n [standalone]=\"standalone\"\r\n [footerDesign]=\"footerDesign\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowButtonsComboMode]=\"workflowButtonsComboMode || worfklowButtonsOnFooter\"\r\n [deviceSize]=\"deviceSize\"\r\n [rtl]=\"rtl\"\r\n (toolClick)=\"toolbarClick.emit($event)\"\r\n (workflowChoiceSelect)=\"onWfChoiceSelect($event)\"\r\n >\r\n </bsu-layout-actions>\r\n</ng-template>\r\n", styles: [":host{display:block;height:auto;width:100%}:host ::ng-deep fd-dynamic-page[contentIsPage=true] .fd-dynamic-page{height:auto!important}:host ::ng-deep .fd-progress-indicator__container,:host ::ng-deep .fd-progress-indicator__progress-bar{height:1.5rem}:host ::ng-deep fd-facet .fd-object-status--large{font-size:1.1rem}.no-toolbar-items ::ng-deep .fd-dynamic-page__toolbar-container{width:auto}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%;overflow:hidden}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded bsu-ly-layout-container-of-root{min-height:100%}fd-dynamic-page ::ng-deep>article>.fd-scrollbar{height:inherit}fd-dynamic-page fd-dynamic-page-content.limit-content-width{display:flex;justify-content:center}fd-facet{display:flex;flex-direction:column}.hide-title ::ng-deep .fd-dynamic-page__title-container{display:none!important}.no-pin ::ng-deep .fd-dynamic-page__collapsible-header-visibility-container,.no-pin ::ng-deep .fd-dynamic-page__collapsible-header{display:none!important}fd-toolbar.firefox ::ng-deep .fd-toolbar{flex-direction:row-reverse}fd-toolbar.firefox ::ng-deep .fd-toolbar>:first-child{margin-right:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormComponent, selector: "bnrc-dynamic-form-component", inputs: ["breadCrumbs", "toolbarVisible", "toolbarItems", "layoutActions", "layoutActionsTemplateRef", "workflowButtons", "layout94", "footerDesign", "settings", "workflowPanelUi", "title", "subtitle", "description", "facetList", "removeHeaderBorder", "removeContentPadding", "isMobile", "avatar", "rtl", "mask", "mo", "contentDensity", "deviceSize", "dirValue", "fieldDict", "modernTabs"] }, { kind: "component", type: i2.BaseDynamicComponent, selector: "bnrc-dynamic-component", inputs: ["component", "value"], outputs: ["events"] }, { kind: "directive", type: i2.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "directive", type: i2.MobileDirective, selector: "[mobile]" }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i4.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i5.BreadcrumbComponent, selector: "fd-breadcrumb", inputs: ["reverse", "tabIndex"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i5.BreadcrumbItemComponent, selector: "fd-breadcrumb-item" }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "ariaRoledescription", "background", "autoResponsive", "size", "offset", "expandContent", "positionRelative"] }, { kind: "component", type: i7.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap", "headingLevel", "titleId"] }, { kind: "component", type: i7.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i7.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i7.DynamicPageSubheaderComponent, selector: "fd-dynamic-page-subheader", inputs: ["collapsible", "pinnable", "collapsed", "expandLabel", "collapseLabel", "id", "headerAriaLabel", "pinAriaLabel", "unpinAriaLabel"], outputs: ["collapsedChange"] }, { kind: "component", type: i7.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i7.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i7.DynamicPageBreadcrumbComponent, selector: "fd-dynamic-page-breadcrumb" }, { kind: "component", type: i8.FacetComponent, selector: "fd-facet", inputs: ["type", "facetTitle", "subtitle", "headingLevel", "id", "alignEnd"] }, { kind: "component", type: i8.FacetGroupComponent, selector: "fd-facet-group", inputs: ["ariaLabel"] }, { kind: "component", type: i8.FacetContentComponent, selector: "fd-facet-content" }, { kind: "component", type: i9.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "component", type: i10.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i10.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i10.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i11.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "component", type: i12.ObjectNumberComponent, selector: "fd-object-number", inputs: ["number", "decimal", "unit", "emphasized", "large", "status", "class", "ariaLabelledBy", "ariaLabel"] }, { kind: "component", type: i13.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "glyphFont", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "component", type: i14.RatingIndicatorComponent, selector: "fd-rating-indicator", inputs: ["class", "name", "ariaLabel", "ariaLabelledBy", "disabled", "displayMode", "nonInteractive", "indicatorCapacity", "allowHalves", "value", "totalRatings", "ratingAverage", "ratings", "displayAllRatings", "ratedIcon", "unratedIcon", "size", "dynamicTextIndicator"], outputs: ["ratingChanged"] }, { kind: "component", type: i15.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "component", type: i16.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i16.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i17.ProgressIndicatorComponent, selector: "fd-progress-indicator", inputs: ["valueText", "unit", "valueMin", "valueMax", "valueNow", "state", "animate"] }, { kind: "component", type: i18.IconTabBarComponent, selector: "fdp-icon-tab-bar", inputs: ["stackContent", "iconTabType", "tabsConfig", "densityMode", "iconTabFont", "enableTabReordering", "showTotalTab", "multiClick", "layoutMode", "iconTabBackground", "iconTabSize", "colorAssociations", "maxContentHeight"], outputs: ["tabsConfigChange", "densityModeChange", "iconTabSelected", "iconTabReordered", "closeTab"] }, { kind: "component", type: i18.IconTabBarTabComponent, selector: "fdp-icon-tab-bar-tab", inputs: ["label", "color", "icon", "iconFont", "counter", "active", "badge", "closable", "id"] }, { kind: "component", type: i19.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "component", type: i20.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i21.LyTabPageComponent, selector: "bsu-ly-tab-page", inputs: ["renderItems", "tablist"] }, { kind: "component", type: i22.LayoutActionsComponent, selector: "bsu-layout-actions", inputs: ["workflowButtons", "workflowButtonsComboMode", "canSend", "simple", "footerDesign"], outputs: ["workflowChoiceSelect"] }, { kind: "component", type: i23.BreadcrumbComponent, selector: "bsu-breadcrumb", inputs: ["breadCrumb", "allBreadCrumb", "isLast", "index"] }, { kind: "component", type: i24.FormToolbarComponent, selector: "bsu-form-toolbar", outputs: ["toolbarClick"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.HeaderFacetValuePipe, name: "facetValue" }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.FilterWorkflowInMobilePipe, name: "filterWorkflowInMobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FundamentalDynamicFormComponent, selector: "bsu-fundamental-dynamic-form", inputs: { breadCrumbs: "breadCrumbs", toolbarVisible: "toolbarVisible", toolbarItems: "toolbarItems", layoutActions: "layoutActions", layout94: "layout94", parameters: "parameters", workflowPanelUi: "workflowPanelUi", context: "context", title: "title", subtitle: "subtitle", description: "description", facetList: "facetList", fieldDict: "fieldDict", removeHeaderBorder: "removeHeaderBorder", removeContentPadding: "removeContentPadding", isMobile: "isMobile", mo: "mo", avatar: "avatar", circleAvatar: "circleAvatar", rtl: "rtl", hideFooter: "hideFooter", hideTitle: "hideTitle", hideClose: "hideClose", hidePin: "hidePin", fullscreen: "fullscreen", mask: "mask", canSend: "canSend", contentIsPage: "contentIsPage", contentDensity: "contentDensity", deviceSize: "deviceSize", dirValue: "dirValue", landscape: "landscape", standalone: "standalone", modernTabs: "modernTabs", formVisibilityStatus: "formVisibilityStatus", layoutGridCol: "layoutGridCol", colLg: "colLg", colXl: "colXl", colMd: "colMd", footerDesign: "footerDesign", formContentMaxWidth: "formContentMaxWidth", workflowButtons: "workflowButtons" }, outputs: { toolbarClick: "toolbarClick", workflowChoiceClick: "workflowChoiceClick", close: "close", fullscreenRequest: "fullscreenRequest" }, viewQueries: [{ propertyName: "_dynamicPageComponent", first: true, predicate: DynamicPageComponent, descendants: true, static: true }, { propertyName: "_toolbarComponent", first: true, predicate: ["formToolbar"], descendants: true }, { propertyName: "titleRef", first: true, predicate: ["titleRef"], descendants: true, read: ViewContainerRef }, { propertyName: "headerAvatarRef", first: true, predicate: ["headerAvatar"], descendants: true }, { propertyName: "closeFormTemplate", first: true, predicate: ["closeForm"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (mask) {\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\">\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n</div>\r\n}\r\n\r\n<fd-dynamic-page\r\n [size]=\"isMobile ? 'small' : 'large'\"\r\n [ngClass]=\"{ 'floating-footer': footerDesign === 'floating-footer' }\"\r\n [class.header-border]=\"!removeHeaderBorder\"\r\n [attr.isMobile]=\"isMobile\"\r\n [attr.contentIsPage]=\"contentIsPage\"\r\n mobile\r\n formClose\r\n [isMobile]=\"isMobile\"\r\n>\r\n <fd-dynamic-page-header\r\n [class.simple-title]=\"!description\"\r\n [title]=\"(hideTitle === true ? '' : title) | bbbTranslate\"\r\n [class.p-b0]=\"removeContentPadding\"\r\n [class.hide-title]=\"hideTitle === true && hideClose === true\"\r\n [class.no-toolbar-items]=\"!(toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter)?.length\"\r\n #titleRef\r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @if (breadCrumbs && !isMobile) { @for (breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track\r\n breadCrumb.url; let i = $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n } }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <fd-dynamic-page-global-actions>\r\n <!-- global actions -->\r\n\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (toolbarVisible) {\r\n <bsu-form-toolbar\r\n [deviceSize]=\"deviceSize\"\r\n [buttons]=\"toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter\"\r\n [dirValue]=\"dirValue\"\r\n [isFirefox]=\"isFirefox\"\r\n (toolbarClick)=\"toolbarClick.emit($event)\"\r\n #formToolbar\r\n ></bsu-form-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <!-- layout actions -->\r\n <!-- <div [formActions]=\"this.toolbar\"></div> -->\r\n @if (!hideClose) {\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n @if (deviceSize !== 's') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n }\r\n <ng-container *ngTemplateOutlet=\"fullscreenForm\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"closeForm\"></ng-container>\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (description || facetList.length > 0 || workflowInfoText || avatar) {}\r\n <fd-dynamic-page-subheader\r\n [class.header-no-description]=\"!(description || workflowInfoText)\"\r\n [class.no-pin]=\"hidePin || (!facetList?.length && !workflowInfoText)\"\r\n [collapsible]=\"true\"\r\n [pinnable]=\"false\"\r\n [collapsed]=\"!facetList?.length && !workflowInfoText\"\r\n >\r\n @if (workflowInfoText) {\r\n <fd-message-strip [type]=\"'warning'\" [dismissible]=\"false\">\r\n {{ workflowInfoText | bbbTranslate }}\r\n </fd-message-strip>\r\n }\r\n <fd-facet-group ariaLabel=\"Facet Group\">\r\n @if (avatar) {\r\n <fd-facet type=\"image\">\r\n <fd-avatar\r\n title=\"avatar\"\r\n [glyph]=\"avatar\"\r\n [image]=\"!avatar?.FileId ? null : (avatar?.FileId | picFieldSrc: 'ID':null)\"\r\n [size]=\"deviceSize === 'xl' ? 'l' : deviceSize\"\r\n [transparent]=\"true\"\r\n [circle]=\"circleAvatar\"\r\n ></fd-avatar>\r\n <!-- <div\r\n class=\"fd-avatar fd-avatar--circle\"\r\n [class]=\"'fd-avatar--' + (deviceSize === 'xl' ? 'l' : deviceSize)\"\r\n >\r\n <i *ngIf=\"avatar\" class=\"fd-avatar__icon\" [class]=\"avatar | sapFontClass\" role=\"presentation\"> </i>\r\n </div> -->\r\n </fd-facet>\r\n } @for (facet of facetList; track facet) {\r\n <fd-facet\r\n [type]=\"facet.type\"\r\n [facetTitle]=\"facet.mo.Title | bbbTranslate\"\r\n [subtitle]=\"facet.mo.SubTitle | facetValue | bbbTranslate\"\r\n >\r\n @for (item of facet.mo.ItemList?.MoDataList; track item) {\r\n <fd-facet-content>\r\n <label fd-form-label [colon]=\"true\" for=\"form-value-10\">{{ item.Title }}</label>\r\n <fd-text [text]=\"item.Value | facetValue\" id=\"form-value-10\"></fd-text>\r\n </fd-facet-content>\r\n } @if ( !facet.mo.IsNumber && facet.type === 'key-value' && !facet.mo.Component?.Selector) {\r\n <span\r\n fd-object-status\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [label]=\"facet.mo.Component?.Selector ? '' : (facet.mo.Text | facetValue)\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [title]=\"facet.mo.Text | facetValue\"\r\n [aria-label]=\"facet.mo.Text | facetValue\"\r\n [glyph]=\"facet.mo.Icon\"\r\n >\r\n </span>\r\n } @else {\r\n <bnrc-dynamic-component\r\n [class]=\"'fd-object-status fd-object-status--' + facet.mo.Status | facetValue\"\r\n [class.fd-object-status--large]=\"facet.mo.IsLarge\"\r\n [component]=\"facet.mo.Component\"\r\n [value]=\"facet.mo.Text\"\r\n ></bnrc-dynamic-component>\r\n } @if (facet.mo.IsNumber && facet.type === 'key-value') {\r\n <fd-object-number\r\n [number]=\"facet.mo.Text | facetValue\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [unit]=\"facet.mo.Unit | facetValue\"\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [decimal]=\"facet.mo.DecimalValue | facetValue\"\r\n ></fd-object-number>\r\n } @if (facet.type === 'plain-text') {\r\n <div [style.width.px]=\"facet.mo.Width\" style=\"white-space: normal\">\r\n <fd-text [text]=\"facet.mo.Text | facetValue\" hyphenation=\"auto\"></fd-text>\r\n </div>\r\n } @if (facet.type === 'rating-indicator') {\r\n <fd-facet-content>\r\n <fd-rating-indicator\r\n style=\"pointer-events: none\"\r\n size=\"md\"\r\n [dynamicTextIndicator]=\"facet.mo.Footer\"\r\n [displayMode]=\"true\"\r\n [value]=\"facet.mo | facetValue: facet.type\"\r\n ></fd-rating-indicator>\r\n </fd-facet-content>\r\n } @if (facet.type === 'progress') {\r\n <div [style.width]=\"'10rem'\">\r\n <!-- <span fd-form-label>{{ facet.mo.Subtitle | facetValue }}</span> -->\r\n <fd-progress-indicator\r\n style=\"width: 10r em\"\r\n [state]=\"facet.mo.State\"\r\n [valueText]=\"(facet.mo | facetValue: facet.type) + ' \u0627\u0632 10 \u0645\u0631\u062D\u0644\u0647'\"\r\n [valueNow]=\"facet.mo | facetValue: facet.type\"\r\n [valueMax]=\"10\"\r\n [unit]=\"'\u0645\u0631\u062D\u0644\u0647'\"\r\n ></fd-progress-indicator>\r\n <!-- <ui5-progress-indicator\r\n style=\"width: 10rem\"\r\n [valueState]=\"facet.mo.State\"\r\n [value]=\"getNumber(facet.mo.Value)\"\r\n ></ui5-progress-indicator> -->\r\n </div>\r\n } @if (facet.type === 'microcharts') {\r\n <div>\r\n <label wrap>in progress ...</label>\r\n </div>\r\n }\r\n </fd-facet>\r\n }\r\n </fd-facet-group>\r\n @if (description) {\r\n <span>{{ description }}</span>\r\n }\r\n </fd-dynamic-page-subheader>\r\n @if(!modernTabs.length && !contentIsPage){\r\n <fd-dynamic-page-content [class.limit-content-width]=\"formContentMaxWidth > 0\" cdkScrollable>\r\n <fd-layout-grid style=\"min-height: 100%\" [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div style=\"min-height: 100%\" [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n parameters?.LayoutComponent ? renderLayoutComponent : renderDefaultLayout;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n } @else if(modernTabs.length && !contentIsPage && !parameters?.LayoutComponent){\r\n <fdp-icon-tab-bar [stackContent]=\"false\" [collapseOverflow]=\"true\" [expandOverflowText]=\"'More' | bbbTranslate\">\r\n @for (tab of modernTabs; track tab.Title; let i = $index) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"tab.id\"\r\n [label]=\"tab.Title!! | bbbTranslate\"\r\n [title]=\"tab.Title!! | bbbTranslate\"\r\n [class.is-expanded]=\"selectedTab === tab.Title\"\r\n #tablist\r\n >\r\n <fd-dynamic-page-content [id]=\"tab.id\" [class.limit-content-width]=\"formContentMaxWidth > 0\">\r\n <fd-layout-grid [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <bsu-ly-tab-page [config]=\"tab\"></bsu-ly-tab-page>\r\n </div>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n }\r\n </fdp-icon-tab-bar>\r\n } @if(!hideFooter && hasLayoutButtons){\r\n <fd-dynamic-page-footer>\r\n <ng-container *ngTemplateOutlet=\"layoutActionsTemplateRef\"></ng-container>\r\n </fd-dynamic-page-footer>\r\n }\r\n</fd-dynamic-page>\r\n@if (contentIsPage) {\r\n<ng-container\r\n *ngTemplateOutlet=\"\r\n renderLayoutComponent;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n></ng-container>\r\n}\r\n<ng-template #renderDefaultLayout let-layout94=\"layout94\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n</ng-template>\r\n<ng-template #renderLayoutComponent let-component let-layout94=\"layout94\">\r\n <bnrc-dynamic-form-component\r\n [component]=\"component\"\r\n [layoutActionsTemplateRef]=\"layoutActionsTemplateRef\"\r\n [removeContentPadding]=\"removeContentPadding\"\r\n [breadCrumbs]=\"breadCrumbs\"\r\n [description]=\"description\"\r\n [title]=\"title\"\r\n [subtitle]=\"subtitle\"\r\n [toolbarItems]=\"toolbarItems\"\r\n [layoutActions]=\"layoutActions\"\r\n [footerDesign]=\"footerDesign\"\r\n [facetList]=\"facetList\"\r\n [settings]=\"component.Settings\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowPanelUi]=\"workflowPanelUi\"\r\n [isMobile]=\"isMobile\"\r\n [mo]=\"mo\"\r\n [layout94]=\"layout94\"\r\n [context]=\"context\"\r\n [rtl]=\"rtl\"\r\n [fieldDict]=\"fieldDict\"\r\n [mask]=\"mask\"\r\n [dirValue]=\"dirValue\"\r\n [deviceSize]=\"deviceSize\"\r\n [contentDensity]=\"contentDensity\"\r\n [modernTabs]=\"modernTabs\"\r\n [avatar]=\"avatar\"\r\n (events)=\"onDynamicComponentEvents($event)\"\r\n ></bnrc-dynamic-form-component>\r\n</ng-template>\r\n<ng-template #closeForm>\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"close.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n</ng-template>\r\n<ng-template #fullscreenForm>\r\n @if (canFullscreen) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [attr.aria-label]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n (click)=\"fullscreenRequest.emit()\"\r\n [title]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n [glyph]=\"fullscreen ? 'exitfullscreen' : 'resize'\"\r\n ></button>\r\n }\r\n</ng-template>\r\n<ng-template #layoutActionsTemplateRef>\r\n <bsu-layout-actions\r\n [canSend]=\"canSend\"\r\n [buttons]=\"layoutActions\"\r\n [isMobile]=\"isMobile\"\r\n [landscape]=\"landscape\"\r\n [standalone]=\"standalone\"\r\n [footerDesign]=\"footerDesign\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowButtonsComboMode]=\"workflowButtonsComboMode || worfklowButtonsOnFooter\"\r\n [deviceSize]=\"deviceSize\"\r\n [rtl]=\"rtl\"\r\n (toolClick)=\"toolbarClick.emit($event)\"\r\n (workflowChoiceSelect)=\"onWfChoiceSelect($event)\"\r\n >\r\n </bsu-layout-actions>\r\n</ng-template>\r\n", styles: [":host{display:block;height:auto;width:100%}:host ::ng-deep fd-dynamic-page[contentIsPage=true] .fd-dynamic-page{height:auto!important}:host ::ng-deep .fd-progress-indicator__container,:host ::ng-deep .fd-progress-indicator__progress-bar{height:1.5rem}:host ::ng-deep fd-facet .fd-object-status--large{font-size:1.1rem}.no-toolbar-items ::ng-deep .fd-dynamic-page__toolbar-container{width:auto}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%;overflow:hidden}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded bsu-ly-layout-container-of-root{min-height:100%}fd-dynamic-page ::ng-deep>article>.fd-scrollbar{height:inherit}fd-dynamic-page fd-dynamic-page-content.limit-content-width{display:flex;justify-content:center}fd-facet{display:flex;flex-direction:column}.hide-title ::ng-deep .fd-dynamic-page__title-container{display:none!important}.no-pin ::ng-deep .fd-dynamic-page__collapsible-header-visibility-container,.no-pin ::ng-deep .fd-dynamic-page__collapsible-header{display:none!important}fd-toolbar.firefox ::ng-deep .fd-toolbar{flex-direction:row-reverse}fd-toolbar.firefox ::ng-deep .fd-toolbar>:first-child{margin-right:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormComponent, selector: "bnrc-dynamic-form-component", inputs: ["breadCrumbs", "toolbarVisible", "toolbarItems", "layoutActions", "layoutActionsTemplateRef", "workflowButtons", "layout94", "footerDesign", "settings", "workflowPanelUi", "title", "subtitle", "description", "facetList", "removeHeaderBorder", "removeContentPadding", "isMobile", "avatar", "rtl", "mask", "mo", "contentDensity", "deviceSize", "dirValue", "fieldDict", "modernTabs"] }, { kind: "component", type: i2.BaseDynamicComponent, selector: "bnrc-dynamic-component", inputs: ["component", "value"], outputs: ["events"] }, { kind: "directive", type: i2.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "directive", type: i2.MobileDirective, selector: "[mobile]" }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i4.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i5.BreadcrumbComponent, selector: "fd-breadcrumb", inputs: ["reverse", "tabIndex"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i5.BreadcrumbItemComponent, selector: "fd-breadcrumb-item" }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "ariaRoledescription", "background", "autoResponsive", "size", "offset", "expandContent", "positionRelative"] }, { kind: "component", type: i7.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap", "headingLevel", "titleId"] }, { kind: "component", type: i7.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i7.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i7.DynamicPageSubheaderComponent, selector: "fd-dynamic-page-subheader", inputs: ["collapsible", "pinnable", "collapsed", "expandLabel", "collapseLabel", "id", "headerAriaLabel", "pinAriaLabel", "unpinAriaLabel"], outputs: ["collapsedChange"] }, { kind: "component", type: i7.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i7.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i7.DynamicPageBreadcrumbComponent, selector: "fd-dynamic-page-breadcrumb" }, { kind: "component", type: i8.FacetComponent, selector: "fd-facet", inputs: ["type", "facetTitle", "subtitle", "headingLevel", "id", "alignEnd"] }, { kind: "component", type: i8.FacetGroupComponent, selector: "fd-facet-group", inputs: ["ariaLabel"] }, { kind: "component", type: i8.FacetContentComponent, selector: "fd-facet-content" }, { kind: "component", type: i9.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "component", type: i10.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i10.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i10.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i11.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "component", type: i12.ObjectNumberComponent, selector: "fd-object-number", inputs: ["number", "decimal", "unit", "emphasized", "large", "status", "class", "ariaLabelledBy", "ariaLabel"] }, { kind: "component", type: i13.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "glyphFont", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "component", type: i14.RatingIndicatorComponent, selector: "fd-rating-indicator", inputs: ["class", "name", "ariaLabel", "ariaLabelledBy", "disabled", "displayMode", "nonInteractive", "indicatorCapacity", "allowHalves", "value", "totalRatings", "ratingAverage", "ratings", "displayAllRatings", "ratedIcon", "unratedIcon", "size", "dynamicTextIndicator"], outputs: ["ratingChanged"] }, { kind: "component", type: i15.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "component", type: i16.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i16.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i17.ProgressIndicatorComponent, selector: "fd-progress-indicator", inputs: ["valueText", "unit", "valueMin", "valueMax", "valueNow", "state", "animate"] }, { kind: "component", type: i18.IconTabBarComponent, selector: "fdp-icon-tab-bar", inputs: ["stackContent", "iconTabType", "tabsConfig", "densityMode", "iconTabFont", "enableTabReordering", "showTotalTab", "multiClick", "layoutMode", "iconTabBackground", "iconTabSize", "colorAssociations", "maxContentHeight"], outputs: ["tabsConfigChange", "densityModeChange", "iconTabSelected", "iconTabReordered", "closeTab"] }, { kind: "component", type: i18.IconTabBarTabComponent, selector: "fdp-icon-tab-bar-tab", inputs: ["label", "color", "icon", "iconFont", "counter", "active", "badge", "closable", "id"] }, { kind: "component", type: i19.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "component", type: i20.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i21.LyTabPageComponent, selector: "bsu-ly-tab-page", inputs: ["renderItems", "tablist"] }, { kind: "component", type: i22.LayoutActionsComponent, selector: "bsu-layout-actions", inputs: ["workflowButtons", "workflowButtonsComboMode", "canSend", "simple", "footerDesign"], outputs: ["workflowChoiceSelect"] }, { kind: "component", type: i23.BreadcrumbComponent, selector: "bsu-breadcrumb", inputs: ["breadCrumb", "allBreadCrumb", "isLast", "index"] }, { kind: "component", type: i24.FormToolbarComponent, selector: "bsu-form-toolbar", outputs: ["toolbarClick"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.HeaderFacetValuePipe, name: "facetValue" }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.FilterWorkflowInMobilePipe, name: "filterWorkflowInMobile" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
105
107
|
}
|
|
106
108
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FundamentalDynamicFormComponent, decorators: [{
|
|
107
109
|
type: Component,
|
|
108
|
-
args: [{ selector: 'bsu-fundamental-dynamic-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (mask) {\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\">\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n</div>\r\n}\r\n\r\n<fd-dynamic-page\r\n [size]=\"isMobile ? 'small' : 'large'\"\r\n [ngClass]=\"{ 'floating-footer': footerDesign === 'floating-footer' }\"\r\n [class.header-border]=\"!removeHeaderBorder\"\r\n [attr.isMobile]=\"isMobile\"\r\n [attr.contentIsPage]=\"contentIsPage\"\r\n mobile\r\n formClose\r\n [isMobile]=\"isMobile\"\r\n>\r\n <fd-dynamic-page-header\r\n [class.simple-title]=\"!description\"\r\n [title]=\"(hideTitle === true ? '' : title) | bbbTranslate\"\r\n [class.p-b0]=\"removeContentPadding\"\r\n [class.hide-title]=\"hideTitle === true && hideClose === true\"\r\n [class.no-toolbar-items]=\"!(toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter)?.length\"\r\n #titleRef\r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @if (breadCrumbs && !isMobile) { @for (breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track\r\n breadCrumb.url; let i = $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n } }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <fd-dynamic-page-global-actions>\r\n <!-- global actions -->\r\n\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (toolbarVisible) {\r\n <bsu-form-toolbar\r\n [deviceSize]=\"deviceSize\"\r\n [buttons]=\"toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter\"\r\n [dirValue]=\"dirValue\"\r\n [isFirefox]=\"isFirefox\"\r\n (toolbarClick)=\"toolbarClick.emit($event)\"\r\n #formToolbar\r\n ></bsu-form-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <!-- layout actions -->\r\n <!-- <div [formActions]=\"this.toolbar\"></div> -->\r\n @if (!hideClose) {\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n @if (deviceSize !== 's') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n }\r\n <ng-container *ngTemplateOutlet=\"fullscreenForm\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"closeForm\"></ng-container>\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (description || facetList.length > 0 || workflowInfoText || avatar) {}\r\n <fd-dynamic-page-subheader\r\n [class.header-no-description]=\"!(description || workflowInfoText)\"\r\n [class.no-pin]=\"hidePin || (!facetList?.length && !workflowInfoText)\"\r\n [collapsible]=\"true\"\r\n [pinnable]=\"false\"\r\n [collapsed]=\"!facetList?.length && !workflowInfoText\"\r\n >\r\n @if (workflowInfoText) {\r\n <fd-message-strip [type]=\"'warning'\" [dismissible]=\"false\">\r\n {{ workflowInfoText | bbbTranslate }}\r\n </fd-message-strip>\r\n }\r\n <fd-facet-group ariaLabel=\"Facet Group\">\r\n @if (avatar) {\r\n <fd-facet type=\"image\">\r\n <fd-avatar\r\n title=\"avatar\"\r\n [glyph]=\"avatar\"\r\n [image]=\"!avatar?.FileId ? null : (avatar?.FileId | picFieldSrc: 'ID':null)\"\r\n [size]=\"deviceSize === 'xl' ? 'l' : deviceSize\"\r\n [transparent]=\"true\"\r\n [circle]=\"circleAvatar\"\r\n ></fd-avatar>\r\n <!-- <div\r\n class=\"fd-avatar fd-avatar--circle\"\r\n [class]=\"'fd-avatar--' + (deviceSize === 'xl' ? 'l' : deviceSize)\"\r\n >\r\n <i *ngIf=\"avatar\" class=\"fd-avatar__icon\" [class]=\"avatar | sapFontClass\" role=\"presentation\"> </i>\r\n </div> -->\r\n </fd-facet>\r\n } @for (facet of facetList; track facet) {\r\n <fd-facet\r\n [type]=\"facet.type\"\r\n [facetTitle]=\"facet.mo.Title | bbbTranslate\"\r\n [subtitle]=\"facet.mo.SubTitle | facetValue | bbbTranslate\"\r\n >\r\n @for (item of facet.mo.ItemList?.MoDataList; track item) {\r\n <fd-facet-content>\r\n <label fd-form-label [colon]=\"true\" for=\"form-value-10\">{{ item.Title }}</label>\r\n <fd-text [text]=\"item.Value | facetValue\" id=\"form-value-10\"></fd-text>\r\n </fd-facet-content>\r\n } @if ( !facet.mo.IsNumber && facet.type === 'key-value' && !facet.mo.Component?.Selector) {\r\n <span\r\n fd-object-status\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [label]=\"facet.mo.Component?.Selector ? '' : (facet.mo.Text | facetValue)\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [title]=\"facet.mo.Text | facetValue\"\r\n [aria-label]=\"facet.mo.Text | facetValue\"\r\n [glyph]=\"facet.mo.Icon\"\r\n >\r\n </span>\r\n } @else {\r\n <bnrc-dynamic-component\r\n [class]=\"'fd-object-status fd-object-status--' + facet.mo.Status | facetValue\"\r\n [class.fd-object-status--large]=\"facet.mo.IsLarge\"\r\n [component]=\"facet.mo.Component\"\r\n [value]=\"facet.mo.Text\"\r\n ></bnrc-dynamic-component>\r\n } @if (facet.mo.IsNumber && facet.type === 'key-value') {\r\n <fd-object-number\r\n [number]=\"facet.mo.Text | facetValue\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [unit]=\"facet.mo.Unit | facetValue\"\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [decimal]=\"facet.mo.DecimalValue | facetValue\"\r\n ></fd-object-number>\r\n } @if (facet.type === 'plain-text') {\r\n <div [style.width.px]=\"facet.mo.Width\" style=\"white-space: normal\">\r\n <fd-text [text]=\"facet.mo.Text | facetValue\" hyphenation=\"auto\"></fd-text>\r\n </div>\r\n } @if (facet.type === 'rating-indicator') {\r\n <fd-facet-content>\r\n <fd-rating-indicator\r\n style=\"pointer-events: none\"\r\n size=\"md\"\r\n [dynamicTextIndicator]=\"facet.mo.Footer\"\r\n [displayMode]=\"true\"\r\n [value]=\"facet.mo | facetValue: facet.type\"\r\n ></fd-rating-indicator>\r\n </fd-facet-content>\r\n } @if (facet.type === 'progress') {\r\n <div [style.width]=\"'10rem'\">\r\n <!-- <span fd-form-label>{{ facet.mo.Subtitle | facetValue }}</span> -->\r\n <fd-progress-indicator\r\n style=\"width: 10r em\"\r\n [state]=\"facet.mo.State\"\r\n [valueText]=\"(facet.mo | facetValue: facet.type) + ' \u0627\u0632 10 \u0645\u0631\u062D\u0644\u0647'\"\r\n [valueNow]=\"facet.mo | facetValue: facet.type\"\r\n [valueMax]=\"10\"\r\n [unit]=\"'\u0645\u0631\u062D\u0644\u0647'\"\r\n ></fd-progress-indicator>\r\n <!-- <ui5-progress-indicator\r\n style=\"width: 10rem\"\r\n [valueState]=\"facet.mo.State\"\r\n [value]=\"getNumber(facet.mo.Value)\"\r\n ></ui5-progress-indicator> -->\r\n </div>\r\n } @if (facet.type === 'microcharts') {\r\n <div>\r\n <label wrap>in progress ...</label>\r\n </div>\r\n }\r\n </fd-facet>\r\n }\r\n </fd-facet-group>\r\n @if (description) {\r\n <span>{{ description }}</span>\r\n }\r\n </fd-dynamic-page-subheader>\r\n @if(!modernTabs.length && !contentIsPage){\r\n <fd-dynamic-page-content [class.limit-content-width]=\"formContentMaxWidth > 0\" cdkScrollable>\r\n <fd-layout-grid style=\"min-height: 100%\" [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div style=\"min-height: 100%\" [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n parameters?.LayoutComponent ? renderLayoutComponent : renderDefaultLayout;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div\r\n style=\"padding: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n } @else if(modernTabs.length && !contentIsPage && !parameters?.LayoutComponent){\r\n <fdp-icon-tab-bar [stackContent]=\"false\" [collapseOverflow]=\"true\" [expandOverflowText]=\"'More' | bbbTranslate\">\r\n @for (tab of modernTabs; track tab.Title; let i = $index) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"tab.id\"\r\n [label]=\"tab.Title!! | bbbTranslate\"\r\n [title]=\"tab.Title!! | bbbTranslate\"\r\n [class.is-expanded]=\"selectedTab === tab.Title\"\r\n #tablist\r\n >\r\n <fd-dynamic-page-content [id]=\"tab.id\" [class.limit-content-width]=\"formContentMaxWidth > 0\">\r\n <fd-layout-grid [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <bsu-ly-tab-page [config]=\"tab\"></bsu-ly-tab-page>\r\n </div>\r\n <div\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n }\r\n </fdp-icon-tab-bar>\r\n } @if(!hideFooter && hasLayoutButtons){\r\n <fd-dynamic-page-footer>\r\n <ng-container *ngTemplateOutlet=\"layoutActionsTemplateRef\"></ng-container>\r\n </fd-dynamic-page-footer>\r\n }\r\n</fd-dynamic-page>\r\n@if (contentIsPage) {\r\n<ng-container\r\n *ngTemplateOutlet=\"\r\n renderLayoutComponent;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n></ng-container>\r\n}\r\n<ng-template #renderDefaultLayout let-layout94=\"layout94\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n</ng-template>\r\n<ng-template #renderLayoutComponent let-component let-layout94=\"layout94\">\r\n <bnrc-dynamic-form-component\r\n [component]=\"component\"\r\n [layoutActionsTemplateRef]=\"layoutActionsTemplateRef\"\r\n [removeContentPadding]=\"removeContentPadding\"\r\n [breadCrumbs]=\"breadCrumbs\"\r\n [description]=\"description\"\r\n [title]=\"title\"\r\n [subtitle]=\"subtitle\"\r\n [toolbarItems]=\"toolbarItems\"\r\n [layoutActions]=\"layoutActions\"\r\n [footerDesign]=\"footerDesign\"\r\n [facetList]=\"facetList\"\r\n [settings]=\"component.Settings\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowPanelUi]=\"workflowPanelUi\"\r\n [isMobile]=\"isMobile\"\r\n [mo]=\"mo\"\r\n [layout94]=\"layout94\"\r\n [context]=\"context\"\r\n [rtl]=\"rtl\"\r\n [fieldDict]=\"fieldDict\"\r\n [mask]=\"mask\"\r\n [dirValue]=\"dirValue\"\r\n [deviceSize]=\"deviceSize\"\r\n [contentDensity]=\"contentDensity\"\r\n [modernTabs]=\"modernTabs\"\r\n [avatar]=\"avatar\"\r\n (events)=\"onDynamicComponentEvents($event)\"\r\n ></bnrc-dynamic-form-component>\r\n</ng-template>\r\n<ng-template #closeForm>\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"close.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n</ng-template>\r\n<ng-template #fullscreenForm>\r\n @if (canFullscreen) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [attr.aria-label]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n (click)=\"fullscreenRequest.emit()\"\r\n [title]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n [glyph]=\"fullscreen ? 'exitfullscreen' : 'resize'\"\r\n ></button>\r\n }\r\n</ng-template>\r\n<ng-template #layoutActionsTemplateRef>\r\n <bsu-layout-actions\r\n [canSend]=\"canSend\"\r\n [buttons]=\"layoutActions\"\r\n [isMobile]=\"isMobile\"\r\n [landscape]=\"landscape\"\r\n [standalone]=\"standalone\"\r\n [footerDesign]=\"footerDesign\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowButtonsComboMode]=\"workflowButtonsComboMode || worfklowButtonsOnFooter\"\r\n [deviceSize]=\"deviceSize\"\r\n [rtl]=\"rtl\"\r\n (toolClick)=\"toolbarClick.emit($event)\"\r\n (workflowChoiceSelect)=\"onWfChoiceSelect($event)\"\r\n >\r\n </bsu-layout-actions>\r\n</ng-template>\r\n", styles: [":host{display:block;height:auto;width:100%}:host ::ng-deep fd-dynamic-page[contentIsPage=true] .fd-dynamic-page{height:auto!important}:host ::ng-deep .fd-progress-indicator__container,:host ::ng-deep .fd-progress-indicator__progress-bar{height:1.5rem}:host ::ng-deep fd-facet .fd-object-status--large{font-size:1.1rem}.no-toolbar-items ::ng-deep .fd-dynamic-page__toolbar-container{width:auto}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%;overflow:hidden}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded bsu-ly-layout-container-of-root{min-height:100%}fd-dynamic-page ::ng-deep>article>.fd-scrollbar{height:inherit}fd-dynamic-page fd-dynamic-page-content.limit-content-width{display:flex;justify-content:center}fd-facet{display:flex;flex-direction:column}.hide-title ::ng-deep .fd-dynamic-page__title-container{display:none!important}.no-pin ::ng-deep .fd-dynamic-page__collapsible-header-visibility-container,.no-pin ::ng-deep .fd-dynamic-page__collapsible-header{display:none!important}fd-toolbar.firefox ::ng-deep .fd-toolbar{flex-direction:row-reverse}fd-toolbar.firefox ::ng-deep .fd-toolbar>:first-child{margin-right:5px}\n"] }]
|
|
110
|
+
args: [{ selector: 'bsu-fundamental-dynamic-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (mask) {\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%\">\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n</div>\r\n}\r\n\r\n<fd-dynamic-page\r\n [size]=\"isMobile ? 'small' : 'large'\"\r\n [ngClass]=\"{ 'floating-footer': footerDesign === 'floating-footer' }\"\r\n [class.header-border]=\"!removeHeaderBorder\"\r\n [attr.isMobile]=\"isMobile\"\r\n [attr.contentIsPage]=\"contentIsPage\"\r\n mobile\r\n formClose\r\n [isMobile]=\"isMobile\"\r\n>\r\n <fd-dynamic-page-header\r\n [class.simple-title]=\"!description\"\r\n [title]=\"(hideTitle === true ? '' : title) | bbbTranslate\"\r\n [class.p-b0]=\"removeContentPadding\"\r\n [class.hide-title]=\"hideTitle === true && hideClose === true\"\r\n [class.no-toolbar-items]=\"!(toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter)?.length\"\r\n #titleRef\r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @if (breadCrumbs && !isMobile) { @for (breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track\r\n breadCrumb.url; let i = $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n } }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <fd-dynamic-page-global-actions>\r\n <!-- global actions -->\r\n\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (toolbarVisible) {\r\n <bsu-form-toolbar\r\n [deviceSize]=\"deviceSize\"\r\n [buttons]=\"toolbarItems | filterWorkflowInMobile: worfklowButtonsOnFooter\"\r\n [dirValue]=\"dirValue\"\r\n [isFirefox]=\"isFirefox\"\r\n (toolbarClick)=\"toolbarClick.emit($event)\"\r\n #formToolbar\r\n ></bsu-form-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <!-- layout actions -->\r\n <!-- <div [formActions]=\"this.toolbar\"></div> -->\r\n @if (!hideClose) {\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n @if (deviceSize !== 's') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n }\r\n <ng-container *ngTemplateOutlet=\"fullscreenForm\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"closeForm\"></ng-container>\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (description || facetList.length > 0 || workflowInfoText || avatar) {}\r\n <fd-dynamic-page-subheader\r\n [class.header-no-description]=\"!(description || workflowInfoText)\"\r\n [class.no-pin]=\"hidePin || (!facetList?.length && !workflowInfoText)\"\r\n [collapsible]=\"true\"\r\n [pinnable]=\"false\"\r\n [collapsed]=\"!facetList?.length && !workflowInfoText\"\r\n >\r\n @if (workflowInfoText) {\r\n <fd-message-strip [type]=\"'warning'\" [dismissible]=\"false\">\r\n {{ workflowInfoText | bbbTranslate }}\r\n </fd-message-strip>\r\n }\r\n <fd-facet-group ariaLabel=\"Facet Group\">\r\n @if (avatar) {\r\n <fd-facet type=\"image\">\r\n <fd-avatar\r\n title=\"avatar\"\r\n [glyph]=\"avatar\"\r\n [image]=\"!avatar?.FileId ? null : (avatar?.FileId | picFieldSrc: 'ID':null)\"\r\n [size]=\"deviceSize === 'xl' ? 'l' : deviceSize\"\r\n [transparent]=\"true\"\r\n [circle]=\"circleAvatar\"\r\n ></fd-avatar>\r\n <!-- <div\r\n class=\"fd-avatar fd-avatar--circle\"\r\n [class]=\"'fd-avatar--' + (deviceSize === 'xl' ? 'l' : deviceSize)\"\r\n >\r\n <i *ngIf=\"avatar\" class=\"fd-avatar__icon\" [class]=\"avatar | sapFontClass\" role=\"presentation\"> </i>\r\n </div> -->\r\n </fd-facet>\r\n } @for (facet of facetList; track facet) {\r\n <fd-facet\r\n [type]=\"facet.type\"\r\n [facetTitle]=\"facet.mo.Title | bbbTranslate\"\r\n [subtitle]=\"facet.mo.SubTitle | facetValue | bbbTranslate\"\r\n >\r\n @for (item of facet.mo.ItemList?.MoDataList; track item) {\r\n <fd-facet-content>\r\n <label fd-form-label [colon]=\"true\" for=\"form-value-10\">{{ item.Title }}</label>\r\n <fd-text [text]=\"item.Value | facetValue\" id=\"form-value-10\"></fd-text>\r\n </fd-facet-content>\r\n } @if ( !facet.mo.IsNumber && facet.type === 'key-value' && !facet.mo.Component?.Selector) {\r\n <span\r\n fd-object-status\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [label]=\"facet.mo.Component?.Selector ? '' : (facet.mo.Text | facetValue)\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [title]=\"facet.mo.Text | facetValue\"\r\n [aria-label]=\"facet.mo.Text | facetValue\"\r\n [glyph]=\"facet.mo.Icon\"\r\n >\r\n </span>\r\n } @else {\r\n <bnrc-dynamic-component\r\n [class]=\"'fd-object-status fd-object-status--' + facet.mo.Status | facetValue\"\r\n [class.fd-object-status--large]=\"facet.mo.IsLarge\"\r\n [component]=\"facet.mo.Component\"\r\n [value]=\"facet.mo.Text\"\r\n ></bnrc-dynamic-component>\r\n } @if (facet.mo.IsNumber && facet.type === 'key-value') {\r\n <fd-object-number\r\n [number]=\"facet.mo.Text | facetValue\"\r\n [large]=\"facet.mo.IsLarge\"\r\n [unit]=\"facet.mo.Unit | facetValue\"\r\n [status]=\"facet.mo.Status | facetValue\"\r\n [decimal]=\"facet.mo.DecimalValue | facetValue\"\r\n ></fd-object-number>\r\n } @if (facet.type === 'plain-text') {\r\n <div [style.width.px]=\"facet.mo.Width\" style=\"white-space: normal\">\r\n <fd-text [text]=\"facet.mo.Text | facetValue\" hyphenation=\"auto\"></fd-text>\r\n </div>\r\n } @if (facet.type === 'rating-indicator') {\r\n <fd-facet-content>\r\n <fd-rating-indicator\r\n style=\"pointer-events: none\"\r\n size=\"md\"\r\n [dynamicTextIndicator]=\"facet.mo.Footer\"\r\n [displayMode]=\"true\"\r\n [value]=\"facet.mo | facetValue: facet.type\"\r\n ></fd-rating-indicator>\r\n </fd-facet-content>\r\n } @if (facet.type === 'progress') {\r\n <div [style.width]=\"'10rem'\">\r\n <!-- <span fd-form-label>{{ facet.mo.Subtitle | facetValue }}</span> -->\r\n <fd-progress-indicator\r\n style=\"width: 10r em\"\r\n [state]=\"facet.mo.State\"\r\n [valueText]=\"(facet.mo | facetValue: facet.type) + ' \u0627\u0632 10 \u0645\u0631\u062D\u0644\u0647'\"\r\n [valueNow]=\"facet.mo | facetValue: facet.type\"\r\n [valueMax]=\"10\"\r\n [unit]=\"'\u0645\u0631\u062D\u0644\u0647'\"\r\n ></fd-progress-indicator>\r\n <!-- <ui5-progress-indicator\r\n style=\"width: 10rem\"\r\n [valueState]=\"facet.mo.State\"\r\n [value]=\"getNumber(facet.mo.Value)\"\r\n ></ui5-progress-indicator> -->\r\n </div>\r\n } @if (facet.type === 'microcharts') {\r\n <div>\r\n <label wrap>in progress ...</label>\r\n </div>\r\n }\r\n </fd-facet>\r\n }\r\n </fd-facet-group>\r\n @if (description) {\r\n <span>{{ description }}</span>\r\n }\r\n </fd-dynamic-page-subheader>\r\n @if(!modernTabs.length && !contentIsPage){\r\n <fd-dynamic-page-content [class.limit-content-width]=\"formContentMaxWidth > 0\" cdkScrollable>\r\n <fd-layout-grid style=\"min-height: 100%\" [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div style=\"min-height: 100%\" [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n parameters?.LayoutComponent ? renderLayoutComponent : renderDefaultLayout;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [class.hide]=\"layout2.colXl === 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n } @else if(modernTabs.length && !contentIsPage && !parameters?.LayoutComponent){\r\n <fdp-icon-tab-bar [stackContent]=\"false\" [collapseOverflow]=\"true\" [expandOverflowText]=\"'More' | bbbTranslate\">\r\n @for (tab of modernTabs; track tab.Title; let i = $index) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"tab.id\"\r\n [label]=\"tab.Title!! | bbbTranslate\"\r\n [title]=\"tab.Title!! | bbbTranslate\"\r\n [class.is-expanded]=\"selectedTab === tab.Title\"\r\n #tablist\r\n >\r\n <fd-dynamic-page-content [id]=\"tab.id\" [class.limit-content-width]=\"formContentMaxWidth > 0\">\r\n <fd-layout-grid [style.max-width.px]=\"formContentMaxWidth\">\r\n <div fdLayoutGridRow>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout1.colMd\"\r\n [colLg]=\"layout1.colLg\"\r\n [colXl]=\"layout1.colXl\"\r\n ></div>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"colMd\" [colLg]=\"colLg\" [colXl]=\"colXl\">\r\n <bsu-ly-tab-page [config]=\"tab\"></bsu-ly-tab-page>\r\n </div>\r\n <div\r\n style=\"padding: 0; padding-inline: 0; padding-block: 0\"\r\n [fdLayoutGridCol]=\"0\"\r\n [colMd]=\"layout2.colMd\"\r\n [colLg]=\"layout2.colLg\"\r\n [colXl]=\"layout2.colXl\"\r\n ></div>\r\n </div>\r\n </fd-layout-grid>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n }\r\n </fdp-icon-tab-bar>\r\n } @if(!hideFooter && hasLayoutButtons){\r\n <fd-dynamic-page-footer>\r\n <ng-container *ngTemplateOutlet=\"layoutActionsTemplateRef\"></ng-container>\r\n </fd-dynamic-page-footer>\r\n }\r\n</fd-dynamic-page>\r\n@if (contentIsPage) {\r\n<ng-container\r\n *ngTemplateOutlet=\"\r\n renderLayoutComponent;\r\n context: {\r\n $implicit: parameters?.LayoutComponent,\r\n layout94: layout94\r\n }\r\n \"\r\n></ng-container>\r\n}\r\n<ng-template #renderDefaultLayout let-layout94=\"layout94\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n</ng-template>\r\n<ng-template #renderLayoutComponent let-component let-layout94=\"layout94\">\r\n <bnrc-dynamic-form-component\r\n [component]=\"component\"\r\n [layoutActionsTemplateRef]=\"layoutActionsTemplateRef\"\r\n [removeContentPadding]=\"removeContentPadding\"\r\n [breadCrumbs]=\"breadCrumbs\"\r\n [description]=\"description\"\r\n [title]=\"title\"\r\n [subtitle]=\"subtitle\"\r\n [toolbarItems]=\"toolbarItems\"\r\n [layoutActions]=\"layoutActions\"\r\n [footerDesign]=\"footerDesign\"\r\n [facetList]=\"facetList\"\r\n [settings]=\"component.Settings\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowPanelUi]=\"workflowPanelUi\"\r\n [isMobile]=\"isMobile\"\r\n [mo]=\"mo\"\r\n [layout94]=\"layout94\"\r\n [context]=\"context\"\r\n [rtl]=\"rtl\"\r\n [fieldDict]=\"fieldDict\"\r\n [mask]=\"mask\"\r\n [dirValue]=\"dirValue\"\r\n [deviceSize]=\"deviceSize\"\r\n [contentDensity]=\"contentDensity\"\r\n [modernTabs]=\"modernTabs\"\r\n [avatar]=\"avatar\"\r\n (events)=\"onDynamicComponentEvents($event)\"\r\n ></bnrc-dynamic-form-component>\r\n</ng-template>\r\n<ng-template #closeForm>\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"close.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n</ng-template>\r\n<ng-template #fullscreenForm>\r\n @if (canFullscreen) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [attr.aria-label]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n (click)=\"fullscreenRequest.emit()\"\r\n [title]=\"fullscreen ? 'exit fullscreen' : 'fullscreen'\"\r\n [glyph]=\"fullscreen ? 'exitfullscreen' : 'resize'\"\r\n ></button>\r\n }\r\n</ng-template>\r\n<ng-template #layoutActionsTemplateRef>\r\n <bsu-layout-actions\r\n [canSend]=\"canSend\"\r\n [buttons]=\"layoutActions\"\r\n [isMobile]=\"isMobile\"\r\n [landscape]=\"landscape\"\r\n [standalone]=\"standalone\"\r\n [footerDesign]=\"footerDesign\"\r\n [workflowButtons]=\"workflowButtons\"\r\n [workflowButtonsComboMode]=\"workflowButtonsComboMode || worfklowButtonsOnFooter\"\r\n [deviceSize]=\"deviceSize\"\r\n [rtl]=\"rtl\"\r\n (toolClick)=\"toolbarClick.emit($event)\"\r\n (workflowChoiceSelect)=\"onWfChoiceSelect($event)\"\r\n >\r\n </bsu-layout-actions>\r\n</ng-template>\r\n", styles: [":host{display:block;height:auto;width:100%}:host ::ng-deep fd-dynamic-page[contentIsPage=true] .fd-dynamic-page{height:auto!important}:host ::ng-deep .fd-progress-indicator__container,:host ::ng-deep .fd-progress-indicator__progress-bar{height:1.5rem}:host ::ng-deep fd-facet .fd-object-status--large{font-size:1.1rem}.no-toolbar-items ::ng-deep .fd-dynamic-page__toolbar-container{width:auto}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%;overflow:hidden}fd-dynamic-page ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded bsu-ly-layout-container-of-root{min-height:100%}fd-dynamic-page ::ng-deep>article>.fd-scrollbar{height:inherit}fd-dynamic-page fd-dynamic-page-content.limit-content-width{display:flex;justify-content:center}fd-facet{display:flex;flex-direction:column}.hide-title ::ng-deep .fd-dynamic-page__title-container{display:none!important}.no-pin ::ng-deep .fd-dynamic-page__collapsible-header-visibility-container,.no-pin ::ng-deep .fd-dynamic-page__collapsible-header{display:none!important}fd-toolbar.firefox ::ng-deep .fd-toolbar{flex-direction:row-reverse}fd-toolbar.firefox ::ng-deep .fd-toolbar>:first-child{margin-right:5px}\n"] }]
|
|
109
111
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { _dynamicPageComponent: [{
|
|
110
112
|
type: ViewChild,
|
|
111
113
|
args: [DynamicPageComponent, { static: true }]
|
|
@@ -214,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
214
216
|
}], workflowButtons: [{
|
|
215
217
|
type: Input
|
|
216
218
|
}] } });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2Z1bmRhbWVudGFsLWR5bmFtaWMtZm9ybS9mdW5kYW1lbnRhbC1keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtL2Z1bmRhbWVudGFsLWR5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUMsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RixPQUFPLEVBQ0gsYUFBYSxFQUliLFNBQVMsRUFFWixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2hFLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxhQUFhO0lBK0Q5RCxZQUFtQixFQUFjO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBRE8sT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTVEdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEQsb0JBQW9CO1FBQ1YsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXNCeEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQTBCMUIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQU1oQyxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFHeEIsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUMxRSxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsdUJBQXVCLENBQUM7UUFDeEUsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDN0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxLQUFLLElBQUksQ0FBQztRQUM3RCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUcsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUN0QyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixxQkFBcUI7UUFDckIsdURBQXVEO1FBQ3ZELE1BQU07SUFDVixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN6QyxJQUNJLG9CQUFvQjtZQUNwQixDQUFDLG9CQUFvQixDQUFDLFdBQVc7WUFDakMsb0JBQW9CLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFDakQsQ0FBQztZQUNDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQVE7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsWUFBWSxDQUFDLEdBQW1CO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ0QsU0FBUyxDQUFDLEdBQUc7UUFDVCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssY0FBYztnQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLHNCQUFzQjtnQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0lBQ0QsYUFBYTtRQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDOytHQWpJUSwrQkFBK0I7bUdBQS9CLCtCQUErQixvMkNBQzdCLG9CQUFvQixtT0FnREEsZ0JBQWdCLDBSQ25GbkQsK2hmQWtWQTs7NEZEaFRhLCtCQUErQjtrQkFQM0MsU0FBUzsrQkFDSSw4QkFBOEIsbUJBR3ZCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzsrRUFHa0MscUJBQXFCO3NCQUF2RSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDdkIsaUJBQWlCO3NCQUExQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2QsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRUcsS0FBSztzQkFBZCxNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQzZDLFFBQVE7c0JBQTFELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUN0QixlQUFlO3NCQUF6QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ2lCLGlCQUFpQjtzQkFBMUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUMvQixlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJEZXNpZ25UeXBlLCBDb250ZW50RGVuc2l0eSwgRHluYW1pY1BhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhc2VDb21wb25lbnQsXHJcbiAgICBCcmVhZENydW1iSW5mbyxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBMYXlvdXRTZXR0aW5nLFxyXG4gICAgaXNGaXJlZm94LFxyXG4gICAgRm9ybVZpc2liaWxpdHlTdGF0dXNcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS10b29sYmFyL2Zvcm0tdG9vbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtTGF5b3V0Q29sLCBHZXRGb3JtTGF5b3V0R3JpZCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEljb25UYWJCYXJJdGVtIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mdW5kYW1lbnRhbC1keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdW5kYW1lbnRhbER5bmFtaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBWaWV3Q2hpbGQoRHluYW1pY1BhZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIF9keW5hbWljUGFnZUNvbXBvbmVudDogRHluYW1pY1BhZ2VDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdmb3JtVG9vbGJhcicpIF90b29sYmFyQ29tcG9uZW50OiBGb3JtVG9vbGJhckNvbXBvbmVudDtcclxuICAgIEBPdXRwdXQoKSB0b29sYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB3b3JrZmxvd0Nob2ljZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGZ1bGxzY3JlZW5SZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQElucHV0KCkgYnJlYWRDcnVtYnM6IEJyZWFkQ3J1bWJJbmZvW10gfCBudWxsO1xyXG4gICAgQElucHV0KCkgdG9vbGJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0b29sYmFySXRlbXM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgbGF5b3V0QWN0aW9uczogYW55W107XHJcbiAgICBASW5wdXQoKSBsYXlvdXQ5NDtcclxuICAgIEBJbnB1dCgpIHBhcmFtZXRlcnM6IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBASW5wdXQoKSB3b3JrZmxvd1BhbmVsVWk6IGFueTtcclxuICAgIEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcclxuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGZhY2V0TGlzdDogYW55W107XHJcbiAgICBASW5wdXQoKSBmaWVsZERpY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XHJcbiAgICBASW5wdXQoKSByZW1vdmVIZWFkZXJCb3JkZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSByZW1vdmVDb250ZW50UGFkZGluZzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGlzTW9iaWxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW86IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBASW5wdXQoKSBhdmF0YXI6IGFueTtcclxuICAgIEBJbnB1dCgpIGNpcmNsZUF2YXRhcjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBoaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgaGlkZUNsb3NlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVBpbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGZ1bGxzY3JlZW46IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBtYXNrOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuU2VuZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbnRlbnRJc1BhZ2U6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHk7XHJcbiAgICBASW5wdXQoKSBkZXZpY2VTaXplOiAncycgfCAnbScgfCAnbCcgfCAneGwnO1xyXG4gICAgQElucHV0KCkgZGlyVmFsdWU6ICdydGwnIHwgJ2x0cic7XHJcbiAgICBASW5wdXQoKSBsYW5kc2NhcGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW9kZXJuVGFiczogTGF5b3V0U2V0dGluZ1tdO1xyXG4gICAgQElucHV0KCkgZm9ybVZpc2liaWxpdHlTdGF0dXM6IEZvcm1WaXNpYmlsaXR5U3RhdHVzO1xyXG4gICAgQElucHV0KCkgbGF5b3V0R3JpZENvbDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgY29sTGc6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIGNvbFhsOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBjb2xNZDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZm9vdGVyRGVzaWduOiBCYXJEZXNpZ25UeXBlO1xyXG4gICAgQElucHV0KCkgZm9ybUNvbnRlbnRNYXhXaWR0aDogbnVtYmVyO1xyXG4gICAgQFZpZXdDaGlsZCgndGl0bGVSZWYnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdGl0bGVSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdoZWFkZXJBdmF0YXInKSBoZWFkZXJBdmF0YXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdjbG9zZUZvcm0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBjbG9zZUZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIHdvcmtmbG93QnV0dG9uczogYW55W107XHJcbiAgICBzZWxlY3RlZFRhYjogYW55O1xyXG4gICAgY2FuRnVsbHNjcmVlbjogYm9vbGVhbjtcclxuICAgIHRvb2xiYXJTaG91bGRPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgd29yZmtsb3dCdXR0b25zT25Gb290ZXIgPSBmYWxzZTtcclxuICAgIHdvcmtmbG93SW5mb1RleHQ6IHN0cmluZztcclxuICAgIHdvcmtmbG93QnV0dG9uc0NvbWJvTW9kZTogYm9vbGVhbjtcclxuICAgIGlzRmlyZWZveDogYm9vbGVhbjtcclxuICAgIGxheW91dDE6IEZvcm1MYXlvdXRDb2w7XHJcbiAgICBsYXlvdXQyOiBGb3JtTGF5b3V0Q29sO1xyXG4gICAgaGFzTGF5b3V0QnV0dG9ucyA9IHRydWU7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNGaXJlZm94ID0gaXNGaXJlZm94KCk7XHJcbiAgICAgICAgdGhpcy5mYWNldExpc3QgfHw9IFtdO1xyXG4gICAgICAgIHRoaXMud29ya2Zsb3dJbmZvVGV4dCA9IHRoaXMud29ya2Zsb3dQYW5lbFVpPy5TZXR0aW5nPy5Xb3JrZmxvdz8uSW5mb1RleHQ7XHJcbiAgICAgICAgLy8gY29uc3Qgd29ya2Zsb3dCdXR0b25zID0gdGhpcy53b3JrZmxvd1BhbmVsVWk/LmJ1dHRvbkxpc3QgPz8gW107XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0J1dHRvbnNDb21ib01vZGUgPSB0aGlzLmlzTW9iaWxlO1xyXG4gICAgICAgIHRoaXMud29yZmtsb3dCdXR0b25zT25Gb290ZXIgPSB0aGlzLnBhcmFtZXRlcnM/LldvcmtmbG93QnV0dG9uc09uRm9vdGVyO1xyXG4gICAgICAgIC8vIHRoaXMud29ya2Zsb3dCdXR0b25zID0gd29ya2Zsb3dCdXR0b25zO1xyXG4gICAgICAgIHRoaXMuaGFzTGF5b3V0QnV0dG9ucyA9XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0QWN0aW9ucy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgICh0aGlzLndvcmtmbG93QnV0dG9ucy5sZW5ndGggPiAwICYmICh0aGlzLndvcmtmbG93QnV0dG9uc0NvbWJvTW9kZSB8fCB0aGlzLndvcmZrbG93QnV0dG9uc09uRm9vdGVyKSk7XHJcbiAgICAgICAgdGhpcy5jYW5GdWxsc2NyZWVuID0gdGhpcy5wYXJhbWV0ZXJzPy5DYW5GdWxsc2NyZWVuID09PSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJCdXR0b25zQ291bnQgPSB0aGlzLnRvb2xiYXJJdGVtcy5maWx0ZXIoKGMpID0+IHR5cGVvZiBjICE9PSAnc3RyaW5nJyAmJiBjLnRleHQgIT09ICctJykubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLmRldmljZVNpemUgPT09ICdzJyAmJiB0b29sYmFyQnV0dG9uc0NvdW50ID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXJTaG91bGRPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRvb2xiYXJCdXR0b25zQ291bnQgPiA1KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJTaG91bGRPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faGFubGRlTGF5b3V0KCk7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX3RhYkxpc3RDb21wb25lbnQuX2Rpc2FibGVTY3JvbGxTcHkgPSB0cnVlO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGZvcm1WaXNpYmlsaXR5U3RhdHVzIH0gPSBjaGFuZ2VzO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZm9ybVZpc2liaWxpdHlTdGF0dXMgJiZcclxuICAgICAgICAgICAgIWZvcm1WaXNpYmlsaXR5U3RhdHVzLmZpcnN0Q2hhbmdlICYmXHJcbiAgICAgICAgICAgIGZvcm1WaXNpYmlsaXR5U3RhdHVzLmN1cnJlbnRWYWx1ZSA9PT0gJ1Zpc2libGUnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNQYWdlQ29tcG9uZW50Py5yZWZyZXNoU2l6ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQ29tcG9uZW50Py51cGRhdGVDb2xsYXBzaWJsZUl0ZW1zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uV2ZDaG9pY2VTZWxlY3Qod2ZDaG9pY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLndvcmtmbG93Q2hvaWNlQ2xpY2suZW1pdCh3ZkNob2ljZSk7XHJcbiAgICB9XHJcbiAgICBvblRhYkNoYW5nZWQodGFiOiBJY29uVGFiQmFySXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWIubGFiZWw7XHJcbiAgICB9XHJcbiAgICBnZXROdW1iZXIodmFsKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCk7XHJcbiAgICB9XHJcbiAgICBvbkR5bmFtaWNDb21wb25lbnRFdmVudHMoZSkge1xyXG4gICAgICAgIHN3aXRjaCAoZS50aXRsZSkge1xyXG4gICAgICAgICAgICBjYXNlICd0b29sYmFyQ2xpY2snOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyQ2xpY2suZW1pdChlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3dvcmtmbG93Q2hvaWNlU2VsZWN0JzpcclxuICAgICAgICAgICAgICAgIHRoaXMub25XZkNob2ljZVNlbGVjdChlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2hhbmxkZUxheW91dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxheW91dDEgPSBHZXRGb3JtTGF5b3V0R3JpZCh0cnVlLCB0aGlzLmNvbFhsLCB0aGlzLmNvbExnLCB0aGlzLmNvbE1kKTtcclxuICAgICAgICB0aGlzLmxheW91dDIgPSBHZXRGb3JtTGF5b3V0R3JpZChmYWxzZSwgdGhpcy5jb2xYbCwgdGhpcy5jb2xMZywgdGhpcy5jb2xNZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiQGlmIChtYXNrKSB7XHJcbjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgPGJzdS1tYXNrIHNpemU9XCJtXCI+PC9ic3UtbWFzaz5cclxuPC9kaXY+XHJcbn1cclxuXHJcbjxmZC1keW5hbWljLXBhZ2VcclxuICAgIFtzaXplXT1cImlzTW9iaWxlID8gJ3NtYWxsJyA6ICdsYXJnZSdcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnZmxvYXRpbmctZm9vdGVyJzogZm9vdGVyRGVzaWduID09PSAnZmxvYXRpbmctZm9vdGVyJyB9XCJcclxuICAgIFtjbGFzcy5oZWFkZXItYm9yZGVyXT1cIiFyZW1vdmVIZWFkZXJCb3JkZXJcIlxyXG4gICAgW2F0dHIuaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxyXG4gICAgW2F0dHIuY29udGVudElzUGFnZV09XCJjb250ZW50SXNQYWdlXCJcclxuICAgIG1vYmlsZVxyXG4gICAgZm9ybUNsb3NlXHJcbiAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxyXG4+XHJcbiAgICA8ZmQtZHluYW1pYy1wYWdlLWhlYWRlclxyXG4gICAgICAgIFtjbGFzcy5zaW1wbGUtdGl0bGVdPVwiIWRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbdGl0bGVdPVwiKGhpZGVUaXRsZSA9PT0gdHJ1ZSA/ICcnIDogdGl0bGUpIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICBbY2xhc3MucC1iMF09XCJyZW1vdmVDb250ZW50UGFkZGluZ1wiXHJcbiAgICAgICAgW2NsYXNzLmhpZGUtdGl0bGVdPVwiaGlkZVRpdGxlID09PSB0cnVlICYmIGhpZGVDbG9zZSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgW2NsYXNzLm5vLXRvb2xiYXItaXRlbXNdPVwiISh0b29sYmFySXRlbXMgfCBmaWx0ZXJXb3JrZmxvd0luTW9iaWxlOiB3b3Jma2xvd0J1dHRvbnNPbkZvb3Rlcik/Lmxlbmd0aFwiXHJcbiAgICAgICAgI3RpdGxlUmVmXHJcbiAgICA+XHJcbiAgICAgICAgPGZkLWR5bmFtaWMtcGFnZS1icmVhZGNydW1iIFtjbGFzcy5oaWRlXT1cImlzTW9iaWxlXCI+XHJcbiAgICAgICAgICAgIDxmZC1icmVhZGNydW1iPlxyXG4gICAgICAgICAgICAgICAgQGlmIChicmVhZENydW1icyAmJiAhaXNNb2JpbGUpIHsgQGZvciAoYnJlYWRDcnVtYiBvZiBicmVhZENydW1icyB8IHNsaWNlOiAwOmJyZWFkQ3J1bWJzLmxlbmd0aDsgdHJhY2tcclxuICAgICAgICAgICAgICAgIGJyZWFkQ3J1bWIudXJsOyBsZXQgaSA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgPGZkLWJyZWFkY3J1bWItaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8YnN1LWJyZWFkY3J1bWJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNMYXN0XT1cImxhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYnJlYWRDcnVtYl09XCJicmVhZENydW1iXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEJyZWFkQ3J1bWJdPVwiYnJlYWRDcnVtYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2JzdS1icmVhZGNydW1iPlxyXG4gICAgICAgICAgICAgICAgPC9mZC1icmVhZGNydW1iLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICB9IH1cclxuICAgICAgICAgICAgPC9mZC1icmVhZGNydW1iPlxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWJyZWFkY3J1bWI+XHJcbiAgICAgICAgPGZkLWR5bmFtaWMtcGFnZS1nbG9iYWwtYWN0aW9ucz5cclxuICAgICAgICAgICAgPCEtLSBnbG9iYWwgYWN0aW9ucyAtLT5cclxuXHJcbiAgICAgICAgICAgIDxmZC10b29sYmFyIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCIgU3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4gPC9mZC10b29sYmFyPlxyXG4gICAgICAgICAgICA8IS0tIGFkZGVkIHRoaXMgYmVjYXVzZSBpbiBtb2JpbGUgbGFuZHNjYXBlIHRvb2xiYXIgZGlzYXBwZXIgLS0+XHJcbiAgICAgICAgICAgIEBpZiAodG9vbGJhclZpc2libGUpIHtcclxuICAgICAgICAgICAgPGJzdS1mb3JtLXRvb2xiYXJcclxuICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgW2J1dHRvbnNdPVwidG9vbGJhckl0ZW1zIHwgZmlsdGVyV29ya2Zsb3dJbk1vYmlsZTogd29yZmtsb3dCdXR0b25zT25Gb290ZXJcIlxyXG4gICAgICAgICAgICAgICAgW2RpclZhbHVlXT1cImRpclZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtpc0ZpcmVmb3hdPVwiaXNGaXJlZm94XCJcclxuICAgICAgICAgICAgICAgICh0b29sYmFyQ2xpY2spPVwidG9vbGJhckNsaWNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAjZm9ybVRvb2xiYXJcclxuICAgICAgICAgICAgPjwvYnN1LWZvcm0tdG9vbGJhcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWdsb2JhbC1hY3Rpb25zPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtbGF5b3V0LWFjdGlvbnM+XHJcbiAgICAgICAgICAgIDwhLS0gbGF5b3V0IGFjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBbZm9ybUFjdGlvbnNdPVwidGhpcy50b29sYmFyXCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlQ2xvc2UpIHtcclxuICAgICAgICAgICAgPGZkLXRvb2xiYXIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChkZXZpY2VTaXplICE9PSAncycpIHtcclxuICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZ1bGxzY3JlZW5Gb3JtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xvc2VGb3JtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWxheW91dC1hY3Rpb25zPlxyXG4gICAgPC9mZC1keW5hbWljLXBhZ2UtaGVhZGVyPlxyXG4gICAgQGlmIChkZXNjcmlwdGlvbiB8fCBmYWNldExpc3QubGVuZ3RoID4gMCB8fCB3b3JrZmxvd0luZm9UZXh0IHx8IGF2YXRhcikge31cclxuICAgIDxmZC1keW5hbWljLXBhZ2Utc3ViaGVhZGVyXHJcbiAgICAgICAgW2NsYXNzLmhlYWRlci1uby1kZXNjcmlwdGlvbl09XCIhKGRlc2NyaXB0aW9uIHx8IHdvcmtmbG93SW5mb1RleHQpXCJcclxuICAgICAgICBbY2xhc3Mubm8tcGluXT1cImhpZGVQaW4gfHwgKCFmYWNldExpc3Q/Lmxlbmd0aCAmJiAhd29ya2Zsb3dJbmZvVGV4dClcIlxyXG4gICAgICAgIFtjb2xsYXBzaWJsZV09XCJ0cnVlXCJcclxuICAgICAgICBbcGlubmFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjb2xsYXBzZWRdPVwiIWZhY2V0TGlzdD8ubGVuZ3RoICYmICF3b3JrZmxvd0luZm9UZXh0XCJcclxuICAgID5cclxuICAgICAgICBAaWYgKHdvcmtmbG93SW5mb1RleHQpIHtcclxuICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCBbdHlwZV09XCInd2FybmluZydcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAge3sgd29ya2Zsb3dJbmZvVGV4dCB8IGJiYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZmQtbWVzc2FnZS1zdHJpcD5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGZkLWZhY2V0LWdyb3VwIGFyaWFMYWJlbD1cIkZhY2V0IEdyb3VwXCI+XHJcbiAgICAgICAgICAgIEBpZiAoYXZhdGFyKSB7XHJcbiAgICAgICAgICAgIDxmZC1mYWNldCB0eXBlPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cImF2YXRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImF2YXRhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ltYWdlXT1cIiFhdmF0YXI/LkZpbGVJZCA/IG51bGwgOiAoYXZhdGFyPy5GaWxlSWQgfCBwaWNGaWVsZFNyYzogJ0lEJzpudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiZGV2aWNlU2l6ZSA9PT0gJ3hsJyA/ICdsJyA6IGRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cImNpcmNsZUF2YXRhclwiXHJcbiAgICAgICAgICAgICAgICA+PC9mZC1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1hdmF0YXIgZmQtYXZhdGFyLS1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2ZkLWF2YXRhci0tJyArIChkZXZpY2VTaXplID09PSAneGwnID8gJ2wnIDogZGV2aWNlU2l6ZSlcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYXZhdGFyXCIgY2xhc3M9XCJmZC1hdmF0YXJfX2ljb25cIiBbY2xhc3NdPVwiYXZhdGFyIHwgc2FwRm9udENsYXNzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPiA8L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDwvZmQtZmFjZXQ+XHJcbiAgICAgICAgICAgIH0gQGZvciAoZmFjZXQgb2YgZmFjZXRMaXN0OyB0cmFjayBmYWNldCkge1xyXG4gICAgICAgICAgICA8ZmQtZmFjZXRcclxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImZhY2V0LnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgW2ZhY2V0VGl0bGVdPVwiZmFjZXQubW8uVGl0bGUgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cImZhY2V0Lm1vLlN1YlRpdGxlIHwgZmFjZXRWYWx1ZSB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmFjZXQubW8uSXRlbUxpc3Q/Lk1vRGF0YUxpc3Q7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIDxmZC1mYWNldC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIFtjb2xvbl09XCJ0cnVlXCIgZm9yPVwiZm9ybS12YWx1ZS0xMFwiPnt7IGl0ZW0uVGl0bGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC10ZXh0IFt0ZXh0XT1cIml0ZW0uVmFsdWUgfCBmYWNldFZhbHVlXCIgaWQ9XCJmb3JtLXZhbHVlLTEwXCI+PC9mZC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC9mZC1mYWNldC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKCAhZmFjZXQubW8uSXNOdW1iZXIgJiYgZmFjZXQudHlwZSA9PT0gJ2tleS12YWx1ZScgJiYgIWZhY2V0Lm1vLkNvbXBvbmVudD8uU2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwiZmFjZXQubW8uU3RhdHVzIHwgZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImZhY2V0Lm1vLkNvbXBvbmVudD8uU2VsZWN0b3IgPyAnJyA6IChmYWNldC5tby5UZXh0IHwgZmFjZXRWYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYXJnZV09XCJmYWNldC5tby5Jc0xhcmdlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmFjZXQubW8uVGV4dCB8IGZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImZhY2V0Lm1vLlRleHQgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiZmFjZXQubW8uSWNvblwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxibnJjLWR5bmFtaWMtY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidmZC1vYmplY3Qtc3RhdHVzIGZkLW9iamVjdC1zdGF0dXMtLScgKyBmYWNldC5tby5TdGF0dXMgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtb2JqZWN0LXN0YXR1cy0tbGFyZ2VdPVwiZmFjZXQubW8uSXNMYXJnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudF09XCJmYWNldC5tby5Db21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmYWNldC5tby5UZXh0XCJcclxuICAgICAgICAgICAgICAgID48L2JucmMtZHluYW1pYy1jb21wb25lbnQ+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoZmFjZXQubW8uSXNOdW1iZXIgJiYgZmFjZXQudHlwZSA9PT0gJ2tleS12YWx1ZScpIHtcclxuICAgICAgICAgICAgICAgIDxmZC1vYmplY3QtbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgW251bWJlcl09XCJmYWNldC5tby5UZXh0IHwgZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhcmdlXT1cImZhY2V0Lm1vLklzTGFyZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1bml0XT1cImZhY2V0Lm1vLlVuaXQgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cImZhY2V0Lm1vLlN0YXR1cyB8IGZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsXT1cImZhY2V0Lm1vLkRlY2ltYWxWYWx1ZSB8IGZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZmQtb2JqZWN0LW51bWJlcj5cclxuICAgICAgICAgICAgICAgIH0gQGlmIChmYWNldC50eXBlID09PSAncGxhaW4tdGV4dCcpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cImZhY2V0Lm1vLldpZHRoXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm9ybWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLXRleHQgW3RleHRdPVwiZmFjZXQubW8uVGV4dCB8IGZhY2V0VmFsdWVcIiBoeXBoZW5hdGlvbj1cImF1dG9cIj48L2ZkLXRleHQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH0gQGlmIChmYWNldC50eXBlID09PSAncmF0aW5nLWluZGljYXRvcicpIHtcclxuICAgICAgICAgICAgICAgIDxmZC1mYWNldC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1yYXRpbmctaW5kaWNhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZHluYW1pY1RleHRJbmRpY2F0b3JdPVwiZmFjZXQubW8uRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFjZXQubW8gfCBmYWNldFZhbHVlOiBmYWNldC50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1yYXRpbmctaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9mZC1mYWNldC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGZhY2V0LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIicxMHJlbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGZkLWZvcm0tbGFiZWw+e3sgZmFjZXQubW8uU3VidGl0bGUgfCBmYWNldFZhbHVlIH19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtcHJvZ3Jlc3MtaW5kaWNhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwciBlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJmYWNldC5tby5TdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZVRleHRdPVwiKGZhY2V0Lm1vIHwgZmFjZXRWYWx1ZTogZmFjZXQudHlwZSkgKyAnINin2LIgMTAg2YXYsdit2YTZhydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVOb3ddPVwiZmFjZXQubW8gfCBmYWNldFZhbHVlOiBmYWNldC50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlTWF4XT1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3VuaXRdPVwiJ9mF2LHYrdmE2YcnXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1wcm9ncmVzcy1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dWk1LXByb2dyZXNzLWluZGljYXRvclxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwcmVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVTdGF0ZV09XCJmYWNldC5tby5TdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldE51bWJlcihmYWNldC5tby5WYWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICA+PC91aTUtcHJvZ3Jlc3MtaW5kaWNhdG9yPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGZhY2V0LnR5cGUgPT09ICdtaWNyb2NoYXJ0cycpIHtcclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHdyYXA+aW4gcHJvZ3Jlc3MgLi4uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2ZkLWZhY2V0PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mZC1mYWNldC1ncm91cD5cclxuICAgICAgICBAaWYgKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgPHNwYW4+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC1keW5hbWljLXBhZ2Utc3ViaGVhZGVyPlxyXG4gICAgQGlmKCFtb2Rlcm5UYWJzLmxlbmd0aCAmJiAhY29udGVudElzUGFnZSl7XHJcbiAgICA8ZmQtZHluYW1pYy1wYWdlLWNvbnRlbnQgW2NsYXNzLmxpbWl0LWNvbnRlbnQtd2lkdGhdPVwiZm9ybUNvbnRlbnRNYXhXaWR0aCA+IDBcIiBjZGtTY3JvbGxhYmxlPlxyXG4gICAgICAgIDxmZC1sYXlvdXQtZ3JpZCBzdHlsZT1cIm1pbi1oZWlnaHQ6IDEwMCVcIiBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImZvcm1Db250ZW50TWF4V2lkdGhcIj5cclxuICAgICAgICAgICAgPGRpdiBmZExheW91dEdyaWRSb3c+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZV09XCJsYXlvdXQyLmNvbFhsID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCJsYXlvdXQxLmNvbE1kXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sTGddPVwibGF5b3V0MS5jb2xMZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cImxheW91dDEuY29sWGxcIlxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDEwMCVcIiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cImNvbE1kXCIgW2NvbExnXT1cImNvbExnXCIgW2NvbFhsXT1cImNvbFhsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycz8uTGF5b3V0Q29tcG9uZW50ID8gcmVuZGVyTGF5b3V0Q29tcG9uZW50IDogcmVuZGVyRGVmYXVsdExheW91dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHBhcmFtZXRlcnM/LkxheW91dENvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ5NDogbGF5b3V0OTRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlXT1cImxheW91dDIuY29sWGwgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cImxheW91dDIuY29sTWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJsYXlvdXQyLmNvbExnXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibGF5b3V0Mi5jb2xYbFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICA8L2ZkLWR5bmFtaWMtcGFnZS1jb250ZW50PlxyXG4gICAgfSBAZWxzZSBpZihtb2Rlcm5UYWJzLmxlbmd0aCAmJiAhY29udGVudElzUGFnZSAmJiAhcGFyYW1ldGVycz8uTGF5b3V0Q29tcG9uZW50KXtcclxuICAgIDxmZHAtaWNvbi10YWItYmFyIFtzdGFja0NvbnRlbnRdPVwiZmFsc2VcIiBbY29sbGFwc2VPdmVyZmxvd109XCJ0cnVlXCIgW2V4cGFuZE92ZXJmbG93VGV4dF09XCInTW9yZScgfCBiYmJUcmFuc2xhdGVcIj5cclxuICAgICAgICBAZm9yICh0YWIgb2YgbW9kZXJuVGFiczsgdHJhY2sgdGFiLlRpdGxlOyBsZXQgaSA9ICRpbmRleCkge1xyXG5cclxuICAgICAgICA8ZmRwLWljb24tdGFiLWJhci10YWJcclxuICAgICAgICAgICAgW2lkXT1cInRhYi5pZFwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCJ0YWIuVGl0bGUhISB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0YWIuVGl0bGUhISB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1leHBhbmRlZF09XCJzZWxlY3RlZFRhYiA9PT0gdGFiLlRpdGxlXCJcclxuICAgICAgICAgICAgI3RhYmxpc3RcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxmZC1keW5hbWljLXBhZ2UtY29udGVudCBbaWRdPVwidGFiLmlkXCIgW2NsYXNzLmxpbWl0LWNvbnRlbnQtd2lkdGhdPVwiZm9ybUNvbnRlbnRNYXhXaWR0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxmZC1sYXlvdXQtZ3JpZCBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImZvcm1Db250ZW50TWF4V2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCJsYXlvdXQxLmNvbE1kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJsYXlvdXQxLmNvbExnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xYbF09XCJsYXlvdXQxLmNvbFhsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiY29sTWRcIiBbY29sTGddPVwiY29sTGdcIiBbY29sWGxdPVwiY29sWGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxic3UtbHktdGFiLXBhZ2UgW2NvbmZpZ109XCJ0YWJcIj48L2JzdS1seS10YWItcGFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTWRdPVwibGF5b3V0Mi5jb2xNZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sTGddPVwibGF5b3V0Mi5jb2xMZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibGF5b3V0Mi5jb2xYbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICAgICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9mZHAtaWNvbi10YWItYmFyLXRhYj5cclxuICAgICAgICB9XHJcbiAgICA8L2ZkcC1pY29uLXRhYi1iYXI+XHJcbiAgICB9IEBpZighaGlkZUZvb3RlciAmJiBoYXNMYXlvdXRCdXR0b25zKXtcclxuICAgIDxmZC1keW5hbWljLXBhZ2UtZm9vdGVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYXlvdXRBY3Rpb25zVGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cclxuICAgIH1cclxuPC9mZC1keW5hbWljLXBhZ2U+XHJcbkBpZiAoY29udGVudElzUGFnZSkge1xyXG48bmctY29udGFpbmVyXHJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgIHJlbmRlckxheW91dENvbXBvbmVudDtcclxuICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICRpbXBsaWNpdDogcGFyYW1ldGVycz8uTGF5b3V0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBsYXlvdXQ5NDogbGF5b3V0OTRcclxuICAgICAgICB9XHJcbiAgICBcIlxyXG4+PC9uZy1jb250YWluZXI+XHJcbn1cclxuPG5nLXRlbXBsYXRlICNyZW5kZXJEZWZhdWx0TGF5b3V0IGxldC1sYXlvdXQ5ND1cImxheW91dDk0XCI+XHJcbiAgICA8YnN1LWx5LWxheW91dC1jb250YWluZXItb2Ytcm9vdFxyXG4gICAgICAgIFtjb25maWddPVwibGF5b3V0OTRcIlxyXG4gICAgICAgIFtpc1BhbmVsXT1cImZhbHNlXCJcclxuICAgICAgICBbaXNSb290XT1cInRydWVcIlxyXG4gICAgPjwvYnN1LWx5LWxheW91dC1jb250YWluZXItb2Ytcm9vdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNyZW5kZXJMYXlvdXRDb21wb25lbnQgbGV0LWNvbXBvbmVudCBsZXQtbGF5b3V0OTQ9XCJsYXlvdXQ5NFwiPlxyXG4gICAgPGJucmMtZHluYW1pYy1mb3JtLWNvbXBvbmVudFxyXG4gICAgICAgIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCJcclxuICAgICAgICBbbGF5b3V0QWN0aW9uc1RlbXBsYXRlUmVmXT1cImxheW91dEFjdGlvbnNUZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgW3JlbW92ZUNvbnRlbnRQYWRkaW5nXT1cInJlbW92ZUNvbnRlbnRQYWRkaW5nXCJcclxuICAgICAgICBbYnJlYWRDcnVtYnNdPVwiYnJlYWRDcnVtYnNcIlxyXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlXCJcclxuICAgICAgICBbc3VidGl0bGVdPVwic3VidGl0bGVcIlxyXG4gICAgICAgIFt0b29sYmFySXRlbXNdPVwidG9vbGJhckl0ZW1zXCJcclxuICAgICAgICBbbGF5b3V0QWN0aW9uc109XCJsYXlvdXRBY3Rpb25zXCJcclxuICAgICAgICBbZm9vdGVyRGVzaWduXT1cImZvb3RlckRlc2lnblwiXHJcbiAgICAgICAgW2ZhY2V0TGlzdF09XCJmYWNldExpc3RcIlxyXG4gICAgICAgIFtzZXR0aW5nc109XCJjb21wb25lbnQuU2V0dGluZ3NcIlxyXG4gICAgICAgIFt3b3JrZmxvd0J1dHRvbnNdPVwid29ya2Zsb3dCdXR0b25zXCJcclxuICAgICAgICBbd29ya2Zsb3dQYW5lbFVpXT1cIndvcmtmbG93UGFuZWxVaVwiXHJcbiAgICAgICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcclxuICAgICAgICBbbW9dPVwibW9cIlxyXG4gICAgICAgIFtsYXlvdXQ5NF09XCJsYXlvdXQ5NFwiXHJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgIFtmaWVsZERpY3RdPVwiZmllbGREaWN0XCJcclxuICAgICAgICBbbWFza109XCJtYXNrXCJcclxuICAgICAgICBbZGlyVmFsdWVdPVwiZGlyVmFsdWVcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIFtjb250ZW50RGVuc2l0eV09XCJjb250ZW50RGVuc2l0eVwiXHJcbiAgICAgICAgW21vZGVyblRhYnNdPVwibW9kZXJuVGFic1wiXHJcbiAgICAgICAgW2F2YXRhcl09XCJhdmF0YXJcIlxyXG4gICAgICAgIChldmVudHMpPVwib25EeW5hbWljQ29tcG9uZW50RXZlbnRzKCRldmVudClcIlxyXG4gICAgPjwvYm5yYy1keW5hbWljLWZvcm0tY29tcG9uZW50PlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Nsb3NlRm9ybT5cclxuICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImNsb3NlLmVtaXQoKVwiIHRpdGxlPVwiQ2xvc2VcIj5cclxuICAgICAgICA8aSBbY2xhc3NdPVwiJ3NhcC1pY29uLS0nICsgKGlzTW9iaWxlID8gKHJ0bCA/ICdhcnJvdy1yaWdodCcgOiAnYXJyb3ctbGVmdCcpIDogJ2RlY2xpbmUnKVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Z1bGxzY3JlZW5Gb3JtPlxyXG4gICAgQGlmIChjYW5GdWxsc2NyZWVuKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZnVsbHNjcmVlbiA/ICdleGl0IGZ1bGxzY3JlZW4nIDogJ2Z1bGxzY3JlZW4nXCJcclxuICAgICAgICAoY2xpY2spPVwiZnVsbHNjcmVlblJlcXVlc3QuZW1pdCgpXCJcclxuICAgICAgICBbdGl0bGVdPVwiZnVsbHNjcmVlbiA/ICdleGl0IGZ1bGxzY3JlZW4nIDogJ2Z1bGxzY3JlZW4nXCJcclxuICAgICAgICBbZ2x5cGhdPVwiZnVsbHNjcmVlbiA/ICdleGl0ZnVsbHNjcmVlbicgOiAncmVzaXplJ1wiXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjbGF5b3V0QWN0aW9uc1RlbXBsYXRlUmVmPlxyXG4gICAgPGJzdS1sYXlvdXQtYWN0aW9uc1xyXG4gICAgICAgIFtjYW5TZW5kXT1cImNhblNlbmRcIlxyXG4gICAgICAgIFtidXR0b25zXT1cImxheW91dEFjdGlvbnNcIlxyXG4gICAgICAgIFtpc01vYmlsZV09XCJpc01vYmlsZVwiXHJcbiAgICAgICAgW2xhbmRzY2FwZV09XCJsYW5kc2NhcGVcIlxyXG4gICAgICAgIFtzdGFuZGFsb25lXT1cInN0YW5kYWxvbmVcIlxyXG4gICAgICAgIFtmb290ZXJEZXNpZ25dPVwiZm9vdGVyRGVzaWduXCJcclxuICAgICAgICBbd29ya2Zsb3dCdXR0b25zXT1cIndvcmtmbG93QnV0dG9uc1wiXHJcbiAgICAgICAgW3dvcmtmbG93QnV0dG9uc0NvbWJvTW9kZV09XCJ3b3JrZmxvd0J1dHRvbnNDb21ib01vZGUgfHwgd29yZmtsb3dCdXR0b25zT25Gb290ZXJcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICAodG9vbENsaWNrKT1cInRvb2xiYXJDbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICh3b3JrZmxvd0Nob2ljZVNlbGVjdCk9XCJvbldmQ2hvaWNlU2VsZWN0KCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9ic3UtbGF5b3V0LWFjdGlvbnM+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2Z1bmRhbWVudGFsLWR5bmFtaWMtZm9ybS9mdW5kYW1lbnRhbC1keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtL2Z1bmRhbWVudGFsLWR5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUMsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RixPQUFPLEVBQ0gsYUFBYSxFQUliLFNBQVMsRUFFWixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2hFLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxhQUFhO0lBK0Q5RCxZQUFtQixFQUFjO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBRE8sT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTVEdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEQsb0JBQW9CO1FBQ1YsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXNCeEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQTBCMUIs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LEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUMvQixlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJEZXNpZ25UeXBlLCBDb250ZW50RGVuc2l0eSwgRHluYW1pY1BhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhc2VDb21wb25lbnQsXHJcbiAgICBCcmVhZENydW1iSW5mbyxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBMYXlvdXRTZXR0aW5nLFxyXG4gICAgaXNGaXJlZm94LFxyXG4gICAgRm9ybVZpc2liaWxpdHlTdGF0dXNcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS10b29sYmFyL2Zvcm0tdG9vbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtTGF5b3V0Q29sLCBHZXRGb3JtTGF5b3V0R3JpZCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEljb25UYWJCYXJJdGVtIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mdW5kYW1lbnRhbC1keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZnVuZGFtZW50YWwtZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdW5kYW1lbnRhbER5bmFtaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBWaWV3Q2hpbGQoRHluYW1pY1BhZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIF9keW5hbWljUGFnZUNvbXBvbmVudDogRHluYW1pY1BhZ2VDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdmb3JtVG9vbGJhcicpIF90b29sYmFyQ29tcG9uZW50OiBGb3JtVG9vbGJhckNvbXBvbmVudDtcclxuICAgIEBPdXRwdXQoKSB0b29sYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB3b3JrZmxvd0Nob2ljZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGZ1bGxzY3JlZW5SZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQElucHV0KCkgYnJlYWRDcnVtYnM6IEJyZWFkQ3J1bWJJbmZvW10gfCBudWxsO1xyXG4gICAgQElucHV0KCkgdG9vbGJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0b29sYmFySXRlbXM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgbGF5b3V0QWN0aW9uczogYW55W107XHJcbiAgICBASW5wdXQoKSBsYXlvdXQ5NDtcclxuICAgIEBJbnB1dCgpIHBhcmFtZXRlcnM6IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBASW5wdXQoKSB3b3JrZmxvd1BhbmVsVWk6IGFueTtcclxuICAgIEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcclxuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGZhY2V0TGlzdDogYW55W107XHJcbiAgICBASW5wdXQoKSBmaWVsZERpY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XHJcbiAgICBASW5wdXQoKSByZW1vdmVIZWFkZXJCb3JkZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSByZW1vdmVDb250ZW50UGFkZGluZzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGlzTW9iaWxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW86IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBASW5wdXQoKSBhdmF0YXI6IGFueTtcclxuICAgIEBJbnB1dCgpIGNpcmNsZUF2YXRhcjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBoaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgaGlkZUNsb3NlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVBpbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGZ1bGxzY3JlZW46IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBtYXNrOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuU2VuZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbnRlbnRJc1BhZ2U6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHk7XHJcbiAgICBASW5wdXQoKSBkZXZpY2VTaXplOiAncycgfCAnbScgfCAnbCcgfCAneGwnO1xyXG4gICAgQElucHV0KCkgZGlyVmFsdWU6ICdydGwnIHwgJ2x0cic7XHJcbiAgICBASW5wdXQoKSBsYW5kc2NhcGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW9kZXJuVGFiczogTGF5b3V0U2V0dGluZ1tdO1xyXG4gICAgQElucHV0KCkgZm9ybVZpc2liaWxpdHlTdGF0dXM6IEZvcm1WaXNpYmlsaXR5U3RhdHVzO1xyXG4gICAgQElucHV0KCkgbGF5b3V0R3JpZENvbDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgY29sTGc6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIGNvbFhsOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBjb2xNZDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZm9vdGVyRGVzaWduOiBCYXJEZXNpZ25UeXBlO1xyXG4gICAgQElucHV0KCkgZm9ybUNvbnRlbnRNYXhXaWR0aDogbnVtYmVyO1xyXG4gICAgQFZpZXdDaGlsZCgndGl0bGVSZWYnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdGl0bGVSZWY6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdoZWFkZXJBdmF0YXInKSBoZWFkZXJBdmF0YXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdjbG9zZUZvcm0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBjbG9zZUZvcm1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIHdvcmtmbG93QnV0dG9uczogYW55W107XHJcbiAgICBzZWxlY3RlZFRhYjogYW55O1xyXG4gICAgY2FuRnVsbHNjcmVlbjogYm9vbGVhbjtcclxuICAgIHRvb2xiYXJTaG91bGRPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgd29yZmtsb3dCdXR0b25zT25Gb290ZXIgPSBmYWxzZTtcclxuICAgIHdvcmtmbG93SW5mb1RleHQ6IHN0cmluZztcclxuICAgIHdvcmtmbG93QnV0dG9uc0NvbWJvTW9kZTogYm9vbGVhbjtcclxuICAgIGlzRmlyZWZveDogYm9vbGVhbjtcclxuICAgIGxheW91dDE6IEZvcm1MYXlvdXRDb2w7XHJcbiAgICBsYXlvdXQyOiBGb3JtTGF5b3V0Q29sO1xyXG4gICAgaGFzTGF5b3V0QnV0dG9ucyA9IHRydWU7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNGaXJlZm94ID0gaXNGaXJlZm94KCk7XHJcbiAgICAgICAgdGhpcy5mYWNldExpc3QgfHw9IFtdO1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93VWlTZXR0aW5nID0gdGhpcy53b3JrZmxvd1BhbmVsVWk/LlNldHRpbmc7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0luZm9UZXh0ID0gd29ya2Zsb3dVaVNldHRpbmc/LldvcmtmbG93Py5JbmZvVGV4dDtcclxuICAgICAgICAvLyBjb25zdCB3b3JrZmxvd0J1dHRvbnMgPSB0aGlzLndvcmtmbG93UGFuZWxVaT8uYnV0dG9uTGlzdCA/PyBbXTtcclxuICAgICAgICB0aGlzLndvcmtmbG93QnV0dG9uc0NvbWJvTW9kZSA9IHRoaXMuaXNNb2JpbGU7XHJcbiAgICAgICAgdGhpcy53b3Jma2xvd0J1dHRvbnNPbkZvb3RlciA9XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycz8uV29ya2Zsb3dCdXR0b25zT25Gb290ZXIgfHwgd29ya2Zsb3dVaVNldHRpbmc/LldvcmtmbG93LlNob3dJblRvb2xiYXIgPT09IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyB0aGlzLndvcmtmbG93QnV0dG9ucyA9IHdvcmtmbG93QnV0dG9ucztcclxuICAgICAgICB0aGlzLmhhc0xheW91dEJ1dHRvbnMgPVxyXG4gICAgICAgICAgICB0aGlzLmxheW91dEFjdGlvbnMubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICAodGhpcy53b3JrZmxvd0J1dHRvbnMubGVuZ3RoID4gMCAmJiAodGhpcy53b3JrZmxvd0J1dHRvbnNDb21ib01vZGUgfHwgdGhpcy53b3Jma2xvd0J1dHRvbnNPbkZvb3RlcikpO1xyXG4gICAgICAgIHRoaXMuY2FuRnVsbHNjcmVlbiA9IHRoaXMucGFyYW1ldGVycz8uQ2FuRnVsbHNjcmVlbiA9PT0gdHJ1ZTtcclxuICAgICAgICBjb25zdCB0b29sYmFyQnV0dG9uc0NvdW50ID0gdGhpcy50b29sYmFySXRlbXMuZmlsdGVyKChjKSA9PiB0eXBlb2YgYyAhPT0gJ3N0cmluZycgJiYgYy50ZXh0ICE9PSAnLScpLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5kZXZpY2VTaXplID09PSAncycgJiYgdG9vbGJhckJ1dHRvbnNDb3VudCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sYmFyU2hvdWxkT3ZlcmZsb3cgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0b29sYmFyQnV0dG9uc0NvdW50ID4gNSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyU2hvdWxkT3ZlcmZsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hhbmxkZUxheW91dCgpO1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl90YWJMaXN0Q29tcG9uZW50Ll9kaXNhYmxlU2Nyb2xsU3B5ID0gdHJ1ZTtcclxuICAgICAgICAvLyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBmb3JtVmlzaWJpbGl0eVN0YXR1cyB9ID0gY2hhbmdlcztcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGZvcm1WaXNpYmlsaXR5U3RhdHVzICYmXHJcbiAgICAgICAgICAgICFmb3JtVmlzaWJpbGl0eVN0YXR1cy5maXJzdENoYW5nZSAmJlxyXG4gICAgICAgICAgICBmb3JtVmlzaWJpbGl0eVN0YXR1cy5jdXJyZW50VmFsdWUgPT09ICdWaXNpYmxlJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9keW5hbWljUGFnZUNvbXBvbmVudD8ucmVmcmVzaFNpemUoKTtcclxuICAgICAgICAgICAgdGhpcy5fdG9vbGJhckNvbXBvbmVudD8udXBkYXRlQ29sbGFwc2libGVJdGVtcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbldmQ2hvaWNlU2VsZWN0KHdmQ2hvaWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0Nob2ljZUNsaWNrLmVtaXQod2ZDaG9pY2UpO1xyXG4gICAgfVxyXG4gICAgb25UYWJDaGFuZ2VkKHRhYjogSWNvblRhYkJhckl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiLmxhYmVsO1xyXG4gICAgfVxyXG4gICAgZ2V0TnVtYmVyKHZhbCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpO1xyXG4gICAgfVxyXG4gICAgb25EeW5hbWljQ29tcG9uZW50RXZlbnRzKGUpIHtcclxuICAgICAgICBzd2l0Y2ggKGUudGl0bGUpIHtcclxuICAgICAgICAgICAgY2FzZSAndG9vbGJhckNsaWNrJzpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3b3JrZmxvd0Nob2ljZVNlbGVjdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uV2ZDaG9pY2VTZWxlY3QoZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9oYW5sZGVMYXlvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQxID0gR2V0Rm9ybUxheW91dEdyaWQodHJ1ZSwgdGhpcy5jb2xYbCwgdGhpcy5jb2xMZywgdGhpcy5jb2xNZCk7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQyID0gR2V0Rm9ybUxheW91dEdyaWQoZmFsc2UsIHRoaXMuY29sWGwsIHRoaXMuY29sTGcsIHRoaXMuY29sTWQpO1xyXG4gICAgfVxyXG59XHJcbiIsIkBpZiAobWFzaykge1xyXG48ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIj5cclxuICAgIDxic3UtbWFzayBzaXplPVwibVwiPjwvYnN1LW1hc2s+XHJcbjwvZGl2PlxyXG59XHJcblxyXG48ZmQtZHluYW1pYy1wYWdlXHJcbiAgICBbc2l6ZV09XCJpc01vYmlsZSA/ICdzbWFsbCcgOiAnbGFyZ2UnXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Zsb2F0aW5nLWZvb3Rlcic6IGZvb3RlckRlc2lnbiA9PT0gJ2Zsb2F0aW5nLWZvb3RlcicgfVwiXHJcbiAgICBbY2xhc3MuaGVhZGVyLWJvcmRlcl09XCIhcmVtb3ZlSGVhZGVyQm9yZGVyXCJcclxuICAgIFthdHRyLmlzTW9iaWxlXT1cImlzTW9iaWxlXCJcclxuICAgIFthdHRyLmNvbnRlbnRJc1BhZ2VdPVwiY29udGVudElzUGFnZVwiXHJcbiAgICBtb2JpbGVcclxuICAgIGZvcm1DbG9zZVxyXG4gICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcclxuPlxyXG4gICAgPGZkLWR5bmFtaWMtcGFnZS1oZWFkZXJcclxuICAgICAgICBbY2xhc3Muc2ltcGxlLXRpdGxlXT1cIiFkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgW3RpdGxlXT1cIihoaWRlVGl0bGUgPT09IHRydWUgPyAnJyA6IHRpdGxlKSB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2NsYXNzLnAtYjBdPVwicmVtb3ZlQ29udGVudFBhZGRpbmdcIlxyXG4gICAgICAgIFtjbGFzcy5oaWRlLXRpdGxlXT1cImhpZGVUaXRsZSA9PT0gdHJ1ZSAmJiBoaWRlQ2xvc2UgPT09IHRydWVcIlxyXG4gICAgICAgIFtjbGFzcy5uby10b29sYmFyLWl0ZW1zXT1cIiEodG9vbGJhckl0ZW1zIHwgZmlsdGVyV29ya2Zsb3dJbk1vYmlsZTogd29yZmtsb3dCdXR0b25zT25Gb290ZXIpPy5sZW5ndGhcIlxyXG4gICAgICAgICN0aXRsZVJlZlxyXG4gICAgPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtYnJlYWRjcnVtYiBbY2xhc3MuaGlkZV09XCJpc01vYmlsZVwiPlxyXG4gICAgICAgICAgICA8ZmQtYnJlYWRjcnVtYj5cclxuICAgICAgICAgICAgICAgIEBpZiAoYnJlYWRDcnVtYnMgJiYgIWlzTW9iaWxlKSB7IEBmb3IgKGJyZWFkQ3J1bWIgb2YgYnJlYWRDcnVtYnMgfCBzbGljZTogMDpicmVhZENydW1icy5sZW5ndGg7IHRyYWNrXHJcbiAgICAgICAgICAgICAgICBicmVhZENydW1iLnVybDsgbGV0IGkgPSAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgIDxmZC1icmVhZGNydW1iLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJzdS1icmVhZGNydW1iXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzTGFzdF09XCJsYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2JyZWFkQ3J1bWJdPVwiYnJlYWRDcnVtYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbGxCcmVhZENydW1iXT1cImJyZWFkQ3J1bWJzXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9ic3UtYnJlYWRjcnVtYj5cclxuICAgICAgICAgICAgICAgIDwvZmQtYnJlYWRjcnVtYi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgfSB9XHJcbiAgICAgICAgICAgIDwvZmQtYnJlYWRjcnVtYj5cclxuICAgICAgICA8L2ZkLWR5bmFtaWMtcGFnZS1icmVhZGNydW1iPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtZ2xvYmFsLWFjdGlvbnM+XHJcbiAgICAgICAgICAgIDwhLS0gZ2xvYmFsIGFjdGlvbnMgLS0+XHJcblxyXG4gICAgICAgICAgICA8ZmQtdG9vbGJhciBbc2hvdWxkT3ZlcmZsb3ddPVwidHJ1ZVwiIFN0eWxlPVwiZGlzcGxheTpub25lXCI+IDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgPCEtLSBhZGRlZCB0aGlzIGJlY2F1c2UgaW4gbW9iaWxlIGxhbmRzY2FwZSB0b29sYmFyIGRpc2FwcGVyIC0tPlxyXG4gICAgICAgICAgICBAaWYgKHRvb2xiYXJWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIDxic3UtZm9ybS10b29sYmFyXHJcbiAgICAgICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgICAgIFtidXR0b25zXT1cInRvb2xiYXJJdGVtcyB8IGZpbHRlcldvcmtmbG93SW5Nb2JpbGU6IHdvcmZrbG93QnV0dG9uc09uRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgIFtkaXJWYWx1ZV09XCJkaXJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNGaXJlZm94XT1cImlzRmlyZWZveFwiXHJcbiAgICAgICAgICAgICAgICAodG9vbGJhckNsaWNrKT1cInRvb2xiYXJDbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgI2Zvcm1Ub29sYmFyXHJcbiAgICAgICAgICAgID48L2JzdS1mb3JtLXRvb2xiYXI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLWR5bmFtaWMtcGFnZS1nbG9iYWwtYWN0aW9ucz5cclxuICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWxheW91dC1hY3Rpb25zPlxyXG4gICAgICAgICAgICA8IS0tIGxheW91dCBhY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgW2Zvcm1BY3Rpb25zXT1cInRoaXMudG9vbGJhclwiPjwvZGl2PiAtLT5cclxuICAgICAgICAgICAgQGlmICghaGlkZUNsb3NlKSB7XHJcbiAgICAgICAgICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoZGV2aWNlU2l6ZSAhPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmdWxsc2NyZWVuRm9ybVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlRm9ybVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2ZkLWR5bmFtaWMtcGFnZS1sYXlvdXQtYWN0aW9ucz5cclxuICAgIDwvZmQtZHluYW1pYy1wYWdlLWhlYWRlcj5cclxuICAgIEBpZiAoZGVzY3JpcHRpb24gfHwgZmFjZXRMaXN0Lmxlbmd0aCA+IDAgfHwgd29ya2Zsb3dJbmZvVGV4dCB8fCBhdmF0YXIpIHt9XHJcbiAgICA8ZmQtZHluYW1pYy1wYWdlLXN1YmhlYWRlclxyXG4gICAgICAgIFtjbGFzcy5oZWFkZXItbm8tZGVzY3JpcHRpb25dPVwiIShkZXNjcmlwdGlvbiB8fCB3b3JrZmxvd0luZm9UZXh0KVwiXHJcbiAgICAgICAgW2NsYXNzLm5vLXBpbl09XCJoaWRlUGluIHx8ICghZmFjZXRMaXN0Py5sZW5ndGggJiYgIXdvcmtmbG93SW5mb1RleHQpXCJcclxuICAgICAgICBbY29sbGFwc2libGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Bpbm5hYmxlXT1cImZhbHNlXCJcclxuICAgICAgICBbY29sbGFwc2VkXT1cIiFmYWNldExpc3Q/Lmxlbmd0aCAmJiAhd29ya2Zsb3dJbmZvVGV4dFwiXHJcbiAgICA+XHJcbiAgICAgICAgQGlmICh3b3JrZmxvd0luZm9UZXh0KSB7XHJcbiAgICAgICAgPGZkLW1lc3NhZ2Utc3RyaXAgW3R5cGVdPVwiJ3dhcm5pbmcnXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIHt7IHdvcmtmbG93SW5mb1RleHQgfCBiYmJUcmFuc2xhdGUgfX1cclxuICAgICAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxmZC1mYWNldC1ncm91cCBhcmlhTGFiZWw9XCJGYWNldCBHcm91cFwiPlxyXG4gICAgICAgICAgICBAaWYgKGF2YXRhcikge1xyXG4gICAgICAgICAgICA8ZmQtZmFjZXQgdHlwZT1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCIhYXZhdGFyPy5GaWxlSWQgPyBudWxsIDogKGF2YXRhcj8uRmlsZUlkIHwgcGljRmllbGRTcmM6ICdJRCc6bnVsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImRldmljZVNpemUgPT09ICd4bCcgPyAnbCcgOiBkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJjaXJjbGVBdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtYXZhdGFyIGZkLWF2YXRhci0tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidmZC1hdmF0YXItLScgKyAoZGV2aWNlU2l6ZSA9PT0gJ3hsJyA/ICdsJyA6IGRldmljZVNpemUpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImF2YXRhclwiIGNsYXNzPVwiZmQtYXZhdGFyX19pY29uXCIgW2NsYXNzXT1cImF2YXRhciB8IHNhcEZvbnRDbGFzc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj4gPC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8L2ZkLWZhY2V0PlxyXG4gICAgICAgICAgICB9IEBmb3IgKGZhY2V0IG9mIGZhY2V0TGlzdDsgdHJhY2sgZmFjZXQpIHtcclxuICAgICAgICAgICAgPGZkLWZhY2V0XHJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJmYWNldC50eXBlXCJcclxuICAgICAgICAgICAgICAgIFtmYWNldFRpdGxlXT1cImZhY2V0Lm1vLlRpdGxlIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJmYWNldC5tby5TdWJUaXRsZSB8IGZhY2V0VmFsdWUgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZhY2V0Lm1vLkl0ZW1MaXN0Py5Nb0RhdGFMaXN0OyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICA8ZmQtZmFjZXQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBbY29sb25dPVwidHJ1ZVwiIGZvcj1cImZvcm0tdmFsdWUtMTBcIj57eyBpdGVtLlRpdGxlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtdGV4dCBbdGV4dF09XCJpdGVtLlZhbHVlIHwgZmFjZXRWYWx1ZVwiIGlkPVwiZm9ybS12YWx1ZS0xMFwiPjwvZmQtdGV4dD5cclxuICAgICAgICAgICAgICAgIDwvZmQtZmFjZXQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIH0gQGlmICggIWZhY2V0Lm1vLklzTnVtYmVyICYmIGZhY2V0LnR5cGUgPT09ICdrZXktdmFsdWUnICYmICFmYWNldC5tby5Db21wb25lbnQ/LlNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGZkLW9iamVjdC1zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cImZhY2V0Lm1vLlN0YXR1cyB8IGZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmYWNldC5tby5Db21wb25lbnQ/LlNlbGVjdG9yID8gJycgOiAoZmFjZXQubW8uVGV4dCB8IGZhY2V0VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFyZ2VdPVwiZmFjZXQubW8uSXNMYXJnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImZhY2V0Lm1vLlRleHQgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJmYWNldC5tby5UZXh0IHwgZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImZhY2V0Lm1vLkljb25cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8Ym5yYy1keW5hbWljLWNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInZmQtb2JqZWN0LXN0YXR1cyBmZC1vYmplY3Qtc3RhdHVzLS0nICsgZmFjZXQubW8uU3RhdHVzIHwgZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLW9iamVjdC1zdGF0dXMtLWxhcmdlXT1cImZhY2V0Lm1vLklzTGFyZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRdPVwiZmFjZXQubW8uQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFjZXQubW8uVGV4dFwiXHJcbiAgICAgICAgICAgICAgICA+PC9ibnJjLWR5bmFtaWMtY29tcG9uZW50PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGZhY2V0Lm1vLklzTnVtYmVyICYmIGZhY2V0LnR5cGUgPT09ICdrZXktdmFsdWUnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZmQtb2JqZWN0LW51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgIFtudW1iZXJdPVwiZmFjZXQubW8uVGV4dCB8IGZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYXJnZV09XCJmYWNldC5tby5Jc0xhcmdlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdW5pdF09XCJmYWNldC5tby5Vbml0IHwgZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJmYWNldC5tby5TdGF0dXMgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmYWNldC5tby5EZWNpbWFsVmFsdWUgfCBmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgID48L2ZkLW9iamVjdC1udW1iZXI+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoZmFjZXQudHlwZSA9PT0gJ3BsYWluLXRleHQnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aC5weF09XCJmYWNldC5tby5XaWR0aFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vcm1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC10ZXh0IFt0ZXh0XT1cImZhY2V0Lm1vLlRleHQgfCBmYWNldFZhbHVlXCIgaHlwaGVuYXRpb249XCJhdXRvXCI+PC9mZC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoZmFjZXQudHlwZSA9PT0gJ3JhdGluZy1pbmRpY2F0b3InKSB7XHJcbiAgICAgICAgICAgICAgICA8ZmQtZmFjZXQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtcmF0aW5nLWluZGljYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2R5bmFtaWNUZXh0SW5kaWNhdG9yXT1cImZhY2V0Lm1vLkZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5TW9kZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZhY2V0Lm1vIHwgZmFjZXRWYWx1ZTogZmFjZXQudHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtcmF0aW5nLWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgIDwvZmQtZmFjZXQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIH0gQGlmIChmYWNldC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCInMTByZW0nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBmZC1mb3JtLWxhYmVsPnt7IGZhY2V0Lm1vLlN1YnRpdGxlIHwgZmFjZXRWYWx1ZSB9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLXByb2dyZXNzLWluZGljYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMHIgZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiZmFjZXQubW8uU3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVUZXh0XT1cIihmYWNldC5tbyB8IGZhY2V0VmFsdWU6IGZhY2V0LnR5cGUpICsgJyDYp9iyIDEwINmF2LHYrdmE2YcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlTm93XT1cImZhY2V0Lm1vIHwgZmFjZXRWYWx1ZTogZmFjZXQudHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZU1heF09XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt1bml0XT1cIifZhdix2K3ZhNmHJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtcHJvZ3Jlc3MtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHVpNS1wcm9ncmVzcy1pbmRpY2F0b3JcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMHJlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlU3RhdGVdPVwiZmFjZXQubW8uU3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROdW1iZXIoZmFjZXQubW8uVmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvdWk1LXByb2dyZXNzLWluZGljYXRvcj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH0gQGlmIChmYWNldC50eXBlID09PSAnbWljcm9jaGFydHMnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCB3cmFwPmluIHByb2dyZXNzIC4uLjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9mZC1mYWNldD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZmFjZXQtZ3JvdXA+XHJcbiAgICAgICAgQGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgICAgIDxzcGFuPnt7IGRlc2NyaXB0aW9uIH19PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgIDwvZmQtZHluYW1pYy1wYWdlLXN1YmhlYWRlcj5cclxuICAgIEBpZighbW9kZXJuVGFicy5sZW5ndGggJiYgIWNvbnRlbnRJc1BhZ2Upe1xyXG4gICAgPGZkLWR5bmFtaWMtcGFnZS1jb250ZW50IFtjbGFzcy5saW1pdC1jb250ZW50LXdpZHRoXT1cImZvcm1Db250ZW50TWF4V2lkdGggPiAwXCIgY2RrU2Nyb2xsYWJsZT5cclxuICAgICAgICA8ZmQtbGF5b3V0LWdyaWQgc3R5bGU9XCJtaW4taGVpZ2h0OiAxMDAlXCIgW3N0eWxlLm1heC13aWR0aC5weF09XCJmb3JtQ29udGVudE1heFdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMDsgcGFkZGluZy1pbmxpbmU6IDA7IHBhZGRpbmctYmxvY2s6IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlXT1cImxheW91dDIuY29sWGwgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cImxheW91dDEuY29sTWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJsYXlvdXQxLmNvbExnXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibGF5b3V0MS5jb2xYbFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWluLWhlaWdodDogMTAwJVwiIFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiY29sTWRcIiBbY29sTGddPVwiY29sTGdcIiBbY29sWGxdPVwiY29sWGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzPy5MYXlvdXRDb21wb25lbnQgPyByZW5kZXJMYXlvdXRDb21wb25lbnQgOiByZW5kZXJEZWZhdWx0TGF5b3V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcGFyYW1ldGVycz8uTGF5b3V0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQ5NFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMDsgcGFkZGluZy1pbmxpbmU6IDA7IHBhZGRpbmctYmxvY2s6IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlXT1cImxheW91dDIuY29sWGwgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cImxheW91dDIuY29sTWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJsYXlvdXQyLmNvbExnXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibGF5b3V0Mi5jb2xYbFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICA8L2ZkLWR5bmFtaWMtcGFnZS1jb250ZW50PlxyXG4gICAgfSBAZWxzZSBpZihtb2Rlcm5UYWJzLmxlbmd0aCAmJiAhY29udGVudElzUGFnZSAmJiAhcGFyYW1ldGVycz8uTGF5b3V0Q29tcG9uZW50KXtcclxuICAgIDxmZHAtaWNvbi10YWItYmFyIFtzdGFja0NvbnRlbnRdPVwiZmFsc2VcIiBbY29sbGFwc2VPdmVyZmxvd109XCJ0cnVlXCIgW2V4cGFuZE92ZXJmbG93VGV4dF09XCInTW9yZScgfCBiYmJUcmFuc2xhdGVcIj5cclxuICAgICAgICBAZm9yICh0YWIgb2YgbW9kZXJuVGFiczsgdHJhY2sgdGFiLlRpdGxlOyBsZXQgaSA9ICRpbmRleCkge1xyXG5cclxuICAgICAgICA8ZmRwLWljb24tdGFiLWJhci10YWJcclxuICAgICAgICAgICAgW2lkXT1cInRhYi5pZFwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCJ0YWIuVGl0bGUhISB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0YWIuVGl0bGUhISB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1leHBhbmRlZF09XCJzZWxlY3RlZFRhYiA9PT0gdGFiLlRpdGxlXCJcclxuICAgICAgICAgICAgI3RhYmxpc3RcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxmZC1keW5hbWljLXBhZ2UtY29udGVudCBbaWRdPVwidGFiLmlkXCIgW2NsYXNzLmxpbWl0LWNvbnRlbnQtd2lkdGhdPVwiZm9ybUNvbnRlbnRNYXhXaWR0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxmZC1sYXlvdXQtZ3JpZCBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImZvcm1Db250ZW50TWF4V2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwOyBwYWRkaW5nLWlubGluZTogMDsgcGFkZGluZy1ibG9jazogMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cImxheW91dDEuY29sTWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cImxheW91dDEuY29sTGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cImxheW91dDEuY29sWGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiIFtjb2xNZF09XCJjb2xNZFwiIFtjb2xMZ109XCJjb2xMZ1wiIFtjb2xYbF09XCJjb2xYbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJzdS1seS10YWItcGFnZSBbY29uZmlnXT1cInRhYlwiPjwvYnN1LWx5LXRhYi1wYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwOyBwYWRkaW5nLWlubGluZTogMDsgcGFkZGluZy1ibG9jazogMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cImxheW91dDIuY29sTWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cImxheW91dDIuY29sTGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cImxheW91dDIuY29sWGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2ZkLWxheW91dC1ncmlkPlxyXG4gICAgICAgICAgICA8L2ZkLWR5bmFtaWMtcGFnZS1jb250ZW50PlxyXG4gICAgICAgIDwvZmRwLWljb24tdGFiLWJhci10YWI+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZHAtaWNvbi10YWItYmFyPlxyXG4gICAgfSBAaWYoIWhpZGVGb290ZXIgJiYgaGFzTGF5b3V0QnV0dG9ucyl7XHJcbiAgICA8ZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGF5b3V0QWN0aW9uc1RlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2ZkLWR5bmFtaWMtcGFnZS1mb290ZXI+XHJcbiAgICB9XHJcbjwvZmQtZHluYW1pYy1wYWdlPlxyXG5AaWYgKGNvbnRlbnRJc1BhZ2UpIHtcclxuPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICByZW5kZXJMYXlvdXRDb21wb25lbnQ7XHJcbiAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAkaW1wbGljaXQ6IHBhcmFtZXRlcnM/LkxheW91dENvbXBvbmVudCxcclxuICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dDk0XHJcbiAgICAgICAgfVxyXG4gICAgXCJcclxuPjwvbmctY29udGFpbmVyPlxyXG59XHJcbjxuZy10ZW1wbGF0ZSAjcmVuZGVyRGVmYXVsdExheW91dCBsZXQtbGF5b3V0OTQ9XCJsYXlvdXQ5NFwiPlxyXG4gICAgPGJzdS1seS1sYXlvdXQtY29udGFpbmVyLW9mLXJvb3RcclxuICAgICAgICBbY29uZmlnXT1cImxheW91dDk0XCJcclxuICAgICAgICBbaXNQYW5lbF09XCJmYWxzZVwiXHJcbiAgICAgICAgW2lzUm9vdF09XCJ0cnVlXCJcclxuICAgID48L2JzdS1seS1sYXlvdXQtY29udGFpbmVyLW9mLXJvb3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcmVuZGVyTGF5b3V0Q29tcG9uZW50IGxldC1jb21wb25lbnQgbGV0LWxheW91dDk0PVwibGF5b3V0OTRcIj5cclxuICAgIDxibnJjLWR5bmFtaWMtZm9ybS1jb21wb25lbnRcclxuICAgICAgICBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgW2xheW91dEFjdGlvbnNUZW1wbGF0ZVJlZl09XCJsYXlvdXRBY3Rpb25zVGVtcGxhdGVSZWZcIlxyXG4gICAgICAgIFtyZW1vdmVDb250ZW50UGFkZGluZ109XCJyZW1vdmVDb250ZW50UGFkZGluZ1wiXHJcbiAgICAgICAgW2JyZWFkQ3J1bWJzXT1cImJyZWFkQ3J1bWJzXCJcclxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgW3N1YnRpdGxlXT1cInN1YnRpdGxlXCJcclxuICAgICAgICBbdG9vbGJhckl0ZW1zXT1cInRvb2xiYXJJdGVtc1wiXHJcbiAgICAgICAgW2xheW91dEFjdGlvbnNdPVwibGF5b3V0QWN0aW9uc1wiXHJcbiAgICAgICAgW2Zvb3RlckRlc2lnbl09XCJmb290ZXJEZXNpZ25cIlxyXG4gICAgICAgIFtmYWNldExpc3RdPVwiZmFjZXRMaXN0XCJcclxuICAgICAgICBbc2V0dGluZ3NdPVwiY29tcG9uZW50LlNldHRpbmdzXCJcclxuICAgICAgICBbd29ya2Zsb3dCdXR0b25zXT1cIndvcmtmbG93QnV0dG9uc1wiXHJcbiAgICAgICAgW3dvcmtmbG93UGFuZWxVaV09XCJ3b3JrZmxvd1BhbmVsVWlcIlxyXG4gICAgICAgIFtpc01vYmlsZV09XCJpc01vYmlsZVwiXHJcbiAgICAgICAgW21vXT1cIm1vXCJcclxuICAgICAgICBbbGF5b3V0OTRdPVwibGF5b3V0OTRcIlxyXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICBbZmllbGREaWN0XT1cImZpZWxkRGljdFwiXHJcbiAgICAgICAgW21hc2tdPVwibWFza1wiXHJcbiAgICAgICAgW2RpclZhbHVlXT1cImRpclZhbHVlXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbY29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgIFttb2Rlcm5UYWJzXT1cIm1vZGVyblRhYnNcIlxyXG4gICAgICAgIFthdmF0YXJdPVwiYXZhdGFyXCJcclxuICAgICAgICAoZXZlbnRzKT1cIm9uRHluYW1pY0NvbXBvbmVudEV2ZW50cygkZXZlbnQpXCJcclxuICAgID48L2JucmMtZHluYW1pYy1mb3JtLWNvbXBvbmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjbG9zZUZvcm0+XHJcbiAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJjbG9zZS5lbWl0KClcIiB0aXRsZT1cIkNsb3NlXCI+XHJcbiAgICAgICAgPGkgW2NsYXNzXT1cIidzYXAtaWNvbi0tJyArIChpc01vYmlsZSA/IChydGwgPyAnYXJyb3ctcmlnaHQnIDogJ2Fycm93LWxlZnQnKSA6ICdkZWNsaW5lJylcIj48L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNmdWxsc2NyZWVuRm9ybT5cclxuICAgIEBpZiAoY2FuRnVsbHNjcmVlbikge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZ1bGxzY3JlZW4gPyAnZXhpdCBmdWxsc2NyZWVuJyA6ICdmdWxsc2NyZWVuJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5SZXF1ZXN0LmVtaXQoKVwiXHJcbiAgICAgICAgW3RpdGxlXT1cImZ1bGxzY3JlZW4gPyAnZXhpdCBmdWxsc2NyZWVuJyA6ICdmdWxsc2NyZWVuJ1wiXHJcbiAgICAgICAgW2dseXBoXT1cImZ1bGxzY3JlZW4gPyAnZXhpdGZ1bGxzY3JlZW4nIDogJ3Jlc2l6ZSdcIlxyXG4gICAgPjwvYnV0dG9uPlxyXG4gICAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2xheW91dEFjdGlvbnNUZW1wbGF0ZVJlZj5cclxuICAgIDxic3UtbGF5b3V0LWFjdGlvbnNcclxuICAgICAgICBbY2FuU2VuZF09XCJjYW5TZW5kXCJcclxuICAgICAgICBbYnV0dG9uc109XCJsYXlvdXRBY3Rpb25zXCJcclxuICAgICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxyXG4gICAgICAgIFtsYW5kc2NhcGVdPVwibGFuZHNjYXBlXCJcclxuICAgICAgICBbc3RhbmRhbG9uZV09XCJzdGFuZGFsb25lXCJcclxuICAgICAgICBbZm9vdGVyRGVzaWduXT1cImZvb3RlckRlc2lnblwiXHJcbiAgICAgICAgW3dvcmtmbG93QnV0dG9uc109XCJ3b3JrZmxvd0J1dHRvbnNcIlxyXG4gICAgICAgIFt3b3JrZmxvd0J1dHRvbnNDb21ib01vZGVdPVwid29ya2Zsb3dCdXR0b25zQ29tYm9Nb2RlIHx8IHdvcmZrbG93QnV0dG9uc09uRm9vdGVyXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgKHRvb2xDbGljayk9XCJ0b29sYmFyQ2xpY2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAod29ya2Zsb3dDaG9pY2VTZWxlY3QpPVwib25XZkNob2ljZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvYnN1LWxheW91dC1hY3Rpb25zPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|