qms-angular 1.0.97 → 1.1.1
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/bundles/qms-angular.umd.js +65 -41
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +2 -1
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +4 -1
- package/esm2015/lib/components/list/list.js +2 -2
- package/esm2015/lib/components/qms-paginator/qms-paginator.component.js +4 -4
- package/esm2015/lib/components/select-one/select-one.component.js +26 -5
- package/esm2015/lib/components/select-one/service/select-one-global.service.js +5 -1
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +4 -4
- package/esm2015/lib/components/tree/tree.component.js +19 -23
- package/esm2015/lib/components/tree/tree.function.js +2 -2
- package/fesm2015/qms-angular.js +62 -38
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/select-one/select-one.component.d.ts +1 -1
- package/lib/components/select-one/service/select-one-global.service.d.ts +3 -0
- package/lib/components/select-process-document/select-process-document.component.d.ts +1 -1
- package/lib/components/tree/tree.component.d.ts +0 -1
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
- package/src/assets/jointjs/scss/dist/bpmn.css +854 -0
- package/src/assets/qms-ckeditor-plugin/package-lock.json +151 -601
- package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +173 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
- package/src/lib/components/list/list.scss +2 -2
@@ -321,7 +321,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
321
321
|
}
|
322
322
|
if (index < 0) {
|
323
323
|
if (item.itemType === this.dataType.document || item.itemType === this.dataType.folder) {
|
324
|
-
// document
|
324
|
+
// document
|
325
325
|
const isExistInDisabled = this.disabledList2.findIndex(x => {
|
326
326
|
var _a, _b, _c;
|
327
327
|
return ((_a = x.id) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === item.id.toLowerCase() && (!item.parentId || ((_b = x.parentId) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === ((_c = item.parentId) === null || _c === void 0 ? void 0 : _c.toLowerCase()) && x.itemType === item.itemType);
|
@@ -673,7 +673,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
673
673
|
this.onExpandFolder.emit(item);
|
674
674
|
}
|
675
675
|
canShowSearchOption(moduleId) {
|
676
|
-
return this.getModuleFilteredOptions(moduleId).length
|
676
|
+
return this.getModuleFilteredOptions(moduleId).length;
|
677
677
|
}
|
678
678
|
selectNodeTreeEvent(node) {
|
679
679
|
if (!node.itemType) {
|
@@ -780,7 +780,7 @@ export class SelectProcessDocumentPopupComponent {
|
|
780
780
|
SelectProcessDocumentPopupComponent.decorators = [
|
781
781
|
{ type: Component, args: [{
|
782
782
|
selector: 'qms-select-process-document',
|
783
|
-
template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ moduleName | uppercase }}</span>\r\n </div>\r\n </div>\r\n\r\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n (optionSelected)=\"selectRelated($event.option.value)\"\r\n [displayWith]=\"displayWhenSelectRelatedOption\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n [class.related-viewport]=\"isInputValue\"\r\n *ngIf=\"filteredOptions.length\"\r\n >\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"canShowSearchOption(type.value)\"\r\n >\r\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n type=\"image-square\"\r\n [svgIcon]=\"getNodeIcon(option)\"\r\n ></mat-icon>\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div\r\n class=\"caption\"\r\n *ngIf=\"option.breadcumbs && option.breadcumbs.length\"\r\n >\r\n <qms-breadcrumb\r\n class=\"breadcrumb-containe\"\r\n type=\"table\"\r\n numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\"\r\n >\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length,\r\n 'col-6': splitView,\r\n 'col-12': !splitView\r\n }\"\r\n >\r\n <mat-expansion-panel\r\n hideToggle\r\n id=\"qmslib_related_popup_common_001\"\r\n [expanded]=\"isCommonExpanded\"\r\n (opened)=\"isCommonExpanded = true\"\r\n (closed)=\"isCommonExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\r\n {{ LANG.PROCESSES | uppercase }}\r\n </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData1\"\r\n [treeConfig]=\"treeConfig1\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n <div\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n class=\"line__divider\"\r\n ></div>\r\n\r\n <mat-expansion-panel\r\n hideToggle\r\n *ngIf=\"moduleId === module.documentProcess\"\r\n id=\"qmslib_related_popup_document_001\"\r\n [expanded]=\"isDocumentExpanded\"\r\n (opened)=\"isDocumentExpanded = true\"\r\n (closed)=\"isDocumentExpanded = false\"\r\n class=\"panel-tree\"\r\n >\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title> {{ LANG.DOCUMENTS | uppercase }} </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isDocumentExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_document_002\">\r\n <qms-tree-new\r\n [treeData]=\"treeData2\"\r\n [treeConfig]=\"treeConfig2\"\r\n [selectedData]=\"selectedData2\"\r\n [disabledList]=\"disabledList2\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\"\r\n [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\"\r\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"\r\n ></qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n <div\r\n *ngIf=\"splitView\"\r\n class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\"\r\n >\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\"\r\n *ngIf=\"!hideSplitviewCheckbox\"\r\n >\r\n </mat-checkbox>\r\n <button\r\n class=\"button-boder\"\r\n mat-icon-button\r\n [disableRipple]=\"true\"\r\n (click)=\"toggleSelectItem(node)\"\r\n *ngIf=\"node.itemName\"\r\n >\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n >\r\n </mat-icon>\r\n </button>\r\n <span\r\n class=\"text-node-item\"\r\n style=\"cursor: pointer\"\r\n (click)=\"toggleSelectItem(node)\"\r\n [class.bgSelected]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >\r\n <span\r\n class=\"text-node\"\r\n [class.select-one-checked]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.itemName }}</span\r\n >\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >\r\n done\r\n </mat-icon>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>{{\r\n getItemChipName(item)\r\n }}</span>\r\n <mat-icon\r\n *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n",
|
783
|
+
template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ moduleName | uppercase }}</span>\r\n </div>\r\n </div>\r\n\r\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\r\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n\r\n\r\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\r\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\r\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\r\n *ngIf=\"filteredOptions.length\">\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\r\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\r\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\r\n [value]=\"option\" [disabled]=\"option.disabled\">\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\r\n <qms-breadcrumb class=\"breadcrumb-containe\" type=\"table\" numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\">\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n\r\n <div class=\"row\">\r\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length,\r\n 'col-6': splitView,\r\n 'col-12': !splitView\r\n }\">\r\n <ng-container *ngIf=\"treeData1.length > 0\">\r\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\r\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\r\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\r\n {{ LANG.PROCESSES | uppercase }}\r\n </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree-new [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.area)\" [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeProcess($event)\">\r\n </qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"treeData2.length > 0\">\r\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\r\n\r\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\r\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\r\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\r\n <mat-expansion-panel-header class=\"padding-5\">\r\n <mat-panel-title> {{ LANG.DOCUMENTS | uppercase }} </mat-panel-title>\r\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\r\n <mat-icon>\r\n {{\r\n isDocumentExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\r\n }}\r\n </mat-icon>\r\n </button>\r\n </mat-expansion-panel-header>\r\n <div id=\"qmslib_related_popup_document_002\">\r\n <qms-tree-new [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\r\n [disabledList]=\"disabledList2\" (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n (selectFolderEvent)=\"getItemOfFolder($event, dataType.folder)\" [expandOnTitleClick]=\"!splitView\"\r\n [parentNodeOnClick]=\"parentNodeSelected\" (treeControlNodes)=\"selectTreeControlNodeDocument($event)\">\r\n </qms-tree-new>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\">\r\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\r\n {{ splitViewTitle }}\r\n </div>\r\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\r\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\r\n (change)=\"toggleSelectItem(node)\" *ngIf=\"!hideSplitviewCheckbox\">\r\n </mat-checkbox>\r\n <button class=\"button-boder\" mat-icon-button [disableRipple]=\"true\" (click)=\"toggleSelectItem(node)\"\r\n *ngIf=\"node.itemName\">\r\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\">\r\n </mat-icon>\r\n </button>\r\n <span class=\"text-node-item\" style=\"cursor: pointer\" (click)=\"toggleSelectItem(node)\" [class.bgSelected]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \">\r\n <span class=\"text-node\" [class.select-one-checked]=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \">{{ node.itemName }}</span>\r\n <mat-icon class=\"select-one-checked\" *ngIf=\"\r\n isSelectOne &&\r\n idCheckIconSplitView == idToCheckSelectOne(node.id, node.parentId)\r\n \">\r\n done\r\n </mat-icon>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\" mode=\"dark\">\r\n <span class=\"related__item__content_name\" #itemName>{{\r\n getItemChipName(item)\r\n }}</span>\r\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\" (click)=\"removeCheckedNodeList(item)\">\r\n cancel</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"line__divider\"></div>\r\n\r\n <div class=\"confirm__button__groups\">\r\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\" (click)=\"onAddClick()\">\r\n {{ LANG.ADD }}\r\n </button>\r\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\" (click)=\"onAddClick()\">\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n",
|
784
784
|
encapsulation: ViewEncapsulation.None,
|
785
785
|
styles: ["::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:var(--text-white);padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:var(--button-red-background);margin-left:10px}.qms__danger .yellow{background-color:var(--button-yellow-background);margin-left:10px;color:var(--popup-title-color)}.qms__danger .green{background-color:var(--button-green-background);margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:var(--button-background)}.confirm__button__groups .confirm:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:var(--button-background)}.confirm__button__groups .cancel:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:var(--related-item-background);max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:var(--related-mat-icon-color);font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .text-node-item{margin-left:8px;display:flex;align-items:center;min-height:32px;justify-content:space-between;width:100%}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .text-node-item .select-one-checked{color:var(--primary)}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:300px}"]
|
786
786
|
},] }
|
@@ -801,4 +801,4 @@ SelectProcessDocumentPopupComponent.propDecorators = {
|
|
801
801
|
autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
|
802
802
|
onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
|
803
803
|
};
|
804
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFD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LENBQUMsUUFBa0M7UUFDL0MsTUFBTSxPQUFPLEdBQTZCLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxpQ0FBTSxPQUFPLEtBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUcsQ0FBQztTQUNyRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsUUFBZ0I7UUFDM0MsT0FBTyxHQUFHLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7WUF6ekJKLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2Qyx5bFZBQXVEO2dCQUV2RCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OztZQTdCMEIsaUJBQWlCO1lBWW5DLHVCQUF1QjtZQVR2QixZQUFZO1lBa0JaLHFDQUFxQztZQWpCckMsZUFBZTtZQUNmLFlBQVk7WUFRWixzQkFBc0I7WUFiMEIsVUFBVTtZQWtCMUQsOEJBQThCLHVCQWdGOUIsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGdCQUFnQixFQUFFLEVBQUU7MkJBRWpDLFNBQVMsU0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQXlDbkYsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSSwgUCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBSZWxhdGVkQ29uc3QgfSBmcm9tICcuLi8uLi9jb21tb24vcmVsYXRlZC5jb25zdCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVGbGF0Tm9kZSB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdUcmVlTW9kZWwgfSBmcm9tICcuLi90cmVlTmV3L21vZGVsL3RyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJlZU5ldy90cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gJy4vbW9kZWxzL3BvcC11cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0gfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1wcm9jZXNzLWRvY3VtZW50LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC1nbG9iYWwuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIG1vZHVsZUlkID0gMDtcclxuICAgIG1vZHVsZU5hbWUgPSAnJztcclxuICAgIHRyZWVEYXRhMTogQXJyYXk8TmV3VHJlZU1vZGVsPiA9IFtdO1xyXG4gICAgdHJlZURhdGEyOiBBcnJheTxOZXdUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnMTogVHJlZUNvbmZpZztcclxuICAgIHRyZWVDb25maWcyOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWROb2RlOiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgICBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTI6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuXHJcbiAgICBjb21tb25DaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgZG9jdW1lbnRDaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgc2luZ2xlUHJvY2Vzc0xpc3Q6IEFycmF5PFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbT4gPSBbXTtcclxuICAgIHNpbmdsZURvY3VtZW50TGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gICAgc3BsaXRWaWV3OiBib29sZWFuO1xyXG5cclxuICAgIG1vZHVsZSA9IE1vZHVsZVR5cGU7XHJcbiAgICBkYXRhVHlwZSA9IERhdGFUeXBlO1xyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xyXG4gICAgZGlzYWJsZWRMaXN0MjogYW55ID0gW107XHJcbiAgICBpc1NlbGVjdE9uZTogYm9vbGVhbjtcclxuICAgIGNhbk9ubHlTZWxlY3RJdGVtOiBib29sZWFuO1xyXG5cclxuICAgIGlzRG9jdW1lbnRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICBpc0NvbW1vbkV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xyXG4gICAgc2VhcmNoT3JkZXIgPSBbXTtcclxuXHJcbiAgICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIGZpbHRlcmVkT3B0aW9uczogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBpdGVtSW5TcGxpdHZpZXc6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgc2VsZWN0ZWRGb2xkZXI6IFRyZWVGbGF0Tm9kZSA9IG51bGw7XHJcbiAgICBzcGxpdFZpZXdUaXRsZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxpc3RDaGlsZHJlblNlbGVjdE9uZTogYW55ID0gW107XHJcblxyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvblNlbGVjdEZvbGRlckl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgICBvbkV4cGFuZFByb2Nlc3NBcmVhID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xyXG4gICAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICB0cmVlQ29udHJvbE5vZGVQcm9jZXNzOiBhbnk7XHJcbiAgICB0cmVlQ29udHJvbE5vZGVEb2N1bWVudDogYW55O1xyXG4gICAgaWRDaGVja0ljb25TcGxpdFZpZXcgPSAnJztcclxuICAgIGhpZGVTcGxpdHZpZXdDaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oTmV3VHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PE5ld1RyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLm1vZHVsZUlkID0gZGF0YS5tb2R1bGVJZDtcclxuICAgICAgICB0aGlzLm1vZHVsZU5hbWUgPSBkYXRhLm1vZHVsZU5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBkYXRhLnRyZWVEYXRhMTtcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IGRhdGEudHJlZURhdGEyO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZzEgPSBkYXRhLnRyZWVDb25maWcxO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZzIgPSBkYXRhLnRyZWVDb25maWcyO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSA9IGRhdGEudHJlZUNvbmZpZzEuc2luZ2xlU2VsZWN0ZWROb2RlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gZGF0YS5kaXNhYmxlZExpc3QgfHwgW107XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QyID0gZGF0YS5kaXNhYmxlZExpc3QyIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuc3BsaXRWaWV3ID0gZGF0YS5zcGxpdFZpZXc7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9uZSA9IGRhdGEuaXNTZWxlY3RPbmU7XHJcbiAgICAgICAgdGhpcy5jYW5Pbmx5U2VsZWN0SXRlbSA9IGRhdGEuY2FuT25seVNlbGVjdEl0ZW07XHJcbiAgICAgICAgdGhpcy5oaWRlU3BsaXR2aWV3Q2hlY2tib3ggPSBkYXRhLmhpZGVTcGxpdHZpZXdDaGVja2JveDtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gUmVsYXRlZENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy50b1JlbGF0ZWRPcHRpb25zKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc3BsaXRWaWV3VmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGlzdE5vZGVQcm9jZXNzOiBOZXdUcmVlTW9kZWxbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpc3ROb2RlRG9jczogTmV3VHJlZU1vZGVsW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3Tm9kZVByb2Nlc3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcclxuICAgICAgICAgICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3Muc3RhdHVzSWQgPSBpdGVtLnN0YXR1cztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Tm9kZVByb2Nlc3MucHVzaChuZXdOb2RlUHJvY2Vzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Tm9kZURvY3MucHVzaChuZXdOb2RlRG9jcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RQcm9jZXNzOiBUcmVlRmxhdE5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6ICh4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguaXRlbVR5cGUgPT09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MucHVzaChuZXdOb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5ld05vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnNlbGVjdFByb2Nlc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCAuLi5zZWxlY3REb2N1bWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zcGxpdFZpZXcgJiYgdGhpcy5pc1NlbGVjdE9uZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZSh0aGlzLmNoZWNrZWROb2RlTGlzdFswXS5pZCwgdGhpcy5jaGVja2VkTm9kZUxpc3RbMF0ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5nZXRQcm9jZXNzQXJlYUNoaWxkcmVuLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKXtcclxuICAgICAgICAgICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RTaG93bkNoaWxkcmVuLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMSA9IFsuLi50aGlzLnRyZWVEYXRhMSwgLi4ubm90U2hvd25DaGlsZHJlbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLmdldEZvbGRlckNoaWxkcmVuLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKXtcclxuICAgICAgICAgICAgICAgIGxldCBub3RTaG93bkNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgICByZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGEyLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IHgucGFyZW50SWQgJiYgeC5leHBhbmRhYmxlID09IGl0ZW0uZXhwYW5kYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RTaG93bkNoaWxkcmVuLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IFsuLi50aGlzLnRyZWVEYXRhMiwgLi4ubm90U2hvd25DaGlsZHJlbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUucHJvY2VzcztcclxuICAgICAgICB0aGlzLnNlYXJjaE9yZGVyID0gdGhpcy5nZXRTZWFyY2hPcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBjb25zdCB0ZW1wQXJyID0gW107XHJcbiAgICAgICAgY29uc3QgdGVtcEFyckRvY3VtZW50ID0gW107XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0UHJvY2Vzc0xpc3QgPSBbXTtcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3REb2N1bWVudExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tb25DaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0UHJvY2Vzc0xpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QgPSBuZXdTZWxlY3RQcm9jZXNzTGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50ZW1wQXJyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQXJyRG9jdW1lbnQucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdERvY3VtZW50TGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdCA9IG5ld1NlbGVjdERvY3VtZW50TGlzdDtcclxuICAgICAgICBpZih0ZW1wQXJyRG9jdW1lbnQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50ZW1wQXJyRG9jdW1lbnRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSkge1xyXG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSA0ODQ7XHJcbiAgICAgICAgY29uc3QgcG9wdXBfY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Ftc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQnKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaW5lX19kaXZpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGluZV9fZGl2aWRlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChwb3B1cF9jb250ZW50ICYmIGxpbmVfX2RpdmlkZXIpIHtcclxuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodmlld3JlcG9ydHMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0IDw9IG1heEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgKF92YWwpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoISFfdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoX3ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbC5pZCA9PT0gc2Vjb25kRWwuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZWFyY2hSZXN1bHQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RSZWxhdGVkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICYmIHguaXRlbVR5cGUgPT09IGl0ZW0uaXRlbVR5cGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50IHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2N1bWVudCAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0Mi5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcclxuICAgICAgICAgICAgICAgIH0pID49IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRXhpc3RJbkRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5hcmVhIHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUucHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAmJiB4Lml0ZW1UeXBlID09PSBpdGVtLml0ZW1UeXBlKTtcclxuICAgICAgICAgICAgICAgIH0pID49IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdEluRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTm9kZVRvVHJlZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKXtcclxuICAgICAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLm5hbWUgPSBpdGVtLml0ZW1OYW1lO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c05hbWUgPSBpdGVtPy5bJ3N0YXR1c05hbWUnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8ICBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWE/IHRydWU6IGZhbHNlO1xyXG4gICAgICAgIGlmKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApID49IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIgPSBbLi4udGhpcy50cmVlRGF0YTIsIG5ld05vZGVEb2NzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSApID49IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIG5ld05vZGVEb2NzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NoZWNrbGlzdE5vZGUoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSl7XHJcbiAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmlkID0gaXRlbS5pZDtcclxuICAgICAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgbmV3Tm9kZURvY3Muc3RhdHVzSWQgPSBpdGVtPy5bJ2l0ZW1TdGF0dXMnXTtcclxuICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XHJcbiAgICAgICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xyXG4gICAgICAgIG5ld05vZGVEb2NzLmV4cGFuZGFibGUgPSBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCAgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICBpZih0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgKCFuZXdOb2RlRG9jcy5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBuZXdOb2RlRG9jcy5leHBhbmRhYmxlICk7XHJcbiAgICAgICAgaWYoaW5kZXggPCAwKXtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogbmV3Tm9kZURvY3MubGV2ZWxUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY29tbW9uQ2hlY2tlZExpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld05vZGVEb2NzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogaXRlbS5wYXJlbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLml0ZW1OdW1iZXJJZCxcclxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiBuZXdOb2RlRG9jcy5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogaXRlbS5zdGF0dXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogTnVtYmVyLnBhcnNlRmxvYXQoaXRlbS5pdGVtTnVtYmVySWQpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShpdGVtLmlkLCBuZXdOb2RlRG9jcy5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2VsZWN0ZWREYXRhKGl0ZW06IFRyZWVGbGF0Tm9kZSl7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0UHJvY2VzcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdERvY3VtZW50ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAoIXgucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UHJvY2Vzcy5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RG9jdW1lbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5pc1NlbGVjdE9uZSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgLi4uc2VsZWN0RG9jdW1lbnRdOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZERhdGEyLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIFxyXG4gICAgICAgICAgICAoIWl0ZW0ucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBpdGVtLmV4cGFuZGFibGUgKSA8IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZERhdGEuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgXHJcbiAgICAgICAgICAgICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSApIDwgMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgaXRlbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pe1xyXG4gICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWREYXRhKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcixcclxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcclxuICAgICAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIG9uQWRkQ2xpY2soKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzTmFtZShpZCkge1xyXG4gICAgICAgIGxldCBzdGF0dXNOYW1lID0gJydcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1c05hbWUgPSB4LnN0YXR1c05hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RhdHVzTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVEb2N1bWVudCh0cmVlTm9kZXMpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50ID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQuZGF0YU5vZGVzID0gdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKHRyZWVOb2Rlcykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gdHJlZU5vZGVzO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzLmZpbHRlcih4ID0+IHgubmFtZSAhPT0gbnVsbCAmJiB4Lm5hbWUgIT09ICcnKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzRG9jcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzUHJvY2VzcyhpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMS5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZWxtSGVpZ2h0ID0gMCwgZWxtTWFyZ2luID0gMDtcclxuXHJcbiAgICAgICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgIGVsbU1hcmdpbiA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luVG9wLnJlcGxhY2UoJ3B4JywgJycpKSArIHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tLnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vZGVJY29uKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5EZXBhcnRtZW50Rm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6IHtcclxuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VhcmNoT3JkZXIoKSB7XHJcbiAgICAgICAgbGV0IHNlYXJjaFR5cGVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVHlwZSlcclxuICAgICAgICAubWFwKGtleSA9PiAoeyB2YWx1ZTogdGhpcy5kYXRhVHlwZVtrZXldLCBrZXk6IGtleSB9KSk7XHJcbiAgICAgICAgc2VhcmNoVHlwZXMgPSBzZWFyY2hUeXBlcy5zbGljZShzZWFyY2hUeXBlcy5sZW5ndGggLyAyKTtcclxuICAgICAgICByZXR1cm4gc2VhcmNoVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NFUztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkZPTERFUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUlkKGl0ZW06IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5QUk9DRVNTX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLkRPQ1VNRU5UX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkTm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IHNlbGVjdGVkTm9kZS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBzZWxlY3RlZE5vZGUuaXRlbU51bWJlcklkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICAgICAgICBpZih0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShub2RlLmlkLCBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGlsZHJlbk9mRm9sZGVyKG5vZGU6IFRyZWVGbGF0Tm9kZSwgdHlwZTogRGF0YVR5cGUpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKCk7XHJcbiAgICAgICAgaXRlbS5pZCA9IG5vZGUuaWQ7XHJcbiAgICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgaXRlbS5pdGVtTmFtZSA9IG5vZGUubmFtZTtcclxuICAgICAgICBpdGVtLmxldmVsVHlwZSA9IG5vZGUubGV2ZWxUeXBlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xyXG4gICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xyXG4gICAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0geyAuLi5ub2RlIH07XHJcbiAgICAgICAgaWYoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhKVxyXG4gICAgICAgICAgICB0aGlzLm9uRXhwYW5kUHJvY2Vzc0FyZWEuZW1pdChpdGVtKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMub25FeHBhbmRGb2xkZXIuZW1pdChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5TaG93U2VhcmNoT3B0aW9uKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnMobW9kdWxlSWQpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0Tm9kZVRyZWVFdmVudChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBpZiAoIW5vZGUuaXRlbVR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSBcclxuICAgICAgICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguaXRlbVR5cGUgPT09IG5vZGUuaXRlbVR5cGUpO1xyXG4gICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoZWNrZWROb2RlTGlzdCh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA6IE5ld1RyZWVNb2RlbDtcclxuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIGlmKG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IG5vZGUuaXRlbVR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGEyLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSBcclxuICAgICAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMS5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgXHJcbiAgICAgICAgICAgICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaXRlbSl7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gaXRlbS5zdGF0dXNJZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBub2RlLml0ZW1UeXBlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBzdGF0dXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLmRpc3BsYXlJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZERhdGEobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkTm9kZVNlbGVjdE9uZShsaXN0Q2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gbGlzdENoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUsIHR5cGU6IERhdGFUeXBlKXtcclxuICAgICAgICBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xyXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwocGFyZW50VGV4dHMsIChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI18ke25vZGUucGFyZW50SWQgPyBub2RlLnBhcmVudElkIDogJyd9XyR7bm9kZS5pZH1fJHtub2RlLmxldmVsfWApO1xyXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLkRPQ1VNRU5UU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3VGl0bGUgPSBgJHt0aGlzLkxBTkcuTUVTU0FHRS5QUk9DRVNTRVNfSU4udG9VcHBlckNhc2UoKX0gXCIke25vZGUubmFtZX1cImA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSgpO1xyXG4gICAgICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIGl0ZW0uaXRlbU5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IG5ldyBUcmVlRmxhdE5vZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSB7IC4uLm5vZGUgfTtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdEZvbGRlckl0ZW0uZW1pdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFzU2VsZWN0ZWQocmVsYXRlZDogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xyXG4gICAgICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdG9SZWxhdGVkT3B0aW9ucyhyZWxhdGVkczogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdKTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWQgb2YgcmVsYXRlZHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsgLi4ucmVsYXRlZCwgZGlzYWJsZWQ6IHRoaXMuaGFzU2VsZWN0ZWQocmVsYXRlZCkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlkVG9DaGVja1NlbGVjdE9uZShpZDogc3RyaW5nLCBwYXJlbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2lkfS0ke3BhcmVudElkfWA7XHJcbiAgICB9XHJcbn1cclxuIl19
|
804
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXByb2Nlc3MtZG9jdW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50L3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVsRixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQVMxRyxNQUFNLE9BQU8sbUNBQW1DO0lBMkQ5QyxZQUNVLEtBQXdCLEVBQ3pCLFNBQWtDLEVBQ2xDLFNBQTRELEVBQzVELGFBQW9ELEVBQ25ELFlBQTZCLEVBQzdCLFNBQXVCLEVBQ3ZCLGNBQXNDLEVBQ3RDLElBQWdCLEVBQ1EsSUFBb0M7UUFSNUQsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBbUQ7UUFDNUQsa0JBQWEsR0FBYixhQUFhLENBQXVDO1FBQ25ELGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ1EsU0FBSSxHQUFKLElBQUksQ0FBZ0M7UUFuRXRFLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUdwQyxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQXdCLEVBQUUsQ0FBQztRQUNwQyxjQUFTLEdBQXdCLEVBQUUsQ0FBQztRQUlwQyxvQkFBZSxHQUF1QyxFQUFFLENBQUM7UUFDekQsaUJBQVksR0FBdUMsRUFBRSxDQUFDO1FBQ3RELGlCQUFZLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFFeEMsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLHNCQUFpQixHQUF1QyxFQUFFLENBQUM7UUFDM0QsdUJBQWtCLEdBQXVDLEVBQUUsQ0FBQztRQUc1RCxXQUFNLEdBQUcsVUFBVSxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFDcEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUl4Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixjQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM5QixvQkFBZSxHQUE2QixFQUFFLENBQUM7UUFDL0MsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBNkIsRUFBRSxDQUFDO1FBQy9DLG1CQUFjLEdBQWlCLElBQUksQ0FBQztRQUNwQyxtQkFBYyxHQUFXLElBQUksQ0FBQztRQUM5QiwwQkFBcUIsR0FBUSxFQUFFLENBQUM7UUFFaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDaEUsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDakUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM1RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3hDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFpQjVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLEtBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUN4RCxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVELGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxjQUFjLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQUs7UUFDYixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLGtCQUFrQixFQUFFO1lBQ2xELGtDQUFrQztTQUNuQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMxRCxJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3JGLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25EO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxJQUFJLGVBQWUsR0FBbUIsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLFlBQVksR0FBbUIsRUFBRSxDQUFDO2dCQUV0QyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNqQixJQUFJLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUN4QyxjQUFjLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzVCLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDcEMsY0FBYyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQzlDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDeEMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRTt3QkFDdEMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDdEM7eUJBQU07d0JBQ0wsSUFBSSxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDckMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUN6QyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3FCQUNoQztnQkFFSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO29CQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ3hCLElBQUksYUFBYSxHQUFtQixFQUFFLENBQUM7b0JBQ3ZDLElBQUksY0FBYyxHQUFtQixFQUFFLENBQUM7b0JBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUMvQixNQUFNLE9BQU8sR0FBRzs0QkFDZCxRQUFRLEVBQUUsS0FBSzs0QkFDZixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSzs0QkFDekYsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7NEJBQ3ZGLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTs0QkFDUixLQUFLLEVBQUUsQ0FBQzs0QkFDUixTQUFTLEVBQUUsU0FBUzs0QkFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFROzRCQUNoQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7eUJBQ3JCLENBQUM7d0JBQ0YsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFOzRCQUNuRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDNUIsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtvQ0FDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQ0FDN0I7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0NBQzVCLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7b0NBQy9CLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUNBQzlCOzRCQUNILENBQUMsQ0FBQyxDQUFDO3lCQUNKO29CQUVILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO29CQUNoRSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUNuSDtpQkFDRjthQUdGO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5RixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3BDLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNwQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQy9GLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDYixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekYsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNwQyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMvRixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ2IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMxQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQzthQUMzRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3ZELGlDQUFpQztZQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBaUM7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFDLE9BQUEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxPQUFLLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLENBQUEsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQ3RLLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQy9CLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUEsTUFBQSxPQUFPLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLEVBQUU7b0JBQ3BILE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3ZCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2dCQUMvQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFBLE1BQUEsT0FBTyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxFQUFFO29CQUNwSCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3BDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQy9CLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUEsTUFBQSxPQUFPLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLEVBQUU7b0JBQ3BILGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQy9CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2dCQUMvQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFBLE1BQUEsT0FBTyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxFQUFFO29CQUNwSCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztRQUNoRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2FBQ2hDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQThCO1FBQzVDLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNwQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDeEcsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUN6RixJQUFJLGFBQWEsSUFBSSxhQUFhLEVBQUU7WUFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2RztRQUVELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUM5RyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFMUYsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLGFBQWEsQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFO2dCQUMzQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLElBQUksQ0FBQzthQUM5RDtpQkFDSTtnQkFDSCxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsSUFBSSxDQUFDO2FBQzdDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO2FBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ25DLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtTQUNGO0lBQ0gsQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQWdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUNyQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxFQUFFO3dCQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ25DO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxpQ0FBaUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFnQztRQUM3QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBNEI7UUFDeEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQ2pDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQ3pDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3BKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDdEYsV0FBVztnQkFDWCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFOztvQkFDekQsT0FBTyxDQUFBLE1BQUEsQ0FBQyxDQUFDLEVBQUUsMENBQUUsV0FBVyxFQUFFLE1BQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6SyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRVIsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDOUM7aUJBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7O29CQUN4RCxPQUFPLENBQUEsTUFBQSxDQUFDLENBQUMsRUFBRSwwQ0FBRSxXQUFXLEVBQUUsTUFBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDUixJQUFJLGlCQUFpQixFQUFFO29CQUNyQixPQUFPO2lCQUNSO2dCQUNELElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QztTQUNGO0lBQ0gsQ0FBQztJQUVELDhCQUE4QixDQUFDLE1BQVc7UUFDeEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQTRCO1FBQ3hDLElBQUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDNUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsWUFBWSxDQUFDLENBQUM7UUFDOUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0MsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzRyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDMUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFO29CQUNuRixDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxXQUFXLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsVUFBVSxDQUFBO2FBQUEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0ksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNuRDtTQUNGO2FBQ0k7WUFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFOztnQkFBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7b0JBQ25GLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLFdBQVcsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUE7YUFBQSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBNEI7UUFDN0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyQyxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxZQUFZLENBQUMsQ0FBQztRQUM1QyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxZQUFZLENBQUMsQ0FBQztRQUM5QyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzNHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7U0FDN0I7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7WUFBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25HLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLFdBQVcsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUE7U0FBQSxDQUFDLENBQUM7UUFDM0ksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUMxRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxXQUFXLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFBLEVBQUEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDekssSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDM0I7d0JBQ0UsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3dCQUNsQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7d0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDdkIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO3dCQUM5QixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7d0JBQ2hDLEtBQUssRUFBRSxDQUFDO3dCQUNSLFFBQVEsRUFBRSxLQUFLO3dCQUNmLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTt3QkFDbEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxVQUFVO3FCQUNqQyxDQUFDLENBQUM7aUJBQ047YUFDRjtpQkFDSTtnQkFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxXQUFXLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFBLEVBQUEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdkssSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDekI7d0JBQ0UsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFO3dCQUNsQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7d0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDdkIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO3dCQUM5QixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7d0JBQ2hDLEtBQUssRUFBRSxDQUFDO3dCQUNSLFFBQVEsRUFBRSxLQUFLO3dCQUNmLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTt3QkFDbEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxVQUFVO3FCQUNqQyxDQUNGLENBQUM7aUJBQ0g7YUFDRjtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ2hELENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQWtCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxJQUFJLEdBQUc7b0JBQ1gsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztvQkFDdkYsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztvQkFDckYsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUNSLEtBQUssRUFBRSxDQUFDO29CQUNSLFNBQVMsRUFBRSxTQUFTO29CQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVE7b0JBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtpQkFDckIsQ0FBQztnQkFDRixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOzt3QkFDNUIsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7NEJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUMsRUFBRTs0QkFDN0UsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDMUI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7O3dCQUM1QixJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTs0QkFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxPQUFLLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLENBQUEsQ0FBQyxFQUFFOzRCQUM3RSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUMzQjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQzVFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2dCQUFDLE9BQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtvQkFDaEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxPQUFLLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQTthQUFBLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pILElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEQ7U0FDRjthQUNJO1lBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFO29CQUMvRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFBO2FBQUEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekgsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsRDtTQUNGO0lBQ0gsQ0FBQztJQUVELGlDQUFpQyxDQUFDLElBQTRCO1FBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU07WUFDOUUsS0FBSyxFQUFFLENBQUM7WUFDUixRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTTtZQUM1RSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFNO1FBQ25CLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFBQSxDQUFDO0lBRUYsVUFBVTtRQUNSLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO2FBQzNCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsNkJBQTZCLENBQUMsU0FBUztRQUNyQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFaEksQ0FBQztJQUVELDRCQUE0QixDQUFDLFNBQVM7UUFDcEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTlILENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDN0QsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFvQixFQUFFLGFBQXNCO1FBQzFELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2pDLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RztRQUVELE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFpQztRQUMvQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQWM7UUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQTRCO1FBQ3RDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN0QixLQUFLLGdCQUFnQixDQUFDLGdCQUFnQjt3QkFDcEMsT0FBTyw0QkFBNEIsQ0FBQztvQkFDdEMsS0FBSyxnQkFBZ0IsQ0FBQyxjQUFjO3dCQUNsQyxPQUFPLDBCQUEwQixDQUFDO29CQUNwQyxLQUFLLGdCQUFnQixDQUFDLFNBQVM7d0JBQzdCLE9BQU8sNEJBQTRCLENBQUM7b0JBQ3RDLEtBQUssZ0JBQWdCLENBQUMsTUFBTTt3QkFDMUIsT0FBTyx1QkFBdUIsQ0FBQztvQkFDakM7d0JBQ0UsT0FBTyxpQkFBaUIsQ0FBQztpQkFDNUI7YUFDRjtZQUNELEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ3RCLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO3dCQUNwQyxPQUFPLHFCQUFxQixDQUFDO29CQUMvQixLQUFLLGdCQUFnQixDQUFDLGNBQWM7d0JBQ2xDLE9BQU8sbUJBQW1CLENBQUM7b0JBQzdCLEtBQUssZ0JBQWdCLENBQUMsU0FBUzt3QkFDN0IsT0FBTyxxQkFBcUIsQ0FBQztvQkFDL0IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO3dCQUMxQixPQUFPLGdCQUFnQixDQUFDO29CQUMxQjt3QkFDRSxPQUFPLFVBQVUsQ0FBQztpQkFDckI7YUFDRjtZQUNELEtBQUssUUFBUSxDQUFDLElBQUk7Z0JBQ2hCLE9BQU8sdUJBQXVCLENBQUM7WUFDakMsS0FBSyxRQUFRLENBQUMsT0FBTztnQkFDbkIsT0FBTyxTQUFTLENBQUM7WUFDbkI7Z0JBQ0UsT0FBTyxpQkFBaUIsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ25CLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxRQUFRLENBQUMsT0FBTztnQkFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2hDLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsS0FBSyxRQUFRLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsSUFBNEI7UUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQzNDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM1RTthQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDN0U7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUE0QjtRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFDLE9BQUEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxPQUFLLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLENBQUEsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQ2xLLElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztnQkFDekIsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUTtnQkFDL0IsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUTtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVk7YUFDeEMsQ0FBQyxDQUFDO1NBQ0o7YUFDSTtZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDN0U7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBSTtRQUNqQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQUMsT0FBQSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuSyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBa0IsRUFBRSxJQUFjO1FBQ3BELElBQUksSUFBSSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLHFCQUFRLElBQUksQ0FBRSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUVwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFrQjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7WUFBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7bUJBQ3pGLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUE7U0FBQSxDQUFDLENBQUM7UUFDckgsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUN6QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQ3RCLENBQUMsQ0FBQztZQUNILE9BQU87U0FDUjthQUNJO1lBQ0gsSUFBSSxJQUFrQixDQUFDO1lBQ3ZCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFFLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTs7b0JBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFOzJCQUN2RSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLE9BQUssTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxXQUFXLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFBO2lCQUFBLENBQUMsQ0FBQzthQUN6SDtpQkFDSTtnQkFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7O29CQUFDLE9BQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTsyQkFDdkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLFdBQVcsRUFBRSxPQUFLLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsV0FBVyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQTtpQkFBQSxDQUFDLENBQUM7YUFDekg7WUFDRCxJQUFJLElBQUksRUFBRTtnQkFDUixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDeEI7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3RCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixNQUFNLEVBQUUsTUFBTTtnQkFDZCxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxZQUFZO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQztJQUM1QyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQWtCLEVBQUUsSUFBYztRQUNoRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNsRixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDbEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNsSCxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDbEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7YUFDeEY7aUJBQ0ksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO2FBQ3hGO1lBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IscUJBQVEsSUFBSSxDQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBK0I7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFrQztRQUNqRCxNQUFNLE9BQU8sR0FBNkIsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLGlDQUFNLE9BQU8sS0FBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBRyxDQUFDO1NBQ25FO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxRQUFnQjtRQUM3QyxPQUFPLEdBQUcsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OztZQXp6QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLG04U0FBdUQ7Z0JBRXZELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN0Qzs7O1lBN0IwQixpQkFBaUI7WUFZbkMsdUJBQXVCO1lBVHZCLFlBQVk7WUFrQloscUNBQXFDO1lBakJyQyxlQUFlO1lBQ2YsWUFBWTtZQVFaLHNCQUFzQjtZQWIwQixVQUFVO1lBa0IxRCw4QkFBOEIsdUJBZ0ZsQyxNQUFNLFNBQUMsZUFBZTs7O3dCQWJ4QixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsRUFBRTsyQkFFakMsU0FBUyxTQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7d0JBeUNuRixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJLCBQIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW0vZGF0YS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW0vZG9jdW1lbnQtbm9kZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBNb2R1bGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW0vbW9kdWxlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFJlbGF0ZWRDb25zdCB9IGZyb20gJy4uLy4uL2NvbW1vbi9yZWxhdGVkLmNvbnN0JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IE5ld1RyZWVNb2RlbCB9IGZyb20gJy4uL3RyZWVOZXcvbW9kZWwvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IE5ld1RyZWVDb21wb25lbnQgfSBmcm9tICcuLi90cmVlTmV3L3RyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvcG9wLXVwLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtIH0gZnJvbSAnLi9tb2RlbHMvcW1zLXByb2Nlc3MtZG9jdW1lbnQtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50SXRlbSB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGVkLXByb2Nlc3MtZG9jdW1lbnQtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LWdsb2JhbC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBMQU5HOiBhbnk7XHJcbiAgbW9kdWxlSWQgPSAwO1xyXG4gIG1vZHVsZU5hbWUgPSAnJztcclxuICB0cmVlRGF0YTE6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcclxuICB0cmVlRGF0YTI6IEFycmF5PE5ld1RyZWVNb2RlbD4gPSBbXTtcclxuICB0cmVlQ29uZmlnMTogVHJlZUNvbmZpZztcclxuICB0cmVlQ29uZmlnMjogVHJlZUNvbmZpZztcclxuXHJcbiAgY2hlY2tlZE5vZGVMaXN0OiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgc2VsZWN0ZWROb2RlOiBBcnJheTxTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0+ID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcbiAgc2VsZWN0ZWREYXRhMjogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICBjb21tb25DaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gIGRvY3VtZW50Q2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuICBzaW5nbGVQcm9jZXNzTGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gIHNpbmdsZURvY3VtZW50TGlzdDogQXJyYXk8U2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtPiA9IFtdO1xyXG4gIHNwbGl0VmlldzogYm9vbGVhbjtcclxuXHJcbiAgbW9kdWxlID0gTW9kdWxlVHlwZTtcclxuICBkYXRhVHlwZSA9IERhdGFUeXBlO1xyXG4gIGl0ZW1UeXBlID0gMDtcclxuICBzZWxlY3RlZFJpc2tEYXRhOiBhbnkgPSBbXTtcclxuICBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xyXG4gIGRpc2FibGVkTGlzdDI6IGFueSA9IFtdO1xyXG4gIGlzU2VsZWN0T25lOiBib29sZWFuO1xyXG4gIGNhbk9ubHlTZWxlY3RJdGVtOiBib29sZWFuO1xyXG5cclxuICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gIGlzQ29tbW9uRXhwYW5kZWQgPSB0cnVlO1xyXG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xyXG4gIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gIG15Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIGZpbHRlcmVkT3B0aW9uczogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XHJcbiAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XHJcblxyXG4gIGl0ZW1JblNwbGl0dmlldzogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbVtdID0gW107XHJcbiAgc2VsZWN0ZWRGb2xkZXI6IFRyZWVGbGF0Tm9kZSA9IG51bGw7XHJcbiAgc3BsaXRWaWV3VGl0bGU6IHN0cmluZyA9IG51bGw7XHJcbiAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuXHJcbiAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25TZWxlY3RGb2xkZXJJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNQcm9jZXNzRG9jdW1lbnRJdGVtPigpO1xyXG4gIG9uRXhwYW5kUHJvY2Vzc0FyZWEgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0+KCk7XHJcbiAgcGFyZW50Tm9kZVNlbGVjdGVkID0gbmV3IFRyZWVGbGF0Tm9kZSgpO1xyXG4gIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcclxuICB0cmVlQ29udHJvbE5vZGVEb2N1bWVudDogYW55O1xyXG4gIGlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgaGlkZVNwbGl0dmlld0NoZWNrYm94ID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oTmV3VHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PE5ld1RyZWVDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXHJcbiAgYXV0b0NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudD4sXHJcbiAgICBwdWJsaWMgZ2xvYmFsU2VydmljZTogUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSxcclxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhXHJcbiAgKSB7XHJcbiAgICB0aGlzLm1vZHVsZUlkID0gZGF0YS5tb2R1bGVJZDtcclxuICAgIHRoaXMubW9kdWxlTmFtZSA9IGRhdGEubW9kdWxlTmFtZTtcclxuICAgIHRoaXMudHJlZURhdGExID0gZGF0YS50cmVlRGF0YTE7XHJcbiAgICB0aGlzLnRyZWVEYXRhMiA9IGRhdGEudHJlZURhdGEyO1xyXG4gICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XHJcbiAgICB0aGlzLnRyZWVDb25maWcyID0gZGF0YS50cmVlQ29uZmlnMjtcclxuICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XHJcbiAgICB0aGlzLmRpc2FibGVkTGlzdCA9IGRhdGEuZGlzYWJsZWRMaXN0IHx8IFtdO1xyXG4gICAgdGhpcy5kaXNhYmxlZExpc3QyID0gZGF0YS5kaXNhYmxlZExpc3QyIHx8IFtdO1xyXG4gICAgdGhpcy5zcGxpdFZpZXcgPSBkYXRhLnNwbGl0VmlldztcclxuICAgIHRoaXMuaXNTZWxlY3RPbmUgPSBkYXRhLmlzU2VsZWN0T25lO1xyXG4gICAgdGhpcy5jYW5Pbmx5U2VsZWN0SXRlbSA9IGRhdGEuY2FuT25seVNlbGVjdEl0ZW07XHJcbiAgICB0aGlzLmhpZGVTcGxpdHZpZXdDaGVja2JveCA9IGRhdGEuaGlkZVNwbGl0dmlld0NoZWNrYm94O1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShbXSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuZGF0YSA9PT0gUmVsYXRlZENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy50b1JlbGF0ZWRPcHRpb25zKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zcGxpdFZpZXdWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IHJlcztcclxuICAgICAgaWYgKHJlcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgbGlzdE5vZGVQcm9jZXNzOiBOZXdUcmVlTW9kZWxbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IE5ld1RyZWVNb2RlbFtdID0gW107XHJcblxyXG4gICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld05vZGVQcm9jZXNzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgbmV3Tm9kZVByb2Nlc3MubmFtZSA9IGl0ZW0uaXRlbU5hbWU7XHJcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5zdGF0dXNJZCA9IGl0ZW0uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcclxuICAgICAgICAgICAgbGlzdE5vZGVQcm9jZXNzLnB1c2gobmV3Tm9kZVByb2Nlc3MpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xyXG4gICAgICAgICAgICBsaXN0Tm9kZURvY3MucHVzaChuZXdOb2RlRG9jcyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcbiAgICAgICAgICBsZXQgc2VsZWN0UHJvY2VzczogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdOb2RlID0ge1xyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiAoeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICBoYXNDaGlsZDogKHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlcikgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YTEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIHguaWQgPT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0UHJvY2Vzcy5wdXNoKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdERvY3VtZW50LnB1c2gobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcclxuICAgICAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZSh0aGlzLmNoZWNrZWROb2RlTGlzdFswXS5pZCwgdGhpcy5jaGVja2VkTm9kZUxpc3RbMF0ucGFyZW50SWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvY2Vzc0FyZWFDaGlsZHJlbi5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLmxlbmd0aCA+IDAgJiYgdGhpcy5kYXRhVHJlZXMpIHtcclxuICAgICAgICBsZXQgbm90U2hvd25DaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCAmJiBpdGVtLnBhcmVudElkID09PSB4LnBhcmVudElkICYmIHguZXhwYW5kYWJsZSA9PSBpdGVtLmV4cGFuZGFibGUpO1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBub3RTaG93bkNoaWxkcmVuLnB1c2goeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YTEgPSBbLi4udGhpcy50cmVlRGF0YTEsIC4uLm5vdFNob3duQ2hpbGRyZW5dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0Rm9sZGVyQ2hpbGRyZW4ucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5sZW5ndGggPiAwICYmIHRoaXMuZGF0YVRyZWVzKSB7XHJcbiAgICAgICAgbGV0IG5vdFNob3duQ2hpbGRyZW4gPSBbXTtcclxuICAgICAgICByZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KFxyXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0uaWQgPT09IHguaWQgJiYgaXRlbS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCAmJiB4LmV4cGFuZGFibGUgPT0gaXRlbS5leHBhbmRhYmxlKTtcclxuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgbm90U2hvd25DaGlsZHJlbi5wdXNoKHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCAuLi5ub3RTaG93bkNoaWxkcmVuXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUucHJvY2VzcztcclxuICAgIHRoaXMuc2VhcmNoT3JkZXIgPSB0aGlzLmdldFNlYXJjaE9yZGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgLy8gdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgIHRoaXMuc2V0UmVzdWx0SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbTogU2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XHJcblxyXG4gICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgY29uc3QgdGVtcEFyciA9IFtdO1xyXG4gICAgY29uc3QgdGVtcEFyckRvY3VtZW50ID0gW107XHJcbiAgICBjb25zdCBuZXdTZWxlY3RQcm9jZXNzTGlzdCA9IFtdO1xyXG4gICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5jb21tb25DaGVja2VkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICB0ZW1wQXJyLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2luZ2xlUHJvY2Vzc0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0UHJvY2Vzc0xpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xyXG4gICAgaWYgKHRlbXBBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50ZW1wQXJyXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgdGVtcEFyckRvY3VtZW50LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgIG5ld1NlbGVjdERvY3VtZW50TGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0ID0gbmV3U2VsZWN0RG9jdW1lbnRMaXN0O1xyXG4gICAgaWYgKHRlbXBBcnJEb2N1bWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50ZW1wQXJyRG9jdW1lbnRdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlc3VsdEhlaWdodChhcnI/OiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10pIHtcclxuICAgIGxldCBtYXhIZWlnaHQgPSA0ODQ7XHJcbiAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChwb3B1cF9jb250ZW50ICYmIGxpbmVfX2RpdmlkZXIpIHtcclxuICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGlmICh2aWV3cmVwb3J0cykge1xyXG4gICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgdmlld3JlcG9ydHMuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHR9cHhgO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XHJcbiAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKCEhX3ZhbCkge1xyXG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZVtpbmRleF07XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcclxuICAgICAgICAgIGlmIChmaXJzdEVsLmlkID09PSBzZWNvbmRFbC5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NlYXJjaFJlc3VsdCgpIHtcclxuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHJlbGF0ZWQgPyByZWxhdGVkLml0ZW1OYW1lIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UmVsYXRlZChpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gW107XHJcbiAgICBpZiAodGhpcy50cmVlQ29uZmlnMS5zaG93Q2hlY2tCb3gpIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgJiYgeC5pdGVtVHlwZSA9PT0gaXRlbS5pdGVtVHlwZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50IHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgLy8gZG9jdW1lbnRcclxuICAgICAgICBjb25zdCBpc0V4aXN0SW5EaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRMaXN0Mi5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geC5pZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICYmIHguaXRlbVR5cGUgPT09IGl0ZW0uaXRlbVR5cGUpO1xyXG4gICAgICAgIH0pID49IDA7XHJcblxyXG4gICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZUFuZFNlbGVjdGVkRGF0YShpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geC5pZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICYmIHguaXRlbVR5cGUgPT09IGl0ZW0uaXRlbVR5cGUpO1xyXG4gICAgICAgIH0pID49IDA7XHJcbiAgICAgICAgaWYgKGlzRXhpc3RJbkRpc2FibGVkKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkVG9DaGVja2xpc3ROb2RlQW5kU2VsZWN0ZWREYXRhKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb24oJGV2ZW50OiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFkZE5vZGVUb1RyZWUoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgbGV0IG5ld05vZGVEb2NzID0gbmV3IE5ld1RyZWVNb2RlbCgpO1xyXG4gICAgbmV3Tm9kZURvY3MuaWQgPSBpdGVtLmlkO1xyXG4gICAgbmV3Tm9kZURvY3MubmFtZSA9IGl0ZW0uaXRlbU5hbWU7XHJcbiAgICBuZXdOb2RlRG9jcy5wYXJlbnRJZCA9IGl0ZW0ucGFyZW50SWQ7XHJcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNJZCA9IGl0ZW0/LlsnaXRlbVN0YXR1cyddO1xyXG4gICAgbmV3Tm9kZURvY3Muc3RhdHVzTmFtZSA9IGl0ZW0/Llsnc3RhdHVzTmFtZSddO1xyXG4gICAgbmV3Tm9kZURvY3MuZGlzcGxheUlkID0gK2l0ZW0uaXRlbU51bWJlcklkO1xyXG4gICAgbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSA9IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyIHx8IGl0ZW0uaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAoIW5ld05vZGVEb2NzLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IG5ld05vZGVEb2NzLmV4cGFuZGFibGUpID49IDApIHtcclxuICAgICAgICB0aGlzLnRyZWVEYXRhMiA9IFsuLi50aGlzLnRyZWVEYXRhMiwgbmV3Tm9kZURvY3NdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCBuZXdOb2RlRG9jc107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFRvQ2hlY2tsaXN0Tm9kZShpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICBsZXQgbmV3Tm9kZURvY3MgPSBuZXcgTmV3VHJlZU1vZGVsKCk7XHJcbiAgICBuZXdOb2RlRG9jcy5pZCA9IGl0ZW0uaWQ7XHJcbiAgICBuZXdOb2RlRG9jcy5uYW1lID0gaXRlbS5pdGVtTmFtZTtcclxuICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gaXRlbS5wYXJlbnRJZDtcclxuICAgIG5ld05vZGVEb2NzLnN0YXR1c0lkID0gaXRlbT8uWydpdGVtU3RhdHVzJ107XHJcbiAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbT8uWydzdGF0dXNOYW1lJ107XHJcbiAgICBuZXdOb2RlRG9jcy5kaXNwbGF5SWQgPSAraXRlbS5pdGVtTnVtYmVySWQ7XHJcbiAgICBuZXdOb2RlRG9jcy5leHBhbmRhYmxlID0gaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgfHwgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5pZC50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICghbmV3Tm9kZURvY3MucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSk7XHJcbiAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5ld05vZGVEb2NzLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbmV3Tm9kZURvY3MuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBuZXdOb2RlRG9jcy5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LnB1c2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpZDogbmV3Tm9kZURvY3MuaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogbmV3Tm9kZURvY3MubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtVHlwZTogaXRlbS5pdGVtVHlwZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbmV3Tm9kZURvY3MucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBuZXdOb2RlRG9jcy5sZXZlbFR5cGUsXHJcbiAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IG5ld05vZGVEb2NzLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IG5ld05vZGVEb2NzLmV4cGFuZGFibGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QucHVzaCh7XHJcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXHJcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgaXRlbU5hbWU6IG5ld05vZGVEb2NzLm5hbWUsXHJcbiAgICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbVR5cGUsXHJcbiAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnBhcmVudElkLFxyXG4gICAgICAgIHBhcmVudE5hbWU6IGl0ZW0ucGFyZW50TmFtZSxcclxuICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxyXG4gICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGUsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogbmV3Tm9kZURvY3MuZXhwYW5kYWJsZSxcclxuICAgICAgICBzdGF0dXNOYW1lOiBpdGVtLnN0YXR1c05hbWUsXHJcbiAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICBkaXNwbGF5SWQ6IE51bWJlci5wYXJzZUZsb2F0KGl0ZW0uaXRlbU51bWJlcklkKVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3ICYmIHRoaXMuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgICB0aGlzLmlkQ2hlY2tJY29uU3BsaXRWaWV3ID0gdGhpcy5pZFRvQ2hlY2tTZWxlY3RPbmUoaXRlbS5pZCwgbmV3Tm9kZURvY3MucGFyZW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTZWxlY3RlZERhdGEoaXRlbTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RQcm9jZXNzID0gW107XHJcbiAgICBjb25zdCBzZWxlY3REb2N1bWVudCA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XHJcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICBoYXNDaGlsZDogeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhIHx8IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgICgheC5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgIHNlbGVjdFByb2Nlc3MucHVzaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgICAgICAoIXgucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhMiwgLi4uc2VsZWN0RG9jdW1lbnRdO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmZvbGRlciB8fCBpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGEyLmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgKCFpdGVtLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gaXRlbS5leHBhbmRhYmxlKSA8IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEyLCBpdGVtXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICghaXRlbS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT09IGl0ZW0uZXhwYW5kYWJsZSkgPCAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIGl0ZW1dO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUb0NoZWNrbGlzdE5vZGVBbmRTZWxlY3RlZERhdGEoaXRlbTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgdGhpcy5hZGRUb0NoZWNrbGlzdE5vZGUoaXRlbSk7XHJcbiAgICB0aGlzLmFkZFNlbGVjdGVkRGF0YSh7XHJcbiAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICBuYW1lOiBpdGVtLml0ZW1OYW1lLFxyXG4gICAgICBleHBhbmRhYmxlOiBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIsXHJcbiAgICAgIGxldmVsOiAwLFxyXG4gICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgIGhhc0NoaWxkOiBpdGVtLml0ZW1UeXBlID09IERhdGFUeXBlLmFyZWEgfHwgaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5mb2xkZXIsXHJcbiAgICAgIGl0ZW1UeXBlOiBpdGVtLml0ZW1UeXBlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFR5cGVQcm9jZXNzKGV4cGFuZCkge1xyXG4gICAgcmV0dXJuIGV4cGFuZCA/IHRoaXMuZGF0YVR5cGUuYXJlYSA6IHRoaXMuZGF0YVR5cGUucHJvY2VzcztcclxuICB9XHJcblxyXG4gIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfTtcclxuXHJcbiAgb25BZGRDbGljaygpIHtcclxuICAgIC8vIGlmICh0aGlzLnRyZWVDb25maWcxLnNob3dDaGVja0JveCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IFtdO1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5jaGVja2VkTm9kZUxpc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzTmFtZShpZCkge1xyXG4gICAgbGV0IHN0YXR1c05hbWUgPSAnJztcclxuICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmlkKSB7XHJcbiAgICAgICAgc3RhdHVzTmFtZSA9IHguc3RhdHVzTmFtZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1c05hbWU7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RUcmVlQ29udHJvbE5vZGVEb2N1bWVudCh0cmVlTm9kZXMpIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSBudWxsO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudCA9IHRyZWVOb2RlcztcclxuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQuZGF0YU5vZGVzID0gdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICB9XHJcblxyXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZVByb2Nlc3ModHJlZU5vZGVzKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MgPSBudWxsO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gdHJlZU5vZGVzO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzLmRhdGFOb2RlcyA9IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFN0YXR1c0RvY3MoaWQpIHtcclxuICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmlkID09PSBpZClbMF0uc3RhdHVzSWQ7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNQcm9jZXNzKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlRGF0YTEuZmlsdGVyKHggPT4geC5pZCA9PT0gaWQpWzBdLnN0YXR1c0lkO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2Zmc2V0SGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmNsdWRlTWFyZ2luOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xyXG5cclxuICAgIGVsbUhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcclxuICAgICAgZWxtTWFyZ2luID0gcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Ub3AucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20ucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoZWxtSGVpZ2h0ICsgZWxtTWFyZ2luKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1DaGlwTmFtZShpdGVtOiBTZWxlY3RlZFByb2Nlc3NEb2N1bWVudEl0ZW0pIHtcclxuICAgIHJldHVybiBpdGVtLml0ZW1OYW1lO1xyXG4gIH1cclxuXHJcbiAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGUgPyAoZS5jbGllbnRXaWR0aCA8IGUuc2Nyb2xsV2lkdGgpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXROb2RlSWNvbihpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6IHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XHJcbiAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Ub3BGb2xkZXI6XHJcbiAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OiB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkRlcGFydG1lbnRGb2xkZXI6XHJcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuUmVnaW9uYWxGb2xkZXI6XHJcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5Gb2xkZXI6XHJcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcclxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaE9yZGVyKCkge1xyXG4gICAgbGV0IHNlYXJjaFR5cGVzID0gT2JqZWN0LmtleXModGhpcy5kYXRhVHlwZSlcclxuICAgICAgLm1hcChrZXkgPT4gKHsgdmFsdWU6IHRoaXMuZGF0YVR5cGVba2V5XSwga2V5OiBrZXkgfSkpO1xyXG4gICAgc2VhcmNoVHlwZXMgPSBzZWFyY2hUeXBlcy5zbGljZShzZWFyY2hUeXBlcy5sZW5ndGggLyAyKTtcclxuICAgIHJldHVybiBzZWFyY2hUeXBlcztcclxuICB9XHJcblxyXG4gIGdldFRpdGxlKHR5cGU6IG51bWJlcikge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NFUztcclxuICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU19BUkVBO1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xyXG4gICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcclxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkZPTERFUjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1JZChpdGVtOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKSB7XHJcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLkxBTkcuUFJPQ0VTU19JRH06ICR7aXRlbS5pdGVtTnVtYmVySWR9OyAke2l0ZW0uc3RhdHVzTmFtZX1gO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCkge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLkRPQ1VNRU5UX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZCh4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICBpZiAoc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICBpZDogc2VsZWN0ZWROb2RlLmlkLFxyXG4gICAgICAgIGl0ZW1OYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgIHBhcmVudElkOiBzZWxlY3RlZE5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXHJcbiAgICAgICAgaXRlbVR5cGU6IHNlbGVjdGVkTm9kZS5pdGVtVHlwZSxcclxuICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcclxuICAgICAgICBpdGVtTnVtYmVySWQ6IHNlbGVjdGVkTm9kZS5pdGVtTnVtYmVySWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICBpZiAodGhpcy5zcGxpdFZpZXcgJiYgdGhpcy5pc1NlbGVjdE9uZSkge1xyXG4gICAgICAgIHRoaXMuaWRDaGVja0ljb25TcGxpdFZpZXcgPSB0aGlzLmlkVG9DaGVja1NlbGVjdE9uZShub2RlLmlkLCBub2RlLnBhcmVudElkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNOb2RlU2VsZWN0ZWQobm9kZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xyXG4gICAgbGV0IGl0ZW0gPSBuZXcgUU1TUHJvY2Vzc0RvY3VtZW50SXRlbSgpO1xyXG4gICAgaXRlbS5pZCA9IG5vZGUuaWQ7XHJcbiAgICBpdGVtLml0ZW1UeXBlID0gdHlwZTtcclxuICAgIGl0ZW0uaXRlbU5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICBpdGVtLmxldmVsVHlwZSA9IG5vZGUubGV2ZWxUeXBlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IG5ldyBUcmVlRmxhdE5vZGUoKTtcclxuICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0geyAuLi5ub2RlIH07XHJcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhKVxyXG4gICAgICB0aGlzLm9uRXhwYW5kUHJvY2Vzc0FyZWEuZW1pdChpdGVtKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgY2FuU2hvd1NlYXJjaE9wdGlvbihtb2R1bGVJZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnMobW9kdWxlSWQpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICBpZiAoIW5vZGUuaXRlbVR5cGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcclxuICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguaXRlbVR5cGUgPT09IG5vZGUuaXRlbVR5cGUpO1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXHJcbiAgICAgICAgaXRlbVR5cGU6IG5vZGUuaXRlbVR5cGUsXHJcbiAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXHJcbiAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGl0ZW06IE5ld1RyZWVNb2RlbDtcclxuICAgICAgbGV0IHN0YXR1cyA9IDA7XHJcbiAgICAgIGxldCBzdGF0dXNOYW1lID0gJyc7XHJcbiAgICAgIGlmIChub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciB8fCBub2RlLml0ZW1UeXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgaXRlbSA9IHRoaXMudHJlZURhdGEyLmZpbmQoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PSBub2RlLmV4cGFuZGFibGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGl0ZW0gPSB0aGlzLnRyZWVEYXRhMS5maW5kKHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICYmICghbm9kZS5wYXJlbnRJZCB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSAmJiB4LmV4cGFuZGFibGUgPT0gbm9kZS5leHBhbmRhYmxlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHN0YXR1c05hbWUgPSBpdGVtLnN0YXR1c05hbWU7XHJcbiAgICAgICAgc3RhdHVzID0gaXRlbS5zdGF0dXNJZDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFkZFRvQ2hlY2tsaXN0Tm9kZSh7XHJcbiAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcclxuICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICBpdGVtVHlwZTogbm9kZS5pdGVtVHlwZSxcclxuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICBzdGF0dXNOYW1lOiBzdGF0dXNOYW1lLFxyXG4gICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcclxuICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmFkZFNlbGVjdGVkRGF0YShub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENoaWxkTm9kZVNlbGVjdE9uZShsaXN0Q2hpbGRyZW4pIHtcclxuICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gW107XHJcbiAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IGxpc3RDaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUsIHR5cGU6IERhdGFUeXBlKSB7XHJcbiAgICBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xyXG4gICAgICBbXS5mb3JFYWNoLmNhbGwocGFyZW50VGV4dHMsIChlbCkgPT4ge1xyXG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1pdGVtJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgW10uZm9yRWFjaC5jYWxsKGl0ZW1FbGVtZW50LCAoZWwpID0+IHtcclxuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLkRPQ1VNRU5UU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSB0aGlzLmRhdGFUeXBlLmFyZWEpIHtcclxuICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuUFJPQ0VTU0VTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpdGVtID0gbmV3IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW0oKTtcclxuICAgICAgaXRlbS5pZCA9IG5vZGUuaWQ7XHJcbiAgICAgIGl0ZW0uaXRlbVR5cGUgPSB0eXBlO1xyXG4gICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICBpdGVtLmxldmVsVHlwZSA9IG5vZGUubGV2ZWxUeXBlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcclxuICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XHJcbiAgICAgIHRoaXMucGFyZW50Tm9kZVNlbGVjdGVkID0geyAuLi5ub2RlIH07XHJcbiAgICAgIHRoaXMub25TZWxlY3RGb2xkZXJJdGVtLmVtaXQoaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3RlZChyZWxhdGVkOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhcnJEaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5jb25jYXQodGhpcy5kaXNhYmxlZExpc3QyKTtcclxuICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpKTtcclxuICB9XHJcblxyXG4gIHRvUmVsYXRlZE9wdGlvbnMocmVsYXRlZHM6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSk6IFFNU1Byb2Nlc3NEb2N1bWVudEl0ZW1bXSB7XHJcbiAgICBjb25zdCByZXN1bHRzOiBRTVNQcm9jZXNzRG9jdW1lbnRJdGVtW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgcmVsYXRlZCBvZiByZWxhdGVkcykge1xyXG4gICAgICByZXN1bHRzLnB1c2goeyAuLi5yZWxhdGVkLCBkaXNhYmxlZDogdGhpcy5oYXNTZWxlY3RlZChyZWxhdGVkKSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgaWRUb0NoZWNrU2VsZWN0T25lKGlkOiBzdHJpbmcsIHBhcmVudElkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBgJHtpZH0tJHtwYXJlbnRJZH1gO1xyXG4gIH1cclxufVxyXG4iXX0=
|