ax-common-ui-lib 1.0.1-beta.34.9-testing01 → 1.0.1-beta.34.9-testing02

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.
@@ -1242,7 +1242,7 @@ function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_2_Temp
1242
1242
  i0.ɵɵadvance(1);
1243
1243
  i0.ɵɵproperty("ngIf", ctx_r19.tabularReport.rowGrouping.length === 2);
1244
1244
  i0.ɵɵadvance(1);
1245
- i0.ɵɵstyleProp("color", ctx_r19.tabularReport.tableStyle.header.font.color)("font-family", ctx_r19.tabularReport.tableStyle.header.font.family)("color", ctx_r19.tabularReport.tableStyle.header.font.color)("background", ctx_r19.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r19.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r19.tabularReport.tableStyle.border.width + "px" + " " + ctx_r19.tabularReport.tableStyle.border.borderStyle + " " + ctx_r19.tabularReport.tableStyle.border.color);
1245
+ i0.ɵɵstyleProp("color", ctx_r19.tabularReport.tableStyle.header.font.color)("font-family", ctx_r19.tabularReport.tableStyle.header.font.family)("color", ctx_r19.tabularReport.tableStyle.header.font.color)("background", ctx_r19.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r19.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r19.tabularReport.tableStyle.border.width + "px" + " " + ctx_r19.tabularReport.tableStyle.border.borderStyle + " " + ctx_r19.tabularReport.tableStyle.border.color)("text-align", ctx_r19.attr.alignment);
1246
1246
  i0.ɵɵproperty("id", ctx_r19.th);
1247
1247
  i0.ɵɵadvance(1);
1248
1248
  i0.ɵɵtextInterpolate(_attr_r16.label);
@@ -1686,7 +1686,7 @@ function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_3_Temp
1686
1686
  i0.ɵɵadvance(1);
1687
1687
  i0.ɵɵproperty("ngIf", ctx_r20.tabularReport.rowGrouping.length === 2);
1688
1688
  i0.ɵɵadvance(1);
1689
- i0.ɵɵstyleProp("color", ctx_r20.tabularReport.tableStyle.header.font.color)("font-family", ctx_r20.tabularReport.tableStyle.header.font.family)("background", ctx_r20.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r20.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r20.tabularReport.tableStyle.border.width + "px" + " " + ctx_r20.tabularReport.tableStyle.border.borderStyle + " " + ctx_r20.tabularReport.tableStyle.border.color);
1689
+ i0.ɵɵstyleProp("color", ctx_r20.tabularReport.tableStyle.header.font.color)("font-family", ctx_r20.tabularReport.tableStyle.header.font.family)("background", ctx_r20.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r20.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r20.tabularReport.tableStyle.border.width + "px" + " " + ctx_r20.tabularReport.tableStyle.border.borderStyle + " " + ctx_r20.tabularReport.tableStyle.border.color)("text-align", ctx_r20.attr.alignment);
1690
1690
  i0.ɵɵproperty("id", ctx_r20.th);
1691
1691
  i0.ɵɵadvance(1);
1692
1692
  i0.ɵɵtextInterpolate(_attr_r16.label);
@@ -1698,8 +1698,8 @@ function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_3_Temp
1698
1698
  function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
1699
1699
  i0.ɵɵelementContainerStart(0);
1700
1700
  i0.ɵɵelementContainerStart(1);
1701
- i0.ɵɵtemplate(2, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_2_Template, 6, 17, "tr", 6);
1702
- i0.ɵɵtemplate(3, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_3_Template, 6, 15, "tr", 6);
1701
+ i0.ɵɵtemplate(2, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_2_Template, 6, 19, "tr", 6);
1702
+ i0.ɵɵtemplate(3, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_1_tr_3_Template, 6, 17, "tr", 6);
1703
1703
  i0.ɵɵelementContainerEnd();
1704
1704
  i0.ɵɵelementContainerEnd();
1705
1705
  } if (rf & 2) {
@@ -1742,7 +1742,7 @@ function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_ng_contai
1742
1742
  const attr_r367 = ctx.$implicit;
1743
1743
  const ctx_r365 = i0.ɵɵnextContext(5);
1744
1744
  i0.ɵɵadvance(1);
1745
- i0.ɵɵstyleProp("color", ctx_r365.tabularReport.tableStyle.header.font.color)("font-family", ctx_r365.tabularReport.tableStyle.header.font.family)("color", ctx_r365.tabularReport.tableStyle.header.font.color)("background", ctx_r365.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r365.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r365.tabularReport.tableStyle.border.width + "px" + " " + ctx_r365.tabularReport.tableStyle.border.borderStyle + " " + ctx_r365.tabularReport.tableStyle.border.color);
1745
+ i0.ɵɵstyleProp("color", ctx_r365.tabularReport.tableStyle.header.font.color)("font-family", ctx_r365.tabularReport.tableStyle.header.font.family)("color", ctx_r365.tabularReport.tableStyle.header.font.color)("background", ctx_r365.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r365.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r365.tabularReport.tableStyle.border.width + "px" + " " + ctx_r365.tabularReport.tableStyle.border.borderStyle + " " + ctx_r365.tabularReport.tableStyle.border.color)("text-align", attr_r367.alignment);
1746
1746
  i0.ɵɵproperty("id", ctx_r365.th);
1747
1747
  i0.ɵɵadvance(2);
1748
1748
  i0.ɵɵtextInterpolate(attr_r367);
@@ -1753,13 +1753,13 @@ function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_th_2_Temp
1753
1753
  i0.ɵɵelementEnd();
1754
1754
  } if (rf & 2) {
1755
1755
  const ctx_r366 = i0.ɵɵnextContext(5);
1756
- i0.ɵɵstyleProp("color", ctx_r366.tabularReport.tableStyle.header.font.color)("font-family", ctx_r366.tabularReport.tableStyle.header.font.family)("color", ctx_r366.tabularReport.tableStyle.header.font.color)("background", ctx_r366.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r366.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r366.tabularReport.tableStyle.border.width + "px" + " " + ctx_r366.tabularReport.tableStyle.border.borderStyle + " " + ctx_r366.tabularReport.tableStyle.border.color);
1756
+ i0.ɵɵstyleProp("color", ctx_r366.tabularReport.tableStyle.header.font.color)("font-family", ctx_r366.tabularReport.tableStyle.header.font.family)("color", ctx_r366.tabularReport.tableStyle.header.font.color)("background", ctx_r366.tabularReport.tableStyle.header.backgroundColor)("font-size", ctx_r366.tabularReport.tableStyle.header.font.size, "px")("border", ctx_r366.tabularReport.tableStyle.border.width + "px" + " " + ctx_r366.tabularReport.tableStyle.border.borderStyle + " " + ctx_r366.tabularReport.tableStyle.border.color)("text-align", ctx_r366.attr.alignment);
1757
1757
  i0.ɵɵproperty("id", ctx_r366.th);
1758
1758
  } }
1759
1759
  function ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_Template(rf, ctx) { if (rf & 1) {
1760
1760
  i0.ɵɵelementContainerStart(0);
1761
- i0.ɵɵtemplate(1, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_ng_container_1_Template, 4, 14, "ng-container", 15);
1762
- i0.ɵɵtemplate(2, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_th_2_Template, 2, 13, "th", 33);
1761
+ i0.ɵɵtemplate(1, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_ng_container_1_Template, 4, 16, "ng-container", 15);
1762
+ i0.ɵɵtemplate(2, ColumnGroupViewComponent_div_0_table_1_tbody_2_ng_container_4_th_2_Template, 2, 15, "th", 33);
1763
1763
  i0.ɵɵelementContainerEnd();
1764
1764
  } if (rf & 2) {
1765
1765
  const ctx_r12 = i0.ɵɵnextContext(4);
@@ -4415,7 +4415,7 @@ ColumnGroupViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Co
4415
4415
  } if (rf & 2) {
4416
4416
  let _t;
4417
4417
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contextMenu = _t.first);
4418
- } }, inputs: { tabularReport: "tabularReport", isEditable: "isEditable", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", parentRef: "parentRef", reportId: "reportId" }, features: [i0.ɵɵNgOnChangesFeature], decls: 10, vars: 8, consts: [["class", "column-grouping-table-container customscroll", 4, "ngIf"], [2, "visibility", "hidden", "position", "fixed", 3, "matMenuTriggerFor"], ["contextMenu", "matMenu"], ["id", "table-menu"], ["matMenuContent", ""], ["Aggregate", "matMenu"], [4, "ngIf"], ["class", "loader-spinner", 4, "ngIf"], [1, "column-grouping-table-container", "customscroll"], ["cdkDropListGroup", "", "style", "width:100%", 3, "border", "ngClass", "click", 4, "ngIf"], ["class", "flex justify-center items-center flex-col zero-records", 4, "ngIf"], ["cdkDropListGroup", "", 2, "width", "100%", 3, "ngClass", "click"], [3, "ngClass", 4, "ngIf"], [3, "background", "font-family", "font-size", "color", 4, "ngIf"], [3, "ngClass"], [4, "ngFor", "ngForOf"], ["cdkDropList", "", "cdkDropListOrientation", "horizontal", 1, "example-list", 3, "cdkDropListDropped"], ["class", "px-1.5\tpy-1.5", 3, "border", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "id", "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "border", "font-family", "background", "font-size", 4, "ngIf"], [1, "px-1.5", "py-1.5"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "color", "background", "border", "contextmenu", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "color", "background", "border", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "background", "color", "border", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "colSpan", "contextmenu"], [3, "ngSwitch"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [1, "url", 3, "title", "click"], [1, "px-1.5", "py-1.5", 3, "colSpan"], [1, "px-1.5", "py-1.5", 3, "id"], [1, "tabular-report-tabel-th"], [1, "tabular-report-table-text"], ["class", "px-1.5\tpy-1.5", 3, "id", "color", "font-family", "background", "font-size", "border", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", "font-size", 4, "ngIf"], ["colGrouping", "", 1, "px-1.5", "py-1.5"], [3, "ngStyle"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "color", "border", "text-align", "rowSpan", "background", "contextmenu", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "rowSpan", "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "background", "color", "border", "text-align", "contextmenu", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "border", "color", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", "font-size", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "border", "color", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "color", "border", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", "text-align", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "color", "background", "border", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", 4, "ngFor", "ngForOf"], [1, "flex", "justify-center", "items-center", "flex-col", "zero-records"], ["mat-menu-item", "", 3, "matMenuTriggerFor", 4, "ngIf"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], ["mat-menu-item", "", 3, "matMenuTriggerFor"], [1, "aggregate-fun", 3, "ngModel", "ngModelChange", "change", "click"], ["_attr.widgetSubType", "", "", "", "", "date_range", "||", "", 1, "aggregate-fun", 3, "ngModel", "ngModelChange", "change", "click"], [1, "loader-spinner"], [3, "elementType"]], template: function ColumnGroupViewComponent_Template(rf, ctx) { if (rf & 1) {
4418
+ } }, inputs: { tabularReport: "tabularReport", isEditable: "isEditable", x1ImageMediaUrl: "x1ImageMediaUrl", screenType: "screenType", drillThroughParentType: "drillThroughParentType", drillThroughFilterInput: "drillThroughFilterInput", parentRef: "parentRef", reportId: "reportId" }, features: [i0.ɵɵNgOnChangesFeature], decls: 10, vars: 8, consts: [["class", "column-grouping-table-container customscroll", 4, "ngIf"], [2, "visibility", "hidden", "position", "fixed", 3, "matMenuTriggerFor"], ["contextMenu", "matMenu"], ["id", "table-menu"], ["matMenuContent", ""], ["Aggregate", "matMenu"], [4, "ngIf"], ["class", "loader-spinner", 4, "ngIf"], [1, "column-grouping-table-container", "customscroll"], ["cdkDropListGroup", "", "style", "width:100%", 3, "border", "ngClass", "click", 4, "ngIf"], ["class", "flex justify-center items-center flex-col zero-records", 4, "ngIf"], ["cdkDropListGroup", "", 2, "width", "100%", 3, "ngClass", "click"], [3, "ngClass", 4, "ngIf"], [3, "background", "font-family", "font-size", "color", 4, "ngIf"], [3, "ngClass"], [4, "ngFor", "ngForOf"], ["cdkDropList", "", "cdkDropListOrientation", "horizontal", 1, "example-list", 3, "cdkDropListDropped"], ["class", "px-1.5\tpy-1.5", 3, "border", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "id", "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "border", "font-family", "background", "font-size", 4, "ngIf"], [1, "px-1.5", "py-1.5"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "color", "background", "border", "contextmenu", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "color", "background", "border", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "colSpan", "font-family", "font-size", "background", "color", "border", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "colSpan", "contextmenu"], [3, "ngSwitch"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [1, "url", 3, "title", "click"], [1, "px-1.5", "py-1.5", 3, "colSpan"], [1, "px-1.5", "py-1.5", 3, "id"], [1, "tabular-report-tabel-th"], [1, "tabular-report-table-text"], ["class", "px-1.5\tpy-1.5", 3, "id", "color", "font-family", "background", "font-size", "border", "text-align", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", "font-size", 4, "ngIf"], ["colGrouping", "", 1, "px-1.5", "py-1.5"], [3, "ngStyle"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "color", "border", "text-align", "rowSpan", "background", "contextmenu", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "rowSpan", "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "background", "color", "border", "text-align", "contextmenu", 4, "ngIf"], [1, "px-1.5", "py-1.5", 3, "contextmenu"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "border", "color", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", "font-size", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "border", "color", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "background", "font-family", "font-size", "color", "border", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", "text-align", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", 4, "ngIf"], ["class", "px-1.5\tpy-1.5", 3, "border", "background", "font-family", "font-size", "color", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "font-family", "font-size", "color", "background", "border", 4, "ngFor", "ngForOf"], ["class", "px-1.5\tpy-1.5", 3, "border", "font-family", "background", 4, "ngFor", "ngForOf"], [1, "flex", "justify-center", "items-center", "flex-col", "zero-records"], ["mat-menu-item", "", 3, "matMenuTriggerFor", 4, "ngIf"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], ["mat-menu-item", "", 3, "matMenuTriggerFor"], [1, "aggregate-fun", 3, "ngModel", "ngModelChange", "change", "click"], ["_attr.widgetSubType", "", "", "", "", "date_range", "||", "", 1, "aggregate-fun", 3, "ngModel", "ngModelChange", "change", "click"], [1, "loader-spinner"], [3, "elementType"]], template: function ColumnGroupViewComponent_Template(rf, ctx) { if (rf & 1) {
4419
4419
  i0.ɵɵtemplate(0, ColumnGroupViewComponent_div_0_Template, 3, 2, "div", 0);
4420
4420
  i0.ɵɵelement(1, "div", 1);
4421
4421
  i0.ɵɵelementStart(2, "mat-menu", null, 2);
@@ -4440,7 +4440,7 @@ ColumnGroupViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Co
4440
4440
  } }, directives: [i5.NgIf, i6.MatMenuTrigger, i6.MatMenu, i6.MatMenuContent, i7.CdkDropListGroup, i5.NgClass, i5.NgForOf, i7.CdkDropList, i5.NgSwitch, i5.NgSwitchCase, i5.NgSwitchDefault, i5.NgStyle, i6.MatMenuItem, i8.MatCheckbox, i9.NgControlStatus, i9.NgModel, i10.GhostLoaderComponent], pipes: [i5.DatePipe, i5.CurrencyPipe, i11.AxoPercentagePipe], styles: ["lib-column-group-view{display:block;height:calc(100% - 6.7rem);min-height:calc(100% - 6.7rem);max-height:calc(100% - 6.7rem)}.tabular-report-tabel-th{display:flex}.tabular-report-tabel-th .mat-icon{max-height:10px;min-height:10px;font-size:10px}.tabular-report-tabel-th .tabular-report-table-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabular-report-tabel-th button{width:24px}.zero-records{height:calc(100% - 2.4rem);max-width:100%;position:sticky;left:0}.column-grouping-table-container{min-height:100%;max-height:100%;height:100%;width:100%;padding-top:0;padding-left:14px;padding-right:14px;z-index:99;bottom:1rem}.column-grouping-table-container table{width:99.5%!important;height:auto;border:none!important}.column-grouping-table-container table .thead{position:sticky;top:1px}.column-grouping-table-container table .thead th{position:relative;background-color:#f2f8ff;border-top:none!important;border-bottom:none!important;padding:0}.column-grouping-table-container table .thead th .resize-holder{cursor:col-resize!important;width:20px;height:100%;position:absolute;right:-10px;top:0;z-index:1}.column-grouping-table-container table .thead th:last-child{border-right:none!important}.column-grouping-table-container table .thead th:first-child{border-left:none!important}.column-grouping-table-container table .thead .sr-head{position:absolute;justify-content:center;inset:0;display:flex;align-items:center}.column-grouping-table-container table tbody td{padding-left:4px;padding-right:4px}.url:hover{color:#00f}.loader-spinner{justify-content:center;display:flex;position:sticky;top:50%;vertical-align:middle;margin:0}\n"], encapsulation: 2 });
4441
4441
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ColumnGroupViewComponent, [{
4442
4442
  type: Component,
4443
- args: [{ selector: 'lib-column-group-view', encapsulation: ViewEncapsulation.None, template: "<div class=\"column-grouping-table-container customscroll\" *ngIf='tabularReport.matrix.attributes[0].series.length!==0 && tabularReport.isDataLoaded'>\n <table\n (click)=\"tableSelect($event)\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n *ngIf=tabularReport cdkDropListGroup style=\"width:100%\" [ngClass]=\"{'mt-1': tabularReport.matrix.attributes.length>0 && tabularReport.matrix.attributes[0].series.length===0}\">\n <caption></caption>\n <tbody [ngClass]=\"{'shadow':tabularReport.tableStyle.border.shadow.enable}\"\n *ngIf=\"tabularReport.matrix.attributes.length>0\"\n >\n <ng-container *ngFor=\"let _attr of tabularReport.colGrouping; even as isEven;let m = index\">\n <ng-container>\n <tr *ngIf=\"m===0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowGrouping.length===2\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n ></td>\n <th [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"onContextMenu($event,i)\"\n\n >{{_attr.label}}</th>\n\n <!-- to show single column grouping unique series -->\n <ng-container *ngFor='let data of _attr.uniqueSeries;let i= index'>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length===1\"\n [colSpan]=tabularReport.rowCount?tabularReport.colData.get(data)+1:tabularReport.colData.get(data)\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, _attr.series.indexOf(data))\">\n\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span >{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n\n </td>\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length>1 && tabularReport.integerArray.length>0\"\n [colSpan]=tabularReport.rowCount?tabularReport.colData.get(data)+tabularReport.secondColData.get(data).length:tabularReport.colData.get(data)\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span >{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length>1 && tabularReport.integerArray.length===0\"\n [colSpan]=\"tabularReport.secondColData.get(data).length\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >\n\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n\n </ng-container>\n <!-- grand total header -->\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.showGrandTotal\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n\n >\n Total\n </td>\n\n </tr>\n\n\n <tr *ngIf=\"m===1\">\n <!-- to show double column grouping header with series data -->\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowGrouping.length===2\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n ></td>\n <th [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n\n >{{_attr.label}}</th>\n <ng-container *ngFor=\"let series of tabularReport.colGrouping[0].uniqueSeries \">\n\n <ng-container *ngFor=\"let data of tabularReport.secondColData.get(series) let x=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n <ng-container *ngIf=\"data\">\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n </ng-container>\n\n\n </ng-container>\n <td *ngIf=\"tabularReport.showGrandTotal\"\n class=\"px-1.5\tpy-1.5\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\">-</td>\n </tr>\n </ng-container>\n </ng-container>\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <!-- column headers -->\n <ng-container *ngFor=\"let attr of tabularReport.rowGrouping; even as isEven;let m = index\">\n <th\n [id]=\"th\"\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"onContextMenu($event,i)\"\n [style.text-align]='attr.alignment'\n >\n <div class=\"tabular-report-tabel-th\">\n <span class=\"tabular-report-table-text\">{{attr.label}}</span>\n <!-- <button mat-icon-button (click)=\"onContextMenu($event,i)\">\n <mat-icon class=\"tab-down-arrow\" svgIcon=\"heroicons_outline:chevron-down\"></mat-icon>\n </button> -->\n </div>\n </th>\n </ng-container>\n\n <!-- to show integer column headers -->\n <ng-container *ngFor=\"let data of tabularReport.cloneDataCount; let m=index\" >\n <ng-container *ngFor=\"let attr of tabularReport.integerArray;let i=index\">\n <th\n [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span>{{attr}}</span>\n </th>\n </ng-container>\n <!-- row count header -->\n <th *ngIf=\"tabularReport.rowCount\"\n [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n Count\n </th>\n </ng-container>\n <!-- horizontal grand total headers -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <ng-container *ngFor=\"let attr of tabularReport.integerArray;let i=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n colGrouping\n\n >\n <span>{{attr}}</span>\n </td>\n </ng-container>\n <td *ngIf=\"tabularReport.rowCount\"\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n\n >\n Count\n </td>\n </ng-container>\n </tr>\n\n <ng-container *ngIf=\"tabularReport.rowGrouping.length>1\">\n <ng-container *ngFor=\"let data of tabularReport.matrix.attributes[0].series;let i = index; even as isEven; let data1\">\n <tr\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [ngStyle]=\"{ background: isEven ? tabularReport.tableStyle.rowStyle.oddColor: tabularReport.tableStyle.rowStyle.evenColor}\"\n [style.border]=\"tabularReport.tableStyle.border.width + ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n\n >\n <!-- series data -->\n <ng-container *ngFor=\"let _attr of tabularReport.matrix.attributes; even as isEven;let m = index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\" _attr.rowSpan && !_attr.cplSpan && _attr.cloneSeries && _attr.cloneSeries[i]!=='repeated' && m!==1\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n [rowSpan]='_attr.cloneGroupData[i]'\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n {{indexing(_attr.groupData[i],i)}}\n <div [ngSwitch]=\"_attr.widgetType\">\n <!-- when data type is number -->\n <span *ngSwitchCase=\"'int-widget'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"_attr.widgetSubType==='date_range' || _attr.widgetSubType==='datetime' || _attr.widgetSubType==='both'\">\n <span>{{moment(_attr.series[i]+'Z')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.series[i] && _attr.widgetSubType==='timestamp'\">\n <span >{{_attr.series[i]|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='time'\">\n <span *ngIf=\"_attr.series[i] \">{{moment(_attr.series[i],'hh:mm:ss')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='date'\">\n <span *ngIf=\"_attr.series[i] && _attr.widgetSubType==='date'\">{{_attr.series[i]|date:_attr.valueFormatting.date }}</span> </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"_attr.widgetSubType==='decimal'|| _attr.widgetSubType==='text' || _attr.widgetSubType==='string'\">\n {{_attr.series[i]}}\n </span>\n <span *ngIf=\"_attr.widgetSubType==='numeric'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n </span>\n\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- default case -->\n <span *ngSwitchDefault>{{_attr.series[i]}}</span>\n <!-- when series data is empty -->\n <span *ngIf='!_attr.series[i]'>-</span>\n\n </div>\n\n </td>\n </ng-container>\n <!-- when two rows grouped -->\n <ng-container *ngFor=\"let _attr of tabularReport.matrix.attributes; even as isEven;let m = index\">\n <ng-container>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\" tabularReport.rowGrouping.length>1 && m>0 && _attr.rowSpan && _attr.cloneSeries[i]!=='repeated'\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n <div [ngSwitch]=\"_attr.widgetType\">\n <!-- when data type is number -->\n <span *ngSwitchCase=\"'int-widget'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"_attr.widgetSubType==='datetime' || _attr.widgetSubType==='both'\">\n <span>{{moment(_attr.series[i]+'Z')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.series[i] && _attr.widgetSubType==='timestamp'\">\n <span >{{_attr.series[i]|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='time'\">\n <span *ngIf=\"_attr.series[i] \">{{moment(_attr.series[i],'hh:mm:ss')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='date'\">\n <span *ngIf=\"_attr.series[i] && _attr.widgetSubType==='date'\">{{moment(_attr.series[i],'YYYY-MM-dd')|date:_attr.valueFormatting.date }}</span> </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"_attr.widgetSubType==='decimal'|| _attr.widgetSubType==='text' || _attr.widgetSubType==='string' || _attr.widgetSubType==='date_range'\">\n {{_attr.series[i]}}\n </span>\n <span *ngIf=\"_attr.widgetSubType==='numeric'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n </span>\n\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- default case -->\n <span *ngSwitchDefault>{{_attr.series[i]}}</span>\n <!-- when series data is empty -->\n <span *ngIf='!_attr.series[i]'>-</span>\n\n <span *ngIf='_attr.series[i]'> ({{_attr.cloneGroupData[i]}})</span>\n </div>\n </td>\n </ng-container>\n </ng-container>\n\n <!-- when rowCount is off -->\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of map.get(i); let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n\n\n <!-- to show side grand total -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i); let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- to show data with row count -->\n <ng-container *ngIf='tabularReport.rowCount'>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.dataRender.get(i) ;let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n\n\n </td>\n\n <ng-container *ngIf=\"tabularReport.integerArray.length===0 \">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <ng-container *ngIf=\"tabularReport.sideTotal.get(i) && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.totalRowCount.get(i) && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n >{{tabularReport.totalRowCount.get(i)}}</td>\n </ng-container>\n\n </ng-container>\n </tr>\n <!-- subtotal -->\n <tr *ngIf='tabularReport.subTotal && (attrGlobal===i) '>\n <ng-container *ngFor=\"let _attr of tabularReport.rowGrouping; even as isEven;let m = index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"m===0\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n >\n <span>Subtotal</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"m===1\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >-</td>\n </ng-container>\n\n <ng-container *ngFor=\"let data of tabularReport.colSubTotal.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n </ng-container>\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.countsSubTotal.get(i)\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{data}}\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideSubTotal.get(i) let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowCount\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.countSTotal.get(i)}}\n </td>\n </ng-container>\n </tr>\n </ng-container>\n\n </ng-container>\n\n\n <!-- when single row grouping is applied -->\n <ng-container *ngIf=\"tabularReport.rowGrouping.length===1\">\n <ng-container *ngFor=\"let data of tabularReport.matrix.attributes[0].uniqueSeries;let i = index; even as isEven; let data1\">\n <tr>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, tabularReport.matrix.attributes[0], i)\"\n >\n <span>{{data}}</span>\n <span *ngIf='!data'>-</span>\n </td>\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of map.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i); let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of tabularReport.dataRender.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class='px-1.5\tpy-1.5'\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.totalRowCount.get(i)}}\n </td>\n </ng-container>\n </ng-container>\n </tr>\n <!-- when subtotal toggle is on -->\n <tr *ngIf=\"tabularReport.subTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >SubTotal</td>\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of map.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span></td>\n\n <!-- to show side grand total -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n </ng-container>\n <!-- to show row count -->\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.dataRender.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span></td>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.totalRowCount.get(i)}}\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </ng-container>\n\n </ng-container>\n </tbody>\n <!-- Table footer for grand total -->\n <tfoot *ngIf=\"tabularReport.matrix.attributes.length>0\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n >\n <tr *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\">\n Grand Total</td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf='tabularReport.rowGrouping.length>1'\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n -\n </td>\n\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <td *ngFor=\"let total of tabularReport.grandTotal;let m=index\"\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.gTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency \">{{ total | currency:tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.gTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.percentage\">{{total| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.gTotalIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency\">{{total}}</span>\n <span *ngIf=\"!tabularReport.gTotalIntegerIndexing[m]\">{{total}}</span>\n </td>\n </ng-container>\n <!-- when row count toggle is on -->\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <ng-container *ngIf=\"tabularReport.integerArray.length>0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let total of tabularReport.grandTotal2;let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.countTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency \">{{ total | currency:tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.percentage\">{{total| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countTotalIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency\">{{total}}</span>\n <span *ngIf=\"!tabularReport.countTotalIntegerIndexing[m]\">{{total}}</span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let total of tabularReport.countsTotal;let i=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span>{{total}}</span>\n\n </td>\n\n </ng-container>\n </ng-container>\n </tr>\n </tfoot>\n </table>\n <div class=\"flex justify-center items-center flex-col zero-records\" *ngIf=\"(tabularReport.matrix.attributes.length>0 && tabularReport.matrix.attributes[0].series.length===0)\">\n No records available\n </div>\n</div>\n\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n\n<!-- Mat Menu trigger for table columns-->\n<mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button *ngIf=\"tabularReport.matrix.attributes.length>0 \"mat-menu-item [matMenuTriggerFor]=\"Aggregate\">Aggregate</button>\n <button mat-menu-item (click)=\"moveColumnLeft($event)\">Move Left</button>\n <button mat-menu-item (click)=\"moveColumnRight($event)\">Move Right</button>\n <button *ngIf=\"screenTypes.dashboardBuilder === screenType\" mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<!-- --------------------------------------------------------------------------- -->\n\n\n\n<!-- Mat menu trigger for Aggregation-->\n<mat-menu #Aggregate=\"matMenu\">\n <ng-template matMenuContent *ngIf='tabularReport.matrix.attributes.length>0'>\n <section>\n <p>\n <mat-checkbox class=\"aggregate-fun\" [(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showSum'\n (change)=\"sumAggregation($event)\" (click)=\"$event.stopPropagation()\">sum</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\" [(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showAvg'_attr.widgetSubType==='date_range' ||\n (change)=\"averageAggregation($event)\" (click)=\"$event.stopPropagation()\">Average</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\"[(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showMax'\n (change)=\"maxAggregation($event)\" (click)=\"$event.stopPropagation()\">Max</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\"[(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showMin'\n (change)=\"minAggregation($event)\"(click)=\"$event.stopPropagation()\">Min</mat-checkbox>\n </p>\n </section>\n </ng-template>\n</mat-menu>\n\n<div *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\" class=\"loader-spinner\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.TabularChartLoader\" ></app-ghost-loader>\n</div>\n<!-- <div *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\" class=\"loader-spinner\"> -->\n <!-- <mat-spinner [diameter]=\"40\"></mat-spinner></div> -->\n", styles: ["lib-column-group-view{display:block;height:calc(100% - 6.7rem);min-height:calc(100% - 6.7rem);max-height:calc(100% - 6.7rem)}.tabular-report-tabel-th{display:flex}.tabular-report-tabel-th .mat-icon{max-height:10px;min-height:10px;font-size:10px}.tabular-report-tabel-th .tabular-report-table-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabular-report-tabel-th button{width:24px}.zero-records{height:calc(100% - 2.4rem);max-width:100%;position:sticky;left:0}.column-grouping-table-container{min-height:100%;max-height:100%;height:100%;width:100%;padding-top:0;padding-left:14px;padding-right:14px;z-index:99;bottom:1rem}.column-grouping-table-container table{width:99.5%!important;height:auto;border:none!important}.column-grouping-table-container table .thead{position:sticky;top:1px}.column-grouping-table-container table .thead th{position:relative;background-color:#f2f8ff;border-top:none!important;border-bottom:none!important;padding:0}.column-grouping-table-container table .thead th .resize-holder{cursor:col-resize!important;width:20px;height:100%;position:absolute;right:-10px;top:0;z-index:1}.column-grouping-table-container table .thead th:last-child{border-right:none!important}.column-grouping-table-container table .thead th:first-child{border-left:none!important}.column-grouping-table-container table .thead .sr-head{position:absolute;justify-content:center;inset:0;display:flex;align-items:center}.column-grouping-table-container table tbody td{padding-left:4px;padding-right:4px}.url:hover{color:#00f}.loader-spinner{justify-content:center;display:flex;position:sticky;top:50%;vertical-align:middle;margin:0}\n"] }]
4443
+ args: [{ selector: 'lib-column-group-view', encapsulation: ViewEncapsulation.None, template: "<div class=\"column-grouping-table-container customscroll\" *ngIf='tabularReport.matrix.attributes[0].series.length!==0 && tabularReport.isDataLoaded'>\n <table\n (click)=\"tableSelect($event)\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n *ngIf=tabularReport cdkDropListGroup style=\"width:100%\" [ngClass]=\"{'mt-1': tabularReport.matrix.attributes.length>0 && tabularReport.matrix.attributes[0].series.length===0}\">\n <caption></caption>\n <tbody [ngClass]=\"{'shadow':tabularReport.tableStyle.border.shadow.enable}\"\n *ngIf=\"tabularReport.matrix.attributes.length>0\"\n >\n <ng-container *ngFor=\"let _attr of tabularReport.colGrouping; even as isEven;let m = index\">\n <ng-container>\n <tr *ngIf=\"m===0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowGrouping.length===2\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n ></td>\n <th [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"onContextMenu($event,i)\"\n [style.text-align]='attr.alignment'\n\n >{{_attr.label}}</th>\n\n <!-- to show single column grouping unique series -->\n <ng-container *ngFor='let data of _attr.uniqueSeries;let i= index'>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length===1\"\n [colSpan]=tabularReport.rowCount?tabularReport.colData.get(data)+1:tabularReport.colData.get(data)\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, _attr.series.indexOf(data))\">\n\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span >{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n\n </td>\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length>1 && tabularReport.integerArray.length>0\"\n [colSpan]=tabularReport.rowCount?tabularReport.colData.get(data)+tabularReport.secondColData.get(data).length:tabularReport.colData.get(data)\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span >{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.colGrouping.length>1 && tabularReport.integerArray.length===0\"\n [colSpan]=\"tabularReport.secondColData.get(data).length\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >\n\n <ng-container *ngIf=\"data\">\n\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n\n </ng-container>\n <!-- grand total header -->\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.showGrandTotal\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n\n >\n Total\n </td>\n\n </tr>\n\n\n <tr *ngIf=\"m===1\">\n <!-- to show double column grouping header with series data -->\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowGrouping.length===2\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n ></td>\n <th [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='attr.alignment'\n >{{_attr.label}}</th>\n <ng-container *ngFor=\"let series of tabularReport.colGrouping[0].uniqueSeries \">\n\n <ng-container *ngFor=\"let data of tabularReport.secondColData.get(series) let x=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n <ng-container *ngIf=\"data\">\n <div [ngSwitch]=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetType\">\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='datetime' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='both'\">\n <span>{{moment(data+'Z')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='timestamp'\">\n <span>{{data}}</span>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='time'\">\n <span *ngIf=\"data \">{{moment(data,'hh:mm:ss')|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date'\">{{data|date:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='date_range'\">\n {{data}}\n </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='decimal'|| tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='text' || tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='string'\">\n {{data}}\n </span>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{data| axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{data}}</span>\n </span>\n </span>\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+data\" (click)=\"redirect($event,x1ImageMediaUrl+data)\">{{data}}</span>\n </span>\n <!-- default case -->\n <span *ngSwitchDefault>{{data}}</span>\n\n </div>\n </ng-container>\n <span *ngIf='!data'>\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType==='numeric'\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency \">{{ 0 | currency:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage\">{{0 | axoPercentage:tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].series: 'detail'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].valueFormatting.currency\">{{0}}</span>\n </span>\n <!-- when series data is empty -->\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.rowGrouping.length+m].widgetSubType!=='numeric'\">-</span>\n\n </span>\n </td>\n </ng-container>\n\n\n </ng-container>\n <td *ngIf=\"tabularReport.showGrandTotal\"\n class=\"px-1.5\tpy-1.5\"\n [colSpan]=tabularReport.rowCount?tabularReport.integerArray.length+1:tabularReport.integerArray.length\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\">-</td>\n </tr>\n </ng-container>\n </ng-container>\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <!-- column headers -->\n <ng-container *ngFor=\"let attr of tabularReport.rowGrouping; even as isEven;let m = index\">\n <th\n [id]=\"th\"\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"onContextMenu($event,i)\"\n [style.text-align]='attr.alignment'\n >\n <div class=\"tabular-report-tabel-th\">\n <span class=\"tabular-report-table-text\">{{attr.label}}</span>\n <!-- <button mat-icon-button (click)=\"onContextMenu($event,i)\">\n <mat-icon class=\"tab-down-arrow\" svgIcon=\"heroicons_outline:chevron-down\"></mat-icon>\n </button> -->\n </div>\n </th>\n </ng-container>\n\n <!-- to show integer column headers -->\n <ng-container *ngFor=\"let data of tabularReport.cloneDataCount; let m=index\" >\n <ng-container *ngFor=\"let attr of tabularReport.integerArray;let i=index\">\n <th\n [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='attr.alignment'\n >\n <span>{{attr}}</span>\n </th>\n </ng-container>\n <!-- row count header -->\n <th *ngIf=\"tabularReport.rowCount\"\n [id]=th\n class=\"px-1.5\tpy-1.5\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.font-family]=\"tabularReport.tableStyle.header.font.family\"\n [style.color]=\"tabularReport.tableStyle.header.font.color\"\n [style.background]=\"tabularReport.tableStyle.header.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.header.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='attr.alignment'\n >\n Count\n </th>\n </ng-container>\n <!-- horizontal grand total headers -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <ng-container *ngFor=\"let attr of tabularReport.integerArray;let i=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n colGrouping\n\n >\n <span>{{attr}}</span>\n </td>\n </ng-container>\n <td *ngIf=\"tabularReport.rowCount\"\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n\n >\n Count\n </td>\n </ng-container>\n </tr>\n\n <ng-container *ngIf=\"tabularReport.rowGrouping.length>1\">\n <ng-container *ngFor=\"let data of tabularReport.matrix.attributes[0].series;let i = index; even as isEven; let data1\">\n <tr\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [ngStyle]=\"{ background: isEven ? tabularReport.tableStyle.rowStyle.oddColor: tabularReport.tableStyle.rowStyle.evenColor}\"\n [style.border]=\"tabularReport.tableStyle.border.width + ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n\n >\n <!-- series data -->\n <ng-container *ngFor=\"let _attr of tabularReport.matrix.attributes; even as isEven;let m = index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\" _attr.rowSpan && !_attr.cplSpan && _attr.cloneSeries && _attr.cloneSeries[i]!=='repeated' && m!==1\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n [rowSpan]='_attr.cloneGroupData[i]'\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n {{indexing(_attr.groupData[i],i)}}\n <div [ngSwitch]=\"_attr.widgetType\">\n <!-- when data type is number -->\n <span *ngSwitchCase=\"'int-widget'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"_attr.widgetSubType==='date_range' || _attr.widgetSubType==='datetime' || _attr.widgetSubType==='both'\">\n <span>{{moment(_attr.series[i]+'Z')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.series[i] && _attr.widgetSubType==='timestamp'\">\n <span >{{_attr.series[i]|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='time'\">\n <span *ngIf=\"_attr.series[i] \">{{moment(_attr.series[i],'hh:mm:ss')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='date'\">\n <span *ngIf=\"_attr.series[i] && _attr.widgetSubType==='date'\">{{_attr.series[i]|date:_attr.valueFormatting.date }}</span> </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"_attr.widgetSubType==='decimal'|| _attr.widgetSubType==='text' || _attr.widgetSubType==='string'\">\n {{_attr.series[i]}}\n </span>\n <span *ngIf=\"_attr.widgetSubType==='numeric'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n </span>\n\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- default case -->\n <span *ngSwitchDefault>{{_attr.series[i]}}</span>\n <!-- when series data is empty -->\n <span *ngIf='!_attr.series[i]'>-</span>\n\n </div>\n\n </td>\n </ng-container>\n <!-- when two rows grouped -->\n <ng-container *ngFor=\"let _attr of tabularReport.matrix.attributes; even as isEven;let m = index\">\n <ng-container>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\" tabularReport.rowGrouping.length>1 && m>0 && _attr.rowSpan && _attr.cloneSeries[i]!=='repeated'\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n (contextmenu)=\"drillThroughContext($event, _attr, i)\"\n >\n <div [ngSwitch]=\"_attr.widgetType\">\n <!-- when data type is number -->\n <span *ngSwitchCase=\"'int-widget'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n <!-- when data type is datetime -->\n <span *ngSwitchCase=\"'datepicker-widget'\">\n <ng-container *ngIf=\"_attr.widgetSubType==='datetime' || _attr.widgetSubType==='both'\">\n <span>{{moment(_attr.series[i]+'Z')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.series[i] && _attr.widgetSubType==='timestamp'\">\n <span >{{_attr.series[i]|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='time'\">\n <span *ngIf=\"_attr.series[i] \">{{moment(_attr.series[i],'hh:mm:ss')|date:_attr.valueFormatting.date}}</span>\n </ng-container>\n <ng-container *ngIf=\"_attr.widgetSubType==='date'\">\n <span *ngIf=\"_attr.series[i] && _attr.widgetSubType==='date'\">{{moment(_attr.series[i],'YYYY-MM-dd')|date:_attr.valueFormatting.date }}</span> </ng-container>\n </span>\n <!-- when data type is text -->\n <span *ngSwitchCase=\"'textbox-widget'\">\n <span *ngIf=\"_attr.widgetSubType==='decimal'|| _attr.widgetSubType==='text' || _attr.widgetSubType==='string' || _attr.widgetSubType==='date_range'\">\n {{_attr.series[i]}}\n </span>\n <span *ngIf=\"_attr.widgetSubType==='numeric'\">\n <span *ngIf=\"_attr.valueFormatting.currency \">{{ _attr.series[i] | currency:_attr.valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" _attr.valueFormatting.percentage\">{{_attr.series[i]| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!_attr.valueFormatting.percentage && !_attr.valueFormatting.currency\">{{_attr.series[i]}}</span>\n </span>\n </span>\n\n <!-- When widget type is web link -->\n <span *ngSwitchCase=\"'hyperlink-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is signature widget -->\n <span *ngSwitchCase=\"'wetsignaturecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is video widget -->\n <span *ngSwitchCase=\"'videocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is audio widget -->\n <span *ngSwitchCase=\"'audiocapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'fileupload-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- When widget type is document widget -->\n <span *ngSwitchCase=\"'imagecapture-widget'\">\n <span class=\"url\" [title]=\"x1ImageMediaUrl+_attr.series[i]\" (click)=\"redirect($event,x1ImageMediaUrl+_attr.series[i])\">{{_attr.series[i]}}</span>\n </span>\n\n <!-- default case -->\n <span *ngSwitchDefault>{{_attr.series[i]}}</span>\n <!-- when series data is empty -->\n <span *ngIf='!_attr.series[i]'>-</span>\n\n <span *ngIf='_attr.series[i]'> ({{_attr.cloneGroupData[i]}})</span>\n </div>\n </td>\n </ng-container>\n </ng-container>\n\n <!-- when rowCount is off -->\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of map.get(i); let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n\n\n <!-- to show side grand total -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i); let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- to show data with row count -->\n <ng-container *ngIf='tabularReport.rowCount'>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.dataRender.get(i) ;let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n\n\n </td>\n\n <ng-container *ngIf=\"tabularReport.integerArray.length===0 \">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <ng-container *ngIf=\"tabularReport.sideTotal.get(i) && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.totalRowCount.get(i) && tabularReport.matrix.attributes[1].cloneSeries[i]!=='repeated'\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n >{{tabularReport.totalRowCount.get(i)}}</td>\n </ng-container>\n\n </ng-container>\n </tr>\n <!-- subtotal -->\n <tr *ngIf='tabularReport.subTotal && (attrGlobal===i) '>\n <ng-container *ngFor=\"let _attr of tabularReport.rowGrouping; even as isEven;let m = index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"m===0\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.text-align]='_attr.alignment'\n >\n <span>Subtotal</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"m===1\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >-</td>\n </ng-container>\n\n <ng-container *ngFor=\"let data of tabularReport.colSubTotal.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n </ng-container>\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.countsSubTotal.get(i)\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{data}}\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideSubTotal.get(i) let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf=\"tabularReport.rowCount\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.countSTotal.get(i)}}\n </td>\n </ng-container>\n </tr>\n </ng-container>\n\n </ng-container>\n\n\n <!-- when single row grouping is applied -->\n <ng-container *ngIf=\"tabularReport.rowGrouping.length===1\">\n <ng-container *ngFor=\"let data of tabularReport.matrix.attributes[0].uniqueSeries;let i = index; even as isEven; let data1\">\n <tr>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subHeader.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subHeader.font.size\"\n [style.background]=\"tabularReport.tableStyle.subHeader.backgroundColor\"\n [style.color]=\"tabularReport.tableStyle.subHeader.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n (contextmenu)=\"drillThroughContext($event, tabularReport.matrix.attributes[0], i)\"\n >\n <span>{{data}}</span>\n <span *ngIf='!data'>-</span>\n </td>\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of map.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i); let m=index\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n </ng-container>\n\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <ng-container *ngFor=\"let data of tabularReport.dataRender.get(i) let m=index\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span>\n\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.body.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class='px-1.5\tpy-1.5'\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.totalRowCount.get(i)}}\n </td>\n </ng-container>\n </ng-container>\n </tr>\n <!-- when subtotal toggle is on -->\n <tr *ngIf=\"tabularReport.subTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\" >SubTotal</td>\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of map.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span></td>\n\n <!-- to show side grand total -->\n <ng-container *ngIf=\"tabularReport.showGrandTotal\" >\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n </td>\n </ng-container>\n </ng-container>\n <!-- to show row count -->\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.dataRender.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.body.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.body.font.size\"\n [style.color]=\"tabularReport.tableStyle.body.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countIntegerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n <span *ngIf=\"!tabularReport.countIntegerIndexing[m]\">{{data}}</span></td>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n <ng-container *ngFor=\"let data of tabularReport.countsData.get(i)\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n > {{data}}</td>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let data of tabularReport.sideTotal.get(i) let m=index\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n <span *ngIf=\"tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency \">{{ data | currency:tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage\">{{data| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"!tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.integerIndexing[m]].valueFormatting.currency\">{{data}}</span>\n\n </td>\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.font-family]=\"tabularReport.tableStyle.subFooter.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.subFooter.font.size\"\n [style.color]=\"tabularReport.tableStyle.subFooter.font.color\"\n [style.background]=\"tabularReport.tableStyle.subFooter.backgroundColor\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n {{tabularReport.totalRowCount.get(i)}}\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </ng-container>\n\n </ng-container>\n </tbody>\n <!-- Table footer for grand total -->\n <tfoot *ngIf=\"tabularReport.matrix.attributes.length>0\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.font-size.px]=\"tabularReport.tableStyle.footer.font.size\"\n [style.color]=\"tabularReport.tableStyle.footer.font.color\"\n >\n <tr *ngIf=\"tabularReport.showGrandTotal\">\n <td\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\">\n Grand Total</td>\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngIf='tabularReport.rowGrouping.length>1'\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n >\n -\n </td>\n\n <ng-container *ngIf=\"!tabularReport.rowCount\">\n <td *ngFor=\"let total of tabularReport.grandTotal;let m=index\"\n class=\"px-1.5\tpy-1.5\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.gTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency \">{{ total | currency:tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.gTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.percentage\">{{total| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.gTotalIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.gTotalIntegerIndexing[m]].valueFormatting.currency\">{{total}}</span>\n <span *ngIf=\"!tabularReport.gTotalIntegerIndexing[m]\">{{total}}</span>\n </td>\n </ng-container>\n <!-- when row count toggle is on -->\n <ng-container *ngIf=\"tabularReport.rowCount\">\n <ng-container *ngIf=\"tabularReport.integerArray.length>0\">\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let total of tabularReport.grandTotal2;let m=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span *ngIf=\"tabularReport.countTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency \">{{ total | currency:tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency :'symbol'}}</span>\n <span *ngIf=\" tabularReport.countTotalIntegerIndexing[m] && tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.percentage\">{{total| axoPercentage: [] : 'column'}}</span>\n <span *ngIf=\"tabularReport.countTotalIntegerIndexing[m] && !tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.percentage && !tabularReport.matrix.attributes[tabularReport.countTotalIntegerIndexing[m]].valueFormatting.currency\">{{total}}</span>\n <span *ngIf=\"!tabularReport.countTotalIntegerIndexing[m]\">{{total}}</span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"tabularReport.integerArray.length===0\">\n\n <td\n class=\"px-1.5\tpy-1.5\"\n *ngFor=\"let total of tabularReport.countsTotal;let i=index\"\n [style.border]=\"tabularReport.tableStyle.border.width+'px'+ ' '+ tabularReport.tableStyle.border.borderStyle + ' ' + tabularReport.tableStyle.border.color\"\n [style.font-family]=\"tabularReport.tableStyle.footer.font.family\"\n [style.background]=\"tabularReport.tableStyle.footer.backgroundColor\"\n >\n <span>{{total}}</span>\n\n </td>\n\n </ng-container>\n </ng-container>\n </tr>\n </tfoot>\n </table>\n <div class=\"flex justify-center items-center flex-col zero-records\" *ngIf=\"(tabularReport.matrix.attributes.length>0 && tabularReport.matrix.attributes[0].series.length===0)\">\n No records available\n </div>\n</div>\n\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n\n<!-- Mat Menu trigger for table columns-->\n<mat-menu #contextMenu=\"matMenu\">\n <div id=\"table-menu\">\n <ng-template matMenuContent let-item=\"reportData\">\n <button *ngIf=\"tabularReport.matrix.attributes.length>0 \"mat-menu-item [matMenuTriggerFor]=\"Aggregate\">Aggregate</button>\n <button mat-menu-item (click)=\"moveColumnLeft($event)\">Move Left</button>\n <button mat-menu-item (click)=\"moveColumnRight($event)\">Move Right</button>\n <button *ngIf=\"screenTypes.dashboardBuilder === screenType\" mat-menu-item (click)=\"removeFromDashboard()\">Remove From Dashboard</button>\n </ng-template>\n </div>\n</mat-menu>\n<!-- --------------------------------------------------------------------------- -->\n\n\n\n<!-- Mat menu trigger for Aggregation-->\n<mat-menu #Aggregate=\"matMenu\">\n <ng-template matMenuContent *ngIf='tabularReport.matrix.attributes.length>0'>\n <section>\n <p>\n <mat-checkbox class=\"aggregate-fun\" [(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showSum'\n (change)=\"sumAggregation($event)\" (click)=\"$event.stopPropagation()\">sum</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\" [(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showAvg'_attr.widgetSubType==='date_range' ||\n (change)=\"averageAggregation($event)\" (click)=\"$event.stopPropagation()\">Average</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\"[(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showMax'\n (change)=\"maxAggregation($event)\" (click)=\"$event.stopPropagation()\">Max</mat-checkbox>\n </p>\n <p>\n <mat-checkbox class=\"aggregate-fun\"[(ngModel)]='tabularReport.matrix.attributes[currentIndex].aggregate.showMin'\n (change)=\"minAggregation($event)\"(click)=\"$event.stopPropagation()\">Min</mat-checkbox>\n </p>\n </section>\n </ng-template>\n</mat-menu>\n\n<div *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\" class=\"loader-spinner\">\n <app-ghost-loader [elementType]=\"GhostLoaderType.TabularChartLoader\" ></app-ghost-loader>\n</div>\n<!-- <div *ngIf=\"!tabularReport.isDataLoaded && tabularReport.matrix.attributes.length!==0\" class=\"loader-spinner\"> -->\n <!-- <mat-spinner [diameter]=\"40\"></mat-spinner></div> -->\n", styles: ["lib-column-group-view{display:block;height:calc(100% - 6.7rem);min-height:calc(100% - 6.7rem);max-height:calc(100% - 6.7rem)}.tabular-report-tabel-th{display:flex}.tabular-report-tabel-th .mat-icon{max-height:10px;min-height:10px;font-size:10px}.tabular-report-tabel-th .tabular-report-table-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabular-report-tabel-th button{width:24px}.zero-records{height:calc(100% - 2.4rem);max-width:100%;position:sticky;left:0}.column-grouping-table-container{min-height:100%;max-height:100%;height:100%;width:100%;padding-top:0;padding-left:14px;padding-right:14px;z-index:99;bottom:1rem}.column-grouping-table-container table{width:99.5%!important;height:auto;border:none!important}.column-grouping-table-container table .thead{position:sticky;top:1px}.column-grouping-table-container table .thead th{position:relative;background-color:#f2f8ff;border-top:none!important;border-bottom:none!important;padding:0}.column-grouping-table-container table .thead th .resize-holder{cursor:col-resize!important;width:20px;height:100%;position:absolute;right:-10px;top:0;z-index:1}.column-grouping-table-container table .thead th:last-child{border-right:none!important}.column-grouping-table-container table .thead th:first-child{border-left:none!important}.column-grouping-table-container table .thead .sr-head{position:absolute;justify-content:center;inset:0;display:flex;align-items:center}.column-grouping-table-container table tbody td{padding-left:4px;padding-right:4px}.url:hover{color:#00f}.loader-spinner{justify-content:center;display:flex;position:sticky;top:50%;vertical-align:middle;margin:0}\n"] }]
4444
4444
  }], function () { return [{ type: i1.ReportBuilderMasterService }, { type: i2.FieldsListService }, { type: i3.TabularReportService }, { type: i4.DashboardBuilderService }]; }, { tabularReport: [{
4445
4445
  type: Input
4446
4446
  }], isEditable: [{
@@ -4461,4 +4461,4 @@ ColumnGroupViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Co
4461
4461
  type: ViewChild,
4462
4462
  args: [MatMenuTrigger]
4463
4463
  }] }); })();
4464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9lbmxpZ2h0ZW4tbGliL3JlcG9ydC90YWJ1bGFyLXJlcG9ydC90YWJ1bGFyL2NvbHVtbi1ncm91cC12aWV3L2NvbHVtbi1ncm91cC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1jb21tb24tdWktbGliL3NyYy9saWIvZW5saWdodGVuLWxpYi9yZXBvcnQvdGFidWxhci1yZXBvcnQvdGFidWxhci9jb2x1bW4tZ3JvdXAtdmlldy9jb2x1bW4tZ3JvdXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUd0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JB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d0IsRUFBRSxDQUFTO1FBQ3hFLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDOztnR0FsUFUsd0JBQXdCOzJFQUF4Qix3QkFBd0I7dUJBV3hCLGNBQWM7Ozs7O1FDbEMzQix5RUFxcENNO1FBRU4seUJBRU07UUFHTix5Q0FBaUM7UUFDL0IsOEJBQXFCO1FBQ25CLHlGQUtjO1FBQ2hCLGlCQUFNO1FBQ1IsaUJBQVc7UUFNWCx5Q0FBK0I7UUFDN0IseUVBbUJjO1FBQ2hCLGlCQUFXO1FBRVgseUVBRU07OztRQXBzQ3FELG1IQUF3RjtRQXVwQ2xHLGVBQW9DO1FBQXBDLGlEQUFvQyxrQ0FBQTtRQUMvQyx1Q0FBaUM7UUFvQnhDLGVBQThDO1FBQTlDLHFFQUE4QztRQXNCdkUsZUFBK0U7UUFBL0UsMEdBQStFOzt1RkQzcUN4RSx3QkFBd0I7Y0FOcEMsU0FBUzsyQkFDRSx1QkFBdUIsaUJBR25CLGlCQUFpQixDQUFDLElBQUk7c0xBSzNCLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxzQkFBc0I7a0JBQTlCLEtBQUs7WUFDRyx1QkFBdUI7a0JBQS9CLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUdOLFdBQVc7a0JBRlYsU0FBUzttQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEVsZW1lbnRzRHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tbW9uLWR0by9lbGVtZW50cy1kdG8nO1xuaW1wb3J0IHsgUmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9yZXBvcnQtYnVpbGRlci1tYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJ1bGFyUmVwb3J0IH0gZnJvbSAnLi4vLi4vdGFidWxhci1yZXBvcnQnO1xuaW1wb3J0IHsgVGFidWxhclJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi90YWJ1bGFyLXJlcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkc0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZmllbGQtbGlzdC1saWIvZmllbGRzLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21tb24tdXRpbHMvcmVwb3J0JztcbmltcG9ydCB7IEF0dHJpYnV0ZURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9maWVsZHMvYXR0cmlidXRlLWRhdGEnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kYXNoYm9hcmQtbGliL2Rhc2hib2FyZC1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NyZWVuVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VubGlnaHRlbi1saWIvZmlsdGVycy9jb25kaXRpb24tdHlwZSc7XG5pbXBvcnQgeyBUYWJ1bGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFidWxhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXhGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9maWx0ZXJzL2F4LWZpbHRlcic7XG5pbXBvcnQgeyBHaG9zdExvYWRlclR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9naG9zdC1sb2FkZXIvZ2hvc3QtbG9hZGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jb2x1bW4tZ3JvdXAtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tZ3JvdXAtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbHVtbi1ncm91cC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246Vmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5Hcm91cFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cblxuICBASW5wdXQoKSB0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0O1xuICBASW5wdXQoKSBpc0VkaXRhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSB4MUltYWdlTWVkaWFVcmw6IHN0cmluZztcbiAgQElucHV0KCkgc2NyZWVuVHlwZTogU2NyZWVuVHlwZTtcbiAgQElucHV0KCkgZHJpbGxUaHJvdWdoUGFyZW50VHlwZTogU2NyZWVuVHlwZTtcbiAgQElucHV0KCkgZHJpbGxUaHJvdWdoRmlsdGVySW5wdXQ6IEF4RmlsdGVyO1xuICBASW5wdXQoKSBwYXJlbnRSZWY6IFRhYnVsYXJDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHJlcG9ydElkOiBudW1iZXI7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpXG5cbiAgY29udGV4dE1lbnU6IE1hdE1lbnVUcmlnZ2VyO1xuICBjb2x1bW5EYXRhOiBhbnk7XG4gIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6ICcwcHgnLCB5OiAnMHB4JyB9O1xuICBjdXJyZW50SW5kZXg6IG51bWJlcjtcbiAgX2F2ZzogYm9vbGVhbiA9IGZhbHNlO1xuICBfbWF4OiBib29sZWFuID0gZmFsc2U7XG4gIF9taW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1N1bTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93TWF4OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dNaW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0F2ZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb21lbnQ6IGFueSA9IG1vbWVudDtcbiAgaXNEaXJ0eTogYm9vbGVhbjtcbiAgcmVwb3J0OiBSZXBvcnQ7XG4gIGF0dHJHbG9iYWw6IG51bWJlcjtcbiAgY291bnQ6IG51bWJlcjtcbiAgY3Q6IG51bWJlcjtcbiAgY29sU2VyaWVzOiBudW1iZXI7XG4gIGF0dHJpYnV0ZURhdGFDbG9uZTogQXJyYXk8QXR0cmlidXRlRGF0YT4gPSBbXTtcbiAgbWFwOiBNYXA8bnVtYmVyLCBhbnk+O1xuICBpc0RhdGFMb2FkZWQgPSBmYWxzZTtcbiAgZkNvbERhdGE6IEFycmF5PHN0cmluZz47XG4gIEdob3N0TG9hZGVyVHlwZSA9IEdob3N0TG9hZGVyVHlwZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2U6IFJlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2ZpZWxkc0xpc3RTZXJ2aWNlOiBGaWVsZHNMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF90YWJ1bGFyUmVwb3J0U2VydmljZTogVGFidWxhclJlcG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZGFzaGJvYXJkQnVpbGRlclNlcnZpY2U6IERhc2hib2FyZEJ1aWxkZXJTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIHRoaXMudGFidWxhclJlcG9ydD10aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5jb2x1bW5EYXRhKHRoaXMudGFidWxhclJlcG9ydCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG9ydCA9IHRoaXMuX3JlcG9ydEJ1aWxkZXJNYXN0ZXJTZXJ2aWNlLnJlcG9ydDtcblxuICAgIHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmNvbHVtbkRhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcblxuICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdldE1hdHJpeERpbWVuc2lvbigpO1xuXG4gICAgdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuZGF0YVJlbmRlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLm1hcCA9IHZhbHVlO1xuICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmZpcnN0Q29sRGF0YSA9IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWF0cml4RGltZW5zaW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBFbGVtZW50c0R0byh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICAgICAgZGF0YS5yZXBvcnRJZCA9IHRoaXMucmVwb3J0SWQ7XG4gICAgICBkYXRhLnR5cGUgPSAndGFidWxhci1yZXBvcnQnO1xuICAgICAgZGF0YS5vcmRlckJ5ID0gdGhpcy50YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nO1xuICAgICAgZGF0YS5wYWdlSW5kZXggPSAwO1xuICAgICAgZGF0YS5wYWdlU2l6ZSA9IDA7XG4gICAgICBkYXRhLnBhZ2VMZW5ndGg9MDtcbiAgICAgIGlmICh0aGlzLmRyaWxsVGhyb3VnaFBhcmVudFR5cGUgPT0gU2NyZWVuVHlwZS5kYXNoYm9hcmRCdWlsZGVyIHx8IHRoaXMuZHJpbGxUaHJvdWdoUGFyZW50VHlwZSA9PSBTY3JlZW5UeXBlLmNvbnRhaW5lckRhc2hib2FyZCkge1xuICAgICAgICBkYXRhLmFwaVR5cGUgPSAnZGFzaGJvYXJkJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNjcmVlblR5cGUgPT09IFNjcmVlblR5cGUuZHJpbGxUaHJvdWdoKSB7XG4gICAgICAgIGRhdGEuZmlsdGVycy5nbG9iYWxGaWx0ZXJzLmJhc2ljLnB1c2godGhpcy5kcmlsbFRocm91Z2hGaWx0ZXJJbnB1dCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZHNMaXN0U2VydmljZS5nZXRNYXRyaXhEYXRhKGRhdGEpLnRoZW4oKGVudGl0aWVzQXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGlmIChlbnRpdGllc0F0dHJpYnV0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXMuc2hvd1N1bSA9IHRydWU7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzID0gZW50aXRpZXNBdHRyaWJ1dGUubWF0cml4LmF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuZ3JvdXBEYXRhKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UubmV3RGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQsIGF0dHJpYnV0ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuZGF0YUZhY3RvcnkodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICBpZiAodGhpcy50YWJ1bGFyUmVwb3J0LnJvd0NvdW50ICYmIHRoaXMudGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoID4gMCkgeyB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5yb3dDb3VudERhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTsgfVxuICAgICAgICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMudGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICB9XG5cblxuICAvLyBjb250ZXh0IG1lbnUgZm9yIHRhYmxlIGNvbHVtbnNcbiAgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlciwgYXR0cjogQXR0cmlidXRlRGF0YSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnggPSBldmVudC5jbGllbnRYICsgJ3B4JztcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueSA9IGV2ZW50LmNsaWVudFkgKyAncHgnO1xuICAgIHRoaXMuY29udGV4dE1lbnUubWVudURhdGEgPSB7ICdhdHRyJzogYXR0ciB9O1xuICAgIHRoaXMuY29udGV4dE1lbnUubWVudS5mb2N1c0ZpcnN0SXRlbSgnbW91c2UnKTtcbiAgICB0aGlzLmNvbnRleHRNZW51Lm9wZW5NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogdG8gcmV0dXJucyBzdW0gb2Ygcm93c1xuICAgKlxuICAgKi9cbiAgc3VtKHNlcmllczogQXJyYXk8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKSB7XG4gICAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMucmVwb3J0LmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0b3RhbDtcbiAgfVxuICAvKipcbiAgICogdG8gcmV0dXJucyBhdmVyYWdlIG9mIHJvd3NcbiAgICpcbiAgICovXG4gIGF2ZyhzZXJpZXM6IEFycmF5PHN0cmluZz4pOiBudW1iZXIge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNlcmllcykge1xuICAgICAgdG90YWwgKz0gTnVtYmVyKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLnJlcG9ydC5pc0RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdG90YWwgLyBzZXJpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIHRvIHJldHVybnMgbWF4aW11bSB2YWx1ZSBvZiByb3dzXG4gICAqXG4gICAqL1xuICBtYXgoc2VyaWVzOiBBcnJheTxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBjb25zdCBhID0gW107XG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNlcmllcykge1xuICAgICAgYS5wdXNoKE51bWJlcihkYXRhKSk7XG4gICAgfVxuICAgIHRoaXMucmVwb3J0LmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBNYXRoLm1heCguLi5hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0byByZXR1cm5zIG1pbmltdW0gdmFsdWUgb2Ygcm93c1xuICAgKlxuICAgKi9cbiAgbWluKHNlcmllczogQXJyYXk8c3RyaW5nPik6IG51bWJlciB7XG4gICAgY29uc3QgYSA9IFtdO1xuICAgIGZvciAoY29uc3QgZGF0YSBvZiBzZXJpZXMpIHtcbiAgICAgIGEucHVzaChOdW1iZXIoZGF0YSkpO1xuICAgIH1cbiAgICB0aGlzLnJlcG9ydC5pc0RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gTWF0aC5taW4oLi4uYSk7XG4gIH1cblxuICAvKioqXG4gICAqIE9uIGNoYXJ0IGNvbnRleHQgIGNsaWNrIGZvciBzdW0gYWdncmVnYXRpb25cbiAgICovXG4gIHN1bUFnZ3JlZ2F0aW9uKG9iOiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1N1bSA9IG9iLmNoZWNrZWQ7XG4gIH1cbiAgLyoqKlxuICAgKiBPbiBjaGFydCBjb250ZXh0ICBjbGljayBmb3IgYXZnIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICBhdmVyYWdlQWdncmVnYXRpb24ob2I6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QXZnID0gb2IuY2hlY2tlZDtcbiAgfVxuICAvKioqXG4gICAqIE9uIGNoYXJ0IGNvbnRleHQgIGNsaWNrIGZvciBtYXggYWdncmVnYXRpb25cbiAgICovXG4gIG1heEFnZ3JlZ2F0aW9uKG9iOiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01heCA9IG9iLmNoZWNrZWQ7XG4gIH1cbiAgLyoqKlxuICAgKiBPbiBjaGFydCBjb250ZXh0ICBjbGljayBmb3IgbWluIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICBtaW5BZ2dyZWdhdGlvbihvYjogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNaW4gPSBvYi5jaGVja2VkO1xuICB9XG5cblxuICAvKipcbiAgICogdG8gc2V0IGlzRGlydHkgYWZ0ZXIgY2hhbmdlcyBpbiB0YWJ1bGFyIHJlcG9ydCBmaWx0ZXJcbiAgICpcbiAgICovXG4gIGRpcnR5Rmxvd0NoZWNrRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBvcnQuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICAvKip1c2VkIHRvIGNyZWF0ZSBhIHJvdyBmb3Igc3VidG90YWxcbiAqXG4gKkBwYXJhbSBudW1iZXJcbiAqQHBhcmFtIG51bWJlclxuICovXG4gIGluZGV4aW5nKGNvdW50XzogbnVtYmVyLCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN0ID0gY291bnRfO1xuICAgIGlmIChjb3VudF8gPT09IDEpIHtcbiAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgdGhpcy5hdHRyR2xvYmFsID0gaTtcbiAgICB9XG4gICAgaWYgKGNvdW50XyA+IDEpIHtcbiAgICAgIHRoaXMuYXR0ckdsb2JhbCA9IChjb3VudF8gKyBpKSAtIDE7XG4gICAgfVxuXG4gIH1cbiAgLyoqXG4gICAqIHdpbGwgZW1pdCB0YWJsZSBwcm9wZXJ0aWVzIG9uIHRhYmxlIGNsaWNrIHRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICB0YWJsZVNlbGVjdChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UudGFibGVDbGlja0V2ZW50KHRoaXMudGFidWxhclJlcG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogdG8gcmVkaXJlY3QgbWVkaWEgdXJsXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gdXJsXG4gICAqL1xuICByZWRpcmVjdChldmVudDogS2V5Ym9hcmRFdmVudCwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGcm9tRGFzaGJvYXJkKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rhc2hib2FyZEJ1aWxkZXJTZXJ2aWNlLmRlbGV0ZUVsZW1lbnQuZW1pdCh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICB9XG5cbiAgZHJpbGxUaHJvdWdoQ29udGV4dChldmVudDogTW91c2VFdmVudCwgYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhLCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudFJlZi5kcmlsbFRocm91Z2hDb250ZXh0KGV2ZW50LCBhdHRyaWJ1dGUsIGF0dHJpYnV0ZS5zZXJpZXMuaW5kZXhPZihhdHRyaWJ1dGUudW5pcXVlU2VyaWVzW2ldKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW4tZ3JvdXBpbmctdGFibGUtY29udGFpbmVyIGN1c3RvbXNjcm9sbFwiICpuZ0lmPSd0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGghPT0wICYmIHRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkJz5cbiAgPHRhYmxlXG4gICAgKGNsaWNrKT1cInRhYmxlU2VsZWN0KCRldmVudClcIlxuICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAqbmdJZj10YWJ1bGFyUmVwb3J0IGNka0Ryb3BMaXN0R3JvdXAgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgW25nQ2xhc3NdPVwieydtdC0xJzogdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MCAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGg9PT0wfVwiPlxuICAgIDxjYXB0aW9uPjwvY2FwdGlvbj5cbiAgICA8dGJvZHkgIFtuZ0NsYXNzXT1cInsnc2hhZG93Jzp0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLnNoYWRvdy5lbmFibGV9XCJcbiAgICAgICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MFwiXG4gICAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfYXR0ciBvZiB0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgPHRyICpuZ0lmPVwibT09PTBcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPT09MlwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICA+PC90ZD5cbiAgICAgICAgICAgIDx0aCBbaWRdPXRoXG4gICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCxpKVwiXG5cbiAgICAgICAgICAgID57e19hdHRyLmxhYmVsfX08L3RoPlxuXG4gICAgICAgICAgICA8IS0tIHRvIHNob3cgc2luZ2xlIGNvbHVtbiBncm91cGluZyB1bmlxdWUgc2VyaWVzIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCBkYXRhIG9mIF9hdHRyLnVuaXF1ZVNlcmllcztsZXQgaT0gaW5kZXgnPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5jb2xEYXRhLmdldChkYXRhKSsxOnRhYnVsYXJSZXBvcnQuY29sRGF0YS5nZXQoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBfYXR0ci5zZXJpZXMuaW5kZXhPZihkYXRhKSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgIFtuZ1N3aXRjaF09XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIGRhdGV0aW1lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGV0aW1lJyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nYm90aCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttb21lbnQoZGF0YSsnWicpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YSBcIj57e21vbWVudChkYXRhLCdoaDptbTpzcycpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlJ1wiPnt7ZGF0YXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGF9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRib3gtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGF9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCxkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBzaWduYXR1cmUgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInd2V0c2lnbmF0dXJlY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHZpZGVvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2F1ZGlvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidmaWxldXBsb2FkLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tkYXRhfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSchZGF0YSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3swIHwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdkZXRhaWwnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57ezB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gc2VyaWVzIGRhdGEgaXMgZW1wdHkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlIT09J251bWVyaWMnXCI+LTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjEgJiYgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPjBcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU3Bhbl09dGFidWxhclJlcG9ydC5yb3dDb3VudD90YWJ1bGFyUmVwb3J0LmNvbERhdGEuZ2V0KGRhdGEpK3RhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoZGF0YSkubGVuZ3RoOnRhYnVsYXJSZXBvcnQuY29sRGF0YS5nZXQoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRldGltZScgfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+e3ttb21lbnQoZGF0YSsnWicpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0ndGltZXN0YW1wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEgXCI+e3ttb21lbnQoZGF0YSwnaGg6bW06c3MnKXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj57e2RhdGF8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidoeXBlcmxpbmstd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIWRhdGEnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7MCB8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnZGV0YWlsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjEgJiYgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cInRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoZGF0YSkubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRldGltZScgfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChkYXRhKydaJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0aW1lc3RhbXAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEgXCI+e3ttb21lbnQoZGF0YSwnaGg6bW06c3MnKXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj57e2RhdGF8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidoeXBlcmxpbmstd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIWRhdGEnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7MCB8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnZGV0YWlsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8IS0tIGdyYW5kIHRvdGFsIGhlYWRlciAtLT5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuc2hvd0dyYW5kVG90YWxcIlxuICAgICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE6dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFRvdGFsXG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwvdHI+XG5cblxuICAgICAgICA8dHIgKm5nSWY9XCJtPT09MVwiPlxuICAgICAgICAgIDwhLS0gdG8gc2hvdyBkb3VibGUgY29sdW1uIGdyb3VwaW5nIGhlYWRlciB3aXRoIHNlcmllcyBkYXRhIC0tPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg9PT0yXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgPHRoIFtpZF09dGhcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcblxuICAgICAgICAgID57e19hdHRyLmxhYmVsfX08L3RoPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlcmllcyBvZiB0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcyBcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykgbGV0IHg9aW5kZXhcIj5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09dGFidWxhclJlcG9ydC5yb3dDb3VudD90YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGhcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBpKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAgW25nU3dpdGNoXT1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlcGlja2VyLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZXRpbWUnIHx8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdib3RoJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChkYXRhKydaJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0ndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhIFwiPnt7bW9tZW50KGRhdGEsJ2hoOm1tOnNzJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+e3tkYXRhfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGVfcmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RleHQnIHx8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgd2ViIGxpbmsgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaHlwZXJsaW5rLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHNpZ25hdHVyZSB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndmlkZW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgYXVkaW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYXVkaW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGRvY3VtZW50IHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbWFnZWNhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZGVmYXVsdCBjYXNlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9JyFkYXRhJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7ICAwIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57ezAgfCAgYXhvUGVyY2VudGFnZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnNlcmllczogJ2RldGFpbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBzZXJpZXMgZGF0YSBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHRkICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE6dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiPi08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ciBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIGNsYXNzPVwiZXhhbXBsZS1saXN0XCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgPCEtLSBjb2x1bW4gaGVhZGVycyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0ciBvZiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICBbaWRdPVwidGhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCxpKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdhdHRyLmFsaWdubWVudCdcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnVsYXItcmVwb3J0LXRhYmVsLXRoXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYnVsYXItcmVwb3J0LXRhYmxlLXRleHRcIj57e2F0dHIubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LGkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRhYi1kb3duLWFycm93XCIgc3ZnSWNvbj1cImhlcm9pY29uc19vdXRsaW5lOmNoZXZyb24tZG93blwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSB0byBzaG93IGludGVnZXIgY29sdW1uIGhlYWRlcnMgIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQ7IGxldCBtPWluZGV4XCIgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyIG9mIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5O2xldCBpPWluZGV4XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgIFtpZF09dGhcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7YXR0cn19PC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8IS0tIHJvdyBjb3VudCBoZWFkZXIgLS0+XG4gICAgICAgICAgPHRoICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dDb3VudFwiXG4gICAgICAgICAgW2lkXT10aFxuICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIENvdW50XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gaG9yaXpvbnRhbCBncmFuZCB0b3RhbCBoZWFkZXJzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyIG9mIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5O2xldCBpPWluZGV4XCI+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgY29sR3JvdXBpbmdcblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3thdHRyfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZCAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIlxuICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG5cbiAgICAgICAgPlxuICAgICAgICAgIENvdW50XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdHI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD4xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzO2xldCBpID0gaW5kZXg7IGV2ZW4gYXMgaXNFdmVuOyBsZXQgZGF0YTFcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogaXNFdmVuID8gdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnJvd1N0eWxlLm9kZENvbG9yOiB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUucm93U3R5bGUuZXZlbkNvbG9yfVwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoICsgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG5cbiAgICAgICAgICA+XG4gICAgICAgICAgPCEtLSAgc2VyaWVzIGRhdGEgIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF9hdHRyIG9mIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXM7IGV2ZW4gYXMgaXNFdmVuO2xldCBtID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cIiBfYXR0ci5yb3dTcGFuICYmICFfYXR0ci5jcGxTcGFuICYmIF9hdHRyLmNsb25lU2VyaWVzICYmIF9hdHRyLmNsb25lU2VyaWVzW2ldIT09J3JlcGVhdGVkJyAmJiBtIT09MVwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdfYXR0ci5hbGlnbm1lbnQnXG4gICAgICAgICAgICBbcm93U3Bhbl09J19hdHRyLmNsb25lR3JvdXBEYXRhW2ldJ1xuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICB7e2luZGV4aW5nKF9hdHRyLmdyb3VwRGF0YVtpXSxpKX19XG4gICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwiX2F0dHIud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIG51bWJlciAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbnQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgX2F0dHIudmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e19hdHRyLnNlcmllc1tpXXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFfYXR0ci52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlcGlja2VyLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGVfcmFuZ2UnIHx8IF9hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZXRpbWUnIHx8IF9hdHRyLndpZGdldFN1YlR5cGU9PT0nYm90aCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldKydaJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2F0dHIuc2VyaWVzW2ldICYmICBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gPnt7X2F0dHIuc2VyaWVzW2ldfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLndpZGdldFN1YlR5cGU9PT0ndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci5zZXJpZXNbaV0gXCI+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldLCdoaDptbTpzcycpfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci5zZXJpZXNbaV0gJiYgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdkYXRlJ1wiPnt7X2F0dHIuc2VyaWVzW2ldfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGUgfX08L3NwYW4+ICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid0ZXh0Ym94LXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tfYXR0ci5zZXJpZXNbaV19fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdudW1lcmljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgX2F0dHIudmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e19hdHRyLnNlcmllc1tpXXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFfYXR0ci52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyB3ZWIgbGluayAgLS0+XG4gICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQsX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gZGVmYXVsdCBjYXNlIC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIHdoZW4gc2VyaWVzIGRhdGEgaXMgZW1wdHkgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9JyFfYXR0ci5zZXJpZXNbaV0nPi08L3NwYW4+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gd2hlbiB0d28gcm93cyBncm91cGVkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfYXR0ciBvZiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD4xICYmIG0+MCAmJiBfYXR0ci5yb3dTcGFuICYmIF9hdHRyLmNsb25lU2VyaWVzW2ldIT09J3JlcGVhdGVkJ1wiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdfYXR0ci5hbGlnbm1lbnQnXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImRyaWxsVGhyb3VnaENvbnRleHQoJGV2ZW50LCBfYXR0ciwgaSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwiX2F0dHIud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyBudW1iZXIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ludC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIF9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tfYXR0ci5zZXJpZXNbaV18ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIV9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICFfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIGRhdGV0aW1lIC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVwaWNrZXItd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGV0aW1lJyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChfYXR0ci5zZXJpZXNbaV0rJ1onKXxkYXRlOl9hdHRyLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSAmJiAgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0aW1lc3RhbXAnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiA+e3tfYXR0ci5zZXJpZXNbaV18ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSBcIj57e21vbWVudChfYXR0ci5zZXJpZXNbaV0sJ2hoOm1tOnNzJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSAmJiBfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldLCdZWVlZLU1NLWRkJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZSB9fTwvc3Bhbj4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyB0ZXh0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRib3gtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3N0cmluZycgfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAge3tfYXR0ci5zZXJpZXNbaV19fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIF9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tfYXR0ci5zZXJpZXNbaV18ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIV9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICFfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LF9hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInd2V0c2lnbmF0dXJlY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHZpZGVvIHdpZGdldCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndmlkZW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgYXVkaW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidmaWxldXBsb2FkLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbWFnZWNhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPCEtLSBkZWZhdWx0IGNhc2UgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIV9hdHRyLnNlcmllc1tpXSc+LTwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9J19hdHRyLnNlcmllc1tpXSc+ICh7e19hdHRyLmNsb25lR3JvdXBEYXRhW2ldfX0pPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHdoZW4gcm93Q291bnQgaXMgb2ZmIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgbWFwLmdldChpKTsgbGV0IG09aW5kZXhcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICA+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgIDwhLS0gdG8gc2hvdyBzaWRlIGdyYW5kIHRvdGFsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbCAgJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1sxXS5jbG9uZVNlcmllc1tpXSE9PSdyZXBlYXRlZCdcIiA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpOyBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5jb2xvclwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPCEtLSB0byBzaG93IGRhdGEgd2l0aCByb3cgY291bnQgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ndGFidWxhclJlcG9ydC5yb3dDb3VudCc+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5kYXRhUmVuZGVyLmdldChpKSA7bGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXVwiPnt7ZGF0YX19PC9zcGFuPlxuXG5cbiAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MCBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLmdldChpKVwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID4ge3tkYXRhfX08L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMV0uY2xvbmVTZXJpZXNbaV0hPT0ncmVwZWF0ZWQnXCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpIGxldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSkgJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1sxXS5jbG9uZVNlcmllc1tpXSE9PSdyZXBlYXRlZCdcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgID57e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fTwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8IS0tIHN1YnRvdGFsIC0tPlxuICAgICAgICA8dHIgKm5nSWY9J3RhYnVsYXJSZXBvcnQuc3ViVG90YWwgICYmIChhdHRyR2xvYmFsPT09aSkgJz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfYXR0ciBvZiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nSWY9XCJtPT09MFwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT0nX2F0dHIuYWxpZ25tZW50J1xuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj5TdWJ0b3RhbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nSWY9XCJtPT09MVwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICA+LTwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb2xTdWJUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIj5cbiAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKycgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MFwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LmNvdW50c1N1YlRvdGFsLmdldChpKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuc2lkZVN1YlRvdGFsLmdldChpKSBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKycgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQuY291bnRTVG90YWwuZ2V0KGkpfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwhLS0gd2hlbiBzaW5nbGUgcm93IGdyb3VwaW5nIGlzIGFwcGxpZWQgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPT09MVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnVuaXF1ZVNlcmllcztsZXQgaSA9IGluZGV4OyBldmVuIGFzIGlzRXZlbjsgbGV0IGRhdGExXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0sIGkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPSchZGF0YSc+LTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBtYXAuZ2V0KGkpIGxldCBtPWluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuc2hvd0dyYW5kVG90YWxcIiA+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpOyBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5kYXRhUmVuZGVyLmdldChpKSBsZXQgbT1pbmRleFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+XG5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg9PT0wXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLmdldChpKVwiPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LnNpemVcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgICA+IHt7ZGF0YX19PC90ZD5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnNob3dHcmFuZFRvdGFsXCIgPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9J3B4LTEuNVx0cHktMS41J1xuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPCEtLSB3aGVuIHN1YnRvdGFsIHRvZ2dsZSBpcyBvbiAtLT5cbiAgICAgICAgPHRyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zdWJUb3RhbFwiPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICA+U3ViVG90YWw8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1hcC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+PC90ZD5cblxuICAgICAgICAgICAgPCEtLSB0byBzaG93IHNpZGUgZ3JhbmQgdG90YWwgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiID5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSB0byBzaG93IHJvdyBjb3VudCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LnNpemVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+PC90ZD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD09PTBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5nZXQoaSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgPiB7e2RhdGF9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnNob3dHcmFuZFRvdGFsXCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpIGxldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuICAgIDwhLS0gIFRhYmxlIGZvb3RlciBmb3IgZ3JhbmQgdG90YWwgLS0+XG4gICAgPHRmb290ICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgPlxuICAgICAgPHRyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCI+XG4gICAgICAgICAgR3JhbmQgVG90YWw8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAqbmdJZj0ndGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSdcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgIC1cbiAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHRvdGFsIG9mIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDtsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IHRvdGFsIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7dG90YWx8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7dG90YWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXVwiPnt7dG90YWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8IS0tIHdoZW4gcm93IGNvdW50IHRvZ2dsZSBpcyBvbiAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD4wXCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0b3RhbCBvZiB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyO2xldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IHRvdGFsIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e3RvdGFsfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3t0b3RhbH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmdbbV1cIj57e3RvdGFsfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD09PTBcIj5cblxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0b3RhbCBvZiB0YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsO2xldCBpPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7dG90YWx9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RyPlxuICAgIDwvdGZvb3Q+XG4gIDwvdGFibGU+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBmbGV4LWNvbCB6ZXJvLXJlY29yZHNcIiAqbmdJZj1cIih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aD4wICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aD09PTApXCI+XG4gICAgTm8gcmVjb3JkcyBhdmFpbGFibGVcbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcbiAgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbjwvZGl2PlxuXG48IS0tIE1hdCBNZW51IHRyaWdnZXIgZm9yIHRhYmxlIGNvbHVtbnMtLT5cbjxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCI+XG4gIDxkaXYgaWQ9XCJ0YWJsZS1tZW51XCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwicmVwb3J0RGF0YVwiPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoPjAgXCJtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJBZ2dyZWdhdGVcIj5BZ2dyZWdhdGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibW92ZUNvbHVtbkxlZnQoJGV2ZW50KVwiPk1vdmUgTGVmdDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJtb3ZlQ29sdW1uUmlnaHQoJGV2ZW50KVwiPk1vdmUgUmlnaHQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJzY3JlZW5UeXBlcy5kYXNoYm9hcmRCdWlsZGVyID09PSBzY3JlZW5UeXBlXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlRnJvbURhc2hib2FyZCgpXCI+UmVtb3ZlIEZyb20gRGFzaGJvYXJkPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cblxuXG48IS0tIE1hdCBtZW51IHRyaWdnZXIgZm9yICBBZ2dyZWdhdGlvbi0tPlxuPG1hdC1tZW51ICNBZ2dyZWdhdGU9XCJtYXRNZW51XCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCAqbmdJZj0ndGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MCc+XG4gICAgPHNlY3Rpb24+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCAgY2xhc3M9XCJhZ2dyZWdhdGUtZnVuXCIgWyhuZ01vZGVsKV09J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbY3VycmVudEluZGV4XS5hZ2dyZWdhdGUuc2hvd1N1bSdcbiAgICAgICAgICAoY2hhbmdlKT1cInN1bUFnZ3JlZ2F0aW9uKCRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+c3VtPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImFnZ3JlZ2F0ZS1mdW5cIiBbKG5nTW9kZWwpXT0ndGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tjdXJyZW50SW5kZXhdLmFnZ3JlZ2F0ZS5zaG93QXZnJ19hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZV9yYW5nZScgfHxcbiAgICAgICAgICAoY2hhbmdlKT1cImF2ZXJhZ2VBZ2dyZWdhdGlvbigkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPkF2ZXJhZ2U8L21hdC1jaGVja2JveD5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiYWdncmVnYXRlLWZ1blwiWyhuZ01vZGVsKV09J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbY3VycmVudEluZGV4XS5hZ2dyZWdhdGUuc2hvd01heCdcbiAgICAgICAgICAoY2hhbmdlKT1cIm1heEFnZ3JlZ2F0aW9uKCRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+TWF4PC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImFnZ3JlZ2F0ZS1mdW5cIlsobmdNb2RlbCldPSd0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2N1cnJlbnRJbmRleF0uYWdncmVnYXRlLnNob3dNaW4nXG4gICAgICAgICAgKGNoYW5nZSk9XCJtaW5BZ2dyZWdhdGlvbigkZXZlbnQpXCIoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+TWluPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgPC9zZWN0aW9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPGRpdiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aCE9PTBcIiBjbGFzcz1cImxvYWRlci1zcGlubmVyXCI+XG4gIDxhcHAtZ2hvc3QtbG9hZGVyIFtlbGVtZW50VHlwZV09XCJHaG9zdExvYWRlclR5cGUuVGFidWxhckNoYXJ0TG9hZGVyXCIgPjwvYXBwLWdob3N0LWxvYWRlcj5cbjwvZGl2PlxuPCEtLSA8ZGl2ICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoIT09MFwiIGNsYXNzPVwibG9hZGVyLXNwaW5uZXJcIj4gLS0+XG4gIDwhLS0gPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI0MFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+IC0tPlxuIl19
4464
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9lbmxpZ2h0ZW4tbGliL3JlcG9ydC90YWJ1bGFyLXJlcG9ydC90YWJ1bGFyL2NvbHVtbi1ncm91cC12aWV3L2NvbHVtbi1ncm91cC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1jb21tb24tdWktbGliL3NyYy9saWIvZW5saWdodGVuLWxpYi9yZXBvcnQvdGFidWxhci1yZXBvcnQvdGFidWxhci9jb2x1bW4tZ3JvdXAtdmlldy9jb2x1bW4tZ3JvdXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUd0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JB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bUJBQW1CLENBQUMsS0FBaUIsRUFBRSxTQUF3QixFQUFFLENBQVM7UUFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7O2dHQWxQVSx3QkFBd0I7MkVBQXhCLHdCQUF3Qjt1QkFXeEIsY0FBYzs7Ozs7UUNsQzNCLHlFQXdwQ007UUFFTix5QkFFTTtRQUdOLHlDQUFpQztRQUMvQiw4QkFBcUI7UUFDbkIseUZBS2M7UUFDaEIsaUJBQU07UUFDUixpQkFBVztRQU1YLHlDQUErQjtRQUM3Qix5RUFtQmM7UUFDaEIsaUJBQVc7UUFFWCx5RUFFTTs7O1FBdnNDcUQsbUhBQXdGO1FBMHBDbEcsZUFBb0M7UUFBcEMsaURBQW9DLGtDQUFBO1FBQy9DLHVDQUFpQztRQW9CeEMsZUFBOEM7UUFBOUMscUVBQThDO1FBc0J2RSxlQUErRTtRQUEvRSwwR0FBK0U7O3VGRDlxQ3hFLHdCQUF3QjtjQU5wQyxTQUFTOzJCQUNFLHVCQUF1QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSTtzTEFLM0IsYUFBYTtrQkFBckIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUNHLHVCQUF1QjtrQkFBL0IsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBR04sV0FBVztrQkFGVixTQUFTO21CQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRWxlbWVudHNEdG8gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21tb24tZHRvL2VsZW1lbnRzLWR0byc7XG5pbXBvcnQgeyBSZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3JlcG9ydC1idWlsZGVyLW1hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnVsYXJSZXBvcnQgfSBmcm9tICcuLi8uLi90YWJ1bGFyLXJlcG9ydCc7XG5pbXBvcnQgeyBUYWJ1bGFyUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3RhYnVsYXItcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRzTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9maWVsZC1saXN0LWxpYi9maWVsZHMtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbW1vbi11dGlscy9yZXBvcnQnO1xuaW1wb3J0IHsgQXR0cmlidXRlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2ZpZWxkcy9hdHRyaWJ1dGUtZGF0YSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Rhc2hib2FyZC1saWIvZGFzaGJvYXJkLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JlZW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZW5saWdodGVuLWxpYi9maWx0ZXJzL2NvbmRpdGlvbi10eXBlJztcbmltcG9ydCB7IFRhYnVsYXJDb21wb25lbnQgfSBmcm9tICcuLi90YWJ1bGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBeEZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2ZpbHRlcnMvYXgtZmlsdGVyJztcbmltcG9ydCB7IEdob3N0TG9hZGVyVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2dob3N0LWxvYWRlci9naG9zdC1sb2FkZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbHVtbi1ncm91cC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1ncm91cC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sdW1uLWdyb3VwLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjpWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtbkdyb3VwVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIEBJbnB1dCgpIHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQ7XG4gIEBJbnB1dCgpIGlzRWRpdGFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHgxSW1hZ2VNZWRpYVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBzY3JlZW5UeXBlOiBTY3JlZW5UeXBlO1xuICBASW5wdXQoKSBkcmlsbFRocm91Z2hQYXJlbnRUeXBlOiBTY3JlZW5UeXBlO1xuICBASW5wdXQoKSBkcmlsbFRocm91Z2hGaWx0ZXJJbnB1dDogQXhGaWx0ZXI7XG4gIEBJbnB1dCgpIHBhcmVudFJlZjogVGFidWxhckNvbXBvbmVudDtcbiAgQElucHV0KCkgcmVwb3J0SWQ6IG51bWJlcjtcbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcilcblxuICBjb250ZXh0TWVudTogTWF0TWVudVRyaWdnZXI7XG4gIGNvbHVtbkRhdGE6IGFueTtcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogJzBweCcsIHk6ICcwcHgnIH07XG4gIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICBfYXZnOiBib29sZWFuID0gZmFsc2U7XG4gIF9tYXg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX21pbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93U3VtOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dNYXg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd01pbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QXZnOiBib29sZWFuID0gZmFsc2U7XG4gIG1vbWVudDogYW55ID0gbW9tZW50O1xuICBpc0RpcnR5OiBib29sZWFuO1xuICByZXBvcnQ6IFJlcG9ydDtcbiAgYXR0ckdsb2JhbDogbnVtYmVyO1xuICBjb3VudDogbnVtYmVyO1xuICBjdDogbnVtYmVyO1xuICBjb2xTZXJpZXM6IG51bWJlcjtcbiAgYXR0cmlidXRlRGF0YUNsb25lOiBBcnJheTxBdHRyaWJ1dGVEYXRhPiA9IFtdO1xuICBtYXA6IE1hcDxudW1iZXIsIGFueT47XG4gIGlzRGF0YUxvYWRlZCA9IGZhbHNlO1xuICBmQ29sRGF0YTogQXJyYXk8c3RyaW5nPjtcbiAgR2hvc3RMb2FkZXJUeXBlID0gR2hvc3RMb2FkZXJUeXBlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZXBvcnRCdWlsZGVyTWFzdGVyU2VydmljZTogUmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZmllbGRzTGlzdFNlcnZpY2U6IEZpZWxkc0xpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3RhYnVsYXJSZXBvcnRTZXJ2aWNlOiBUYWJ1bGFyUmVwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIF9kYXNoYm9hcmRCdWlsZGVyU2VydmljZTogRGFzaGJvYXJkQnVpbGRlclNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gdGhpcy50YWJ1bGFyUmVwb3J0PXRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLmNvbHVtbkRhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVwb3J0ID0gdGhpcy5fcmVwb3J0QnVpbGRlck1hc3RlclNlcnZpY2UucmVwb3J0O1xuXG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0ID0gdGhpcy5fdGFidWxhclJlcG9ydFNlcnZpY2UuY29sdW1uRGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuXG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ2V0TWF0cml4RGltZW5zaW9uKCk7XG5cbiAgICB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5kYXRhUmVuZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMubWFwID0gdmFsdWU7XG4gICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuZmlyc3RDb2xEYXRhID0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXRyaXhEaW1lbnNpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IEVsZW1lbnRzRHRvKHRoaXMudGFidWxhclJlcG9ydCk7XG4gICAgICBkYXRhLnJlcG9ydElkID0gdGhpcy5yZXBvcnRJZDtcbiAgICAgIGRhdGEudHlwZSA9ICd0YWJ1bGFyLXJlcG9ydCc7XG4gICAgICBkYXRhLm9yZGVyQnkgPSB0aGlzLnRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmc7XG4gICAgICBkYXRhLnBhZ2VJbmRleCA9IDA7XG4gICAgICBkYXRhLnBhZ2VTaXplID0gMDtcbiAgICAgIGRhdGEucGFnZUxlbmd0aD0wO1xuICAgICAgaWYgKHRoaXMuZHJpbGxUaHJvdWdoUGFyZW50VHlwZSA9PSBTY3JlZW5UeXBlLmRhc2hib2FyZEJ1aWxkZXIgfHwgdGhpcy5kcmlsbFRocm91Z2hQYXJlbnRUeXBlID09IFNjcmVlblR5cGUuY29udGFpbmVyRGFzaGJvYXJkKSB7XG4gICAgICAgIGRhdGEuYXBpVHlwZSA9ICdkYXNoYm9hcmQnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2NyZWVuVHlwZSA9PT0gU2NyZWVuVHlwZS5kcmlsbFRocm91Z2gpIHtcbiAgICAgICAgZGF0YS5maWx0ZXJzLmdsb2JhbEZpbHRlcnMuYmFzaWMucHVzaCh0aGlzLmRyaWxsVGhyb3VnaEZpbHRlcklucHV0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkc0xpc3RTZXJ2aWNlLmdldE1hdHJpeERhdGEoZGF0YSkudGhlbigoZW50aXRpZXNBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgaWYgKGVudGl0aWVzQXR0cmlidXRlICE9IG51bGwpIHtcbiAgICAgICAgICBlbnRpdGllc0F0dHJpYnV0ZS5tYXRyaXguYXR0cmlidXRlcy5zaG93U3VtID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMgPSBlbnRpdGllc0F0dHJpYnV0ZS5tYXRyaXguYXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5ncm91cERhdGEodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5uZXdEYXRhKHRoaXMudGFidWxhclJlcG9ydCwgYXR0cmlidXRlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQgPSB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS5kYXRhRmFjdG9yeSh0aGlzLnRhYnVsYXJSZXBvcnQpO1xuICAgICAgICAgIGlmICh0aGlzLnRhYnVsYXJSZXBvcnQucm93Q291bnQgJiYgdGhpcy50YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGggPiAwKSB7IHRoaXMudGFidWxhclJlcG9ydCA9IHRoaXMuX3RhYnVsYXJSZXBvcnRTZXJ2aWNlLnJvd0NvdW50RGF0YSh0aGlzLnRhYnVsYXJSZXBvcnQpOyB9XG4gICAgICAgICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmlzRGF0YUxvYWRlZCA9IHRydWU7XG4gICAgdGhpcy50YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCA9IHRydWU7XG4gIH1cblxuXG4gIC8vIGNvbnRleHQgbWVudSBmb3IgdGFibGUgY29sdW1uc1xuICBvbkNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyLCBhdHRyOiBBdHRyaWJ1dGVEYXRhKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueCA9IGV2ZW50LmNsaWVudFggKyAncHgnO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gZXZlbnQuY2xpZW50WSArICdweCc7XG4gICAgdGhpcy5jb250ZXh0TWVudS5tZW51RGF0YSA9IHsgJ2F0dHInOiBhdHRyIH07XG4gICAgdGhpcy5jb250ZXh0TWVudS5tZW51LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xuICAgIHRoaXMuY29udGV4dE1lbnUub3Blbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0byByZXR1cm5zIHN1bSBvZiByb3dzXG4gICAqXG4gICAqL1xuICBzdW0oc2VyaWVzOiBBcnJheTxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3QgZGF0YSBvZiBzZXJpZXMpIHtcbiAgICAgIHRvdGFsICs9IE51bWJlcihkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5yZXBvcnQuaXNEaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG4gIC8qKlxuICAgKiB0byByZXR1cm5zIGF2ZXJhZ2Ugb2Ygcm93c1xuICAgKlxuICAgKi9cbiAgYXZnKHNlcmllczogQXJyYXk8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKSB7XG4gICAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMucmVwb3J0LmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0b3RhbCAvIHNlcmllcy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogdG8gcmV0dXJucyBtYXhpbXVtIHZhbHVlIG9mIHJvd3NcbiAgICpcbiAgICovXG4gIG1heChzZXJpZXM6IEFycmF5PHN0cmluZz4pOiBudW1iZXIge1xuICAgIGNvbnN0IGEgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKSB7XG4gICAgICBhLnB1c2goTnVtYmVyKGRhdGEpKTtcbiAgICB9XG4gICAgdGhpcy5yZXBvcnQuaXNEaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmEpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRvIHJldHVybnMgbWluaW11bSB2YWx1ZSBvZiByb3dzXG4gICAqXG4gICAqL1xuICBtaW4oc2VyaWVzOiBBcnJheTxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBjb25zdCBhID0gW107XG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNlcmllcykge1xuICAgICAgYS5wdXNoKE51bWJlcihkYXRhKSk7XG4gICAgfVxuICAgIHRoaXMucmVwb3J0LmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBNYXRoLm1pbiguLi5hKTtcbiAgfVxuXG4gIC8qKipcbiAgICogT24gY2hhcnQgY29udGV4dCAgY2xpY2sgZm9yIHN1bSBhZ2dyZWdhdGlvblxuICAgKi9cbiAgc3VtQWdncmVnYXRpb24ob2I6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3VtID0gb2IuY2hlY2tlZDtcbiAgfVxuICAvKioqXG4gICAqIE9uIGNoYXJ0IGNvbnRleHQgIGNsaWNrIGZvciBhdmcgYWdncmVnYXRpb25cbiAgICovXG4gIGF2ZXJhZ2VBZ2dyZWdhdGlvbihvYjogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBdmcgPSBvYi5jaGVja2VkO1xuICB9XG4gIC8qKipcbiAgICogT24gY2hhcnQgY29udGV4dCAgY2xpY2sgZm9yIG1heCBhZ2dyZWdhdGlvblxuICAgKi9cbiAgbWF4QWdncmVnYXRpb24ob2I6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TWF4ID0gb2IuY2hlY2tlZDtcbiAgfVxuICAvKioqXG4gICAqIE9uIGNoYXJ0IGNvbnRleHQgIGNsaWNrIGZvciBtaW4gYWdncmVnYXRpb25cbiAgICovXG4gIG1pbkFnZ3JlZ2F0aW9uKG9iOiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01pbiA9IG9iLmNoZWNrZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiB0byBzZXQgaXNEaXJ0eSBhZnRlciBjaGFuZ2VzIGluIHRhYnVsYXIgcmVwb3J0IGZpbHRlclxuICAgKlxuICAgKi9cbiAgZGlydHlGbG93Q2hlY2tFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG9ydC5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKnVzZWQgdG8gY3JlYXRlIGEgcm93IGZvciBzdWJ0b3RhbFxuICpcbiAqQHBhcmFtIG51bWJlclxuICpAcGFyYW0gbnVtYmVyXG4gKi9cbiAgaW5kZXhpbmcoY291bnRfOiBudW1iZXIsIGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3QgPSBjb3VudF87XG4gICAgaWYgKGNvdW50XyA9PT0gMSkge1xuICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB0aGlzLmF0dHJHbG9iYWwgPSBpO1xuICAgIH1cbiAgICBpZiAoY291bnRfID4gMSkge1xuICAgICAgdGhpcy5hdHRyR2xvYmFsID0gKGNvdW50XyArIGkpIC0gMTtcbiAgICB9XG5cbiAgfVxuICAvKipcbiAgICogd2lsbCBlbWl0IHRhYmxlIHByb3BlcnRpZXMgb24gdGFibGUgY2xpY2sgdFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHRhYmxlU2VsZWN0KGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLl90YWJ1bGFyUmVwb3J0U2VydmljZS50YWJsZUNsaWNrRXZlbnQodGhpcy50YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0byByZWRpcmVjdCBtZWRpYSB1cmxcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSB1cmxcbiAgICovXG4gIHJlZGlyZWN0KGV2ZW50OiBLZXlib2FyZEV2ZW50LCB1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZyb21EYXNoYm9hcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGFzaGJvYXJkQnVpbGRlclNlcnZpY2UuZGVsZXRlRWxlbWVudC5lbWl0KHRoaXMudGFidWxhclJlcG9ydCk7XG4gIH1cblxuICBkcmlsbFRocm91Z2hDb250ZXh0KGV2ZW50OiBNb3VzZUV2ZW50LCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZURhdGEsIGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFyZW50UmVmLmRyaWxsVGhyb3VnaENvbnRleHQoZXZlbnQsIGF0dHJpYnV0ZSwgYXR0cmlidXRlLnNlcmllcy5pbmRleE9mKGF0dHJpYnV0ZS51bmlxdWVTZXJpZXNbaV0pKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbi1ncm91cGluZy10YWJsZS1jb250YWluZXIgY3VzdG9tc2Nyb2xsXCIgKm5nSWY9J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCE9PTAgJiYgdGFidWxhclJlcG9ydC5pc0RhdGFMb2FkZWQnPlxuICA8dGFibGVcbiAgICAoY2xpY2spPVwidGFibGVTZWxlY3QoJGV2ZW50KVwiXG4gICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICpuZ0lmPXRhYnVsYXJSZXBvcnQgY2RrRHJvcExpc3RHcm91cCBzdHlsZT1cIndpZHRoOjEwMCVcIiBbbmdDbGFzc109XCJ7J210LTEnOiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aD4wICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aD09PTB9XCI+XG4gICAgPGNhcHRpb24+PC9jYXB0aW9uPlxuICAgIDx0Ym9keSAgW25nQ2xhc3NdPVwieydzaGFkb3cnOnRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuc2hhZG93LmVuYWJsZX1cIlxuICAgICAgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aD4wXCJcbiAgICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF9hdHRyIG9mIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmc7IGV2ZW4gYXMgaXNFdmVuO2xldCBtID0gaW5kZXhcIj5cbiAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8dHIgKm5nSWY9XCJtPT09MFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg9PT0yXCJcbiAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgPHRoIFtpZF09dGhcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LGkpXCJcbiAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT0nYXR0ci5hbGlnbm1lbnQnXG5cbiAgICAgICAgICAgID57e19hdHRyLmxhYmVsfX08L3RoPlxuXG4gICAgICAgICAgICA8IS0tIHRvIHNob3cgc2luZ2xlIGNvbHVtbiBncm91cGluZyB1bmlxdWUgc2VyaWVzIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCBkYXRhIG9mIF9hdHRyLnVuaXF1ZVNlcmllcztsZXQgaT0gaW5kZXgnPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5jb2xEYXRhLmdldChkYXRhKSsxOnRhYnVsYXJSZXBvcnQuY29sRGF0YS5nZXQoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBfYXR0ci5zZXJpZXMuaW5kZXhPZihkYXRhKSlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgIFtuZ1N3aXRjaF09XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIGRhdGV0aW1lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGV0aW1lJyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nYm90aCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttb21lbnQoZGF0YSsnWicpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YSBcIj57e21vbWVudChkYXRhLCdoaDptbTpzcycpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlJ1wiPnt7ZGF0YXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGF9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRib3gtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGF9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCxkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBzaWduYXR1cmUgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInd2V0c2lnbmF0dXJlY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHZpZGVvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2F1ZGlvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidmaWxldXBsb2FkLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tkYXRhfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSchZGF0YSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3swIHwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdkZXRhaWwnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57ezB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gc2VyaWVzIGRhdGEgaXMgZW1wdHkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlIT09J251bWVyaWMnXCI+LTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjEgJiYgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPjBcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU3Bhbl09dGFidWxhclJlcG9ydC5yb3dDb3VudD90YWJ1bGFyUmVwb3J0LmNvbERhdGEuZ2V0KGRhdGEpK3RhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoZGF0YSkubGVuZ3RoOnRhYnVsYXJSZXBvcnQuY29sRGF0YS5nZXQoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRldGltZScgfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+e3ttb21lbnQoZGF0YSsnWicpfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0ndGltZXN0YW1wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEgXCI+e3ttb21lbnQoZGF0YSwnaGg6bW06c3MnKXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj57e2RhdGF8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidoeXBlcmxpbmstd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIWRhdGEnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7MCB8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnZGV0YWlsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjEgJiYgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cInRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoZGF0YSkubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZXBpY2tlci13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRldGltZScgfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChkYXRhKydaJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0aW1lc3RhbXAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEgXCI+e3ttb21lbnQoZGF0YSwnaGg6bW06c3MnKXxkYXRlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj57e2RhdGF8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdkZWNpbWFsJ3x8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidoeXBlcmxpbmstd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrZGF0YVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK2RhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRlZmF1bHQgY2FzZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIWRhdGEnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyAgMCB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7MCB8ICBheG9QZXJjZW50YWdlOnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0uc2VyaWVzOiAnZGV0YWlsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8IS0tIGdyYW5kIHRvdGFsIGhlYWRlciAtLT5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQuc2hvd0dyYW5kVG90YWxcIlxuICAgICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE6dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFRvdGFsXG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwvdHI+XG5cblxuICAgICAgICA8dHIgKm5nSWY9XCJtPT09MVwiPlxuICAgICAgICAgIDwhLS0gdG8gc2hvdyBkb3VibGUgY29sdW1uIGdyb3VwaW5nIGhlYWRlciB3aXRoIHNlcmllcyBkYXRhIC0tPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg9PT0yXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgPHRoIFtpZF09dGhcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09J2F0dHIuYWxpZ25tZW50J1xuICAgICAgICAgID57e19hdHRyLmxhYmVsfX08L3RoPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlcmllcyBvZiB0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcyBcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykgbGV0IHg9aW5kZXhcIj5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09dGFidWxhclJlcG9ydC5yb3dDb3VudD90YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGhcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBpKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAgW25nU3dpdGNoXT1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlcGlja2VyLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZXRpbWUnIHx8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdib3RoJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChkYXRhKydaJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0ndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhIFwiPnt7bW9tZW50KGRhdGEsJ2hoOm1tOnNzJyl8ZGF0ZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+e3tkYXRhfGRhdGU6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RhdGVfcmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndGV4dGJveC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS53aWRnZXRTdWJUeXBlPT09J3RleHQnIHx8IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0ud2lkZ2V0U3ViVHlwZT09PSdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS5zZXJpZXM6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCttXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgd2ViIGxpbmsgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaHlwZXJsaW5rLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LGRhdGEpXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHNpZ25hdHVyZSB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndmlkZW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgYXVkaW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYXVkaW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtkYXRhXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrZGF0YSlcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGRvY3VtZW50IHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbWFnZWNhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK2RhdGFcIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtkYXRhKVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZGVmYXVsdCBjYXNlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9JyFkYXRhJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGU9PT0nbnVtZXJpYydcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7ICAwIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgrbV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57ezAgfCAgYXhvUGVyY2VudGFnZTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnNlcmllczogJ2RldGFpbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7MH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBzZXJpZXMgZGF0YSBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoK21dLndpZGdldFN1YlR5cGUhPT0nbnVtZXJpYydcIj4tPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHRkICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW2NvbFNwYW5dPXRhYnVsYXJSZXBvcnQucm93Q291bnQ/dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE6dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiPi08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ciBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIGNsYXNzPVwiZXhhbXBsZS1saXN0XCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgPCEtLSBjb2x1bW4gaGVhZGVycyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0ciBvZiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICBbaWRdPVwidGhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuaGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCxpKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdhdHRyLmFsaWdubWVudCdcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnVsYXItcmVwb3J0LXRhYmVsLXRoXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYnVsYXItcmVwb3J0LXRhYmxlLXRleHRcIj57e2F0dHIubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LGkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRhYi1kb3duLWFycm93XCIgc3ZnSWNvbj1cImhlcm9pY29uc19vdXRsaW5lOmNoZXZyb24tZG93blwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSB0byBzaG93IGludGVnZXIgY29sdW1uIGhlYWRlcnMgIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQ7IGxldCBtPWluZGV4XCIgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyIG9mIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5O2xldCBpPWluZGV4XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgIFtpZF09dGhcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdhdHRyLmFsaWdubWVudCdcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj57e2F0dHJ9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPCEtLSByb3cgY291bnQgaGVhZGVyIC0tPlxuICAgICAgICAgIDx0aCAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIlxuICAgICAgICAgIFtpZF09dGhcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5oZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09J2F0dHIuYWxpZ25tZW50J1xuICAgICAgICAgID5cbiAgICAgICAgICAgIENvdW50XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gaG9yaXpvbnRhbCBncmFuZCB0b3RhbCBoZWFkZXJzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyIG9mIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5O2xldCBpPWluZGV4XCI+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgY29sR3JvdXBpbmdcblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3thdHRyfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZCAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIlxuICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG5cbiAgICAgICAgPlxuICAgICAgICAgIENvdW50XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdHI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD4xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzO2xldCBpID0gaW5kZXg7IGV2ZW4gYXMgaXNFdmVuOyBsZXQgZGF0YTFcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogaXNFdmVuID8gdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnJvd1N0eWxlLm9kZENvbG9yOiB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUucm93U3R5bGUuZXZlbkNvbG9yfVwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoICsgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG5cbiAgICAgICAgICA+XG4gICAgICAgICAgPCEtLSAgc2VyaWVzIGRhdGEgIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF9hdHRyIG9mIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXM7IGV2ZW4gYXMgaXNFdmVuO2xldCBtID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cIiBfYXR0ci5yb3dTcGFuICYmICFfYXR0ci5jcGxTcGFuICYmIF9hdHRyLmNsb25lU2VyaWVzICYmIF9hdHRyLmNsb25lU2VyaWVzW2ldIT09J3JlcGVhdGVkJyAmJiBtIT09MVwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdfYXR0ci5hbGlnbm1lbnQnXG4gICAgICAgICAgICBbcm93U3Bhbl09J19hdHRyLmNsb25lR3JvdXBEYXRhW2ldJ1xuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIF9hdHRyLCBpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICB7e2luZGV4aW5nKF9hdHRyLmdyb3VwRGF0YVtpXSxpKX19XG4gICAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwiX2F0dHIud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIG51bWJlciAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbnQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgX2F0dHIudmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e19hdHRyLnNlcmllc1tpXXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFfYXR0ci52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gd2hlbiBkYXRhIHR5cGUgaXMgZGF0ZXRpbWUgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlcGlja2VyLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGVfcmFuZ2UnIHx8IF9hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZXRpbWUnIHx8IF9hdHRyLndpZGdldFN1YlR5cGU9PT0nYm90aCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldKydaJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2F0dHIuc2VyaWVzW2ldICYmICBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3RpbWVzdGFtcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gPnt7X2F0dHIuc2VyaWVzW2ldfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLndpZGdldFN1YlR5cGU9PT0ndGltZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci5zZXJpZXNbaV0gXCI+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldLCdoaDptbTpzcycpfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci5zZXJpZXNbaV0gJiYgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdkYXRlJ1wiPnt7X2F0dHIuc2VyaWVzW2ldfGRhdGU6X2F0dHIudmFsdWVGb3JtYXR0aW5nLmRhdGUgfX08L3NwYW4+ICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid0ZXh0Ym94LXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICAgICAge3tfYXR0ci5zZXJpZXNbaV19fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdudW1lcmljJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgX2F0dHIudmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e19hdHRyLnNlcmllc1tpXXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFfYXR0ci52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyB3ZWIgbGluayAgLS0+XG4gICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQsX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid3ZXRzaWduYXR1cmVjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgdmlkZW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZGVvY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIGF1ZGlvIHdpZGdldCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGV1cGxvYWQtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDwhLS0gV2hlbiB3aWRnZXQgdHlwZSBpcyBkb2N1bWVudCB3aWRnZXQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaW1hZ2VjYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gZGVmYXVsdCBjYXNlIC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIHdoZW4gc2VyaWVzIGRhdGEgaXMgZW1wdHkgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9JyFfYXR0ci5zZXJpZXNbaV0nPi08L3NwYW4+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gd2hlbiB0d28gcm93cyBncm91cGVkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfYXR0ciBvZiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aD4xICYmIG0+MCAmJiBfYXR0ci5yb3dTcGFuICYmIF9hdHRyLmNsb25lU2VyaWVzW2ldIT09J3JlcGVhdGVkJ1wiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LnNpemVcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJIZWFkZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPSdfYXR0ci5hbGlnbm1lbnQnXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImRyaWxsVGhyb3VnaENvbnRleHQoJGV2ZW50LCBfYXR0ciwgaSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICBbbmdTd2l0Y2hdPVwiX2F0dHIud2lkZ2V0VHlwZVwiPlxuICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyBudW1iZXIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2ludC13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIF9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tfYXR0ci5zZXJpZXNbaV18ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIV9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICFfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIHdoZW4gZGF0YSB0eXBlIGlzIGRhdGV0aW1lIC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVwaWNrZXItd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGV0aW1lJyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J2JvdGgnXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e21vbWVudChfYXR0ci5zZXJpZXNbaV0rJ1onKXxkYXRlOl9hdHRyLnZhbHVlRm9ybWF0dGluZy5kYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSAmJiAgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0aW1lc3RhbXAnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiA+e3tfYXR0ci5zZXJpZXNbaV18ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSBcIj57e21vbWVudChfYXR0ci5zZXJpZXNbaV0sJ2hoOm1tOnNzJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIl9hdHRyLnNlcmllc1tpXSAmJiBfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RhdGUnXCI+e3ttb21lbnQoX2F0dHIuc2VyaWVzW2ldLCdZWVlZLU1NLWRkJyl8ZGF0ZTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuZGF0ZSB9fTwvc3Bhbj4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPCEtLSB3aGVuIGRhdGEgdHlwZSBpcyB0ZXh0IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRib3gtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J2RlY2ltYWwnfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSd0ZXh0JyB8fCBfYXR0ci53aWRnZXRTdWJUeXBlPT09J3N0cmluZycgfHwgX2F0dHIud2lkZ2V0U3ViVHlwZT09PSdkYXRlX3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAge3tfYXR0ci5zZXJpZXNbaV19fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfYXR0ci53aWRnZXRTdWJUeXBlPT09J251bWVyaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiX2F0dHIudmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IF9hdHRyLnNlcmllc1tpXSB8ICBjdXJyZW5jeTpfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIF9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tfYXR0ci5zZXJpZXNbaV18ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIV9hdHRyLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICFfYXR0ci52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHdlYiBsaW5rICAtLT5cbiAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2h5cGVybGluay13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LF9hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgc2lnbmF0dXJlIHdpZGdldCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInd2V0c2lnbmF0dXJlY2FwdHVyZS13aWRnZXQnXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXJsXCIgW3RpdGxlXT1cIngxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV1cIiAoY2xpY2spPVwicmVkaXJlY3QoJGV2ZW50LHgxSW1hZ2VNZWRpYVVybCtfYXR0ci5zZXJpZXNbaV0pXCI+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBXaGVuIHdpZGdldCB0eXBlIGlzIHZpZGVvIHdpZGdldCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndmlkZW9jYXB0dXJlLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgYXVkaW8gd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhdWRpb2NhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidmaWxldXBsb2FkLXdpZGdldCdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cmxcIiBbdGl0bGVdPVwieDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXVwiIChjbGljayk9XCJyZWRpcmVjdCgkZXZlbnQseDFJbWFnZU1lZGlhVXJsK19hdHRyLnNlcmllc1tpXSlcIj57e19hdHRyLnNlcmllc1tpXX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIFdoZW4gd2lkZ2V0IHR5cGUgaXMgZG9jdW1lbnQgd2lkZ2V0IC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpbWFnZWNhcHR1cmUtd2lkZ2V0J1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVybFwiIFt0aXRsZV09XCJ4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldXCIgKGNsaWNrKT1cInJlZGlyZWN0KCRldmVudCx4MUltYWdlTWVkaWFVcmwrX2F0dHIuc2VyaWVzW2ldKVwiPnt7X2F0dHIuc2VyaWVzW2ldfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPCEtLSBkZWZhdWx0IGNhc2UgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3tfYXR0ci5zZXJpZXNbaV19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPCEtLSB3aGVuIHNlcmllcyBkYXRhIGlzIGVtcHR5IC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj0nIV9hdHRyLnNlcmllc1tpXSc+LTwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9J19hdHRyLnNlcmllc1tpXSc+ICh7e19hdHRyLmNsb25lR3JvdXBEYXRhW2ldfX0pPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHdoZW4gcm93Q291bnQgaXMgb2ZmIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgbWFwLmdldChpKTsgbGV0IG09aW5kZXhcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICA+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgIDwhLS0gdG8gc2hvdyBzaWRlIGdyYW5kIHRvdGFsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbCAgJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1sxXS5jbG9uZVNlcmllc1tpXSE9PSdyZXBlYXRlZCdcIiA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpOyBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5jb2xvclwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPCEtLSB0byBzaG93IGRhdGEgd2l0aCByb3cgY291bnQgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ndGFidWxhclJlcG9ydC5yb3dDb3VudCc+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5kYXRhUmVuZGVyLmdldChpKSA7bGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXVwiPnt7ZGF0YX19PC9zcGFuPlxuXG5cbiAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MCBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLmdldChpKVwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID4ge3tkYXRhfX08L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMV0uY2xvbmVTZXJpZXNbaV0hPT0ncmVwZWF0ZWQnXCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpIGxldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSkgJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1sxXS5jbG9uZVNlcmllc1tpXSE9PSdyZXBlYXRlZCdcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgID57e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fTwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8IS0tIHN1YnRvdGFsIC0tPlxuICAgICAgICA8dHIgKm5nSWY9J3RhYnVsYXJSZXBvcnQuc3ViVG90YWwgICYmIChhdHRyR2xvYmFsPT09aSkgJz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfYXR0ciBvZiB0YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nOyBldmVuIGFzIGlzRXZlbjtsZXQgbSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nSWY9XCJtPT09MFwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT0nX2F0dHIuYWxpZ25tZW50J1xuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj5TdWJ0b3RhbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgKm5nSWY9XCJtPT09MVwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICA+LTwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb2xTdWJUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIj5cbiAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKycgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MFwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LmNvdW50c1N1YlRvdGFsLmdldChpKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ZGF0YX19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuc2lkZVN1YlRvdGFsLmdldChpKSBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKycgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQuY291bnRTVG90YWwuZ2V0KGkpfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwhLS0gd2hlbiBzaW5nbGUgcm93IGdyb3VwaW5nIGlzIGFwcGxpZWQgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPT09MVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnVuaXF1ZVNlcmllcztsZXQgaSA9IGluZGV4OyBldmVuIGFzIGlzRXZlbjsgbGV0IGRhdGExXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuc2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkhlYWRlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViSGVhZGVyLmZvbnQuY29sb3JcIlxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiZHJpbGxUaHJvdWdoQ29udGV4dCgkZXZlbnQsIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0sIGkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPSchZGF0YSc+LTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBtYXAuZ2V0KGkpIGxldCBtPWluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuc2hvd0dyYW5kVG90YWxcIiA+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpOyBsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSBcIj57eyBkYXRhIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQucm93Q291bnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5kYXRhUmVuZGVyLmdldChpKSBsZXQgbT1pbmRleFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+XG5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg9PT0wXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLmdldChpKVwiPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LnNpemVcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib2R5LmZvbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvZHkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci53aWR0aCsncHgnKyAnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCJcbiAgICAgICAgICAgICAgICA+IHt7ZGF0YX19PC90ZD5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnNob3dHcmFuZFRvdGFsXCIgPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9J3B4LTEuNVx0cHktMS41J1xuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPCEtLSB3aGVuIHN1YnRvdGFsIHRvZ2dsZSBpcyBvbiAtLT5cbiAgICAgICAgPHRyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zdWJUb3RhbFwiPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIiAgICAgICAgICA+U3ViVG90YWw8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1hcC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e2RhdGF8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+PC90ZD5cblxuICAgICAgICAgICAgPCEtLSB0byBzaG93IHNpZGUgZ3JhbmQgdG90YWwgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiID5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgXCI+e3sgZGF0YSB8ICBjdXJyZW5jeTp0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3tkYXRhfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSB0byBzaG93IHJvdyBjb3VudCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnJvd0NvdW50XCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5nZXQoaSkgbGV0IG09aW5kZXhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LnNpemVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9keS5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuc3ViRm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlXCI+e3tkYXRhfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3lcIj57e2RhdGF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nW21dXCI+e3tkYXRhfX08L3NwYW4+PC90ZD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD09PTBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5nZXQoaSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgPiB7e2RhdGF9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LnNob3dHcmFuZFRvdGFsXCI+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuZ2V0KGkpIGxldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtZmFtaWx5XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5mYW1pbHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuZm9udC5jb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5zdWJGb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IGRhdGEgfCAgY3VycmVuY3k6dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IDonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7ZGF0YXwgIGF4b1BlcmNlbnRhZ2U6IFtdIDogJ2NvbHVtbid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7ZGF0YX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicHgtMS41XHRweS0xLjVcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5mb250LmNvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLnN1YkZvb3Rlci5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e3RhYnVsYXJSZXBvcnQudG90YWxSb3dDb3VudC5nZXQoaSl9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuICAgIDwhLS0gIFRhYmxlIGZvb3RlciBmb3IgZ3JhbmQgdG90YWwgLS0+XG4gICAgPHRmb290ICpuZ0lmPVwidGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuZm9udC5zaXplXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuY29sb3JcIlxuICAgICAgPlxuICAgICAgPHRyICpuZ0lmPVwidGFidWxhclJlcG9ydC5zaG93R3JhbmRUb3RhbFwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysnICcrIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuYm9yZGVyU3R5bGUgKyAnICcgKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmNvbG9yXCI+XG4gICAgICAgICAgR3JhbmQgVG90YWw8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz1cInB4LTEuNVx0cHktMS41XCJcbiAgICAgICAgICAqbmdJZj0ndGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSdcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIud2lkdGgrJ3B4JysgJyAnKyB0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLmJvcmRlclN0eWxlICsgJyAnICsgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5jb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgIC1cbiAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHRvdGFsIG9mIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDtsZXQgbT1pbmRleFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LWZhbWlseV09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmZvbnQuZmFtaWx5XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuZm9vdGVyLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV0gJiYgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IHRvdGFsIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeSA6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcucGVyY2VudGFnZVwiPnt7dG90YWx8ICBheG9QZXJjZW50YWdlOiBbXSA6ICdjb2x1bW4nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2UgJiYgIXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5jdXJyZW5jeVwiPnt7dG90YWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZ1ttXVwiPnt7dG90YWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8IS0tIHdoZW4gcm93IGNvdW50IHRvZ2dsZSBpcyBvbiAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFidWxhclJlcG9ydC5yb3dDb3VudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD4wXCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0b3RhbCBvZiB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyO2xldCBtPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5IFwiPnt7IHRvdGFsIHwgIGN1cnJlbmN5OnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nW21dXS52YWx1ZUZvcm1hdHRpbmcuY3VycmVuY3kgOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLnBlcmNlbnRhZ2VcIj57e3RvdGFsfCAgYXhvUGVyY2VudGFnZTogW10gOiAnY29sdW1uJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXSAmJiAhdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1t0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmdbbV1dLnZhbHVlRm9ybWF0dGluZy5wZXJjZW50YWdlICYmICF0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3RhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZ1ttXV0udmFsdWVGb3JtYXR0aW5nLmN1cnJlbmN5XCI+e3t0b3RhbH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmdbbV1cIj57e3RvdGFsfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aD09PTBcIj5cblxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJweC0xLjVcdHB5LTEuNVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0b3RhbCBvZiB0YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsO2xldCBpPWluZGV4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0YWJ1bGFyUmVwb3J0LnRhYmxlU3R5bGUuYm9yZGVyLndpZHRoKydweCcrICcgJysgdGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmJvcmRlci5ib3JkZXJTdHlsZSArICcgJyArIHRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5ib3JkZXIuY29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuZm9udC1mYW1pbHldPVwidGFidWxhclJlcG9ydC50YWJsZVN0eWxlLmZvb3Rlci5mb250LmZhbWlseVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhYnVsYXJSZXBvcnQudGFibGVTdHlsZS5mb290ZXIuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7dG90YWx9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RyPlxuICAgIDwvdGZvb3Q+XG4gIDwvdGFibGU+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBmbGV4LWNvbCB6ZXJvLXJlY29yZHNcIiAqbmdJZj1cIih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aD4wICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aD09PTApXCI+XG4gICAgTm8gcmVjb3JkcyBhdmFpbGFibGVcbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcbiAgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbjwvZGl2PlxuXG48IS0tIE1hdCBNZW51IHRyaWdnZXIgZm9yIHRhYmxlIGNvbHVtbnMtLT5cbjxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCI+XG4gIDxkaXYgaWQ9XCJ0YWJsZS1tZW51XCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwicmVwb3J0RGF0YVwiPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoPjAgXCJtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJBZ2dyZWdhdGVcIj5BZ2dyZWdhdGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibW92ZUNvbHVtbkxlZnQoJGV2ZW50KVwiPk1vdmUgTGVmdDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJtb3ZlQ29sdW1uUmlnaHQoJGV2ZW50KVwiPk1vdmUgUmlnaHQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJzY3JlZW5UeXBlcy5kYXNoYm9hcmRCdWlsZGVyID09PSBzY3JlZW5UeXBlXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlRnJvbURhc2hib2FyZCgpXCI+UmVtb3ZlIEZyb20gRGFzaGJvYXJkPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cblxuXG48IS0tIE1hdCBtZW51IHRyaWdnZXIgZm9yICBBZ2dyZWdhdGlvbi0tPlxuPG1hdC1tZW51ICNBZ2dyZWdhdGU9XCJtYXRNZW51XCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCAqbmdJZj0ndGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5sZW5ndGg+MCc+XG4gICAgPHNlY3Rpb24+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCAgY2xhc3M9XCJhZ2dyZWdhdGUtZnVuXCIgWyhuZ01vZGVsKV09J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbY3VycmVudEluZGV4XS5hZ2dyZWdhdGUuc2hvd1N1bSdcbiAgICAgICAgICAoY2hhbmdlKT1cInN1bUFnZ3JlZ2F0aW9uKCRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+c3VtPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImFnZ3JlZ2F0ZS1mdW5cIiBbKG5nTW9kZWwpXT0ndGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tjdXJyZW50SW5kZXhdLmFnZ3JlZ2F0ZS5zaG93QXZnJ19hdHRyLndpZGdldFN1YlR5cGU9PT0nZGF0ZV9yYW5nZScgfHxcbiAgICAgICAgICAoY2hhbmdlKT1cImF2ZXJhZ2VBZ2dyZWdhdGlvbigkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPkF2ZXJhZ2U8L21hdC1jaGVja2JveD5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiYWdncmVnYXRlLWZ1blwiWyhuZ01vZGVsKV09J3RhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbY3VycmVudEluZGV4XS5hZ2dyZWdhdGUuc2hvd01heCdcbiAgICAgICAgICAoY2hhbmdlKT1cIm1heEFnZ3JlZ2F0aW9uKCRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+TWF4PC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImFnZ3JlZ2F0ZS1mdW5cIlsobmdNb2RlbCldPSd0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2N1cnJlbnRJbmRleF0uYWdncmVnYXRlLnNob3dNaW4nXG4gICAgICAgICAgKGNoYW5nZSk9XCJtaW5BZ2dyZWdhdGlvbigkZXZlbnQpXCIoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+TWluPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3A+XG4gICAgPC9zZWN0aW9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPGRpdiAqbmdJZj1cIiF0YWJ1bGFyUmVwb3J0LmlzRGF0YUxvYWRlZCAmJiB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmxlbmd0aCE9PTBcIiBjbGFzcz1cImxvYWRlci1zcGlubmVyXCI+XG4gIDxhcHAtZ2hvc3QtbG9hZGVyIFtlbGVtZW50VHlwZV09XCJHaG9zdExvYWRlclR5cGUuVGFidWxhckNoYXJ0TG9hZGVyXCIgPjwvYXBwLWdob3N0LWxvYWRlcj5cbjwvZGl2PlxuPCEtLSA8ZGl2ICpuZ0lmPVwiIXRhYnVsYXJSZXBvcnQuaXNEYXRhTG9hZGVkICYmIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMubGVuZ3RoIT09MFwiIGNsYXNzPVwibG9hZGVyLXNwaW5uZXJcIj4gLS0+XG4gIDwhLS0gPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI0MFwiPjwvbWF0LXNwaW5uZXI+PC9kaXY+IC0tPlxuIl19