@po-ui/ng-components 17.7.0 → 17.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/po-table/po-table-base.component.mjs +17 -2
- package/esm2022/lib/components/po-table/po-table-column-label/po-table-column-label.component.mjs +4 -5
- package/esm2022/lib/components/po-table/po-table.component.mjs +7 -7
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/po-theme/enum/po-theme-type.enum.mjs +27 -0
- package/esm2022/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.mjs +203 -0
- package/esm2022/lib/services/po-theme/helpers/po-theme-light-defaults.constant.mjs +134 -0
- package/esm2022/lib/services/po-theme/helpers/po-theme-poui.constant.mjs +31 -0
- package/esm2022/lib/services/po-theme/index.mjs +10 -0
- package/esm2022/lib/services/po-theme/interfaces/po-theme-color.interface.mjs +3 -0
- package/esm2022/lib/services/po-theme/interfaces/po-theme-tokens.interface.mjs +2 -0
- package/esm2022/lib/services/po-theme/interfaces/po-theme.interface.mjs +2 -0
- package/esm2022/lib/services/po-theme/po-theme.module.mjs +27 -0
- package/esm2022/lib/services/po-theme/po-theme.service.mjs +260 -0
- package/esm2022/lib/services/services.module.mjs +14 -7
- package/fesm2022/po-ui-ng-components.mjs +711 -20
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-table/po-table-base.component.d.ts +14 -1
- package/lib/components/po-table/po-table-column-label/po-table-column-label.component.d.ts +1 -2
- package/lib/services/index.d.ts +1 -0
- package/lib/services/po-theme/enum/po-theme-type.enum.d.ts +25 -0
- package/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.d.ts +116 -0
- package/lib/services/po-theme/helpers/po-theme-light-defaults.constant.d.ts +41 -0
- package/lib/services/po-theme/helpers/po-theme-poui.constant.d.ts +11 -0
- package/lib/services/po-theme/index.d.ts +9 -0
- package/lib/services/po-theme/interfaces/po-theme-color.interface.d.ts +374 -0
- package/lib/services/po-theme/interfaces/po-theme-tokens.interface.d.ts +61 -0
- package/lib/services/po-theme/interfaces/po-theme.interface.d.ts +28 -0
- package/lib/services/po-theme/po-theme.module.d.ts +9 -0
- package/lib/services/po-theme/po-theme.service.d.ts +129 -0
- package/lib/services/services.module.d.ts +2 -1
- package/package.json +4 -4
- package/po-ui-ng-components-17.9.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-17.7.0.tgz +0 -0
|
@@ -673,7 +673,7 @@ function PoTableComponent_ng_template_8_ng_container_15_Template(rf, ctx) { if (
|
|
|
673
673
|
i0.ɵɵadvance();
|
|
674
674
|
i0.ɵɵproperty("ngForOf", ctx_r66.filteredItems)("ngForTrackBy", ctx_r66.trackBy);
|
|
675
675
|
} }
|
|
676
|
-
const _c20 = (a0, a1, a2, a3) => ({ "po-table-interactive": a0, "po-table-selectable": a1, "po-table-striped": a2, "po-table-data-fixed-columns": a3 });
|
|
676
|
+
const _c20 = (a0, a1, a2, a3, a4) => ({ "po-table-interactive": a0, "po-table-selectable": a1, "po-table-striped": a2, "po-table-data-fixed-columns": a3, "po-table-text-wrap-enabled": a4 });
|
|
677
677
|
const _c21 = (a0, a1) => ({ "no-hover": a0, "po-table-column-drag": a1 });
|
|
678
678
|
function PoTableComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
679
679
|
const _r179 = i0.ɵɵgetCurrentView();
|
|
@@ -687,11 +687,11 @@ function PoTableComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
|
687
687
|
const _r60 = i0.ɵɵreference(9);
|
|
688
688
|
const _r62 = i0.ɵɵreference(11);
|
|
689
689
|
const ctx_r7 = i0.ɵɵnextContext();
|
|
690
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵ
|
|
690
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction5(16, _c20, ctx_r7.selectable || ctx_r7.sort, ctx_r7.selectable, ctx_r7.striped, ctx_r7.applyFixedColumns(), ctx_r7.textWrap));
|
|
691
691
|
i0.ɵɵattribute("p-spacing", ctx_r7.spacing);
|
|
692
692
|
i0.ɵɵadvance(2);
|
|
693
693
|
i0.ɵɵclassProp("po-table-header", !ctx_r7.height);
|
|
694
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(
|
|
694
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(22, _c21, ctx_r7.hideSelectAll, ctx_r7.isDraggable));
|
|
695
695
|
i0.ɵɵadvance();
|
|
696
696
|
i0.ɵɵproperty("ngIf", ctx_r7.hasSelectableColumn);
|
|
697
697
|
i0.ɵɵadvance();
|
|
@@ -1211,7 +1211,7 @@ function PoTableComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {
|
|
|
1211
1211
|
i0.ɵɵstyleProp("height", ctx_r9.heightTableContainer, "px");
|
|
1212
1212
|
i0.ɵɵproperty("itemSize", ctx_r9.itemSize)("minBufferPx", ctx_r9.heightTableContainer < 100 ? 100 : ctx_r9.heightTableContainer)("maxBufferPx", ctx_r9.heightTableContainer < 200 ? 200 : ctx_r9.heightTableContainer);
|
|
1213
1213
|
i0.ɵɵadvance(2);
|
|
1214
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵ
|
|
1214
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction5(22, _c20, ctx_r9.selectable || ctx_r9.sort, ctx_r9.selectable, ctx_r9.striped, ctx_r9.applyFixedColumns(), ctx_r9.textWrap));
|
|
1215
1215
|
i0.ɵɵattribute("p-spacing", ctx_r9.spacing);
|
|
1216
1216
|
i0.ɵɵadvance();
|
|
1217
1217
|
i0.ɵɵstyleProp("top", ctx_r9.inverseOfTranslation);
|
|
@@ -2175,7 +2175,7 @@ export class PoTableComponent extends PoTableBaseComponent {
|
|
|
2175
2175
|
i0.ɵɵelementStart(0, "div", 0);
|
|
2176
2176
|
i0.ɵɵtemplate(1, PoTableComponent_div_1_Template, 9, 4, "div", 1)(2, PoTableComponent_div_2_Template, 4, 2, "div", 2)(3, PoTableComponent_div_3_Template, 2, 3, "div", 3);
|
|
2177
2177
|
i0.ɵɵelementEnd();
|
|
2178
|
-
i0.ɵɵtemplate(4, PoTableComponent_po_container_4_Template, 2, 1, "po-container", 4)(5, PoTableComponent_ng_template_5_Template, 8, 10, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor)(7, PoTableComponent_div_7_Template, 3, 5, "div", 6)(8, PoTableComponent_ng_template_8_Template, 16,
|
|
2178
|
+
i0.ɵɵtemplate(4, PoTableComponent_po_container_4_Template, 2, 1, "po-container", 4)(5, PoTableComponent_ng_template_5_Template, 8, 10, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor)(7, PoTableComponent_div_7_Template, 3, 5, "div", 6)(8, PoTableComponent_ng_template_8_Template, 16, 25, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor)(10, PoTableComponent_ng_template_10_Template, 18, 28, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor);
|
|
2179
2179
|
i0.ɵɵelement(12, "po-popup", 9, 10);
|
|
2180
2180
|
i0.ɵɵtemplate(14, PoTableComponent_ng_template_14_Template, 1, 1, "ng-template", null, 11, i0.ɵɵtemplateRefExtractor)(16, PoTableComponent_ng_template_16_Template, 1, 2, "ng-template", null, 12, i0.ɵɵtemplateRefExtractor)(18, PoTableComponent_ng_template_18_Template, 1, 1, "ng-template", null, 13, i0.ɵɵtemplateRefExtractor)(20, PoTableComponent_ng_template_20_Template, 5, 6, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor)(22, PoTableComponent_ng_template_22_Template, 2, 3, "ng-template", null, 15, i0.ɵɵtemplateRefExtractor)(24, PoTableComponent_ng_template_24_Template, 1, 1, "ng-template", null, 16, i0.ɵɵtemplateRefExtractor)(26, PoTableComponent_ng_template_26_Template, 2, 2, "ng-template", null, 17, i0.ɵɵtemplateRefExtractor)(28, PoTableComponent_po_table_column_manager_28_Template, 1, 6, "po-table-column-manager", 18);
|
|
2181
2181
|
i0.ɵɵelementStart(29, "po-modal", 19, 20)(31, "p", 21);
|
|
@@ -2205,7 +2205,7 @@ export class PoTableComponent extends PoTableBaseComponent {
|
|
|
2205
2205
|
}
|
|
2206
2206
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoTableComponent, [{
|
|
2207
2207
|
type: Component,
|
|
2208
|
-
args: [{ selector: 'po-table', providers: [PoDateService], template: "<div class=\"po-table-actions\">\n <div\n #columnBatchActions\n *ngIf=\"hasValidColumns && itemsSelected.length > 0 && !hideBatchActions\"\n class=\"po-table-actions-batch-actions\"\n >\n <div [ngPlural]=\"itemsSelected.length\" class=\"po-table-actions-batch-actions__label\">\n <strong>\n <ng-template ngPluralCase=\"=0\">{{ literals.noItem }}</ng-template>\n <ng-template ngPluralCase=\"=1\">{{ literals.oneItem }}</ng-template>\n <ng-template ngPluralCase=\"other\">{{ itemsSelected.length }} {{ literals.multipleItems }}</ng-template>\n </strong>\n </div>\n\n <div class=\"po-table-actions-batch-actions__buttons\">\n <po-button\n p-icon=\"po-icon-delete\"\n [p-danger]=\"true\"\n [p-disabled]=\"itemsSelected.length > 1 && serviceDeleteApi !== undefined\"\n [p-label]=\"literals.delete\"\n (p-click)=\"modalDelete.open()\"\n ></po-button>\n </div>\n </div>\n\n <div #columnManager *ngIf=\"hasValidColumns && !hideColumnsManager\" class=\"po-table-actions-column-manager\">\n <po-button\n #columnManagerTarget\n p-icon=\"po-icon-settings\"\n p-kind=\"tertiary\"\n p-tooltip-position=\"left\"\n [p-aria-label]=\"literals.columnsManager\"\n [p-tooltip]=\"literals.columnsManager\"\n (p-click)=\"onOpenColumnManager()\"\n ></po-button>\n </div>\n\n <div *ngIf=\"!hideTableSearch && hasValidColumns\" class=\"po-table-search\">\n <po-search\n [p-items]=\"items\"\n [p-filter-keys]=\"filteredColumns\"\n [p-filter-type]=\"filterType\"\n (p-filtered-items-change)=\"onFilteredItemsChange($event)\"\n >\n </po-search>\n </div>\n</div>\n<po-container *ngIf=\"container; else tableContainerTemplate\" p-no-padding>\n <ng-container *ngTemplateOutlet=\"tableContainerTemplate\"></ng-container>\n</po-container>\n\n<ng-template #tableContainerTemplate>\n <div [class.po-table-container-sticky]=\"loading\">\n <po-loading-overlay *ngIf=\"loading\" [p-text]=\"literals.loadingData\" [p-size]=\"sizeLoading\"></po-loading-overlay>\n <div class=\"po-table-main-container\">\n <div\n #tableWrapper\n class=\"po-table-wrapper\"\n [class.po-table-header-fixed-columns-pixels]=\"allColumnsWidthPixels\"\n [style.opacity]=\"tableOpacity\"\n >\n <div *ngIf=\"height\" class=\"po-table-container\" [style.height.px]=\"heightTableContainer\">\n <div #poTableTbody class=\"po-table-container-fixed-inner\">\n <ng-container *ngTemplateOutlet=\"tableVirtualScrollTemplate\"></ng-container>\n </div>\n </div>\n\n <div *ngIf=\"!height\">\n <ng-container *ngTemplateOutlet=\"tableTemplate\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"po-table-footer\" *ngIf=\"hasFooter\">\n <ng-container *ngFor=\"let column of subtitleColumns; trackBy: trackBy\">\n <po-table-subtitle-footer [p-literals]=\"literals\" [p-subtitles]=\"column.subtitles\"> </po-table-subtitle-footer>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Show More Button -->\n<div\n *ngIf=\"!infiniteScroll\"\n class=\"po-row po-table-footer-show-more\"\n [class.po-invisible]=\"showMore.observers.length === 0 && !hasService\"\n #tableFooter\n>\n <po-button\n class=\"po-offset-xl-4 po-offset-lg-4 po-offset-md-3 po-lg-4 po-md-6\"\n [p-disabled]=\"showMoreDisabled\"\n [p-label]=\"literals.loadMoreData\"\n [p-loading]=\"loadingShowMore\"\n (p-click)=\"onShowMore()\"\n >\n </po-button>\n</div>\n\n<!-- Table default-->\n<ng-template #tableTemplate>\n <table\n class=\"po-table\"\n [ngClass]=\"{\n 'po-table-interactive': selectable || sort,\n 'po-table-selectable': selectable,\n 'po-table-striped': striped,\n 'po-table-data-fixed-columns': applyFixedColumns()\n }\"\n [attr.p-spacing]=\"spacing\"\n >\n <thead>\n <tr\n [ngClass]=\"{ 'no-hover': hideSelectAll, 'po-table-column-drag': this.isDraggable }\"\n [class.po-table-header]=\"!height\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <th\n *ngIf=\"hasSelectableColumn\"\n [style.pointer-events]=\"hideSelectAll ? 'none' : 'auto'\"\n class=\"po-table-column-selectable\"\n >\n <div [class.po-table-header-fixed-inner]=\"height\">\n <po-checkbox\n name=\"selectAll\"\n *ngIf=\"!hideSelectAll\"\n (p-change)=\"selectAllRows()\"\n [p-checkboxValue]=\"selectAll === null ? 'mixed' : selectAll\"\n ></po-checkbox>\n </div>\n </th>\n\n <th\n *ngIf=\"(hasMasterDetailColumn || hasRowTemplate) && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <!-- Coluna criada para caso as a\u00E7\u00F5es fiquem no lado esquerdo -->\n <th\n #columnActionLeft\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-master-detail]=\"!isSingleAction\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n ></th>\n\n <th *ngIf=\"!hasMainColumns\" #noColumnsHeader class=\"po-table-header-column po-text-center\">\n <ng-container *ngIf=\"height; then noColumnsWithHeight; else noColumnsWithoutHeight\"> </ng-container>\n </th>\n\n <ng-container\n *ngIf=\"this.isDraggable || hasSomeFixed(); then tableDefaultThDragDrop; else tableDefaultThDefault\"\n >\n </ng-container>\n <ng-template #tableDefaultThDragDrop>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n [class.po-table-column-drag-box]=\"this.isDraggable\"\n (click)=\"sortColumn(column)\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragDisabled]=\"column.fixed ? 'true' : 'false'\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngIf=\"this.isDraggable && !column.fixed\">\n <svg\n cdkDragHandle\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"9\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" fill=\"black\" />\n </svg>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n <ng-template #tableDefaultThDefault>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n (click)=\"sortColumn(column)\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n\n <th\n *ngIf=\"hasRowTemplateWithArrowDirectionRight && (hasVisibleActions || hideColumnsManager)\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <th\n *ngIf=\"hasVisibleActions && actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n [class.po-table-header-actions]=\"!isSingleAction\"\n ></th>\n </tr>\n </thead>\n\n <tbody class=\"po-table-group-row\" *ngIf=\"!hasItems || !hasMainColumns\">\n <tr class=\"po-table-row po-table-row-no-data\">\n <td [colSpan]=\"columnCount\" class=\"po-table-no-data po-text-center\">\n <span> {{ literals.noData }} </span>\n </td>\n </tr>\n </tbody>\n\n <ng-container *ngIf=\"hasMainColumns\">\n <tbody class=\"po-table-group-row\" *ngFor=\"let row of filteredItems; let rowIndex = index; trackBy: trackBy\">\n <tr class=\"po-table-row\" [class.po-table-row-active]=\"row.$selected || (row.$selected === null && selectable)\">\n <td *ngIf=\"selectable\" class=\"po-table-column-selectable\">\n <ng-container *ngTemplateOutlet=\"singleSelect ? inputRadio : inputCheckbox; context: { $implicit: row }\">\n </ng-container>\n </td>\n\n <!-- Valida se a origem do detail \u00E9 pelo input do po-table -->\n <td\n *ngIf=\"columnMasterDetail && !hideDetail && !hasRowTemplate\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna com as a\u00E7\u00F5es na esquerda (padr\u00E3o)-->\n <ng-template\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n\n <!-- Valida se a origem do detail \u00E9 pela diretiva -->\n <td\n *ngIf=\"hasRowTemplate && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <td\n *ngFor=\"let column of mainColumns; let columnIndex = index; trackBy: trackBy\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [class.po-table-column]=\"column.type !== 'icon'\"\n [class.po-table-column-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-column-center]=\"column.type === 'subtitle'\"\n [class.po-table-column-icons]=\"column.type === 'icon'\"\n [pFrozenColumn]=\"column.fixed\"\n class=\"p-element po-frozen-column\"\n [ngClass]=\"getClassColor(row, column)\"\n (click)=\"hasSelectableRow() ? selectRow(row) : 'javascript:;'\"\n >\n <div\n class=\"po-table-column-cell po-table-body-ellipsis notranslate\"\n [ngSwitch]=\"column.type\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event, column, row)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n <span *ngSwitchCase=\"'columnTemplate'\">\n <ng-container *ngTemplateOutlet=\"getTemplate(column); context: { $implicit: getCellData(row, column) }\">\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'cellTemplate'\">\n <ng-container *ngTemplateOutlet=\"tableCellTemplate?.templateRef; context: { row: row, column: column }\">\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'boolean'\">\n {{ getBooleanLabel(getCellData(row, column), column) }}\n </span>\n\n <span *ngSwitchCase=\"'currency'\">\n {{ getCellData(row, column) | currency: column.format : 'symbol' : '1.2-2' }}\n </span>\n\n <span *ngSwitchCase=\"'date'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy' }}\n </span>\n\n <span *ngSwitchCase=\"'time'\">\n {{ getCellData(row, column) | po_time: column.format || 'HH:mm:ss.ffffff' }}\n </span>\n\n <span *ngSwitchCase=\"'dateTime'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy HH:mm:ss' }}\n </span>\n\n <span *ngSwitchCase=\"'number'\">\n {{ formatNumber(getCellData(row, column), column.format) }}\n </span>\n\n <po-table-column-link\n *ngSwitchCase=\"'link'\"\n [p-action]=\"column.action\"\n [p-disabled]=\"checkDisabled(row, column)\"\n [p-link]=\"row[column.link]\"\n [p-row]=\"row\"\n [p-value]=\"getCellData(row, column)\"\n (click)=\"onClickLink($event, row, column)\"\n >\n </po-table-column-link>\n\n <po-table-column-icon\n *ngSwitchCase=\"'icon'\"\n [p-column]=\"column\"\n [p-icons]=\"getColumnIcons(row, column)\"\n [p-row]=\"row\"\n >\n </po-table-column-icon>\n\n <span *ngSwitchCase=\"'subtitle'\">\n <po-table-subtitle-circle [p-subtitle]=\"getSubtitleColumn(row, column)\"></po-table-subtitle-circle>\n </span>\n <span *ngSwitchCase=\"'label'\">\n <po-table-column-label [p-value]=\"getColumnLabel(row, column)\"> </po-table-column-label>\n </span>\n <span *ngSwitchDefault>{{ getCellData(row, column) }}</span>\n </div>\n </td>\n\n <td\n *ngIf=\"hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna de a\u00E7oes na direita -->\n <ng-template\n *ngIf=\"actionRight\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && hasRowTemplate && row.$showDetail && isShowRowTemplate(row, rowIndex)\">\n <td class=\"po-table-row-template-container\" [colSpan]=\"columnCountForMasterDetail\">\n <ng-template\n [ngTemplateOutlet]=\"tableRowTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && isShowMasterDetail(row)\">\n <td class=\"po-table-column-detail\" [colSpan]=\"columnCountForMasterDetail\">\n <po-table-detail\n [p-selectable]=\"selectable && !detailHideSelect\"\n [p-detail]=\"columnMasterDetail.detail\"\n [p-items]=\"row[nameColumnDetail]\"\n (p-select-row)=\"selectDetailRow($event)\"\n >\n </po-table-detail>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n</ng-template>\n\n<!-- Table with virtual scroll -->\n<ng-template #tableVirtualScrollTemplate>\n <cdk-virtual-scroll-viewport\n #tableVirtualScroll\n [itemSize]=\"itemSize\"\n [style.height.px]=\"heightTableContainer\"\n [minBufferPx]=\"heightTableContainer < 100 ? 100 : heightTableContainer\"\n [maxBufferPx]=\"heightTableContainer < 200 ? 200 : heightTableContainer\"\n >\n <table\n class=\"po-table\"\n [ngClass]=\"{\n 'po-table-interactive': selectable || sort,\n 'po-table-selectable': selectable,\n 'po-table-striped': striped,\n 'po-table-data-fixed-columns': applyFixedColumns()\n }\"\n [attr.p-spacing]=\"spacing\"\n >\n <thead class=\"po-table-header-sticky\" [style.top]=\"inverseOfTranslation\">\n <tr\n [class.po-table-header]=\"!height\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <th\n *ngIf=\"hasSelectableColumn\"\n [style.pointer-events]=\"hideSelectAll ? 'none' : 'auto'\"\n class=\"po-table-column-selectable\"\n >\n <div [class.po-table-header-fixed-inner]=\"height\">\n <po-checkbox\n name=\"selectAll\"\n *ngIf=\"!hideSelectAll\"\n (p-change)=\"selectAllRows()\"\n [p-checkboxValue]=\"selectAll === null ? 'mixed' : selectAll\"\n ></po-checkbox>\n </div>\n </th>\n\n <th\n *ngIf=\"(hasMasterDetailColumn || hasRowTemplate) && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <!-- Coluna criada para caso as a\u00E7\u00F5es fiquem no lado esquerdo -->\n <th\n #columnActionLeft\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-master-detail]=\"!isSingleAction\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n ></th>\n\n <th *ngIf=\"!hasMainColumns\" #noColumnsHeader class=\"po-table-header-column po-text-center\">\n <ng-container *ngIf=\"height; then noColumnsWithHeight; else noColumnsWithoutHeight\"> </ng-container>\n </th>\n\n <ng-container\n *ngIf=\"\n this.isDraggable || hasSomeFixed();\n then tableVirtualScrollThDragDrop;\n else tableVirtualScrollThDefault\n \"\n >\n </ng-container>\n <ng-template #tableVirtualScrollThDragDrop>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [ngStyle]=\"{ 'width': !hasItems ? '100%' : applyFixedColumns() ? column.width : 'auto' }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n [class.po-table-column-drag-box]=\"this.isDraggable\"\n (click)=\"sortColumn(column)\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragDisabled]=\"column.fixed ? 'true' : 'false'\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngIf=\"this.isDraggable && !column.fixed\">\n <svg\n cdkDragHandle\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"9\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" fill=\"black\" />\n </svg>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n <ng-template #tableVirtualScrollThDefault>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column example-box\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [ngStyle]=\"{ 'width': !hasItems ? '100%' : applyFixedColumns() ? column.width : 'auto' }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n (click)=\"sortColumn(column)\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n\n <th\n *ngIf=\"hasRowTemplateWithArrowDirectionRight && (hasVisibleActions || hideColumnsManager)\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <th\n *ngIf=\"hasVisibleActions && actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n [class.po-table-header-actions]=\"!isSingleAction\"\n ></th>\n </tr>\n </thead>\n\n <tbody class=\"po-table-group-row\" *ngIf=\"!hasItems || !hasMainColumns\">\n <tr class=\"po-table-row po-table-row-no-data\">\n <td [colSpan]=\"columnCount\" class=\"po-table-no-data po-text-center\">\n <span> {{ literals.noData }} </span>\n </td>\n </tr>\n </tbody>\n\n <ng-container *ngIf=\"hasMainColumns\">\n <tbody\n class=\"po-table-group-row\"\n *cdkVirtualFor=\"let row of filteredItems; let rowIndex = index; trackBy: trackBy\"\n >\n <tr\n class=\"po-table-row\"\n [class.po-table-row-active]=\"row.$selected || (row.$selected === null && selectable)\"\n >\n <td *ngIf=\"selectable\" class=\"po-table-column-selectable\">\n <ng-container *ngTemplateOutlet=\"singleSelect ? inputRadio : inputCheckbox; context: { $implicit: row }\">\n </ng-container>\n </td>\n\n <!-- Valida se a origem do detail \u00E9 pelo input do po-table -->\n <td\n *ngIf=\"columnMasterDetail && !hideDetail && !hasRowTemplate\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna com as a\u00E7\u00F5es na esquerda (padr\u00E3o)-->\n <ng-template\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n\n <!-- Valida se a origem do detail \u00E9 pela diretiva -->\n <td\n *ngIf=\"hasRowTemplate && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <td\n *ngFor=\"let column of mainColumns; let columnIndex = index; trackBy: trackBy\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [class.po-table-column]=\"column.type !== 'icon'\"\n [class.po-table-column-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-column-center]=\"column.type === 'subtitle'\"\n [class.po-table-column-icons]=\"column.type === 'icon'\"\n [ngClass]=\"getClassColor(row, column)\"\n [pFrozenColumn]=\"column.fixed\"\n class=\"p-element po-frozen-column\"\n (click)=\"hasSelectableRow() ? selectRow(row) : 'javascript:;'\"\n >\n <div\n class=\"po-table-column-cell po-table-body-ellipsis notranslate\"\n [ngSwitch]=\"column.type\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event, column, row)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n <span *ngSwitchCase=\"'columnTemplate'\">\n <ng-container\n *ngTemplateOutlet=\"getTemplate(column); context: { $implicit: getCellData(row, column) }\"\n >\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'cellTemplate'\">\n <ng-container\n *ngTemplateOutlet=\"tableCellTemplate?.templateRef; context: { row: row, column: column }\"\n >\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'boolean'\">\n {{ getBooleanLabel(getCellData(row, column), column) }}\n </span>\n\n <span *ngSwitchCase=\"'currency'\">\n {{ getCellData(row, column) | currency: column.format : 'symbol' : '1.2-2' }}\n </span>\n\n <span *ngSwitchCase=\"'date'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy' }}\n </span>\n\n <span *ngSwitchCase=\"'time'\">\n {{ getCellData(row, column) | po_time: column.format || 'HH:mm:ss.ffffff' }}\n </span>\n\n <span *ngSwitchCase=\"'dateTime'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy HH:mm:ss' }}\n </span>\n\n <span *ngSwitchCase=\"'number'\">\n {{ formatNumber(getCellData(row, column), column.format) }}\n </span>\n\n <po-table-column-link\n *ngSwitchCase=\"'link'\"\n [p-action]=\"column.action\"\n [p-disabled]=\"checkDisabled(row, column)\"\n [p-link]=\"row[column.link]\"\n [p-row]=\"row\"\n [p-value]=\"getCellData(row, column)\"\n (click)=\"onClickLink($event, row, column)\"\n >\n </po-table-column-link>\n\n <po-table-column-icon\n *ngSwitchCase=\"'icon'\"\n [p-column]=\"column\"\n [p-icons]=\"getColumnIcons(row, column)\"\n [p-row]=\"row\"\n >\n </po-table-column-icon>\n\n <span *ngSwitchCase=\"'subtitle'\">\n <po-table-subtitle-circle [p-subtitle]=\"getSubtitleColumn(row, column)\"></po-table-subtitle-circle>\n </span>\n <span *ngSwitchCase=\"'label'\">\n <po-table-column-label [p-value]=\"getColumnLabel(row, column)\"> </po-table-column-label>\n </span>\n <span *ngSwitchDefault>{{ getCellData(row, column) }}</span>\n </div>\n </td>\n\n <td\n *ngIf=\"hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna de a\u00E7oes na direita -->\n <ng-template\n *ngIf=\"actionRight\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && hasRowTemplate && row.$showDetail && isShowRowTemplate(row, rowIndex)\">\n <td class=\"po-table-row-template-container\" [colSpan]=\"columnCountForMasterDetail\">\n <ng-template\n [ngTemplateOutlet]=\"tableRowTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && isShowMasterDetail(row)\">\n <td class=\"po-table-column-detail\" [colSpan]=\"columnCountForMasterDetail\">\n <po-table-detail\n [p-selectable]=\"selectable && !detailHideSelect\"\n [p-detail]=\"columnMasterDetail.detail\"\n [p-items]=\"row[nameColumnDetail]\"\n (p-select-row)=\"selectDetailRow($event)\"\n >\n </po-table-detail>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n </cdk-virtual-scroll-viewport>\n</ng-template>\n\n<po-popup #popup [p-actions]=\"actions\" [p-target]=\"popupTarget\"> </po-popup>\n\n<ng-template #poTableColumnDetail let-row=\"row\" let-rowIndex=\"rowIndex\">\n <span\n *ngIf=\"(containsMasterDetail(row) && !hasRowTemplate) || (isShowRowTemplate(row, rowIndex) && hasRowTemplate)\"\n class=\"po-icon po-clickable\"\n [class.po-icon-arrow-up]=\"row.$showDetail\"\n [class.po-icon-arrow-down]=\"!row.$showDetail\"\n >\n </span>\n</ng-template>\n\n<ng-template #inputRadio let-row>\n <po-radio [name]=\"idRadio\" [p-checked]=\"row.$selected\" (p-change-selected)=\"selectRow(row)\"></po-radio>\n</ng-template>\n\n<ng-template #inputCheckbox let-row>\n <po-checkbox\n name=\"checkbox\"\n (p-change)=\"selectable ? selectRow(row) : 'javascript:;'\"\n [p-checkboxValue]=\"row.$selected\"\n ></po-checkbox>\n</ng-template>\n\n<ng-template #contentHeaderTemplate let-column>\n <span\n #columnHeader\n class=\"po-table-header-ellipsis\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n {{ column.label || (column.property | titlecase) }}\n </span>\n\n <span\n *ngIf=\"sort && column.sortable !== false\"\n [class.po-table-header-icon-unselected]=\"JSON.stringify(sortedColumn?.property) !== JSON.stringify(column)\"\n [class.po-table-header-icon-descending]=\"\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && sortedColumn.ascending\n \"\n [class.po-table-header-icon-ascending]=\"\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && !sortedColumn.ascending\n \"\n >\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) !== JSON.stringify(column)\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M18.2929 15.2929L17 16.5858L17 10C17 9.44772 16.5523 9 16 9C15.4477 9 15 9.44772 15 10L15 16.5858L13.7071 15.2929C13.3166 14.9024 12.6834 14.9024 12.2929 15.2929C11.9024 15.6834 11.9024 16.3166 12.2929 16.7071L15.2929 19.7071C15.6834 20.0976 16.3166 20.0976 16.7071 19.7071L19.7071 16.7071C20.0976 16.3166 20.0976 15.6834 19.7071 15.2929C19.3166 14.9024 18.6834 14.9024 18.2929 15.2929ZM5.70716 8.7071L7.00006 7.4142L7.00003 14C7.00002 14.5523 7.44774 15 8.00002 15C8.55231 15 9.00002 14.5523 9.00003 14L9.00006 7.41418L10.2929 8.70707C10.6835 9.09759 11.3166 9.09758 11.7072 8.70706C12.0977 8.31653 12.0977 7.68336 11.7072 7.29284L8.70718 4.29286C8.31665 3.90234 7.68349 3.90235 7.29296 4.29287L4.29295 7.29289C3.90242 7.68342 3.90242 8.31658 4.29294 8.70711C4.68347 9.09763 5.31663 9.09762 5.70716 8.7071Z\"\n fill=\"#1D1D30\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && sortedColumn.ascending\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11 9.41421L9.70711 10.7071C9.31658 11.0976 8.68342 11.0976 8.29289 10.7071C7.90237 10.3166 7.90237 9.68342 8.29289 9.29289L11.2929 6.29289C11.6834 5.90237 12.3166 5.90237 12.7071 6.29289L15.7071 9.29289C16.0976 9.68342 16.0976 10.3166 15.7071 10.7071C15.3166 11.0976 14.6834 11.0976 14.2929 10.7071L13 9.41421V16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16V9.41421Z\"\n fill=\"black\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && !sortedColumn.ascending\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M9.70711 13.2929L11 14.5858V7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7V14.5858L14.2929 13.2929C14.6834 12.9024 15.3166 12.9024 15.7071 13.2929C16.0976 13.6834 16.0976 14.3166 15.7071 14.7071L12.7071 17.7071C12.3166 18.0976 11.6834 18.0976 11.2929 17.7071L8.29289 14.7071C7.90237 14.3166 7.90237 13.6834 8.29289 13.2929C8.68342 12.9024 9.31658 12.9024 9.70711 13.2929Z\"\n fill=\"black\"\n />\n </svg>\n </ng-container>\n </span>\n</ng-template>\n\n<ng-template #noColumnsWithHeight>\n <div class=\"po-table-header-fixed-inner\" [style.width.px]=\"headerWidth\">\n {{ hasValidColumns ? literals.noVisibleColumn : literals.noColumns }}\n </div>\n</ng-template>\n\n<ng-template #noColumnsWithoutHeight>\n {{ hasValidColumns ? literals.noVisibleColumn : literals.noColumns }}\n</ng-template>\n\n<!-- Template de a\u00E7\u00F5es -->\n<ng-template #ActionsColumnTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <td\n *ngIf=\"isSingleAction\"\n class=\"po-table-column po-table-column-single-action\"\n [style.width.px]=\"height && actionRight ? getWidthColumnManager() : ''\"\n [style.max-width.px]=\"height && !actionRight ? getColumnWidthActionsLeft() : ''\"\n [style.width.px]=\"height && !actionRight ? getColumnWidthActionsLeft() : ''\"\n >\n <div\n *ngIf=\"firstAction.visible !== false\"\n class=\"po-table-single-action po-clickable\"\n [class.po-table-action-disabled]=\"firstAction.disabled ? validateTableAction(row, firstAction) : false\"\n (click)=\"executeTableAction(row, firstAction)\"\n >\n <po-icon *ngIf=\"firstAction.icon\" class=\"po-table-single-action-content\" [p-icon]=\"firstAction.icon\"></po-icon>\n {{ firstAction.label }}\n </div>\n </td>\n\n <td *ngIf=\"visibleActions.length > 1\" class=\"po-table-column-actions\">\n <span #popupTarget class=\"po-icon po-icon-more po-clickable\" (click)=\"togglePopup(row, popupTarget)\"></span>\n </td>\n</ng-template>\n\n<po-table-column-manager\n *ngIf=\"!hideColumnsManager\"\n [p-columns]=\"columns\"\n [p-max-columns]=\"maxColumns\"\n [p-target]=\"columnManagerTarget\"\n [p-last-visible-columns-selected]=\"lastVisibleColumnsSelected\"\n [p-hide-action-fixed-columns]=\"hideActionFixedColumns\"\n (p-visible-columns-change)=\"onVisibleColumnsChange($event)\"\n (p-change-visible-columns)=\"onChangeVisibleColumns($event)\"\n [p-columns-default]=\"initialColumns\"\n (p-initial-columns)=\"onColumnRestoreManager($event)\"\n>\n</po-table-column-manager>\n\n<po-modal\n #modalDelete\n [p-title]=\"literals.delete\"\n [p-primary-action]=\"confirm\"\n [p-secondary-action]=\"close\"\n [p-click-out]=\"true\"\n>\n <p class=\"po-font-text-large\">{{ literals.bodyDelete }}</p>\n</po-modal>\n" }]
|
|
2208
|
+
args: [{ selector: 'po-table', providers: [PoDateService], template: "<div class=\"po-table-actions\">\n <div\n #columnBatchActions\n *ngIf=\"hasValidColumns && itemsSelected.length > 0 && !hideBatchActions\"\n class=\"po-table-actions-batch-actions\"\n >\n <div [ngPlural]=\"itemsSelected.length\" class=\"po-table-actions-batch-actions__label\">\n <strong>\n <ng-template ngPluralCase=\"=0\">{{ literals.noItem }}</ng-template>\n <ng-template ngPluralCase=\"=1\">{{ literals.oneItem }}</ng-template>\n <ng-template ngPluralCase=\"other\">{{ itemsSelected.length }} {{ literals.multipleItems }}</ng-template>\n </strong>\n </div>\n\n <div class=\"po-table-actions-batch-actions__buttons\">\n <po-button\n p-icon=\"po-icon-delete\"\n [p-danger]=\"true\"\n [p-disabled]=\"itemsSelected.length > 1 && serviceDeleteApi !== undefined\"\n [p-label]=\"literals.delete\"\n (p-click)=\"modalDelete.open()\"\n ></po-button>\n </div>\n </div>\n\n <div #columnManager *ngIf=\"hasValidColumns && !hideColumnsManager\" class=\"po-table-actions-column-manager\">\n <po-button\n #columnManagerTarget\n p-icon=\"po-icon-settings\"\n p-kind=\"tertiary\"\n p-tooltip-position=\"left\"\n [p-aria-label]=\"literals.columnsManager\"\n [p-tooltip]=\"literals.columnsManager\"\n (p-click)=\"onOpenColumnManager()\"\n ></po-button>\n </div>\n\n <div *ngIf=\"!hideTableSearch && hasValidColumns\" class=\"po-table-search\">\n <po-search\n [p-items]=\"items\"\n [p-filter-keys]=\"filteredColumns\"\n [p-filter-type]=\"filterType\"\n (p-filtered-items-change)=\"onFilteredItemsChange($event)\"\n >\n </po-search>\n </div>\n</div>\n<po-container *ngIf=\"container; else tableContainerTemplate\" p-no-padding>\n <ng-container *ngTemplateOutlet=\"tableContainerTemplate\"></ng-container>\n</po-container>\n\n<ng-template #tableContainerTemplate>\n <div [class.po-table-container-sticky]=\"loading\">\n <po-loading-overlay *ngIf=\"loading\" [p-text]=\"literals.loadingData\" [p-size]=\"sizeLoading\"></po-loading-overlay>\n <div class=\"po-table-main-container\">\n <div\n #tableWrapper\n class=\"po-table-wrapper\"\n [class.po-table-header-fixed-columns-pixels]=\"allColumnsWidthPixels\"\n [style.opacity]=\"tableOpacity\"\n >\n <div *ngIf=\"height\" class=\"po-table-container\" [style.height.px]=\"heightTableContainer\">\n <div #poTableTbody class=\"po-table-container-fixed-inner\">\n <ng-container *ngTemplateOutlet=\"tableVirtualScrollTemplate\"></ng-container>\n </div>\n </div>\n\n <div *ngIf=\"!height\">\n <ng-container *ngTemplateOutlet=\"tableTemplate\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"po-table-footer\" *ngIf=\"hasFooter\">\n <ng-container *ngFor=\"let column of subtitleColumns; trackBy: trackBy\">\n <po-table-subtitle-footer [p-literals]=\"literals\" [p-subtitles]=\"column.subtitles\"> </po-table-subtitle-footer>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Show More Button -->\n<div\n *ngIf=\"!infiniteScroll\"\n class=\"po-row po-table-footer-show-more\"\n [class.po-invisible]=\"showMore.observers.length === 0 && !hasService\"\n #tableFooter\n>\n <po-button\n class=\"po-offset-xl-4 po-offset-lg-4 po-offset-md-3 po-lg-4 po-md-6\"\n [p-disabled]=\"showMoreDisabled\"\n [p-label]=\"literals.loadMoreData\"\n [p-loading]=\"loadingShowMore\"\n (p-click)=\"onShowMore()\"\n >\n </po-button>\n</div>\n\n<!-- Table default-->\n<ng-template #tableTemplate>\n <table\n class=\"po-table\"\n [ngClass]=\"{\n 'po-table-interactive': selectable || sort,\n 'po-table-selectable': selectable,\n 'po-table-striped': striped,\n 'po-table-data-fixed-columns': applyFixedColumns(),\n 'po-table-text-wrap-enabled': textWrap\n }\"\n [attr.p-spacing]=\"spacing\"\n >\n <thead>\n <tr\n [ngClass]=\"{ 'no-hover': hideSelectAll, 'po-table-column-drag': this.isDraggable }\"\n [class.po-table-header]=\"!height\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <th\n *ngIf=\"hasSelectableColumn\"\n [style.pointer-events]=\"hideSelectAll ? 'none' : 'auto'\"\n class=\"po-table-column-selectable\"\n >\n <div [class.po-table-header-fixed-inner]=\"height\">\n <po-checkbox\n name=\"selectAll\"\n *ngIf=\"!hideSelectAll\"\n (p-change)=\"selectAllRows()\"\n [p-checkboxValue]=\"selectAll === null ? 'mixed' : selectAll\"\n ></po-checkbox>\n </div>\n </th>\n\n <th\n *ngIf=\"(hasMasterDetailColumn || hasRowTemplate) && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <!-- Coluna criada para caso as a\u00E7\u00F5es fiquem no lado esquerdo -->\n <th\n #columnActionLeft\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-master-detail]=\"!isSingleAction\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n ></th>\n\n <th *ngIf=\"!hasMainColumns\" #noColumnsHeader class=\"po-table-header-column po-text-center\">\n <ng-container *ngIf=\"height; then noColumnsWithHeight; else noColumnsWithoutHeight\"> </ng-container>\n </th>\n\n <ng-container\n *ngIf=\"this.isDraggable || hasSomeFixed(); then tableDefaultThDragDrop; else tableDefaultThDefault\"\n >\n </ng-container>\n <ng-template #tableDefaultThDragDrop>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n [class.po-table-column-drag-box]=\"this.isDraggable\"\n (click)=\"sortColumn(column)\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragDisabled]=\"column.fixed ? 'true' : 'false'\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngIf=\"this.isDraggable && !column.fixed\">\n <svg\n cdkDragHandle\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"9\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" fill=\"black\" />\n </svg>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n <ng-template #tableDefaultThDefault>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n (click)=\"sortColumn(column)\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n\n <th\n *ngIf=\"hasRowTemplateWithArrowDirectionRight && (hasVisibleActions || hideColumnsManager)\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <th\n *ngIf=\"hasVisibleActions && actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n [class.po-table-header-actions]=\"!isSingleAction\"\n ></th>\n </tr>\n </thead>\n\n <tbody class=\"po-table-group-row\" *ngIf=\"!hasItems || !hasMainColumns\">\n <tr class=\"po-table-row po-table-row-no-data\">\n <td [colSpan]=\"columnCount\" class=\"po-table-no-data po-text-center\">\n <span> {{ literals.noData }} </span>\n </td>\n </tr>\n </tbody>\n\n <ng-container *ngIf=\"hasMainColumns\">\n <tbody class=\"po-table-group-row\" *ngFor=\"let row of filteredItems; let rowIndex = index; trackBy: trackBy\">\n <tr class=\"po-table-row\" [class.po-table-row-active]=\"row.$selected || (row.$selected === null && selectable)\">\n <td *ngIf=\"selectable\" class=\"po-table-column-selectable\">\n <ng-container *ngTemplateOutlet=\"singleSelect ? inputRadio : inputCheckbox; context: { $implicit: row }\">\n </ng-container>\n </td>\n\n <!-- Valida se a origem do detail \u00E9 pelo input do po-table -->\n <td\n *ngIf=\"columnMasterDetail && !hideDetail && !hasRowTemplate\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna com as a\u00E7\u00F5es na esquerda (padr\u00E3o)-->\n <ng-template\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n\n <!-- Valida se a origem do detail \u00E9 pela diretiva -->\n <td\n *ngIf=\"hasRowTemplate && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <td\n *ngFor=\"let column of mainColumns; let columnIndex = index; trackBy: trackBy\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [class.po-table-column]=\"column.type !== 'icon'\"\n [class.po-table-column-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-column-center]=\"column.type === 'subtitle'\"\n [class.po-table-column-icons]=\"column.type === 'icon'\"\n [pFrozenColumn]=\"column.fixed\"\n class=\"p-element po-frozen-column\"\n [ngClass]=\"getClassColor(row, column)\"\n (click)=\"hasSelectableRow() ? selectRow(row) : 'javascript:;'\"\n >\n <div\n class=\"po-table-column-cell po-table-body-ellipsis notranslate\"\n [ngSwitch]=\"column.type\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event, column, row)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n <span *ngSwitchCase=\"'columnTemplate'\">\n <ng-container *ngTemplateOutlet=\"getTemplate(column); context: { $implicit: getCellData(row, column) }\">\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'cellTemplate'\">\n <ng-container *ngTemplateOutlet=\"tableCellTemplate?.templateRef; context: { row: row, column: column }\">\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'boolean'\">\n {{ getBooleanLabel(getCellData(row, column), column) }}\n </span>\n\n <span *ngSwitchCase=\"'currency'\">\n {{ getCellData(row, column) | currency: column.format : 'symbol' : '1.2-2' }}\n </span>\n\n <span *ngSwitchCase=\"'date'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy' }}\n </span>\n\n <span *ngSwitchCase=\"'time'\">\n {{ getCellData(row, column) | po_time: column.format || 'HH:mm:ss.ffffff' }}\n </span>\n\n <span *ngSwitchCase=\"'dateTime'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy HH:mm:ss' }}\n </span>\n\n <span *ngSwitchCase=\"'number'\">\n {{ formatNumber(getCellData(row, column), column.format) }}\n </span>\n\n <po-table-column-link\n *ngSwitchCase=\"'link'\"\n [p-action]=\"column.action\"\n [p-disabled]=\"checkDisabled(row, column)\"\n [p-link]=\"row[column.link]\"\n [p-row]=\"row\"\n [p-value]=\"getCellData(row, column)\"\n (click)=\"onClickLink($event, row, column)\"\n >\n </po-table-column-link>\n\n <po-table-column-icon\n *ngSwitchCase=\"'icon'\"\n [p-column]=\"column\"\n [p-icons]=\"getColumnIcons(row, column)\"\n [p-row]=\"row\"\n >\n </po-table-column-icon>\n\n <span *ngSwitchCase=\"'subtitle'\">\n <po-table-subtitle-circle [p-subtitle]=\"getSubtitleColumn(row, column)\"></po-table-subtitle-circle>\n </span>\n <span *ngSwitchCase=\"'label'\">\n <po-table-column-label [p-value]=\"getColumnLabel(row, column)\"> </po-table-column-label>\n </span>\n <span *ngSwitchDefault>{{ getCellData(row, column) }}</span>\n </div>\n </td>\n\n <td\n *ngIf=\"hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna de a\u00E7oes na direita -->\n <ng-template\n *ngIf=\"actionRight\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && hasRowTemplate && row.$showDetail && isShowRowTemplate(row, rowIndex)\">\n <td class=\"po-table-row-template-container\" [colSpan]=\"columnCountForMasterDetail\">\n <ng-template\n [ngTemplateOutlet]=\"tableRowTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && isShowMasterDetail(row)\">\n <td class=\"po-table-column-detail\" [colSpan]=\"columnCountForMasterDetail\">\n <po-table-detail\n [p-selectable]=\"selectable && !detailHideSelect\"\n [p-detail]=\"columnMasterDetail.detail\"\n [p-items]=\"row[nameColumnDetail]\"\n (p-select-row)=\"selectDetailRow($event)\"\n >\n </po-table-detail>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n</ng-template>\n\n<!-- Table with virtual scroll -->\n<ng-template #tableVirtualScrollTemplate>\n <cdk-virtual-scroll-viewport\n #tableVirtualScroll\n [itemSize]=\"itemSize\"\n [style.height.px]=\"heightTableContainer\"\n [minBufferPx]=\"heightTableContainer < 100 ? 100 : heightTableContainer\"\n [maxBufferPx]=\"heightTableContainer < 200 ? 200 : heightTableContainer\"\n >\n <table\n class=\"po-table\"\n [ngClass]=\"{\n 'po-table-interactive': selectable || sort,\n 'po-table-selectable': selectable,\n 'po-table-striped': striped,\n 'po-table-data-fixed-columns': applyFixedColumns(),\n 'po-table-text-wrap-enabled': textWrap\n }\"\n [attr.p-spacing]=\"spacing\"\n >\n <thead class=\"po-table-header-sticky\" [style.top]=\"inverseOfTranslation\">\n <tr\n [class.po-table-header]=\"!height\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <th\n *ngIf=\"hasSelectableColumn\"\n [style.pointer-events]=\"hideSelectAll ? 'none' : 'auto'\"\n class=\"po-table-column-selectable\"\n >\n <div [class.po-table-header-fixed-inner]=\"height\">\n <po-checkbox\n name=\"selectAll\"\n *ngIf=\"!hideSelectAll\"\n (p-change)=\"selectAllRows()\"\n [p-checkboxValue]=\"selectAll === null ? 'mixed' : selectAll\"\n ></po-checkbox>\n </div>\n </th>\n\n <th\n *ngIf=\"(hasMasterDetailColumn || hasRowTemplate) && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <!-- Coluna criada para caso as a\u00E7\u00F5es fiquem no lado esquerdo -->\n <th\n #columnActionLeft\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-master-detail]=\"!isSingleAction\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n ></th>\n\n <th *ngIf=\"!hasMainColumns\" #noColumnsHeader class=\"po-table-header-column po-text-center\">\n <ng-container *ngIf=\"height; then noColumnsWithHeight; else noColumnsWithoutHeight\"> </ng-container>\n </th>\n\n <ng-container\n *ngIf=\"\n this.isDraggable || hasSomeFixed();\n then tableVirtualScrollThDragDrop;\n else tableVirtualScrollThDefault\n \"\n >\n </ng-container>\n <ng-template #tableVirtualScrollThDragDrop>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [ngStyle]=\"{ 'width': !hasItems ? '100%' : applyFixedColumns() ? column.width : 'auto' }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n [class.po-table-column-drag-box]=\"this.isDraggable\"\n (click)=\"sortColumn(column)\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragDisabled]=\"column.fixed ? 'true' : 'false'\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngIf=\"this.isDraggable && !column.fixed\">\n <svg\n cdkDragHandle\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"9\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"6\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" fill=\"black\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" fill=\"black\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" fill=\"black\" />\n </svg>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n <ng-template #tableVirtualScrollThDefault>\n <th\n *ngFor=\"let column of mainColumns; let i = index; trackBy: trackBy\"\n class=\"po-table-header-ellipsis p-element po-frozen-column example-box\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [attr.data-po-table-column-name]=\"column.label || (column.property | titlecase) | lowercase\"\n [class.po-clickable]=\"(sort && column.sortable !== false) || hasService\"\n [ngClass]=\"{\n 'po-table-header-sorted':\n sort &&\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) &&\n (sortedColumn.ascending || !sortedColumn.ascending)\n }\"\n [ngStyle]=\"{ 'width': !hasItems ? '100%' : applyFixedColumns() ? column.width : 'auto' }\"\n [class.po-table-header-subtitle]=\"column.type === 'subtitle'\"\n (click)=\"sortColumn(column)\"\n [pFrozenColumn]=\"column.fixed\"\n >\n <div\n class=\"po-table-header-flex\"\n [class.po-table-header-fixed-inner]=\"height\"\n [class.po-table-header-flex-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-header-flex-center]=\"column.type === 'subtitle'\"\n >\n <ng-container *ngTemplateOutlet=\"contentHeaderTemplate; context: { $implicit: column }\"> </ng-container>\n </div>\n </th>\n </ng-template>\n\n <th\n *ngIf=\"hasRowTemplateWithArrowDirectionRight && (hasVisibleActions || hideColumnsManager)\"\n class=\"po-table-header-column po-table-header-master-detail\"\n ></th>\n\n <th\n *ngIf=\"hasVisibleActions && actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [class.po-table-header-single-action]=\"isSingleAction\"\n [class.po-table-header-actions]=\"!isSingleAction\"\n ></th>\n </tr>\n </thead>\n\n <tbody class=\"po-table-group-row\" *ngIf=\"!hasItems || !hasMainColumns\">\n <tr class=\"po-table-row po-table-row-no-data\">\n <td [colSpan]=\"columnCount\" class=\"po-table-no-data po-text-center\">\n <span> {{ literals.noData }} </span>\n </td>\n </tr>\n </tbody>\n\n <ng-container *ngIf=\"hasMainColumns\">\n <tbody\n class=\"po-table-group-row\"\n *cdkVirtualFor=\"let row of filteredItems; let rowIndex = index; trackBy: trackBy\"\n >\n <tr\n class=\"po-table-row\"\n [class.po-table-row-active]=\"row.$selected || (row.$selected === null && selectable)\"\n >\n <td *ngIf=\"selectable\" class=\"po-table-column-selectable\">\n <ng-container *ngTemplateOutlet=\"singleSelect ? inputRadio : inputCheckbox; context: { $implicit: row }\">\n </ng-container>\n </td>\n\n <!-- Valida se a origem do detail \u00E9 pelo input do po-table -->\n <td\n *ngIf=\"columnMasterDetail && !hideDetail && !hasRowTemplate\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna com as a\u00E7\u00F5es na esquerda (padr\u00E3o)-->\n <ng-template\n *ngIf=\"!actionRight && (visibleActions.length > 1 || isSingleAction)\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n\n <!-- Valida se a origem do detail \u00E9 pela diretiva -->\n <td\n *ngIf=\"hasRowTemplate && !hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <td\n *ngFor=\"let column of mainColumns; let columnIndex = index; trackBy: trackBy\"\n [style.width]=\"column.width\"\n [style.max-width]=\"column.width\"\n [style.min-width]=\"column.width\"\n [class.po-table-column]=\"column.type !== 'icon'\"\n [class.po-table-column-right]=\"column.type === 'currency' || column.type === 'number'\"\n [class.po-table-column-center]=\"column.type === 'subtitle'\"\n [class.po-table-column-icons]=\"column.type === 'icon'\"\n [ngClass]=\"getClassColor(row, column)\"\n [pFrozenColumn]=\"column.fixed\"\n class=\"p-element po-frozen-column\"\n (click)=\"hasSelectableRow() ? selectRow(row) : 'javascript:;'\"\n >\n <div\n class=\"po-table-column-cell po-table-body-ellipsis notranslate\"\n [ngSwitch]=\"column.type\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event, column, row)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n <span *ngSwitchCase=\"'columnTemplate'\">\n <ng-container\n *ngTemplateOutlet=\"getTemplate(column); context: { $implicit: getCellData(row, column) }\"\n >\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'cellTemplate'\">\n <ng-container\n *ngTemplateOutlet=\"tableCellTemplate?.templateRef; context: { row: row, column: column }\"\n >\n </ng-container>\n </span>\n\n <span *ngSwitchCase=\"'boolean'\">\n {{ getBooleanLabel(getCellData(row, column), column) }}\n </span>\n\n <span *ngSwitchCase=\"'currency'\">\n {{ getCellData(row, column) | currency: column.format : 'symbol' : '1.2-2' }}\n </span>\n\n <span *ngSwitchCase=\"'date'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy' }}\n </span>\n\n <span *ngSwitchCase=\"'time'\">\n {{ getCellData(row, column) | po_time: column.format || 'HH:mm:ss.ffffff' }}\n </span>\n\n <span *ngSwitchCase=\"'dateTime'\">\n {{ getCellData(row, column) | date: column.format || 'dd/MM/yyyy HH:mm:ss' }}\n </span>\n\n <span *ngSwitchCase=\"'number'\">\n {{ formatNumber(getCellData(row, column), column.format) }}\n </span>\n\n <po-table-column-link\n *ngSwitchCase=\"'link'\"\n [p-action]=\"column.action\"\n [p-disabled]=\"checkDisabled(row, column)\"\n [p-link]=\"row[column.link]\"\n [p-row]=\"row\"\n [p-value]=\"getCellData(row, column)\"\n (click)=\"onClickLink($event, row, column)\"\n >\n </po-table-column-link>\n\n <po-table-column-icon\n *ngSwitchCase=\"'icon'\"\n [p-column]=\"column\"\n [p-icons]=\"getColumnIcons(row, column)\"\n [p-row]=\"row\"\n >\n </po-table-column-icon>\n\n <span *ngSwitchCase=\"'subtitle'\">\n <po-table-subtitle-circle [p-subtitle]=\"getSubtitleColumn(row, column)\"></po-table-subtitle-circle>\n </span>\n <span *ngSwitchCase=\"'label'\">\n <po-table-column-label [p-value]=\"getColumnLabel(row, column)\"> </po-table-column-label>\n </span>\n <span *ngSwitchDefault>{{ getCellData(row, column) }}</span>\n </div>\n </td>\n\n <td\n *ngIf=\"hasRowTemplateWithArrowDirectionRight\"\n class=\"po-table-column-detail-toggle\"\n (click)=\"toggleDetail(row)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"poTableColumnDetail\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n\n <!-- Coluna de a\u00E7oes na direita -->\n <ng-template\n *ngIf=\"actionRight\"\n [ngTemplateOutlet]=\"ActionsColumnTemplate\"\n [ngTemplateOutletContext]=\"{ row: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && hasRowTemplate && row.$showDetail && isShowRowTemplate(row, rowIndex)\">\n <td class=\"po-table-row-template-container\" [colSpan]=\"columnCountForMasterDetail\">\n <ng-template\n [ngTemplateOutlet]=\"tableRowTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowIndex: rowIndex }\"\n >\n </ng-template>\n </td>\n </tr>\n\n <tr *ngIf=\"hasMainColumns && isShowMasterDetail(row)\">\n <td class=\"po-table-column-detail\" [colSpan]=\"columnCountForMasterDetail\">\n <po-table-detail\n [p-selectable]=\"selectable && !detailHideSelect\"\n [p-detail]=\"columnMasterDetail.detail\"\n [p-items]=\"row[nameColumnDetail]\"\n (p-select-row)=\"selectDetailRow($event)\"\n >\n </po-table-detail>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n </cdk-virtual-scroll-viewport>\n</ng-template>\n\n<po-popup #popup [p-actions]=\"actions\" [p-target]=\"popupTarget\"> </po-popup>\n\n<ng-template #poTableColumnDetail let-row=\"row\" let-rowIndex=\"rowIndex\">\n <span\n *ngIf=\"(containsMasterDetail(row) && !hasRowTemplate) || (isShowRowTemplate(row, rowIndex) && hasRowTemplate)\"\n class=\"po-icon po-clickable\"\n [class.po-icon-arrow-up]=\"row.$showDetail\"\n [class.po-icon-arrow-down]=\"!row.$showDetail\"\n >\n </span>\n</ng-template>\n\n<ng-template #inputRadio let-row>\n <po-radio [name]=\"idRadio\" [p-checked]=\"row.$selected\" (p-change-selected)=\"selectRow(row)\"></po-radio>\n</ng-template>\n\n<ng-template #inputCheckbox let-row>\n <po-checkbox\n name=\"checkbox\"\n (p-change)=\"selectable ? selectRow(row) : 'javascript:;'\"\n [p-checkboxValue]=\"row.$selected\"\n ></po-checkbox>\n</ng-template>\n\n<ng-template #contentHeaderTemplate let-column>\n <span\n #columnHeader\n class=\"po-table-header-ellipsis\"\n [p-tooltip]=\"tooltipText\"\n [p-append-in-body]=\"true\"\n (mouseenter)=\"tooltipMouseEnter($event)\"\n (mouseleave)=\"tooltipMouseLeave()\"\n >\n {{ column.label || (column.property | titlecase) }}\n </span>\n\n <span\n *ngIf=\"sort && column.sortable !== false\"\n [class.po-table-header-icon-unselected]=\"JSON.stringify(sortedColumn?.property) !== JSON.stringify(column)\"\n [class.po-table-header-icon-descending]=\"\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && sortedColumn.ascending\n \"\n [class.po-table-header-icon-ascending]=\"\n JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && !sortedColumn.ascending\n \"\n >\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) !== JSON.stringify(column)\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M18.2929 15.2929L17 16.5858L17 10C17 9.44772 16.5523 9 16 9C15.4477 9 15 9.44772 15 10L15 16.5858L13.7071 15.2929C13.3166 14.9024 12.6834 14.9024 12.2929 15.2929C11.9024 15.6834 11.9024 16.3166 12.2929 16.7071L15.2929 19.7071C15.6834 20.0976 16.3166 20.0976 16.7071 19.7071L19.7071 16.7071C20.0976 16.3166 20.0976 15.6834 19.7071 15.2929C19.3166 14.9024 18.6834 14.9024 18.2929 15.2929ZM5.70716 8.7071L7.00006 7.4142L7.00003 14C7.00002 14.5523 7.44774 15 8.00002 15C8.55231 15 9.00002 14.5523 9.00003 14L9.00006 7.41418L10.2929 8.70707C10.6835 9.09759 11.3166 9.09758 11.7072 8.70706C12.0977 8.31653 12.0977 7.68336 11.7072 7.29284L8.70718 4.29286C8.31665 3.90234 7.68349 3.90235 7.29296 4.29287L4.29295 7.29289C3.90242 7.68342 3.90242 8.31658 4.29294 8.70711C4.68347 9.09763 5.31663 9.09762 5.70716 8.7071Z\"\n fill=\"#1D1D30\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && sortedColumn.ascending\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11 9.41421L9.70711 10.7071C9.31658 11.0976 8.68342 11.0976 8.29289 10.7071C7.90237 10.3166 7.90237 9.68342 8.29289 9.29289L11.2929 6.29289C11.6834 5.90237 12.3166 5.90237 12.7071 6.29289L15.7071 9.29289C16.0976 9.68342 16.0976 10.3166 15.7071 10.7071C15.3166 11.0976 14.6834 11.0976 14.2929 10.7071L13 9.41421V16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16V9.41421Z\"\n fill=\"black\"\n />\n </svg>\n </ng-container>\n\n <ng-container *ngIf=\"JSON.stringify(sortedColumn?.property) === JSON.stringify(column) && !sortedColumn.ascending\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M9.70711 13.2929L11 14.5858V7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7V14.5858L14.2929 13.2929C14.6834 12.9024 15.3166 12.9024 15.7071 13.2929C16.0976 13.6834 16.0976 14.3166 15.7071 14.7071L12.7071 17.7071C12.3166 18.0976 11.6834 18.0976 11.2929 17.7071L8.29289 14.7071C7.90237 14.3166 7.90237 13.6834 8.29289 13.2929C8.68342 12.9024 9.31658 12.9024 9.70711 13.2929Z\"\n fill=\"black\"\n />\n </svg>\n </ng-container>\n </span>\n</ng-template>\n\n<ng-template #noColumnsWithHeight>\n <div class=\"po-table-header-fixed-inner\" [style.width.px]=\"headerWidth\">\n {{ hasValidColumns ? literals.noVisibleColumn : literals.noColumns }}\n </div>\n</ng-template>\n\n<ng-template #noColumnsWithoutHeight>\n {{ hasValidColumns ? literals.noVisibleColumn : literals.noColumns }}\n</ng-template>\n\n<!-- Template de a\u00E7\u00F5es -->\n<ng-template #ActionsColumnTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <td\n *ngIf=\"isSingleAction\"\n class=\"po-table-column po-table-column-single-action\"\n [style.width.px]=\"height && actionRight ? getWidthColumnManager() : ''\"\n [style.max-width.px]=\"height && !actionRight ? getColumnWidthActionsLeft() : ''\"\n [style.width.px]=\"height && !actionRight ? getColumnWidthActionsLeft() : ''\"\n >\n <div\n *ngIf=\"firstAction.visible !== false\"\n class=\"po-table-single-action po-clickable\"\n [class.po-table-action-disabled]=\"firstAction.disabled ? validateTableAction(row, firstAction) : false\"\n (click)=\"executeTableAction(row, firstAction)\"\n >\n <po-icon *ngIf=\"firstAction.icon\" class=\"po-table-single-action-content\" [p-icon]=\"firstAction.icon\"></po-icon>\n {{ firstAction.label }}\n </div>\n </td>\n\n <td *ngIf=\"visibleActions.length > 1\" class=\"po-table-column-actions\">\n <span #popupTarget class=\"po-icon po-icon-more po-clickable\" (click)=\"togglePopup(row, popupTarget)\"></span>\n </td>\n</ng-template>\n\n<po-table-column-manager\n *ngIf=\"!hideColumnsManager\"\n [p-columns]=\"columns\"\n [p-max-columns]=\"maxColumns\"\n [p-target]=\"columnManagerTarget\"\n [p-last-visible-columns-selected]=\"lastVisibleColumnsSelected\"\n [p-hide-action-fixed-columns]=\"hideActionFixedColumns\"\n (p-visible-columns-change)=\"onVisibleColumnsChange($event)\"\n (p-change-visible-columns)=\"onChangeVisibleColumns($event)\"\n [p-columns-default]=\"initialColumns\"\n (p-initial-columns)=\"onColumnRestoreManager($event)\"\n>\n</po-table-column-manager>\n\n<po-modal\n #modalDelete\n [p-title]=\"literals.delete\"\n [p-primary-action]=\"confirm\"\n [p-secondary-action]=\"close\"\n [p-click-out]=\"true\"\n>\n <p class=\"po-font-text-large\">{{ literals.bodyDelete }}</p>\n</po-modal>\n" }]
|
|
2209
2209
|
}], () => [{ type: i1.PoDateService }, { type: i0.IterableDiffers }, { type: i0.Renderer2 }, { type: i2.PoLanguageService }, { type: i0.ChangeDetectorRef }, { type: i3.DecimalPipe }, { type: i4.Router }, { type: i5.PoTableService }], { tableRowTemplate: [{
|
|
2210
2210
|
type: ContentChild,
|
|
2211
2211
|
args: [PoTableRowTemplateDirective, { static: true }]
|
|
@@ -2268,4 +2268,4 @@ export class PoTableComponent extends PoTableBaseComponent {
|
|
|
2268
2268
|
args: ['columnManagerTargetFixed']
|
|
2269
2269
|
}] }); })();
|
|
2270
2270
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoTableComponent, { className: "PoTableComponent", filePath: "lib/components/po-table/po-table.component.ts", lineNumber: 105 }); })();
|
|
2271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdEUsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFVBQVUsRUFPVixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTlELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUd0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FB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QUEwQjs7a0ZBaEYxQixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHsgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQb05vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1ub3RpZmljYXRpb24vcG8tbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9Nb2RhbEFjdGlvbiwgUG9Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLW1vZGFsJztcbmltcG9ydCB7IFBvUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9wby1wb3B1cC9wby1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbkxhYmVsIH0gZnJvbSAnLi9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvUGFnZVNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcGFnZSc7XG5pbXBvcnQgeyBQb1RhYmxlUm93VGVtcGxhdGVBcnJvd0RpcmVjdGlvbiB9IGZyb20gJy4vZW51bXMvcG8tdGFibGUtcm93LXRlbXBsYXRlLWFycm93LWRpcmVjdGlvbi5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUJhc2VDb21wb25lbnQsIFF1ZXJ5UGFyYW1zVHlwZSB9IGZyb20gJy4vcG8tdGFibGUtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tdGFibGUtY2VsbC10ZW1wbGF0ZS9wby10YWJsZS1jZWxsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3BvLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZS9wby10YWJsZS1jb2x1bW4tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvVGFibGVSb3dUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tdGFibGUtcm93LXRlbXBsYXRlL3BvLXRhYmxlLXJvdy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9UYWJsZVN1YnRpdGxlQ29sdW1uIH0gZnJvbSAnLi9wby10YWJsZS1zdWJ0aXRsZS1mb290ZXIvcG8tdGFibGUtc3VidGl0bGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tdGFibGUuc2VydmljZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvVGFibGVCYXNlQ29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tdGFibGUtYmFzaWNcIiB0aXRsZT1cIlBPIFRhYmxlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1iYXNpYy9zYW1wbGUtcG8tdGFibGUtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWJhc2ljL3NhbXBsZS1wby10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWxhYnNcIiB0aXRsZT1cIlBPIFRhYmxlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWxhYnMvc2FtcGxlLXBvLXRhYmxlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWxhYnMvc2FtcGxlLXBvLXRhYmxlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5jb21wb25lbnQuZTJlLXNwZWMudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5jb21wb25lbnQucG8udHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tdGFibGUtd2l0aC1hcGlcIiB0aXRsZT1cIlBPIFRhYmxlIHVzaW5nIEFQSVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtd2l0aC1hcGkvc2FtcGxlLXBvLXRhYmxlLXdpdGgtYXBpLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS13aXRoLWFwaS9zYW1wbGUtcG8tdGFibGUtd2l0aC1hcGkuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS10cmFuc3BvcnRcIiB0aXRsZT1cIlBPIFRhYmxlIC0gVHJhbnNwb3J0XCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS10cmFuc3BvcnQvc2FtcGxlLXBvLXRhYmxlLXRyYW5zcG9ydC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtdHJhbnNwb3J0L3NhbXBsZS1wby10YWJsZS10cmFuc3BvcnQuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtdHJhbnNwb3J0L3NhbXBsZS1wby10YWJsZS10cmFuc3BvcnQuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWFpcmZhcmVcIiB0aXRsZT1cIlBPIFRhYmxlIC0gQWlyZmFyZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtYWlyZmFyZS9zYW1wbGUtcG8tdGFibGUtYWlyZmFyZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtYWlyZmFyZS9zYW1wbGUtcG8tdGFibGUtYWlyZmFyZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1haXJmYXJlL3NhbXBsZS1wby10YWJsZS1haXJmYXJlLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS1jb21wb25lbnRzXCIgdGl0bGU9XCJQTyBUYWJsZSAtIFBvIEZpZWxkIENvbXBvbmVudHNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuZW51bS50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1jb21wb25lbnRzL3NhbXBsZS1wby10YWJsZS1jb21wb25lbnRzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1jb21wb25lbnRzL3NhbXBsZS1wby10YWJsZS1jb21wb25lbnRzLmNvbXBvbmVudC5jc3NcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS1oZXJvZXNcIiB0aXRsZT1cIlBPIFRhYmxlIC0gSGVyb2VzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1oZXJvZXMvc2FtcGxlLXBvLXRhYmxlLWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtaGVyb2VzL3NhbXBsZS1wby10YWJsZS1oZXJvZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtaGVyb2VzL3NhbXBsZS1wby10YWJsZS1oZXJvZXMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWRyYWdnYWJsZVwiIHRpdGxlPVwiUE8gVGFibGUgRHJhZyBhbmQgRHJvcFwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtZHJhZ2dhYmxlL3NhbXBsZS1wby10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtZHJhZ2dhYmxlL3NhbXBsZS1wby10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb0RhdGVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9UYWJsZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoUG9UYWJsZVJvd1RlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJvd1RlbXBsYXRlOiBQb1RhYmxlUm93VGVtcGxhdGVEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoUG9UYWJsZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSkgdGFibGVDZWxsVGVtcGxhdGU6IFBvVGFibGVDZWxsVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihQb1RhYmxlQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUpIHRhYmxlQ29sdW1uVGVtcGxhdGVzOiBRdWVyeUxpc3Q8UG9UYWJsZUNvbHVtblRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICBAVmlld0NoaWxkKCdub0NvbHVtbnNIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbm9Db2x1bW5zSGVhZGVyO1xuICBAVmlld0NoaWxkKCdwb3B1cCcpIHBvUG9wdXBDb21wb25lbnQ6IFBvUG9wdXBDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoUG9Nb2RhbENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgbW9kYWxEZWxldGU6IFBvTW9kYWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRm9vdGVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlRm9vdGVyRWxlbWVudDtcbiAgQFZpZXdDaGlsZCgndGFibGVXcmFwcGVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlV3JhcHBlckVsZW1lbnQ7XG5cbiAgQFZpZXdDaGlsZCgndGFibGVUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVRlbXBsYXRlO1xuICBAVmlld0NoaWxkKCd0YWJsZVZpcnR1YWxTY3JvbGwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGFibGVWaXJ0dWFsU2Nyb2xsO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbk1hbmFnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgY29sdW1uTWFuYWdlcjtcbiAgQFZpZXdDaGlsZCgnY29sdW1uQmF0Y2hBY3Rpb25zJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIGNvbHVtbkJhdGNoQWN0aW9ucztcbiAgQFZpZXdDaGlsZCgnY29sdW1uQWN0aW9uTGVmdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBjb2x1bW5BY3Rpb25MZWZ0O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2FjdGlvbnNJY29uRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhY3Rpb25zSWNvbkVsZW1lbnQ6IFF1ZXJ5TGlzdDxhbnk+O1xuICBAVmlld0NoaWxkcmVuKCdhY3Rpb25zRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhY3Rpb25zRWxlbWVudDogUXVlcnlMaXN0PGFueT47XG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcklucHV0JykgZmlsdGVySW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvU2VhcmNoSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwb1NlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyB2aWV3UG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHBvTm90aWZpY2F0aW9uID0gaW5qZWN0KFBvTm90aWZpY2F0aW9uU2VydmljZSk7XG5cbiAgaGVpZ2h0VGFibGVDb250YWluZXI6IG51bWJlcjtcbiAgaGVpZ2h0VGFibGVWaXJ0dWFsOiBudW1iZXI7XG4gIHBvcHVwVGFyZ2V0O1xuICB0YWJsZU9wYWNpdHk6IG51bWJlciA9IDA7XG4gIHRvb2x0aXBUZXh0OiBzdHJpbmc7XG4gIGl0ZW1TaXplOiBudW1iZXIgPSA0ODtcbiAgbGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQ6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICB0YWdDb2xvcjogc3RyaW5nO1xuICBpZFJhZGlvOiBzdHJpbmc7XG4gIGlucHV0RmllbGRWYWx1ZSA9ICcnO1xuICBKU09OOiBKU09OO1xuICBuZXdPcmRlckNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBzaXplTG9hZGluZzogc3RyaW5nID0gJ3NtJztcbiAgaGVhZGVyV2lkdGg6IG51bWJlcjtcblxuICBjbG9zZTogUG9Nb2RhbEFjdGlvbiA9IHtcbiAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgIHRoaXMubW9kYWxEZWxldGUuY2xvc2UoKTtcbiAgICB9LFxuICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLmNhbmNlbCxcbiAgICBkYW5nZXI6IHRydWVcbiAgfTtcblxuICBjb25maXJtOiBQb01vZGFsQWN0aW9uID0ge1xuICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgdGhpcy5kZWxldGVJdGVtcygpO1xuICAgIH0sXG4gICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMuZGVsZXRlXG4gIH07XG5cbiAgcHJpdmF0ZSBfY29sdW1uTWFuYWdlclRhcmdldDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBfY29sdW1uTWFuYWdlclRhcmdldEZpeGVkOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRpZmZlcjtcbiAgcHJpdmF0ZSBmb290ZXJIZWlnaHQ7XG4gIHByaXZhdGUgaGVhZGVySGVpZ2h0O1xuICBwcml2YXRlIHRpbWVvdXRSZXNpemU7XG4gIHByaXZhdGUgdmlzaWJsZUVsZW1lbnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzY3JvbGxFdmVudCQ6IE9ic2VydmFibGU8YW55PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TY3JvbGxFdmVudDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIGNsaWNrTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uTWFuYWdlclRhcmdldCcpIHNldCBjb2x1bW5NYW5hZ2VyVGFyZ2V0KHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fY29sdW1uTWFuYWdlclRhcmdldCA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbk1hbmFnZXJUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbk1hbmFnZXJUYXJnZXQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdjb2x1bW5NYW5hZ2VyVGFyZ2V0Rml4ZWQnKSBzZXQgY29sdW1uTWFuYWdlclRhcmdldEZpeGVkKHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fY29sdW1uTWFuYWdlclRhcmdldEZpeGVkID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY29sdW1uTWFuYWdlclRhcmdldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5NYW5hZ2VyVGFyZ2V0Rml4ZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwb0RhdGU6IFBvRGF0ZVNlcnZpY2UsXG4gICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcG9MYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlLCBwb0xhbmd1YWdlU2VydmljZSwgZGVmYXVsdFNlcnZpY2UpO1xuICAgIHRoaXMuSlNPTiA9IEpTT047XG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcblxuICAgIC8vIFRPRE86ICM1NTUwIGFvIHJlbW92ZXIgZXN0ZSBsaXN0ZW5lciwgbm8gcG9ydGFsLCBxdWFuZG8gYXMgY29sdW5hcyBmb3JlbSBmaXhhcyBuw6NvIHNvZnJlbVxuICAgIC8vIGFsdGVyYcOnw6NvIGRlIGxhcmd1cmEsIHBvaXMgbyBuZ0RvQ2hlY2sgbsOjbyDDqSBleGVjdXRhZG8uXG4gICAgdGhpcy5jbGlja0xpc3RlbmVyID0gcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsICgpID0+IHt9KTtcblxuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSByZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5kZWJvdW5jZVJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVSb3dUZW1wbGF0ZT8udGFibGVSb3dUZW1wbGF0ZUFycm93RGlyZWN0aW9uID09PSBQb1RhYmxlUm93VGVtcGxhdGVBcnJvd0RpcmVjdGlvbi5SaWdodDtcbiAgfVxuXG4gIGdldCBjb2x1bW5Db3VudCgpIHtcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9XG4gICAgICB0aGlzLm1haW5Db2x1bW5zLmxlbmd0aCArXG4gICAgICAodGhpcy5hY3Rpb25zLmxlbmd0aCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHRoaXMuc2VsZWN0YWJsZSA/IDEgOiAwKSArXG4gICAgICAoIXRoaXMuaGlkZURldGFpbCAmJiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCAhPT0gdW5kZWZpbmVkID8gMSA6IDApO1xuXG4gICAgcmV0dXJuIGNvbHVtbkNvdW50IHx8IDE7XG4gIH1cblxuICBnZXQgY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWwoKSB7XG4gICAgLy8gY2FzbyB0aXZlciBhw6fDtWVzIHNlcsOhIHV0aWxpemFkbyBhIHN1YSBjb2x1bmEgcGFyYSBleGliaXIgbyBjb2x1bW5NYW5hZ2VyXG4gICAgcmV0dXJuIHRoaXMubWFpbkNvbHVtbnMubGVuZ3RoICsgMSArICh0aGlzLmFjdGlvbnMubGVuZ3RoID4gMCA/IDEgOiAwKSArICh0aGlzLnNlbGVjdGFibGUgPyAxIDogMCk7XG4gIH1cblxuICBnZXQgZGV0YWlsSGlkZVNlbGVjdCgpIHtcbiAgICBjb25zdCBtYXN0ZXJEZXRhaWwgPSB0aGlzLmNvbHVtbk1hc3RlckRldGFpbDtcbiAgICByZXR1cm4gbWFzdGVyRGV0YWlsICYmIG1hc3RlckRldGFpbC5kZXRhaWwgPyBtYXN0ZXJEZXRhaWwuZGV0YWlsLmhpZGVTZWxlY3QgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNWaXNpYmxlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gISF0aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBmaXJzdEFjdGlvbigpOiBQb1RhYmxlQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQWN0aW9ucyAmJiB0aGlzLnZpc2libGVBY3Rpb25zWzBdO1xuICB9XG5cbiAgZ2V0IGhhc0Zvb3RlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNJdGVtcyAmJiB0aGlzLmhhc1Zpc2libGVTdWJ0aXRsZUNvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzTWFzdGVyRGV0YWlsQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc01haW5Db2x1bW5zICYmIHRoaXMuaGFzSXRlbXMgJiYgIXRoaXMuaGlkZURldGFpbCAmJiAhISh0aGlzLmNvbHVtbk1hc3RlckRldGFpbCB8fCB0aGlzLmhhc1Jvd1RlbXBsYXRlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzUm93VGVtcGxhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50YWJsZVJvd1RlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGhhc1NlbGVjdGFibGVDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSAmJiB0aGlzLmhhc0l0ZW1zICYmIHRoaXMuaGFzTWFpbkNvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzVmFsaWRDb2x1bW5zKCkge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBoYXNWaXNpYmxlU3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnRpdGxlQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGdldCBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludmVyc2VPZlRyYW5zbGF0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnZpZXdQb3J0IHx8ICF0aGlzLnZpZXdQb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10pIHtcbiAgICAgIHJldHVybiAnLTBweCc7XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy52aWV3UG9ydFsnX3JlbmRlcmVkQ29udGVudE9mZnNldCddO1xuXG4gICAgcmV0dXJuIGAtJHtvZmZzZXR9cHhgO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pZFJhZGlvID0gYHBvLXJhZGlvLSR7dXVpZCgpfWA7XG4gIH1cblxuICBjaGFuZ2VIZWFkZXJXaWR0aCgpIHtcbiAgICBpZiAodGhpcy5ub0NvbHVtbnNIZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyV2lkdGggPSB0aGlzLm5vQ29sdW1uc0hlYWRlcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VIZWFkZXJXaWR0aCgpO1xuICAgIHRoaXMuY2hhbmdlU2l6ZUxvYWRpbmcoKTtcbiAgICB0aGlzLmFwcGx5Rml4ZWRDb2x1bW5zKCk7XG4gIH1cblxuICBzaG93TW9yZUluZmluaXRlU2Nyb2xsKHsgdGFyZ2V0IH0pOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHRhcmdldC5vZmZzZXRIZWlnaHQgKyB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgIGlmICghdGhpcy5zaG93TW9yZURpc2FibGVkICYmIHNjcm9sbFBvc2l0aW9uID49IHRhcmdldC5zY3JvbGxIZWlnaHQgKiAodGhpcy5pbmZpbml0ZVNjcm9sbERpc3RhbmNlIC8gMTEwKSkge1xuICAgICAgdGhpcy5vblNob3dNb3JlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIHRoaXMuYXBwbHlGaXhlZENvbHVtbnMoKTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlc0l0ZW1zKCk7XG4gICAgdGhpcy52ZXJpZnlDYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcigpO1xuXG4gICAgLy8gUGVybWl0ZSBxdWUgb3MgY2FiZcOnYWxob3Mgc2VqYW0gY2FsY3VsYWRvcyBuYSBwcmltZWlyYSB2ZXogcXVlIG8gY29tcG9uZW50ZSB0b3JuYS1zZSB2aXPDrXZlbCxcbiAgICAvLyBldml0YW5kbyBjb20gaXNzbywgcHJvYmxlbWFzIGNvbSBUYWJzIG91IERpdnMgcXVlIGluaWNpZW0gZXNjb25kaWRhcy5cbiAgICBpZiAodGhpcy50YWJsZVdyYXBwZXJFbGVtZW50Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICYmICF0aGlzLnZpc2libGVFbGVtZW50ICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcbiAgICAgIHRoaXMuY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xuICAgICAgdGhpcy52aXNpYmxlRWxlbWVudCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2U/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIHJlYWxpemFyIGJ1c2NhIG5vIHNlcnZpw6dvIGRlIGRhZG9zIHBvZGVuZG8gaW5mb3JtYXIgZmlsdHJvcyBlIGNvbSBvIHJldG9ybm8sIGF0dWFsaXphIGEgdGFiZWxhLlxuICAgKlxuICAgKiBDYXNvIG7Do28gc2VqYSBpbmZvcm1hZG8gcGFyw6JtZXRybywgbmFkYSBzZXLDoSBhZGljaW9uYWRvIGFvIEdFVCwgY29uZm9ybWUgYWJhaXhvOlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMFxuICAgKiBgYGBcbiAgICogPiBPYnM6IG9zIHBhcsOibWV0cm9zIGBwYWdlYCBlIGBwYWdlU2l6ZWAgc2VtcHJlIHNlcsOjbyBjaGFtYWRvcyBpbmRlcGVuZGVudGUgZGUgc2VyIGVudmlhZG9zIG91dHJvcyBwYXLDom1ldHJvcy5cbiAgICpcbiAgICogQ2FzbyBzZWphbSBpbmZvcm1hZG9zIG9zIHBhcsOibWV0cm9zIGB7IG5hbWU6ICdKT0hOJywgYWdlOiAnMjMnIH1gLCB0b2RvcyBzZXLDo28gYWRpY2lvbmFkb3MgYW8gR0VULCBjb25mb3JtZSBhYmFpeG86XG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm5hbWU9Sk9ITiZhZ2U9MjNcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7IHsga2V5OiB2YWx1ZSB9IH0gcXVlcnlQYXJhbXMgRm9ybWF0byBkbyBvYmpldG8gYSBzZXIgZW52aWFkby5cbiAgICogPiBQb2RlIHNlciB1dGlsaXphZGEgcXVhbHF1ZXIgc3RyaW5nIGNvbW8ga2V5LCBlIHF1YWxxdWVyIHN0cmluZyBvdSBudW1iZXIgY29tbyB2YWx1ZS5cbiAgICovXG4gIGFwcGx5RmlsdGVycyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pIHtcbiAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEocXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIGNvbHVtbnMgcG9zc3VlbSBhIHByb3ByaWVkYWRlIHdpZHRoLlxuICAgKi9cbiAgYXBwbHlGaXhlZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNvbHVtbnMuc29tZShjb2x1bW4gPT4gIWNvbHVtbi53aWR0aCk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgY29sYXBzYSB1bWEgbGluaGEgY29tIGRldGFsaGUgcXVhbmRvIGV4ZWN1dGFkYS5cbiAgICpcbiAgICogQHBhcmFtIHsgbnVtYmVyIH0gcm93SW5kZXggw41uZGljZSBkYSBsaW5oYSBxdWUgc2Vyw6EgY29sYXBzYWRhLlxuICAgKiA+IEFvIHJlb3JkZW5hciBvcyBkYWRvcyBkYSB0YWJlbGEsIG8gdmFsb3IgY29udGlkbyBuZXN0ZSDDrW5kaWNlIHNlcsOhIGFsdGVyYWRvIGNvbmZvcm1lIGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBjb2xsYXBzZShyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRTaG93RGV0YWlsKHJvd0luZGV4LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgZXhwYW5kZSB1bWEgbGluaGEgY29tIGRldGFsaGUgcXVhbmRvIGV4ZWN1dGFkYS5cbiAgICpcbiAgICogQHBhcmFtIHsgbnVtYmVyIH0gcm93SW5kZXggw41uZGljZSBkYSBsaW5oYSBxdWUgc2Vyw6EgZXhwYW5kaWRhLlxuICAgKiA+IEFvIHJlb3JkZW5hciBvcyBkYWRvcyBkYSB0YWJlbGEsIG8gdmFsb3IgY29udGlkbyBuZXN0ZSDDrW5kaWNlIHNlcsOhIGFsdGVyYWRvIGNvbmZvcm1lIGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBleHBhbmQocm93SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3dJbmRleCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBhcyBsaW5oYXMgZG8gYHBvLXRhYmxlYCBxdWUgZXN0w6NvIHNlbGVjaW9uYWRhcy5cbiAgICovXG4gIGdldFNlbGVjdGVkUm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBhcyBsaW5oYXMgZG8gYHBvLXRhYmxlYCBxdWUgbsOjbyBlc3TDo28gc2VsZWNpb25hZGFzLlxuICAgKi9cbiAgZ2V0VW5zZWxlY3RlZFJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uJHNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNtYXJjYSBhcyBsaW5oYXMgcXVlIGVzdMOjbyBzZWxlY2lvbmFkYXMuXG4gICAqL1xuICB1bnNlbGVjdFJvd3MoKSB7XG4gICAgY29uc3QgY29sdW1uRGV0YWlsID0gdGhpcy5uYW1lQ29sdW1uRGV0YWlsO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgZGV0YWlsSXRlbXMgPSBjb2x1bW5EZXRhaWwgPyBpdGVtW2NvbHVtbkRldGFpbF0gOiBudWxsO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXRhaWxJdGVtcykpIHtcbiAgICAgICAgZGV0YWlsSXRlbXMuZm9yRWFjaChkZXRhaWxJdGVtID0+IHtcbiAgICAgICAgICBkZXRhaWxJdGVtLiRzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaXRlbS4kc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gIH1cblxuICBjaGVja0Rpc2FibGVkKHJvdywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5kaXNhYmxlZCA/IGNvbHVtbi5kaXNhYmxlZChyb3cpIDogZmFsc2U7XG4gIH1cblxuICBjb250YWluc01hc3RlckRldGFpbChyb3cpIHtcbiAgICByZXR1cm4gcm93W3RoaXMubmFtZUNvbHVtbkRldGFpbF0gJiYgcm93W3RoaXMubmFtZUNvbHVtbkRldGFpbF0ubGVuZ3RoO1xuICB9XG5cbiAgZXhlY3V0ZVRhYmxlQWN0aW9uKHJvdzogYW55LCB0YWJsZUFjdGlvbjogYW55KSB7XG4gICAgaWYgKCFyb3cuZGlzYWJsZWQgJiYgIXRoaXMudmFsaWRhdGVUYWJsZUFjdGlvbihyb3csIHRhYmxlQWN0aW9uKSkge1xuICAgICAgdGFibGVBY3Rpb24uYWN0aW9uKHJvdyk7XG4gICAgICB0aGlzLnRvZ2dsZVJvd0FjdGlvbihyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNtYXJjYSB1bWEgbGluaGEgcXVlIGVzdMOhIHNlbGVjaW9uYWRhLlxuICAgKi9cbiAgdW5zZWxlY3RSb3dJdGVtKGl0ZW1mbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8ICgoaXRlbSkgPT4gYm9vbGVhbikpIHtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtZm4sIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLml0ZW1zLmV2ZXJ5KGl0ZW0gPT4gIWl0ZW0uJHNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY2lvbmEgdW1hIGxpbmhhIGRvICdwby10YWJsZScuXG4gICAqL1xuICBzZWxlY3RSb3dJdGVtKGl0ZW1mbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8ICgoaXRlbSkgPT4gYm9vbGVhbikpIHtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtZm4sIHRydWUpO1xuXG4gICAgaWYgKHRoaXMuaXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwZWxhIGV4Y2x1c8OjbyBkZSBpdGVucyBlbSBsb3RlLlxuICAgKiBDYXNvIGEgdGFiZWxhIGVzdGVqYSBleGVjdXRhbmRvIGEgcHJvcHJpZWRhZGUgYHAtc2VydmljZS1kZWxldGVgLCBzZXLDoSBuZWNlc3PDoXJpbyBleGNsdWlyIDEgaXRlbSBwb3IgdmV6LlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBgcC1zZXJ2aWNlLWRlbGV0ZWAgbWFzIHNlbSBhIHByb3ByaWVkYWRlIGBwLXNlcnZpY2UtYXBpYCwgc2Vyw6EgcmVzcG9uc2FiaWxpZGFkZSBkbyB1c3XDoXJpbyBvIHRyYXRhbWVudG9cbiAgICogYXDDs3MgYSByZXF1aXNpw6fDo28gREVMRVRFIHNlciBleGVjdXRhZGEuXG4gICAqXG4gICAqIENhc28gYSB0YWJlbGEgdXRpbGl6ZSBgcC1oZWlnaHRgIGUgZXN0ZWphIHNlbSBzZXJ2acOnbywgw6kgbmVjZXNzw6FyaW8gYSByZWF0cmlidWnDp8OjbyBkb3MgaXRlbnMgdXRpbGl6YW5kbyBvIGV2ZW50byBgKHAtZGVsZXRlLWl0ZW1zKWAsIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICo8cG8tdGFibGVcbiAgICogIChwLWRlbGV0ZS1pdGVtcyk9XCJpdGVtcyA9ICRldmVudFwiXG4gICAqID5cbiAgICo8L3BvLXRhYmxlPlxuICAgKiBgYGBcbiAgICovXG4gIGRlbGV0ZUl0ZW1zKCkge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgIGNvbnN0IG5ld0l0ZW1zRmlsdGVyZWQgPSBbLi4ubmV3SXRlbXNdLmZpbHRlcihpdGVtID0+ICFpdGVtLiRzZWxlY3RlZCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZURlbGV0ZUFwaSkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtc0xvY2FsKG5ld0l0ZW1zLCBuZXdJdGVtc0ZpbHRlcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVJdGVtc1NlcnZpY2UobmV3SXRlbXNGaWx0ZXJlZCk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnksIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gIH1cblxuICBnZXRDZWxsRGF0YShyb3c6IGFueSwgY29sdW1uOiBQb1RhYmxlQ29sdW1uKTogYW55IHtcbiAgICBjb25zdCBhcnJheVByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgaWYgKGFycmF5UHJvcGVydHkubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbmVzdGVkUHJvcGVydGllcyA9IGFycmF5UHJvcGVydHk7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9IHJvdztcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgbmVzdGVkUHJvcGVydGllcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BlcnR5XSB8fCB2YWx1ZVtwcm9wZXJ0eV0gPT09IDAgPyB2YWx1ZVtwcm9wZXJ0eV0gOiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4ucHJvcGVydHldO1xuICAgIH1cbiAgfVxuXG4gIGdldEJvb2xlYW5MYWJlbChyb3dWYWx1ZTogYW55LCBjb2x1bW5Cb29sZWFuOiBQb1RhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAocm93VmFsdWUgfHwgcm93VmFsdWUgPT09IGZhbHNlIHx8IHJvd1ZhbHVlID09PSAwKSB7XG4gICAgICByb3dWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xlYW4ocm93VmFsdWUpO1xuXG4gICAgICBpZiAoY29sdW1uQm9vbGVhbi5ib29sZWFuKSB7XG4gICAgICAgIHJldHVybiByb3dWYWx1ZSA/IGNvbHVtbkJvb2xlYW4uYm9vbGVhbi50cnVlTGFiZWwgfHwgJ1NpbScgOiBjb2x1bW5Cb29sZWFuLmJvb2xlYW4uZmFsc2VMYWJlbCB8fCAnTsOjbyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcm93VmFsdWUgPyAnU2ltJyA6ICdOw6NvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm93VmFsdWU7XG4gIH1cblxuICBnZXRDb2x1bW5JY29ucyhyb3c6IGFueSwgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgY29uc3Qgcm93SWNvbnMgPSB0aGlzLmdldENlbGxEYXRhKHJvdywgY29sdW1uKTtcblxuICAgIGlmIChjb2x1bW4uaWNvbnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0ljb25zKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZUN1c3RvbUljb25zKHJvd0ljb25zLCBjb2x1bW4uaWNvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEN1c3RvbUljb24ocm93SWNvbnMsIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd0ljb25zO1xuICB9XG5cbiAgZ2V0Q29sdW1uTGFiZWwocm93OiBhbnksIGNvbHVtbkxhYmVsOiBQb1RhYmxlQ29sdW1uKTogUG9UYWJsZUNvbHVtbkxhYmVsIHtcbiAgICByZXR1cm4gY29sdW1uTGFiZWwubGFiZWxzLmZpbmQobGFiZWxJdGVtID0+IHRoaXMuZ2V0Q2VsbERhdGEocm93LCBjb2x1bW5MYWJlbCkgPT09IGxhYmVsSXRlbS52YWx1ZSk7XG4gIH1cblxuICBnZXRTdWJ0aXRsZUNvbHVtbihyb3c6IGFueSwgc3VidGl0bGVDb2x1bW46IFBvVGFibGVDb2x1bW4pOiBQb1RhYmxlU3VidGl0bGVDb2x1bW4ge1xuICAgIHJldHVybiBzdWJ0aXRsZUNvbHVtbi5zdWJ0aXRsZXMuZmluZChzdWJ0aXRsZUl0ZW0gPT4gdGhpcy5nZXRDZWxsRGF0YShyb3csIHN1YnRpdGxlQ29sdW1uKSA9PT0gc3VidGl0bGVJdGVtLnZhbHVlKTtcbiAgfVxuXG4gIGlzU2hvd01hc3RlckRldGFpbChyb3cpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaGlkZURldGFpbCAmJlxuICAgICAgdGhpcy5uYW1lQ29sdW1uRGV0YWlsICYmXG4gICAgICByb3cuJHNob3dEZXRhaWwgJiZcbiAgICAgIHRoaXMuY29udGFpbnNNYXN0ZXJEZXRhaWwocm93KSAmJlxuICAgICAgIXRoaXMuaGFzUm93VGVtcGxhdGVcbiAgICApO1xuICB9XG5cbiAgaXNTaG93Um93VGVtcGxhdGUocm93LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudGFibGVSb3dUZW1wbGF0ZSAmJiB0aGlzLnRhYmxlUm93VGVtcGxhdGUucG9UYWJsZVJvd1RlbXBsYXRlU2hvdykge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVSb3dUZW1wbGF0ZS5wb1RhYmxlUm93VGVtcGxhdGVTaG93KHJvdywgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25DbGlja0xpbmsoZXZlbnQsIHJvdywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZVZpc2libGVDb2x1bW5zKGNvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmNoYW5nZVZpc2libGVDb2x1bW5zLmVtaXQoY29sdW1ucyk7XG4gIH1cblxuICBvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKHZhbHVlOiBBcnJheTxTdHJpbmc+KSB7XG4gICAgdGhpcy5jb2x1bW5SZXN0b3JlTWFuYWdlci5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uVmlzaWJsZUNvbHVtbnNDaGFuZ2UoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9vbHRpcE1vdXNlRW50ZXIoZXZlbnQ6IGFueSwgY29sdW1uPzogUG9UYWJsZUNvbHVtbiwgcm93PzogYW55KSB7XG4gICAgdGhpcy50b29sdGlwVGV4dCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPCBldmVudC50YXJnZXQuc2Nyb2xsV2lkdGggJiYgZXZlbnQudGFyZ2V0LmlubmVyVGV4dC50cmltKCkpIHtcbiAgICAgIHJldHVybiAodGhpcy50b29sdGlwVGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQpO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2hlY2tpbmdJZkNvbHVtbkhhc1Rvb2x0aXAoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHRvb2x0aXBNb3VzZUxlYXZlKCkge1xuICAgIHRoaXMudG9vbHRpcFRleHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0b2dnbGVQb3B1cChyb3csIHRhcmdldFJlZikge1xuICAgIHRoaXMucG9wdXBUYXJnZXQgPSB0YXJnZXRSZWY7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnBvUG9wdXBDb21wb25lbnQudG9nZ2xlKHJvdyk7XG4gIH1cblxuICB0cmFja0J5KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB2YWxpZGF0ZVRhYmxlQWN0aW9uKHJvdzogYW55LCB0YWJsZUFjdGlvbjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZUFjdGlvbi5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRhYmxlQWN0aW9uLmRpc2FibGVkKHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0YWJsZUFjdGlvbi5kaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5Db2x1bW5NYW5hZ2VyKCkge1xuICAgIHRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgPSBbLi4udGhpcy5jb2x1bW5zXTtcbiAgfVxuXG4gIG9uRmlsdGVyZWRJdGVtc0NoYW5nZShpdGVtczogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgdGhpcy5zb3J0QXJyYXkodGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHksIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZywgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgcmVtb3ZlIHVtIGl0ZW0gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAcGFyYW0geyBudW1iZXIgfCB7IGtleTogdmFsdWUgfSB9IGl0ZW0gw41uZGljZSBkYSBsaW5oYSBvdSBvIGl0ZW0gcXVlIHNlcsOhIHJlbW92aWRvLlxuICAgKiA+IEFvIHJlbW92ZXIgbyBpdGVtLCBhIGxpbmhhIHF1ZSBvIHJlcHJlc2VudGEgc2Vyw6EgZXhjbHXDrWRhIGRhIHRhYmVsYS5cbiAgICovXG4gIHJlbW92ZUl0ZW0oaXRlbTogbnVtYmVyIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoZmlsdGVySXRlbSA9PiBmaWx0ZXJJdGVtICE9PSBpdGVtKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGl0ZW07XG4gICAgICB0aGlzLml0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcXVlIGF0dWFsaXphIHVtIGl0ZW0gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAcGFyYW0geyBudW1iZXIgfCB7IGtleTogdmFsdWUgfSB9IGl0ZW0gw41uZGljZSBkYSBsaW5oYSBvdSBvIGl0ZW0gcXVlIHNlcsOhIGF0dWFsaXphZG8uXG4gICAqIEBwYXJhbSB7IHsga2V5OiB2YWx1ZSB9IH0gdXBkYXRlZEl0ZW0gSXRlbSBxdWUgZm9pIGF0dWFsaXphZG8uXG4gICAqID4gQW8gYXR1YWxpemFyIG8gaXRlbSwgYSBpbmZvcm1hw6fDo28gc2Vyw6EgYWx0ZXJhZGEgbmEgdGFiZWxhLlxuICAgKi9cbiAgdXBkYXRlSXRlbShpdGVtOiBudW1iZXIgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCB1cGRhdGVkSXRlbTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGl0ZW0sIDEsIHVwZGF0ZWRJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpbmRleEl0ZW0gPT4gaW5kZXhJdGVtID09PSBpdGVtKTtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluZGV4LCAxLCB1cGRhdGVkSXRlbSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8QXJyYXk8c3RyaW5nPj4pIHtcbiAgICBpZiAoIXRoaXMubWFpbkNvbHVtbnNbZXZlbnQuY3VycmVudEluZGV4XS5maXhlZCkge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubWFpbkNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG5cbiAgICAgIGlmICh0aGlzLmhpZGVDb2x1bW5zTWFuYWdlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5uZXdPcmRlckNvbHVtbnMgPSB0aGlzLm1haW5Db2x1bW5zO1xuICAgICAgICBjb25zdCBkZXRhaWwgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eSA9PT0gJ2RldGFpbCcpWzBdO1xuXG4gICAgICAgIGlmIChkZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubmV3T3JkZXJDb2x1bW5zLnB1c2goZGV0YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV3T3JkZXJDb2x1bW5zLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5uZXdPcmRlckNvbHVtbnM7XG5cbiAgICAgICAgdGhpcy5vblZpc2libGVDb2x1bW5zQ2hhbmdlKHRoaXMubmV3T3JkZXJDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGVtcGxhdGUoY29sdW1uOiBQb1RhYmxlQ29sdW1uKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgY29uc3QgdGVtcGxhdGU6IFBvVGFibGVDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSA9IHRoaXMudGFibGVDb2x1bW5UZW1wbGF0ZXMuZmluZChcbiAgICAgIHRhYmxlQ29sdW1uVGVtcGxhdGUgPT4gdGFibGVDb2x1bW5UZW1wbGF0ZS50YXJnZXRQcm9wZXJ0eSA9PT0gY29sdW1uLnByb3BlcnR5XG4gICAgKTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBOw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIG8gdGVtcGxhdGUgcGFyYSBhIGNvbHVuYTogJHtjb2x1bW4ucHJvcGVydHl9LCBwb3IgZ2VudGlsZXphIGluZm9ybWUgYSBwcm9wcmllZGFkZSBbcC1wcm9wZXJ0eV1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXaWR0aENvbHVtbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aEFjdGlvbnNMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkFjdGlvbkxlZnQ/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwdWJsaWMgaGFzU29tZUZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZml4ZWQgPT09IHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKGhlaWdodCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChoZWlnaHQpO1xuICAgIHRoaXMuaGVpZ2h0VGFibGVDb250YWluZXIgPSB2YWx1ZSA/IHZhbHVlIC0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVpZ2h0VGFibGVWaXJ0dWFsID0gdGhpcy5oZWlnaHRUYWJsZUNvbnRhaW5lciA/IHRoaXMuaGVpZ2h0VGFibGVDb250YWluZXIgLSB0aGlzLml0ZW1TaXplIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2V0VGFibGVPcGFjaXR5KDEpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZlcmlmeUNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKCkge1xuICAgIGlmICh0aGlzLmhlaWdodCAmJiB0aGlzLnZlcmlmeUNoYW5nZUhlaWdodEluRm9vdGVyKCkpIHtcbiAgICAgIHRoaXMuZm9vdGVySGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpO1xuXG4gICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNJbmZpbml0ZVNjcm9sbCgpKSB7XG4gICAgICBpZiAodGhpcy50YWJsZVZpcnR1YWxTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPj0gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlSW5maW5pdGVTY3JvbGwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZXNBZnRlckRlbGV0ZShuZXdJdGVtc0ZpbHRlcmVkOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB0aGlzLnNldFNlbGVjdGVkTGlzdCgpO1xuICAgIHRoaXMubW9kYWxEZWxldGUuY2xvc2UoKTtcbiAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3ModGhpcy5saXRlcmFscy5kZWxldGVTdWNjZXNzZnVsKTtcbiAgICB0aGlzLmV2ZW50RGVsZXRlLmVtaXQobmV3SXRlbXNGaWx0ZXJlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlU2l6ZUxvYWRpbmcoKSB7XG4gICAgY29uc3QgdGFibGVIZWlnaHQgPSB0aGlzLnRhYmxlV3JhcHBlckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodDtcblxuICAgIGlmICh0YWJsZUhlaWdodCA8PSAxNTApIHtcbiAgICAgIHRoaXMuc2l6ZUxvYWRpbmcgPSAnc20nO1xuICAgIH0gZWxzZSBpZiAodGFibGVIZWlnaHQgPiAxNTAgJiYgdGFibGVIZWlnaHQgPCAyNjApIHtcbiAgICAgIHRoaXMuc2l6ZUxvYWRpbmcgPSAnbWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNpemVMb2FkaW5nID0gJ2xnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQ2hhbmdlc0l0ZW1zKCkge1xuICAgIGNvbnN0IGNoYW5nZXNJdGVtcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5pdGVtcyk7XG5cbiAgICBpZiAoY2hhbmdlc0l0ZW1zICYmIHRoaXMuc2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNJdGVtcyAmJiAhdGhpcy5oYXNDb2x1bW5zICYmIHRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja2luZ0lmQ29sdW1uSGFzVG9vbHRpcChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGNvbHVtbi50b29sdGlwICYmICF0aGlzLmNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gKHRoaXMudG9vbHRpcFRleHQgPSBjb2x1bW4udG9vbHRpcCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICBjb25zdCBjb2x1bW5MYWJlbCA9IHRoaXMuZ2V0Q29sdW1uTGFiZWwocm93LCBjb2x1bW4pO1xuICAgICAgcmV0dXJuICh0aGlzLnRvb2x0aXBUZXh0ID0gY29sdW1uTGFiZWw/LnRvb2x0aXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2VSZXNpemUoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlc2l6ZSk7XG4gICAgdGhpcy50aW1lb3V0UmVzaXplID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzaG93IHRoZSB0YWJsZVxuICAgICAgdGhpcy5zZXRUYWJsZU9wYWNpdHkoMSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUl0ZW1zTG9jYWwobmV3SXRlbXM6IEFycmF5PGFueT4sIG5ld0l0ZW1zRmlsdGVyZWQ6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtc0ZpbHRlcmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICBuZXdJdGVtc1xuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChpdGVtLiRzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlc0FmdGVyRGVsZXRlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICAgIHRoaXMub25GaWx0ZXJlZEl0ZW1zQ2hhbmdlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVJdGVtc1NlcnZpY2UobmV3SXRlbXNGaWx0ZXJlZDogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5hZGQoXG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmRlbGV0ZUl0ZW0odGhpcy5wYXJhbURlbGV0ZUFwaSwgdGhpcy5pdGVtc1NlbGVjdGVkWzBdW3RoaXMucGFyYW1EZWxldGVBcGldKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzU2VydmljZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMucGFyYW1zRmlsdGVyLFxuICAgICAgICAgICAgICBwYWdlU2l6ZTogbmV3SXRlbXNGaWx0ZXJlZC5sZW5ndGggKyAxLFxuICAgICAgICAgICAgICBwYWdlOiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5hZGQoXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcykuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUmVzcG9uc2VQcm9wZXJ0aWVzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtc0ZpbHRlcmVkO1xuICAgICAgICAgIHRoaXMuY2hhbmdlc0FmdGVyRGVsZXRlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IodGhpcy5saXRlcmFscy5kZWxldGVBcGlFcnJvcik7XG4gICAgICAgICAgdGhpcy5tb2RhbERlbGV0ZS5jbG9zZSgpO1xuICAgICAgICAgIHRoaXMuZXZlbnREZWxldGUuZW1pdCh0aGlzLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ3VzdG9tSWNvbihyb3dJY29ucywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgY29uc3QgY3VzdG9tSWNvbiA9IGNvbHVtbi5pY29ucy5maW5kKGljb24gPT4gcm93SWNvbnMgPT09IGljb24udmFsdWUpO1xuICAgIHJldHVybiBjdXN0b21JY29uID8gW2N1c3RvbUljb25dIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWlnaHRUYWJsZUZvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZvb3RlckVsZW1lbnQgPyB0aGlzLnRhYmxlRm9vdGVyRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IDA7XG4gIH1cblxuICBwcml2YXRlIGhhc0luZmluaXRlU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsICYmXG4gICAgICB0aGlzLmhhc0l0ZW1zICYmXG4gICAgICAhdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudCAmJlxuICAgICAgdGhpcy5oZWlnaHQgJiZcbiAgICAgIHRoaXMudGFibGVWaXJ0dWFsU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZUluZmluaXRlU2Nyb2xsKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsRXZlbnQkID0gdGhpcy5kZWZhdWx0U2VydmljZS5zY3JvbGxMaXN0ZW5lcih0aGlzLnRhYmxlVmlydHVhbFNjcm9sbC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50ID0gdGhpcy5zY3JvbGxFdmVudCQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2hvd01vcmVJbmZpbml0ZVNjcm9sbChldmVudCkpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ3VzdG9tSWNvbnMocm93SWNvbnM6IEFycmF5PHN0cmluZz4sIGN1c3RvbUljb25zOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3QgbWVyZ2VkSWNvbnMgPSBbXTtcblxuICAgIHJvd0ljb25zLmZvckVhY2goY29sdW1uVmFsdWUgPT4ge1xuICAgICAgY29uc3QgZm91bmRDdXN0b21JY29uID0gY3VzdG9tSWNvbnMuZmluZChcbiAgICAgICAgY3VzdG9tSWNvbiA9PiBjb2x1bW5WYWx1ZSA9PT0gY3VzdG9tSWNvbi5pY29uIHx8IGNvbHVtblZhbHVlID09PSBjdXN0b21JY29uLnZhbHVlXG4gICAgICApO1xuICAgICAgZm91bmRDdXN0b21JY29uID8gbWVyZ2VkSWNvbnMucHVzaChmb3VuZEN1c3RvbUljb24pIDogbWVyZ2VkSWNvbnMucHVzaChjb2x1bW5WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVyZ2VkSWNvbnM7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJsZU9wYWNpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGFibGVPcGFjaXR5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNoYW5nZUhlaWdodEluRm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLmZvb3RlckhlaWdodCAhPT0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVTZWxlY3QoY29tcGFyZSwgc2VsZWN0VmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIGNvbXBhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IGNvbXBhcmUpIHtcbiAgICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IHNlbGVjdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoY29tcGFyZShpdGVtKSkge1xuICAgICAgICAgIGl0ZW0uJHNlbGVjdGVkID0gc2VsZWN0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBvLXRhYmxlLWFjdGlvbnNcIj5cbiAgPGRpdlxuICAgICNjb2x1bW5CYXRjaEFjdGlvbnNcbiAgICAqbmdJZj1cImhhc1ZhbGlkQ29sdW1ucyAmJiBpdGVtc1NlbGVjdGVkLmxlbmd0aCA+IDAgJiYgIWhpZGVCYXRjaEFjdGlvbnNcIlxuICAgIGNsYXNzPVwicG8tdGFibGUtYWN0aW9ucy1iYXRjaC1hY3Rpb25zXCJcbiAgPlxuICAgIDxkaXYgW25nUGx1cmFsXT1cIml0ZW1zU2VsZWN0ZWQubGVuZ3RoXCIgY2xhc3M9XCJwby10YWJsZS1hY3Rpb25zLWJhdGNoLWFjdGlvbnNfX2xhYmVsXCI+XG4gICAgICA8c3Ryb25nPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiPTBcIj57eyBsaXRlcmFscy5ub0l0ZW0gfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiPTFcIj57eyBsaXRlcmFscy5vbmVJdGVtIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIm90aGVyXCI+e3sgaXRlbXNTZWxlY3RlZC5sZW5ndGggfX0ge3sgbGl0ZXJhbHMubXVsdGlwbGVJdGVtcyB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby10YWJsZS1hY3Rpb25zLWJhdGNoLWFjdGlvbnNfX2J1dHRvbnNcIj5cbiAgICAgIDxwby1idXR0b25cbiAgICAgICAgcC1pY29uPVwicG8taWNvbi1kZWxldGVcIlxuICAgICAgICBbcC1kYW5nZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtwLWRpc2FibGVkXT1cIml0ZW1zU2VsZWN0ZWQubGVuZ3RoID4gMSAmJiBzZXJ2aWNlRGVsZXRlQXBpICE9PSB1bmRlZmluZWRcIlxuICAgICAgICBbcC1sYWJlbF09XCJsaXRlcmFscy5kZWxldGVcIlxuICAgICAgICAocC1jbGljayk9XCJtb2RhbERlbGV0ZS5vcGVuKClcIlxuICAgICAgPjwvcG8tYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNjb2x1bW5NYW5hZ2VyICpuZ0lmPVwiaGFzVmFsaWRDb2x1bW5zICYmICFoaWRlQ29sdW1uc01hbmFnZXJcIiBjbGFzcz1cInBvLXRhYmxlLWFjdGlvbnMtY29sdW1uLW1hbmFnZXJcIj5cbiAgICA8cG8tYnV0dG9uXG4gICAgICAjY29sdW1uTWFuYWdlclRhcmdldFxuICAgICAgcC1pY29uPVwicG8taWNvbi1zZXR0aW5nc1wiXG4gICAgICBwLWtpbmQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICBwLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgIFtwLWFyaWEtbGFiZWxdPVwibGl0ZXJhbHMuY29sdW1uc01hbmFnZXJcIlxuICAgICAgW3AtdG9vbHRpcF09XCJsaXRlcmFscy5jb2x1bW5zTWFuYWdlclwiXG4gICAgICAocC1jbGljayk9XCJvbk9wZW5Db2x1bW5NYW5hZ2VyKClcIlxuICAgID48L3BvLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIiFoaWRlVGFibGVTZWFyY2ggJiYgaGFzVmFsaWRDb2x1bW5zXCIgY2xhc3M9XCJwby10YWJsZS1zZWFyY2hcIj5cbiAgICA8cG8tc2VhcmNoXG4gICAgICBbcC1pdGVtc109XCJpdGVtc1wiXG4gICAgICBbcC1maWx0ZXIta2V5c109XCJmaWx0ZXJlZENvbHVtbnNcIlxuICAgICAgW3AtZmlsdGVyLXR5cGVdPVwiZmlsdGVyVHlwZVwiXG4gICAgICAocC1maWx0ZXJlZC1pdGVtcy1jaGFuZ2UpPVwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3BvLXNlYXJjaD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxwby1jb250YWluZXIgKm5nSWY9XCJjb250YWluZXI7IGVsc2UgdGFibGVDb250YWluZXJUZW1wbGF0ZVwiIHAtbm8tcGFkZGluZz5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ29udGFpbmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvcG8tY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlQ29udGFpbmVyVGVtcGxhdGU+XG4gIDxkaXYgW2NsYXNzLnBvLXRhYmxlLWNvbnRhaW5lci1zdGlja3ldPVwibG9hZGluZ1wiPlxuICAgIDxwby1sb2FkaW5nLW92ZXJsYXkgKm5nSWY9XCJsb2FkaW5nXCIgW3AtdGV4dF09XCJsaXRlcmFscy5sb2FkaW5nRGF0YVwiIFtwLXNpemVdPVwic2l6ZUxvYWRpbmdcIj48L3BvLWxvYWRpbmctb3ZlcmxheT5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtbWFpbi1jb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI3RhYmxlV3JhcHBlclxuICAgICAgICBjbGFzcz1cInBvLXRhYmxlLXdyYXBwZXJcIlxuICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZpeGVkLWNvbHVtbnMtcGl4ZWxzXT1cImFsbENvbHVtbnNXaWR0aFBpeGVsc1wiXG4gICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cInRhYmxlT3BhY2l0eVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJoZWlnaHRcIiBjbGFzcz1cInBvLXRhYmxlLWNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0VGFibGVDb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2ICNwb1RhYmxlVGJvZHkgY2xhc3M9XCJwby10YWJsZS1jb250YWluZXItZml4ZWQtaW5uZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVZpcnR1YWxTY3JvbGxUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhlaWdodFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1mb290ZXJcIiAqbmdJZj1cImhhc0Zvb3RlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzdWJ0aXRsZUNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICAgIDxwby10YWJsZS1zdWJ0aXRsZS1mb290ZXIgW3AtbGl0ZXJhbHNdPVwibGl0ZXJhbHNcIiBbcC1zdWJ0aXRsZXNdPVwiY29sdW1uLnN1YnRpdGxlc1wiPiA8L3BvLXRhYmxlLXN1YnRpdGxlLWZvb3Rlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNob3cgTW9yZSBCdXR0b24gLS0+XG48ZGl2XG4gICpuZ0lmPVwiIWluZmluaXRlU2Nyb2xsXCJcbiAgY2xhc3M9XCJwby1yb3cgcG8tdGFibGUtZm9vdGVyLXNob3ctbW9yZVwiXG4gIFtjbGFzcy5wby1pbnZpc2libGVdPVwic2hvd01vcmUub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCAmJiAhaGFzU2VydmljZVwiXG4gICN0YWJsZUZvb3RlclxuPlxuICA8cG8tYnV0dG9uXG4gICAgY2xhc3M9XCJwby1vZmZzZXQteGwtNCBwby1vZmZzZXQtbGctNCBwby1vZmZzZXQtbWQtMyBwby1sZy00IHBvLW1kLTZcIlxuICAgIFtwLWRpc2FibGVkXT1cInNob3dNb3JlRGlzYWJsZWRcIlxuICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLmxvYWRNb3JlRGF0YVwiXG4gICAgW3AtbG9hZGluZ109XCJsb2FkaW5nU2hvd01vcmVcIlxuICAgIChwLWNsaWNrKT1cIm9uU2hvd01vcmUoKVwiXG4gID5cbiAgPC9wby1idXR0b24+XG48L2Rpdj5cblxuPCEtLSBUYWJsZSBkZWZhdWx0LS0+XG48bmctdGVtcGxhdGUgI3RhYmxlVGVtcGxhdGU+XG4gIDx0YWJsZVxuICAgIGNsYXNzPVwicG8tdGFibGVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdwby10YWJsZS1pbnRlcmFjdGl2ZSc6IHNlbGVjdGFibGUgfHwgc29ydCxcbiAgICAgICdwby10YWJsZS1zZWxlY3RhYmxlJzogc2VsZWN0YWJsZSxcbiAgICAgICdwby10YWJsZS1zdHJpcGVkJzogc3RyaXBlZCxcbiAgICAgICdwby10YWJsZS1kYXRhLWZpeGVkLWNvbHVtbnMnOiBhcHBseUZpeGVkQ29sdW1ucygpXG4gICAgfVwiXG4gICAgW2F0dHIucC1zcGFjaW5nXT1cInNwYWNpbmdcIlxuICA+XG4gICAgPHRoZWFkPlxuICAgICAgPHRyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ25vLWhvdmVyJzogaGlkZVNlbGVjdEFsbCwgJ3BvLXRhYmxlLWNvbHVtbi1kcmFnJzogdGhpcy5pc0RyYWdnYWJsZSB9XCJcbiAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlcl09XCIhaGVpZ2h0XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiaGFzU2VsZWN0YWJsZUNvbHVtblwiXG4gICAgICAgICAgW3N0eWxlLnBvaW50ZXItZXZlbnRzXT1cImhpZGVTZWxlY3RBbGwgPyAnbm9uZScgOiAnYXV0bydcIlxuICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLXNlbGVjdGFibGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZpeGVkLWlubmVyXT1cImhlaWdodFwiPlxuICAgICAgICAgICAgPHBvLWNoZWNrYm94XG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU2VsZWN0QWxsXCJcbiAgICAgICAgICAgICAgKHAtY2hhbmdlKT1cInNlbGVjdEFsbFJvd3MoKVwiXG4gICAgICAgICAgICAgIFtwLWNoZWNrYm94VmFsdWVdPVwic2VsZWN0QWxsID09PSBudWxsID8gJ21peGVkJyA6IHNlbGVjdEFsbFwiXG4gICAgICAgICAgICA+PC9wby1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cIihoYXNNYXN0ZXJEZXRhaWxDb2x1bW4gfHwgaGFzUm93VGVtcGxhdGUpICYmICFoYXNSb3dUZW1wbGF0ZVdpdGhBcnJvd0RpcmVjdGlvblJpZ2h0XCJcbiAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICA+PC90aD5cblxuICAgICAgICA8IS0tIENvbHVuYSBjcmlhZGEgcGFyYSBjYXNvIGFzIGHDp8O1ZXMgZmlxdWVtIG5vIGxhZG8gZXNxdWVyZG8gLS0+XG4gICAgICAgIDx0aFxuICAgICAgICAgICNjb2x1bW5BY3Rpb25MZWZ0XG4gICAgICAgICAgKm5nSWY9XCIhYWN0aW9uUmlnaHQgJiYgKHZpc2libGVBY3Rpb25zLmxlbmd0aCA+IDEgfHwgaXNTaW5nbGVBY3Rpb24pXCJcbiAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxdPVwiIWlzU2luZ2xlQWN0aW9uXCJcbiAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXNpbmdsZS1hY3Rpb25dPVwiaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICA+PC90aD5cblxuICAgICAgICA8dGggKm5nSWY9XCIhaGFzTWFpbkNvbHVtbnNcIiAjbm9Db2x1bW5zSGVhZGVyIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWNvbHVtbiBwby10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWlnaHQ7IHRoZW4gbm9Db2x1bW5zV2l0aEhlaWdodDsgZWxzZSBub0NvbHVtbnNXaXRob3V0SGVpZ2h0XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cInRoaXMuaXNEcmFnZ2FibGUgfHwgaGFzU29tZUZpeGVkKCk7IHRoZW4gdGFibGVEZWZhdWx0VGhEcmFnRHJvcDsgZWxzZSB0YWJsZURlZmF1bHRUaERlZmF1bHRcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RhYmxlRGVmYXVsdFRoRHJhZ0Ryb3A+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG1haW5Db2x1bW5zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWVsbGlwc2lzIHAtZWxlbWVudCBwby1mcm96ZW4tY29sdW1uXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wby10YWJsZS1jb2x1bW4tbmFtZV09XCJjb2x1bW4ubGFiZWwgfHwgKGNvbHVtbi5wcm9wZXJ0eSB8IHRpdGxlY2FzZSkgfCBsb3dlcmNhc2VcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWNsaWNrYWJsZV09XCIoc29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB8fCBoYXNTZXJ2aWNlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3BvLXRhYmxlLWhlYWRlci1zb3J0ZWQnOlxuICAgICAgICAgICAgICAgIHNvcnQgJiZcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJlxuICAgICAgICAgICAgICAgIChzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nIHx8ICFzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXN1YnRpdGxlXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tZHJhZy1ib3hdPVwidGhpcy5pc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJjb2x1bW4uZml4ZWQgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgIFtwRnJvemVuQ29sdW1uXT1cImNvbHVtbi5maXhlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1mbGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1maXhlZC1pbm5lcl09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1mbGV4LWNlbnRlcl09XCJjb2x1bW4udHlwZSA9PT0gJ3N1YnRpdGxlJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLmlzRHJhZ2dhYmxlICYmICFjb2x1bW4uZml4ZWRcIj5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjZcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTVcIiBjeT1cIjZcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTVcIiBjeT1cIjEyXCIgcj1cIjJcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjlcIiBjeT1cIjE4XCIgcj1cIjJcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCIxOFwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVEZWZhdWx0VGhEZWZhdWx0PlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1lbGxpcHNpcyBwLWVsZW1lbnQgcG8tZnJvemVuLWNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcG8tdGFibGUtY29sdW1uLW5hbWVdPVwiY29sdW1uLmxhYmVsIHx8IChjb2x1bW4ucHJvcGVydHkgfCB0aXRsZWNhc2UpIHwgbG93ZXJjYXNlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiKHNvcnQgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgfHwgaGFzU2VydmljZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdwby10YWJsZS1oZWFkZXItc29ydGVkJzpcbiAgICAgICAgICAgICAgICBzb3J0ICYmXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc29ydGVkQ29sdW1uPy5wcm9wZXJ0eSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbHVtbikgJiZcbiAgICAgICAgICAgICAgICAoc29ydGVkQ29sdW1uLmFzY2VuZGluZyB8fCAhc29ydGVkQ29sdW1uLmFzY2VuZGluZylcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1zdWJ0aXRsZV09XCJjb2x1bW4udHlwZSA9PT0gJ3N1YnRpdGxlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgIFtwRnJvemVuQ29sdW1uXT1cImNvbHVtbi5maXhlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1mbGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1maXhlZC1pbm5lcl09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1mbGV4LWNlbnRlcl09XCJjb2x1bW4udHlwZSA9PT0gJ3N1YnRpdGxlJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCJoYXNSb3dUZW1wbGF0ZVdpdGhBcnJvd0RpcmVjdGlvblJpZ2h0ICYmIChoYXNWaXNpYmxlQWN0aW9ucyB8fCBoaWRlQ29sdW1uc01hbmFnZXIpXCJcbiAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICA+PC90aD5cblxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cImhhc1Zpc2libGVBY3Rpb25zICYmIGFjdGlvblJpZ2h0ICYmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxIHx8IGlzU2luZ2xlQWN0aW9uKVwiXG4gICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1zaW5nbGUtYWN0aW9uXT1cImlzU2luZ2xlQWN0aW9uXCJcbiAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWFjdGlvbnNdPVwiIWlzU2luZ2xlQWN0aW9uXCJcbiAgICAgICAgPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHkgY2xhc3M9XCJwby10YWJsZS1ncm91cC1yb3dcIiAqbmdJZj1cIiFoYXNJdGVtcyB8fCAhaGFzTWFpbkNvbHVtbnNcIj5cbiAgICAgIDx0ciBjbGFzcz1cInBvLXRhYmxlLXJvdyBwby10YWJsZS1yb3ctbm8tZGF0YVwiPlxuICAgICAgICA8dGQgW2NvbFNwYW5dPVwiY29sdW1uQ291bnRcIiBjbGFzcz1cInBvLXRhYmxlLW5vLWRhdGEgcG8tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8c3Bhbj4ge3sgbGl0ZXJhbHMubm9EYXRhIH19IDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNNYWluQ29sdW1uc1wiPlxuICAgICAgPHRib2R5IGNsYXNzPVwicG8tdGFibGUtZ3JvdXAtcm93XCIgKm5nRm9yPVwibGV0IHJvdyBvZiBmaWx0ZXJlZEl0ZW1zOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJwby10YWJsZS1yb3dcIiBbY2xhc3MucG8tdGFibGUtcm93LWFjdGl2ZV09XCJyb3cuJHNlbGVjdGVkIHx8IChyb3cuJHNlbGVjdGVkID09PSBudWxsICYmIHNlbGVjdGFibGUpXCI+XG4gICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLXNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW5nbGVTZWxlY3QgPyBpbnB1dFJhZGlvIDogaW5wdXRDaGVja2JveDsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPCEtLSBWYWxpZGEgc2UgYSBvcmlnZW0gZG8gZGV0YWlsIMOpIHBlbG8gaW5wdXQgZG8gcG8tdGFibGUgLS0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbk1hc3RlckRldGFpbCAmJiAhaGlkZURldGFpbCAmJiAhaGFzUm93VGVtcGxhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsLXRvZ2dsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDwhLS0gQ29sdW5hIGNvbSBhcyBhw6fDtWVzIG5hIGVzcXVlcmRhIChwYWRyw6NvKS0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCIhYWN0aW9uUmlnaHQgJiYgKHZpc2libGVBY3Rpb25zLmxlbmd0aCA+IDEgfHwgaXNTaW5nbGVBY3Rpb24pXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIkFjdGlvbnNDb2x1bW5UZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPCEtLSBWYWxpZGEgc2UgYSBvcmlnZW0gZG8gZGV0YWlsIMOpIHBlbGEgZGlyZXRpdmEgLS0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImhhc1Jvd1RlbXBsYXRlICYmICFoYXNSb3dUZW1wbGF0ZVdpdGhBcnJvd0RpcmVjdGlvblJpZ2h0XCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbChyb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicG9UYWJsZUNvbHVtbkRldGFpbFwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbWFpbkNvbHVtbnM7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbl09XCJjb2x1bW4udHlwZSAhPT0gJ2ljb24nXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tY2VudGVyXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4taWNvbnNdPVwiY29sdW1uLnR5cGUgPT09ICdpY29uJ1wiXG4gICAgICAgICAgICBbcEZyb3plbkNvbHVtbl09XCJjb2x1bW4uZml4ZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcG8tZnJvemVuLWNvbHVtblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzc0NvbG9yKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFzU2VsZWN0YWJsZVJvdygpID8gc2VsZWN0Um93KHJvdykgOiAnamF2YXNjcmlwdDo7J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1jZWxsIHBvLXRhYmxlLWJvZHktZWxsaXBzaXMgbm90cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIlxuICAgICAgICAgICAgICBbcC10b29sdGlwXT1cInRvb2x0aXBUZXh0XCJcbiAgICAgICAgICAgICAgW3AtYXBwZW5kLWluLWJvZHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBNb3VzZUVudGVyKCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwidG9vbHRpcE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY29sdW1uVGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldFRlbXBsYXRlKGNvbHVtbik7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjZWxsVGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ2VsbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4gfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldEJvb2xlYW5MYWJlbChnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgY3VycmVuY3k6IGNvbHVtbi5mb3JtYXQgOiAnc3ltYm9sJyA6ICcxLjItMicgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfCBkYXRlOiBjb2x1bW4uZm9ybWF0IHx8ICdkZC9NTS95eXl5JyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldENlbGxEYXRhKHJvdywgY29sdW1uKSB8IHBvX3RpbWU6IGNvbHVtbi5mb3JtYXQgfHwgJ0hIOm1tOnNzLmZmZmZmZicgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgZGF0ZTogY29sdW1uLmZvcm1hdCB8fCAnZGQvTU0veXl5eSBISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdE51bWJlcihnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbi5mb3JtYXQpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8cG8tdGFibGUtY29sdW1uLWxpbmtcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCJcbiAgICAgICAgICAgICAgICBbcC1hY3Rpb25dPVwiY29sdW1uLmFjdGlvblwiXG4gICAgICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwiY2hlY2tEaXNhYmxlZChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtwLWxpbmtdPVwicm93W2NvbHVtbi5saW5rXVwiXG4gICAgICAgICAgICAgICAgW3Atcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW3AtdmFsdWVdPVwiZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0xpbmsoJGV2ZW50LCByb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcG8tdGFibGUtY29sdW1uLWxpbms+XG5cbiAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1pY29uXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiXG4gICAgICAgICAgICAgICAgW3AtY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgW3AtaWNvbnNdPVwiZ2V0Q29sdW1uSWNvbnMocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbcC1yb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3BvLXRhYmxlLWNvbHVtbi1pY29uPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInc3VidGl0bGUnXCI+XG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLXN1YnRpdGxlLWNpcmNsZSBbcC1zdWJ0aXRsZV09XCJnZXRTdWJ0aXRsZUNvbHVtbihyb3csIGNvbHVtbilcIj48L3BvLXRhYmxlLXN1YnRpdGxlLWNpcmNsZT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xhYmVsJ1wiPlxuICAgICAgICAgICAgICAgIDxwby10YWJsZS1jb2x1bW4tbGFiZWwgW3AtdmFsdWVdPVwiZ2V0Q29sdW1uTGFiZWwocm93LCBjb2x1bW4pXCI+IDwvcG8tdGFibGUtY29sdW1uLWxhYmVsPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJoYXNSb3dUZW1wbGF0ZVdpdGhBcnJvd0RpcmVjdGlvblJpZ2h0XCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbChyb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicG9UYWJsZUNvbHVtbkRldGFpbFwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8IS0tIENvbHVuYSBkZSBhw6dvZXMgbmEgZGlyZWl0YSAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uUmlnaHRcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiQWN0aW9uc0NvbHVtblRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPHRyICpuZ0lmPVwiaGFzTWFpbkNvbHVtbnMgJiYgaGFzUm93VGVtcGxhdGUgJiYgcm93LiRzaG93RGV0YWlsICYmIGlzU2hvd1Jvd1RlbXBsYXRlKHJvdywgcm93SW5kZXgpXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwicG8tdGFibGUtcm93LXRlbXBsYXRlLWNvbnRhaW5lclwiIFtjb2xTcGFuXT1cImNvbHVtbkNvdW50Rm9yTWFzdGVyRGV0YWlsXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVSb3dUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPHRyICpuZ0lmPVwiaGFzTWFpbkNvbHVtbnMgJiYgaXNTaG93TWFzdGVyRGV0YWlsKHJvdylcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsXCIgW2NvbFNwYW5dPVwiY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWxcIj5cbiAgICAgICAgICAgIDxwby10YWJsZS1kZXRhaWxcbiAgICAgICAgICAgICAgW3Atc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlICYmICFkZXRhaWxIaWRlU2VsZWN0XCJcbiAgICAgICAgICAgICAgW3AtZGV0YWlsXT1cImNvbHVtbk1hc3RlckRldGFpbC5kZXRhaWxcIlxuICAgICAgICAgICAgICBbcC1pdGVtc109XCJyb3dbbmFtZUNvbHVtbkRldGFpbF1cIlxuICAgICAgICAgICAgICAocC1zZWxlY3Qtcm93KT1cInNlbGVjdERldGFpbFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcG8tdGFibGUtZGV0YWlsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RhYmxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUYWJsZSB3aXRoIHZpcnR1YWwgc2Nyb2xsIC0tPlxuPG5nLXRlbXBsYXRlICN0YWJsZVZpcnR1YWxTY3JvbGxUZW1wbGF0ZT5cbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICN0YWJsZVZpcnR1YWxTY3JvbGxcbiAgICBbaXRlbVNpemVdPVwiaXRlbVNpemVcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0VGFibGVDb250YWluZXJcIlxuICAgIFttaW5CdWZmZXJQeF09XCJoZWlnaHRUYWJsZUNvbnRhaW5lciA8IDEwMCA/IDEwMCA6IGhlaWdodFRhYmxlQ29udGFpbmVyXCJcbiAgICBbbWF4QnVmZmVyUHhdPVwiaGVpZ2h0VGFibGVDb250YWluZXIgPCAyMDAgPyAyMDAgOiBoZWlnaHRUYWJsZUNvbnRhaW5lclwiXG4gID5cbiAgICA8dGFibGVcbiAgICAgIGNsYXNzPVwicG8tdGFibGVcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncG8tdGFibGUtaW50ZXJhY3RpdmUnOiBzZWxlY3RhYmxlIHx8IHNvcnQsXG4gICAgICAgICdwby10YWJsZS1zZWxlY3RhYmxlJzogc2VsZWN0YWJsZSxcbiAgICAgICAgJ3BvLXRhYmxlLXN0cmlwZWQnOiBzdHJpcGVkLFxuICAgICAgICAncG8tdGFibGUtZGF0YS1maXhlZC1jb2x1bW5zJzogYXBwbHlGaXhlZENvbHVtbnMoKVxuICAgICAgfVwiXG4gICAgICBbYXR0ci5wLXNwYWNpbmddPVwic3BhY2luZ1wiXG4gICAgPlxuICAgICAgPHRoZWFkIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLXN0aWNreVwiIFtzdHlsZS50b3BdPVwiaW52ZXJzZU9mVHJhbnNsYXRpb25cIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlcl09XCIhaGVpZ2h0XCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VsZWN0YWJsZUNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaGlkZVNlbGVjdEFsbCA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1zZWxlY3RhYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5wby10YWJsZS1oZWFkZXItZml4ZWQtaW5uZXJdPVwiaGVpZ2h0XCI+XG4gICAgICAgICAgICAgIDxwby1jaGVja2JveFxuICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgIChwLWNoYW5nZSk9XCJzZWxlY3RBbGxSb3dzKClcIlxuICAgICAgICAgICAgICAgIFtwLWNoZWNrYm94VmFsdWVdPVwic2VsZWN0QWxsID09PSBudWxsID8gJ21peGVkJyA6IHNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgID48L3BvLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nSWY9XCIoaGFzTWFzdGVyRGV0YWlsQ29sdW1uIHx8IGhhc1Jvd1RlbXBsYXRlKSAmJiAhaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICAgID48L3RoPlxuXG4gICAgICAgICAgPCEtLSBDb2x1bmEgY3JpYWRhIHBhcmEgY2FzbyBhcyBhw6fDtWVzIGZpcXVlbSBubyBsYWRvIGVzcXVlcmRvIC0tPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgI2NvbHVtbkFjdGlvbkxlZnRcbiAgICAgICAgICAgICpuZ0lmPVwiIWFjdGlvblJpZ2h0ICYmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxIHx8IGlzU2luZ2xlQWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxdPVwiIWlzU2luZ2xlQWN0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc2luZ2xlLWFjdGlvbl09XCJpc1NpbmdsZUFjdGlvblwiXG4gICAgICAgICAgPjwvdGg+XG5cbiAgICAgICAgICA8dGggKm5nSWY9XCIhaGFzTWFpbkNvbHVtbnNcIiAjbm9Db2x1bW5zSGVhZGVyIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWNvbHVtbiBwby10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlaWdodDsgdGhlbiBub0NvbHVtbnNXaXRoSGVpZ2h0OyBlbHNlIG5vQ29sdW1uc1dpdGhvdXRIZWlnaHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2FibGUgfHwgaGFzU29tZUZpeGVkKCk7XG4gICAgICAgICAgICAgIHRoZW4gdGFibGVWaXJ0dWFsU2Nyb2xsVGhEcmFnRHJvcDtcbiAgICAgICAgICAgICAgZWxzZSB0YWJsZVZpcnR1YWxTY3JvbGxUaERlZmF1bHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVWaXJ0dWFsU2Nyb2xsVGhEcmFnRHJvcD5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG1haW5Db2x1bW5zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZWxsaXBzaXMgcC1lbGVtZW50IHBvLWZyb3plbi1jb2x1bW5cIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtcG8tdGFibGUtY29sdW1uLW5hbWVdPVwiY29sdW1uLmxhYmVsIHx8IChjb2x1bW4ucHJvcGVydHkgfCB0aXRsZWNhc2UpIHwgbG93ZXJjYXNlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLWNsaWNrYWJsZV09XCIoc29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB8fCBoYXNTZXJ2aWNlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdwby10YWJsZS1oZWFkZXItc29ydGVkJzpcbiAgICAgICAgICAgICAgICAgIHNvcnQgJiZcbiAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNvcnRlZENvbHVtbj8ucHJvcGVydHkpID09PSBKU09OLnN0cmluZ2lmeShjb2x1bW4pICYmXG4gICAgICAgICAgICAgICAgICAoc29ydGVkQ29sdW1uLmFzY2VuZGluZyB8fCAhc29ydGVkQ29sdW1uLmFzY2VuZGluZylcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ3dpZHRoJzogIWhhc0l0ZW1zID8gJzEwMCUnIDogYXBwbHlGaXhlZENvbHVtbnMoKSA/IGNvbHVtbi53aWR0aCA6ICdhdXRvJyB9XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1zdWJ0aXRsZV09XCJjb2x1bW4udHlwZSA9PT0gJ3N1YnRpdGxlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tZHJhZy1ib3hdPVwidGhpcy5pc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbilcIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImNvbHVtbi5maXhlZCA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICBbcEZyb3plbkNvbHVtbl09XCJjb2x1bW4uZml4ZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1maXhlZC1pbm5lcl09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1yaWdodF09XCJjb2x1bW4udHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1jZW50ZXJdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuaXNEcmFnZ2FibGUgJiYgIWNvbHVtbi5maXhlZFwiPlxuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiNlwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCI2XCIgcj1cIjJcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI5XCIgY3k9XCIxOFwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCIxOFwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0YWJsZVZpcnR1YWxTY3JvbGxUaERlZmF1bHQ+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWVsbGlwc2lzIHAtZWxlbWVudCBwby1mcm96ZW4tY29sdW1uIGV4YW1wbGUtYm94XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBvLXRhYmxlLWNvbHVtbi1uYW1lXT1cImNvbHVtbi5sYWJlbCB8fCAoY29sdW1uLnByb3BlcnR5IHwgdGl0bGVjYXNlKSB8IGxvd2VyY2FzZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiKHNvcnQgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgfHwgaGFzU2VydmljZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncG8tdGFibGUtaGVhZGVyLXNvcnRlZCc6XG4gICAgICAgICAgICAgICAgICBzb3J0ICYmXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJlxuICAgICAgICAgICAgICAgICAgKHNvcnRlZENvbHVtbi5hc2NlbmRpbmcgfHwgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmcpXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aCc6ICFoYXNJdGVtcyA/ICcxMDAlJyA6IGFwcGx5Rml4ZWRDb2x1bW5zKCkgPyBjb2x1bW4ud2lkdGggOiAnYXV0bycgfVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc3VidGl0bGVdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgW3BGcm96ZW5Db2x1bW5dPVwiY29sdW1uLmZpeGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZsZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZml4ZWQtaW5uZXJdPVwiaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtY2VudGVyXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodCAmJiAoaGFzVmlzaWJsZUFjdGlvbnMgfHwgaGlkZUNvbHVtbnNNYW5hZ2VyKVwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICAgID48L3RoPlxuXG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImhhc1Zpc2libGVBY3Rpb25zICYmIGFjdGlvblJpZ2h0ICYmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxIHx8IGlzU2luZ2xlQWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXNpbmdsZS1hY3Rpb25dPVwiaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1hY3Rpb25zXT1cIiFpc1NpbmdsZUFjdGlvblwiXG4gICAgICAgICAgPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuXG4gICAgICA8dGJvZHkgY2xhc3M9XCJwby10YWJsZS1ncm91cC1yb3dcIiAqbmdJZj1cIiFoYXNJdGVtcyB8fCAhaGFzTWFpbkNvbHVtbnNcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwicG8tdGFibGUtcm93IHBvLXRhYmxlLXJvdy1uby1kYXRhXCI+XG4gICAgICAgICAgPHRkIFtjb2xTcGFuXT1cImNvbHVtbkNvdW50XCIgY2xhc3M9XCJwby10YWJsZS1uby1kYXRhIHBvLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgbGl0ZXJhbHMubm9EYXRhIH19IDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc01haW5Db2x1bW5zXCI+XG4gICAgICAgIDx0Ym9keVxuICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtZ3JvdXAtcm93XCJcbiAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZmlsdGVyZWRJdGVtczsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtcm93LWFjdGl2ZV09XCJyb3cuJHNlbGVjdGVkIHx8IChyb3cuJHNlbGVjdGVkID09PSBudWxsICYmIHNlbGVjdGFibGUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2luZ2xlU2VsZWN0ID8gaW5wdXRSYWRpbyA6IGlucHV0Q2hlY2tib3g7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgIDwhLS0gVmFsaWRhIHNlIGEgb3JpZ2VtIGRvIGRldGFpbCDDqSBwZWxvIGlucHV0IGRvIHBvLXRhYmxlIC0tPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uTWFzdGVyRGV0YWlsICYmICFoaWRlRGV0YWlsICYmICFoYXNSb3dUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVuYSBjb20gYXMgYcOnw7VlcyBuYSBlc3F1ZXJkYSAocGFkcsOjbyktLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdJZj1cIiFhY3Rpb25SaWdodCAmJiAodmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMSB8fCBpc1NpbmdsZUFjdGlvbilcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJBY3Rpb25zQ29sdW1uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPCEtLSBWYWxpZGEgc2UgYSBvcmlnZW0gZG8gZGV0YWlsIMOpIHBlbGEgZGlyZXRpdmEgLS0+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSb3dUZW1wbGF0ZSAmJiAhaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW5dPVwiY29sdW1uLnR5cGUgIT09ICdpY29uJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1jZW50ZXJdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtY29sdW1uLWljb25zXT1cImNvbHVtbi50eXBlID09PSAnaWNvbidcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzc0NvbG9yKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgIFtwRnJvemVuQ29sdW1uXT1cImNvbHVtbi5maXhlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHBvLWZyb3plbi1jb2x1bW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFzU2VsZWN0YWJsZVJvdygpID8gc2VsZWN0Um93KHJvdykgOiAnamF2YXNjcmlwdDo7J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1jZWxsIHBvLXRhYmxlLWJvZHktZWxsaXBzaXMgbm90cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiXG4gICAgICAgICAgICAgICAgW3AtdG9vbHRpcF09XCJ0b29sdGlwVGV4dFwiXG4gICAgICAgICAgICAgICAgW3AtYXBwZW5kLWluLWJvZHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcE1vdXNlRW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBNb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjb2x1bW5UZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShjb2x1bW4pOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjZWxsVGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDZWxsVGVtcGxhdGU/LnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEJvb2xlYW5MYWJlbChnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgY3VycmVuY3k6IGNvbHVtbi5mb3JtYXQgOiAnc3ltYm9sJyA6ICcxLjItMicgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfCBkYXRlOiBjb2x1bW4uZm9ybWF0IHx8ICdkZC9NTS95eXl5JyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldENlbGxEYXRhKHJvdywgY29sdW1uKSB8IHBvX3RpbWU6IGNvbHVtbi5mb3JtYXQgfHwgJ0hIOm1tOnNzLmZmZmZmZicgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgZGF0ZTogY29sdW1uLmZvcm1hdCB8fCAnZGQvTU0veXl5eSBISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdE51bWJlcihnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbi5mb3JtYXQpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1saW5rXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCJcbiAgICAgICAgICAgICAgICAgIFtwLWFjdGlvbl09XCJjb2x1bW4uYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtwLWxpbmtdPVwicm93W2NvbHVtbi5saW5rXVwiXG4gICAgICAgICAgICAgICAgICBbcC1yb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgIFtwLXZhbHVlXT1cImdldENlbGxEYXRhKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0xpbmsoJGV2ZW50LCByb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3BvLXRhYmxlLWNvbHVtbi1saW5rPlxuXG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCJcbiAgICAgICAgICAgICAgICAgIFtwLWNvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgW3AtaWNvbnNdPVwiZ2V0Q29sdW1uSWNvbnMocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtwLXJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3BvLXRhYmxlLWNvbHVtbi1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidzdWJ0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxwby10YWJsZS1zdWJ0aXRsZS1jaXJjbGUgW3Atc3VidGl0bGVdPVwiZ2V0U3VidGl0bGVDb2x1bW4ocm93LCBjb2x1bW4pXCI+PC9wby10YWJsZS1zdWJ0aXRsZS1jaXJjbGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICA8cG8tdGFibGUtY29sdW1uLWxhYmVsIFtwLXZhbHVlXT1cImdldENvbHVtbkxhYmVsKHJvdywgY29sdW1uKVwiPiA8L3BvLXRhYmxlLWNvbHVtbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD57eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVuYSBkZSBhw6dvZXMgbmEgZGlyZWl0YSAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvblJpZ2h0XCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiQWN0aW9uc0NvbHVtblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImhhc01haW5Db2x1bW5zICYmIGhhc1Jvd1RlbXBsYXRlICYmIHJvdy4kc2hvd0RldGFpbCAmJiBpc1Nob3dSb3dUZW1wbGF0ZShyb3csIHJvd0luZGV4KVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicG8tdGFibGUtcm93LXRlbXBsYXRlLWNvbnRhaW5lclwiIFtjb2xTcGFuXT1cImNvbHVtbkNvdW50Rm9yTWFzdGVyRGV0YWlsXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlUm93VGVtcGxhdGUudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImhhc01haW5Db2x1bW5zICYmIGlzU2hvd01hc3RlckRldGFpbChyb3cpXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsXCIgW2NvbFNwYW5dPVwiY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWxcIj5cbiAgICAgICAgICAgICAgPHBvLXRhYmxlLWRldGFpbFxuICAgICAgICAgICAgICAgIFtwLXNlbGVjdGFibGVdPVwic2VsZWN0YWJsZSAmJiAhZGV0YWlsSGlkZVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW3AtZGV0YWlsXT1cImNvbHVtbk1hc3RlckRldGFpbC5kZXRhaWxcIlxuICAgICAgICAgICAgICAgIFtwLWl0ZW1zXT1cInJvd1tuYW1lQ29sdW1uRGV0YWlsXVwiXG4gICAgICAgICAgICAgICAgKHAtc2VsZWN0LXJvdyk9XCJzZWxlY3REZXRhaWxSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wby10YWJsZS1kZXRhaWw+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RhYmxlPlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbjwvbmctdGVtcGxhdGU+XG5cbjxwby1wb3B1cCAjcG9wdXAgW3AtYWN0aW9uc109XCJhY3Rpb25zXCIgW3AtdGFyZ2V0XT1cInBvcHVwVGFyZ2V0XCI+IDwvcG8tcG9wdXA+XG5cbjxuZy10ZW1wbGF0ZSAjcG9UYWJsZUNvbHVtbkRldGFpbCBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPHNwYW5cbiAgICAqbmdJZj1cIihjb250YWluc01hc3RlckRldGFpbChyb3cpICYmICFoYXNSb3dUZW1wbGF0ZSkgfHwgKGlzU2hvd1Jvd1RlbXBsYXRlKHJvdywgcm93SW5kZXgpICYmIGhhc1Jvd1RlbXBsYXRlKVwiXG4gICAgY2xhc3M9XCJwby1pY29uIHBvLWNsaWNrYWJsZVwiXG4gICAgW2NsYXNzLnBvLWljb24tYXJyb3ctdXBdPVwicm93LiRzaG93RGV0YWlsXCJcbiAgICBbY2xhc3MucG8taWNvbi1hcnJvdy1kb3duXT1cIiFyb3cuJHNob3dEZXRhaWxcIlxuICA+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRSYWRpbyBsZXQtcm93PlxuICA8cG8tcmFkaW8gW25hbWVdPVwiaWRSYWRpb1wiIFtwLWNoZWNrZWRdPVwicm93LiRzZWxlY3RlZFwiIChwLWNoYW5nZS1zZWxlY3RlZCk9XCJzZWxlY3RSb3cocm93KVwiPjwvcG8tcmFkaW8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0Q2hlY2tib3ggbGV0LXJvdz5cbiAgPHBvLWNoZWNrYm94XG4gICAgbmFtZT1cImNoZWNrYm94XCJcbiAgICAocC1jaGFuZ2UpPVwic2VsZWN0YWJsZSA/IHNlbGVjdFJvdyhyb3cpIDogJ2phdmFzY3JpcHQ6OydcIlxuICAgIFtwLWNoZWNrYm94VmFsdWVdPVwicm93LiRzZWxlY3RlZFwiXG4gID48L3BvLWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50SGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgPHNwYW5cbiAgICAjY29sdW1uSGVhZGVyXG4gICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZWxsaXBzaXNcIlxuICAgIFtwLXRvb2x0aXBdPVwidG9vbHRpcFRleHRcIlxuICAgIFtwLWFwcGVuZC1pbi1ib2R5XT1cInRydWVcIlxuICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBNb3VzZUVudGVyKCRldmVudClcIlxuICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBNb3VzZUxlYXZlKClcIlxuICA+XG4gICAge3sgY29sdW1uLmxhYmVsIHx8IChjb2x1bW4ucHJvcGVydHkgfCB0aXRsZWNhc2UpIH19XG4gIDwvc3Bhbj5cblxuICA8c3BhblxuICAgICpuZ0lmPVwic29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlXCJcbiAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWljb24tdW5zZWxlY3RlZF09XCJKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSAhPT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKVwiXG4gICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1pY29uLWRlc2NlbmRpbmddPVwiXG4gICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJiBzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nXG4gICAgXCJcbiAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWljb24tYXNjZW5kaW5nXT1cIlxuICAgICAgSlNPTi5zdHJpbmdpZnkoc29ydGVkQ29sdW1uPy5wcm9wZXJ0eSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbHVtbikgJiYgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmdcbiAgICBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkpTT04uc3RyaW5naWZ5KHNvcnRlZENvbHVtbj8ucHJvcGVydHkpICE9PSBKU09OLnN0cmluZ2lmeShjb2x1bW4pXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTE4LjI5MjkgMTUuMjkyOUwxNyAxNi41ODU4TDE3IDEwQzE3IDkuNDQ3NzIgMTYuNTUyMyA5IDE2IDlDMTUuNDQ3NyA5IDE1IDkuNDQ3NzIgMTUgMTBMMTUgMTYuNTg1OEwxMy43MDcxIDE1LjI5MjlDMTMuMzE2NiAxNC45MDI0IDEyLjY4MzQgMTQuOTAyNCAxMi4yOTI5IDE1LjI5MjlDMTEuOTAyNCAxNS42ODM0IDExLjkwMjQgMTYuMzE2NiAxMi4yOTI5IDE2LjcwNzFMMTUuMjkyOSAxOS43MDcxQzE1LjY4MzQgMjAuMDk3NiAxNi4zMTY2IDIwLjA5NzYgMTYuNzA3MSAxOS43MDcxTDE5LjcwNzEgMTYuNzA3MUMyMC4wOTc2IDE2LjMxNjYgMjAuMDk3NiAxNS42ODM0IDE5LjcwNzEgMTUuMjkyOUMxOS4zMTY2IDE0LjkwMjQgMTguNjgzNCAxNC45MDI0IDE4LjI5MjkgMTUuMjkyOVpNNS43MDcxNiA4LjcwNzFMNy4wMDAwNiA3LjQxNDJMNy4wMDAwMyAxNEM3LjAwMDAyIDE0LjU1MjMgNy40NDc3NCAxNSA4LjAwMDAyIDE1QzguNTUyMzEgMTUgOS4wMDAwMiAxNC41NTIzIDkuMDAwMDMgMTRMOS4wMDAwNiA3LjQxNDE4TDEwLjI5MjkgOC43MDcwN0MxMC42ODM1IDkuMDk3NTkgMTEuMzE2NiA5LjA5NzU4IDExLjcwNzIgOC43MDcwNkMxMi4wOTc3IDguMzE2NTMgMTIuMDk3NyA3LjY4MzM2IDExLjcwNzIgNy4yOTI4NEw4LjcwNzE4IDQuMjkyODZDOC4zMTY2NSAzLjkwMjM0IDcuNjgzNDkgMy45MDIzNSA3LjI5Mjk2IDQuMjkyODdMNC4yOTI5NSA3LjI5Mjg5QzMuOTAyNDIgNy42ODM0MiAzLjkwMjQyIDguMzE2NTggNC4yOTI5NCA4LjcwNzExQzQuNjgzNDcgOS4wOTc2MyA1LjMxNjYzIDkuMDk3NjIgNS43MDcxNiA4LjcwNzFaXCJcbiAgICAgICAgICBmaWxsPVwiIzFEMUQzMFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJiBzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTExIDkuNDE0MjFMOS43MDcxMSAxMC43MDcxQzkuMzE2NTggMTEuMDk3NiA4LjY4MzQyIDExLjA5NzYgOC4yOTI4OSAxMC43MDcxQzcuOTAyMzcgMTAuMzE2NiA3LjkwMjM3IDkuNjgzNDIgOC4yOTI4OSA5LjI5Mjg5TDExLjI5MjkgNi4yOTI4OUMxMS42ODM0IDUuOTAyMzcgMTIuMzE2NiA1LjkwMjM3IDEyLjcwNzEgNi4yOTI4OUwxNS43MDcxIDkuMjkyODlDMTYuMDk3NiA5LjY4MzQyIDE2LjA5NzYgMTAuMzE2NiAxNS43MDcxIDEwLjcwNzFDMTUuMzE2NiAxMS4wOTc2IDE0LjY4MzQgMTEuMDk3NiAxNC4yOTI5IDEwLjcwNzFMMTMgOS40MTQyMVYxNkMxMyAxNi41NTIzIDEyLjU1MjMgMTcgMTIgMTdDMTEuNDQ3NyAxNyAxMSAxNi41NTIzIDExIDE2VjkuNDE0MjFaXCJcbiAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiSlNPTi5zdHJpbmdpZnkoc29ydGVkQ29sdW1uPy5wcm9wZXJ0eSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbHVtbikgJiYgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmdcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNOS43MDcxMSAxMy4yOTI5TDExIDE0LjU4NThWN0MxMSA2LjQ0NzcyIDExLjQ0NzcgNiAxMiA2QzEyLjU1MjMgNiAxMyA2LjQ0NzcyIDEzIDdWMTQuNTg1OEwxNC4yOTI5IDEzLjI5MjlDMTQuNjgzNCAxMi45MDI0IDE1LjMxNjYgMTIuOTAyNCAxNS43MDcxIDEzLjI5MjlDMTYuMDk3NiAxMy42ODM0IDE2LjA5NzYgMTQuMzE2NiAxNS43MDcxIDE0LjcwNzFMMTIuNzA3MSAxNy43MDcxQzEyLjMxNjYgMTguMDk3NiAxMS42ODM0IDE4LjA5NzYgMTEuMjkyOSAxNy43MDcxTDguMjkyODkgMTQuNzA3MUM3LjkwMjM3IDE0LjMxNjYgNy45MDIzNyAxMy42ODM0IDguMjkyODkgMTMuMjkyOUM4LjY4MzQyIDEyLjkwMjQgOS4zMTY1OCAxMi45MDI0IDkuNzA3MTEgMTMuMjkyOVpcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0NvbHVtbnNXaXRoSGVpZ2h0PlxuICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZpeGVkLWlubmVyXCIgW3N0eWxlLndpZHRoLnB4XT1cImhlYWRlcldpZHRoXCI+XG4gICAge3sgaGFzVmFsaWRDb2x1bW5zID8gbGl0ZXJhbHMubm9WaXNpYmxlQ29sdW1uIDogbGl0ZXJhbHMubm9Db2x1bW5zIH19XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0NvbHVtbnNXaXRob3V0SGVpZ2h0PlxuICB7eyBoYXNWYWxpZENvbHVtbnMgPyBsaXRlcmFscy5ub1Zpc2libGVDb2x1bW4gOiBsaXRlcmFscy5ub0NvbHVtbnMgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGVtcGxhdGUgZGUgYcOnw7VlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjQWN0aW9uc0NvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICA8dGRcbiAgICAqbmdJZj1cImlzU2luZ2xlQWN0aW9uXCJcbiAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbiBwby10YWJsZS1jb2x1bW4tc2luZ2xlLWFjdGlvblwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImhlaWdodCAmJiBhY3Rpb25SaWdodCA/IGdldFdpZHRoQ29sdW1uTWFuYWdlcigpIDogJydcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiaGVpZ2h0ICYmICFhY3Rpb25SaWdodCA/IGdldENvbHVtbldpZHRoQWN0aW9uc0xlZnQoKSA6ICcnXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiaGVpZ2h0ICYmICFhY3Rpb25SaWdodCA/IGdldENvbHVtbldpZHRoQWN0aW9uc0xlZnQoKSA6ICcnXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiZmlyc3RBY3Rpb24udmlzaWJsZSAhPT0gZmFsc2VcIlxuICAgICAgY2xhc3M9XCJwby10YWJsZS1zaW5nbGUtYWN0aW9uIHBvLWNsaWNrYWJsZVwiXG4gICAgICBbY2xhc3MucG8tdGFibGUtYWN0aW9uLWRpc2FibGVkXT1cImZpcnN0QWN0aW9uLmRpc2FibGVkID8gdmFsaWRhdGVUYWJsZUFjdGlvbihyb3csIGZpcnN0QWN0aW9uKSA6IGZhbHNlXCJcbiAgICAgIChjbGljayk9XCJleGVjdXRlVGFibGVBY3Rpb24ocm93LCBmaXJzdEFjdGlvbilcIlxuICAgID5cbiAgICAgIDxwby1pY29uICpuZ0lmPVwiZmlyc3RBY3Rpb24uaWNvblwiIGNsYXNzPVwicG8tdGFibGUtc2luZ2xlLWFjdGlvbi1jb250ZW50XCIgW3AtaWNvbl09XCJmaXJzdEFjdGlvbi5pY29uXCI+PC9wby1pY29uPlxuICAgICAge3sgZmlyc3RBY3Rpb24ubGFiZWwgfX1cbiAgICA8L2Rpdj5cbiAgPC90ZD5cblxuICA8dGQgKm5nSWY9XCJ2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxXCIgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tYWN0aW9uc1wiPlxuICAgIDxzcGFuICNwb3B1cFRhcmdldCBjbGFzcz1cInBvLWljb24gcG8taWNvbi1tb3JlIHBvLWNsaWNrYWJsZVwiIChjbGljayk9XCJ0b2dnbGVQb3B1cChyb3csIHBvcHVwVGFyZ2V0KVwiPjwvc3Bhbj5cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxwby10YWJsZS1jb2x1bW4tbWFuYWdlclxuICAqbmdJZj1cIiFoaWRlQ29sdW1uc01hbmFnZXJcIlxuICBbcC1jb2x1bW5zXT1cImNvbHVtbnNcIlxuICBbcC1tYXgtY29sdW1uc109XCJtYXhDb2x1bW5zXCJcbiAgW3AtdGFyZ2V0XT1cImNvbHVtbk1hbmFnZXJUYXJnZXRcIlxuICBbcC1sYXN0LXZpc2libGUtY29sdW1ucy1zZWxlY3RlZF09XCJsYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZFwiXG4gIFtwLWhpZGUtYWN0aW9uLWZpeGVkLWNvbHVtbnNdPVwiaGlkZUFjdGlvbkZpeGVkQ29sdW1uc1wiXG4gIChwLXZpc2libGUtY29sdW1ucy1jaGFuZ2UpPVwib25WaXNpYmxlQ29sdW1uc0NoYW5nZSgkZXZlbnQpXCJcbiAgKHAtY2hhbmdlLXZpc2libGUtY29sdW1ucyk9XCJvbkNoYW5nZVZpc2libGVDb2x1bW5zKCRldmVudClcIlxuICBbcC1jb2x1bW5zLWRlZmF1bHRdPVwiaW5pdGlhbENvbHVtbnNcIlxuICAocC1pbml0aWFsLWNvbHVtbnMpPVwib25Db2x1bW5SZXN0b3JlTWFuYWdlcigkZXZlbnQpXCJcbj5cbjwvcG8tdGFibGUtY29sdW1uLW1hbmFnZXI+XG5cbjxwby1tb2RhbFxuICAjbW9kYWxEZWxldGVcbiAgW3AtdGl0bGVdPVwibGl0ZXJhbHMuZGVsZXRlXCJcbiAgW3AtcHJpbWFyeS1hY3Rpb25dPVwiY29uZmlybVwiXG4gIFtwLXNlY29uZGFyeS1hY3Rpb25dPVwiY2xvc2VcIlxuICBbcC1jbGljay1vdXRdPVwidHJ1ZVwiXG4+XG4gIDxwIGNsYXNzPVwicG8tZm9udC10ZXh0LWxhcmdlXCI+e3sgbGl0ZXJhbHMuYm9keURlbGV0ZSB9fTwvcD5cbjwvcG8tbW9kYWw+XG4iXX0=
|
|
2271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdEUsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFVBQVUsRUFPVixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTlELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUd0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FB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QUEwQjs7a0ZBaEYxQixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHsgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQb05vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1ub3RpZmljYXRpb24vcG8tbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9Nb2RhbEFjdGlvbiwgUG9Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLW1vZGFsJztcbmltcG9ydCB7IFBvUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9wby1wb3B1cC9wby1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbkxhYmVsIH0gZnJvbSAnLi9wby10YWJsZS1jb2x1bW4tbGFiZWwvcG8tdGFibGUtY29sdW1uLWxhYmVsLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvUGFnZVNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcGFnZSc7XG5pbXBvcnQgeyBQb1RhYmxlUm93VGVtcGxhdGVBcnJvd0RpcmVjdGlvbiB9IGZyb20gJy4vZW51bXMvcG8tdGFibGUtcm93LXRlbXBsYXRlLWFycm93LWRpcmVjdGlvbi5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUJhc2VDb21wb25lbnQsIFF1ZXJ5UGFyYW1zVHlwZSB9IGZyb20gJy4vcG8tdGFibGUtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tdGFibGUtY2VsbC10ZW1wbGF0ZS9wby10YWJsZS1jZWxsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3BvLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZS9wby10YWJsZS1jb2x1bW4tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvVGFibGVSb3dUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tdGFibGUtcm93LXRlbXBsYXRlL3BvLXRhYmxlLXJvdy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9UYWJsZVN1YnRpdGxlQ29sdW1uIH0gZnJvbSAnLi9wby10YWJsZS1zdWJ0aXRsZS1mb290ZXIvcG8tdGFibGUtc3VidGl0bGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tdGFibGUuc2VydmljZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvVGFibGVCYXNlQ29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tdGFibGUtYmFzaWNcIiB0aXRsZT1cIlBPIFRhYmxlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1iYXNpYy9zYW1wbGUtcG8tdGFibGUtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWJhc2ljL3NhbXBsZS1wby10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWxhYnNcIiB0aXRsZT1cIlBPIFRhYmxlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWxhYnMvc2FtcGxlLXBvLXRhYmxlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWxhYnMvc2FtcGxlLXBvLXRhYmxlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5jb21wb25lbnQuZTJlLXNwZWMudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5jb21wb25lbnQucG8udHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtbGFicy9zYW1wbGUtcG8tdGFibGUtbGFicy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tdGFibGUtd2l0aC1hcGlcIiB0aXRsZT1cIlBPIFRhYmxlIHVzaW5nIEFQSVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtd2l0aC1hcGkvc2FtcGxlLXBvLXRhYmxlLXdpdGgtYXBpLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS13aXRoLWFwaS9zYW1wbGUtcG8tdGFibGUtd2l0aC1hcGkuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS10cmFuc3BvcnRcIiB0aXRsZT1cIlBPIFRhYmxlIC0gVHJhbnNwb3J0XCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS10cmFuc3BvcnQvc2FtcGxlLXBvLXRhYmxlLXRyYW5zcG9ydC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtdHJhbnNwb3J0L3NhbXBsZS1wby10YWJsZS10cmFuc3BvcnQuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtdHJhbnNwb3J0L3NhbXBsZS1wby10YWJsZS10cmFuc3BvcnQuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWFpcmZhcmVcIiB0aXRsZT1cIlBPIFRhYmxlIC0gQWlyZmFyZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtYWlyZmFyZS9zYW1wbGUtcG8tdGFibGUtYWlyZmFyZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtYWlyZmFyZS9zYW1wbGUtcG8tdGFibGUtYWlyZmFyZS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1haXJmYXJlL3NhbXBsZS1wby10YWJsZS1haXJmYXJlLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS1jb21wb25lbnRzXCIgdGl0bGU9XCJQTyBUYWJsZSAtIFBvIEZpZWxkIENvbXBvbmVudHNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuZW51bS50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1jb21wb25lbnRzL3NhbXBsZS1wby10YWJsZS1jb21wb25lbnRzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMvc2FtcGxlLXBvLXRhYmxlLWNvbXBvbmVudHMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1jb21wb25lbnRzL3NhbXBsZS1wby10YWJsZS1jb21wb25lbnRzLmNvbXBvbmVudC5jc3NcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby10YWJsZS1oZXJvZXNcIiB0aXRsZT1cIlBPIFRhYmxlIC0gSGVyb2VzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby10YWJsZS1oZXJvZXMvc2FtcGxlLXBvLXRhYmxlLWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtaGVyb2VzL3NhbXBsZS1wby10YWJsZS1oZXJvZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtaGVyb2VzL3NhbXBsZS1wby10YWJsZS1oZXJvZXMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXRhYmxlLWRyYWdnYWJsZVwiIHRpdGxlPVwiUE8gVGFibGUgRHJhZyBhbmQgRHJvcFwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtZHJhZ2dhYmxlL3NhbXBsZS1wby10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tdGFibGUtZHJhZ2dhYmxlL3NhbXBsZS1wby10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb0RhdGVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9UYWJsZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoUG9UYWJsZVJvd1RlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJvd1RlbXBsYXRlOiBQb1RhYmxlUm93VGVtcGxhdGVEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoUG9UYWJsZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSkgdGFibGVDZWxsVGVtcGxhdGU6IFBvVGFibGVDZWxsVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihQb1RhYmxlQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUpIHRhYmxlQ29sdW1uVGVtcGxhdGVzOiBRdWVyeUxpc3Q8UG9UYWJsZUNvbHVtblRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICBAVmlld0NoaWxkKCdub0NvbHVtbnNIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbm9Db2x1bW5zSGVhZGVyO1xuICBAVmlld0NoaWxkKCdwb3B1cCcpIHBvUG9wdXBDb21wb25lbnQ6IFBvUG9wdXBDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoUG9Nb2RhbENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgbW9kYWxEZWxldGU6IFBvTW9kYWxDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRm9vdGVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlRm9vdGVyRWxlbWVudDtcbiAgQFZpZXdDaGlsZCgndGFibGVXcmFwcGVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIHRhYmxlV3JhcHBlckVsZW1lbnQ7XG5cbiAgQFZpZXdDaGlsZCgndGFibGVUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVRlbXBsYXRlO1xuICBAVmlld0NoaWxkKCd0YWJsZVZpcnR1YWxTY3JvbGwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgdGFibGVWaXJ0dWFsU2Nyb2xsO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbk1hbmFnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgY29sdW1uTWFuYWdlcjtcbiAgQFZpZXdDaGlsZCgnY29sdW1uQmF0Y2hBY3Rpb25zJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIGNvbHVtbkJhdGNoQWN0aW9ucztcbiAgQFZpZXdDaGlsZCgnY29sdW1uQWN0aW9uTGVmdCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBjb2x1bW5BY3Rpb25MZWZ0O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2FjdGlvbnNJY29uRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhY3Rpb25zSWNvbkVsZW1lbnQ6IFF1ZXJ5TGlzdDxhbnk+O1xuICBAVmlld0NoaWxkcmVuKCdhY3Rpb25zRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhY3Rpb25zRWxlbWVudDogUXVlcnlMaXN0PGFueT47XG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcklucHV0JykgZmlsdGVySW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvU2VhcmNoSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwb1NlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyB2aWV3UG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHBvTm90aWZpY2F0aW9uID0gaW5qZWN0KFBvTm90aWZpY2F0aW9uU2VydmljZSk7XG5cbiAgaGVpZ2h0VGFibGVDb250YWluZXI6IG51bWJlcjtcbiAgaGVpZ2h0VGFibGVWaXJ0dWFsOiBudW1iZXI7XG4gIHBvcHVwVGFyZ2V0O1xuICB0YWJsZU9wYWNpdHk6IG51bWJlciA9IDA7XG4gIHRvb2x0aXBUZXh0OiBzdHJpbmc7XG4gIGl0ZW1TaXplOiBudW1iZXIgPSA0ODtcbiAgbGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQ6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICB0YWdDb2xvcjogc3RyaW5nO1xuICBpZFJhZGlvOiBzdHJpbmc7XG4gIGlucHV0RmllbGRWYWx1ZSA9ICcnO1xuICBKU09OOiBKU09OO1xuICBuZXdPcmRlckNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBzaXplTG9hZGluZzogc3RyaW5nID0gJ3NtJztcbiAgaGVhZGVyV2lkdGg6IG51bWJlcjtcblxuICBjbG9zZTogUG9Nb2RhbEFjdGlvbiA9IHtcbiAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgIHRoaXMubW9kYWxEZWxldGUuY2xvc2UoKTtcbiAgICB9LFxuICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLmNhbmNlbCxcbiAgICBkYW5nZXI6IHRydWVcbiAgfTtcblxuICBjb25maXJtOiBQb01vZGFsQWN0aW9uID0ge1xuICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgdGhpcy5kZWxldGVJdGVtcygpO1xuICAgIH0sXG4gICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMuZGVsZXRlXG4gIH07XG5cbiAgcHJpdmF0ZSBfY29sdW1uTWFuYWdlclRhcmdldDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBfY29sdW1uTWFuYWdlclRhcmdldEZpeGVkOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRpZmZlcjtcbiAgcHJpdmF0ZSBmb290ZXJIZWlnaHQ7XG4gIHByaXZhdGUgaGVhZGVySGVpZ2h0O1xuICBwcml2YXRlIHRpbWVvdXRSZXNpemU7XG4gIHByaXZhdGUgdmlzaWJsZUVsZW1lbnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzY3JvbGxFdmVudCQ6IE9ic2VydmFibGU8YW55PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TY3JvbGxFdmVudDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIGNsaWNrTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uTWFuYWdlclRhcmdldCcpIHNldCBjb2x1bW5NYW5hZ2VyVGFyZ2V0KHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fY29sdW1uTWFuYWdlclRhcmdldCA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbk1hbmFnZXJUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbk1hbmFnZXJUYXJnZXQ7XG4gIH1cblxuICBAVmlld0NoaWxkKCdjb2x1bW5NYW5hZ2VyVGFyZ2V0Rml4ZWQnKSBzZXQgY29sdW1uTWFuYWdlclRhcmdldEZpeGVkKHZhbHVlOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fY29sdW1uTWFuYWdlclRhcmdldEZpeGVkID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY29sdW1uTWFuYWdlclRhcmdldEZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5NYW5hZ2VyVGFyZ2V0Rml4ZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwb0RhdGU6IFBvRGF0ZVNlcnZpY2UsXG4gICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcG9MYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlLCBwb0xhbmd1YWdlU2VydmljZSwgZGVmYXVsdFNlcnZpY2UpO1xuICAgIHRoaXMuSlNPTiA9IEpTT047XG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcblxuICAgIC8vIFRPRE86ICM1NTUwIGFvIHJlbW92ZXIgZXN0ZSBsaXN0ZW5lciwgbm8gcG9ydGFsLCBxdWFuZG8gYXMgY29sdW5hcyBmb3JlbSBmaXhhcyBuw6NvIHNvZnJlbVxuICAgIC8vIGFsdGVyYcOnw6NvIGRlIGxhcmd1cmEsIHBvaXMgbyBuZ0RvQ2hlY2sgbsOjbyDDqSBleGVjdXRhZG8uXG4gICAgdGhpcy5jbGlja0xpc3RlbmVyID0gcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsICgpID0+IHt9KTtcblxuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSByZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5kZWJvdW5jZVJlc2l6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVSb3dUZW1wbGF0ZT8udGFibGVSb3dUZW1wbGF0ZUFycm93RGlyZWN0aW9uID09PSBQb1RhYmxlUm93VGVtcGxhdGVBcnJvd0RpcmVjdGlvbi5SaWdodDtcbiAgfVxuXG4gIGdldCBjb2x1bW5Db3VudCgpIHtcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9XG4gICAgICB0aGlzLm1haW5Db2x1bW5zLmxlbmd0aCArXG4gICAgICAodGhpcy5hY3Rpb25zLmxlbmd0aCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHRoaXMuc2VsZWN0YWJsZSA/IDEgOiAwKSArXG4gICAgICAoIXRoaXMuaGlkZURldGFpbCAmJiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCAhPT0gdW5kZWZpbmVkID8gMSA6IDApO1xuXG4gICAgcmV0dXJuIGNvbHVtbkNvdW50IHx8IDE7XG4gIH1cblxuICBnZXQgY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWwoKSB7XG4gICAgLy8gY2FzbyB0aXZlciBhw6fDtWVzIHNlcsOhIHV0aWxpemFkbyBhIHN1YSBjb2x1bmEgcGFyYSBleGliaXIgbyBjb2x1bW5NYW5hZ2VyXG4gICAgcmV0dXJuIHRoaXMubWFpbkNvbHVtbnMubGVuZ3RoICsgMSArICh0aGlzLmFjdGlvbnMubGVuZ3RoID4gMCA/IDEgOiAwKSArICh0aGlzLnNlbGVjdGFibGUgPyAxIDogMCk7XG4gIH1cblxuICBnZXQgZGV0YWlsSGlkZVNlbGVjdCgpIHtcbiAgICBjb25zdCBtYXN0ZXJEZXRhaWwgPSB0aGlzLmNvbHVtbk1hc3RlckRldGFpbDtcbiAgICByZXR1cm4gbWFzdGVyRGV0YWlsICYmIG1hc3RlckRldGFpbC5kZXRhaWwgPyBtYXN0ZXJEZXRhaWwuZGV0YWlsLmhpZGVTZWxlY3QgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNWaXNpYmxlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gISF0aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBmaXJzdEFjdGlvbigpOiBQb1RhYmxlQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQWN0aW9ucyAmJiB0aGlzLnZpc2libGVBY3Rpb25zWzBdO1xuICB9XG5cbiAgZ2V0IGhhc0Zvb3RlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNJdGVtcyAmJiB0aGlzLmhhc1Zpc2libGVTdWJ0aXRsZUNvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzTWFzdGVyRGV0YWlsQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc01haW5Db2x1bW5zICYmIHRoaXMuaGFzSXRlbXMgJiYgIXRoaXMuaGlkZURldGFpbCAmJiAhISh0aGlzLmNvbHVtbk1hc3RlckRldGFpbCB8fCB0aGlzLmhhc1Jvd1RlbXBsYXRlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzUm93VGVtcGxhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50YWJsZVJvd1RlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGhhc1NlbGVjdGFibGVDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSAmJiB0aGlzLmhhc0l0ZW1zICYmIHRoaXMuaGFzTWFpbkNvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzVmFsaWRDb2x1bW5zKCkge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBoYXNWaXNpYmxlU3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnRpdGxlQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVBY3Rpb25zLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGdldCBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludmVyc2VPZlRyYW5zbGF0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnZpZXdQb3J0IHx8ICF0aGlzLnZpZXdQb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10pIHtcbiAgICAgIHJldHVybiAnLTBweCc7XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy52aWV3UG9ydFsnX3JlbmRlcmVkQ29udGVudE9mZnNldCddO1xuXG4gICAgcmV0dXJuIGAtJHtvZmZzZXR9cHhgO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pZFJhZGlvID0gYHBvLXJhZGlvLSR7dXVpZCgpfWA7XG4gIH1cblxuICBjaGFuZ2VIZWFkZXJXaWR0aCgpIHtcbiAgICBpZiAodGhpcy5ub0NvbHVtbnNIZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyV2lkdGggPSB0aGlzLm5vQ29sdW1uc0hlYWRlcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VIZWFkZXJXaWR0aCgpO1xuICAgIHRoaXMuY2hhbmdlU2l6ZUxvYWRpbmcoKTtcbiAgICB0aGlzLmFwcGx5Rml4ZWRDb2x1bW5zKCk7XG4gIH1cblxuICBzaG93TW9yZUluZmluaXRlU2Nyb2xsKHsgdGFyZ2V0IH0pOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHRhcmdldC5vZmZzZXRIZWlnaHQgKyB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgIGlmICghdGhpcy5zaG93TW9yZURpc2FibGVkICYmIHNjcm9sbFBvc2l0aW9uID49IHRhcmdldC5zY3JvbGxIZWlnaHQgKiAodGhpcy5pbmZpbml0ZVNjcm9sbERpc3RhbmNlIC8gMTEwKSkge1xuICAgICAgdGhpcy5vblNob3dNb3JlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIHRoaXMuYXBwbHlGaXhlZENvbHVtbnMoKTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlc0l0ZW1zKCk7XG4gICAgdGhpcy52ZXJpZnlDYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcigpO1xuXG4gICAgLy8gUGVybWl0ZSBxdWUgb3MgY2FiZcOnYWxob3Mgc2VqYW0gY2FsY3VsYWRvcyBuYSBwcmltZWlyYSB2ZXogcXVlIG8gY29tcG9uZW50ZSB0b3JuYS1zZSB2aXPDrXZlbCxcbiAgICAvLyBldml0YW5kbyBjb20gaXNzbywgcHJvYmxlbWFzIGNvbSBUYWJzIG91IERpdnMgcXVlIGluaWNpZW0gZXNjb25kaWRhcy5cbiAgICBpZiAodGhpcy50YWJsZVdyYXBwZXJFbGVtZW50Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICYmICF0aGlzLnZpc2libGVFbGVtZW50ICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcbiAgICAgIHRoaXMuY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xuICAgICAgdGhpcy52aXNpYmxlRWxlbWVudCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2U/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIHJlYWxpemFyIGJ1c2NhIG5vIHNlcnZpw6dvIGRlIGRhZG9zIHBvZGVuZG8gaW5mb3JtYXIgZmlsdHJvcyBlIGNvbSBvIHJldG9ybm8sIGF0dWFsaXphIGEgdGFiZWxhLlxuICAgKlxuICAgKiBDYXNvIG7Do28gc2VqYSBpbmZvcm1hZG8gcGFyw6JtZXRybywgbmFkYSBzZXLDoSBhZGljaW9uYWRvIGFvIEdFVCwgY29uZm9ybWUgYWJhaXhvOlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMFxuICAgKiBgYGBcbiAgICogPiBPYnM6IG9zIHBhcsOibWV0cm9zIGBwYWdlYCBlIGBwYWdlU2l6ZWAgc2VtcHJlIHNlcsOjbyBjaGFtYWRvcyBpbmRlcGVuZGVudGUgZGUgc2VyIGVudmlhZG9zIG91dHJvcyBwYXLDom1ldHJvcy5cbiAgICpcbiAgICogQ2FzbyBzZWphbSBpbmZvcm1hZG9zIG9zIHBhcsOibWV0cm9zIGB7IG5hbWU6ICdKT0hOJywgYWdlOiAnMjMnIH1gLCB0b2RvcyBzZXLDo28gYWRpY2lvbmFkb3MgYW8gR0VULCBjb25mb3JtZSBhYmFpeG86XG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm5hbWU9Sk9ITiZhZ2U9MjNcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7IHsga2V5OiB2YWx1ZSB9IH0gcXVlcnlQYXJhbXMgRm9ybWF0byBkbyBvYmpldG8gYSBzZXIgZW52aWFkby5cbiAgICogPiBQb2RlIHNlciB1dGlsaXphZGEgcXVhbHF1ZXIgc3RyaW5nIGNvbW8ga2V5LCBlIHF1YWxxdWVyIHN0cmluZyBvdSBudW1iZXIgY29tbyB2YWx1ZS5cbiAgICovXG4gIGFwcGx5RmlsdGVycyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pIHtcbiAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEocXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIGNvbHVtbnMgcG9zc3VlbSBhIHByb3ByaWVkYWRlIHdpZHRoLlxuICAgKi9cbiAgYXBwbHlGaXhlZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNvbHVtbnMuc29tZShjb2x1bW4gPT4gIWNvbHVtbi53aWR0aCk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgY29sYXBzYSB1bWEgbGluaGEgY29tIGRldGFsaGUgcXVhbmRvIGV4ZWN1dGFkYS5cbiAgICpcbiAgICogQHBhcmFtIHsgbnVtYmVyIH0gcm93SW5kZXggw41uZGljZSBkYSBsaW5oYSBxdWUgc2Vyw6EgY29sYXBzYWRhLlxuICAgKiA+IEFvIHJlb3JkZW5hciBvcyBkYWRvcyBkYSB0YWJlbGEsIG8gdmFsb3IgY29udGlkbyBuZXN0ZSDDrW5kaWNlIHNlcsOhIGFsdGVyYWRvIGNvbmZvcm1lIGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBjb2xsYXBzZShyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRTaG93RGV0YWlsKHJvd0luZGV4LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgZXhwYW5kZSB1bWEgbGluaGEgY29tIGRldGFsaGUgcXVhbmRvIGV4ZWN1dGFkYS5cbiAgICpcbiAgICogQHBhcmFtIHsgbnVtYmVyIH0gcm93SW5kZXggw41uZGljZSBkYSBsaW5oYSBxdWUgc2Vyw6EgZXhwYW5kaWRhLlxuICAgKiA+IEFvIHJlb3JkZW5hciBvcyBkYWRvcyBkYSB0YWJlbGEsIG8gdmFsb3IgY29udGlkbyBuZXN0ZSDDrW5kaWNlIHNlcsOhIGFsdGVyYWRvIGNvbmZvcm1lIGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBleHBhbmQocm93SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3dJbmRleCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBhcyBsaW5oYXMgZG8gYHBvLXRhYmxlYCBxdWUgZXN0w6NvIHNlbGVjaW9uYWRhcy5cbiAgICovXG4gIGdldFNlbGVjdGVkUm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBhcyBsaW5oYXMgZG8gYHBvLXRhYmxlYCBxdWUgbsOjbyBlc3TDo28gc2VsZWNpb25hZGFzLlxuICAgKi9cbiAgZ2V0VW5zZWxlY3RlZFJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uJHNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNtYXJjYSBhcyBsaW5oYXMgcXVlIGVzdMOjbyBzZWxlY2lvbmFkYXMuXG4gICAqL1xuICB1bnNlbGVjdFJvd3MoKSB7XG4gICAgY29uc3QgY29sdW1uRGV0YWlsID0gdGhpcy5uYW1lQ29sdW1uRGV0YWlsO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgZGV0YWlsSXRlbXMgPSBjb2x1bW5EZXRhaWwgPyBpdGVtW2NvbHVtbkRldGFpbF0gOiBudWxsO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXRhaWxJdGVtcykpIHtcbiAgICAgICAgZGV0YWlsSXRlbXMuZm9yRWFjaChkZXRhaWxJdGVtID0+IHtcbiAgICAgICAgICBkZXRhaWxJdGVtLiRzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaXRlbS4kc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gIH1cblxuICBjaGVja0Rpc2FibGVkKHJvdywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5kaXNhYmxlZCA/IGNvbHVtbi5kaXNhYmxlZChyb3cpIDogZmFsc2U7XG4gIH1cblxuICBjb250YWluc01hc3RlckRldGFpbChyb3cpIHtcbiAgICByZXR1cm4gcm93W3RoaXMubmFtZUNvbHVtbkRldGFpbF0gJiYgcm93W3RoaXMubmFtZUNvbHVtbkRldGFpbF0ubGVuZ3RoO1xuICB9XG5cbiAgZXhlY3V0ZVRhYmxlQWN0aW9uKHJvdzogYW55LCB0YWJsZUFjdGlvbjogYW55KSB7XG4gICAgaWYgKCFyb3cuZGlzYWJsZWQgJiYgIXRoaXMudmFsaWRhdGVUYWJsZUFjdGlvbihyb3csIHRhYmxlQWN0aW9uKSkge1xuICAgICAgdGFibGVBY3Rpb24uYWN0aW9uKHJvdyk7XG4gICAgICB0aGlzLnRvZ2dsZVJvd0FjdGlvbihyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNtYXJjYSB1bWEgbGluaGEgcXVlIGVzdMOhIHNlbGVjaW9uYWRhLlxuICAgKi9cbiAgdW5zZWxlY3RSb3dJdGVtKGl0ZW1mbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8ICgoaXRlbSkgPT4gYm9vbGVhbikpIHtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtZm4sIGZhbHNlKTtcblxuICAgIGlmICh0aGlzLml0ZW1zLmV2ZXJ5KGl0ZW0gPT4gIWl0ZW0uJHNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY2lvbmEgdW1hIGxpbmhhIGRvICdwby10YWJsZScuXG4gICAqL1xuICBzZWxlY3RSb3dJdGVtKGl0ZW1mbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8ICgoaXRlbSkgPT4gYm9vbGVhbikpIHtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtZm4sIHRydWUpO1xuXG4gICAgaWYgKHRoaXMuaXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwZWxhIGV4Y2x1c8OjbyBkZSBpdGVucyBlbSBsb3RlLlxuICAgKiBDYXNvIGEgdGFiZWxhIGVzdGVqYSBleGVjdXRhbmRvIGEgcHJvcHJpZWRhZGUgYHAtc2VydmljZS1kZWxldGVgLCBzZXLDoSBuZWNlc3PDoXJpbyBleGNsdWlyIDEgaXRlbSBwb3IgdmV6LlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBgcC1zZXJ2aWNlLWRlbGV0ZWAgbWFzIHNlbSBhIHByb3ByaWVkYWRlIGBwLXNlcnZpY2UtYXBpYCwgc2Vyw6EgcmVzcG9uc2FiaWxpZGFkZSBkbyB1c3XDoXJpbyBvIHRyYXRhbWVudG9cbiAgICogYXDDs3MgYSByZXF1aXNpw6fDo28gREVMRVRFIHNlciBleGVjdXRhZGEuXG4gICAqXG4gICAqIENhc28gYSB0YWJlbGEgdXRpbGl6ZSBgcC1oZWlnaHRgIGUgZXN0ZWphIHNlbSBzZXJ2acOnbywgw6kgbmVjZXNzw6FyaW8gYSByZWF0cmlidWnDp8OjbyBkb3MgaXRlbnMgdXRpbGl6YW5kbyBvIGV2ZW50byBgKHAtZGVsZXRlLWl0ZW1zKWAsIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICo8cG8tdGFibGVcbiAgICogIChwLWRlbGV0ZS1pdGVtcyk9XCJpdGVtcyA9ICRldmVudFwiXG4gICAqID5cbiAgICo8L3BvLXRhYmxlPlxuICAgKiBgYGBcbiAgICovXG4gIGRlbGV0ZUl0ZW1zKCkge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgIGNvbnN0IG5ld0l0ZW1zRmlsdGVyZWQgPSBbLi4ubmV3SXRlbXNdLmZpbHRlcihpdGVtID0+ICFpdGVtLiRzZWxlY3RlZCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZURlbGV0ZUFwaSkge1xuICAgICAgdGhpcy5kZWxldGVJdGVtc0xvY2FsKG5ld0l0ZW1zLCBuZXdJdGVtc0ZpbHRlcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVJdGVtc1NlcnZpY2UobmV3SXRlbXNGaWx0ZXJlZCk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnksIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gIH1cblxuICBnZXRDZWxsRGF0YShyb3c6IGFueSwgY29sdW1uOiBQb1RhYmxlQ29sdW1uKTogYW55IHtcbiAgICBjb25zdCBhcnJheVByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgaWYgKGFycmF5UHJvcGVydHkubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgbmVzdGVkUHJvcGVydGllcyA9IGFycmF5UHJvcGVydHk7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9IHJvdztcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgbmVzdGVkUHJvcGVydGllcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BlcnR5XSB8fCB2YWx1ZVtwcm9wZXJ0eV0gPT09IDAgPyB2YWx1ZVtwcm9wZXJ0eV0gOiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4ucHJvcGVydHldO1xuICAgIH1cbiAgfVxuXG4gIGdldEJvb2xlYW5MYWJlbChyb3dWYWx1ZTogYW55LCBjb2x1bW5Cb29sZWFuOiBQb1RhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAocm93VmFsdWUgfHwgcm93VmFsdWUgPT09IGZhbHNlIHx8IHJvd1ZhbHVlID09PSAwKSB7XG4gICAgICByb3dWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xlYW4ocm93VmFsdWUpO1xuXG4gICAgICBpZiAoY29sdW1uQm9vbGVhbi5ib29sZWFuKSB7XG4gICAgICAgIHJldHVybiByb3dWYWx1ZSA/IGNvbHVtbkJvb2xlYW4uYm9vbGVhbi50cnVlTGFiZWwgfHwgJ1NpbScgOiBjb2x1bW5Cb29sZWFuLmJvb2xlYW4uZmFsc2VMYWJlbCB8fCAnTsOjbyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcm93VmFsdWUgPyAnU2ltJyA6ICdOw6NvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm93VmFsdWU7XG4gIH1cblxuICBnZXRDb2x1bW5JY29ucyhyb3c6IGFueSwgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgY29uc3Qgcm93SWNvbnMgPSB0aGlzLmdldENlbGxEYXRhKHJvdywgY29sdW1uKTtcblxuICAgIGlmIChjb2x1bW4uaWNvbnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0ljb25zKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZUN1c3RvbUljb25zKHJvd0ljb25zLCBjb2x1bW4uaWNvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEN1c3RvbUljb24ocm93SWNvbnMsIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd0ljb25zO1xuICB9XG5cbiAgZ2V0Q29sdW1uTGFiZWwocm93OiBhbnksIGNvbHVtbkxhYmVsOiBQb1RhYmxlQ29sdW1uKTogUG9UYWJsZUNvbHVtbkxhYmVsIHtcbiAgICByZXR1cm4gY29sdW1uTGFiZWwubGFiZWxzLmZpbmQobGFiZWxJdGVtID0+IHRoaXMuZ2V0Q2VsbERhdGEocm93LCBjb2x1bW5MYWJlbCkgPT09IGxhYmVsSXRlbS52YWx1ZSk7XG4gIH1cblxuICBnZXRTdWJ0aXRsZUNvbHVtbihyb3c6IGFueSwgc3VidGl0bGVDb2x1bW46IFBvVGFibGVDb2x1bW4pOiBQb1RhYmxlU3VidGl0bGVDb2x1bW4ge1xuICAgIHJldHVybiBzdWJ0aXRsZUNvbHVtbi5zdWJ0aXRsZXMuZmluZChzdWJ0aXRsZUl0ZW0gPT4gdGhpcy5nZXRDZWxsRGF0YShyb3csIHN1YnRpdGxlQ29sdW1uKSA9PT0gc3VidGl0bGVJdGVtLnZhbHVlKTtcbiAgfVxuXG4gIGlzU2hvd01hc3RlckRldGFpbChyb3cpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaGlkZURldGFpbCAmJlxuICAgICAgdGhpcy5uYW1lQ29sdW1uRGV0YWlsICYmXG4gICAgICByb3cuJHNob3dEZXRhaWwgJiZcbiAgICAgIHRoaXMuY29udGFpbnNNYXN0ZXJEZXRhaWwocm93KSAmJlxuICAgICAgIXRoaXMuaGFzUm93VGVtcGxhdGVcbiAgICApO1xuICB9XG5cbiAgaXNTaG93Um93VGVtcGxhdGUocm93LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudGFibGVSb3dUZW1wbGF0ZSAmJiB0aGlzLnRhYmxlUm93VGVtcGxhdGUucG9UYWJsZVJvd1RlbXBsYXRlU2hvdykge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVSb3dUZW1wbGF0ZS5wb1RhYmxlUm93VGVtcGxhdGVTaG93KHJvdywgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25DbGlja0xpbmsoZXZlbnQsIHJvdywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZVZpc2libGVDb2x1bW5zKGNvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmNoYW5nZVZpc2libGVDb2x1bW5zLmVtaXQoY29sdW1ucyk7XG4gIH1cblxuICBvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKHZhbHVlOiBBcnJheTxTdHJpbmc+KSB7XG4gICAgdGhpcy5jb2x1bW5SZXN0b3JlTWFuYWdlci5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uVmlzaWJsZUNvbHVtbnNDaGFuZ2UoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9vbHRpcE1vdXNlRW50ZXIoZXZlbnQ6IGFueSwgY29sdW1uPzogUG9UYWJsZUNvbHVtbiwgcm93PzogYW55KSB7XG4gICAgdGhpcy50b29sdGlwVGV4dCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPCBldmVudC50YXJnZXQuc2Nyb2xsV2lkdGggJiYgZXZlbnQudGFyZ2V0LmlubmVyVGV4dC50cmltKCkpIHtcbiAgICAgIHJldHVybiAodGhpcy50b29sdGlwVGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQpO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2hlY2tpbmdJZkNvbHVtbkhhc1Rvb2x0aXAoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHRvb2x0aXBNb3VzZUxlYXZlKCkge1xuICAgIHRoaXMudG9vbHRpcFRleHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0b2dnbGVQb3B1cChyb3csIHRhcmdldFJlZikge1xuICAgIHRoaXMucG9wdXBUYXJnZXQgPSB0YXJnZXRSZWY7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnBvUG9wdXBDb21wb25lbnQudG9nZ2xlKHJvdyk7XG4gIH1cblxuICB0cmFja0J5KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB2YWxpZGF0ZVRhYmxlQWN0aW9uKHJvdzogYW55LCB0YWJsZUFjdGlvbjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZUFjdGlvbi5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRhYmxlQWN0aW9uLmRpc2FibGVkKHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0YWJsZUFjdGlvbi5kaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5Db2x1bW5NYW5hZ2VyKCkge1xuICAgIHRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgPSBbLi4udGhpcy5jb2x1bW5zXTtcbiAgfVxuXG4gIG9uRmlsdGVyZWRJdGVtc0NoYW5nZShpdGVtczogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgdGhpcy5zb3J0QXJyYXkodGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHksIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZywgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgcmVtb3ZlIHVtIGl0ZW0gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAcGFyYW0geyBudW1iZXIgfCB7IGtleTogdmFsdWUgfSB9IGl0ZW0gw41uZGljZSBkYSBsaW5oYSBvdSBvIGl0ZW0gcXVlIHNlcsOhIHJlbW92aWRvLlxuICAgKiA+IEFvIHJlbW92ZXIgbyBpdGVtLCBhIGxpbmhhIHF1ZSBvIHJlcHJlc2VudGEgc2Vyw6EgZXhjbHXDrWRhIGRhIHRhYmVsYS5cbiAgICovXG4gIHJlbW92ZUl0ZW0oaXRlbTogbnVtYmVyIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoZmlsdGVySXRlbSA9PiBmaWx0ZXJJdGVtICE9PSBpdGVtKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGl0ZW07XG4gICAgICB0aGlzLml0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcXVlIGF0dWFsaXphIHVtIGl0ZW0gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAcGFyYW0geyBudW1iZXIgfCB7IGtleTogdmFsdWUgfSB9IGl0ZW0gw41uZGljZSBkYSBsaW5oYSBvdSBvIGl0ZW0gcXVlIHNlcsOhIGF0dWFsaXphZG8uXG4gICAqIEBwYXJhbSB7IHsga2V5OiB2YWx1ZSB9IH0gdXBkYXRlZEl0ZW0gSXRlbSBxdWUgZm9pIGF0dWFsaXphZG8uXG4gICAqID4gQW8gYXR1YWxpemFyIG8gaXRlbSwgYSBpbmZvcm1hw6fDo28gc2Vyw6EgYWx0ZXJhZGEgbmEgdGFiZWxhLlxuICAgKi9cbiAgdXBkYXRlSXRlbShpdGVtOiBudW1iZXIgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCB1cGRhdGVkSXRlbTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGl0ZW0sIDEsIHVwZGF0ZWRJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpbmRleEl0ZW0gPT4gaW5kZXhJdGVtID09PSBpdGVtKTtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluZGV4LCAxLCB1cGRhdGVkSXRlbSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8QXJyYXk8c3RyaW5nPj4pIHtcbiAgICBpZiAoIXRoaXMubWFpbkNvbHVtbnNbZXZlbnQuY3VycmVudEluZGV4XS5maXhlZCkge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubWFpbkNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG5cbiAgICAgIGlmICh0aGlzLmhpZGVDb2x1bW5zTWFuYWdlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5uZXdPcmRlckNvbHVtbnMgPSB0aGlzLm1haW5Db2x1bW5zO1xuICAgICAgICBjb25zdCBkZXRhaWwgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0eSA9PT0gJ2RldGFpbCcpWzBdO1xuXG4gICAgICAgIGlmIChkZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubmV3T3JkZXJDb2x1bW5zLnB1c2goZGV0YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV3T3JkZXJDb2x1bW5zLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5uZXdPcmRlckNvbHVtbnM7XG5cbiAgICAgICAgdGhpcy5vblZpc2libGVDb2x1bW5zQ2hhbmdlKHRoaXMubmV3T3JkZXJDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGVtcGxhdGUoY29sdW1uOiBQb1RhYmxlQ29sdW1uKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgY29uc3QgdGVtcGxhdGU6IFBvVGFibGVDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSA9IHRoaXMudGFibGVDb2x1bW5UZW1wbGF0ZXMuZmluZChcbiAgICAgIHRhYmxlQ29sdW1uVGVtcGxhdGUgPT4gdGFibGVDb2x1bW5UZW1wbGF0ZS50YXJnZXRQcm9wZXJ0eSA9PT0gY29sdW1uLnByb3BlcnR5XG4gICAgKTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBOw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIG8gdGVtcGxhdGUgcGFyYSBhIGNvbHVuYTogJHtjb2x1bW4ucHJvcGVydHl9LCBwb3IgZ2VudGlsZXphIGluZm9ybWUgYSBwcm9wcmllZGFkZSBbcC1wcm9wZXJ0eV1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXaWR0aENvbHVtbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aEFjdGlvbnNMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkFjdGlvbkxlZnQ/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwdWJsaWMgaGFzU29tZUZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZml4ZWQgPT09IHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKGhlaWdodCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChoZWlnaHQpO1xuICAgIHRoaXMuaGVpZ2h0VGFibGVDb250YWluZXIgPSB2YWx1ZSA/IHZhbHVlIC0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVpZ2h0VGFibGVWaXJ0dWFsID0gdGhpcy5oZWlnaHRUYWJsZUNvbnRhaW5lciA/IHRoaXMuaGVpZ2h0VGFibGVDb250YWluZXIgLSB0aGlzLml0ZW1TaXplIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2V0VGFibGVPcGFjaXR5KDEpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZlcmlmeUNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKCkge1xuICAgIGlmICh0aGlzLmhlaWdodCAmJiB0aGlzLnZlcmlmeUNoYW5nZUhlaWdodEluRm9vdGVyKCkpIHtcbiAgICAgIHRoaXMuZm9vdGVySGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpO1xuXG4gICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNJbmZpbml0ZVNjcm9sbCgpKSB7XG4gICAgICBpZiAodGhpcy50YWJsZVZpcnR1YWxTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPj0gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlSW5maW5pdGVTY3JvbGwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZXNBZnRlckRlbGV0ZShuZXdJdGVtc0ZpbHRlcmVkOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB0aGlzLnNldFNlbGVjdGVkTGlzdCgpO1xuICAgIHRoaXMubW9kYWxEZWxldGUuY2xvc2UoKTtcbiAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3ModGhpcy5saXRlcmFscy5kZWxldGVTdWNjZXNzZnVsKTtcbiAgICB0aGlzLmV2ZW50RGVsZXRlLmVtaXQobmV3SXRlbXNGaWx0ZXJlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlU2l6ZUxvYWRpbmcoKSB7XG4gICAgY29uc3QgdGFibGVIZWlnaHQgPSB0aGlzLnRhYmxlV3JhcHBlckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodDtcblxuICAgIGlmICh0YWJsZUhlaWdodCA8PSAxNTApIHtcbiAgICAgIHRoaXMuc2l6ZUxvYWRpbmcgPSAnc20nO1xuICAgIH0gZWxzZSBpZiAodGFibGVIZWlnaHQgPiAxNTAgJiYgdGFibGVIZWlnaHQgPCAyNjApIHtcbiAgICAgIHRoaXMuc2l6ZUxvYWRpbmcgPSAnbWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNpemVMb2FkaW5nID0gJ2xnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQ2hhbmdlc0l0ZW1zKCkge1xuICAgIGNvbnN0IGNoYW5nZXNJdGVtcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5pdGVtcyk7XG5cbiAgICBpZiAoY2hhbmdlc0l0ZW1zICYmIHRoaXMuc2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNJdGVtcyAmJiAhdGhpcy5oYXNDb2x1bW5zICYmIHRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja2luZ0lmQ29sdW1uSGFzVG9vbHRpcChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGNvbHVtbi50b29sdGlwICYmICF0aGlzLmNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gKHRoaXMudG9vbHRpcFRleHQgPSBjb2x1bW4udG9vbHRpcCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICBjb25zdCBjb2x1bW5MYWJlbCA9IHRoaXMuZ2V0Q29sdW1uTGFiZWwocm93LCBjb2x1bW4pO1xuICAgICAgcmV0dXJuICh0aGlzLnRvb2x0aXBUZXh0ID0gY29sdW1uTGFiZWw/LnRvb2x0aXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2VSZXNpemUoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlc2l6ZSk7XG4gICAgdGhpcy50aW1lb3V0UmVzaXplID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzaG93IHRoZSB0YWJsZVxuICAgICAgdGhpcy5zZXRUYWJsZU9wYWNpdHkoMSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUl0ZW1zTG9jYWwobmV3SXRlbXM6IEFycmF5PGFueT4sIG5ld0l0ZW1zRmlsdGVyZWQ6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtc0ZpbHRlcmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICBuZXdJdGVtc1xuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChpdGVtLiRzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlc0FmdGVyRGVsZXRlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICAgIHRoaXMub25GaWx0ZXJlZEl0ZW1zQ2hhbmdlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVJdGVtc1NlcnZpY2UobmV3SXRlbXNGaWx0ZXJlZDogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5hZGQoXG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmRlbGV0ZUl0ZW0odGhpcy5wYXJhbURlbGV0ZUFwaSwgdGhpcy5pdGVtc1NlbGVjdGVkWzBdW3RoaXMucGFyYW1EZWxldGVBcGldKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzU2VydmljZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMucGFyYW1zRmlsdGVyLFxuICAgICAgICAgICAgICBwYWdlU2l6ZTogbmV3SXRlbXNGaWx0ZXJlZC5sZW5ndGggKyAxLFxuICAgICAgICAgICAgICBwYWdlOiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5hZGQoXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcykuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUmVzcG9uc2VQcm9wZXJ0aWVzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtc0ZpbHRlcmVkO1xuICAgICAgICAgIHRoaXMuY2hhbmdlc0FmdGVyRGVsZXRlKG5ld0l0ZW1zRmlsdGVyZWQpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IodGhpcy5saXRlcmFscy5kZWxldGVBcGlFcnJvcik7XG4gICAgICAgICAgdGhpcy5tb2RhbERlbGV0ZS5jbG9zZSgpO1xuICAgICAgICAgIHRoaXMuZXZlbnREZWxldGUuZW1pdCh0aGlzLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ3VzdG9tSWNvbihyb3dJY29ucywgY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgY29uc3QgY3VzdG9tSWNvbiA9IGNvbHVtbi5pY29ucy5maW5kKGljb24gPT4gcm93SWNvbnMgPT09IGljb24udmFsdWUpO1xuICAgIHJldHVybiBjdXN0b21JY29uID8gW2N1c3RvbUljb25dIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWlnaHRUYWJsZUZvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUZvb3RlckVsZW1lbnQgPyB0aGlzLnRhYmxlRm9vdGVyRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IDA7XG4gIH1cblxuICBwcml2YXRlIGhhc0luZmluaXRlU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsICYmXG4gICAgICB0aGlzLmhhc0l0ZW1zICYmXG4gICAgICAhdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudCAmJlxuICAgICAgdGhpcy5oZWlnaHQgJiZcbiAgICAgIHRoaXMudGFibGVWaXJ0dWFsU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZUluZmluaXRlU2Nyb2xsKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsRXZlbnQkID0gdGhpcy5kZWZhdWx0U2VydmljZS5zY3JvbGxMaXN0ZW5lcih0aGlzLnRhYmxlVmlydHVhbFNjcm9sbC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50ID0gdGhpcy5zY3JvbGxFdmVudCQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2hvd01vcmVJbmZpbml0ZVNjcm9sbChldmVudCkpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ3VzdG9tSWNvbnMocm93SWNvbnM6IEFycmF5PHN0cmluZz4sIGN1c3RvbUljb25zOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3QgbWVyZ2VkSWNvbnMgPSBbXTtcblxuICAgIHJvd0ljb25zLmZvckVhY2goY29sdW1uVmFsdWUgPT4ge1xuICAgICAgY29uc3QgZm91bmRDdXN0b21JY29uID0gY3VzdG9tSWNvbnMuZmluZChcbiAgICAgICAgY3VzdG9tSWNvbiA9PiBjb2x1bW5WYWx1ZSA9PT0gY3VzdG9tSWNvbi5pY29uIHx8IGNvbHVtblZhbHVlID09PSBjdXN0b21JY29uLnZhbHVlXG4gICAgICApO1xuICAgICAgZm91bmRDdXN0b21JY29uID8gbWVyZ2VkSWNvbnMucHVzaChmb3VuZEN1c3RvbUljb24pIDogbWVyZ2VkSWNvbnMucHVzaChjb2x1bW5WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVyZ2VkSWNvbnM7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJsZU9wYWNpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGFibGVPcGFjaXR5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNoYW5nZUhlaWdodEluRm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLmZvb3RlckhlaWdodCAhPT0gdGhpcy5nZXRIZWlnaHRUYWJsZUZvb3RlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVTZWxlY3QoY29tcGFyZSwgc2VsZWN0VmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIGNvbXBhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IGNvbXBhcmUpIHtcbiAgICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IHNlbGVjdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoY29tcGFyZShpdGVtKSkge1xuICAgICAgICAgIGl0ZW0uJHNlbGVjdGVkID0gc2VsZWN0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBvLXRhYmxlLWFjdGlvbnNcIj5cbiAgPGRpdlxuICAgICNjb2x1bW5CYXRjaEFjdGlvbnNcbiAgICAqbmdJZj1cImhhc1ZhbGlkQ29sdW1ucyAmJiBpdGVtc1NlbGVjdGVkLmxlbmd0aCA+IDAgJiYgIWhpZGVCYXRjaEFjdGlvbnNcIlxuICAgIGNsYXNzPVwicG8tdGFibGUtYWN0aW9ucy1iYXRjaC1hY3Rpb25zXCJcbiAgPlxuICAgIDxkaXYgW25nUGx1cmFsXT1cIml0ZW1zU2VsZWN0ZWQubGVuZ3RoXCIgY2xhc3M9XCJwby10YWJsZS1hY3Rpb25zLWJhdGNoLWFjdGlvbnNfX2xhYmVsXCI+XG4gICAgICA8c3Ryb25nPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiPTBcIj57eyBsaXRlcmFscy5ub0l0ZW0gfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbmdQbHVyYWxDYXNlPVwiPTFcIj57eyBsaXRlcmFscy5vbmVJdGVtIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nUGx1cmFsQ2FzZT1cIm90aGVyXCI+e3sgaXRlbXNTZWxlY3RlZC5sZW5ndGggfX0ge3sgbGl0ZXJhbHMubXVsdGlwbGVJdGVtcyB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby10YWJsZS1hY3Rpb25zLWJhdGNoLWFjdGlvbnNfX2J1dHRvbnNcIj5cbiAgICAgIDxwby1idXR0b25cbiAgICAgICAgcC1pY29uPVwicG8taWNvbi1kZWxldGVcIlxuICAgICAgICBbcC1kYW5nZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtwLWRpc2FibGVkXT1cIml0ZW1zU2VsZWN0ZWQubGVuZ3RoID4gMSAmJiBzZXJ2aWNlRGVsZXRlQXBpICE9PSB1bmRlZmluZWRcIlxuICAgICAgICBbcC1sYWJlbF09XCJsaXRlcmFscy5kZWxldGVcIlxuICAgICAgICAocC1jbGljayk9XCJtb2RhbERlbGV0ZS5vcGVuKClcIlxuICAgICAgPjwvcG8tYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNjb2x1bW5NYW5hZ2VyICpuZ0lmPVwiaGFzVmFsaWRDb2x1bW5zICYmICFoaWRlQ29sdW1uc01hbmFnZXJcIiBjbGFzcz1cInBvLXRhYmxlLWFjdGlvbnMtY29sdW1uLW1hbmFnZXJcIj5cbiAgICA8cG8tYnV0dG9uXG4gICAgICAjY29sdW1uTWFuYWdlclRhcmdldFxuICAgICAgcC1pY29uPVwicG8taWNvbi1zZXR0aW5nc1wiXG4gICAgICBwLWtpbmQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICBwLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgIFtwLWFyaWEtbGFiZWxdPVwibGl0ZXJhbHMuY29sdW1uc01hbmFnZXJcIlxuICAgICAgW3AtdG9vbHRpcF09XCJsaXRlcmFscy5jb2x1bW5zTWFuYWdlclwiXG4gICAgICAocC1jbGljayk9XCJvbk9wZW5Db2x1bW5NYW5hZ2VyKClcIlxuICAgID48L3BvLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIiFoaWRlVGFibGVTZWFyY2ggJiYgaGFzVmFsaWRDb2x1bW5zXCIgY2xhc3M9XCJwby10YWJsZS1zZWFyY2hcIj5cbiAgICA8cG8tc2VhcmNoXG4gICAgICBbcC1pdGVtc109XCJpdGVtc1wiXG4gICAgICBbcC1maWx0ZXIta2V5c109XCJmaWx0ZXJlZENvbHVtbnNcIlxuICAgICAgW3AtZmlsdGVyLXR5cGVdPVwiZmlsdGVyVHlwZVwiXG4gICAgICAocC1maWx0ZXJlZC1pdGVtcy1jaGFuZ2UpPVwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3BvLXNlYXJjaD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxwby1jb250YWluZXIgKm5nSWY9XCJjb250YWluZXI7IGVsc2UgdGFibGVDb250YWluZXJUZW1wbGF0ZVwiIHAtbm8tcGFkZGluZz5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlQ29udGFpbmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvcG8tY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlQ29udGFpbmVyVGVtcGxhdGU+XG4gIDxkaXYgW2NsYXNzLnBvLXRhYmxlLWNvbnRhaW5lci1zdGlja3ldPVwibG9hZGluZ1wiPlxuICAgIDxwby1sb2FkaW5nLW92ZXJsYXkgKm5nSWY9XCJsb2FkaW5nXCIgW3AtdGV4dF09XCJsaXRlcmFscy5sb2FkaW5nRGF0YVwiIFtwLXNpemVdPVwic2l6ZUxvYWRpbmdcIj48L3BvLWxvYWRpbmctb3ZlcmxheT5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtbWFpbi1jb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI3RhYmxlV3JhcHBlclxuICAgICAgICBjbGFzcz1cInBvLXRhYmxlLXdyYXBwZXJcIlxuICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZpeGVkLWNvbHVtbnMtcGl4ZWxzXT1cImFsbENvbHVtbnNXaWR0aFBpeGVsc1wiXG4gICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cInRhYmxlT3BhY2l0eVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJoZWlnaHRcIiBjbGFzcz1cInBvLXRhYmxlLWNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0VGFibGVDb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2ICNwb1RhYmxlVGJvZHkgY2xhc3M9XCJwby10YWJsZS1jb250YWluZXItZml4ZWQtaW5uZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVZpcnR1YWxTY3JvbGxUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhlaWdodFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1mb290ZXJcIiAqbmdJZj1cImhhc0Zvb3RlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzdWJ0aXRsZUNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICAgIDxwby10YWJsZS1zdWJ0aXRsZS1mb290ZXIgW3AtbGl0ZXJhbHNdPVwibGl0ZXJhbHNcIiBbcC1zdWJ0aXRsZXNdPVwiY29sdW1uLnN1YnRpdGxlc1wiPiA8L3BvLXRhYmxlLXN1YnRpdGxlLWZvb3Rlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNob3cgTW9yZSBCdXR0b24gLS0+XG48ZGl2XG4gICpuZ0lmPVwiIWluZmluaXRlU2Nyb2xsXCJcbiAgY2xhc3M9XCJwby1yb3cgcG8tdGFibGUtZm9vdGVyLXNob3ctbW9yZVwiXG4gIFtjbGFzcy5wby1pbnZpc2libGVdPVwic2hvd01vcmUub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCAmJiAhaGFzU2VydmljZVwiXG4gICN0YWJsZUZvb3RlclxuPlxuICA8cG8tYnV0dG9uXG4gICAgY2xhc3M9XCJwby1vZmZzZXQteGwtNCBwby1vZmZzZXQtbGctNCBwby1vZmZzZXQtbWQtMyBwby1sZy00IHBvLW1kLTZcIlxuICAgIFtwLWRpc2FibGVkXT1cInNob3dNb3JlRGlzYWJsZWRcIlxuICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLmxvYWRNb3JlRGF0YVwiXG4gICAgW3AtbG9hZGluZ109XCJsb2FkaW5nU2hvd01vcmVcIlxuICAgIChwLWNsaWNrKT1cIm9uU2hvd01vcmUoKVwiXG4gID5cbiAgPC9wby1idXR0b24+XG48L2Rpdj5cblxuPCEtLSBUYWJsZSBkZWZhdWx0LS0+XG48bmctdGVtcGxhdGUgI3RhYmxlVGVtcGxhdGU+XG4gIDx0YWJsZVxuICAgIGNsYXNzPVwicG8tdGFibGVcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdwby10YWJsZS1pbnRlcmFjdGl2ZSc6IHNlbGVjdGFibGUgfHwgc29ydCxcbiAgICAgICdwby10YWJsZS1zZWxlY3RhYmxlJzogc2VsZWN0YWJsZSxcbiAgICAgICdwby10YWJsZS1zdHJpcGVkJzogc3RyaXBlZCxcbiAgICAgICdwby10YWJsZS1kYXRhLWZpeGVkLWNvbHVtbnMnOiBhcHBseUZpeGVkQ29sdW1ucygpLFxuICAgICAgJ3BvLXRhYmxlLXRleHQtd3JhcC1lbmFibGVkJzogdGV4dFdyYXBcbiAgICB9XCJcbiAgICBbYXR0ci5wLXNwYWNpbmddPVwic3BhY2luZ1wiXG4gID5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8taG92ZXInOiBoaWRlU2VsZWN0QWxsLCAncG8tdGFibGUtY29sdW1uLWRyYWcnOiB0aGlzLmlzRHJhZ2dhYmxlIH1cIlxuICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyXT1cIiFoZWlnaHRcIlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCJoYXNTZWxlY3RhYmxlQ29sdW1uXCJcbiAgICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaGlkZVNlbGVjdEFsbCA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tc2VsZWN0YWJsZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5wby10YWJsZS1oZWFkZXItZml4ZWQtaW5uZXJdPVwiaGVpZ2h0XCI+XG4gICAgICAgICAgICA8cG8tY2hlY2tib3hcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAocC1jaGFuZ2UpPVwic2VsZWN0QWxsUm93cygpXCJcbiAgICAgICAgICAgICAgW3AtY2hlY2tib3hWYWx1ZV09XCJzZWxlY3RBbGwgPT09IG51bGwgPyAnbWl4ZWQnIDogc2VsZWN0QWxsXCJcbiAgICAgICAgICAgID48L3BvLWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiKGhhc01hc3RlckRldGFpbENvbHVtbiB8fCBoYXNSb3dUZW1wbGF0ZSkgJiYgIWhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHRcIlxuICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWNvbHVtbiBwby10YWJsZS1oZWFkZXItbWFzdGVyLWRldGFpbFwiXG4gICAgICAgID48L3RoPlxuXG4gICAgICAgIDwhLS0gQ29sdW5hIGNyaWFkYSBwYXJhIGNhc28gYXMgYcOnw7VlcyBmaXF1ZW0gbm8gbGFkbyBlc3F1ZXJkbyAtLT5cbiAgICAgICAgPHRoXG4gICAgICAgICAgI2NvbHVtbkFjdGlvbkxlZnRcbiAgICAgICAgICAqbmdJZj1cIiFhY3Rpb25SaWdodCAmJiAodmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMSB8fCBpc1NpbmdsZUFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItbWFzdGVyLWRldGFpbF09XCIhaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc2luZ2xlLWFjdGlvbl09XCJpc1NpbmdsZUFjdGlvblwiXG4gICAgICAgID48L3RoPlxuXG4gICAgICAgIDx0aCAqbmdJZj1cIiFoYXNNYWluQ29sdW1uc1wiICNub0NvbHVtbnNIZWFkZXIgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItY29sdW1uIHBvLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlaWdodDsgdGhlbiBub0NvbHVtbnNXaXRoSGVpZ2h0OyBlbHNlIG5vQ29sdW1uc1dpdGhvdXRIZWlnaHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwidGhpcy5pc0RyYWdnYWJsZSB8fCBoYXNTb21lRml4ZWQoKTsgdGhlbiB0YWJsZURlZmF1bHRUaERyYWdEcm9wOyBlbHNlIHRhYmxlRGVmYXVsdFRoRGVmYXVsdFwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVEZWZhdWx0VGhEcmFnRHJvcD5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbWFpbkNvbHVtbnM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZWxsaXBzaXMgcC1lbGVtZW50IHBvLWZyb3plbi1jb2x1bW5cIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXBvLXRhYmxlLWNvbHVtbi1uYW1lXT1cImNvbHVtbi5sYWJlbCB8fCAoY29sdW1uLnByb3BlcnR5IHwgdGl0bGVjYXNlKSB8IGxvd2VyY2FzZVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tY2xpY2thYmxlXT1cIihzb3J0ICYmIGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UpIHx8IGhhc1NlcnZpY2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAncG8tdGFibGUtaGVhZGVyLXNvcnRlZCc6XG4gICAgICAgICAgICAgICAgc29ydCAmJlxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNvcnRlZENvbHVtbj8ucHJvcGVydHkpID09PSBKU09OLnN0cmluZ2lmeShjb2x1bW4pICYmXG4gICAgICAgICAgICAgICAgKHNvcnRlZENvbHVtbi5hc2NlbmRpbmcgfHwgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmcpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc3VidGl0bGVdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1kcmFnLWJveF09XCJ0aGlzLmlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbilcIlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImNvbHVtbi5maXhlZCA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgW3BGcm96ZW5Db2x1bW5dPVwiY29sdW1uLmZpeGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZpeGVkLWlubmVyXT1cImhlaWdodFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1yaWdodF09XCJjb2x1bW4udHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtY2VudGVyXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuaXNEcmFnZ2FibGUgJiYgIWNvbHVtbi5maXhlZFwiPlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiNlwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiNlwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI5XCIgY3k9XCIxMlwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMThcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTVcIiBjeT1cIjE4XCIgcj1cIjJcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRIZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0YWJsZURlZmF1bHRUaERlZmF1bHQ+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG1haW5Db2x1bW5zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWVsbGlwc2lzIHAtZWxlbWVudCBwby1mcm96ZW4tY29sdW1uXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wby10YWJsZS1jb2x1bW4tbmFtZV09XCJjb2x1bW4ubGFiZWwgfHwgKGNvbHVtbi5wcm9wZXJ0eSB8IHRpdGxlY2FzZSkgfCBsb3dlcmNhc2VcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWNsaWNrYWJsZV09XCIoc29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB8fCBoYXNTZXJ2aWNlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3BvLXRhYmxlLWhlYWRlci1zb3J0ZWQnOlxuICAgICAgICAgICAgICAgIHNvcnQgJiZcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJlxuICAgICAgICAgICAgICAgIChzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nIHx8ICFzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXN1YnRpdGxlXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbilcIlxuICAgICAgICAgICAgW3BGcm96ZW5Db2x1bW5dPVwiY29sdW1uLmZpeGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZpeGVkLWlubmVyXT1cImhlaWdodFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1yaWdodF09XCJjb2x1bW4udHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtY2VudGVyXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRIZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cImhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHQgJiYgKGhhc1Zpc2libGVBY3Rpb25zIHx8IGhpZGVDb2x1bW5zTWFuYWdlcilcIlxuICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWNvbHVtbiBwby10YWJsZS1oZWFkZXItbWFzdGVyLWRldGFpbFwiXG4gICAgICAgID48L3RoPlxuXG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiaGFzVmlzaWJsZUFjdGlvbnMgJiYgYWN0aW9uUmlnaHQgJiYgKHZpc2libGVBY3Rpb25zLmxlbmd0aCA+IDEgfHwgaXNTaW5nbGVBY3Rpb24pXCJcbiAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXNpbmdsZS1hY3Rpb25dPVwiaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItYWN0aW9uc109XCIhaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICA+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keSBjbGFzcz1cInBvLXRhYmxlLWdyb3VwLXJvd1wiICpuZ0lmPVwiIWhhc0l0ZW1zIHx8ICFoYXNNYWluQ29sdW1uc1wiPlxuICAgICAgPHRyIGNsYXNzPVwicG8tdGFibGUtcm93IHBvLXRhYmxlLXJvdy1uby1kYXRhXCI+XG4gICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2x1bW5Db3VudFwiIGNsYXNzPVwicG8tdGFibGUtbm8tZGF0YSBwby10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuPiB7eyBsaXRlcmFscy5ub0RhdGEgfX0gPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc01haW5Db2x1bW5zXCI+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJwby10YWJsZS1ncm91cC1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGZpbHRlcmVkSXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCI+XG4gICAgICAgIDx0ciBjbGFzcz1cInBvLXRhYmxlLXJvd1wiIFtjbGFzcy5wby10YWJsZS1yb3ctYWN0aXZlXT1cInJvdy4kc2VsZWN0ZWQgfHwgKHJvdy4kc2VsZWN0ZWQgPT09IG51bGwgJiYgc2VsZWN0YWJsZSlcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbmdsZVNlbGVjdCA/IGlucHV0UmFkaW8gOiBpbnB1dENoZWNrYm94OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8IS0tIFZhbGlkYSBzZSBhIG9yaWdlbSBkbyBkZXRhaWwgw6kgcGVsbyBpbnB1dCBkbyBwby10YWJsZSAtLT5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uTWFzdGVyRGV0YWlsICYmICFoaWRlRGV0YWlsICYmICFoYXNSb3dUZW1wbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1kZXRhaWwtdG9nZ2xlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZXRhaWwocm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBvVGFibGVDb2x1bW5EZXRhaWxcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPCEtLSBDb2x1bmEgY29tIGFzIGHDp8O1ZXMgbmEgZXNxdWVyZGEgKHBhZHLDo28pLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdJZj1cIiFhY3Rpb25SaWdodCAmJiAodmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMSB8fCBpc1NpbmdsZUFjdGlvbilcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiQWN0aW9uc0NvbHVtblRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8IS0tIFZhbGlkYSBzZSBhIG9yaWdlbSBkbyBkZXRhaWwgw6kgcGVsYSBkaXJldGl2YSAtLT5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzUm93VGVtcGxhdGUgJiYgIWhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsLXRvZ2dsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtY29sdW1uXT1cImNvbHVtbi50eXBlICE9PSAnaWNvbidcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1yaWdodF09XCJjb2x1bW4udHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1jZW50ZXJdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1pY29uc109XCJjb2x1bW4udHlwZSA9PT0gJ2ljb24nXCJcbiAgICAgICAgICAgIFtwRnJvemVuQ29sdW1uXT1cImNvbHVtbi5maXhlZFwiXG4gICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwby1mcm96ZW4tY29sdW1uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzQ29sb3Iocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYXNTZWxlY3RhYmxlUm93KCkgPyBzZWxlY3RSb3cocm93KSA6ICdqYXZhc2NyaXB0OjsnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWNlbGwgcG8tdGFibGUtYm9keS1lbGxpcHNpcyBub3RyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiXG4gICAgICAgICAgICAgIFtwLXRvb2x0aXBdPVwidG9vbHRpcFRleHRcIlxuICAgICAgICAgICAgICBbcC1hcHBlbmQtaW4tYm9keV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcE1vdXNlRW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJ0b29sdGlwTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjb2x1bW5UZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0VGVtcGxhdGUoY29sdW1uKTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGdldENlbGxEYXRhKHJvdywgY29sdW1uKSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2NlbGxUZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDZWxsVGVtcGxhdGU/LnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Qm9vbGVhbkxhYmVsKGdldENlbGxEYXRhKHJvdywgY29sdW1uKSwgY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfCBjdXJyZW5jeTogY29sdW1uLmZvcm1hdCA6ICdzeW1ib2wnIDogJzEuMi0yJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldENlbGxEYXRhKHJvdywgY29sdW1uKSB8IGRhdGU6IGNvbHVtbi5mb3JtYXQgfHwgJ2RkL01NL3l5eXknIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgcG9fdGltZTogY29sdW1uLmZvcm1hdCB8fCAnSEg6bW06c3MuZmZmZmZmJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfCBkYXRlOiBjb2x1bW4uZm9ybWF0IHx8ICdkZC9NTS95eXl5IEhIOm1tOnNzJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgICAgICAge3sgZm9ybWF0TnVtYmVyKGdldENlbGxEYXRhKHJvdywgY29sdW1uKSwgY29sdW1uLmZvcm1hdCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxwby10YWJsZS1jb2x1bW4tbGlua1xuICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGluaydcIlxuICAgICAgICAgICAgICAgIFtwLWFjdGlvbl09XCJjb2x1bW4uYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJjaGVja0Rpc2FibGVkKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW3AtbGlua109XCJyb3dbY29sdW1uLmxpbmtdXCJcbiAgICAgICAgICAgICAgICBbcC1yb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICBbcC12YWx1ZV09XCJnZXRDZWxsRGF0YShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrTGluaygkZXZlbnQsIHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wby10YWJsZS1jb2x1bW4tbGluaz5cblxuICAgICAgICAgICAgICA8cG8tdGFibGUtY29sdW1uLWljb25cbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCJcbiAgICAgICAgICAgICAgICBbcC1jb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICBbcC1pY29uc109XCJnZXRDb2x1bW5JY29ucyhyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtwLXJvd109XCJyb3dcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcG8tdGFibGUtY29sdW1uLWljb24+XG5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidzdWJ0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICA8cG8tdGFibGUtc3VidGl0bGUtY2lyY2xlIFtwLXN1YnRpdGxlXT1cImdldFN1YnRpdGxlQ29sdW1uKHJvdywgY29sdW1uKVwiPjwvcG8tdGFibGUtc3VidGl0bGUtY2lyY2xlPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1sYWJlbCBbcC12YWx1ZV09XCJnZXRDb2x1bW5MYWJlbChyb3csIGNvbHVtbilcIj4gPC9wby10YWJsZS1jb2x1bW4tbGFiZWw+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD57eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImhhc1Jvd1RlbXBsYXRlV2l0aEFycm93RGlyZWN0aW9uUmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsLXRvZ2dsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDwhLS0gQ29sdW5hIGRlIGHDp29lcyBuYSBkaXJlaXRhIC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25SaWdodFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJBY3Rpb25zQ29sdW1uVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8dHIgKm5nSWY9XCJoYXNNYWluQ29sdW1ucyAmJiBoYXNSb3dUZW1wbGF0ZSAmJiByb3cuJHNob3dEZXRhaWwgJiYgaXNTaG93Um93VGVtcGxhdGUocm93LCByb3dJbmRleClcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJwby10YWJsZS1yb3ctdGVtcGxhdGUtY29udGFpbmVyXCIgW2NvbFNwYW5dPVwiY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWxcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVJvd1RlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8dHIgKm5nSWY9XCJoYXNNYWluQ29sdW1ucyAmJiBpc1Nob3dNYXN0ZXJEZXRhaWwocm93KVwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1kZXRhaWxcIiBbY29sU3Bhbl09XCJjb2x1bW5Db3VudEZvck1hc3RlckRldGFpbFwiPlxuICAgICAgICAgICAgPHBvLXRhYmxlLWRldGFpbFxuICAgICAgICAgICAgICBbcC1zZWxlY3RhYmxlXT1cInNlbGVjdGFibGUgJiYgIWRldGFpbEhpZGVTZWxlY3RcIlxuICAgICAgICAgICAgICBbcC1kZXRhaWxdPVwiY29sdW1uTWFzdGVyRGV0YWlsLmRldGFpbFwiXG4gICAgICAgICAgICAgIFtwLWl0ZW1zXT1cInJvd1tuYW1lQ29sdW1uRGV0YWlsXVwiXG4gICAgICAgICAgICAgIChwLXNlbGVjdC1yb3cpPVwic2VsZWN0RGV0YWlsUm93KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wby10YWJsZS1kZXRhaWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGFibGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRhYmxlIHdpdGggdmlydHVhbCBzY3JvbGwgLS0+XG48bmctdGVtcGxhdGUgI3RhYmxlVmlydHVhbFNjcm9sbFRlbXBsYXRlPlxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI3RhYmxlVmlydHVhbFNjcm9sbFxuICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRUYWJsZUNvbnRhaW5lclwiXG4gICAgW21pbkJ1ZmZlclB4XT1cImhlaWdodFRhYmxlQ29udGFpbmVyIDwgMTAwID8gMTAwIDogaGVpZ2h0VGFibGVDb250YWluZXJcIlxuICAgIFttYXhCdWZmZXJQeF09XCJoZWlnaHRUYWJsZUNvbnRhaW5lciA8IDIwMCA/IDIwMCA6IGhlaWdodFRhYmxlQ29udGFpbmVyXCJcbiAgPlxuICAgIDx0YWJsZVxuICAgICAgY2xhc3M9XCJwby10YWJsZVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdwby10YWJsZS1pbnRlcmFjdGl2ZSc6IHNlbGVjdGFibGUgfHwgc29ydCxcbiAgICAgICAgJ3BvLXRhYmxlLXNlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICAgICAncG8tdGFibGUtc3RyaXBlZCc6IHN0cmlwZWQsXG4gICAgICAgICdwby10YWJsZS1kYXRhLWZpeGVkLWNvbHVtbnMnOiBhcHBseUZpeGVkQ29sdW1ucygpLFxuICAgICAgICAncG8tdGFibGUtdGV4dC13cmFwLWVuYWJsZWQnOiB0ZXh0V3JhcFxuICAgICAgfVwiXG4gICAgICBbYXR0ci5wLXNwYWNpbmddPVwic3BhY2luZ1wiXG4gICAgPlxuICAgICAgPHRoZWFkIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLXN0aWNreVwiIFtzdHlsZS50b3BdPVwiaW52ZXJzZU9mVHJhbnNsYXRpb25cIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlcl09XCIhaGVpZ2h0XCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VsZWN0YWJsZUNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaGlkZVNlbGVjdEFsbCA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1zZWxlY3RhYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5wby10YWJsZS1oZWFkZXItZml4ZWQtaW5uZXJdPVwiaGVpZ2h0XCI+XG4gICAgICAgICAgICAgIDxwby1jaGVja2JveFxuICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgIChwLWNoYW5nZSk9XCJzZWxlY3RBbGxSb3dzKClcIlxuICAgICAgICAgICAgICAgIFtwLWNoZWNrYm94VmFsdWVdPVwic2VsZWN0QWxsID09PSBudWxsID8gJ21peGVkJyA6IHNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgID48L3BvLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgKm5nSWY9XCIoaGFzTWFzdGVyRGV0YWlsQ29sdW1uIHx8IGhhc1Jvd1RlbXBsYXRlKSAmJiAhaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICAgID48L3RoPlxuXG4gICAgICAgICAgPCEtLSBDb2x1bmEgY3JpYWRhIHBhcmEgY2FzbyBhcyBhw6fDtWVzIGZpcXVlbSBubyBsYWRvIGVzcXVlcmRvIC0tPlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgI2NvbHVtbkFjdGlvbkxlZnRcbiAgICAgICAgICAgICpuZ0lmPVwiIWFjdGlvblJpZ2h0ICYmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxIHx8IGlzU2luZ2xlQWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxdPVwiIWlzU2luZ2xlQWN0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc2luZ2xlLWFjdGlvbl09XCJpc1NpbmdsZUFjdGlvblwiXG4gICAgICAgICAgPjwvdGg+XG5cbiAgICAgICAgICA8dGggKm5nSWY9XCIhaGFzTWFpbkNvbHVtbnNcIiAjbm9Db2x1bW5zSGVhZGVyIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWNvbHVtbiBwby10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlaWdodDsgdGhlbiBub0NvbHVtbnNXaXRoSGVpZ2h0OyBlbHNlIG5vQ29sdW1uc1dpdGhvdXRIZWlnaHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2FibGUgfHwgaGFzU29tZUZpeGVkKCk7XG4gICAgICAgICAgICAgIHRoZW4gdGFibGVWaXJ0dWFsU2Nyb2xsVGhEcmFnRHJvcDtcbiAgICAgICAgICAgICAgZWxzZSB0YWJsZVZpcnR1YWxTY3JvbGxUaERlZmF1bHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVWaXJ0dWFsU2Nyb2xsVGhEcmFnRHJvcD5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG1haW5Db2x1bW5zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZWxsaXBzaXMgcC1lbGVtZW50IHBvLWZyb3plbi1jb2x1bW5cIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtcG8tdGFibGUtY29sdW1uLW5hbWVdPVwiY29sdW1uLmxhYmVsIHx8IChjb2x1bW4ucHJvcGVydHkgfCB0aXRsZWNhc2UpIHwgbG93ZXJjYXNlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLWNsaWNrYWJsZV09XCIoc29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlKSB8fCBoYXNTZXJ2aWNlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdwby10YWJsZS1oZWFkZXItc29ydGVkJzpcbiAgICAgICAgICAgICAgICAgIHNvcnQgJiZcbiAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNvcnRlZENvbHVtbj8ucHJvcGVydHkpID09PSBKU09OLnN0cmluZ2lmeShjb2x1bW4pICYmXG4gICAgICAgICAgICAgICAgICAoc29ydGVkQ29sdW1uLmFzY2VuZGluZyB8fCAhc29ydGVkQ29sdW1uLmFzY2VuZGluZylcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ3dpZHRoJzogIWhhc0l0ZW1zID8gJzEwMCUnIDogYXBwbHlGaXhlZENvbHVtbnMoKSA/IGNvbHVtbi53aWR0aCA6ICdhdXRvJyB9XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1zdWJ0aXRsZV09XCJjb2x1bW4udHlwZSA9PT0gJ3N1YnRpdGxlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tZHJhZy1ib3hdPVwidGhpcy5pc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbilcIlxuICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImNvbHVtbi5maXhlZCA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICBbcEZyb3plbkNvbHVtbl09XCJjb2x1bW4uZml4ZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1maXhlZC1pbm5lcl09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1yaWdodF09XCJjb2x1bW4udHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZmxleC1jZW50ZXJdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuaXNEcmFnZ2FibGUgJiYgIWNvbHVtbi5maXhlZFwiPlxuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiNlwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCI2XCIgcj1cIjJcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNVwiIGN5PVwiMTJcIiByPVwiMlwiIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI5XCIgY3k9XCIxOFwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1XCIgY3k9XCIxOFwiIHI9XCIyXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0YWJsZVZpcnR1YWxTY3JvbGxUaERlZmF1bHQ+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWVsbGlwc2lzIHAtZWxlbWVudCBwby1mcm96ZW4tY29sdW1uIGV4YW1wbGUtYm94XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBvLXRhYmxlLWNvbHVtbi1uYW1lXT1cImNvbHVtbi5sYWJlbCB8fCAoY29sdW1uLnByb3BlcnR5IHwgdGl0bGVjYXNlKSB8IGxvd2VyY2FzZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiKHNvcnQgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgfHwgaGFzU2VydmljZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAncG8tdGFibGUtaGVhZGVyLXNvcnRlZCc6XG4gICAgICAgICAgICAgICAgICBzb3J0ICYmXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJlxuICAgICAgICAgICAgICAgICAgKHNvcnRlZENvbHVtbi5hc2NlbmRpbmcgfHwgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmcpXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aCc6ICFoYXNJdGVtcyA/ICcxMDAlJyA6IGFwcGx5Rml4ZWRDb2x1bW5zKCkgPyBjb2x1bW4ud2lkdGggOiAnYXV0bycgfVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItc3VidGl0bGVdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgW3BGcm96ZW5Db2x1bW5dPVwiY29sdW1uLmZpeGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZsZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1oZWFkZXItZml4ZWQtaW5uZXJdPVwiaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWZsZXgtY2VudGVyXT1cImNvbHVtbi50eXBlID09PSAnc3VidGl0bGUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50SGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodCAmJiAoaGFzVmlzaWJsZUFjdGlvbnMgfHwgaGlkZUNvbHVtbnNNYW5hZ2VyKVwiXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWhlYWRlci1jb2x1bW4gcG8tdGFibGUtaGVhZGVyLW1hc3Rlci1kZXRhaWxcIlxuICAgICAgICAgID48L3RoPlxuXG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImhhc1Zpc2libGVBY3Rpb25zICYmIGFjdGlvblJpZ2h0ICYmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxIHx8IGlzU2luZ2xlQWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLXNpbmdsZS1hY3Rpb25dPVwiaXNTaW5nbGVBY3Rpb25cIlxuICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1hY3Rpb25zXT1cIiFpc1NpbmdsZUFjdGlvblwiXG4gICAgICAgICAgPjwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuXG4gICAgICA8dGJvZHkgY2xhc3M9XCJwby10YWJsZS1ncm91cC1yb3dcIiAqbmdJZj1cIiFoYXNJdGVtcyB8fCAhaGFzTWFpbkNvbHVtbnNcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwicG8tdGFibGUtcm93IHBvLXRhYmxlLXJvdy1uby1kYXRhXCI+XG4gICAgICAgICAgPHRkIFtjb2xTcGFuXT1cImNvbHVtbkNvdW50XCIgY2xhc3M9XCJwby10YWJsZS1uby1kYXRhIHBvLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgbGl0ZXJhbHMubm9EYXRhIH19IDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc01haW5Db2x1bW5zXCI+XG4gICAgICAgIDx0Ym9keVxuICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtZ3JvdXAtcm93XCJcbiAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZmlsdGVyZWRJdGVtczsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtcm93LWFjdGl2ZV09XCJyb3cuJHNlbGVjdGVkIHx8IChyb3cuJHNlbGVjdGVkID09PSBudWxsICYmIHNlbGVjdGFibGUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2luZ2xlU2VsZWN0ID8gaW5wdXRSYWRpbyA6IGlucHV0Q2hlY2tib3g7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgIDwhLS0gVmFsaWRhIHNlIGEgb3JpZ2VtIGRvIGRldGFpbCDDqSBwZWxvIGlucHV0IGRvIHBvLXRhYmxlIC0tPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uTWFzdGVyRGV0YWlsICYmICFoaWRlRGV0YWlsICYmICFoYXNSb3dUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVuYSBjb20gYXMgYcOnw7VlcyBuYSBlc3F1ZXJkYSAocGFkcsOjbyktLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdJZj1cIiFhY3Rpb25SaWdodCAmJiAodmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMSB8fCBpc1NpbmdsZUFjdGlvbilcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJBY3Rpb25zQ29sdW1uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPCEtLSBWYWxpZGEgc2UgYSBvcmlnZW0gZG8gZGV0YWlsIMOpIHBlbGEgZGlyZXRpdmEgLS0+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSb3dUZW1wbGF0ZSAmJiAhaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBtYWluQ29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW5dPVwiY29sdW1uLnR5cGUgIT09ICdpY29uJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5wby10YWJsZS1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLnR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBvLXRhYmxlLWNvbHVtbi1jZW50ZXJdPVwiY29sdW1uLnR5cGUgPT09ICdzdWJ0aXRsZSdcIlxuICAgICAgICAgICAgICBbY2xhc3MucG8tdGFibGUtY29sdW1uLWljb25zXT1cImNvbHVtbi50eXBlID09PSAnaWNvbidcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzc0NvbG9yKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgIFtwRnJvemVuQ29sdW1uXT1cImNvbHVtbi5maXhlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHBvLWZyb3plbi1jb2x1bW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFzU2VsZWN0YWJsZVJvdygpID8gc2VsZWN0Um93KHJvdykgOiAnamF2YXNjcmlwdDo7J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1jZWxsIHBvLXRhYmxlLWJvZHktZWxsaXBzaXMgbm90cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiXG4gICAgICAgICAgICAgICAgW3AtdG9vbHRpcF09XCJ0b29sdGlwVGV4dFwiXG4gICAgICAgICAgICAgICAgW3AtYXBwZW5kLWluLWJvZHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcE1vdXNlRW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBNb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjb2x1bW5UZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShjb2x1bW4pOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjZWxsVGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDZWxsVGVtcGxhdGU/LnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEJvb2xlYW5MYWJlbChnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgY3VycmVuY3k6IGNvbHVtbi5mb3JtYXQgOiAnc3ltYm9sJyA6ICcxLjItMicgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfCBkYXRlOiBjb2x1bW4uZm9ybWF0IHx8ICdkZC9NTS95eXl5JyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldENlbGxEYXRhKHJvdywgY29sdW1uKSB8IHBvX3RpbWU6IGNvbHVtbi5mb3JtYXQgfHwgJ0hIOm1tOnNzLmZmZmZmZicgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbERhdGEocm93LCBjb2x1bW4pIHwgZGF0ZTogY29sdW1uLmZvcm1hdCB8fCAnZGQvTU0veXl5eSBISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdE51bWJlcihnZXRDZWxsRGF0YShyb3csIGNvbHVtbiksIGNvbHVtbi5mb3JtYXQpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1saW5rXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCJcbiAgICAgICAgICAgICAgICAgIFtwLWFjdGlvbl09XCJjb2x1bW4uYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cImNoZWNrRGlzYWJsZWQocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtwLWxpbmtdPVwicm93W2NvbHVtbi5saW5rXVwiXG4gICAgICAgICAgICAgICAgICBbcC1yb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgIFtwLXZhbHVlXT1cImdldENlbGxEYXRhKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0xpbmsoJGV2ZW50LCByb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3BvLXRhYmxlLWNvbHVtbi1saW5rPlxuXG4gICAgICAgICAgICAgICAgPHBvLXRhYmxlLWNvbHVtbi1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCJcbiAgICAgICAgICAgICAgICAgIFtwLWNvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgW3AtaWNvbnNdPVwiZ2V0Q29sdW1uSWNvbnMocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtwLXJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3BvLXRhYmxlLWNvbHVtbi1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidzdWJ0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxwby10YWJsZS1zdWJ0aXRsZS1jaXJjbGUgW3Atc3VidGl0bGVdPVwiZ2V0U3VidGl0bGVDb2x1bW4ocm93LCBjb2x1bW4pXCI+PC9wby10YWJsZS1zdWJ0aXRsZS1jaXJjbGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICA8cG8tdGFibGUtY29sdW1uLWxhYmVsIFtwLXZhbHVlXT1cImdldENvbHVtbkxhYmVsKHJvdywgY29sdW1uKVwiPiA8L3BvLXRhYmxlLWNvbHVtbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD57eyBnZXRDZWxsRGF0YShyb3csIGNvbHVtbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzUm93VGVtcGxhdGVXaXRoQXJyb3dEaXJlY3Rpb25SaWdodFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLWRldGFpbC10b2dnbGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsKHJvdylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwb1RhYmxlQ29sdW1uRGV0YWlsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVuYSBkZSBhw6dvZXMgbmEgZGlyZWl0YSAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvblJpZ2h0XCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiQWN0aW9uc0NvbHVtblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImhhc01haW5Db2x1bW5zICYmIGhhc1Jvd1RlbXBsYXRlICYmIHJvdy4kc2hvd0RldGFpbCAmJiBpc1Nob3dSb3dUZW1wbGF0ZShyb3csIHJvd0luZGV4KVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwicG8tdGFibGUtcm93LXRlbXBsYXRlLWNvbnRhaW5lclwiIFtjb2xTcGFuXT1cImNvbHVtbkNvdW50Rm9yTWFzdGVyRGV0YWlsXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlUm93VGVtcGxhdGUudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0ciAqbmdJZj1cImhhc01haW5Db2x1bW5zICYmIGlzU2hvd01hc3RlckRldGFpbChyb3cpXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tZGV0YWlsXCIgW2NvbFNwYW5dPVwiY29sdW1uQ291bnRGb3JNYXN0ZXJEZXRhaWxcIj5cbiAgICAgICAgICAgICAgPHBvLXRhYmxlLWRldGFpbFxuICAgICAgICAgICAgICAgIFtwLXNlbGVjdGFibGVdPVwic2VsZWN0YWJsZSAmJiAhZGV0YWlsSGlkZVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW3AtZGV0YWlsXT1cImNvbHVtbk1hc3RlckRldGFpbC5kZXRhaWxcIlxuICAgICAgICAgICAgICAgIFtwLWl0ZW1zXT1cInJvd1tuYW1lQ29sdW1uRGV0YWlsXVwiXG4gICAgICAgICAgICAgICAgKHAtc2VsZWN0LXJvdyk9XCJzZWxlY3REZXRhaWxSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wby10YWJsZS1kZXRhaWw+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RhYmxlPlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbjwvbmctdGVtcGxhdGU+XG5cbjxwby1wb3B1cCAjcG9wdXAgW3AtYWN0aW9uc109XCJhY3Rpb25zXCIgW3AtdGFyZ2V0XT1cInBvcHVwVGFyZ2V0XCI+IDwvcG8tcG9wdXA+XG5cbjxuZy10ZW1wbGF0ZSAjcG9UYWJsZUNvbHVtbkRldGFpbCBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPHNwYW5cbiAgICAqbmdJZj1cIihjb250YWluc01hc3RlckRldGFpbChyb3cpICYmICFoYXNSb3dUZW1wbGF0ZSkgfHwgKGlzU2hvd1Jvd1RlbXBsYXRlKHJvdywgcm93SW5kZXgpICYmIGhhc1Jvd1RlbXBsYXRlKVwiXG4gICAgY2xhc3M9XCJwby1pY29uIHBvLWNsaWNrYWJsZVwiXG4gICAgW2NsYXNzLnBvLWljb24tYXJyb3ctdXBdPVwicm93LiRzaG93RGV0YWlsXCJcbiAgICBbY2xhc3MucG8taWNvbi1hcnJvdy1kb3duXT1cIiFyb3cuJHNob3dEZXRhaWxcIlxuICA+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRSYWRpbyBsZXQtcm93PlxuICA8cG8tcmFkaW8gW25hbWVdPVwiaWRSYWRpb1wiIFtwLWNoZWNrZWRdPVwicm93LiRzZWxlY3RlZFwiIChwLWNoYW5nZS1zZWxlY3RlZCk9XCJzZWxlY3RSb3cocm93KVwiPjwvcG8tcmFkaW8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0Q2hlY2tib3ggbGV0LXJvdz5cbiAgPHBvLWNoZWNrYm94XG4gICAgbmFtZT1cImNoZWNrYm94XCJcbiAgICAocC1jaGFuZ2UpPVwic2VsZWN0YWJsZSA/IHNlbGVjdFJvdyhyb3cpIDogJ2phdmFzY3JpcHQ6OydcIlxuICAgIFtwLWNoZWNrYm94VmFsdWVdPVwicm93LiRzZWxlY3RlZFwiXG4gID48L3BvLWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50SGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgPHNwYW5cbiAgICAjY29sdW1uSGVhZGVyXG4gICAgY2xhc3M9XCJwby10YWJsZS1oZWFkZXItZWxsaXBzaXNcIlxuICAgIFtwLXRvb2x0aXBdPVwidG9vbHRpcFRleHRcIlxuICAgIFtwLWFwcGVuZC1pbi1ib2R5XT1cInRydWVcIlxuICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBNb3VzZUVudGVyKCRldmVudClcIlxuICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBNb3VzZUxlYXZlKClcIlxuICA+XG4gICAge3sgY29sdW1uLmxhYmVsIHx8IChjb2x1bW4ucHJvcGVydHkgfCB0aXRsZWNhc2UpIH19XG4gIDwvc3Bhbj5cblxuICA8c3BhblxuICAgICpuZ0lmPVwic29ydCAmJiBjb2x1bW4uc29ydGFibGUgIT09IGZhbHNlXCJcbiAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWljb24tdW5zZWxlY3RlZF09XCJKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSAhPT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKVwiXG4gICAgW2NsYXNzLnBvLXRhYmxlLWhlYWRlci1pY29uLWRlc2NlbmRpbmddPVwiXG4gICAgICBKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJiBzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nXG4gICAgXCJcbiAgICBbY2xhc3MucG8tdGFibGUtaGVhZGVyLWljb24tYXNjZW5kaW5nXT1cIlxuICAgICAgSlNPTi5zdHJpbmdpZnkoc29ydGVkQ29sdW1uPy5wcm9wZXJ0eSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbHVtbikgJiYgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmdcbiAgICBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkpTT04uc3RyaW5naWZ5KHNvcnRlZENvbHVtbj8ucHJvcGVydHkpICE9PSBKU09OLnN0cmluZ2lmeShjb2x1bW4pXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTE4LjI5MjkgMTUuMjkyOUwxNyAxNi41ODU4TDE3IDEwQzE3IDkuNDQ3NzIgMTYuNTUyMyA5IDE2IDlDMTUuNDQ3NyA5IDE1IDkuNDQ3NzIgMTUgMTBMMTUgMTYuNTg1OEwxMy43MDcxIDE1LjI5MjlDMTMuMzE2NiAxNC45MDI0IDEyLjY4MzQgMTQuOTAyNCAxMi4yOTI5IDE1LjI5MjlDMTEuOTAyNCAxNS42ODM0IDExLjkwMjQgMTYuMzE2NiAxMi4yOTI5IDE2LjcwNzFMMTUuMjkyOSAxOS43MDcxQzE1LjY4MzQgMjAuMDk3NiAxNi4zMTY2IDIwLjA5NzYgMTYuNzA3MSAxOS43MDcxTDE5LjcwNzEgMTYuNzA3MUMyMC4wOTc2IDE2LjMxNjYgMjAuMDk3NiAxNS42ODM0IDE5LjcwNzEgMTUuMjkyOUMxOS4zMTY2IDE0LjkwMjQgMTguNjgzNCAxNC45MDI0IDE4LjI5MjkgMTUuMjkyOVpNNS43MDcxNiA4LjcwNzFMNy4wMDAwNiA3LjQxNDJMNy4wMDAwMyAxNEM3LjAwMDAyIDE0LjU1MjMgNy40NDc3NCAxNSA4LjAwMDAyIDE1QzguNTUyMzEgMTUgOS4wMDAwMiAxNC41NTIzIDkuMDAwMDMgMTRMOS4wMDAwNiA3LjQxNDE4TDEwLjI5MjkgOC43MDcwN0MxMC42ODM1IDkuMDk3NTkgMTEuMzE2NiA5LjA5NzU4IDExLjcwNzIgOC43MDcwNkMxMi4wOTc3IDguMzE2NTMgMTIuMDk3NyA3LjY4MzM2IDExLjcwNzIgNy4yOTI4NEw4LjcwNzE4IDQuMjkyODZDOC4zMTY2NSAzLjkwMjM0IDcuNjgzNDkgMy45MDIzNSA3LjI5Mjk2IDQuMjkyODdMNC4yOTI5NSA3LjI5Mjg5QzMuOTAyNDIgNy42ODM0MiAzLjkwMjQyIDguMzE2NTggNC4yOTI5NCA4LjcwNzExQzQuNjgzNDcgOS4wOTc2MyA1LjMxNjYzIDkuMDk3NjIgNS43MDcxNiA4LjcwNzFaXCJcbiAgICAgICAgICBmaWxsPVwiIzFEMUQzMFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJKU09OLnN0cmluZ2lmeShzb3J0ZWRDb2x1bW4/LnByb3BlcnR5KSA9PT0gSlNPTi5zdHJpbmdpZnkoY29sdW1uKSAmJiBzb3J0ZWRDb2x1bW4uYXNjZW5kaW5nXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTExIDkuNDE0MjFMOS43MDcxMSAxMC43MDcxQzkuMzE2NTggMTEuMDk3NiA4LjY4MzQyIDExLjA5NzYgOC4yOTI4OSAxMC43MDcxQzcuOTAyMzcgMTAuMzE2NiA3LjkwMjM3IDkuNjgzNDIgOC4yOTI4OSA5LjI5Mjg5TDExLjI5MjkgNi4yOTI4OUMxMS42ODM0IDUuOTAyMzcgMTIuMzE2NiA1LjkwMjM3IDEyLjcwNzEgNi4yOTI4OUwxNS43MDcxIDkuMjkyODlDMTYuMDk3NiA5LjY4MzQyIDE2LjA5NzYgMTAuMzE2NiAxNS43MDcxIDEwLjcwNzFDMTUuMzE2NiAxMS4wOTc2IDE0LjY4MzQgMTEuMDk3NiAxNC4yOTI5IDEwLjcwNzFMMTMgOS40MTQyMVYxNkMxMyAxNi41NTIzIDEyLjU1MjMgMTcgMTIgMTdDMTEuNDQ3NyAxNyAxMSAxNi41NTIzIDExIDE2VjkuNDE0MjFaXCJcbiAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiSlNPTi5zdHJpbmdpZnkoc29ydGVkQ29sdW1uPy5wcm9wZXJ0eSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbHVtbikgJiYgIXNvcnRlZENvbHVtbi5hc2NlbmRpbmdcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNOS43MDcxMSAxMy4yOTI5TDExIDE0LjU4NThWN0MxMSA2LjQ0NzcyIDExLjQ0NzcgNiAxMiA2QzEyLjU1MjMgNiAxMyA2LjQ0NzcyIDEzIDdWMTQuNTg1OEwxNC4yOTI5IDEzLjI5MjlDMTQuNjgzNCAxMi45MDI0IDE1LjMxNjYgMTIuOTAyNCAxNS43MDcxIDEzLjI5MjlDMTYuMDk3NiAxMy42ODM0IDE2LjA5NzYgMTQuMzE2NiAxNS43MDcxIDE0LjcwNzFMMTIuNzA3MSAxNy43MDcxQzEyLjMxNjYgMTguMDk3NiAxMS42ODM0IDE4LjA5NzYgMTEuMjkyOSAxNy43MDcxTDguMjkyODkgMTQuNzA3MUM3LjkwMjM3IDE0LjMxNjYgNy45MDIzNyAxMy42ODM0IDguMjkyODkgMTMuMjkyOUM4LjY4MzQyIDEyLjkwMjQgOS4zMTY1OCAxMi45MDI0IDkuNzA3MTEgMTMuMjkyOVpcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0NvbHVtbnNXaXRoSGVpZ2h0PlxuICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtaGVhZGVyLWZpeGVkLWlubmVyXCIgW3N0eWxlLndpZHRoLnB4XT1cImhlYWRlcldpZHRoXCI+XG4gICAge3sgaGFzVmFsaWRDb2x1bW5zID8gbGl0ZXJhbHMubm9WaXNpYmxlQ29sdW1uIDogbGl0ZXJhbHMubm9Db2x1bW5zIH19XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0NvbHVtbnNXaXRob3V0SGVpZ2h0PlxuICB7eyBoYXNWYWxpZENvbHVtbnMgPyBsaXRlcmFscy5ub1Zpc2libGVDb2x1bW4gOiBsaXRlcmFscy5ub0NvbHVtbnMgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGVtcGxhdGUgZGUgYcOnw7VlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjQWN0aW9uc0NvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICA8dGRcbiAgICAqbmdJZj1cImlzU2luZ2xlQWN0aW9uXCJcbiAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbiBwby10YWJsZS1jb2x1bW4tc2luZ2xlLWFjdGlvblwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImhlaWdodCAmJiBhY3Rpb25SaWdodCA/IGdldFdpZHRoQ29sdW1uTWFuYWdlcigpIDogJydcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiaGVpZ2h0ICYmICFhY3Rpb25SaWdodCA/IGdldENvbHVtbldpZHRoQWN0aW9uc0xlZnQoKSA6ICcnXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiaGVpZ2h0ICYmICFhY3Rpb25SaWdodCA/IGdldENvbHVtbldpZHRoQWN0aW9uc0xlZnQoKSA6ICcnXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiZmlyc3RBY3Rpb24udmlzaWJsZSAhPT0gZmFsc2VcIlxuICAgICAgY2xhc3M9XCJwby10YWJsZS1zaW5nbGUtYWN0aW9uIHBvLWNsaWNrYWJsZVwiXG4gICAgICBbY2xhc3MucG8tdGFibGUtYWN0aW9uLWRpc2FibGVkXT1cImZpcnN0QWN0aW9uLmRpc2FibGVkID8gdmFsaWRhdGVUYWJsZUFjdGlvbihyb3csIGZpcnN0QWN0aW9uKSA6IGZhbHNlXCJcbiAgICAgIChjbGljayk9XCJleGVjdXRlVGFibGVBY3Rpb24ocm93LCBmaXJzdEFjdGlvbilcIlxuICAgID5cbiAgICAgIDxwby1pY29uICpuZ0lmPVwiZmlyc3RBY3Rpb24uaWNvblwiIGNsYXNzPVwicG8tdGFibGUtc2luZ2xlLWFjdGlvbi1jb250ZW50XCIgW3AtaWNvbl09XCJmaXJzdEFjdGlvbi5pY29uXCI+PC9wby1pY29uPlxuICAgICAge3sgZmlyc3RBY3Rpb24ubGFiZWwgfX1cbiAgICA8L2Rpdj5cbiAgPC90ZD5cblxuICA8dGQgKm5nSWY9XCJ2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAxXCIgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tYWN0aW9uc1wiPlxuICAgIDxzcGFuICNwb3B1cFRhcmdldCBjbGFzcz1cInBvLWljb24gcG8taWNvbi1tb3JlIHBvLWNsaWNrYWJsZVwiIChjbGljayk9XCJ0b2dnbGVQb3B1cChyb3csIHBvcHVwVGFyZ2V0KVwiPjwvc3Bhbj5cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxwby10YWJsZS1jb2x1bW4tbWFuYWdlclxuICAqbmdJZj1cIiFoaWRlQ29sdW1uc01hbmFnZXJcIlxuICBbcC1jb2x1bW5zXT1cImNvbHVtbnNcIlxuICBbcC1tYXgtY29sdW1uc109XCJtYXhDb2x1bW5zXCJcbiAgW3AtdGFyZ2V0XT1cImNvbHVtbk1hbmFnZXJUYXJnZXRcIlxuICBbcC1sYXN0LXZpc2libGUtY29sdW1ucy1zZWxlY3RlZF09XCJsYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZFwiXG4gIFtwLWhpZGUtYWN0aW9uLWZpeGVkLWNvbHVtbnNdPVwiaGlkZUFjdGlvbkZpeGVkQ29sdW1uc1wiXG4gIChwLXZpc2libGUtY29sdW1ucy1jaGFuZ2UpPVwib25WaXNpYmxlQ29sdW1uc0NoYW5nZSgkZXZlbnQpXCJcbiAgKHAtY2hhbmdlLXZpc2libGUtY29sdW1ucyk9XCJvbkNoYW5nZVZpc2libGVDb2x1bW5zKCRldmVudClcIlxuICBbcC1jb2x1bW5zLWRlZmF1bHRdPVwiaW5pdGlhbENvbHVtbnNcIlxuICAocC1pbml0aWFsLWNvbHVtbnMpPVwib25Db2x1bW5SZXN0b3JlTWFuYWdlcigkZXZlbnQpXCJcbj5cbjwvcG8tdGFibGUtY29sdW1uLW1hbmFnZXI+XG5cbjxwby1tb2RhbFxuICAjbW9kYWxEZWxldGVcbiAgW3AtdGl0bGVdPVwibGl0ZXJhbHMuZGVsZXRlXCJcbiAgW3AtcHJpbWFyeS1hY3Rpb25dPVwiY29uZmlybVwiXG4gIFtwLXNlY29uZGFyeS1hY3Rpb25dPVwiY2xvc2VcIlxuICBbcC1jbGljay1vdXRdPVwidHJ1ZVwiXG4+XG4gIDxwIGNsYXNzPVwicG8tZm9udC10ZXh0LWxhcmdlXCI+e3sgbGl0ZXJhbHMuYm9keURlbGV0ZSB9fTwvcD5cbjwvcG8tbW9kYWw+XG4iXX0=
|