@seniorsistemas/angular-components 17.5.2 → 17.5.3

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.
@@ -532,7 +532,7 @@ LookupComponent = LookupComponent_1 = __decorate([
532
532
  Injectable(),
533
533
  Component({
534
534
  selector: "s-lookup",
535
- template: "<div [ngClass]=\"{ inputgroup: showSearch }\">\n <p-autoComplete\n #autocomplete\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [dataKey]=\"dataKey\"\n [multiple]=\"multiple\"\n [inputId]=\"id + '-autocomplete'\"\n [forceSelection]=\"autocompleteForceSelection\"\n [suggestions]=\"getLookupSuggestions()\"\n (completeMethod)=\"lazyLoadLookup($event)\"\n (onSelect)=\"onSelect.next($event)\"\n (onBlur)=\"onBlur.next($event)\"\n (onFocus)=\"onFocus.next($event)\"\n (onUnselect)=\"onUnselect.next($event)\"\n (onClear)=\"onClear.next($event)\"\n (onKeyUp)=\"onKeyUp.next($event)\"\n [field]=\"lookupDisplayField\"\n [emptyMessage]=\"lookupEmptyMessage\"\n [dropdown]=\"!showSearch\"\n [appendTo]=\"lookupAppendTo\"\n [placeholder]=\"placeholder || ' '\"\n [autoHighlight]=\"true\"\n inputStyleClass=\"mousetrap\">\n <ng-template let-item pTemplate=\"selectedItem\">\n <span\n class=\"ui-autocomplete-token-label ng-tns-c65-43 ng-star-inserted\"\n [sTooltip]=\"lookupDisplayFieldTooltip ? item[lookupDisplayField] : null\"\n tooltipPosition=\"top\">\n {{item[lookupDisplayField]}}\n </span>\n </ng-template>\n </p-autoComplete>\n <button\n *ngIf=\"showSearch\"\n pButton\n type=\"button\"\n icon=\"fa fa-search\"\n class=\"button-addon\"\n [disabled]=\"disabled\"\n (click)=\"showDialog()\">\n </button>\n</div>\n<p-dialog\n appendTo=\"body\"\n styleClass=\"s-lookup-modal\"\n [header]=\"searchTitle || 'platform.angular_components.advanced_search' | translate\"\n [(visible)]=\"dialogVisible\"\n [modal]=\"true\"\n (onHide)=\"hideDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n #dialog>\n <div\n *ngIf=\"dialogVisible\"\n class=\"s-lookup-modal-container\">\n <div\n *ngIf=\"searchFields && searchFields.length\"\n class=\"filter\"\n [@collapseContent]=\"collapsed \n ? { value: 'hidden', params: { transitionParams: transitionOptions } }\n : { value: 'visible', params: { transitionParams: transitionOptions } }\"\n (@collapseContent.done)=\"onToggleDone()\">\n <form\n [formGroup]=\"formGroupDialog\"\n novalidate\n autocomplete=\"off\">\n <div\n *ngIf=\"!collapsed\"\n class=\"form-content\"\n [@childCollapseContent]=\"collapsed\n ? { value: ':leave', params: { transitionParams: transitionOptions } }\n : { value: ':enter', params: { transitionParams: transitionOptions } }\">\n <div class=\"filter-title sds-section-title\">\n {{ filterTitle || \"platform.angular_components.filters\" | translate }}\n </div>\n <div class=\"form-fields\">\n <s-dynamic-form\n [fields]=\"searchFields\"\n [form]=\"formGroupDialog\">\n </s-dynamic-form>\n </div>\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <s-button\n [id]=\"id + '-filter-button'\"\n type=\"submit\"\n [label]=\"filterLabel || 'platform.angular_components.filter' | translate\"\n (onClick)=\"search()\"\n sTooltip=\"(ALT + SHIFT + F)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n <s-button\n [id]=\"id + '-clear-button'\"\n type=\"button\"\n [label]=\"clearLabel || 'platform.angular_components.clear' | translate\"\n (onClick)=\"clear()\"\n priority=\"link\"\n sTooltip=\"(ALT + SHIFT + L)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n </div>\n </div>\n </div>\n </form>\n </div>\n <div\n *ngIf=\"searchFields && searchFields.length\"\n class=\"filter-toggle\">\n <div class=\"filter-toggle--start-border-mask\"></div>\n <button\n [id]=\"id + '-filter-toggle-button'\"\n type=\"button\"\n (click)=\"filterToggle()\">\n <span\n class=\"fa\"\n [ngClass]=\"{'fa-chevron-left': !collapsed, 'fa-chevron-right': collapsed}\"\n aria-hidden=\"true\">\n </span>\n </button>\n <div class=\"filter-toggle--end-border-mask\"></div>\n </div>\n <div\n class=\"content\"\n [ngClass]=\"{'empty-content': !searchTotalRecords && !loading}\">\n <s-empty-state\n [id]=\"id + '-empty-state'\"\n *ngIf=\"!searchTotalRecords && !loading\"\n [title]=\"searchEmptyTitle || 'platform.angular_components.no_records_found' | translate\"\n [description]=\"searchEmptyDescription\"\n iconClass=\"fa fa-search\">\n </s-empty-state>\n\n <div>\n <s-button\n *ngIf=\"showAddOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.add' | translate\"\n (onClick)=\"onAdd.emit()\">\n </s-button>\n <s-button\n *ngIf=\"showEditOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.edit' | translate\"\n [disabled]=\"selected.length !== 1\"\n (onClick)=\"onEdit.emit(this.selected[0])\">\n </s-button>\n <s-button\n *ngIf=\"showRemoveOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.remove' | translate\"\n [disabled]=\"!selected.length\"\n (onClick)=\"onRemove.emit(this.selected)\">\n </s-button>\n </div>\n\n <p-table\n [dataKey]=\"dataKey\"\n [value]=\"getGridData()\"\n [columns]=\"searchGridFields\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [paginator]=\"true\"\n sortMode=\"multiple\"\n [totalRecords]=\"searchTotalRecords\"\n [rows]=\"10\"\n [selection]=\"selected\"\n (onLazyLoad)=\"lazyLoadGrid($event)\"\n *sLoadingState=\"loading\"\n [multiSortMeta]=\"multiSortMeta\"\n [attr.data-hidden]=\"!searchTotalRecords && !loading\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col\n *ngIf=\"multiple\"\n style=\"width: 50px\" />\n <col\n *ngFor=\"let col of columns\"\n [style.width]=\"col.width\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n *ngIf=\"multiple\"\n style=\"width: 50px\">\n <s-table-header-checkbox\n [useAllObject]=\"lookupRowProps ? false : true\"\n [rowProps]=\"lookupRowProps\">\n </s-table-header-checkbox>\n </th>\n <th\n [style.width]=\"col.width\"\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.name\"\n [pSortableColumnDisabled]=\"sortableColumnsDisabled?.includes(col.name)\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.label }}</span>\n <p-sortIcon\n [field]=\"col.name\"\n *ngIf=\"!sortableColumnsDisabled?.includes(col.name)\">\n </p-sortIcon>\n </div>\n </th>\n </tr>\n </ng-template>\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns\n let-rowIndex=\"rowIndex\">\n <tr\n sNavigation\n [pSelectableRow]=\"rowData\"\n [pSelectableRowIndex]=\"rowIndex\"\n sDoubleClick (onDoubleClick)=\"onTableRowDoubleClick(rowData)\">\n <td\n *ngIf=\"multiple\"\n style=\"width: 50px\"\n tabindex=\"0\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [pSelectableRow]=\"rowData\">\n </p-tableCheckbox>\n </td>\n <td\n [style.width]=\"col['width']\"\n *ngFor=\"let col of searchGridFields\"\n [ngSwitch]=\"col.type\"\n tabindex=\"0\">\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <ng-container *ngIf=\"isBooleanValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getBooleanLabel(rowData, col.name, col.optionsLabel) }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Date'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate: col.calendarLocaleOptions?.dateFormat || \"L\" | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'LocalDateTime'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Time'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedTime: col.calendarLocaleOptions?.dateFormat || \"LTS\" | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Integer'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getIntegerMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Double'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getDoubleMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Money'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getMoneyMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Number'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getNumberMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Enum'\">\n <ng-container\n *ngIf=\"getLabelForValue(getFieldValue(rowData, col.name), col.options); else emptyTemplate\"\n >\n <span> {{ getLabelForValue(getFieldValue(rowData, col.name), col.options) }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"col.mask && col.mask()\">\n <ng-container *ngIf=\"(isNumber(rowData, col.name) || getFieldValue(rowData, col.name))\">\n <span>{{ getFieldValue(rowData, col.name) | sMaskFormatter: col.mask() }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!(col.mask && col.mask())\">\n <ng-container *ngIf=\"(isNumber(rowData, col.name) || getFieldValue(rowData, col.name)); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\">\n <span [attr.data-hidden]=\"loading\">\n {{ printRecordTotalizer() }}\n </span>\n </ng-template>\n </p-table>\n </div>\n </div>\n <p-footer>\n <s-button\n [id]=\"id + '-select-button'\"\n type=\"button\"\n [label]=\"selectLabel || 'platform.angular_components.select' | translate\"\n (onClick)=\"select()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [disabled]=\"!selected?.length\">\n </s-button>\n <s-button\n [id]=\"id + '-cancel-button'\"\n type=\"button\"\n priority=\"link\"\n [label]=\"cancelLabel || 'platform.angular_components.cancel' | translate\"\n (onClick)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n </p-footer>\n</p-dialog>\n<ng-template #emptyTemplate>\n <span [ngClass]=\"'sds-empty-value'\">\n {{ emptyFieldLabel || 'platform.angular_components.not_informed' | translate }}\n </span>\n</ng-template>\n",
535
+ template: "<div [ngClass]=\"{ inputgroup: showSearch }\">\n <p-autoComplete\n #autocomplete\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [dataKey]=\"dataKey\"\n [multiple]=\"multiple\"\n [inputId]=\"id + '-autocomplete'\"\n [forceSelection]=\"autocompleteForceSelection\"\n [suggestions]=\"getLookupSuggestions()\"\n (completeMethod)=\"lazyLoadLookup($event)\"\n (onSelect)=\"onSelect.next($event)\"\n (onBlur)=\"onBlur.next($event)\"\n (onFocus)=\"onFocus.next($event)\"\n (onUnselect)=\"onUnselect.next($event)\"\n (onClear)=\"onClear.next($event)\"\n (onKeyUp)=\"onKeyUp.next($event)\"\n [field]=\"lookupDisplayField\"\n [emptyMessage]=\"lookupEmptyMessage\"\n [dropdown]=\"!showSearch\"\n [appendTo]=\"lookupAppendTo\"\n [placeholder]=\"placeholder || ' '\"\n [autoHighlight]=\"true\"\n inputStyleClass=\"mousetrap\">\n <ng-template let-item pTemplate=\"selectedItem\">\n <span\n class=\"ui-autocomplete-token-label ng-tns-c65-43 ng-star-inserted\"\n [sTooltip]=\"lookupDisplayFieldTooltip ? item[lookupDisplayField] : null\"\n tooltipPosition=\"top\">\n {{item[lookupDisplayField]}}\n </span>\n </ng-template>\n </p-autoComplete>\n <button\n *ngIf=\"showSearch\"\n pButton\n type=\"button\"\n icon=\"fa fa-search\"\n class=\"button-addon\"\n [disabled]=\"disabled\"\n (click)=\"showDialog()\">\n </button>\n</div>\n<p-dialog\n appendTo=\"body\"\n styleClass=\"s-lookup-modal\"\n [header]=\"searchTitle || 'platform.angular_components.advanced_search' | translate\"\n [(visible)]=\"dialogVisible\"\n [modal]=\"true\"\n (onHide)=\"hideDialog()\"\n [blockScroll]=\"true\"\n [focusOnShow]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n #dialog>\n <div\n *ngIf=\"dialogVisible\"\n class=\"s-lookup-modal-container\">\n <div\n *ngIf=\"searchFields && searchFields.length\"\n class=\"filter\"\n [@collapseContent]=\"collapsed \n ? { value: 'hidden', params: { transitionParams: transitionOptions } }\n : { value: 'visible', params: { transitionParams: transitionOptions } }\"\n (@collapseContent.done)=\"onToggleDone()\">\n <form\n [formGroup]=\"formGroupDialog\"\n novalidate\n autocomplete=\"off\">\n <div\n *ngIf=\"!collapsed\"\n class=\"form-content\"\n [@childCollapseContent]=\"collapsed\n ? { value: ':leave', params: { transitionParams: transitionOptions } }\n : { value: ':enter', params: { transitionParams: transitionOptions } }\">\n <div class=\"filter-title sds-section-title\">\n {{ filterTitle || \"platform.angular_components.filters\" | translate }}\n </div>\n <div class=\"form-fields\">\n <s-dynamic-form\n [fields]=\"searchFields\"\n [form]=\"formGroupDialog\">\n </s-dynamic-form>\n </div>\n <div class=\"ui-g\">\n <div class=\"ui-g-12\">\n <s-button\n [id]=\"id + '-filter-button'\"\n type=\"submit\"\n [label]=\"filterLabel || 'platform.angular_components.filter' | translate\"\n (onClick)=\"search()\"\n sTooltip=\"(ALT + SHIFT + F)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n <s-button\n [id]=\"id + '-clear-button'\"\n type=\"button\"\n [label]=\"clearLabel || 'platform.angular_components.clear' | translate\"\n (onClick)=\"clear()\"\n priority=\"link\"\n sTooltip=\"(ALT + SHIFT + L)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n </div>\n </div>\n </div>\n </form>\n </div>\n <div\n *ngIf=\"searchFields && searchFields.length\"\n class=\"filter-toggle\">\n <div class=\"filter-toggle--start-border-mask\"></div>\n <button\n [id]=\"id + '-filter-toggle-button'\"\n type=\"button\"\n (click)=\"filterToggle()\">\n <span\n class=\"fa\"\n [ngClass]=\"{'fa-chevron-left': !collapsed, 'fa-chevron-right': collapsed}\"\n aria-hidden=\"true\">\n </span>\n </button>\n <div class=\"filter-toggle--end-border-mask\"></div>\n </div>\n <div\n class=\"content\"\n [ngClass]=\"{'empty-content': !searchTotalRecords && !loading}\">\n <s-empty-state\n [id]=\"id + '-empty-state'\"\n *ngIf=\"!searchTotalRecords && !loading\"\n [title]=\"searchEmptyTitle || 'platform.angular_components.no_records_found' | translate\"\n [description]=\"searchEmptyDescription\"\n iconClass=\"fa fa-search\">\n </s-empty-state>\n\n <div>\n <s-button\n *ngIf=\"showAddOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.add' | translate\"\n (onClick)=\"onAdd.emit()\">\n </s-button>\n <s-button\n *ngIf=\"showEditOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.edit' | translate\"\n [disabled]=\"selected.length !== 1\"\n (onClick)=\"onEdit.emit(this.selected[0])\">\n </s-button>\n <s-button\n *ngIf=\"showRemoveOption\"\n priority=\"default\"\n [label]=\"'platform.angular_components.remove' | translate\"\n [disabled]=\"!selected.length\"\n (onClick)=\"onRemove.emit(this.selected)\">\n </s-button>\n </div>\n\n <p-table\n [dataKey]=\"dataKey\"\n [value]=\"getGridData()\"\n [columns]=\"searchGridFields\"\n [lazy]=\"true\"\n [scrollable]=\"true\"\n [paginator]=\"true\"\n sortMode=\"multiple\"\n [totalRecords]=\"searchTotalRecords\"\n [rows]=\"10\"\n [selection]=\"selected\"\n (onLazyLoad)=\"lazyLoadGrid($event)\"\n *sLoadingState=\"{ loading: true, indicator: 'logo' }\"\n [multiSortMeta]=\"multiSortMeta\"\n [attr.data-hidden]=\"!searchTotalRecords && !loading\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col\n *ngIf=\"multiple\"\n style=\"width: 50px\" />\n <col\n *ngFor=\"let col of columns\"\n [style.width]=\"col.width\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n *ngIf=\"multiple\"\n style=\"width: 50px\">\n <s-table-header-checkbox\n [useAllObject]=\"lookupRowProps ? false : true\"\n [rowProps]=\"lookupRowProps\">\n </s-table-header-checkbox>\n </th>\n <th\n [style.width]=\"col.width\"\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.name\"\n [pSortableColumnDisabled]=\"sortableColumnsDisabled?.includes(col.name)\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.label }}</span>\n <p-sortIcon\n [field]=\"col.name\"\n *ngIf=\"!sortableColumnsDisabled?.includes(col.name)\">\n </p-sortIcon>\n </div>\n </th>\n </tr>\n </ng-template>\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns\n let-rowIndex=\"rowIndex\">\n <tr\n sNavigation\n [pSelectableRow]=\"rowData\"\n [pSelectableRowIndex]=\"rowIndex\"\n sDoubleClick (onDoubleClick)=\"onTableRowDoubleClick(rowData)\">\n <td\n *ngIf=\"multiple\"\n style=\"width: 50px\"\n tabindex=\"0\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [pSelectableRow]=\"rowData\">\n </p-tableCheckbox>\n </td>\n <td\n [style.width]=\"col['width']\"\n *ngFor=\"let col of searchGridFields\"\n [ngSwitch]=\"col.type\"\n tabindex=\"0\">\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <ng-container *ngIf=\"isBooleanValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getBooleanLabel(rowData, col.name, col.optionsLabel) }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Date'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate: col.calendarLocaleOptions?.dateFormat || \"L\" | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'LocalDateTime'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedDate | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Time'\">\n <ng-container *ngIf=\"getFieldValue(rowData, col.name); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) | localizedTime: col.calendarLocaleOptions?.dateFormat || \"LTS\" | async }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Integer'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getIntegerMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Double'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getDoubleMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Money'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getMoneyMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Number'\">\n <ng-container *ngIf=\"isNumber(rowData, col.name); else emptyTemplate\">\n <span> {{ getFieldValue(rowData, col.name) | localizedBignumber: getNumberMaskConfig(col) | async }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'Enum'\">\n <ng-container\n *ngIf=\"getLabelForValue(getFieldValue(rowData, col.name), col.options); else emptyTemplate\"\n >\n <span> {{ getLabelForValue(getFieldValue(rowData, col.name), col.options) }} </span>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"col.mask && col.mask()\">\n <ng-container *ngIf=\"(isNumber(rowData, col.name) || getFieldValue(rowData, col.name))\">\n <span>{{ getFieldValue(rowData, col.name) | sMaskFormatter: col.mask() }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!(col.mask && col.mask())\">\n <ng-container *ngIf=\"(isNumber(rowData, col.name) || getFieldValue(rowData, col.name)); else emptyTemplate\">\n <span>{{ getFieldValue(rowData, col.name) }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\">\n <span [attr.data-hidden]=\"loading\">\n {{ printRecordTotalizer() }}\n </span>\n </ng-template>\n </p-table>\n </div>\n </div>\n <p-footer>\n <s-button\n [id]=\"id + '-select-button'\"\n type=\"button\"\n [label]=\"selectLabel || 'platform.angular_components.select' | translate\"\n (onClick)=\"select()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n [disabled]=\"!selected?.length\">\n </s-button>\n <s-button\n [id]=\"id + '-cancel-button'\"\n type=\"button\"\n priority=\"link\"\n [label]=\"cancelLabel || 'platform.angular_components.cancel' | translate\"\n (onClick)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n tooltipPosition=\"top\"\n showDelay=\"500\">\n </s-button>\n </p-footer>\n</p-dialog>\n<ng-template #emptyTemplate>\n <span [ngClass]=\"'sds-empty-value'\">\n {{ emptyFieldLabel || 'platform.angular_components.not_informed' | translate }}\n </span>\n</ng-template>\n",
536
536
  providers: [
537
537
  {
538
538
  provide: NG_VALUE_ACCESSOR,
@@ -566,4 +566,4 @@ LookupComponent = LookupComponent_1 = __decorate([
566
566
  })
567
567
  ], LookupComponent);
568
568
  export { LookupComponent };
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2xvb2t1cC9sb29rdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUNWLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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QUFVLEVBQUU7WUFDUixPQUFPLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3ZCLEtBQUssQ0FDRCxRQUFRLEVBQ1IsS0FBSyxDQUFDO29CQUNGLEtBQUssRUFBRSxNQUFNO29CQUNiLE9BQU8sRUFBRSxDQUFDO2lCQUNiLENBQUMsQ0FDTDtnQkFDRCxLQUFLLENBQ0QsU0FBUyxFQUNULEtBQUssQ0FBQztvQkFDRixLQUFLLEVBQUUsR0FBRztpQkFDYixDQUFDLENBQ0w7Z0JBQ0QsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0gsQ0FBQztZQUNGLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtnQkFDNUIsS0FBSyxDQUNELFFBQVEsRUFDUixLQUFLLENBQUM7b0JBQ0YsT0FBTyxFQUFFLENBQUM7aUJBQ2IsQ0FBQyxDQUNMO2dCQUNELEtBQUssQ0FDRCxRQUFRLEVBQ1IsS0FBSyxDQUFDO29CQUNGLE9BQU8sRUFBRSxDQUFDO2lCQUNiLENBQUMsQ0FDTDtnQkFDRCxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3pELENBQUM7U0FDTDs7S0FDSixDQUFDO0dBQ1csZUFBZSxDQTZrQjNCO1NBN2tCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgYW5pbWF0ZUNoaWxkLCBncm91cCwgcXVlcnksIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWFza0NvbmZpZyB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvbmcyLWN1cnJlbmN5LW1hc2tcIjtcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tIFwiYW5ndWxhcjItaG90a2V5c1wiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5pbXBvcnQgeyBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlIH0gZnJvbSBcInByaW1lbmcvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwicHJpbWVuZy9kaWFsb2dcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gXCIuLi8uLlwiO1xuaW1wb3J0IHsgQ2FsZW5kYXJMb2NhbGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL2xvY2FsZS9vcHRpb25zL2NhbGVuZGFyXCI7XG5pbXBvcnQgeyBCaWdudW1iZXJGaWVsZENvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy9maWVsZHMvYmlnbnVtYmVyLWZpZWxkXCI7XG5pbXBvcnQgeyBCb29sZWFuT3B0aW9uc0xhYmVsIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9ib29sZWFuLWZpZWxkXCI7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMvZm9ybS1maWVsZFwiO1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlciB9IGZyb20gXCIuL21vZGVscy9kZWZhdWx0LWZpbHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWxvb2t1cFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vbG9va3VwLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL2xvb2t1cC5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb29rdXBDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcihcImNvbGxhcHNlQ29udGVudFwiLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBweFwiLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIqXCIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwidmlzaWJsZSA8PT4gaGlkZGVuXCIsIFtncm91cChbcXVlcnkoXCJAY2hpbGRDb2xsYXBzZUNvbnRlbnRcIiwgYW5pbWF0ZUNoaWxkKCkpLCBhbmltYXRlKFwie3t0cmFuc2l0aW9uUGFyYW1zfX1cIildKV0pLFxuICAgICAgICBdKSxcbiAgICAgICAgdHJpZ2dlcihcImNoaWxkQ29sbGFwc2VDb250ZW50XCIsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgIFwiOmxlYXZlXCIsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgXCI6ZW50ZXJcIixcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwiKiA8PT4gKlwiLCBhbmltYXRlKFwie3t0cmFuc2l0aW9uUGFyYW1zfX1cIikpLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMb29rdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBzLWxvb2t1cC0ke0xvb2t1cENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlRm9yY2VTZWxlY3Rpb24gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRhS2V5OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93U2VhcmNoID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cFN1Z2dlc3Rpb25zOiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cERpc3BsYXlGaWVsZDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9va3VwRGlzcGxheUZpZWxkVG9vbHRpcDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cEVtcHR5TWVzc2FnZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9va3VwQXBwZW5kVG8gPSBcImJvZHlcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaEVtcHR5RGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaEdyaWREYXRhOiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aVNvcnRNZXRhOiBTb3J0TWV0YVtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNvcnRhYmxlQ29sdW1uc0Rpc2FibGVkOiBzdHJpbmdbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cFJvd1Byb3BzOiBzdHJpbmdbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlZmF1bHRGaWx0ZXI6IERlZmF1bHRGaWx0ZXJbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dBZGRPcHRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dFZGl0T3B0aW9uID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93UmVtb3ZlT3B0aW9uID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Mb29rdXBSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2VhcmNoUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbktleVVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uVW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd25bXT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoVGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKERpYWxvZywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGRpYWxvZzogRGlhbG9nO1xuXG4gICAgQFZpZXdDaGlsZChBdXRvQ29tcGxldGUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhdXRvY29tcGxldGU6IEF1dG9Db21wbGV0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hFbXB0eVRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hUb3RhbFJlY29yZHNMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsdGVyVGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbHRlckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjbGVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0TGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5RmllbGRMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVjb3JkTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlY29yZHNMYWJlbDogc3RyaW5nO1xuXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIGFuaW1hdGluZzogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc2VsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgcHVibGljIGZvcm1Hcm91cERpYWxvZzogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyB0cmFuc2l0aW9uT3B0aW9ucyA9IFwiNDAwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpXCI7XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEZvcm1WYWx1ZXMgPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaEdyaWRGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzLm1hcCgoaXRlbSkgPT4gbmV3IEZvcm1GaWVsZCh7IC4uLml0ZW0gfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAodmFsdWU6IEZvcm1GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLnNlYXJjaEdyaWRGaWVsZHMubWFwKChncmlkRmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgZ3JpZEZpZWxkW1wid2lkdGhcIl0gPSB0aGlzLmdldENvbFdpZHRoKGdyaWRGaWVsZC5sYWJlbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbGVuZGFyT3B0aW9ucyA9IG5ldyBDYWxlbmRhckxvY2FsZU9wdGlvbnMoeyAuLi5ncmlkRmllbGQuY2FsZW5kYXJMb2NhbGVPcHRpb25zIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2FsZW5kYXJPcHRpb25zPy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChncmlkRmllbGQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zLmRhdGVGb3JtYXQgPSB0aGlzLl9jb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0KGNhbGVuZGFyT3B0aW9ucy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zLmRhdGVGb3JtYXQgPSB0aGlzLl9jb252ZXJ0VG9Nb21lbnRIb3VyRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9ucy5ob3VyRm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9ucy5kYXRlRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyaWRGaWVsZC5jYWxlbmRhckxvY2FsZU9wdGlvbnMgPSBjYWxlbmRhck9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBncmlkRmllbGQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VhcmNoRmllbGRzLnJlZHVjZSgocmVzdWx0OiBhbnksIGZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzW2ZpZWxkLm5hbWVdID0gZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwRGlhbG9nID0gbmV3IEZvcm1Hcm91cChmb3JtR3JvdXApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludFJlY29yZFRvdGFsaXplcigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hUb3RhbFJlY29yZHNMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmRMYWJlbCA9IHRoaXMucmVjb3JkTGFiZWxcbiAgICAgICAgICAgID8gYCR7dGhpcy5zZWFyY2hUb3RhbFJlY29yZHN9ICR7dGhpcy5yZWNvcmRMYWJlbH1gXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZFwiLCB7IGNvdW50OiB0aGlzLnNlYXJjaFRvdGFsUmVjb3JkcyB9KTtcblxuICAgICAgICBjb25zdCByZWNvcmRzTGFiZWwgPSB0aGlzLnJlY29yZHNMYWJlbFxuICAgICAgICAgICAgPyBgJHt0aGlzLnNlYXJjaFRvdGFsUmVjb3Jkc30gJHt0aGlzLnJlY29yZHNMYWJlbH1gXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZHNcIiwgeyBjb3VudDogdGhpcy5zZWFyY2hUb3RhbFJlY29yZHMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVG90YWxSZWNvcmRzID09PSAxID8gcmVjb3JkTGFiZWwgOiByZWNvcmRzTGFiZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29udmVydFRvTW9tZW50SG91ckZvcm1hdChob3VyRm9ybWF0OiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiZGQvbW0veXlcIikge1xuICAgICAgICAgICAgLy8gdmFsb3IgcGFkcsOjbyBwYXJhIG8gZm9ybWF0LlxuICAgICAgICAgICAgcmV0dXJuIFwiTFRTXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG91ckZvcm1hdCA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYkhcXGIvLCBcImhcIikgLy8gaG91ciAoMTIgaG91ciB0aW1lKSAobm8gbGVhZGluZyB6ZXJvKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJISFxcYi8sIFwiaGhcIik7IC8vIGhvdXIgKDEyIGhvdXIgdGltZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3VyRm9ybWF0ID09PSBcIjI0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiaFxcYi8sIFwiSFwiKSAvLyBob3VyICgyNCBob3VyIHRpbWUpIChubyBsZWFkaW5nIHplcm8pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmhoXFxiLywgXCJISFwiKTsgLy8gaG91ciAoMjQgaG91ciB0aW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0KGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gQSBvcmRlbSBkb3MgcmVwbGFjZXMgw6kgaW1wb3J0YW50ZS5cbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmRcXGIvLCBcIkRcIikgLy8gZGF5IG9mIG1vbnRoIChubyBsZWFkaW5nIHplcm8pXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiZGRcXGIvLCBcIkREXCIpIC8vIGRheSBvZiBtb250aFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYm9cXGIvLCBcIkRERFwiKSAvLyBkYXkgb2YgdGhlIHllYXIgKG5vIGxlYWRpbmcgemVybylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJvb1xcYi8sIFwiRERERFwiKSAvLyBkYXkgb2YgdGhlIHllYXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJNXFxiLywgXCJNTU1cIikgLy8gbW9udGggbmFtZSBzaG9ydFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYk1NXFxiLywgXCJNTU1NXCIpIC8vIG1vbnRoIG5hbWUgbG9uZ1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYm1cXGIvLCBcIk1cIikgLy8gbW9udGggb2YgeWVhciAobm8gbGVhZGluZylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJtbVxcYi8sIFwiTU1cIikgLy8gbW9udGggb2YgeWVhclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYnlcXGIvLCBcIllZXCIpIC8vIHllYXIgKHR3byBkaWdpdHMpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxieXlcXGIvLCBcIllZWVlcIik7IC8vIHllYXIgKGZvdXIgZGlnaXRzKVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLm9uT3ZlcmxheUFuaW1hdGlvbkRvbmUgPSAoZXZlbnQpID0+IHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1Zpc2libGUgJiYgY2hhbmdlcy5zZWFyY2hHcmlkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRGb2N1c0ZpbHRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdyaWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hHcmlkRGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9va3VwU3VnZ2VzdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2t1cFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBtYWtlU2VhcmNoUmVxdWVzdFBhcmFtcyhldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZvcm1Hcm91cERpYWxvZy5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLmV2ZW50LCBmaWx0ZXJEYXRhOiBmaWx0ZXJzIH07XG4gICAgICAgIGNvbnN0IHsgbXVsdGlTb3J0TWV0YSB9ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IG11bHRpU29ydE1ldGEgfHwgdGhpcy5tdWx0aVNvcnRNZXRhO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIGxhenlMb2FkR3JpZChldmVudDogYW55KSB7XG4gICAgICAgIC8vIEFvIGRlZmluaXIgdW1hIG9yZGVuYcOnw6NvIG5hIHRhYmVsYSBkbyBsb29rdXAgZXNzZSBtw6l0b2RvIMOpIGNoYW1hZG8gMiB2ZXplcyBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2lzc3Vlcy81NDgwXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMubWFrZVNlYXJjaFJlcXVlc3RQYXJhbXMoZXZlbnQpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5uZXh0KHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxhenlMb2FkTG9va3VwKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkxvb2t1cFJlcXVlc3QubmV4dChldmVudC5xdWVyeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERlZmF1bHRGaWx0ZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdEZpbHRlcikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlclxuICAgICAgICAgICAgLmZpbHRlcigoeyBmaWVsZCB9KSA9PiB0aGlzLmZvcm1Hcm91cERpYWxvZy5jb250YWlucyhmaWVsZCkgJiYgIXRoaXMuZm9ybUdyb3VwRGlhbG9nLmdldChbZmllbGRdKS5kaXJ0eSlcbiAgICAgICAgICAgIC5mb3JFYWNoKCh7IHZhbHVlLCBmaWVsZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBEaWFsb2cuZ2V0KFtmaWVsZF0pLnBhdGNoVmFsdWUodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RpYWxvZygpIHtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0RmlsdGVycygpO1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWREYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLnBhdXNlKFsuLi50aGlzLmhvdGtleXNTZXJ2aWNlLmhvdGtleXNdKTtcbiAgICAgICAgdGhpcy5zZXRIb3RrZXlzKCk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBbdGhpcy52YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVEaWFsb2coKSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRFTCwgbXVsdGlJbnB1dEVMIH0gPSB0aGlzLmF1dG9jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5kaWFsb2dWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UudW5wYXVzZShbLi4udGhpcy5ob3RrZXlzU2VydmljZS5wYXVzZWRIb3RrZXlzXSk7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIG11bHRpSW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsc2UgaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5yZXNldFRhYmxlKCk7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaWFsb2cubW92ZU9uVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cERpYWxvZy5yZXNldCh0aGlzLm9yaWdpbmFsRm9ybVZhbHVlcyk7XG4gICAgICAgIHRoaXMucmVzZXRUYWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNldFRhYmxlKCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCAmJiAodGhpcy5tdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWQgOiB0aGlzLnNlbGVjdGVkWzBdKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLm9uU2VsZWN0Lm5leHQoc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWQ6IGFueSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICBlbHNlIHRoaXMuc2VsZWN0ZWQgPSBbc2VsZWN0ZWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdKSB7XG4gICAgICAgIGlmICghb3B0aW9ucykgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNCb29sZWFuVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShvYmosIHBhdGgpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJvb2xlYW5MYWJlbChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBvcHRpb25zTGFiZWw6IEJvb2xlYW5PcHRpb25zTGFiZWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEZpZWxkVmFsdWUob2JqLCBwYXRoKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gb3B0aW9uc0xhYmVsLnRydWU7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkgcmV0dXJuIG9wdGlvbnNMYWJlbC5mYWxzZTtcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5lbXB0eUZpZWxkTGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTnVtYmVyKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICFuZXcgQmlnTnVtYmVyKHRoaXMuZ2V0RmllbGRWYWx1ZShvYmosIHBhdGgpKS5pc05hTigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIb3RrZXlzKCkge1xuICAgICAgICBjb25zdCBjbGVhckhvdGtleSA9IHRoaXMubmV3SG90a2V5KFwiYWx0K3NoaWZ0K2xcIiwgdGhpcy5jbGVhci5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgZmluZEhvdGtleSA9IHRoaXMubmV3SG90a2V5KFwiYWx0K3NoaWZ0K2ZcIiwgdGhpcy5zZWFyY2guYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IGhpZGVIb3RrZXkgPSB0aGlzLm5ld0hvdGtleShcImFsdCtzaGlmdCtjXCIsIHRoaXMuaGlkZURpYWxvZy5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0SG90a2V5ID0gdGhpcy5uZXdIb3RrZXkoXCJhbHQrc2hpZnQrc1wiLCB0aGlzLnNlbGVjdC5iaW5kKHRoaXMpKTtcblxuICAgICAgICBjb25zdCBiaW5kZWRIb3RrZXlzID0gW2NsZWFySG90a2V5LCBmaW5kSG90a2V5LCBoaWRlSG90a2V5LCBzZWxlY3RIb3RrZXldO1xuICAgICAgICBiaW5kZWRIb3RrZXlzLmZvckVhY2goKGhvdGtleTogSG90a2V5KSA9PiB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChob3RrZXkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5ld0hvdGtleShjb21ibzogc3RyaW5nLCBmbjogRnVuY3Rpb24pOiBIb3RrZXkge1xuICAgICAgICByZXR1cm4gbmV3IEhvdGtleShjb21ibywgKCkgPT4ge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSwgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbHRlclRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW5nKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub2dnbGVEb25lKCkge1xuICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgdGFibGUgY29sdW1uIHNpemUuIFRoZSBtaW5pbXVtIHZhbHVlIGlzIDE0LjI4NmVtLCB3aGljaCBpcyBlcXVhbHMgdG8gMjAwcHggZHVvIHRvIHRoZSBjdXJyZW50IGZvbnQgc2l6ZS5cbiAgICAgKiBAcGFyYW0gbGFiZWwgQ29sdW1uIG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbFdpZHRoKGxhYmVsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGxhYmVsLmxlbmd0aDtcbiAgICAgICAgaWYgKHNpemUgPCAxNC4yODYpIHJldHVybiBgMTQuMjg2ZW1gO1xuICAgICAgICByZXR1cm4gYCR7c2l6ZX1lbWA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNjYWxlKHNjYWxlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Z1bmN0aW9uKHNjYWxlKSA/IHNjYWxlKCkgOiBzY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW50ZWdlck1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgICAgICB0aG91c2FuZHNTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy50aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldERvdWJsZU1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb25leU1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8uY3VycmVuY3lTeW1ib2wsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bWJlck1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8uY3VycmVuY3lTeW1ib2wsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVSb3dEb3VibGVDbGljayhyb3dEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtyb3dEYXRhXTtcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRGb2N1c0ZpbHRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nVmlzaWJsZSAmJiAhdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5kaWFsb2c/LmNvbnRlbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG5cbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgIChpbnB1dCBhcyBIVE1MSW5wdXRFbGVtZW50KS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMubG9hZGluZyA9IHRydWUpKTtcblxuICAgICAgICB0aGlzLm9uU2VsZWN0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpKTtcblxuICAgICAgICB0aGlzLm9uVW5zZWxlY3QucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSkpO1xuXG4gICAgICAgIHRoaXMub25DbGVhci5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uRm9jdXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25CbHVyLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZVt0aGlzLmxvb2t1cERpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0YXJnZXQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlIHx8ICFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlID09IHZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2xvb2t1cC9sb29rdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsVUFBVSxFQUNWLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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QUFVLEVBQUU7WUFDUixPQUFPLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3ZCLEtBQUssQ0FDRCxRQUFRLEVBQ1IsS0FBSyxDQUFDO29CQUNGLEtBQUssRUFBRSxNQUFNO29CQUNiLE9BQU8sRUFBRSxDQUFDO2lCQUNiLENBQUMsQ0FDTDtnQkFDRCxLQUFLLENBQ0QsU0FBUyxFQUNULEtBQUssQ0FBQztvQkFDRixLQUFLLEVBQUUsR0FBRztpQkFDYixDQUFDLENBQ0w7Z0JBQ0QsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0gsQ0FBQztZQUNGLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtnQkFDNUIsS0FBSyxDQUNELFFBQVEsRUFDUixLQUFLLENBQUM7b0JBQ0YsT0FBTyxFQUFFLENBQUM7aUJBQ2IsQ0FBQyxDQUNMO2dCQUNELEtBQUssQ0FDRCxRQUFRLEVBQ1IsS0FBSyxDQUFDO29CQUNGLE9BQU8sRUFBRSxDQUFDO2lCQUNiLENBQUMsQ0FDTDtnQkFDRCxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3pELENBQUM7U0FDTDs7S0FDSixDQUFDO0dBQ1csZUFBZSxDQTZrQjNCO1NBN2tCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgYW5pbWF0ZUNoaWxkLCBncm91cCwgcXVlcnksIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWFza0NvbmZpZyB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvbmcyLWN1cnJlbmN5LW1hc2tcIjtcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tIFwiYW5ndWxhcjItaG90a2V5c1wiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5pbXBvcnQgeyBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlIH0gZnJvbSBcInByaW1lbmcvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwicHJpbWVuZy9kaWFsb2dcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gXCIuLi8uLlwiO1xuaW1wb3J0IHsgQ2FsZW5kYXJMb2NhbGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL2xvY2FsZS9vcHRpb25zL2NhbGVuZGFyXCI7XG5pbXBvcnQgeyBCaWdudW1iZXJGaWVsZENvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy9maWVsZHMvYmlnbnVtYmVyLWZpZWxkXCI7XG5pbXBvcnQgeyBCb29sZWFuT3B0aW9uc0xhYmVsIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9ib29sZWFuLWZpZWxkXCI7XG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMvZm9ybS1maWVsZFwiO1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlciB9IGZyb20gXCIuL21vZGVscy9kZWZhdWx0LWZpbHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWxvb2t1cFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vbG9va3VwLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL2xvb2t1cC5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb29rdXBDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcihcImNvbGxhcHNlQ29udGVudFwiLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBweFwiLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIqXCIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwidmlzaWJsZSA8PT4gaGlkZGVuXCIsIFtncm91cChbcXVlcnkoXCJAY2hpbGRDb2xsYXBzZUNvbnRlbnRcIiwgYW5pbWF0ZUNoaWxkKCkpLCBhbmltYXRlKFwie3t0cmFuc2l0aW9uUGFyYW1zfX1cIildKV0pLFxuICAgICAgICBdKSxcbiAgICAgICAgdHJpZ2dlcihcImNoaWxkQ29sbGFwc2VDb250ZW50XCIsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgIFwiOmxlYXZlXCIsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgXCI6ZW50ZXJcIixcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKFwiKiA8PT4gKlwiLCBhbmltYXRlKFwie3t0cmFuc2l0aW9uUGFyYW1zfX1cIikpLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMb29rdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBzLWxvb2t1cC0ke0xvb2t1cENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlRm9yY2VTZWxlY3Rpb24gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRhS2V5OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93U2VhcmNoID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cFN1Z2dlc3Rpb25zOiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cERpc3BsYXlGaWVsZDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9va3VwRGlzcGxheUZpZWxkVG9vbHRpcDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cEVtcHR5TWVzc2FnZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9va3VwQXBwZW5kVG8gPSBcImJvZHlcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaEVtcHR5RGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaEdyaWREYXRhOiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aVNvcnRNZXRhOiBTb3J0TWV0YVtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNvcnRhYmxlQ29sdW1uc0Rpc2FibGVkOiBzdHJpbmdbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvb2t1cFJvd1Byb3BzOiBzdHJpbmdbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlZmF1bHRGaWx0ZXI6IERlZmF1bHRGaWx0ZXJbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dBZGRPcHRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dFZGl0T3B0aW9uID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93UmVtb3ZlT3B0aW9uID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Mb29rdXBSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2VhcmNoUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbktleVVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uVW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd25bXT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoVGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKERpYWxvZywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGRpYWxvZzogRGlhbG9nO1xuXG4gICAgQFZpZXdDaGlsZChBdXRvQ29tcGxldGUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhdXRvY29tcGxldGU6IEF1dG9Db21wbGV0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hFbXB0eVRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hUb3RhbFJlY29yZHNMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsdGVyVGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbHRlckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjbGVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBMb29rdXAgY2FuIGRvIHRoaXMgZm9yIHlvdS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0TGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5RmllbGRMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgTG9va3VwIGNhbiBkbyB0aGlzIGZvciB5b3UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVjb3JkTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIExvb2t1cCBjYW4gZG8gdGhpcyBmb3IgeW91LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlY29yZHNMYWJlbDogc3RyaW5nO1xuXG4gICAgcHVibGljIHZhbHVlOiBhbnk7XG4gICAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIGFuaW1hdGluZzogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc2VsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgcHVibGljIGZvcm1Hcm91cERpYWxvZzogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyB0cmFuc2l0aW9uT3B0aW9ucyA9IFwiNDAwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpXCI7XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEZvcm1WYWx1ZXMgPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaEdyaWRGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuc2VhcmNoRmllbGRzLm1hcCgoaXRlbSkgPT4gbmV3IEZvcm1GaWVsZCh7IC4uLml0ZW0gfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLnNlYXJjaEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAodmFsdWU6IEZvcm1GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLnNlYXJjaEdyaWRGaWVsZHMubWFwKChncmlkRmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgZ3JpZEZpZWxkW1wid2lkdGhcIl0gPSB0aGlzLmdldENvbFdpZHRoKGdyaWRGaWVsZC5sYWJlbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbGVuZGFyT3B0aW9ucyA9IG5ldyBDYWxlbmRhckxvY2FsZU9wdGlvbnMoeyAuLi5ncmlkRmllbGQuY2FsZW5kYXJMb2NhbGVPcHRpb25zIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2FsZW5kYXJPcHRpb25zPy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChncmlkRmllbGQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zLmRhdGVGb3JtYXQgPSB0aGlzLl9jb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0KGNhbGVuZGFyT3B0aW9ucy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zLmRhdGVGb3JtYXQgPSB0aGlzLl9jb252ZXJ0VG9Nb21lbnRIb3VyRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9ucy5ob3VyRm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9ucy5kYXRlRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyaWRGaWVsZC5jYWxlbmRhckxvY2FsZU9wdGlvbnMgPSBjYWxlbmRhck9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBncmlkRmllbGQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VhcmNoRmllbGRzLnJlZHVjZSgocmVzdWx0OiBhbnksIGZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGb3JtVmFsdWVzW2ZpZWxkLm5hbWVdID0gZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwRGlhbG9nID0gbmV3IEZvcm1Hcm91cChmb3JtR3JvdXApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludFJlY29yZFRvdGFsaXplcigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hUb3RhbFJlY29yZHNMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmRMYWJlbCA9IHRoaXMucmVjb3JkTGFiZWxcbiAgICAgICAgICAgID8gYCR7dGhpcy5zZWFyY2hUb3RhbFJlY29yZHN9ICR7dGhpcy5yZWNvcmRMYWJlbH1gXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZFwiLCB7IGNvdW50OiB0aGlzLnNlYXJjaFRvdGFsUmVjb3JkcyB9KTtcblxuICAgICAgICBjb25zdCByZWNvcmRzTGFiZWwgPSB0aGlzLnJlY29yZHNMYWJlbFxuICAgICAgICAgICAgPyBgJHt0aGlzLnNlYXJjaFRvdGFsUmVjb3Jkc30gJHt0aGlzLnJlY29yZHNMYWJlbH1gXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZHNcIiwgeyBjb3VudDogdGhpcy5zZWFyY2hUb3RhbFJlY29yZHMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVG90YWxSZWNvcmRzID09PSAxID8gcmVjb3JkTGFiZWwgOiByZWNvcmRzTGFiZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29udmVydFRvTW9tZW50SG91ckZvcm1hdChob3VyRm9ybWF0OiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiZGQvbW0veXlcIikge1xuICAgICAgICAgICAgLy8gdmFsb3IgcGFkcsOjbyBwYXJhIG8gZm9ybWF0LlxuICAgICAgICAgICAgcmV0dXJuIFwiTFRTXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG91ckZvcm1hdCA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYkhcXGIvLCBcImhcIikgLy8gaG91ciAoMTIgaG91ciB0aW1lKSAobm8gbGVhZGluZyB6ZXJvKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJISFxcYi8sIFwiaGhcIik7IC8vIGhvdXIgKDEyIGhvdXIgdGltZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3VyRm9ybWF0ID09PSBcIjI0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiaFxcYi8sIFwiSFwiKSAvLyBob3VyICgyNCBob3VyIHRpbWUpIChubyBsZWFkaW5nIHplcm8pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmhoXFxiLywgXCJISFwiKTsgLy8gaG91ciAoMjQgaG91ciB0aW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9Nb21lbnREYXRlRm9ybWF0KGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gQSBvcmRlbSBkb3MgcmVwbGFjZXMgw6kgaW1wb3J0YW50ZS5cbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmRcXGIvLCBcIkRcIikgLy8gZGF5IG9mIG1vbnRoIChubyBsZWFkaW5nIHplcm8pXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiZGRcXGIvLCBcIkREXCIpIC8vIGRheSBvZiBtb250aFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYm9cXGIvLCBcIkRERFwiKSAvLyBkYXkgb2YgdGhlIHllYXIgKG5vIGxlYWRpbmcgemVybylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJvb1xcYi8sIFwiRERERFwiKSAvLyBkYXkgb2YgdGhlIHllYXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJNXFxiLywgXCJNTU1cIikgLy8gbW9udGggbmFtZSBzaG9ydFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYk1NXFxiLywgXCJNTU1NXCIpIC8vIG1vbnRoIG5hbWUgbG9uZ1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYm1cXGIvLCBcIk1cIikgLy8gbW9udGggb2YgeWVhciAobm8gbGVhZGluZylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJtbVxcYi8sIFwiTU1cIikgLy8gbW9udGggb2YgeWVhclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYnlcXGIvLCBcIllZXCIpIC8vIHllYXIgKHR3byBkaWdpdHMpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxieXlcXGIvLCBcIllZWVlcIik7IC8vIHllYXIgKGZvdXIgZGlnaXRzKVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLm9uT3ZlcmxheUFuaW1hdGlvbkRvbmUgPSAoZXZlbnQpID0+IHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1Zpc2libGUgJiYgY2hhbmdlcy5zZWFyY2hHcmlkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRGb2N1c0ZpbHRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdyaWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hHcmlkRGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TG9va3VwU3VnZ2VzdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2t1cFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBtYWtlU2VhcmNoUmVxdWVzdFBhcmFtcyhldmVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZvcm1Hcm91cERpYWxvZy5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLmV2ZW50LCBmaWx0ZXJEYXRhOiBmaWx0ZXJzIH07XG4gICAgICAgIGNvbnN0IHsgbXVsdGlTb3J0TWV0YSB9ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IG11bHRpU29ydE1ldGEgfHwgdGhpcy5tdWx0aVNvcnRNZXRhO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIGxhenlMb2FkR3JpZChldmVudDogYW55KSB7XG4gICAgICAgIC8vIEFvIGRlZmluaXIgdW1hIG9yZGVuYcOnw6NvIG5hIHRhYmVsYSBkbyBsb29rdXAgZXNzZSBtw6l0b2RvIMOpIGNoYW1hZG8gMiB2ZXplcyBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2lzc3Vlcy81NDgwXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMubWFrZVNlYXJjaFJlcXVlc3RQYXJhbXMoZXZlbnQpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5uZXh0KHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxhenlMb2FkTG9va3VwKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkxvb2t1cFJlcXVlc3QubmV4dChldmVudC5xdWVyeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERlZmF1bHRGaWx0ZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdEZpbHRlcikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlclxuICAgICAgICAgICAgLmZpbHRlcigoeyBmaWVsZCB9KSA9PiB0aGlzLmZvcm1Hcm91cERpYWxvZy5jb250YWlucyhmaWVsZCkgJiYgIXRoaXMuZm9ybUdyb3VwRGlhbG9nLmdldChbZmllbGRdKS5kaXJ0eSlcbiAgICAgICAgICAgIC5mb3JFYWNoKCh7IHZhbHVlLCBmaWVsZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBEaWFsb2cuZ2V0KFtmaWVsZF0pLnBhdGNoVmFsdWUodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RpYWxvZygpIHtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0RmlsdGVycygpO1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWREYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLnBhdXNlKFsuLi50aGlzLmhvdGtleXNTZXJ2aWNlLmhvdGtleXNdKTtcbiAgICAgICAgdGhpcy5zZXRIb3RrZXlzKCk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZC5jb25jYXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBbdGhpcy52YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVEaWFsb2coKSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRFTCwgbXVsdGlJbnB1dEVMIH0gPSB0aGlzLmF1dG9jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5kaWFsb2dWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UudW5wYXVzZShbLi4udGhpcy5ob3RrZXlzU2VydmljZS5wYXVzZWRIb3RrZXlzXSk7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIG11bHRpSW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsc2UgaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5yZXNldFRhYmxlKCk7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaWFsb2cubW92ZU9uVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cERpYWxvZy5yZXNldCh0aGlzLm9yaWdpbmFsRm9ybVZhbHVlcyk7XG4gICAgICAgIHRoaXMucmVzZXRUYWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNldFRhYmxlKCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCAmJiAodGhpcy5tdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWQgOiB0aGlzLnNlbGVjdGVkWzBdKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLm9uU2VsZWN0Lm5leHQoc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWQ6IGFueSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICBlbHNlIHRoaXMuc2VsZWN0ZWQgPSBbc2VsZWN0ZWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdKSB7XG4gICAgICAgIGlmICghb3B0aW9ucykgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNCb29sZWFuVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShvYmosIHBhdGgpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJvb2xlYW5MYWJlbChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBvcHRpb25zTGFiZWw6IEJvb2xlYW5PcHRpb25zTGFiZWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEZpZWxkVmFsdWUob2JqLCBwYXRoKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gb3B0aW9uc0xhYmVsLnRydWU7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkgcmV0dXJuIG9wdGlvbnNMYWJlbC5mYWxzZTtcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5lbXB0eUZpZWxkTGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTnVtYmVyKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICFuZXcgQmlnTnVtYmVyKHRoaXMuZ2V0RmllbGRWYWx1ZShvYmosIHBhdGgpKS5pc05hTigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIb3RrZXlzKCkge1xuICAgICAgICBjb25zdCBjbGVhckhvdGtleSA9IHRoaXMubmV3SG90a2V5KFwiYWx0K3NoaWZ0K2xcIiwgdGhpcy5jbGVhci5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgZmluZEhvdGtleSA9IHRoaXMubmV3SG90a2V5KFwiYWx0K3NoaWZ0K2ZcIiwgdGhpcy5zZWFyY2guYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IGhpZGVIb3RrZXkgPSB0aGlzLm5ld0hvdGtleShcImFsdCtzaGlmdCtjXCIsIHRoaXMuaGlkZURpYWxvZy5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0SG90a2V5ID0gdGhpcy5uZXdIb3RrZXkoXCJhbHQrc2hpZnQrc1wiLCB0aGlzLnNlbGVjdC5iaW5kKHRoaXMpKTtcblxuICAgICAgICBjb25zdCBiaW5kZWRIb3RrZXlzID0gW2NsZWFySG90a2V5LCBmaW5kSG90a2V5LCBoaWRlSG90a2V5LCBzZWxlY3RIb3RrZXldO1xuICAgICAgICBiaW5kZWRIb3RrZXlzLmZvckVhY2goKGhvdGtleTogSG90a2V5KSA9PiB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChob3RrZXkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5ld0hvdGtleShjb21ibzogc3RyaW5nLCBmbjogRnVuY3Rpb24pOiBIb3RrZXkge1xuICAgICAgICByZXR1cm4gbmV3IEhvdGtleShjb21ibywgKCkgPT4ge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSwgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbHRlclRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW5nKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub2dnbGVEb25lKCkge1xuICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgdGFibGUgY29sdW1uIHNpemUuIFRoZSBtaW5pbXVtIHZhbHVlIGlzIDE0LjI4NmVtLCB3aGljaCBpcyBlcXVhbHMgdG8gMjAwcHggZHVvIHRvIHRoZSBjdXJyZW50IGZvbnQgc2l6ZS5cbiAgICAgKiBAcGFyYW0gbGFiZWwgQ29sdW1uIG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbFdpZHRoKGxhYmVsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGxhYmVsLmxlbmd0aDtcbiAgICAgICAgaWYgKHNpemUgPCAxNC4yODYpIHJldHVybiBgMTQuMjg2ZW1gO1xuICAgICAgICByZXR1cm4gYCR7c2l6ZX1lbWA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNjYWxlKHNjYWxlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Z1bmN0aW9uKHNjYWxlKSA/IHNjYWxlKCkgOiBzY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW50ZWdlck1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgICAgICB0aG91c2FuZHNTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy50aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldERvdWJsZU1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb25leU1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8uY3VycmVuY3lTeW1ib2wsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bWJlck1hc2tDb25maWcoY29sOiBCaWdudW1iZXJGaWVsZENvbmZpZyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZ2V0U2NhbGUoY29sLnNjYWxlKSxcbiAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGNvbC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgcHJlZml4OiBjb2wubnVtYmVyTG9jYWxlT3B0aW9ucz8uY3VycmVuY3lTeW1ib2wsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVSb3dEb3VibGVDbGljayhyb3dEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtyb3dEYXRhXTtcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRGb2N1c0ZpbHRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nVmlzaWJsZSAmJiAhdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5kaWFsb2c/LmNvbnRlbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG5cbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgIChpbnB1dCBhcyBIVE1MSW5wdXRFbGVtZW50KS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMubG9hZGluZyA9IHRydWUpKTtcblxuICAgICAgICB0aGlzLm9uU2VsZWN0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpKTtcblxuICAgICAgICB0aGlzLm9uVW5zZWxlY3QucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSkpO1xuXG4gICAgICAgIHRoaXMub25DbGVhci5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uRm9jdXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25CbHVyLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZVt0aGlzLmxvb2t1cERpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0YXJnZXQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlIHx8ICFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlID09IHZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==