@rededor/site-front-end-lib 17.0.0 → 17.0.1

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.
Files changed (22) hide show
  1. package/esm2022/lib/components/banner/content-banner/content-banner.component.mjs +2 -2
  2. package/esm2022/lib/components/breadcrumbs/breadcrumbs.component.mjs +1 -1
  3. package/esm2022/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.mjs +2 -2
  4. package/esm2022/lib/components/cards/expandable-card/expandable-card.component.mjs +2 -2
  5. package/esm2022/lib/components/cards/testimonial-card/testimonial-card.component.mjs +2 -2
  6. package/esm2022/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.mjs +1 -1
  7. package/esm2022/lib/components/cta-wrapper/cta-wrapper.component.mjs +1 -1
  8. package/esm2022/lib/components/error/error.component.mjs +3 -3
  9. package/esm2022/lib/components/filters/filter-generic/filter-generic.component.mjs +3 -3
  10. package/esm2022/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.mjs +2 -2
  11. package/esm2022/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.mjs +3 -3
  12. package/esm2022/lib/components/input-file/input-file.component.mjs +2 -2
  13. package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
  14. package/esm2022/lib/components/search/search.component.mjs +2 -2
  15. package/esm2022/lib/components/section-navigation/section-navigation.component.mjs +3 -3
  16. package/esm2022/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.mjs +2 -2
  17. package/esm2022/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.mjs +2 -2
  18. package/esm2022/lib/components/sticky-navigation/sticky-navigation.component.mjs +2 -2
  19. package/esm2022/lib/components/whatsapp/whatsapp.component.mjs +3 -3
  20. package/fesm2022/rededor-site-front-end-lib.mjs +29 -29
  21. package/fesm2022/rededor-site-front-end-lib.mjs.map +1 -1
  22. package/package.json +1 -1
@@ -208,7 +208,7 @@ export class FilterGenericComponent {
208
208
  return Object.values(filterData).every((val) => val === null || val === '' || (Array.isArray(val) && val.length === 0));
209
209
  }
210
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
211
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: { classPropertyName: "withContainerStyle", publicName: "withContainerStyle", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showApplyButton: { classPropertyName: "showApplyButton", publicName: "showApplyButton", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, disableButtons: { classPropertyName: "disableButtons", publicName: "disableButtons", isSignal: true, isRequired: false, transformFunction: null }, showBadge: { classPropertyName: "showBadge", publicName: "showBadge", isSignal: true, isRequired: false, transformFunction: null }, showToggleIcon: { classPropertyName: "showToggleIcon", publicName: "showToggleIcon", isSignal: true, isRequired: false, transformFunction: null }, isFilterOpen: { classPropertyName: "isFilterOpen", publicName: "isFilterOpen", isSignal: true, isRequired: false, transformFunction: null }, mobileBehavior: { classPropertyName: "mobileBehavior", publicName: "mobileBehavior", isSignal: true, isRequired: false, transformFunction: null }, forceCollapsed: { classPropertyName: "forceCollapsed", publicName: "forceCollapsed", isSignal: true, isRequired: false, transformFunction: null }, emitOnReset: { classPropertyName: "emitOnReset", publicName: "emitOnReset", isSignal: true, isRequired: false, transformFunction: null }, textTitle: { classPropertyName: "textTitle", publicName: "textTitle", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter", isFilterOpen: "isFilterOpenChange" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" color=\"neutral-black\" weight=\"regular\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [ariaLabel]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"'' + option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n fontColor=\"light\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CuraLabelComponent, selector: "cura-label", inputs: ["size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraBadgeCounterComponent, selector: "cura-badge-counter", inputs: ["number", "color", "disabled", "type"] }, { kind: "component", type: CuraButtonTransparentComponent, selector: "cura-button-transparent", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraIconComponent, selector: "cura-icon", inputs: ["name", "color", "size", "iconset", "disabled"] }, { kind: "component", type: CuraInputTextComponent, selector: "cura-input-text", inputs: ["mode", "status", "size", "type", "inputMode", "label", "name", "placeholder", "value", "iconName", "disabled", "required", "maskPreset", "enableSelectionMode", "maskRegex", "maskAdvanced", "maxlength", "readOnly", "isLoading", "clearIcon", "hideErrorIcon", "autocomplete"], outputs: ["valueChange", "inputClear"] }, { kind: "component", type: CuraSelectComponent, selector: "cura-select", inputs: ["name", "label", "placeholder", "value", "mode", "size", "iconName", "status", "disabled", "required", "searchBehavior", "caseSensitive", "maxHeight"], outputs: ["valueChange", "selected", "searchTermInput"] }, { kind: "component", type: CuraSelectOptionComponent, selector: "cura-select-option", inputs: ["value", "selected", "active", "size", "visible"], outputs: ["selectedChange", "activeChange", "sizeChange", "visibleChange"] }, { kind: "component", type: CuraHeadingComponent, selector: "cura-heading", inputs: ["level", "size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraParagraphComponent, selector: "cura-paragraph", inputs: ["size", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraCheckboxComponent, selector: "cura-checkbox", inputs: ["disableCheckIcon", "checked", "indeterminate", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "size", "background", "iconColor", "color", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "indeterminateChange", "valueChange", "onchange"] }, { kind: "component", type: CuraRadioComponent, selector: "cura-radio", inputs: ["checked", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "background", "size", "color", "isSquare", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "valueChange", "onchange"] }, { kind: "component", type: CuraButtonComponent, selector: "cura-button", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "background", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }] }); }
211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: { classPropertyName: "withContainerStyle", publicName: "withContainerStyle", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showApplyButton: { classPropertyName: "showApplyButton", publicName: "showApplyButton", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, disableButtons: { classPropertyName: "disableButtons", publicName: "disableButtons", isSignal: true, isRequired: false, transformFunction: null }, showBadge: { classPropertyName: "showBadge", publicName: "showBadge", isSignal: true, isRequired: false, transformFunction: null }, showToggleIcon: { classPropertyName: "showToggleIcon", publicName: "showToggleIcon", isSignal: true, isRequired: false, transformFunction: null }, isFilterOpen: { classPropertyName: "isFilterOpen", publicName: "isFilterOpen", isSignal: true, isRequired: false, transformFunction: null }, mobileBehavior: { classPropertyName: "mobileBehavior", publicName: "mobileBehavior", isSignal: true, isRequired: false, transformFunction: null }, forceCollapsed: { classPropertyName: "forceCollapsed", publicName: "forceCollapsed", isSignal: true, isRequired: false, transformFunction: null }, emitOnReset: { classPropertyName: "emitOnReset", publicName: "emitOnReset", isSignal: true, isRequired: false, transformFunction: null }, textTitle: { classPropertyName: "textTitle", publicName: "textTitle", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter", isFilterOpen: "isFilterOpenChange" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" color=\"neutral-black\" weight=\"regular\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [ariaLabel]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"'' + option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n fontColor=\"light\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".filter-generic,.filter-generic *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CuraLabelComponent, selector: "cura-label", inputs: ["size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraBadgeCounterComponent, selector: "cura-badge-counter", inputs: ["number", "color", "disabled", "type"] }, { kind: "component", type: CuraButtonTransparentComponent, selector: "cura-button-transparent", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraIconComponent, selector: "cura-icon", inputs: ["name", "color", "size", "iconset", "disabled", "label"] }, { kind: "component", type: CuraInputTextComponent, selector: "cura-input-text", inputs: ["mode", "status", "size", "type", "inputMode", "label", "name", "placeholder", "value", "iconName", "disabled", "required", "maskPreset", "enableSelectionMode", "maskRegex", "maskAdvanced", "maxlength", "readOnly", "isLoading", "clearIcon", "hideErrorIcon", "autocomplete"], outputs: ["valueChange", "inputClear"] }, { kind: "component", type: CuraSelectComponent, selector: "cura-select", inputs: ["name", "label", "placeholder", "value", "mode", "size", "iconName", "status", "disabled", "required", "searchBehavior", "caseSensitive", "maxHeight"], outputs: ["valueChange", "selected", "searchTermInput"] }, { kind: "component", type: CuraSelectOptionComponent, selector: "cura-select-option", inputs: ["value", "selected", "active", "size", "visible"], outputs: ["selectedChange", "activeChange", "sizeChange", "visibleChange"] }, { kind: "component", type: CuraHeadingComponent, selector: "cura-heading", inputs: ["level", "size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraParagraphComponent, selector: "cura-paragraph", inputs: ["size", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraCheckboxComponent, selector: "cura-checkbox", inputs: ["disableCheckIcon", "checked", "indeterminate", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "size", "background", "iconColor", "color", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "indeterminateChange", "valueChange", "onchange"] }, { kind: "component", type: CuraRadioComponent, selector: "cura-radio", inputs: ["checked", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "background", "size", "color", "isSquare", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "valueChange", "onchange"] }, { kind: "component", type: CuraButtonComponent, selector: "cura-button", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "background", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }] }); }
212
212
  }
213
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, decorators: [{
214
214
  type: Component,
@@ -227,9 +227,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
227
227
  CuraCheckboxComponent,
228
228
  CuraRadioComponent,
229
229
  CuraButtonComponent,
230
- ], standalone: true, template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" color=\"neutral-black\" weight=\"regular\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [ariaLabel]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"'' + option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n fontColor=\"light\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
230
+ ], standalone: true, template: "<div\r\n class=\"filter-generic\"\r\n [ngClass]=\"{ 'container-style': withContainerStyle(), 'clickable-mobile': shouldHandleMobileClick() }\"\r\n aria-label=\"Filtros\"\r\n (click)=\"handleMobileClick()\"\r\n>\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen(), hidden: !isFilterOpen() }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-label size=\"medium\" color=\"neutral-black\" weight=\"regular\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ textTitle() }}\r\n </cura-label>\r\n\r\n @if (showBadge()) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount()\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"toggleFilter()\"\r\n [attr.aria-expanded]=\"isFilterOpen()\"\r\n [ariaLabel]=\"isFilterOpen() ? 'Fechar filtros' : 'Abrir filtros'\"\r\n >\r\n <cura-icon [name]=\"isFilterOpen() ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n @for (section of sections(); track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n @if (section.config.title) {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n {{ section.config.title }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option.label\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"option.checked || false\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\" [class.scrollable]=\"hasScroll(section)\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"'' + option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen() || (forceCollapsed() && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton()) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n fontColor=\"dark\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton()) {\r\n <cura-button\r\n size=\"medium\"\r\n fontColor=\"light\"\r\n color=\"primary\"\r\n textAlign=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtons() || !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton()) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".filter-generic,.filter-generic *{font-family:var(--font-family)}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.clickable-mobile{cursor:pointer}.filter-generic.clickable-mobile:hover{background-color:var(--primary-lighter)}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes.scrollable{max-height:100px;overflow-y:auto;grid-template-columns:1fr;padding-right:8px;gap:12px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-checkboxes.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-checkboxes.scrollable:after{display:none}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios.scrollable{max-height:100px;overflow-y:auto;padding-right:8px;gap:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar{width:8px}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb{background:var(--neutral-medium)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-thumb:hover{background:var(--primary-base)}.filter-section .filter-radios.scrollable::-webkit-scrollbar-track{background:var(--neutral-opacity-black)}.filter-section .filter-radios.scrollable:after{display:none}@media screen and (max-width: 1024px){.filter-checkboxes.scrollable,.filter-radios.scrollable{max-height:100px}.filter-checkboxes:after{display:none;background-color:transparent}}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions:before{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-bottom:20px}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button-transparent{display:flex;justify-content:flex-start;text-align:left;flex:0 1 auto}.filter-actions cura-button{display:flex;justify-content:flex-start;text-align:left;flex:1 0 auto}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
231
231
  }], propDecorators: { styleBinding: [{
232
232
  type: HostBinding,
233
233
  args: ['style']
234
234
  }] } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWdlbmVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1nZW5lcmljL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItZ2VuZXJpYy9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxF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LFdBQ3hCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsOEJBQThCO3dCQUM5QixpQkFBaUI7d0JBQ2pCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3FCQUNwQixjQUNXLElBQUk7OEJBZ0RNLFlBQVk7c0JBQWpDLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBQTEFURk9STV9JRCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIGluamVjdCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ3VyYUFwaVNlcnZpY2UgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYXBpJztcclxuaW1wb3J0IHsgTWVkaWFRdWVyaWVzIH0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9tZWRpYVF1ZXJpZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFdmVudCwgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJBY3Rpb24sIEZpbHRlckNvbnRyb2xWYWx1ZSwgRmlsdGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXJzL2ZpbHRlci1zZWN0aW9uLnR5cGUnO1xyXG5pbXBvcnQgeyBDdXJhTGFiZWxDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1sYWJlbCc7XHJcbmltcG9ydCB7IEN1cmFCYWRnZUNvdW50ZXJDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYmFkZ2VzL2N1cmEtYmFkZ2UtY291bnRlcic7XHJcbmltcG9ydCB7IEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9idXR0b25zL2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50JztcclxuaW1wb3J0IHsgQ3VyYUljb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvaWNvbnMvY3VyYS1pY29uJztcclxuaW1wb3J0IHsgQ3VyYUlucHV0VGV4dENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLWlucHV0LXRleHQnO1xyXG5pbXBvcnQgeyBDdXJhU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2Zvcm1zL2N1cmEtc2VsZWN0JztcclxuaW1wb3J0IHsgQ3VyYVNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLXNlbGVjdC1vcHRpb24nO1xyXG5pbXBvcnQgeyBDdXJhSGVhZGluZ0NvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci90ZXh0cy9jdXJhLWhlYWRpbmcnO1xyXG5pbXBvcnQgeyBDdXJhUGFyYWdyYXBoQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL3RleHRzL2N1cmEtcGFyYWdyYXBoJztcclxuaW1wb3J0IHsgQ3VyYUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2Zvcm1zL2N1cmEtY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBDdXJhUmFkaW9Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1yYWRpbyc7XHJcbmltcG9ydCB7IEN1cmFCdXR0b25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYnV0dG9ucy9jdXJhLWJ1dHRvbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFNlbGVjdGVkRXZlbnQge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENoYW5nZUV2ZW50IHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0NoYW5nZUV2ZW50IHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmRzaXRlLWZpbHRlci1nZW5lcmljJyxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ3VyYUxhYmVsQ29tcG9uZW50LFxyXG4gICAgQ3VyYUJhZGdlQ291bnRlckNvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCxcclxuICAgIEN1cmFJY29uQ29tcG9uZW50LFxyXG4gICAgQ3VyYUlucHV0VGV4dENvbXBvbmVudCxcclxuICAgIEN1cmFTZWxlY3RDb21wb25lbnQsXHJcbiAgICBDdXJhU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxyXG4gICAgQ3VyYUhlYWRpbmdDb21wb25lbnQsXHJcbiAgICBDdXJhUGFyYWdyYXBoQ29tcG9uZW50LFxyXG4gICAgQ3VyYUNoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgQ3VyYVJhZGlvQ29tcG9uZW50LFxyXG4gICAgQ3VyYUJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyR2VuZXJpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJhQXBpU2VydmljZSA9IGluamVjdChDdXJhQXBpU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XHJcblxyXG4gIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG91dHB1dDxGaWx0ZXJFdmVudD4oKTtcclxuICByZWFkb25seSBjbG9zZU1vZGFsID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgb3Blbk1vYmlsZUZpbHRlciA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICByZWFkb25seSB3aXRoQ29udGFpbmVyU3R5bGUgPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xlYXJCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93QXBwbHlCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xvc2VCdXR0b24gPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgZGlzYWJsZUJ1dHRvbnMgPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgc2hvd0JhZGdlID0gaW5wdXQodHJ1ZSk7XHJcbiAgcmVhZG9ubHkgc2hvd1RvZ2dsZUljb24gPSBpbnB1dCh0cnVlKTtcclxuICBpc0ZpbHRlck9wZW4gPSBtb2RlbCh0cnVlKTtcclxuICByZWFkb25seSBtb2JpbGVCZWhhdmlvciA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBmb3JjZUNvbGxhcHNlZCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBlbWl0T25SZXNldCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSB0ZXh0VGl0bGUgPSBpbnB1dCgnRmlsdHJhciBwb3InKTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IGlucHV0PEZpbHRlclNlY3Rpb25bXT4oW10pO1xyXG5cclxuICByZWFkb25seSB3aW5kb3dXaWR0aCA9IHNpZ25hbCgwKTtcclxuXHJcbiAgc2VsZWN0ZWRGaWx0ZXJzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucygpLnJlZHVjZSgoY291bnQsIHNlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKChzZWN0aW9uLnR5cGUgIT09ICdjdXN0b20nICYmICFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgfHwgKHNlY3Rpb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgIXNlY3Rpb24uY29uZmlnPy5jb3VudCkpIHJldHVybiBjb3VudDtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbD8udmFsdWUgfHwgbnVsbDtcclxuXHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnY2hlY2tib3gtZ3JvdXAnOlxyXG4gICAgICAgICAgcmV0dXJuIGNvdW50ICsgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtPy5jaGVja2VkKS5sZW5ndGggOiAwKTtcclxuICAgICAgICBjYXNlICdyYWRpby1ncm91cCc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAodmFsdWU/LnZhbHVlID8gMSA6IDApO1xyXG4gICAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAoc2VjdGlvbi5jb25maWcuY291bnQgfHwgMCk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBjb3VudCArICh2YWx1ZSA/IDEgOiAwKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1mb250LWZhbWlseSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuZm9udHMuZ2V0RmFtaWx5KCcnKSxcclxuICAgICctLW5ldXRyYWwtb3BhY2l0eS1ibGFjayc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWJsYWNrJywgMC4yKSxcclxuICAgICctLW5ldXRyYWwtZGFyayc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWRhcmsnKSxcclxuICAgICctLW5ldXRyYWwtZGFya2VyJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ25ldXRyYWwtZGFya2VyJyksXHJcbiAgICAnLS1uZXV0cmFsLW1lZGl1bSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLW1lZGl1bScpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodCc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWxpZ2h0JyksXHJcbiAgICAnLS1uZXV0cmFsLWxpZ2h0ZXInOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLnRoZW1lLmNvbG9ycy5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXHJcbiAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxyXG4gICAgJy0tcHJpbWFyeS1iYXNlJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ3ByaW1hcnktYmFzZScpLFxyXG4gICAgJy0tcHJpbWFyeS1saWdodGVyJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ3ByaW1hcnktbGlnaHRlcicpLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgdGhpcy53aW5kb3dXaWR0aC5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlQ29sbGFwc2VkKCkgJiYgdGhpcy5pc01vYmlsZSgpKSB7XHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJPcGVuLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbnB1dENoYW5nZShldmVudDogeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH0sIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlbGVjdENoYW5nZShldmVudDogU2VsZWN0U2VsZWN0ZWRFdmVudCwgY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZXZlbnQudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQsIG9wdGlvbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjaGFuZ2VkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC52YWx1ZSA9PT0gZXZlbnQudmFsdWUpO1xyXG4gICAgaWYgKGNoYW5nZWRPcHRpb24pIGNoYW5nZWRPcHRpb24uY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja2JveEdyb3VwKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmFkaW9DaGFuZ2UoZXZlbnQ6IFJhZGlvQ2hhbmdlRXZlbnQsIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWU7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKGNvbnRyb2wudmFsdWU/LnZhbHVlID09PSBzZWxlY3RlZFZhbHVlID8gbnVsbCA6IHsgdmFsdWU6IHNlbGVjdGVkVmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2UoJ2ZpbHRlcicpO1xyXG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IoKSB8fCB0aGlzLnNob3dDbG9zZUJ1dHRvbigpKSB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRBbGxDb250cm9scygpO1xyXG5cclxuICAgIGlmICh0aGlzLmVtaXRPblJlc2V0KCkpIHtcclxuICAgICAgdGhpcy5lbWl0RmlsdGVyQ2hhbmdlKCdyZXNldCcpO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IoKSAmJiB0aGlzLmlzTW9iaWxlKCkpIHtcclxuICAgICAgdGhpcy5vcGVuTW9iaWxlRmlsdGVyLmVtaXQodW5kZWZpbmVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJPcGVuLnNldCghdGhpcy5pc0ZpbHRlck9wZW4oKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnNDb3VudCgpID4gMDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2luZG93V2lkdGgoKSA8PSBNZWRpYVF1ZXJpZXMuc21hbGxCcmVha3BvaW50O1xyXG4gIH0pO1xyXG5cclxuICBnZXRSYWRpb0dyb3VwVmFsdWUoY29udHJvbD86IEZvcm1Db250cm9sPEZpbHRlckNvbnRyb2xWYWx1ZT4pOiBhbnkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sPy52YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBoYXNTY3JvbGwoc2VjdGlvbjogRmlsdGVyU2VjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSAnY2hlY2tib3gtZ3JvdXAnOlxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zICYmIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gNjtcclxuICAgICAgY2FzZSAncmFkaW8tZ3JvdXAnOlxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zICYmIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gNjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWN0aW9uQ2xhc3Moc2VjdGlvbjogRmlsdGVyU2VjdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNTY3JvbGwoc2VjdGlvbikgPyAnc2Nyb2xsYWJsZScgOiAnJztcclxuICB9XHJcblxyXG4gIHNob3VsZEhhbmRsZU1vYmlsZUNsaWNrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9iaWxlQmVoYXZpb3IoKSAmJiB0aGlzLmlzTW9iaWxlKCkgJiYgdGhpcy5mb3JjZUNvbGxhcHNlZCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlTW9iaWxlQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVNb2JpbGVDbGljaygpKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vYmlsZUZpbHRlci5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRGaWx0ZXJDaGFuZ2UoYWN0aW9uOiBGaWx0ZXJBY3Rpb24pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmJ1aWxkRmlsdGVyRGF0YSgpO1xyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuaXNGaWx0ZXJEYXRhRW1wdHkoZmlsdGVyRGF0YSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGRhdGE6IHRoaXMuZW1pdE9uUmVzZXQoKSB8fCAhaXNFbXB0eSA/IGZpbHRlckRhdGEgOiBudWxsLFxyXG4gICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEFsbENvbnRyb2xzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWN0aW9ucygpLmZvckVhY2goKHNlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKCFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHNlY3Rpb24udHlwZSA9PT0gJ2NoZWNrYm94LWdyb3VwJykge1xyXG4gICAgICAgIGNvbnN0IHJlc2V0T3B0aW9ucyA9IHNlY3Rpb24/LmNvbmZpZz8ub3B0aW9ucz8ubWFwKChvcHRpb246IGFueSkgPT4gKHsgLi4ub3B0aW9uLCBjaGVja2VkOiBmYWxzZSB9KSkgfHwgW107XHJcbiAgICAgICAgc2VjdGlvbi5jb25maWcub3B0aW9ucyA9IFsuLi5yZXNldE9wdGlvbnNdO1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wuc2V0VmFsdWUoWy4uLnJlc2V0T3B0aW9uc10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNoZWNrYm94R3JvdXAob3B0aW9uczogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VjdGlvbnMoKVxyXG4gICAgICAuZmlsdGVyKChzZWN0aW9uKSA9PiBzZWN0aW9uLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpXHJcbiAgICAgIC5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc2VjdGlvbi5jb25maWcub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcclxuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnNldFZhbHVlKFsuLi5vcHRpb25zXSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZpbHRlckRhdGEoKTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIHwgYW55IHtcclxuICAgIGNvbnN0IGZpbHRlckRhdGE6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSA9IHtcclxuICAgICAgdW5pZGFkZTogJycsXHJcbiAgICAgIGVzdGFkbzogJycsXHJcbiAgICAgIGNvYmVydHVyYTogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbnMoKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghc2VjdGlvbi5jb25maWc/LmNvbnRyb2wpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnaW5wdXQnOlxyXG4gICAgICAgICAgZmlsdGVyRGF0YS51bmlkYWRlID0gdmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgZmlsdGVyRGF0YS5lc3RhZG8gPSB2YWx1ZSB8fCAnJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2NoZWNrYm94LWdyb3VwJzpcclxuICAgICAgICAgIGZpbHRlckRhdGEuY29iZXJ0dXJhID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCkgOiBbXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGaWx0ZXJEYXRhRW1wdHkoZmlsdGVyRGF0YTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWx0ZXJEYXRhKS5ldmVyeSgodmFsKSA9PiB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwiZmlsdGVyLWdlbmVyaWNcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2NvbnRhaW5lci1zdHlsZSc6IHdpdGhDb250YWluZXJTdHlsZSgpLCAnY2xpY2thYmxlLW1vYmlsZSc6IHNob3VsZEhhbmRsZU1vYmlsZUNsaWNrKCkgfVwiXHJcbiAgYXJpYS1sYWJlbD1cIkZpbHRyb3NcIlxyXG4gIChjbGljayk9XCJoYW5kbGVNb2JpbGVDbGljaygpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZGVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ25vLXBhZGRpbmcnOiAhaXNGaWx0ZXJPcGVuKCksIGhpZGRlbjogIWlzRmlsdGVyT3BlbigpIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGl0bGUtd3JhcHBlclwiPlxyXG4gICAgICA8Y3VyYS1sYWJlbCBzaXplPVwibWVkaXVtXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgd2VpZ2h0PVwicmVndWxhclwiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAge3sgdGV4dFRpdGxlKCkgfX1cclxuICAgICAgPC9jdXJhLWxhYmVsPlxyXG5cclxuICAgICAgQGlmIChzaG93QmFkZ2UoKSkge1xyXG4gICAgICAgIDxjdXJhLWJhZGdlLWNvdW50ZXJcclxuICAgICAgICAgIFt0eXBlXT1cIidzb2xpZCdcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cImhhc1NlbGVjdGlvbigpID8gJ3ByaW1hcnknIDogJ25ldXRyYWwnXCJcclxuICAgICAgICAgIFtudW1iZXJdPVwic2VsZWN0ZWRGaWx0ZXJzQ291bnQoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1iYWRnZVwiXHJcbiAgICAgICAgPjwvY3VyYS1iYWRnZS1jb3VudGVyPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYgKHNob3dUb2dnbGVJY29uKCkpIHtcclxuICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50XHJcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICBmb250Q29sb3I9XCJkYXJrXCJcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcigpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRmlsdGVyT3BlbigpXCJcclxuICAgICAgICBbYXJpYUxhYmVsXT1cImlzRmlsdGVyT3BlbigpID8gJ0ZlY2hhciBmaWx0cm9zJyA6ICdBYnJpciBmaWx0cm9zJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8Y3VyYS1pY29uIFtuYW1lXT1cImlzRmlsdGVyT3BlbigpID8gJ3VwJyA6ICdkb3duJ1wiIHNpemU9XCIxNlwiIGNsYXNzPVwiZmlsdGVyLWljb25cIiBjb2xvcj1cInByaW1hcnktZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRlbnRcIiBbY2xhc3MuaGlkZGVuXT1cIiFpc0ZpbHRlck9wZW4oKSB8fCAoZm9yY2VDb2xsYXBzZWQoKSAmJiBpc01vYmlsZSgpKVwiPlxyXG4gICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9ucygpOyB0cmFjayBzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgQGlmIChzZWN0aW9uLnZpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICBAc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCdpbnB1dCcpIHtcclxuICAgICAgICAgICAgICA8Y3VyYS1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2VjdGlvbi5jb25maWcubmFtZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbaWNvbk5hbWVdPVwic2VjdGlvbi5jb25maWcuaWNvbk5hbWUgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcuY29udHJvbClcIlxyXG4gICAgICAgICAgICAgID48L2N1cmEtaW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgICA8Y3VyYS1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWN0aW9uLmNvbmZpZy5sYWJlbCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImhhbmRsZVNlbGVjdENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLmluY2x1ZGVEZWZhdWx0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIicnXCI+e3sgc2VjdGlvbi5jb25maWcuZGVmYXVsdE9wdGlvblRleHQgfHwgJ0Zhw6dhIGEgc3VhIFNlbGXDp8OjbycgfX08L2N1cmEtc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zIHx8IFtdOyB0cmFjayBvcHRpb24/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWVcIj57eyBvcHRpb24/LmxhYmVsIH19PC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9jdXJhLXNlbGVjdD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94LWdyb3VwJykge1xyXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcudGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLWljb24gbmFtZT1cImZpbHRlclwiIHNpemU9XCIyMFwiIGNvbG9yPVwiaW5mby1kYXJrXCI+PC9jdXJhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLWhlYWRpbmcgc2l6ZT1cInhzbWFsbFwiIFtsZXZlbF09XCI1XCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi5jb25maWcudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24uY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvY3VyYS1oZWFkaW5nPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXBhcmFncmFwaCBzaXplPVwieHNtYWxsXCIgY29sb3I9XCJuZXV0cmFsLWRhcmtcIiBtYXJnaW5CbG9jaz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLmNvbmZpZy5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2N1cmEtcGFyYWdyYXBoPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNoZWNrYm94ZXNcIiBbY2xhc3Muc2Nyb2xsYWJsZV09XCJoYXNTY3JvbGwoc2VjdGlvbilcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zIHx8IFtdOyB0cmFjayBvcHRpb24udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgPGN1cmEtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbmNoYW5nZSk9XCJoYW5kbGVDaGVja2JveENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3VyYS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3JhZGlvLWdyb3VwJykge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcmFkaW9zXCIgW2NsYXNzLnNjcm9sbGFibGVdPVwiaGFzU2Nyb2xsKHNlY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VjdGlvbi5jb25maWcub3B0aW9ucyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1yYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNlY3Rpb24uY29uZmlnLm5hbWUgfHwgJ3JhZGlvLWdyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIicnICsgb3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRSYWRpb0dyb3VwVmFsdWUoc2VjdGlvbi5jb25maWcuY29udHJvbCkgPT09IG9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uY2hhbmdlKT1cImhhbmRsZVJhZGlvQ2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcuY29udHJvbClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jdXJhLXJhZGlvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBjYXNlICgnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uLmNvbmZpZy50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCIgW2NsYXNzLmhpZGRlbl09XCIhaXNGaWx0ZXJPcGVuKCkgfHwgKGZvcmNlQ29sbGFwc2VkKCkgJiYgaXNNb2JpbGUoKSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWFjdGlvbnNcIj5cclxuICAgICAgQGlmIChzaG93Q2xlYXJCdXR0b24oKSkge1xyXG4gICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudFxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgIGZvbnRDb2xvcj1cImRhcmtcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ1dHRvbnMoKSB8fCAhaGFzU2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuPkxpbXBhciB0b2RvcyBvcyBmaWx0cm9zPC9zcGFuPlxyXG4gICAgICAgIDwvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQ+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEBpZiAoc2hvd0FwcGx5QnV0dG9uKCkpIHtcclxuICAgICAgICA8Y3VyYS1idXR0b25cclxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgZm9udENvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVCdXR0b25zKCkgfHwgIWhhc1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgRmlsdHJhclxyXG4gICAgICAgIDwvY3VyYS1idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItc3Ryb25nXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1hY3Rpb24td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1hY3Rpb25cIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgPGN1cmEtaWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImVycm9yLWRhcmtcIiBzaXplPVwic21hbGxcIj48L2N1cmEtaWNvbj5cclxuICAgICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJlcnJvclwiIHRhcmdldD1cIl9zZWxmXCI+IEZlY2hhciA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWdlbmVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1nZW5lcmljL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItZ2VuZXJpYy9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxF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LFdBQ3hCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsOEJBQThCO3dCQUM5QixpQkFBaUI7d0JBQ2pCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3FCQUNwQixjQUNXLElBQUk7OEJBZ0RNLFlBQVk7c0JBQWpDLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0LCBQTEFURk9STV9JRCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIGluamVjdCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ3VyYUFwaVNlcnZpY2UgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYXBpJztcclxuaW1wb3J0IHsgTWVkaWFRdWVyaWVzIH0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9tZWRpYVF1ZXJpZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFdmVudCwgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJBY3Rpb24sIEZpbHRlckNvbnRyb2xWYWx1ZSwgRmlsdGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXJzL2ZpbHRlci1zZWN0aW9uLnR5cGUnO1xyXG5pbXBvcnQgeyBDdXJhTGFiZWxDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1sYWJlbCc7XHJcbmltcG9ydCB7IEN1cmFCYWRnZUNvdW50ZXJDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYmFkZ2VzL2N1cmEtYmFkZ2UtY291bnRlcic7XHJcbmltcG9ydCB7IEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9idXR0b25zL2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50JztcclxuaW1wb3J0IHsgQ3VyYUljb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvaWNvbnMvY3VyYS1pY29uJztcclxuaW1wb3J0IHsgQ3VyYUlucHV0VGV4dENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLWlucHV0LXRleHQnO1xyXG5pbXBvcnQgeyBDdXJhU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2Zvcm1zL2N1cmEtc2VsZWN0JztcclxuaW1wb3J0IHsgQ3VyYVNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLXNlbGVjdC1vcHRpb24nO1xyXG5pbXBvcnQgeyBDdXJhSGVhZGluZ0NvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci90ZXh0cy9jdXJhLWhlYWRpbmcnO1xyXG5pbXBvcnQgeyBDdXJhUGFyYWdyYXBoQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL3RleHRzL2N1cmEtcGFyYWdyYXBoJztcclxuaW1wb3J0IHsgQ3VyYUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2Zvcm1zL2N1cmEtY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBDdXJhUmFkaW9Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1yYWRpbyc7XHJcbmltcG9ydCB7IEN1cmFCdXR0b25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvYnV0dG9ucy9jdXJhLWJ1dHRvbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFNlbGVjdGVkRXZlbnQge1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENoYW5nZUV2ZW50IHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0NoYW5nZUV2ZW50IHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmRzaXRlLWZpbHRlci1nZW5lcmljJyxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ3VyYUxhYmVsQ29tcG9uZW50LFxyXG4gICAgQ3VyYUJhZGdlQ291bnRlckNvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCxcclxuICAgIEN1cmFJY29uQ29tcG9uZW50LFxyXG4gICAgQ3VyYUlucHV0VGV4dENvbXBvbmVudCxcclxuICAgIEN1cmFTZWxlY3RDb21wb25lbnQsXHJcbiAgICBDdXJhU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxyXG4gICAgQ3VyYUhlYWRpbmdDb21wb25lbnQsXHJcbiAgICBDdXJhUGFyYWdyYXBoQ29tcG9uZW50LFxyXG4gICAgQ3VyYUNoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgQ3VyYVJhZGlvQ29tcG9uZW50LFxyXG4gICAgQ3VyYUJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1nZW5lcmljLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItZ2VuZXJpYy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyR2VuZXJpY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJhQXBpU2VydmljZSA9IGluamVjdChDdXJhQXBpU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XHJcblxyXG4gIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG91dHB1dDxGaWx0ZXJFdmVudD4oKTtcclxuICByZWFkb25seSBjbG9zZU1vZGFsID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgb3Blbk1vYmlsZUZpbHRlciA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICByZWFkb25seSB3aXRoQ29udGFpbmVyU3R5bGUgPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xlYXJCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93QXBwbHlCdXR0b24gPSBpbnB1dCh0cnVlKTtcclxuICByZWFkb25seSBzaG93Q2xvc2VCdXR0b24gPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgZGlzYWJsZUJ1dHRvbnMgPSBpbnB1dChmYWxzZSk7XHJcbiAgcmVhZG9ubHkgc2hvd0JhZGdlID0gaW5wdXQodHJ1ZSk7XHJcbiAgcmVhZG9ubHkgc2hvd1RvZ2dsZUljb24gPSBpbnB1dCh0cnVlKTtcclxuICBpc0ZpbHRlck9wZW4gPSBtb2RlbCh0cnVlKTtcclxuICByZWFkb25seSBtb2JpbGVCZWhhdmlvciA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBmb3JjZUNvbGxhcHNlZCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSBlbWl0T25SZXNldCA9IGlucHV0KGZhbHNlKTtcclxuICByZWFkb25seSB0ZXh0VGl0bGUgPSBpbnB1dCgnRmlsdHJhciBwb3InKTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IGlucHV0PEZpbHRlclNlY3Rpb25bXT4oW10pO1xyXG5cclxuICByZWFkb25seSB3aW5kb3dXaWR0aCA9IHNpZ25hbCgwKTtcclxuXHJcbiAgc2VsZWN0ZWRGaWx0ZXJzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucygpLnJlZHVjZSgoY291bnQsIHNlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKChzZWN0aW9uLnR5cGUgIT09ICdjdXN0b20nICYmICFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgfHwgKHNlY3Rpb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgIXNlY3Rpb24uY29uZmlnPy5jb3VudCkpIHJldHVybiBjb3VudDtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbD8udmFsdWUgfHwgbnVsbDtcclxuXHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnY2hlY2tib3gtZ3JvdXAnOlxyXG4gICAgICAgICAgcmV0dXJuIGNvdW50ICsgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtPy5jaGVja2VkKS5sZW5ndGggOiAwKTtcclxuICAgICAgICBjYXNlICdyYWRpby1ncm91cCc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAodmFsdWU/LnZhbHVlID8gMSA6IDApO1xyXG4gICAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgICByZXR1cm4gY291bnQgKyAoc2VjdGlvbi5jb25maWcuY291bnQgfHwgMCk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBjb3VudCArICh2YWx1ZSA/IDEgOiAwKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1mb250LWZhbWlseSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuZm9udHMuZ2V0RmFtaWx5KCcnKSxcclxuICAgICctLW5ldXRyYWwtb3BhY2l0eS1ibGFjayc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWJsYWNrJywgMC4yKSxcclxuICAgICctLW5ldXRyYWwtZGFyayc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWRhcmsnKSxcclxuICAgICctLW5ldXRyYWwtZGFya2VyJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ25ldXRyYWwtZGFya2VyJyksXHJcbiAgICAnLS1uZXV0cmFsLW1lZGl1bSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLW1lZGl1bScpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodCc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWxpZ2h0JyksXHJcbiAgICAnLS1uZXV0cmFsLWxpZ2h0ZXInOiB0aGlzLmN1cmFBcGlTZXJ2aWNlLnRoZW1lLmNvbG9ycy5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXHJcbiAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYUFwaVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxyXG4gICAgJy0tcHJpbWFyeS1iYXNlJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ3ByaW1hcnktYmFzZScpLFxyXG4gICAgJy0tcHJpbWFyeS1saWdodGVyJzogdGhpcy5jdXJhQXBpU2VydmljZS50aGVtZS5jb2xvcnMuZ2V0Q29sb3IoJ3ByaW1hcnktbGlnaHRlcicpLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgdGhpcy53aW5kb3dXaWR0aC5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlQ29sbGFwc2VkKCkgJiYgdGhpcy5pc01vYmlsZSgpKSB7XHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJPcGVuLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJbnB1dENoYW5nZShldmVudDogeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH0sIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlbGVjdENoYW5nZShldmVudDogU2VsZWN0U2VsZWN0ZWRFdmVudCwgY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZXZlbnQudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQsIG9wdGlvbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjaGFuZ2VkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC52YWx1ZSA9PT0gZXZlbnQudmFsdWUpO1xyXG4gICAgaWYgKGNoYW5nZWRPcHRpb24pIGNoYW5nZWRPcHRpb24uY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja2JveEdyb3VwKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmFkaW9DaGFuZ2UoZXZlbnQ6IFJhZGlvQ2hhbmdlRXZlbnQsIGNvbnRyb2w6IEZvcm1Db250cm9sKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWU7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKGNvbnRyb2wudmFsdWU/LnZhbHVlID09PSBzZWxlY3RlZFZhbHVlID8gbnVsbCA6IHsgdmFsdWU6IHNlbGVjdGVkVmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2UoJ2ZpbHRlcicpO1xyXG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IoKSB8fCB0aGlzLnNob3dDbG9zZUJ1dHRvbigpKSB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRBbGxDb250cm9scygpO1xyXG5cclxuICAgIGlmICh0aGlzLmVtaXRPblJlc2V0KCkpIHtcclxuICAgICAgdGhpcy5lbWl0RmlsdGVyQ2hhbmdlKCdyZXNldCcpO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IoKSAmJiB0aGlzLmlzTW9iaWxlKCkpIHtcclxuICAgICAgdGhpcy5vcGVuTW9iaWxlRmlsdGVyLmVtaXQodW5kZWZpbmVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJPcGVuLnNldCghdGhpcy5pc0ZpbHRlck9wZW4oKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnNDb3VudCgpID4gMDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2luZG93V2lkdGgoKSA8PSBNZWRpYVF1ZXJpZXMuc21hbGxCcmVha3BvaW50O1xyXG4gIH0pO1xyXG5cclxuICBnZXRSYWRpb0dyb3VwVmFsdWUoY29udHJvbD86IEZvcm1Db250cm9sPEZpbHRlckNvbnRyb2xWYWx1ZT4pOiBhbnkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sPy52YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBoYXNTY3JvbGwoc2VjdGlvbjogRmlsdGVyU2VjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSAnY2hlY2tib3gtZ3JvdXAnOlxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zICYmIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gNjtcclxuICAgICAgY2FzZSAncmFkaW8tZ3JvdXAnOlxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zICYmIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMubGVuZ3RoID4gNjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWN0aW9uQ2xhc3Moc2VjdGlvbjogRmlsdGVyU2VjdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNTY3JvbGwoc2VjdGlvbikgPyAnc2Nyb2xsYWJsZScgOiAnJztcclxuICB9XHJcblxyXG4gIHNob3VsZEhhbmRsZU1vYmlsZUNsaWNrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9iaWxlQmVoYXZpb3IoKSAmJiB0aGlzLmlzTW9iaWxlKCkgJiYgdGhpcy5mb3JjZUNvbGxhcHNlZCgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlTW9iaWxlQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVNb2JpbGVDbGljaygpKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vYmlsZUZpbHRlci5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRGaWx0ZXJDaGFuZ2UoYWN0aW9uOiBGaWx0ZXJBY3Rpb24pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmJ1aWxkRmlsdGVyRGF0YSgpO1xyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuaXNGaWx0ZXJEYXRhRW1wdHkoZmlsdGVyRGF0YSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGRhdGE6IHRoaXMuZW1pdE9uUmVzZXQoKSB8fCAhaXNFbXB0eSA/IGZpbHRlckRhdGEgOiBudWxsLFxyXG4gICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEFsbENvbnRyb2xzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWN0aW9ucygpLmZvckVhY2goKHNlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKCFzZWN0aW9uLmNvbmZpZz8uY29udHJvbCkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHNlY3Rpb24udHlwZSA9PT0gJ2NoZWNrYm94LWdyb3VwJykge1xyXG4gICAgICAgIGNvbnN0IHJlc2V0T3B0aW9ucyA9IHNlY3Rpb24/LmNvbmZpZz8ub3B0aW9ucz8ubWFwKChvcHRpb246IGFueSkgPT4gKHsgLi4ub3B0aW9uLCBjaGVja2VkOiBmYWxzZSB9KSkgfHwgW107XHJcbiAgICAgICAgc2VjdGlvbi5jb25maWcub3B0aW9ucyA9IFsuLi5yZXNldE9wdGlvbnNdO1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wuc2V0VmFsdWUoWy4uLnJlc2V0T3B0aW9uc10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNoZWNrYm94R3JvdXAob3B0aW9uczogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VjdGlvbnMoKVxyXG4gICAgICAuZmlsdGVyKChzZWN0aW9uKSA9PiBzZWN0aW9uLnR5cGUgPT09ICdjaGVja2JveC1ncm91cCcpXHJcbiAgICAgIC5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc2VjdGlvbi5jb25maWcub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcclxuICAgICAgICBzZWN0aW9uLmNvbmZpZy5jb250cm9sLnNldFZhbHVlKFsuLi5vcHRpb25zXSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZpbHRlckRhdGEoKTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlIHwgYW55IHtcclxuICAgIGNvbnN0IGZpbHRlckRhdGE6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSA9IHtcclxuICAgICAgdW5pZGFkZTogJycsXHJcbiAgICAgIGVzdGFkbzogJycsXHJcbiAgICAgIGNvYmVydHVyYTogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbnMoKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghc2VjdGlvbi5jb25maWc/LmNvbnRyb2wpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VjdGlvbi5jb25maWcuY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAgIHN3aXRjaCAoc2VjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnaW5wdXQnOlxyXG4gICAgICAgICAgZmlsdGVyRGF0YS51bmlkYWRlID0gdmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgZmlsdGVyRGF0YS5lc3RhZG8gPSB2YWx1ZSB8fCAnJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2NoZWNrYm94LWdyb3VwJzpcclxuICAgICAgICAgIGZpbHRlckRhdGEuY29iZXJ0dXJhID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCkgOiBbXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGaWx0ZXJEYXRhRW1wdHkoZmlsdGVyRGF0YTogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWx0ZXJEYXRhKS5ldmVyeSgodmFsKSA9PiB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwiZmlsdGVyLWdlbmVyaWNcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2NvbnRhaW5lci1zdHlsZSc6IHdpdGhDb250YWluZXJTdHlsZSgpLCAnY2xpY2thYmxlLW1vYmlsZSc6IHNob3VsZEhhbmRsZU1vYmlsZUNsaWNrKCkgfVwiXHJcbiAgYXJpYS1sYWJlbD1cIkZpbHRyb3NcIlxyXG4gIChjbGljayk9XCJoYW5kbGVNb2JpbGVDbGljaygpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZGVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ25vLXBhZGRpbmcnOiAhaXNGaWx0ZXJPcGVuKCksIGhpZGRlbjogIWlzRmlsdGVyT3BlbigpIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGl0bGUtd3JhcHBlclwiPlxyXG4gICAgICA8Y3VyYS1sYWJlbCBzaXplPVwibWVkaXVtXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgd2VpZ2h0PVwicmVndWxhclwiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAge3sgdGV4dFRpdGxlKCkgfX1cclxuICAgICAgPC9jdXJhLWxhYmVsPlxyXG5cclxuICAgICAgQGlmIChzaG93QmFkZ2UoKSkge1xyXG4gICAgICAgIDxjdXJhLWJhZGdlLWNvdW50ZXJcclxuICAgICAgICAgIFt0eXBlXT1cIidzb2xpZCdcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cImhhc1NlbGVjdGlvbigpID8gJ3ByaW1hcnknIDogJ25ldXRyYWwnXCJcclxuICAgICAgICAgIFtudW1iZXJdPVwic2VsZWN0ZWRGaWx0ZXJzQ291bnQoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1iYWRnZVwiXHJcbiAgICAgICAgPjwvY3VyYS1iYWRnZS1jb3VudGVyPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYgKHNob3dUb2dnbGVJY29uKCkpIHtcclxuICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50XHJcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICBmb250Q29sb3I9XCJkYXJrXCJcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcigpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRmlsdGVyT3BlbigpXCJcclxuICAgICAgICBbYXJpYUxhYmVsXT1cImlzRmlsdGVyT3BlbigpID8gJ0ZlY2hhciBmaWx0cm9zJyA6ICdBYnJpciBmaWx0cm9zJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8Y3VyYS1pY29uIFtuYW1lXT1cImlzRmlsdGVyT3BlbigpID8gJ3VwJyA6ICdkb3duJ1wiIHNpemU9XCIxNlwiIGNsYXNzPVwiZmlsdGVyLWljb25cIiBjb2xvcj1cInByaW1hcnktZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRlbnRcIiBbY2xhc3MuaGlkZGVuXT1cIiFpc0ZpbHRlck9wZW4oKSB8fCAoZm9yY2VDb2xsYXBzZWQoKSAmJiBpc01vYmlsZSgpKVwiPlxyXG4gICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9ucygpOyB0cmFjayBzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgQGlmIChzZWN0aW9uLnZpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICBAc3dpdGNoIChzZWN0aW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCdpbnB1dCcpIHtcclxuICAgICAgICAgICAgICA8Y3VyYS1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2VjdGlvbi5jb25maWcubmFtZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbaWNvbk5hbWVdPVwic2VjdGlvbi5jb25maWcuaWNvbk5hbWUgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcuY29udHJvbClcIlxyXG4gICAgICAgICAgICAgID48L2N1cmEtaW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgICA8Y3VyYS1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWN0aW9uLmNvbmZpZy5sYWJlbCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VjdGlvbi5jb25maWcucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlY3Rpb24uY29uZmlnLmNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImhhbmRsZVNlbGVjdENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLmNvbnRyb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLmluY2x1ZGVEZWZhdWx0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIicnXCI+e3sgc2VjdGlvbi5jb25maWcuZGVmYXVsdE9wdGlvblRleHQgfHwgJ0Zhw6dhIGEgc3VhIFNlbGXDp8OjbycgfX08L2N1cmEtc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zIHx8IFtdOyB0cmFjayBvcHRpb24/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWVcIj57eyBvcHRpb24/LmxhYmVsIH19PC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9jdXJhLXNlbGVjdD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94LWdyb3VwJykge1xyXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcudGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLWljb24gbmFtZT1cImZpbHRlclwiIHNpemU9XCIyMFwiIGNvbG9yPVwiaW5mby1kYXJrXCI+PC9jdXJhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLWhlYWRpbmcgc2l6ZT1cInhzbWFsbFwiIFtsZXZlbF09XCI1XCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi5jb25maWcudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24uY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvY3VyYS1oZWFkaW5nPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY29uZmlnLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjdXJhLXBhcmFncmFwaCBzaXplPVwieHNtYWxsXCIgY29sb3I9XCJuZXV0cmFsLWRhcmtcIiBtYXJnaW5CbG9jaz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLmNvbmZpZy5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2N1cmEtcGFyYWdyYXBoPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNoZWNrYm94ZXNcIiBbY2xhc3Muc2Nyb2xsYWJsZV09XCJoYXNTY3JvbGwoc2VjdGlvbilcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBzZWN0aW9uLmNvbmZpZy5vcHRpb25zIHx8IFtdOyB0cmFjayBvcHRpb24udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgPGN1cmEtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbmNoYW5nZSk9XCJoYW5kbGVDaGVja2JveENoYW5nZSgkZXZlbnQsIHNlY3Rpb24uY29uZmlnLm9wdGlvbnMpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvY3VyYS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3JhZGlvLWdyb3VwJykge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcmFkaW9zXCIgW2NsYXNzLnNjcm9sbGFibGVdPVwiaGFzU2Nyb2xsKHNlY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VjdGlvbi5jb25maWcub3B0aW9ucyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8Y3VyYS1yYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNlY3Rpb24uY29uZmlnLm5hbWUgfHwgJ3JhZGlvLWdyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIicnICsgb3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRSYWRpb0dyb3VwVmFsdWUoc2VjdGlvbi5jb25maWcuY29udHJvbCkgPT09IG9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uY2hhbmdlKT1cImhhbmRsZVJhZGlvQ2hhbmdlKCRldmVudCwgc2VjdGlvbi5jb25maWcuY29udHJvbClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9jdXJhLXJhZGlvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBjYXNlICgnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uLmNvbmZpZy50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCIgW2NsYXNzLmhpZGRlbl09XCIhaXNGaWx0ZXJPcGVuKCkgfHwgKGZvcmNlQ29sbGFwc2VkKCkgJiYgaXNNb2JpbGUoKSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWFjdGlvbnNcIj5cclxuICAgICAgQGlmIChzaG93Q2xlYXJCdXR0b24oKSkge1xyXG4gICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudFxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgIGZvbnRDb2xvcj1cImRhcmtcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUJ1dHRvbnMoKSB8fCAhaGFzU2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuPkxpbXBhciB0b2RvcyBvcyBmaWx0cm9zPC9zcGFuPlxyXG4gICAgICAgIDwvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQ+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEBpZiAoc2hvd0FwcGx5QnV0dG9uKCkpIHtcclxuICAgICAgICA8Y3VyYS1idXR0b25cclxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgZm9udENvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHRleHRBbGlnbj1cImNlbnRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVCdXR0b25zKCkgfHwgIWhhc1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgRmlsdHJhclxyXG4gICAgICAgIDwvY3VyYS1idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXItc3Ryb25nXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1hY3Rpb24td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1hY3Rpb25cIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgPGN1cmEtaWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImVycm9yLWRhcmtcIiBzaXplPVwic21hbGxcIj48L2N1cmEtaWNvbj5cclxuICAgICAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJlcnJvclwiIHRhcmdldD1cIl9zZWxmXCI+IEZlY2hhciA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -105,7 +105,7 @@ export class FilterPlanosConveniosComponent {
105
105
  this.coberturaControl.reset(this.coberturas);
106
106
  }
107
107
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterPlanosConveniosComponent, deps: [{ token: i1.CuraApiService }], target: i0.ɵɵFactoryTarget.Component }); }
108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterPlanosConveniosComponent, isStandalone: true, selector: "rdsite-filter-planos-convenios", inputs: { withContainerStyle: "withContainerStyle", isLoading: "isLoading", emitOnChange: "emitOnChange", initialEstado: "initialEstado", estados: "estados", coberturas: "coberturas", unidadeControl: "unidadeControl", estadoControl: "estadoControl" }, outputs: { filterChange: "filterChange", closeModal: "closeModal" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\r\n @if (!isLoading) {\r\n <cura-heading size=\"small\" [level]=\"4\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\"> Refine sua busca </cura-heading>\r\n\r\n <div class=\"filter-planos-convenios-unidade\">\r\n <cura-input-text\r\n placeholder=\"Nome da unidade\"\r\n name=\"unidade-input\"\r\n iconName=\"search\"\r\n autocomplete=\"off\"\r\n [value]=\"unidadeControl.value\"\r\n (valueChange)=\"inputTextChange($event)\"\r\n ></cura-input-text>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-estado\">\r\n @if (estados) {\r\n <cura-select\r\n label=\"Selecione o estado\"\r\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\r\n mode=\"default\"\r\n size=\"medium\"\r\n status=\"default\"\r\n [value]=\"estadoControl.value\"\r\n (selected)=\"selectChange($event)\"\r\n >\r\n <cura-select-option [value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\r\n\r\n @for (estado of estados || []; track estado?.value) {\r\n <cura-select-option [value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-cobertura\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n Filtre pela cobertura do seu plano\r\n </cura-heading>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-content\">\r\n <cura-heading size=\"xsmall\" [level]=\"5\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\"> Tipos de cobertura </cura-heading>\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\r\n </cura-paragraph>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-checkboxes\">\r\n @for (option of coberturas || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option?.label || ''\"\r\n [label]=\"option?.label || ''\"\r\n [value]=\"option?.value || ''\"\r\n [checked]=\"!!option?.checked\"\r\n (onchange)=\"checkboxChange($event)\"\r\n >\r\n </cura-checkbox>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-buttons\">\r\n <cura-button-transparent size=\"small\" color=\"primary\" fontColor=\"dark\" textAlign=\"center\" (click)=\"reset()\">\r\n <span> Limpar todos os filtros </span>\r\n </cura-button-transparent>\r\n\r\n <cura-button size=\"medium\" color=\"primary\" fontColor=\"light\" background=\"light\" textAlign=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\r\n </div>\r\n } @else {\r\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\r\n }\r\n</div>\r\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CuraHeadingComponent, selector: "cura-heading", inputs: ["level", "size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraInputTextComponent, selector: "cura-input-text", inputs: ["mode", "status", "size", "type", "inputMode", "label", "name", "placeholder", "value", "iconName", "disabled", "required", "maskPreset", "enableSelectionMode", "maskRegex", "maskAdvanced", "maxlength", "readOnly", "isLoading", "clearIcon", "hideErrorIcon", "autocomplete"], outputs: ["valueChange", "inputClear"] }, { kind: "component", type: CuraSelectComponent, selector: "cura-select", inputs: ["name", "label", "placeholder", "value", "mode", "size", "iconName", "status", "disabled", "required", "searchBehavior", "caseSensitive", "maxHeight"], outputs: ["valueChange", "selected", "searchTermInput"] }, { kind: "component", type: CuraSelectOptionComponent, selector: "cura-select-option", inputs: ["value", "selected", "active", "size", "visible"], outputs: ["selectedChange", "activeChange", "sizeChange", "visibleChange"] }, { kind: "component", type: CuraIconComponent, selector: "cura-icon", inputs: ["name", "color", "size", "iconset", "disabled"] }, { kind: "component", type: CuraParagraphComponent, selector: "cura-paragraph", inputs: ["size", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraCheckboxComponent, selector: "cura-checkbox", inputs: ["disableCheckIcon", "checked", "indeterminate", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "size", "background", "iconColor", "color", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "indeterminateChange", "valueChange", "onchange"] }, { kind: "component", type: CuraButtonTransparentComponent, selector: "cura-button-transparent", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraButtonComponent, selector: "cura-button", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "background", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraLoaderCircleComponent, selector: "cura-loader-circle", inputs: ["size", "color"] }] }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterPlanosConveniosComponent, isStandalone: true, selector: "rdsite-filter-planos-convenios", inputs: { withContainerStyle: "withContainerStyle", isLoading: "isLoading", emitOnChange: "emitOnChange", initialEstado: "initialEstado", estados: "estados", coberturas: "coberturas", unidadeControl: "unidadeControl", estadoControl: "estadoControl" }, outputs: { filterChange: "filterChange", closeModal: "closeModal" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\r\n @if (!isLoading) {\r\n <cura-heading size=\"small\" [level]=\"4\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\"> Refine sua busca </cura-heading>\r\n\r\n <div class=\"filter-planos-convenios-unidade\">\r\n <cura-input-text\r\n placeholder=\"Nome da unidade\"\r\n name=\"unidade-input\"\r\n iconName=\"search\"\r\n autocomplete=\"off\"\r\n [value]=\"unidadeControl.value\"\r\n (valueChange)=\"inputTextChange($event)\"\r\n ></cura-input-text>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-estado\">\r\n @if (estados) {\r\n <cura-select\r\n label=\"Selecione o estado\"\r\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\r\n mode=\"default\"\r\n size=\"medium\"\r\n status=\"default\"\r\n [value]=\"estadoControl.value\"\r\n (selected)=\"selectChange($event)\"\r\n >\r\n <cura-select-option [value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\r\n\r\n @for (estado of estados || []; track estado?.value) {\r\n <cura-select-option [value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-cobertura\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" [level]=\"5\" weight=\"bold\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\">\r\n Filtre pela cobertura do seu plano\r\n </cura-heading>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-content\">\r\n <cura-heading size=\"xsmall\" [level]=\"5\" color=\"neutral-black\" marginBlock=\"0\" lineHeight=\"16px\"> Tipos de cobertura </cura-heading>\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" marginBlock=\"0\">\r\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\r\n </cura-paragraph>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-checkboxes\">\r\n @for (option of coberturas || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n iconColor=\"light\"\r\n [name]=\"option?.label || ''\"\r\n [label]=\"option?.label || ''\"\r\n [value]=\"option?.value || ''\"\r\n [checked]=\"!!option?.checked\"\r\n (onchange)=\"checkboxChange($event)\"\r\n >\r\n </cura-checkbox>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-buttons\">\r\n <cura-button-transparent size=\"small\" color=\"primary\" fontColor=\"dark\" textAlign=\"center\" (click)=\"reset()\">\r\n <span> Limpar todos os filtros </span>\r\n </cura-button-transparent>\r\n\r\n <cura-button size=\"medium\" color=\"primary\" fontColor=\"light\" background=\"light\" textAlign=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\r\n </div>\r\n } @else {\r\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\r\n }\r\n</div>\r\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CuraHeadingComponent, selector: "cura-heading", inputs: ["level", "size", "weight", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraInputTextComponent, selector: "cura-input-text", inputs: ["mode", "status", "size", "type", "inputMode", "label", "name", "placeholder", "value", "iconName", "disabled", "required", "maskPreset", "enableSelectionMode", "maskRegex", "maskAdvanced", "maxlength", "readOnly", "isLoading", "clearIcon", "hideErrorIcon", "autocomplete"], outputs: ["valueChange", "inputClear"] }, { kind: "component", type: CuraSelectComponent, selector: "cura-select", inputs: ["name", "label", "placeholder", "value", "mode", "size", "iconName", "status", "disabled", "required", "searchBehavior", "caseSensitive", "maxHeight"], outputs: ["valueChange", "selected", "searchTermInput"] }, { kind: "component", type: CuraSelectOptionComponent, selector: "cura-select-option", inputs: ["value", "selected", "active", "size", "visible"], outputs: ["selectedChange", "activeChange", "sizeChange", "visibleChange"] }, { kind: "component", type: CuraIconComponent, selector: "cura-icon", inputs: ["name", "color", "size", "iconset", "disabled", "label"] }, { kind: "component", type: CuraParagraphComponent, selector: "cura-paragraph", inputs: ["size", "spotColor", "color", "marginBlock", "lineHeight", "textOverflow"] }, { kind: "component", type: CuraCheckboxComponent, selector: "cura-checkbox", inputs: ["disableCheckIcon", "checked", "indeterminate", "status", "disabled", "required", "label", "ontabindex", "position", "value", "name", "size", "background", "iconColor", "color", "overflowLabel", "overflowHelper"], outputs: ["checkedChange", "indeterminateChange", "valueChange", "onchange"] }, { kind: "component", type: CuraButtonTransparentComponent, selector: "cura-button-transparent", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraButtonComponent, selector: "cura-button", inputs: ["type", "size", "disabled", "isLoading", "iconName", "iconset", "iconPosition", "iconOnly", "href", "target", "color", "background", "fontColor", "textAlign", "justify", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: CuraLoaderCircleComponent, selector: "cura-loader-circle", inputs: ["size", "color"] }] }); }
109
109
  }
110
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterPlanosConveniosComponent, decorators: [{
111
111
  type: Component,
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
147
147
  type: HostBinding,
148
148
  args: ['style']
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1wbGFub3MtY29udmVuaW9zL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFC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O3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVzdGFkb3MgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBsYW5vc0NvbnZlbmlvcywgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlLCBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5tb2RlbCc7XHJcbmltcG9ydCB7IEN1cmFBcGlTZXJ2aWNlIH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2FwaSc7XHJcbmltcG9ydCB7IEN1cmFIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL3RleHRzL2N1cmEtaGVhZGluZyc7XHJcbmltcG9ydCB7IEN1cmFJbnB1dFRleHRDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1pbnB1dC10ZXh0JztcclxuaW1wb3J0IHsgQ3VyYVNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLXNlbGVjdCc7XHJcbmltcG9ydCB7IEN1cmFTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1zZWxlY3Qtb3B0aW9uJztcclxuaW1wb3J0IHsgQ3VyYUljb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvaWNvbnMvY3VyYS1pY29uJztcclxuaW1wb3J0IHsgQ3VyYVBhcmFncmFwaENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci90ZXh0cy9jdXJhLXBhcmFncmFwaCc7XHJcbmltcG9ydCB7IEN1cmFDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLWNoZWNrYm94JztcclxuaW1wb3J0IHsgQ3VyYUJ1dHRvblRyYW5zcGFyZW50Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2J1dHRvbnMvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQnO1xyXG5pbXBvcnQgeyBDdXJhQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2J1dHRvbnMvY3VyYS1idXR0b24nO1xyXG5pbXBvcnQgeyBDdXJhTG9hZGVyQ2lyY2xlQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2xvYWRlcnMvY3VyYS1sb2FkZXItY2lyY2xlJztcclxuXHJcbmludGVyZmFjZSBDdXJhQ2hlY2tib3hPcHRpb248VCA9IGFueT4ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmRzaXRlLWZpbHRlci1wbGFub3MtY29udmVuaW9zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBDdXJhSGVhZGluZ0NvbXBvbmVudCxcclxuICAgIEN1cmFJbnB1dFRleHRDb21wb25lbnQsXHJcbiAgICBDdXJhU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgQ3VyYVNlbGVjdE9wdGlvbkNvbXBvbmVudCxcclxuICAgIEN1cmFJY29uQ29tcG9uZW50LFxyXG4gICAgQ3VyYVBhcmFncmFwaENvbXBvbmVudCxcclxuICAgIEN1cmFDaGVja2JveENvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25Db21wb25lbnQsXHJcbiAgICBDdXJhTG9hZGVyQ2lyY2xlQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBASW5wdXQoKSB3aXRoQ29udGFpbmVyU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbWl0T25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgaW5pdGlhbEVzdGFkbzogRXN0YWRvcyB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBlc3RhZG9zOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NbXSA9IE9iamVjdC5lbnRyaWVzKEVzdGFkb3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xyXG4gICAgbGFiZWw6IHZhbHVlLFxyXG4gICAgdmFsdWU6IGtleSxcclxuICB9KSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvYmVydHVyYXM6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NvYmVydHVyYVtdID0gW1xyXG4gICAgeyBsYWJlbDogJ0NvbnN1bHRhcycsIHZhbHVlOiAnRkxBR19BQ0VJVEFfQU1CVUxBVE9SSU8nLCBjaGVja2VkOiBmYWxzZSB9LFxyXG4gICAgeyBsYWJlbDogJ0VtZXJnw6puY2lhJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9QUycsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnRXhhbWVzJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9FWEFNRScsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnSW50ZXJuYcOnw6NvJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9JTlRFUk5BQ0FPJywgY2hlY2tlZDogZmFsc2UgfSxcclxuICBdO1xyXG5cclxuICBASW5wdXQoKSB1bmlkYWRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPignJyk7XHJcbiAgQElucHV0KCkgZXN0YWRvQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxFc3RhZG9zIHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4oJycpO1xyXG4gIGNvYmVydHVyYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhW10+KHRoaXMuY29iZXJ0dXJhcyB8fCBbXSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1uZXV0cmFsLWRhcmtlcic6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWRhcmtlcicpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodCc6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWxpZ2h0JyksXHJcbiAgICAnLS1uZXV0cmFsLWxpZ2h0ZXInOiB0aGlzLmN1cmFTZXJ2aWNlLnRoZW1lLmNvbG9ycy5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXHJcbiAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY3VyYVNlcnZpY2U6IEN1cmFBcGlTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsRXN0YWRvICYmIEFycmF5LmlzQXJyYXkodGhpcy5lc3RhZG9zKSAmJiB0aGlzLmVzdGFkb3MuZmluZCgoZXN0YWRvKSA9PiBlc3RhZG8udmFsdWUgPT09IHRoaXMuaW5pdGlhbEVzdGFkbykpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKHRoaXMuaW5pdGlhbEVzdGFkbyk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRUZXh0Q2hhbmdlKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfSkge1xyXG4gICAgdGhpcy51bmlkYWRlQ29udHJvbC5zZXRWYWx1ZShldmVudC52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5lbWl0T25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgdW5pZGFkZTogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgZXN0YWRvOiB0aGlzLmVzdGFkb0NvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcclxuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcclxuICAgICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICAgIGVzdGFkbzogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tib3hDaGFuZ2UoZXZlbnQ6IEN1cmFDaGVja2JveE9wdGlvbjxzdHJpbmc+KSB7XHJcbiAgICBpZiAoIXRoaXMuY29iZXJ0dXJhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgY3Vyck9wdGlvbjogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhIHwgdW5kZWZpbmVkID0gdGhpcy5jb2JlcnR1cmFzLmZpbmQoXHJcbiAgICAgIChvcHRpb246IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NvYmVydHVyYSkgPT4gb3B0aW9uLnZhbHVlID09IGV2ZW50LnZhbHVlLFxyXG4gICAgKTtcclxuICAgIGlmIChjdXJyT3B0aW9uKSB7XHJcbiAgICAgIGN1cnJPcHRpb24uY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvYmVydHVyYUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jb2JlcnR1cmFzKTtcclxuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcclxuICAgICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICAgIGVzdGFkbzogdGhpcy5lc3RhZG9Db250cm9sLnZhbHVlLFxyXG4gICAgICAgIGNvYmVydHVyYTogdGhpcy5jb2JlcnR1cmFDb250cm9sLnZhbHVlIHx8IFtdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xyXG4gICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcclxuICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGFzQ292ZXJhZ2UgPSB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUhLnNvbWUoKGNvYikgPT4gY29iLmNoZWNrZWQpO1xyXG4gICAgY29uc3QgaGFzRmlsdGVyID0gQm9vbGVhbih0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlKSB8fCBCb29sZWFuKHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSkgfHwgQm9vbGVhbihoYXNDb3ZlcmFnZSk7XHJcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCghaGFzRmlsdGVyKTtcclxuICAgIHRoaXMudW5pZGFkZUNvbnRyb2wucmVzZXQoJycpO1xyXG4gICAgdGhpcy5lc3RhZG9Db250cm9sLnJlc2V0KCcnKTtcclxuICAgIHRoaXMuY29iZXJ0dXJhcy5mb3JFYWNoKChjb2JlcnR1cmEpID0+IChjb2JlcnR1cmEuY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLmNvYmVydHVyYUNvbnRyb2wucmVzZXQodGhpcy5jb2JlcnR1cmFzKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zXCIgW25nQ2xhc3NdPVwieyAnY29udGFpbmVyLXN0eWxlJzogd2l0aENvbnRhaW5lclN0eWxlIH1cIj5cclxuICBAaWYgKCFpc0xvYWRpbmcpIHtcclxuICAgIDxjdXJhLWhlYWRpbmcgc2l6ZT1cInNtYWxsXCIgW2xldmVsXT1cIjRcIiB3ZWlnaHQ9XCJib2xkXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luQmxvY2s9XCIwXCIgbGluZUhlaWdodD1cIjE2cHhcIj4gUmVmaW5lIHN1YSBidXNjYSA8L2N1cmEtaGVhZGluZz5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtdW5pZGFkZVwiPlxyXG4gICAgICA8Y3VyYS1pbnB1dC10ZXh0XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lIGRhIHVuaWRhZGVcIlxyXG4gICAgICAgIG5hbWU9XCJ1bmlkYWRlLWlucHV0XCJcclxuICAgICAgICBpY29uTmFtZT1cInNlYXJjaFwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbdmFsdWVdPVwidW5pZGFkZUNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJpbnB1dFRleHRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L2N1cmEtaW5wdXQtdGV4dD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1lc3RhZG9cIj5cclxuICAgICAgQGlmIChlc3RhZG9zKSB7XHJcbiAgICAgICAgPGN1cmEtc2VsZWN0XHJcbiAgICAgICAgICBsYWJlbD1cIlNlbGVjaW9uZSBvIGVzdGFkb1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZhw6dhIGEgc3VhIFNlbGXDp8Ojb1wiXHJcbiAgICAgICAgICBtb2RlPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgIHN0YXR1cz1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImVzdGFkb0NvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPkZhw6dhIGEgc3VhIFNlbGXDp8OjbzwvY3VyYS1zZWxlY3Qtb3B0aW9uPlxyXG5cclxuICAgICAgICAgIEBmb3IgKGVzdGFkbyBvZiBlc3RhZG9zIHx8IFtdOyB0cmFjayBlc3RhZG8/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cImVzdGFkbz8udmFsdWVcIj57eyBlc3RhZG8/LmxhYmVsIH19PC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9jdXJhLXNlbGVjdD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zLWNvYmVydHVyYVwiPlxyXG4gICAgICA8Y3VyYS1pY29uIG5hbWU9XCJmaWx0ZXJcIiBzaXplPVwiMjBcIiBjb2xvcj1cImluZm8tZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBbbGV2ZWxdPVwiNVwiIHdlaWdodD1cImJvbGRcIiBjb2xvcj1cIm5ldXRyYWwtYmxhY2tcIiBtYXJnaW5CbG9jaz1cIjBcIiBsaW5lSGVpZ2h0PVwiMTZweFwiPlxyXG4gICAgICAgIEZpbHRyZSBwZWxhIGNvYmVydHVyYSBkbyBzZXUgcGxhbm9cclxuICAgICAgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY29udGVudFwiPlxyXG4gICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBbbGV2ZWxdPVwiNVwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+IFRpcG9zIGRlIGNvYmVydHVyYSA8L2N1cmEtaGVhZGluZz5cclxuICAgICAgPGN1cmEtcGFyYWdyYXBoIHNpemU9XCJ4c21hbGxcIiBjb2xvcj1cIm5ldXRyYWwtZGFya1wiIG1hcmdpbkJsb2NrPVwiMFwiPlxyXG4gICAgICAgIFZvY8OqIHBvZGUgc2VsZWNpb25hciB1bWEgb3UgbWFpcyBwb3J0YXMgZGUgZW50cmFkYSwgZGUgYWNvcmRvIGNvbSBhIGNvYmVydHVyYSBkbyBzZXUgcGxhbm8uXHJcbiAgICAgIDwvY3VyYS1wYXJhZ3JhcGg+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY2hlY2tib3hlc1wiPlxyXG4gICAgICBAZm9yIChvcHRpb24gb2YgY29iZXJ0dXJhcyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgIDxjdXJhLWNoZWNrYm94XHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgIGljb25Db2xvcj1cImxpZ2h0XCJcclxuICAgICAgICAgIFtuYW1lXT1cIm9wdGlvbj8ubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbj8ubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWUgfHwgJydcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiISFvcHRpb24/LmNoZWNrZWRcIlxyXG4gICAgICAgICAgKG9uY2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2N1cmEtY2hlY2tib3g+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1idXR0b25zXCI+XHJcbiAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiBmb250Q29sb3I9XCJkYXJrXCIgdGV4dEFsaWduPVwiY2VudGVyXCIgKGNsaWNrKT1cInJlc2V0KClcIj5cclxuICAgICAgICA8c3Bhbj4gTGltcGFyIHRvZG9zIG9zIGZpbHRyb3MgPC9zcGFuPlxyXG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG5cclxuICAgICAgPGN1cmEtYnV0dG9uIHNpemU9XCJtZWRpdW1cIiBjb2xvcj1cInByaW1hcnlcIiBmb250Q29sb3I9XCJsaWdodFwiIGJhY2tncm91bmQ9XCJsaWdodFwiIHRleHRBbGlnbj1cImNlbnRlclwiIChjbGljayk9XCJmaWx0ZXIoKVwiPiBGaWx0cmFyIDwvY3VyYS1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICB9IEBlbHNlIHtcclxuICAgIDxjdXJhLWxvYWRlci1jaXJjbGUgY29sb3I9XCJwcmltYXJ5XCIgc2l6ZT1cInNtYWxsXCI+IDwvY3VyYS1sb2FkZXItY2lyY2xlPlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1wbGFub3MtY29udmVuaW9zL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFC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O3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVzdGFkb3MgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBsYW5vc0NvbnZlbmlvcywgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlLCBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5tb2RlbCc7XHJcbmltcG9ydCB7IEN1cmFBcGlTZXJ2aWNlIH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2FwaSc7XHJcbmltcG9ydCB7IEN1cmFIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL3RleHRzL2N1cmEtaGVhZGluZyc7XHJcbmltcG9ydCB7IEN1cmFJbnB1dFRleHRDb21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1pbnB1dC10ZXh0JztcclxuaW1wb3J0IHsgQ3VyYVNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLXNlbGVjdCc7XHJcbmltcG9ydCB7IEN1cmFTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvZm9ybXMvY3VyYS1zZWxlY3Qtb3B0aW9uJztcclxuaW1wb3J0IHsgQ3VyYUljb25Db21wb25lbnQgfSBmcm9tICdAcmVkZWRvci9jdXJhLWFuZ3VsYXIvaWNvbnMvY3VyYS1pY29uJztcclxuaW1wb3J0IHsgQ3VyYVBhcmFncmFwaENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci90ZXh0cy9jdXJhLXBhcmFncmFwaCc7XHJcbmltcG9ydCB7IEN1cmFDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0ByZWRlZG9yL2N1cmEtYW5ndWxhci9mb3Jtcy9jdXJhLWNoZWNrYm94JztcclxuaW1wb3J0IHsgQ3VyYUJ1dHRvblRyYW5zcGFyZW50Q29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2J1dHRvbnMvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQnO1xyXG5pbXBvcnQgeyBDdXJhQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2J1dHRvbnMvY3VyYS1idXR0b24nO1xyXG5pbXBvcnQgeyBDdXJhTG9hZGVyQ2lyY2xlQ29tcG9uZW50IH0gZnJvbSAnQHJlZGVkb3IvY3VyYS1hbmd1bGFyL2xvYWRlcnMvY3VyYS1sb2FkZXItY2lyY2xlJztcclxuXHJcbmludGVyZmFjZSBDdXJhQ2hlY2tib3hPcHRpb248VCA9IGFueT4ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmRzaXRlLWZpbHRlci1wbGFub3MtY29udmVuaW9zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBDdXJhSGVhZGluZ0NvbXBvbmVudCxcclxuICAgIEN1cmFJbnB1dFRleHRDb21wb25lbnQsXHJcbiAgICBDdXJhU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgQ3VyYVNlbGVjdE9wdGlvbkNvbXBvbmVudCxcclxuICAgIEN1cmFJY29uQ29tcG9uZW50LFxyXG4gICAgQ3VyYVBhcmFncmFwaENvbXBvbmVudCxcclxuICAgIEN1cmFDaGVja2JveENvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25UcmFuc3BhcmVudENvbXBvbmVudCxcclxuICAgIEN1cmFCdXR0b25Db21wb25lbnQsXHJcbiAgICBDdXJhTG9hZGVyQ2lyY2xlQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBASW5wdXQoKSB3aXRoQ29udGFpbmVyU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbWl0T25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgaW5pdGlhbEVzdGFkbzogRXN0YWRvcyB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBlc3RhZG9zOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NbXSA9IE9iamVjdC5lbnRyaWVzKEVzdGFkb3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xyXG4gICAgbGFiZWw6IHZhbHVlLFxyXG4gICAgdmFsdWU6IGtleSxcclxuICB9KSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvYmVydHVyYXM6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NvYmVydHVyYVtdID0gW1xyXG4gICAgeyBsYWJlbDogJ0NvbnN1bHRhcycsIHZhbHVlOiAnRkxBR19BQ0VJVEFfQU1CVUxBVE9SSU8nLCBjaGVja2VkOiBmYWxzZSB9LFxyXG4gICAgeyBsYWJlbDogJ0VtZXJnw6puY2lhJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9QUycsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnRXhhbWVzJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9FWEFNRScsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnSW50ZXJuYcOnw6NvJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9JTlRFUk5BQ0FPJywgY2hlY2tlZDogZmFsc2UgfSxcclxuICBdO1xyXG5cclxuICBASW5wdXQoKSB1bmlkYWRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPignJyk7XHJcbiAgQElucHV0KCkgZXN0YWRvQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxFc3RhZG9zIHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4oJycpO1xyXG4gIGNvYmVydHVyYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhW10+KHRoaXMuY29iZXJ0dXJhcyB8fCBbXSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1uZXV0cmFsLWRhcmtlcic6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWRhcmtlcicpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodCc6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLWxpZ2h0JyksXHJcbiAgICAnLS1uZXV0cmFsLWxpZ2h0ZXInOiB0aGlzLmN1cmFTZXJ2aWNlLnRoZW1lLmNvbG9ycy5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXHJcbiAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYVNlcnZpY2UudGhlbWUuY29sb3JzLmdldENvbG9yKCduZXV0cmFsLXB1cmV3aGl0ZScpLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY3VyYVNlcnZpY2U6IEN1cmFBcGlTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsRXN0YWRvICYmIEFycmF5LmlzQXJyYXkodGhpcy5lc3RhZG9zKSAmJiB0aGlzLmVzdGFkb3MuZmluZCgoZXN0YWRvKSA9PiBlc3RhZG8udmFsdWUgPT09IHRoaXMuaW5pdGlhbEVzdGFkbykpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKHRoaXMuaW5pdGlhbEVzdGFkbyk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRUZXh0Q2hhbmdlKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfSkge1xyXG4gICAgdGhpcy51bmlkYWRlQ29udHJvbC5zZXRWYWx1ZShldmVudC52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5lbWl0T25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgdW5pZGFkZTogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgZXN0YWRvOiB0aGlzLmVzdGFkb0NvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKGV2ZW50LnZhbHVlKTtcclxuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcclxuICAgICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICAgIGVzdGFkbzogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tib3hDaGFuZ2UoZXZlbnQ6IEN1cmFDaGVja2JveE9wdGlvbjxzdHJpbmc+KSB7XHJcbiAgICBpZiAoIXRoaXMuY29iZXJ0dXJhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgY3Vyck9wdGlvbjogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhIHwgdW5kZWZpbmVkID0gdGhpcy5jb2JlcnR1cmFzLmZpbmQoXHJcbiAgICAgIChvcHRpb246IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NvYmVydHVyYSkgPT4gb3B0aW9uLnZhbHVlID09IGV2ZW50LnZhbHVlLFxyXG4gICAgKTtcclxuICAgIGlmIChjdXJyT3B0aW9uKSB7XHJcbiAgICAgIGN1cnJPcHRpb24uY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvYmVydHVyYUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jb2JlcnR1cmFzKTtcclxuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcclxuICAgICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICAgIGVzdGFkbzogdGhpcy5lc3RhZG9Db250cm9sLnZhbHVlLFxyXG4gICAgICAgIGNvYmVydHVyYTogdGhpcy5jb2JlcnR1cmFDb250cm9sLnZhbHVlIHx8IFtdLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xyXG4gICAgICB1bmlkYWRlOiB0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlLFxyXG4gICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcclxuICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGFzQ292ZXJhZ2UgPSB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUhLnNvbWUoKGNvYikgPT4gY29iLmNoZWNrZWQpO1xyXG4gICAgY29uc3QgaGFzRmlsdGVyID0gQm9vbGVhbih0aGlzLnVuaWRhZGVDb250cm9sLnZhbHVlKSB8fCBCb29sZWFuKHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSkgfHwgQm9vbGVhbihoYXNDb3ZlcmFnZSk7XHJcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCghaGFzRmlsdGVyKTtcclxuICAgIHRoaXMudW5pZGFkZUNvbnRyb2wucmVzZXQoJycpO1xyXG4gICAgdGhpcy5lc3RhZG9Db250cm9sLnJlc2V0KCcnKTtcclxuICAgIHRoaXMuY29iZXJ0dXJhcy5mb3JFYWNoKChjb2JlcnR1cmEpID0+IChjb2JlcnR1cmEuY2hlY2tlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLmNvYmVydHVyYUNvbnRyb2wucmVzZXQodGhpcy5jb2JlcnR1cmFzKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zXCIgW25nQ2xhc3NdPVwieyAnY29udGFpbmVyLXN0eWxlJzogd2l0aENvbnRhaW5lclN0eWxlIH1cIj5cclxuICBAaWYgKCFpc0xvYWRpbmcpIHtcclxuICAgIDxjdXJhLWhlYWRpbmcgc2l6ZT1cInNtYWxsXCIgW2xldmVsXT1cIjRcIiB3ZWlnaHQ9XCJib2xkXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luQmxvY2s9XCIwXCIgbGluZUhlaWdodD1cIjE2cHhcIj4gUmVmaW5lIHN1YSBidXNjYSA8L2N1cmEtaGVhZGluZz5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtdW5pZGFkZVwiPlxyXG4gICAgICA8Y3VyYS1pbnB1dC10ZXh0XHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lIGRhIHVuaWRhZGVcIlxyXG4gICAgICAgIG5hbWU9XCJ1bmlkYWRlLWlucHV0XCJcclxuICAgICAgICBpY29uTmFtZT1cInNlYXJjaFwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICBbdmFsdWVdPVwidW5pZGFkZUNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJpbnB1dFRleHRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L2N1cmEtaW5wdXQtdGV4dD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1lc3RhZG9cIj5cclxuICAgICAgQGlmIChlc3RhZG9zKSB7XHJcbiAgICAgICAgPGN1cmEtc2VsZWN0XHJcbiAgICAgICAgICBsYWJlbD1cIlNlbGVjaW9uZSBvIGVzdGFkb1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZhw6dhIGEgc3VhIFNlbGXDp8Ojb1wiXHJcbiAgICAgICAgICBtb2RlPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgIHN0YXR1cz1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImVzdGFkb0NvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPkZhw6dhIGEgc3VhIFNlbGXDp8OjbzwvY3VyYS1zZWxlY3Qtb3B0aW9uPlxyXG5cclxuICAgICAgICAgIEBmb3IgKGVzdGFkbyBvZiBlc3RhZG9zIHx8IFtdOyB0cmFjayBlc3RhZG8/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cImVzdGFkbz8udmFsdWVcIj57eyBlc3RhZG8/LmxhYmVsIH19PC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9jdXJhLXNlbGVjdD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zLWNvYmVydHVyYVwiPlxyXG4gICAgICA8Y3VyYS1pY29uIG5hbWU9XCJmaWx0ZXJcIiBzaXplPVwiMjBcIiBjb2xvcj1cImluZm8tZGFya1wiPjwvY3VyYS1pY29uPlxyXG4gICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBbbGV2ZWxdPVwiNVwiIHdlaWdodD1cImJvbGRcIiBjb2xvcj1cIm5ldXRyYWwtYmxhY2tcIiBtYXJnaW5CbG9jaz1cIjBcIiBsaW5lSGVpZ2h0PVwiMTZweFwiPlxyXG4gICAgICAgIEZpbHRyZSBwZWxhIGNvYmVydHVyYSBkbyBzZXUgcGxhbm9cclxuICAgICAgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY29udGVudFwiPlxyXG4gICAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJ4c21hbGxcIiBbbGV2ZWxdPVwiNVwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbkJsb2NrPVwiMFwiIGxpbmVIZWlnaHQ9XCIxNnB4XCI+IFRpcG9zIGRlIGNvYmVydHVyYSA8L2N1cmEtaGVhZGluZz5cclxuICAgICAgPGN1cmEtcGFyYWdyYXBoIHNpemU9XCJ4c21hbGxcIiBjb2xvcj1cIm5ldXRyYWwtZGFya1wiIG1hcmdpbkJsb2NrPVwiMFwiPlxyXG4gICAgICAgIFZvY8OqIHBvZGUgc2VsZWNpb25hciB1bWEgb3UgbWFpcyBwb3J0YXMgZGUgZW50cmFkYSwgZGUgYWNvcmRvIGNvbSBhIGNvYmVydHVyYSBkbyBzZXUgcGxhbm8uXHJcbiAgICAgIDwvY3VyYS1wYXJhZ3JhcGg+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY2hlY2tib3hlc1wiPlxyXG4gICAgICBAZm9yIChvcHRpb24gb2YgY29iZXJ0dXJhcyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xyXG4gICAgICAgIDxjdXJhLWNoZWNrYm94XHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgIGljb25Db2xvcj1cImxpZ2h0XCJcclxuICAgICAgICAgIFtuYW1lXT1cIm9wdGlvbj8ubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbj8ubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWUgfHwgJydcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiISFvcHRpb24/LmNoZWNrZWRcIlxyXG4gICAgICAgICAgKG9uY2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2N1cmEtY2hlY2tib3g+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1idXR0b25zXCI+XHJcbiAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiBmb250Q29sb3I9XCJkYXJrXCIgdGV4dEFsaWduPVwiY2VudGVyXCIgKGNsaWNrKT1cInJlc2V0KClcIj5cclxuICAgICAgICA8c3Bhbj4gTGltcGFyIHRvZG9zIG9zIGZpbHRyb3MgPC9zcGFuPlxyXG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxyXG5cclxuICAgICAgPGN1cmEtYnV0dG9uIHNpemU9XCJtZWRpdW1cIiBjb2xvcj1cInByaW1hcnlcIiBmb250Q29sb3I9XCJsaWdodFwiIGJhY2tncm91bmQ9XCJsaWdodFwiIHRleHRBbGlnbj1cImNlbnRlclwiIChjbGljayk9XCJmaWx0ZXIoKVwiPiBGaWx0cmFyIDwvY3VyYS1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICB9IEBlbHNlIHtcclxuICAgIDxjdXJhLWxvYWRlci1jaXJjbGUgY29sb3I9XCJwcmltYXJ5XCIgc2l6ZT1cInNtYWxsXCI+IDwvY3VyYS1sb2FkZXItY2lyY2xlPlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==