@senior-gestao-relacionamento/angular-components 2.0.0-master-bc5a4d98 → 2.0.0-master-cf715f40
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.
|
@@ -705,7 +705,7 @@ export class ScheduleFormComponent {
|
|
|
705
705
|
return getDefaultEndTime(st);
|
|
706
706
|
}
|
|
707
707
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ScheduleService }, { token: i3.ScheduleTypeService }, { token: i4.CurrentCollaboratorService }, { token: i5.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
708
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScheduleFormComponent, isStandalone: true, selector: "s-schedule-form", inputs: { visible: "visible", selectedDate: "selectedDate" }, outputs: { visibleChange: "visibleChange", saved: "saved" }, viewQueries: [{ propertyName: "detailFormComponent", first: true, predicate: ["detailForm"], descendants: true }], ngImport: i0, template: "<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n styleClass=\"schedule-drawer\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.schedule_cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.schedule_save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n", styles: [":host ::ng-deep .schedule-drawer{width:85vw;max-width:1200px}.col-participant-type{width:10rem}.col-actions{width:4rem}.drawer-title{display:flex;align-items:center;gap:.75rem;font-size:1.15rem;font-weight:600;color:var(--p-text-color)}.drawer-title i{color:var(--p-primary-color)}.drawer-layout{display:flex;gap:0;height:100%}.drawer-left{width:380px;min-width:380px;border-right:1px solid var(--p-surface-200);padding:0 1.5rem 1.5rem 0;overflow-y:auto}.drawer-right{flex:1;padding:0 0 0 1.5rem;overflow-y:auto}.drawer-section-header{display:flex;align-items:center;gap:.5rem;padding-bottom:1rem;margin-bottom:1rem;border-bottom:1px solid var(--p-surface-200);font-weight:600;font-size:.95rem;color:var(--p-text-color)}.drawer-section-header i{color:var(--p-primary-color);font-size:1rem}.drawer-form{display:flex;flex-direction:column;gap:1rem}.drawer-form .form-field{display:flex;flex-direction:column;gap:.375rem}.drawer-form .form-field label{font-weight:500;font-size:.8rem;color:var(--p-text-secondary-color);text-transform:uppercase;letter-spacing:.3px}.drawer-form .form-row{display:flex;gap:1rem}.drawer-form .form-row.checkboxes{gap:2rem;padding:.5rem 0}.drawer-form .form-check{display:flex;align-items:center;gap:.5rem}.drawer-form .form-check label{font-size:.875rem;font-weight:500;margin:0;text-transform:none;letter-spacing:0}.drawer-section{margin-bottom:1.5rem}.recurrence-description{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;padding:.75rem 1rem;background:var(--p-primary-50);border-left:3px solid var(--p-primary-color);border-radius:4px;font-size:.85rem;color:var(--p-text-color);line-height:1.4}.recurrence-description i{color:var(--p-primary-color);margin-top:.1rem;flex-shrink:0}.participants-empty{display:flex;flex-direction:column;align-items:center;padding:2rem;text-align:center;color:var(--p-text-secondary-color);border:1px dashed var(--p-surface-300);border-radius:8px}.participants-empty i{font-size:2rem;margin-bottom:.5rem;opacity:.4}.participants-empty p{margin:0}.participant-name-cell{display:flex;align-items:center;gap:.5rem}.participant-type-cell{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--p-text-secondary-color)}.participant-type-cell i{font-size:.9rem}.drawer-footer{display:flex;gap:.75rem;justify-content:flex-end}.participant-search{margin-bottom:1rem}.participant-search :host ::ng-deep .p-autocomplete{width:100%;display:flex}.participant-search :host ::ng-deep .p-autocomplete-input{width:100%}.participant-suggestion{display:flex;align-items:center;gap:.75rem;padding:.25rem 0}.participant-suggestion i{font-size:1.1rem;color:var(--p-text-secondary-color)}.participant-suggestion-info{display:flex;flex-direction:column;flex:1;min-width:0}.participant-suggestion-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.participant-suggestion-detail{font-size:.8rem;color:var(--p-text-secondary-color)}.participant-suggestion-origin{font-size:.75rem;color:var(--p-text-secondary-color);white-space:nowrap}.participant-reference{font-size:.8rem;color:var(--p-text-secondary-color);margin-left:.25rem}.detail-dialog-body{display:flex;flex-direction:column;gap:.5rem}.detail-dialog-row{display:flex;align-items:center;gap:.75rem;padding:.4rem 0}.detail-label{font-weight:500;color:var(--p-text-secondary-color);min-width:8rem}@media (max-width: 768px){.drawer-layout{flex-direction:column}.drawer-left{width:100%;min-width:100%;border-right:none;border-bottom:1px solid var(--p-surface-200);padding:0 0 1.5rem}.drawer-right{padding:1.5rem 0 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i9.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i11.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i12.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i14.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i16.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: DynamicFormComponent, selector: "sia-dynamic-form", inputs: ["sections", "entityData", "mode", "displayMode", "visible", "dialogConfig", "drawerConfig", "showSubmitButton", "showCancelButton", "submitButtonLabel", "cancelButtonLabel", "submitButtonIcon", "cancelButtonIcon"], outputs: ["formReady", "formSubmit", "visibleChange", "onCancel", "fieldSave"] }] });
|
|
708
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScheduleFormComponent, isStandalone: true, selector: "s-schedule-form", inputs: { visible: "visible", selectedDate: "selectedDate" }, outputs: { visibleChange: "visibleChange", saved: "saved" }, viewQueries: [{ propertyName: "detailFormComponent", first: true, predicate: ["detailForm"], descendants: true }], ngImport: i0, template: "<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n [style]=\"{ width: '85vw', 'max-width': '1200px' }\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n", styles: [".col-participant-type{width:10rem}.col-actions{width:4rem}.drawer-title{display:flex;align-items:center;gap:.75rem;font-size:1.15rem;font-weight:600;color:var(--p-text-color)}.drawer-title i{color:var(--p-primary-color)}.drawer-layout{display:flex;gap:0;height:100%}.drawer-left{width:380px;min-width:380px;border-right:1px solid var(--p-surface-200);padding:0 1.5rem 1.5rem 0;overflow-y:auto}.drawer-right{flex:1;padding:0 0 0 1.5rem;overflow-y:auto}.drawer-section-header{display:flex;align-items:center;gap:.5rem;padding-bottom:1rem;margin-bottom:1rem;border-bottom:1px solid var(--p-surface-200);font-weight:600;font-size:.95rem;color:var(--p-text-color)}.drawer-section-header i{color:var(--p-primary-color);font-size:1rem}.drawer-form{display:flex;flex-direction:column;gap:1rem}.drawer-form .form-field{display:flex;flex-direction:column;gap:.375rem}.drawer-form .form-field label{font-weight:500;font-size:.8rem;color:var(--p-text-secondary-color);text-transform:uppercase;letter-spacing:.3px}.drawer-form .form-row{display:flex;gap:1rem}.drawer-form .form-row.checkboxes{gap:2rem;padding:.5rem 0}.drawer-form .form-check{display:flex;align-items:center;gap:.5rem}.drawer-form .form-check label{font-size:.875rem;font-weight:500;margin:0;text-transform:none;letter-spacing:0}.drawer-section{margin-bottom:1.5rem}.recurrence-description{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;padding:.75rem 1rem;background:var(--p-primary-50);border-left:3px solid var(--p-primary-color);border-radius:4px;font-size:.85rem;color:var(--p-text-color);line-height:1.4}.recurrence-description i{color:var(--p-primary-color);margin-top:.1rem;flex-shrink:0}.participants-empty{display:flex;flex-direction:column;align-items:center;padding:2rem;text-align:center;color:var(--p-text-secondary-color);border:1px dashed var(--p-surface-300);border-radius:8px}.participants-empty i{font-size:2rem;margin-bottom:.5rem;opacity:.4}.participants-empty p{margin:0}.participant-name-cell{display:flex;align-items:center;gap:.5rem}.participant-type-cell{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--p-text-secondary-color)}.participant-type-cell i{font-size:.9rem}.drawer-footer{display:flex;gap:.75rem;justify-content:flex-end}.participant-search{margin-bottom:1rem}.participant-search :host ::ng-deep .p-autocomplete{width:100%;display:flex}.participant-search :host ::ng-deep .p-autocomplete-input{width:100%}.participant-suggestion{display:flex;align-items:center;gap:.75rem;padding:.25rem 0}.participant-suggestion i{font-size:1.1rem;color:var(--p-text-secondary-color)}.participant-suggestion-info{display:flex;flex-direction:column;flex:1;min-width:0}.participant-suggestion-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.participant-suggestion-detail{font-size:.8rem;color:var(--p-text-secondary-color)}.participant-suggestion-origin{font-size:.75rem;color:var(--p-text-secondary-color);white-space:nowrap}.participant-reference{font-size:.8rem;color:var(--p-text-secondary-color);margin-left:.25rem}.detail-dialog-body{display:flex;flex-direction:column;gap:.5rem}.detail-dialog-row{display:flex;align-items:center;gap:.75rem;padding:.4rem 0}.detail-label{font-weight:500;color:var(--p-text-secondary-color);min-width:8rem}@media (max-width: 768px){.drawer-layout{flex-direction:column}.drawer-left{width:100%;min-width:100%;border-right:none;border-bottom:1px solid var(--p-surface-200);padding:0 0 1.5rem}.drawer-right{padding:1.5rem 0 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i9.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i11.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i12.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i14.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i16.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "variant", "fluid"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: DynamicFormComponent, selector: "sia-dynamic-form", inputs: ["sections", "entityData", "mode", "displayMode", "visible", "dialogConfig", "drawerConfig", "showSubmitButton", "showCancelButton", "submitButtonLabel", "cancelButtonLabel", "submitButtonIcon", "cancelButtonIcon"], outputs: ["formReady", "formSubmit", "visibleChange", "onCancel", "fieldSave"] }] });
|
|
709
709
|
}
|
|
710
710
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScheduleFormComponent, decorators: [{
|
|
711
711
|
type: Component,
|
|
@@ -715,7 +715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
715
715
|
InputNumberModule, MultiSelectModule, TagModule, TooltipModule,
|
|
716
716
|
DividerModule, TableModule, AutoCompleteModule,
|
|
717
717
|
TranslatePipe, DynamicFormComponent
|
|
718
|
-
], template: "<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n styleClass=\"schedule-drawer\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.schedule_cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.schedule_save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n", styles: [":host ::ng-deep .schedule-drawer{width:85vw;max-width:1200px}.col-participant-type{width:10rem}.col-actions{width:4rem}.drawer-title{display:flex;align-items:center;gap:.75rem;font-size:1.15rem;font-weight:600;color:var(--p-text-color)}.drawer-title i{color:var(--p-primary-color)}.drawer-layout{display:flex;gap:0;height:100%}.drawer-left{width:380px;min-width:380px;border-right:1px solid var(--p-surface-200);padding:0 1.5rem 1.5rem 0;overflow-y:auto}.drawer-right{flex:1;padding:0 0 0 1.5rem;overflow-y:auto}.drawer-section-header{display:flex;align-items:center;gap:.5rem;padding-bottom:1rem;margin-bottom:1rem;border-bottom:1px solid var(--p-surface-200);font-weight:600;font-size:.95rem;color:var(--p-text-color)}.drawer-section-header i{color:var(--p-primary-color);font-size:1rem}.drawer-form{display:flex;flex-direction:column;gap:1rem}.drawer-form .form-field{display:flex;flex-direction:column;gap:.375rem}.drawer-form .form-field label{font-weight:500;font-size:.8rem;color:var(--p-text-secondary-color);text-transform:uppercase;letter-spacing:.3px}.drawer-form .form-row{display:flex;gap:1rem}.drawer-form .form-row.checkboxes{gap:2rem;padding:.5rem 0}.drawer-form .form-check{display:flex;align-items:center;gap:.5rem}.drawer-form .form-check label{font-size:.875rem;font-weight:500;margin:0;text-transform:none;letter-spacing:0}.drawer-section{margin-bottom:1.5rem}.recurrence-description{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;padding:.75rem 1rem;background:var(--p-primary-50);border-left:3px solid var(--p-primary-color);border-radius:4px;font-size:.85rem;color:var(--p-text-color);line-height:1.4}.recurrence-description i{color:var(--p-primary-color);margin-top:.1rem;flex-shrink:0}.participants-empty{display:flex;flex-direction:column;align-items:center;padding:2rem;text-align:center;color:var(--p-text-secondary-color);border:1px dashed var(--p-surface-300);border-radius:8px}.participants-empty i{font-size:2rem;margin-bottom:.5rem;opacity:.4}.participants-empty p{margin:0}.participant-name-cell{display:flex;align-items:center;gap:.5rem}.participant-type-cell{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--p-text-secondary-color)}.participant-type-cell i{font-size:.9rem}.drawer-footer{display:flex;gap:.75rem;justify-content:flex-end}.participant-search{margin-bottom:1rem}.participant-search :host ::ng-deep .p-autocomplete{width:100%;display:flex}.participant-search :host ::ng-deep .p-autocomplete-input{width:100%}.participant-suggestion{display:flex;align-items:center;gap:.75rem;padding:.25rem 0}.participant-suggestion i{font-size:1.1rem;color:var(--p-text-secondary-color)}.participant-suggestion-info{display:flex;flex-direction:column;flex:1;min-width:0}.participant-suggestion-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.participant-suggestion-detail{font-size:.8rem;color:var(--p-text-secondary-color)}.participant-suggestion-origin{font-size:.75rem;color:var(--p-text-secondary-color);white-space:nowrap}.participant-reference{font-size:.8rem;color:var(--p-text-secondary-color);margin-left:.25rem}.detail-dialog-body{display:flex;flex-direction:column;gap:.5rem}.detail-dialog-row{display:flex;align-items:center;gap:.75rem;padding:.4rem 0}.detail-label{font-weight:500;color:var(--p-text-secondary-color);min-width:8rem}@media (max-width: 768px){.drawer-layout{flex-direction:column}.drawer-left{width:100%;min-width:100%;border-right:none;border-bottom:1px solid var(--p-surface-200);padding:0 0 1.5rem}.drawer-right{padding:1.5rem 0 0}}\n"] }]
|
|
718
|
+
], template: "<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n [style]=\"{ width: '85vw', 'max-width': '1200px' }\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n", styles: [".col-participant-type{width:10rem}.col-actions{width:4rem}.drawer-title{display:flex;align-items:center;gap:.75rem;font-size:1.15rem;font-weight:600;color:var(--p-text-color)}.drawer-title i{color:var(--p-primary-color)}.drawer-layout{display:flex;gap:0;height:100%}.drawer-left{width:380px;min-width:380px;border-right:1px solid var(--p-surface-200);padding:0 1.5rem 1.5rem 0;overflow-y:auto}.drawer-right{flex:1;padding:0 0 0 1.5rem;overflow-y:auto}.drawer-section-header{display:flex;align-items:center;gap:.5rem;padding-bottom:1rem;margin-bottom:1rem;border-bottom:1px solid var(--p-surface-200);font-weight:600;font-size:.95rem;color:var(--p-text-color)}.drawer-section-header i{color:var(--p-primary-color);font-size:1rem}.drawer-form{display:flex;flex-direction:column;gap:1rem}.drawer-form .form-field{display:flex;flex-direction:column;gap:.375rem}.drawer-form .form-field label{font-weight:500;font-size:.8rem;color:var(--p-text-secondary-color);text-transform:uppercase;letter-spacing:.3px}.drawer-form .form-row{display:flex;gap:1rem}.drawer-form .form-row.checkboxes{gap:2rem;padding:.5rem 0}.drawer-form .form-check{display:flex;align-items:center;gap:.5rem}.drawer-form .form-check label{font-size:.875rem;font-weight:500;margin:0;text-transform:none;letter-spacing:0}.drawer-section{margin-bottom:1.5rem}.recurrence-description{display:flex;align-items:flex-start;gap:.5rem;margin-top:1rem;padding:.75rem 1rem;background:var(--p-primary-50);border-left:3px solid var(--p-primary-color);border-radius:4px;font-size:.85rem;color:var(--p-text-color);line-height:1.4}.recurrence-description i{color:var(--p-primary-color);margin-top:.1rem;flex-shrink:0}.participants-empty{display:flex;flex-direction:column;align-items:center;padding:2rem;text-align:center;color:var(--p-text-secondary-color);border:1px dashed var(--p-surface-300);border-radius:8px}.participants-empty i{font-size:2rem;margin-bottom:.5rem;opacity:.4}.participants-empty p{margin:0}.participant-name-cell{display:flex;align-items:center;gap:.5rem}.participant-type-cell{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--p-text-secondary-color)}.participant-type-cell i{font-size:.9rem}.drawer-footer{display:flex;gap:.75rem;justify-content:flex-end}.participant-search{margin-bottom:1rem}.participant-search :host ::ng-deep .p-autocomplete{width:100%;display:flex}.participant-search :host ::ng-deep .p-autocomplete-input{width:100%}.participant-suggestion{display:flex;align-items:center;gap:.75rem;padding:.25rem 0}.participant-suggestion i{font-size:1.1rem;color:var(--p-text-secondary-color)}.participant-suggestion-info{display:flex;flex-direction:column;flex:1;min-width:0}.participant-suggestion-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.participant-suggestion-detail{font-size:.8rem;color:var(--p-text-secondary-color)}.participant-suggestion-origin{font-size:.75rem;color:var(--p-text-secondary-color);white-space:nowrap}.participant-reference{font-size:.8rem;color:var(--p-text-secondary-color);margin-left:.25rem}.detail-dialog-body{display:flex;flex-direction:column;gap:.5rem}.detail-dialog-row{display:flex;align-items:center;gap:.75rem;padding:.4rem 0}.detail-label{font-weight:500;color:var(--p-text-secondary-color);min-width:8rem}@media (max-width: 768px){.drawer-layout{flex-direction:column}.drawer-left{width:100%;min-width:100%;border-right:none;border-bottom:1px solid var(--p-surface-200);padding:0 0 1.5rem}.drawer-right{padding:1.5rem 0 0}}\n"] }]
|
|
719
719
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ScheduleService }, { type: i3.ScheduleTypeService }, { type: i4.CurrentCollaboratorService }, { type: i5.TranslationService }], propDecorators: { visible: [{
|
|
720
720
|
type: Input
|
|
721
721
|
}], selectedDate: [{
|
|
@@ -728,4 +728,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
728
728
|
type: ViewChild,
|
|
729
729
|
args: ['detailForm']
|
|
730
730
|
}] } });
|
|
731
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8s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QyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjO3dCQUN4RCxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYTt3QkFDOUQsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0I7d0JBQzlDLGFBQWEsRUFBRSxvQkFBb0I7cUJBQ3BDOzBOQUtRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUVrQixtQkFBbUI7c0JBQTNDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBJbnB1dE51bWJlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRudW1iZXInO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQsIER5bmFtaWNGb3JtRmllbGRDb25maWcsIFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcbmltcG9ydCB7IEN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvY3VycmVudC1jb2xsYWJvcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS10eXBlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVQYXJ0aWNpcGFudCB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJ0aWNpcGFudExvb2t1cCwgUGFydGljaXBhbnRPcmlnaW4gfSBmcm9tICcuLi9lbnRpdGllcy9wYXJ0aWNpcGFudC1sb29rdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZSB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLXR5cGUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIFNjaGVkdWxlUHJpb3JpdHksIFNjaGVkdWxlUmVjdXJyZW5jZSwgV2Vla0RheSwgUmVwZWF0V2hlbixcbiAgT3JkaW5hbFdlZWtEYXksIE1vbnRoXG59IGZyb20gJy4uL2VudW1zL3NjaGVkdWxlLmVudW1zJztcbmltcG9ydCB7XG4gIGZvcm1hdERhdGVUb1N0cmluZywgdG9EYXRlU3RyaW5nLCB0b1RpbWVTdHJpbmcsXG4gIGdldERlZmF1bHRTdGFydFRpbWUsIGdldERlZmF1bHRFbmRUaW1lLFxuICBnZXRDdXJyZW50V2Vla0RheSwgZ2V0Q3VycmVudE1vbnRoLCBnZXRPcmRpbmFsRm9yRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJzL3NjaGVkdWxlLWRhdGUuaGVscGVycyc7XG5pbXBvcnQge1xuICBnZXRPcmlnaW5MYWJlbCBhcyBfZ2V0T3JpZ2luTGFiZWwsIGdldE9yaWdpbkljb24gYXMgX2dldE9yaWdpbkljb24sXG4gIGdldFBhcnRpY2lwYW50TmFtZSBhcyBfZ2V0UGFydGljaXBhbnROYW1lLCBnZXRQYXJ0aWNpcGFudFR5cGUgYXMgX2dldFBhcnRpY2lwYW50VHlwZSxcbiAgZ2V0UGFydGljaXBhbnRUeXBlSWNvbiBhcyBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbiwgZ2V0UHJpb3JpdHlTZXZlcml0eSBhcyBfZ2V0UHJpb3JpdHlTZXZlcml0eSxcbiAgZ2V0UHJpb3JpdHlMYWJlbCBhcyBfZ2V0UHJpb3JpdHlMYWJlbCwgZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkgYXMgX2dldENvbmZpcm1hdGlvblNldmVyaXR5LFxuICBnZXRDb25maXJtYXRpb25MYWJlbCBhcyBfZ2V0Q29uZmlybWF0aW9uTGFiZWwsXG4gIFByaW9yaXR5U2V2ZXJpdHksIENvbmZpcm1hdGlvblNldmVyaXR5XG59IGZyb20gJy4uL2hlbHBlcnMvc2NoZWR1bGUtZGlzcGxheS5oZWxwZXJzJztcblxuLyoqIFMxMDk6IEV4dHJhY3QgbWFnaWMgbnVtYmVycyB0byBuYW1lZCBjb25zdGFudHMgKi9cbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDI1NTtcbmNvbnN0IERFQk9VTkNFX01TID0gNTAwO1xuY29uc3QgUEFSVElDSVBBTlRfU0VBUkNIX0xJTUlUID0gNTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zY2hlZHVsZS1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIERyYXdlck1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsXG4gICAgSW5wdXROdW1iZXJNb2R1bGUsIE11bHRpU2VsZWN0TW9kdWxlLCBUYWdNb2R1bGUsIFRvb2x0aXBNb2R1bGUsXG4gICAgRGl2aWRlck1vZHVsZSwgVGFibGVNb2R1bGUsIEF1dG9Db21wbGV0ZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLCBEeW5hbWljRm9ybUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZS1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZGV0YWlsRm9ybScpIGRldGFpbEZvcm1Db21wb25lbnQhOiBEeW5hbWljRm9ybUNvbXBvbmVudDtcblxuICBzY2hlZHVsZURldGFpbEZpZWxkczogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdID0gW107XG4gIGVudGl0eURhdGFGb3JGb3JtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZUZvcm0hOiBGb3JtR3JvdXA7XG4gIGlzRWRpdGluZyA9IGZhbHNlO1xuICBjdXJyZW50Q29sbGFib3JhdG9ySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZVR5cGVzOiBTY2hlZHVsZVR5cGVbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHM6IFNjaGVkdWxlUGFydGljaXBhbnRbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gIHJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKiBTMjkzMzogTWFyayBhcyByZWFkb25seSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlY3VycmVuY2VDaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwYXJ0aWNpcGFudFN1Z2dlc3Rpb25zOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG4gIHNlbGVjdGVkUGFydGljaXBhbnRMb29rdXA6IFBhcnRpY2lwYW50TG9va3VwIHwgbnVsbCA9IG51bGw7XG4gIGFkZGVkUGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG5cbiAgcHJpb3JpdHlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlY3VycmVuY2VPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHdlZWtEYXlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlcGVhdFdoZW5PcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG9yZGluYWxPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG1vbnRoT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIC8qKiBTMjkzMzogTWFyayBjb25zdHJ1Y3Rvci1pbmplY3RlZCBzZXJ2aWNlcyBhcyByZWFkb25seSAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVkdWxlU2VydmljZTogU2NoZWR1bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVUeXBlU2VydmljZTogU2NoZWR1bGVUeXBlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlOiBDdXJyZW50Q29sbGFib3JhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHQ6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0T3B0aW9ucygpO1xuICAgIHRoaXMuaW5pdERldGFpbEZpZWxkcygpO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLmxvYWRTY2hlZHVsZVR5cGVzKCk7XG4gICAgdGhpcy5sb2FkQ29sbGFib3JhdG9yKCk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VEZXNjcmlwdGlvbldhdGNoZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbGxhYm9yYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlLmxvYWQoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNvbGxhYikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IGNvbGxhYj8uaWQgPz8gbnVsbDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucHJpb3JpdHlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3ByaW9yaXR5X2xvdycpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5Mb3cgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eV9tZWRpdW0nKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfaGlnaCcpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5IaWdoIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfY3JpdGljYWwnKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuQ3JpdGljYWwgfVxuICAgIF07XG4gICAgdGhpcy5yZWN1cnJlbmNlT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX2RhaWx5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuRGFpbHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3dlZWtseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfbW9udGhseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3llYXJseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSB9XG4gICAgXTtcbiAgICB0aGlzLndlZWtEYXlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N1bmRheScpLCB2YWx1ZTogV2Vla0RheS5TdW5kYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9tb25kYXknKSwgdmFsdWU6IFdlZWtEYXkuTW9uZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHVlc2RheScpLCB2YWx1ZTogV2Vla0RheS5UdWVzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2VkbmVzZGF5JyksIHZhbHVlOiBXZWVrRGF5LldlZG5lc2RheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3RodXJzZGF5JyksIHZhbHVlOiBXZWVrRGF5LlRodXJzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZnJpZGF5JyksIHZhbHVlOiBXZWVrRGF5LkZyaWRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NhdHVyZGF5JyksIHZhbHVlOiBXZWVrRGF5LlNhdHVyZGF5IH1cbiAgICBdO1xuICAgIHRoaXMucmVwZWF0V2hlbk9wdGlvbnMgPSBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X2luX2RheScpLCB2YWx1ZTogUmVwZWF0V2hlbi5JbkRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF9pbl9vcmRpbmFsX3dlZWtfZGF5JyksIHZhbHVlOiBSZXBlYXRXaGVuLkluT3JkaW5hbFdlZWtEYXkgfVxuICAgIF07XG4gICAgdGhpcy5vcmRpbmFsT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2ZpcnN0JyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5GaXJzdCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfc2Vjb25kJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5TZWNvbmQgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX3RoaXJkJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5UaGlyZCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfZm91cnRoJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5Gb3VydGggfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2xhc3QnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5Lkxhc3QgfVxuICAgIF07XG4gICAgdGhpcy5tb250aE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKE1vbnRoKS5tYXAobSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoYGNybXguY29tcG9uZW50cy5zY2hlZHVsZV8ke20udG9Mb3dlckNhc2UoKX1gKSwgdmFsdWU6IG1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGluaXREZXRhaWxGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnQgPSB0aGlzLmdldERlZmF1bHRTdGFydFRpbWUobm93KTtcbiAgICBjb25zdCBkZWZhdWx0RW5kID0gdGhpcy5nZXREZWZhdWx0RW5kVGltZShkZWZhdWx0U3RhcnQpO1xuICAgIGNvbnN0IGZ1bGxSb3cgPSB7IHhsOiAxMiwgbGc6IDEyLCBtZDogMTIsIHNtOiAxMiB9O1xuICAgIGNvbnN0IGhhbGZSb3cgPSB7IHhsOiA2LCBsZzogNiwgbWQ6IDYsIHNtOiAxMiB9O1xuICAgIHRoaXMuc2NoZWR1bGVEZXRhaWxGaWVsZHMgPSBbXG4gICAgICB7IGZpZWxkOiAnbmFtZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbmFtZScpLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoTUFYX05BTUVfTEVOR1RIKV0sIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfbmFtZScpLCBtYXhMZW5ndGg6IE1BWF9OQU1FX0xFTkdUSCwgc2l6ZTogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3ByaW9yaXR5JywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eScpLCB0eXBlOiAnZHJvcGRvd24nLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBvcHRpb25zOiB0aGlzLnByaW9yaXR5T3B0aW9ucywgb3B0aW9uTGFiZWw6ICdsYWJlbCcsIG9wdGlvblZhbHVlOiAndmFsdWUnLCBkZWZhdWx0VmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtLCBzaXplOiBmdWxsUm93IH0sXG4gICAgICB7IGZpZWxkOiAndHlwZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHlwZScpLCB0eXBlOiAnbG9va3VwJywgbG9va3VwU2VydmljZTogdGhpcy5zY2hlZHVsZVR5cGVTZXJ2aWNlLCBsb29rdXBEaXNwbGF5RmllbGQ6ICduYW1lJywgbG9va3VwVmFsdWVGaWVsZDogJ2lkJywgbG9va3VwU2VhcmNoRmllbGRzOiBbJ25hbWUnXSwgc2hvd0NsZWFyOiB0cnVlLCBsb29rdXBBdXRvY29tcGxldGU6IHRydWUsIGxvb2t1cENvbHVtbnM6IFt7IGZpZWxkOiAnbmFtZScsIGhlYWRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25hbWUnKSB9XSwgbG9va3VwRmlsdGVyczogXCJzdGF0dXMgPSAnQUNUSVZFJ1wiLCBwbGFjZWhvbGRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NlbGVjdF90eXBlJyksIHNpemU6IGZ1bGxSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICdzdGFydERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N0YXJ0X2RhdGUnKSwgdHlwZTogJ2RhdGUnLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBkZWZhdWx0VmFsdWU6IGZvcm1hdERhdGVUb1N0cmluZyhub3cpLCBzaXplOiAodjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZbJ3dpdGhSZWN1cnJlbmNlJ10gPyBoYWxmUm93IDogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF9kYXRlJyksIHR5cGU6ICdkYXRlJywgdmlzaWJsZVdoZW46ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdlsnd2l0aFJlY3VycmVuY2UnXSA9PT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3N0YXJ0VGltZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc3RhcnRfdGltZScpLCB0eXBlOiAndGltZScsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFN0YXJ0LCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZFRpbWUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF90aW1lJyksIHR5cGU6ICd0aW1lJywgZGVmYXVsdFZhbHVlOiBkZWZhdWx0RW5kLCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2FsbERheScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfYWxsX2RheScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnd2l0aFJlY3VycmVuY2UnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dpdGhfcmVjdXJyZW5jZScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnY29tbWVudHMnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2NvbW1lbnRzJyksIHR5cGU6ICd0ZXh0YXJlYScsIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfY29tbWVudHMnKSwgcm93czogMywgc2l6ZTogZnVsbFJvdyB9XG4gICAgXTtcbiAgfVxuXG4gIG9uRGV0YWlsRm9ybVJlYWR5KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtID0gZm9ybTtcbiAgICB0aGlzLmFkZFJlY3VycmVuY2VDb250cm9scygpO1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKVxuICAgICk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VGb3JtV2F0Y2hlcnMoKTtcbiAgfVxuXG4gIC8qKiBTMTIxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzICovXG4gIHByaXZhdGUgYWRkUmVjdXJyZW5jZUNvbnRyb2xzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygnaWQnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbCgnaWQnLCB0aGlzLmZiLmNvbnRyb2wobnVsbCkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZWN1cnJlbmNlJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZWN1cnJlbmNlJywgdGhpcy5mYi5jb250cm9sKFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlY3VycmVuY2VJbnRlcnZhbCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVjdXJyZW5jZUludGVydmFsJywgdGhpcy5mYi5jb250cm9sKDEpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCd3ZWVrRGF5cycpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAnd2Vla0RheXMnLCB0aGlzLmZiLmNvbnRyb2woW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbicpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbicsIHRoaXMuZmIuY29udHJvbChSZXBlYXRXaGVuLkluRGF5KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbkRheScpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbkRheScsIHRoaXMuZmIuY29udHJvbChub3cuZ2V0RGF0ZSgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5JykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0T3JkaW5hbEZvckRhdGUobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgJ3JlcGVhdFdoZW5XZWVrTW9udGgnLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0Q3VycmVudFdlZWtEYXkobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5Nb250aCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbk1vbnRoJyxcbiAgICAgICAgdGhpcy5mYi5jb250cm9sKGdldEN1cnJlbnRNb250aChub3cpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycyBpbnRvIHNtYWxsZXIgaGVscGVyc1xuICAgKiB0byByZWR1Y2UgY3ljbG9tYXRpYyBjb21wbGV4aXR5XG4gICAqL1xuICBwcml2YXRlIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycygpOiB2b2lkIHtcbiAgICBjb25zdCBkID0gdGhpcy5zZWxlY3RlZERhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLndhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gICAgdGhpcy53YXRjaFJlcGVhdFdoZW5DaGFuZ2VzKGQpO1xuICAgIHRoaXMud2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVjdXJyZW5jZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKHJlYzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYywgZCk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZU1vbnRobHlZZWFybHkocmVjLCBkKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWN1cnJlbmNlWWVhcmx5TW9udGgocmVjLCBkKTtcbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2Vla0RheXMnKT8udmFsdWU7XG4gICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB7IHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgeyB3ZWVrRGF5czogW10gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWN1cnJlbmNlTW9udGhseVllYXJseShcbiAgICByZWM6IHN0cmluZywgZDogRGF0ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5Nb250aGx5IHx8XG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbicpPy52YWx1ZSA/PyBSZXBlYXRXaGVuLkluRGF5LFxuICAgICAgICByZXBlYXRXaGVuRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5Jyk/LnZhbHVlXG4gICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKT8udmFsdWVcbiAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuRGF5OiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDogbnVsbFxuICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVllYXJseU1vbnRoKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5Nb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgPz8gZ2V0Q3VycmVudE1vbnRoKGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgIHsgcmVwZWF0V2hlbk1vbnRoOiBudWxsIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hSZXBlYXRXaGVuQ2hhbmdlcyhkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAocnc6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5EYXkpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIHJlcGVhdFdoZW5EYXk6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGxcbiAgICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTpcbiAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknKT8udmFsdWVcbiAgICAgICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbldlZWtNb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQgZm9yIG90aGVyIHJlcGVhdFdoZW4gdmFsdWVzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlY3VycmVuY2VFbmFibGVkKGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25SZWN1cnJlbmNlRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZUVuYWJsZWQoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHMoZCk7XG4gICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZURpc2FibGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0ID0gdGhpcy5nZXREZWZhdWx0U3RhcnRUaW1lKG5vdyk7XG4gICAgY29uc3QgZGVmYXVsdEVuZCA9IHRoaXMuZ2V0RGVmYXVsdEVuZFRpbWUoZGVmYXVsdFN0YXJ0KTtcbiAgICB0aGlzLnNjaGVkdWxlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFtudWxsXSxcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKE1BWF9OQU1FX0xFTkdUSCldXSxcbiAgICAgIHR5cGU6IFtudWxsXSxcbiAgICAgIHByaW9yaXR5OiBbU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgYWxsRGF5OiBbZmFsc2VdLFxuICAgICAgd2l0aFJlY3VycmVuY2U6IFtmYWxzZV0sXG4gICAgICBzdGFydERhdGU6IFtcbiAgICAgICAgZm9ybWF0RGF0ZVRvU3RyaW5nKHRoaXMuc2VsZWN0ZWREYXRlIHx8IG5vdyksXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0sXG4gICAgICBlbmREYXRlOiBbbnVsbF0sXG4gICAgICBzdGFydFRpbWU6IFtkZWZhdWx0U3RhcnRdLFxuICAgICAgZW5kVGltZTogW2RlZmF1bHRFbmRdLFxuICAgICAgcmVjdXJyZW5jZTogW1NjaGVkdWxlUmVjdXJyZW5jZS5EYWlseV0sXG4gICAgICByZWN1cnJlbmNlSW50ZXJ2YWw6IFsxXSxcbiAgICAgIHdlZWtEYXlzOiBbW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldXSxcbiAgICAgIHJlcGVhdFdoZW46IFtSZXBlYXRXaGVuLkluRGF5XSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IFtub3cuZ2V0RGF0ZSgpXSxcbiAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogW2dldE9yZGluYWxGb3JEYXRlKG5vdyldLFxuICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBbZ2V0Q3VycmVudE1vbnRoKG5vdyldLFxuICAgICAgY29tbWVudHM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZWN1cnJlbmNlRGVzY3JpcHRpb25XYXRjaGVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZUNoYW5nZSQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZShERUJPVU5DRV9NUylcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZldGNoUmVjdXJyZW5jZURlc2NyaXB0aW9uKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFJlY3VycmVuY2VEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLnNjaGVkdWxlRm9ybS52YWx1ZTtcbiAgICBpZiAoIXYud2l0aFJlY3VycmVuY2UgfHwgIXYuc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5nZW5lcmF0ZVJlY3VycmVuY2VEZXNjcmlwdGlvbihcbiAgICAgIHRoaXMuYnVpbGRSZWN1cnJlbmNlUGF5bG9hZCh2KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyKSA9PiB7XG4gICAgICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gci5kZXNjcmlwdGlvbiA/PyAnJztcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlY3VycmVuY2VQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHYpLFxuICAgICAgYWxsRGF5OiB2WydhbGxEYXknXSB8fCBmYWxzZSxcbiAgICAgIHdpdGhSZWN1cnJlbmNlOiB0cnVlLFxuICAgICAgcmVjdXJyZW5jZUludGVydmFsOiB2WydyZWN1cnJlbmNlSW50ZXJ2YWwnXSB8fCAxLFxuICAgICAgcmVjdXJyZW5jZTogdlsncmVjdXJyZW5jZSddLFxuICAgICAgLi4udGhpcy5idWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGU6IHRvRGF0ZVN0cmluZyh2WydzdGFydERhdGUnXSksXG4gICAgICBlbmREYXRlOiB2WydlbmREYXRlJ10gPyB0b0RhdGVTdHJpbmcodlsnZW5kRGF0ZSddKSA6IG51bGwsXG4gICAgICBzdGFydFRpbWU6IHZbJ3N0YXJ0VGltZSddID8gdG9UaW1lU3RyaW5nKHZbJ3N0YXJ0VGltZSddKSA6IG51bGwsXG4gICAgICBlbmRUaW1lOiB2WydlbmRUaW1lJ10gPyB0b1RpbWVTdHJpbmcodlsnZW5kVGltZSddKSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla0RheXM6IHZbJ3dlZWtEYXlzJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW46IHZbJ3JlcGVhdFdoZW4nXSA/PyBudWxsLFxuICAgICAgcmVwZWF0V2hlbkRheTogdlsncmVwZWF0V2hlbkRheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IHZbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiB2WydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW5Nb250aDogdlsncmVwZWF0V2hlbk1vbnRoJ10gPz8gbnVsbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWRTY2hlZHVsZVR5cGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVUeXBlU2VydmljZS5saXN0KHtcbiAgICAgIHNpemU6IDEwMCxcbiAgICAgIGZpbHRlclF1ZXJ5OiBcInN0YXR1cyA9ICdBQ1RJVkUnXCJcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVR5cGVzID0gci5jb250ZW50cztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5OZXcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydCA9IHRoaXMuZ2V0RGVmYXVsdFN0YXJ0VGltZShub3cpO1xuICAgIGNvbnN0IGRlZmF1bHRFbmQgPSB0aGlzLmdldERlZmF1bHRFbmRUaW1lKGRlZmF1bHRTdGFydCk7XG4gICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZGV0YWlsRm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5kZXRhaWxGb3JtQ29tcG9uZW50LnJlc2V0Rm9ybSgpO1xuICAgIH1cbiAgICB0aGlzLmVudGl0eURhdGFGb3JGb3JtID0ge1xuICAgICAgc3RhcnREYXRlOiBmb3JtYXREYXRlVG9TdHJpbmcodGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KSxcbiAgICAgIHByaW9yaXR5OiBTY2hlZHVsZVByaW9yaXR5Lk1lZGl1bSxcbiAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB3aXRoUmVjdXJyZW5jZTogZmFsc2UsXG4gICAgICBzdGFydFRpbWU6IGRlZmF1bHRTdGFydCxcbiAgICAgIGVuZFRpbWU6IGRlZmF1bHRFbmRcbiAgICB9O1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHModGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KTtcbiAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMucGFydGljaXBhbnRzID0gW107XG4gICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5FZGl0KHNjaGVkdWxlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGFydGljaXBhbnRMb29rdXAgPSBudWxsO1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLmdldChzY2hlZHVsZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IHsgLi4uZGF0YSwgdHlwZTogZGF0YS50eXBlID8/IG51bGwgfTtcbiAgICAgICAgdGhpcy5sb2FkUGFydGljaXBhbnRzKHNjaGVkdWxlSWQpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICAgICAgICAgIHJlY3VycmVuY2U6IGRhdGEucmVjdXJyZW5jZSxcbiAgICAgICAgICAgICAgcmVjdXJyZW5jZUludGVydmFsOiBkYXRhLnJlY3VycmVuY2VJbnRlcnZhbCxcbiAgICAgICAgICAgICAgd2Vla0RheXM6IGRhdGEud2Vla0RheXMsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW46IGRhdGEucmVwZWF0V2hlbixcbiAgICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogZGF0YS5yZXBlYXRXaGVuRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IGRhdGEucmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiBkYXRhLnJlcGVhdFdoZW5XZWVrTW9udGgsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW5Nb250aDogZGF0YS5yZXBlYXRXaGVuTW9udGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYXJ0aWNpcGFudHMoc2NoZWR1bGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5saXN0UGFydGljaXBhbnRzKHNjaGVkdWxlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50cyA9IHIuY29udGVudHMgPz8gW107XG4gICAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLnBhcnRpY2lwYW50c1xuICAgICAgICAgIC5maWx0ZXIocCA9PiAhcC5vcmdhbml6ZXIpXG4gICAgICAgICAgLm1hcChwID0+IHRoaXMucGFydGljaXBhbnRUb0xvb2t1cChwKSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0aWNpcGFudExvb2t1cCA9PiBwICE9PSBudWxsKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnRpY2lwYW50VG9Mb29rdXAoXG4gICAgcDogU2NoZWR1bGVQYXJ0aWNpcGFudFxuICApOiBQYXJ0aWNpcGFudExvb2t1cCB8IG51bGwge1xuICAgIGlmIChwLmNvbGxhYm9yYXRvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuY29sbGFib3JhdG9yLmlkLFxuICAgICAgICBuYW1lOiBwLmNvbGxhYm9yYXRvci5uYW1lLFxuICAgICAgICBvcmlnaW46ICdDT0xMQUJPUkFUT1InXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5hY2NvdW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50LmlkLFxuICAgICAgICBuYW1lOiBwLmFjY291bnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnQUNDT1VOVCdcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwLmFjY291bnRDb250YWN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50Q29udGFjdC5pZCxcbiAgICAgICAgbmFtZTogcC5hY2NvdW50Q29udGFjdC5uYW1lLFxuICAgICAgICByZWZlcmVuY2VOYW1lOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/Lm5hbWUsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/LmlkLFxuICAgICAgICBvcmlnaW46ICdBQ0NPVU5UX0NPTlRBQ1QnXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5leHRlcm5hbFBhcnRpY2lwYW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5leHRlcm5hbFBhcnRpY2lwYW50LmlkLFxuICAgICAgICBuYW1lOiBwLmV4dGVybmFsUGFydGljaXBhbnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnRVhURVJOQUxfUEFSVElDSVBBTlQnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2VhcmNoUGFydGljaXBhbnRzKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnNlYXJjaFBhcnRpY2lwYW50TG9va3VwKFxuICAgICAgZXZlbnQucXVlcnkgPz8gJycsXG4gICAgICBQQVJUSUNJUEFOVF9TRUFSQ0hfTElNSVRcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICBjb25zdCBhZGRlZElkcyA9IG5ldyBTZXQoXG4gICAgICAgICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5tYXAocCA9PiBwLmlkICsgcC5vcmlnaW4pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IChyLmNvbnRlbnRzID8/IFtdKVxuICAgICAgICAgIC5maWx0ZXIocCA9PiAhYWRkZWRJZHMuaGFzKHAuaWQgKyBwLm9yaWdpbikpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RQYXJ0aWNpcGFudChwYXJ0aWNpcGFudDogUGFydGljaXBhbnRMb29rdXApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5zb21lKFxuICAgICAgICBwID0+IHAuaWQgPT09IHBhcnRpY2lwYW50LmlkICYmIHAub3JpZ2luID09PSBwYXJ0aWNpcGFudC5vcmlnaW5cbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbLi4udGhpcy5hZGRlZFBhcnRpY2lwYW50cywgcGFydGljaXBhbnRdO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBvblJlbW92ZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50OiBQYXJ0aWNpcGFudExvb2t1cCk6IHZvaWQge1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLmFkZGVkUGFydGljaXBhbnRzLmZpbHRlcihcbiAgICAgIHAgPT4gIShwLmlkID09PSBwYXJ0aWNpcGFudC5pZCAmJiBwLm9yaWdpbiA9PT0gcGFydGljaXBhbnQub3JpZ2luKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIG9uU2F2ZSBpbnRvIHNtYWxsZXIgaGVscGVycyB0byByZWR1Y2UgY29tcGxleGl0eVxuICAgKiBTMTIxL1MyNjgxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzXG4gICAqL1xuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKTtcbiAgICBjb25zdCBvcCA9IHRoaXMuaXNFZGl0aW5nXG4gICAgICA/IHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnVwZGF0ZShwYXlsb2FkWydpZCddIGFzIHN0cmluZywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5zY2hlZHVsZVNlcnZpY2UuaW5zZXJ0KHBheWxvYWQpO1xuICAgIG9wLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLm1hbmFnZVBhcnRpY2lwYW50cyhcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA/IHBheWxvYWRbJ2lkJ10gYXMgc3RyaW5nIDogcmVzdWx0Py5bJ2lkJ10gYXMgc3RyaW5nLFxuICAgICAgICAgIHRoaXMuYnVpbGRNYW5hZ2VQYXJ0aWNpcGFudHNQYXlsb2FkKClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5zYXZlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZVBheWxvYWQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgLi4udGhpcy5zY2hlZHVsZUZvcm0udmFsdWUsXG4gICAgICB0eXBlOiB0aGlzLnNjaGVkdWxlRm9ybS52YWx1ZS50eXBlID8/IG51bGwsXG4gICAgICB3aGVuT2NjdXJzOiB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA/PyBudWxsXG4gICAgfTtcbiAgICBpZiAocGF5bG9hZFsnc3RhcnREYXRlJ10pIHtcbiAgICAgIHBheWxvYWRbJ3N0YXJ0RGF0ZSddID0gdG9EYXRlU3RyaW5nKHBheWxvYWRbJ3N0YXJ0RGF0ZSddKTtcbiAgICB9XG4gICAgaWYgKHBheWxvYWRbJ2VuZERhdGUnXSkge1xuICAgICAgcGF5bG9hZFsnZW5kRGF0ZSddID0gdG9EYXRlU3RyaW5nKHBheWxvYWRbJ2VuZERhdGUnXSk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkWydzdGFydFRpbWUnXSkge1xuICAgICAgcGF5bG9hZFsnc3RhcnRUaW1lJ10gPSB0b1RpbWVTdHJpbmcocGF5bG9hZFsnc3RhcnRUaW1lJ10pO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnZW5kVGltZSddKSB7XG4gICAgICBwYXlsb2FkWydlbmRUaW1lJ10gPSB0b1RpbWVTdHJpbmcocGF5bG9hZFsnZW5kVGltZSddKTtcbiAgICB9XG4gICAgaWYgKCFwYXlsb2FkWyd3aXRoUmVjdXJyZW5jZSddKSB7XG4gICAgICB0aGlzLmNsZWFyUmVjdXJyZW5jZVBheWxvYWQocGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5SZWN1cnJlbmNlRmllbGRzKHBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnYWxsRGF5J10pIHtcbiAgICAgIHBheWxvYWRbJ3N0YXJ0VGltZSddID0gbnVsbDtcbiAgICAgIHBheWxvYWRbJ2VuZFRpbWUnXSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlY3VycmVuY2VQYXlsb2FkKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgcGF5bG9hZFsnZW5kRGF0ZSddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZWN1cnJlbmNlSW50ZXJ2YWwnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsnd2Vla0RheXMnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbiddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuRGF5J10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5Nb250aCddID0gbnVsbDtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNYW5hZ2VQYXJ0aWNpcGFudHNQYXlsb2FkKCk6IHtcbiAgICBhY2NvdW50c0lkOiBzdHJpbmdbXTtcbiAgICBhY2NvdW50Q29udGFjdHNJZDogc3RyaW5nW107XG4gICAgY29sbGFib3JhdG9yc0lkOiBzdHJpbmdbXTtcbiAgICBleHRlcm5hbFBhcnRpY2lwYW50c0lkOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgYTogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBhYzogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGU6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMpIHtcbiAgICAgIHN3aXRjaCAocC5vcmlnaW4pIHtcbiAgICAgICAgY2FzZSAnQUNDT1VOVCc6IHtcbiAgICAgICAgICBhLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQUNDT1VOVF9DT05UQUNUJzoge1xuICAgICAgICAgIGFjLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ09MTEFCT1JBVE9SJzoge1xuICAgICAgICAgIGMucHVzaChwLmlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdFWFRFUk5BTF9QQVJUSUNJUEFOVCc6IHtcbiAgICAgICAgICBlLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRzSWQ6IGEsXG4gICAgICBhY2NvdW50Q29udGFjdHNJZDogYWMsXG4gICAgICBjb2xsYWJvcmF0b3JzSWQ6IGMsXG4gICAgICBleHRlcm5hbFBhcnRpY2lwYW50c0lkOiBlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTMTU0MTogQnJlYWsgY2xlYW5SZWN1cnJlbmNlRmllbGRzIGludG8gc21hbGxlciBoZWxwZXJzXG4gICAqIFMxMjEvUzI2ODE6IEFkZCBicmFjZXMgdG8gYWxsIGlmIHN0YXRlbWVudHNcbiAgICovXG4gIHByaXZhdGUgY2xlYW5SZWN1cnJlbmNlRmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3QgciA9IHBbJ3JlY3VycmVuY2UnXSBhcyBzdHJpbmc7XG4gICAgaWYgKHIgIT09IFNjaGVkdWxlUmVjdXJyZW5jZS5XZWVrbHkpIHtcbiAgICAgIHBbJ3dlZWtEYXlzJ10gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmNsZWFuRGFpbHlXZWVrbHlGaWVsZHMocCwgcik7XG4gICAgdGhpcy5jbGVhbk1vbnRobHlGaWVsZHMocCwgcik7XG4gICAgdGhpcy5jbGVhblllYXJseUZpZWxkcyhwLCByKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5EYWlseVdlZWtseUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgciA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLkRhaWx5IHx8XG4gICAgICByID09PSBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5XG4gICAgKSB7XG4gICAgICBwWydyZXBlYXRXaGVuJ10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbkRheSddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5XZWVrTW9udGgnXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuTW9udGgnXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbk1vbnRobHlGaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChyID09PSBTY2hlZHVsZVJlY3VycmVuY2UuTW9udGhseSkge1xuICAgICAgcFsncmVwZWF0V2hlbk1vbnRoJ10gPSBudWxsO1xuICAgICAgdGhpcy5jbGVhblJlcGVhdFdoZW5GaWVsZHMocCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblllYXJseUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHIgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHkpIHtcbiAgICAgIHRoaXMuY2xlYW5SZXBlYXRXaGVuRmllbGRzKHApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5SZXBlYXRXaGVuRmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHBbJ3JlcGVhdFdoZW4nXSA9PT0gUmVwZWF0V2hlbi5JbkRheSkge1xuICAgICAgcFsncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5J10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbldlZWtNb250aCddID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcFsncmVwZWF0V2hlbkRheSddID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UmVjdXJyZW5jZURlZmF1bHRzKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBkYXRlIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBpZDogbnVsbCxcbiAgICAgIHJlY3VycmVuY2U6IFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSxcbiAgICAgIHJlY3VycmVuY2VJbnRlcnZhbDogMSxcbiAgICAgIHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldLFxuICAgICAgcmVwZWF0V2hlbjogUmVwZWF0V2hlbi5JbkRheSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IGQuZ2V0RGF0ZSgpLFxuICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IGdldEN1cnJlbnRXZWVrRGF5KGQpLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBnZXRDdXJyZW50TW9udGgoZClcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93UmVjdXJyZW5jZUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gIH1cblxuICBnZXQgY3VycmVudFJlY3VycmVuY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgncmVjdXJyZW5jZScpPy52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVwZWF0V2hlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlRm9ybT8uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNob3dXZWVrRGF5cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseTtcbiAgfVxuXG4gIGdldCBzaG93UmVwZWF0V2hlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfHxcbiAgICAgIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApO1xuICB9XG5cbiAgZ2V0IHNob3dSZXBlYXRXaGVuRGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dSZXBlYXRXaGVuICYmIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5EYXk7XG4gIH1cblxuICBnZXQgc2hvd09yZGluYWxGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1JlcGVhdFdoZW4gJiZcbiAgICAgIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheVxuICAgICk7XG4gIH1cblxuICBnZXQgc2hvd01vbnRoRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHk7XG4gIH1cblxuICBnZXRPcmlnaW5MYWJlbChvOiBQYXJ0aWNpcGFudE9yaWdpbik6IHN0cmluZyB7IHJldHVybiBfZ2V0T3JpZ2luTGFiZWwodGhpcy50LCBvKTsgfVxuICBnZXRPcmlnaW5JY29uKG86IFBhcnRpY2lwYW50T3JpZ2luKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRPcmlnaW5JY29uKG8pOyB9XG4gIGdldFBhcnRpY2lwYW50TmFtZShwOiBTY2hlZHVsZVBhcnRpY2lwYW50KTogc3RyaW5nIHsgcmV0dXJuIF9nZXRQYXJ0aWNpcGFudE5hbWUocCk7IH1cbiAgZ2V0UGFydGljaXBhbnRUeXBlKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpOiBzdHJpbmcgeyByZXR1cm4gX2dldFBhcnRpY2lwYW50VHlwZSh0aGlzLnQsIHApOyB9XG4gIGdldFBhcnRpY2lwYW50VHlwZUljb24ocDogU2NoZWR1bGVQYXJ0aWNpcGFudCk6IHN0cmluZyB7IHJldHVybiBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbihwKTsgfVxuICBnZXRQcmlvcml0eVNldmVyaXR5KHA6IHN0cmluZyk6IFByaW9yaXR5U2V2ZXJpdHkgeyByZXR1cm4gX2dldFByaW9yaXR5U2V2ZXJpdHkocCk7IH1cbiAgZ2V0UHJpb3JpdHlMYWJlbChwOiBzdHJpbmcpOiBzdHJpbmcgeyByZXR1cm4gX2dldFByaW9yaXR5TGFiZWwodGhpcy50LCBwKTsgfVxuICBnZXRDb25maXJtYXRpb25TZXZlcml0eShjOiBzdHJpbmcpOiBDb25maXJtYXRpb25TZXZlcml0eSB7IHJldHVybiBfZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkoYyk7IH1cbiAgZ2V0Q29uZmlybWF0aW9uTGFiZWwoYzogc3RyaW5nKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRDb25maXJtYXRpb25MYWJlbCh0aGlzLnQsIGMpOyB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RhcnRUaW1lKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREZWZhdWx0U3RhcnRUaW1lKGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0RW5kVGltZShzdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEVuZFRpbWUoc3QpO1xuICB9XG59XG4iLCI8IS0tIFNjaGVkdWxlIERyYXdlciAtLT5cbjxwLWRyYXdlclxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBwb3NpdGlvbj1cInJpZ2h0XCJcbiAgc3R5bGVDbGFzcz1cInNjaGVkdWxlLWRyYXdlclwiXG4gIFttb2RhbF09XCJ0cnVlXCJcbiAgKG9uSGlkZSk9XCJvbkNhbmNlbCgpXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZHJhd2VyLXRpdGxlXCI+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWNhbGVuZGFyXCI+PC9pPlxuICAgICAge3tcbiAgICAgICAgaXNFZGl0aW5nXG4gICAgICAgICAgPyAoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NjaGVkdWxlX25ldycgfCB0cmFuc2xhdGUpXG4gICAgICB9fVxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWxheW91dFwiICpuZ0lmPVwic2NoZWR1bGVGb3JtXCI+XG4gICAgPCEtLSBMZWZ0OiBGb3JtIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItbGVmdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRyYXdlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NjaGVkdWxlX2RldGFpbHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNpYS1keW5hbWljLWZvcm1cbiAgICAgICAgI2RldGFpbEZvcm1cbiAgICAgICAgW3NlY3Rpb25zXT1cIlt7IGZpZWxkczogc2NoZWR1bGVEZXRhaWxGaWVsZHMgfV1cIlxuICAgICAgICBbZW50aXR5RGF0YV09XCJlbnRpdHlEYXRhRm9yRm9ybVwiXG4gICAgICAgIFttb2RlXT1cIidmb3JtJ1wiXG4gICAgICAgIFtzaG93U3VibWl0QnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAoZm9ybVJlYWR5KT1cIm9uRGV0YWlsRm9ybVJlYWR5KCRldmVudClcIlxuICAgICAgPjwvc2lhLWR5bmFtaWMtZm9ybT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmlnaHQ6IFJlY3VycmVuY2UgKyBQYXJ0aWNpcGFudHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1yaWdodFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyYXdlci1zZWN0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJzaG93UmVjdXJyZW5jZUZpZWxkc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXJlcGxheVwiPjwvaT5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZV9jb25maWcnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm1cbiAgICAgICAgICBbZm9ybUdyb3VwXT1cInNjaGVkdWxlRm9ybVwiXG4gICAgICAgICAgY2xhc3M9XCJkcmF3ZXItZm9ybVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVjdXJyZW5jZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlY3VycmVuY2VcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlY3VycmVuY2VcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJlY3VycmVuY2VPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVjdXJyZW5jZUludGVydmFsXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZV9pbnRlcnZhbCdcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIGlkPVwicmVjdXJyZW5jZUludGVydmFsXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWN1cnJlbmNlSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgICAgICAgW21heF09XCI5OVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dXZWVrRGF5c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3ZWVrRGF5c1wiPlxuICAgICAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2Vla19kYXlzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgIGlkPVwid2Vla0RheXNcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIndlZWtEYXlzXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ3ZWVrRGF5T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zZWxlY3Rfd2Vla19kYXknXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tcm93XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1JlcGVhdFdoZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVwZWF0V2hlblwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF93aGVuJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJyZXBlYXRXaGVuT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dSZXBlYXRXaGVuRGF5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5EYXlcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfd2hlbl9kYXknXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5EYXlcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5EYXlcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgICAgICAgW21heF09XCIzMVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dPcmRpbmFsRmllbGRzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfd2Vla19kYXknXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5XCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcmRpbmFsT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dPcmRpbmFsRmllbGRzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5XZWVrTW9udGhcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV93ZWVrX21vbnRoJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuV2Vla01vbnRoXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuV2Vla01vbnRoXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ3ZWVrRGF5T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dNb250aEZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5Nb250aFwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF9tb250aCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlbk1vbnRoXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuTW9udGhcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicmVjdXJyZW5jZS1kZXNjcmlwdGlvblwiXG4gICAgICAgICAgKm5nSWY9XCJyZWN1cnJlbmNlRGVzY3JpcHRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICA8c3Bhbj57eyByZWN1cnJlbmNlRGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XG5cbiAgICAgIDwhLS0gUGFydGljaXBhbnRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRyYXdlci1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXVzZXJzXCI+PC9pPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wYXJ0aWNpcGFudHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LXNlYXJjaFwiPlxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZVxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFBhcnRpY2lwYW50TG9va3VwXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cInBhcnRpY2lwYW50U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cIlxuICAgICAgICAgICAgICBvblNlYXJjaFBhcnRpY2lwYW50cygkZXZlbnQpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG9uU2VsZWN0KT1cIlxuICAgICAgICAgICAgICBvblNlbGVjdFBhcnRpY2lwYW50KCRldmVudC52YWx1ZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAob25Gb2N1cyk9XCJcbiAgICAgICAgICAgICAgb25TZWFyY2hQYXJ0aWNpcGFudHMoeyBxdWVyeTogJycgfSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NlYXJjaF9wYXJ0aWNpcGFudCdcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFttaW5MZW5ndGhdPVwiMFwiXG4gICAgICAgICAgICBbZm9yY2VTZWxlY3Rpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZsdWlkXT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBsZXQtaXRlbVxuICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJpdGVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9yaWdpbkljb24oaXRlbS5vcmlnaW4pXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvbi1pbmZvXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24tbmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uLWRldGFpbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VOYW1lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5yZWZlcmVuY2VOYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvbi1vcmlnaW5cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGdldE9yaWdpbkxhYmVsKGl0ZW0ub3JpZ2luKSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICFwYXJ0aWNpcGFudHNMb2FkaW5nICYmXG4gICAgICAgICAgICBhZGRlZFBhcnRpY2lwYW50cy5sZW5ndGggPT09IDBcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnRzLWVtcHR5XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlcnNcIj48L2k+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25vX3BhcnRpY2lwYW50cydcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cC10YWJsZVxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhcGFydGljaXBhbnRzTG9hZGluZyAmJlxuICAgICAgICAgICAgYWRkZWRQYXJ0aWNpcGFudHMubGVuZ3RoID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3ZhbHVlXT1cImFkZGVkUGFydGljaXBhbnRzXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc20gcC1kYXRhdGFibGUtc3RyaXBlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLXBhcnRpY2lwYW50LXR5cGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcGFydGljaXBhbnRfdHlwZSdcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtYWN0aW9uc1wiXG4gICAgICAgICAgICAgID48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXA+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtbmFtZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBwLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInAucmVmZXJlbmNlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtcmVmZXJlbmNlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgcC5yZWZlcmVuY2VOYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtdHlwZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0T3JpZ2luSWNvbihwLm9yaWdpbilcIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRPcmlnaW5MYWJlbChwLm9yaWdpbikgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBzZXZlcml0eT1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvblJlbW92ZVBhcnRpY2lwYW50KHApXCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZW1vdmUnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2NhbmNlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgIFtvdXRsaW5lZF09XCJ0cnVlXCJcbiAgICAgICAgKG9uQ2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBbbGFiZWxdPVwiJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zYXZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uU2F2ZSgpXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRyYXdlcj5cbiJdfQ==
|
|
731
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8s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QyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjO3dCQUN4RCxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYTt3QkFDOUQsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0I7d0JBQzlDLGFBQWEsRUFBRSxvQkFBb0I7cUJBQ3BDOzBOQUtRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUVrQixtQkFBbUI7c0JBQTNDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBJbnB1dE51bWJlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRudW1iZXInO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQsIER5bmFtaWNGb3JtRmllbGRDb25maWcsIFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcbmltcG9ydCB7IEN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvY3VycmVudC1jb2xsYWJvcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS10eXBlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVQYXJ0aWNpcGFudCB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJ0aWNpcGFudExvb2t1cCwgUGFydGljaXBhbnRPcmlnaW4gfSBmcm9tICcuLi9lbnRpdGllcy9wYXJ0aWNpcGFudC1sb29rdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZSB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLXR5cGUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIFNjaGVkdWxlUHJpb3JpdHksIFNjaGVkdWxlUmVjdXJyZW5jZSwgV2Vla0RheSwgUmVwZWF0V2hlbixcbiAgT3JkaW5hbFdlZWtEYXksIE1vbnRoXG59IGZyb20gJy4uL2VudW1zL3NjaGVkdWxlLmVudW1zJztcbmltcG9ydCB7XG4gIGZvcm1hdERhdGVUb1N0cmluZywgdG9EYXRlU3RyaW5nLCB0b1RpbWVTdHJpbmcsXG4gIGdldERlZmF1bHRTdGFydFRpbWUsIGdldERlZmF1bHRFbmRUaW1lLFxuICBnZXRDdXJyZW50V2Vla0RheSwgZ2V0Q3VycmVudE1vbnRoLCBnZXRPcmRpbmFsRm9yRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJzL3NjaGVkdWxlLWRhdGUuaGVscGVycyc7XG5pbXBvcnQge1xuICBnZXRPcmlnaW5MYWJlbCBhcyBfZ2V0T3JpZ2luTGFiZWwsIGdldE9yaWdpbkljb24gYXMgX2dldE9yaWdpbkljb24sXG4gIGdldFBhcnRpY2lwYW50TmFtZSBhcyBfZ2V0UGFydGljaXBhbnROYW1lLCBnZXRQYXJ0aWNpcGFudFR5cGUgYXMgX2dldFBhcnRpY2lwYW50VHlwZSxcbiAgZ2V0UGFydGljaXBhbnRUeXBlSWNvbiBhcyBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbiwgZ2V0UHJpb3JpdHlTZXZlcml0eSBhcyBfZ2V0UHJpb3JpdHlTZXZlcml0eSxcbiAgZ2V0UHJpb3JpdHlMYWJlbCBhcyBfZ2V0UHJpb3JpdHlMYWJlbCwgZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkgYXMgX2dldENvbmZpcm1hdGlvblNldmVyaXR5LFxuICBnZXRDb25maXJtYXRpb25MYWJlbCBhcyBfZ2V0Q29uZmlybWF0aW9uTGFiZWwsXG4gIFByaW9yaXR5U2V2ZXJpdHksIENvbmZpcm1hdGlvblNldmVyaXR5XG59IGZyb20gJy4uL2hlbHBlcnMvc2NoZWR1bGUtZGlzcGxheS5oZWxwZXJzJztcblxuLyoqIFMxMDk6IEV4dHJhY3QgbWFnaWMgbnVtYmVycyB0byBuYW1lZCBjb25zdGFudHMgKi9cbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDI1NTtcbmNvbnN0IERFQk9VTkNFX01TID0gNTAwO1xuY29uc3QgUEFSVElDSVBBTlRfU0VBUkNIX0xJTUlUID0gNTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zY2hlZHVsZS1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIERyYXdlck1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsXG4gICAgSW5wdXROdW1iZXJNb2R1bGUsIE11bHRpU2VsZWN0TW9kdWxlLCBUYWdNb2R1bGUsIFRvb2x0aXBNb2R1bGUsXG4gICAgRGl2aWRlck1vZHVsZSwgVGFibGVNb2R1bGUsIEF1dG9Db21wbGV0ZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLCBEeW5hbWljRm9ybUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZS1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZGV0YWlsRm9ybScpIGRldGFpbEZvcm1Db21wb25lbnQhOiBEeW5hbWljRm9ybUNvbXBvbmVudDtcblxuICBzY2hlZHVsZURldGFpbEZpZWxkczogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdID0gW107XG4gIGVudGl0eURhdGFGb3JGb3JtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZUZvcm0hOiBGb3JtR3JvdXA7XG4gIGlzRWRpdGluZyA9IGZhbHNlO1xuICBjdXJyZW50Q29sbGFib3JhdG9ySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZVR5cGVzOiBTY2hlZHVsZVR5cGVbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHM6IFNjaGVkdWxlUGFydGljaXBhbnRbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gIHJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKiBTMjkzMzogTWFyayBhcyByZWFkb25seSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlY3VycmVuY2VDaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwYXJ0aWNpcGFudFN1Z2dlc3Rpb25zOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG4gIHNlbGVjdGVkUGFydGljaXBhbnRMb29rdXA6IFBhcnRpY2lwYW50TG9va3VwIHwgbnVsbCA9IG51bGw7XG4gIGFkZGVkUGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG5cbiAgcHJpb3JpdHlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlY3VycmVuY2VPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHdlZWtEYXlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlcGVhdFdoZW5PcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG9yZGluYWxPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG1vbnRoT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIC8qKiBTMjkzMzogTWFyayBjb25zdHJ1Y3Rvci1pbmplY3RlZCBzZXJ2aWNlcyBhcyByZWFkb25seSAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVkdWxlU2VydmljZTogU2NoZWR1bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVUeXBlU2VydmljZTogU2NoZWR1bGVUeXBlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlOiBDdXJyZW50Q29sbGFib3JhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHQ6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0T3B0aW9ucygpO1xuICAgIHRoaXMuaW5pdERldGFpbEZpZWxkcygpO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLmxvYWRTY2hlZHVsZVR5cGVzKCk7XG4gICAgdGhpcy5sb2FkQ29sbGFib3JhdG9yKCk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VEZXNjcmlwdGlvbldhdGNoZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbGxhYm9yYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlLmxvYWQoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNvbGxhYikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IGNvbGxhYj8uaWQgPz8gbnVsbDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucHJpb3JpdHlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3ByaW9yaXR5X2xvdycpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5Mb3cgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eV9tZWRpdW0nKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfaGlnaCcpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5IaWdoIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfY3JpdGljYWwnKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuQ3JpdGljYWwgfVxuICAgIF07XG4gICAgdGhpcy5yZWN1cnJlbmNlT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX2RhaWx5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuRGFpbHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3dlZWtseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfbW9udGhseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3llYXJseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSB9XG4gICAgXTtcbiAgICB0aGlzLndlZWtEYXlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N1bmRheScpLCB2YWx1ZTogV2Vla0RheS5TdW5kYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9tb25kYXknKSwgdmFsdWU6IFdlZWtEYXkuTW9uZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHVlc2RheScpLCB2YWx1ZTogV2Vla0RheS5UdWVzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2VkbmVzZGF5JyksIHZhbHVlOiBXZWVrRGF5LldlZG5lc2RheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3RodXJzZGF5JyksIHZhbHVlOiBXZWVrRGF5LlRodXJzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZnJpZGF5JyksIHZhbHVlOiBXZWVrRGF5LkZyaWRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NhdHVyZGF5JyksIHZhbHVlOiBXZWVrRGF5LlNhdHVyZGF5IH1cbiAgICBdO1xuICAgIHRoaXMucmVwZWF0V2hlbk9wdGlvbnMgPSBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X2luX2RheScpLCB2YWx1ZTogUmVwZWF0V2hlbi5JbkRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF9pbl9vcmRpbmFsX3dlZWtfZGF5JyksIHZhbHVlOiBSZXBlYXRXaGVuLkluT3JkaW5hbFdlZWtEYXkgfVxuICAgIF07XG4gICAgdGhpcy5vcmRpbmFsT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2ZpcnN0JyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5GaXJzdCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfc2Vjb25kJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5TZWNvbmQgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX3RoaXJkJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5UaGlyZCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfZm91cnRoJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5Gb3VydGggfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2xhc3QnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5Lkxhc3QgfVxuICAgIF07XG4gICAgdGhpcy5tb250aE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKE1vbnRoKS5tYXAobSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoYGNybXguY29tcG9uZW50cy5zY2hlZHVsZV8ke20udG9Mb3dlckNhc2UoKX1gKSwgdmFsdWU6IG1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGluaXREZXRhaWxGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnQgPSB0aGlzLmdldERlZmF1bHRTdGFydFRpbWUobm93KTtcbiAgICBjb25zdCBkZWZhdWx0RW5kID0gdGhpcy5nZXREZWZhdWx0RW5kVGltZShkZWZhdWx0U3RhcnQpO1xuICAgIGNvbnN0IGZ1bGxSb3cgPSB7IHhsOiAxMiwgbGc6IDEyLCBtZDogMTIsIHNtOiAxMiB9O1xuICAgIGNvbnN0IGhhbGZSb3cgPSB7IHhsOiA2LCBsZzogNiwgbWQ6IDYsIHNtOiAxMiB9O1xuICAgIHRoaXMuc2NoZWR1bGVEZXRhaWxGaWVsZHMgPSBbXG4gICAgICB7IGZpZWxkOiAnbmFtZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbmFtZScpLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoTUFYX05BTUVfTEVOR1RIKV0sIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfbmFtZScpLCBtYXhMZW5ndGg6IE1BWF9OQU1FX0xFTkdUSCwgc2l6ZTogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3ByaW9yaXR5JywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eScpLCB0eXBlOiAnZHJvcGRvd24nLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBvcHRpb25zOiB0aGlzLnByaW9yaXR5T3B0aW9ucywgb3B0aW9uTGFiZWw6ICdsYWJlbCcsIG9wdGlvblZhbHVlOiAndmFsdWUnLCBkZWZhdWx0VmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtLCBzaXplOiBmdWxsUm93IH0sXG4gICAgICB7IGZpZWxkOiAndHlwZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHlwZScpLCB0eXBlOiAnbG9va3VwJywgbG9va3VwU2VydmljZTogdGhpcy5zY2hlZHVsZVR5cGVTZXJ2aWNlLCBsb29rdXBEaXNwbGF5RmllbGQ6ICduYW1lJywgbG9va3VwVmFsdWVGaWVsZDogJ2lkJywgbG9va3VwU2VhcmNoRmllbGRzOiBbJ25hbWUnXSwgc2hvd0NsZWFyOiB0cnVlLCBsb29rdXBBdXRvY29tcGxldGU6IHRydWUsIGxvb2t1cENvbHVtbnM6IFt7IGZpZWxkOiAnbmFtZScsIGhlYWRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25hbWUnKSB9XSwgbG9va3VwRmlsdGVyczogXCJzdGF0dXMgPSAnQUNUSVZFJ1wiLCBwbGFjZWhvbGRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NlbGVjdF90eXBlJyksIHNpemU6IGZ1bGxSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICdzdGFydERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N0YXJ0X2RhdGUnKSwgdHlwZTogJ2RhdGUnLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBkZWZhdWx0VmFsdWU6IGZvcm1hdERhdGVUb1N0cmluZyhub3cpLCBzaXplOiAodjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZbJ3dpdGhSZWN1cnJlbmNlJ10gPyBoYWxmUm93IDogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF9kYXRlJyksIHR5cGU6ICdkYXRlJywgdmlzaWJsZVdoZW46ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdlsnd2l0aFJlY3VycmVuY2UnXSA9PT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3N0YXJ0VGltZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc3RhcnRfdGltZScpLCB0eXBlOiAndGltZScsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFN0YXJ0LCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZFRpbWUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF90aW1lJyksIHR5cGU6ICd0aW1lJywgZGVmYXVsdFZhbHVlOiBkZWZhdWx0RW5kLCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2FsbERheScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfYWxsX2RheScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnd2l0aFJlY3VycmVuY2UnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dpdGhfcmVjdXJyZW5jZScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnY29tbWVudHMnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2NvbW1lbnRzJyksIHR5cGU6ICd0ZXh0YXJlYScsIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfY29tbWVudHMnKSwgcm93czogMywgc2l6ZTogZnVsbFJvdyB9XG4gICAgXTtcbiAgfVxuXG4gIG9uRGV0YWlsRm9ybVJlYWR5KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtID0gZm9ybTtcbiAgICB0aGlzLmFkZFJlY3VycmVuY2VDb250cm9scygpO1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKVxuICAgICk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VGb3JtV2F0Y2hlcnMoKTtcbiAgfVxuXG4gIC8qKiBTMTIxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzICovXG4gIHByaXZhdGUgYWRkUmVjdXJyZW5jZUNvbnRyb2xzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygnaWQnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbCgnaWQnLCB0aGlzLmZiLmNvbnRyb2wobnVsbCkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZWN1cnJlbmNlJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZWN1cnJlbmNlJywgdGhpcy5mYi5jb250cm9sKFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlY3VycmVuY2VJbnRlcnZhbCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVjdXJyZW5jZUludGVydmFsJywgdGhpcy5mYi5jb250cm9sKDEpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCd3ZWVrRGF5cycpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAnd2Vla0RheXMnLCB0aGlzLmZiLmNvbnRyb2woW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbicpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbicsIHRoaXMuZmIuY29udHJvbChSZXBlYXRXaGVuLkluRGF5KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbkRheScpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbkRheScsIHRoaXMuZmIuY29udHJvbChub3cuZ2V0RGF0ZSgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5JykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0T3JkaW5hbEZvckRhdGUobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgJ3JlcGVhdFdoZW5XZWVrTW9udGgnLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0Q3VycmVudFdlZWtEYXkobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5Nb250aCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbk1vbnRoJyxcbiAgICAgICAgdGhpcy5mYi5jb250cm9sKGdldEN1cnJlbnRNb250aChub3cpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycyBpbnRvIHNtYWxsZXIgaGVscGVyc1xuICAgKiB0byByZWR1Y2UgY3ljbG9tYXRpYyBjb21wbGV4aXR5XG4gICAqL1xuICBwcml2YXRlIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycygpOiB2b2lkIHtcbiAgICBjb25zdCBkID0gdGhpcy5zZWxlY3RlZERhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLndhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gICAgdGhpcy53YXRjaFJlcGVhdFdoZW5DaGFuZ2VzKGQpO1xuICAgIHRoaXMud2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVjdXJyZW5jZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKHJlYzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYywgZCk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZU1vbnRobHlZZWFybHkocmVjLCBkKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWN1cnJlbmNlWWVhcmx5TW9udGgocmVjLCBkKTtcbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2Vla0RheXMnKT8udmFsdWU7XG4gICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB7IHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgeyB3ZWVrRGF5czogW10gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWN1cnJlbmNlTW9udGhseVllYXJseShcbiAgICByZWM6IHN0cmluZywgZDogRGF0ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5Nb250aGx5IHx8XG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbicpPy52YWx1ZSA/PyBSZXBlYXRXaGVuLkluRGF5LFxuICAgICAgICByZXBlYXRXaGVuRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5Jyk/LnZhbHVlXG4gICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKT8udmFsdWVcbiAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuRGF5OiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDogbnVsbFxuICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVllYXJseU1vbnRoKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5Nb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgPz8gZ2V0Q3VycmVudE1vbnRoKGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgIHsgcmVwZWF0V2hlbk1vbnRoOiBudWxsIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hSZXBlYXRXaGVuQ2hhbmdlcyhkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAocnc6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5EYXkpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIHJlcGVhdFdoZW5EYXk6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGxcbiAgICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTpcbiAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknKT8udmFsdWVcbiAgICAgICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbldlZWtNb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQgZm9yIG90aGVyIHJlcGVhdFdoZW4gdmFsdWVzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlY3VycmVuY2VFbmFibGVkKGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25SZWN1cnJlbmNlRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZUVuYWJsZWQoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHMoZCk7XG4gICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZURpc2FibGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0ID0gdGhpcy5nZXREZWZhdWx0U3RhcnRUaW1lKG5vdyk7XG4gICAgY29uc3QgZGVmYXVsdEVuZCA9IHRoaXMuZ2V0RGVmYXVsdEVuZFRpbWUoZGVmYXVsdFN0YXJ0KTtcbiAgICB0aGlzLnNjaGVkdWxlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFtudWxsXSxcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKE1BWF9OQU1FX0xFTkdUSCldXSxcbiAgICAgIHR5cGU6IFtudWxsXSxcbiAgICAgIHByaW9yaXR5OiBbU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgYWxsRGF5OiBbZmFsc2VdLFxuICAgICAgd2l0aFJlY3VycmVuY2U6IFtmYWxzZV0sXG4gICAgICBzdGFydERhdGU6IFtcbiAgICAgICAgZm9ybWF0RGF0ZVRvU3RyaW5nKHRoaXMuc2VsZWN0ZWREYXRlIHx8IG5vdyksXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0sXG4gICAgICBlbmREYXRlOiBbbnVsbF0sXG4gICAgICBzdGFydFRpbWU6IFtkZWZhdWx0U3RhcnRdLFxuICAgICAgZW5kVGltZTogW2RlZmF1bHRFbmRdLFxuICAgICAgcmVjdXJyZW5jZTogW1NjaGVkdWxlUmVjdXJyZW5jZS5EYWlseV0sXG4gICAgICByZWN1cnJlbmNlSW50ZXJ2YWw6IFsxXSxcbiAgICAgIHdlZWtEYXlzOiBbW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldXSxcbiAgICAgIHJlcGVhdFdoZW46IFtSZXBlYXRXaGVuLkluRGF5XSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IFtub3cuZ2V0RGF0ZSgpXSxcbiAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogW2dldE9yZGluYWxGb3JEYXRlKG5vdyldLFxuICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBbZ2V0Q3VycmVudE1vbnRoKG5vdyldLFxuICAgICAgY29tbWVudHM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZWN1cnJlbmNlRGVzY3JpcHRpb25XYXRjaGVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZUNoYW5nZSQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZShERUJPVU5DRV9NUylcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZldGNoUmVjdXJyZW5jZURlc2NyaXB0aW9uKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFJlY3VycmVuY2VEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLnNjaGVkdWxlRm9ybS52YWx1ZTtcbiAgICBpZiAoIXYud2l0aFJlY3VycmVuY2UgfHwgIXYuc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5nZW5lcmF0ZVJlY3VycmVuY2VEZXNjcmlwdGlvbihcbiAgICAgIHRoaXMuYnVpbGRSZWN1cnJlbmNlUGF5bG9hZCh2KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyKSA9PiB7XG4gICAgICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gci5kZXNjcmlwdGlvbiA/PyAnJztcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlY3VycmVuY2VQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHYpLFxuICAgICAgYWxsRGF5OiB2WydhbGxEYXknXSB8fCBmYWxzZSxcbiAgICAgIHdpdGhSZWN1cnJlbmNlOiB0cnVlLFxuICAgICAgcmVjdXJyZW5jZUludGVydmFsOiB2WydyZWN1cnJlbmNlSW50ZXJ2YWwnXSB8fCAxLFxuICAgICAgcmVjdXJyZW5jZTogdlsncmVjdXJyZW5jZSddLFxuICAgICAgLi4udGhpcy5idWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGU6IHRvRGF0ZVN0cmluZyh2WydzdGFydERhdGUnXSksXG4gICAgICBlbmREYXRlOiB2WydlbmREYXRlJ10gPyB0b0RhdGVTdHJpbmcodlsnZW5kRGF0ZSddKSA6IG51bGwsXG4gICAgICBzdGFydFRpbWU6IHZbJ3N0YXJ0VGltZSddID8gdG9UaW1lU3RyaW5nKHZbJ3N0YXJ0VGltZSddKSA6IG51bGwsXG4gICAgICBlbmRUaW1lOiB2WydlbmRUaW1lJ10gPyB0b1RpbWVTdHJpbmcodlsnZW5kVGltZSddKSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla0RheXM6IHZbJ3dlZWtEYXlzJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW46IHZbJ3JlcGVhdFdoZW4nXSA/PyBudWxsLFxuICAgICAgcmVwZWF0V2hlbkRheTogdlsncmVwZWF0V2hlbkRheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IHZbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiB2WydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW5Nb250aDogdlsncmVwZWF0V2hlbk1vbnRoJ10gPz8gbnVsbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWRTY2hlZHVsZVR5cGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVUeXBlU2VydmljZS5saXN0KHtcbiAgICAgIHNpemU6IDEwMCxcbiAgICAgIGZpbHRlclF1ZXJ5OiBcInN0YXR1cyA9ICdBQ1RJVkUnXCJcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVR5cGVzID0gci5jb250ZW50cztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5OZXcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydCA9IHRoaXMuZ2V0RGVmYXVsdFN0YXJ0VGltZShub3cpO1xuICAgIGNvbnN0IGRlZmF1bHRFbmQgPSB0aGlzLmdldERlZmF1bHRFbmRUaW1lKGRlZmF1bHRTdGFydCk7XG4gICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZGV0YWlsRm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5kZXRhaWxGb3JtQ29tcG9uZW50LnJlc2V0Rm9ybSgpO1xuICAgIH1cbiAgICB0aGlzLmVudGl0eURhdGFGb3JGb3JtID0ge1xuICAgICAgc3RhcnREYXRlOiBmb3JtYXREYXRlVG9TdHJpbmcodGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KSxcbiAgICAgIHByaW9yaXR5OiBTY2hlZHVsZVByaW9yaXR5Lk1lZGl1bSxcbiAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB3aXRoUmVjdXJyZW5jZTogZmFsc2UsXG4gICAgICBzdGFydFRpbWU6IGRlZmF1bHRTdGFydCxcbiAgICAgIGVuZFRpbWU6IGRlZmF1bHRFbmRcbiAgICB9O1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHModGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KTtcbiAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMucGFydGljaXBhbnRzID0gW107XG4gICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5FZGl0KHNjaGVkdWxlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGFydGljaXBhbnRMb29rdXAgPSBudWxsO1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLmdldChzY2hlZHVsZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IHsgLi4uZGF0YSwgdHlwZTogZGF0YS50eXBlID8/IG51bGwgfTtcbiAgICAgICAgdGhpcy5sb2FkUGFydGljaXBhbnRzKHNjaGVkdWxlSWQpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICAgICAgICAgIHJlY3VycmVuY2U6IGRhdGEucmVjdXJyZW5jZSxcbiAgICAgICAgICAgICAgcmVjdXJyZW5jZUludGVydmFsOiBkYXRhLnJlY3VycmVuY2VJbnRlcnZhbCxcbiAgICAgICAgICAgICAgd2Vla0RheXM6IGRhdGEud2Vla0RheXMsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW46IGRhdGEucmVwZWF0V2hlbixcbiAgICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogZGF0YS5yZXBlYXRXaGVuRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IGRhdGEucmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiBkYXRhLnJlcGVhdFdoZW5XZWVrTW9udGgsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW5Nb250aDogZGF0YS5yZXBlYXRXaGVuTW9udGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYXJ0aWNpcGFudHMoc2NoZWR1bGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5saXN0UGFydGljaXBhbnRzKHNjaGVkdWxlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50cyA9IHIuY29udGVudHMgPz8gW107XG4gICAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLnBhcnRpY2lwYW50c1xuICAgICAgICAgIC5maWx0ZXIocCA9PiAhcC5vcmdhbml6ZXIpXG4gICAgICAgICAgLm1hcChwID0+IHRoaXMucGFydGljaXBhbnRUb0xvb2t1cChwKSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0aWNpcGFudExvb2t1cCA9PiBwICE9PSBudWxsKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnRpY2lwYW50VG9Mb29rdXAoXG4gICAgcDogU2NoZWR1bGVQYXJ0aWNpcGFudFxuICApOiBQYXJ0aWNpcGFudExvb2t1cCB8IG51bGwge1xuICAgIGlmIChwLmNvbGxhYm9yYXRvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuY29sbGFib3JhdG9yLmlkLFxuICAgICAgICBuYW1lOiBwLmNvbGxhYm9yYXRvci5uYW1lLFxuICAgICAgICBvcmlnaW46ICdDT0xMQUJPUkFUT1InXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5hY2NvdW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50LmlkLFxuICAgICAgICBuYW1lOiBwLmFjY291bnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnQUNDT1VOVCdcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwLmFjY291bnRDb250YWN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50Q29udGFjdC5pZCxcbiAgICAgICAgbmFtZTogcC5hY2NvdW50Q29udGFjdC5uYW1lLFxuICAgICAgICByZWZlcmVuY2VOYW1lOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/Lm5hbWUsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/LmlkLFxuICAgICAgICBvcmlnaW46ICdBQ0NPVU5UX0NPTlRBQ1QnXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5leHRlcm5hbFBhcnRpY2lwYW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5leHRlcm5hbFBhcnRpY2lwYW50LmlkLFxuICAgICAgICBuYW1lOiBwLmV4dGVybmFsUGFydGljaXBhbnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnRVhURVJOQUxfUEFSVElDSVBBTlQnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2VhcmNoUGFydGljaXBhbnRzKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnNlYXJjaFBhcnRpY2lwYW50TG9va3VwKFxuICAgICAgZXZlbnQucXVlcnkgPz8gJycsXG4gICAgICBQQVJUSUNJUEFOVF9TRUFSQ0hfTElNSVRcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICBjb25zdCBhZGRlZElkcyA9IG5ldyBTZXQoXG4gICAgICAgICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5tYXAocCA9PiBwLmlkICsgcC5vcmlnaW4pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IChyLmNvbnRlbnRzID8/IFtdKVxuICAgICAgICAgIC5maWx0ZXIocCA9PiAhYWRkZWRJZHMuaGFzKHAuaWQgKyBwLm9yaWdpbikpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RQYXJ0aWNpcGFudChwYXJ0aWNpcGFudDogUGFydGljaXBhbnRMb29rdXApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5zb21lKFxuICAgICAgICBwID0+IHAuaWQgPT09IHBhcnRpY2lwYW50LmlkICYmIHAub3JpZ2luID09PSBwYXJ0aWNpcGFudC5vcmlnaW5cbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbLi4udGhpcy5hZGRlZFBhcnRpY2lwYW50cywgcGFydGljaXBhbnRdO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBvblJlbW92ZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50OiBQYXJ0aWNpcGFudExvb2t1cCk6IHZvaWQge1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLmFkZGVkUGFydGljaXBhbnRzLmZpbHRlcihcbiAgICAgIHAgPT4gIShwLmlkID09PSBwYXJ0aWNpcGFudC5pZCAmJiBwLm9yaWdpbiA9PT0gcGFydGljaXBhbnQub3JpZ2luKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIG9uU2F2ZSBpbnRvIHNtYWxsZXIgaGVscGVycyB0byByZWR1Y2UgY29tcGxleGl0eVxuICAgKiBTMTIxL1MyNjgxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzXG4gICAqL1xuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKTtcbiAgICBjb25zdCBvcCA9IHRoaXMuaXNFZGl0aW5nXG4gICAgICA/IHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnVwZGF0ZShwYXlsb2FkWydpZCddIGFzIHN0cmluZywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5zY2hlZHVsZVNlcnZpY2UuaW5zZXJ0KHBheWxvYWQpO1xuICAgIG9wLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLm1hbmFnZVBhcnRpY2lwYW50cyhcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA/IHBheWxvYWRbJ2lkJ10gYXMgc3RyaW5nIDogcmVzdWx0Py5bJ2lkJ10gYXMgc3RyaW5nLFxuICAgICAgICAgIHRoaXMuYnVpbGRNYW5hZ2VQYXJ0aWNpcGFudHNQYXlsb2FkKClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5zYXZlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZVBheWxvYWQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgLi4udGhpcy5zY2hlZHVsZUZvcm0udmFsdWUsXG4gICAgICB0eXBlOiB0aGlzLnNjaGVkdWxlRm9ybS52YWx1ZS50eXBlID8/IG51bGwsXG4gICAgICB3aGVuT2NjdXJzOiB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA/PyBudWxsXG4gICAgfTtcbiAgICBpZiAocGF5bG9hZFsnc3RhcnREYXRlJ10pIHtcbiAgICAgIHBheWxvYWRbJ3N0YXJ0RGF0ZSddID0gdG9EYXRlU3RyaW5nKHBheWxvYWRbJ3N0YXJ0RGF0ZSddKTtcbiAgICB9XG4gICAgaWYgKHBheWxvYWRbJ2VuZERhdGUnXSkge1xuICAgICAgcGF5bG9hZFsnZW5kRGF0ZSddID0gdG9EYXRlU3RyaW5nKHBheWxvYWRbJ2VuZERhdGUnXSk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkWydzdGFydFRpbWUnXSkge1xuICAgICAgcGF5bG9hZFsnc3RhcnRUaW1lJ10gPSB0b1RpbWVTdHJpbmcocGF5bG9hZFsnc3RhcnRUaW1lJ10pO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnZW5kVGltZSddKSB7XG4gICAgICBwYXlsb2FkWydlbmRUaW1lJ10gPSB0b1RpbWVTdHJpbmcocGF5bG9hZFsnZW5kVGltZSddKTtcbiAgICB9XG4gICAgaWYgKCFwYXlsb2FkWyd3aXRoUmVjdXJyZW5jZSddKSB7XG4gICAgICB0aGlzLmNsZWFyUmVjdXJyZW5jZVBheWxvYWQocGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5SZWN1cnJlbmNlRmllbGRzKHBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnYWxsRGF5J10pIHtcbiAgICAgIHBheWxvYWRbJ3N0YXJ0VGltZSddID0gbnVsbDtcbiAgICAgIHBheWxvYWRbJ2VuZFRpbWUnXSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlY3VycmVuY2VQYXlsb2FkKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgcGF5bG9hZFsnZW5kRGF0ZSddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZWN1cnJlbmNlSW50ZXJ2YWwnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsnd2Vla0RheXMnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbiddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuRGF5J10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5Nb250aCddID0gbnVsbDtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNYW5hZ2VQYXJ0aWNpcGFudHNQYXlsb2FkKCk6IHtcbiAgICBhY2NvdW50c0lkOiBzdHJpbmdbXTtcbiAgICBhY2NvdW50Q29udGFjdHNJZDogc3RyaW5nW107XG4gICAgY29sbGFib3JhdG9yc0lkOiBzdHJpbmdbXTtcbiAgICBleHRlcm5hbFBhcnRpY2lwYW50c0lkOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgYTogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBhYzogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGU6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMpIHtcbiAgICAgIHN3aXRjaCAocC5vcmlnaW4pIHtcbiAgICAgICAgY2FzZSAnQUNDT1VOVCc6IHtcbiAgICAgICAgICBhLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQUNDT1VOVF9DT05UQUNUJzoge1xuICAgICAgICAgIGFjLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ09MTEFCT1JBVE9SJzoge1xuICAgICAgICAgIGMucHVzaChwLmlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdFWFRFUk5BTF9QQVJUSUNJUEFOVCc6IHtcbiAgICAgICAgICBlLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRzSWQ6IGEsXG4gICAgICBhY2NvdW50Q29udGFjdHNJZDogYWMsXG4gICAgICBjb2xsYWJvcmF0b3JzSWQ6IGMsXG4gICAgICBleHRlcm5hbFBhcnRpY2lwYW50c0lkOiBlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTMTU0MTogQnJlYWsgY2xlYW5SZWN1cnJlbmNlRmllbGRzIGludG8gc21hbGxlciBoZWxwZXJzXG4gICAqIFMxMjEvUzI2ODE6IEFkZCBicmFjZXMgdG8gYWxsIGlmIHN0YXRlbWVudHNcbiAgICovXG4gIHByaXZhdGUgY2xlYW5SZWN1cnJlbmNlRmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3QgciA9IHBbJ3JlY3VycmVuY2UnXSBhcyBzdHJpbmc7XG4gICAgaWYgKHIgIT09IFNjaGVkdWxlUmVjdXJyZW5jZS5XZWVrbHkpIHtcbiAgICAgIHBbJ3dlZWtEYXlzJ10gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmNsZWFuRGFpbHlXZWVrbHlGaWVsZHMocCwgcik7XG4gICAgdGhpcy5jbGVhbk1vbnRobHlGaWVsZHMocCwgcik7XG4gICAgdGhpcy5jbGVhblllYXJseUZpZWxkcyhwLCByKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5EYWlseVdlZWtseUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgciA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLkRhaWx5IHx8XG4gICAgICByID09PSBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5XG4gICAgKSB7XG4gICAgICBwWydyZXBlYXRXaGVuJ10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbkRheSddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5XZWVrTW9udGgnXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuTW9udGgnXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbk1vbnRobHlGaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChyID09PSBTY2hlZHVsZVJlY3VycmVuY2UuTW9udGhseSkge1xuICAgICAgcFsncmVwZWF0V2hlbk1vbnRoJ10gPSBudWxsO1xuICAgICAgdGhpcy5jbGVhblJlcGVhdFdoZW5GaWVsZHMocCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblllYXJseUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHIgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHkpIHtcbiAgICAgIHRoaXMuY2xlYW5SZXBlYXRXaGVuRmllbGRzKHApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5SZXBlYXRXaGVuRmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKHBbJ3JlcGVhdFdoZW4nXSA9PT0gUmVwZWF0V2hlbi5JbkRheSkge1xuICAgICAgcFsncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5J10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbldlZWtNb250aCddID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcFsncmVwZWF0V2hlbkRheSddID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UmVjdXJyZW5jZURlZmF1bHRzKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBkYXRlIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBpZDogbnVsbCxcbiAgICAgIHJlY3VycmVuY2U6IFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSxcbiAgICAgIHJlY3VycmVuY2VJbnRlcnZhbDogMSxcbiAgICAgIHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldLFxuICAgICAgcmVwZWF0V2hlbjogUmVwZWF0V2hlbi5JbkRheSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IGQuZ2V0RGF0ZSgpLFxuICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IGdldEN1cnJlbnRXZWVrRGF5KGQpLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBnZXRDdXJyZW50TW9udGgoZClcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93UmVjdXJyZW5jZUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gIH1cblxuICBnZXQgY3VycmVudFJlY3VycmVuY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgncmVjdXJyZW5jZScpPy52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVwZWF0V2hlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlRm9ybT8uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNob3dXZWVrRGF5cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseTtcbiAgfVxuXG4gIGdldCBzaG93UmVwZWF0V2hlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfHxcbiAgICAgIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApO1xuICB9XG5cbiAgZ2V0IHNob3dSZXBlYXRXaGVuRGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dSZXBlYXRXaGVuICYmIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5EYXk7XG4gIH1cblxuICBnZXQgc2hvd09yZGluYWxGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1JlcGVhdFdoZW4gJiZcbiAgICAgIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheVxuICAgICk7XG4gIH1cblxuICBnZXQgc2hvd01vbnRoRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHk7XG4gIH1cblxuICBnZXRPcmlnaW5MYWJlbChvOiBQYXJ0aWNpcGFudE9yaWdpbik6IHN0cmluZyB7IHJldHVybiBfZ2V0T3JpZ2luTGFiZWwodGhpcy50LCBvKTsgfVxuICBnZXRPcmlnaW5JY29uKG86IFBhcnRpY2lwYW50T3JpZ2luKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRPcmlnaW5JY29uKG8pOyB9XG4gIGdldFBhcnRpY2lwYW50TmFtZShwOiBTY2hlZHVsZVBhcnRpY2lwYW50KTogc3RyaW5nIHsgcmV0dXJuIF9nZXRQYXJ0aWNpcGFudE5hbWUocCk7IH1cbiAgZ2V0UGFydGljaXBhbnRUeXBlKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpOiBzdHJpbmcgeyByZXR1cm4gX2dldFBhcnRpY2lwYW50VHlwZSh0aGlzLnQsIHApOyB9XG4gIGdldFBhcnRpY2lwYW50VHlwZUljb24ocDogU2NoZWR1bGVQYXJ0aWNpcGFudCk6IHN0cmluZyB7IHJldHVybiBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbihwKTsgfVxuICBnZXRQcmlvcml0eVNldmVyaXR5KHA6IHN0cmluZyk6IFByaW9yaXR5U2V2ZXJpdHkgeyByZXR1cm4gX2dldFByaW9yaXR5U2V2ZXJpdHkocCk7IH1cbiAgZ2V0UHJpb3JpdHlMYWJlbChwOiBzdHJpbmcpOiBzdHJpbmcgeyByZXR1cm4gX2dldFByaW9yaXR5TGFiZWwodGhpcy50LCBwKTsgfVxuICBnZXRDb25maXJtYXRpb25TZXZlcml0eShjOiBzdHJpbmcpOiBDb25maXJtYXRpb25TZXZlcml0eSB7IHJldHVybiBfZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkoYyk7IH1cbiAgZ2V0Q29uZmlybWF0aW9uTGFiZWwoYzogc3RyaW5nKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRDb25maXJtYXRpb25MYWJlbCh0aGlzLnQsIGMpOyB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RhcnRUaW1lKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREZWZhdWx0U3RhcnRUaW1lKGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0RW5kVGltZShzdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEVuZFRpbWUoc3QpO1xuICB9XG59XG4iLCI8IS0tIFNjaGVkdWxlIERyYXdlciAtLT5cbjxwLWRyYXdlclxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBwb3NpdGlvbj1cInJpZ2h0XCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6ICc4NXZ3JywgJ21heC13aWR0aCc6ICcxMjAwcHgnIH1cIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIChvbkhpZGUpPVwib25DYW5jZWwoKVwiXG4+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImRyYXdlci10aXRsZVwiPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jYWxlbmRhclwiPjwvaT5cbiAgICAgIHt7XG4gICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgID8gKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2NoZWR1bGVfZWRpdCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9uZXcnIHwgdHJhbnNsYXRlKVxuICAgICAgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImRyYXdlci1sYXlvdXRcIiAqbmdJZj1cInNjaGVkdWxlRm9ybVwiPlxuICAgIDwhLS0gTGVmdDogRm9ybSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWxlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9kZXRhaWxzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzaWEtZHluYW1pYy1mb3JtXG4gICAgICAgICNkZXRhaWxGb3JtXG4gICAgICAgIFtzZWN0aW9uc109XCJbeyBmaWVsZHM6IHNjaGVkdWxlRGV0YWlsRmllbGRzIH1dXCJcbiAgICAgICAgW2VudGl0eURhdGFdPVwiZW50aXR5RGF0YUZvckZvcm1cIlxuICAgICAgICBbbW9kZV09XCInZm9ybSdcIlxuICAgICAgICBbc2hvd1N1Ym1pdEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgKGZvcm1SZWFkeSk9XCJvbkRldGFpbEZvcm1SZWFkeSgkZXZlbnQpXCJcbiAgICAgID48L3NpYS1keW5hbWljLWZvcm0+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJpZ2h0OiBSZWN1cnJlbmNlICsgUGFydGljaXBhbnRzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItcmlnaHRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcmF3ZXItc2VjdGlvblwiXG4gICAgICAgICpuZ0lmPVwic2hvd1JlY3VycmVuY2VGaWVsZHNcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1yZXBsYXlcIj48L2k+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfY29uZmlnJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCJzY2hlZHVsZUZvcm1cIlxuICAgICAgICAgIGNsYXNzPVwiZHJhd2VyLWZvcm1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3VycmVuY2VcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZWN1cnJlbmNlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWN1cnJlbmNlXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJyZWN1cnJlbmNlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3VycmVuY2VJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfaW50ZXJ2YWwnXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBpZD1cInJlY3VycmVuY2VJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVjdXJyZW5jZUludGVydmFsXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjFcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiOTlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1yb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93V2Vla0RheXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwid2Vla0RheXNcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dlZWtfZGF5cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICBpZD1cIndlZWtEYXlzXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3ZWVrRGF5c1wiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwid2Vla0RheU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2VsZWN0X3dlZWtfZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dSZXBlYXRXaGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5cIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfd2hlbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlblwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlblwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicmVwZWF0V2hlbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVwZWF0V2hlbkRheVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuRGF5XCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X3doZW5fZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuRGF5XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuRGF5XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjFcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiMzFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93T3JkaW5hbEZpZWxkc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXlcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX3dlZWtfZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXlcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3JkaW5hbE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93T3JkaW5hbEZpZWxkc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuV2Vla01vbnRoXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2Vla19tb250aCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlbldlZWtNb250aFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbldlZWtNb250aFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwid2Vla0RheU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1yb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93TW9udGhGaWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuTW9udGhcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfbW9udGgnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5Nb250aFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbk1vbnRoXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJtb250aE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInJlY3VycmVuY2UtZGVzY3JpcHRpb25cIlxuICAgICAgICAgICpuZ0lmPVwicmVjdXJyZW5jZURlc2NyaXB0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgPHNwYW4+e3sgcmVjdXJyZW5jZURlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8cC1kaXZpZGVyPjwvcC1kaXZpZGVyPlxuXG4gICAgICA8IS0tIFBhcnRpY2lwYW50cyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS11c2Vyc1wiPjwvaT5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcGFydGljaXBhbnRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1zZWFyY2hcIj5cbiAgICAgICAgICA8cC1hdXRvQ29tcGxldGVcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJwYXJ0aWNpcGFudFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJcbiAgICAgICAgICAgICAgb25TZWFyY2hQYXJ0aWNpcGFudHMoJGV2ZW50KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJcbiAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0aWNpcGFudCgkZXZlbnQudmFsdWUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG9uRm9jdXMpPVwiXG4gICAgICAgICAgICAgIG9uU2VhcmNoUGFydGljaXBhbnRzKHsgcXVlcnk6ICcnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zZWFyY2hfcGFydGljaXBhbnQnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbWluTGVuZ3RoXT1cIjBcIlxuICAgICAgICAgICAgW2ZvcmNlU2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmbHVpZF09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgbGV0LWl0ZW1cbiAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiaXRlbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRPcmlnaW5JY29uKGl0ZW0ub3JpZ2luKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24taW5mb1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uLW5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvbi1kZXRhaWxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlTmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24tb3JpZ2luXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRPcmlnaW5MYWJlbChpdGVtLm9yaWdpbikgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhcGFydGljaXBhbnRzTG9hZGluZyAmJlxuICAgICAgICAgICAgYWRkZWRQYXJ0aWNpcGFudHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50cy1lbXB0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXVzZXJzXCI+PC9pPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9ub19wYXJ0aWNpcGFudHMnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAtdGFibGVcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIXBhcnRpY2lwYW50c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIGFkZGVkUGFydGljaXBhbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICBcIlxuICAgICAgICAgIFt2YWx1ZV09XCJhZGRlZFBhcnRpY2lwYW50c1wiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLXN0cmlwZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1wYXJ0aWNpcGFudC10eXBlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3BhcnRpY2lwYW50X3R5cGUnXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWFjdGlvbnNcIlxuICAgICAgICAgICAgICA+PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1wPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LW5hbWUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwLnJlZmVyZW5jZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXJlZmVyZW5jZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHAucmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LXR5cGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9yaWdpbkljb24ocC5vcmlnaW4pXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0T3JpZ2luTGFiZWwocC5vcmlnaW4pIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZW1vdmVQYXJ0aWNpcGFudChwKVwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVtb3ZlJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1mb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBbbGFiZWxdPVwiJ2NybXguY29tcG9uZW50cy5jYW5jZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgW2xhYmVsXT1cIidjcm14LmNvbXBvbmVudHMuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAob25DbGljayk9XCJvblNhdmUoKVwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kcmF3ZXI+XG4iXX0=
|