raise-common-lib 0.0.209 → 0.0.210
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -57
- package/bundles/raise-common-lib.umd.js +18 -18
- package/bundles/raise-common-lib.umd.js.map +1 -1
- package/bundles/raise-common-lib.umd.min.js +1 -1
- package/bundles/raise-common-lib.umd.min.js.map +1 -1
- package/esm2015/lib/common-grid/index.component.js +2 -2
- package/esm2015/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +2 -2
- package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm2015/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm2015/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +2 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +2 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +3 -3
- package/esm5/lib/common-grid/index.component.js +2 -2
- package/esm5/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +2 -2
- package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm5/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm5/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +2 -2
- package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +2 -2
- package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +3 -3
- package/fesm2015/raise-common-lib.js +18 -18
- package/fesm2015/raise-common-lib.js.map +1 -1
- package/fesm5/raise-common-lib.js +18 -18
- package/fesm5/raise-common-lib.js.map +1 -1
- package/package.json +1 -1
- package/raise-common-lib.metadata.json +1 -1
- package/src/assets/img/arrow_right.svg +4 -4
- package/src/assets/img/calendar-disabled.svg +6 -6
- package/src/assets/img/calendar.svg +6 -6
- package/src/assets/img/calendar_arrow_down.svg +3 -3
- package/src/assets/img/calendar_arrow_left.svg +3 -3
- package/src/assets/img/calendar_arrow_right.svg +3 -3
- package/src/assets/img/calendar_arrow_up.svg +3 -3
- package/src/assets/img/checked-vector.svg +3 -3
- package/src/assets/img/dialog-close.svg +4 -4
- package/src/assets/img/dialog-grow.svg +6 -6
- package/src/assets/img/dialog-shrink.svg +6 -6
- package/src/assets/img/plus.svg +4 -4
- package/src/assets/img/search.svg +4 -4
- package/src/assets/img/shrink-icon.svg +6 -6
- package/src/assets/img/time-disabled.svg +4 -4
- package/src/assets/img/time.svg +4 -4
- package/src/assets/img/toolbar-action-addFolder.svg +17 -17
- package/src/assets/img/toolbar-action-calculator.svg +11 -11
- package/src/assets/img/toolbar-action-collapse.svg +7 -7
- package/src/assets/img/toolbar-action-combine.svg +4 -4
- package/src/assets/img/toolbar-action-edit.svg +4 -4
- package/src/assets/img/toolbar-action-expand.svg +7 -7
- package/src/assets/img/toolbar-action-folderMove.svg +8 -8
- package/src/assets/img/toolbar-action-lock.svg +6 -6
- package/src/assets/img/toolbar-action-preview.svg +7 -7
- package/src/assets/img/toolbar-action-publish.svg +5 -5
- package/src/assets/img/toolbar-action-reminders.svg +10 -10
- package/src/assets/img/toolbar-action-rename.svg +7 -7
- package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
- package/src/assets/img/toolbar-action-send-file.svg +5 -5
- package/src/assets/img/toolbar-action-settle.svg +7 -7
- package/src/assets/img/toolbar-action-share.svg +5 -5
- package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
- package/src/assets/img/toolbar-action-sync.svg +4 -4
- package/src/assets/img/toolbar-action-template.svg +6 -6
- package/src/assets/img/toolbar-action-workflow.svg +9 -9
|
@@ -1456,8 +1456,8 @@ export class SidebarIconlistNewComponent {
|
|
|
1456
1456
|
}
|
|
1457
1457
|
SidebarIconlistNewComponent.decorators = [
|
|
1458
1458
|
{ type: Component, args: [{
|
|
1459
|
-
selector: "
|
|
1460
|
-
template: "<div class=\"sidebar-iconlist\" *ngIf=\"config\">\r\n <ul class=\"nav-tabs\">\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [ngClass]=\"{ active: currentTab === 'tab1' }\"\r\n data-toggle=\"tab\"\r\n (click)=\"switchTab('tab1')\"\r\n >\r\n <img\r\n style=\"margin-right: 8px\"\r\n src=\"../../../assets/img/dashboard_icon/basic-icon-filter.svg\"\r\n />\r\n <div class=\"tab-name\">\r\n {{ translation.FILTER ? translation.FILTER : \".FILTER\" }}\r\n </div>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [ngClass]=\"{ active: currentTab === 'tab2' }\"\r\n data-toggle=\"tab\"\r\n (click)=\"switchTab('tab2')\"\r\n >\r\n <img\r\n style=\"margin-right: 8px\"\r\n src=\"../../../assets/img/dashboard_icon/dashboard-icon.svg\"\r\n />\r\n <div class=\"tab-name\">\r\n {{ translation.PROPERTIES ? translation.PROPERTIES : \".PROPERTIES\" }}\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n <div class=\"sidebar-iconlist-content\">\r\n <!-- <form action=\"\" method=\"\"> -->\r\n <div\r\n class=\"tab-content\"\r\n style=\"height: calc(100% - 140px); overflow-y: scroll\"\r\n >\r\n <div class=\"tab-pane\" *ngIf=\"currentTab === 'tab1'\" style=\"height: 100%\">\r\n <rs-field-filter\r\n [portlet]=\"portlet\"\r\n [dashboard]=\"dashboard\"\r\n [portlets]=\"portlets\"\r\n (updatePorletConfig)=\"_updatePorletConfig($event)\"\r\n ></rs-field-filter>\r\n </div>\r\n <div class=\"tab-pane\" *ngIf=\"currentTab === 'tab2'\">\r\n <div>\r\n <div (click)=\"nextWizard(0)\" class=\"wizard\">\r\n <span class=\"wizard-name\">\r\n {{\r\n translation.DATA_TABLE ? translation.DATA_TABLE : \"Data Table\"\r\n }}*\r\n </span>\r\n <mat-icon style=\"position: absolute; right: 0\">\r\n {{ !expandArray[0] ? \"expand_more\" : \"expand_less\" }}\r\n </mat-icon>\r\n </div>\r\n <div\r\n [ngStyle]=\"{ height: expandArray[0] ? '100px' : '0' }\"\r\n [ngClass]=\"{ collapsed: !expandArray[0] }\"\r\n class=\"wizard-expanded\"\r\n >\r\n <div class=\"data-source add-pdding\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{\r\n translation.FIRST_CHOOSE_THE_DATA_TABLE_TO_CUSTOMIZE_YOUR_DASHBOARD\r\n ? translation.FIRST_CHOOSE_THE_DATA_TABLE_TO_CUSTOMIZE_YOUR_DASHBOARD\r\n : \"Firstly, choose the data table to customize your dashboard\"\r\n }}\r\n </div>\r\n <div class=\"twelvepx\">\r\n <mat-select\r\n class=\"datamart-select\"\r\n [(ngModel)]=\"selectedDatamart\"\r\n (selectionChange)=\"changeDataTable($event.value)\"\r\n >\r\n <ng-container *ngFor=\"let datatable of dataMartTableList\">\r\n <!-- *ngIf=\"!datatable.isHide\" -->\r\n <mat-option [value]=\"datatable.datamartCode\">\r\n {{\r\n translation[datatable.langCode] || datatable.langCode\r\n }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getFigurecode()\" (click)=\"nextWizard(2)\" class=\"wizard\">\r\n <span class=\"wizard-name\"\r\n >{{\r\n translation.PORTLET_TYPE\r\n ? translation.PORTLET_TYPE\r\n : \".PORTLET_TYPE\"\r\n }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[2] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n <!-- \u56FE\u8868\u7C7B\u578B\u9009\u62E9 -->\r\n <div\r\n *ngIf=\"getFigurecode()\"\r\n [ngClass]=\"{ collapsed: !expandArray[2] }\"\r\n class=\"wizard-expanded portlets\"\r\n >\r\n <rs-portlet-type-new\r\n [portlet]=\"portlet\"\r\n [dashboard]=\"dashboard\"\r\n [dataMartCode]=\"selectedDatamart\"\r\n (portletType)=\"getPortletType($event)\"\r\n >\r\n </rs-portlet-type-new>\r\n </div>\r\n\r\n <!-- new dashboard \u5E76\u4E14\u9009\u62E9\u56FE\u6807\u7C7B\u578B \u624D\u6709\u7684\u4F9B\u4E09\u4E2A\u56FE\u8868\u9009\u62E9\u7684X\u8F74Y\u8F74 -->\r\n <ng-container\r\n *ngIf=\"\r\n ['newcolumn', 'newline', 'newcolumnline'].includes(portletType)\r\n \"\r\n >\r\n <div class=\"wizard\" (click)=\"nextWizard(7)\">\r\n <span class=\"wizard-name\"\r\n >{{ translation.CONFIGURATIONS || \".CONFIGURATIONS\" }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[7] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n\r\n <!-- \u56FE\u6807\u914D\u7F6E\u9879 configuration -->\r\n <div\r\n [ngClass]=\"{ collapsed: !expandArray[7] }\"\r\n class=\"wizard-expanded config\"\r\n >\r\n <div style=\"padding-left: 18px\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n style=\"margin-bottom: 10px\"\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"changeTheme($event, 'theme')\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.X_AXIS || \".X-AXIS\" }}\r\n </div>\r\n\r\n <mat-select\r\n [(value)]=\"selectedX\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <ng-container *ngIf=\"selectedX\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.FREQUENCY || \".FREQUENCY\" }}\r\n </div>\r\n\r\n <mat-select\r\n [(value)]=\"selectedMultiples\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let i of multiplesList\"\r\n [value]=\"i.langCode\"\r\n >{{\r\n i.addtionName\r\n ? i.addtionName + \"\" + translation[i.langCode]\r\n : translation[i.langCode]\r\n }}</mat-option\r\n >\r\n </mat-select>\r\n </ng-container>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{\r\n portletType === \"newcolumnline\"\r\n ? (translation.COLUMN ? translation.COLUMN + \" \" : \"\") +\r\n (translation.Y_AXIS || \".COLUMN Y-AXIS\")\r\n : translation.Y_AXIS || \".Y-AXIS\"\r\n }}\r\n </div>\r\n\r\n <mat-select\r\n multiple\r\n [(value)]=\"selectedY\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <div\r\n style=\"margin-bottom: 10px\"\r\n class=\"twelvepx\"\r\n *ngIf=\"portletType == 'newcolumnline'\"\r\n >\r\n {{\r\n (translation.LINE ? translation.LINE + \" \" : \"\") +\r\n (translation.Y_AXIS || \".LINE Y-AXIS\")\r\n }}\r\n </div>\r\n\r\n <mat-select\r\n multiple\r\n class=\"datamart-select\"\r\n [(value)]=\"selectedSecondY\"\r\n (openedChange)=\"xyChange($event)\"\r\n panelClass=\"mat-select-multi-panel\"\r\n *ngIf=\"portletType == 'newcolumnline'\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <div class=\"data-label-content\">\r\n <div class=\"label\">\r\n {{ translation.DATA_LABEL || \".Data labels\" }}\r\n </div>\r\n <ejs-switch\r\n [(ngModel)]=\"hasMarker\"\r\n (ngModelChange)=\"labelConfigChange($event)\"\r\n ></ejs-switch>\r\n </div>\r\n\r\n <div style=\"margin: 10px 0\" class=\"twelvepx\">\r\n {{ translation.DISPLAY_UNITS || \".Display Units\" }}\r\n </div>\r\n\r\n <mat-select\r\n class=\"datamart-select\"\r\n [(ngModel)]=\"markerFormat\"\r\n (ngModelChange)=\"onChangeFormat()\"\r\n >\r\n <ng-container *ngFor=\"let format of markerFormatList\">\r\n <mat-option [value]=\"format.value\">{{\r\n format.label\r\n }}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- historical IRR \u4E13\u7528 -->\r\n <ng-container *ngIf=\"['historicalIRR'].includes(portletType)\">\r\n <div class=\"wizard\" (click)=\"nextWizard(7)\">\r\n <span class=\"wizard-name\"\r\n >{{ translation.CONFIGURATIONS || \"CONFIGURATIONS\" }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[7] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n\r\n <!-- \u56FE\u6807\u914D\u7F6E\u9879 configuration -->\r\n <div\r\n [ngClass]=\"{ collapsed: !expandArray[7] }\"\r\n class=\"wizard-expanded config\"\r\n >\r\n <div style=\"padding-left: 18px\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n style=\"margin-bottom: 10px\"\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"changeTheme($event, 'theme')\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.FREQUENCY || \".FREQUENCY\" }}\r\n </div>\r\n\r\n <!-- Frequency: Yearly/Quarterly(default)/Monthly -->\r\n <mat-select\r\n [(value)]=\"selectedMultiples\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let i of frequencyOptions\"\r\n [value]=\"i.langCode\"\r\n >\r\n {{ (i.addtionName || \"\") + translation[i.langCode] }}\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Fund cashflow IRR ( fund ops settlement) \u53EF\u9009\u62E9 -->\r\n <ng-container\r\n *ngIf=\"\r\n ['FundHistoricalCashflowIRR'].includes(selectedDatamart)\r\n \"\r\n >\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n Investors\r\n </div>\r\n <!-- Investors: All/exclude GP&SLP -->\r\n <mat-select\r\n [(value)]=\"selectedInvestor\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of investorList\"\r\n [value]=\"item.code\"\r\n >\r\n {{ item.text }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-container>\r\n\r\n <!-- line \u548C bar \u56FE x \u8F74\u4E3A date\uFF0Cy \u8F74\u4E3A IRR \u767E\u5206\u6570 -->\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.VISUAL_TYPE || \".VISUAL_TYPE\" }}\r\n </div>\r\n <!-- Visual Type: Line(default)/Column Chart/Table -->\r\n <mat-select\r\n [(value)]=\"selectedVisualType\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of visualTypeList\"\r\n [value]=\"item.code\"\r\n >\r\n {{ item.text }}\r\n </mat-option>\r\n </mat-select>\r\n <div\r\n class=\"data-label-content\"\r\n *ngIf=\"selectedVisualType !== 'table'\"\r\n >\r\n <div class=\"label\">\r\n {{ translation.DATA_LABEL || \".Data labels\" }}\r\n </div>\r\n <ejs-switch\r\n [checked]=\"true\"\r\n [(ngModel)]=\"hasMarker\"\r\n (ngModelChange)=\"labelConfigChange($event)\"\r\n ></ejs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"wizard\" (click)=\"nextWizard(3)\">\r\n <span class=\"wizard-name\"\r\n >{{\r\n translation.GENERAL_OPTIONS\r\n ? translation.GENERAL_OPTIONS\r\n : \".GENERAL_OPTIONS\"\r\n }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[3] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n <div\r\n class=\"dialog-content\"\r\n [ngClass]=\"{ collapsed: !expandArray[3] }\"\r\n *ngIf=\"portletType !== 'newchart'\"\r\n >\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.GADGET_TITLE || \".GADGET_TITLE\" }}\r\n </div>\r\n <input\r\n matInput\r\n #message\r\n maxlength=\"256\"\r\n (ngModelChange)=\"gadgetTitleChange($event)\"\r\n [(ngModel)]=\"config.gadgetTitle\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n </div>\r\n <div\r\n class=\"dialog-content\"\r\n [ngClass]=\"{ collapsed: !expandArray[3] }\"\r\n *ngIf=\"portletType === 'newchart'\"\r\n >\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.GADGET_TITLE || \".GADGET_TITLE\" }}\r\n </div>\r\n <input\r\n matInput\r\n #message\r\n maxlength=\"256\"\r\n (ngModelChange)=\"gadgetTitleChange($event)\"\r\n [(ngModel)]=\"config.gadgetTitle\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.CHARTTYPE || \".CHARTTYPE\" }}\r\n </div>\r\n <mat-select\r\n [placeholder]=\"translation.SELECT_A_TYPE || 'Select a type'\"\r\n [(ngModel)]=\"chartSettings.chartSeries.type\"\r\n (selectionChange)=\"setChartType()\"\r\n >\r\n <mat-option *ngFor=\"let item of chartTypeList\" [value]=\"item\">\r\n {{ translation[\"chart_\" + item] || item }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <div class=\"condition-item flex\">\r\n <ejs-checkbox\r\n [label]=\"translation.MULTIPLE_AXIS || '.MULTIPLE_AXIS'\"\r\n [(ngModel)]=\"chartSettings.enableMultipleAxis\"\r\n (change)=\"setMultipleAxis($event)\"\r\n ></ejs-checkbox>\r\n <ejs-checkbox\r\n [disabled]=\"!chartSettings.enableMultipleAxis\"\r\n [label]=\"translation.SHOW_LEGEND || '.SHOW_LEGEND'\"\r\n (change)=\"setMultipleAxis($event)\"\r\n [(ngModel)]=\"chartSettings.legendSettings.visible\"\r\n ></ejs-checkbox>\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.MULTIPLE_AXIS_MODE || \".MULTIPLE_AXIS_MODE\" }}\r\n </div>\r\n <mat-select\r\n [placeholder]=\"translation.SELECT_A_MODE || '.SELECT_A_MODE'\"\r\n (selectionChange)=\"setMultipleAxis($event.value)\"\r\n [(ngModel)]=\"chartSettings.multipleAxisMode\"\r\n [disabled]=\"!chartSettings.enableMultipleAxis\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of multipleAxisModeList\"\r\n [value]=\"item\"\r\n >\r\n {{ translation[\"chart_\" + item] || item }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"getThemeData($event)\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </form> -->\r\n <div class=\"footer-btn\">\r\n <button type=\"button\" mat-flat-button class=\"btn-close\" (click)=\"clear()\">\r\n {{ translation.CLEAR ? translation.CLEAR : \"Clear\" }}\r\n </button>\r\n <button type=\"button\" mat-flat-button class=\"btn-save\" (click)=\"close()\">\r\n {{ translation.CLOSE ? translation.CLOSE : \".CLOSE\" }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
1459
|
+
selector: "kt-sidebar-iconlist-new",
|
|
1460
|
+
template: "<div class=\"sidebar-iconlist\" *ngIf=\"config\">\r\n <ul class=\"nav-tabs\">\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [ngClass]=\"{ active: currentTab === 'tab1' }\"\r\n data-toggle=\"tab\"\r\n (click)=\"switchTab('tab1')\"\r\n >\r\n <img\r\n style=\"margin-right: 8px\"\r\n src=\"../../../assets/img/dashboard_icon/basic-icon-filter.svg\"\r\n />\r\n <div class=\"tab-name\">\r\n {{ translation.FILTER ? translation.FILTER : \".FILTER\" }}\r\n </div>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [ngClass]=\"{ active: currentTab === 'tab2' }\"\r\n data-toggle=\"tab\"\r\n (click)=\"switchTab('tab2')\"\r\n >\r\n <img\r\n style=\"margin-right: 8px\"\r\n src=\"../../../assets/img/dashboard_icon/dashboard-icon.svg\"\r\n />\r\n <div class=\"tab-name\">\r\n {{ translation.PROPERTIES ? translation.PROPERTIES : \".PROPERTIES\" }}\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n <div class=\"sidebar-iconlist-content\">\r\n <!-- <form action=\"\" method=\"\"> -->\r\n <div\r\n class=\"tab-content\"\r\n style=\"height: calc(100% - 140px); overflow-y: scroll\"\r\n >\r\n <div class=\"tab-pane\" *ngIf=\"currentTab === 'tab1'\" style=\"height: 100%\">\r\n <kt-field-filter\r\n [portlet]=\"portlet\"\r\n [dashboard]=\"dashboard\"\r\n [portlets]=\"portlets\"\r\n (updatePorletConfig)=\"_updatePorletConfig($event)\"\r\n ></kt-field-filter>\r\n </div>\r\n <div class=\"tab-pane\" *ngIf=\"currentTab === 'tab2'\">\r\n <div>\r\n <div (click)=\"nextWizard(0)\" class=\"wizard\">\r\n <span class=\"wizard-name\">\r\n {{\r\n translation.DATA_TABLE ? translation.DATA_TABLE : \"Data Table\"\r\n }}*\r\n </span>\r\n <mat-icon style=\"position: absolute; right: 0\">\r\n {{ !expandArray[0] ? \"expand_more\" : \"expand_less\" }}\r\n </mat-icon>\r\n </div>\r\n <div\r\n [ngStyle]=\"{ height: expandArray[0] ? '100px' : '0' }\"\r\n [ngClass]=\"{ collapsed: !expandArray[0] }\"\r\n class=\"wizard-expanded\"\r\n >\r\n <div class=\"data-source add-pdding\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{\r\n translation.FIRST_CHOOSE_THE_DATA_TABLE_TO_CUSTOMIZE_YOUR_DASHBOARD\r\n ? translation.FIRST_CHOOSE_THE_DATA_TABLE_TO_CUSTOMIZE_YOUR_DASHBOARD\r\n : \"Firstly, choose the data table to customize your dashboard\"\r\n }}\r\n </div>\r\n <div class=\"twelvepx\">\r\n <mat-select\r\n class=\"datamart-select\"\r\n [(ngModel)]=\"selectedDatamart\"\r\n (selectionChange)=\"changeDataTable($event.value)\"\r\n >\r\n <ng-container *ngFor=\"let datatable of dataMartTableList\">\r\n <!-- *ngIf=\"!datatable.isHide\" -->\r\n <mat-option [value]=\"datatable.datamartCode\">\r\n {{\r\n translation[datatable.langCode] || datatable.langCode\r\n }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getFigurecode()\" (click)=\"nextWizard(2)\" class=\"wizard\">\r\n <span class=\"wizard-name\"\r\n >{{\r\n translation.PORTLET_TYPE\r\n ? translation.PORTLET_TYPE\r\n : \".PORTLET_TYPE\"\r\n }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[2] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n <!-- \u56FE\u8868\u7C7B\u578B\u9009\u62E9 -->\r\n <div\r\n *ngIf=\"getFigurecode()\"\r\n [ngClass]=\"{ collapsed: !expandArray[2] }\"\r\n class=\"wizard-expanded portlets\"\r\n >\r\n <kt-portlet-type-new\r\n [portlet]=\"portlet\"\r\n [dashboard]=\"dashboard\"\r\n [dataMartCode]=\"selectedDatamart\"\r\n (portletType)=\"getPortletType($event)\"\r\n >\r\n </kt-portlet-type-new>\r\n </div>\r\n\r\n <!-- new dashboard \u5E76\u4E14\u9009\u62E9\u56FE\u6807\u7C7B\u578B \u624D\u6709\u7684\u4F9B\u4E09\u4E2A\u56FE\u8868\u9009\u62E9\u7684X\u8F74Y\u8F74 -->\r\n <ng-container\r\n *ngIf=\"\r\n ['newcolumn', 'newline', 'newcolumnline'].includes(portletType)\r\n \"\r\n >\r\n <div class=\"wizard\" (click)=\"nextWizard(7)\">\r\n <span class=\"wizard-name\"\r\n >{{ translation.CONFIGURATIONS || \".CONFIGURATIONS\" }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[7] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n\r\n <!-- \u56FE\u6807\u914D\u7F6E\u9879 configuration -->\r\n <div\r\n [ngClass]=\"{ collapsed: !expandArray[7] }\"\r\n class=\"wizard-expanded config\"\r\n >\r\n <div style=\"padding-left: 18px\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n style=\"margin-bottom: 10px\"\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"changeTheme($event, 'theme')\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.X_AXIS || \".X-AXIS\" }}\r\n </div>\r\n\r\n <mat-select\r\n [(value)]=\"selectedX\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <ng-container *ngIf=\"selectedX\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.FREQUENCY || \".FREQUENCY\" }}\r\n </div>\r\n\r\n <mat-select\r\n [(value)]=\"selectedMultiples\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let i of multiplesList\"\r\n [value]=\"i.langCode\"\r\n >{{\r\n i.addtionName\r\n ? i.addtionName + \"\" + translation[i.langCode]\r\n : translation[i.langCode]\r\n }}</mat-option\r\n >\r\n </mat-select>\r\n </ng-container>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{\r\n portletType === \"newcolumnline\"\r\n ? (translation.COLUMN ? translation.COLUMN + \" \" : \"\") +\r\n (translation.Y_AXIS || \".COLUMN Y-AXIS\")\r\n : translation.Y_AXIS || \".Y-AXIS\"\r\n }}\r\n </div>\r\n\r\n <mat-select\r\n multiple\r\n [(value)]=\"selectedY\"\r\n (openedChange)=\"xyChange($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <div\r\n style=\"margin-bottom: 10px\"\r\n class=\"twelvepx\"\r\n *ngIf=\"portletType == 'newcolumnline'\"\r\n >\r\n {{\r\n (translation.LINE ? translation.LINE + \" \" : \"\") +\r\n (translation.Y_AXIS || \".LINE Y-AXIS\")\r\n }}\r\n </div>\r\n\r\n <mat-select\r\n multiple\r\n class=\"datamart-select\"\r\n [(value)]=\"selectedSecondY\"\r\n (openedChange)=\"xyChange($event)\"\r\n panelClass=\"mat-select-multi-panel\"\r\n *ngIf=\"portletType == 'newcolumnline'\"\r\n >\r\n <ng-container *ngFor=\"let i of yList\">\r\n <mat-option\r\n *ngIf=\"!i.isCalculatedField\"\r\n [value]=\"i.colName\"\r\n >{{\r\n (translation[i.langCode]\r\n ? translation[i.langCode]\r\n : \".\" + i.langCode) +\r\n (i.addtionName ? \" \" + i.addtionName : \"\")\r\n }}</mat-option\r\n >\r\n </ng-container>\r\n </mat-select>\r\n\r\n <div class=\"data-label-content\">\r\n <div class=\"label\">\r\n {{ translation.DATA_LABEL || \".Data labels\" }}\r\n </div>\r\n <ejs-switch\r\n [(ngModel)]=\"hasMarker\"\r\n (ngModelChange)=\"labelConfigChange($event)\"\r\n ></ejs-switch>\r\n </div>\r\n\r\n <div style=\"margin: 10px 0\" class=\"twelvepx\">\r\n {{ translation.DISPLAY_UNITS || \".Display Units\" }}\r\n </div>\r\n\r\n <mat-select\r\n class=\"datamart-select\"\r\n [(ngModel)]=\"markerFormat\"\r\n (ngModelChange)=\"onChangeFormat()\"\r\n >\r\n <ng-container *ngFor=\"let format of markerFormatList\">\r\n <mat-option [value]=\"format.value\">{{\r\n format.label\r\n }}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- historical IRR \u4E13\u7528 -->\r\n <ng-container *ngIf=\"['historicalIRR'].includes(portletType)\">\r\n <div class=\"wizard\" (click)=\"nextWizard(7)\">\r\n <span class=\"wizard-name\"\r\n >{{ translation.CONFIGURATIONS || \"CONFIGURATIONS\" }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[7] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n\r\n <!-- \u56FE\u6807\u914D\u7F6E\u9879 configuration -->\r\n <div\r\n [ngClass]=\"{ collapsed: !expandArray[7] }\"\r\n class=\"wizard-expanded config\"\r\n >\r\n <div style=\"padding-left: 18px\">\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n style=\"margin-bottom: 10px\"\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"changeTheme($event, 'theme')\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.FREQUENCY || \".FREQUENCY\" }}\r\n </div>\r\n\r\n <!-- Frequency: Yearly/Quarterly(default)/Monthly -->\r\n <mat-select\r\n [(value)]=\"selectedMultiples\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let i of frequencyOptions\"\r\n [value]=\"i.langCode\"\r\n >\r\n {{ (i.addtionName || \"\") + translation[i.langCode] }}\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Fund cashflow IRR ( fund ops settlement) \u53EF\u9009\u62E9 -->\r\n <ng-container\r\n *ngIf=\"\r\n ['FundHistoricalCashflowIRR'].includes(selectedDatamart)\r\n \"\r\n >\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n Investors\r\n </div>\r\n <!-- Investors: All/exclude GP&SLP -->\r\n <mat-select\r\n [(value)]=\"selectedInvestor\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of investorList\"\r\n [value]=\"item.code\"\r\n >\r\n {{ item.text }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-container>\r\n\r\n <!-- line \u548C bar \u56FE x \u8F74\u4E3A date\uFF0Cy \u8F74\u4E3A IRR \u767E\u5206\u6570 -->\r\n <div style=\"margin-bottom: 10px\" class=\"twelvepx\">\r\n {{ translation.VISUAL_TYPE || \".VISUAL_TYPE\" }}\r\n </div>\r\n <!-- Visual Type: Line(default)/Column Chart/Table -->\r\n <mat-select\r\n [(value)]=\"selectedVisualType\"\r\n (openedChange)=\"setHistoricalIRRChart($event)\"\r\n class=\"datamart-select\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of visualTypeList\"\r\n [value]=\"item.code\"\r\n >\r\n {{ item.text }}\r\n </mat-option>\r\n </mat-select>\r\n <div\r\n class=\"data-label-content\"\r\n *ngIf=\"selectedVisualType !== 'table'\"\r\n >\r\n <div class=\"label\">\r\n {{ translation.DATA_LABEL || \".Data labels\" }}\r\n </div>\r\n <ejs-switch\r\n [checked]=\"true\"\r\n [(ngModel)]=\"hasMarker\"\r\n (ngModelChange)=\"labelConfigChange($event)\"\r\n ></ejs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"wizard\" (click)=\"nextWizard(3)\">\r\n <span class=\"wizard-name\"\r\n >{{\r\n translation.GENERAL_OPTIONS\r\n ? translation.GENERAL_OPTIONS\r\n : \".GENERAL_OPTIONS\"\r\n }}*</span\r\n >\r\n <mat-icon class=\"wizard-icon\">{{\r\n !expandArray[3] ? \"expand_more\" : \"expand_less\"\r\n }}</mat-icon>\r\n </div>\r\n <div\r\n class=\"dialog-content\"\r\n [ngClass]=\"{ collapsed: !expandArray[3] }\"\r\n *ngIf=\"portletType !== 'newchart'\"\r\n >\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.GADGET_TITLE || \".GADGET_TITLE\" }}\r\n </div>\r\n <input\r\n matInput\r\n #message\r\n maxlength=\"256\"\r\n (ngModelChange)=\"gadgetTitleChange($event)\"\r\n [(ngModel)]=\"config.gadgetTitle\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n </div>\r\n <div\r\n class=\"dialog-content\"\r\n [ngClass]=\"{ collapsed: !expandArray[3] }\"\r\n *ngIf=\"portletType === 'newchart'\"\r\n >\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.GADGET_TITLE || \".GADGET_TITLE\" }}\r\n </div>\r\n <input\r\n matInput\r\n #message\r\n maxlength=\"256\"\r\n (ngModelChange)=\"gadgetTitleChange($event)\"\r\n [(ngModel)]=\"config.gadgetTitle\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.CHARTTYPE || \".CHARTTYPE\" }}\r\n </div>\r\n <mat-select\r\n [placeholder]=\"translation.SELECT_A_TYPE || 'Select a type'\"\r\n [(ngModel)]=\"chartSettings.chartSeries.type\"\r\n (selectionChange)=\"setChartType()\"\r\n >\r\n <mat-option *ngFor=\"let item of chartTypeList\" [value]=\"item\">\r\n {{ translation[\"chart_\" + item] || item }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <div class=\"condition-item flex\">\r\n <ejs-checkbox\r\n [label]=\"translation.MULTIPLE_AXIS || '.MULTIPLE_AXIS'\"\r\n [(ngModel)]=\"chartSettings.enableMultipleAxis\"\r\n (change)=\"setMultipleAxis($event)\"\r\n ></ejs-checkbox>\r\n <ejs-checkbox\r\n [disabled]=\"!chartSettings.enableMultipleAxis\"\r\n [label]=\"translation.SHOW_LEGEND || '.SHOW_LEGEND'\"\r\n (change)=\"setMultipleAxis($event)\"\r\n [(ngModel)]=\"chartSettings.legendSettings.visible\"\r\n ></ejs-checkbox>\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.MULTIPLE_AXIS_MODE || \".MULTIPLE_AXIS_MODE\" }}\r\n </div>\r\n <mat-select\r\n [placeholder]=\"translation.SELECT_A_MODE || '.SELECT_A_MODE'\"\r\n (selectionChange)=\"setMultipleAxis($event.value)\"\r\n [(ngModel)]=\"chartSettings.multipleAxisMode\"\r\n [disabled]=\"!chartSettings.enableMultipleAxis\"\r\n >\r\n <mat-option\r\n *ngFor=\"let item of multipleAxisModeList\"\r\n [value]=\"item\"\r\n >\r\n {{ translation[\"chart_\" + item] || item }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <div class=\"condition-item\">\r\n <div class=\"title\">\r\n {{ translation.COLORS || \".COLORS\" }}\r\n </div>\r\n\r\n <ejs-dropdownlist\r\n id=\"employees\"\r\n [dataSource]=\"themeData\"\r\n [allowFiltering]=\"true\"\r\n [filterType]=\"'Contains'\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [valueTemplate]=\"valueTemplate\"\r\n [fields]=\"themeFields\"\r\n [value]=\"selectTheme\"\r\n (change)=\"getThemeData($event)\"\r\n class=\"color-ipt\"\r\n >\r\n <ng-template #itemTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let i of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': i\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n <ng-template #valueTemplate let-data>\r\n <div class=\"color-box\">\r\n <div\r\n *ngFor=\"let item of data.value\"\r\n class=\"color-item\"\r\n [ngStyle]=\"{\r\n 'background-color': item\r\n }\"\r\n ></div>\r\n </div>\r\n </ng-template>\r\n </ejs-dropdownlist>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </form> -->\r\n <div class=\"footer-btn\">\r\n <button type=\"button\" mat-flat-button class=\"btn-close\" (click)=\"clear()\">\r\n {{ translation.CLEAR ? translation.CLEAR : \"Clear\" }}\r\n </button>\r\n <button type=\"button\" mat-flat-button class=\"btn-save\" (click)=\"close()\">\r\n {{ translation.CLOSE ? translation.CLOSE : \".CLOSE\" }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
1461
1461
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1462
1462
|
styles: ["@charset \"UTF-8\";.sidebar-iconlist{display:flex;flex-direction:column;height:100%}.sidebar-iconlist .nav-tabs{width:100%;display:flex;justify-content:center}.sidebar-iconlist .nav-tabs .nav-item{width:40%;padding:15px 10px 0}.sidebar-iconlist .nav-tabs .nav-item .nav-link{padding:12px 0;display:flex;justify-content:center}.sidebar-iconlist .nav-tabs .nav-item .tab-name{font-size:13px;font-weight:700;color:#48465a}.sidebar-iconlist .sidebar-iconlist-content{background-color:#fff;flex:1;height:0}.nav-tabs .nav-link.active,.nav-tabs .nav-link:hover{border-bottom:2px solid #5d78ff}.wizard{position:relative;width:100%;height:40px;background-color:#f7f9fb;padding:12px;margin-bottom:10px;cursor:pointer}.wizard .wizard-name{font-size:16px;color:#6c7293;font-weight:600}.wizard .wizard-icon{position:absolute;right:0}.wizard.slide-out{transform:translateX(100%);transition:transform .5s}.wizard.slide-out.slide-in{transform:translateX(0);transition:transform .5s}.wizard.chart{margin-top:-50px}.edit-dashboard-container{height:250px;transition:height .5s;overflow-y:hidden}.edit-dashboard-container.collapsed{height:0;transition:height .5s}.wizard-expanded{background-color:#fff;font-size:15px;overflow-y:auto}.wizard-expanded::-webkit-scrollbar{display:none}.wizard-expanded.datasource{height:500px;transition:height .5s}.wizard-expanded.datasource.extended{height:225px;transition:height .5s}.wizard-expanded.datasource.collapsed{height:0;transition:height .5s}.wizard-expanded.portlets{height:370px;transition:height .5s}.wizard-expanded.portlets.collapsed{height:0;transition:height .5s}.wizard-expanded.general{height:100px;transition:height .5s}.wizard-expanded.general.collapsed{height:0;transition:height .5s}.wizard-expanded.config{height:436px;transition:height .5s}.wizard-expanded.config.collapsed{height:0;transition:height .5s}.wizard-expanded.fields{height:300px;overflow-y:scroll;display:flex;flex-direction:column;transition:height .5s;transform:translateX(0);padding-bottom:50px}.wizard-expanded.fields.collapsed{height:0;transition:height .5s;transform:translateX(16px)}.wizard-expanded.fields.extended{height:400px;transition:height .5s}.wizard-expanded.series{height:auto;display:flex;flex-direction:column;transition:height .5s}.wizard-expanded.series.collapsed{height:0;transition:height .5s}.wizard-expanded.series .series-card{border:.33px solid #6c7293;margin-top:5px;margin-bottom:5px;width:98%}.wizard-expanded.series .series-card .select{height:40px;background-color:rgba(239,241,254,.5);padding-left:10px;padding-top:10px;margin-top:5px;margin-bottom:5px}.wizard-expanded.xaxis{height:auto;transition:height .5s}.wizard-expanded.xaxis.collapsed{height:0;transition:height .5s}.wizard-expanded.xaxis .select{height:40px;background-color:rgba(239,241,254,.5);padding-left:10px;padding-top:10px;margin-top:5px;margin-bottom:5px}.wizard-expanded.yaxis{height:auto;transition:height .5s}.wizard-expanded.yaxis.collapsed{height:0;transition:height .5s}.wizard-expanded.yaxis .select{height:40px;background-color:rgba(239,241,254,.5);padding-left:10px;padding-top:10px;margin-top:5px;margin-bottom:5px}.wizard-expanded .datamart-type-btn{border-radius:20px;height:40px;border:2px solid #606ede;background-color:#fff;color:#606ede;margin-right:10px;padding-left:10px;padding-right:10px;margin-bottom:10px}.wizard-expanded .datamart-type-btn.selected{color:#fff;background-color:#606ede}.wizard-expanded .datamart-select{height:40px;background-color:rgba(239,241,254,.5);width:95%;padding-left:10px;padding-top:10px;margin-bottom:10px}.wizard-expanded .twelvepx{font-size:12px}.footer-btn{z-index:998;background:#fff;padding-top:15px;position:absolute;bottom:30px}.btn-save{width:150px;height:40px;border-radius:5px;color:#5d78ff;background-color:#eff1fe;border-style:none;font-size:15px;font-weight:700;font-family:Arial;margin-left:13px}.btn-save:hover{color:#fff;background:#606ede}.btn-close{width:150px;height:40px;border-radius:5px;background-color:#f2f3f7;border-style:none;font-size:15px;font-weight:700;font-family:Arial;color:#979cb4;margin-left:44px}.scroll-body::-webkit-scrollbar{display:none}::ng-deep kt-sidebar-iconlist .fields-title{margin-bottom:0!important;background:#f7f8fa!important;padding-left:0!important}::ng-deep kt-sidebar-iconlist .fields-data{background:#f7f8fa!important}::ng-deep kt-sidebar-iconlist .fields-data .mat-checkbox-frame{background:#fff!important;border:1px solid #d6d6d6!important}::ng-deep kt-sidebar-iconlist .fields-data .mat-checkbox-inner-container{margin-right:10px!important}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform 250ms cubic-bezier(0,0,.2,1)}.add-pdding{padding:0 16px}.data-source{background:#fff}.wizard-expanded.datasource{background:#f7f8fa}button.btn.prompt-btn{display:inline-block;width:20px!important;height:22px;margin-top:-6px;margin-left:3px}.prompt-btn{background-image:url(../../assets/img/dashboard_icon/information-1.png);background-position:0 0;background-size:20px;background-repeat:no-repeat}.prompt-btn ngb-tooltip-window .tooltip{width:189px!important;height:58px!important;border-radius:2px!important;box-shadow:0 8px 16px 0 rgba(169,194,209,.25)!important;background-color:rgba(169,194,209,.25)!important;font-family:Arial!important;font-size:13px!important;color:#fff!important}.content-title{font-size:10px;font-weight:400;color:#a2a3b5}.icon-list mat-icon.mat-icon{width:30px;height:30px;line-height:30px;background:#eff1fe;margin-right:12px;color:#44566c;text-align:center;border-radius:5px;cursor:pointer;margin-top:6px}.icon-list mat-icon.mat-icon.selected{color:#fff;background-color:#606ede}.data-label-content{margin-top:8px;display:flex;align-items:center}.data-label-content .label{margin-right:8px}input.field-name{border-bottom:1px solid #eaedf0}.display-total{color:#fdbf5e}.scroll-body{padding-bottom:1vh}::ng-deep kt-sidebar-iconlist input,::ng-deep kt-sidebar-iconlist mat-select{color:#4a4a4a!important}::ng-deep kt-sidebar-iconlist span.mat-slide-toggle-content{font-family:Arial!important;font-size:15px!important;font-weight:700!important;color:#4a4a4a!important}::ng-deep kt-sidebar-iconlist .mat-form-field-flex{border-bottom:1px solid #e9edef;border-radius:0!important}.footer-btn{margin:0}.state-selector{width:360px;height:36px;border:2px solid #5867dd;border-radius:5px;display:inline-block;margin-left:15px;margin-bottom:20px}.state-selector .state{display:inline-block;width:33.3%;padding-top:1px;text-align:center;background-color:#fff;height:32px;line-height:32px;font-size:15px;cursor:pointer;color:#606ede}.state-selector .state.investment{border-left:2px solid #5867dd;border-right:2px solid #5867dd}.state-selector .state.selected{background-color:#5867dd;color:#fff}:host ::ng-deep.kt-margin-bottom-10-mobile{height:40px;margin-bottom:20px}:host ::ng-deep.kt-margin-bottom-10-mobile .mat-form-field-flex{height:40px;background:#f8fafb;border:none!important}:host ::ng-deep.field-icon-filter .filter .kt-margin-bottom-10-mobile .mat-form-field-flex{height:40px;background:#f8fafb;border:none!important}:host ::ng-deep .box{position:absolute;top:364px;background:#fff;width:100%;z-index:999;height:auto}:host ::ng-deep .box .mat-checkbox-inner-container{background:#f8fafb}:host ::ng-deep .box .box-header{position:relative;height:40px;width:100%;border-radius:5px;background-color:rgba(239,241,254,.5)}:host ::ng-deep .box .box-header .title-icon{position:absolute;top:10px;left:10px}:host ::ng-deep .box .box-header .close-icon{position:absolute;top:10px;right:10px}:host ::ng-deep .box .box-header .title{position:absolute;top:0;padding-left:42px;width:100%;font-family:Arial}:host ::ng-deep .box .box-header .close{position:absolute;top:10px;right:10px}:host ::ng-deep .box .box-content{display:flex;flex-direction:column;padding:10px;max-height:210px;overflow:auto!important}:host ::ng-deep .box .buttons{font-family:Arial;display:flex;width:100%;justify-content:center;margin-bottom:10px;margin-top:15px}:host ::ng-deep .box .buttons .noki-btn{width:110px;border-radius:6px;color:#5d78ff;background-color:#eff1fe;box-shadow:none;border:none;font-size:1.25rem;font-weight:400;margin-left:15px;margin-right:15px;height:40px;line-height:40px}:host ::ng-deep .box .buttons .noki-btn:hover{color:#fff;background-color:#5d78ff}.format .box-content{max-height:150px}:host::ng-deep .datamart-select .mat-select-value-text{font-size:15px!important;font-weight:400!important;color:#44566c!important}.fields-row{height:40px!important;line-height:40px;position:relative}.fields-row mat-checkbox.fields-{display:inline-block}.fields-row .field-icon-filter,.fields-row .field-icon-format{cursor:pointer;margin:0 6px}.fields-row .field-icon-filter mat-icon,.fields-row .field-icon-format mat-icon{transform:translateY(2px)!important}.fields-row .field-icon-filter .box,.fields-row .field-icon-format .box{position:absolute;top:40px;z-index:99;border:1px solid #eaedf0;border-radius:5px;height:auto;width:367px;cursor:default;background-color:#fff}.fields-row .field-icon-filter .box .mat-checkbox-inner-container,.fields-row .field-icon-format .box .mat-checkbox-inner-container{cursor:pointer}.fields-row .field-icon-filter .box .box-header,.fields-row .field-icon-format .box .box-header{position:relative;height:40px;width:100%;border-radius:5px;background-color:rgba(239,241,254,.5)}.fields-row .field-icon-filter .box .box-header .title-icon,.fields-row .field-icon-format .box .box-header .title-icon{position:absolute;top:10px;left:10px}.fields-row .field-icon-filter .box .box-header .close-icon,.fields-row .field-icon-format .box .box-header .close-icon{position:absolute;top:10px;right:10px}.fields-row .field-icon-filter .box .box-header .title,.fields-row .field-icon-format .box .box-header .title{position:absolute;top:0;padding-left:42px;width:100%;font-family:Arial}.fields-row .field-icon-filter .box .box-header .close,.fields-row .field-icon-format .box .box-header .close{position:absolute;top:10px;right:10px}.fields-row .field-icon-filter .box .box-content,.fields-row .field-icon-format .box .box-content{display:flex;flex-direction:column;padding:10px;overflow-y:hidden}.fields-row .field-icon-filter .box{transform:translateX(-302px)}.fields-row .field-icon-format .box{transform:translateX(-338px)}.fields-row .field-icon-total{width:36px;text-align:center;font-weight:500;cursor:pointer;margin:0 5px}:host::ng-deep .fields-row mat-checkbox.fields- label.mat-checkbox-layout{width:100%}:host::ng-deep .fields-row mat-checkbox.fields- span.mat-checkbox-label{width:calc(100% - 26px);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host::ng-deep .fields-row .box-content label.mat-checkbox-layout{width:100%}:host::ng-deep .fields-row .box-content span.mat-checkbox-label{width:calc(100% - 26px);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host::ng-deep .search-select-all{position:absolute;background:#fff;top:40px;z-index:9;width:calc(100% - 10px)}:host::ng-deep .search-select-all .search- .mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:calc(100% - 10px);border:1px solid #e9edef;border-radius:5px!important}.tab-content{padding:0!important}ul.nav.nav-tabs.nav-tabs-line{width:100%;padding-right:0;margin-bottom:25px}ul.nav.nav-tabs.nav-tabs-line li{width:40%;padding:15px 10px 0}ul.nav.nav-tabs.nav-tabs-line li .tab-name{display:inline-block;font-size:13px;font-weight:700;color:#48465a}.color-ipt{width:95%}.color-ipt .e-list-item{background-color:#fff!important}.color-ipt .e-input-group{background-color:rgba(239,241,254,.5)!important}::ng-deep .e-dropdownlist .e-list-item.e-active{background:red!important}.color-box{width:100%;display:flex;height:40px;align-items:center;justify-content:center}.color-box .color-item{width:10%;height:16px}.dialog-content{padding:16px 24px}.dialog-content .condition-item{margin-bottom:18px}.dialog-content .condition-item.flex{display:flex}.dialog-content .condition-item.flex .e-checkbox-wrapper{flex:1;height:20px}.dialog-content .condition-item.flex .e-checkbox-wrapper .e-icons{height:18px;width:18px}.dialog-content .condition-item.flex .e-checkbox-wrapper .e-icons:before{font-size:12px}.dialog-content .condition-item .title{margin-bottom:6px;font-size:13px;color:#646c9a}.dialog-content .condition-item .mat-input-element,.dialog-content .condition-item .mat-select{border-bottom:1px solid rgba(0,0,0,.42);height:30px;line-height:30px;width:100%}.dialog-content .condition-item .mat-input-element.mat-select-disabled,.dialog-content .condition-item .mat-select.mat-select-disabled{opacity:.3}::ng-deep .cdk-overlay-pane{transform:translateX(-16px)!important}::ng-deep .cdk-overlay-pane .mat-select-panel-wrap{max-width:380px!important}::ng-deep .cdk-overlay-pane .mat-select-panel-wrap .mat-select-panel{min-width:calc(100% + 32px)!important}"]
|
|
1463
1463
|
}] }
|
|
@@ -1635,4 +1635,4 @@ if (false) {
|
|
|
1635
1635
|
*/
|
|
1636
1636
|
SidebarIconlistNewComponent.prototype.http;
|
|
1637
1637
|
}
|
|
1638
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1pY29ubGlzdC1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXNoYm9hcmQvc2lkZWJhci1pY29ubGlzdC9zaWRlYmFyLWljb25saXN0LW5ldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVN0RSxNQUFNLE9BQU8sMkJBQTJCOzs7Ozs7Ozs7SUFxVnRDLFlBQ1UsR0FBWSxFQUNiLGdCQUFrQyxFQUNsQyx1QkFBZ0QsRUFDL0MsR0FBc0IsRUFDUyxHQUFRLEVBQ0EsSUFBUztRQUxoRCxRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQy9DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1MsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNBLFNBQUksR0FBSixJQUFJLENBQUs7UUExVmpELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUtuQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLGVBQVUsR0FBUSxFQUFF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QUFpRDs7SUFDakQsbURBQTRDOztJQUM1QyxvREFBNkM7O0lBQzdDLGtEQUEyQzs7SUFDM0Msa0RBQTJDOztJQUMzQyxrREFBcUU7Ozs7O0lBQ3JFLDJDQUFhOztJQUNiLHdEQUE4Qjs7SUFDOUIsaURBQW1COztJQUVuQixrREFBbUI7Ozs7O0lBQ25CLG9EQUEyQzs7SUFDM0Msa0RBQW1COztJQUNuQixrREFRRTs7SUFDRix3REFBbUM7O0lBQ25DLHVEQUF3Qjs7SUFDeEIsb0RBNkNFOztJQUNGLG9EQUEwRDs7SUFDMUQsNkNBQWM7O0lBQ2QsaURBQW1DOztJQUNuQyw0Q0FBdUI7O0lBQ3ZCLG9EQVlFOztJQUNGLDJEQUFnRTs7SUFDaEUsZ0RBdU9FOztJQUVGLGtEQUE0RDs7SUF5cEI1RCx1REFBK0I7O0lBQy9CLG1EQUF5Qjs7SUFDekIseURBQWlDOztJQUNqQyxxREFBMkI7O0lBa0UzQixnREFBc0I7O0lBQ3RCLGdEQUFvQjs7SUFDcEIsc0RBQTBCOztJQUMxQix3REFBOEI7O0lBQzlCLG1EQUFrQjs7SUFDbEIsdURBcUJFOztJQUNGLGdEQUFrQjs7SUE0RGxCLG9EQUF3Qjs7SUFnRXhCLGtEQUE0Qjs7Ozs7SUFsM0IxQiwwQ0FBb0I7O0lBQ3BCLHVEQUF5Qzs7SUFDekMsOERBQXVEOzs7OztJQUN2RCwwQ0FBOEI7Ozs7O0lBQzlCLDBDQUErQzs7Ozs7SUFDL0MsMkNBQXdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi4vYXBpXCI7XHJcbmltcG9ydCB7IEFQSV9TRVJWSUNFX1RPS0VOLCBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlIH0gZnJvbSBcIi4uL2Rhc2hib2FyZFBvcmxldHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtc2lkZWJhci1pY29ubGlzdC1uZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NpZGViYXItaWNvbmxpc3QtbmV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3NpZGViYXItaWNvbmxpc3QtbmV3LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhckljb25saXN0TmV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXNoYm9hcmRfc2lkZWJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRhc2hib2FyZDtcclxuICBASW5wdXQoKSBkYXNoYm9hcmRJZDtcclxuICBASW5wdXQoKSBhY3RpdmVUYWJJZDtcclxuICBASW5wdXQoKSBhY3RpdmVUYWJMYWJlbDtcclxuICBASW5wdXQoKSBwb3J0bGV0cyA9IFtdO1xyXG4gIEBJbnB1dCgpIHRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHBvcnRsZXQ7XHJcbiAgQElucHV0KCkgZmlndXJlQ29kZTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRYOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRZOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRNdWx0aXBsZXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgX3NlbGVjdGVkU2Vjb25kWTogYW55ID0gW107XHJcbiAgQElucHV0KCkgX3NlbGVjdFRoZW1lOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGFwcENvZGU7XHJcbiAgQE91dHB1dCgpIGNsb3NlU2lkZWJhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlUG9ybGV0Q29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblRvZ2dsZVRhYmFjdGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlUG9ybGV0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVQdXNoQnRuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlVGhlbWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIHRyYW5zbGF0aW9uID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRyYW5zbGF0aW9uXCIpKTtcclxuICBwcml2YXRlIGxhbmc7XHJcbiAgcHVibGljIGRhdGFNYXJ0VGFibGVMaXN0ID0gW107XHJcbiAgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIC8vY29uZmlnO1xyXG4gIHB1YmxpYyBnYWRnZXRUaXRsZTtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHVibGljIHBvcnRsZXRUeXBlO1xyXG4gIHB1YmxpYyBleHBhbmRBcnJheTogQXJyYXk8Ym9vbGVhbj4gPSBbXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICBdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZERhdGFUYWJsZTogYW55ID0gXCJcIjtcclxuICBwdWJsaWMgc2VsZWN0ZWREYXRhbWFydDtcclxuICBwdWJsaWMgY2hhcnRTZXR0aW5ncyA9IHtcclxuICAgIGxlZ2VuZFNldHRpbmdzOiB7XHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGVuYWJsZU11bHRpcGxlQXhpczogZmFsc2UsXHJcbiAgICBzaG93TXVsdGlMZXZlbExhYmVsczogZmFsc2UsXHJcbiAgICBjaGFydFNlcmllczoge1xyXG4gICAgICB0eXBlOiBcIkNvbHVtblwiLFxyXG4gICAgICB3aWR0aDogMixcclxuICAgIH0sXHJcbiAgICBtdWx0aXBsZUF4aXNNb2RlOiBcIlN0YWNrZWRcIixcclxuICAgIHByaW1hcnlYQXhpczoge1xyXG4gICAgICB0aXRsZTogXCIgXCIsXHJcbiAgICAgIG1ham9yR3JpZExpbmVzOiB7IHdpZHRoOiAwIH0sXHJcbiAgICB9LFxyXG4gICAgY2hhcnRBcmVhOiB7XHJcbiAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgIGJvcmRlcjoge1xyXG4gICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHBhbGV0dGVzOiBbXHJcbiAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICBdLFxyXG4gICAgcHJpbWFyeVlBeGlzOiB7XHJcbiAgICAgIC8vIFnovbTmoIfpopjorr7nva7kuLrnqbpcclxuICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgfSxcclxuICAgIHpvb21TZXR0aW5nczoge1xyXG4gICAgICBlbmFibGVNb3VzZVdoZWVsWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOm8oOagh+a7mui9rue8qeaUvlxyXG4gICAgICBlbmFibGVQaW5jaFpvb21pbmc6IGZhbHNlLCAvLyDnpoHnlKjop6bmkbjnvKnmlL5cclxuICAgICAgZW5hYmxlU2VsZWN0aW9uWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOmAieaLqeWMuuWfn+e8qeaUvlxyXG4gICAgICBlbmFibGVEZWZlcnJlZFpvb21pbmc6IGZhbHNlLCAvLyDnpoHnlKjlu7bov5/nvKnmlL5cclxuICAgICAgdG9vbGJhckl0ZW1zOiBbXSxcclxuICAgICAgZW5hYmxlU2Nyb2xsYmFyOiBmYWxzZSxcclxuICAgICAgZW5hYmxlWm9vbWluZzogZmFsc2UsXHJcbiAgICB9LFxyXG4gIH07XHJcbiAgcHVibGljIGRpc3BsYXlPcHRpb24gPSB7IHZpZXc6IFwiQm90aFwiLCBwcmltYXJ5OiBcIkNoYXJ0XCIgfTtcclxuICBwdWJsaWMgY29uZmlnO1xyXG4gIHB1YmxpYyBjdXJyZW50VGFiOiBzdHJpbmcgPSBcInRhYjFcIjtcclxuICBwdWJsaWMgeUxpc3Q6IGFueSA9IFtdO1xyXG4gIHB1YmxpYyBjaGFydFR5cGVMaXN0ID0gW1xyXG4gICAgXCJDb2x1bW5cIixcclxuICAgIFwiQmFyXCIsXHJcbiAgICBcIkxpbmVcIixcclxuICAgIFwiU3BsaW5lXCIsXHJcbiAgICBcIkFyZWFcIixcclxuICAgIFwiU2NhdHRlclwiLFxyXG4gICAgXCJQb2xhclwiLFxyXG4gICAgXCJQaWVcIixcclxuICAgIFwiRG91Z2hudXRcIixcclxuICAgIFwiU3RhY2tlZCBDb2x1bW5cIixcclxuICAgIFwiUmFkYXJcIixcclxuICBdO1xyXG4gIHB1YmxpYyBtdWx0aXBsZUF4aXNNb2RlTGlzdCA9IFtcIlN0YWNrZWRcIiwgXCJTaW5nbGVcIiwgXCJDb21iaW5lZFwiXTtcclxuICB0aGVtZURhdGE6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxM1wiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE0XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTVcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTM2QkJCXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTZcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA4MkFGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTdcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE4XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxOVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMTM3NUM0XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTIwXCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjFcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzEzNjhCOFwiLCBcIiMxMzc1QzRcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjJcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzAwN0ZBRFwiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxNDVGQUZcIixcclxuICAgICAgICBcIiMxMzY4QjhcIixcclxuICAgICAgICBcIiMxMzc1QzRcIixcclxuICAgICAgICBcIiMxRDk3RTFcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjRcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDcwQTNcIixcclxuICAgICAgICBcIiMwMDc4QTlcIixcclxuICAgICAgICBcIiMwMDdGQURcIixcclxuICAgICAgICBcIiMwMDg5QjRcIixcclxuICAgICAgICBcIiMxNkEyQzJcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTFcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxOTQ2OTdcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxMzZCQkJcIixcclxuICAgICAgICBcIiMxNDdFQ0NcIixcclxuICAgICAgICBcIiMxQjkyRERcIixcclxuICAgICAgICBcIiMyNkE1RURcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTJcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDY1OUJcIixcclxuICAgICAgICBcIiMwMDczQTZcIixcclxuICAgICAgICBcIiMwMDgyQUZcIixcclxuICAgICAgICBcIiMwMDkwQjhcIixcclxuICAgICAgICBcIiMwRjlFQzBcIixcclxuICAgICAgICBcIiMyOUFEQzdcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgIFwiIzQ2ODhlZFwiLFxyXG4gICAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgIFwiIzZkZDhiNVwiLFxyXG4gICAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgIFwiI2M2NDM3ZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyXCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgICAgXCIjZjFhZjMyXCIsXHJcbiAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgXCIjODAzYTYzXCIsXHJcbiAgICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICBcIiNlMDU2M2VcIixcclxuICAgICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgICBcIiM1OTRiYjlcIixcclxuICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lNFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzJmNDk5ZlwiLFxyXG4gICAgICAgIFwiIzhkMWQyZVwiLFxyXG4gICAgICAgIFwiI2U5YmYzNVwiLFxyXG4gICAgICAgIFwiIzUxNzcyZlwiLFxyXG4gICAgICAgIFwiIzQ2OWJkOFwiLFxyXG4gICAgICAgIFwiIzVjNDQ4ZlwiLFxyXG4gICAgICAgIFwiI2RhNzMyZlwiLFxyXG4gICAgICAgIFwiIzI0NTM1M1wiLFxyXG4gICAgICAgIFwiIzQzYTI0NVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU1XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMzgzODM5XCIsXHJcbiAgICAgICAgXCIjNDQ2ZWM2XCIsXHJcbiAgICAgICAgXCIjY2Y2Mzg0XCIsXHJcbiAgICAgICAgXCIjZWJiMzdlXCIsXHJcbiAgICAgICAgXCIjNzFhMjQ5XCIsXHJcbiAgICAgICAgXCIjNGJiMWE1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTZcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM1MTdhZTFcIixcclxuICAgICAgICBcIiM2Mzg2ZTVcIixcclxuICAgICAgICBcIiM3NDkxZTlcIixcclxuICAgICAgICBcIiM4NDlkZWNcIixcclxuICAgICAgICBcIiM5NGE5ZWZcIixcclxuICAgICAgICBcIiNhNGI2ZjJcIixcclxuICAgICAgICBcIiNiNGMzZjZcIixcclxuICAgICAgICBcIiNjNGNmZjlcIixcclxuICAgICAgICBcIiNkNGRkZmRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lN1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzM5ODI4ZVwiLFxyXG4gICAgICAgIFwiIzQ4OGU5OVwiLFxyXG4gICAgICAgIFwiIzU3OWFhNVwiLFxyXG4gICAgICAgIFwiIzY2YTZiMFwiLFxyXG4gICAgICAgIFwiIzc1YjNiZFwiLFxyXG4gICAgICAgIFwiIzg1YmZjOVwiLFxyXG4gICAgICAgIFwiIzk1Y2RkNlwiLFxyXG4gICAgICAgIFwiI2E0ZGFlMlwiLFxyXG4gICAgICAgIFwiI2I1ZThmMFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU4XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjZTc5NjNkXCIsXHJcbiAgICAgICAgXCIjZWE5ZTRiXCIsXHJcbiAgICAgICAgXCIjZWVhNjU5XCIsXHJcbiAgICAgICAgXCIjZjBhZTY4XCIsXHJcbiAgICAgICAgXCIjZjJiNjc4XCIsXHJcbiAgICAgICAgXCIjZjNiZjg3XCIsXHJcbiAgICAgICAgXCIjZjVjNzk4XCIsXHJcbiAgICAgICAgXCIjZjZkMGFhXCIsXHJcbiAgICAgICAgXCIjZjdkOWJiXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTlcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM2NGE4YjRcIixcclxuICAgICAgICBcIiM3ZWJlYzBcIixcclxuICAgICAgICBcIiM5Y2M5Y2FcIixcclxuICAgICAgICBcIiNiOGQ0ZDRcIixcclxuICAgICAgICBcIiNkOWQ2Y2RcIixcclxuICAgICAgICBcIiNkOGI3YTdcIixcclxuICAgICAgICBcIiNjZThmOTNcIixcclxuICAgICAgICBcIiNjMTYyN2ZcIixcclxuICAgICAgICBcIiNhZDI0NThcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTBcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM0MTc2YmFcIixcclxuICAgICAgICBcIiM1NTlhZThcIixcclxuICAgICAgICBcIiM3MGIzZThcIixcclxuICAgICAgICBcIiNhN2NjZTdcIixcclxuICAgICAgICBcIiNkZmRmZGZcIixcclxuICAgICAgICBcIiNkMmEwOGJcIixcclxuICAgICAgICBcIiNjNzZhNTBcIixcclxuICAgICAgICBcIiNjYTRlMzRcIixcclxuICAgICAgICBcIiNhYTNjMjlcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRoZW1lRmllbGRzOiBPYmplY3QgPSB7IHRleHQ6IFwidmFsdWVcIiwgdmFsdWU6IFwiaWRcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpOiBBcGlMaXN0LFxyXG4gICAgcHVibGljIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9TRVJWSUNFX1RPS0VOKSBwcml2YXRlIGh0dHA6IGFueVxyXG4gICkge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRoaXMudGFiYWN0aXZlID8gXCJ0YWIxXCIgOiBcInRhYjJcIjtcclxuICAgIHRoaXMuZ2V0SW5mbygpO1xyXG4gICAgdGhpcy5zZXREYXRhYmluZCgpO1xyXG4gICAgdGhpcy5pbml0SGlzdG9yaWNhbElSUk9wdGlvbnMoKTtcclxuICAgIHRoaXMuZ2V0bXVsdGlwbGVzTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTsgLy8g5qCH6K6w5Li66ZyA6KaB5qOA5rWLXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0UHVzaGJ0bigpLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKFtdKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhbWFydCA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkWCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkWSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldHBvcnRsZXRFZGl0KCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG4gICAgICAgIGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmRJZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRhYmluZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLmluaXREYXRhTWFydFRhYmxlTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0YU1hcnRUYWJsZUxpc3QoKSB7XHJcbiAgICB0aGlzLmRhdGFNYXJ0VGFibGVMaXN0ID0gWy4uLnRoaXMuZGFzaGJvYXJkLmRhdGFNYXJ0VGFibGVzXS5maWx0ZXIoXHJcbiAgICAgIChpdGVtKSA9PiAhaXRlbS5pc0hpZGVcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5yZW5hbWVEYXRhTWFydFRhYmxlcyhcclxuICAgICAgdGhpcy5kYXRhTWFydFRhYmxlTGlzdCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmQuaWQsXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmVudGl0eVR5cGVcclxuICAgICk7XHJcbiAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNvcnREYXRhTWFydFRhYmxlcyh0aGlzLmRhdGFNYXJ0VGFibGVMaXN0KTtcclxuICAgIGlmICghdGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaWd1cmVDb2RlID0gdGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLmRhc2hib2FyZC5kYXRhTWFydFRhYmxlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmRhdGFtYXJ0Q29kZSA9PT0gZmlndXJlQ29kZSAmJiBpdGVtLnByZWZpeCkge1xyXG4gICAgICAgIGZpZ3VyZUNvZGUgPSBpdGVtLnByZWZpeDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmRhdGFNYXJ0VGFibGVMaXN0LmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGF0YW1hcnRDb2RlID09PSBmaWd1cmVDb2RlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnByZWZpeCA9PT0gZmlndXJlQ29kZSkge1xyXG4gICAgICAgICAgZmlndXJlQ29kZSA9IGRhdGEuZGF0YW1hcnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gZmlndXJlQ29kZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHNiKSA9PiBzYi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0V2l6YXJkKHdpemFyZDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kQXJyYXlbd2l6YXJkXSkge1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5ID0gW1xyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5W3dpemFyZF0gPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVt3aXphcmRdID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEluZm8oKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRyYW5zbGF0aW9uXCIpKTtcclxuICAgIHRoaXMubGFuZyA9IHRoaXMucGJmLmdldExhbmd1YWdlUGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xlYXJTaWRlYmFyLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbG9zZSgpIHtcclxuICAgIHRoaXMudXBkYXRlUHVzaEJ0bi5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0LmVtaXQobnVsbCk7XHJcbiAgICB0aGlzLmNsb3NlU2lkZWJhci5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGaWd1cmVjb2RlKCkge1xyXG4gICAgbGV0IGNvZGVBcnIgPSBbXCJUYXNrc1wiLCBcIkZ1bmRMaXN0XCIsIFwiSVJSXCIsIFwiTm90ZXNcIl07XHJcbiAgICBsZXQgaSA9IGNvZGVBcnIuaW5kZXhPZih0aGlzLmZpZ3VyZUNvZGUpO1xyXG4gICAgcmV0dXJuIGkgPiAtMSA/IGZhbHNlIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOWbvuihqOexu+Wei+abtOaUuWV2ZW50XHJcbiAgcHVibGljIGdldFBvcnRsZXRUeXBlKCRldmVudCkge1xyXG4gICAgdGhpcy5wb3J0bGV0VHlwZSA9ICRldmVudDtcclxuICAgIHRoaXMuaGFzQ2hhbmdlZCA9IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlICE9PSB0aGlzLnBvcnRsZXRUeXBlO1xyXG4gICAgY29uc3QgcHJldlR5cGUgPSB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZTtcclxuICAgIHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlID0gdGhpcy5wb3J0bGV0VHlwZTtcclxuICAgIGlmICghJGV2ZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcygkZXZlbnQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRYID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFkgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kQXJyYXlbMl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVs3XSA9IHRydWU7XHJcbiAgICAgIC8vIOS/ruWkjeacieaXtumAieaLqSB4eSDovbTml7bmsqHmnInmlbDmja7nmoTpl67pophcclxuICAgICAgaWYgKHRoaXMucG9ydGxldCAmJiB0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSh0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSwgZmFsc2UsIHRoaXMucG9ydGxldFR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvcnRsZXRUeXBlID09PSBcIm5ld2NoYXJ0XCIpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZy5jaGFydFNldHRpbmdzLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgbGVnZW5kU2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZW5hYmxlTXVsdGlwbGVBeGlzOiBmYWxzZSxcclxuICAgICAgICAgIHNob3dNdWx0aUxldmVsTGFiZWxzOiBmYWxzZSxcclxuICAgICAgICAgIGNoYXJ0U2VyaWVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiQ29sdW1uXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG11bHRpcGxlQXhpc01vZGU6IFwiU3RhY2tlZFwiLFxyXG4gICAgICAgICAgcHJpbWFyeVhBeGlzOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIiBcIixcclxuICAgICAgICAgICAgbWFqb3JHcmlkTGluZXM6IHsgd2lkdGg6IDAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjaGFydEFyZWE6IHtcclxuICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgYm9yZGVyOiB7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcGFsZXR0ZXM6IFtcclxuICAgICAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBwcmltYXJ5WUF4aXM6IHtcclxuICAgICAgICAgICAgLy8gWei9tOagh+mimOiuvue9ruS4uuepulxyXG4gICAgICAgICAgICB0aXRsZTogXCIgXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgem9vbVNldHRpbmdzOiB7XHJcbiAgICAgICAgICAgIGVuYWJsZU1vdXNlV2hlZWxab29taW5nOiBmYWxzZSwgLy8g56aB55So6byg5qCH5rua6L2u57yp5pS+XHJcbiAgICAgICAgICAgIGVuYWJsZVBpbmNoWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOinpuaRuOe8qeaUvlxyXG4gICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25ab29taW5nOiBmYWxzZSwgLy8g56aB55So6YCJ5oup5Yy65Z+f57yp5pS+XHJcbiAgICAgICAgICAgIGVuYWJsZURlZmVycmVkWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOW7tui/n+e8qeaUvlxyXG4gICAgICAgICAgICB0b29sYmFySXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBlbmFibGVTY3JvbGxiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBlbmFibGVab29taW5nOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCRldmVudCA9PT0gXCJoaXN0b3JpY2FsSVJSXCIpIHtcclxuICAgICAgdGhpcy5vblNlbGVjdGVkSGlzdG9yaWNhbElSUlBvcnRsZXQoKTtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5WzddID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVszXSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0VHlwZSkge1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGNoYW5nZURhdGFUYWJsZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFUYWJsZSA9IHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZmlsdGVyKFxyXG4gICAgICAoZWwpID0+IGVsLmRhdGFtYXJ0Q29kZSA9PT0gdmFsdWVcclxuICAgIClbMF0uaWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YW1hcnQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnBvcnRsZXQpIHtcclxuICAgICAgdGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMucG9ydGxldC5kYXNoYm9hcmREYXRhVGFibGVJZCA9IHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xlYXJGaWVsZExpc3QubmV4dCh0aGlzLnBvcnRsZXQubmV3SWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmNsZWFyRmllbGRzT2JqKHRoaXMucG9ydGxldCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGEodmFsdWUpO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVswXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlUG9ybGV0Q29uZmlnKGUpIHtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGEoY29kZSwgZWRpdDogYm9vbGVhbiA9IHRydWUsIHBvcnRsZXRUeXBlID0gXCJcIikge1xyXG4gICAgY29uc3QgZGF0YU9iaiA9IHtcclxuICAgICAgZGF0YU1hcnRDb2RlOiBjb2RlLFxyXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5nLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0U2NoZW1hUGFyYW1zKGRhdGFPYmosIGNvZGUsIHRoaXMuZGFzaGJvYXJkKTtcclxuICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuYXBpLnVybExpc3QuR2V0U2NoZW1hLCBkYXRhT2JqLCAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBbXHJcbiAgICAgICAgICAgIFwiU2VlVGhyb3VnaFF1YXJ0ZXJseVwiLFxyXG4gICAgICAgICAgICBcIlNlZVRocm91Z2hZZWFybHlcIixcclxuICAgICAgICAgICAgXCJTZWVUaHJvdWdoTW9udGhseVwiLFxyXG4gICAgICAgICAgXS5pbmNsdWRlcyhjb2RlKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmVzID0gcmVzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgIVtcclxuICAgICAgICAgICAgICAgIFwiQ0lfTVREXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNJX1FURFwiLFxyXG4gICAgICAgICAgICAgICAgXCJDSV9ZVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9NVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9RVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9ZVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9NVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9NVERfOTlcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9RVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9RVERfOTlcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9ZVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9ZVERfOTlcIixcclxuICAgICAgICAgICAgICBdLmluY2x1ZGVzKGl0ZW0uY29sTmFtZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5maWVsZHNBcnJbdGhpcy5kYXNoYm9hcmQuaWRdKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5maWVsZHNBcnJbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0XHJcbiAgICAgICAgXSA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wb3J0bGV0LmNvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlID0gcG9ydGxldFR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5maWVsZHMgPSByZXM7XHJcblxyXG4gICAgICAgICAgLy8gVE8gRE8g6L+H5rukWei9tOeahOaVsOaNrlxyXG4gICAgICAgICAgdGhpcy55TGlzdCA9IHJlcztcclxuICAgICAgICAgIHRoaXMucG9ydGxldC5jb25maWcgPSB0aGlzLmNvbmZpZyA/IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKSA6IFwiXCI7XHJcblxyXG4gICAgICAgICAgZWRpdCAmJiB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWcuZmllbGRzID0gcmVzO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnRsZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBvcnRsZXQpO1xyXG4gICAgICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcmxldC5lbWl0KHBvcnRsZXQpO1xyXG4gICAgICAgICAgICAvLyBUTyBETyDov4fmu6RZ6L2055qE5pWw5o2uXHJcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSByZXM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE11bHRpcGxlQXhpcyhlKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0U2V0dGluZ3MuZW5hYmxlTXVsdGlwbGVBeGlzKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzLmxlZ2VuZFNldHRpbmdzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZW5hYmxlTXVsdGlwbGVBeGlzQ2hhbmdlLm5leHQoe1xyXG4gICAgICAgIG5ld0lkOiB0aGlzLnBvcnRsZXQubmV3SWQsXHJcbiAgICAgICAgZW5hYmxlTXVsdGlwbGVBeGlzOiB0aGlzLmNoYXJ0U2V0dGluZ3MuZW5hYmxlTXVsdGlwbGVBeGlzLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuY2hhcnRTZXR0aW5ncy5sZWdlbmRTZXR0aW5ncy52aXNpYmxlLFxyXG4gICAgICAgIG11bHRpcGxlQXhpc01vZGU6IHRoaXMuY2hhcnRTZXR0aW5ncy5tdWx0aXBsZUF4aXNNb2RlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoYXJ0VHlwZSgpIHtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBvcnRsZXQpO1xyXG4gICAgaWYgKHBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IGNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIC4uLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLFxyXG4gICAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7IGNoYXJ0U2V0dGluZ3M6IHRoaXMuY2hhcnRTZXR0aW5ncyB9O1xyXG4gICAgICBwb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVBvcmxldC5lbWl0KHBvcnRsZXQpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jaGFydFR5cGVDaGFuZ2UubmV4dCh7XHJcbiAgICAgICAgbmV3SWQ6IHRoaXMucG9ydGxldC5uZXdJZCxcclxuICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VGhlbWVEYXRhKGUpIHtcclxuICAgIGNvbnN0IGlkID0gZS52YWx1ZTtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSB0aGlzLnBvcnRsZXQ7XHJcbiAgICBjb25zdCB0aGVtZSA9IHRoaXMudGhlbWVEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcclxuICAgIGlmICghdGhlbWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnNldFRoZW1lLm5leHQoe1xyXG4gICAgICBuZXdJZDogcG9ydGxldC5uZXdJZCxcclxuICAgICAgdGhlbWU6IHRoZW1lLnZhbHVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQWRkT3JFZGl0UG9ydGxldCgpIHtcclxuICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgdGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiXHJcbiAgICAgICAgPyB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgaWYgKHRoaXMucG9ydGxldCAmJiB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuICAgICAgLy8gU01QMi0xNzY1NCDpnIDopoHlsIbpgInmi6nnmoQgZnJlcXVlbmN544CBaW52ZXN0b3LjgIF2aXN1YWwgdHlwZSDkv53lrZjliLAgY29uZmlnIOS4reeUqOadpeaLv+WPluWQjuerr+aVsOaNrlxyXG4gICAgICAvLyDkvYbmmK/lpoLmnpznm7TmjqXkv53lrZggdGhpcy5jb25maWcg5Lya5Ye6546wIFNNUDItMTg4Mzcg6L+Z5LiqIEJVR1xyXG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG4gICAgICBpZiAodGhpcy5oYXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpICYmXHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZFkubGVuZ3RoID4gMCB8fCB0aGlzLnNlbGVjdGVkU2Vjb25kWS5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgICAgICBjb25maWdbXCJzZWxlY3RlZFlcIl0gPSB0aGlzLnNlbGVjdGVkWTtcclxuICAgICAgICAgIGNvbmZpZ1tcInNlbGVjdGVkU2Vjb25kWVwiXSA9IHRoaXMuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJuZXdjaGFydFwiKSB7XHJcbiAgICAgICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IHtcclxuICAgICAgICAgICAgY2hhcnRTZXR0aW5nczogdGhpcy5jaGFydFNldHRpbmdzLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uOiB0aGlzLmRpc3BsYXlPcHRpb24sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25maWcuc2VsZWN0ZWRNdWx0aXBsZXMgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZE11bHRpcGxlcztcclxuICAgICAgY29uZmlnLnNlbGVjdGVkSW52ZXN0b3IgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZEludmVzdG9yO1xyXG4gICAgICBjb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlID0gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlO1xyXG4gICAgICBjb25zdCBwb3J0bGV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wb3J0bGV0KTtcclxuICAgICAgcG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAvLyDmlrDlop5EYXRhVGFibGXnsbvlnovvvIwg57yW6L6RUG9ybGV0XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0RGF0YU1hbmFnZXIoXHJcbiAgICAgICAgW3RoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKV0sXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5lZGl0UG9ydGxldCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW3BvcnRsZXRUeXBlXSxcclxuICAgICAgICB0aGlzLmRhc2hib2FyZC5pZCxcclxuICAgICAgICBwb3J0bGV0XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZy5maWVsZHMubWFwKChlbCkgPT4ge1xyXG4gICAgICAgIGVsLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKHBvcnRsZXRUeXBlKSAmJlxyXG4gICAgICAgICh0aGlzLnNlbGVjdGVkWS5sZW5ndGggPiAwIHx8IHRoaXMuc2VsZWN0ZWRTZWNvbmRZLmxlbmd0aCA+IDApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgICAgdGhpcy5jb25maWdbXCJzZWxlY3RlZFlcIl0gPSB0aGlzLnNlbGVjdGVkWTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1tcInNlbGVjdGVkU2Vjb25kWVwiXSA9IHRoaXMuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwibmV3Y2hhcnRcIikge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcgPSB7XHJcbiAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICBkaXNwbGF5T3B0aW9uOiB0aGlzLmRpc3BsYXlPcHRpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5nZXRTZWxlY3REYXRhbWFydElkKCk7XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRkYXRhID0ge1xyXG4gICAgICAgIGlkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgICAgIG5ld0lkOiBcInBvcnRsZXRfXCIgKyB0aGlzLnBiZi5HdWlkKCksXHJcbiAgICAgICAgZGFzaGJvYXJkRGF0YVRhYmxlSWQ6IHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRJZCgpLFxyXG4gICAgICAgIGZpZ3VyZUNvZGU6IHRoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKSxcclxuICAgICAgICBjb2w6IDAsXHJcbiAgICAgICAgcm93OiAwLFxyXG4gICAgICAgIHNpemVYOiAyLFxyXG4gICAgICAgIHNpemVZOiAxLFxyXG4gICAgICAgIHBvc1g6IDAsXHJcbiAgICAgICAgcG9zWTogMCxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyksXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBkYXRlUG9ybGV0LmVtaXQocG9ydGxldGRhdGEpO1xyXG4gICAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQpID0+IHtcclxuICAgICAgICBwb3J0bGV0LnJvdyArPSAxO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8g5paw5aKeRGF0YVRhYmxl57G75Z6L77yMIOaWsOWinlBvcmxldFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNldERhdGFNYW5hZ2VyKFxyXG4gICAgICAgIFt0aGlzLmdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCldLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkT3JkZWxQb3J0bGV0Lm5leHQodGhpcy5kYXNoYm9hcmQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbcG9ydGxldFR5cGVdLFxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLmlkLFxyXG4gICAgICAgIHBvcnRsZXRkYXRhXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZWRpdFBvcnRsZXQoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlXHJcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICBpZiAoW1widGFibGVcIiwgXCJ0cmFuc3Bvc2VcIiwgXCJmaW5hbmNpYWxUYWJsZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICBlbC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KFxyXG4gICAgICAgICh4KSA9PiB4Lm5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnBvcnRsZXRzW2luZGV4XS5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgICAgIHRoaXMucG9ydGxldHNbaW5kZXhdLmZpZ3VyZUNvZGUgPSB0aGlzLmdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwb3J0bGV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wb3J0bGV0KTtcclxuICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuICAgICAgICBwb3J0bGV0LmRhc2hib2FyZERhdGFUYWJsZUlkID0gdGhpcy5nZXRTZWxlY3REYXRhbWFydElkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQb3JsZXQuZW1pdChwb3J0bGV0KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpZCA9IHRoaXMucG9ydGxldC5pZCB8fCB0aGlzLnBvcnRsZXQubmV3SWQ7XHJcbiAgICAgIHRoaXMuY2hhcnRVcGRhdGUuZW1pdChpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hUYWIodHlwZSkge1xyXG4gICAgdGhpcy5jdXJyZW50VGFiID0gdHlwZTtcclxuICAgIHRoaXMub25Ub2dnbGVUYWJhY3RpdmUuZW1pdCghdGhpcy50YWJhY3RpdmUpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRFZGl0Lm5leHQodGhpcy5kYXNoYm9hcmRJZCk7XHJcbiAgfVxyXG5cclxuICBnYWRnZXRUaXRsZUNoYW5nZShuZXdPYmopIHtcclxuICAgIGlmICghdGhpcy5wb3J0bGV0IHx8ICF0aGlzLnBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuICAgIHRoaXMuY29uZmlnLmdhZGdldFRpdGxlID0gbmV3T2JqO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleChcclxuICAgICAgKHgpID0+IHgubmV3SWQgPT09IHRoaXMucG9ydGxldC5uZXdJZFxyXG4gICAgKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XS5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRUaXRsZS5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YWJpbmQoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIGNvbnN0IHsgZGF0YU1hcnRUYWJsZXMgPSB7fSB9ID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZTtcclxuICAgICAgbGV0IGZpZ3VyZUNvZGUgPSB0aGlzLnBvcnRsZXQuZmlndXJlQ29kZTtcclxuICAgICAgZGF0YU1hcnRUYWJsZXNbdGhpcy5kYXNoYm9hcmQuaWRdLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5kYXRhbWFydENvZGUgPT09IGZpZ3VyZUNvZGUgJiYgaXRlbS5wcmVmaXgpIHtcclxuICAgICAgICAgIGZpZ3VyZUNvZGUgPSBpdGVtLnByZWZpeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXRhTWFydFRhYmxlTGlzdCAmJlxyXG4gICAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QubGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRhbWFydENvZGUgPT09IGZpZ3VyZUNvZGUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEucHJlZml4ID09PSBmaWd1cmVDb2RlKSB7XHJcbiAgICAgICAgICAgIGZpZ3VyZUNvZGUgPSBkYXRhLmRhdGFtYXJ0Q29kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gZmlndXJlQ29kZTtcclxuICAgICAgdGhpcy5jb25maWcgPSB7fTtcclxuICAgICAgaWYgKHRoaXMucG9ydGxldC5jb25maWcpIHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgdGhpcy5oYXNNYXJrZXIgPSB0aGlzLmNvbmZpZy5oYXNNYXJrZXI7XHJcbiAgICAgIHRoaXMubWFya2VyRm9ybWF0ID0gdGhpcy5jb25maWcubWFya2VyRm9ybWF0IHx8IFwiXCI7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IHRoaXMuY29uZmlnLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlc3RvciA9IHRoaXMuY29uZmlnLnNlbGVjdGVkSW52ZXN0b3I7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGUgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGU7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0VHlwZSA9IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlXHJcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICBpZiAoW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFggPSB0aGlzLl9zZWxlY3RlZFg7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFkgPSB0aGlzLl9zZWxlY3RlZFk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSB0aGlzLl9zZWxlY3RlZFNlY29uZFk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGhlbWUgPSB0aGlzLl9zZWxlY3RUaGVtZTtcclxuICAgICAgICB0aGlzLnBvcnRsZXRUeXBlID0gdGhpcy5jb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKHRoaXMucG9ydGxldC5maWd1cmVDb2RlLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJuZXdjaGFydFwiKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0VHlwZSA9IFwibmV3Y2hhcnRcIjtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZykge1xyXG4gICAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcuY2hhcnRTZXR0aW5ncy5wYWxldHRlcykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHBhbGV0dGVzIH0gPSB0aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3M7XHJcbiAgICAgICAgICAgIGlmIChwYWxldHRlcyAmJiBwYWxldHRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRoZW1lID0gdGhpcy50aGVtZURhdGEuZmluZChcclxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICAvLyDnlKjkuo7liKTmlq3kuKTkuKpcclxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaXRlbS52YWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KHBhbGV0dGVzKVxyXG4gICAgICAgICAgICAgICkuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IHtcclxuICAgICAgICAgICAgZGlzcGxheU9wdGlvbjogdGhpcy5kaXNwbGF5T3B0aW9uLFxyXG4gICAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gXCJcIjtcclxuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmdldENvbmZpZyhbXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRDb25maWcoZmllbGRzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJJZDogdGhpcy5hY3RpdmVUYWJJZCxcclxuICAgICAgdGFiTGFiZWw6IHRoaXMuYWN0aXZlVGFiTGFiZWwsXHJcbiAgICAgIHBvcnRsZXRUeXBlOiBcIlwiLFxyXG4gICAgICBnYWRnZXRUaXRsZTogXCJcIixcclxuICAgICAgaXNVcFRvRGF0ZTogZmFsc2UsXHJcbiAgICAgIHBlcmlvZDogMyxcclxuICAgICAgcGFnZWJyZWFrOiBmYWxzZSxcclxuICAgICAgdGltZU1lYXN1cmU6IFwiTVREXCIsXHJcbiAgICAgIHNlcmllczogW10sXHJcbiAgICAgIHNTZXJpZXM6IFtdLFxyXG4gICAgICB0cmVuZHNPcmRlcjogMSxcclxuICAgICAgc2hvd1RyZW5kczogdHJ1ZSxcclxuICAgICAgbnVtYmVyRm9ybWF0OiBcIiMsIyMwXCIsXHJcbiAgICAgIHNob3dDdXJyZW50RGF0YTogZmFsc2UsXHJcbiAgICAgIGZpZWxkczogZmllbGRzLFxyXG4gICAgICBhbGxGaWVsZHM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9URVhUX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCB0ZXh0IGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9EQVRFX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBkYXRlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sTmFtZTogXCJBTExfTlVNQkVSX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBudW1iZXIgZmllbGRzXCIsXHJcbiAgICAgICAgICBkYXRhVHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbE5hbWU6IFwiQUxMX0lOVEVHRVJfRklFTERTXCIsXHJcbiAgICAgICAgICBsYW5nVmFsdWU6IFwiQWxsIGludGVnZXIgZmllbGRzXCIsXHJcbiAgICAgICAgICBkYXRhVHlwZTogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9QRVJDRU5UQUdFX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBwZXJjZW50YWdlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwicGVyY2VudFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sTmFtZTogXCJBTExfTVVMVElQTEVfRklFTERTXCIsXHJcbiAgICAgICAgICBsYW5nVmFsdWU6IFwiQWxsIG11bHRpcGxlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwibXVsdGlwbGVcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgZmlsdGVyU2V0dGluZ3M6IFtdLFxyXG4gICAgICBjb2x1bW5Hcm91cDogW10sXHJcbiAgICAgIGxpc3RPZkludmVzdGVlSWQ6IFtdLFxyXG4gICAgICBpbnZlc3RlZUlkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgICBncm91cEJ5OiBcIlwiLFxyXG4gICAgICBncm91cHM6IFtdLFxyXG4gICAgICBhc09mRGF0ZTogXCJcIixcclxuICAgICAgY3VycmVuY3lDb2RlOiBcIlwiLFxyXG4gICAgICBmdW5kSWQ6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXHJcbiAgICAgIHhheGlzOiB7IGdyb3VwczogW10gfSxcclxuICAgICAgeWF4aXM6IHtcclxuICAgICAgICBzZXJpZXM6IFt7IHBvcnRsZXRUeXBlOiBcIlwiLCBjb2xOYW1lOiBcIlwiLCBjYWxNZXRob2Q6IFwiXCIgfV0sXHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiBbXSxcclxuICAgICAgY29sdW1uc1dpZHRoOiBbXSxcclxuICAgICAgc29ydFNldHRpbmdzOiBbXSxcclxuICAgICAgZ3JvdXBTZXR0aW5nczogW10sXHJcbiAgICAgIHZhbHVlU29ydFNldHRpbmdzOiB7fSxcclxuICAgICAgc2hvd0dyYW5kVG90YWxzOiB0cnVlLFxyXG4gICAgICBzaG93Um93R3JhbmRUb3RhbHM6IHRydWUsXHJcbiAgICAgIHNob3dDb2x1bW5HcmFuZFRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd1N1YlRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1N1YlRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd0NvbHVtblN1YlRvdGFsczogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJbnZlc3RvciA9IG51bGw7XHJcbiAgcHVibGljIGludmVzdG9yTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFZpc3VhbFR5cGUgPSBudWxsO1xyXG4gIHB1YmxpYyB2aXN1YWxUeXBlTGlzdCA9IFtdO1xyXG5cclxuICAvLyBoaXN0b3JpY2FsIElSUiBmcmVxdWVuY3kg5LiN6ZyA6KaBIERhaWx5XHJcbiAgZ2V0IGZyZXF1ZW5jeU9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZXNMaXN0LmZpbHRlcigoaSkgPT4gaS5sYW5nQ29kZSAhPT0gXCJEQUlMWVwiKTtcclxuICB9XHJcblxyXG4gIGluaXRIaXN0b3JpY2FsSVJST3B0aW9ucygpIHtcclxuICAgIGNvbnN0IGNoYXJ0VGV4dCA9IHRoaXMudHJhbnNsYXRpb24uQ09NUEFOWV9DSEFSVCB8fCBcIi5DT01QQU5ZX0NIQVJUXCI7XHJcbiAgICB0aGlzLmludmVzdG9yTGlzdCA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGNvZGU6IFwiQWxsXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5BTEwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjb2RlOiBcIkV4Y2x1ZGVHUCZTTFBcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uW1wiRVhDTFVERV9HUCZTTFBcIl0gfHwgXCIuRXhjbHVkZSBHUCZTTFBcIixcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnZpc3VhbFR5cGVMaXN0ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgY29kZTogXCJuZXdsaW5lXCIsXHJcbiAgICAgICAgdGV4dDogYCR7dGhpcy50cmFuc2xhdGlvbi5MSU5FIHx8IFwiLkxJTkVcIn0gJHtjaGFydFRleHR9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNvZGU6IFwibmV3Y29sdW1uXCIsXHJcbiAgICAgICAgdGV4dDogYCR7dGhpcy50cmFuc2xhdGlvbi5DT0xVTU59ICR7Y2hhcnRUZXh0fWAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjb2RlOiBcInRhYmxlXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5UQUJMRSB8fCBcIi5UQUJMRVwiLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRIaXN0b3JpY2FsSVJSUG9ydGxldCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbnZlc3RvciA9IFwiQWxsXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzID0gXCJRVUFSVEVSTFlcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRWaXN1YWxUeXBlID0gXCJuZXdsaW5lXCI7XHJcbiAgICB0aGlzLnNldEhpc3RvcmljYWxJUlJDaGFydChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBzZXRIaXN0b3JpY2FsSVJSQ2hhcnQob3BlbmVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAob3BlbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGUgIT09IFwidGFibGVcIiAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGUgPT09IFwidGFibGVcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFzTWFya2VyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlID0gdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGU7XHJcbiAgICB0aGlzLmNvbmZpZy5zZWxlY3RlZEludmVzdG9yID0gdGhpcy5zZWxlY3RlZEludmVzdG9yO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWaXN1YWxUeXBlICE9PSBcInRhYmxlXCIpIHtcclxuICAgICAgLy8g6L+Z6YeM56Gu5a6aIHjjgIF5IOi9tOWtl+auteWQjeensFxyXG4gICAgICB0aGlzLnNlbGVjdGVkWCA9IFwiRGF0ZVwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWSA9IFtcIklSUlwiXTtcclxuICAgICAgcmV0dXJuIHRoaXMueHlDaGFuZ2UoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcuc2VsZWN0ZWRNdWx0aXBsZXMgPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkWDogYW55ID0gbnVsbDtcclxuICBzZWxlY3RlZFk6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU2Vjb25kWTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRNdWx0aXBsZXM6IGFueSA9IG51bGw7XHJcbiAgbWFya2VyRm9ybWF0ID0gXCJcIjtcclxuICBtYXJrZXJGb3JtYXRMaXN0ID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24uTk9ORSB8fCBcIi5Ob25lXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJLXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLlRIT1VTQU5EUyB8fCBcIi5UaG91c2FuZHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBcIk1cIixcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24uTUlMTElPTlMgfHwgXCIuTWlsbGlvbnNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBcImJuXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLkJJTExJT05TIHx8IFwiLkJpbGxpb25zXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJUXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLlRSSUxMSU9OUyB8fCBcIi5UcmlsbGlvbnNcIixcclxuICAgIH0sXHJcbiAgXTtcclxuICBoYXNNYXJrZXIgPSBmYWxzZTtcclxuXHJcbiAgbGFiZWxDb25maWdDaGFuZ2UoZSkge1xyXG4gICAgdGhpcy5jb25maWcuaGFzTWFya2VyID0gZTtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoe1xyXG4gICAgICBuZXdJZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgICBjb25maWc6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnN3aXRjaExhYmVsQ29uZmlnLm5leHQoe1xyXG4gICAgICBjaGVja2VkOiBlLFxyXG4gICAgICBpZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB4eUNoYW5nZShlKSB7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGhlbWUuZW1pdCh7XHJcbiAgICAgICAgc2VsZWN0ZWRYOiB0aGlzLnNlbGVjdGVkWCxcclxuICAgICAgICBzZWxlY3RlZFk6IHRoaXMuc2VsZWN0ZWRZLFxyXG4gICAgICAgIHNlbGVjdGVkTXVsdGlwbGVzOiB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzLFxyXG4gICAgICAgIHNlbGVjdGVkU2Vjb25kWTogdGhpcy5zZWxlY3RlZFNlY29uZFksXHJcbiAgICAgICAgc2VsZWN0VGhlbWU6IHRoaXMuc2VsZWN0VGhlbWUsXHJcbiAgICAgICAgaGFzTWFya2VyOiB0aGlzLmhhc01hcmtlcixcclxuICAgICAgICBtYXJrZXJGb3JtYXQ6IHRoaXMubWFya2VyRm9ybWF0LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29uZmlnW1wibWFya2VyRm9ybWF0XCJdID0gdGhpcy5tYXJrZXJGb3JtYXQ7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wiaGFzTWFya2VyXCJdID0gdGhpcy5oYXNNYXJrZXI7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRZXCJdID0gdGhpcy5zZWxlY3RlZFk7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRTZWNvbmRZXCJdID0gdGhpcy5zZWxlY3RlZFNlY29uZFk7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICB0aGlzLmNvbmZpZ1tcInNlbGVjdFRoZW1lXCJdID0gdGhpcy5zZWxlY3RUaGVtZTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoe1xyXG4gICAgICAgIG5ld0lkOiB0aGlzLnBvcnRsZXQubmV3SWQsXHJcbiAgICAgICAgY29uZmlnOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZyksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdCgpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHNob3dFZGl0KCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBvcnRsZXRUeXBlID09IFwibmV3Y29sdW1ubGluZVwiICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRZLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuQWRkT3JFZGl0UG9ydGxldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldFR5cGUgIT0gXCJuZXdjb2x1bW5saW5lXCIgJiYgdGhpcy5zZWxlY3RlZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG11bHRpcGxlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIGdldG11bHRpcGxlc0xpc3QoKSB7XHJcbiAgICBjb25zdCB1cmwgPVxyXG4gICAgICB0aGlzLmFwcENvZGUgPT09IFwiUE1TXCJcclxuICAgICAgICA/IHRoaXMuYXBpLnVybExpc3QuTFBHZXRQcm9wZXJ0eUxpc3RcclxuICAgICAgICA6IHRoaXMuYXBpLnVybExpc3QuR2V0UHJvcGVydHlMaXN0O1xyXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCB7IHNjb3BlOiBcIkRBU0hCT0FSRF9GUkVRVUVOQ1lcIiwgbGFuZ0lkeDogMiB9LCAocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVzTGlzdCA9IHJlcztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGl6ZShzdHIpIHtcclxuICAgIC8vIOWwhuWtl+espuS4sui9rOaNouS4uuWwj+WGme+8jOW5tuS9v+eUqOato+WImeihqOi+vuW8j+Wwhuavj+S4quWNleivjeeahOesrOS4gOS4quWtl+espui9rOaNouS4uuWkp+WGmVxyXG4gICAgaWYgKCFzdHIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcYlxcdy9nLCBmdW5jdGlvbiAoY2hhcikge1xyXG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3REYXRhbWFydElkKCkge1xyXG4gICAgLy8g6I635Y+W55yf5q2j55qERGF0YW1hcnRJRFxyXG4gICAgY29uc3QgY29kZSA9IHRoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKTtcclxuICAgIGxldCBkYXRhTWFydFRhYmxlcyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZGF0YU1hcnRUYWJsZXNbXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmlkXHJcbiAgICBdLmZpbHRlcigoZWwpID0+IGNvZGUgPT0gZWwuZGF0YW1hcnRDb2RlKTtcclxuICAgIGlmIChkYXRhTWFydFRhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBkYXRhTWFydFRhYmxlc1swXS5pZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCkge1xyXG4gICAgY29uc3QgcG9ydGxldFR5cGUgPVxyXG4gICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICA/IHRoaXMuY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgIDogdGhpcy5jb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAvLyDojrflj5bnnJ/mraPnmoREYXRhbWFydENvZGVcclxuICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRDb2RlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGFtYXJ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0RGF0YW1hcnRDb2RlKCkge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZGF0YU1hcnRUYWJsZXNbXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmlkXHJcbiAgICBdLmZpbHRlcigoZSkgPT4ge1xyXG4gICAgICByZXR1cm4gZVtcImRhdGFtYXJ0Q29kZVwiXSA9PSB0aGlzLnNlbGVjdGVkRGF0YW1hcnQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChpdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGl0ZW1bMF1bXCJwcmVmaXhcIl0pIHtcclxuICAgICAgICByZXR1cm4gYCR7aXRlbVswXVtcInByZWZpeFwiXX0ke1xyXG4gICAgICAgICAgdGhpcy5jYXBpdGFsaXplKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMpIHx8IFwiXCJcclxuICAgICAgICB9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaXRlbVswXVtcImRhdGFtYXJ0Q29kZVwiXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUaGVtZTogYW55ID0gXCJ0aGVtZTFcIjtcclxuICBjaGFuZ2VUaGVtZShlLCB0eXBlKSB7XHJcbiAgICB0aGlzLnNlbGVjdFRoZW1lID0gZS52YWx1ZTtcclxuICAgIHRoaXMuY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgdGhpcy51cGRhdGVUaGVtZS5lbWl0KHtcclxuICAgICAgc2VsZWN0ZWRYOiB0aGlzLnNlbGVjdGVkWCxcclxuICAgICAgc2VsZWN0ZWRZOiB0aGlzLnNlbGVjdGVkWSxcclxuICAgICAgc2VsZWN0ZWRNdWx0aXBsZXM6IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMsXHJcbiAgICAgIHNlbGVjdGVkU2Vjb25kWTogdGhpcy5zZWxlY3RlZFNlY29uZFksXHJcbiAgICAgIHNlbGVjdFRoZW1lOiB0aGlzLnNlbGVjdFRoZW1lLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNob3dFZGl0KCk7XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YU1hcnRUYWJsZXMoZGF0YSkge1xyXG4gICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhbmdWYWx1ZUEgPSBhLmxhbmdWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBsYW5nVmFsdWVCID0gYi5sYW5nVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgIGlmIChsYW5nVmFsdWVBIDwgbGFuZ1ZhbHVlQikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGFuZ1ZhbHVlQSA+IGxhbmdWYWx1ZUIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VGb3JtYXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UubWFya2VyRm9ybWF0Lm5leHQoe1xyXG4gICAgICBuZXdJZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgICBtYXJrZXJGb3JtYXQ6IHRoaXMubWFya2VyRm9ybWF0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1638
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1pY29ubGlzdC1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kYXNoYm9hcmQvc2lkZWJhci1pY29ubGlzdC9zaWRlYmFyLWljb25saXN0LW5ldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVN0RSxNQUFNLE9BQU8sMkJBQTJCOzs7Ozs7Ozs7SUFxVnRDLFlBQ1UsR0FBWSxFQUNiLGdCQUFrQyxFQUNsQyx1QkFBZ0QsRUFDL0MsR0FBc0IsRUFDUyxHQUFRLEVBQ0EsSUFBUztRQUxoRCxRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQy9DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1MsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNBLFNBQUksR0FBSixJQUFJLENBQUs7UUExVmpELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUtuQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLGVBQVUsR0FBUSxFQUFF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QUFpRDs7SUFDakQsbURBQTRDOztJQUM1QyxvREFBNkM7O0lBQzdDLGtEQUEyQzs7SUFDM0Msa0RBQTJDOztJQUMzQyxrREFBcUU7Ozs7O0lBQ3JFLDJDQUFhOztJQUNiLHdEQUE4Qjs7SUFDOUIsaURBQW1COztJQUVuQixrREFBbUI7Ozs7O0lBQ25CLG9EQUEyQzs7SUFDM0Msa0RBQW1COztJQUNuQixrREFRRTs7SUFDRix3REFBbUM7O0lBQ25DLHVEQUF3Qjs7SUFDeEIsb0RBNkNFOztJQUNGLG9EQUEwRDs7SUFDMUQsNkNBQWM7O0lBQ2QsaURBQW1DOztJQUNuQyw0Q0FBdUI7O0lBQ3ZCLG9EQVlFOztJQUNGLDJEQUFnRTs7SUFDaEUsZ0RBdU9FOztJQUVGLGtEQUE0RDs7SUF5cEI1RCx1REFBK0I7O0lBQy9CLG1EQUF5Qjs7SUFDekIseURBQWlDOztJQUNqQyxxREFBMkI7O0lBa0UzQixnREFBc0I7O0lBQ3RCLGdEQUFvQjs7SUFDcEIsc0RBQTBCOztJQUMxQix3REFBOEI7O0lBQzlCLG1EQUFrQjs7SUFDbEIsdURBcUJFOztJQUNGLGdEQUFrQjs7SUE0RGxCLG9EQUF3Qjs7SUFnRXhCLGtEQUE0Qjs7Ozs7SUFsM0IxQiwwQ0FBb0I7O0lBQ3BCLHVEQUF5Qzs7SUFDekMsOERBQXVEOzs7OztJQUN2RCwwQ0FBOEI7Ozs7O0lBQzlCLDBDQUErQzs7Ozs7SUFDL0MsMkNBQXdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi4vYXBpXCI7XHJcbmltcG9ydCB7IEFQSV9TRVJWSUNFX1RPS0VOLCBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlIH0gZnJvbSBcIi4uL2Rhc2hib2FyZFBvcmxldHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwia3Qtc2lkZWJhci1pY29ubGlzdC1uZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NpZGViYXItaWNvbmxpc3QtbmV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3NpZGViYXItaWNvbmxpc3QtbmV3LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lkZWJhckljb25saXN0TmV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXNoYm9hcmRfc2lkZWJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRhc2hib2FyZDtcclxuICBASW5wdXQoKSBkYXNoYm9hcmRJZDtcclxuICBASW5wdXQoKSBhY3RpdmVUYWJJZDtcclxuICBASW5wdXQoKSBhY3RpdmVUYWJMYWJlbDtcclxuICBASW5wdXQoKSBwb3J0bGV0cyA9IFtdO1xyXG4gIEBJbnB1dCgpIHRhYmFjdGl2ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHBvcnRsZXQ7XHJcbiAgQElucHV0KCkgZmlndXJlQ29kZTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRYOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRZOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBfc2VsZWN0ZWRNdWx0aXBsZXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgX3NlbGVjdGVkU2Vjb25kWTogYW55ID0gW107XHJcbiAgQElucHV0KCkgX3NlbGVjdFRoZW1lOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGFwcENvZGU7XHJcbiAgQE91dHB1dCgpIGNsb3NlU2lkZWJhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlUG9ybGV0Q29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblRvZ2dsZVRhYmFjdGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlUG9ybGV0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVQdXNoQnRuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlVGhlbWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIHRyYW5zbGF0aW9uID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRyYW5zbGF0aW9uXCIpKTtcclxuICBwcml2YXRlIGxhbmc7XHJcbiAgcHVibGljIGRhdGFNYXJ0VGFibGVMaXN0ID0gW107XHJcbiAgaGFzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIC8vY29uZmlnO1xyXG4gIHB1YmxpYyBnYWRnZXRUaXRsZTtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHVibGljIHBvcnRsZXRUeXBlO1xyXG4gIHB1YmxpYyBleHBhbmRBcnJheTogQXJyYXk8Ym9vbGVhbj4gPSBbXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBmYWxzZSxcclxuICBdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZERhdGFUYWJsZTogYW55ID0gXCJcIjtcclxuICBwdWJsaWMgc2VsZWN0ZWREYXRhbWFydDtcclxuICBwdWJsaWMgY2hhcnRTZXR0aW5ncyA9IHtcclxuICAgIGxlZ2VuZFNldHRpbmdzOiB7XHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGVuYWJsZU11bHRpcGxlQXhpczogZmFsc2UsXHJcbiAgICBzaG93TXVsdGlMZXZlbExhYmVsczogZmFsc2UsXHJcbiAgICBjaGFydFNlcmllczoge1xyXG4gICAgICB0eXBlOiBcIkNvbHVtblwiLFxyXG4gICAgICB3aWR0aDogMixcclxuICAgIH0sXHJcbiAgICBtdWx0aXBsZUF4aXNNb2RlOiBcIlN0YWNrZWRcIixcclxuICAgIHByaW1hcnlYQXhpczoge1xyXG4gICAgICB0aXRsZTogXCIgXCIsXHJcbiAgICAgIG1ham9yR3JpZExpbmVzOiB7IHdpZHRoOiAwIH0sXHJcbiAgICB9LFxyXG4gICAgY2hhcnRBcmVhOiB7XHJcbiAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgIGJvcmRlcjoge1xyXG4gICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHBhbGV0dGVzOiBbXHJcbiAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICBdLFxyXG4gICAgcHJpbWFyeVlBeGlzOiB7XHJcbiAgICAgIC8vIFnovbTmoIfpopjorr7nva7kuLrnqbpcclxuICAgICAgdGl0bGU6IFwiIFwiLFxyXG4gICAgfSxcclxuICAgIHpvb21TZXR0aW5nczoge1xyXG4gICAgICBlbmFibGVNb3VzZVdoZWVsWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOm8oOagh+a7mui9rue8qeaUvlxyXG4gICAgICBlbmFibGVQaW5jaFpvb21pbmc6IGZhbHNlLCAvLyDnpoHnlKjop6bmkbjnvKnmlL5cclxuICAgICAgZW5hYmxlU2VsZWN0aW9uWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOmAieaLqeWMuuWfn+e8qeaUvlxyXG4gICAgICBlbmFibGVEZWZlcnJlZFpvb21pbmc6IGZhbHNlLCAvLyDnpoHnlKjlu7bov5/nvKnmlL5cclxuICAgICAgdG9vbGJhckl0ZW1zOiBbXSxcclxuICAgICAgZW5hYmxlU2Nyb2xsYmFyOiBmYWxzZSxcclxuICAgICAgZW5hYmxlWm9vbWluZzogZmFsc2UsXHJcbiAgICB9LFxyXG4gIH07XHJcbiAgcHVibGljIGRpc3BsYXlPcHRpb24gPSB7IHZpZXc6IFwiQm90aFwiLCBwcmltYXJ5OiBcIkNoYXJ0XCIgfTtcclxuICBwdWJsaWMgY29uZmlnO1xyXG4gIHB1YmxpYyBjdXJyZW50VGFiOiBzdHJpbmcgPSBcInRhYjFcIjtcclxuICBwdWJsaWMgeUxpc3Q6IGFueSA9IFtdO1xyXG4gIHB1YmxpYyBjaGFydFR5cGVMaXN0ID0gW1xyXG4gICAgXCJDb2x1bW5cIixcclxuICAgIFwiQmFyXCIsXHJcbiAgICBcIkxpbmVcIixcclxuICAgIFwiU3BsaW5lXCIsXHJcbiAgICBcIkFyZWFcIixcclxuICAgIFwiU2NhdHRlclwiLFxyXG4gICAgXCJQb2xhclwiLFxyXG4gICAgXCJQaWVcIixcclxuICAgIFwiRG91Z2hudXRcIixcclxuICAgIFwiU3RhY2tlZCBDb2x1bW5cIixcclxuICAgIFwiUmFkYXJcIixcclxuICBdO1xyXG4gIHB1YmxpYyBtdWx0aXBsZUF4aXNNb2RlTGlzdCA9IFtcIlN0YWNrZWRcIiwgXCJTaW5nbGVcIiwgXCJDb21iaW5lZFwiXTtcclxuICB0aGVtZURhdGE6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxM1wiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE0XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTVcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTM2QkJCXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTZcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA4MkFGXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTdcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTE4XCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMxNkEyQzJcIiwgXCIjM0VCQkNFXCJdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUxOVwiLFxyXG4gICAgICB2YWx1ZTogW1wiIzFDMzQ4NFwiLCBcIiMxNjU5QTlcIiwgXCIjMTM3NUM0XCIsIFwiIzFEOTdFMVwiLCBcIiMzNUI5RkNcIl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTIwXCIsXHJcbiAgICAgIHZhbHVlOiBbXCIjMDQ1NzhGXCIsIFwiIzAwNzBBM1wiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjFcIixcclxuICAgICAgdmFsdWU6IFtcIiMxQzM0ODRcIiwgXCIjMTY1OUE5XCIsIFwiIzEzNjhCOFwiLCBcIiMxMzc1QzRcIiwgXCIjMUQ5N0UxXCIsIFwiIzM1QjlGQ1wiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjJcIixcclxuICAgICAgdmFsdWU6IFtcIiMwNDU3OEZcIiwgXCIjMDA3MEEzXCIsIFwiIzAwN0ZBRFwiLCBcIiMwMDg5QjRcIiwgXCIjMTZBMkMyXCIsIFwiIzNFQkJDRVwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxNDVGQUZcIixcclxuICAgICAgICBcIiMxMzY4QjhcIixcclxuICAgICAgICBcIiMxMzc1QzRcIixcclxuICAgICAgICBcIiMxRDk3RTFcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMjRcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDcwQTNcIixcclxuICAgICAgICBcIiMwMDc4QTlcIixcclxuICAgICAgICBcIiMwMDdGQURcIixcclxuICAgICAgICBcIiMwMDg5QjRcIixcclxuICAgICAgICBcIiMxNkEyQzJcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTFcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMxQzM0ODRcIixcclxuICAgICAgICBcIiMxOTQ2OTdcIixcclxuICAgICAgICBcIiMxNjU5QTlcIixcclxuICAgICAgICBcIiMxMzZCQkJcIixcclxuICAgICAgICBcIiMxNDdFQ0NcIixcclxuICAgICAgICBcIiMxQjkyRERcIixcclxuICAgICAgICBcIiMyNkE1RURcIixcclxuICAgICAgICBcIiMzNUI5RkNcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTJcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiMwNDU3OEZcIixcclxuICAgICAgICBcIiMwMDY1OUJcIixcclxuICAgICAgICBcIiMwMDczQTZcIixcclxuICAgICAgICBcIiMwMDgyQUZcIixcclxuICAgICAgICBcIiMwMDkwQjhcIixcclxuICAgICAgICBcIiMwRjlFQzBcIixcclxuICAgICAgICBcIiMyOUFEQzdcIixcclxuICAgICAgICBcIiMzRUJCQ0VcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMVwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzU5NGJiOVwiLFxyXG4gICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgIFwiIzQ2ODhlZFwiLFxyXG4gICAgICAgIFwiI2UwNTYzZVwiLFxyXG4gICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgIFwiIzZkZDhiNVwiLFxyXG4gICAgICAgIFwiI2U4NzIyNVwiLFxyXG4gICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgIFwiI2M2NDM3ZFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWUyXCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjNDY4OGVkXCIsXHJcbiAgICAgICAgXCIjZjFhZjMyXCIsXHJcbiAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgXCIjODAzYTYzXCIsXHJcbiAgICAgICAgXCIjNmRkOGI1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTNcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICBcIiNjNWRmNDJcIixcclxuICAgICAgICBcIiNlODcyMjVcIixcclxuICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICBcIiNlMDU2M2VcIixcclxuICAgICAgICBcIiM4MDNhNjNcIixcclxuICAgICAgICBcIiNmMWFmMzJcIixcclxuICAgICAgICBcIiM1OTRiYjlcIixcclxuICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lNFwiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzJmNDk5ZlwiLFxyXG4gICAgICAgIFwiIzhkMWQyZVwiLFxyXG4gICAgICAgIFwiI2U5YmYzNVwiLFxyXG4gICAgICAgIFwiIzUxNzcyZlwiLFxyXG4gICAgICAgIFwiIzQ2OWJkOFwiLFxyXG4gICAgICAgIFwiIzVjNDQ4ZlwiLFxyXG4gICAgICAgIFwiI2RhNzMyZlwiLFxyXG4gICAgICAgIFwiIzI0NTM1M1wiLFxyXG4gICAgICAgIFwiIzQzYTI0NVwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU1XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjMzgzODM5XCIsXHJcbiAgICAgICAgXCIjNDQ2ZWM2XCIsXHJcbiAgICAgICAgXCIjY2Y2Mzg0XCIsXHJcbiAgICAgICAgXCIjZWJiMzdlXCIsXHJcbiAgICAgICAgXCIjNzFhMjQ5XCIsXHJcbiAgICAgICAgXCIjNGJiMWE1XCIsXHJcbiAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgXCIjYzVkZjQyXCIsXHJcbiAgICAgICAgXCIjYzY0MzdkXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTZcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM1MTdhZTFcIixcclxuICAgICAgICBcIiM2Mzg2ZTVcIixcclxuICAgICAgICBcIiM3NDkxZTlcIixcclxuICAgICAgICBcIiM4NDlkZWNcIixcclxuICAgICAgICBcIiM5NGE5ZWZcIixcclxuICAgICAgICBcIiNhNGI2ZjJcIixcclxuICAgICAgICBcIiNiNGMzZjZcIixcclxuICAgICAgICBcIiNjNGNmZjlcIixcclxuICAgICAgICBcIiNkNGRkZmRcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lN1wiLFxyXG4gICAgICB2YWx1ZTogW1xyXG4gICAgICAgIFwiIzM5ODI4ZVwiLFxyXG4gICAgICAgIFwiIzQ4OGU5OVwiLFxyXG4gICAgICAgIFwiIzU3OWFhNVwiLFxyXG4gICAgICAgIFwiIzY2YTZiMFwiLFxyXG4gICAgICAgIFwiIzc1YjNiZFwiLFxyXG4gICAgICAgIFwiIzg1YmZjOVwiLFxyXG4gICAgICAgIFwiIzk1Y2RkNlwiLFxyXG4gICAgICAgIFwiI2E0ZGFlMlwiLFxyXG4gICAgICAgIFwiI2I1ZThmMFwiLFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IFwidGhlbWU4XCIsXHJcbiAgICAgIHZhbHVlOiBbXHJcbiAgICAgICAgXCIjZTc5NjNkXCIsXHJcbiAgICAgICAgXCIjZWE5ZTRiXCIsXHJcbiAgICAgICAgXCIjZWVhNjU5XCIsXHJcbiAgICAgICAgXCIjZjBhZTY4XCIsXHJcbiAgICAgICAgXCIjZjJiNjc4XCIsXHJcbiAgICAgICAgXCIjZjNiZjg3XCIsXHJcbiAgICAgICAgXCIjZjVjNzk4XCIsXHJcbiAgICAgICAgXCIjZjZkMGFhXCIsXHJcbiAgICAgICAgXCIjZjdkOWJiXCIsXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogXCJ0aGVtZTlcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM2NGE4YjRcIixcclxuICAgICAgICBcIiM3ZWJlYzBcIixcclxuICAgICAgICBcIiM5Y2M5Y2FcIixcclxuICAgICAgICBcIiNiOGQ0ZDRcIixcclxuICAgICAgICBcIiNkOWQ2Y2RcIixcclxuICAgICAgICBcIiNkOGI3YTdcIixcclxuICAgICAgICBcIiNjZThmOTNcIixcclxuICAgICAgICBcIiNjMTYyN2ZcIixcclxuICAgICAgICBcIiNhZDI0NThcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBcInRoZW1lMTBcIixcclxuICAgICAgdmFsdWU6IFtcclxuICAgICAgICBcIiM0MTc2YmFcIixcclxuICAgICAgICBcIiM1NTlhZThcIixcclxuICAgICAgICBcIiM3MGIzZThcIixcclxuICAgICAgICBcIiNhN2NjZTdcIixcclxuICAgICAgICBcIiNkZmRmZGZcIixcclxuICAgICAgICBcIiNkMmEwOGJcIixcclxuICAgICAgICBcIiNjNzZhNTBcIixcclxuICAgICAgICBcIiNjYTRlMzRcIixcclxuICAgICAgICBcIiNhYTNjMjlcIixcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRoZW1lRmllbGRzOiBPYmplY3QgPSB7IHRleHQ6IFwidmFsdWVcIiwgdmFsdWU6IFwiaWRcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpOiBBcGlMaXN0LFxyXG4gICAgcHVibGljIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9TRVJWSUNFX1RPS0VOKSBwcml2YXRlIGh0dHA6IGFueVxyXG4gICkge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRoaXMudGFiYWN0aXZlID8gXCJ0YWIxXCIgOiBcInRhYjJcIjtcclxuICAgIHRoaXMuZ2V0SW5mbygpO1xyXG4gICAgdGhpcy5zZXREYXRhYmluZCgpO1xyXG4gICAgdGhpcy5pbml0SGlzdG9yaWNhbElSUk9wdGlvbnMoKTtcclxuICAgIHRoaXMuZ2V0bXVsdGlwbGVzTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTsgLy8g5qCH6K6w5Li66ZyA6KaB5qOA5rWLXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0UHVzaGJ0bigpLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmQgJiYgdGhpcy5kYXNoYm9hcmQuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKFtdKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhbWFydCA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkWCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkWSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldHBvcnRsZXRFZGl0KCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG4gICAgICAgIGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmRJZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRhYmluZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLmluaXREYXRhTWFydFRhYmxlTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0YU1hcnRUYWJsZUxpc3QoKSB7XHJcbiAgICB0aGlzLmRhdGFNYXJ0VGFibGVMaXN0ID0gWy4uLnRoaXMuZGFzaGJvYXJkLmRhdGFNYXJ0VGFibGVzXS5maWx0ZXIoXHJcbiAgICAgIChpdGVtKSA9PiAhaXRlbS5pc0hpZGVcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5yZW5hbWVEYXRhTWFydFRhYmxlcyhcclxuICAgICAgdGhpcy5kYXRhTWFydFRhYmxlTGlzdCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmQuaWQsXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmVudGl0eVR5cGVcclxuICAgICk7XHJcbiAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNvcnREYXRhTWFydFRhYmxlcyh0aGlzLmRhdGFNYXJ0VGFibGVMaXN0KTtcclxuICAgIGlmICghdGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaWd1cmVDb2RlID0gdGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGU7XHJcbiAgICB0aGlzLmRhc2hib2FyZC5kYXRhTWFydFRhYmxlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmRhdGFtYXJ0Q29kZSA9PT0gZmlndXJlQ29kZSAmJiBpdGVtLnByZWZpeCkge1xyXG4gICAgICAgIGZpZ3VyZUNvZGUgPSBpdGVtLnByZWZpeDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmRhdGFNYXJ0VGFibGVMaXN0LmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGF0YW1hcnRDb2RlID09PSBmaWd1cmVDb2RlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnByZWZpeCA9PT0gZmlndXJlQ29kZSkge1xyXG4gICAgICAgICAgZmlndXJlQ29kZSA9IGRhdGEuZGF0YW1hcnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gZmlndXJlQ29kZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHNiKSA9PiBzYi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0V2l6YXJkKHdpemFyZDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kQXJyYXlbd2l6YXJkXSkge1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5ID0gW1xyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5W3dpemFyZF0gPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVt3aXphcmRdID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEluZm8oKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRyYW5zbGF0aW9uXCIpKTtcclxuICAgIHRoaXMubGFuZyA9IHRoaXMucGJmLmdldExhbmd1YWdlUGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xlYXJTaWRlYmFyLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbG9zZSgpIHtcclxuICAgIHRoaXMudXBkYXRlUHVzaEJ0bi5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0LmVtaXQobnVsbCk7XHJcbiAgICB0aGlzLmNsb3NlU2lkZWJhci5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGaWd1cmVjb2RlKCkge1xyXG4gICAgbGV0IGNvZGVBcnIgPSBbXCJUYXNrc1wiLCBcIkZ1bmRMaXN0XCIsIFwiSVJSXCIsIFwiTm90ZXNcIl07XHJcbiAgICBsZXQgaSA9IGNvZGVBcnIuaW5kZXhPZih0aGlzLmZpZ3VyZUNvZGUpO1xyXG4gICAgcmV0dXJuIGkgPiAtMSA/IGZhbHNlIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOWbvuihqOexu+Wei+abtOaUuWV2ZW50XHJcbiAgcHVibGljIGdldFBvcnRsZXRUeXBlKCRldmVudCkge1xyXG4gICAgdGhpcy5wb3J0bGV0VHlwZSA9ICRldmVudDtcclxuICAgIHRoaXMuaGFzQ2hhbmdlZCA9IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlICE9PSB0aGlzLnBvcnRsZXRUeXBlO1xyXG4gICAgY29uc3QgcHJldlR5cGUgPSB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZTtcclxuICAgIHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlID0gdGhpcy5wb3J0bGV0VHlwZTtcclxuICAgIGlmICghJGV2ZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcygkZXZlbnQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRYID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFkgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kQXJyYXlbMl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVs3XSA9IHRydWU7XHJcbiAgICAgIC8vIOS/ruWkjeacieaXtumAieaLqSB4eSDovbTml7bmsqHmnInmlbDmja7nmoTpl67pophcclxuICAgICAgaWYgKHRoaXMucG9ydGxldCAmJiB0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSh0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSwgZmFsc2UsIHRoaXMucG9ydGxldFR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvcnRsZXRUeXBlID09PSBcIm5ld2NoYXJ0XCIpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcgJiZcclxuICAgICAgICB0aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZy5jaGFydFNldHRpbmdzLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgbGVnZW5kU2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZW5hYmxlTXVsdGlwbGVBeGlzOiBmYWxzZSxcclxuICAgICAgICAgIHNob3dNdWx0aUxldmVsTGFiZWxzOiBmYWxzZSxcclxuICAgICAgICAgIGNoYXJ0U2VyaWVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiQ29sdW1uXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiAyLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG11bHRpcGxlQXhpc01vZGU6IFwiU3RhY2tlZFwiLFxyXG4gICAgICAgICAgcHJpbWFyeVhBeGlzOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIiBcIixcclxuICAgICAgICAgICAgbWFqb3JHcmlkTGluZXM6IHsgd2lkdGg6IDAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjaGFydEFyZWE6IHtcclxuICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgYm9yZGVyOiB7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcGFsZXR0ZXM6IFtcclxuICAgICAgICAgICAgXCIjNTk0YmI5XCIsXHJcbiAgICAgICAgICAgIFwiI2YxYWYzMlwiLFxyXG4gICAgICAgICAgICBcIiM0Njg4ZWRcIixcclxuICAgICAgICAgICAgXCIjZTA1NjNlXCIsXHJcbiAgICAgICAgICAgIFwiIzgwM2E2M1wiLFxyXG4gICAgICAgICAgICBcIiM2ZGQ4YjVcIixcclxuICAgICAgICAgICAgXCIjZTg3MjI1XCIsXHJcbiAgICAgICAgICAgIFwiI2M1ZGY0MlwiLFxyXG4gICAgICAgICAgICBcIiNjNjQzN2RcIixcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBwcmltYXJ5WUF4aXM6IHtcclxuICAgICAgICAgICAgLy8gWei9tOagh+mimOiuvue9ruS4uuepulxyXG4gICAgICAgICAgICB0aXRsZTogXCIgXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgem9vbVNldHRpbmdzOiB7XHJcbiAgICAgICAgICAgIGVuYWJsZU1vdXNlV2hlZWxab29taW5nOiBmYWxzZSwgLy8g56aB55So6byg5qCH5rua6L2u57yp5pS+XHJcbiAgICAgICAgICAgIGVuYWJsZVBpbmNoWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOinpuaRuOe8qeaUvlxyXG4gICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25ab29taW5nOiBmYWxzZSwgLy8g56aB55So6YCJ5oup5Yy65Z+f57yp5pS+XHJcbiAgICAgICAgICAgIGVuYWJsZURlZmVycmVkWm9vbWluZzogZmFsc2UsIC8vIOemgeeUqOW7tui/n+e8qeaUvlxyXG4gICAgICAgICAgICB0b29sYmFySXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBlbmFibGVTY3JvbGxiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBlbmFibGVab29taW5nOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCRldmVudCA9PT0gXCJoaXN0b3JpY2FsSVJSXCIpIHtcclxuICAgICAgdGhpcy5vblNlbGVjdGVkSGlzdG9yaWNhbElSUlBvcnRsZXQoKTtcclxuICAgICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmV4cGFuZEFycmF5WzddID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVszXSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0VHlwZSkge1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGNoYW5nZURhdGFUYWJsZSh2YWx1ZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFUYWJsZSA9IHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZmlsdGVyKFxyXG4gICAgICAoZWwpID0+IGVsLmRhdGFtYXJ0Q29kZSA9PT0gdmFsdWVcclxuICAgIClbMF0uaWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YW1hcnQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnBvcnRsZXQpIHtcclxuICAgICAgdGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMucG9ydGxldC5kYXNoYm9hcmREYXRhVGFibGVJZCA9IHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xlYXJGaWVsZExpc3QubmV4dCh0aGlzLnBvcnRsZXQubmV3SWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmNsZWFyRmllbGRzT2JqKHRoaXMucG9ydGxldCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGEodmFsdWUpO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVswXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBhbmRBcnJheVsyXSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlUG9ybGV0Q29uZmlnKGUpIHtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGEoY29kZSwgZWRpdDogYm9vbGVhbiA9IHRydWUsIHBvcnRsZXRUeXBlID0gXCJcIikge1xyXG4gICAgY29uc3QgZGF0YU9iaiA9IHtcclxuICAgICAgZGF0YU1hcnRDb2RlOiBjb2RlLFxyXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5nLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0U2NoZW1hUGFyYW1zKGRhdGFPYmosIGNvZGUsIHRoaXMuZGFzaGJvYXJkKTtcclxuICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuYXBpLnVybExpc3QuR2V0U2NoZW1hLCBkYXRhT2JqLCAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBbXHJcbiAgICAgICAgICAgIFwiU2VlVGhyb3VnaFF1YXJ0ZXJseVwiLFxyXG4gICAgICAgICAgICBcIlNlZVRocm91Z2hZZWFybHlcIixcclxuICAgICAgICAgICAgXCJTZWVUaHJvdWdoTW9udGhseVwiLFxyXG4gICAgICAgICAgXS5pbmNsdWRlcyhjb2RlKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmVzID0gcmVzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgIVtcclxuICAgICAgICAgICAgICAgIFwiQ0lfTVREXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNJX1FURFwiLFxyXG4gICAgICAgICAgICAgICAgXCJDSV9ZVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9NVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9RVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1RXUl9ZVERcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9NVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9NVERfOTlcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9RVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9RVERfOTlcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9ZVERfOTVcIixcclxuICAgICAgICAgICAgICAgIFwiQ1ZBUl9ZVERfOTlcIixcclxuICAgICAgICAgICAgICBdLmluY2x1ZGVzKGl0ZW0uY29sTmFtZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5maWVsZHNBcnJbdGhpcy5kYXNoYm9hcmQuaWRdKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZpZWxkc0Fyclt0aGlzLmRhc2hib2FyZC5pZF0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5maWVsZHNBcnJbdGhpcy5kYXNoYm9hcmQuaWRdW1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0XHJcbiAgICAgICAgXSA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wb3J0bGV0LmNvbmZpZykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvcnRsZXRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlID0gcG9ydGxldFR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5maWVsZHMgPSByZXM7XHJcblxyXG4gICAgICAgICAgLy8gVE8gRE8g6L+H5rukWei9tOeahOaVsOaNrlxyXG4gICAgICAgICAgdGhpcy55TGlzdCA9IHJlcztcclxuICAgICAgICAgIHRoaXMucG9ydGxldC5jb25maWcgPSB0aGlzLmNvbmZpZyA/IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKSA6IFwiXCI7XHJcblxyXG4gICAgICAgICAgZWRpdCAmJiB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWcuZmllbGRzID0gcmVzO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnRsZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBvcnRsZXQpO1xyXG4gICAgICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcmxldC5lbWl0KHBvcnRsZXQpO1xyXG4gICAgICAgICAgICAvLyBUTyBETyDov4fmu6RZ6L2055qE5pWw5o2uXHJcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSByZXM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE11bHRpcGxlQXhpcyhlKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0U2V0dGluZ3MuZW5hYmxlTXVsdGlwbGVBeGlzKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzLmxlZ2VuZFNldHRpbmdzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZW5hYmxlTXVsdGlwbGVBeGlzQ2hhbmdlLm5leHQoe1xyXG4gICAgICAgIG5ld0lkOiB0aGlzLnBvcnRsZXQubmV3SWQsXHJcbiAgICAgICAgZW5hYmxlTXVsdGlwbGVBeGlzOiB0aGlzLmNoYXJ0U2V0dGluZ3MuZW5hYmxlTXVsdGlwbGVBeGlzLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuY2hhcnRTZXR0aW5ncy5sZWdlbmRTZXR0aW5ncy52aXNpYmxlLFxyXG4gICAgICAgIG11bHRpcGxlQXhpc01vZGU6IHRoaXMuY2hhcnRTZXR0aW5ncy5tdWx0aXBsZUF4aXNNb2RlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoYXJ0VHlwZSgpIHtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBvcnRsZXQpO1xyXG4gICAgaWYgKHBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UocG9ydGxldC5jb25maWcpO1xyXG4gICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IGNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIC4uLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLFxyXG4gICAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7IGNoYXJ0U2V0dGluZ3M6IHRoaXMuY2hhcnRTZXR0aW5ncyB9O1xyXG4gICAgICBwb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVBvcmxldC5lbWl0KHBvcnRsZXQpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jaGFydFR5cGVDaGFuZ2UubmV4dCh7XHJcbiAgICAgICAgbmV3SWQ6IHRoaXMucG9ydGxldC5uZXdJZCxcclxuICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VGhlbWVEYXRhKGUpIHtcclxuICAgIGNvbnN0IGlkID0gZS52YWx1ZTtcclxuICAgIGNvbnN0IHBvcnRsZXQgPSB0aGlzLnBvcnRsZXQ7XHJcbiAgICBjb25zdCB0aGVtZSA9IHRoaXMudGhlbWVEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcclxuICAgIGlmICghdGhlbWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnNldFRoZW1lLm5leHQoe1xyXG4gICAgICBuZXdJZDogcG9ydGxldC5uZXdJZCxcclxuICAgICAgdGhlbWU6IHRoZW1lLnZhbHVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQWRkT3JFZGl0UG9ydGxldCgpIHtcclxuICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgdGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiXHJcbiAgICAgICAgPyB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGVcclxuICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgaWYgKHRoaXMucG9ydGxldCAmJiB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuICAgICAgLy8gU01QMi0xNzY1NCDpnIDopoHlsIbpgInmi6nnmoQgZnJlcXVlbmN544CBaW52ZXN0b3LjgIF2aXN1YWwgdHlwZSDkv53lrZjliLAgY29uZmlnIOS4reeUqOadpeaLv+WPluWQjuerr+aVsOaNrlxyXG4gICAgICAvLyDkvYbmmK/lpoLmnpznm7TmjqXkv53lrZggdGhpcy5jb25maWcg5Lya5Ye6546wIFNNUDItMTg4Mzcg6L+Z5LiqIEJVR1xyXG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG4gICAgICBpZiAodGhpcy5oYXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpICYmXHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZFkubGVuZ3RoID4gMCB8fCB0aGlzLnNlbGVjdGVkU2Vjb25kWS5sZW5ndGggPiAwKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgICAgICBjb25maWdbXCJzZWxlY3RlZFlcIl0gPSB0aGlzLnNlbGVjdGVkWTtcclxuICAgICAgICAgIGNvbmZpZ1tcInNlbGVjdGVkU2Vjb25kWVwiXSA9IHRoaXMuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgICAgY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJuZXdjaGFydFwiKSB7XHJcbiAgICAgICAgICBjb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IHtcclxuICAgICAgICAgICAgY2hhcnRTZXR0aW5nczogdGhpcy5jaGFydFNldHRpbmdzLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uOiB0aGlzLmRpc3BsYXlPcHRpb24sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25maWcuc2VsZWN0ZWRNdWx0aXBsZXMgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZE11bHRpcGxlcztcclxuICAgICAgY29uZmlnLnNlbGVjdGVkSW52ZXN0b3IgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZEludmVzdG9yO1xyXG4gICAgICBjb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlID0gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlO1xyXG4gICAgICBjb25zdCBwb3J0bGV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wb3J0bGV0KTtcclxuICAgICAgcG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeShjb25maWcpO1xyXG4gICAgICAvLyDmlrDlop5EYXRhVGFibGXnsbvlnovvvIwg57yW6L6RUG9ybGV0XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0RGF0YU1hbmFnZXIoXHJcbiAgICAgICAgW3RoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKV0sXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5lZGl0UG9ydGxldCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW3BvcnRsZXRUeXBlXSxcclxuICAgICAgICB0aGlzLmRhc2hib2FyZC5pZCxcclxuICAgICAgICBwb3J0bGV0XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZy5maWVsZHMubWFwKChlbCkgPT4ge1xyXG4gICAgICAgIGVsLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIFtcIm5ld2NvbHVtblwiLCBcIm5ld2xpbmVcIiwgXCJuZXdjb2x1bW5saW5lXCJdLmluY2x1ZGVzKHBvcnRsZXRUeXBlKSAmJlxyXG4gICAgICAgICh0aGlzLnNlbGVjdGVkWS5sZW5ndGggPiAwIHx8IHRoaXMuc2VsZWN0ZWRTZWNvbmRZLmxlbmd0aCA+IDApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgICAgdGhpcy5jb25maWdbXCJzZWxlY3RlZFlcIl0gPSB0aGlzLnNlbGVjdGVkWTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1tcInNlbGVjdGVkU2Vjb25kWVwiXSA9IHRoaXMuc2VsZWN0ZWRTZWNvbmRZO1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwibmV3Y2hhcnRcIikge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcgPSB7XHJcbiAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICBkaXNwbGF5T3B0aW9uOiB0aGlzLmRpc3BsYXlPcHRpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5nZXRTZWxlY3REYXRhbWFydElkKCk7XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRkYXRhID0ge1xyXG4gICAgICAgIGlkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgICAgIG5ld0lkOiBcInBvcnRsZXRfXCIgKyB0aGlzLnBiZi5HdWlkKCksXHJcbiAgICAgICAgZGFzaGJvYXJkRGF0YVRhYmxlSWQ6IHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRJZCgpLFxyXG4gICAgICAgIGZpZ3VyZUNvZGU6IHRoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKSxcclxuICAgICAgICBjb2w6IDAsXHJcbiAgICAgICAgcm93OiAwLFxyXG4gICAgICAgIHNpemVYOiAyLFxyXG4gICAgICAgIHNpemVZOiAxLFxyXG4gICAgICAgIHBvc1g6IDAsXHJcbiAgICAgICAgcG9zWTogMCxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyksXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBkYXRlUG9ybGV0LmVtaXQocG9ydGxldGRhdGEpO1xyXG4gICAgICB0aGlzLnBvcnRsZXRzLmZvckVhY2goKHBvcnRsZXQpID0+IHtcclxuICAgICAgICBwb3J0bGV0LnJvdyArPSAxO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8g5paw5aKeRGF0YVRhYmxl57G75Z6L77yMIOaWsOWinlBvcmxldFxyXG4gICAgICB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNldERhdGFNYW5hZ2VyKFxyXG4gICAgICAgIFt0aGlzLmdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCldLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkT3JkZWxQb3J0bGV0Lm5leHQodGhpcy5kYXNoYm9hcmQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBiZi5wYWdlTG9hZGluZ18ubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbcG9ydGxldFR5cGVdLFxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkLmlkLFxyXG4gICAgICAgIHBvcnRsZXRkYXRhXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZWRpdFBvcnRsZXQoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlXHJcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICBpZiAoW1widGFibGVcIiwgXCJ0cmFuc3Bvc2VcIiwgXCJmaW5hbmNpYWxUYWJsZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgICAgICBlbC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KFxyXG4gICAgICAgICh4KSA9PiB4Lm5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnBvcnRsZXRzW2luZGV4XS5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgICAgIHRoaXMucG9ydGxldHNbaW5kZXhdLmZpZ3VyZUNvZGUgPSB0aGlzLmdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwb3J0bGV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wb3J0bGV0KTtcclxuICAgICAgICBwb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuICAgICAgICBwb3J0bGV0LmRhc2hib2FyZERhdGFUYWJsZUlkID0gdGhpcy5nZXRTZWxlY3REYXRhbWFydElkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQb3JsZXQuZW1pdChwb3J0bGV0KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpZCA9IHRoaXMucG9ydGxldC5pZCB8fCB0aGlzLnBvcnRsZXQubmV3SWQ7XHJcbiAgICAgIHRoaXMuY2hhcnRVcGRhdGUuZW1pdChpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hUYWIodHlwZSkge1xyXG4gICAgdGhpcy5jdXJyZW50VGFiID0gdHlwZTtcclxuICAgIHRoaXMub25Ub2dnbGVUYWJhY3RpdmUuZW1pdCghdGhpcy50YWJhY3RpdmUpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRFZGl0Lm5leHQodGhpcy5kYXNoYm9hcmRJZCk7XHJcbiAgfVxyXG5cclxuICBnYWRnZXRUaXRsZUNoYW5nZShuZXdPYmopIHtcclxuICAgIGlmICghdGhpcy5wb3J0bGV0IHx8ICF0aGlzLnBvcnRsZXQuY29uZmlnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuICAgIHRoaXMuY29uZmlnLmdhZGdldFRpdGxlID0gbmV3T2JqO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleChcclxuICAgICAgKHgpID0+IHgubmV3SWQgPT09IHRoaXMucG9ydGxldC5uZXdJZFxyXG4gICAgKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XS5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnBvcnRsZXRUaXRsZS5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YWJpbmQoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0bGV0KSB7XHJcbiAgICAgIGNvbnN0IHsgZGF0YU1hcnRUYWJsZXMgPSB7fSB9ID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZTtcclxuICAgICAgbGV0IGZpZ3VyZUNvZGUgPSB0aGlzLnBvcnRsZXQuZmlndXJlQ29kZTtcclxuICAgICAgZGF0YU1hcnRUYWJsZXNbdGhpcy5kYXNoYm9hcmQuaWRdLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5kYXRhbWFydENvZGUgPT09IGZpZ3VyZUNvZGUgJiYgaXRlbS5wcmVmaXgpIHtcclxuICAgICAgICAgIGZpZ3VyZUNvZGUgPSBpdGVtLnByZWZpeDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXRhTWFydFRhYmxlTGlzdCAmJlxyXG4gICAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QubGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRhbWFydENvZGUgPT09IGZpZ3VyZUNvZGUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZGF0YU1hcnRUYWJsZUxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEucHJlZml4ID09PSBmaWd1cmVDb2RlKSB7XHJcbiAgICAgICAgICAgIGZpZ3VyZUNvZGUgPSBkYXRhLmRhdGFtYXJ0Q29kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gZmlndXJlQ29kZTtcclxuICAgICAgdGhpcy5jb25maWcgPSB7fTtcclxuICAgICAgaWYgKHRoaXMucG9ydGxldC5jb25maWcpIHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuICAgICAgdGhpcy5oYXNNYXJrZXIgPSB0aGlzLmNvbmZpZy5oYXNNYXJrZXI7XHJcbiAgICAgIHRoaXMubWFya2VyRm9ybWF0ID0gdGhpcy5jb25maWcubWFya2VyRm9ybWF0IHx8IFwiXCI7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb25maWcucG9ydGxldFR5cGUgPT09IFwiaGlzdG9yaWNhbElSUlwiKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IHRoaXMuY29uZmlnLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlc3RvciA9IHRoaXMuY29uZmlnLnNlbGVjdGVkSW52ZXN0b3I7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGUgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGU7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0VHlwZSA9IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBvcnRsZXRUeXBlID1cclxuICAgICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICAgID8gdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlXHJcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLnBvcnRsZXRUeXBlO1xyXG4gICAgICBpZiAoW1wibmV3Y29sdW1uXCIsIFwibmV3bGluZVwiLCBcIm5ld2NvbHVtbmxpbmVcIl0uaW5jbHVkZXMocG9ydGxldFR5cGUpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFggPSB0aGlzLl9zZWxlY3RlZFg7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFkgPSB0aGlzLl9zZWxlY3RlZFk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkgPSB0aGlzLl9zZWxlY3RlZFNlY29uZFk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlcyA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGhlbWUgPSB0aGlzLl9zZWxlY3RUaGVtZTtcclxuICAgICAgICB0aGlzLnBvcnRsZXRUeXBlID0gdGhpcy5jb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKHRoaXMucG9ydGxldC5maWd1cmVDb2RlLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJuZXdjaGFydFwiKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0bGV0VHlwZSA9IFwibmV3Y2hhcnRcIjtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZykge1xyXG4gICAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnB2dGFibGVDaGFydFNldHRpbmcuY2hhcnRTZXR0aW5ncy5wYWxldHRlcykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHBhbGV0dGVzIH0gPSB0aGlzLmNvbmZpZy5wdnRhYmxlQ2hhcnRTZXR0aW5nLmNoYXJ0U2V0dGluZ3M7XHJcbiAgICAgICAgICAgIGlmIChwYWxldHRlcyAmJiBwYWxldHRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRoZW1lID0gdGhpcy50aGVtZURhdGEuZmluZChcclxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICAvLyDnlKjkuo7liKTmlq3kuKTkuKpcclxuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaXRlbS52YWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KHBhbGV0dGVzKVxyXG4gICAgICAgICAgICAgICkuaWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWcucHZ0YWJsZUNoYXJ0U2V0dGluZyA9IHtcclxuICAgICAgICAgICAgZGlzcGxheU9wdGlvbjogdGhpcy5kaXNwbGF5T3B0aW9uLFxyXG4gICAgICAgICAgICBjaGFydFNldHRpbmdzOiB0aGlzLmNoYXJ0U2V0dGluZ3MsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGFtYXJ0ID0gXCJcIjtcclxuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmdldENvbmZpZyhbXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRDb25maWcoZmllbGRzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJJZDogdGhpcy5hY3RpdmVUYWJJZCxcclxuICAgICAgdGFiTGFiZWw6IHRoaXMuYWN0aXZlVGFiTGFiZWwsXHJcbiAgICAgIHBvcnRsZXRUeXBlOiBcIlwiLFxyXG4gICAgICBnYWRnZXRUaXRsZTogXCJcIixcclxuICAgICAgaXNVcFRvRGF0ZTogZmFsc2UsXHJcbiAgICAgIHBlcmlvZDogMyxcclxuICAgICAgcGFnZWJyZWFrOiBmYWxzZSxcclxuICAgICAgdGltZU1lYXN1cmU6IFwiTVREXCIsXHJcbiAgICAgIHNlcmllczogW10sXHJcbiAgICAgIHNTZXJpZXM6IFtdLFxyXG4gICAgICB0cmVuZHNPcmRlcjogMSxcclxuICAgICAgc2hvd1RyZW5kczogdHJ1ZSxcclxuICAgICAgbnVtYmVyRm9ybWF0OiBcIiMsIyMwXCIsXHJcbiAgICAgIHNob3dDdXJyZW50RGF0YTogZmFsc2UsXHJcbiAgICAgIGZpZWxkczogZmllbGRzLFxyXG4gICAgICBhbGxGaWVsZHM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9URVhUX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCB0ZXh0IGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9EQVRFX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBkYXRlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sTmFtZTogXCJBTExfTlVNQkVSX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBudW1iZXIgZmllbGRzXCIsXHJcbiAgICAgICAgICBkYXRhVHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbE5hbWU6IFwiQUxMX0lOVEVHRVJfRklFTERTXCIsXHJcbiAgICAgICAgICBsYW5nVmFsdWU6IFwiQWxsIGludGVnZXIgZmllbGRzXCIsXHJcbiAgICAgICAgICBkYXRhVHlwZTogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2xOYW1lOiBcIkFMTF9QRVJDRU5UQUdFX0ZJRUxEU1wiLFxyXG4gICAgICAgICAgbGFuZ1ZhbHVlOiBcIkFsbCBwZXJjZW50YWdlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwicGVyY2VudFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sTmFtZTogXCJBTExfTVVMVElQTEVfRklFTERTXCIsXHJcbiAgICAgICAgICBsYW5nVmFsdWU6IFwiQWxsIG11bHRpcGxlIGZpZWxkc1wiLFxyXG4gICAgICAgICAgZGF0YVR5cGU6IFwibXVsdGlwbGVcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgZmlsdGVyU2V0dGluZ3M6IFtdLFxyXG4gICAgICBjb2x1bW5Hcm91cDogW10sXHJcbiAgICAgIGxpc3RPZkludmVzdGVlSWQ6IFtdLFxyXG4gICAgICBpbnZlc3RlZUlkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxyXG4gICAgICBncm91cEJ5OiBcIlwiLFxyXG4gICAgICBncm91cHM6IFtdLFxyXG4gICAgICBhc09mRGF0ZTogXCJcIixcclxuICAgICAgY3VycmVuY3lDb2RlOiBcIlwiLFxyXG4gICAgICBmdW5kSWQ6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXHJcbiAgICAgIHhheGlzOiB7IGdyb3VwczogW10gfSxcclxuICAgICAgeWF4aXM6IHtcclxuICAgICAgICBzZXJpZXM6IFt7IHBvcnRsZXRUeXBlOiBcIlwiLCBjb2xOYW1lOiBcIlwiLCBjYWxNZXRob2Q6IFwiXCIgfV0sXHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiBbXSxcclxuICAgICAgY29sdW1uc1dpZHRoOiBbXSxcclxuICAgICAgc29ydFNldHRpbmdzOiBbXSxcclxuICAgICAgZ3JvdXBTZXR0aW5nczogW10sXHJcbiAgICAgIHZhbHVlU29ydFNldHRpbmdzOiB7fSxcclxuICAgICAgc2hvd0dyYW5kVG90YWxzOiB0cnVlLFxyXG4gICAgICBzaG93Um93R3JhbmRUb3RhbHM6IHRydWUsXHJcbiAgICAgIHNob3dDb2x1bW5HcmFuZFRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd1N1YlRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1N1YlRvdGFsczogdHJ1ZSxcclxuICAgICAgc2hvd0NvbHVtblN1YlRvdGFsczogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJbnZlc3RvciA9IG51bGw7XHJcbiAgcHVibGljIGludmVzdG9yTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFZpc3VhbFR5cGUgPSBudWxsO1xyXG4gIHB1YmxpYyB2aXN1YWxUeXBlTGlzdCA9IFtdO1xyXG5cclxuICAvLyBoaXN0b3JpY2FsIElSUiBmcmVxdWVuY3kg5LiN6ZyA6KaBIERhaWx5XHJcbiAgZ2V0IGZyZXF1ZW5jeU9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZXNMaXN0LmZpbHRlcigoaSkgPT4gaS5sYW5nQ29kZSAhPT0gXCJEQUlMWVwiKTtcclxuICB9XHJcblxyXG4gIGluaXRIaXN0b3JpY2FsSVJST3B0aW9ucygpIHtcclxuICAgIGNvbnN0IGNoYXJ0VGV4dCA9IHRoaXMudHJhbnNsYXRpb24uQ09NUEFOWV9DSEFSVCB8fCBcIi5DT01QQU5ZX0NIQVJUXCI7XHJcbiAgICB0aGlzLmludmVzdG9yTGlzdCA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGNvZGU6IFwiQWxsXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5BTEwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjb2RlOiBcIkV4Y2x1ZGVHUCZTTFBcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uW1wiRVhDTFVERV9HUCZTTFBcIl0gfHwgXCIuRXhjbHVkZSBHUCZTTFBcIixcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnZpc3VhbFR5cGVMaXN0ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgY29kZTogXCJuZXdsaW5lXCIsXHJcbiAgICAgICAgdGV4dDogYCR7dGhpcy50cmFuc2xhdGlvbi5MSU5FIHx8IFwiLkxJTkVcIn0gJHtjaGFydFRleHR9YCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGNvZGU6IFwibmV3Y29sdW1uXCIsXHJcbiAgICAgICAgdGV4dDogYCR7dGhpcy50cmFuc2xhdGlvbi5DT0xVTU59ICR7Y2hhcnRUZXh0fWAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjb2RlOiBcInRhYmxlXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5UQUJMRSB8fCBcIi5UQUJMRVwiLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRIaXN0b3JpY2FsSVJSUG9ydGxldCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbnZlc3RvciA9IFwiQWxsXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzID0gXCJRVUFSVEVSTFlcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRWaXN1YWxUeXBlID0gXCJuZXdsaW5lXCI7XHJcbiAgICB0aGlzLnNldEhpc3RvcmljYWxJUlJDaGFydChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBzZXRIaXN0b3JpY2FsSVJSQ2hhcnQob3BlbmVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAob3BlbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGUgIT09IFwidGFibGVcIiAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5zZWxlY3RlZFZpc3VhbFR5cGUgPT09IFwidGFibGVcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFzTWFya2VyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWcuc2VsZWN0ZWRWaXN1YWxUeXBlID0gdGhpcy5zZWxlY3RlZFZpc3VhbFR5cGU7XHJcbiAgICB0aGlzLmNvbmZpZy5zZWxlY3RlZEludmVzdG9yID0gdGhpcy5zZWxlY3RlZEludmVzdG9yO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWaXN1YWxUeXBlICE9PSBcInRhYmxlXCIpIHtcclxuICAgICAgLy8g6L+Z6YeM56Gu5a6aIHjjgIF5IOi9tOWtl+auteWQjeensFxyXG4gICAgICB0aGlzLnNlbGVjdGVkWCA9IFwiRGF0ZVwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkWSA9IFtcIklSUlwiXTtcclxuICAgICAgcmV0dXJuIHRoaXMueHlDaGFuZ2UoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcuc2VsZWN0ZWRNdWx0aXBsZXMgPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkWDogYW55ID0gbnVsbDtcclxuICBzZWxlY3RlZFk6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU2Vjb25kWTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRNdWx0aXBsZXM6IGFueSA9IG51bGw7XHJcbiAgbWFya2VyRm9ybWF0ID0gXCJcIjtcclxuICBtYXJrZXJGb3JtYXRMaXN0ID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJcIixcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24uTk9ORSB8fCBcIi5Ob25lXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJLXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLlRIT1VTQU5EUyB8fCBcIi5UaG91c2FuZHNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBcIk1cIixcclxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24uTUlMTElPTlMgfHwgXCIuTWlsbGlvbnNcIixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBcImJuXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLkJJTExJT05TIHx8IFwiLkJpbGxpb25zXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogXCJUXCIsXHJcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLlRSSUxMSU9OUyB8fCBcIi5UcmlsbGlvbnNcIixcclxuICAgIH0sXHJcbiAgXTtcclxuICBoYXNNYXJrZXIgPSBmYWxzZTtcclxuXHJcbiAgbGFiZWxDb25maWdDaGFuZ2UoZSkge1xyXG4gICAgdGhpcy5jb25maWcuaGFzTWFya2VyID0gZTtcclxuICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoe1xyXG4gICAgICBuZXdJZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgICBjb25maWc6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnN3aXRjaExhYmVsQ29uZmlnLm5leHQoe1xyXG4gICAgICBjaGVja2VkOiBlLFxyXG4gICAgICBpZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB4eUNoYW5nZShlKSB7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGhlbWUuZW1pdCh7XHJcbiAgICAgICAgc2VsZWN0ZWRYOiB0aGlzLnNlbGVjdGVkWCxcclxuICAgICAgICBzZWxlY3RlZFk6IHRoaXMuc2VsZWN0ZWRZLFxyXG4gICAgICAgIHNlbGVjdGVkTXVsdGlwbGVzOiB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzLFxyXG4gICAgICAgIHNlbGVjdGVkU2Vjb25kWTogdGhpcy5zZWxlY3RlZFNlY29uZFksXHJcbiAgICAgICAgc2VsZWN0VGhlbWU6IHRoaXMuc2VsZWN0VGhlbWUsXHJcbiAgICAgICAgaGFzTWFya2VyOiB0aGlzLmhhc01hcmtlcixcclxuICAgICAgICBtYXJrZXJGb3JtYXQ6IHRoaXMubWFya2VyRm9ybWF0LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29uZmlnW1wibWFya2VyRm9ybWF0XCJdID0gdGhpcy5tYXJrZXJGb3JtYXQ7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wiaGFzTWFya2VyXCJdID0gdGhpcy5oYXNNYXJrZXI7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRYXCJdID0gdGhpcy5zZWxlY3RlZFg7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRZXCJdID0gdGhpcy5zZWxlY3RlZFk7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRTZWNvbmRZXCJdID0gdGhpcy5zZWxlY3RlZFNlY29uZFk7XHJcbiAgICAgIHRoaXMuY29uZmlnW1wic2VsZWN0ZWRNdWx0aXBsZXNcIl0gPSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVzO1xyXG4gICAgICB0aGlzLmNvbmZpZ1tcInNlbGVjdFRoZW1lXCJdID0gdGhpcy5zZWxlY3RUaGVtZTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlUG9ybGV0Q29uZmlnLmVtaXQoe1xyXG4gICAgICAgIG5ld0lkOiB0aGlzLnBvcnRsZXQubmV3SWQsXHJcbiAgICAgICAgY29uZmlnOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZyksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdCgpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHNob3dFZGl0KCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBvcnRsZXRUeXBlID09IFwibmV3Y29sdW1ubGluZVwiICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRZLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZFkubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuQWRkT3JFZGl0UG9ydGxldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9ydGxldFR5cGUgIT0gXCJuZXdjb2x1bW5saW5lXCIgJiYgdGhpcy5zZWxlY3RlZFkubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFkZE9yRWRpdFBvcnRsZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG11bHRpcGxlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIGdldG11bHRpcGxlc0xpc3QoKSB7XHJcbiAgICBjb25zdCB1cmwgPVxyXG4gICAgICB0aGlzLmFwcENvZGUgPT09IFwiUE1TXCJcclxuICAgICAgICA/IHRoaXMuYXBpLnVybExpc3QuTFBHZXRQcm9wZXJ0eUxpc3RcclxuICAgICAgICA6IHRoaXMuYXBpLnVybExpc3QuR2V0UHJvcGVydHlMaXN0O1xyXG4gICAgdGhpcy5odHRwLnBvc3QodXJsLCB7IHNjb3BlOiBcIkRBU0hCT0FSRF9GUkVRVUVOQ1lcIiwgbGFuZ0lkeDogMiB9LCAocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVzTGlzdCA9IHJlcztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FwaXRhbGl6ZShzdHIpIHtcclxuICAgIC8vIOWwhuWtl+espuS4sui9rOaNouS4uuWwj+WGme+8jOW5tuS9v+eUqOato+WImeihqOi+vuW8j+Wwhuavj+S4quWNleivjeeahOesrOS4gOS4quWtl+espui9rOaNouS4uuWkp+WGmVxyXG4gICAgaWYgKCFzdHIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcYlxcdy9nLCBmdW5jdGlvbiAoY2hhcikge1xyXG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3REYXRhbWFydElkKCkge1xyXG4gICAgLy8g6I635Y+W55yf5q2j55qERGF0YW1hcnRJRFxyXG4gICAgY29uc3QgY29kZSA9IHRoaXMuZ2V0VHJ1ZVNlbGVjdGVkRGF0YW1hcnQoKTtcclxuICAgIGxldCBkYXRhTWFydFRhYmxlcyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZGF0YU1hcnRUYWJsZXNbXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmlkXHJcbiAgICBdLmZpbHRlcigoZWwpID0+IGNvZGUgPT0gZWwuZGF0YW1hcnRDb2RlKTtcclxuICAgIGlmIChkYXRhTWFydFRhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBkYXRhTWFydFRhYmxlc1swXS5pZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRydWVTZWxlY3RlZERhdGFtYXJ0KCkge1xyXG4gICAgY29uc3QgcG9ydGxldFR5cGUgPVxyXG4gICAgICB0aGlzLmNvbmZpZy5wb3J0bGV0VHlwZSA9PT0gXCJoaXN0b3JpY2FsSVJSXCJcclxuICAgICAgICA/IHRoaXMuY29uZmlnLnNlbGVjdGVkVmlzdWFsVHlwZVxyXG4gICAgICAgIDogdGhpcy5jb25maWcucG9ydGxldFR5cGU7XHJcbiAgICAvLyDojrflj5bnnJ/mraPnmoREYXRhbWFydENvZGVcclxuICAgIGlmIChbXCJuZXdjb2x1bW5cIiwgXCJuZXdsaW5lXCIsIFwibmV3Y29sdW1ubGluZVwiXS5pbmNsdWRlcyhwb3J0bGV0VHlwZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0RGF0YW1hcnRDb2RlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGFtYXJ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0RGF0YW1hcnRDb2RlKCkge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZGF0YU1hcnRUYWJsZXNbXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmlkXHJcbiAgICBdLmZpbHRlcigoZSkgPT4ge1xyXG4gICAgICByZXR1cm4gZVtcImRhdGFtYXJ0Q29kZVwiXSA9PSB0aGlzLnNlbGVjdGVkRGF0YW1hcnQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChpdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGl0ZW1bMF1bXCJwcmVmaXhcIl0pIHtcclxuICAgICAgICByZXR1cm4gYCR7aXRlbVswXVtcInByZWZpeFwiXX0ke1xyXG4gICAgICAgICAgdGhpcy5jYXBpdGFsaXplKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMpIHx8IFwiXCJcclxuICAgICAgICB9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaXRlbVswXVtcImRhdGFtYXJ0Q29kZVwiXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUaGVtZTogYW55ID0gXCJ0aGVtZTFcIjtcclxuICBjaGFuZ2VUaGVtZShlLCB0eXBlKSB7XHJcbiAgICB0aGlzLnNlbGVjdFRoZW1lID0gZS52YWx1ZTtcclxuICAgIHRoaXMuY29uZmlnW1wic2VsZWN0VGhlbWVcIl0gPSB0aGlzLnNlbGVjdFRoZW1lO1xyXG4gICAgdGhpcy51cGRhdGVUaGVtZS5lbWl0KHtcclxuICAgICAgc2VsZWN0ZWRYOiB0aGlzLnNlbGVjdGVkWCxcclxuICAgICAgc2VsZWN0ZWRZOiB0aGlzLnNlbGVjdGVkWSxcclxuICAgICAgc2VsZWN0ZWRNdWx0aXBsZXM6IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZXMsXHJcbiAgICAgIHNlbGVjdGVkU2Vjb25kWTogdGhpcy5zZWxlY3RlZFNlY29uZFksXHJcbiAgICAgIHNlbGVjdFRoZW1lOiB0aGlzLnNlbGVjdFRoZW1lLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNob3dFZGl0KCk7XHJcbiAgfVxyXG5cclxuICBzb3J0RGF0YU1hcnRUYWJsZXMoZGF0YSkge1xyXG4gICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhbmdWYWx1ZUEgPSBhLmxhbmdWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBsYW5nVmFsdWVCID0gYi5sYW5nVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgIGlmIChsYW5nVmFsdWVBIDwgbGFuZ1ZhbHVlQikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGFuZ1ZhbHVlQSA+IGxhbmdWYWx1ZUIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VGb3JtYXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UubWFya2VyRm9ybWF0Lm5leHQoe1xyXG4gICAgICBuZXdJZDogdGhpcy5wb3J0bGV0Lm5ld0lkLFxyXG4gICAgICBtYXJrZXJGb3JtYXQ6IHRoaXMubWFya2VyRm9ybWF0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|